egverify.c 519 B

1234567891011121314151617181920212223242526272829
  1. #include "os.h"
  2. #include <mp.h>
  3. #include <libsec.h>
  4. int
  5. egverify(EGpub *pub, EGsig *sig, mpint *m)
  6. {
  7. mpint *p = pub->p, *alpha = pub->alpha;
  8. mpint *r = sig->r, *s = sig->s;
  9. mpint *v1, *v2, *rs;
  10. int rv = -1;
  11. if(mpcmp(r, mpone) < 0 || mpcmp(r, p) >= 0)
  12. return rv;
  13. v1 = mpnew(0);
  14. rs = mpnew(0);
  15. v2 = mpnew(0);
  16. mpexp(pub->key, r, p, v1);
  17. mpexp(r, s, p, rs);
  18. mpmul(v1, rs, v1);
  19. mpmod(v1, p, v1);
  20. mpexp(alpha, m, p, v2);
  21. if(mpcmp(v1, v2) == 0)
  22. rv = 0;
  23. mpfree(v1);
  24. mpfree(rs);
  25. mpfree(v2);
  26. return rv;
  27. }