Subversion Repositories planix.SVN

Rev

Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

#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;
}