6 dsaverify(DSApub *pub, DSAsig *sig, mpint *m)
9 mpint *u1, *u2, *v, *sinv;
11 if(mpcmp(sig->r, mpone) < 0 || mpcmp(sig->r, pub->q) >= 0)
13 if(mpcmp(sig->s, mpone) < 0 || mpcmp(sig->s, pub->q) >= 0)
20 /* find (s**-1) mod q, make sure it exists */
21 mpextendedgcd(sig->s, pub->q, u1, sinv, v);
22 if(mpcmp(u1, mpone) != 0)
25 /* u1 = (sinv * m) mod q, u2 = (r * sinv) mod q */
27 mpmod(u1, pub->q, u1);
28 mpmul(sig->r, sinv, u2);
29 mpmod(u2, pub->q, u2);
31 /* v = (((alpha**u1)*(key**u2)) mod p) mod q */
32 mpexp(pub->alpha, u1, pub->p, sinv);
33 mpexp(pub->key, u2, pub->p, v);
38 if(mpcmp(v, sig->r) == 0)