diff options
Diffstat (limited to 'core/src/main/java/org/spongycastle/math/ec/ZSignedDigitR2LMultiplier.java')
-rw-r--r-- | core/src/main/java/org/spongycastle/math/ec/ZSignedDigitR2LMultiplier.java | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/core/src/main/java/org/spongycastle/math/ec/ZSignedDigitR2LMultiplier.java b/core/src/main/java/org/spongycastle/math/ec/ZSignedDigitR2LMultiplier.java new file mode 100644 index 00000000..e9147ea7 --- /dev/null +++ b/core/src/main/java/org/spongycastle/math/ec/ZSignedDigitR2LMultiplier.java @@ -0,0 +1,30 @@ +package org.spongycastle.math.ec; + +import java.math.BigInteger; + +public class ZSignedDigitR2LMultiplier extends AbstractECMultiplier +{ + /** + * 'Zeroless' Signed Digit Right-to-Left. + */ + protected ECPoint multiplyPositive(ECPoint p, BigInteger k) + { + ECPoint R0 = p.getCurve().getInfinity(), R1 = p; + + int n = k.bitLength(); + int s = k.getLowestSetBit(); + + R1 = R1.timesPow2(s); + + int i = s; + while (++i < n) + { + R0 = R0.add(k.testBit(i) ? R1 : R1.negate()); + R1 = R1.twice(); + } + + R0 = R0.add(R1); + + return R0; + } +} |