Skip to content

Commit e70d0c0

Browse files
s1naholgerd77
authored andcommitted
Use BN.red in modexp precompile
Add checks for E == 0 and M == 1 Fix M == 1 check Check M lten 1 instead of eq
1 parent 9b1b24a commit e70d0c0

File tree

1 file changed

+6
-6
lines changed

1 file changed

+6
-6
lines changed

lib/precompiled/05-modexp.js

+6-6
Original file line numberDiff line numberDiff line change
@@ -56,14 +56,14 @@ function getAdjustedExponentLength (data) {
5656
return adjustedExpLen
5757
}
5858

59-
// Taken from https://stackoverflow.com/a/1503019
6059
function expmod (B, E, M) {
6160
if (E.isZero()) return new BN(1).mod(M)
62-
var BM = B.mod(M)
63-
var R = expmod(BM, E.divn(2), M)
64-
R = (R.mul(R)).mod(M)
65-
if (E.mod(new BN(2)).isZero()) return R
66-
return (R.mul(BM)).mod(M)
61+
// Red asserts M > 1
62+
if (M.lten(1)) return new BN(0)
63+
const red = BN.red(M)
64+
const redB = B.toRed(red)
65+
const res = redB.redPow(E)
66+
return res.fromRed()
6767
}
6868

6969
function getOOGResults (opts, results) {

0 commit comments

Comments
 (0)