mpinvert.c 394 B

123456789101112131415161718192021
  1. #include "os.h"
  2. #include <mp.h>
  3. #define iseven(a) (((a)->p[0] & 1) == 0)
  4. // use extended gcd to find the multiplicative inverse
  5. // res = b**-1 mod m
  6. void
  7. mpinvert(mpint *b, mpint *m, mpint *res)
  8. {
  9. mpint *dc1, *dc2; // don't care
  10. dc1 = mpnew(0);
  11. dc2 = mpnew(0);
  12. mpextendedgcd(b, m, dc1, res, dc2);
  13. if(mpcmp(dc1, mpone) != 0)
  14. abort();
  15. mpmod(res, m, res);
  16. mpfree(dc1);
  17. mpfree(dc2);
  18. }