diff --git a/integration-tests/src/main/java/org/signal/integration/Codecs.java b/integration-tests/src/main/java/org/signal/integration/Codecs.java index db985945c..5d4d89342 100644 --- a/integration-tests/src/main/java/org/signal/integration/Codecs.java +++ b/integration-tests/src/main/java/org/signal/integration/Codecs.java @@ -14,7 +14,6 @@ import com.fasterxml.jackson.databind.SerializerProvider; import java.io.IOException; import java.util.Base64; import org.signal.libsignal.protocol.IdentityKey; -import org.signal.libsignal.protocol.ecc.Curve; import org.signal.libsignal.protocol.ecc.ECPublicKey; public final class Codecs { @@ -84,7 +83,7 @@ public final class Codecs { public static class ECPublicKeyDeserializer extends Base64BasedDeserializer { public ECPublicKeyDeserializer() { - super(bytes -> Curve.decodePoint(bytes, 0)); + super(ECPublicKey::new); } } diff --git a/integration-tests/src/main/java/org/signal/integration/Operations.java b/integration-tests/src/main/java/org/signal/integration/Operations.java index afb96b4d4..83b35a4ed 100644 --- a/integration-tests/src/main/java/org/signal/integration/Operations.java +++ b/integration-tests/src/main/java/org/signal/integration/Operations.java @@ -34,7 +34,6 @@ import org.apache.commons.lang3.Validate; import org.apache.commons.lang3.tuple.Pair; import org.signal.integration.config.Config; import org.signal.libsignal.protocol.IdentityKey; -import org.signal.libsignal.protocol.ecc.Curve; import org.signal.libsignal.protocol.ecc.ECKeyPair; import org.signal.libsignal.protocol.ecc.ECPublicKey; import org.signal.libsignal.protocol.kem.KEMKeyPair; @@ -79,8 +78,8 @@ public final class Operations { final TestUser user = TestUser.create(number, accountPassword, registrationPassword); final AccountAttributes accountAttributes = user.accountAttributes(); - final ECKeyPair aciIdentityKeyPair = Curve.generateKeyPair(); - final ECKeyPair pniIdentityKeyPair = Curve.generateKeyPair(); + final ECKeyPair aciIdentityKeyPair = ECKeyPair.generate(); + final ECKeyPair pniIdentityKeyPair = ECKeyPair.generate(); // register account final RegistrationRequest registrationRequest = new RegistrationRequest(null, @@ -337,7 +336,7 @@ public final class Operations { } public static ECSignedPreKey generateSignedECPreKey(final long id, final ECKeyPair identityKeyPair) { - final ECPublicKey pubKey = Curve.generateKeyPair().getPublicKey(); + final ECPublicKey pubKey = ECKeyPair.generate().getPublicKey(); final byte[] signature = identityKeyPair.getPrivateKey().calculateSignature(pubKey.serialize()); return new ECSignedPreKey(id, pubKey, signature); } diff --git a/integration-tests/src/main/java/org/signal/integration/TestDevice.java b/integration-tests/src/main/java/org/signal/integration/TestDevice.java index 174175f4e..7edd81ce3 100644 --- a/integration-tests/src/main/java/org/signal/integration/TestDevice.java +++ b/integration-tests/src/main/java/org/signal/integration/TestDevice.java @@ -9,8 +9,6 @@ import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import org.apache.commons.lang3.tuple.Pair; import org.signal.libsignal.protocol.IdentityKeyPair; -import org.signal.libsignal.protocol.InvalidKeyException; -import org.signal.libsignal.protocol.ecc.Curve; import org.signal.libsignal.protocol.ecc.ECKeyPair; import org.signal.libsignal.protocol.state.SignedPreKeyRecord; @@ -50,15 +48,11 @@ public class TestDevice { } public SignedPreKeyRecord addSignedPreKey(final IdentityKeyPair identity) { - try { - final int nextId = signedPreKeys.keySet().stream().mapToInt(k -> k + 1).max().orElse(0); - final ECKeyPair keyPair = Curve.generateKeyPair(); - final byte[] signature = Curve.calculateSignature(identity.getPrivateKey(), keyPair.getPublicKey().serialize()); - final SignedPreKeyRecord signedPreKeyRecord = new SignedPreKeyRecord(nextId, System.currentTimeMillis(), keyPair, signature); - signedPreKeys.put(nextId, Pair.of(identity, signedPreKeyRecord)); - return signedPreKeyRecord; - } catch (InvalidKeyException e) { - throw new RuntimeException(e); - } + final int nextId = signedPreKeys.keySet().stream().mapToInt(k -> k + 1).max().orElse(0); + final ECKeyPair keyPair = ECKeyPair.generate(); + final byte[] signature = keyPair.getPrivateKey().calculateSignature(keyPair.getPublicKey().serialize()); + final SignedPreKeyRecord signedPreKeyRecord = new SignedPreKeyRecord(nextId, System.currentTimeMillis(), keyPair, signature); + signedPreKeys.put(nextId, Pair.of(identity, signedPreKeyRecord)); + return signedPreKeyRecord; } } diff --git a/integration-tests/src/test/java/org/signal/integration/AccountTest.java b/integration-tests/src/test/java/org/signal/integration/AccountTest.java index dd3b795fa..6039312a0 100644 --- a/integration-tests/src/test/java/org/signal/integration/AccountTest.java +++ b/integration-tests/src/test/java/org/signal/integration/AccountTest.java @@ -17,7 +17,6 @@ import org.apache.commons.lang3.tuple.Pair; import org.apache.http.HttpStatus; import org.junit.jupiter.api.Test; import org.signal.libsignal.protocol.IdentityKey; -import org.signal.libsignal.protocol.ecc.Curve; import org.signal.libsignal.protocol.ecc.ECKeyPair; import org.signal.libsignal.usernames.BaseUsernameException; import org.signal.libsignal.usernames.Username; @@ -64,7 +63,7 @@ public class AccountTest { final TestUser user = Operations.newRegisteredUser("+19995550301"); final String targetNumber = "+19995550302"; - final ECKeyPair pniIdentityKeyPair = Curve.generateKeyPair(); + final ECKeyPair pniIdentityKeyPair = ECKeyPair.generate(); final ChangeNumberRequest changeNumberRequest = new ChangeNumberRequest(null, Operations.populateRandomRecoveryPassword(targetNumber), diff --git a/pom.xml b/pom.xml index 546bfabdb..bc9b054ee 100644 --- a/pom.xml +++ b/pom.xml @@ -277,7 +277,7 @@ org.signal libsignal-server - 0.67.6 + 0.76.5 org.signal diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/auth/CertificateGenerator.java b/service/src/main/java/org/whispersystems/textsecuregcm/auth/CertificateGenerator.java index 123b2b59e..75b21f061 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/auth/CertificateGenerator.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/auth/CertificateGenerator.java @@ -9,7 +9,6 @@ import com.google.protobuf.ByteString; import com.google.protobuf.InvalidProtocolBufferException; import java.security.InvalidKeyException; import java.util.concurrent.TimeUnit; -import org.signal.libsignal.protocol.ecc.Curve; import org.signal.libsignal.protocol.ecc.ECPrivateKey; import org.whispersystems.textsecuregcm.entities.MessageProtos.SenderCertificate; import org.whispersystems.textsecuregcm.entities.MessageProtos.ServerCertificate; @@ -45,11 +44,7 @@ public class CertificateGenerator { byte[] certificate = builder.build().toByteArray(); byte[] signature; - try { - signature = Curve.calculateSignature(privateKey, certificate); - } catch (org.signal.libsignal.protocol.InvalidKeyException e) { - throw new InvalidKeyException(e); - } + signature = privateKey.calculateSignature(certificate); return SenderCertificate.newBuilder() .setCertificate(ByteString.copyFrom(certificate)) diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/backup/BackupManager.java b/service/src/main/java/org/whispersystems/textsecuregcm/backup/BackupManager.java index 3aeb5b68c..970084d27 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/backup/BackupManager.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/backup/BackupManager.java @@ -26,7 +26,7 @@ import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletionStage; import java.util.function.Function; import org.apache.commons.lang3.StringUtils; -import org.signal.libsignal.protocol.ecc.Curve; +import org.signal.libsignal.protocol.ecc.ECKeyPair; import org.signal.libsignal.protocol.ecc.ECPublicKey; import org.signal.libsignal.zkgroup.GenericServerSecretParams; import org.signal.libsignal.zkgroup.VerificationFailedException; @@ -527,7 +527,7 @@ public class BackupManager { } } - private static final ECPublicKey INVALID_PUBLIC_KEY = Curve.generateKeyPair().getPublicKey(); + private static final ECPublicKey INVALID_PUBLIC_KEY = ECKeyPair.generate().getPublicKey(); /** * Authenticate the ZK anonymous backup credential's presentation diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/configuration/NoiseTunnelConfiguration.java b/service/src/main/java/org/whispersystems/textsecuregcm/configuration/NoiseTunnelConfiguration.java index cc2806fdb..521bd0af9 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/configuration/NoiseTunnelConfiguration.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/configuration/NoiseTunnelConfiguration.java @@ -4,7 +4,6 @@ import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.Positive; import javax.annotation.Nullable; import org.signal.libsignal.protocol.InvalidKeyException; -import org.signal.libsignal.protocol.ecc.Curve; import org.signal.libsignal.protocol.ecc.ECKeyPair; import org.signal.libsignal.protocol.ecc.ECPrivateKey; import org.whispersystems.textsecuregcm.configuration.secrets.SecretBytes; @@ -19,7 +18,7 @@ public record NoiseTunnelConfiguration(@Positive int webSocketPort, @NotNull SecretString recognizedProxySecret) { public ECKeyPair noiseStaticKeyPair() throws InvalidKeyException { - final ECPrivateKey privateKey = Curve.decodePrivatePoint(noiseStaticPrivateKey().value()); + final ECPrivateKey privateKey = new ECPrivateKey(noiseStaticPrivateKey().value()); return new ECKeyPair(privateKey.publicKey(), privateKey); } diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/configuration/UnidentifiedDeliveryConfiguration.java b/service/src/main/java/org/whispersystems/textsecuregcm/configuration/UnidentifiedDeliveryConfiguration.java index 2a45b1e3e..7ce2829ac 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/configuration/UnidentifiedDeliveryConfiguration.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/configuration/UnidentifiedDeliveryConfiguration.java @@ -8,7 +8,6 @@ package org.whispersystems.textsecuregcm.configuration; import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotNull; import org.signal.libsignal.protocol.InvalidKeyException; -import org.signal.libsignal.protocol.ecc.Curve; import org.signal.libsignal.protocol.ecc.ECPrivateKey; import org.whispersystems.textsecuregcm.configuration.secrets.SecretBytes; import org.whispersystems.textsecuregcm.util.ExactlySize; @@ -17,6 +16,6 @@ public record UnidentifiedDeliveryConfiguration(@NotNull @NotEmpty byte[] certi @ExactlySize(32) SecretBytes privateKey, int expiresDays) { public ECPrivateKey ecPrivateKey() throws InvalidKeyException { - return Curve.decodePrivatePoint(privateKey.value()); + return new ECPrivateKey(privateKey.value()); } } diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/workers/CertificateCommand.java b/service/src/main/java/org/whispersystems/textsecuregcm/workers/CertificateCommand.java index eee7f5c2f..cd7acf55a 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/workers/CertificateCommand.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/workers/CertificateCommand.java @@ -15,7 +15,6 @@ import java.util.Set; import net.sourceforge.argparse4j.impl.Arguments; import net.sourceforge.argparse4j.inf.Namespace; import net.sourceforge.argparse4j.inf.Subparser; -import org.signal.libsignal.protocol.ecc.Curve; import org.signal.libsignal.protocol.ecc.ECKeyPair; import org.signal.libsignal.protocol.ecc.ECPrivateKey; import org.whispersystems.textsecuregcm.entities.MessageProtos; @@ -56,7 +55,7 @@ public class CertificateCommand extends Command { } private void runCaCommand() { - ECKeyPair keyPair = Curve.generateKeyPair(); + ECKeyPair keyPair = ECKeyPair.generate(); System.out.println("Public key : " + Base64.getEncoder().encodeToString(keyPair.getPublicKey().serialize())); System.out.println("Private key: " + Base64.getEncoder().encodeToString(keyPair.getPrivateKey().serialize())); } @@ -72,7 +71,7 @@ public class CertificateCommand extends Command { return; } - ECPrivateKey key = Curve.decodePrivatePoint(Base64.getDecoder().decode(namespace.getString("key"))); + ECPrivateKey key = new ECPrivateKey(Base64.getDecoder().decode(namespace.getString("key"))); int keyId = namespace.getInt("keyId"); if (RESERVED_CERTIFICATE_IDS.contains(keyId)) { @@ -80,7 +79,7 @@ public class CertificateCommand extends Command { String.format("Key ID %08x has been reserved or revoked and may not be used in new certificates.", keyId)); } - ECKeyPair keyPair = Curve.generateKeyPair(); + ECKeyPair keyPair = ECKeyPair.generate(); byte[] certificate = MessageProtos.ServerCertificate.Certificate.newBuilder() .setId(keyId) @@ -89,11 +88,7 @@ public class CertificateCommand extends Command { .toByteArray(); byte[] signature; - try { - signature = Curve.calculateSignature(key, certificate); - } catch (org.signal.libsignal.protocol.InvalidKeyException e) { - throw new InvalidKeyException(e); - } + signature = key.calculateSignature(certificate); byte[] signedCertificate = MessageProtos.ServerCertificate.newBuilder() .setCertificate(ByteString.copyFrom(certificate)) diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/auth/CertificateGeneratorTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/auth/CertificateGeneratorTest.java index a9cb942df..2f944d915 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/auth/CertificateGeneratorTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/auth/CertificateGeneratorTest.java @@ -15,7 +15,7 @@ import java.util.Base64; import java.util.UUID; import org.junit.jupiter.api.Test; import org.signal.libsignal.protocol.IdentityKey; -import org.signal.libsignal.protocol.ecc.Curve; +import org.signal.libsignal.protocol.ecc.ECPrivateKey; import org.whispersystems.textsecuregcm.identity.IdentityType; import org.whispersystems.textsecuregcm.storage.Account; @@ -39,7 +39,7 @@ class CertificateGeneratorTest { final byte deviceId = 4; final CertificateGenerator certificateGenerator = new CertificateGenerator( Base64.getDecoder().decode(SIGNING_CERTIFICATE), - Curve.decodePrivatePoint(Base64.getDecoder().decode(SIGNING_KEY)), 1); + new ECPrivateKey(Base64.getDecoder().decode(SIGNING_KEY)), 1); when(account.getIdentityKey(IdentityType.ACI)).thenReturn(IDENTITY_KEY); when(account.getUuid()).thenReturn(UUID.randomUUID()); diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/backup/BackupManagerTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/backup/BackupManagerTest.java index 9edda12fd..18e0cb65b 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/backup/BackupManagerTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/backup/BackupManagerTest.java @@ -62,8 +62,8 @@ import org.junit.jupiter.params.provider.EnumSource; import org.junit.jupiter.params.provider.ValueSource; import org.junitpioneer.jupiter.cartesian.CartesianTest; import org.signal.libsignal.protocol.InvalidKeyException; -import org.signal.libsignal.protocol.ecc.Curve; import org.signal.libsignal.protocol.ecc.ECKeyPair; +import org.signal.libsignal.protocol.ecc.ECPrivateKey; import org.signal.libsignal.zkgroup.GenericServerSecretParams; import org.signal.libsignal.zkgroup.VerificationFailedException; import org.signal.libsignal.zkgroup.backups.BackupAuthCredentialPresentation; @@ -306,7 +306,7 @@ public class BackupManagerTest { GenericServerSecretParams.generate(), BackupLevel.FREE, backupKey, aci); - final ECKeyPair keyPair = Curve.generateKeyPair(); + final ECKeyPair keyPair = ECKeyPair.generate(); // haven't set a public key yet, but should fail before hitting the database anyway assertThatExceptionOfType(StatusRuntimeException.class) @@ -328,7 +328,7 @@ public class BackupManagerTest { GenericServerSecretParams.generate(), BackupLevel.FREE, backupKey, aci); - final ECKeyPair keyPair = Curve.generateKeyPair(); + final ECKeyPair keyPair = ECKeyPair.generate(); backupManager.setPublicKey( presentation, keyPair.getPrivateKey().calculateSignature(presentation.serialize()), @@ -349,7 +349,7 @@ public class BackupManagerTest { final BackupAuthCredentialPresentation presentation = backupAuthTestUtil.getPresentation( BackupLevel.FREE, backupKey, aci); - final ECKeyPair keyPair = Curve.generateKeyPair(); + final ECKeyPair keyPair = ECKeyPair.generate(); final byte[] signature = keyPair.getPrivateKey().calculateSignature(presentation.serialize()); // haven't set a public key yet @@ -365,8 +365,8 @@ public class BackupManagerTest { final BackupAuthCredentialPresentation presentation = backupAuthTestUtil.getPresentation( BackupLevel.FREE, backupKey, aci); - final ECKeyPair keyPair1 = Curve.generateKeyPair(); - final ECKeyPair keyPair2 = Curve.generateKeyPair(); + final ECKeyPair keyPair1 = ECKeyPair.generate(); + final ECKeyPair keyPair2 = ECKeyPair.generate(); final byte[] signature1 = keyPair1.getPrivateKey().calculateSignature(presentation.serialize()); final byte[] signature2 = keyPair2.getPrivateKey().calculateSignature(presentation.serialize()); @@ -388,7 +388,7 @@ public class BackupManagerTest { final BackupAuthCredentialPresentation presentation = backupAuthTestUtil.getPresentation( BackupLevel.FREE, backupKey, aci); - final ECKeyPair keyPair = Curve.generateKeyPair(); + final ECKeyPair keyPair = ECKeyPair.generate(); final byte[] signature = keyPair.getPrivateKey().calculateSignature(presentation.serialize()); // an invalid signature @@ -423,7 +423,7 @@ public class BackupManagerTest { testClock.pin(Instant.ofEpochSecond(1).plus(Duration.ofDays(1))); final BackupAuthCredentialPresentation oldCredential = backupAuthTestUtil.getPresentation(BackupLevel.FREE, backupKey, aci); - final ECKeyPair keyPair = Curve.generateKeyPair(); + final ECKeyPair keyPair = ECKeyPair.generate(); final byte[] signature = keyPair.getPrivateKey().calculateSignature(oldCredential.serialize()); backupManager.setPublicKey(oldCredential, signature, keyPair.getPublicKey()).join(); @@ -1091,7 +1091,7 @@ public class BackupManagerTest { byte[] privateKey = new byte[32]; ByteBuffer.wrap(privateKey).put(backupId); try { - backupsDb.setPublicKey(backupId, backupLevel, Curve.decodePrivatePoint(privateKey).publicKey()).join(); + backupsDb.setPublicKey(backupId, backupLevel, new ECPrivateKey(privateKey).publicKey()).join(); } catch (InvalidKeyException e) { throw new RuntimeException(e); } diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/backup/BackupsDbTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/backup/BackupsDbTest.java index 299f778c7..df14d4eca 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/backup/BackupsDbTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/backup/BackupsDbTest.java @@ -26,7 +26,7 @@ import org.junit.jupiter.api.extension.RegisterExtension; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.EnumSource; import org.junit.jupiter.params.provider.ValueSource; -import org.signal.libsignal.protocol.ecc.Curve; +import org.signal.libsignal.protocol.ecc.ECKeyPair; import org.signal.libsignal.zkgroup.backups.BackupCredentialType; import org.signal.libsignal.zkgroup.backups.BackupLevel; import org.whispersystems.textsecuregcm.auth.AuthenticatedBackupUser; @@ -95,7 +95,7 @@ public class BackupsDbTest { final byte[] backupId = TestRandomUtil.nextBytes(16); // Refresh media/messages at t=0D testClock.pin(days(0)); - backupsDb.setPublicKey(backupId, BackupLevel.PAID, Curve.generateKeyPair().getPublicKey()).join(); + backupsDb.setPublicKey(backupId, BackupLevel.PAID, ECKeyPair.generate().getPublicKey()).join(); this.backupsDb.ttlRefresh(backupUser(backupId, BackupCredentialType.MEDIA, BackupLevel.PAID)).join(); // refresh only messages on t=2D @@ -138,7 +138,7 @@ public class BackupsDbTest { final byte[] backupId = TestRandomUtil.nextBytes(16); // Refresh media/messages at t=0D testClock.pin(days(0)); - backupsDb.setPublicKey(backupId, BackupLevel.PAID, Curve.generateKeyPair().getPublicKey()).join(); + backupsDb.setPublicKey(backupId, BackupLevel.PAID, ECKeyPair.generate().getPublicKey()).join(); this.backupsDb.ttlRefresh(backupUser(backupId, BackupCredentialType.MEDIA, BackupLevel.PAID)).join(); if (expirationType == ExpiredBackup.ExpirationType.MEDIA) { diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/controllers/AccountControllerV2Test.java b/service/src/test/java/org/whispersystems/textsecuregcm/controllers/AccountControllerV2Test.java index f4f9dd87f..08bf24ede 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/controllers/AccountControllerV2Test.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/controllers/AccountControllerV2Test.java @@ -62,7 +62,6 @@ import org.junit.jupiter.params.provider.MethodSource; import org.mockito.ArgumentCaptor; import org.mockito.stubbing.Answer; import org.signal.libsignal.protocol.IdentityKey; -import org.signal.libsignal.protocol.ecc.Curve; import org.signal.libsignal.protocol.ecc.ECKeyPair; import org.whispersystems.textsecuregcm.auth.AuthenticatedDevice; import org.whispersystems.textsecuregcm.auth.PhoneVerificationTokenManager; @@ -103,7 +102,7 @@ class AccountControllerV2Test { private static final long SESSION_EXPIRATION_SECONDS = Duration.ofMinutes(10).toSeconds(); - private static final ECKeyPair IDENTITY_KEY_PAIR = Curve.generateKeyPair(); + private static final ECKeyPair IDENTITY_KEY_PAIR = ECKeyPair.generate(); private static final IdentityKey IDENTITY_KEY = new IdentityKey(IDENTITY_KEY_PAIR.getPublicKey()); private static final String NEW_NUMBER = PhoneNumberUtil.getInstance().format( @@ -240,7 +239,7 @@ class AccountControllerV2Test { .put(Entity.entity( // +4407700900111 is a valid number but not normalized - it has an optional '0' after the country code new ChangeNumberRequest(encodeSessionId("session"), null, "+4407700900111", null, - new IdentityKey(Curve.generateKeyPair().getPublicKey()), + new IdentityKey(ECKeyPair.generate().getPublicKey()), Collections.emptyList(), Collections.emptyMap(), null, Collections.emptyMap()), MediaType.APPLICATION_JSON_TYPE))) { @@ -802,8 +801,8 @@ class AccountControllerV2Test { final boolean unrestrictedUnidentifiedAccess, final boolean discoverableByPhoneNumber, List badges, List devices) { - final ECKeyPair aciIdentityKeyPair = Curve.generateKeyPair(); - final ECKeyPair pniIdentityKeyPair = Curve.generateKeyPair(); + final ECKeyPair aciIdentityKeyPair = ECKeyPair.generate(); + final ECKeyPair pniIdentityKeyPair = ECKeyPair.generate(); final Account account = new Account(); account.setUuid(aci); diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/controllers/ArchiveControllerTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/controllers/ArchiveControllerTest.java index 81c96c31d..4eeb3ae04 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/controllers/ArchiveControllerTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/controllers/ArchiveControllerTest.java @@ -47,7 +47,7 @@ import org.junit.jupiter.params.provider.CsvSource; import org.junit.jupiter.params.provider.EnumSource; import org.junit.jupiter.params.provider.MethodSource; import org.junitpioneer.jupiter.cartesian.CartesianTest; -import org.signal.libsignal.protocol.ecc.Curve; +import org.signal.libsignal.protocol.ecc.ECKeyPair; import org.signal.libsignal.zkgroup.InvalidInputException; import org.signal.libsignal.zkgroup.ServerSecretParams; import org.signal.libsignal.zkgroup.VerificationFailedException; @@ -247,7 +247,7 @@ public class ArchiveControllerTest { .header("X-Signal-ZK-Auth", Base64.getEncoder().encodeToString(presentation.serialize())) .header("X-Signal-ZK-Auth-Signature", "aaa") .put(Entity.entity( - new ArchiveController.SetPublicKeyRequest(Curve.generateKeyPair().getPublicKey()), + new ArchiveController.SetPublicKeyRequest(ECKeyPair.generate().getPublicKey()), MediaType.APPLICATION_JSON_TYPE)); assertThat(response.getStatus()).isEqualTo(204); } diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/controllers/CertificateControllerTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/controllers/CertificateControllerTest.java index 49ce4a5db..a77b2ac7a 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/controllers/CertificateControllerTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/controllers/CertificateControllerTest.java @@ -35,7 +35,8 @@ import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; import org.signal.libsignal.protocol.InvalidKeyException; import org.signal.libsignal.protocol.ServiceId; -import org.signal.libsignal.protocol.ecc.Curve; +import org.signal.libsignal.protocol.ecc.ECPrivateKey; +import org.signal.libsignal.protocol.ecc.ECPublicKey; import org.signal.libsignal.zkgroup.GenericServerSecretParams; import org.signal.libsignal.zkgroup.ServerSecretParams; import org.signal.libsignal.zkgroup.auth.AuthCredentialWithPniResponse; @@ -56,7 +57,15 @@ import org.whispersystems.textsecuregcm.util.SystemMapper; @ExtendWith(DropwizardExtensionsSupport.class) class CertificateControllerTest { - private static final String caPublicKey = "BWh+UOhT1hD8bkb+MFRvb6tVqhoG8YYGCzOd7mgjo8cV"; + private static final ECPublicKey caPublicKey; + + static { + try { + caPublicKey = new ECPublicKey(Base64.getDecoder().decode("BWh+UOhT1hD8bkb+MFRvb6tVqhoG8YYGCzOd7mgjo8cV")); + } catch (InvalidKeyException e) { + throw new AssertionError("Statically-defined key was invalid", e); + } + } @SuppressWarnings("unused") private static final String caPrivateKey = "EO3Mnf0kfVlVnwSaqPoQnAxhnnGL1JTdXqktCKEe9Eo="; @@ -76,7 +85,7 @@ class CertificateControllerTest { static { try { certificateGenerator = new CertificateGenerator(Base64.getDecoder().decode(signingCertificate), - Curve.decodePrivatePoint(Base64.getDecoder().decode(signingKey)), 1); + new ECPrivateKey(Base64.getDecoder().decode(signingKey)), 1); serverZkAuthOperations = new ServerZkAuthOperations(serverSecretParams); } catch (IOException | InvalidKeyException e) { throw new AssertionError(e); @@ -112,11 +121,12 @@ class CertificateControllerTest { ServerCertificate serverCertificateHolder = certificate.getSigner(); ServerCertificate.Certificate serverCertificate = ServerCertificate.Certificate.parseFrom( serverCertificateHolder.getCertificate()); + ECPublicKey serverPublicKey = new ECPublicKey(serverCertificate.getKey().toByteArray()); - assertTrue(Curve.verifySignature(Curve.decodePoint(serverCertificate.getKey().toByteArray(), 0), + assertTrue(serverPublicKey.verifySignature( certificateHolder.getCertificate().toByteArray(), certificateHolder.getSignature().toByteArray())); - assertTrue(Curve.verifySignature(Curve.decodePoint(Base64.getDecoder().decode(caPublicKey), 0), - serverCertificateHolder.getCertificate().toByteArray(), serverCertificateHolder.getSignature().toByteArray())); + assertTrue(caPublicKey.verifySignature(serverCertificateHolder.getCertificate().toByteArray(), + serverCertificateHolder.getSignature().toByteArray())); assertEquals(certificate.getSender(), AuthHelper.VALID_NUMBER); assertEquals(certificate.getSenderDevice(), 1L); @@ -141,11 +151,12 @@ class CertificateControllerTest { ServerCertificate serverCertificateHolder = certificate.getSigner(); ServerCertificate.Certificate serverCertificate = ServerCertificate.Certificate.parseFrom( serverCertificateHolder.getCertificate()); + ECPublicKey serverPublicKey = new ECPublicKey(serverCertificate.getKey().toByteArray()); - assertTrue(Curve.verifySignature(Curve.decodePoint(serverCertificate.getKey().toByteArray(), 0), - certificateHolder.getCertificate().toByteArray(), certificateHolder.getSignature().toByteArray())); - assertTrue(Curve.verifySignature(Curve.decodePoint(Base64.getDecoder().decode(caPublicKey), 0), - serverCertificateHolder.getCertificate().toByteArray(), serverCertificateHolder.getSignature().toByteArray())); + assertTrue(serverPublicKey.verifySignature(certificateHolder.getCertificate().toByteArray(), + certificateHolder.getSignature().toByteArray())); + assertTrue(caPublicKey.verifySignature(serverCertificateHolder.getCertificate().toByteArray(), + serverCertificateHolder.getSignature().toByteArray())); assertEquals(certificate.getSender(), AuthHelper.VALID_NUMBER); assertEquals(certificate.getSenderDevice(), 1L); @@ -170,11 +181,12 @@ class CertificateControllerTest { ServerCertificate serverCertificateHolder = certificate.getSigner(); ServerCertificate.Certificate serverCertificate = ServerCertificate.Certificate.parseFrom( serverCertificateHolder.getCertificate()); + ECPublicKey serverPublicKey = new ECPublicKey(serverCertificate.getKey().toByteArray()); - assertTrue(Curve.verifySignature(Curve.decodePoint(serverCertificate.getKey().toByteArray(), 0), - certificateHolder.getCertificate().toByteArray(), certificateHolder.getSignature().toByteArray())); - assertTrue(Curve.verifySignature(Curve.decodePoint(Base64.getDecoder().decode(caPublicKey), 0), - serverCertificateHolder.getCertificate().toByteArray(), serverCertificateHolder.getSignature().toByteArray())); + assertTrue(serverPublicKey.verifySignature(certificateHolder.getCertificate().toByteArray(), + certificateHolder.getSignature().toByteArray())); + assertTrue(caPublicKey.verifySignature(serverCertificateHolder.getCertificate().toByteArray(), + serverCertificateHolder.getSignature().toByteArray())); assertTrue(StringUtils.isBlank(certificate.getSender())); assertEquals(certificate.getSenderDevice(), 1L); diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/controllers/DeviceControllerTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/controllers/DeviceControllerTest.java index 8f60de7ed..aac7ee44c 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/controllers/DeviceControllerTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/controllers/DeviceControllerTest.java @@ -57,7 +57,6 @@ import org.junit.jupiter.params.provider.ValueSource; import org.junitpioneer.jupiter.cartesian.CartesianTest; import org.mockito.ArgumentCaptor; import org.signal.libsignal.protocol.IdentityKey; -import org.signal.libsignal.protocol.ecc.Curve; import org.signal.libsignal.protocol.ecc.ECKeyPair; import org.whispersystems.textsecuregcm.auth.AuthenticatedDevice; import org.whispersystems.textsecuregcm.entities.AccountAttributes; @@ -234,8 +233,8 @@ class DeviceControllerTest { final KEMSignedPreKey aciPqLastResortPreKey; final KEMSignedPreKey pniPqLastResortPreKey; - final ECKeyPair aciIdentityKeyPair = Curve.generateKeyPair(); - final ECKeyPair pniIdentityKeyPair = Curve.generateKeyPair(); + final ECKeyPair aciIdentityKeyPair = ECKeyPair.generate(); + final ECKeyPair pniIdentityKeyPair = ECKeyPair.generate(); aciSignedPreKey = KeysHelper.signedECPreKey(1, aciIdentityKeyPair); pniSignedPreKey = KeysHelper.signedECPreKey(2, pniIdentityKeyPair); @@ -315,8 +314,8 @@ class DeviceControllerTest { final KEMSignedPreKey aciPqLastResortPreKey; final KEMSignedPreKey pniPqLastResortPreKey; - final ECKeyPair aciIdentityKeyPair = Curve.generateKeyPair(); - final ECKeyPair pniIdentityKeyPair = Curve.generateKeyPair(); + final ECKeyPair aciIdentityKeyPair = ECKeyPair.generate(); + final ECKeyPair pniIdentityKeyPair = ECKeyPair.generate(); aciSignedPreKey = KeysHelper.signedECPreKey(1, aciIdentityKeyPair); pniSignedPreKey = KeysHelper.signedECPreKey(2, pniIdentityKeyPair); @@ -367,8 +366,8 @@ class DeviceControllerTest { final KEMSignedPreKey aciPqLastResortPreKey; final KEMSignedPreKey pniPqLastResortPreKey; - final ECKeyPair aciIdentityKeyPair = Curve.generateKeyPair(); - final ECKeyPair pniIdentityKeyPair = Curve.generateKeyPair(); + final ECKeyPair aciIdentityKeyPair = ECKeyPair.generate(); + final ECKeyPair pniIdentityKeyPair = ECKeyPair.generate(); aciSignedPreKey = KeysHelper.signedECPreKey(1, aciIdentityKeyPair); pniSignedPreKey = KeysHelper.signedECPreKey(2, pniIdentityKeyPair); @@ -403,8 +402,8 @@ class DeviceControllerTest { final KEMSignedPreKey aciPqLastResortPreKey; final KEMSignedPreKey pniPqLastResortPreKey; - final ECKeyPair aciIdentityKeyPair = Curve.generateKeyPair(); - final ECKeyPair pniIdentityKeyPair = Curve.generateKeyPair(); + final ECKeyPair aciIdentityKeyPair = ECKeyPair.generate(); + final ECKeyPair pniIdentityKeyPair = ECKeyPair.generate(); aciSignedPreKey = KeysHelper.signedECPreKey(1, aciIdentityKeyPair); pniSignedPreKey = KeysHelper.signedECPreKey(2, pniIdentityKeyPair); @@ -452,8 +451,8 @@ class DeviceControllerTest { final KEMSignedPreKey aciPqLastResortPreKey; final KEMSignedPreKey pniPqLastResortPreKey; - final ECKeyPair aciIdentityKeyPair = Curve.generateKeyPair(); - final ECKeyPair pniIdentityKeyPair = Curve.generateKeyPair(); + final ECKeyPair aciIdentityKeyPair = ECKeyPair.generate(); + final ECKeyPair pniIdentityKeyPair = ECKeyPair.generate(); aciSignedPreKey = KeysHelper.signedECPreKey(1, aciIdentityKeyPair); pniSignedPreKey = KeysHelper.signedECPreKey(2, pniIdentityKeyPair); @@ -503,8 +502,8 @@ class DeviceControllerTest { final KEMSignedPreKey aciPqLastResortPreKey; final KEMSignedPreKey pniPqLastResortPreKey; - final ECKeyPair aciIdentityKeyPair = Curve.generateKeyPair(); - final ECKeyPair pniIdentityKeyPair = Curve.generateKeyPair(); + final ECKeyPair aciIdentityKeyPair = ECKeyPair.generate(); + final ECKeyPair pniIdentityKeyPair = ECKeyPair.generate(); aciSignedPreKey = KeysHelper.signedECPreKey(1, aciIdentityKeyPair); pniSignedPreKey = KeysHelper.signedECPreKey(2, pniIdentityKeyPair); @@ -577,8 +576,8 @@ class DeviceControllerTest { } private static Stream linkDeviceAtomicMissingProperty() { - final ECKeyPair aciIdentityKeyPair = Curve.generateKeyPair(); - final ECKeyPair pniIdentityKeyPair = Curve.generateKeyPair(); + final ECKeyPair aciIdentityKeyPair = ECKeyPair.generate(); + final ECKeyPair pniIdentityKeyPair = ECKeyPair.generate(); final ECSignedPreKey aciSignedPreKey = KeysHelper.signedECPreKey(1, aciIdentityKeyPair); final ECSignedPreKey pniSignedPreKey = KeysHelper.signedECPreKey(2, pniIdentityKeyPair); @@ -603,8 +602,8 @@ class DeviceControllerTest { final KEMSignedPreKey aciPqLastResortPreKey; final KEMSignedPreKey pniPqLastResortPreKey; - final ECKeyPair aciIdentityKeyPair = Curve.generateKeyPair(); - final ECKeyPair pniIdentityKeyPair = Curve.generateKeyPair(); + final ECKeyPair aciIdentityKeyPair = ECKeyPair.generate(); + final ECKeyPair pniIdentityKeyPair = ECKeyPair.generate(); aciSignedPreKey = KeysHelper.signedECPreKey(1, aciIdentityKeyPair); pniSignedPreKey = KeysHelper.signedECPreKey(2, pniIdentityKeyPair); @@ -670,8 +669,8 @@ class DeviceControllerTest { } private static Stream linkDeviceAtomicInvalidSignature() { - final ECKeyPair aciIdentityKeyPair = Curve.generateKeyPair(); - final ECKeyPair pniIdentityKeyPair = Curve.generateKeyPair(); + final ECKeyPair aciIdentityKeyPair = ECKeyPair.generate(); + final ECKeyPair pniIdentityKeyPair = ECKeyPair.generate(); final ECSignedPreKey aciSignedPreKey = KeysHelper.signedECPreKey(1, aciIdentityKeyPair); final ECSignedPreKey pniSignedPreKey = KeysHelper.signedECPreKey(2, pniIdentityKeyPair); @@ -703,8 +702,8 @@ class DeviceControllerTest { final KEMSignedPreKey aciPqLastResortPreKey; final KEMSignedPreKey pniPqLastResortPreKey; - final ECKeyPair aciIdentityKeyPair = Curve.generateKeyPair(); - final ECKeyPair pniIdentityKeyPair = Curve.generateKeyPair(); + final ECKeyPair aciIdentityKeyPair = ECKeyPair.generate(); + final ECKeyPair pniIdentityKeyPair = ECKeyPair.generate(); aciSignedPreKey = KeysHelper.signedECPreKey(1, aciIdentityKeyPair); pniSignedPreKey = KeysHelper.signedECPreKey(2, pniIdentityKeyPair); @@ -735,8 +734,8 @@ class DeviceControllerTest { when(existingDevice.getId()).thenReturn(Device.PRIMARY_ID); when(account.getDevices()).thenReturn(List.of(existingDevice)); - final ECKeyPair aciIdentityKeyPair = Curve.generateKeyPair(); - final ECKeyPair pniIdentityKeyPair = Curve.generateKeyPair(); + final ECKeyPair aciIdentityKeyPair = ECKeyPair.generate(); + final ECKeyPair pniIdentityKeyPair = ECKeyPair.generate(); final ECSignedPreKey aciSignedPreKey = KeysHelper.signedECPreKey(1, aciIdentityKeyPair); final ECSignedPreKey pniSignedPreKey = KeysHelper.signedECPreKey(2, pniIdentityKeyPair); @@ -935,7 +934,7 @@ class DeviceControllerTest { @Test void setPublicKey() { - final SetPublicKeyRequest request = new SetPublicKeyRequest(Curve.generateKeyPair().getPublicKey()); + final SetPublicKeyRequest request = new SetPublicKeyRequest(ECKeyPair.generate().getPublicKey()); try (final Response response = resources.getJerseyTest() .target("/v1/devices/public_key") @@ -1392,8 +1391,8 @@ class DeviceControllerTest { final AccountAttributes accountAttributes = new AccountAttributes(true, 1234, 5678, null, null, true, Set.of()); - final ECKeyPair aciIdentityKeyPair = Curve.generateKeyPair(); - final ECKeyPair pniIdentityKeyPair = Curve.generateKeyPair(); + final ECKeyPair aciIdentityKeyPair = ECKeyPair.generate(); + final ECKeyPair pniIdentityKeyPair = ECKeyPair.generate(); final LinkDeviceRequest request = new LinkDeviceRequest(verificationCode, accountAttributes, diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/controllers/KeyTransparencyControllerTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/controllers/KeyTransparencyControllerTest.java index 37cde928f..f141469db 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/controllers/KeyTransparencyControllerTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/controllers/KeyTransparencyControllerTest.java @@ -58,7 +58,7 @@ import org.signal.keytransparency.client.SearchProof; import org.signal.keytransparency.client.SearchResponse; import org.signal.keytransparency.client.UpdateValue; import org.signal.libsignal.protocol.IdentityKey; -import org.signal.libsignal.protocol.ecc.Curve; +import org.signal.libsignal.protocol.ecc.ECKeyPair; import org.whispersystems.textsecuregcm.auth.AuthenticatedDevice; import org.whispersystems.textsecuregcm.entities.KeyTransparencyDistinguishedKeyResponse; import org.whispersystems.textsecuregcm.entities.KeyTransparencyMonitorRequest; @@ -86,7 +86,7 @@ public class KeyTransparencyControllerTest { public static final byte[] USERNAME_HASH = TestRandomUtil.nextBytes(20); private static final TestRemoteAddressFilterProvider TEST_REMOTE_ADDRESS_FILTER_PROVIDER = new TestRemoteAddressFilterProvider("127.0.0.1"); - public static final IdentityKey ACI_IDENTITY_KEY = new IdentityKey(Curve.generateKeyPair().getPublicKey()); + public static final IdentityKey ACI_IDENTITY_KEY = new IdentityKey(ECKeyPair.generate().getPublicKey()); private static final byte[] COMMITMENT_INDEX = new byte[32]; public static final byte[] UNIDENTIFIED_ACCESS_KEY = new byte[16]; private final KeyTransparencyServiceClient keyTransparencyServiceClient = mock(KeyTransparencyServiceClient.class); diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/controllers/KeysControllerTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/controllers/KeysControllerTest.java index 3a6cf4750..aab6507de 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/controllers/KeysControllerTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/controllers/KeysControllerTest.java @@ -53,7 +53,6 @@ import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; import org.mockito.ArgumentCaptor; import org.signal.libsignal.protocol.IdentityKey; -import org.signal.libsignal.protocol.ecc.Curve; import org.signal.libsignal.protocol.ecc.ECKeyPair; import org.signal.libsignal.zkgroup.ServerSecretParams; import org.whispersystems.textsecuregcm.auth.AuthenticatedDevice; @@ -111,10 +110,10 @@ class KeysControllerTest { private static final int SAMPLE_PNI_REGISTRATION_ID = 1717; - private final ECKeyPair IDENTITY_KEY_PAIR = Curve.generateKeyPair(); + private final ECKeyPair IDENTITY_KEY_PAIR = ECKeyPair.generate(); private final IdentityKey IDENTITY_KEY = new IdentityKey(IDENTITY_KEY_PAIR.getPublicKey()); - private final ECKeyPair PNI_IDENTITY_KEY_PAIR = Curve.generateKeyPair(); + private final ECKeyPair PNI_IDENTITY_KEY_PAIR = ECKeyPair.generate(); private final IdentityKey PNI_IDENTITY_KEY = new IdentityKey(PNI_IDENTITY_KEY_PAIR.getPublicKey()); private final ECPreKey SAMPLE_KEY = KeysHelper.ecPreKey(1234); @@ -124,12 +123,12 @@ class KeysControllerTest { private final ECPreKey SAMPLE_KEY_PNI = KeysHelper.ecPreKey(7777); - private final KEMSignedPreKey SAMPLE_PQ_KEY = KeysHelper.signedKEMPreKey(2424, Curve.generateKeyPair()); - private final KEMSignedPreKey SAMPLE_PQ_KEY2 = KeysHelper.signedKEMPreKey(6868, Curve.generateKeyPair()); - private final KEMSignedPreKey SAMPLE_PQ_KEY3 = KeysHelper.signedKEMPreKey(1313, Curve.generateKeyPair()); - private final KEMSignedPreKey SAMPLE_PQ_KEY4 = KeysHelper.signedKEMPreKey(7676, Curve.generateKeyPair()); + private final KEMSignedPreKey SAMPLE_PQ_KEY = KeysHelper.signedKEMPreKey(2424, ECKeyPair.generate()); + private final KEMSignedPreKey SAMPLE_PQ_KEY2 = KeysHelper.signedKEMPreKey(6868, ECKeyPair.generate()); + private final KEMSignedPreKey SAMPLE_PQ_KEY3 = KeysHelper.signedKEMPreKey(1313, ECKeyPair.generate()); + private final KEMSignedPreKey SAMPLE_PQ_KEY4 = KeysHelper.signedKEMPreKey(7676, ECKeyPair.generate()); - private final KEMSignedPreKey SAMPLE_PQ_KEY_PNI = KeysHelper.signedKEMPreKey(8888, Curve.generateKeyPair()); + private final KEMSignedPreKey SAMPLE_PQ_KEY_PNI = KeysHelper.signedKEMPreKey(8888, ECKeyPair.generate()); private final ECSignedPreKey SAMPLE_SIGNED_KEY = KeysHelper.signedECPreKey(1111, IDENTITY_KEY_PAIR); private final ECSignedPreKey SAMPLE_SIGNED_KEY2 = KeysHelper.signedECPreKey(2222, IDENTITY_KEY_PAIR); @@ -860,7 +859,7 @@ class KeysControllerTest { @Test void putKeysStructurallyInvalidSignedECKey() { - final ECKeyPair identityKeyPair = Curve.generateKeyPair(); + final ECKeyPair identityKeyPair = ECKeyPair.generate(); final IdentityKey identityKey = new IdentityKey(identityKeyPair.getPublicKey()); final KEMSignedPreKey wrongPreKey = KeysHelper.signedKEMPreKey(1, identityKeyPair); final WeaklyTypedPreKeyState preKeyState = @@ -878,7 +877,7 @@ class KeysControllerTest { @Test void putKeysStructurallyInvalidUnsignedECKey() { - final ECKeyPair identityKeyPair = Curve.generateKeyPair(); + final ECKeyPair identityKeyPair = ECKeyPair.generate(); final IdentityKey identityKey = new IdentityKey(identityKeyPair.getPublicKey()); final WeaklyTypedPreKey wrongPreKey = new WeaklyTypedPreKey(1, "cluck cluck i'm a parrot".getBytes()); final WeaklyTypedPreKeyState preKeyState = @@ -896,7 +895,7 @@ class KeysControllerTest { @Test void putKeysStructurallyInvalidPQOneTimeKey() { - final ECKeyPair identityKeyPair = Curve.generateKeyPair(); + final ECKeyPair identityKeyPair = ECKeyPair.generate(); final IdentityKey identityKey = new IdentityKey(identityKeyPair.getPublicKey()); final WeaklyTypedSignedPreKey wrongPreKey = WeaklyTypedSignedPreKey.fromSignedPreKey(KeysHelper.signedECPreKey(1, identityKeyPair)); final WeaklyTypedPreKeyState preKeyState = @@ -914,7 +913,7 @@ class KeysControllerTest { @Test void putKeysStructurallyInvalidPQLastResortKey() { - final ECKeyPair identityKeyPair = Curve.generateKeyPair(); + final ECKeyPair identityKeyPair = ECKeyPair.generate(); final IdentityKey identityKey = new IdentityKey(identityKeyPair.getPublicKey()); final WeaklyTypedSignedPreKey wrongPreKey = WeaklyTypedSignedPreKey.fromSignedPreKey(KeysHelper.signedECPreKey(1, identityKeyPair)); final WeaklyTypedPreKeyState preKeyState = @@ -1028,7 +1027,7 @@ class KeysControllerTest { @Test void putPrekeyWithInvalidSignature() { - final ECSignedPreKey badSignedPreKey = KeysHelper.signedECPreKey(1, Curve.generateKeyPair()); + final ECSignedPreKey badSignedPreKey = KeysHelper.signedECPreKey(1, ECKeyPair.generate()); final SetKeysRequest setKeysRequest = new SetKeysRequest(List.of(), badSignedPreKey, null, null); Response response = resources.getJerseyTest() @@ -1106,7 +1105,7 @@ class KeysControllerTest { // Mismatched identity key Arguments.of( - new IdentityKey(Curve.generateKeyPair().getPublicKey()), + new IdentityKey(ECKeyPair.generate().getPublicKey()), ecSignedPreKey, Optional.of(ecSignedPreKey), lastResortKey, diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/controllers/ProfileControllerTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/controllers/ProfileControllerTest.java index 1e19a908e..81cc49e96 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/controllers/ProfileControllerTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/controllers/ProfileControllerTest.java @@ -63,7 +63,7 @@ import org.junitpioneer.jupiter.cartesian.CartesianTest; import org.mockito.ArgumentCaptor; import org.signal.libsignal.protocol.IdentityKey; import org.signal.libsignal.protocol.ServiceId; -import org.signal.libsignal.protocol.ecc.Curve; +import org.signal.libsignal.protocol.ecc.ECKeyPair; import org.signal.libsignal.zkgroup.InvalidInputException; import org.signal.libsignal.zkgroup.ServerPublicParams; import org.signal.libsignal.zkgroup.ServerSecretParams; @@ -131,10 +131,10 @@ class ProfileControllerTest { private static final ServerSecretParams serverSecretParams = ServerSecretParams.generate(); private static final byte[] UNIDENTIFIED_ACCESS_KEY = "sixteenbytes1234".getBytes(StandardCharsets.UTF_8); - private static final IdentityKey ACCOUNT_IDENTITY_KEY = new IdentityKey(Curve.generateKeyPair().getPublicKey()); - private static final IdentityKey ACCOUNT_PHONE_NUMBER_IDENTITY_KEY = new IdentityKey(Curve.generateKeyPair().getPublicKey()); - private static final IdentityKey ACCOUNT_TWO_IDENTITY_KEY = new IdentityKey(Curve.generateKeyPair().getPublicKey()); - private static final IdentityKey ACCOUNT_TWO_PHONE_NUMBER_IDENTITY_KEY = new IdentityKey(Curve.generateKeyPair().getPublicKey()); + private static final IdentityKey ACCOUNT_IDENTITY_KEY = new IdentityKey(ECKeyPair.generate().getPublicKey()); + private static final IdentityKey ACCOUNT_PHONE_NUMBER_IDENTITY_KEY = new IdentityKey(ECKeyPair.generate().getPublicKey()); + private static final IdentityKey ACCOUNT_TWO_IDENTITY_KEY = new IdentityKey(ECKeyPair.generate().getPublicKey()); + private static final IdentityKey ACCOUNT_TWO_PHONE_NUMBER_IDENTITY_KEY = new IdentityKey(ECKeyPair.generate().getPublicKey()); private static final String BASE_64_URL_USERNAME_HASH = "9p6Tip7BFefFOJzv4kv4GyXEYsBVfk_WbjNejdlOvQE"; private static final byte[] USERNAME_HASH = Base64.getUrlDecoder().decode(BASE_64_URL_USERNAME_HASH); @SuppressWarnings("unchecked") @@ -1376,9 +1376,9 @@ class ProfileControllerTest { .equals(expectedIdentityKeys.get(element.uuid())), "is an expected UUID with the correct identity key"); - final IdentityKey validAciIdentityKey = new IdentityKey(Curve.generateKeyPair().getPublicKey()); - final IdentityKey secondValidPniIdentityKey = new IdentityKey(Curve.generateKeyPair().getPublicKey()); - final IdentityKey invalidAciIdentityKey = new IdentityKey(Curve.generateKeyPair().getPublicKey()); + final IdentityKey validAciIdentityKey = new IdentityKey(ECKeyPair.generate().getPublicKey()); + final IdentityKey secondValidPniIdentityKey = new IdentityKey(ECKeyPair.generate().getPublicKey()); + final IdentityKey invalidAciIdentityKey = new IdentityKey(ECKeyPair.generate().getPublicKey()); try (final Response response = resources.getJerseyTest().target("/v1/profile/identity_check/batch").request() .post(Entity.json(new BatchIdentityCheckRequest(List.of( @@ -1409,7 +1409,7 @@ class ProfileControllerTest { for (int i = 0; i < 900; i++) { largeElementList.add( new BatchIdentityCheckRequest.Element(new AciServiceIdentifier(UUID.randomUUID()), - convertKeyToFingerprint(new IdentityKey(Curve.generateKeyPair().getPublicKey())))); + convertKeyToFingerprint(new IdentityKey(ECKeyPair.generate().getPublicKey())))); } try (final Response response = resources.getJerseyTest().target("/v1/profile/identity_check/batch").request() @@ -1444,9 +1444,9 @@ class ProfileControllerTest { { "uuid": "%s", "fingerprint": "%s" } ] } - """, AuthHelper.VALID_UUID, Base64.getEncoder().encodeToString(convertKeyToFingerprint(new IdentityKey(Curve.generateKeyPair().getPublicKey()))), - "PNI:" + AuthHelper.VALID_PNI_TWO, Base64.getEncoder().encodeToString(convertKeyToFingerprint(new IdentityKey(Curve.generateKeyPair().getPublicKey()))), - AuthHelper.INVALID_UUID, Base64.getEncoder().encodeToString(convertKeyToFingerprint(new IdentityKey(Curve.generateKeyPair().getPublicKey())))); + """, AuthHelper.VALID_UUID, Base64.getEncoder().encodeToString(convertKeyToFingerprint(new IdentityKey(ECKeyPair.generate().getPublicKey()))), + "PNI:" + AuthHelper.VALID_PNI_TWO, Base64.getEncoder().encodeToString(convertKeyToFingerprint(new IdentityKey(ECKeyPair.generate().getPublicKey()))), + AuthHelper.INVALID_UUID, Base64.getEncoder().encodeToString(convertKeyToFingerprint(new IdentityKey(ECKeyPair.generate().getPublicKey())))); try (final Response response = resources.getJerseyTest().target("/v1/profile/identity_check/batch").request() .post(Entity.entity(json, "application/json"))) { @@ -1505,7 +1505,7 @@ class ProfileControllerTest { { "uuid": null, "fingerprint": "%s" } ] } - """, Base64.getEncoder().encodeToString(convertKeyToFingerprint(new IdentityKey(Curve.generateKeyPair().getPublicKey())))), + """, Base64.getEncoder().encodeToString(convertKeyToFingerprint(new IdentityKey(ECKeyPair.generate().getPublicKey())))), 422), Arguments.of( // a blank string is invalid String.format(""" @@ -1514,7 +1514,7 @@ class ProfileControllerTest { { "uuid": " ", "fingerprint": "%s" } ] } - """, Base64.getEncoder().encodeToString(convertKeyToFingerprint(new IdentityKey(Curve.generateKeyPair().getPublicKey())))), + """, Base64.getEncoder().encodeToString(convertKeyToFingerprint(new IdentityKey(ECKeyPair.generate().getPublicKey())))), 400) ); } diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/controllers/RegistrationControllerTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/controllers/RegistrationControllerTest.java index 4ce6dd15c..d4c57a19f 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/controllers/RegistrationControllerTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/controllers/RegistrationControllerTest.java @@ -54,7 +54,6 @@ import org.junit.jupiter.params.provider.ValueSource; import org.junitpioneer.jupiter.cartesian.ArgumentSets; import org.junitpioneer.jupiter.cartesian.CartesianTest; import org.signal.libsignal.protocol.IdentityKey; -import org.signal.libsignal.protocol.ecc.Curve; import org.signal.libsignal.protocol.ecc.ECKeyPair; import org.whispersystems.textsecuregcm.auth.PhoneVerificationTokenManager; import org.whispersystems.textsecuregcm.auth.RegistrationLockError; @@ -527,8 +526,8 @@ class RegistrationControllerTest { final KEMSignedPreKey aciPqLastResortPreKey; final KEMSignedPreKey pniPqLastResortPreKey; { - final ECKeyPair aciIdentityKeyPair = Curve.generateKeyPair(); - final ECKeyPair pniIdentityKeyPair = Curve.generateKeyPair(); + final ECKeyPair aciIdentityKeyPair = ECKeyPair.generate(); + final ECKeyPair pniIdentityKeyPair = ECKeyPair.generate(); aciIdentityKey = new IdentityKey(aciIdentityKeyPair.getPublicKey()); pniIdentityKey = new IdentityKey(pniIdentityKeyPair.getPublicKey()); @@ -616,8 +615,8 @@ class RegistrationControllerTest { final KEMSignedPreKey aciPqLastResortPreKey; final KEMSignedPreKey pniPqLastResortPreKey; { - final ECKeyPair aciIdentityKeyPair = Curve.generateKeyPair(); - final ECKeyPair pniIdentityKeyPair = Curve.generateKeyPair(); + final ECKeyPair aciIdentityKeyPair = ECKeyPair.generate(); + final ECKeyPair pniIdentityKeyPair = ECKeyPair.generate(); aciIdentityKey = new IdentityKey(aciIdentityKeyPair.getPublicKey()); pniIdentityKey = new IdentityKey(pniIdentityKeyPair.getPublicKey()); @@ -814,8 +813,8 @@ class RegistrationControllerTest { final KEMSignedPreKey aciPqLastResortPreKey; final KEMSignedPreKey pniPqLastResortPreKey; { - final ECKeyPair aciIdentityKeyPair = Curve.generateKeyPair(); - final ECKeyPair pniIdentityKeyPair = Curve.generateKeyPair(); + final ECKeyPair aciIdentityKeyPair = ECKeyPair.generate(); + final ECKeyPair pniIdentityKeyPair = ECKeyPair.generate(); aciIdentityKey = new IdentityKey(aciIdentityKeyPair.getPublicKey()); pniIdentityKey = new IdentityKey(pniIdentityKeyPair.getPublicKey()); @@ -942,8 +941,8 @@ class RegistrationControllerTest { final int registrationId, int pniRegistrationId) { - final ECKeyPair aciIdentityKeyPair = Curve.generateKeyPair(); - final ECKeyPair pniIdentityKeyPair = Curve.generateKeyPair(); + final ECKeyPair aciIdentityKeyPair = ECKeyPair.generate(); + final ECKeyPair pniIdentityKeyPair = ECKeyPair.generate(); final IdentityKey aciIdentityKey = new IdentityKey(aciIdentityKeyPair.getPublicKey()); final IdentityKey pniIdentityKey = new IdentityKey(pniIdentityKeyPair.getPublicKey()); diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/grpc/BackupsAnonymousGrpcServiceTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/grpc/BackupsAnonymousGrpcServiceTest.java index f7bfd3080..1808ca185 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/grpc/BackupsAnonymousGrpcServiceTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/grpc/BackupsAnonymousGrpcServiceTest.java @@ -54,7 +54,7 @@ import org.signal.chat.backup.ListMediaRequest; import org.signal.chat.backup.ListMediaResponse; import org.signal.chat.backup.SetPublicKeyRequest; import org.signal.chat.backup.SignedPresentation; -import org.signal.libsignal.protocol.ecc.Curve; +import org.signal.libsignal.protocol.ecc.ECKeyPair; import org.signal.libsignal.zkgroup.VerificationFailedException; import org.signal.libsignal.zkgroup.backups.BackupAuthCredentialPresentation; import org.signal.libsignal.zkgroup.backups.BackupCredentialType; @@ -98,7 +98,7 @@ class BackupsAnonymousGrpcServiceTest extends void setPublicKey() { when(backupManager.setPublicKey(any(), any(), any())).thenReturn(CompletableFuture.completedFuture(null)); assertThatNoException().isThrownBy(() -> unauthenticatedServiceStub().setPublicKey(SetPublicKeyRequest.newBuilder() - .setPublicKey(ByteString.copyFrom(Curve.generateKeyPair().getPublicKey().serialize())) + .setPublicKey(ByteString.copyFrom(ECKeyPair.generate().getPublicKey().serialize())) .setSignedPresentation(signedPresentation(presentation)) .build())); } diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/grpc/KeysAnonymousGrpcServiceTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/grpc/KeysAnonymousGrpcServiceTest.java index 1d6077af9..2b1eae68b 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/grpc/KeysAnonymousGrpcServiceTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/grpc/KeysAnonymousGrpcServiceTest.java @@ -40,7 +40,6 @@ import org.signal.chat.keys.KeysAnonymousGrpc; import org.signal.chat.keys.ReactorKeysAnonymousGrpc; import org.signal.libsignal.protocol.IdentityKey; import org.signal.libsignal.protocol.InvalidKeyException; -import org.signal.libsignal.protocol.ecc.Curve; import org.signal.libsignal.protocol.ecc.ECKeyPair; import org.signal.libsignal.zkgroup.ServerSecretParams; import org.whispersystems.textsecuregcm.auth.UnidentifiedAccessUtil; @@ -86,7 +85,7 @@ class KeysAnonymousGrpcServiceTest extends SimpleBaseGrpcTest requests = Flux.just( buildCheckIdentityKeyRequest(org.signal.chat.common.IdentityType.IDENTITY_TYPE_ACI, mismatchedAciFingerprintAccountIdentifier, - new IdentityKey(Curve.generateKeyPair().getPublicKey())), + new IdentityKey(ECKeyPair.generate().getPublicKey())), buildCheckIdentityKeyRequest(org.signal.chat.common.IdentityType.IDENTITY_TYPE_ACI, matchingAciFingerprintAccountIdentifier, matchingAciFingerprintAccountIdentityKey), buildCheckIdentityKeyRequest(org.signal.chat.common.IdentityType.IDENTITY_TYPE_PNI, UUID.randomUUID(), - new IdentityKey(Curve.generateKeyPair().getPublicKey())), + new IdentityKey(ECKeyPair.generate().getPublicKey())), buildCheckIdentityKeyRequest(org.signal.chat.common.IdentityType.IDENTITY_TYPE_PNI, mismatchedPniFingerprintAccountIdentifier, - new IdentityKey(Curve.generateKeyPair().getPublicKey())) + new IdentityKey(ECKeyPair.generate().getPublicKey())) ); final Map expectedResponses = Map.of( diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/grpc/KeysGrpcServiceTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/grpc/KeysGrpcServiceTest.java index 433f881d8..065ec51a3 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/grpc/KeysGrpcServiceTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/grpc/KeysGrpcServiceTest.java @@ -52,7 +52,6 @@ import org.signal.chat.keys.SetKemLastResortPreKeyRequest; import org.signal.chat.keys.SetOneTimeEcPreKeysRequest; import org.signal.chat.keys.SetOneTimeKemSignedPreKeysRequest; import org.signal.libsignal.protocol.IdentityKey; -import org.signal.libsignal.protocol.ecc.Curve; import org.signal.libsignal.protocol.ecc.ECKeyPair; import org.whispersystems.textsecuregcm.controllers.RateLimitExceededException; import org.whispersystems.textsecuregcm.entities.ECPreKey; @@ -72,9 +71,9 @@ import reactor.core.publisher.Mono; class KeysGrpcServiceTest extends SimpleBaseGrpcTest { - private static final ECKeyPair ACI_IDENTITY_KEY_PAIR = Curve.generateKeyPair(); + private static final ECKeyPair ACI_IDENTITY_KEY_PAIR = ECKeyPair.generate(); - private static final ECKeyPair PNI_IDENTITY_KEY_PAIR = Curve.generateKeyPair(); + private static final ECKeyPair PNI_IDENTITY_KEY_PAIR = ECKeyPair.generate(); protected static final UUID AUTHENTICATED_PNI = UUID.randomUUID(); @@ -147,7 +146,7 @@ class KeysGrpcServiceTest extends SimpleBaseGrpcTest preKeys = new ArrayList<>(); for (int keyId = 0; keyId < 100; keyId++) { - preKeys.add(new ECPreKey(keyId, Curve.generateKeyPair().getPublicKey())); + preKeys.add(new ECPreKey(keyId, ECKeyPair.generate().getPublicKey())); } when(keysManager.storeEcOneTimePreKeys(any(), anyByte(), any())) @@ -183,7 +182,7 @@ class KeysGrpcServiceTest extends SimpleBaseGrpcTest badges = List.of(new Badge( @@ -172,7 +171,7 @@ public class ProfileAnonymousGrpcServiceTest extends SimpleBaseGrpcTest badges = List.of(new Badge( diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/grpc/ProfileGrpcServiceTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/grpc/ProfileGrpcServiceTest.java index 6ac222db1..dfa1c876b 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/grpc/ProfileGrpcServiceTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/grpc/ProfileGrpcServiceTest.java @@ -67,7 +67,7 @@ import org.signal.chat.profile.SetProfileRequest.AvatarChange; import org.signal.chat.profile.SetProfileResponse; import org.signal.libsignal.protocol.IdentityKey; import org.signal.libsignal.protocol.ServiceId; -import org.signal.libsignal.protocol.ecc.Curve; + import org.signal.libsignal.protocol.ecc.ECKeyPair; import org.signal.libsignal.zkgroup.InvalidInputException; import org.signal.libsignal.zkgroup.ServerPublicParams; @@ -434,7 +434,7 @@ public class ProfileGrpcServiceTest extends SimpleBaseGrpcTest badges = List.of(new Badge( diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/grpc/net/AbstractNoiseHandlerTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/grpc/net/AbstractNoiseHandlerTest.java index ffbd5082d..78d328cd8 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/grpc/net/AbstractNoiseHandlerTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/grpc/net/AbstractNoiseHandlerTest.java @@ -36,7 +36,6 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; -import org.signal.libsignal.protocol.ecc.Curve; import org.signal.libsignal.protocol.ecc.ECKeyPair; import org.whispersystems.textsecuregcm.storage.ClientPublicKeysManager; import org.whispersystems.textsecuregcm.util.TestRandomUtil; @@ -106,7 +105,7 @@ abstract class AbstractNoiseHandlerTest extends AbstractLeakDetectionTest { @BeforeEach void setUp() { - serverKeyPair = Curve.generateKeyPair(); + serverKeyPair = ECKeyPair.generate(); noiseHandshakeCompleteHandler = new NoiseHandshakeCompleteHandler(); clientPublicKeysManager = mock(ClientPublicKeysManager.class); embeddedChannel = new EmbeddedChannel( diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/grpc/net/AbstractNoiseTunnelServerIntegrationTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/grpc/net/AbstractNoiseTunnelServerIntegrationTest.java index 8bccb5971..4d1eeda6b 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/grpc/net/AbstractNoiseTunnelServerIntegrationTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/grpc/net/AbstractNoiseTunnelServerIntegrationTest.java @@ -48,7 +48,6 @@ import org.signal.chat.rpc.GetAuthenticatedDeviceRequest; import org.signal.chat.rpc.GetAuthenticatedDeviceResponse; import org.signal.chat.rpc.GetRequestAttributesRequest; import org.signal.chat.rpc.RequestAttributesGrpc; -import org.signal.libsignal.protocol.ecc.Curve; import org.signal.libsignal.protocol.ecc.ECKeyPair; import org.signal.libsignal.protocol.ecc.ECPublicKey; import org.whispersystems.textsecuregcm.auth.grpc.AuthenticatedDevice; @@ -97,8 +96,8 @@ public abstract class AbstractNoiseTunnelServerIntegrationTest extends AbstractL @BeforeEach void setUp() throws Exception { - clientKeyPair = Curve.generateKeyPair(); - serverKeyPair = Curve.generateKeyPair(); + clientKeyPair = ECKeyPair.generate(); + serverKeyPair = ECKeyPair.generate(); grpcClientConnectionManager = new GrpcClientConnectionManager(); @@ -214,7 +213,7 @@ public abstract class AbstractNoiseTunnelServerIntegrationTest extends AbstractL // Try to verify the server's public key with something other than the key with which it was signed try (final NoiseTunnelClient client = authenticated() - .setServerPublicKey(Curve.generateKeyPair().getPublicKey()) + .setServerPublicKey(ECKeyPair.generate().getPublicKey()) .build()) { final ManagedChannel channel = buildManagedChannel(client.getLocalAddress()); @@ -235,7 +234,7 @@ public abstract class AbstractNoiseTunnelServerIntegrationTest extends AbstractL void connectAuthenticatedMismatchedClientPublicKey() throws InterruptedException, ExecutionException, TimeoutException { when(clientPublicKeysManager.findPublicKey(ACCOUNT_IDENTIFIER, DEVICE_ID)) - .thenReturn(CompletableFuture.completedFuture(Optional.of(Curve.generateKeyPair().getPublicKey()))); + .thenReturn(CompletableFuture.completedFuture(Optional.of(ECKeyPair.generate().getPublicKey()))); try (final NoiseTunnelClient client = authenticated().build()) { final ManagedChannel channel = buildManagedChannel(client.getLocalAddress()); @@ -323,7 +322,7 @@ public abstract class AbstractNoiseTunnelServerIntegrationTest extends AbstractL // Try to verify the server's public key with something other than the key with which it was signed try (final NoiseTunnelClient client = anonymous() - .setServerPublicKey(Curve.generateKeyPair().getPublicKey()) + .setServerPublicKey(ECKeyPair.generate().getPublicKey()) .build()) { final ManagedChannel channel = buildManagedChannel(client.getLocalAddress()); diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/grpc/net/NoiseAuthenticatedHandlerTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/grpc/net/NoiseAuthenticatedHandlerTest.java index d82ba4ff1..225800963 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/grpc/net/NoiseAuthenticatedHandlerTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/grpc/net/NoiseAuthenticatedHandlerTest.java @@ -31,7 +31,6 @@ import java.util.concurrent.ThreadLocalRandom; import javax.crypto.BadPaddingException; import javax.crypto.ShortBufferException; import org.junit.jupiter.api.Test; -import org.signal.libsignal.protocol.ecc.Curve; import org.signal.libsignal.protocol.ecc.ECKeyPair; import org.signal.libsignal.protocol.ecc.ECPublicKey; import org.whispersystems.textsecuregcm.auth.grpc.AuthenticatedDevice; @@ -42,7 +41,7 @@ import org.whispersystems.textsecuregcm.util.UUIDUtil; class NoiseAuthenticatedHandlerTest extends AbstractNoiseHandlerTest { - private final ECKeyPair clientKeyPair = Curve.generateKeyPair(); + private final ECKeyPair clientKeyPair = ECKeyPair.generate(); @Override protected CipherStatePair doHandshake() throws Throwable { @@ -177,7 +176,7 @@ class NoiseAuthenticatedHandlerTest extends AbstractNoiseHandlerTest { final byte deviceId = randomDeviceId(); when(clientPublicKeysManager.findPublicKey(accountIdentifier, deviceId)) - .thenReturn(CompletableFuture.completedFuture(Optional.of(Curve.generateKeyPair().getPublicKey()))); + .thenReturn(CompletableFuture.completedFuture(Optional.of(ECKeyPair.generate().getPublicKey()))); doHandshake( identityPayload(accountIdentifier, deviceId), diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/grpc/net/NoiseHandshakeHelperTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/grpc/net/NoiseHandshakeHelperTest.java index f6c9a4f79..13d26813c 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/grpc/net/NoiseHandshakeHelperTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/grpc/net/NoiseHandshakeHelperTest.java @@ -14,7 +14,6 @@ import javax.crypto.ShortBufferException; import io.netty.buffer.ByteBufUtil; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.EnumSource; -import org.signal.libsignal.protocol.ecc.Curve; import org.signal.libsignal.protocol.ecc.ECKeyPair; import org.whispersystems.textsecuregcm.grpc.net.client.NoiseClientHandshakeHelper; @@ -40,8 +39,8 @@ public class NoiseHandshakeHelperTest { } void doHandshake(final HandshakePattern pattern, final byte[] requestPayload, final byte[] responsePayload) throws ShortBufferException, NoiseHandshakeException { - final ECKeyPair serverKeyPair = Curve.generateKeyPair(); - final ECKeyPair clientKeyPair = Curve.generateKeyPair(); + final ECKeyPair serverKeyPair = ECKeyPair.generate(); + final ECKeyPair clientKeyPair = ECKeyPair.generate(); NoiseHandshakeHelper serverHelper = new NoiseHandshakeHelper(pattern, serverKeyPair); NoiseClientHandshakeHelper clientHelper = switch (pattern) { diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/storage/AccountCreationDeletionIntegrationTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/storage/AccountCreationDeletionIntegrationTest.java index 9cb9d7db2..c1c2ebc89 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/storage/AccountCreationDeletionIntegrationTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/storage/AccountCreationDeletionIntegrationTest.java @@ -36,7 +36,6 @@ import org.junit.jupiter.api.extension.RegisterExtension; import org.junitpioneer.jupiter.cartesian.ArgumentSets; import org.junitpioneer.jupiter.cartesian.CartesianTest; import org.signal.libsignal.protocol.IdentityKey; -import org.signal.libsignal.protocol.ecc.Curve; import org.signal.libsignal.protocol.ecc.ECKeyPair; import org.whispersystems.textsecuregcm.auth.DisconnectionRequestManager; import org.whispersystems.textsecuregcm.configuration.dynamic.DynamicConfiguration; @@ -218,8 +217,8 @@ public class AccountCreationDeletionIntegrationTest { CLOCK.instant().plus(Duration.ofDays(7)), true))); - final ECKeyPair aciKeyPair = Curve.generateKeyPair(); - final ECKeyPair pniKeyPair = Curve.generateKeyPair(); + final ECKeyPair aciKeyPair = ECKeyPair.generate(); + final ECKeyPair pniKeyPair = ECKeyPair.generate(); final ECSignedPreKey aciSignedPreKey = KeysHelper.signedECPreKey(1, aciKeyPair); final ECSignedPreKey pniSignedPreKey = KeysHelper.signedECPreKey(2, pniKeyPair); @@ -306,8 +305,8 @@ public class AccountCreationDeletionIntegrationTest { final UUID existingAccountUuid; { - final ECKeyPair aciKeyPair = Curve.generateKeyPair(); - final ECKeyPair pniKeyPair = Curve.generateKeyPair(); + final ECKeyPair aciKeyPair = ECKeyPair.generate(); + final ECKeyPair pniKeyPair = ECKeyPair.generate(); final ECSignedPreKey aciSignedPreKey = KeysHelper.signedECPreKey(1, aciKeyPair); final ECSignedPreKey pniSignedPreKey = KeysHelper.signedECPreKey(2, pniKeyPair); @@ -359,8 +358,8 @@ public class AccountCreationDeletionIntegrationTest { CLOCK.instant().plus(Duration.ofDays(7)), true))); - final ECKeyPair aciKeyPair = Curve.generateKeyPair(); - final ECKeyPair pniKeyPair = Curve.generateKeyPair(); + final ECKeyPair aciKeyPair = ECKeyPair.generate(); + final ECKeyPair pniKeyPair = ECKeyPair.generate(); final ECSignedPreKey aciSignedPreKey = KeysHelper.signedECPreKey(1, aciKeyPair); final ECSignedPreKey pniSignedPreKey = KeysHelper.signedECPreKey(2, pniKeyPair); @@ -448,8 +447,8 @@ public class AccountCreationDeletionIntegrationTest { CLOCK.instant().plus(Duration.ofDays(7)), true))); - final ECKeyPair aciKeyPair = Curve.generateKeyPair(); - final ECKeyPair pniKeyPair = Curve.generateKeyPair(); + final ECKeyPair aciKeyPair = ECKeyPair.generate(); + final ECKeyPair pniKeyPair = ECKeyPair.generate(); final ECSignedPreKey aciSignedPreKey = KeysHelper.signedECPreKey(1, aciKeyPair); final ECSignedPreKey pniSignedPreKey = KeysHelper.signedECPreKey(2, pniKeyPair); @@ -477,7 +476,7 @@ public class AccountCreationDeletionIntegrationTest { pniPqLastResortPreKey), null); - clientPublicKeysManager.setPublicKey(account, Device.PRIMARY_ID, Curve.generateKeyPair().getPublicKey()).join(); + clientPublicKeysManager.setPublicKey(account, Device.PRIMARY_ID, ECKeyPair.generate().getPublicKey()).join(); final UUID aci = account.getIdentifier(IdentityType.ACI); diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/storage/AccountsManagerChangeNumberIntegrationTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/storage/AccountsManagerChangeNumberIntegrationTest.java index d259ee916..9284edce3 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/storage/AccountsManagerChangeNumberIntegrationTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/storage/AccountsManagerChangeNumberIntegrationTest.java @@ -29,7 +29,6 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; import org.signal.libsignal.protocol.IdentityKey; -import org.signal.libsignal.protocol.ecc.Curve; import org.signal.libsignal.protocol.ecc.ECKeyPair; import org.whispersystems.textsecuregcm.auth.DisconnectionRequestManager; import org.whispersystems.textsecuregcm.configuration.dynamic.DynamicConfiguration; @@ -187,7 +186,7 @@ class AccountsManagerChangeNumberIntegrationTest { final UUID originalUuid = account.getUuid(); final UUID originalPni = account.getPhoneNumberIdentifier(); - final ECKeyPair pniIdentityKeyPair = Curve.generateKeyPair(); + final ECKeyPair pniIdentityKeyPair = ECKeyPair.generate(); accountsManager.changeNumber(account, secondNumber, @@ -215,7 +214,7 @@ class AccountsManagerChangeNumberIntegrationTest { final UUID originalUuid = account.getUuid(); final UUID originalPni = account.getPhoneNumberIdentifier(); - final ECKeyPair pniIdentityKeyPair = Curve.generateKeyPair(); + final ECKeyPair pniIdentityKeyPair = ECKeyPair.generate(); accountsManager.changeNumber(account, originalNumber, @@ -238,7 +237,7 @@ class AccountsManagerChangeNumberIntegrationTest { final String originalNumber = "+18005551111"; final String secondNumber = "+18005552222"; final int rotatedPniRegistrationId = 17; - final ECKeyPair rotatedPniIdentityKeyPair = Curve.generateKeyPair(); + final ECKeyPair rotatedPniIdentityKeyPair = ECKeyPair.generate(); final ECSignedPreKey rotatedSignedPreKey = KeysHelper.signedECPreKey(1L, rotatedPniIdentityKeyPair); final KEMSignedPreKey rotatedKemSignedPreKey = KeysHelper.signedKEMPreKey(2L, rotatedPniIdentityKeyPair); final AccountAttributes accountAttributes = new AccountAttributes(true, rotatedPniRegistrationId + 1, rotatedPniRegistrationId, "test".getBytes(StandardCharsets.UTF_8), null, true, Set.of()); @@ -287,8 +286,8 @@ class AccountsManagerChangeNumberIntegrationTest { final UUID originalUuid = account.getUuid(); final UUID originalPni = account.getPhoneNumberIdentifier(); - final ECKeyPair originalIdentityKeyPair = Curve.generateKeyPair(); - final ECKeyPair secondIdentityKeyPair = Curve.generateKeyPair(); + final ECKeyPair originalIdentityKeyPair = ECKeyPair.generate(); + final ECKeyPair secondIdentityKeyPair = ECKeyPair.generate(); account = accountsManager.changeNumber(account, secondNumber, @@ -328,8 +327,8 @@ class AccountsManagerChangeNumberIntegrationTest { final UUID originalUuid = account.getUuid(); final UUID originalPni = account.getPhoneNumberIdentifier(); - final ECKeyPair originalIdentityKeyPair = Curve.generateKeyPair(); - final ECKeyPair secondIdentityKeyPair = Curve.generateKeyPair(); + final ECKeyPair originalIdentityKeyPair = ECKeyPair.generate(); + final ECKeyPair secondIdentityKeyPair = ECKeyPair.generate(); final Account existingAccount = AccountsHelper.createAccount(accountsManager, secondNumber); @@ -381,7 +380,7 @@ class AccountsManagerChangeNumberIntegrationTest { final Account existingAccount = AccountsHelper.createAccount(accountsManager, secondNumber); final UUID existingAccountUuid = existingAccount.getUuid(); - final ECKeyPair pniIdentityKeyPair = Curve.generateKeyPair(); + final ECKeyPair pniIdentityKeyPair = ECKeyPair.generate(); final Account changedNumberAccount = accountsManager.changeNumber(account, secondNumber, @@ -400,7 +399,7 @@ class AccountsManagerChangeNumberIntegrationTest { assertEquals(Optional.empty(), accountsManager.findRecentlyDeletedAccountIdentifier(originalPni)); assertEquals(Optional.empty(), accountsManager.findRecentlyDeletedAccountIdentifier(secondPni)); - final ECKeyPair reRegisteredPniIdentityKeyPair = Curve.generateKeyPair(); + final ECKeyPair reRegisteredPniIdentityKeyPair = ECKeyPair.generate(); final Account changedNumberReRegisteredAccount = accountsManager.changeNumber(reRegisteredAccount, secondNumber, diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/storage/AccountsManagerConcurrentModificationIntegrationTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/storage/AccountsManagerConcurrentModificationIntegrationTest.java index 25af45fed..16d8494cd 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/storage/AccountsManagerConcurrentModificationIntegrationTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/storage/AccountsManagerConcurrentModificationIntegrationTest.java @@ -44,7 +44,6 @@ import org.junit.jupiter.api.extension.RegisterExtension; import org.mockito.ArgumentCaptor; import org.mockito.stubbing.Answer; import org.signal.libsignal.protocol.IdentityKey; -import org.signal.libsignal.protocol.ecc.Curve; import org.signal.libsignal.protocol.ecc.ECKeyPair; import org.whispersystems.textsecuregcm.auth.DisconnectionRequestManager; import org.whispersystems.textsecuregcm.auth.SaltedTokenHash; @@ -153,8 +152,8 @@ class AccountsManagerConcurrentModificationIntegrationTest { void testConcurrentUpdate() throws IOException, InterruptedException { final UUID uuid; { - final ECKeyPair aciKeyPair = Curve.generateKeyPair(); - final ECKeyPair pniKeyPair = Curve.generateKeyPair(); + final ECKeyPair aciKeyPair = ECKeyPair.generate(); + final ECKeyPair pniKeyPair = ECKeyPair.generate(); final Account account = accountsManager.update( accountsManager.create("+14155551212", @@ -188,7 +187,7 @@ class AccountsManagerConcurrentModificationIntegrationTest { final boolean discoverableByPhoneNumber = false; final String currentProfileVersion = "cpv"; - final IdentityKey identityKey = new IdentityKey(Curve.generateKeyPair().getPublicKey()); + final IdentityKey identityKey = new IdentityKey(ECKeyPair.generate().getPublicKey()); final byte[] unidentifiedAccessKey = new byte[]{1}; final String pin = "1234"; final String registrationLock = "reglock"; diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/storage/AccountsManagerTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/storage/AccountsManagerTest.java index 6c357ba09..008ca2496 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/storage/AccountsManagerTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/storage/AccountsManagerTest.java @@ -73,7 +73,6 @@ import org.junit.jupiter.params.provider.MethodSource; import org.junit.jupiter.params.provider.ValueSource; import org.mockito.stubbing.Answer; import org.signal.libsignal.protocol.IdentityKey; -import org.signal.libsignal.protocol.ecc.Curve; import org.signal.libsignal.protocol.ecc.ECKeyPair; import org.whispersystems.textsecuregcm.auth.DisconnectionRequestManager; import org.whispersystems.textsecuregcm.auth.UnidentifiedAccessUtil; @@ -628,7 +627,7 @@ class AccountsManagerTest { .doAnswer(ACCOUNT_UPDATE_ANSWER) .when(accounts).update(any()); - final IdentityKey identityKey = new IdentityKey(Curve.generateKeyPair().getPublicKey()); + final IdentityKey identityKey = new IdentityKey(ECKeyPair.generate().getPublicKey()); account = accountsManager.update(account, a -> a.setIdentityKey(identityKey)); @@ -655,7 +654,7 @@ class AccountsManagerTest { .thenReturn(CompletableFuture.failedFuture(new ContestedOptimisticLockException())) .thenAnswer(ACCOUNT_UPDATE_ASYNC_ANSWER); - final IdentityKey identityKey = new IdentityKey(Curve.generateKeyPair().getPublicKey()); + final IdentityKey identityKey = new IdentityKey(ECKeyPair.generate().getPublicKey()); account = accountsManager.updateAsync(account, a -> a.setIdentityKey(identityKey)).join(); @@ -932,8 +931,8 @@ class AccountsManagerTest { final byte nextDeviceId = account.getNextDeviceId(); - final ECKeyPair aciKeyPair = Curve.generateKeyPair(); - final ECKeyPair pniKeyPair = Curve.generateKeyPair(); + final ECKeyPair aciKeyPair = ECKeyPair.generate(); + final ECKeyPair pniKeyPair = ECKeyPair.generate(); final byte[] deviceNameCiphertext = "device-name".getBytes(StandardCharsets.UTF_8); final String password = "password"; @@ -1029,7 +1028,7 @@ class AccountsManagerTest { void testChangePhoneNumber(final String originalNumber, final String targetNumber) throws InterruptedException, MismatchedDevicesException { final UUID uuid = UUID.randomUUID(); final UUID originalPni = UUID.randomUUID(); - final ECKeyPair pniIdentityKeyPair = Curve.generateKeyPair(); + final ECKeyPair pniIdentityKeyPair = ECKeyPair.generate(); final ECSignedPreKey ecSignedPreKey = KeysHelper.signedECPreKey(1, pniIdentityKeyPair); final KEMSignedPreKey kemLastResortPreKey = KeysHelper.signedKEMPreKey(2, pniIdentityKeyPair); @@ -1057,7 +1056,7 @@ class AccountsManagerTest { final String originalNumber = "+22923456789"; // the canonical form of numbers may change over time, so we use PNIs as stable identifiers final String newNumber = "+2290123456789"; - final ECKeyPair pniIdentityKeyPair = Curve.generateKeyPair(); + final ECKeyPair pniIdentityKeyPair = ECKeyPair.generate(); final UUID phoneNumberIdentifier = UUID.randomUUID(); Account account = AccountsHelper.generateTestAccount(originalNumber, UUID.randomUUID(), phoneNumberIdentifier, @@ -1085,7 +1084,7 @@ class AccountsManagerTest { final UUID uuid = UUID.randomUUID(); final UUID originalPni = UUID.randomUUID(); final UUID targetPni = UUID.randomUUID(); - final ECKeyPair pniIdentityKeyPair = Curve.generateKeyPair(); + final ECKeyPair pniIdentityKeyPair = ECKeyPair.generate(); final Account existingAccount = AccountsHelper.generateTestAccount(targetNumber, existingAccountUuid, targetPni, List.of(DevicesHelper.createDevice(Device.PRIMARY_ID)), new byte[UnidentifiedAccessUtil.UNIDENTIFIED_ACCESS_KEY_LENGTH]); when(accounts.getByE164(targetNumber)).thenReturn(Optional.of(existingAccount)); @@ -1125,7 +1124,7 @@ class AccountsManagerTest { final UUID originalPni = UUID.randomUUID(); final UUID targetPni = UUID.randomUUID(); final byte deviceId2 = 2; - final ECKeyPair identityKeyPair = Curve.generateKeyPair(); + final ECKeyPair identityKeyPair = ECKeyPair.generate(); final Map newSignedKeys = Map.of( Device.PRIMARY_ID, KeysHelper.signedECPreKey(1, identityKeyPair), deviceId2, KeysHelper.signedECPreKey(2, identityKeyPair)); @@ -1143,7 +1142,7 @@ class AccountsManagerTest { DevicesHelper.createDevice(deviceId2, 0L, 102)); final Account account = AccountsHelper.generateTestAccount(originalNumber, uuid, originalPni, devices, new byte[UnidentifiedAccessUtil.UNIDENTIFIED_ACCESS_KEY_LENGTH]); final Account updatedAccount = accountsManager.changeNumber( - account, targetNumber, new IdentityKey(Curve.generateKeyPair().getPublicKey()), newSignedKeys, newSignedPqKeys, newRegistrationIds); + account, targetNumber, new IdentityKey(ECKeyPair.generate().getPublicKey()), newSignedKeys, newSignedPqKeys, newRegistrationIds); assertEquals(targetNumber, updatedAccount.getNumber()); @@ -1169,7 +1168,7 @@ class AccountsManagerTest { final UUID uuid = UUID.randomUUID(); final UUID originalPni = UUID.randomUUID(); final byte deviceId2 = 2; - final ECKeyPair identityKeyPair = Curve.generateKeyPair(); + final ECKeyPair identityKeyPair = ECKeyPair.generate(); final Map newSignedKeys = Map.of( Device.PRIMARY_ID, KeysHelper.signedECPreKey(1, identityKeyPair), deviceId2, KeysHelper.signedECPreKey(2, identityKeyPair)); @@ -1182,7 +1181,7 @@ class AccountsManagerTest { final Account account = AccountsHelper.generateTestAccount(originalNumber, uuid, originalPni, devices, new byte[UnidentifiedAccessUtil.UNIDENTIFIED_ACCESS_KEY_LENGTH]); assertThrows(MismatchedDevicesException.class, () -> accountsManager.changeNumber( - account, targetNumber, new IdentityKey(Curve.generateKeyPair().getPublicKey()), newSignedKeys, newSignedPqKeys, newRegistrationIds)); + account, targetNumber, new IdentityKey(ECKeyPair.generate().getPublicKey()), newSignedKeys, newSignedPqKeys, newRegistrationIds)); verifyNoInteractions(accounts); verifyNoInteractions(keysManager); @@ -1401,8 +1400,8 @@ class AccountsManagerTest { } private Account createAccount(final String e164, final AccountAttributes accountAttributes) throws InterruptedException { - final ECKeyPair aciKeyPair = Curve.generateKeyPair(); - final ECKeyPair pniKeyPair = Curve.generateKeyPair(); + final ECKeyPair aciKeyPair = ECKeyPair.generate(); + final ECKeyPair pniKeyPair = ECKeyPair.generate(); return accountsManager.create(e164, accountAttributes, diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/storage/AddRemoveDeviceIntegrationTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/storage/AddRemoveDeviceIntegrationTest.java index 685e9b514..da08a01c6 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/storage/AddRemoveDeviceIntegrationTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/storage/AddRemoveDeviceIntegrationTest.java @@ -32,7 +32,6 @@ import org.junit.jupiter.api.Timeout; import org.junit.jupiter.api.extension.RegisterExtension; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.CsvSource; -import org.signal.libsignal.protocol.ecc.Curve; import org.signal.libsignal.protocol.ecc.ECKeyPair; import org.whispersystems.textsecuregcm.auth.DisconnectionRequestManager; import org.whispersystems.textsecuregcm.configuration.dynamic.DynamicConfiguration; @@ -199,8 +198,8 @@ public class AddRemoveDeviceIntegrationTest { PhoneNumberUtil.getInstance().getExampleNumber("US"), PhoneNumberUtil.PhoneNumberFormat.E164); - final ECKeyPair aciKeyPair = Curve.generateKeyPair(); - final ECKeyPair pniKeyPair = Curve.generateKeyPair(); + final ECKeyPair aciKeyPair = ECKeyPair.generate(); + final ECKeyPair pniKeyPair = ECKeyPair.generate(); final Account account = AccountsHelper.createAccount(accountsManager, number); assertEquals(1, accountsManager.getByAccountIdentifier(account.getUuid()).orElseThrow().getDevices().size()); @@ -248,8 +247,8 @@ public class AddRemoveDeviceIntegrationTest { PhoneNumberUtil.getInstance().getExampleNumber("US"), PhoneNumberUtil.PhoneNumberFormat.E164); - final ECKeyPair aciKeyPair = Curve.generateKeyPair(); - final ECKeyPair pniKeyPair = Curve.generateKeyPair(); + final ECKeyPair aciKeyPair = ECKeyPair.generate(); + final ECKeyPair pniKeyPair = ECKeyPair.generate(); final Account account = AccountsHelper.createAccount(accountsManager, number); assertEquals(1, accountsManager.getByAccountIdentifier(account.getUuid()).orElseThrow().getDevices().size()); @@ -309,8 +308,8 @@ public class AddRemoveDeviceIntegrationTest { PhoneNumberUtil.getInstance().getExampleNumber("US"), PhoneNumberUtil.PhoneNumberFormat.E164); - final ECKeyPair aciKeyPair = Curve.generateKeyPair(); - final ECKeyPair pniKeyPair = Curve.generateKeyPair(); + final ECKeyPair aciKeyPair = ECKeyPair.generate(); + final ECKeyPair pniKeyPair = ECKeyPair.generate(); final Account account = AccountsHelper.createAccount(accountsManager, number); assertEquals(1, accountsManager.getByAccountIdentifier(account.getUuid()).orElseThrow().getDevices().size()); @@ -335,8 +334,8 @@ public class AddRemoveDeviceIntegrationTest { final byte addedDeviceId = updatedAccountAndDevice.second().getId(); - clientPublicKeysManager.setPublicKey(account, Device.PRIMARY_ID, Curve.generateKeyPair().getPublicKey()).join(); - clientPublicKeysManager.setPublicKey(account, addedDeviceId, Curve.generateKeyPair().getPublicKey()).join(); + clientPublicKeysManager.setPublicKey(account, Device.PRIMARY_ID, ECKeyPair.generate().getPublicKey()).join(); + clientPublicKeysManager.setPublicKey(account, addedDeviceId, ECKeyPair.generate().getPublicKey()).join(); final Account updatedAccount = accountsManager.removeDevice(updatedAccountAndDevice.first(), addedDeviceId).join(); @@ -364,8 +363,8 @@ public class AddRemoveDeviceIntegrationTest { PhoneNumberUtil.getInstance().getExampleNumber("US"), PhoneNumberUtil.PhoneNumberFormat.E164); - final ECKeyPair aciKeyPair = Curve.generateKeyPair(); - final ECKeyPair pniKeyPair = Curve.generateKeyPair(); + final ECKeyPair aciKeyPair = ECKeyPair.generate(); + final ECKeyPair pniKeyPair = ECKeyPair.generate(); final Account account = AccountsHelper.createAccount(accountsManager, number); assertEquals(1, accountsManager.getByAccountIdentifier(account.getUuid()).orElseThrow().getDevices().size()); @@ -400,9 +399,9 @@ public class AddRemoveDeviceIntegrationTest { final Account retrievedAccount = accountsManager.getByAccountIdentifierAsync(aci).join().orElseThrow(); - clientPublicKeysManager.setPublicKey(retrievedAccount, Device.PRIMARY_ID, Curve.generateKeyPair().getPublicKey()) + clientPublicKeysManager.setPublicKey(retrievedAccount, Device.PRIMARY_ID, ECKeyPair.generate().getPublicKey()) .join(); - clientPublicKeysManager.setPublicKey(retrievedAccount, addedDeviceId, Curve.generateKeyPair().getPublicKey()) + clientPublicKeysManager.setPublicKey(retrievedAccount, addedDeviceId, ECKeyPair.generate().getPublicKey()) .join(); assertEquals(2, retrievedAccount.getDevices().size()); @@ -430,8 +429,8 @@ public class AddRemoveDeviceIntegrationTest { PhoneNumberUtil.getInstance().getExampleNumber("US"), PhoneNumberUtil.PhoneNumberFormat.E164); - final ECKeyPair aciKeyPair = Curve.generateKeyPair(); - final ECKeyPair pniKeyPair = Curve.generateKeyPair(); + final ECKeyPair aciKeyPair = ECKeyPair.generate(); + final ECKeyPair pniKeyPair = ECKeyPair.generate(); final Account account = AccountsHelper.createAccount(accountsManager, number); @@ -483,8 +482,8 @@ public class AddRemoveDeviceIntegrationTest { PhoneNumberUtil.getInstance().getExampleNumber("US"), PhoneNumberUtil.PhoneNumberFormat.E164); - final ECKeyPair aciKeyPair = Curve.generateKeyPair(); - final ECKeyPair pniKeyPair = Curve.generateKeyPair(); + final ECKeyPair aciKeyPair = ECKeyPair.generate(); + final ECKeyPair pniKeyPair = ECKeyPair.generate(); final Account account = AccountsHelper.createAccount(accountsManager, number); @@ -555,8 +554,8 @@ public class AddRemoveDeviceIntegrationTest { final String number = PhoneNumberUtil.getInstance().format( PhoneNumberUtil.getInstance().getExampleNumber("US"), PhoneNumberUtil.PhoneNumberFormat.E164); - final ECKeyPair aciKeyPair = Curve.generateKeyPair(); - final ECKeyPair pniKeyPair = Curve.generateKeyPair(); + final ECKeyPair aciKeyPair = ECKeyPair.generate(); + final ECKeyPair pniKeyPair = ECKeyPair.generate(); final Account account = AccountsHelper.createAccount(accountsManager, number); final String linkDeviceToken = accountsManager.generateLinkDeviceToken(UUID.randomUUID()); @@ -602,8 +601,8 @@ public class AddRemoveDeviceIntegrationTest { final String number = PhoneNumberUtil.getInstance().format( PhoneNumberUtil.getInstance().getExampleNumber("US"), PhoneNumberUtil.PhoneNumberFormat.E164); - final ECKeyPair aciKeyPair = Curve.generateKeyPair(); - final ECKeyPair pniKeyPair = Curve.generateKeyPair(); + final ECKeyPair aciKeyPair = ECKeyPair.generate(); + final ECKeyPair pniKeyPair = ECKeyPair.generate(); final Account account = AccountsHelper.createAccount(accountsManager, number); final String linkDeviceToken = accountsManager.generateLinkDeviceToken(UUID.randomUUID()); diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/storage/ChangeNumberManagerTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/storage/ChangeNumberManagerTest.java index 5233f1f0b..dc6c53682 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/storage/ChangeNumberManagerTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/storage/ChangeNumberManagerTest.java @@ -26,7 +26,6 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.mockito.stubbing.Answer; import org.signal.libsignal.protocol.IdentityKey; -import org.signal.libsignal.protocol.ecc.Curve; import org.signal.libsignal.protocol.ecc.ECKeyPair; import org.whispersystems.textsecuregcm.entities.ECSignedPreKey; import org.whispersystems.textsecuregcm.entities.IncomingMessage; @@ -88,8 +87,8 @@ public class ChangeNumberManagerTest { final String targetNumber = PhoneNumberUtil.getInstance().format( PhoneNumberUtil.getInstance().getExampleNumber("US"), PhoneNumberUtil.PhoneNumberFormat.E164); - final ECKeyPair pniIdentityKeyPair = Curve.generateKeyPair(); - final IdentityKey pniIdentityKey = new IdentityKey(Curve.generateKeyPair().getPublicKey()); + final ECKeyPair pniIdentityKeyPair = ECKeyPair.generate(); + final IdentityKey pniIdentityKey = new IdentityKey(ECKeyPair.generate().getPublicKey()); final Map ecSignedPreKeys = Map.of(Device.PRIMARY_ID, KeysHelper.signedECPreKey(1, pniIdentityKeyPair)); @@ -138,7 +137,7 @@ public class ChangeNumberManagerTest { when(account.getDevice(linkedDeviceId)).thenReturn(Optional.of(linkedDevice)); when(account.getDevices()).thenReturn(List.of(primaryDevice, linkedDevice)); - final ECKeyPair pniIdentityKeyPair = Curve.generateKeyPair(); + final ECKeyPair pniIdentityKeyPair = ECKeyPair.generate(); final IdentityKey pniIdentityKey = new IdentityKey(pniIdentityKeyPair.getPublicKey()); final Map ecSignedPreKeys = Map.of( primaryDeviceId, KeysHelper.signedECPreKey(1, pniIdentityKeyPair), diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/storage/ClientPublicKeysTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/storage/ClientPublicKeysTest.java index 0113af277..c0e93273e 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/storage/ClientPublicKeysTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/storage/ClientPublicKeysTest.java @@ -7,7 +7,7 @@ import java.util.UUID; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; -import org.signal.libsignal.protocol.ecc.Curve; +import org.signal.libsignal.protocol.ecc.ECKeyPair; import org.signal.libsignal.protocol.ecc.ECPublicKey; import software.amazon.awssdk.services.dynamodb.model.TransactWriteItemsRequest; @@ -29,7 +29,7 @@ class ClientPublicKeysTest { void buildTransactWriteItemForInsertionAndDeletion() { final UUID accountIdentifier = UUID.randomUUID(); final byte deviceId = Device.PRIMARY_ID; - final ECPublicKey publicKey = Curve.generateKeyPair().getPublicKey(); + final ECPublicKey publicKey = ECKeyPair.generate().getPublicKey(); assertEquals(Optional.empty(), clientPublicKeys.findPublicKey(accountIdentifier, deviceId).join()); @@ -50,7 +50,7 @@ class ClientPublicKeysTest { void setPublicKey() { final UUID accountIdentifier = UUID.randomUUID(); final byte deviceId = Device.PRIMARY_ID; - final ECPublicKey publicKey = Curve.generateKeyPair().getPublicKey(); + final ECPublicKey publicKey = ECKeyPair.generate().getPublicKey(); assertEquals(Optional.empty(), clientPublicKeys.findPublicKey(accountIdentifier, deviceId).join()); diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/storage/KEMPreKeyPageTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/storage/KEMPreKeyPageTest.java index 0d47ebc2f..9d28c22f1 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/storage/KEMPreKeyPageTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/storage/KEMPreKeyPageTest.java @@ -13,14 +13,13 @@ import java.util.Collections; import java.util.List; import org.junit.jupiter.api.Test; import org.signal.libsignal.protocol.InvalidKeyException; -import org.signal.libsignal.protocol.ecc.Curve; import org.signal.libsignal.protocol.ecc.ECKeyPair; import org.whispersystems.textsecuregcm.entities.KEMSignedPreKey; import org.whispersystems.textsecuregcm.tests.util.KeysHelper; class KEMPreKeyPageTest { - private static final ECKeyPair IDENTITY_KEY_PAIR = Curve.generateKeyPair(); + private static final ECKeyPair IDENTITY_KEY_PAIR = ECKeyPair.generate(); @Test void serializeSinglePreKey() { diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/storage/KeysManagerTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/storage/KeysManagerTest.java index 0d1765341..a861da0cf 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/storage/KeysManagerTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/storage/KeysManagerTest.java @@ -22,7 +22,6 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; -import org.signal.libsignal.protocol.ecc.Curve; import org.signal.libsignal.protocol.ecc.ECKeyPair; import org.whispersystems.textsecuregcm.entities.ECPreKey; import org.whispersystems.textsecuregcm.entities.ECSignedPreKey; @@ -51,7 +50,7 @@ class KeysManagerTest { private static final UUID ACCOUNT_UUID = UUID.randomUUID(); private static final byte DEVICE_ID = 1; - private static final ECKeyPair IDENTITY_KEY_PAIR = Curve.generateKeyPair(); + private static final ECKeyPair IDENTITY_KEY_PAIR = ECKeyPair.generate(); @BeforeEach void setup() { @@ -265,7 +264,7 @@ class KeysManagerTest { @Test void testStorePqLastResort() { - final ECKeyPair identityKeyPair = Curve.generateKeyPair(); + final ECKeyPair identityKeyPair = ECKeyPair.generate(); final byte deviceId2 = 2; final byte deviceId3 = 3; @@ -289,7 +288,7 @@ class KeysManagerTest { } private static ECPreKey generateTestPreKey(final long keyId) { - return new ECPreKey(keyId, Curve.generateKeyPair().getPublicKey()); + return new ECPreKey(keyId, ECKeyPair.generate().getPublicKey()); } private static ECSignedPreKey generateTestECSignedPreKey(final long keyId) { diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/storage/PagedSingleUseKEMPreKeyStoreTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/storage/PagedSingleUseKEMPreKeyStoreTest.java index c90ab02de..b1a76bd4d 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/storage/PagedSingleUseKEMPreKeyStoreTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/storage/PagedSingleUseKEMPreKeyStoreTest.java @@ -21,7 +21,6 @@ import java.util.stream.IntStream; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; -import org.signal.libsignal.protocol.ecc.Curve; import org.signal.libsignal.protocol.ecc.ECKeyPair; import org.whispersystems.textsecuregcm.entities.KEMSignedPreKey; import org.whispersystems.textsecuregcm.tests.util.KeysHelper; @@ -35,7 +34,7 @@ import software.amazon.awssdk.services.s3.model.S3Object; class PagedSingleUseKEMPreKeyStoreTest { private static final int KEY_COUNT = 100; - private static final ECKeyPair IDENTITY_KEY_PAIR = Curve.generateKeyPair(); + private static final ECKeyPair IDENTITY_KEY_PAIR = ECKeyPair.generate(); private static final String BUCKET_NAME = "testbucket"; private PagedSingleUseKEMPreKeyStore keyStore; diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/storage/RepeatedUseECSignedPreKeyStoreTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/storage/RepeatedUseECSignedPreKeyStoreTest.java index 93caa26c8..635a8e585 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/storage/RepeatedUseECSignedPreKeyStoreTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/storage/RepeatedUseECSignedPreKeyStoreTest.java @@ -7,7 +7,6 @@ package org.whispersystems.textsecuregcm.storage; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.extension.RegisterExtension; -import org.signal.libsignal.protocol.ecc.Curve; import org.signal.libsignal.protocol.ecc.ECKeyPair; import org.whispersystems.textsecuregcm.entities.ECSignedPreKey; import org.whispersystems.textsecuregcm.tests.util.KeysHelper; @@ -23,7 +22,7 @@ class RepeatedUseECSignedPreKeyStoreTest extends RepeatedUseSignedPreKeyStoreTes static final DynamoDbExtension DYNAMO_DB_EXTENSION = new DynamoDbExtension(DynamoDbExtensionSchema.Tables.REPEATED_USE_EC_SIGNED_PRE_KEYS); - private static final ECKeyPair IDENTITY_KEY_PAIR = Curve.generateKeyPair(); + private static final ECKeyPair IDENTITY_KEY_PAIR = ECKeyPair.generate(); @BeforeEach void setUp() { diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/storage/RepeatedUseKEMSignedPreKeyStoreTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/storage/RepeatedUseKEMSignedPreKeyStoreTest.java index 0725fd663..bc385833d 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/storage/RepeatedUseKEMSignedPreKeyStoreTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/storage/RepeatedUseKEMSignedPreKeyStoreTest.java @@ -7,7 +7,6 @@ package org.whispersystems.textsecuregcm.storage; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.extension.RegisterExtension; -import org.signal.libsignal.protocol.ecc.Curve; import org.signal.libsignal.protocol.ecc.ECKeyPair; import org.whispersystems.textsecuregcm.entities.KEMSignedPreKey; import org.whispersystems.textsecuregcm.tests.util.KeysHelper; @@ -23,7 +22,7 @@ class RepeatedUseKEMSignedPreKeyStoreTest extends RepeatedUseSignedPreKeyStoreTe static final DynamoDbExtension DYNAMO_DB_EXTENSION = new DynamoDbExtension(DynamoDbExtensionSchema.Tables.REPEATED_USE_KEM_SIGNED_PRE_KEYS); - private static final ECKeyPair IDENTITY_KEY_PAIR = Curve.generateKeyPair(); + private static final ECKeyPair IDENTITY_KEY_PAIR = ECKeyPair.generate(); @BeforeEach void setUp() { diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/storage/SingleUseECPreKeyStoreTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/storage/SingleUseECPreKeyStoreTest.java index 06eabf0ae..bf6954f2d 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/storage/SingleUseECPreKeyStoreTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/storage/SingleUseECPreKeyStoreTest.java @@ -7,7 +7,7 @@ package org.whispersystems.textsecuregcm.storage; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.extension.RegisterExtension; -import org.signal.libsignal.protocol.ecc.Curve; +import org.signal.libsignal.protocol.ecc.ECKeyPair; import org.whispersystems.textsecuregcm.entities.ECPreKey; import software.amazon.awssdk.services.dynamodb.model.AttributeValue; import software.amazon.awssdk.services.dynamodb.model.ScanRequest; @@ -36,7 +36,7 @@ class SingleUseECPreKeyStoreTest extends SingleUsePreKeyStoreTest { @Override protected ECPreKey generatePreKey(final long keyId) { - return new ECPreKey(keyId, Curve.generateKeyPair().getPublicKey()); + return new ECPreKey(keyId, ECKeyPair.generate().getPublicKey()); } @Override diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/storage/SingleUseKEMPreKeyStoreTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/storage/SingleUseKEMPreKeyStoreTest.java index f4d0336f0..b62440c8d 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/storage/SingleUseKEMPreKeyStoreTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/storage/SingleUseKEMPreKeyStoreTest.java @@ -7,7 +7,6 @@ package org.whispersystems.textsecuregcm.storage; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.extension.RegisterExtension; -import org.signal.libsignal.protocol.ecc.Curve; import org.signal.libsignal.protocol.ecc.ECKeyPair; import org.whispersystems.textsecuregcm.entities.KEMSignedPreKey; import org.whispersystems.textsecuregcm.tests.util.KeysHelper; @@ -22,7 +21,7 @@ class SingleUseKEMPreKeyStoreTest extends SingleUsePreKeyStoreTest