egverify.c (519B)
1 #include "os.h" 2 #include <mp.h> 3 #include <libsec.h> 4 5 int 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 }