diff options
Diffstat (limited to 'core/src/main/java/org/spongycastle/math/ec/AbstractECMultiplier.java')
-rw-r--r-- | core/src/main/java/org/spongycastle/math/ec/AbstractECMultiplier.java | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/core/src/main/java/org/spongycastle/math/ec/AbstractECMultiplier.java b/core/src/main/java/org/spongycastle/math/ec/AbstractECMultiplier.java new file mode 100644 index 00000000..e4dee6dd --- /dev/null +++ b/core/src/main/java/org/spongycastle/math/ec/AbstractECMultiplier.java @@ -0,0 +1,26 @@ +package org.spongycastle.math.ec; + +import java.math.BigInteger; + +public abstract class AbstractECMultiplier implements ECMultiplier +{ + public ECPoint multiply(ECPoint p, BigInteger k) + { + int sign = k.signum(); + if (sign == 0 || p.isInfinity()) + { + return p.getCurve().getInfinity(); + } + + ECPoint positive = multiplyPositive(p, k.abs()); + ECPoint result = sign > 0 ? positive : positive.negate(); + + /* + * Although the various multipliers ought not to produce invalid output under normal + * circumstances, a final check here is advised to guard against fault attacks. + */ + return ECAlgorithms.validatePoint(result); + } + + protected abstract ECPoint multiplyPositive(ECPoint p, BigInteger k); +} |