Blob
1 #include "os.h"2 #include <mp.h>3 #include <libsec.h>5 int6 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;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 }