ref: 96e8c5d8f56998045411b0bead00a0d4f68a4212
dir: /3rd/mp/mpinvert.c/
#include "platform.h" #include "mp.h" // use extended gcd to find the multiplicative inverse // res = b**-1 mod m void mpinvert(mpint *b, mpint *m, mpint *res) { mpint *v; v = mpnew(0); mpextendedgcd(b, m, v, res, nil); if(mpcmp(v, mpone) != 0){ fprintf(stderr, "mpinvert: impossible\n"); exit(2); } mpfree(v); mpmod(res, m, res); }