From 67de29f9e593a52552f838bf3542a85ae7d8278f Mon Sep 17 00:00:00 2001 From: Peter Dettman Date: Wed, 12 Mar 2014 18:11:46 +0700 Subject: Allow subclasses to override the ECMultiplier used for base-point multiplication --- .../main/java/org/bouncycastle/crypto/ec/ECElGamalEncryptor.java | 7 ++++++- .../main/java/org/bouncycastle/crypto/ec/ECFixedTransform.java | 7 ++++++- .../java/org/bouncycastle/crypto/ec/ECNewPublicKeyTransform.java | 7 ++++++- .../org/bouncycastle/crypto/ec/ECNewRandomnessTransform.java | 7 ++++++- .../org/bouncycastle/crypto/generators/ECKeyPairGenerator.java | 8 +++++++- .../java/org/bouncycastle/crypto/kems/ECIESKeyEncapsulation.java | 7 ++++++- .../java/org/bouncycastle/crypto/signers/DSTU4145Signer.java | 7 ++++++- .../main/java/org/bouncycastle/crypto/signers/ECDSASigner.java | 9 +++++++-- .../java/org/bouncycastle/crypto/signers/ECGOST3410Signer.java | 7 ++++++- 9 files changed, 56 insertions(+), 10 deletions(-) (limited to 'core/src/main/java/org') diff --git a/core/src/main/java/org/bouncycastle/crypto/ec/ECElGamalEncryptor.java b/core/src/main/java/org/bouncycastle/crypto/ec/ECElGamalEncryptor.java index a5296830..48fc0467 100644 --- a/core/src/main/java/org/bouncycastle/crypto/ec/ECElGamalEncryptor.java +++ b/core/src/main/java/org/bouncycastle/crypto/ec/ECElGamalEncryptor.java @@ -67,7 +67,7 @@ public class ECElGamalEncryptor ECDomainParameters ec = key.getParameters(); BigInteger k = ECUtil.generateK(ec.getN(), random); - ECMultiplier basePointMultiplier = new FixedPointCombMultiplier(); + ECMultiplier basePointMultiplier = createBasePointMultiplier(); ECPoint[] gamma_phi = new ECPoint[]{ basePointMultiplier.multiply(ec.getG(), k), @@ -78,4 +78,9 @@ public class ECElGamalEncryptor return new ECPair(gamma_phi[0], gamma_phi[1]); } + + protected ECMultiplier createBasePointMultiplier() + { + return new FixedPointCombMultiplier(); + } } diff --git a/core/src/main/java/org/bouncycastle/crypto/ec/ECFixedTransform.java b/core/src/main/java/org/bouncycastle/crypto/ec/ECFixedTransform.java index 02f5ca37..2c6a920b 100644 --- a/core/src/main/java/org/bouncycastle/crypto/ec/ECFixedTransform.java +++ b/core/src/main/java/org/bouncycastle/crypto/ec/ECFixedTransform.java @@ -58,7 +58,7 @@ public class ECFixedTransform ECDomainParameters ec = key.getParameters(); BigInteger n = ec.getN(); - ECMultiplier basePointMultiplier = new FixedPointCombMultiplier(); + ECMultiplier basePointMultiplier = createBasePointMultiplier(); BigInteger k = this.k.mod(n); ECPoint[] gamma_phi = new ECPoint[]{ @@ -80,4 +80,9 @@ public class ECFixedTransform { return k; } + + protected ECMultiplier createBasePointMultiplier() + { + return new FixedPointCombMultiplier(); + } } diff --git a/core/src/main/java/org/bouncycastle/crypto/ec/ECNewPublicKeyTransform.java b/core/src/main/java/org/bouncycastle/crypto/ec/ECNewPublicKeyTransform.java index 9f7a0bf1..112d20c1 100644 --- a/core/src/main/java/org/bouncycastle/crypto/ec/ECNewPublicKeyTransform.java +++ b/core/src/main/java/org/bouncycastle/crypto/ec/ECNewPublicKeyTransform.java @@ -68,7 +68,7 @@ public class ECNewPublicKeyTransform ECDomainParameters ec = key.getParameters(); BigInteger n = ec.getN(); - ECMultiplier basePointMultiplier = new FixedPointCombMultiplier(); + ECMultiplier basePointMultiplier = createBasePointMultiplier(); BigInteger k = ECUtil.generateK(n, random); ECPoint[] gamma_phi = new ECPoint[]{ @@ -80,4 +80,9 @@ public class ECNewPublicKeyTransform return new ECPair(gamma_phi[0], gamma_phi[1]); } + + protected ECMultiplier createBasePointMultiplier() + { + return new FixedPointCombMultiplier(); + } } diff --git a/core/src/main/java/org/bouncycastle/crypto/ec/ECNewRandomnessTransform.java b/core/src/main/java/org/bouncycastle/crypto/ec/ECNewRandomnessTransform.java index c146a0fb..7bfc0b30 100644 --- a/core/src/main/java/org/bouncycastle/crypto/ec/ECNewRandomnessTransform.java +++ b/core/src/main/java/org/bouncycastle/crypto/ec/ECNewRandomnessTransform.java @@ -73,7 +73,7 @@ public class ECNewRandomnessTransform ECDomainParameters ec = key.getParameters(); BigInteger n = ec.getN(); - ECMultiplier basePointMultiplier = new FixedPointCombMultiplier(); + ECMultiplier basePointMultiplier = createBasePointMultiplier(); BigInteger k = ECUtil.generateK(n, random); ECPoint[] gamma_phi = new ECPoint[]{ @@ -97,4 +97,9 @@ public class ECNewRandomnessTransform { return lastK; } + + protected ECMultiplier createBasePointMultiplier() + { + return new FixedPointCombMultiplier(); + } } diff --git a/core/src/main/java/org/bouncycastle/crypto/generators/ECKeyPairGenerator.java b/core/src/main/java/org/bouncycastle/crypto/generators/ECKeyPairGenerator.java index 38807a4c..1bae4638 100644 --- a/core/src/main/java/org/bouncycastle/crypto/generators/ECKeyPairGenerator.java +++ b/core/src/main/java/org/bouncycastle/crypto/generators/ECKeyPairGenerator.java @@ -11,6 +11,7 @@ import org.bouncycastle.crypto.params.ECKeyGenerationParameters; import org.bouncycastle.crypto.params.ECPrivateKeyParameters; import org.bouncycastle.crypto.params.ECPublicKeyParameters; import org.bouncycastle.math.ec.ECConstants; +import org.bouncycastle.math.ec.ECMultiplier; import org.bouncycastle.math.ec.ECPoint; import org.bouncycastle.math.ec.FixedPointCombMultiplier; @@ -50,10 +51,15 @@ public class ECKeyPairGenerator } while (d.equals(ZERO) || (d.compareTo(n) >= 0)); - ECPoint Q = new FixedPointCombMultiplier().multiply(params.getG(), d); + ECPoint Q = createBasePointMultiplier().multiply(params.getG(), d); return new AsymmetricCipherKeyPair( new ECPublicKeyParameters(Q, params), new ECPrivateKeyParameters(d, params)); } + + protected ECMultiplier createBasePointMultiplier() + { + return new FixedPointCombMultiplier(); + } } diff --git a/core/src/main/java/org/bouncycastle/crypto/kems/ECIESKeyEncapsulation.java b/core/src/main/java/org/bouncycastle/crypto/kems/ECIESKeyEncapsulation.java index 746d26ca..517acfb1 100755 --- a/core/src/main/java/org/bouncycastle/crypto/kems/ECIESKeyEncapsulation.java +++ b/core/src/main/java/org/bouncycastle/crypto/kems/ECIESKeyEncapsulation.java @@ -123,7 +123,7 @@ public class ECIESKeyEncapsulation // Compute the static-ephemeral key agreement BigInteger rPrime = CofactorMode ? r.multiply(h).mod(n) : r; - ECMultiplier basePointMultiplier = new FixedPointCombMultiplier(); + ECMultiplier basePointMultiplier = createBasePointMultiplier(); ECPoint[] ghTilde = new ECPoint[]{ basePointMultiplier.multiply(ecParams.getG(), r), @@ -236,4 +236,9 @@ public class ECIESKeyEncapsulation { return decrypt(in, 0, in.length, keyLen); } + + protected ECMultiplier createBasePointMultiplier() + { + return new FixedPointCombMultiplier(); + } } diff --git a/core/src/main/java/org/bouncycastle/crypto/signers/DSTU4145Signer.java b/core/src/main/java/org/bouncycastle/crypto/signers/DSTU4145Signer.java index 0a3ef37f..d0b893a6 100644 --- a/core/src/main/java/org/bouncycastle/crypto/signers/DSTU4145Signer.java +++ b/core/src/main/java/org/bouncycastle/crypto/signers/DSTU4145Signer.java @@ -75,7 +75,7 @@ public class DSTU4145Signer BigInteger d = ((ECPrivateKeyParameters)key).getD(); - ECMultiplier basePointMultiplier = new FixedPointCombMultiplier(); + ECMultiplier basePointMultiplier = createBasePointMultiplier(); do { @@ -135,6 +135,11 @@ public class DSTU4145Signer return fieldElement2Integer(n, y).compareTo(r) == 0; } + protected ECMultiplier createBasePointMultiplier() + { + return new FixedPointCombMultiplier(); + } + /** * Generates random integer such, than its bit length is less than that of n */ diff --git a/core/src/main/java/org/bouncycastle/crypto/signers/ECDSASigner.java b/core/src/main/java/org/bouncycastle/crypto/signers/ECDSASigner.java index 26fd588e..8ea2a5b9 100644 --- a/core/src/main/java/org/bouncycastle/crypto/signers/ECDSASigner.java +++ b/core/src/main/java/org/bouncycastle/crypto/signers/ECDSASigner.java @@ -97,7 +97,7 @@ public class ECDSASigner BigInteger r, s; - ECMultiplier basePointMultiplier = new FixedPointCombMultiplier(); + ECMultiplier basePointMultiplier = createBasePointMultiplier(); // 5.3.2 do // generate s @@ -169,7 +169,7 @@ public class ECDSASigner return v.equals(r); } - private BigInteger calculateE(BigInteger n, byte[] message) + protected BigInteger calculateE(BigInteger n, byte[] message) { int log2n = n.bitLength(); int messageBitLength = message.length * 8; @@ -181,4 +181,9 @@ public class ECDSASigner } return e; } + + protected ECMultiplier createBasePointMultiplier() + { + return new FixedPointCombMultiplier(); + } } diff --git a/core/src/main/java/org/bouncycastle/crypto/signers/ECGOST3410Signer.java b/core/src/main/java/org/bouncycastle/crypto/signers/ECGOST3410Signer.java index ed256fe8..0ef88762 100644 --- a/core/src/main/java/org/bouncycastle/crypto/signers/ECGOST3410Signer.java +++ b/core/src/main/java/org/bouncycastle/crypto/signers/ECGOST3410Signer.java @@ -75,7 +75,7 @@ public class ECGOST3410Signer BigInteger r, s; - ECMultiplier basePointMultiplier = new FixedPointCombMultiplier(); + ECMultiplier basePointMultiplier = createBasePointMultiplier(); do // generate s { @@ -152,4 +152,9 @@ public class ECGOST3410Signer return R.equals(r); } + + protected ECMultiplier createBasePointMultiplier() + { + return new FixedPointCombMultiplier(); + } } -- cgit v1.2.3