From 29bc2a5ee9c8f156711f388c2ade698dba327429 Mon Sep 17 00:00:00 2001 From: ameba23 Date: Mon, 30 Aug 2021 11:15:28 +0200 Subject: [PATCH] Switch from spongycastle to bouncy castle --- bramble-core/build.gradle | 2 +- .../bramble/crypto/CryptoComponentImpl.java | 6 +- .../bramble/crypto/MessageEncrypter.java | 54 ++++---- .../bramble/crypto/ScryptKdf.java | 2 +- .../bramble/crypto/Sec1KeyParser.java | 10 +- .../bramble/crypto/Sec1PrivateKey.java | 2 +- .../bramble/crypto/Sec1PublicKey.java | 2 +- .../bramble/crypto/TransportCryptoImpl.java | 4 +- .../XSalsa20Poly1305AuthenticatedCipher.java | 12 +- .../plugin/tor/TorRendezvousCryptoImpl.java | 6 +- .../rendezvous/KeyMaterialSourceImpl.java | 6 +- .../bramble/crypto/Blake2bDigestTest.java | 2 +- .../EllipticCurveMultiplicationTest.java | 115 ------------------ .../crypto/EllipticCurvePerformanceTest.java | 53 +++----- .../bramble/crypto/MessageEncrypterTest.java | 2 +- .../bramble/crypto/PseudoRandom.java | 10 +- bramble-core/witness.gradle | 2 +- briar-android/witness.gradle | 1 - 18 files changed, 80 insertions(+), 211 deletions(-) delete mode 100644 bramble-core/src/test/java/org/briarproject/bramble/crypto/EllipticCurveMultiplicationTest.java diff --git a/bramble-core/build.gradle b/bramble-core/build.gradle index ce33f1ad9..031f2f9e8 100644 --- a/bramble-core/build.gradle +++ b/bramble-core/build.gradle @@ -10,7 +10,7 @@ apply from: '../dagger.gradle' dependencies { implementation project(path: ':bramble-api', configuration: 'default') - implementation 'com.madgag.spongycastle:core:1.58.0.0' + implementation 'org.bouncycastle:bcprov-jdk15on:1.69' implementation 'com.h2database:h2:1.4.192' // The last version that supports Java 1.6 implementation 'org.bitlet:weupnp:0.1.4' implementation 'net.i2p.crypto:eddsa:0.2.0' diff --git a/bramble-core/src/main/java/org/briarproject/bramble/crypto/CryptoComponentImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/crypto/CryptoComponentImpl.java index 0ac2d3d3e..a6834b64f 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/crypto/CryptoComponentImpl.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/crypto/CryptoComponentImpl.java @@ -21,9 +21,9 @@ import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.system.SecureRandomProvider; import org.briarproject.bramble.util.ByteUtils; import org.briarproject.bramble.util.StringUtils; -import org.spongycastle.crypto.CryptoException; -import org.spongycastle.crypto.Digest; -import org.spongycastle.crypto.digests.Blake2bDigest; +import org.bouncycastle.crypto.CryptoException; +import org.bouncycastle.crypto.Digest; +import org.bouncycastle.crypto.digests.Blake2bDigest; import org.whispersystems.curve25519.Curve25519; import org.whispersystems.curve25519.Curve25519KeyPair; diff --git a/bramble-core/src/main/java/org/briarproject/bramble/crypto/MessageEncrypter.java b/bramble-core/src/main/java/org/briarproject/bramble/crypto/MessageEncrypter.java index 7154ea327..5d71e68b2 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/crypto/MessageEncrypter.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/crypto/MessageEncrypter.java @@ -6,33 +6,33 @@ import org.briarproject.bramble.api.crypto.PrivateKey; import org.briarproject.bramble.api.crypto.PublicKey; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.util.StringUtils; -import org.spongycastle.asn1.teletrust.TeleTrusTNamedCurves; -import org.spongycastle.asn1.x9.X9ECParameters; -import org.spongycastle.crypto.AsymmetricCipherKeyPair; -import org.spongycastle.crypto.BasicAgreement; -import org.spongycastle.crypto.BlockCipher; -import org.spongycastle.crypto.CipherParameters; -import org.spongycastle.crypto.CryptoException; -import org.spongycastle.crypto.DerivationFunction; -import org.spongycastle.crypto.KeyEncoder; -import org.spongycastle.crypto.Mac; -import org.spongycastle.crypto.agreement.ECDHCBasicAgreement; -import org.spongycastle.crypto.digests.SHA256Digest; -import org.spongycastle.crypto.engines.AESLightEngine; -import org.spongycastle.crypto.engines.IESEngine; -import org.spongycastle.crypto.generators.ECKeyPairGenerator; -import org.spongycastle.crypto.generators.EphemeralKeyPairGenerator; -import org.spongycastle.crypto.generators.KDF2BytesGenerator; -import org.spongycastle.crypto.macs.HMac; -import org.spongycastle.crypto.modes.CBCBlockCipher; -import org.spongycastle.crypto.paddings.PaddedBufferedBlockCipher; -import org.spongycastle.crypto.params.AsymmetricKeyParameter; -import org.spongycastle.crypto.params.ECDomainParameters; -import org.spongycastle.crypto.params.ECKeyGenerationParameters; -import org.spongycastle.crypto.params.ECPrivateKeyParameters; -import org.spongycastle.crypto.params.ECPublicKeyParameters; -import org.spongycastle.crypto.params.IESWithCipherParameters; -import org.spongycastle.crypto.parsers.ECIESPublicKeyParser; +import org.bouncycastle.asn1.teletrust.TeleTrusTNamedCurves; +import org.bouncycastle.asn1.x9.X9ECParameters; +import org.bouncycastle.crypto.AsymmetricCipherKeyPair; +import org.bouncycastle.crypto.BasicAgreement; +import org.bouncycastle.crypto.BlockCipher; +import org.bouncycastle.crypto.CipherParameters; +import org.bouncycastle.crypto.CryptoException; +import org.bouncycastle.crypto.DerivationFunction; +import org.bouncycastle.crypto.KeyEncoder; +import org.bouncycastle.crypto.Mac; +import org.bouncycastle.crypto.agreement.ECDHCBasicAgreement; +import org.bouncycastle.crypto.digests.SHA256Digest; +import org.bouncycastle.crypto.engines.AESLightEngine; +import org.bouncycastle.crypto.engines.IESEngine; +import org.bouncycastle.crypto.generators.ECKeyPairGenerator; +import org.bouncycastle.crypto.generators.EphemeralKeyPairGenerator; +import org.bouncycastle.crypto.generators.KDF2BytesGenerator; +import org.bouncycastle.crypto.macs.HMac; +import org.bouncycastle.crypto.modes.CBCBlockCipher; +import org.bouncycastle.crypto.paddings.PaddedBufferedBlockCipher; +import org.bouncycastle.crypto.params.AsymmetricKeyParameter; +import org.bouncycastle.crypto.params.ECDomainParameters; +import org.bouncycastle.crypto.params.ECKeyGenerationParameters; +import org.bouncycastle.crypto.params.ECPrivateKeyParameters; +import org.bouncycastle.crypto.params.ECPublicKeyParameters; +import org.bouncycastle.crypto.params.IESWithCipherParameters; +import org.bouncycastle.crypto.parsers.ECIESPublicKeyParser; import java.io.FileInputStream; import java.io.FileOutputStream; diff --git a/bramble-core/src/main/java/org/briarproject/bramble/crypto/ScryptKdf.java b/bramble-core/src/main/java/org/briarproject/bramble/crypto/ScryptKdf.java index 76ad68417..19c63b8de 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/crypto/ScryptKdf.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/crypto/ScryptKdf.java @@ -3,7 +3,7 @@ package org.briarproject.bramble.crypto; import org.briarproject.bramble.api.crypto.SecretKey; import org.briarproject.bramble.api.system.Clock; import org.briarproject.bramble.util.StringUtils; -import org.spongycastle.crypto.generators.SCrypt; +import org.bouncycastle.crypto.generators.SCrypt; import java.util.logging.Logger; diff --git a/bramble-core/src/main/java/org/briarproject/bramble/crypto/Sec1KeyParser.java b/bramble-core/src/main/java/org/briarproject/bramble/crypto/Sec1KeyParser.java index c3b6ac9ab..887e6f278 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/crypto/Sec1KeyParser.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/crypto/Sec1KeyParser.java @@ -4,11 +4,11 @@ import org.briarproject.bramble.api.crypto.KeyParser; import org.briarproject.bramble.api.crypto.PrivateKey; import org.briarproject.bramble.api.crypto.PublicKey; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; -import org.spongycastle.crypto.params.ECDomainParameters; -import org.spongycastle.crypto.params.ECPrivateKeyParameters; -import org.spongycastle.crypto.params.ECPublicKeyParameters; -import org.spongycastle.math.ec.ECCurve; -import org.spongycastle.math.ec.ECPoint; +import org.bouncycastle.crypto.params.ECDomainParameters; +import org.bouncycastle.crypto.params.ECPrivateKeyParameters; +import org.bouncycastle.crypto.params.ECPublicKeyParameters; +import org.bouncycastle.math.ec.ECCurve; +import org.bouncycastle.math.ec.ECPoint; import java.math.BigInteger; import java.security.GeneralSecurityException; diff --git a/bramble-core/src/main/java/org/briarproject/bramble/crypto/Sec1PrivateKey.java b/bramble-core/src/main/java/org/briarproject/bramble/crypto/Sec1PrivateKey.java index 7d93a9cbb..cbfe5a256 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/crypto/Sec1PrivateKey.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/crypto/Sec1PrivateKey.java @@ -2,7 +2,7 @@ package org.briarproject.bramble.crypto; import org.briarproject.bramble.api.crypto.PrivateKey; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; -import org.spongycastle.crypto.params.ECPrivateKeyParameters; +import org.bouncycastle.crypto.params.ECPrivateKeyParameters; import javax.annotation.concurrent.Immutable; diff --git a/bramble-core/src/main/java/org/briarproject/bramble/crypto/Sec1PublicKey.java b/bramble-core/src/main/java/org/briarproject/bramble/crypto/Sec1PublicKey.java index 3f4046f42..b0fff2d88 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/crypto/Sec1PublicKey.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/crypto/Sec1PublicKey.java @@ -2,7 +2,7 @@ package org.briarproject.bramble.crypto; import org.briarproject.bramble.api.crypto.PublicKey; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; -import org.spongycastle.crypto.params.ECPublicKeyParameters; +import org.bouncycastle.crypto.params.ECPublicKeyParameters; import javax.annotation.concurrent.Immutable; diff --git a/bramble-core/src/main/java/org/briarproject/bramble/crypto/TransportCryptoImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/crypto/TransportCryptoImpl.java index 2bf4c7b21..c0921c215 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/crypto/TransportCryptoImpl.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/crypto/TransportCryptoImpl.java @@ -9,8 +9,8 @@ import org.briarproject.bramble.api.plugin.TransportId; import org.briarproject.bramble.api.transport.IncomingKeys; import org.briarproject.bramble.api.transport.OutgoingKeys; import org.briarproject.bramble.api.transport.TransportKeys; -import org.spongycastle.crypto.Digest; -import org.spongycastle.crypto.digests.Blake2bDigest; +import org.bouncycastle.crypto.Digest; +import org.bouncycastle.crypto.digests.Blake2bDigest; import java.security.GeneralSecurityException; diff --git a/bramble-core/src/main/java/org/briarproject/bramble/crypto/XSalsa20Poly1305AuthenticatedCipher.java b/bramble-core/src/main/java/org/briarproject/bramble/crypto/XSalsa20Poly1305AuthenticatedCipher.java index 9c6908dd0..1933682b0 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/crypto/XSalsa20Poly1305AuthenticatedCipher.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/crypto/XSalsa20Poly1305AuthenticatedCipher.java @@ -3,12 +3,12 @@ package org.briarproject.bramble.crypto; import org.briarproject.bramble.api.crypto.AuthenticatedCipher; import org.briarproject.bramble.api.crypto.SecretKey; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; -import org.spongycastle.crypto.DataLengthException; -import org.spongycastle.crypto.engines.XSalsa20Engine; -import org.spongycastle.crypto.generators.Poly1305KeyGenerator; -import org.spongycastle.crypto.macs.Poly1305; -import org.spongycastle.crypto.params.KeyParameter; -import org.spongycastle.crypto.params.ParametersWithIV; +import org.bouncycastle.crypto.DataLengthException; +import org.bouncycastle.crypto.engines.XSalsa20Engine; +import org.bouncycastle.crypto.generators.Poly1305KeyGenerator; +import org.bouncycastle.crypto.macs.Poly1305; +import org.bouncycastle.crypto.params.KeyParameter; +import org.bouncycastle.crypto.params.ParametersWithIV; import java.security.GeneralSecurityException; diff --git a/bramble-core/src/main/java/org/briarproject/bramble/plugin/tor/TorRendezvousCryptoImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/tor/TorRendezvousCryptoImpl.java index 1545bcfba..dbd8c7b8d 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/plugin/tor/TorRendezvousCryptoImpl.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/plugin/tor/TorRendezvousCryptoImpl.java @@ -5,9 +5,9 @@ import net.i2p.crypto.eddsa.spec.EdDSANamedCurveTable; import net.i2p.crypto.eddsa.spec.EdDSAPrivateKeySpec; import org.briarproject.bramble.util.Base32; -import org.spongycastle.crypto.Digest; -import org.spongycastle.crypto.digests.SHA3Digest; -import org.spongycastle.util.encoders.Base64; +import org.bouncycastle.crypto.Digest; +import org.bouncycastle.crypto.digests.SHA3Digest; +import org.bouncycastle.util.encoders.Base64; import java.nio.charset.Charset; diff --git a/bramble-core/src/main/java/org/briarproject/bramble/rendezvous/KeyMaterialSourceImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/rendezvous/KeyMaterialSourceImpl.java index 7a2ec3508..396d4bcb3 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/rendezvous/KeyMaterialSourceImpl.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/rendezvous/KeyMaterialSourceImpl.java @@ -3,9 +3,9 @@ package org.briarproject.bramble.rendezvous; import org.briarproject.bramble.api.crypto.SecretKey; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.rendezvous.KeyMaterialSource; -import org.spongycastle.crypto.engines.Salsa20Engine; -import org.spongycastle.crypto.params.KeyParameter; -import org.spongycastle.crypto.params.ParametersWithIV; +import org.bouncycastle.crypto.engines.Salsa20Engine; +import org.bouncycastle.crypto.params.KeyParameter; +import org.bouncycastle.crypto.params.ParametersWithIV; import javax.annotation.concurrent.GuardedBy; import javax.annotation.concurrent.ThreadSafe; diff --git a/bramble-core/src/test/java/org/briarproject/bramble/crypto/Blake2bDigestTest.java b/bramble-core/src/test/java/org/briarproject/bramble/crypto/Blake2bDigestTest.java index 3154e925f..7bc7d41c0 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/crypto/Blake2bDigestTest.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/crypto/Blake2bDigestTest.java @@ -3,7 +3,7 @@ package org.briarproject.bramble.crypto; import org.briarproject.bramble.test.BrambleTestCase; import org.briarproject.bramble.util.StringUtils; import org.junit.Test; -import org.spongycastle.crypto.digests.Blake2bDigest; +import org.bouncycastle.crypto.digests.Blake2bDigest; import java.util.Random; diff --git a/bramble-core/src/test/java/org/briarproject/bramble/crypto/EllipticCurveMultiplicationTest.java b/bramble-core/src/test/java/org/briarproject/bramble/crypto/EllipticCurveMultiplicationTest.java deleted file mode 100644 index b4e639047..000000000 --- a/bramble-core/src/test/java/org/briarproject/bramble/crypto/EllipticCurveMultiplicationTest.java +++ /dev/null @@ -1,115 +0,0 @@ -package org.briarproject.bramble.crypto; - -import org.briarproject.bramble.test.BrambleTestCase; -import org.junit.Test; -import org.spongycastle.asn1.teletrust.TeleTrusTNamedCurves; -import org.spongycastle.asn1.x9.X9ECParameters; -import org.spongycastle.crypto.AsymmetricCipherKeyPair; -import org.spongycastle.crypto.agreement.ECDHCBasicAgreement; -import org.spongycastle.crypto.generators.ECKeyPairGenerator; -import org.spongycastle.crypto.params.ECDomainParameters; -import org.spongycastle.crypto.params.ECKeyGenerationParameters; -import org.spongycastle.crypto.params.ECPrivateKeyParameters; -import org.spongycastle.crypto.params.ECPublicKeyParameters; -import org.spongycastle.math.ec.ECCurve; -import org.spongycastle.math.ec.ECPoint; -import org.spongycastle.math.ec.MontgomeryLadderMultiplier; - -import java.math.BigInteger; -import java.security.SecureRandom; - -import static org.junit.Assert.assertEquals; - -public class EllipticCurveMultiplicationTest extends BrambleTestCase { - - @Test - public void testMultiplierProducesSameResultsAsDefault() throws Exception { - // Instantiate the default implementation of the curve - X9ECParameters defaultX9Parameters = - TeleTrusTNamedCurves.getByName("brainpoolp256r1"); - ECCurve defaultCurve = defaultX9Parameters.getCurve(); - ECPoint defaultG = defaultX9Parameters.getG(); - BigInteger defaultN = defaultX9Parameters.getN(); - BigInteger defaultH = defaultX9Parameters.getH(); - ECDomainParameters defaultParameters = new ECDomainParameters( - defaultCurve, defaultG, defaultN, defaultH); - // Instantiate an implementation using the Montgomery ladder multiplier - ECDomainParameters montgomeryParameters = - constantTime(defaultParameters); - // Generate two key pairs with each set of parameters, using the same - // deterministic PRNG for both sets of parameters - byte[] seed = new byte[32]; - new SecureRandom().nextBytes(seed); - // Montgomery ladder multiplier - SecureRandom random = new PseudoSecureRandom(seed); - ECKeyGenerationParameters montgomeryGeneratorParams = - new ECKeyGenerationParameters(montgomeryParameters, random); - ECKeyPairGenerator montgomeryGenerator = new ECKeyPairGenerator(); - montgomeryGenerator.init(montgomeryGeneratorParams); - AsymmetricCipherKeyPair montgomeryKeyPair1 = - montgomeryGenerator.generateKeyPair(); - ECPrivateKeyParameters montgomeryPrivate1 = - (ECPrivateKeyParameters) montgomeryKeyPair1.getPrivate(); - ECPublicKeyParameters montgomeryPublic1 = - (ECPublicKeyParameters) montgomeryKeyPair1.getPublic(); - AsymmetricCipherKeyPair montgomeryKeyPair2 = - montgomeryGenerator.generateKeyPair(); - ECPrivateKeyParameters montgomeryPrivate2 = - (ECPrivateKeyParameters) montgomeryKeyPair2.getPrivate(); - ECPublicKeyParameters montgomeryPublic2 = - (ECPublicKeyParameters) montgomeryKeyPair2.getPublic(); - // Default multiplier - random = new PseudoSecureRandom(seed); - ECKeyGenerationParameters defaultGeneratorParams = - new ECKeyGenerationParameters(defaultParameters, random); - ECKeyPairGenerator defaultGenerator = new ECKeyPairGenerator(); - defaultGenerator.init(defaultGeneratorParams); - AsymmetricCipherKeyPair defaultKeyPair1 = - defaultGenerator.generateKeyPair(); - ECPrivateKeyParameters defaultPrivate1 = - (ECPrivateKeyParameters) defaultKeyPair1.getPrivate(); - ECPublicKeyParameters defaultPublic1 = - (ECPublicKeyParameters) defaultKeyPair1.getPublic(); - AsymmetricCipherKeyPair defaultKeyPair2 = - defaultGenerator.generateKeyPair(); - ECPrivateKeyParameters defaultPrivate2 = - (ECPrivateKeyParameters) defaultKeyPair2.getPrivate(); - ECPublicKeyParameters defaultPublic2 = - (ECPublicKeyParameters) defaultKeyPair2.getPublic(); - // The key pairs generated with both sets of parameters should be equal - assertEquals(montgomeryPrivate1.getD(), defaultPrivate1.getD()); - assertEquals(montgomeryPublic1.getQ(), defaultPublic1.getQ()); - assertEquals(montgomeryPrivate2.getD(), defaultPrivate2.getD()); - assertEquals(montgomeryPublic2.getQ(), defaultPublic2.getQ()); - // OK, all of the above was just sanity checks - now for the test! - ECDHCBasicAgreement agreement = new ECDHCBasicAgreement(); - agreement.init(montgomeryPrivate1); - BigInteger sharedSecretMontgomeryMontgomery = - agreement.calculateAgreement(montgomeryPublic2); - agreement.init(montgomeryPrivate1); - BigInteger sharedSecretMontgomeryDefault = - agreement.calculateAgreement(defaultPublic2); - agreement.init(defaultPrivate1); - BigInteger sharedSecretDefaultMontgomery = - agreement.calculateAgreement(montgomeryPublic2); - agreement.init(defaultPrivate1); - BigInteger sharedSecretDefaultDefault = - agreement.calculateAgreement(defaultPublic2); - // Shared secrets calculated with different multipliers should be equal - assertEquals(sharedSecretMontgomeryMontgomery, - sharedSecretMontgomeryDefault); - assertEquals(sharedSecretMontgomeryMontgomery, - sharedSecretDefaultMontgomery); - assertEquals(sharedSecretMontgomeryMontgomery, - sharedSecretDefaultDefault); - } - - private static ECDomainParameters constantTime(ECDomainParameters in) { - ECCurve curve = in.getCurve().configure().setMultiplier( - new MontgomeryLadderMultiplier()).create(); - BigInteger x = in.getG().getAffineXCoord().toBigInteger(); - BigInteger y = in.getG().getAffineYCoord().toBigInteger(); - ECPoint g = curve.createPoint(x, y); - return new ECDomainParameters(curve, g, in.getN(), in.getH()); - } -} diff --git a/bramble-core/src/test/java/org/briarproject/bramble/crypto/EllipticCurvePerformanceTest.java b/bramble-core/src/test/java/org/briarproject/bramble/crypto/EllipticCurvePerformanceTest.java index abf2798b1..f23921711 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/crypto/EllipticCurvePerformanceTest.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/crypto/EllipticCurvePerformanceTest.java @@ -3,30 +3,26 @@ package org.briarproject.bramble.crypto; import net.i2p.crypto.eddsa.EdDSASecurityProvider; import net.i2p.crypto.eddsa.KeyPairGenerator; -import org.spongycastle.asn1.sec.SECNamedCurves; -import org.spongycastle.asn1.teletrust.TeleTrusTNamedCurves; -import org.spongycastle.asn1.x9.X9ECParameters; -import org.spongycastle.crypto.AsymmetricCipherKeyPair; -import org.spongycastle.crypto.BasicAgreement; -import org.spongycastle.crypto.Digest; -import org.spongycastle.crypto.agreement.ECDHBasicAgreement; -import org.spongycastle.crypto.agreement.ECDHCBasicAgreement; -import org.spongycastle.crypto.digests.Blake2bDigest; -import org.spongycastle.crypto.generators.ECKeyPairGenerator; -import org.spongycastle.crypto.params.ECDomainParameters; -import org.spongycastle.crypto.params.ECKeyGenerationParameters; -import org.spongycastle.crypto.params.ParametersWithRandom; -import org.spongycastle.crypto.signers.DSADigestSigner; -import org.spongycastle.crypto.signers.DSAKCalculator; -import org.spongycastle.crypto.signers.ECDSASigner; -import org.spongycastle.crypto.signers.HMacDSAKCalculator; -import org.spongycastle.math.ec.ECCurve; -import org.spongycastle.math.ec.ECPoint; -import org.spongycastle.math.ec.MontgomeryLadderMultiplier; +import org.bouncycastle.asn1.sec.SECNamedCurves; +import org.bouncycastle.asn1.teletrust.TeleTrusTNamedCurves; +import org.bouncycastle.asn1.x9.X9ECParameters; +import org.bouncycastle.crypto.AsymmetricCipherKeyPair; +import org.bouncycastle.crypto.BasicAgreement; +import org.bouncycastle.crypto.Digest; +import org.bouncycastle.crypto.agreement.ECDHBasicAgreement; +import org.bouncycastle.crypto.agreement.ECDHCBasicAgreement; +import org.bouncycastle.crypto.digests.Blake2bDigest; +import org.bouncycastle.crypto.generators.ECKeyPairGenerator; +import org.bouncycastle.crypto.params.ECDomainParameters; +import org.bouncycastle.crypto.params.ECKeyGenerationParameters; +import org.bouncycastle.crypto.params.ParametersWithRandom; +import org.bouncycastle.crypto.signers.DSADigestSigner; +import org.bouncycastle.crypto.signers.DSAKCalculator; +import org.bouncycastle.crypto.signers.ECDSASigner; +import org.bouncycastle.crypto.signers.HMacDSAKCalculator; import org.whispersystems.curve25519.Curve25519; import org.whispersystems.curve25519.Curve25519KeyPair; -import java.math.BigInteger; import java.security.GeneralSecurityException; import java.security.KeyPair; import java.security.Provider; @@ -55,14 +51,12 @@ public class EllipticCurvePerformanceTest { for (String name : SEC_NAMES) { ECDomainParameters params = convertParams(SECNamedCurves.getByName(name)); - runTest(name + " default", params); - runTest(name + " constant", constantTime(params)); + runTest(name, params); } for (String name : BRAINPOOL_NAMES) { ECDomainParameters params = convertParams(TeleTrusTNamedCurves.getByName(name)); - runTest(name + " default", params); - runTest(name + " constant", constantTime(params)); + runTest(name, params); } runCurve25519Test(); runEd25519Test(); @@ -193,13 +187,4 @@ public class EllipticCurvePerformanceTest { return new ECDomainParameters(in.getCurve(), in.getG(), in.getN(), in.getH()); } - - private static ECDomainParameters constantTime(ECDomainParameters in) { - ECCurve curve = in.getCurve().configure().setMultiplier( - new MontgomeryLadderMultiplier()).create(); - BigInteger x = in.getG().getAffineXCoord().toBigInteger(); - BigInteger y = in.getG().getAffineYCoord().toBigInteger(); - ECPoint g = curve.createPoint(x, y); - return new ECDomainParameters(curve, g, in.getN(), in.getH()); - } } diff --git a/bramble-core/src/test/java/org/briarproject/bramble/crypto/MessageEncrypterTest.java b/bramble-core/src/test/java/org/briarproject/bramble/crypto/MessageEncrypterTest.java index 8b15e222a..dbb830a7d 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/crypto/MessageEncrypterTest.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/crypto/MessageEncrypterTest.java @@ -5,7 +5,7 @@ import org.briarproject.bramble.api.crypto.PrivateKey; import org.briarproject.bramble.api.crypto.PublicKey; import org.briarproject.bramble.test.BrambleTestCase; import org.junit.Test; -import org.spongycastle.crypto.CryptoException; +import org.bouncycastle.crypto.CryptoException; import java.security.SecureRandom; diff --git a/bramble-core/src/test/java/org/briarproject/bramble/crypto/PseudoRandom.java b/bramble-core/src/test/java/org/briarproject/bramble/crypto/PseudoRandom.java index e778a1fda..3d24b65b3 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/crypto/PseudoRandom.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/crypto/PseudoRandom.java @@ -1,11 +1,11 @@ package org.briarproject.bramble.crypto; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; -import org.spongycastle.crypto.Digest; -import org.spongycastle.crypto.digests.Blake2bDigest; -import org.spongycastle.crypto.engines.Salsa20Engine; -import org.spongycastle.crypto.params.KeyParameter; -import org.spongycastle.crypto.params.ParametersWithIV; +import org.bouncycastle.crypto.Digest; +import org.bouncycastle.crypto.digests.Blake2bDigest; +import org.bouncycastle.crypto.engines.Salsa20Engine; +import org.bouncycastle.crypto.params.KeyParameter; +import org.bouncycastle.crypto.params.ParametersWithIV; import javax.annotation.concurrent.NotThreadSafe; diff --git a/bramble-core/witness.gradle b/bramble-core/witness.gradle index 9ab2fac6d..7c57bd4c0 100644 --- a/bramble-core/witness.gradle +++ b/bramble-core/witness.gradle @@ -14,7 +14,6 @@ dependencyVerification { 'com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava:listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar:b372a037d4230aa57fbeffdef30fd6123f9c0c2db85d0aced00c91b974f33f99', 'com.google.j2objc:j2objc-annotations:1.1:j2objc-annotations-1.1.jar:2994a7eb78f2710bd3d3bfb639b2c94e219cedac0d4d084d516e78c16dddecf6', 'com.h2database:h2:1.4.192:h2-1.4.192.jar:225b22e9857235c46c93861410b60b8c81c10dc8985f4faf188985ba5445126c', - 'com.madgag.spongycastle:core:1.58.0.0:core-1.58.0.0.jar:199617dd5698c5a9312b898c0a4cec7ce9dd8649d07f65d91629f58229d72728', 'com.squareup:javapoet:1.11.1:javapoet-1.11.1.jar:9cbf2107be499ec6e95afd36b58e3ca122a24166cdd375732e51267d64058e90', 'javax.annotation:jsr250-api:1.0:jsr250-api-1.0.jar:a1a922d0d9b6d183ed3800dfac01d1e1eb159f0e8c6f94736931c1def54a941f', 'javax.inject:javax.inject:1:javax.inject-1.jar:91c77044a50c481636c32d916fd89c9118a72195390452c81065080f957de7ff', @@ -25,6 +24,7 @@ dependencyVerification { 'org.apache.ant:ant:1.9.4:ant-1.9.4.jar:649ae0730251de07b8913f49286d46bba7b92d47c5f332610aa426c4f02161d8', 'org.beanshell:bsh:1.3.0:bsh-1.3.0.jar:9b04edc75d19db54f1b4e8b5355e9364384c6cf71eb0a1b9724c159d779879f8', 'org.bitlet:weupnp:0.1.4:weupnp-0.1.4.jar:88df7e6504929d00bdb832863761385c68ab92af945b04f0770b126270a444fb', + 'org.bouncycastle:bcprov-jdk15on:1.69:bcprov-jdk15on-1.69.jar:e469bd39f936999f256002631003ff022a22951da9d5bd9789c7abfa9763a292', 'org.briarproject:jtorctl:0.3:jtorctl-0.3.jar:f2939238a097898998432effe93b0334d97a787972ab3a91a8973a1d309fc864', 'org.checkerframework:checker-compat-qual:2.5.3:checker-compat-qual-2.5.3.jar:d76b9afea61c7c082908023f0cbc1427fab9abd2df915c8b8a3e7a509bccbc6d', 'org.checkerframework:checker-qual:2.5.2:checker-qual-2.5.2.jar:64b02691c8b9d4e7700f8ee2e742dce7ea2c6e81e662b7522c9ee3bf568c040a', diff --git a/briar-android/witness.gradle b/briar-android/witness.gradle index 3bef77ee0..d1f152f50 100644 --- a/briar-android/witness.gradle +++ b/briar-android/witness.gradle @@ -187,7 +187,6 @@ dependencyVerification { 'org.apache.maven:maven-settings:2.2.1:maven-settings-2.2.1.jar:9a9f556713a404e770c9dbdaed7eb086078014c989291960c76fdde6db4192f7', 'org.beanshell:bsh:1.3.0:bsh-1.3.0.jar:9b04edc75d19db54f1b4e8b5355e9364384c6cf71eb0a1b9724c159d779879f8', 'org.bouncycastle:bcpkix-jdk15on:1.56:bcpkix-jdk15on-1.56.jar:7043dee4e9e7175e93e0b36f45b1ec1ecb893c5f755667e8b916eb8dd201c6ca', - 'org.bouncycastle:bcprov-jdk15on:1.52:bcprov-jdk15on-1.52.jar:0dc4d181e4d347893c2ddbd2e6cd5d7287fc651c03648fa64b2341c7366b1773', 'org.bouncycastle:bcprov-jdk15on:1.56:bcprov-jdk15on-1.56.jar:963e1ee14f808ffb99897d848ddcdb28fa91ddda867eb18d303e82728f878349', 'org.checkerframework:checker-compat-qual:2.5.3:checker-compat-qual-2.5.3.jar:d76b9afea61c7c082908023f0cbc1427fab9abd2df915c8b8a3e7a509bccbc6d', 'org.checkerframework:checker-compat-qual:2.5.5:checker-compat-qual-2.5.5.jar:11d134b245e9cacc474514d2d66b5b8618f8039a1465cdc55bbc0b34e0008b7a',