mirror of https://github.com/0intro/conterm
30 lines
519 B
C
30 lines
519 B
C
|
#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;
|
||
|
}
|