plan9port

fork of plan9port with libvec, libstr and libsdb
Log | Files | Refs | README | LICENSE

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 }