diff options
Diffstat (limited to 'core/src/main/java/org/spongycastle/math/ec/MontgomeryLadderMultiplier.java')
-rw-r--r-- | core/src/main/java/org/spongycastle/math/ec/MontgomeryLadderMultiplier.java | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/core/src/main/java/org/spongycastle/math/ec/MontgomeryLadderMultiplier.java b/core/src/main/java/org/spongycastle/math/ec/MontgomeryLadderMultiplier.java new file mode 100644 index 00000000..bc4f7a00 --- /dev/null +++ b/core/src/main/java/org/spongycastle/math/ec/MontgomeryLadderMultiplier.java @@ -0,0 +1,25 @@ +package org.spongycastle.math.ec; + +import java.math.BigInteger; + +public class MontgomeryLadderMultiplier extends AbstractECMultiplier +{ + /** + * Montgomery ladder. + */ + protected ECPoint multiplyPositive(ECPoint p, BigInteger k) + { + ECPoint[] R = new ECPoint[]{ p.getCurve().getInfinity(), p }; + + int n = k.bitLength(); + int i = n; + while (--i >= 0) + { + int b = k.testBit(i) ? 1 : 0; + int bp = 1 - b; + R[bp] = R[bp].add(R[b]); + R[b] = R[b].twice(); + } + return R[0]; + } +} |