Blame


1 0fc65b37 2004-03-21 devnull #include "os.h"
2 0fc65b37 2004-03-21 devnull #include <mp.h>
3 0fc65b37 2004-03-21 devnull #include <libsec.h>
4 0fc65b37 2004-03-21 devnull
5 0fc65b37 2004-03-21 devnull int
6 0fc65b37 2004-03-21 devnull egverify(EGpub *pub, EGsig *sig, mpint *m)
7 0fc65b37 2004-03-21 devnull {
8 0fc65b37 2004-03-21 devnull mpint *p = pub->p, *alpha = pub->alpha;
9 0fc65b37 2004-03-21 devnull mpint *r = sig->r, *s = sig->s;
10 0fc65b37 2004-03-21 devnull mpint *v1, *v2, *rs;
11 0fc65b37 2004-03-21 devnull int rv = -1;
12 0fc65b37 2004-03-21 devnull
13 0fc65b37 2004-03-21 devnull if(mpcmp(r, mpone) < 0 || mpcmp(r, p) >= 0)
14 0fc65b37 2004-03-21 devnull return rv;
15 0fc65b37 2004-03-21 devnull v1 = mpnew(0);
16 0fc65b37 2004-03-21 devnull rs = mpnew(0);
17 0fc65b37 2004-03-21 devnull v2 = mpnew(0);
18 0fc65b37 2004-03-21 devnull mpexp(pub->key, r, p, v1);
19 0fc65b37 2004-03-21 devnull mpexp(r, s, p, rs);
20 0fc65b37 2004-03-21 devnull mpmul(v1, rs, v1);
21 0fc65b37 2004-03-21 devnull mpmod(v1, p, v1);
22 0fc65b37 2004-03-21 devnull mpexp(alpha, m, p, v2);
23 0fc65b37 2004-03-21 devnull if(mpcmp(v1, v2) == 0)
24 0fc65b37 2004-03-21 devnull rv = 0;
25 0fc65b37 2004-03-21 devnull mpfree(v1);
26 0fc65b37 2004-03-21 devnull mpfree(rs);
27 0fc65b37 2004-03-21 devnull mpfree(v2);
28 0fc65b37 2004-03-21 devnull return rv;
29 0fc65b37 2004-03-21 devnull }