| #include "os.h" | |
| #include <mp.h> | |
| #include <libsec.h> | |
| int | |
| egverify(EGpub *pub, EGsig *sig, mpint *m) | |
| { | |
| mpint *p = pub->p, *alpha = pub->alpha; | |
| mpint *r = sig->r, *s = sig->s; | |
| mpint *v1, *v2, *rs; | |
| int rv = -1; | |
| if(mpcmp(r, mpone) < 0 || mpcmp(r, p) >= 0) | |
| return rv; | |
| v1 = mpnew(0); | |
| rs = mpnew(0); | |
| v2 = mpnew(0); | |
| mpexp(pub->key, r, p, v1); | |
| mpexp(r, s, p, rs); | |
| mpmul(v1, rs, v1); | |
| mpmod(v1, p, v1); | |
| mpexp(alpha, m, p, v2); | |
| if(mpcmp(v1, v2) == 0) | |
| rv = 0; | |
| mpfree(v1); | |
| mpfree(rs); | |
| mpfree(v2); | |
| return rv; | |
| } |