Package org.bouncycastle.math.ec
Class ECAlgorithms
- java.lang.Object
-
- org.bouncycastle.math.ec.ECAlgorithms
-
public class ECAlgorithms extends java.lang.Object
-
-
Constructor Summary
Constructors Constructor Description ECAlgorithms()
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description static ECPointcleanPoint(ECCurve c, ECPoint p)static ECPointimportPoint(ECCurve c, ECPoint p)static booleanisF2mCurve(ECCurve c)static booleanisF2mField(FiniteField field)static booleanisFpCurve(ECCurve c)static booleanisFpField(FiniteField field)static voidmontgomeryTrick(ECFieldElement[] zs, int off, int len)static voidmontgomeryTrick(ECFieldElement[] zs, int off, int len, ECFieldElement scale)static ECPointmultiply(ECPoint p, java.math.BigInteger k)static ECPointmultiplySecret(ECPoint p, java.math.BigInteger k)Multiply a point by a scalar that must not be leaked - a private key, or any value derived from one - without exposing the scalar through control flow or memory-access pattern.static ECPointmultiplySecret(ECPoint p, java.math.BigInteger k, java.math.BigInteger order)AsmultiplySecret(ECPoint, BigInteger), with the group order supplied rather than taken from the curve.static ECPointreferenceMultiply(ECPoint p, java.math.BigInteger k)Simple shift-and-add multiplication.static ECPointshamirsTrick(ECPoint P, java.math.BigInteger k, ECPoint Q, java.math.BigInteger l)static ECPointsumOfMultiplies(ECPoint[] ps, java.math.BigInteger[] ks)static ECPointsumOfTwoMultiplies(ECPoint P, java.math.BigInteger a, ECPoint Q, java.math.BigInteger b)static ECPointsumOfTwoMultipliesSecret(ECPoint P, java.math.BigInteger a, ECPoint Q, java.math.BigInteger b)static ECPointsumOfTwoMultipliesSecret(ECPoint P, java.math.BigInteger a, ECPoint Q, java.math.BigInteger b, java.math.BigInteger order)static ECPointvalidatePoint(ECPoint p)
-
-
-
Method Detail
-
isF2mCurve
public static boolean isF2mCurve(ECCurve c)
-
isF2mField
public static boolean isF2mField(FiniteField field)
-
isFpCurve
public static boolean isFpCurve(ECCurve c)
-
isFpField
public static boolean isFpField(FiniteField field)
-
sumOfTwoMultiplies
public static ECPoint sumOfTwoMultiplies(ECPoint P, java.math.BigInteger a, ECPoint Q, java.math.BigInteger b)
-
sumOfTwoMultipliesSecret
public static ECPoint sumOfTwoMultipliesSecret(ECPoint P, java.math.BigInteger a, ECPoint Q, java.math.BigInteger b)
-
sumOfTwoMultipliesSecret
public static ECPoint sumOfTwoMultipliesSecret(ECPoint P, java.math.BigInteger a, ECPoint Q, java.math.BigInteger b, java.math.BigInteger order)
-
shamirsTrick
public static ECPoint shamirsTrick(ECPoint P, java.math.BigInteger k, ECPoint Q, java.math.BigInteger l)
-
montgomeryTrick
public static void montgomeryTrick(ECFieldElement[] zs, int off, int len)
-
montgomeryTrick
public static void montgomeryTrick(ECFieldElement[] zs, int off, int len, ECFieldElement scale)
-
referenceMultiply
public static ECPoint referenceMultiply(ECPoint p, java.math.BigInteger k)
Simple shift-and-add multiplication. Serves as reference implementation to verify (possibly faster) implementations, and for very small scalars. CAUTION: This implementation is NOT constant-time in any way. It is only intended to be used for diagnostics.- Parameters:
p- The point to multiply.k- The multiplier.- Returns:
- The result of the point multiplication
kP.
-
multiplySecret
public static ECPoint multiplySecret(ECPoint p, java.math.BigInteger k)
Multiply a point by a scalar that must not be leaked - a private key, or any value derived from one - without exposing the scalar through control flow or memory-access pattern.ECPoint.multiply(BigInteger)uses the curve's configured multiplier, which for most curves is a windowed-NAF implementation whose timing depends on the scalar; it is the right choice for a public scalar (verification, for instance) but not for a secret one. Use this method wherever the scalar is secret and the point is supplied by a peer.The result is the same point
ECPoint.multiply(BigInteger)would return; only the timing profile differs. SeeECConstantTimeMultiplierfor what is and is not covered.- Parameters:
p- the point to multiply, typically a peer's public key; must lie in the subgroup whose order is the curve's.k- the secret scalar; must be less than the curve order.- Returns:
kP.
-
multiplySecret
public static ECPoint multiplySecret(ECPoint p, java.math.BigInteger k, java.math.BigInteger order)
AsmultiplySecret(ECPoint, BigInteger), with the group order supplied rather than taken from the curve. Prefer this form wherever the order is to hand - domain parameters always carry it, whereasECCurve.getOrder()is null for a curve built without one.- Parameters:
p- the point to multiply, typically a peer's public key; must lie in the subgroup of orderorder.k- the secret scalar; must be less thanorder.order- the group order; must be odd, as every standard EC group order is.- Returns:
kP.
-
-