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