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