diff options
author | Adam Vartanian <flooey@google.com> | 2019-02-14 14:42:19 +0000 |
---|---|---|
committer | Adam Vartanian <flooey@google.com> | 2019-02-18 10:18:52 +0000 |
commit | 27254450f01adef5f4bb25a648d42eeacc14c438 (patch) | |
tree | 90eb8fa6c24a44780cc4c4be2d50555f955d29f4 /repackaged/bcprov/src/main/java/com/android/org/bouncycastle/crypto/params | |
parent | bdfb209e7c1139588c82722a809c46667775a314 (diff) | |
parent | 1b335c5efbcf241b55345622fe9978047c3fdf9e (diff) | |
download | bouncycastle-27254450f01adef5f4bb25a648d42eeacc14c438.tar.gz |
Update Bouncy Castle to 1.61
Test: cts -m CtsLibcoreTestCases
Test: cts -m CtsLibcoreWycheproofBCTestCases
Change-Id: Ifcd182a8537439b945aedf80741bd51cbce37e49
Diffstat (limited to 'repackaged/bcprov/src/main/java/com/android/org/bouncycastle/crypto/params')
8 files changed, 72 insertions, 37 deletions
diff --git a/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/crypto/params/AEADParameters.java b/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/crypto/params/AEADParameters.java index 0a1c46cf..ad2a9d81 100644 --- a/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/crypto/params/AEADParameters.java +++ b/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/crypto/params/AEADParameters.java @@ -2,6 +2,7 @@ package com.android.org.bouncycastle.crypto.params; import com.android.org.bouncycastle.crypto.CipherParameters; +import com.android.org.bouncycastle.util.Arrays; /** * @hide This class is not part of the Android public SDK API @@ -37,9 +38,9 @@ public class AEADParameters public AEADParameters(KeyParameter key, int macSize, byte[] nonce, byte[] associatedText) { this.key = key; - this.nonce = nonce; + this.nonce = Arrays.clone(nonce); this.macSize = macSize; - this.associatedText = associatedText; + this.associatedText = Arrays.clone(associatedText); } public KeyParameter getKey() @@ -54,11 +55,11 @@ public class AEADParameters public byte[] getAssociatedText() { - return associatedText; + return Arrays.clone(associatedText); } public byte[] getNonce() { - return nonce; + return Arrays.clone(nonce); } } diff --git a/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/crypto/params/DHParameters.java b/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/crypto/params/DHParameters.java index e7969190..749c6d83 100644 --- a/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/crypto/params/DHParameters.java +++ b/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/crypto/params/DHParameters.java @@ -98,6 +98,11 @@ public class DHParameters } } + if (m > p.bitLength()) + { + throw new IllegalArgumentException("unsafe p value so small specific l required"); + } + this.g = g; this.p = p; this.q = q; diff --git a/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/crypto/params/DHValidationParameters.java b/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/crypto/params/DHValidationParameters.java index bd273b22..3198e52c 100644 --- a/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/crypto/params/DHValidationParameters.java +++ b/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/crypto/params/DHValidationParameters.java @@ -15,7 +15,7 @@ public class DHValidationParameters byte[] seed, int counter) { - this.seed = seed; + this.seed = Arrays.clone(seed); this.counter = counter; } @@ -26,7 +26,7 @@ public class DHValidationParameters public byte[] getSeed() { - return seed; + return Arrays.clone(seed); } public boolean equals( diff --git a/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/crypto/params/DSAValidationParameters.java b/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/crypto/params/DSAValidationParameters.java index 942939a9..56344e56 100644 --- a/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/crypto/params/DSAValidationParameters.java +++ b/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/crypto/params/DSAValidationParameters.java @@ -24,7 +24,7 @@ public class DSAValidationParameters int counter, int usageIndex) { - this.seed = seed; + this.seed = Arrays.clone(seed); this.counter = counter; this.usageIndex = usageIndex; } @@ -36,7 +36,7 @@ public class DSAValidationParameters public byte[] getSeed() { - return seed; + return Arrays.clone(seed); } public int getUsageIndex() diff --git a/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/crypto/params/ECDomainParameters.java b/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/crypto/params/ECDomainParameters.java index 52e9b56b..a3c5498a 100644 --- a/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/crypto/params/ECDomainParameters.java +++ b/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/crypto/params/ECDomainParameters.java @@ -3,6 +3,7 @@ package com.android.org.bouncycastle.crypto.params; import java.math.BigInteger; +import com.android.org.bouncycastle.math.ec.ECAlgorithms; import com.android.org.bouncycastle.math.ec.ECConstants; import com.android.org.bouncycastle.math.ec.ECCurve; import com.android.org.bouncycastle.math.ec.ECPoint; @@ -19,6 +20,7 @@ public class ECDomainParameters private ECPoint G; private BigInteger n; private BigInteger h; + private BigInteger hInv = null; public ECDomainParameters( ECCurve curve, @@ -44,11 +46,21 @@ public class ECDomainParameters BigInteger h, byte[] seed) { + if (curve == null) + { + throw new NullPointerException("curve"); + } + if (n == null) + { + throw new NullPointerException("n"); + } + // we can't check for h == null here as h is optional in X9.62 as it is not required for ECDSA + this.curve = curve; - this.G = G.normalize(); + this.G = validate(curve, G); this.n = n; this.h = h; - this.seed = seed; + this.seed = Arrays.clone(seed); } public ECCurve getCurve() @@ -71,6 +83,15 @@ public class ECDomainParameters return h; } + public synchronized BigInteger getHInv() + { + if (hInv == null) + { + hInv = h.modInverse(n); + } + return hInv; + } + public byte[] getSeed() { return Arrays.clone(seed); @@ -105,4 +126,26 @@ public class ECDomainParameters hc ^= h.hashCode(); return hc; } + + static ECPoint validate(ECCurve c, ECPoint q) + { + if (q == null) + { + throw new IllegalArgumentException("Point has null value"); + } + + q = ECAlgorithms.importPoint(c, q).normalize(); + + if (q.isInfinity()) + { + throw new IllegalArgumentException("Point at infinity"); + } + + if (!q.isValid()) + { + throw new IllegalArgumentException("Point not on curve"); + } + + return q; + } } diff --git a/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/crypto/params/ECNamedDomainParameters.java b/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/crypto/params/ECNamedDomainParameters.java index a62344ea..c252c670 100644 --- a/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/crypto/params/ECNamedDomainParameters.java +++ b/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/crypto/params/ECNamedDomainParameters.java @@ -4,6 +4,7 @@ package com.android.org.bouncycastle.crypto.params; import java.math.BigInteger; import com.android.org.bouncycastle.asn1.ASN1ObjectIdentifier; +import com.android.org.bouncycastle.math.ec.ECConstants; import com.android.org.bouncycastle.math.ec.ECCurve; import com.android.org.bouncycastle.math.ec.ECPoint; @@ -17,7 +18,7 @@ public class ECNamedDomainParameters public ECNamedDomainParameters(ASN1ObjectIdentifier name, ECCurve curve, ECPoint G, BigInteger n) { - this(name, curve, G, n, null, null); + this(name, curve, G, n, ECConstants.ONE, null); } public ECNamedDomainParameters(ASN1ObjectIdentifier name, ECCurve curve, ECPoint G, BigInteger n, BigInteger h) @@ -32,6 +33,12 @@ public class ECNamedDomainParameters this.name = name; } + public ECNamedDomainParameters(ASN1ObjectIdentifier name, ECDomainParameters domainParameters) + { + super(domainParameters.getCurve(), domainParameters.getG(), domainParameters.getN(), domainParameters.getH(), domainParameters.getSeed()); + this.name = name; + } + public ASN1ObjectIdentifier getName() { return name; diff --git a/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/crypto/params/ECPublicKeyParameters.java b/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/crypto/params/ECPublicKeyParameters.java index f9bbe9c4..8378f6dd 100644 --- a/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/crypto/params/ECPublicKeyParameters.java +++ b/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/crypto/params/ECPublicKeyParameters.java @@ -17,29 +17,7 @@ public class ECPublicKeyParameters { super(false, params); - this.Q = validate(Q); - } - - private ECPoint validate(ECPoint q) - { - if (q == null) - { - throw new IllegalArgumentException("point has null value"); - } - - if (q.isInfinity()) - { - throw new IllegalArgumentException("point at infinity"); - } - - q = q.normalize(); - - if (!q.isValid()) - { - throw new IllegalArgumentException("point not on curve"); - } - - return q; + this.Q = ECDomainParameters.validate(params.getCurve(), Q); } public ECPoint getQ() diff --git a/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/crypto/params/ParametersWithRandom.java b/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/crypto/params/ParametersWithRandom.java index 397c3be7..8e83e6f4 100644 --- a/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/crypto/params/ParametersWithRandom.java +++ b/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/crypto/params/ParametersWithRandom.java @@ -1,10 +1,11 @@ /* GENERATED SOURCE. DO NOT MODIFY. */ package com.android.org.bouncycastle.crypto.params; -import com.android.org.bouncycastle.crypto.CipherParameters; - import java.security.SecureRandom; +import com.android.org.bouncycastle.crypto.CipherParameters; +import com.android.org.bouncycastle.crypto.CryptoServicesRegistrar; + /** * @hide This class is not part of the Android public SDK API */ @@ -25,7 +26,7 @@ public class ParametersWithRandom public ParametersWithRandom( CipherParameters parameters) { - this(parameters, new SecureRandom()); + this(parameters, CryptoServicesRegistrar.getSecureRandom()); } public SecureRandom getRandom() |