]> git.lizzy.rs Git - plan9front.git/blob - sys/src/libsec/port/egverify.c
libsec: add diffie-hellman functions
[plan9front.git] / sys / src / libsec / port / egverify.c
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 }