URI:
       tdsaverify.c - plan9port - [fork] Plan 9 from user space
  HTML git clone git://src.adamsgaard.dk/plan9port
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
       tdsaverify.c (934B)
       ---
            1 #include "os.h"
            2 #include <mp.h>
            3 #include <libsec.h>
            4 
            5 int
            6 dsaverify(DSApub *pub, DSAsig *sig, mpint *m)
            7 {
            8         int rv = -1;
            9         mpint *u1, *u2, *v, *sinv;
           10 
           11         if(mpcmp(sig->r, mpone) < 0 || mpcmp(sig->r, pub->q) >= 0)
           12                 return rv;
           13         if(mpcmp(sig->s, mpone) < 0 || mpcmp(sig->s, pub->q) >= 0)
           14                 return rv;
           15         u1 = mpnew(0);
           16         u2 = mpnew(0);
           17         v = mpnew(0);
           18         sinv = mpnew(0);
           19 
           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)
           23                 goto out;
           24 
           25         /* u1 = (sinv * m) mod q, u2 = (r * sinv) mod q */
           26         mpmul(sinv, m, u1);
           27         mpmod(u1, pub->q, u1);
           28         mpmul(sig->r, sinv, u2);
           29         mpmod(u2, pub->q, u2);
           30 
           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);
           34         mpmul(sinv, v, v);
           35         mpmod(v, pub->p, v);
           36         mpmod(v, pub->q, v);
           37 
           38         if(mpcmp(v, sig->r) == 0)
           39                 rv = 0;
           40 out:
           41         mpfree(v);
           42         mpfree(u1);
           43         mpfree(u2);
           44         mpfree(sinv);
           45         return rv;
           46 }