diff options
Diffstat (limited to 'android_bcprov/src/main/java/com/android/org/bouncycastle/math/ec/AbstractECMultiplier.java')
-rw-r--r-- | android_bcprov/src/main/java/com/android/org/bouncycastle/math/ec/AbstractECMultiplier.java | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/android_bcprov/src/main/java/com/android/org/bouncycastle/math/ec/AbstractECMultiplier.java b/android_bcprov/src/main/java/com/android/org/bouncycastle/math/ec/AbstractECMultiplier.java new file mode 100644 index 00000000..85df117d --- /dev/null +++ b/android_bcprov/src/main/java/com/android/org/bouncycastle/math/ec/AbstractECMultiplier.java @@ -0,0 +1,27 @@ +/* GENERATED SOURCE. DO NOT MODIFY. */ +package com.android.org.bouncycastle.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); +} |