diff --git a/lib/precompiled/05-modexp.js b/lib/precompiled/05-modexp.js index f193c89510..60028bab71 100644 --- a/lib/precompiled/05-modexp.js +++ b/lib/precompiled/05-modexp.js @@ -56,14 +56,14 @@ function getAdjustedExponentLength (data) { return adjustedExpLen } -// Taken from https://stackoverflow.com/a/1503019 function expmod (B, E, M) { if (E.isZero()) return new BN(1).mod(M) - var BM = B.mod(M) - var R = expmod(BM, E.divn(2), M) - R = (R.mul(R)).mod(M) - if (E.mod(new BN(2)).isZero()) return R - return (R.mul(BM)).mod(M) + // Red asserts M > 1 + if (M.lten(1)) return new BN(0) + const red = BN.red(M) + const redB = B.toRed(red) + const res = redB.redPow(E) + return res.fromRed() } function getOOGResults (opts, results) {