From 706d89db87ef047af1ab980cd7c490a51de320bc Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Fri, 28 Nov 2025 13:39:39 -0500 Subject: [PATCH] Introduce core-models module. Needed to share some key components with feature modules without having to depend on libsignal-service. --- app/build.gradle.kts | 1 + .../backup/v2/ArchiveImportExportTests.kt | 2 +- .../securesms/backup/v2/TestRecipientUtils.kt | 2 +- .../database/AttachmentTableTest_deduping.kt | 2 +- .../database/ChatFolderTablesTest.kt | 4 +- .../database/DistributionListTablesTest.kt | 2 +- .../database/KyberPreKeyTableTest.kt | 4 +- .../database/MessageTableTest_gifts.kt | 4 +- .../database/MmsTableTest_stories.kt | 4 +- .../database/NotificationProfileTablesTest.kt | 4 +- .../database/OneTimePreKeyTableTest.kt | 6 +- .../securesms/database/RecipientTableTest.kt | 4 +- .../RecipientTableTest_getAndPossiblyMerge.kt | 4 +- ...est_collapseJoinRequestEventsIfPossible.kt | 4 +- .../securesms/database/StorySendTableTest.kt | 2 +- .../database/ThreadTableTest_active.kt | 2 +- .../database/ThreadTableTest_pinned.kt | 2 +- .../database/ThreadTableTest_recents.kt | 2 +- .../lock/PinHashing_hashPin_Test.java | 2 +- .../protocol/BufferedKyberPreKeyStoreTest.kt | 2 +- .../storage/ContactRecordProcessorTest.kt | 4 +- .../securesms/testing/AliceClient.kt | 2 +- .../securesms/testing/BobClient.kt | 2 +- .../securesms/testing/FakeClientHelpers.kt | 4 +- .../securesms/testing/GroupTestingUtils.kt | 2 +- .../securesms/testing/MessageContentFuzzer.kt | 4 +- .../securesms/testing/MockProvider.kt | 2 +- .../securesms/testing/SignalActivityRule.kt | 2 +- .../securesms/testing/SignalDatabaseRule.kt | 4 +- .../securesms/util/KyberPreKeysTestUtil.kt | 6 +- .../securesms/BlockUnblockDialog.java | 9 - .../securesms/attachments/Attachment.kt | 2 +- .../attachments/AttachmentExtensions.kt | 2 +- .../securesms/backup/v2/ArchiveValidator.kt | 2 +- .../securesms/backup/v2/BackupRepository.kt | 12 +- .../v2/DatabaseAttachmentArchiveUtil.kt | 2 +- .../RecipientTableArchiveExtensions.kt | 2 +- .../v2/exporters/ChatItemArchiveExporter.kt | 4 +- .../v2/exporters/ContactArchiveExporter.kt | 4 +- .../DistributionListArchiveExporter.kt | 2 +- .../v2/exporters/GroupArchiveExporter.kt | 2 +- .../v2/importer/ChatItemArchiveImporter.kt | 4 +- .../v2/importer/ContactArchiveImporter.kt | 4 +- .../DistributionListArchiveImporter.kt | 2 +- .../v2/importer/GroupArchiveImporter.kt | 2 +- .../backup/v2/local/ArchiveFileSystem.kt | 2 +- .../backup/v2/local/LocalArchiver.kt | 2 +- .../processor/AccountDataArchiveProcessor.kt | 4 +- .../processor/ChatFolderArchiveProcessor.kt | 2 +- .../NotificationProfileArchiveProcessor.kt | 2 +- .../v2/processor/RecipientArchiveProcessor.kt | 2 +- .../backup/v2/stream/EncryptedBackupReader.kt | 4 +- .../backup/v2/stream/EncryptedBackupWriter.kt | 4 +- .../v2/ui/subscription/EnterKeyScreen.kt | 2 +- .../subscription/MessageBackupsFlowState.kt | 2 +- .../v2/util/ArchiveConverterExtensions.kt | 2 +- .../backup/v2/util/FrameExtensions.kt | 2 +- .../remote/BackupKeyDisplayViewModel.kt | 2 +- .../changenumber/ChangeNumberRepository.kt | 4 +- .../app/changenumber/ChangeNumberViewModel.kt | 2 +- .../app/chats/folders/ChatFolderId.kt | 2 +- .../InternalBackupPlaygroundViewModel.kt | 4 +- ...nternalStorageServicePlaygroundFragment.kt | 2 +- .../contacts/sync/ContactDiscovery.kt | 4 +- .../conversation/ConversationData.kt | 2 +- .../conversation/ConversationRepository.java | 2 +- .../conversation/ConversationUpdateItem.java | 2 +- .../conversation/colors/AvatarColorHash.kt | 2 +- .../conversation/colors/Colorizer.kt | 2 +- .../conversation/v2/ConversationViewModel.kt | 2 +- .../v2/data/MessageDataFetcher.kt | 4 +- .../securesms/crash/CrashConfig.kt | 2 +- .../storage/SignalBaseIdentityKeyStore.java | 2 +- .../storage/SignalIdentityKeyStore.java | 2 +- .../crypto/storage/SignalKyberPreKeyStore.kt | 2 +- .../storage/SignalServiceDataStoreImpl.java | 3 +- .../crypto/storage/TextSecurePreKeyStore.java | 2 +- .../storage/TextSecureSessionStore.java | 3 +- .../securesms/database/AttachmentTable.kt | 6 +- .../securesms/database/CallTable.kt | 2 +- .../securesms/database/ChatFolderTables.kt | 2 +- .../database/DistributionListTables.kt | 3 +- .../securesms/database/GroupTable.kt | 6 +- .../securesms/database/IdentityTable.kt | 4 +- .../securesms/database/KyberPreKeyTable.kt | 2 +- .../securesms/database/MentionUtil.java | 2 +- .../securesms/database/MessageTable.kt | 2 +- .../database/NotificationProfileTables.kt | 2 +- .../securesms/database/OneTimePreKeyTable.kt | 2 +- .../securesms/database/PaymentTable.java | 2 +- .../securesms/database/PnpOperations.kt | 6 +- .../securesms/database/RecipientTable.kt | 6 +- .../database/RecipientTableCursorUtil.kt | 2 +- .../database/SentStorySyncManifest.kt | 2 +- .../securesms/database/SessionTable.kt | 4 +- .../securesms/database/SignedPreKeyTable.kt | 2 +- .../securesms/database/ThreadTable.kt | 2 +- .../migration/V149_LegacyMigrations.kt | 2 +- ...essageRecipientsAndEditMessageMigration.kt | 2 +- ...essageRecipientsAndEditMessageMigration.kt | 2 +- .../migration/V210_FixPniPossibleColumns.kt | 2 +- .../V258_FixGroupRevokedInviteeUpdate.kt | 2 +- .../migration/V264_FixGroupAddMemberUpdate.kt | 2 +- .../V267_FixGroupInvitationDeclinedUpdate.kt | 2 +- .../model/GroupCallUpdateDetailsUtil.java | 5 +- .../model/GroupCallUpdateMessageFactory.java | 5 +- .../model/GroupsV2UpdateMessageConverter.kt | 4 +- .../model/GroupsV2UpdateMessageProducer.java | 5 +- .../database/model/MessageRecord.java | 6 +- .../database/model/RecipientRecord.kt | 6 +- .../database/model/UpdateDescription.java | 2 +- .../ApplicationDependencyProvider.java | 4 +- .../securesms/groups/GroupManager.java | 2 +- .../securesms/groups/GroupManagerV2.java | 8 +- .../securesms/groups/GroupProtoUtil.java | 4 +- .../securesms/groups/LiveGroup.java | 2 +- .../groups/v2/GroupCandidateHelper.java | 2 +- .../securesms/groups/v2/ProfileKeySet.java | 4 +- .../v2/processing/GroupsV2StateProcessor.kt | 6 +- .../PushProcessMessageJobMigration.kt | 2 +- .../ArchiveAttachmentReconciliationJob.kt | 2 +- .../securesms/jobs/BackupMessagesJob.kt | 2 +- .../securesms/jobs/IndividualSendJob.java | 2 +- .../jobs/MultiDeviceDeleteSyncJob.kt | 2 +- .../MultiDeviceOutgoingPaymentSyncJob.java | 3 +- .../jobs/MultiDeviceReadUpdateJob.java | 2 +- .../securesms/jobs/PreKeysSyncJob.kt | 2 +- .../jobs/PushGroupSilentUpdateSendJob.java | 4 +- .../securesms/jobs/PushProcessMessageJob.kt | 2 +- .../securesms/jobs/PushSendJob.java | 2 +- .../securesms/jobs/ReportSpamJob.java | 2 +- .../securesms/jobs/ResetSvrGuessCountJob.kt | 2 +- .../jobs/RestoreLocalAttachmentJob.kt | 2 +- .../jobs/RetrieveRemoteAnnouncementsJob.kt | 2 +- .../jobs/StorageRotateManifestJob.kt | 2 +- .../securesms/jobs/StorageSyncJob.kt | 2 +- .../securesms/keyvalue/AccountValues.kt | 10 +- .../securesms/keyvalue/BackupValues.kt | 4 +- .../keyvalue/StorageServiceValues.kt | 2 +- .../securesms/keyvalue/SvrValues.kt | 2 +- .../linkdevice/LinkDeviceRepository.kt | 2 +- .../linkdevice/LinkDeviceViewModel.kt | 2 +- .../messages/CallMessageProcessor.kt | 2 +- .../messages/DataMessageProcessor.kt | 6 +- .../messages/EditMessageProcessor.kt | 2 +- .../securesms/messages/GroupSendUtil.java | 2 +- .../messages/IncomingMessageObserver.kt | 2 +- .../messages/MessageContentProcessor.kt | 2 +- .../securesms/messages/MessageDecryptor.kt | 8 +- .../messages/SignalServiceProtoUtil.kt | 2 +- .../messages/StoryMessageProcessor.kt | 2 +- .../messages/SyncMessageProcessor.kt | 12 +- .../protocol/BufferedIdentityKeyStore.kt | 2 +- .../protocol/BufferedKyberPreKeyStore.kt | 2 +- .../protocol/BufferedOneTimePreKeyStore.kt | 2 +- .../protocol/BufferedProtocolStore.kt | 2 +- .../messages/protocol/BufferedSessionStore.kt | 2 +- .../BufferedSignalServiceAccountDataStore.kt | 2 +- .../protocol/BufferedSignedPreKeyStore.kt | 2 +- .../FixChangeNumberErrorMigrationJob.kt | 2 +- .../PniAccountInitializationMigrationJob.java | 2 +- .../securesms/migrations/PniMigrationJob.java | 2 +- .../migrations/UuidMigrationJob.java | 2 +- .../securesms/mms/MessageGroupContext.java | 5 +- .../profiles/NotificationProfileId.kt | 2 +- .../payments/ReconstructedPayment.java | 2 +- .../securesms/pin/SvrRepository.kt | 4 +- .../profiles/manage/UsernameRepository.kt | 6 +- .../securesms/push/AccountManagerFactory.java | 2 - .../recipients/LiveRecipientCache.java | 2 +- .../securesms/recipients/Recipient.kt | 8 +- .../securesms/recipients/RecipientId.kt | 2 +- .../recipients/RecipientIdCache.java | 2 +- .../securesms/recipients/RecipientUtil.java | 2 +- .../data/AccountRegistrationResult.kt | 2 +- .../data/RegistrationRepository.kt | 12 +- .../registration/ui/RegistrationViewModel.kt | 6 +- .../restore/AccountEntropyPoolVerification.kt | 2 +- .../ui/restore/EnterBackupKeyScreen.kt | 2 +- .../ui/restore/EnterBackupKeyViewModel.kt | 2 +- .../PostRegistrationEnterBackupKeyFragment.kt | 2 +- ...PostRegistrationEnterBackupKeyViewModel.kt | 2 +- .../CallLinkConnectedActionProcessor.kt | 2 +- .../service/webrtc/GroupActionProcessor.java | 2 +- .../service/webrtc/GroupCallRingCheckInfo.kt | 2 +- .../webrtc/GroupPreJoinActionProcessor.java | 2 +- .../service/webrtc/IdleActionProcessor.java | 2 +- .../IncomingGroupCallActionProcessor.java | 2 +- .../service/webrtc/SignalCallManager.java | 2 +- .../service/webrtc/WebRtcActionProcessor.java | 4 +- .../securesms/service/webrtc/WebRtcData.java | 2 +- .../sms/GroupV2UpdateMessageUtil.java | 2 +- .../storage/ChatFolderRecordProcessor.kt | 4 +- .../storage/ContactRecordProcessor.kt | 4 +- .../NotificationProfileRecordProcessor.kt | 4 +- .../securesms/storage/StorageSyncHelper.kt | 4 +- .../securesms/storage/StorageSyncModels.kt | 4 +- .../storage/StorageSyncValidations.java | 4 +- .../StoryDistributionListRecordProcessor.kt | 2 +- .../securesms/util/IdentityUtil.java | 3 +- .../securesms/util/ProfileUtil.java | 2 +- .../securesms/util/RecipientAccessList.kt | 2 +- .../securesms/video/exo/PartDataSource.java | 5 +- .../v2/ArchivedMediaObjectIteratorTest.kt | 2 +- .../stream/EncryptedBackupReaderWriterTest.kt | 4 +- .../sync/FuzzyPhoneNumberHelperTest.java | 2 +- .../colors/AvatarColorHashTest.kt | 4 +- .../securesms/crash/CrashConfigTest.kt | 2 +- .../securesms/database/GroupTestUtil.kt | 2 +- .../database/RecipientDatabaseTestUtils.kt | 2 +- .../GroupsV2UpdateMessageProducerTest.kt | 6 +- ...NewContextWithAppendedDeleteJoinRequest.kt | 2 +- .../database/model/UpdateDescriptionTest.java | 3 +- .../groups/GroupManagerV2Test_edit.kt | 4 +- .../securesms/groups/v2/ChangeBuilder.java | 2 +- .../securesms/groups/v2/ProfileKeySetTest.kt | 2 +- .../v2/processing/GroupStatePatcherTest.kt | 4 +- .../processing/GroupsV2StateProcessorTest.kt | 4 +- .../securesms/jobs/FastJobStorageTest.kt | 45 + .../reconciliation/LedgerReconcileTest.java | 4 +- .../recipients/RecipientIdCacheTest.kt | 2 +- .../ui/findby/FindByViewModelTest.kt | 2 +- .../registration/v2/PinHashKbsDataTest.kt | 2 +- .../v2/PinHashUtil_normalize_Test.java | 2 +- .../sms/GroupV2UpdateMessageUtilTest.java | 2 +- .../storage/ChatFolderRecordProcessorTest.kt | 2 +- .../storage/ContactRecordProcessorTest.kt | 6 +- .../NotificationProfileRecordProcessorTest.kt | 2 +- .../storage/StorageSyncHelperTest.kt | 4 +- ...toryDistributionListRecordProcessorTest.kt | 2 +- .../securesms/util/BucketingUtilTest.java | 2 +- .../databaseprotos/DecryptedGroupHelper.kt | 4 +- build.gradle.kts | 2 +- core-models/build.gradle.kts | 30 + .../signal/core/models}/AccountEntropyPool.kt | 12 +- .../java/org/signal/core/models/MasterKey.kt | 68 ++ .../java/org/signal/core/models}/ServiceId.kt | 56 +- .../signal/core/models}/backup/BackupId.kt | 4 +- .../signal/core/models}/backup/BackupKey.kt | 10 +- .../org/signal/core/models}/backup/MediaId.kt | 2 +- .../signal/core/models}/backup/MediaName.kt | 2 +- .../core/models}/backup/MediaRootBackupKey.kt | 25 +- .../core/models}/backup/MessageBackupKey.kt | 19 +- .../models/storageservice/StorageCipherKey.kt | 10 + .../models/storageservice}/StorageItemKey.kt | 7 +- .../core/models/storageservice}/StorageKey.kt | 17 +- .../storageservice}/StorageManifestKey.kt | 9 +- .../java/org/signal/core/util/RandomUtil.kt | 17 + .../org/signal/core}/util/UuidExtensions.kt | 4 +- .../java/org/signal/core/util/UuidUtil.kt | 127 +++ .../org/signal/core}/util/UuidUtilTest.java | 7 +- gradle/libs.versions.toml | 1 + libsignal-service/build.gradle.kts | 1 + .../api/SignalServiceAccountManager.java | 4 +- .../api/SignalServiceDataStore.java | 2 +- .../api/SignalServiceMessageReceiver.java | 2 +- .../api/SignalServiceMessageSender.java | 6 +- .../signalservice/api/archive/ArchiveApi.kt | 8 +- .../api/archive/ArchiveServiceAccess.kt | 2 +- .../api/archive/ArchiveServiceAccessPair.kt | 4 +- .../signalservice/api/cds/CdsApi.kt | 2 +- .../signalservice/api/cds/CdsiV2Service.java | 6 +- .../api/crypto/AttachmentCipherInputStream.kt | 2 +- .../api/crypto/EnvelopeMetadata.kt | 2 +- .../signalservice/api/crypto/HmacSIV.java | 7 +- .../api/crypto/SignalServiceCipher.java | 6 +- .../api/groupsv2/DecryptedGroupExtensions.kt | 4 +- .../api/groupsv2/DecryptedGroupUtil.java | 4 +- .../api/groupsv2/GroupCandidate.java | 2 +- .../api/groupsv2/GroupSendEndorsements.kt | 2 +- .../api/groupsv2/GroupsV2Api.java | 4 +- .../groupsv2/GroupsV2AuthorizationString.java | 2 +- .../api/groupsv2/GroupsV2Operations.java | 8 +- .../groupsv2/ReceivedGroupSendEndorsements.kt | 2 +- .../signalservice/api/kbs/KbsData.java | 2 + .../signalservice/api/kbs/MasterKey.java | 71 -- .../signalservice/api/kbs/PinHashUtil.kt | 1 + .../signalservice/api/link/LinkDeviceApi.kt | 12 +- .../signalservice/api/message/MessageApi.kt | 2 +- .../api/messages/EnvelopeContentValidator.kt | 4 +- .../api/messages/SignalServiceDataMessage.kt | 2 +- .../multidevice/BlockedListMessage.kt | 2 +- .../messages/multidevice/DeviceContact.java | 3 +- .../DeviceContactsInputStream.java | 11 +- .../api/messages/multidevice/KeysMessage.kt | 8 +- .../MessageRequestResponseMessage.java | 3 +- .../multidevice/OutgoingPaymentMessage.java | 2 +- .../api/messages/multidevice/ReadMessage.java | 2 +- .../multidevice/SentTranscriptMessage.java | 2 +- .../multidevice/ViewOnceOpenMessage.java | 2 +- .../messages/multidevice/ViewedMessage.java | 2 +- .../signalservice/api/profiles/ProfileApi.kt | 4 +- .../api/profiles/ProfileRepository.kt | 2 +- .../api/profiles/SignalServiceProfile.java | 2 +- .../api/push/DistributionId.java | 2 +- .../signalservice/api/push/ServiceIds.java | 5 +- .../api/push/SignalServiceAddress.java | 3 +- .../api/services/ProfileService.java | 7 +- .../api/storage/AccountRecordExtensions.kt | 2 +- .../api/storage/ContactRecordExtensions.kt | 2 +- .../signalservice/api/storage/RecordIkm.kt | 4 +- .../api/storage/SignalStorageCipher.kt | 1 + .../api/storage/StorageCipherKey.kt | 5 - .../api/storage/StorageServiceRepository.kt | 1 + .../StoryDistributionListRecordExtensions.kt | 2 +- .../api/svr/SecureValueRecovery.kt | 2 +- .../api/svr/SecureValueRecoveryV2.kt | 4 +- .../api/svr/SecureValueRecoveryV3.kt | 2 +- .../signalservice/api/svr/Svr2Socket.kt | 2 +- .../signalservice/api/svr/SvrBApi.kt | 2 +- .../signalservice/api/username/UsernameApi.kt | 2 +- .../api/util/AttachmentPointerUtil.java | 1 + .../api/util/CredentialsProvider.java | 4 +- .../signalservice/api/util/UuidUtil.java | 123 --- .../contacts/entities/DiscoveryResponse.java | 2 +- .../contacts/entities/KeyBackupRequest.java | 2 +- .../contacts/entities/KeyBackupResponse.java | 2 +- .../internal/push/IdentityCheckRequest.java | 2 +- .../internal/push/IdentityCheckResponse.java | 2 +- .../internal/push/PushServiceSocket.java | 2 +- .../push/SendGroupMessageResponse.java | 2 +- .../signalservice/internal/util/Hex.java | 128 --- .../signalservice/internal/util/JsonUtil.java | 8 +- .../util/StaticCredentialsProvider.java | 4 +- .../org/whispersystems/util/StringUtil.java | 13 - .../api/crypto/AttachmentCipherTestHelper.kt | 4 +- .../api/groupsv2/DecryptedGroupUtilTest.kt | 2 +- .../DecryptedGroupUtil_apply_Test.java | 2 +- .../DecryptedGroupUtil_empty_Test.java | 2 +- .../groupsv2/GroupChangeReconstructTest.java | 2 +- .../GroupChangeUtil_resolveConflict_Test.java | 2 +- ...il_resolveConflict_decryptedOnly_Test.java | 2 +- .../groupsv2/GroupsV2Operations_ban_Test.kt | 2 +- ...roupsV2Operations_decrypt_change_Test.java | 6 +- ...GroupsV2Operations_decrypt_group_Test.java | 2 +- .../api/groupsv2/ProtoTestUtils.java | 2 +- .../api/groupsv2/TestZkGroupServer.java | 2 +- .../signalservice/api/kbs/MasterKeyTest.java | 5 +- .../messages/EnvelopeContentValidatorTest.kt | 2 +- .../DeviceContactsInputStreamTest.java | 2 +- .../signalservice/api/push/ServiceIdTests.kt | 7 +- .../api/storage/SignalContactRecordTest.java | 2 +- .../api/storage/SignalStorageCipherTest.java | 1 + .../api/util/CredentialsProviderTest.kt | 2 +- .../crypto/SecondaryProvisioningCipherTest.kt | 8 +- microbenchmark/build.gradle.kts | 1 + .../java/org/signal/util/SignalClient.kt | 6 +- registration/app/build.gradle.kts | 12 + .../registration/sample/AppViewModel.kt | 13 + .../registration/sample/MainActivity.kt | 170 ++-- .../sample/RegistrationApplication.kt | 4 +- .../dependencies/RealNetworkController.kt | 4 +- .../dependencies/RealStorageController.kt | 86 ++ .../screens/RegistrationCompleteScreen.kt | 57 ++ .../sample/screens/main/MainScreen.kt | 75 ++ .../sample/screens/main/MainScreenEvents.kt | 10 + .../sample/screens/main/MainScreenState.kt | 12 + .../screens/main/MainScreenViewModel.kt | 36 + registration/lib/build.gradle.kts | 1 + .../signal/registration/NetworkController.kt | 2 +- .../signal/registration/StorageController.kt | 30 + .../VerificationCodeViewModel.kt | 16 +- .../VerificationCodeViewModelTest.kt | 773 ++++++++++++++++++ settings.gradle.kts | 1 + 364 files changed, 2085 insertions(+), 1016 deletions(-) create mode 100644 core-models/build.gradle.kts rename {libsignal-service/src/main/java/org/whispersystems/signalservice/api => core-models/src/main/java/org/signal/core/models}/AccountEntropyPool.kt (74%) create mode 100644 core-models/src/main/java/org/signal/core/models/MasterKey.kt rename {libsignal-service/src/main/java/org/whispersystems/signalservice/api/push => core-models/src/main/java/org/signal/core/models}/ServiceId.kt (85%) rename {libsignal-service/src/main/java/org/whispersystems/signalservice/api => core-models/src/main/java/org/signal/core/models}/backup/BackupId.kt (84%) rename {libsignal-service/src/main/java/org/whispersystems/signalservice/api => core-models/src/main/java/org/signal/core/models}/backup/BackupKey.kt (54%) rename {libsignal-service/src/main/java/org/whispersystems/signalservice/api => core-models/src/main/java/org/signal/core/models}/backup/MediaId.kt (90%) rename {libsignal-service/src/main/java/org/whispersystems/signalservice/api => core-models/src/main/java/org/signal/core/models}/backup/MediaName.kt (95%) rename {libsignal-service/src/main/java/org/whispersystems/signalservice/api => core-models/src/main/java/org/signal/core/models}/backup/MediaRootBackupKey.kt (66%) rename {libsignal-service/src/main/java/org/whispersystems/signalservice/api => core-models/src/main/java/org/signal/core/models}/backup/MessageBackupKey.kt (67%) create mode 100644 core-models/src/main/java/org/signal/core/models/storageservice/StorageCipherKey.kt rename {libsignal-service/src/main/java/org/whispersystems/signalservice/api/storage => core-models/src/main/java/org/signal/core/models/storageservice}/StorageItemKey.kt (80%) rename {libsignal-service/src/main/java/org/whispersystems/signalservice/api/storage => core-models/src/main/java/org/signal/core/models/storageservice}/StorageKey.kt (68%) rename {libsignal-service/src/main/java/org/whispersystems/signalservice/api/storage => core-models/src/main/java/org/signal/core/models/storageservice}/StorageManifestKey.kt (69%) create mode 100644 core-util-jvm/src/main/java/org/signal/core/util/RandomUtil.kt rename {libsignal-service/src/main/java/org/whispersystems/signalservice/api => core-util-jvm/src/main/java/org/signal/core}/util/UuidExtensions.kt (60%) create mode 100644 core-util-jvm/src/main/java/org/signal/core/util/UuidUtil.kt rename {libsignal-service/src/test/java/org/whispersystems/signalservice/api => core-util-jvm/src/test/java/org/signal/core}/util/UuidUtilTest.java (93%) delete mode 100644 libsignal-service/src/main/java/org/whispersystems/signalservice/api/kbs/MasterKey.java delete mode 100644 libsignal-service/src/main/java/org/whispersystems/signalservice/api/storage/StorageCipherKey.kt delete mode 100644 libsignal-service/src/main/java/org/whispersystems/signalservice/api/util/UuidUtil.java delete mode 100644 libsignal-service/src/main/java/org/whispersystems/signalservice/internal/util/Hex.java delete mode 100644 libsignal-service/src/main/java/org/whispersystems/util/StringUtil.java create mode 100644 registration/app/src/main/java/org/signal/registration/sample/AppViewModel.kt create mode 100644 registration/app/src/main/java/org/signal/registration/sample/screens/RegistrationCompleteScreen.kt create mode 100644 registration/app/src/main/java/org/signal/registration/sample/screens/main/MainScreen.kt create mode 100644 registration/app/src/main/java/org/signal/registration/sample/screens/main/MainScreenEvents.kt create mode 100644 registration/app/src/main/java/org/signal/registration/sample/screens/main/MainScreenState.kt create mode 100644 registration/app/src/main/java/org/signal/registration/sample/screens/main/MainScreenViewModel.kt create mode 100644 registration/lib/src/test/java/org/signal/registration/screens/verificationcode/VerificationCodeViewModelTest.kt diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 98c47d0d39..6ae720576c 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -507,6 +507,7 @@ dependencies { implementation(project(":sticky-header-grid")) implementation(project(":photoview")) implementation(project(":core-ui")) + implementation(project(":core-models")) implementation(libs.androidx.fragment.ktx) implementation(libs.androidx.appcompat) { diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/backup/v2/ArchiveImportExportTests.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/backup/v2/ArchiveImportExportTests.kt index 6a4008aacb..ddb3ffaecb 100644 --- a/app/src/androidTest/java/org/thoughtcrime/securesms/backup/v2/ArchiveImportExportTests.kt +++ b/app/src/androidTest/java/org/thoughtcrime/securesms/backup/v2/ArchiveImportExportTests.kt @@ -13,6 +13,7 @@ import org.junit.Assert.assertTrue import org.junit.Before import org.junit.Test import org.junit.runner.RunWith +import org.signal.core.models.ServiceId import org.signal.core.util.Base64 import org.signal.core.util.logging.Log import org.signal.core.util.readFully @@ -24,7 +25,6 @@ import org.thoughtcrime.securesms.backup.v2.stream.PlainTextBackupReader import org.thoughtcrime.securesms.database.KeyValueDatabase import org.thoughtcrime.securesms.dependencies.AppDependencies import org.thoughtcrime.securesms.keyvalue.SignalStore -import org.whispersystems.signalservice.api.push.ServiceId import java.io.ByteArrayInputStream import java.util.UUID diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/backup/v2/TestRecipientUtils.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/backup/v2/TestRecipientUtils.kt index f6788f5e4a..715903aa23 100644 --- a/app/src/androidTest/java/org/thoughtcrime/securesms/backup/v2/TestRecipientUtils.kt +++ b/app/src/androidTest/java/org/thoughtcrime/securesms/backup/v2/TestRecipientUtils.kt @@ -5,8 +5,8 @@ package org.thoughtcrime.securesms.backup.v2 +import org.signal.core.util.toByteArray import org.thoughtcrime.securesms.crypto.ProfileKeyUtil -import org.whispersystems.signalservice.api.util.toByteArray import java.util.UUID import kotlin.random.Random diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/database/AttachmentTableTest_deduping.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/database/AttachmentTableTest_deduping.kt index 07fdc35191..2ed2f7e855 100644 --- a/app/src/androidTest/java/org/thoughtcrime/securesms/database/AttachmentTableTest_deduping.kt +++ b/app/src/androidTest/java/org/thoughtcrime/securesms/database/AttachmentTableTest_deduping.kt @@ -11,6 +11,7 @@ import org.junit.Assert.assertTrue import org.junit.Before import org.junit.Test import org.junit.runner.RunWith +import org.signal.core.models.ServiceId import org.signal.core.util.Base64 import org.signal.core.util.readFully import org.signal.core.util.stream.LimitedInputStream @@ -28,7 +29,6 @@ import org.thoughtcrime.securesms.providers.BlobProvider import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.util.MediaUtil import org.thoughtcrime.securesms.util.Util -import org.whispersystems.signalservice.api.push.ServiceId import org.whispersystems.signalservice.internal.crypto.PaddingInputStream import java.io.File import java.util.UUID diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/database/ChatFolderTablesTest.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/database/ChatFolderTablesTest.kt index 8259a1c4da..9037dd0067 100644 --- a/app/src/androidTest/java/org/thoughtcrime/securesms/database/ChatFolderTablesTest.kt +++ b/app/src/androidTest/java/org/thoughtcrime/securesms/database/ChatFolderTablesTest.kt @@ -14,6 +14,8 @@ import org.junit.Before import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith +import org.signal.core.models.ServiceId.ACI +import org.signal.core.util.UuidUtil import org.signal.core.util.deleteAll import org.thoughtcrime.securesms.components.settings.app.chats.folders.ChatFolderId import org.thoughtcrime.securesms.components.settings.app.chats.folders.ChatFolderRecord @@ -21,10 +23,8 @@ import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.recipients.RecipientId import org.thoughtcrime.securesms.storage.StorageSyncHelper import org.thoughtcrime.securesms.testing.SignalActivityRule -import org.whispersystems.signalservice.api.push.ServiceId.ACI import org.whispersystems.signalservice.api.storage.SignalChatFolderRecord import org.whispersystems.signalservice.api.storage.StorageId -import org.whispersystems.signalservice.api.util.UuidUtil import java.util.UUID import org.whispersystems.signalservice.internal.storage.protos.ChatFolderRecord as RemoteChatFolderRecord import org.whispersystems.signalservice.internal.storage.protos.Recipient as RemoteRecipient diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/database/DistributionListTablesTest.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/database/DistributionListTablesTest.kt index 33d21a4f61..40a5054698 100644 --- a/app/src/androidTest/java/org/thoughtcrime/securesms/database/DistributionListTablesTest.kt +++ b/app/src/androidTest/java/org/thoughtcrime/securesms/database/DistributionListTablesTest.kt @@ -3,11 +3,11 @@ package org.thoughtcrime.securesms.database import org.junit.Assert import org.junit.Before import org.junit.Test +import org.signal.core.models.ServiceId.ACI import org.thoughtcrime.securesms.database.model.DistributionListId import org.thoughtcrime.securesms.database.model.DistributionListRecord import org.thoughtcrime.securesms.database.model.StoryType import org.thoughtcrime.securesms.recipients.RecipientId -import org.whispersystems.signalservice.api.push.ServiceId.ACI import java.util.UUID class DistributionListTablesTest { diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/database/KyberPreKeyTableTest.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/database/KyberPreKeyTableTest.kt index 99d3b1bb38..fcee3cb93f 100644 --- a/app/src/androidTest/java/org/thoughtcrime/securesms/database/KyberPreKeyTableTest.kt +++ b/app/src/androidTest/java/org/thoughtcrime/securesms/database/KyberPreKeyTableTest.kt @@ -9,12 +9,12 @@ import org.junit.Assert.assertEquals import org.junit.Assert.assertNotNull import org.junit.Assert.assertNull import org.junit.Test +import org.signal.core.models.ServiceId.ACI +import org.signal.core.models.ServiceId.PNI import org.signal.libsignal.protocol.ReusedBaseKeyException import org.thoughtcrime.securesms.util.KyberPreKeysTestUtil.generateECPublicKey import org.thoughtcrime.securesms.util.KyberPreKeysTestUtil.getStaleTime import org.thoughtcrime.securesms.util.KyberPreKeysTestUtil.insertTestRecord -import org.whispersystems.signalservice.api.push.ServiceId.ACI -import org.whispersystems.signalservice.api.push.ServiceId.PNI import java.util.UUID class KyberPreKeyTableTest { diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/database/MessageTableTest_gifts.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/database/MessageTableTest_gifts.kt index 01f4c5cd68..aa17815753 100644 --- a/app/src/androidTest/java/org/thoughtcrime/securesms/database/MessageTableTest_gifts.kt +++ b/app/src/androidTest/java/org/thoughtcrime/securesms/database/MessageTableTest_gifts.kt @@ -6,12 +6,12 @@ import org.junit.Assert.assertTrue import org.junit.Before import org.junit.Test import org.junit.runner.RunWith +import org.signal.core.models.ServiceId.ACI +import org.signal.core.models.ServiceId.PNI import org.thoughtcrime.securesms.database.model.databaseprotos.GiftBadge import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.recipients.RecipientId -import org.whispersystems.signalservice.api.push.ServiceId.ACI -import org.whispersystems.signalservice.api.push.ServiceId.PNI import java.util.UUID @Suppress("ClassName") diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/database/MmsTableTest_stories.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/database/MmsTableTest_stories.kt index 23b918a9f8..038c7065d1 100644 --- a/app/src/androidTest/java/org/thoughtcrime/securesms/database/MmsTableTest_stories.kt +++ b/app/src/androidTest/java/org/thoughtcrime/securesms/database/MmsTableTest_stories.kt @@ -9,6 +9,8 @@ import org.junit.Before import org.junit.Ignore import org.junit.Test import org.junit.runner.RunWith +import org.signal.core.models.ServiceId.ACI +import org.signal.core.models.ServiceId.PNI import org.thoughtcrime.securesms.database.model.DistributionListId import org.thoughtcrime.securesms.database.model.ParentStoryId import org.thoughtcrime.securesms.database.model.StoryType @@ -16,8 +18,6 @@ import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.mms.IncomingMessage import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.recipients.RecipientId -import org.whispersystems.signalservice.api.push.ServiceId.ACI -import org.whispersystems.signalservice.api.push.ServiceId.PNI import java.util.UUID import java.util.concurrent.TimeUnit diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/database/NotificationProfileTablesTest.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/database/NotificationProfileTablesTest.kt index cb5d53682c..97e490d379 100644 --- a/app/src/androidTest/java/org/thoughtcrime/securesms/database/NotificationProfileTablesTest.kt +++ b/app/src/androidTest/java/org/thoughtcrime/securesms/database/NotificationProfileTablesTest.kt @@ -13,6 +13,8 @@ import org.junit.Before import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith +import org.signal.core.models.ServiceId.ACI +import org.signal.core.util.UuidUtil import org.signal.core.util.deleteAll import org.thoughtcrime.securesms.conversation.colors.AvatarColor import org.thoughtcrime.securesms.notifications.profiles.NotificationProfile @@ -22,10 +24,8 @@ import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.recipients.RecipientId import org.thoughtcrime.securesms.storage.StorageSyncHelper import org.thoughtcrime.securesms.testing.SignalActivityRule -import org.whispersystems.signalservice.api.push.ServiceId.ACI import org.whispersystems.signalservice.api.storage.SignalNotificationProfileRecord import org.whispersystems.signalservice.api.storage.StorageId -import org.whispersystems.signalservice.api.util.UuidUtil import java.time.DayOfWeek import java.util.UUID import org.whispersystems.signalservice.internal.storage.protos.NotificationProfile as RemoteNotificationProfile diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/database/OneTimePreKeyTableTest.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/database/OneTimePreKeyTableTest.kt index 2c24ae72fe..b493fdbf5c 100644 --- a/app/src/androidTest/java/org/thoughtcrime/securesms/database/OneTimePreKeyTableTest.kt +++ b/app/src/androidTest/java/org/thoughtcrime/securesms/database/OneTimePreKeyTableTest.kt @@ -9,15 +9,15 @@ import org.junit.Assert.assertEquals import org.junit.Assert.assertNotNull import org.junit.Assert.assertNull import org.junit.Test +import org.signal.core.models.ServiceId +import org.signal.core.models.ServiceId.ACI +import org.signal.core.models.ServiceId.PNI import org.signal.core.util.readToSingleObject import org.signal.core.util.requireLongOrNull import org.signal.core.util.select import org.signal.core.util.update import org.signal.libsignal.protocol.ecc.ECKeyPair import org.signal.libsignal.protocol.state.PreKeyRecord -import org.whispersystems.signalservice.api.push.ServiceId -import org.whispersystems.signalservice.api.push.ServiceId.ACI -import org.whispersystems.signalservice.api.push.ServiceId.PNI import java.util.UUID class OneTimePreKeyTableTest { diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/database/RecipientTableTest.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/database/RecipientTableTest.kt index 11c8c6b8cb..62326bd70a 100644 --- a/app/src/androidTest/java/org/thoughtcrime/securesms/database/RecipientTableTest.kt +++ b/app/src/androidTest/java/org/thoughtcrime/securesms/database/RecipientTableTest.kt @@ -7,12 +7,12 @@ import org.junit.Assert.assertNotEquals import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith +import org.signal.core.models.ServiceId.ACI +import org.signal.core.models.ServiceId.PNI import org.signal.core.util.CursorUtil import org.thoughtcrime.securesms.profiles.ProfileName import org.thoughtcrime.securesms.recipients.RecipientId import org.thoughtcrime.securesms.testing.SignalActivityRule -import org.whispersystems.signalservice.api.push.ServiceId.ACI -import org.whispersystems.signalservice.api.push.ServiceId.PNI import java.util.UUID @RunWith(AndroidJUnit4::class) diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/database/RecipientTableTest_getAndPossiblyMerge.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/database/RecipientTableTest_getAndPossiblyMerge.kt index 466767dece..184014d52a 100644 --- a/app/src/androidTest/java/org/thoughtcrime/securesms/database/RecipientTableTest_getAndPossiblyMerge.kt +++ b/app/src/androidTest/java/org/thoughtcrime/securesms/database/RecipientTableTest_getAndPossiblyMerge.kt @@ -14,6 +14,8 @@ import org.junit.Assert.assertTrue import org.junit.Before import org.junit.Test import org.junit.runner.RunWith +import org.signal.core.models.ServiceId.ACI +import org.signal.core.models.ServiceId.PNI import org.signal.core.util.Base64 import org.signal.core.util.SqlUtil import org.signal.core.util.exists @@ -42,8 +44,6 @@ import org.thoughtcrime.securesms.notifications.profiles.NotificationProfile import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.recipients.RecipientId import org.thoughtcrime.securesms.util.Util -import org.whispersystems.signalservice.api.push.ServiceId.ACI -import org.whispersystems.signalservice.api.push.ServiceId.PNI import java.util.Optional import java.util.UUID diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/database/SmsDatabaseTest_collapseJoinRequestEventsIfPossible.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/database/SmsDatabaseTest_collapseJoinRequestEventsIfPossible.kt index 50f93bf7e0..76ca569ece 100644 --- a/app/src/androidTest/java/org/thoughtcrime/securesms/database/SmsDatabaseTest_collapseJoinRequestEventsIfPossible.kt +++ b/app/src/androidTest/java/org/thoughtcrime/securesms/database/SmsDatabaseTest_collapseJoinRequestEventsIfPossible.kt @@ -8,6 +8,8 @@ import assertk.assertions.isPresent import org.junit.Before import org.junit.Test import org.junit.runner.RunWith +import org.signal.core.models.ServiceId.ACI +import org.signal.core.models.ServiceId.PNI import org.signal.core.util.Hex import org.signal.libsignal.zkgroup.groups.GroupMasterKey import org.thoughtcrime.securesms.database.MessageTable.InsertResult @@ -24,8 +26,6 @@ import org.thoughtcrime.securesms.isAbsent import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.mms.IncomingMessage import org.thoughtcrime.securesms.recipients.RecipientId -import org.whispersystems.signalservice.api.push.ServiceId.ACI -import org.whispersystems.signalservice.api.push.ServiceId.PNI import java.util.UUID @Suppress("ClassName", "TestFunctionName") diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/database/StorySendTableTest.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/database/StorySendTableTest.kt index e446b724c2..84fe56b5b2 100644 --- a/app/src/androidTest/java/org/thoughtcrime/securesms/database/StorySendTableTest.kt +++ b/app/src/androidTest/java/org/thoughtcrime/securesms/database/StorySendTableTest.kt @@ -16,13 +16,13 @@ import org.junit.Before import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith +import org.signal.core.models.ServiceId.ACI import org.thoughtcrime.securesms.database.model.DistributionListId import org.thoughtcrime.securesms.database.model.StoryType import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.recipients.RecipientId import org.thoughtcrime.securesms.testing.SignalActivityRule import org.whispersystems.signalservice.api.push.DistributionId -import org.whispersystems.signalservice.api.push.ServiceId.ACI import java.util.UUID @RunWith(AndroidJUnit4::class) diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/database/ThreadTableTest_active.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/database/ThreadTableTest_active.kt index e20da879a7..6aab97566c 100644 --- a/app/src/androidTest/java/org/thoughtcrime/securesms/database/ThreadTableTest_active.kt +++ b/app/src/androidTest/java/org/thoughtcrime/securesms/database/ThreadTableTest_active.kt @@ -13,12 +13,12 @@ import org.junit.Assert.assertNotNull import org.junit.Before import org.junit.Rule import org.junit.Test +import org.signal.core.models.ServiceId.ACI import org.thoughtcrime.securesms.components.settings.app.chats.folders.ChatFolderRecord import org.thoughtcrime.securesms.conversationlist.model.ConversationFilter import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.testing.SignalDatabaseRule import org.thoughtcrime.securesms.util.RemoteConfig -import org.whispersystems.signalservice.api.push.ServiceId.ACI import java.util.UUID @Suppress("ClassName") diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/database/ThreadTableTest_pinned.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/database/ThreadTableTest_pinned.kt index 9a7cf2d356..94eb28009a 100644 --- a/app/src/androidTest/java/org/thoughtcrime/securesms/database/ThreadTableTest_pinned.kt +++ b/app/src/androidTest/java/org/thoughtcrime/securesms/database/ThreadTableTest_pinned.kt @@ -7,13 +7,13 @@ import org.junit.Assert.assertTrue import org.junit.Before import org.junit.Rule import org.junit.Test +import org.signal.core.models.ServiceId.ACI import org.signal.core.util.CursorUtil import org.thoughtcrime.securesms.components.settings.app.chats.folders.ChatFolderRecord import org.thoughtcrime.securesms.conversationlist.model.ConversationFilter import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.testing.SignalDatabaseRule import org.thoughtcrime.securesms.util.RemoteConfig -import org.whispersystems.signalservice.api.push.ServiceId.ACI import java.util.UUID @Suppress("ClassName") diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/database/ThreadTableTest_recents.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/database/ThreadTableTest_recents.kt index d112370fd4..e892121423 100644 --- a/app/src/androidTest/java/org/thoughtcrime/securesms/database/ThreadTableTest_recents.kt +++ b/app/src/androidTest/java/org/thoughtcrime/securesms/database/ThreadTableTest_recents.kt @@ -6,11 +6,11 @@ import org.junit.Before import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith +import org.signal.core.models.ServiceId.ACI import org.signal.core.util.CursorUtil import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.recipients.RecipientId import org.thoughtcrime.securesms.testing.SignalDatabaseRule -import org.whispersystems.signalservice.api.push.ServiceId.ACI import java.util.UUID @Suppress("ClassName") diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/lock/PinHashing_hashPin_Test.java b/app/src/androidTest/java/org/thoughtcrime/securesms/lock/PinHashing_hashPin_Test.java index b63167add4..dcb9e0f565 100644 --- a/app/src/androidTest/java/org/thoughtcrime/securesms/lock/PinHashing_hashPin_Test.java +++ b/app/src/androidTest/java/org/thoughtcrime/securesms/lock/PinHashing_hashPin_Test.java @@ -7,7 +7,7 @@ import org.junit.runner.RunWith; import org.signal.core.util.Hex; import org.signal.libsignal.svr2.PinHash; import org.whispersystems.signalservice.api.kbs.KbsData; -import org.whispersystems.signalservice.api.kbs.MasterKey; +import org.signal.core.models.MasterKey; import org.whispersystems.signalservice.api.kbs.PinHashUtil; import java.io.IOException; diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/messages/protocol/BufferedKyberPreKeyStoreTest.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/messages/protocol/BufferedKyberPreKeyStoreTest.kt index a230d61c10..ed63acd9f1 100644 --- a/app/src/androidTest/java/org/thoughtcrime/securesms/messages/protocol/BufferedKyberPreKeyStoreTest.kt +++ b/app/src/androidTest/java/org/thoughtcrime/securesms/messages/protocol/BufferedKyberPreKeyStoreTest.kt @@ -8,11 +8,11 @@ package org.thoughtcrime.securesms.messages.protocol import org.junit.Before import org.junit.Rule import org.junit.Test +import org.signal.core.models.ServiceId import org.signal.libsignal.protocol.ReusedBaseKeyException import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.testing.SignalDatabaseRule import org.thoughtcrime.securesms.util.KyberPreKeysTestUtil -import org.whispersystems.signalservice.api.push.ServiceId class BufferedKyberPreKeyStoreTest { diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/storage/ContactRecordProcessorTest.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/storage/ContactRecordProcessorTest.kt index c986ef8c55..50e92e5fa4 100644 --- a/app/src/androidTest/java/org/thoughtcrime/securesms/storage/ContactRecordProcessorTest.kt +++ b/app/src/androidTest/java/org/thoughtcrime/securesms/storage/ContactRecordProcessorTest.kt @@ -6,14 +6,14 @@ import org.junit.Assert.assertNotEquals import org.junit.Before import org.junit.Test import org.junit.runner.RunWith +import org.signal.core.models.ServiceId.ACI +import org.signal.core.models.ServiceId.PNI import org.signal.core.util.Base64 import org.signal.core.util.update import org.thoughtcrime.securesms.database.RecipientTable import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.recipients.RecipientId -import org.whispersystems.signalservice.api.push.ServiceId.ACI -import org.whispersystems.signalservice.api.push.ServiceId.PNI import org.whispersystems.signalservice.api.storage.SignalContactRecord import org.whispersystems.signalservice.api.storage.StorageId import org.whispersystems.signalservice.internal.storage.protos.ContactRecord diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/testing/AliceClient.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/testing/AliceClient.kt index b429745306..433816251b 100644 --- a/app/src/androidTest/java/org/thoughtcrime/securesms/testing/AliceClient.kt +++ b/app/src/androidTest/java/org/thoughtcrime/securesms/testing/AliceClient.kt @@ -1,5 +1,6 @@ package org.thoughtcrime.securesms.testing +import org.signal.core.models.ServiceId import org.signal.core.util.logging.Log import org.signal.libsignal.protocol.ecc.ECKeyPair import org.signal.libsignal.zkgroup.profiles.ProfileKey @@ -8,7 +9,6 @@ import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.messages.protocol.BufferedProtocolStore import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.testing.FakeClientHelpers.toEnvelope -import org.whispersystems.signalservice.api.push.ServiceId import org.whispersystems.signalservice.api.push.SignalServiceAddress import org.whispersystems.signalservice.internal.push.Envelope diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/testing/BobClient.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/testing/BobClient.kt index e2a5a2809a..4aa61ba05e 100644 --- a/app/src/androidTest/java/org/thoughtcrime/securesms/testing/BobClient.kt +++ b/app/src/androidTest/java/org/thoughtcrime/securesms/testing/BobClient.kt @@ -1,5 +1,6 @@ package org.thoughtcrime.securesms.testing +import org.signal.core.models.ServiceId import org.signal.core.util.readToSingleInt import org.signal.core.util.select import org.signal.libsignal.protocol.IdentityKey @@ -32,7 +33,6 @@ import org.whispersystems.signalservice.api.crypto.SealedSenderAccess import org.whispersystems.signalservice.api.crypto.SignalServiceCipher import org.whispersystems.signalservice.api.crypto.SignalSessionBuilder import org.whispersystems.signalservice.api.push.DistributionId -import org.whispersystems.signalservice.api.push.ServiceId import org.whispersystems.signalservice.api.push.SignalServiceAddress import org.whispersystems.signalservice.internal.push.Envelope import java.util.UUID diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/testing/FakeClientHelpers.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/testing/FakeClientHelpers.kt index 45bb24cc24..6f71841b82 100644 --- a/app/src/androidTest/java/org/thoughtcrime/securesms/testing/FakeClientHelpers.kt +++ b/app/src/androidTest/java/org/thoughtcrime/securesms/testing/FakeClientHelpers.kt @@ -1,7 +1,9 @@ package org.thoughtcrime.securesms.testing import okio.ByteString.Companion.toByteString +import org.signal.core.models.ServiceId import org.signal.core.util.Base64 +import org.signal.core.util.toByteArray import org.signal.libsignal.metadata.certificate.CertificateValidator import org.signal.libsignal.metadata.certificate.SenderCertificate import org.signal.libsignal.metadata.certificate.ServerCertificate @@ -13,8 +15,6 @@ import org.whispersystems.signalservice.api.crypto.ContentHint import org.whispersystems.signalservice.api.crypto.EnvelopeContent import org.whispersystems.signalservice.api.crypto.SealedSenderAccess import org.whispersystems.signalservice.api.crypto.UnidentifiedAccess -import org.whispersystems.signalservice.api.push.ServiceId -import org.whispersystems.signalservice.api.util.toByteArray import org.whispersystems.signalservice.internal.push.Content import org.whispersystems.signalservice.internal.push.DataMessage import org.whispersystems.signalservice.internal.push.Envelope diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/testing/GroupTestingUtils.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/testing/GroupTestingUtils.kt index cecba043d0..076a5e79e5 100644 --- a/app/src/androidTest/java/org/thoughtcrime/securesms/testing/GroupTestingUtils.kt +++ b/app/src/androidTest/java/org/thoughtcrime/securesms/testing/GroupTestingUtils.kt @@ -1,6 +1,7 @@ package org.thoughtcrime.securesms.testing import okio.ByteString.Companion.toByteString +import org.signal.core.models.ServiceId.ACI import org.signal.libsignal.zkgroup.groups.GroupMasterKey import org.signal.storageservice.protos.groups.Member import org.signal.storageservice.protos.groups.local.DecryptedGroup @@ -9,7 +10,6 @@ import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.groups.GroupId import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.recipients.RecipientId -import org.whispersystems.signalservice.api.push.ServiceId.ACI import org.whispersystems.signalservice.internal.push.GroupContextV2 import kotlin.random.Random diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/testing/MessageContentFuzzer.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/testing/MessageContentFuzzer.kt index 65471e300e..71e007723c 100644 --- a/app/src/androidTest/java/org/thoughtcrime/securesms/testing/MessageContentFuzzer.kt +++ b/app/src/androidTest/java/org/thoughtcrime/securesms/testing/MessageContentFuzzer.kt @@ -3,6 +3,8 @@ package org.thoughtcrime.securesms.testing import okio.ByteString import okio.ByteString.Companion.toByteString import org.signal.core.util.Base64 +import org.signal.core.util.UuidUtil +import org.signal.core.util.toByteArray import org.thoughtcrime.securesms.database.AttachmentTable import org.thoughtcrime.securesms.groups.GroupId import org.thoughtcrime.securesms.messages.SignalServiceProtoUtil.buildWith @@ -10,8 +12,6 @@ import org.thoughtcrime.securesms.messages.TestMessage import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.recipients.RecipientId import org.whispersystems.signalservice.api.crypto.EnvelopeMetadata -import org.whispersystems.signalservice.api.util.UuidUtil -import org.whispersystems.signalservice.api.util.toByteArray import org.whispersystems.signalservice.internal.push.AddressableMessage import org.whispersystems.signalservice.internal.push.AttachmentPointer import org.whispersystems.signalservice.internal.push.BodyRange diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/testing/MockProvider.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/testing/MockProvider.kt index c8dc57a4a0..68e4f31e79 100644 --- a/app/src/androidTest/java/org/thoughtcrime/securesms/testing/MockProvider.kt +++ b/app/src/androidTest/java/org/thoughtcrime/securesms/testing/MockProvider.kt @@ -1,5 +1,6 @@ package org.thoughtcrime.securesms.testing +import org.signal.core.models.ServiceId import org.signal.libsignal.protocol.IdentityKeyPair import org.signal.libsignal.protocol.ecc.ECKeyPair import org.signal.libsignal.protocol.state.PreKeyRecord @@ -8,7 +9,6 @@ import org.signal.libsignal.protocol.util.Medium import org.thoughtcrime.securesms.crypto.PreKeyUtil import org.thoughtcrime.securesms.keyvalue.SignalStore import org.whispersystems.signalservice.api.messages.multidevice.DeviceInfo -import org.whispersystems.signalservice.api.push.ServiceId import org.whispersystems.signalservice.api.push.SignedPreKeyEntity import org.whispersystems.signalservice.internal.push.AuthCredentials import org.whispersystems.signalservice.internal.push.DeviceInfoList diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/testing/SignalActivityRule.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/testing/SignalActivityRule.kt index 8c2588d414..332c0b11a1 100644 --- a/app/src/androidTest/java/org/thoughtcrime/securesms/testing/SignalActivityRule.kt +++ b/app/src/androidTest/java/org/thoughtcrime/securesms/testing/SignalActivityRule.kt @@ -10,6 +10,7 @@ import androidx.test.core.app.ActivityScenario import androidx.test.platform.app.InstrumentationRegistry import kotlinx.coroutines.runBlocking import org.junit.rules.ExternalResource +import org.signal.core.models.ServiceId.ACI import org.signal.libsignal.protocol.IdentityKey import org.signal.libsignal.protocol.IdentityKeyPair import org.signal.libsignal.protocol.SignalProtocolAddress @@ -33,7 +34,6 @@ import org.thoughtcrime.securesms.registration.util.RegistrationUtil import org.thoughtcrime.securesms.testing.GroupTestingUtils.asMember import org.thoughtcrime.securesms.util.Util import org.whispersystems.signalservice.api.profiles.SignalServiceProfile -import org.whispersystems.signalservice.api.push.ServiceId.ACI import org.whispersystems.signalservice.api.push.SignalServiceAddress import java.util.UUID diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/testing/SignalDatabaseRule.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/testing/SignalDatabaseRule.kt index 978c346685..913c0126d3 100644 --- a/app/src/androidTest/java/org/thoughtcrime/securesms/testing/SignalDatabaseRule.kt +++ b/app/src/androidTest/java/org/thoughtcrime/securesms/testing/SignalDatabaseRule.kt @@ -2,12 +2,12 @@ package org.thoughtcrime.securesms.testing import org.junit.rules.TestWatcher import org.junit.runner.Description +import org.signal.core.models.ServiceId.ACI +import org.signal.core.models.ServiceId.PNI import org.signal.core.util.deleteAll import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.database.ThreadTable import org.thoughtcrime.securesms.keyvalue.SignalStore -import org.whispersystems.signalservice.api.push.ServiceId.ACI -import org.whispersystems.signalservice.api.push.ServiceId.PNI import java.util.UUID /** diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/util/KyberPreKeysTestUtil.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/util/KyberPreKeysTestUtil.kt index 803630235a..059e8b92db 100644 --- a/app/src/androidTest/java/org/thoughtcrime/securesms/util/KyberPreKeysTestUtil.kt +++ b/app/src/androidTest/java/org/thoughtcrime/securesms/util/KyberPreKeysTestUtil.kt @@ -6,6 +6,9 @@ package org.thoughtcrime.securesms.util import org.junit.Assert.assertEquals +import org.signal.core.models.ServiceId +import org.signal.core.models.ServiceId.ACI +import org.signal.core.models.ServiceId.PNI import org.signal.core.util.readToSingleObject import org.signal.core.util.requireLongOrNull import org.signal.core.util.select @@ -17,9 +20,6 @@ import org.signal.libsignal.protocol.kem.KEMKeyType import org.signal.libsignal.protocol.state.KyberPreKeyRecord import org.thoughtcrime.securesms.database.KyberPreKeyTable import org.thoughtcrime.securesms.database.SignalDatabase -import org.whispersystems.signalservice.api.push.ServiceId -import org.whispersystems.signalservice.api.push.ServiceId.ACI -import org.whispersystems.signalservice.api.push.ServiceId.PNI import java.security.SecureRandom object KyberPreKeysTestUtil { diff --git a/app/src/main/java/org/thoughtcrime/securesms/BlockUnblockDialog.java b/app/src/main/java/org/thoughtcrime/securesms/BlockUnblockDialog.java index c35064d60f..f524d1d36a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/BlockUnblockDialog.java +++ b/app/src/main/java/org/thoughtcrime/securesms/BlockUnblockDialog.java @@ -12,17 +12,8 @@ import androidx.lifecycle.Lifecycle; import com.google.android.material.dialog.MaterialAlertDialogBuilder; import org.signal.core.util.concurrent.SimpleTask; -import org.signal.storageservice.protos.groups.local.DecryptedPendingMember; import org.thoughtcrime.securesms.database.SignalDatabase; -import org.thoughtcrime.securesms.database.model.GroupRecord; import org.thoughtcrime.securesms.recipients.Recipient; -import org.whispersystems.signalservice.api.groupsv2.DecryptedGroupUtil; -import org.whispersystems.signalservice.api.push.ServiceId; - -import java.util.List; -import java.util.Optional; - -import okio.ByteString; /** * This should be used whenever we want to prompt the user to block/unblock a recipient. diff --git a/app/src/main/java/org/thoughtcrime/securesms/attachments/Attachment.kt b/app/src/main/java/org/thoughtcrime/securesms/attachments/Attachment.kt index 884950d05c..2b86e52265 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/attachments/Attachment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/attachments/Attachment.kt @@ -8,13 +8,13 @@ import android.net.Uri import android.os.Parcel import android.os.Parcelable import androidx.core.os.ParcelCompat +import org.signal.core.util.UuidUtil import org.thoughtcrime.securesms.audio.AudioHash import org.thoughtcrime.securesms.blurhash.BlurHash import org.thoughtcrime.securesms.database.AttachmentTable import org.thoughtcrime.securesms.database.AttachmentTable.TransformProperties import org.thoughtcrime.securesms.stickers.StickerLocator import org.thoughtcrime.securesms.util.ParcelUtil -import org.whispersystems.signalservice.api.util.UuidUtil import java.util.UUID import kotlin.time.Duration.Companion.days import kotlin.time.Duration.Companion.milliseconds diff --git a/app/src/main/java/org/thoughtcrime/securesms/attachments/AttachmentExtensions.kt b/app/src/main/java/org/thoughtcrime/securesms/attachments/AttachmentExtensions.kt index c3b1ade837..a0590588eb 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/attachments/AttachmentExtensions.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/attachments/AttachmentExtensions.kt @@ -9,10 +9,10 @@ import android.content.Context import android.text.TextUtils import okio.ByteString.Companion.toByteString import org.signal.core.util.Base64 +import org.signal.core.util.toByteArray import org.thoughtcrime.securesms.util.MediaUtil import org.thoughtcrime.securesms.util.Util import org.whispersystems.signalservice.api.messages.SignalServiceAttachmentRemoteId -import org.whispersystems.signalservice.api.util.toByteArray import org.whispersystems.signalservice.internal.push.AttachmentPointer import java.io.IOException diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ArchiveValidator.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ArchiveValidator.kt index 18e80096ea..ade583d6d8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ArchiveValidator.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ArchiveValidator.kt @@ -5,6 +5,7 @@ package org.thoughtcrime.securesms.backup.v2 +import org.signal.core.models.backup.MessageBackupKey import org.signal.core.util.isNotNullOrBlank import org.signal.libsignal.messagebackup.BackupForwardSecrecyToken import org.signal.libsignal.messagebackup.MessageBackup @@ -15,7 +16,6 @@ import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.recipients.RecipientId import org.thoughtcrime.securesms.util.isStory import org.thoughtcrime.securesms.util.isStoryReaction -import org.whispersystems.signalservice.api.backup.MessageBackupKey import java.io.File import java.io.IOException import org.signal.libsignal.messagebackup.BackupKey as LibSignalBackupKey diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/BackupRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/BackupRepository.kt index 50de29da7e..77fcb0a555 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/BackupRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/BackupRepository.kt @@ -18,6 +18,12 @@ import kotlinx.coroutines.withContext import okio.ByteString import okio.ByteString.Companion.toByteString import org.greenrobot.eventbus.EventBus +import org.signal.core.models.AccountEntropyPool +import org.signal.core.models.ServiceId.ACI +import org.signal.core.models.ServiceId.PNI +import org.signal.core.models.backup.MediaName +import org.signal.core.models.backup.MediaRootBackupKey +import org.signal.core.models.backup.MessageBackupKey import org.signal.core.util.Base64 import org.signal.core.util.Base64.decodeBase64OrThrow import org.signal.core.util.CursorUtil @@ -136,7 +142,6 @@ import org.thoughtcrime.securesms.util.RemoteConfig import org.thoughtcrime.securesms.util.ServiceUtil import org.thoughtcrime.securesms.util.TextSecurePreferences import org.thoughtcrime.securesms.util.toMillis -import org.whispersystems.signalservice.api.AccountEntropyPool import org.whispersystems.signalservice.api.ApplicationErrorAction import org.whispersystems.signalservice.api.NetworkResult import org.whispersystems.signalservice.api.StatusCodeErrorAction @@ -149,15 +154,10 @@ import org.whispersystems.signalservice.api.archive.ArchiveServiceAccessPair import org.whispersystems.signalservice.api.archive.ArchiveServiceCredential import org.whispersystems.signalservice.api.archive.DeleteArchivedMediaRequest import org.whispersystems.signalservice.api.archive.GetArchiveCdnCredentialsResponse -import org.whispersystems.signalservice.api.backup.MediaName -import org.whispersystems.signalservice.api.backup.MediaRootBackupKey -import org.whispersystems.signalservice.api.backup.MessageBackupKey import org.whispersystems.signalservice.api.crypto.AttachmentCipherStreamUtil import org.whispersystems.signalservice.api.link.TransferArchiveResponse import org.whispersystems.signalservice.api.messages.AttachmentTransferProgress import org.whispersystems.signalservice.api.messages.SignalServiceAttachment.ProgressListener -import org.whispersystems.signalservice.api.push.ServiceId.ACI -import org.whispersystems.signalservice.api.push.ServiceId.PNI import org.whispersystems.signalservice.api.push.exceptions.NonSuccessfulResponseCodeException import org.whispersystems.signalservice.api.svr.SvrBApi import org.whispersystems.signalservice.internal.crypto.PaddingInputStream diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/DatabaseAttachmentArchiveUtil.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/DatabaseAttachmentArchiveUtil.kt index 89a693b280..a4488eee1f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/DatabaseAttachmentArchiveUtil.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/DatabaseAttachmentArchiveUtil.kt @@ -6,6 +6,7 @@ package org.thoughtcrime.securesms.backup.v2 import android.text.TextUtils +import org.signal.core.models.backup.MediaName import org.signal.core.util.Base64 import org.signal.core.util.Base64.decodeBase64 import org.signal.core.util.Base64.decodeBase64OrThrow @@ -15,7 +16,6 @@ import org.thoughtcrime.securesms.database.AttachmentTable import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.util.RemoteConfig import org.thoughtcrime.securesms.util.Util -import org.whispersystems.signalservice.api.backup.MediaName import org.whispersystems.signalservice.api.messages.SignalServiceAttachmentPointer import org.whispersystems.signalservice.api.messages.SignalServiceAttachmentRemoteId import java.io.IOException diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/database/RecipientTableArchiveExtensions.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/database/RecipientTableArchiveExtensions.kt index 10a6206802..653acdb747 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/database/RecipientTableArchiveExtensions.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/database/RecipientTableArchiveExtensions.kt @@ -6,6 +6,7 @@ package org.thoughtcrime.securesms.backup.v2.database import android.content.ContentValues +import org.signal.core.models.ServiceId import org.signal.core.util.Base64 import org.signal.core.util.logging.Log import org.signal.core.util.nullIfBlank @@ -22,7 +23,6 @@ import org.thoughtcrime.securesms.database.model.databaseprotos.RecipientExtras import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.profiles.ProfileName import org.thoughtcrime.securesms.recipients.RecipientId -import org.whispersystems.signalservice.api.push.ServiceId /** * Fetches all individual contacts for backups and returns the result as an iterator. diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/exporters/ChatItemArchiveExporter.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/exporters/ChatItemArchiveExporter.kt index ecb72b89fa..bc8863c750 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/exporters/ChatItemArchiveExporter.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/exporters/ChatItemArchiveExporter.kt @@ -14,6 +14,7 @@ import org.signal.core.util.EventTimer import org.signal.core.util.Hex import org.signal.core.util.ParallelEventTimer import org.signal.core.util.StringUtil +import org.signal.core.util.UuidUtil import org.signal.core.util.bytes import org.signal.core.util.concurrent.SignalExecutors import org.signal.core.util.emptyIfNull @@ -31,6 +32,7 @@ import org.signal.core.util.requireInt import org.signal.core.util.requireLong import org.signal.core.util.requireLongOrNull import org.signal.core.util.requireString +import org.signal.core.util.toByteArray import org.thoughtcrime.securesms.attachments.AttachmentId import org.thoughtcrime.securesms.attachments.DatabaseAttachment import org.thoughtcrime.securesms.backup.v2.ExportOddities @@ -101,8 +103,6 @@ import org.thoughtcrime.securesms.recipients.RecipientId import org.thoughtcrime.securesms.util.JsonUtils import org.thoughtcrime.securesms.util.MediaUtil import org.thoughtcrime.securesms.util.mb -import org.whispersystems.signalservice.api.util.UuidUtil -import org.whispersystems.signalservice.api.util.toByteArray import java.io.Closeable import java.io.IOException import java.util.LinkedList diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/exporters/ContactArchiveExporter.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/exporters/ContactArchiveExporter.kt index 5c3d33cf4e..419671b7bc 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/exporters/ContactArchiveExporter.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/exporters/ContactArchiveExporter.kt @@ -7,6 +7,7 @@ package org.thoughtcrime.securesms.backup.v2.exporters import android.database.Cursor import okio.ByteString.Companion.toByteString +import org.signal.core.models.ServiceId import org.signal.core.util.Base64 import org.signal.core.util.logging.Log import org.signal.core.util.optionalInt @@ -14,6 +15,7 @@ import org.signal.core.util.requireBoolean import org.signal.core.util.requireInt import org.signal.core.util.requireLong import org.signal.core.util.requireString +import org.signal.core.util.toByteArray import org.thoughtcrime.securesms.backup.v2.ArchiveRecipient import org.thoughtcrime.securesms.backup.v2.proto.Contact import org.thoughtcrime.securesms.backup.v2.proto.Self @@ -25,8 +27,6 @@ import org.thoughtcrime.securesms.database.IdentityTable import org.thoughtcrime.securesms.database.RecipientTable import org.thoughtcrime.securesms.database.RecipientTableCursorUtil import org.thoughtcrime.securesms.recipients.Recipient -import org.whispersystems.signalservice.api.push.ServiceId -import org.whispersystems.signalservice.api.util.toByteArray import java.io.Closeable /** diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/exporters/DistributionListArchiveExporter.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/exporters/DistributionListArchiveExporter.kt index 94098e59a0..e9236be5cd 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/exporters/DistributionListArchiveExporter.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/exporters/DistributionListArchiveExporter.kt @@ -12,6 +12,7 @@ import org.signal.core.util.requireBoolean import org.signal.core.util.requireLong import org.signal.core.util.requireNonNullString import org.signal.core.util.requireObject +import org.signal.core.util.toByteArray import org.thoughtcrime.securesms.backup.v2.ArchiveRecipient import org.thoughtcrime.securesms.backup.v2.ExportOddities import org.thoughtcrime.securesms.backup.v2.ExportState @@ -25,7 +26,6 @@ import org.thoughtcrime.securesms.database.model.DistributionListPrivacyMode import org.thoughtcrime.securesms.database.model.DistributionListRecord import org.thoughtcrime.securesms.recipients.RecipientId import org.whispersystems.signalservice.api.push.DistributionId -import org.whispersystems.signalservice.api.util.toByteArray import java.io.Closeable private val TAG = Log.tag(DistributionListArchiveExporter::class) diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/exporters/GroupArchiveExporter.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/exporters/GroupArchiveExporter.kt index 08095eaa5b..588d0a0c5a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/exporters/GroupArchiveExporter.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/exporters/GroupArchiveExporter.kt @@ -7,6 +7,7 @@ package org.thoughtcrime.securesms.backup.v2.exporters import android.database.Cursor import okio.ByteString.Companion.toByteString +import org.signal.core.models.ServiceId import org.signal.core.util.requireBlob import org.signal.core.util.requireBoolean import org.signal.core.util.requireInt @@ -29,7 +30,6 @@ import org.thoughtcrime.securesms.conversation.colors.AvatarColor import org.thoughtcrime.securesms.database.GroupTable import org.thoughtcrime.securesms.database.RecipientTable import org.thoughtcrime.securesms.database.RecipientTableCursorUtil -import org.whispersystems.signalservice.api.push.ServiceId import java.io.Closeable /** diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/importer/ChatItemArchiveImporter.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/importer/ChatItemArchiveImporter.kt index bb0578b0ad..14a51c0300 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/importer/ChatItemArchiveImporter.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/importer/ChatItemArchiveImporter.kt @@ -7,9 +7,11 @@ package org.thoughtcrime.securesms.backup.v2.importer import android.content.ContentValues import androidx.core.content.contentValuesOf +import org.signal.core.models.ServiceId import org.signal.core.util.Base64 import org.signal.core.util.Hex import org.signal.core.util.SqlUtil +import org.signal.core.util.UuidUtil import org.signal.core.util.asList import org.signal.core.util.forEach import org.signal.core.util.logging.Log @@ -81,8 +83,6 @@ import org.thoughtcrime.securesms.util.Environment import org.thoughtcrime.securesms.util.JsonUtils import org.thoughtcrime.securesms.util.MessageUtil import org.whispersystems.signalservice.api.payments.Money -import org.whispersystems.signalservice.api.push.ServiceId -import org.whispersystems.signalservice.api.util.UuidUtil import org.whispersystems.signalservice.internal.push.DataMessage import java.math.BigInteger import java.sql.SQLException diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/importer/ContactArchiveImporter.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/importer/ContactArchiveImporter.kt index 21783a2f87..fef76f24c1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/importer/ContactArchiveImporter.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/importer/ContactArchiveImporter.kt @@ -6,6 +6,8 @@ package org.thoughtcrime.securesms.backup.v2.importer import androidx.core.content.contentValuesOf +import org.signal.core.models.ServiceId.ACI +import org.signal.core.models.ServiceId.PNI import org.signal.core.util.Base64 import org.signal.core.util.insertInto import org.signal.core.util.logging.Log @@ -23,8 +25,6 @@ import org.thoughtcrime.securesms.profiles.ProfileName import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.recipients.RecipientId import org.thoughtcrime.securesms.util.SignalE164Util -import org.whispersystems.signalservice.api.push.ServiceId.ACI -import org.whispersystems.signalservice.api.push.ServiceId.PNI /** * Handles the importing of [Contact] models into the local database. diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/importer/DistributionListArchiveImporter.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/importer/DistributionListArchiveImporter.kt index 8efcb8fb90..8c8007d028 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/importer/DistributionListArchiveImporter.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/importer/DistributionListArchiveImporter.kt @@ -5,6 +5,7 @@ package org.thoughtcrime.securesms.backup.v2.importer +import org.signal.core.util.UuidUtil import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.backup.v2.ImportState import org.thoughtcrime.securesms.backup.v2.proto.DistributionList @@ -13,7 +14,6 @@ import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.database.model.DistributionListPrivacyMode import org.thoughtcrime.securesms.recipients.RecipientId import org.whispersystems.signalservice.api.push.DistributionId -import org.whispersystems.signalservice.api.util.UuidUtil /** * Handles the importing of [DistributionListItem] models into the local database. diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/importer/GroupArchiveImporter.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/importer/GroupArchiveImporter.kt index 8ec3e95867..b8fc120023 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/importer/GroupArchiveImporter.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/importer/GroupArchiveImporter.kt @@ -6,6 +6,7 @@ package org.thoughtcrime.securesms.backup.v2.importer import android.content.ContentValues +import org.signal.core.models.ServiceId import org.signal.core.util.Base64 import org.signal.core.util.toInt import org.signal.libsignal.zkgroup.groups.GroupMasterKey @@ -34,7 +35,6 @@ import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.recipients.RecipientId import org.thoughtcrime.securesms.storage.StorageSyncHelper import org.whispersystems.signalservice.api.groupsv2.GroupsV2Operations -import org.whispersystems.signalservice.api.push.ServiceId /** * Handles the importing of [ArchiveGroup] models into the local database. diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/local/ArchiveFileSystem.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/local/ArchiveFileSystem.kt index 515a1e27f0..ab2fdfc5c8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/local/ArchiveFileSystem.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/local/ArchiveFileSystem.kt @@ -8,6 +8,7 @@ package org.thoughtcrime.securesms.backup.v2.local import android.content.Context import android.net.Uri import androidx.documentfile.provider.DocumentFile +import org.signal.core.models.backup.MediaName import org.signal.core.util.androidx.DocumentFileInfo import org.signal.core.util.androidx.DocumentFileUtil.delete import org.signal.core.util.androidx.DocumentFileUtil.hasFile @@ -18,7 +19,6 @@ import org.signal.core.util.androidx.DocumentFileUtil.newFile import org.signal.core.util.androidx.DocumentFileUtil.outputStream import org.signal.core.util.androidx.DocumentFileUtil.renameTo import org.signal.core.util.logging.Log -import org.whispersystems.signalservice.api.backup.MediaName import java.io.File import java.io.IOException import java.io.InputStream diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/local/LocalArchiver.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/local/LocalArchiver.kt index 35b257783b..9677641ad7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/local/LocalArchiver.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/local/LocalArchiver.kt @@ -6,6 +6,7 @@ package org.thoughtcrime.securesms.backup.v2.local import org.greenrobot.eventbus.EventBus +import org.signal.core.models.backup.MediaName import org.signal.core.util.Base64 import org.signal.core.util.Stopwatch import org.signal.core.util.StreamUtil @@ -15,7 +16,6 @@ import org.thoughtcrime.securesms.backup.v2.LocalBackupV2Event import org.thoughtcrime.securesms.backup.v2.local.proto.FilesFrame import org.thoughtcrime.securesms.backup.v2.local.proto.Metadata import org.thoughtcrime.securesms.database.AttachmentTable -import org.whispersystems.signalservice.api.backup.MediaName import org.whispersystems.signalservice.api.crypto.AttachmentCipherOutputStream import org.whispersystems.signalservice.api.crypto.AttachmentCipherStreamUtil import org.whispersystems.signalservice.internal.crypto.PaddingInputStream diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/processor/AccountDataArchiveProcessor.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/processor/AccountDataArchiveProcessor.kt index b6ce31238e..3124820934 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/processor/AccountDataArchiveProcessor.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/processor/AccountDataArchiveProcessor.kt @@ -8,8 +8,10 @@ package org.thoughtcrime.securesms.backup.v2.processor import android.content.Context import okio.ByteString.Companion.EMPTY import okio.ByteString.Companion.toByteString +import org.signal.core.util.UuidUtil import org.signal.core.util.isNotNullOrBlank import org.signal.core.util.logging.Log +import org.signal.core.util.toByteArray import org.signal.libsignal.zkgroup.backups.BackupLevel import org.thoughtcrime.securesms.attachments.AttachmentId import org.thoughtcrime.securesms.backup.v2.ExportState @@ -49,8 +51,6 @@ import org.whispersystems.signalservice.api.push.UsernameLinkComponents import org.whispersystems.signalservice.api.storage.IAPSubscriptionId.AppleIAPOriginalTransactionId import org.whispersystems.signalservice.api.storage.IAPSubscriptionId.GooglePlayBillingPurchaseToken import org.whispersystems.signalservice.api.subscriptions.SubscriberId -import org.whispersystems.signalservice.api.util.UuidUtil -import org.whispersystems.signalservice.api.util.toByteArray import java.util.Currency import kotlin.time.Duration.Companion.minutes import kotlin.time.Duration.Companion.seconds diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/processor/ChatFolderArchiveProcessor.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/processor/ChatFolderArchiveProcessor.kt index 9250f65bb7..09565298c6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/processor/ChatFolderArchiveProcessor.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/processor/ChatFolderArchiveProcessor.kt @@ -9,6 +9,7 @@ import androidx.core.content.contentValuesOf import okio.ByteString.Companion.toByteString import org.signal.core.util.Base64 import org.signal.core.util.SqlUtil +import org.signal.core.util.UuidUtil import org.signal.core.util.insertInto import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.backup.v2.ExportState @@ -23,7 +24,6 @@ import org.thoughtcrime.securesms.database.ChatFolderTables.ChatFolderTable import org.thoughtcrime.securesms.database.ChatFolderTables.MembershipType import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.storage.StorageSyncHelper -import org.whispersystems.signalservice.api.util.UuidUtil import org.thoughtcrime.securesms.backup.v2.proto.ChatFolder as ChatFolderProto /** diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/processor/NotificationProfileArchiveProcessor.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/processor/NotificationProfileArchiveProcessor.kt index cdde6fefbb..73aca100bd 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/processor/NotificationProfileArchiveProcessor.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/processor/NotificationProfileArchiveProcessor.kt @@ -7,6 +7,7 @@ package org.thoughtcrime.securesms.backup.v2.processor import okio.ByteString.Companion.toByteString import org.signal.core.util.Base64 +import org.signal.core.util.UuidUtil import org.signal.core.util.insertInto import org.signal.core.util.logging.Log import org.signal.core.util.toInt @@ -24,7 +25,6 @@ import org.thoughtcrime.securesms.database.serialize import org.thoughtcrime.securesms.notifications.profiles.NotificationProfile import org.thoughtcrime.securesms.recipients.RecipientId import org.thoughtcrime.securesms.storage.StorageSyncHelper -import org.whispersystems.signalservice.api.util.UuidUtil import java.time.DayOfWeek import org.thoughtcrime.securesms.backup.v2.proto.NotificationProfile as NotificationProfileProto diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/processor/RecipientArchiveProcessor.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/processor/RecipientArchiveProcessor.kt index ea21488b2a..f85838b789 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/processor/RecipientArchiveProcessor.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/processor/RecipientArchiveProcessor.kt @@ -5,6 +5,7 @@ package org.thoughtcrime.securesms.backup.v2.processor +import org.signal.core.models.ServiceId import org.signal.core.util.logging.Log import org.signal.core.util.update import org.thoughtcrime.securesms.backup.v2.ArchiveRecipient @@ -30,7 +31,6 @@ import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.recipients.RecipientId -import org.whispersystems.signalservice.api.push.ServiceId /** * Handles importing/exporting [ArchiveRecipient] frames for an archive. diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/stream/EncryptedBackupReader.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/stream/EncryptedBackupReader.kt index 2caa01b60b..e531f33603 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/stream/EncryptedBackupReader.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/stream/EncryptedBackupReader.kt @@ -7,6 +7,8 @@ package org.thoughtcrime.securesms.backup.v2.stream import androidx.annotation.VisibleForTesting import com.google.common.io.CountingInputStream +import org.signal.core.models.ServiceId.ACI +import org.signal.core.models.backup.MessageBackupKey import org.signal.core.util.readFully import org.signal.core.util.readNBytesOrThrow import org.signal.core.util.readVarInt32 @@ -16,8 +18,6 @@ import org.signal.core.util.writeVarInt32 import org.signal.libsignal.messagebackup.BackupForwardSecrecyToken import org.thoughtcrime.securesms.backup.v2.proto.BackupInfo import org.thoughtcrime.securesms.backup.v2.proto.Frame -import org.whispersystems.signalservice.api.backup.MessageBackupKey -import org.whispersystems.signalservice.api.push.ServiceId.ACI import java.io.ByteArrayOutputStream import java.io.EOFException import java.io.IOException diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/stream/EncryptedBackupWriter.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/stream/EncryptedBackupWriter.kt index 81a3ceb3a6..3daf22fb0b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/stream/EncryptedBackupWriter.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/stream/EncryptedBackupWriter.kt @@ -5,6 +5,8 @@ package org.thoughtcrime.securesms.backup.v2.stream +import org.signal.core.models.ServiceId.ACI +import org.signal.core.models.backup.MessageBackupKey import org.signal.core.util.stream.MacOutputStream import org.signal.core.util.writeVarInt32 import org.signal.libsignal.messagebackup.BackupForwardSecrecyToken @@ -12,8 +14,6 @@ import org.thoughtcrime.securesms.backup.v2.proto.BackupInfo import org.thoughtcrime.securesms.backup.v2.proto.Frame import org.thoughtcrime.securesms.backup.v2.stream.EncryptedBackupReader.Companion.createForSignalBackup import org.thoughtcrime.securesms.util.Util -import org.whispersystems.signalservice.api.backup.MessageBackupKey -import org.whispersystems.signalservice.api.push.ServiceId.ACI import java.io.IOException import java.io.OutputStream import javax.crypto.Cipher diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/subscription/EnterKeyScreen.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/subscription/EnterKeyScreen.kt index 87d96a416b..d0634e7d54 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/subscription/EnterKeyScreen.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/subscription/EnterKeyScreen.kt @@ -39,6 +39,7 @@ import androidx.compose.ui.text.input.KeyboardCapitalization import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp +import org.signal.core.models.AccountEntropyPool import org.signal.core.ui.compose.Buttons import org.signal.core.ui.compose.horizontalGutters import org.thoughtcrime.securesms.R @@ -46,7 +47,6 @@ import org.thoughtcrime.securesms.fonts.MonoTypeface import org.thoughtcrime.securesms.registration.ui.restore.BackupKeyVisualTransformation import org.thoughtcrime.securesms.registration.ui.restore.attachBackupKeyAutoFillHelper import org.thoughtcrime.securesms.registration.ui.restore.backupKeyAutoFillHelper -import org.whispersystems.signalservice.api.AccountEntropyPool /** * Screen to enter backup key with an option to view the backup key again diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/subscription/MessageBackupsFlowState.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/subscription/MessageBackupsFlowState.kt index d2f969dfb8..dcbabc7e38 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/subscription/MessageBackupsFlowState.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/subscription/MessageBackupsFlowState.kt @@ -6,12 +6,12 @@ package org.thoughtcrime.securesms.backup.v2.ui.subscription import androidx.compose.runtime.Immutable +import org.signal.core.models.AccountEntropyPool import org.signal.core.util.billing.BillingResponseCode import org.thoughtcrime.securesms.backup.v2.MessageBackupTier import org.thoughtcrime.securesms.components.settings.app.backups.remote.BackupKeySaveState import org.thoughtcrime.securesms.database.InAppPaymentTable import org.thoughtcrime.securesms.keyvalue.SignalStore -import org.whispersystems.signalservice.api.AccountEntropyPool @Immutable data class MessageBackupsFlowState( diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/util/ArchiveConverterExtensions.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/util/ArchiveConverterExtensions.kt index b7440cc837..ffe267b557 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/util/ArchiveConverterExtensions.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/util/ArchiveConverterExtensions.kt @@ -8,6 +8,7 @@ package org.thoughtcrime.securesms.backup.v2.util import okio.ByteString import okio.ByteString.Companion.toByteString import org.signal.core.util.Base64 +import org.signal.core.util.UuidUtil import org.signal.core.util.isNotNullOrBlank import org.signal.core.util.nullIfBlank import org.signal.core.util.orNull @@ -27,7 +28,6 @@ import org.thoughtcrime.securesms.database.AttachmentTable import org.thoughtcrime.securesms.stickers.StickerLocator import org.whispersystems.signalservice.api.messages.SignalServiceAttachmentPointer import org.whispersystems.signalservice.api.messages.SignalServiceAttachmentRemoteId -import org.whispersystems.signalservice.api.util.UuidUtil import java.util.Optional import org.thoughtcrime.securesms.backup.v2.proto.AvatarColor as RemoteAvatarColor diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/util/FrameExtensions.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/util/FrameExtensions.kt index 942b8fb814..7d2c7ab0fd 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/util/FrameExtensions.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/util/FrameExtensions.kt @@ -6,13 +6,13 @@ package org.thoughtcrime.securesms.backup.v2.util import okio.ByteString +import org.signal.core.models.backup.MediaName import org.thoughtcrime.securesms.attachments.Cdn import org.thoughtcrime.securesms.backup.v2.proto.AccountData import org.thoughtcrime.securesms.backup.v2.proto.Chat import org.thoughtcrime.securesms.backup.v2.proto.ChatItem import org.thoughtcrime.securesms.backup.v2.proto.FilePointer import org.thoughtcrime.securesms.backup.v2.proto.Frame -import org.whispersystems.signalservice.api.backup.MediaName fun Frame.getAllReferencedArchiveAttachmentInfos(): Set { val infos: MutableSet = mutableSetOf() diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/backups/remote/BackupKeyDisplayViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/backups/remote/BackupKeyDisplayViewModel.kt index 41267305ee..71a6954602 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/backups/remote/BackupKeyDisplayViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/backups/remote/BackupKeyDisplayViewModel.kt @@ -13,6 +13,7 @@ import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch import kotlinx.coroutines.withContext +import org.signal.core.models.AccountEntropyPool import org.signal.core.util.concurrent.SignalDispatchers import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.backup.v2.BackupRepository @@ -20,7 +21,6 @@ import org.thoughtcrime.securesms.backup.v2.StagedBackupKeyRotations import org.thoughtcrime.securesms.dependencies.AppDependencies import org.thoughtcrime.securesms.jobs.RestoreOptimizedMediaJob import org.thoughtcrime.securesms.keyvalue.SignalStore -import org.whispersystems.signalservice.api.AccountEntropyPool import org.whispersystems.signalservice.api.NetworkResult class BackupKeyDisplayViewModel : ViewModel(), BackupKeyCredentialManagerHandler { diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/changenumber/ChangeNumberRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/changenumber/ChangeNumberRepository.kt index 3d4e74cb88..d6efb24309 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/changenumber/ChangeNumberRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/changenumber/ChangeNumberRepository.kt @@ -11,6 +11,8 @@ import kotlinx.coroutines.suspendCancellableCoroutine import kotlinx.coroutines.withContext import kotlinx.coroutines.withTimeoutOrNull import okio.ByteString.Companion.toByteString +import org.signal.core.models.MasterKey +import org.signal.core.models.ServiceId import org.signal.core.util.logging.Log import org.signal.libsignal.protocol.IdentityKeyPair import org.signal.libsignal.protocol.SignalProtocolAddress @@ -40,8 +42,6 @@ import org.whispersystems.signalservice.api.SignalServiceMessageSender import org.whispersystems.signalservice.api.SvrNoDataException import org.whispersystems.signalservice.api.account.ChangePhoneNumberRequest import org.whispersystems.signalservice.api.account.PreKeyUpload -import org.whispersystems.signalservice.api.kbs.MasterKey -import org.whispersystems.signalservice.api.push.ServiceId import org.whispersystems.signalservice.api.push.ServiceIdType import org.whispersystems.signalservice.api.push.SignalServiceAddress import org.whispersystems.signalservice.api.push.SignedPreKeyEntity diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/changenumber/ChangeNumberViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/changenumber/ChangeNumberViewModel.kt index f219ca3bec..44cbb0c9c0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/changenumber/ChangeNumberViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/changenumber/ChangeNumberViewModel.kt @@ -18,6 +18,7 @@ import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch import kotlinx.coroutines.withContext +import org.signal.core.models.ServiceId import org.signal.core.util.concurrent.SignalExecutors import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.dependencies.AppDependencies @@ -34,7 +35,6 @@ import org.thoughtcrime.securesms.registration.ui.countrycode.Country import org.thoughtcrime.securesms.registration.viewmodel.NumberViewState import org.thoughtcrime.securesms.registration.viewmodel.SvrAuthCredentialSet import org.thoughtcrime.securesms.util.dualsim.MccMncProducer -import org.whispersystems.signalservice.api.push.ServiceId import java.io.IOException /** diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/chats/folders/ChatFolderId.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/chats/folders/ChatFolderId.kt index e78de89270..a6f565f2e9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/chats/folders/ChatFolderId.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/chats/folders/ChatFolderId.kt @@ -2,7 +2,7 @@ package org.thoughtcrime.securesms.components.settings.app.chats.folders import android.os.Parcelable import kotlinx.parcelize.Parcelize -import org.whispersystems.signalservice.api.util.UuidUtil +import org.signal.core.util.UuidUtil import java.util.UUID /** diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/backup/InternalBackupPlaygroundViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/backup/InternalBackupPlaygroundViewModel.kt index 9453072ad7..14187b9724 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/backup/InternalBackupPlaygroundViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/backup/InternalBackupPlaygroundViewModel.kt @@ -23,6 +23,8 @@ import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch import kotlinx.coroutines.withContext +import org.signal.core.models.ServiceId.ACI +import org.signal.core.models.backup.MessageBackupKey import org.signal.core.util.Hex import org.signal.core.util.ThreadUtil import org.signal.core.util.bytes @@ -59,8 +61,6 @@ import org.thoughtcrime.securesms.net.SignalNetwork import org.thoughtcrime.securesms.providers.BlobProvider import org.thoughtcrime.securesms.recipients.Recipient import org.whispersystems.signalservice.api.NetworkResult -import org.whispersystems.signalservice.api.backup.MessageBackupKey -import org.whispersystems.signalservice.api.push.ServiceId.ACI import org.whispersystems.signalservice.api.svr.SvrBApi import java.io.FileOutputStream import java.io.IOException diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/storage/InternalStorageServicePlaygroundFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/storage/InternalStorageServicePlaygroundFragment.kt index 84a13a5310..e047a93035 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/storage/InternalStorageServicePlaygroundFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/storage/InternalStorageServicePlaygroundFragment.kt @@ -39,6 +39,7 @@ import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import androidx.fragment.app.viewModels import androidx.navigation.fragment.findNavController +import org.signal.core.models.MasterKey import org.signal.core.ui.compose.Buttons import org.signal.core.ui.compose.DayNightPreviews import org.signal.core.ui.compose.Dividers @@ -55,7 +56,6 @@ import org.thoughtcrime.securesms.jobs.StorageForcePushJob import org.thoughtcrime.securesms.jobs.StorageSyncJob import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.util.Util -import org.whispersystems.signalservice.api.kbs.MasterKey import org.whispersystems.signalservice.api.storage.RecordIkm import org.whispersystems.signalservice.api.storage.SignalStorageManifest import org.whispersystems.signalservice.api.storage.SignalStorageRecord diff --git a/app/src/main/java/org/thoughtcrime/securesms/contacts/sync/ContactDiscovery.kt b/app/src/main/java/org/thoughtcrime/securesms/contacts/sync/ContactDiscovery.kt index f4f1a7fb58..27322fc3f2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/contacts/sync/ContactDiscovery.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/contacts/sync/ContactDiscovery.kt @@ -7,8 +7,10 @@ import androidx.annotation.WorkerThread import org.signal.contacts.SystemContactsRepository import org.signal.contacts.SystemContactsRepository.ContactIterator import org.signal.contacts.SystemContactsRepository.ContactPhoneDetails +import org.signal.core.models.ServiceId import org.signal.core.util.Stopwatch import org.signal.core.util.StringUtil +import org.signal.core.util.UuidUtil import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.database.RecipientTable import org.thoughtcrime.securesms.database.SignalDatabase @@ -27,9 +29,7 @@ import org.thoughtcrime.securesms.storage.StorageSyncHelper import org.thoughtcrime.securesms.util.SignalE164Util import org.thoughtcrime.securesms.util.TextSecurePreferences import org.thoughtcrime.securesms.util.Util -import org.whispersystems.signalservice.api.push.ServiceId import org.whispersystems.signalservice.api.push.SignalServiceAddress -import org.whispersystems.signalservice.api.util.UuidUtil import java.io.IOException import java.util.Calendar diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationData.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationData.kt index 3831b73116..fb3419f9ed 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationData.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationData.kt @@ -1,7 +1,7 @@ package org.thoughtcrime.securesms.conversation +import org.signal.core.models.ServiceId import org.thoughtcrime.securesms.recipients.Recipient -import org.whispersystems.signalservice.api.push.ServiceId /** * Represents metadata about a conversation. diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationRepository.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationRepository.java index f62ecf64bd..3b22835619 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationRepository.java @@ -21,7 +21,7 @@ import org.thoughtcrime.securesms.mms.TextSlide; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientUtil; import org.thoughtcrime.securesms.util.MessageRecordUtil; -import org.whispersystems.signalservice.api.push.ServiceId; +import org.signal.core.models.ServiceId; import java.io.IOException; import java.io.InputStream; diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationUpdateItem.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationUpdateItem.java index 01e3930156..5db58dd3fa 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationUpdateItem.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationUpdateItem.java @@ -59,7 +59,7 @@ import org.thoughtcrime.securesms.util.Util; import org.thoughtcrime.securesms.util.ViewUtil; import org.thoughtcrime.securesms.util.livedata.LiveDataUtil; import org.thoughtcrime.securesms.verify.VerifyIdentityActivity; -import org.whispersystems.signalservice.api.push.ServiceId; +import org.signal.core.models.ServiceId; import java.util.Collection; import java.util.Locale; diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/colors/AvatarColorHash.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/colors/AvatarColorHash.kt index dec8a689ba..6e1e93ccab 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/colors/AvatarColorHash.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/colors/AvatarColorHash.kt @@ -5,9 +5,9 @@ package org.thoughtcrime.securesms.conversation.colors +import org.signal.core.models.ServiceId import org.signal.core.util.CryptoUtil import org.thoughtcrime.securesms.groups.GroupId -import org.whispersystems.signalservice.api.push.ServiceId /** * Stolen from iOS. Utilizes a simple hash to map different characteristics to an avatar color index. diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/colors/Colorizer.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/colors/Colorizer.kt index cc32dfeac7..a09f4c829f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/colors/Colorizer.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/colors/Colorizer.kt @@ -3,10 +3,10 @@ package org.thoughtcrime.securesms.conversation.colors import android.content.Context import androidx.annotation.ColorInt import androidx.core.content.ContextCompat +import org.signal.core.models.ServiceId import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.recipients.RecipientId -import org.whispersystems.signalservice.api.push.ServiceId /** * Helper class for all things ChatColors. diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationViewModel.kt index 5c8f444e57..fe26e8c543 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationViewModel.kt @@ -42,6 +42,7 @@ import kotlinx.coroutines.flow.mapNotNull import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch import kotlinx.coroutines.rx3.asFlow +import org.signal.core.models.ServiceId import org.signal.core.util.logging.Log import org.signal.core.util.orNull import org.signal.paging.ProxyPagingController @@ -98,7 +99,6 @@ import org.thoughtcrime.securesms.util.TextSecurePreferences import org.thoughtcrime.securesms.util.hasGiftBadge import org.thoughtcrime.securesms.util.rx.RxStore import org.thoughtcrime.securesms.wallpaper.ChatWallpaper -import org.whispersystems.signalservice.api.push.ServiceId import java.util.concurrent.TimeUnit import kotlin.time.Duration diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher.kt index 7009b59494..df819b4b2c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher.kt @@ -6,6 +6,7 @@ package org.thoughtcrime.securesms.conversation.v2.data import androidx.annotation.WorkerThread +import org.signal.core.util.UuidUtil import org.signal.core.util.concurrent.SignalExecutors import org.signal.core.util.roundedString import org.thoughtcrime.securesms.attachments.DatabaseAttachment @@ -24,7 +25,6 @@ import org.thoughtcrime.securesms.payments.Payment import org.thoughtcrime.securesms.polls.PollRecord import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.recipients.RecipientId -import org.whispersystems.signalservice.api.util.UuidUtil import java.util.UUID import java.util.concurrent.Callable import java.util.concurrent.ExecutorService @@ -80,7 +80,7 @@ object MessageDataFetcher { .filter { it.isMms && it.isPaymentNotification } .map { UuidUtil.parseOrNull(it.body) to it.id } .filter { it.first != null } - .associate { it.first to it.second } + .associate { it.first!! to it.second } SignalDatabase .payments diff --git a/app/src/main/java/org/thoughtcrime/securesms/crash/CrashConfig.kt b/app/src/main/java/org/thoughtcrime/securesms/crash/CrashConfig.kt index 6208800533..e4a24f1c65 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/crash/CrashConfig.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/crash/CrashConfig.kt @@ -7,12 +7,12 @@ package org.thoughtcrime.securesms.crash import androidx.annotation.VisibleForTesting import com.fasterxml.jackson.annotation.JsonProperty +import org.signal.core.models.ServiceId import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.util.BucketingUtil import org.thoughtcrime.securesms.util.JsonUtils import org.thoughtcrime.securesms.util.RemoteConfig -import org.whispersystems.signalservice.api.push.ServiceId import java.io.IOException object CrashConfig { diff --git a/app/src/main/java/org/thoughtcrime/securesms/crypto/storage/SignalBaseIdentityKeyStore.java b/app/src/main/java/org/thoughtcrime/securesms/crypto/storage/SignalBaseIdentityKeyStore.java index 50c4db2ef2..59dd7c6217 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/crypto/storage/SignalBaseIdentityKeyStore.java +++ b/app/src/main/java/org/thoughtcrime/securesms/crypto/storage/SignalBaseIdentityKeyStore.java @@ -26,7 +26,7 @@ import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.util.IdentityUtil; import org.thoughtcrime.securesms.util.LRUCache; import org.whispersystems.signalservice.api.SignalSessionLock; -import org.whispersystems.signalservice.api.push.ServiceId; +import org.signal.core.models.ServiceId; import java.util.ArrayList; import java.util.List; diff --git a/app/src/main/java/org/thoughtcrime/securesms/crypto/storage/SignalIdentityKeyStore.java b/app/src/main/java/org/thoughtcrime/securesms/crypto/storage/SignalIdentityKeyStore.java index 6d02db05c0..cf6e0025f1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/crypto/storage/SignalIdentityKeyStore.java +++ b/app/src/main/java/org/thoughtcrime/securesms/crypto/storage/SignalIdentityKeyStore.java @@ -11,7 +11,7 @@ import org.thoughtcrime.securesms.database.identity.IdentityRecordList; import org.thoughtcrime.securesms.database.model.IdentityRecord; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; -import org.whispersystems.signalservice.api.push.ServiceId; +import org.signal.core.models.ServiceId; import java.util.List; import java.util.Optional; diff --git a/app/src/main/java/org/thoughtcrime/securesms/crypto/storage/SignalKyberPreKeyStore.kt b/app/src/main/java/org/thoughtcrime/securesms/crypto/storage/SignalKyberPreKeyStore.kt index 5fb8a46027..98a7ade977 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/crypto/storage/SignalKyberPreKeyStore.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/crypto/storage/SignalKyberPreKeyStore.kt @@ -5,6 +5,7 @@ package org.thoughtcrime.securesms.crypto.storage +import org.signal.core.models.ServiceId import org.signal.libsignal.protocol.InvalidKeyIdException import org.signal.libsignal.protocol.ecc.ECPublicKey import org.signal.libsignal.protocol.state.KyberPreKeyRecord @@ -12,7 +13,6 @@ import org.signal.libsignal.protocol.state.KyberPreKeyStore import org.thoughtcrime.securesms.crypto.ReentrantSessionLock import org.thoughtcrime.securesms.database.SignalDatabase import org.whispersystems.signalservice.api.SignalServiceKyberPreKeyStore -import org.whispersystems.signalservice.api.push.ServiceId import kotlin.jvm.Throws /** diff --git a/app/src/main/java/org/thoughtcrime/securesms/crypto/storage/SignalServiceDataStoreImpl.java b/app/src/main/java/org/thoughtcrime/securesms/crypto/storage/SignalServiceDataStoreImpl.java index cae5d88ce3..18db539e46 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/crypto/storage/SignalServiceDataStoreImpl.java +++ b/app/src/main/java/org/thoughtcrime/securesms/crypto/storage/SignalServiceDataStoreImpl.java @@ -5,9 +5,8 @@ import android.content.Context; import androidx.annotation.NonNull; import org.thoughtcrime.securesms.keyvalue.SignalStore; -import org.thoughtcrime.securesms.util.TextSecurePreferences; import org.whispersystems.signalservice.api.SignalServiceDataStore; -import org.whispersystems.signalservice.api.push.ServiceId; +import org.signal.core.models.ServiceId; public final class SignalServiceDataStoreImpl implements SignalServiceDataStore { diff --git a/app/src/main/java/org/thoughtcrime/securesms/crypto/storage/TextSecurePreKeyStore.java b/app/src/main/java/org/thoughtcrime/securesms/crypto/storage/TextSecurePreKeyStore.java index a32579b403..ca18b02131 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/crypto/storage/TextSecurePreKeyStore.java +++ b/app/src/main/java/org/thoughtcrime/securesms/crypto/storage/TextSecurePreKeyStore.java @@ -11,7 +11,7 @@ import org.thoughtcrime.securesms.crypto.ReentrantSessionLock; import org.thoughtcrime.securesms.database.SignalDatabase; import org.whispersystems.signalservice.api.SignalServicePreKeyStore; import org.whispersystems.signalservice.api.SignalSessionLock; -import org.whispersystems.signalservice.api.push.ServiceId; +import org.signal.core.models.ServiceId; import java.util.List; diff --git a/app/src/main/java/org/thoughtcrime/securesms/crypto/storage/TextSecureSessionStore.java b/app/src/main/java/org/thoughtcrime/securesms/crypto/storage/TextSecureSessionStore.java index 37dba13ee6..9401bfc08d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/crypto/storage/TextSecureSessionStore.java +++ b/app/src/main/java/org/thoughtcrime/securesms/crypto/storage/TextSecureSessionStore.java @@ -14,12 +14,11 @@ import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; import org.whispersystems.signalservice.api.SignalServiceSessionStore; import org.whispersystems.signalservice.api.SignalSessionLock; -import org.whispersystems.signalservice.api.push.ServiceId; +import org.signal.core.models.ServiceId; import java.util.List; import java.util.Map; import java.util.Objects; -import java.util.Set; import java.util.stream.Collectors; public class TextSecureSessionStore implements SignalServiceSessionStore { diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/AttachmentTable.kt b/app/src/main/java/org/thoughtcrime/securesms/database/AttachmentTable.kt index 5031ced585..18b088692b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/AttachmentTable.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/AttachmentTable.kt @@ -34,9 +34,12 @@ import okio.ByteString import okio.ByteString.Companion.toByteString import org.json.JSONArray import org.json.JSONException +import org.signal.core.models.backup.MediaId +import org.signal.core.models.backup.MediaName import org.signal.core.util.Base64 import org.signal.core.util.SqlUtil import org.signal.core.util.ThreadUtil +import org.signal.core.util.UuidUtil import org.signal.core.util.copyTo import org.signal.core.util.count import org.signal.core.util.delete @@ -116,10 +119,7 @@ import org.thoughtcrime.securesms.util.StorageUtil import org.thoughtcrime.securesms.util.Util import org.thoughtcrime.securesms.video.EncryptedMediaDataSource import org.whispersystems.signalservice.api.attachment.AttachmentUploadResult -import org.whispersystems.signalservice.api.backup.MediaId -import org.whispersystems.signalservice.api.backup.MediaName import org.whispersystems.signalservice.api.crypto.AttachmentCipherStreamUtil -import org.whispersystems.signalservice.api.util.UuidUtil import org.whispersystems.signalservice.internal.crypto.PaddingInputStream import org.whispersystems.signalservice.internal.util.JsonUtil import java.io.ByteArrayInputStream diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/CallTable.kt b/app/src/main/java/org/thoughtcrime/securesms/database/CallTable.kt index a8c7e1ffbf..a18ae1fcfa 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/CallTable.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/CallTable.kt @@ -4,6 +4,7 @@ import android.content.Context import android.database.Cursor import androidx.annotation.Discouraged import androidx.core.content.contentValuesOf +import org.signal.core.models.ServiceId.ACI import org.signal.core.util.IntSerializer import org.signal.core.util.Serializer import org.signal.core.util.SqlUtil @@ -36,7 +37,6 @@ import org.thoughtcrime.securesms.jobs.CallSyncEventJob import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.recipients.RecipientId import org.thoughtcrime.securesms.service.webrtc.links.CallLinkRoomId -import org.whispersystems.signalservice.api.push.ServiceId.ACI import org.whispersystems.signalservice.internal.push.SyncMessage.CallEvent import java.util.UUID import java.util.concurrent.TimeUnit diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/ChatFolderTables.kt b/app/src/main/java/org/thoughtcrime/securesms/database/ChatFolderTables.kt index faab23efc6..60fe3fc40e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/ChatFolderTables.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/ChatFolderTables.kt @@ -5,6 +5,7 @@ import android.content.Context import androidx.core.content.contentValuesOf import org.signal.core.util.Base64 import org.signal.core.util.SqlUtil +import org.signal.core.util.UuidUtil import org.signal.core.util.count import org.signal.core.util.delete import org.signal.core.util.groupBy @@ -33,7 +34,6 @@ import org.thoughtcrime.securesms.storage.StorageSyncModels import org.thoughtcrime.securesms.util.RemoteConfig import org.whispersystems.signalservice.api.storage.SignalChatFolderRecord import org.whispersystems.signalservice.api.storage.StorageId -import org.whispersystems.signalservice.api.util.UuidUtil import org.whispersystems.signalservice.internal.storage.protos.ChatFolderRecord as RemoteChatFolderRecord /** diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/DistributionListTables.kt b/app/src/main/java/org/thoughtcrime/securesms/database/DistributionListTables.kt index 427ccdd565..ef452bfc2b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/DistributionListTables.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/DistributionListTables.kt @@ -8,6 +8,7 @@ import org.signal.core.util.Base64 import org.signal.core.util.CursorUtil import org.signal.core.util.SqlUtil import org.signal.core.util.SqlUtil.buildArgs +import org.signal.core.util.UuidUtil import org.signal.core.util.delete import org.signal.core.util.logging.Log import org.signal.core.util.readToList @@ -16,7 +17,6 @@ import org.signal.core.util.requireNonNullString import org.signal.core.util.requireObject import org.signal.core.util.requireString import org.signal.core.util.select -import org.signal.core.util.update import org.signal.core.util.withinTransaction import org.thoughtcrime.securesms.database.model.DistributionListId import org.thoughtcrime.securesms.database.model.DistributionListPrivacyData @@ -29,7 +29,6 @@ import org.thoughtcrime.securesms.storage.StorageSyncHelper import org.whispersystems.signalservice.api.push.DistributionId import org.whispersystems.signalservice.api.storage.SignalStoryDistributionListRecord import org.whispersystems.signalservice.api.storage.recipientServiceAddresses -import org.whispersystems.signalservice.api.util.UuidUtil import java.util.UUID /** diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/GroupTable.kt b/app/src/main/java/org/thoughtcrime/securesms/database/GroupTable.kt index 96ddea65d6..95a1ac7a16 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/GroupTable.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/GroupTable.kt @@ -8,6 +8,9 @@ import androidx.annotation.WorkerThread import androidx.core.content.contentValuesOf import okio.ByteString import org.intellij.lang.annotations.Language +import org.signal.core.models.ServiceId +import org.signal.core.models.ServiceId.ACI +import org.signal.core.models.ServiceId.PNI import org.signal.core.util.SqlUtil import org.signal.core.util.SqlUtil.appendArg import org.signal.core.util.SqlUtil.buildArgs @@ -67,9 +70,6 @@ import org.whispersystems.signalservice.api.groupsv2.toAciListWithUnknowns import org.whispersystems.signalservice.api.messages.SignalServiceAttachmentPointer import org.whispersystems.signalservice.api.messages.SignalServiceAttachmentRemoteId import org.whispersystems.signalservice.api.push.DistributionId -import org.whispersystems.signalservice.api.push.ServiceId -import org.whispersystems.signalservice.api.push.ServiceId.ACI -import org.whispersystems.signalservice.api.push.ServiceId.PNI import java.io.Closeable import java.security.SecureRandom import java.time.Instant diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/IdentityTable.kt b/app/src/main/java/org/thoughtcrime/securesms/database/IdentityTable.kt index ebdd5b949a..fd14864010 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/IdentityTable.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/IdentityTable.kt @@ -19,7 +19,9 @@ package org.thoughtcrime.securesms.database import android.content.Context import androidx.core.content.contentValuesOf import org.greenrobot.eventbus.EventBus +import org.signal.core.models.ServiceId import org.signal.core.util.Base64 +import org.signal.core.util.UuidUtil import org.signal.core.util.delete import org.signal.core.util.exists import org.signal.core.util.firstOrNull @@ -40,8 +42,6 @@ import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.recipients.RecipientId import org.thoughtcrime.securesms.storage.StorageSyncHelper import org.thoughtcrime.securesms.util.IdentityUtil -import org.whispersystems.signalservice.api.push.ServiceId -import org.whispersystems.signalservice.api.util.UuidUtil import java.lang.AssertionError import java.util.Optional diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/KyberPreKeyTable.kt b/app/src/main/java/org/thoughtcrime/securesms/database/KyberPreKeyTable.kt index d96d8047f3..f2fb999af5 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/KyberPreKeyTable.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/KyberPreKeyTable.kt @@ -1,6 +1,7 @@ package org.thoughtcrime.securesms.database import android.content.Context +import org.signal.core.models.ServiceId import org.signal.core.util.delete import org.signal.core.util.deleteAll import org.signal.core.util.exists @@ -17,7 +18,6 @@ import org.signal.core.util.update import org.signal.core.util.withinTransaction import org.signal.libsignal.protocol.ecc.ECPublicKey import org.signal.libsignal.protocol.state.KyberPreKeyRecord -import org.whispersystems.signalservice.api.push.ServiceId /** * A table for storing data related to [org.thoughtcrime.securesms.crypto.storage.SignalKyberPreKeyStore]. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/MentionUtil.java b/app/src/main/java/org/thoughtcrime/securesms/database/MentionUtil.java index 38f3c6c21e..83231bc1ab 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/MentionUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/MentionUtil.java @@ -16,7 +16,7 @@ import org.thoughtcrime.securesms.database.model.MessageRecord; import org.thoughtcrime.securesms.database.model.databaseprotos.BodyRangeList; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; -import org.whispersystems.signalservice.api.push.ServiceId; +import org.signal.core.models.ServiceId; import java.util.ArrayList; import java.util.Collections; diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/MessageTable.kt b/app/src/main/java/org/thoughtcrime/securesms/database/MessageTable.kt index 8386a5cba2..27a0b82ac7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/MessageTable.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/MessageTable.kt @@ -27,6 +27,7 @@ import androidx.core.content.contentValuesOf import org.json.JSONArray import org.json.JSONException import org.json.JSONObject +import org.signal.core.models.ServiceId import org.signal.core.util.Base64 import org.signal.core.util.CursorUtil import org.signal.core.util.SqlUtil @@ -145,7 +146,6 @@ import org.thoughtcrime.securesms.util.RemoteConfig import org.thoughtcrime.securesms.util.TextSecurePreferences import org.thoughtcrime.securesms.util.Util import org.thoughtcrime.securesms.util.isStory -import org.whispersystems.signalservice.api.push.ServiceId import org.whispersystems.signalservice.internal.push.SyncMessage import java.io.Closeable import java.io.IOException diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/NotificationProfileTables.kt b/app/src/main/java/org/thoughtcrime/securesms/database/NotificationProfileTables.kt index 6c50627d61..8c689b860d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/NotificationProfileTables.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/NotificationProfileTables.kt @@ -8,6 +8,7 @@ import android.database.Cursor import androidx.core.content.contentValuesOf import org.signal.core.util.Base64 import org.signal.core.util.SqlUtil +import org.signal.core.util.UuidUtil import org.signal.core.util.exists import org.signal.core.util.hasUnknownFields import org.signal.core.util.insertInto @@ -37,7 +38,6 @@ import org.thoughtcrime.securesms.storage.StorageSyncModels.toLocal import org.thoughtcrime.securesms.util.RemoteConfig import org.whispersystems.signalservice.api.storage.SignalNotificationProfileRecord import org.whispersystems.signalservice.api.storage.StorageId -import org.whispersystems.signalservice.api.util.UuidUtil import java.time.DayOfWeek /** diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/OneTimePreKeyTable.kt b/app/src/main/java/org/thoughtcrime/securesms/database/OneTimePreKeyTable.kt index d68e1facfa..01de4f5eb8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/OneTimePreKeyTable.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/OneTimePreKeyTable.kt @@ -2,6 +2,7 @@ package org.thoughtcrime.securesms.database import android.content.Context import androidx.core.content.contentValuesOf +import org.signal.core.models.ServiceId import org.signal.core.util.Base64 import org.signal.core.util.SqlUtil import org.signal.core.util.delete @@ -14,7 +15,6 @@ import org.signal.libsignal.protocol.ecc.ECKeyPair import org.signal.libsignal.protocol.ecc.ECPrivateKey import org.signal.libsignal.protocol.ecc.ECPublicKey import org.signal.libsignal.protocol.state.PreKeyRecord -import org.whispersystems.signalservice.api.push.ServiceId import java.io.IOException class OneTimePreKeyTable(context: Context, databaseHelper: SignalDatabase) : DatabaseTable(context, databaseHelper) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/PaymentTable.java b/app/src/main/java/org/thoughtcrime/securesms/database/PaymentTable.java index cf1313082a..b6c4bc9fe3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/PaymentTable.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/PaymentTable.java @@ -35,7 +35,7 @@ import org.thoughtcrime.securesms.recipients.RecipientId; import org.signal.core.util.Base64; import org.thoughtcrime.securesms.util.livedata.LiveDataUtil; import org.whispersystems.signalservice.api.payments.Money; -import org.whispersystems.signalservice.api.util.UuidUtil; +import org.signal.core.util.UuidUtil; import java.io.IOException; import java.util.Arrays; diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/PnpOperations.kt b/app/src/main/java/org/thoughtcrime/securesms/database/PnpOperations.kt index a65579e5a4..fcc003b305 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/PnpOperations.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/PnpOperations.kt @@ -1,10 +1,10 @@ package org.thoughtcrime.securesms.database +import org.signal.core.models.ServiceId +import org.signal.core.models.ServiceId.ACI +import org.signal.core.models.ServiceId.PNI import org.thoughtcrime.securesms.database.model.RecipientRecord import org.thoughtcrime.securesms.recipients.RecipientId -import org.whispersystems.signalservice.api.push.ServiceId -import org.whispersystems.signalservice.api.push.ServiceId.ACI -import org.whispersystems.signalservice.api.push.ServiceId.PNI /** * Encapsulates data around processing a tuple of user data into a user entry in [RecipientTable]. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/RecipientTable.kt b/app/src/main/java/org/thoughtcrime/securesms/database/RecipientTable.kt index 3382d4a919..82e087f2e4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/RecipientTable.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/RecipientTable.kt @@ -9,6 +9,9 @@ import android.text.TextUtils import androidx.annotation.VisibleForTesting import androidx.core.content.contentValuesOf import okio.ByteString.Companion.toByteString +import org.signal.core.models.ServiceId +import org.signal.core.models.ServiceId.ACI +import org.signal.core.models.ServiceId.PNI import org.signal.core.util.Base64 import org.signal.core.util.Bitmask import org.signal.core.util.CursorUtil @@ -104,9 +107,6 @@ import org.thoughtcrime.securesms.wallpaper.ChatWallpaper import org.thoughtcrime.securesms.wallpaper.ChatWallpaperFactory import org.thoughtcrime.securesms.wallpaper.WallpaperStorage import org.whispersystems.signalservice.api.profiles.SignalServiceProfile -import org.whispersystems.signalservice.api.push.ServiceId -import org.whispersystems.signalservice.api.push.ServiceId.ACI -import org.whispersystems.signalservice.api.push.ServiceId.PNI import org.whispersystems.signalservice.api.storage.SignalAccountRecord import org.whispersystems.signalservice.api.storage.SignalContactRecord import org.whispersystems.signalservice.api.storage.SignalGroupV1Record diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/RecipientTableCursorUtil.kt b/app/src/main/java/org/thoughtcrime/securesms/database/RecipientTableCursorUtil.kt index beb9dec200..21e432916f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/RecipientTableCursorUtil.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/RecipientTableCursorUtil.kt @@ -8,6 +8,7 @@ package org.thoughtcrime.securesms.database import android.content.Context import android.database.Cursor import com.google.protobuf.InvalidProtocolBufferException +import org.signal.core.models.ServiceId import org.signal.core.util.Base64 import org.signal.core.util.logging.Log import org.signal.core.util.optionalBlob @@ -47,7 +48,6 @@ import org.thoughtcrime.securesms.util.GroupUtil import org.thoughtcrime.securesms.util.Util import org.thoughtcrime.securesms.wallpaper.ChatWallpaper import org.thoughtcrime.securesms.wallpaper.ChatWallpaperFactory -import org.whispersystems.signalservice.api.push.ServiceId import java.io.IOException object RecipientTableCursorUtil { diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/SentStorySyncManifest.kt b/app/src/main/java/org/thoughtcrime/securesms/database/SentStorySyncManifest.kt index 6aefdf7f3a..2aca02eec9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/SentStorySyncManifest.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/SentStorySyncManifest.kt @@ -1,11 +1,11 @@ package org.thoughtcrime.securesms.database import androidx.annotation.WorkerThread +import org.signal.core.models.ServiceId import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.recipients.RecipientId import org.whispersystems.signalservice.api.messages.SignalServiceStoryMessageRecipient import org.whispersystems.signalservice.api.push.DistributionId -import org.whispersystems.signalservice.api.push.ServiceId import org.whispersystems.signalservice.api.push.SignalServiceAddress import org.whispersystems.signalservice.internal.push.SyncMessage import org.whispersystems.signalservice.internal.util.Util diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/SessionTable.kt b/app/src/main/java/org/thoughtcrime/securesms/database/SessionTable.kt index 4a15ac5b42..23b50efe45 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/SessionTable.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/SessionTable.kt @@ -1,6 +1,8 @@ package org.thoughtcrime.securesms.database import android.content.Context +import org.signal.core.models.ServiceId +import org.signal.core.models.ServiceId.PNI import org.signal.core.util.CursorUtil import org.signal.core.util.SqlUtil import org.signal.core.util.logging.Log @@ -13,8 +15,6 @@ import org.signal.core.util.select import org.signal.libsignal.protocol.InvalidSessionException import org.signal.libsignal.protocol.SignalProtocolAddress import org.signal.libsignal.protocol.state.SessionRecord -import org.whispersystems.signalservice.api.push.ServiceId -import org.whispersystems.signalservice.api.push.ServiceId.PNI import org.whispersystems.signalservice.api.push.SignalServiceAddress import java.io.IOException import java.util.LinkedList diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/SignedPreKeyTable.kt b/app/src/main/java/org/thoughtcrime/securesms/database/SignedPreKeyTable.kt index c6e722c3a4..3ec2149459 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/SignedPreKeyTable.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/SignedPreKeyTable.kt @@ -2,6 +2,7 @@ package org.thoughtcrime.securesms.database import android.content.Context import androidx.core.content.contentValuesOf +import org.signal.core.models.ServiceId import org.signal.core.util.Base64 import org.signal.core.util.SqlUtil import org.signal.core.util.deleteAll @@ -14,7 +15,6 @@ import org.signal.libsignal.protocol.ecc.ECKeyPair import org.signal.libsignal.protocol.ecc.ECPrivateKey import org.signal.libsignal.protocol.ecc.ECPublicKey import org.signal.libsignal.protocol.state.SignedPreKeyRecord -import org.whispersystems.signalservice.api.push.ServiceId import java.io.IOException import java.util.LinkedList diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/ThreadTable.kt b/app/src/main/java/org/thoughtcrime/securesms/database/ThreadTable.kt index 26961efd4b..94e2d14d51 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/ThreadTable.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/ThreadTable.kt @@ -10,6 +10,7 @@ import androidx.core.content.contentValuesOf import com.fasterxml.jackson.annotation.JsonProperty import org.json.JSONObject import org.jsoup.helper.StringUtil +import org.signal.core.models.ServiceId import org.signal.core.util.CursorUtil import org.signal.core.util.SqlUtil import org.signal.core.util.Stopwatch @@ -72,7 +73,6 @@ import org.thoughtcrime.securesms.util.LRUCache import org.thoughtcrime.securesms.util.TextSecurePreferences import org.thoughtcrime.securesms.util.isPoll import org.thoughtcrime.securesms.util.isScheduled -import org.whispersystems.signalservice.api.push.ServiceId import org.whispersystems.signalservice.api.storage.SignalAccountRecord import org.whispersystems.signalservice.api.storage.SignalContactRecord import org.whispersystems.signalservice.api.storage.SignalGroupV1Record diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V149_LegacyMigrations.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V149_LegacyMigrations.kt index a37694da59..b2f65cf0cd 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V149_LegacyMigrations.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V149_LegacyMigrations.kt @@ -14,6 +14,7 @@ import android.preference.PreferenceManager import android.text.TextUtils import androidx.core.content.contentValuesOf import com.annimon.stream.Stream +import org.signal.core.models.ServiceId.ACI import org.signal.core.util.Base64 import org.signal.core.util.CursorUtil import org.signal.core.util.Hex @@ -47,7 +48,6 @@ import org.thoughtcrime.securesms.util.SignalE164Util import org.thoughtcrime.securesms.util.Triple import org.thoughtcrime.securesms.util.Util import org.whispersystems.signalservice.api.push.DistributionId -import org.whispersystems.signalservice.api.push.ServiceId.ACI import java.io.File import java.io.IOException import java.util.LinkedList diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V185_MessageRecipientsAndEditMessageMigration.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V185_MessageRecipientsAndEditMessageMigration.kt index eec6474585..459a03f7dd 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V185_MessageRecipientsAndEditMessageMigration.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V185_MessageRecipientsAndEditMessageMigration.kt @@ -3,6 +3,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application import android.preference.PreferenceManager import androidx.core.content.contentValuesOf +import org.signal.core.models.ServiceId.ACI import org.signal.core.util.SqlUtil import org.signal.core.util.Stopwatch import org.signal.core.util.logging.Log @@ -16,7 +17,6 @@ import org.thoughtcrime.securesms.database.KeyValueDatabase import org.thoughtcrime.securesms.database.SQLiteDatabase import org.thoughtcrime.securesms.dependencies.AppDependencies import org.thoughtcrime.securesms.recipients.RecipientId -import org.whispersystems.signalservice.api.push.ServiceId.ACI /** * This is a combination of the edit message and message recipient migrations (would have been V185 and v186), but as they diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V188_FixMessageRecipientsAndEditMessageMigration.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V188_FixMessageRecipientsAndEditMessageMigration.kt index fe998a146b..fc865195bf 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V188_FixMessageRecipientsAndEditMessageMigration.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V188_FixMessageRecipientsAndEditMessageMigration.kt @@ -3,6 +3,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application import android.preference.PreferenceManager import androidx.core.content.contentValuesOf +import org.signal.core.models.ServiceId.ACI import org.signal.core.util.SqlUtil import org.signal.core.util.Stopwatch import org.signal.core.util.logging.Log @@ -16,7 +17,6 @@ import org.thoughtcrime.securesms.database.KeyValueDatabase import org.thoughtcrime.securesms.database.SQLiteDatabase import org.thoughtcrime.securesms.dependencies.AppDependencies import org.thoughtcrime.securesms.recipients.RecipientId -import org.whispersystems.signalservice.api.push.ServiceId.ACI /** * This is a fix for a bad situation that could happen during [V185_MessageRecipientsAndEditMessageMigration]. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V210_FixPniPossibleColumns.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V210_FixPniPossibleColumns.kt index a878ba7179..69ffe579e8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V210_FixPniPossibleColumns.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V210_FixPniPossibleColumns.kt @@ -6,12 +6,12 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application +import org.signal.core.models.ServiceId import org.signal.core.util.SqlUtil import org.signal.core.util.logging.Log import org.signal.core.util.requireString import org.thoughtcrime.securesms.database.KeyValueDatabase import org.thoughtcrime.securesms.database.SQLiteDatabase -import org.whispersystems.signalservice.api.push.ServiceId /** * We moved to a strongly typed PNI but did not update all places where a PNI may pre-exist in diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V258_FixGroupRevokedInviteeUpdate.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V258_FixGroupRevokedInviteeUpdate.kt index 491ecb35e4..eef51ea073 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V258_FixGroupRevokedInviteeUpdate.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V258_FixGroupRevokedInviteeUpdate.kt @@ -8,6 +8,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application import androidx.core.content.contentValuesOf import okio.IOException +import org.signal.core.models.ServiceId import org.signal.core.util.forEach import org.signal.core.util.logging.Log import org.signal.core.util.requireBlob @@ -15,7 +16,6 @@ import org.signal.core.util.requireLong import org.thoughtcrime.securesms.backup.v2.proto.GroupInvitationRevokedUpdate import org.thoughtcrime.securesms.database.SQLiteDatabase import org.thoughtcrime.securesms.database.model.databaseprotos.MessageExtras -import org.whispersystems.signalservice.api.push.ServiceId /** * Ensure we store ACIs only in the ACI fields and non-byte prefixed PNIs only in the PNI fields of diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V264_FixGroupAddMemberUpdate.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V264_FixGroupAddMemberUpdate.kt index d648b146f7..fe4eb73e90 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V264_FixGroupAddMemberUpdate.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V264_FixGroupAddMemberUpdate.kt @@ -8,6 +8,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application import androidx.core.content.contentValuesOf import okio.IOException +import org.signal.core.models.ServiceId import org.signal.core.util.forEach import org.signal.core.util.logging.Log import org.signal.core.util.requireBlob @@ -15,7 +16,6 @@ import org.signal.core.util.requireLong import org.thoughtcrime.securesms.backup.v2.proto.GroupMemberAddedUpdate import org.thoughtcrime.securesms.database.SQLiteDatabase import org.thoughtcrime.securesms.database.model.databaseprotos.MessageExtras -import org.whispersystems.signalservice.api.push.ServiceId /** * Ensure we store ACIs only in the ACI fields for [GroupMemberAddedUpdate.updaterAci] in [GroupMemberAddedUpdate]. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V267_FixGroupInvitationDeclinedUpdate.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V267_FixGroupInvitationDeclinedUpdate.kt index e2d77dbf64..19aed468f3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V267_FixGroupInvitationDeclinedUpdate.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V267_FixGroupInvitationDeclinedUpdate.kt @@ -8,6 +8,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application import androidx.core.content.contentValuesOf import okio.IOException +import org.signal.core.models.ServiceId import org.signal.core.util.forEach import org.signal.core.util.logging.Log import org.signal.core.util.requireBlob @@ -15,7 +16,6 @@ import org.signal.core.util.requireLong import org.thoughtcrime.securesms.backup.v2.proto.GroupInvitationDeclinedUpdate import org.thoughtcrime.securesms.database.SQLiteDatabase import org.thoughtcrime.securesms.database.model.databaseprotos.MessageExtras -import org.whispersystems.signalservice.api.push.ServiceId /** * Ensure we store ACIs only in the ACI only-field and null for PNIs for field [GroupInvitationDeclinedUpdate.inviteeAci] in [GroupInvitationDeclinedUpdate]. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/model/GroupCallUpdateDetailsUtil.java b/app/src/main/java/org/thoughtcrime/securesms/database/model/GroupCallUpdateDetailsUtil.java index cb1c6014ac..0245696349 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/model/GroupCallUpdateDetailsUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/model/GroupCallUpdateDetailsUtil.java @@ -6,17 +6,14 @@ import androidx.annotation.Nullable; import org.signal.core.util.Base64; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.backup.v2.proto.GroupCall; -import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.model.databaseprotos.GroupCallUpdateDetails; import org.thoughtcrime.securesms.recipients.Recipient; -import org.thoughtcrime.securesms.recipients.RecipientId; -import org.whispersystems.signalservice.api.push.ServiceId; +import org.signal.core.models.ServiceId; import java.io.IOException; import java.util.List; import java.util.Objects; import java.util.concurrent.TimeUnit; -import java.util.stream.Collectors; public final class GroupCallUpdateDetailsUtil { diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/model/GroupCallUpdateMessageFactory.java b/app/src/main/java/org/thoughtcrime/securesms/database/model/GroupCallUpdateMessageFactory.java index b152bd50e4..6b5af4c1bd 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/model/GroupCallUpdateMessageFactory.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/model/GroupCallUpdateMessageFactory.java @@ -12,14 +12,13 @@ import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.util.DateUtils; -import org.whispersystems.signalservice.api.push.ServiceId; -import org.whispersystems.signalservice.api.push.ServiceId.ACI; +import org.signal.core.models.ServiceId; +import org.signal.core.models.ServiceId.ACI; import java.util.ArrayList; import java.util.List; import java.util.Locale; import java.util.Objects; -import java.util.concurrent.TimeUnit; /** * Create a group call update message based on time and joined members. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/model/GroupsV2UpdateMessageConverter.kt b/app/src/main/java/org/thoughtcrime/securesms/database/model/GroupsV2UpdateMessageConverter.kt index 0ddbbc4ff4..5f5437852a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/model/GroupsV2UpdateMessageConverter.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/model/GroupsV2UpdateMessageConverter.kt @@ -6,7 +6,9 @@ package org.thoughtcrime.securesms.database.model import okio.ByteString +import org.signal.core.models.ServiceId import org.signal.core.util.BidiUtil +import org.signal.core.util.UuidUtil import org.signal.core.util.isNullOrEmpty import org.signal.storageservice.protos.groups.AccessControl import org.signal.storageservice.protos.groups.AccessControl.AccessRequired @@ -50,9 +52,7 @@ import org.thoughtcrime.securesms.backup.v2.proto.SelfInvitedOtherUserToGroupUpd import org.thoughtcrime.securesms.backup.v2.proto.SelfInvitedToGroupUpdate import org.thoughtcrime.securesms.database.model.databaseprotos.DecryptedGroupV2Context import org.whispersystems.signalservice.api.groupsv2.DecryptedGroupUtil -import org.whispersystems.signalservice.api.push.ServiceId import org.whispersystems.signalservice.api.push.ServiceIds -import org.whispersystems.signalservice.api.util.UuidUtil import java.util.LinkedList import java.util.Optional import java.util.stream.Collectors diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/model/GroupsV2UpdateMessageProducer.java b/app/src/main/java/org/thoughtcrime/securesms/database/model/GroupsV2UpdateMessageProducer.java index fcc5aa45d3..b37e48f98a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/model/GroupsV2UpdateMessageProducer.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/model/GroupsV2UpdateMessageProducer.java @@ -4,7 +4,6 @@ import android.content.Context; import android.text.Spannable; import android.text.SpannableStringBuilder; -import androidx.annotation.DrawableRes; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.PluralsRes; @@ -67,9 +66,9 @@ import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.util.ExpirationUtil; import org.thoughtcrime.securesms.util.SpanUtil; import org.whispersystems.signalservice.api.groupsv2.DecryptedGroupUtil; -import org.whispersystems.signalservice.api.push.ServiceId; +import org.signal.core.models.ServiceId; import org.whispersystems.signalservice.api.push.ServiceIds; -import org.whispersystems.signalservice.api.util.UuidUtil; +import org.signal.core.util.UuidUtil; import java.util.Arrays; import java.util.Collections; diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/model/MessageRecord.java b/app/src/main/java/org/thoughtcrime/securesms/database/model/MessageRecord.java index bcfbeb5f88..064bb2526c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/model/MessageRecord.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/model/MessageRecord.java @@ -69,9 +69,9 @@ import org.thoughtcrime.securesms.util.MessageRecordUtil; import org.thoughtcrime.securesms.util.SignalE164Util; import org.thoughtcrime.securesms.util.Util; import org.whispersystems.signalservice.api.groupsv2.DecryptedGroupUtil; -import org.whispersystems.signalservice.api.push.ServiceId; -import org.whispersystems.signalservice.api.push.ServiceId.ACI; -import org.whispersystems.signalservice.api.util.UuidUtil; +import org.signal.core.models.ServiceId; +import org.signal.core.models.ServiceId.ACI; +import org.signal.core.util.UuidUtil; import java.io.IOException; import java.util.ArrayList; diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/model/RecipientRecord.kt b/app/src/main/java/org/thoughtcrime/securesms/database/model/RecipientRecord.kt index fd6c757d31..58531326d3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/model/RecipientRecord.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/model/RecipientRecord.kt @@ -1,6 +1,9 @@ package org.thoughtcrime.securesms.database.model import android.net.Uri +import org.signal.core.models.ServiceId +import org.signal.core.models.ServiceId.ACI +import org.signal.core.models.ServiceId.PNI import org.signal.libsignal.zkgroup.groups.GroupMasterKey import org.signal.libsignal.zkgroup.profiles.ExpiringProfileKeyCredential import org.thoughtcrime.securesms.badges.models.Badge @@ -19,9 +22,6 @@ import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.recipients.RecipientId import org.thoughtcrime.securesms.service.webrtc.links.CallLinkRoomId import org.thoughtcrime.securesms.wallpaper.ChatWallpaper -import org.whispersystems.signalservice.api.push.ServiceId -import org.whispersystems.signalservice.api.push.ServiceId.ACI -import org.whispersystems.signalservice.api.push.ServiceId.PNI /** * Database model for [RecipientTable]. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/model/UpdateDescription.java b/app/src/main/java/org/thoughtcrime/securesms/database/model/UpdateDescription.java index 0ac4199def..6019ace2fe 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/model/UpdateDescription.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/model/UpdateDescription.java @@ -11,7 +11,7 @@ import androidx.annotation.Nullable; import androidx.annotation.WorkerThread; import org.thoughtcrime.securesms.fonts.SignalSymbols.Glyph; -import org.whispersystems.signalservice.api.push.ServiceId; +import org.signal.core.models.ServiceId; import java.util.Collection; import java.util.Collections; diff --git a/app/src/main/java/org/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider.java b/app/src/main/java/org/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider.java index 17df819f16..cbd13cde95 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider.java +++ b/app/src/main/java/org/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider.java @@ -102,8 +102,8 @@ import org.whispersystems.signalservice.api.message.MessageApi; import org.whispersystems.signalservice.api.payments.PaymentsApi; import org.whispersystems.signalservice.api.profiles.ProfileApi; import org.whispersystems.signalservice.api.provisioning.ProvisioningApi; -import org.whispersystems.signalservice.api.push.ServiceId.ACI; -import org.whispersystems.signalservice.api.push.ServiceId.PNI; +import org.signal.core.models.ServiceId.ACI; +import org.signal.core.models.ServiceId.PNI; import org.whispersystems.signalservice.api.ratelimit.RateLimitChallengeApi; import org.whispersystems.signalservice.api.registration.RegistrationApi; import org.whispersystems.signalservice.api.remoteconfig.RemoteConfigApi; diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManager.java b/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManager.java index adce51e674..792058e0cf 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManager.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManager.java @@ -22,7 +22,7 @@ import org.thoughtcrime.securesms.groups.v2.processing.GroupUpdateResult; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; import org.whispersystems.signalservice.api.groupsv2.GroupLinkNotActiveException; -import org.whispersystems.signalservice.api.push.ServiceId; +import org.signal.core.models.ServiceId; import java.io.IOException; import java.util.Collection; diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManagerV2.java b/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManagerV2.java index 327100cc86..b566053517 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManagerV2.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManagerV2.java @@ -62,13 +62,13 @@ import org.whispersystems.signalservice.api.groupsv2.GroupsV2Operations; import org.whispersystems.signalservice.api.groupsv2.InvalidGroupStateException; import org.whispersystems.signalservice.api.groupsv2.NotAbleToApplyGroupV2ChangeException; import org.whispersystems.signalservice.api.groupsv2.ReceivedGroupSendEndorsements; -import org.whispersystems.signalservice.api.push.ServiceId; -import org.whispersystems.signalservice.api.push.ServiceId.ACI; -import org.whispersystems.signalservice.api.push.ServiceId.PNI; +import org.signal.core.models.ServiceId; +import org.signal.core.models.ServiceId.ACI; +import org.signal.core.models.ServiceId.PNI; import org.whispersystems.signalservice.api.push.ServiceIds; import org.whispersystems.signalservice.api.push.exceptions.AuthorizationFailedException; import org.whispersystems.signalservice.api.push.exceptions.ConflictException; -import org.whispersystems.signalservice.api.util.UuidUtil; +import org.signal.core.util.UuidUtil; import org.whispersystems.signalservice.internal.push.exceptions.GroupExistsException; import org.whispersystems.signalservice.internal.push.exceptions.GroupPatchNotAcceptedException; import org.whispersystems.signalservice.internal.push.exceptions.NotInGroupException; diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/GroupProtoUtil.java b/app/src/main/java/org/thoughtcrime/securesms/groups/GroupProtoUtil.java index 4ddfa07e96..24370f0618 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/GroupProtoUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/GroupProtoUtil.java @@ -17,8 +17,8 @@ import org.thoughtcrime.securesms.database.model.databaseprotos.GV2UpdateDescrip import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; -import org.whispersystems.signalservice.api.push.ServiceId; -import org.whispersystems.signalservice.api.push.ServiceId.ACI; +import org.signal.core.models.ServiceId; +import org.signal.core.models.ServiceId.ACI; import org.whispersystems.signalservice.internal.push.GroupContextV2; import java.util.List; diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/LiveGroup.java b/app/src/main/java/org/thoughtcrime/securesms/groups/LiveGroup.java index 3de4b93203..16e522b1be 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/LiveGroup.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/LiveGroup.java @@ -28,7 +28,7 @@ import org.thoughtcrime.securesms.recipients.LiveRecipient; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.util.livedata.LiveDataUtil; -import org.whispersystems.signalservice.api.push.ServiceId; +import org.signal.core.models.ServiceId; import java.util.Collections; import java.util.Comparator; diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/v2/GroupCandidateHelper.java b/app/src/main/java/org/thoughtcrime/securesms/groups/v2/GroupCandidateHelper.java index ae7144c0ad..4066a700c4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/v2/GroupCandidateHelper.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/v2/GroupCandidateHelper.java @@ -13,7 +13,7 @@ import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.util.ProfileUtil; import org.whispersystems.signalservice.api.SignalServiceAccountManager; import org.whispersystems.signalservice.api.groupsv2.GroupCandidate; -import org.whispersystems.signalservice.api.push.ServiceId; +import org.signal.core.models.ServiceId; import java.io.IOException; import java.util.ArrayList; diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/v2/ProfileKeySet.java b/app/src/main/java/org/thoughtcrime/securesms/groups/v2/ProfileKeySet.java index 993476b348..f58c6aab1c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/v2/ProfileKeySet.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/v2/ProfileKeySet.java @@ -10,8 +10,8 @@ import org.signal.storageservice.protos.groups.local.DecryptedGroup; import org.signal.storageservice.protos.groups.local.DecryptedGroupChange; import org.signal.storageservice.protos.groups.local.DecryptedMember; import org.signal.storageservice.protos.groups.local.DecryptedRequestingMember; -import org.whispersystems.signalservice.api.push.ServiceId; -import org.whispersystems.signalservice.api.push.ServiceId.ACI; +import org.signal.core.models.ServiceId; +import org.signal.core.models.ServiceId.ACI; import java.util.LinkedHashMap; import java.util.Map; diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/v2/processing/GroupsV2StateProcessor.kt b/app/src/main/java/org/thoughtcrime/securesms/groups/v2/processing/GroupsV2StateProcessor.kt index dfe66a399a..fec4797b15 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/v2/processing/GroupsV2StateProcessor.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/v2/processing/GroupsV2StateProcessor.kt @@ -7,6 +7,9 @@ package org.thoughtcrime.securesms.groups.v2.processing import androidx.annotation.VisibleForTesting import androidx.annotation.WorkerThread +import org.signal.core.models.ServiceId +import org.signal.core.models.ServiceId.ACI +import org.signal.core.util.UuidUtil import org.signal.core.util.logging.Log import org.signal.core.util.orNull import org.signal.libsignal.zkgroup.InvalidInputException @@ -45,10 +48,7 @@ import org.whispersystems.signalservice.api.groupsv2.GroupHistoryPage import org.whispersystems.signalservice.api.groupsv2.InvalidGroupStateException import org.whispersystems.signalservice.api.groupsv2.NotAbleToApplyGroupV2ChangeException import org.whispersystems.signalservice.api.groupsv2.ReceivedGroupSendEndorsements -import org.whispersystems.signalservice.api.push.ServiceId -import org.whispersystems.signalservice.api.push.ServiceId.ACI import org.whispersystems.signalservice.api.push.ServiceIds -import org.whispersystems.signalservice.api.util.UuidUtil import org.whispersystems.signalservice.internal.push.exceptions.GroupNotFoundException import org.whispersystems.signalservice.internal.push.exceptions.NotInGroupException import java.io.IOException diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/migrations/PushProcessMessageJobMigration.kt b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/migrations/PushProcessMessageJobMigration.kt index 426d3e5133..1fcd44c487 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/migrations/PushProcessMessageJobMigration.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/migrations/PushProcessMessageJobMigration.kt @@ -1,6 +1,7 @@ package org.thoughtcrime.securesms.jobmanager.migrations import okio.ByteString.Companion.toByteString +import org.signal.core.models.ServiceId import org.signal.core.util.Base64 import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.jobmanager.JobMigration @@ -10,7 +11,6 @@ import org.thoughtcrime.securesms.jobs.PushProcessMessageErrorJob import org.thoughtcrime.securesms.messages.MessageState import org.whispersystems.signalservice.api.crypto.protos.CompleteMessage import org.whispersystems.signalservice.api.crypto.protos.EnvelopeMetadata -import org.whispersystems.signalservice.api.push.ServiceId import org.whispersystems.signalservice.internal.push.Envelope import org.whispersystems.signalservice.internal.serialize.protos.SignalServiceContentProto diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/ArchiveAttachmentReconciliationJob.kt b/app/src/main/java/org/thoughtcrime/securesms/jobs/ArchiveAttachmentReconciliationJob.kt index 1f8a8555c4..57d576d33b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/ArchiveAttachmentReconciliationJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/ArchiveAttachmentReconciliationJob.kt @@ -13,6 +13,7 @@ import android.content.pm.PackageManager import androidx.core.app.NotificationCompat import androidx.core.app.NotificationManagerCompat import androidx.core.content.ContextCompat +import org.signal.core.models.backup.MediaId import org.signal.core.util.EventTimer import org.signal.core.util.PendingIntentFlags import org.signal.core.util.Stopwatch @@ -35,7 +36,6 @@ import org.thoughtcrime.securesms.notifications.NotificationIds import org.thoughtcrime.securesms.util.RemoteConfig import org.whispersystems.signalservice.api.NetworkResult import org.whispersystems.signalservice.api.archive.ArchiveGetMediaItemsResponse -import org.whispersystems.signalservice.api.backup.MediaId import kotlin.time.Duration.Companion.days import kotlin.time.Duration.Companion.hours diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/BackupMessagesJob.kt b/app/src/main/java/org/thoughtcrime/securesms/jobs/BackupMessagesJob.kt index 877765e19f..97ede2b2db 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/BackupMessagesJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/BackupMessagesJob.kt @@ -14,6 +14,7 @@ import androidx.core.app.NotificationCompat import androidx.core.app.NotificationManagerCompat import androidx.core.content.ContextCompat import okio.IOException +import org.signal.core.models.backup.MediaRootBackupKey import org.signal.core.util.PendingIntentFlags import org.signal.core.util.Stopwatch import org.signal.core.util.isNotNullOrBlank @@ -50,7 +51,6 @@ import org.thoughtcrime.securesms.storage.StorageSyncHelper import org.thoughtcrime.securesms.util.MediaUtil import org.thoughtcrime.securesms.util.RemoteConfig import org.whispersystems.signalservice.api.NetworkResult -import org.whispersystems.signalservice.api.backup.MediaRootBackupKey import org.whispersystems.signalservice.api.messages.AttachmentTransferProgress import org.whispersystems.signalservice.api.messages.SignalServiceAttachment import org.whispersystems.signalservice.api.svr.SvrBApi diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/IndividualSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/IndividualSendJob.java index 8a2a91495d..ca5a113eff 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/IndividualSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/IndividualSendJob.java @@ -49,7 +49,7 @@ import org.whispersystems.signalservice.api.push.SignalServiceAddress; import org.whispersystems.signalservice.api.push.exceptions.ProofRequiredException; import org.whispersystems.signalservice.api.push.exceptions.ServerRejectedException; import org.whispersystems.signalservice.api.push.exceptions.UnregisteredUserException; -import org.whispersystems.signalservice.api.util.UuidUtil; +import org.signal.core.util.UuidUtil; import org.whispersystems.signalservice.internal.push.BodyRange; import org.whispersystems.signalservice.internal.push.DataMessage; diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceDeleteSyncJob.kt b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceDeleteSyncJob.kt index 1ae1c4c0ad..36b44a01de 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceDeleteSyncJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceDeleteSyncJob.kt @@ -10,6 +10,7 @@ import androidx.annotation.WorkerThread import okio.ByteString import okio.ByteString.Companion.toByteString import org.signal.core.util.Base64 +import org.signal.core.util.UuidUtil import org.signal.core.util.logging.Log import org.signal.core.util.orNull import org.thoughtcrime.securesms.BuildConfig @@ -28,7 +29,6 @@ import org.thoughtcrime.securesms.messages.SignalServiceProtoUtil.pad import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.recipients.RecipientId import org.whispersystems.signalservice.api.crypto.UntrustedIdentityException -import org.whispersystems.signalservice.api.util.UuidUtil import org.whispersystems.signalservice.internal.push.AddressableMessage import org.whispersystems.signalservice.internal.push.Content import org.whispersystems.signalservice.internal.push.ConversationIdentifier diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceOutgoingPaymentSyncJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceOutgoingPaymentSyncJob.java index 89c8fdad70..15ad62969b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceOutgoingPaymentSyncJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceOutgoingPaymentSyncJob.java @@ -15,10 +15,9 @@ import org.thoughtcrime.securesms.net.NotPushRegisteredException; import org.thoughtcrime.securesms.payments.proto.PaymentMetaData; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientUtil; -import org.thoughtcrime.securesms.util.TextSecurePreferences; import org.whispersystems.signalservice.api.messages.multidevice.OutgoingPaymentMessage; import org.whispersystems.signalservice.api.messages.multidevice.SignalServiceSyncMessage; -import org.whispersystems.signalservice.api.push.ServiceId; +import org.signal.core.models.ServiceId; import org.whispersystems.signalservice.api.push.exceptions.PushNetworkException; import org.whispersystems.signalservice.api.push.exceptions.ServerRejectedException; diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceReadUpdateJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceReadUpdateJob.java index 7ba4cd7c89..683a2296fc 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceReadUpdateJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceReadUpdateJob.java @@ -24,7 +24,7 @@ import org.whispersystems.signalservice.api.SignalServiceMessageSender; import org.whispersystems.signalservice.api.crypto.UntrustedIdentityException; import org.whispersystems.signalservice.api.messages.multidevice.ReadMessage; import org.whispersystems.signalservice.api.messages.multidevice.SignalServiceSyncMessage; -import org.whispersystems.signalservice.api.push.ServiceId; +import org.signal.core.models.ServiceId; import org.whispersystems.signalservice.api.push.exceptions.PushNetworkException; import org.whispersystems.signalservice.api.push.exceptions.ServerRejectedException; diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PreKeysSyncJob.kt b/app/src/main/java/org/thoughtcrime/securesms/jobs/PreKeysSyncJob.kt index a7487c0a12..763a8dca72 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PreKeysSyncJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PreKeysSyncJob.kt @@ -1,6 +1,7 @@ package org.thoughtcrime.securesms.jobs import androidx.annotation.VisibleForTesting +import org.signal.core.models.ServiceId import org.signal.core.util.logging.Log import org.signal.core.util.roundedString import org.signal.libsignal.protocol.InvalidKeyException @@ -22,7 +23,6 @@ import org.thoughtcrime.securesms.util.isRetryableIOException import org.whispersystems.signalservice.api.NetworkResult import org.whispersystems.signalservice.api.SignalServiceAccountDataStore import org.whispersystems.signalservice.api.account.PreKeyUpload -import org.whispersystems.signalservice.api.push.ServiceId import org.whispersystems.signalservice.api.push.ServiceIdType import org.whispersystems.signalservice.api.push.exceptions.NonSuccessfulResponseCodeException import java.io.IOException diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSilentUpdateSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSilentUpdateSendJob.java index c3a459bf53..8b064bc7c6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSilentUpdateSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSilentUpdateSendJob.java @@ -32,8 +32,8 @@ import org.whispersystems.signalservice.api.groupsv2.DecryptedGroupUtil; import org.whispersystems.signalservice.api.messages.SendMessageResult; import org.whispersystems.signalservice.api.messages.SignalServiceDataMessage; import org.whispersystems.signalservice.api.messages.SignalServiceGroupV2; -import org.whispersystems.signalservice.api.push.ServiceId; -import org.whispersystems.signalservice.api.push.ServiceId.ACI; +import org.signal.core.models.ServiceId; +import org.signal.core.models.ServiceId.ACI; import org.whispersystems.signalservice.api.push.exceptions.ServerRejectedException; import org.whispersystems.signalservice.internal.push.GroupContextV2; diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushProcessMessageJob.kt b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushProcessMessageJob.kt index f3ec4081ca..502c24434f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushProcessMessageJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushProcessMessageJob.kt @@ -2,6 +2,7 @@ package org.thoughtcrime.securesms.jobs import okio.ByteString import okio.ByteString.Companion.toByteString +import org.signal.core.models.ServiceId import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.database.SignalDatabase.Companion.groups import org.thoughtcrime.securesms.dependencies.AppDependencies @@ -18,7 +19,6 @@ import org.thoughtcrime.securesms.util.SignalLocalMetrics import org.whispersystems.signalservice.api.crypto.EnvelopeMetadata import org.whispersystems.signalservice.api.crypto.protos.CompleteMessage import org.whispersystems.signalservice.api.groupsv2.NoCredentialForRedemptionTimeException -import org.whispersystems.signalservice.api.push.ServiceId import org.whispersystems.signalservice.api.push.exceptions.PushNetworkException import org.whispersystems.signalservice.internal.push.Content import org.whispersystems.signalservice.internal.push.Envelope diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushSendJob.java index e4bd317adb..4a964ed6e4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushSendJob.java @@ -70,7 +70,7 @@ import org.whispersystems.signalservice.api.messages.SignalServiceAttachmentRemo import org.whispersystems.signalservice.api.messages.SignalServiceDataMessage; import org.whispersystems.signalservice.api.messages.SignalServicePreview; import org.whispersystems.signalservice.api.messages.shared.SharedContact; -import org.whispersystems.signalservice.api.push.ServiceId.ACI; +import org.signal.core.models.ServiceId.ACI; import org.whispersystems.signalservice.api.push.exceptions.NonSuccessfulResponseCodeException; import org.whispersystems.signalservice.api.push.exceptions.ProofRequiredException; import org.whispersystems.signalservice.api.push.exceptions.RateLimitException; diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/ReportSpamJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/ReportSpamJob.java index e9332c91a6..029d95bb37 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/ReportSpamJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/ReportSpamJob.java @@ -15,7 +15,7 @@ import org.thoughtcrime.securesms.net.SignalNetwork; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; import org.whispersystems.signalservice.api.NetworkResultUtil; -import org.whispersystems.signalservice.api.push.ServiceId; +import org.signal.core.models.ServiceId; import org.whispersystems.signalservice.api.push.exceptions.NonSuccessfulResponseCodeException; import org.whispersystems.signalservice.api.push.exceptions.ServerRejectedException; diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/ResetSvrGuessCountJob.kt b/app/src/main/java/org/thoughtcrime/securesms/jobs/ResetSvrGuessCountJob.kt index 08cc83e6b2..c108c17d7e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/ResetSvrGuessCountJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/ResetSvrGuessCountJob.kt @@ -4,6 +4,7 @@ */ package org.thoughtcrime.securesms.jobs +import org.signal.core.models.MasterKey import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.BuildConfig import org.thoughtcrime.securesms.dependencies.AppDependencies @@ -13,7 +14,6 @@ import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.pin.Svr3Migration import org.thoughtcrime.securesms.pin.SvrRepository -import org.whispersystems.signalservice.api.kbs.MasterKey import org.whispersystems.signalservice.api.svr.SecureValueRecovery import org.whispersystems.signalservice.api.svr.SecureValueRecovery.BackupResponse import org.whispersystems.signalservice.api.svr.SecureValueRecovery.PinChangeSession diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/RestoreLocalAttachmentJob.kt b/app/src/main/java/org/thoughtcrime/securesms/jobs/RestoreLocalAttachmentJob.kt index d3bc056ce5..2ff521d0e7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/RestoreLocalAttachmentJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/RestoreLocalAttachmentJob.kt @@ -5,6 +5,7 @@ package org.thoughtcrime.securesms.jobs import android.net.Uri +import org.signal.core.models.backup.MediaName import org.signal.core.util.Base64 import org.signal.core.util.StreamUtil import org.signal.core.util.androidx.DocumentFileInfo @@ -21,7 +22,6 @@ import org.thoughtcrime.securesms.dependencies.AppDependencies import org.thoughtcrime.securesms.jobmanager.Job import org.thoughtcrime.securesms.jobs.protos.RestoreLocalAttachmentJobData import org.thoughtcrime.securesms.mms.MmsException -import org.whispersystems.signalservice.api.backup.MediaName import org.whispersystems.signalservice.api.crypto.AttachmentCipherInputStream import org.whispersystems.signalservice.api.crypto.AttachmentCipherInputStream.IntegrityCheck import org.whispersystems.signalservice.api.crypto.AttachmentCipherInputStream.StreamSupplier diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/RetrieveRemoteAnnouncementsJob.kt b/app/src/main/java/org/thoughtcrime/securesms/jobs/RetrieveRemoteAnnouncementsJob.kt index 453771d89e..d47cf8333c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/RetrieveRemoteAnnouncementsJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/RetrieveRemoteAnnouncementsJob.kt @@ -7,6 +7,7 @@ import com.fasterxml.jackson.databind.node.ObjectNode import org.json.JSONObject import org.signal.core.util.Hex import org.signal.core.util.ThreadUtil +import org.signal.core.util.UuidUtil import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.BuildConfig import org.thoughtcrime.securesms.conversationlist.model.ConversationFilter @@ -30,7 +31,6 @@ import org.thoughtcrime.securesms.releasechannel.ReleaseChannel import org.thoughtcrime.securesms.s3.S3 import org.thoughtcrime.securesms.transport.RetryLaterException import org.thoughtcrime.securesms.util.LocaleRemoteConfig -import org.whispersystems.signalservice.api.util.UuidUtil import org.whispersystems.signalservice.internal.ServiceResponse import java.io.IOException import java.lang.Integer.max diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/StorageRotateManifestJob.kt b/app/src/main/java/org/thoughtcrime/securesms/jobs/StorageRotateManifestJob.kt index 1ce507f021..3baf182d59 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/StorageRotateManifestJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/StorageRotateManifestJob.kt @@ -1,12 +1,12 @@ package org.thoughtcrime.securesms.jobs +import org.signal.core.models.storageservice.StorageKey import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.dependencies.AppDependencies import org.thoughtcrime.securesms.jobmanager.Job import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint import org.thoughtcrime.securesms.keyvalue.SignalStore import org.whispersystems.signalservice.api.storage.SignalStorageManifest -import org.whispersystems.signalservice.api.storage.StorageKey import org.whispersystems.signalservice.api.storage.StorageServiceRepository import java.util.concurrent.TimeUnit diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/StorageSyncJob.kt b/app/src/main/java/org/thoughtcrime/securesms/jobs/StorageSyncJob.kt index b1702723f0..faa0a3f68e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/StorageSyncJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/StorageSyncJob.kt @@ -2,6 +2,7 @@ package org.thoughtcrime.securesms.jobs import android.content.Context import com.annimon.stream.Stream +import org.signal.core.models.storageservice.StorageKey import org.signal.core.util.Base64 import org.signal.core.util.SqlUtil import org.signal.core.util.Stopwatch @@ -48,7 +49,6 @@ import org.whispersystems.signalservice.api.storage.SignalStorageManifest import org.whispersystems.signalservice.api.storage.SignalStorageRecord import org.whispersystems.signalservice.api.storage.SignalStoryDistributionListRecord import org.whispersystems.signalservice.api.storage.StorageId -import org.whispersystems.signalservice.api.storage.StorageKey import org.whispersystems.signalservice.api.storage.StorageServiceRepository import org.whispersystems.signalservice.api.storage.StorageServiceRepository.ManifestIfDifferentVersionResult import org.whispersystems.signalservice.api.storage.toSignalAccountRecord diff --git a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/AccountValues.kt b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/AccountValues.kt index 69cedd6d9c..6bd72d2f27 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/AccountValues.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/AccountValues.kt @@ -4,9 +4,14 @@ import android.annotation.SuppressLint import android.content.Context import android.content.SharedPreferences import android.preference.PreferenceManager +import org.signal.core.models.AccountEntropyPool +import org.signal.core.models.ServiceId.ACI +import org.signal.core.models.ServiceId.PNI import org.signal.core.util.Base64 +import org.signal.core.util.UuidUtil import org.signal.core.util.logging.Log import org.signal.core.util.nullIfBlank +import org.signal.core.util.toByteArray import org.signal.libsignal.protocol.IdentityKey import org.signal.libsignal.protocol.IdentityKeyPair import org.signal.libsignal.protocol.ecc.ECPrivateKey @@ -22,14 +27,9 @@ import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.service.KeyCachingService import org.thoughtcrime.securesms.util.TextSecurePreferences import org.thoughtcrime.securesms.util.Util -import org.whispersystems.signalservice.api.AccountEntropyPool -import org.whispersystems.signalservice.api.push.ServiceId.ACI -import org.whispersystems.signalservice.api.push.ServiceId.PNI import org.whispersystems.signalservice.api.push.ServiceIds import org.whispersystems.signalservice.api.push.SignalServiceAddress import org.whispersystems.signalservice.api.push.UsernameLinkComponents -import org.whispersystems.signalservice.api.util.UuidUtil -import org.whispersystems.signalservice.api.util.toByteArray import java.security.SecureRandom import java.util.concurrent.locks.ReentrantLock import kotlin.concurrent.withLock diff --git a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/BackupValues.kt b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/BackupValues.kt index c2a5e26de3..87056ada69 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/BackupValues.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/BackupValues.kt @@ -4,6 +4,8 @@ import com.fasterxml.jackson.annotation.JsonProperty import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow import okio.withLock +import org.signal.core.models.backup.MediaRootBackupKey +import org.signal.core.models.backup.MessageBackupKey import org.signal.core.util.LongSerializer import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.backup.DeletionState @@ -20,8 +22,6 @@ import org.thoughtcrime.securesms.util.Environment import org.thoughtcrime.securesms.util.RemoteConfig import org.whispersystems.signalservice.api.archive.ArchiveServiceCredential import org.whispersystems.signalservice.api.archive.GetArchiveCdnCredentialsResponse -import org.whispersystems.signalservice.api.backup.MediaRootBackupKey -import org.whispersystems.signalservice.api.backup.MessageBackupKey import org.whispersystems.signalservice.internal.util.JsonUtil import java.io.IOException import java.util.concurrent.locks.ReentrantLock diff --git a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/StorageServiceValues.kt b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/StorageServiceValues.kt index 9ee535982e..ba0b4aae3d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/StorageServiceValues.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/StorageServiceValues.kt @@ -1,8 +1,8 @@ package org.thoughtcrime.securesms.keyvalue +import org.signal.core.models.storageservice.StorageKey import org.signal.core.util.logging.Log import org.whispersystems.signalservice.api.storage.SignalStorageManifest -import org.whispersystems.signalservice.api.storage.StorageKey class StorageServiceValues internal constructor(store: KeyValueStore) : SignalStoreValues(store) { companion object { diff --git a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/SvrValues.kt b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/SvrValues.kt index aa2ca1a8e4..14eab9b407 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/SvrValues.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/SvrValues.kt @@ -1,8 +1,8 @@ package org.thoughtcrime.securesms.keyvalue +import org.signal.core.models.MasterKey import org.signal.core.util.StringStringSerializer import org.signal.core.util.logging.Log -import org.whispersystems.signalservice.api.kbs.MasterKey import org.whispersystems.signalservice.api.kbs.PinHashUtil.localPinHash class SvrValues internal constructor(store: KeyValueStore) : SignalStoreValues(store) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/linkdevice/LinkDeviceRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/linkdevice/LinkDeviceRepository.kt index f1c3110d32..9ee5256541 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/linkdevice/LinkDeviceRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/linkdevice/LinkDeviceRepository.kt @@ -1,6 +1,7 @@ package org.thoughtcrime.securesms.linkdevice import android.net.Uri +import org.signal.core.models.backup.MessageBackupKey import org.signal.core.util.Base64 import org.signal.core.util.Stopwatch import org.signal.core.util.isNotNullOrBlank @@ -25,7 +26,6 @@ import org.thoughtcrime.securesms.net.SignalNetwork import org.thoughtcrime.securesms.providers.BlobProvider import org.thoughtcrime.securesms.registration.secondary.DeviceNameCipher import org.whispersystems.signalservice.api.NetworkResult -import org.whispersystems.signalservice.api.backup.MessageBackupKey import org.whispersystems.signalservice.api.link.LinkedDeviceVerificationCodeResponse import org.whispersystems.signalservice.api.link.TransferArchiveError import org.whispersystems.signalservice.api.link.WaitForLinkedDeviceResponse diff --git a/app/src/main/java/org/thoughtcrime/securesms/linkdevice/LinkDeviceViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/linkdevice/LinkDeviceViewModel.kt index f4fd80d558..3c5078f136 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/linkdevice/LinkDeviceViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/linkdevice/LinkDeviceViewModel.kt @@ -10,6 +10,7 @@ import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch +import org.signal.core.models.backup.MessageBackupKey import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.dependencies.AppDependencies import org.thoughtcrime.securesms.jobs.LinkedDeviceInactiveCheckJob @@ -24,7 +25,6 @@ import org.thoughtcrime.securesms.logsubmit.SubmitDebugLogRepository import org.thoughtcrime.securesms.notifications.NotificationIds import org.thoughtcrime.securesms.util.ServiceUtil import org.thoughtcrime.securesms.util.Util -import org.whispersystems.signalservice.api.backup.MessageBackupKey import org.whispersystems.signalservice.api.link.TransferArchiveError import org.whispersystems.signalservice.api.link.WaitForLinkedDeviceResponse import kotlin.jvm.optionals.getOrNull diff --git a/app/src/main/java/org/thoughtcrime/securesms/messages/CallMessageProcessor.kt b/app/src/main/java/org/thoughtcrime/securesms/messages/CallMessageProcessor.kt index a0e4cfef12..fd935a4025 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messages/CallMessageProcessor.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/messages/CallMessageProcessor.kt @@ -1,5 +1,6 @@ package org.thoughtcrime.securesms.messages +import org.signal.core.models.ServiceId import org.signal.core.util.orNull import org.signal.ringrtc.CallId import org.thoughtcrime.securesms.database.model.IdentityRecord @@ -21,7 +22,6 @@ import org.thoughtcrime.securesms.service.webrtc.WebRtcData.ReceivedOfferMetadat import org.whispersystems.signalservice.api.crypto.EnvelopeMetadata import org.whispersystems.signalservice.api.messages.calls.HangupMessage import org.whispersystems.signalservice.api.messages.calls.OfferMessage -import org.whispersystems.signalservice.api.push.ServiceId import org.whispersystems.signalservice.internal.push.CallMessage import org.whispersystems.signalservice.internal.push.CallMessage.Offer import org.whispersystems.signalservice.internal.push.CallMessage.Opaque diff --git a/app/src/main/java/org/thoughtcrime/securesms/messages/DataMessageProcessor.kt b/app/src/main/java/org/thoughtcrime/securesms/messages/DataMessageProcessor.kt index 16b1f1f86c..d60ca82162 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messages/DataMessageProcessor.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/messages/DataMessageProcessor.kt @@ -4,8 +4,11 @@ import android.content.Context import android.text.TextUtils import com.mobilecoin.lib.exceptions.SerializationException import okio.ByteString.Companion.toByteString +import org.signal.core.models.ServiceId +import org.signal.core.models.ServiceId.ACI import org.signal.core.util.Base64 import org.signal.core.util.Hex +import org.signal.core.util.UuidUtil import org.signal.core.util.concurrent.SignalExecutors import org.signal.core.util.isNotEmpty import org.signal.core.util.logging.Log @@ -104,10 +107,7 @@ import org.thoughtcrime.securesms.util.TextSecurePreferences import org.thoughtcrime.securesms.util.isStory import org.whispersystems.signalservice.api.crypto.EnvelopeMetadata import org.whispersystems.signalservice.api.payments.Money -import org.whispersystems.signalservice.api.push.ServiceId -import org.whispersystems.signalservice.api.push.ServiceId.ACI import org.whispersystems.signalservice.api.util.Preconditions -import org.whispersystems.signalservice.api.util.UuidUtil import org.whispersystems.signalservice.internal.push.BodyRange import org.whispersystems.signalservice.internal.push.Content import org.whispersystems.signalservice.internal.push.DataMessage diff --git a/app/src/main/java/org/thoughtcrime/securesms/messages/EditMessageProcessor.kt b/app/src/main/java/org/thoughtcrime/securesms/messages/EditMessageProcessor.kt index 173e8b80c3..ba4ca917a8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messages/EditMessageProcessor.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/messages/EditMessageProcessor.kt @@ -1,6 +1,7 @@ package org.thoughtcrime.securesms.messages import android.content.Context +import org.signal.core.util.UuidUtil import org.signal.core.util.concurrent.SignalExecutors import org.signal.core.util.orNull import org.thoughtcrime.securesms.database.MessageTable.InsertResult @@ -31,7 +32,6 @@ import org.thoughtcrime.securesms.util.MessageConstraintsUtil import org.thoughtcrime.securesms.util.hasAudio import org.thoughtcrime.securesms.util.hasSharedContact import org.whispersystems.signalservice.api.crypto.EnvelopeMetadata -import org.whispersystems.signalservice.api.util.UuidUtil import org.whispersystems.signalservice.internal.push.Content import org.whispersystems.signalservice.internal.push.DataMessage import org.whispersystems.signalservice.internal.push.Envelope diff --git a/app/src/main/java/org/thoughtcrime/securesms/messages/GroupSendUtil.java b/app/src/main/java/org/thoughtcrime/securesms/messages/GroupSendUtil.java index 88d14e8c47..0790614acb 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messages/GroupSendUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/messages/GroupSendUtil.java @@ -51,7 +51,7 @@ import org.whispersystems.signalservice.api.messages.SignalServiceStoryMessageRe import org.whispersystems.signalservice.api.messages.SignalServiceTypingMessage; import org.whispersystems.signalservice.api.messages.calls.SignalServiceCallMessage; import org.whispersystems.signalservice.api.push.DistributionId; -import org.whispersystems.signalservice.api.push.ServiceId; +import org.signal.core.models.ServiceId; import org.whispersystems.signalservice.api.push.SignalServiceAddress; import org.whispersystems.signalservice.api.push.exceptions.NotFoundException; import org.whispersystems.signalservice.api.util.Preconditions; diff --git a/app/src/main/java/org/thoughtcrime/securesms/messages/IncomingMessageObserver.kt b/app/src/main/java/org/thoughtcrime/securesms/messages/IncomingMessageObserver.kt index 63d47ac3d7..18228aa25c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messages/IncomingMessageObserver.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/messages/IncomingMessageObserver.kt @@ -11,6 +11,7 @@ import androidx.core.app.NotificationCompat import io.reactivex.rxjava3.disposables.Disposable import io.reactivex.rxjava3.kotlin.subscribeBy import io.reactivex.rxjava3.schedulers.Schedulers +import org.signal.core.models.ServiceId import org.signal.core.util.concurrent.SignalExecutors import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.R @@ -35,7 +36,6 @@ import org.thoughtcrime.securesms.util.AlarmSleepTimer import org.thoughtcrime.securesms.util.AppForegroundObserver import org.thoughtcrime.securesms.util.SignalLocalMetrics import org.thoughtcrime.securesms.util.asChain -import org.whispersystems.signalservice.api.push.ServiceId import org.whispersystems.signalservice.api.util.SleepTimer import org.whispersystems.signalservice.api.util.UptimeSleepTimer import org.whispersystems.signalservice.api.websocket.SignalWebSocket diff --git a/app/src/main/java/org/thoughtcrime/securesms/messages/MessageContentProcessor.kt b/app/src/main/java/org/thoughtcrime/securesms/messages/MessageContentProcessor.kt index 968b5b5177..7fbad6d93d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messages/MessageContentProcessor.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/messages/MessageContentProcessor.kt @@ -1,6 +1,7 @@ package org.thoughtcrime.securesms.messages import android.content.Context +import org.signal.core.models.ServiceId import org.signal.core.util.logging.Log import org.signal.core.util.orNull import org.signal.core.util.toOptional @@ -48,7 +49,6 @@ import org.thoughtcrime.securesms.util.TextSecurePreferences import org.thoughtcrime.securesms.util.Util import org.whispersystems.signalservice.api.crypto.EnvelopeMetadata import org.whispersystems.signalservice.api.push.DistributionId -import org.whispersystems.signalservice.api.push.ServiceId import org.whispersystems.signalservice.api.push.SignalServiceAddress import org.whispersystems.signalservice.internal.push.CallMessage import org.whispersystems.signalservice.internal.push.Content diff --git a/app/src/main/java/org/thoughtcrime/securesms/messages/MessageDecryptor.kt b/app/src/main/java/org/thoughtcrime/securesms/messages/MessageDecryptor.kt index 00c778e737..3ba9264ffd 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messages/MessageDecryptor.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/messages/MessageDecryptor.kt @@ -10,7 +10,11 @@ import androidx.core.app.NotificationCompat import androidx.core.app.NotificationManagerCompat import androidx.core.content.ContextCompat import com.squareup.wire.internal.toUnmodifiableList +import org.signal.core.models.ServiceId +import org.signal.core.models.ServiceId.ACI +import org.signal.core.models.ServiceId.PNI import org.signal.core.util.PendingIntentFlags +import org.signal.core.util.UuidUtil import org.signal.core.util.isAbsent import org.signal.core.util.logging.Log import org.signal.core.util.logging.logW @@ -63,11 +67,7 @@ import org.whispersystems.signalservice.api.crypto.SignalGroupSessionBuilder import org.whispersystems.signalservice.api.crypto.SignalServiceCipher import org.whispersystems.signalservice.api.crypto.SignalServiceCipherResult import org.whispersystems.signalservice.api.messages.EnvelopeContentValidator -import org.whispersystems.signalservice.api.push.ServiceId -import org.whispersystems.signalservice.api.push.ServiceId.ACI -import org.whispersystems.signalservice.api.push.ServiceId.PNI import org.whispersystems.signalservice.api.push.SignalServiceAddress -import org.whispersystems.signalservice.api.util.UuidUtil import org.whispersystems.signalservice.internal.push.Content import org.whispersystems.signalservice.internal.push.Envelope import org.whispersystems.signalservice.internal.push.PniSignatureMessage diff --git a/app/src/main/java/org/thoughtcrime/securesms/messages/SignalServiceProtoUtil.kt b/app/src/main/java/org/thoughtcrime/securesms/messages/SignalServiceProtoUtil.kt index b41cc32c44..c9718bcb6e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messages/SignalServiceProtoUtil.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/messages/SignalServiceProtoUtil.kt @@ -3,6 +3,7 @@ package org.thoughtcrime.securesms.messages import com.squareup.wire.Message import okio.ByteString import okio.ByteString.Companion.toByteString +import org.signal.core.models.ServiceId import org.signal.core.util.isNotEmpty import org.signal.core.util.orNull import org.signal.libsignal.protocol.message.DecryptionErrorMessage @@ -20,7 +21,6 @@ import org.whispersystems.signalservice.api.InvalidMessageStructureException import org.whispersystems.signalservice.api.crypto.EnvelopeMetadata import org.whispersystems.signalservice.api.messages.SignalServiceAttachmentPointer import org.whispersystems.signalservice.api.payments.Money -import org.whispersystems.signalservice.api.push.ServiceId import org.whispersystems.signalservice.api.util.AttachmentPointerUtil import org.whispersystems.signalservice.internal.push.AttachmentPointer import org.whispersystems.signalservice.internal.push.DataMessage diff --git a/app/src/main/java/org/thoughtcrime/securesms/messages/StoryMessageProcessor.kt b/app/src/main/java/org/thoughtcrime/securesms/messages/StoryMessageProcessor.kt index 566bce0bf9..f196472041 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messages/StoryMessageProcessor.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/messages/StoryMessageProcessor.kt @@ -2,6 +2,7 @@ package org.thoughtcrime.securesms.messages import android.graphics.Color import org.signal.core.util.Base64 +import org.signal.core.util.UuidUtil import org.signal.core.util.orNull import org.thoughtcrime.securesms.database.MessageTable.InsertResult import org.thoughtcrime.securesms.database.MessageType @@ -21,7 +22,6 @@ import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.stories.Stories import org.thoughtcrime.securesms.util.RemoteConfig import org.whispersystems.signalservice.api.crypto.EnvelopeMetadata -import org.whispersystems.signalservice.api.util.UuidUtil import org.whispersystems.signalservice.internal.push.Content import org.whispersystems.signalservice.internal.push.Envelope import org.whispersystems.signalservice.internal.push.StoryMessage diff --git a/app/src/main/java/org/thoughtcrime/securesms/messages/SyncMessageProcessor.kt b/app/src/main/java/org/thoughtcrime/securesms/messages/SyncMessageProcessor.kt index f8c3ce0adf..08901a7881 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messages/SyncMessageProcessor.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/messages/SyncMessageProcessor.kt @@ -2,8 +2,14 @@ package org.thoughtcrime.securesms.messages import android.content.Context import com.mobilecoin.lib.exceptions.SerializationException +import org.signal.core.models.AccountEntropyPool +import org.signal.core.models.ServiceId +import org.signal.core.models.ServiceId.ACI +import org.signal.core.models.ServiceId.PNI +import org.signal.core.models.backup.MediaRootBackupKey import org.signal.core.util.Base64 import org.signal.core.util.Hex +import org.signal.core.util.UuidUtil import org.signal.core.util.isNotEmpty import org.signal.core.util.orNull import org.signal.libsignal.protocol.IdentityKey @@ -106,16 +112,10 @@ import org.thoughtcrime.securesms.util.RemoteConfig import org.thoughtcrime.securesms.util.SignalE164Util import org.thoughtcrime.securesms.util.TextSecurePreferences import org.thoughtcrime.securesms.util.Util -import org.whispersystems.signalservice.api.AccountEntropyPool -import org.whispersystems.signalservice.api.backup.MediaRootBackupKey import org.whispersystems.signalservice.api.crypto.EnvelopeMetadata import org.whispersystems.signalservice.api.messages.SignalServiceAttachmentPointer import org.whispersystems.signalservice.api.push.DistributionId -import org.whispersystems.signalservice.api.push.ServiceId -import org.whispersystems.signalservice.api.push.ServiceId.ACI -import org.whispersystems.signalservice.api.push.ServiceId.PNI import org.whispersystems.signalservice.api.push.SignalServiceAddress -import org.whispersystems.signalservice.api.util.UuidUtil import org.whispersystems.signalservice.internal.push.AddressableMessage import org.whispersystems.signalservice.internal.push.Content import org.whispersystems.signalservice.internal.push.ConversationIdentifier diff --git a/app/src/main/java/org/thoughtcrime/securesms/messages/protocol/BufferedIdentityKeyStore.kt b/app/src/main/java/org/thoughtcrime/securesms/messages/protocol/BufferedIdentityKeyStore.kt index 9e594b3b82..5ba8d1bb48 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messages/protocol/BufferedIdentityKeyStore.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/messages/protocol/BufferedIdentityKeyStore.kt @@ -1,5 +1,6 @@ package org.thoughtcrime.securesms.messages.protocol +import org.signal.core.models.ServiceId import org.signal.libsignal.protocol.IdentityKey import org.signal.libsignal.protocol.IdentityKeyPair import org.signal.libsignal.protocol.SignalProtocolAddress @@ -7,7 +8,6 @@ import org.signal.libsignal.protocol.state.IdentityKeyStore import org.signal.libsignal.protocol.state.IdentityKeyStore.IdentityChange import org.thoughtcrime.securesms.database.SignalDatabase import org.whispersystems.signalservice.api.SignalServiceAccountDataStore -import org.whispersystems.signalservice.api.push.ServiceId /** * An in-memory identity key store that is intended to be used temporarily while decrypting messages. diff --git a/app/src/main/java/org/thoughtcrime/securesms/messages/protocol/BufferedKyberPreKeyStore.kt b/app/src/main/java/org/thoughtcrime/securesms/messages/protocol/BufferedKyberPreKeyStore.kt index 80b7f31373..a2fc43a65c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messages/protocol/BufferedKyberPreKeyStore.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/messages/protocol/BufferedKyberPreKeyStore.kt @@ -5,6 +5,7 @@ package org.thoughtcrime.securesms.messages.protocol +import org.signal.core.models.ServiceId import org.signal.libsignal.protocol.InvalidKeyIdException import org.signal.libsignal.protocol.ReusedBaseKeyException import org.signal.libsignal.protocol.ecc.ECPublicKey @@ -13,7 +14,6 @@ import org.thoughtcrime.securesms.database.KyberPreKeyTable.KyberPreKey import org.thoughtcrime.securesms.database.SignalDatabase import org.whispersystems.signalservice.api.SignalServiceAccountDataStore import org.whispersystems.signalservice.api.SignalServiceKyberPreKeyStore -import org.whispersystems.signalservice.api.push.ServiceId /** * An in-memory kyber prekey store that is intended to be used temporarily while decrypting messages. diff --git a/app/src/main/java/org/thoughtcrime/securesms/messages/protocol/BufferedOneTimePreKeyStore.kt b/app/src/main/java/org/thoughtcrime/securesms/messages/protocol/BufferedOneTimePreKeyStore.kt index 566969e675..e8d39c8933 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messages/protocol/BufferedOneTimePreKeyStore.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/messages/protocol/BufferedOneTimePreKeyStore.kt @@ -1,11 +1,11 @@ package org.thoughtcrime.securesms.messages.protocol +import org.signal.core.models.ServiceId import org.signal.libsignal.protocol.InvalidKeyIdException import org.signal.libsignal.protocol.state.PreKeyRecord import org.signal.libsignal.protocol.state.PreKeyStore import org.thoughtcrime.securesms.database.SignalDatabase import org.whispersystems.signalservice.api.SignalServiceAccountDataStore -import org.whispersystems.signalservice.api.push.ServiceId /** * An in-memory one-time prekey store that is intended to be used temporarily while decrypting messages. diff --git a/app/src/main/java/org/thoughtcrime/securesms/messages/protocol/BufferedProtocolStore.kt b/app/src/main/java/org/thoughtcrime/securesms/messages/protocol/BufferedProtocolStore.kt index 50e29fb827..d901c14bfa 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messages/protocol/BufferedProtocolStore.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/messages/protocol/BufferedProtocolStore.kt @@ -1,8 +1,8 @@ package org.thoughtcrime.securesms.messages.protocol +import org.signal.core.models.ServiceId import org.thoughtcrime.securesms.dependencies.AppDependencies import org.thoughtcrime.securesms.keyvalue.SignalStore -import org.whispersystems.signalservice.api.push.ServiceId /** * The entry point for creating and retrieving buffered protocol stores. diff --git a/app/src/main/java/org/thoughtcrime/securesms/messages/protocol/BufferedSessionStore.kt b/app/src/main/java/org/thoughtcrime/securesms/messages/protocol/BufferedSessionStore.kt index 377c63f973..9a1978e0fc 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messages/protocol/BufferedSessionStore.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/messages/protocol/BufferedSessionStore.kt @@ -1,12 +1,12 @@ package org.thoughtcrime.securesms.messages.protocol +import org.signal.core.models.ServiceId import org.signal.libsignal.protocol.NoSessionException import org.signal.libsignal.protocol.SignalProtocolAddress import org.signal.libsignal.protocol.state.SessionRecord import org.thoughtcrime.securesms.database.SignalDatabase import org.whispersystems.signalservice.api.SignalServiceAccountDataStore import org.whispersystems.signalservice.api.SignalServiceSessionStore -import org.whispersystems.signalservice.api.push.ServiceId import kotlin.jvm.Throws /** diff --git a/app/src/main/java/org/thoughtcrime/securesms/messages/protocol/BufferedSignalServiceAccountDataStore.kt b/app/src/main/java/org/thoughtcrime/securesms/messages/protocol/BufferedSignalServiceAccountDataStore.kt index d09def8254..4e17f814b3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messages/protocol/BufferedSignalServiceAccountDataStore.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/messages/protocol/BufferedSignalServiceAccountDataStore.kt @@ -1,5 +1,6 @@ package org.thoughtcrime.securesms.messages.protocol +import org.signal.core.models.ServiceId import org.signal.core.util.withinTransaction import org.signal.libsignal.protocol.IdentityKey import org.signal.libsignal.protocol.IdentityKeyPair @@ -16,7 +17,6 @@ import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.keyvalue.SignalStore import org.whispersystems.signalservice.api.SignalServiceAccountDataStore import org.whispersystems.signalservice.api.push.DistributionId -import org.whispersystems.signalservice.api.push.ServiceId import java.util.UUID /** diff --git a/app/src/main/java/org/thoughtcrime/securesms/messages/protocol/BufferedSignedPreKeyStore.kt b/app/src/main/java/org/thoughtcrime/securesms/messages/protocol/BufferedSignedPreKeyStore.kt index 11ef5ce026..4be8a4266f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messages/protocol/BufferedSignedPreKeyStore.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/messages/protocol/BufferedSignedPreKeyStore.kt @@ -1,11 +1,11 @@ package org.thoughtcrime.securesms.messages.protocol +import org.signal.core.models.ServiceId import org.signal.libsignal.protocol.InvalidKeyIdException import org.signal.libsignal.protocol.state.SignedPreKeyRecord import org.signal.libsignal.protocol.state.SignedPreKeyStore import org.thoughtcrime.securesms.database.SignalDatabase import org.whispersystems.signalservice.api.SignalServiceAccountDataStore -import org.whispersystems.signalservice.api.push.ServiceId /** * An in-memory signed prekey store that is intended to be used temporarily while decrypting messages. diff --git a/app/src/main/java/org/thoughtcrime/securesms/migrations/FixChangeNumberErrorMigrationJob.kt b/app/src/main/java/org/thoughtcrime/securesms/migrations/FixChangeNumberErrorMigrationJob.kt index 15036eeaee..42a603b8d1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/migrations/FixChangeNumberErrorMigrationJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/FixChangeNumberErrorMigrationJob.kt @@ -1,12 +1,12 @@ package org.thoughtcrime.securesms.migrations +import org.signal.core.models.ServiceId import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.components.settings.app.changenumber.ChangeNumberRepository import org.thoughtcrime.securesms.jobmanager.Job import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.net.SignalNetwork import org.whispersystems.signalservice.api.NetworkResult -import org.whispersystems.signalservice.api.push.ServiceId import org.whispersystems.signalservice.internal.push.WhoAmIResponse import java.io.IOException diff --git a/app/src/main/java/org/thoughtcrime/securesms/migrations/PniAccountInitializationMigrationJob.java b/app/src/main/java/org/thoughtcrime/securesms/migrations/PniAccountInitializationMigrationJob.java index a15d5e7993..7cba7626dc 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/migrations/PniAccountInitializationMigrationJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/PniAccountInitializationMigrationJob.java @@ -17,7 +17,7 @@ import org.thoughtcrime.securesms.recipients.Recipient; import org.whispersystems.signalservice.api.NetworkResultUtil; import org.whispersystems.signalservice.api.SignalServiceAccountDataStore; import org.whispersystems.signalservice.api.account.PreKeyUpload; -import org.whispersystems.signalservice.api.push.ServiceId.PNI; +import org.signal.core.models.ServiceId.PNI; import org.whispersystems.signalservice.api.push.ServiceIdType; import java.io.IOException; diff --git a/app/src/main/java/org/thoughtcrime/securesms/migrations/PniMigrationJob.java b/app/src/main/java/org/thoughtcrime/securesms/migrations/PniMigrationJob.java index b392168f76..acb9394309 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/migrations/PniMigrationJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/PniMigrationJob.java @@ -9,7 +9,7 @@ import org.thoughtcrime.securesms.dependencies.AppDependencies; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.keyvalue.SignalStore; -import org.whispersystems.signalservice.api.push.ServiceId.PNI; +import org.signal.core.models.ServiceId.PNI; import java.io.IOException; diff --git a/app/src/main/java/org/thoughtcrime/securesms/migrations/UuidMigrationJob.java b/app/src/main/java/org/thoughtcrime/securesms/migrations/UuidMigrationJob.java index 8658606882..047f7e9967 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/migrations/UuidMigrationJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/UuidMigrationJob.java @@ -14,7 +14,7 @@ import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; -import org.whispersystems.signalservice.api.push.ServiceId.ACI; +import org.signal.core.models.ServiceId.ACI; import java.io.IOException; import java.util.Objects; diff --git a/app/src/main/java/org/thoughtcrime/securesms/mms/MessageGroupContext.java b/app/src/main/java/org/thoughtcrime/securesms/mms/MessageGroupContext.java index ec92f1b4e7..d5cb9e1f97 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mms/MessageGroupContext.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mms/MessageGroupContext.java @@ -5,7 +5,6 @@ import androidx.annotation.Nullable; import com.annimon.stream.Stream; -import org.signal.core.util.E164Util; import org.signal.libsignal.zkgroup.InvalidInputException; import org.signal.libsignal.zkgroup.groups.GroupMasterKey; import org.signal.storageservice.protos.groups.local.DecryptedGroup; @@ -19,8 +18,8 @@ import org.thoughtcrime.securesms.recipients.RecipientId; import org.signal.core.util.Base64; import org.thoughtcrime.securesms.util.SignalE164Util; import org.whispersystems.signalservice.api.groupsv2.DecryptedGroupUtil; -import org.whispersystems.signalservice.api.push.ServiceId; -import org.whispersystems.signalservice.api.push.ServiceId.ACI; +import org.signal.core.models.ServiceId; +import org.signal.core.models.ServiceId.ACI; import org.whispersystems.signalservice.internal.push.GroupContext; import org.whispersystems.signalservice.internal.push.GroupContextV2; diff --git a/app/src/main/java/org/thoughtcrime/securesms/notifications/profiles/NotificationProfileId.kt b/app/src/main/java/org/thoughtcrime/securesms/notifications/profiles/NotificationProfileId.kt index 2888f6cb60..4894106bb7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/notifications/profiles/NotificationProfileId.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/notifications/profiles/NotificationProfileId.kt @@ -6,7 +6,7 @@ package org.thoughtcrime.securesms.notifications.profiles import org.signal.core.util.DatabaseId -import org.whispersystems.signalservice.api.util.UuidUtil +import org.signal.core.util.UuidUtil import java.util.UUID /** diff --git a/app/src/main/java/org/thoughtcrime/securesms/payments/ReconstructedPayment.java b/app/src/main/java/org/thoughtcrime/securesms/payments/ReconstructedPayment.java index e3d74461e1..f38a4a7368 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/payments/ReconstructedPayment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/payments/ReconstructedPayment.java @@ -5,7 +5,7 @@ import androidx.annotation.Nullable; import org.thoughtcrime.securesms.payments.proto.PaymentMetaData; import org.whispersystems.signalservice.api.payments.Money; -import org.whispersystems.signalservice.api.util.UuidUtil; +import org.signal.core.util.UuidUtil; import java.util.UUID; diff --git a/app/src/main/java/org/thoughtcrime/securesms/pin/SvrRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/pin/SvrRepository.kt index f11e835ad4..d47131b1e1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/pin/SvrRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/pin/SvrRepository.kt @@ -10,6 +10,8 @@ import androidx.annotation.VisibleForTesting import androidx.annotation.WorkerThread import kotlinx.coroutines.runBlocking import okio.ByteString.Companion.toByteString +import org.signal.core.models.AccountEntropyPool +import org.signal.core.models.MasterKey import org.signal.core.util.Stopwatch import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.BuildConfig @@ -27,10 +29,8 @@ import org.thoughtcrime.securesms.megaphone.Megaphones import org.thoughtcrime.securesms.net.SignalNetwork import org.thoughtcrime.securesms.registration.ui.restore.StorageServiceRestore import org.thoughtcrime.securesms.registration.viewmodel.SvrAuthCredentialSet -import org.whispersystems.signalservice.api.AccountEntropyPool import org.whispersystems.signalservice.api.NetworkResultUtil import org.whispersystems.signalservice.api.SvrNoDataException -import org.whispersystems.signalservice.api.kbs.MasterKey import org.whispersystems.signalservice.api.svr.SecureValueRecovery import org.whispersystems.signalservice.api.svr.SecureValueRecovery.BackupResponse import org.whispersystems.signalservice.api.svr.SecureValueRecovery.RestoreResponse diff --git a/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/UsernameRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/UsernameRepository.kt index ff648e7eac..49bafa2a30 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/UsernameRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/UsernameRepository.kt @@ -3,11 +3,14 @@ package org.thoughtcrime.securesms.profiles.manage import androidx.annotation.WorkerThread import io.reactivex.rxjava3.core.Single import io.reactivex.rxjava3.schedulers.Schedulers +import org.signal.core.models.ServiceId.ACI import org.signal.core.util.Base64 import org.signal.core.util.Result import org.signal.core.util.Result.Companion.failure import org.signal.core.util.Result.Companion.success +import org.signal.core.util.UuidUtil import org.signal.core.util.logging.Log +import org.signal.core.util.toByteArray import org.signal.libsignal.net.RequestResult import org.signal.libsignal.usernames.BaseUsernameException import org.signal.libsignal.usernames.Username @@ -23,11 +26,8 @@ import org.thoughtcrime.securesms.util.NetworkUtil import org.thoughtcrime.securesms.util.UsernameUtil import org.whispersystems.signalservice.api.NetworkResult import org.whispersystems.signalservice.api.SignalServiceAccountManager -import org.whispersystems.signalservice.api.push.ServiceId.ACI import org.whispersystems.signalservice.api.push.UsernameLinkComponents import org.whispersystems.signalservice.api.util.Usernames -import org.whispersystems.signalservice.api.util.UuidUtil -import org.whispersystems.signalservice.api.util.toByteArray import java.util.UUID /** diff --git a/app/src/main/java/org/thoughtcrime/securesms/push/AccountManagerFactory.java b/app/src/main/java/org/thoughtcrime/securesms/push/AccountManagerFactory.java index a78fc5b7c7..de9370fed6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/push/AccountManagerFactory.java +++ b/app/src/main/java/org/thoughtcrime/securesms/push/AccountManagerFactory.java @@ -13,8 +13,6 @@ import org.thoughtcrime.securesms.BuildConfig; import org.thoughtcrime.securesms.dependencies.AppDependencies; import org.thoughtcrime.securesms.util.RemoteConfig; import org.whispersystems.signalservice.api.SignalServiceAccountManager; -import org.whispersystems.signalservice.api.push.ServiceId.ACI; -import org.whispersystems.signalservice.api.push.ServiceId.PNI; public class AccountManagerFactory { diff --git a/app/src/main/java/org/thoughtcrime/securesms/recipients/LiveRecipientCache.java b/app/src/main/java/org/thoughtcrime/securesms/recipients/LiveRecipientCache.java index 664db4353d..55e216b623 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/recipients/LiveRecipientCache.java +++ b/app/src/main/java/org/thoughtcrime/securesms/recipients/LiveRecipientCache.java @@ -21,7 +21,7 @@ import org.signal.core.util.CursorUtil; import org.thoughtcrime.securesms.util.LRUCache; import org.signal.core.util.Stopwatch; import org.thoughtcrime.securesms.util.concurrent.FilteredExecutor; -import org.whispersystems.signalservice.api.push.ServiceId.ACI; +import org.signal.core.models.ServiceId.ACI; import java.util.ArrayList; import java.util.Collection; diff --git a/app/src/main/java/org/thoughtcrime/securesms/recipients/Recipient.kt b/app/src/main/java/org/thoughtcrime/securesms/recipients/Recipient.kt index bf739b3e47..38eb61d496 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/recipients/Recipient.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/recipients/Recipient.kt @@ -7,7 +7,11 @@ import androidx.annotation.WorkerThread import io.reactivex.rxjava3.core.Observable import io.reactivex.rxjava3.schedulers.Schedulers import kotlinx.collections.immutable.toImmutableList +import org.signal.core.models.ServiceId +import org.signal.core.models.ServiceId.ACI +import org.signal.core.models.ServiceId.PNI import org.signal.core.util.BidiUtil +import org.signal.core.util.UuidUtil import org.signal.core.util.isNotNullOrBlank import org.signal.core.util.logging.Log import org.signal.core.util.nullIfBlank @@ -46,12 +50,8 @@ import org.thoughtcrime.securesms.util.SignalE164Util import org.thoughtcrime.securesms.util.UsernameUtil.isValidUsernameForSearch import org.thoughtcrime.securesms.util.Util import org.thoughtcrime.securesms.wallpaper.ChatWallpaper -import org.whispersystems.signalservice.api.push.ServiceId -import org.whispersystems.signalservice.api.push.ServiceId.ACI -import org.whispersystems.signalservice.api.push.ServiceId.PNI import org.whispersystems.signalservice.api.push.SignalServiceAddress import org.whispersystems.signalservice.api.util.OptionalUtil -import org.whispersystems.signalservice.api.util.UuidUtil import java.util.LinkedList import java.util.Objects import java.util.Optional diff --git a/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientId.kt b/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientId.kt index b45c66a773..1b64c2106c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientId.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientId.kt @@ -12,13 +12,13 @@ import kotlinx.parcelize.IgnoredOnParcel import kotlinx.parcelize.Parcelize import kotlinx.serialization.Serializable import kotlinx.serialization.Transient +import org.signal.core.models.ServiceId import org.signal.core.util.DatabaseId import org.signal.core.util.LongSerializer import org.signal.core.util.logging.Log import org.signal.core.util.orNull import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.groups.GroupId -import org.whispersystems.signalservice.api.push.ServiceId import org.whispersystems.signalservice.api.push.SignalServiceAddress import java.util.regex.Pattern diff --git a/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientIdCache.java b/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientIdCache.java index 341eb830b5..461de5c85c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientIdCache.java +++ b/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientIdCache.java @@ -5,7 +5,7 @@ import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.groups.GroupId; -import org.whispersystems.signalservice.api.push.ServiceId; +import org.signal.core.models.ServiceId; import java.util.LinkedHashMap; import java.util.Map; diff --git a/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientUtil.java b/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientUtil.java index 1e6d47b4fd..5b2337a235 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientUtil.java @@ -28,7 +28,7 @@ import org.thoughtcrime.securesms.mms.MmsException; import org.thoughtcrime.securesms.mms.OutgoingMessage; import org.thoughtcrime.securesms.sms.MessageSender; import org.thoughtcrime.securesms.storage.StorageSyncHelper; -import org.whispersystems.signalservice.api.push.ServiceId; +import org.signal.core.models.ServiceId; import org.whispersystems.signalservice.api.push.SignalServiceAddress; import org.whispersystems.signalservice.api.push.exceptions.NotFoundException; diff --git a/app/src/main/java/org/thoughtcrime/securesms/registration/data/AccountRegistrationResult.kt b/app/src/main/java/org/thoughtcrime/securesms/registration/data/AccountRegistrationResult.kt index 4a1e914d61..40f4b454a1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/registration/data/AccountRegistrationResult.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/registration/data/AccountRegistrationResult.kt @@ -5,8 +5,8 @@ package org.thoughtcrime.securesms.registration.data +import org.signal.core.models.MasterKey import org.whispersystems.signalservice.api.account.PreKeyCollection -import org.whispersystems.signalservice.api.kbs.MasterKey data class AccountRegistrationResult( val uuid: String, diff --git a/app/src/main/java/org/thoughtcrime/securesms/registration/data/RegistrationRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/registration/data/RegistrationRepository.kt index 1796ceedf8..71c5d88da9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/registration/data/RegistrationRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/registration/data/RegistrationRepository.kt @@ -19,6 +19,12 @@ import kotlinx.coroutines.withContext import kotlinx.coroutines.withTimeoutOrNull import org.greenrobot.eventbus.EventBus import org.greenrobot.eventbus.Subscribe +import org.signal.core.models.AccountEntropyPool +import org.signal.core.models.MasterKey +import org.signal.core.models.ServiceId +import org.signal.core.models.ServiceId.ACI +import org.signal.core.models.ServiceId.PNI +import org.signal.core.models.backup.MediaRootBackupKey import org.signal.core.util.Base64 import org.signal.core.util.logging.Log import org.signal.libsignal.protocol.IdentityKeyPair @@ -67,19 +73,13 @@ import org.thoughtcrime.securesms.registration.viewmodel.SvrAuthCredentialSet import org.thoughtcrime.securesms.service.DirectoryRefreshListener import org.thoughtcrime.securesms.service.RotateSignedPreKeyListener import org.thoughtcrime.securesms.util.TextSecurePreferences -import org.whispersystems.signalservice.api.AccountEntropyPool import org.whispersystems.signalservice.api.NetworkResult import org.whispersystems.signalservice.api.SvrNoDataException import org.whispersystems.signalservice.api.account.AccountAttributes import org.whispersystems.signalservice.api.account.PreKeyCollection -import org.whispersystems.signalservice.api.backup.MediaRootBackupKey import org.whispersystems.signalservice.api.crypto.UnidentifiedAccess -import org.whispersystems.signalservice.api.kbs.MasterKey import org.whispersystems.signalservice.api.kbs.PinHashUtil import org.whispersystems.signalservice.api.link.TransferArchiveResponse -import org.whispersystems.signalservice.api.push.ServiceId -import org.whispersystems.signalservice.api.push.ServiceId.ACI -import org.whispersystems.signalservice.api.push.ServiceId.PNI import org.whispersystems.signalservice.api.push.SignalServiceAddress import org.whispersystems.signalservice.api.registration.RegistrationApi import org.whispersystems.signalservice.api.svr.Svr3Credentials diff --git a/app/src/main/java/org/thoughtcrime/securesms/registration/ui/RegistrationViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/registration/ui/RegistrationViewModel.kt index cc23ee78ab..e3798c0b58 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/registration/ui/RegistrationViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/registration/ui/RegistrationViewModel.kt @@ -23,6 +23,9 @@ import kotlinx.coroutines.flow.update import kotlinx.coroutines.flow.updateAndGet import kotlinx.coroutines.launch import kotlinx.coroutines.withContext +import org.signal.core.models.AccountEntropyPool +import org.signal.core.models.MasterKey +import org.signal.core.models.backup.MessageBackupKey import org.signal.core.util.Base64 import org.signal.core.util.isNotNullOrBlank import org.signal.core.util.logging.Log @@ -83,11 +86,8 @@ import org.thoughtcrime.securesms.util.RemoteConfig import org.thoughtcrime.securesms.util.TextSecurePreferences import org.thoughtcrime.securesms.util.Util import org.thoughtcrime.securesms.util.dualsim.MccMncProducer -import org.whispersystems.signalservice.api.AccountEntropyPool import org.whispersystems.signalservice.api.NetworkResult import org.whispersystems.signalservice.api.SvrNoDataException -import org.whispersystems.signalservice.api.backup.MessageBackupKey -import org.whispersystems.signalservice.api.kbs.MasterKey import org.whispersystems.signalservice.api.messages.multidevice.RequestMessage import org.whispersystems.signalservice.api.messages.multidevice.SignalServiceSyncMessage import org.whispersystems.signalservice.api.svr.Svr3Credentials diff --git a/app/src/main/java/org/thoughtcrime/securesms/registration/ui/restore/AccountEntropyPoolVerification.kt b/app/src/main/java/org/thoughtcrime/securesms/registration/ui/restore/AccountEntropyPoolVerification.kt index cb33cda979..cd3a0d4aaa 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/registration/ui/restore/AccountEntropyPoolVerification.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/registration/ui/restore/AccountEntropyPoolVerification.kt @@ -5,8 +5,8 @@ package org.thoughtcrime.securesms.registration.ui.restore +import org.signal.core.models.AccountEntropyPool import org.thoughtcrime.securesms.restore.enterbackupkey.PostRegistrationEnterBackupKeyViewModel -import org.whispersystems.signalservice.api.AccountEntropyPool /** * Help verify a potential string could be an [AccountEntropyPool] string. Intended only diff --git a/app/src/main/java/org/thoughtcrime/securesms/registration/ui/restore/EnterBackupKeyScreen.kt b/app/src/main/java/org/thoughtcrime/securesms/registration/ui/restore/EnterBackupKeyScreen.kt index cfbd771afa..ac7343b197 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/registration/ui/restore/EnterBackupKeyScreen.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/registration/ui/restore/EnterBackupKeyScreen.kt @@ -49,6 +49,7 @@ import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import kotlinx.coroutines.launch +import org.signal.core.models.AccountEntropyPool import org.signal.core.ui.compose.BottomSheets import org.signal.core.ui.compose.Buttons import org.signal.core.ui.compose.DayNightPreviews @@ -58,7 +59,6 @@ import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.backup.v2.ui.BackupsIconColors import org.thoughtcrime.securesms.fonts.MonoTypeface import org.thoughtcrime.securesms.registration.ui.shared.RegistrationScreen -import org.whispersystems.signalservice.api.AccountEntropyPool /** * Shared screen infrastructure for entering an [AccountEntropyPool]. diff --git a/app/src/main/java/org/thoughtcrime/securesms/registration/ui/restore/EnterBackupKeyViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/registration/ui/restore/EnterBackupKeyViewModel.kt index 4ca4688ff5..3ef8b5c620 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/registration/ui/restore/EnterBackupKeyViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/registration/ui/restore/EnterBackupKeyViewModel.kt @@ -12,10 +12,10 @@ import androidx.lifecycle.ViewModel import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.update +import org.signal.core.models.AccountEntropyPool import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.registration.data.network.RegisterAccountResult -import org.whispersystems.signalservice.api.AccountEntropyPool class EnterBackupKeyViewModel : ViewModel() { diff --git a/app/src/main/java/org/thoughtcrime/securesms/restore/enterbackupkey/PostRegistrationEnterBackupKeyFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/restore/enterbackupkey/PostRegistrationEnterBackupKeyFragment.kt index 7b7150b32d..bba1ed890b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/restore/enterbackupkey/PostRegistrationEnterBackupKeyFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/restore/enterbackupkey/PostRegistrationEnterBackupKeyFragment.kt @@ -20,6 +20,7 @@ import kotlinx.coroutines.flow.filter import kotlinx.coroutines.flow.firstOrNull import kotlinx.coroutines.flow.map import kotlinx.coroutines.launch +import org.signal.core.models.AccountEntropyPool import org.signal.core.ui.compose.Dialogs import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.R @@ -27,7 +28,6 @@ import org.thoughtcrime.securesms.compose.ComposeFragment import org.thoughtcrime.securesms.registration.ui.restore.EnterBackupKeyScreen import org.thoughtcrime.securesms.util.CommunicationActions import org.thoughtcrime.securesms.util.navigation.safeNavigate -import org.whispersystems.signalservice.api.AccountEntropyPool /** * Collect user's [AccountEntropyPool] string for use in a post-registration manual remote backup restore flow. diff --git a/app/src/main/java/org/thoughtcrime/securesms/restore/enterbackupkey/PostRegistrationEnterBackupKeyViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/restore/enterbackupkey/PostRegistrationEnterBackupKeyViewModel.kt index 23700c8adc..1c30dbee97 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/restore/enterbackupkey/PostRegistrationEnterBackupKeyViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/restore/enterbackupkey/PostRegistrationEnterBackupKeyViewModel.kt @@ -15,13 +15,13 @@ import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch +import org.signal.core.models.AccountEntropyPool import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.backup.v2.BackupRepository import org.thoughtcrime.securesms.backup.v2.RestoreTimestampResult import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.registration.ui.restore.AccountEntropyPoolVerification import org.thoughtcrime.securesms.registration.ui.restore.AccountEntropyPoolVerification.AEPValidationError -import org.whispersystems.signalservice.api.AccountEntropyPool class PostRegistrationEnterBackupKeyViewModel : ViewModel() { companion object { diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/CallLinkConnectedActionProcessor.kt b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/CallLinkConnectedActionProcessor.kt index c0bef53554..8ce7f31406 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/CallLinkConnectedActionProcessor.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/CallLinkConnectedActionProcessor.kt @@ -5,6 +5,7 @@ package org.thoughtcrime.securesms.service.webrtc +import org.signal.core.models.ServiceId import org.signal.core.util.logging.Log import org.signal.ringrtc.CallException import org.signal.ringrtc.CallManager @@ -19,7 +20,6 @@ import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.recipients.RecipientId import org.thoughtcrime.securesms.service.webrtc.links.CallLinkRoomId import org.thoughtcrime.securesms.service.webrtc.state.WebRtcServiceState -import org.whispersystems.signalservice.api.push.ServiceId /** * Process actions for when the call link has at least once been connected and joined. diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/GroupActionProcessor.java b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/GroupActionProcessor.java index 7f787dfad1..33153150dc 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/GroupActionProcessor.java +++ b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/GroupActionProcessor.java @@ -24,7 +24,7 @@ import org.thoughtcrime.securesms.service.webrtc.state.WebRtcServiceStateBuilder import org.webrtc.PeerConnection; import org.webrtc.VideoTrack; import org.whispersystems.signalservice.api.messages.calls.OfferMessage; -import org.whispersystems.signalservice.api.push.ServiceId.ACI; +import org.signal.core.models.ServiceId.ACI; import java.util.ArrayList; import java.util.Collection; diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/GroupCallRingCheckInfo.kt b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/GroupCallRingCheckInfo.kt index 4be4d74c4a..f4590c8935 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/GroupCallRingCheckInfo.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/GroupCallRingCheckInfo.kt @@ -1,9 +1,9 @@ package org.thoughtcrime.securesms.service.webrtc +import org.signal.core.models.ServiceId.ACI import org.signal.ringrtc.CallManager import org.thoughtcrime.securesms.groups.GroupId import org.thoughtcrime.securesms.recipients.RecipientId -import org.whispersystems.signalservice.api.push.ServiceId.ACI data class GroupCallRingCheckInfo( val recipientId: RecipientId, diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/GroupPreJoinActionProcessor.java b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/GroupPreJoinActionProcessor.java index b91c6e95ed..1e6a9cce3e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/GroupPreJoinActionProcessor.java +++ b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/GroupPreJoinActionProcessor.java @@ -20,7 +20,7 @@ import org.thoughtcrime.securesms.service.webrtc.state.WebRtcServiceState; import org.thoughtcrime.securesms.service.webrtc.state.WebRtcServiceStateBuilder; import org.thoughtcrime.securesms.util.NetworkUtil; import org.whispersystems.signalservice.api.messages.calls.OfferMessage; -import org.whispersystems.signalservice.api.push.ServiceId.ACI; +import org.signal.core.models.ServiceId.ACI; import java.util.List; diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/IdleActionProcessor.java b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/IdleActionProcessor.java index 6b5232250f..1ee9bd4b1d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/IdleActionProcessor.java +++ b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/IdleActionProcessor.java @@ -17,7 +17,7 @@ import org.thoughtcrime.securesms.ringrtc.RemotePeer; import org.thoughtcrime.securesms.service.webrtc.state.WebRtcServiceState; import org.thoughtcrime.securesms.util.RemoteConfig; import org.whispersystems.signalservice.api.messages.calls.OfferMessage; -import org.whispersystems.signalservice.api.push.ServiceId.ACI; +import org.signal.core.models.ServiceId.ACI; /** * Action handler for when the system is at rest. Mainly responsible diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/IncomingGroupCallActionProcessor.java b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/IncomingGroupCallActionProcessor.java index 7516826838..7e8c837432 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/IncomingGroupCallActionProcessor.java +++ b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/IncomingGroupCallActionProcessor.java @@ -26,7 +26,7 @@ import org.thoughtcrime.securesms.service.webrtc.state.WebRtcServiceState; import org.thoughtcrime.securesms.util.AppForegroundObserver; import org.thoughtcrime.securesms.util.NetworkUtil; import org.thoughtcrime.securesms.webrtc.locks.LockManager; -import org.whispersystems.signalservice.api.push.ServiceId.ACI; +import org.signal.core.models.ServiceId.ACI; import java.util.Optional; diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/SignalCallManager.java b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/SignalCallManager.java index 241aca4599..31c88a1dcc 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/SignalCallManager.java +++ b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/SignalCallManager.java @@ -88,7 +88,7 @@ import org.whispersystems.signalservice.api.messages.calls.OpaqueMessage; import org.whispersystems.signalservice.api.messages.calls.SignalServiceCallMessage; import org.whispersystems.signalservice.api.messages.calls.TurnServerInfo; import org.whispersystems.signalservice.api.messages.multidevice.SignalServiceSyncMessage; -import org.whispersystems.signalservice.api.push.ServiceId.ACI; +import org.signal.core.models.ServiceId.ACI; import org.whispersystems.signalservice.api.push.exceptions.ProofRequiredException; import org.whispersystems.signalservice.api.push.exceptions.UnregisteredUserException; import org.whispersystems.signalservice.internal.push.SyncMessage; diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/WebRtcActionProcessor.java b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/WebRtcActionProcessor.java index e2356df322..ce161151cf 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/WebRtcActionProcessor.java +++ b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/WebRtcActionProcessor.java @@ -55,8 +55,8 @@ import org.whispersystems.signalservice.api.messages.calls.HangupMessage; import org.whispersystems.signalservice.api.messages.calls.IceUpdateMessage; import org.whispersystems.signalservice.api.messages.calls.OfferMessage; import org.whispersystems.signalservice.api.messages.calls.SignalServiceCallMessage; -import org.whispersystems.signalservice.api.push.ServiceId; -import org.whispersystems.signalservice.api.push.ServiceId.ACI; +import org.signal.core.models.ServiceId; +import org.signal.core.models.ServiceId.ACI; import java.util.Collection; import java.util.List; diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/WebRtcData.java b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/WebRtcData.java index f215b6ac74..5325a102ee 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/WebRtcData.java +++ b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/WebRtcData.java @@ -8,7 +8,7 @@ import org.signal.ringrtc.CallManager; import org.thoughtcrime.securesms.ringrtc.RemotePeer; import org.whispersystems.signalservice.api.messages.calls.HangupMessage; import org.whispersystems.signalservice.api.messages.calls.OfferMessage; -import org.whispersystems.signalservice.api.push.ServiceId; +import org.signal.core.models.ServiceId; import java.util.UUID; diff --git a/app/src/main/java/org/thoughtcrime/securesms/sms/GroupV2UpdateMessageUtil.java b/app/src/main/java/org/thoughtcrime/securesms/sms/GroupV2UpdateMessageUtil.java index 8310000211..d8cf44aeed 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/sms/GroupV2UpdateMessageUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/sms/GroupV2UpdateMessageUtil.java @@ -5,7 +5,7 @@ import androidx.annotation.NonNull; import org.signal.storageservice.protos.groups.local.DecryptedGroupChange; import org.thoughtcrime.securesms.mms.MessageGroupContext; import org.whispersystems.signalservice.api.groupsv2.DecryptedGroupUtil; -import org.whispersystems.signalservice.api.push.ServiceId; +import org.signal.core.models.ServiceId; import java.util.Collections; import java.util.Optional; diff --git a/app/src/main/java/org/thoughtcrime/securesms/storage/ChatFolderRecordProcessor.kt b/app/src/main/java/org/thoughtcrime/securesms/storage/ChatFolderRecordProcessor.kt index 53ae9503c1..eaf4186597 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/storage/ChatFolderRecordProcessor.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/storage/ChatFolderRecordProcessor.kt @@ -1,15 +1,15 @@ package org.thoughtcrime.securesms.storage +import org.signal.core.models.ServiceId import org.signal.core.util.SqlUtil +import org.signal.core.util.UuidUtil import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.components.settings.app.chats.folders.ChatFolderId import org.thoughtcrime.securesms.database.ChatFolderTables import org.thoughtcrime.securesms.database.SignalDatabase -import org.whispersystems.signalservice.api.push.ServiceId import org.whispersystems.signalservice.api.storage.SignalChatFolderRecord import org.whispersystems.signalservice.api.storage.StorageId import org.whispersystems.signalservice.api.util.OptionalUtil.asOptional -import org.whispersystems.signalservice.api.util.UuidUtil import org.whispersystems.signalservice.internal.storage.protos.ChatFolderRecord import org.whispersystems.signalservice.internal.storage.protos.Recipient import java.util.Optional diff --git a/app/src/main/java/org/thoughtcrime/securesms/storage/ContactRecordProcessor.kt b/app/src/main/java/org/thoughtcrime/securesms/storage/ContactRecordProcessor.kt index f56dfe36a6..93f91cc074 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/storage/ContactRecordProcessor.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/storage/ContactRecordProcessor.kt @@ -2,6 +2,8 @@ package org.thoughtcrime.securesms.storage import okio.ByteString import okio.ByteString.Companion.toByteString +import org.signal.core.models.ServiceId.ACI +import org.signal.core.models.ServiceId.PNI import org.signal.core.util.isEmpty import org.signal.core.util.isNotEmpty import org.signal.core.util.logging.Log @@ -16,8 +18,6 @@ import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.recipients.Recipient.Companion.trustedPush import org.thoughtcrime.securesms.recipients.RecipientId import org.thoughtcrime.securesms.storage.StorageSyncModels.localToRemoteRecord -import org.whispersystems.signalservice.api.push.ServiceId.ACI -import org.whispersystems.signalservice.api.push.ServiceId.PNI import org.whispersystems.signalservice.api.storage.SignalContactRecord import org.whispersystems.signalservice.api.storage.StorageId import org.whispersystems.signalservice.api.storage.signalAci diff --git a/app/src/main/java/org/thoughtcrime/securesms/storage/NotificationProfileRecordProcessor.kt b/app/src/main/java/org/thoughtcrime/securesms/storage/NotificationProfileRecordProcessor.kt index 9cb64292d8..9641132f07 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/storage/NotificationProfileRecordProcessor.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/storage/NotificationProfileRecordProcessor.kt @@ -1,15 +1,15 @@ package org.thoughtcrime.securesms.storage +import org.signal.core.models.ServiceId import org.signal.core.util.SqlUtil +import org.signal.core.util.UuidUtil import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.database.NotificationProfileTables import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.notifications.profiles.NotificationProfileId -import org.whispersystems.signalservice.api.push.ServiceId import org.whispersystems.signalservice.api.storage.SignalNotificationProfileRecord import org.whispersystems.signalservice.api.storage.StorageId import org.whispersystems.signalservice.api.util.OptionalUtil.asOptional -import org.whispersystems.signalservice.api.util.UuidUtil import org.whispersystems.signalservice.internal.storage.protos.Recipient import java.util.Optional import java.util.UUID diff --git a/app/src/main/java/org/thoughtcrime/securesms/storage/StorageSyncHelper.kt b/app/src/main/java/org/thoughtcrime/securesms/storage/StorageSyncHelper.kt index c3e1b1211a..8daa31ec21 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/storage/StorageSyncHelper.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/storage/StorageSyncHelper.kt @@ -6,7 +6,9 @@ import okio.ByteString import okio.ByteString.Companion.toByteString import org.signal.core.util.Base64.encodeWithPadding import org.signal.core.util.SqlUtil +import org.signal.core.util.UuidUtil import org.signal.core.util.logging.Log +import org.signal.core.util.toByteArray import org.thoughtcrime.securesms.backup.v2.MessageBackupTier import org.thoughtcrime.securesms.components.settings.app.subscription.InAppPaymentsRepository.getSubscriber import org.thoughtcrime.securesms.components.settings.app.subscription.InAppPaymentsRepository.isUserManuallyCancelled @@ -38,8 +40,6 @@ import org.whispersystems.signalservice.api.storage.safeSetPayments import org.whispersystems.signalservice.api.storage.safeSetSubscriber import org.whispersystems.signalservice.api.storage.toSignalAccountRecord import org.whispersystems.signalservice.api.storage.toSignalStorageRecord -import org.whispersystems.signalservice.api.util.UuidUtil -import org.whispersystems.signalservice.api.util.toByteArray import org.whispersystems.signalservice.internal.storage.protos.AccountRecord import org.whispersystems.signalservice.internal.storage.protos.OptionalBool import java.util.Optional diff --git a/app/src/main/java/org/thoughtcrime/securesms/storage/StorageSyncModels.kt b/app/src/main/java/org/thoughtcrime/securesms/storage/StorageSyncModels.kt index fbac195955..2d9714408b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/storage/StorageSyncModels.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/storage/StorageSyncModels.kt @@ -2,6 +2,8 @@ package org.thoughtcrime.securesms.storage import okio.ByteString import okio.ByteString.Companion.toByteString +import org.signal.core.models.ServiceId +import org.signal.core.util.UuidUtil import org.signal.core.util.isNotEmpty import org.signal.core.util.isNullOrEmpty import org.signal.core.util.logging.Log @@ -30,7 +32,6 @@ import org.thoughtcrime.securesms.notifications.profiles.NotificationProfile import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.recipients.RecipientId import org.thoughtcrime.securesms.util.RemoteConfig -import org.whispersystems.signalservice.api.push.ServiceId import org.whispersystems.signalservice.api.push.SignalServiceAddress import org.whispersystems.signalservice.api.storage.IAPSubscriptionId import org.whispersystems.signalservice.api.storage.SignalCallLinkRecord @@ -51,7 +52,6 @@ import org.whispersystems.signalservice.api.storage.toSignalNotificationProfileR import org.whispersystems.signalservice.api.storage.toSignalStorageRecord import org.whispersystems.signalservice.api.storage.toSignalStoryDistributionListRecord import org.whispersystems.signalservice.api.subscriptions.SubscriberId -import org.whispersystems.signalservice.api.util.UuidUtil import org.whispersystems.signalservice.internal.storage.protos.AccountRecord import org.whispersystems.signalservice.internal.storage.protos.ContactRecord import org.whispersystems.signalservice.internal.storage.protos.ContactRecord.IdentityState diff --git a/app/src/main/java/org/thoughtcrime/securesms/storage/StorageSyncValidations.java b/app/src/main/java/org/thoughtcrime/securesms/storage/StorageSyncValidations.java index ca994abd29..d1bb025afa 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/storage/StorageSyncValidations.java +++ b/app/src/main/java/org/thoughtcrime/securesms/storage/StorageSyncValidations.java @@ -9,12 +9,10 @@ import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.recipients.Recipient; import org.signal.core.util.Base64; import org.signal.core.util.SetUtil; -import org.whispersystems.signalservice.api.push.ServiceId; -import org.whispersystems.signalservice.api.storage.SignalContactRecord; +import org.signal.core.models.ServiceId; import org.whispersystems.signalservice.api.storage.SignalStorageManifest; import org.whispersystems.signalservice.api.storage.SignalStorageRecord; import org.whispersystems.signalservice.api.storage.StorageId; -import org.whispersystems.signalservice.api.util.UuidUtil; import org.whispersystems.signalservice.internal.storage.protos.ContactRecord; import org.whispersystems.signalservice.internal.storage.protos.ManifestRecord; diff --git a/app/src/main/java/org/thoughtcrime/securesms/storage/StoryDistributionListRecordProcessor.kt b/app/src/main/java/org/thoughtcrime/securesms/storage/StoryDistributionListRecordProcessor.kt index 774335d5bd..d7c3191ebb 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/storage/StoryDistributionListRecordProcessor.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/storage/StoryDistributionListRecordProcessor.kt @@ -1,6 +1,7 @@ package org.thoughtcrime.securesms.storage import org.signal.core.util.StringUtil +import org.signal.core.util.UuidUtil import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.database.RecipientTable import org.thoughtcrime.securesms.database.SignalDatabase @@ -9,7 +10,6 @@ import org.whispersystems.signalservice.api.storage.SignalStoryDistributionListR import org.whispersystems.signalservice.api.storage.StorageId import org.whispersystems.signalservice.api.storage.toSignalStoryDistributionListRecord import org.whispersystems.signalservice.api.util.OptionalUtil.asOptional -import org.whispersystems.signalservice.api.util.UuidUtil import java.io.IOException import java.util.Optional diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/IdentityUtil.java b/app/src/main/java/org/thoughtcrime/securesms/util/IdentityUtil.java index 37044999ad..7a4fb07af5 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/IdentityUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/IdentityUtil.java @@ -36,9 +36,8 @@ import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; import org.whispersystems.signalservice.api.SignalSessionLock; import org.whispersystems.signalservice.api.messages.multidevice.VerifiedMessage; -import org.whispersystems.signalservice.api.push.ServiceId; +import org.signal.core.models.ServiceId; import org.whispersystems.signalservice.api.push.SignalServiceAddress; -import org.whispersystems.signalservice.api.util.UuidUtil; import org.whispersystems.signalservice.internal.push.Verified; import java.util.List; diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/ProfileUtil.java b/app/src/main/java/org/thoughtcrime/securesms/util/ProfileUtil.java index 0044c6b123..d316d7c410 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/ProfileUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/ProfileUtil.java @@ -43,7 +43,7 @@ import org.whispersystems.signalservice.api.crypto.SealedSenderAccess; import org.whispersystems.signalservice.api.profiles.AvatarUploadParams; import org.whispersystems.signalservice.api.profiles.ProfileAndCredential; import org.whispersystems.signalservice.api.profiles.SignalServiceProfile; -import org.whispersystems.signalservice.api.push.ServiceId; +import org.signal.core.models.ServiceId; import org.whispersystems.signalservice.api.push.SignalServiceAddress; import org.whispersystems.signalservice.api.services.ProfileService; import org.whispersystems.signalservice.api.util.StreamDetails; diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/RecipientAccessList.kt b/app/src/main/java/org/thoughtcrime/securesms/util/RecipientAccessList.kt index 7f15b5dc03..c72ee0530e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/RecipientAccessList.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/util/RecipientAccessList.kt @@ -1,8 +1,8 @@ package org.thoughtcrime.securesms.util +import org.signal.core.models.ServiceId import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.recipients.RecipientId -import org.whispersystems.signalservice.api.push.ServiceId import org.whispersystems.signalservice.api.push.SignalServiceAddress /** diff --git a/app/src/main/java/org/thoughtcrime/securesms/video/exo/PartDataSource.java b/app/src/main/java/org/thoughtcrime/securesms/video/exo/PartDataSource.java index 829ab54fcd..d20cad9409 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/video/exo/PartDataSource.java +++ b/app/src/main/java/org/thoughtcrime/securesms/video/exo/PartDataSource.java @@ -20,8 +20,8 @@ import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.mms.PartUriParser; import org.signal.core.util.Base64; -import org.whispersystems.signalservice.api.backup.MediaName; -import org.whispersystems.signalservice.api.backup.MediaRootBackupKey; +import org.signal.core.models.backup.MediaName; +import org.signal.core.models.backup.MediaRootBackupKey; import org.whispersystems.signalservice.api.crypto.AttachmentCipherInputStream; import org.whispersystems.signalservice.api.crypto.AttachmentCipherInputStream.IntegrityCheck; import org.whispersystems.signalservice.api.crypto.AttachmentCipherStreamUtil; @@ -33,7 +33,6 @@ import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; -import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Map; diff --git a/app/src/test/java/org/thoughtcrime/securesms/backup/v2/ArchivedMediaObjectIteratorTest.kt b/app/src/test/java/org/thoughtcrime/securesms/backup/v2/ArchivedMediaObjectIteratorTest.kt index 35d0b8ed57..da80ba61f8 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/backup/v2/ArchivedMediaObjectIteratorTest.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/backup/v2/ArchivedMediaObjectIteratorTest.kt @@ -7,12 +7,12 @@ import io.mockk.mockk import io.mockk.mockkObject import org.junit.Before import org.junit.Test +import org.signal.core.models.backup.MediaRootBackupKey import org.signal.core.util.Base64 import org.thoughtcrime.securesms.MockCursor import org.thoughtcrime.securesms.keyvalue.BackupValues import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.util.Util -import org.whispersystems.signalservice.api.backup.MediaRootBackupKey class ArchivedMediaObjectIteratorTest { private val cursor = mockk(relaxed = true) { diff --git a/app/src/test/java/org/thoughtcrime/securesms/backup/v2/stream/EncryptedBackupReaderWriterTest.kt b/app/src/test/java/org/thoughtcrime/securesms/backup/v2/stream/EncryptedBackupReaderWriterTest.kt index 976d1e26d8..e01df94914 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/backup/v2/stream/EncryptedBackupReaderWriterTest.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/backup/v2/stream/EncryptedBackupReaderWriterTest.kt @@ -7,6 +7,8 @@ package org.thoughtcrime.securesms.backup.v2.stream import org.junit.Assert.assertEquals import org.junit.Test +import org.signal.core.models.ServiceId.ACI +import org.signal.core.models.backup.MessageBackupKey import org.signal.core.util.Base64 import org.signal.core.util.Hex import org.signal.libsignal.messagebackup.BackupForwardSecrecyToken @@ -14,8 +16,6 @@ import org.thoughtcrime.securesms.backup.v2.proto.AccountData import org.thoughtcrime.securesms.backup.v2.proto.BackupInfo import org.thoughtcrime.securesms.backup.v2.proto.Frame import org.thoughtcrime.securesms.util.Util -import org.whispersystems.signalservice.api.backup.MessageBackupKey -import org.whispersystems.signalservice.api.push.ServiceId.ACI import java.io.ByteArrayOutputStream import java.util.UUID diff --git a/app/src/test/java/org/thoughtcrime/securesms/contacts/sync/FuzzyPhoneNumberHelperTest.java b/app/src/test/java/org/thoughtcrime/securesms/contacts/sync/FuzzyPhoneNumberHelperTest.java index 239b50b8bf..b14c8cb81b 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/contacts/sync/FuzzyPhoneNumberHelperTest.java +++ b/app/src/test/java/org/thoughtcrime/securesms/contacts/sync/FuzzyPhoneNumberHelperTest.java @@ -3,7 +3,7 @@ package org.thoughtcrime.securesms.contacts.sync; import org.junit.Test; import org.thoughtcrime.securesms.contacts.sync.FuzzyPhoneNumberHelper.InputResult; import org.thoughtcrime.securesms.contacts.sync.FuzzyPhoneNumberHelper.OutputResult; -import org.whispersystems.signalservice.api.push.ServiceId.ACI; +import org.signal.core.models.ServiceId.ACI; import java.util.Arrays; import java.util.Collections; diff --git a/app/src/test/java/org/thoughtcrime/securesms/conversation/colors/AvatarColorHashTest.kt b/app/src/test/java/org/thoughtcrime/securesms/conversation/colors/AvatarColorHashTest.kt index 3484213e04..729501413e 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/conversation/colors/AvatarColorHashTest.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/conversation/colors/AvatarColorHashTest.kt @@ -7,10 +7,10 @@ package org.thoughtcrime.securesms.conversation.colors import org.junit.Assert.assertEquals import org.junit.Test +import org.signal.core.models.ServiceId.ACI +import org.signal.core.models.ServiceId.PNI import org.signal.core.util.Base64 import org.thoughtcrime.securesms.groups.GroupId -import org.whispersystems.signalservice.api.push.ServiceId.ACI -import org.whispersystems.signalservice.api.push.ServiceId.PNI class AvatarColorHashTest { diff --git a/app/src/test/java/org/thoughtcrime/securesms/crash/CrashConfigTest.kt b/app/src/test/java/org/thoughtcrime/securesms/crash/CrashConfigTest.kt index 9f9a8d8959..ddc817bc7f 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/crash/CrashConfigTest.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/crash/CrashConfigTest.kt @@ -14,10 +14,10 @@ import org.junit.Test import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner import org.robolectric.annotation.Config +import org.signal.core.models.ServiceId import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.testutil.MockAppDependenciesRule import org.thoughtcrime.securesms.util.RemoteConfig -import org.whispersystems.signalservice.api.push.ServiceId import java.util.UUID @RunWith(RobolectricTestRunner::class) diff --git a/app/src/test/java/org/thoughtcrime/securesms/database/GroupTestUtil.kt b/app/src/test/java/org/thoughtcrime/securesms/database/GroupTestUtil.kt index b63995837c..32be0cf63d 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/database/GroupTestUtil.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/database/GroupTestUtil.kt @@ -1,6 +1,7 @@ package org.thoughtcrime.securesms.database import okio.ByteString.Companion.toByteString +import org.signal.core.models.ServiceId import org.signal.libsignal.zkgroup.groups.GroupMasterKey import org.signal.storageservice.protos.groups.AccessControl import org.signal.storageservice.protos.groups.GroupChange @@ -20,7 +21,6 @@ import org.whispersystems.signalservice.api.groupsv2.DecryptedGroupChangeLog import org.whispersystems.signalservice.api.groupsv2.GroupHistoryPage import org.whispersystems.signalservice.api.groupsv2.GroupsV2Operations import org.whispersystems.signalservice.api.push.DistributionId -import org.whispersystems.signalservice.api.push.ServiceId import java.util.Optional fun DecryptedGroupChange.Builder.setNewDescription(description: String) { diff --git a/app/src/test/java/org/thoughtcrime/securesms/database/RecipientDatabaseTestUtils.kt b/app/src/test/java/org/thoughtcrime/securesms/database/RecipientDatabaseTestUtils.kt index c2cc89c1a4..4f409f6df7 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/database/RecipientDatabaseTestUtils.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/database/RecipientDatabaseTestUtils.kt @@ -1,6 +1,7 @@ package org.thoughtcrime.securesms.database import android.net.Uri +import org.signal.core.models.ServiceId.ACI import org.signal.core.util.toOptional import org.signal.libsignal.zkgroup.profiles.ExpiringProfileKeyCredential import org.thoughtcrime.securesms.badges.models.Badge @@ -15,7 +16,6 @@ import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.recipients.RecipientCreator import org.thoughtcrime.securesms.recipients.RecipientId import org.thoughtcrime.securesms.wallpaper.ChatWallpaper -import org.whispersystems.signalservice.api.push.ServiceId.ACI import java.util.UUID import kotlin.random.Random diff --git a/app/src/test/java/org/thoughtcrime/securesms/database/model/GroupsV2UpdateMessageProducerTest.kt b/app/src/test/java/org/thoughtcrime/securesms/database/model/GroupsV2UpdateMessageProducerTest.kt index e426ecaa90..33ceae5e00 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/database/model/GroupsV2UpdateMessageProducerTest.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/database/model/GroupsV2UpdateMessageProducerTest.kt @@ -13,6 +13,9 @@ import org.junit.Test import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner import org.robolectric.annotation.Config +import org.signal.core.models.ServiceId +import org.signal.core.models.ServiceId.ACI +import org.signal.core.models.ServiceId.PNI import org.signal.core.util.BidiUtil import org.signal.storageservice.protos.groups.AccessControl import org.signal.storageservice.protos.groups.AccessControl.AccessRequired @@ -32,9 +35,6 @@ import org.thoughtcrime.securesms.groups.v2.ChangeBuilder import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.recipients.Recipient.Companion.resolved import org.thoughtcrime.securesms.recipients.RecipientId -import org.whispersystems.signalservice.api.push.ServiceId -import org.whispersystems.signalservice.api.push.ServiceId.ACI -import org.whispersystems.signalservice.api.push.ServiceId.PNI import org.whispersystems.signalservice.api.push.ServiceIds import java.util.UUID diff --git a/app/src/test/java/org/thoughtcrime/securesms/database/model/MessageRecordTest_createNewContextWithAppendedDeleteJoinRequest.kt b/app/src/test/java/org/thoughtcrime/securesms/database/model/MessageRecordTest_createNewContextWithAppendedDeleteJoinRequest.kt index 94816fb5d4..ba5b36037d 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/database/model/MessageRecordTest_createNewContextWithAppendedDeleteJoinRequest.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/database/model/MessageRecordTest_createNewContextWithAppendedDeleteJoinRequest.kt @@ -6,9 +6,9 @@ import okio.ByteString import okio.ByteString.Companion.toByteString import org.junit.Assert.assertEquals import org.junit.Test +import org.signal.core.models.ServiceId.ACI import org.thoughtcrime.securesms.database.model.databaseprotos.DecryptedGroupV2Context import org.thoughtcrime.securesms.groups.v2.ChangeBuilder -import org.whispersystems.signalservice.api.push.ServiceId.ACI import org.whispersystems.signalservice.internal.push.GroupContextV2 import java.util.UUID import kotlin.random.Random diff --git a/app/src/test/java/org/thoughtcrime/securesms/database/model/UpdateDescriptionTest.java b/app/src/test/java/org/thoughtcrime/securesms/database/model/UpdateDescriptionTest.java index 07b0845929..1d92b9fed1 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/database/model/UpdateDescriptionTest.java +++ b/app/src/test/java/org/thoughtcrime/securesms/database/model/UpdateDescriptionTest.java @@ -7,8 +7,7 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; import org.robolectric.annotation.Config; -import org.whispersystems.signalservice.api.push.ServiceId.ACI; -import org.whispersystems.signalservice.api.push.ServiceId; +import org.signal.core.models.ServiceId.ACI; import java.util.Arrays; import java.util.Collections; diff --git a/app/src/test/java/org/thoughtcrime/securesms/groups/GroupManagerV2Test_edit.kt b/app/src/test/java/org/thoughtcrime/securesms/groups/GroupManagerV2Test_edit.kt index 1409967ac9..b11cedd32e 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/groups/GroupManagerV2Test_edit.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/groups/GroupManagerV2Test_edit.kt @@ -18,6 +18,8 @@ import org.junit.Test import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner import org.robolectric.annotation.Config +import org.signal.core.models.ServiceId.ACI +import org.signal.core.models.ServiceId.PNI import org.signal.core.util.Hex import org.signal.core.util.ThreadUtil import org.signal.core.util.logging.Log @@ -42,8 +44,6 @@ import org.thoughtcrime.securesms.util.RemoteConfig import org.whispersystems.signalservice.api.groupsv2.ClientZkOperations import org.whispersystems.signalservice.api.groupsv2.GroupsV2Api import org.whispersystems.signalservice.api.groupsv2.GroupsV2Operations -import org.whispersystems.signalservice.api.push.ServiceId.ACI -import org.whispersystems.signalservice.api.push.ServiceId.PNI import org.whispersystems.signalservice.api.push.ServiceIds import java.util.UUID diff --git a/app/src/test/java/org/thoughtcrime/securesms/groups/v2/ChangeBuilder.java b/app/src/test/java/org/thoughtcrime/securesms/groups/v2/ChangeBuilder.java index add78ddbeb..052452743c 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/groups/v2/ChangeBuilder.java +++ b/app/src/test/java/org/thoughtcrime/securesms/groups/v2/ChangeBuilder.java @@ -17,7 +17,7 @@ import org.signal.storageservice.protos.groups.local.DecryptedRequestingMember; import org.signal.storageservice.protos.groups.local.DecryptedString; import org.signal.storageservice.protos.groups.local.DecryptedTimer; import org.thoughtcrime.securesms.util.Util; -import org.whispersystems.signalservice.api.push.ServiceId.ACI; +import org.signal.core.models.ServiceId.ACI; import kotlin.collections.CollectionsKt; import okio.ByteString; diff --git a/app/src/test/java/org/thoughtcrime/securesms/groups/v2/ProfileKeySetTest.kt b/app/src/test/java/org/thoughtcrime/securesms/groups/v2/ProfileKeySetTest.kt index b41d19d8f7..6c62481cdf 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/groups/v2/ProfileKeySetTest.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/groups/v2/ProfileKeySetTest.kt @@ -4,10 +4,10 @@ import assertk.assertThat import assertk.assertions.containsOnly import assertk.assertions.isEmpty import org.junit.Test +import org.signal.core.models.ServiceId import org.signal.core.util.logging.Log.initialize import org.thoughtcrime.securesms.crypto.ProfileKeyUtil import org.thoughtcrime.securesms.testutil.LogRecorder -import org.whispersystems.signalservice.api.push.ServiceId import java.util.UUID class ProfileKeySetTest { diff --git a/app/src/test/java/org/thoughtcrime/securesms/groups/v2/processing/GroupStatePatcherTest.kt b/app/src/test/java/org/thoughtcrime/securesms/groups/v2/processing/GroupStatePatcherTest.kt index 600324668d..84dfbf1bf0 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/groups/v2/processing/GroupStatePatcherTest.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/groups/v2/processing/GroupStatePatcherTest.kt @@ -9,6 +9,8 @@ import assertk.assertions.isNull import assertk.assertions.isSameInstanceAs import org.junit.Before import org.junit.Test +import org.signal.core.models.ServiceId +import org.signal.core.util.UuidUtil import org.signal.core.util.logging.Log import org.signal.storageservice.protos.groups.local.DecryptedGroup import org.signal.storageservice.protos.groups.local.DecryptedGroupChange @@ -16,8 +18,6 @@ import org.signal.storageservice.protos.groups.local.DecryptedMember import org.signal.storageservice.protos.groups.local.DecryptedString import org.thoughtcrime.securesms.testutil.LogRecorder import org.whispersystems.signalservice.api.groupsv2.DecryptedGroupChangeLog -import org.whispersystems.signalservice.api.push.ServiceId -import org.whispersystems.signalservice.api.util.UuidUtil import java.util.UUID class GroupStatePatcherTest { diff --git a/app/src/test/java/org/thoughtcrime/securesms/groups/v2/processing/GroupsV2StateProcessorTest.kt b/app/src/test/java/org/thoughtcrime/securesms/groups/v2/processing/GroupsV2StateProcessorTest.kt index 00dd2f42e1..fb7a444878 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/groups/v2/processing/GroupsV2StateProcessorTest.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/groups/v2/processing/GroupsV2StateProcessorTest.kt @@ -24,6 +24,8 @@ import org.junit.Test import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner import org.robolectric.annotation.Config +import org.signal.core.models.ServiceId.ACI +import org.signal.core.models.ServiceId.PNI import org.signal.core.util.Hex.fromStringCondensed import org.signal.core.util.logging.Log import org.signal.libsignal.protocol.logging.SignalProtocolLoggerProvider @@ -68,8 +70,6 @@ import org.whispersystems.signalservice.api.groupsv2.GroupsV2Api import org.whispersystems.signalservice.api.groupsv2.GroupsV2Operations import org.whispersystems.signalservice.api.groupsv2.NotAbleToApplyGroupV2ChangeException import org.whispersystems.signalservice.api.groupsv2.ReceivedGroupSendEndorsements -import org.whispersystems.signalservice.api.push.ServiceId.ACI -import org.whispersystems.signalservice.api.push.ServiceId.PNI import org.whispersystems.signalservice.api.push.ServiceIds import org.whispersystems.signalservice.api.push.exceptions.NonSuccessfulResponseCodeException import org.whispersystems.signalservice.internal.push.exceptions.NotInGroupException diff --git a/app/src/test/java/org/thoughtcrime/securesms/jobs/FastJobStorageTest.kt b/app/src/test/java/org/thoughtcrime/securesms/jobs/FastJobStorageTest.kt index 6f827bf49a..315a4aff7d 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/jobs/FastJobStorageTest.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/jobs/FastJobStorageTest.kt @@ -65,6 +65,51 @@ class FastJobStorageTest { verify(exactly = 0) { database.insertJobs(DataSet1.FULL_SPECS) } } + @Test + fun `insertJobs - depends on memory-only job`() { + val database = mockDatabase() + val subject = FastJobStorage(database) + + val dependsOnFullSpec = fullSpec("j1", "f1", isMemoryOnly = true) + + val job = jobSpec("j2", "f2", isMemoryOnly = false) + val dependencySpec = DependencySpec(jobId = "j2", dependsOnJobId = dependsOnFullSpec.jobSpec.id, isMemoryOnly = true) + val fullSpec = FullSpec(jobSpec = job, constraintSpecs = emptyList(), dependencySpecs = listOf(dependencySpec)) + + subject.insertJobs(listOf(dependsOnFullSpec)) + verify(exactly = 0) { database.insertJobs(any()) } + + val fullSpecList = listOf(fullSpec) + subject.insertJobs(fullSpecList) + verify(exactly = 1) { database.insertJobs(fullSpecList) } + + assertThat(subject.getNextEligibleJob(10, NO_PREDICATE)).isEqualTo(dependsOnFullSpec.jobSpec) + subject.deleteJob(dependsOnFullSpec.jobSpec.id) + + assertThat(subject.getNextEligibleJob(10, NO_PREDICATE)).isEqualTo(fullSpec.jobSpec) + } + + @Test + fun `insertJobs - depends on memory-only job that does not exist`() { + val database = mockDatabase() + val subject = FastJobStorage(database) + + val dependsOnFullSpec = fullSpec("j1", "f1", isMemoryOnly = true) + + val job = jobSpec("j2", "f2", isMemoryOnly = false) + val dependencySpec = DependencySpec(jobId = "j2", dependsOnJobId = dependsOnFullSpec.jobSpec.id, isMemoryOnly = true) + val fullSpec = FullSpec(jobSpec = job, constraintSpecs = emptyList(), dependencySpecs = listOf(dependencySpec)) + + val fullSpecList = listOf(fullSpec) + subject.insertJobs(fullSpecList) + verify(exactly = 1) { database.insertJobs(fullSpecList) } + + assertThat(subject.getNextEligibleJob(10, NO_PREDICATE)).isEqualTo(dependsOnFullSpec.jobSpec) + subject.deleteJob(dependsOnFullSpec.jobSpec.id) + + assertThat(subject.getNextEligibleJob(10, NO_PREDICATE)).isEqualTo(fullSpec.jobSpec) + } + @Test fun `insertJobs - data can be found`() { val subject = FastJobStorage(mockDatabase()) diff --git a/app/src/test/java/org/thoughtcrime/securesms/payments/reconciliation/LedgerReconcileTest.java b/app/src/test/java/org/thoughtcrime/securesms/payments/reconciliation/LedgerReconcileTest.java index 973d60ee03..151fcfb5b7 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/payments/reconciliation/LedgerReconcileTest.java +++ b/app/src/test/java/org/thoughtcrime/securesms/payments/reconciliation/LedgerReconcileTest.java @@ -20,9 +20,7 @@ import org.thoughtcrime.securesms.payments.proto.PaymentMetaData; import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.testutil.LogRecorder; import org.whispersystems.signalservice.api.payments.Money; -import org.whispersystems.signalservice.api.util.Uint64RangeException; -import org.whispersystems.signalservice.api.util.Uint64Util; -import org.whispersystems.signalservice.api.util.UuidUtil; +import org.signal.core.util.UuidUtil; import java.math.BigDecimal; import java.util.ArrayList; diff --git a/app/src/test/java/org/thoughtcrime/securesms/recipients/RecipientIdCacheTest.kt b/app/src/test/java/org/thoughtcrime/securesms/recipients/RecipientIdCacheTest.kt index e7d67c07a3..0898c3886b 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/recipients/RecipientIdCacheTest.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/recipients/RecipientIdCacheTest.kt @@ -5,9 +5,9 @@ import io.mockk.mockk import org.junit.Assert.assertEquals import org.junit.Assert.assertNull import org.junit.Test +import org.signal.core.models.ServiceId import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.testutil.LogRecorder -import org.whispersystems.signalservice.api.push.ServiceId import java.util.Optional import java.util.UUID diff --git a/app/src/test/java/org/thoughtcrime/securesms/recipients/ui/findby/FindByViewModelTest.kt b/app/src/test/java/org/thoughtcrime/securesms/recipients/ui/findby/FindByViewModelTest.kt index f99b8e52a2..13bbabc4cd 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/recipients/ui/findby/FindByViewModelTest.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/recipients/ui/findby/FindByViewModelTest.kt @@ -18,6 +18,7 @@ import org.junit.Assert.assertEquals import org.junit.Assert.assertTrue import org.junit.Before import org.junit.Test +import org.signal.core.models.ServiceId import org.thoughtcrime.securesms.dependencies.AppDependencies import org.thoughtcrime.securesms.profiles.manage.UsernameRepository import org.thoughtcrime.securesms.recipients.LiveRecipientCache @@ -27,7 +28,6 @@ import org.thoughtcrime.securesms.recipients.RecipientId import org.thoughtcrime.securesms.recipients.RecipientRepository import org.thoughtcrime.securesms.registration.ui.countrycode.Country import org.thoughtcrime.securesms.registration.ui.countrycode.CountryUtils -import org.whispersystems.signalservice.api.push.ServiceId import java.util.Optional class FindByViewModelTest { diff --git a/app/src/test/java/org/thoughtcrime/securesms/registration/v2/PinHashKbsDataTest.kt b/app/src/test/java/org/thoughtcrime/securesms/registration/v2/PinHashKbsDataTest.kt index 96f4783998..3f3507c7c5 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/registration/v2/PinHashKbsDataTest.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/registration/v2/PinHashKbsDataTest.kt @@ -6,11 +6,11 @@ import org.junit.Assert.assertArrayEquals import org.junit.Assert.assertEquals import org.junit.Assert.assertTrue import org.junit.Test +import org.signal.core.models.MasterKey import org.signal.core.util.StreamUtil import org.signal.libsignal.svr2.PinHash import org.thoughtcrime.securesms.registration.v2.testdata.KbsTestVector import org.thoughtcrime.securesms.testutil.SecureRandomTestUtil -import org.whispersystems.signalservice.api.kbs.MasterKey import org.whispersystems.signalservice.api.kbs.PinHashUtil.createNewKbsData import org.whispersystems.signalservice.api.kbs.PinHashUtil.decryptSvrDataIVCipherText import org.whispersystems.signalservice.internal.util.JsonUtil diff --git a/app/src/test/java/org/thoughtcrime/securesms/registration/v2/PinHashUtil_normalize_Test.java b/app/src/test/java/org/thoughtcrime/securesms/registration/v2/PinHashUtil_normalize_Test.java index 08ab6ecf42..9b005c2848 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/registration/v2/PinHashUtil_normalize_Test.java +++ b/app/src/test/java/org/thoughtcrime/securesms/registration/v2/PinHashUtil_normalize_Test.java @@ -1,10 +1,10 @@ package org.thoughtcrime.securesms.registration.v2; import org.junit.Test; +import org.signal.core.util.Hex; import org.signal.core.util.StreamUtil; import org.thoughtcrime.securesms.registration.testdata.PinSanitationVector; import org.whispersystems.signalservice.api.kbs.PinHashUtil; -import org.whispersystems.signalservice.internal.util.Hex; import org.whispersystems.signalservice.internal.util.JsonUtil; import java.io.IOException; diff --git a/app/src/test/java/org/thoughtcrime/securesms/sms/GroupV2UpdateMessageUtilTest.java b/app/src/test/java/org/thoughtcrime/securesms/sms/GroupV2UpdateMessageUtilTest.java index be41c85dbd..0ced6e53ea 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/sms/GroupV2UpdateMessageUtilTest.java +++ b/app/src/test/java/org/thoughtcrime/securesms/sms/GroupV2UpdateMessageUtilTest.java @@ -7,7 +7,7 @@ import org.signal.storageservice.protos.groups.local.DecryptedGroupChange; import org.thoughtcrime.securesms.database.model.databaseprotos.DecryptedGroupV2Context; import org.thoughtcrime.securesms.groups.v2.ChangeBuilder; import org.thoughtcrime.securesms.mms.MessageGroupContext; -import org.whispersystems.signalservice.api.push.ServiceId.ACI; +import org.signal.core.models.ServiceId.ACI; import org.whispersystems.signalservice.internal.push.GroupContextV2; import java.util.Random; diff --git a/app/src/test/java/org/thoughtcrime/securesms/storage/ChatFolderRecordProcessorTest.kt b/app/src/test/java/org/thoughtcrime/securesms/storage/ChatFolderRecordProcessorTest.kt index 29b3ad04b4..9c45499775 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/storage/ChatFolderRecordProcessorTest.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/storage/ChatFolderRecordProcessorTest.kt @@ -5,11 +5,11 @@ import org.junit.Assert.assertFalse import org.junit.Assert.assertTrue import org.junit.BeforeClass import org.junit.Test +import org.signal.core.util.UuidUtil import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.testutil.EmptyLogger import org.whispersystems.signalservice.api.storage.SignalChatFolderRecord import org.whispersystems.signalservice.api.storage.StorageId -import org.whispersystems.signalservice.api.util.UuidUtil import org.whispersystems.signalservice.internal.storage.protos.ChatFolderRecord import org.whispersystems.signalservice.internal.storage.protos.Recipient import java.util.UUID diff --git a/app/src/test/java/org/thoughtcrime/securesms/storage/ContactRecordProcessorTest.kt b/app/src/test/java/org/thoughtcrime/securesms/storage/ContactRecordProcessorTest.kt index 25466407e5..3c3d33086f 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/storage/ContactRecordProcessorTest.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/storage/ContactRecordProcessorTest.kt @@ -16,14 +16,14 @@ import org.junit.Test import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner import org.robolectric.annotation.Config +import org.signal.core.models.ServiceId +import org.signal.core.models.ServiceId.ACI +import org.signal.core.models.ServiceId.PNI import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.database.RecipientTable import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.testutil.EmptyLogger import org.thoughtcrime.securesms.testutil.MockAppDependenciesRule -import org.whispersystems.signalservice.api.push.ServiceId -import org.whispersystems.signalservice.api.push.ServiceId.ACI -import org.whispersystems.signalservice.api.push.ServiceId.PNI import org.whispersystems.signalservice.api.storage.SignalContactRecord import org.whispersystems.signalservice.api.storage.StorageId import org.whispersystems.signalservice.internal.storage.protos.ContactRecord diff --git a/app/src/test/java/org/thoughtcrime/securesms/storage/NotificationProfileRecordProcessorTest.kt b/app/src/test/java/org/thoughtcrime/securesms/storage/NotificationProfileRecordProcessorTest.kt index b7c6c5c42d..00e8e4f00c 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/storage/NotificationProfileRecordProcessorTest.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/storage/NotificationProfileRecordProcessorTest.kt @@ -5,11 +5,11 @@ import org.junit.Assert.assertFalse import org.junit.Assert.assertTrue import org.junit.BeforeClass import org.junit.Test +import org.signal.core.util.UuidUtil import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.testutil.EmptyLogger import org.whispersystems.signalservice.api.storage.SignalNotificationProfileRecord import org.whispersystems.signalservice.api.storage.StorageId -import org.whispersystems.signalservice.api.util.UuidUtil import org.whispersystems.signalservice.internal.storage.protos.NotificationProfile import org.whispersystems.signalservice.internal.storage.protos.Recipient import java.util.UUID diff --git a/app/src/test/java/org/thoughtcrime/securesms/storage/StorageSyncHelperTest.kt b/app/src/test/java/org/thoughtcrime/securesms/storage/StorageSyncHelperTest.kt index 989243c271..ef73d72a3c 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/storage/StorageSyncHelperTest.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/storage/StorageSyncHelperTest.kt @@ -11,12 +11,12 @@ import org.junit.Assert.assertNotEquals import org.junit.Assert.assertTrue import org.junit.Before import org.junit.Test +import org.signal.core.models.ServiceId.ACI +import org.signal.core.models.ServiceId.ACI.Companion.parseOrThrow import org.thoughtcrime.securesms.storage.StorageSyncHelper.findIdDifference import org.thoughtcrime.securesms.storage.StorageSyncHelper.profileKeyChanged import org.thoughtcrime.securesms.testutil.TestHelpers import org.thoughtcrime.securesms.util.RemoteConfig -import org.whispersystems.signalservice.api.push.ServiceId.ACI -import org.whispersystems.signalservice.api.push.ServiceId.ACI.Companion.parseOrThrow import org.whispersystems.signalservice.api.storage.SignalContactRecord import org.whispersystems.signalservice.api.storage.SignalRecord import org.whispersystems.signalservice.api.storage.StorageId diff --git a/app/src/test/java/org/thoughtcrime/securesms/storage/StoryDistributionListRecordProcessorTest.kt b/app/src/test/java/org/thoughtcrime/securesms/storage/StoryDistributionListRecordProcessorTest.kt index 8145495e65..5062d0ca02 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/storage/StoryDistributionListRecordProcessorTest.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/storage/StoryDistributionListRecordProcessorTest.kt @@ -5,12 +5,12 @@ import org.junit.Assert.assertFalse import org.junit.Assert.assertTrue import org.junit.BeforeClass import org.junit.Test +import org.signal.core.util.UuidUtil import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.testutil.EmptyLogger import org.whispersystems.signalservice.api.push.DistributionId import org.whispersystems.signalservice.api.storage.SignalStoryDistributionListRecord import org.whispersystems.signalservice.api.storage.StorageId -import org.whispersystems.signalservice.api.util.UuidUtil import org.whispersystems.signalservice.internal.storage.protos.StoryDistributionListRecord import java.util.UUID diff --git a/app/src/test/java/org/thoughtcrime/securesms/util/BucketingUtilTest.java b/app/src/test/java/org/thoughtcrime/securesms/util/BucketingUtilTest.java index e6ae99071a..e4b8f87ad5 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/util/BucketingUtilTest.java +++ b/app/src/test/java/org/thoughtcrime/securesms/util/BucketingUtilTest.java @@ -1,7 +1,7 @@ package org.thoughtcrime.securesms.util; import org.junit.Test; -import org.whispersystems.signalservice.api.util.UuidUtil; +import org.signal.core.util.UuidUtil; import java.util.UUID; diff --git a/app/src/testShared/org/thoughtcrime/securesms/database/model/databaseprotos/DecryptedGroupHelper.kt b/app/src/testShared/org/thoughtcrime/securesms/database/model/databaseprotos/DecryptedGroupHelper.kt index 43548159a4..ef1266f3a5 100644 --- a/app/src/testShared/org/thoughtcrime/securesms/database/model/databaseprotos/DecryptedGroupHelper.kt +++ b/app/src/testShared/org/thoughtcrime/securesms/database/model/databaseprotos/DecryptedGroupHelper.kt @@ -1,14 +1,14 @@ package org.thoughtcrime.securesms.database.model.databaseprotos import okio.ByteString.Companion.toByteString +import org.signal.core.models.ServiceId +import org.signal.core.models.ServiceId.ACI import org.signal.libsignal.zkgroup.groups.GroupMasterKey import org.signal.storageservice.protos.groups.Member import org.signal.storageservice.protos.groups.local.DecryptedGroupChange import org.signal.storageservice.protos.groups.local.DecryptedMember import org.signal.storageservice.protos.groups.local.DecryptedPendingMember import org.signal.storageservice.protos.groups.local.DecryptedRequestingMember -import org.whispersystems.signalservice.api.push.ServiceId -import org.whispersystems.signalservice.api.push.ServiceId.ACI import org.whispersystems.signalservice.internal.push.GroupContextV2 import java.util.UUID diff --git a/build.gradle.kts b/build.gradle.kts index 2ad3a4a017..65e451d29d 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -57,7 +57,7 @@ subprojects { } } - val skipQa = setOf("Signal-Android", "libsignal-service", "lintchecks", "benchmark", "core-util-jvm", "logging") + val skipQa = setOf("Signal-Android", "libsignal-service", "lintchecks", "benchmark", "core-util-jvm", "core-models", "logging") if (project.name !in skipQa && !project.name.endsWith("-app")) { tasks.register("qa") { diff --git a/core-models/build.gradle.kts b/core-models/build.gradle.kts new file mode 100644 index 0000000000..d4ccfa6aa4 --- /dev/null +++ b/core-models/build.gradle.kts @@ -0,0 +1,30 @@ +/* + * Copyright 2025 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +val signalJavaVersion: JavaVersion by rootProject.extra +val signalKotlinJvmTarget: String by rootProject.extra + +plugins { + id("java-library") + id("org.jetbrains.kotlin.jvm") + id("ktlint") +} + +java { + sourceCompatibility = signalJavaVersion + targetCompatibility = signalJavaVersion +} + +kotlin { + jvmToolchain { + languageVersion = JavaLanguageVersion.of(signalKotlinJvmTarget) + } +} + +dependencies { + implementation(libs.libsignal.client) + implementation(libs.square.okio) + implementation(project(":core-util-jvm")) +} diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/AccountEntropyPool.kt b/core-models/src/main/java/org/signal/core/models/AccountEntropyPool.kt similarity index 74% rename from libsignal-service/src/main/java/org/whispersystems/signalservice/api/AccountEntropyPool.kt rename to core-models/src/main/java/org/signal/core/models/AccountEntropyPool.kt index 11d737533c..d64411120b 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/AccountEntropyPool.kt +++ b/core-models/src/main/java/org/signal/core/models/AccountEntropyPool.kt @@ -1,16 +1,16 @@ /* - * Copyright 2024 Signal Messenger, LLC + * Copyright 2025 Signal Messenger, LLC * SPDX-License-Identifier: AGPL-3.0-only */ -package org.whispersystems.signalservice.api +package org.signal.core.models -import org.whispersystems.signalservice.api.backup.MessageBackupKey -import org.whispersystems.signalservice.api.kbs.MasterKey -import org.signal.libsignal.messagebackup.AccountEntropyPool as LibSignalAccountEntropyPool +import org.signal.core.models.backup.MessageBackupKey + +private typealias LibSignalAccountEntropyPool = org.signal.libsignal.messagebackup.AccountEntropyPool /** - * The Root of All Entropy. You can use this to derive the [MasterKey] or [MessageBackupKey]. + * The Root of All Entropy. You can use this to derive the [org.whispersystems.signalservice.api.kbs.MasterKey] or [org.whispersystems.signalservice.api.backup.MessageBackupKey]. */ class AccountEntropyPool(value: String) { diff --git a/core-models/src/main/java/org/signal/core/models/MasterKey.kt b/core-models/src/main/java/org/signal/core/models/MasterKey.kt new file mode 100644 index 0000000000..72fa536cd8 --- /dev/null +++ b/core-models/src/main/java/org/signal/core/models/MasterKey.kt @@ -0,0 +1,68 @@ +/* + * Copyright 2025 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ +package org.signal.core.models + +import org.signal.core.models.storageservice.StorageKey +import org.signal.core.util.Base64 +import org.signal.core.util.CryptoUtil +import org.signal.core.util.Hex +import java.security.SecureRandom + +class MasterKey(masterKey: ByteArray) { + private val masterKey: ByteArray + + companion object { + private const val LENGTH = 32 + + fun createNew(secureRandom: SecureRandom): MasterKey { + val key = ByteArray(LENGTH) + secureRandom.nextBytes(key) + return MasterKey(key) + } + } + + init { + check(masterKey.size == LENGTH) { "Master key must be $LENGTH bytes long (actualSize: ${masterKey.size})" } + this.masterKey = masterKey + } + + fun deriveRegistrationLock(): String { + return Hex.toStringCondensed(derive("Registration Lock")) + } + + fun deriveRegistrationRecoveryPassword(): String { + return Base64.encodeWithPadding(derive("Registration Recovery")!!) + } + + fun deriveStorageServiceKey(): StorageKey { + return StorageKey(derive("Storage Service Encryption")!!) + } + + fun deriveLoggingKey(): ByteArray? { + return derive("Logging Key") + } + + private fun derive(keyName: String): ByteArray? { + return CryptoUtil.hmacSha256(masterKey, keyName.toByteArray(Charsets.UTF_8)) + } + + fun serialize(): ByteArray { + return masterKey.clone() + } + + override fun equals(o: Any?): Boolean { + if (o == null || o.javaClass != javaClass) return false + + return (o as MasterKey).masterKey.contentEquals(masterKey) + } + + override fun hashCode(): Int { + return masterKey.contentHashCode() + } + + override fun toString(): String { + return "MasterKey(xxx)" + } +} diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/push/ServiceId.kt b/core-models/src/main/java/org/signal/core/models/ServiceId.kt similarity index 85% rename from libsignal-service/src/main/java/org/whispersystems/signalservice/api/push/ServiceId.kt rename to core-models/src/main/java/org/signal/core/models/ServiceId.kt index f96bd23906..709140230d 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/push/ServiceId.kt +++ b/core-models/src/main/java/org/signal/core/models/ServiceId.kt @@ -1,17 +1,17 @@ -package org.whispersystems.signalservice.api.push +/* + * Copyright 2025 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.signal.core.models import okio.ByteString import okio.ByteString.Companion.toByteString -import org.signal.libsignal.protocol.ServiceId.InvalidServiceIdException +import org.signal.core.util.UuidUtil +import org.signal.core.util.toByteArray import org.signal.libsignal.protocol.SignalProtocolAddress import org.signal.libsignal.protocol.logging.Log -import org.whispersystems.signalservice.api.push.ServiceId.Companion.parseOrThrow -import org.whispersystems.signalservice.api.util.UuidUtil -import org.whispersystems.signalservice.api.util.toByteArray import java.util.UUID -import org.signal.libsignal.protocol.ServiceId as LibSignalServiceId -import org.signal.libsignal.protocol.ServiceId.Aci as LibSignalAci -import org.signal.libsignal.protocol.ServiceId.Pni as LibSignalPni /** * A wrapper around a UUID that represents an identifier for an account. Today, that is either an [ACI] or a [PNI]. @@ -21,15 +21,15 @@ import org.signal.libsignal.protocol.ServiceId.Pni as LibSignalPni * The only times you truly know, and the only times you should actually care, is during CDS refreshes or specific inbound messages * that link them together. */ -sealed class ServiceId(val libSignalServiceId: LibSignalServiceId) { +sealed class ServiceId(val libSignalServiceId: org.signal.libsignal.protocol.ServiceId) { companion object { private const val TAG = "ServiceId" @JvmStatic - fun fromLibSignal(serviceId: LibSignalServiceId): ServiceId { + fun fromLibSignal(serviceId: org.signal.libsignal.protocol.ServiceId): ServiceId { return when (serviceId) { - is LibSignalAci -> ACI(serviceId) - is LibSignalPni -> PNI(serviceId) + is org.signal.libsignal.protocol.ServiceId.Aci -> ACI(serviceId) + is org.signal.libsignal.protocol.ServiceId.Pni -> PNI(serviceId) else -> throw IllegalArgumentException("Unknown libsignal ServiceId type!") } } @@ -43,13 +43,13 @@ sealed class ServiceId(val libSignalServiceId: LibSignalServiceId) { } return try { - fromLibSignal(LibSignalServiceId.parseFromString(raw)) + fromLibSignal(org.signal.libsignal.protocol.ServiceId.parseFromString(raw)) } catch (e: IllegalArgumentException) { if (logFailures) { Log.w(TAG, "[parseOrNull(String)] Illegal argument!", e) } null - } catch (e: InvalidServiceIdException) { + } catch (e: org.signal.libsignal.protocol.ServiceId.InvalidServiceIdException) { if (logFailures) { Log.w(TAG, "[parseOrNull(String)] Invalid ServiceId!", e) } @@ -66,14 +66,14 @@ sealed class ServiceId(val libSignalServiceId: LibSignalServiceId) { return try { if (raw.size == 17) { - fromLibSignal(LibSignalServiceId.parseFromFixedWidthBinary(raw)) + fromLibSignal(org.signal.libsignal.protocol.ServiceId.parseFromFixedWidthBinary(raw)) } else { - fromLibSignal(LibSignalServiceId.parseFromBinary(raw)) + fromLibSignal(org.signal.libsignal.protocol.ServiceId.parseFromBinary(raw)) } } catch (e: IllegalArgumentException) { Log.w(TAG, "[parseOrNull(Bytes)] Illegal argument!", e) null - } catch (e: InvalidServiceIdException) { + } catch (e: org.signal.libsignal.protocol.ServiceId.InvalidServiceIdException) { Log.w(TAG, "[parseOrNull(Bytes)] Invalid ServiceId!", e) null } @@ -81,7 +81,7 @@ sealed class ServiceId(val libSignalServiceId: LibSignalServiceId) { /** Parses a ServiceId serialized as a ByteString. Returns null if the ServiceId is invalid. */ @JvmStatic - fun parseOrNull(bytes: okio.ByteString?): ServiceId? = parseOrNull(bytes?.toByteArray()) + fun parseOrNull(bytes: ByteString?): ServiceId? = parseOrNull(bytes?.toByteArray()) /** Parses a ServiceId serialized as a string. Crashes if the ServiceId is invalid. */ @JvmStatic @@ -127,7 +127,7 @@ sealed class ServiceId(val libSignalServiceId: LibSignalServiceId) { fun toProtocolAddress(deviceId: Int): SignalProtocolAddress = SignalProtocolAddress(libSignalServiceId.toServiceIdString(), deviceId) - fun toByteString(): ByteString = ByteString.of(*libSignalServiceId.toServiceIdBinary()) + fun toByteString(): ByteString = ByteString.Companion.of(*libSignalServiceId.toServiceIdBinary()) fun toByteArray(): ByteArray = libSignalServiceId.toServiceIdBinary() @@ -139,22 +139,22 @@ sealed class ServiceId(val libSignalServiceId: LibSignalServiceId) { */ override fun toString(): String = libSignalServiceId.toServiceIdString() - data class ACI(val libSignalAci: LibSignalAci) : ServiceId(libSignalAci) { + data class ACI(val libSignalAci: org.signal.libsignal.protocol.ServiceId.Aci) : ServiceId(libSignalAci) { companion object { @JvmField val UNKNOWN = from(UuidUtil.UNKNOWN_UUID) @JvmStatic - fun from(uuid: UUID): ACI = ACI(LibSignalAci(uuid)) + fun from(uuid: UUID): ACI = ACI(org.signal.libsignal.protocol.ServiceId.Aci(uuid)) @JvmStatic - fun fromLibSignal(aci: LibSignalAci): ACI = ACI(aci) + fun fromLibSignal(aci: org.signal.libsignal.protocol.ServiceId.Aci): ACI = ACI(aci) @JvmStatic - fun parseOrNull(raw: String?): ACI? = ServiceId.parseOrNull(raw).let { if (it is ACI) it else null } + fun parseOrNull(raw: String?): ACI? = ServiceId.parseOrNull(raw).let { it as? ACI } @JvmStatic - fun parseOrNull(raw: ByteArray?): ACI? = ServiceId.parseOrNull(raw).let { if (it is ACI) it else null } + fun parseOrNull(raw: ByteArray?): ACI? = ServiceId.parseOrNull(raw).let { it as? ACI } @JvmStatic fun parseOrNull(bytes: ByteString?): ACI? = parseOrNull(bytes?.toByteArray()) @@ -194,13 +194,13 @@ sealed class ServiceId(val libSignalServiceId: LibSignalServiceId) { override fun toString(): String = super.toString() } - data class PNI(val libSignalPni: LibSignalPni) : ServiceId(libSignalPni) { + data class PNI(val libSignalPni: org.signal.libsignal.protocol.ServiceId.Pni) : ServiceId(libSignalPni) { companion object { @JvmField var UNKNOWN = from(UuidUtil.UNKNOWN_UUID) @JvmStatic - fun from(uuid: UUID): PNI = PNI(LibSignalPni(uuid)) + fun from(uuid: UUID): PNI = PNI(org.signal.libsignal.protocol.ServiceId.Pni(uuid)) /** Parses a string as a PNI, regardless if the `PNI:` prefix is present or not. Only use this if you are certain that what you're reading is a PNI. */ @JvmStatic @@ -212,7 +212,7 @@ sealed class ServiceId(val libSignalServiceId: LibSignalServiceId) { } else { val uuid = UuidUtil.parseOrNull(raw) if (uuid != null) { - PNI(LibSignalPni(uuid)) + PNI(org.signal.libsignal.protocol.ServiceId.Pni(uuid)) } else { null } @@ -229,7 +229,7 @@ sealed class ServiceId(val libSignalServiceId: LibSignalServiceId) { } else { val uuid = UuidUtil.parseOrNull(raw) if (uuid != null) { - PNI(LibSignalPni(uuid)) + PNI(org.signal.libsignal.protocol.ServiceId.Pni(uuid)) } else { null } diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/backup/BackupId.kt b/core-models/src/main/java/org/signal/core/models/backup/BackupId.kt similarity index 84% rename from libsignal-service/src/main/java/org/whispersystems/signalservice/api/backup/BackupId.kt rename to core-models/src/main/java/org/signal/core/models/backup/BackupId.kt index 5d6ef9cf78..5387db56f5 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/backup/BackupId.kt +++ b/core-models/src/main/java/org/signal/core/models/backup/BackupId.kt @@ -1,9 +1,9 @@ /* - * Copyright 2023 Signal Messenger, LLC + * Copyright 2025 Signal Messenger, LLC * SPDX-License-Identifier: AGPL-3.0-only */ -package org.whispersystems.signalservice.api.backup +package org.signal.core.models.backup import org.signal.core.util.Base64 import java.security.MessageDigest diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/backup/BackupKey.kt b/core-models/src/main/java/org/signal/core/models/backup/BackupKey.kt similarity index 54% rename from libsignal-service/src/main/java/org/whispersystems/signalservice/api/backup/BackupKey.kt rename to core-models/src/main/java/org/signal/core/models/backup/BackupKey.kt index 1b7f961cf7..aa201be6da 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/backup/BackupKey.kt +++ b/core-models/src/main/java/org/signal/core/models/backup/BackupKey.kt @@ -1,15 +1,15 @@ /* - * Copyright 2024 Signal Messenger, LLC + * Copyright 2025 Signal Messenger, LLC * SPDX-License-Identifier: AGPL-3.0-only */ -package org.whispersystems.signalservice.api.backup +package org.signal.core.models.backup +import org.signal.core.models.ServiceId import org.signal.libsignal.protocol.ecc.ECPrivateKey -import org.whispersystems.signalservice.api.push.ServiceId.ACI /** - * Contains the common properties for all "backup keys", namely the [MessageBackupKey] and [MediaRootBackupKey] + * Contains the common properties for all "backup keys", namely the [MessageBackupKey] and [org.whispersystems.signalservice.api.backup.MediaRootBackupKey] */ interface BackupKey { @@ -18,5 +18,5 @@ interface BackupKey { /** * The private key used to generate anonymous credentials when interacting with the backup service. */ - fun deriveAnonymousCredentialPrivateKey(aci: ACI): ECPrivateKey + fun deriveAnonymousCredentialPrivateKey(aci: ServiceId.ACI): ECPrivateKey } diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/backup/MediaId.kt b/core-models/src/main/java/org/signal/core/models/backup/MediaId.kt similarity index 90% rename from libsignal-service/src/main/java/org/whispersystems/signalservice/api/backup/MediaId.kt rename to core-models/src/main/java/org/signal/core/models/backup/MediaId.kt index 5ebb66caa7..4c92f4abd0 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/backup/MediaId.kt +++ b/core-models/src/main/java/org/signal/core/models/backup/MediaId.kt @@ -3,7 +3,7 @@ * SPDX-License-Identifier: AGPL-3.0-only */ -package org.whispersystems.signalservice.api.backup +package org.signal.core.models.backup import org.signal.core.util.Base64 diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/backup/MediaName.kt b/core-models/src/main/java/org/signal/core/models/backup/MediaName.kt similarity index 95% rename from libsignal-service/src/main/java/org/whispersystems/signalservice/api/backup/MediaName.kt rename to core-models/src/main/java/org/signal/core/models/backup/MediaName.kt index 65aed968a9..7d7da21fb2 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/backup/MediaName.kt +++ b/core-models/src/main/java/org/signal/core/models/backup/MediaName.kt @@ -3,7 +3,7 @@ * SPDX-License-Identifier: AGPL-3.0-only */ -package org.whispersystems.signalservice.api.backup +package org.signal.core.models.backup import org.signal.core.util.Hex diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/backup/MediaRootBackupKey.kt b/core-models/src/main/java/org/signal/core/models/backup/MediaRootBackupKey.kt similarity index 66% rename from libsignal-service/src/main/java/org/whispersystems/signalservice/api/backup/MediaRootBackupKey.kt rename to core-models/src/main/java/org/signal/core/models/backup/MediaRootBackupKey.kt index 54f8d1717e..4e8ee56e5b 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/backup/MediaRootBackupKey.kt +++ b/core-models/src/main/java/org/signal/core/models/backup/MediaRootBackupKey.kt @@ -1,14 +1,13 @@ /* - * Copyright 2024 Signal Messenger, LLC + * Copyright 2025 Signal Messenger, LLC * SPDX-License-Identifier: AGPL-3.0-only */ -package org.whispersystems.signalservice.api.backup +package org.signal.core.models.backup +import org.signal.core.models.ServiceId +import org.signal.core.util.RandomUtil import org.signal.libsignal.protocol.ecc.ECPrivateKey -import org.whispersystems.signalservice.api.push.ServiceId.ACI -import org.whispersystems.signalservice.internal.util.Util -import org.signal.libsignal.messagebackup.BackupKey as LibSignalBackupKey /** * Safe typing around a media root backup key, which is a 32-byte array. @@ -18,19 +17,19 @@ class MediaRootBackupKey(override val value: ByteArray) : BackupKey { companion object { fun generate(): MediaRootBackupKey { - return MediaRootBackupKey(Util.getSecretBytes(32)) + return MediaRootBackupKey(RandomUtil.getSecureBytes(32)) } } /** * The private key used to generate anonymous credentials when interacting with the backup service. */ - override fun deriveAnonymousCredentialPrivateKey(aci: ACI): ECPrivateKey { - return LibSignalBackupKey(value).deriveEcKey(aci.libSignalAci) + override fun deriveAnonymousCredentialPrivateKey(aci: ServiceId.ACI): ECPrivateKey { + return org.signal.libsignal.messagebackup.BackupKey(value).deriveEcKey(aci.libSignalAci) } fun deriveMediaId(mediaName: MediaName): MediaId { - return MediaId(LibSignalBackupKey(value).deriveMediaId(mediaName.name)) + return MediaId(org.signal.libsignal.messagebackup.BackupKey(value).deriveMediaId(mediaName.name)) } fun deriveMediaSecrets(mediaName: MediaName): MediaKeyMaterial { @@ -43,11 +42,11 @@ class MediaRootBackupKey(override val value: ByteArray) : BackupKey { } fun deriveThumbnailTransitKey(thumbnailMediaName: MediaName): ByteArray { - return LibSignalBackupKey(value).deriveThumbnailTransitEncryptionKey(deriveMediaId(thumbnailMediaName).value) + return org.signal.libsignal.messagebackup.BackupKey(value).deriveThumbnailTransitEncryptionKey(deriveMediaId(thumbnailMediaName).value) } private fun deriveMediaSecrets(mediaId: MediaId): MediaKeyMaterial { - val libsignalBackupKey = LibSignalBackupKey(value) + val libsignalBackupKey = org.signal.libsignal.messagebackup.BackupKey(value) val combinedKey = libsignalBackupKey.deriveMediaEncryptionKey(mediaId.value) return MediaKeyMaterial( @@ -60,9 +59,9 @@ class MediaRootBackupKey(override val value: ByteArray) : BackupKey { /** * Identifies a the location of a user's backup. */ - fun deriveBackupId(aci: ACI): BackupId { + fun deriveBackupId(aci: ServiceId.ACI): BackupId { return BackupId( - LibSignalBackupKey(value).deriveBackupId(aci.libSignalAci) + org.signal.libsignal.messagebackup.BackupKey(value).deriveBackupId(aci.libSignalAci) ) } diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/backup/MessageBackupKey.kt b/core-models/src/main/java/org/signal/core/models/backup/MessageBackupKey.kt similarity index 67% rename from libsignal-service/src/main/java/org/whispersystems/signalservice/api/backup/MessageBackupKey.kt rename to core-models/src/main/java/org/signal/core/models/backup/MessageBackupKey.kt index eb19fced4a..7f70a2f302 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/backup/MessageBackupKey.kt +++ b/core-models/src/main/java/org/signal/core/models/backup/MessageBackupKey.kt @@ -1,15 +1,16 @@ /* - * Copyright 2023 Signal Messenger, LLC + * Copyright 2025 Signal Messenger, LLC * SPDX-License-Identifier: AGPL-3.0-only */ -package org.whispersystems.signalservice.api.backup +package org.signal.core.models.backup +import org.signal.core.models.ServiceId import org.signal.libsignal.messagebackup.BackupForwardSecrecyToken +import org.signal.libsignal.messagebackup.MessageBackupKey import org.signal.libsignal.protocol.ecc.ECPrivateKey -import org.whispersystems.signalservice.api.push.ServiceId.ACI -import org.signal.libsignal.messagebackup.BackupKey as LibSignalBackupKey -import org.signal.libsignal.messagebackup.MessageBackupKey as LibSignalMessageBackupKey + +private typealias LibSignalBackupKey = org.signal.libsignal.messagebackup.BackupKey /** * Safe typing around a backup key, which is a 32-byte array. @@ -23,7 +24,7 @@ class MessageBackupKey(override val value: ByteArray) : BackupKey { /** * The private key used to generate anonymous credentials when interacting with the backup service. */ - override fun deriveAnonymousCredentialPrivateKey(aci: ACI): ECPrivateKey { + override fun deriveAnonymousCredentialPrivateKey(aci: ServiceId.ACI): ECPrivateKey { return LibSignalBackupKey(value).deriveEcKey(aci.libSignalAci) } @@ -32,10 +33,10 @@ class MessageBackupKey(override val value: ByteArray) : BackupKey { * * @param forwardSecrecyToken Should be present for any backup located on the archive CDN. Absent for other uses (i.e. link+sync). */ - fun deriveBackupSecrets(aci: ACI, forwardSecrecyToken: BackupForwardSecrecyToken?): BackupKeyMaterial { + fun deriveBackupSecrets(aci: ServiceId.ACI, forwardSecrecyToken: BackupForwardSecrecyToken?): BackupKeyMaterial { val backupId = deriveBackupId(aci) val libsignalBackupKey = LibSignalBackupKey(value) - val libsignalMessageMessageBackupKey = LibSignalMessageBackupKey(libsignalBackupKey, backupId.value, forwardSecrecyToken) + val libsignalMessageMessageBackupKey = MessageBackupKey(libsignalBackupKey, backupId.value, forwardSecrecyToken) return BackupKeyMaterial( id = backupId, @@ -47,7 +48,7 @@ class MessageBackupKey(override val value: ByteArray) : BackupKey { /** * Identifies a the location of a user's backup. */ - fun deriveBackupId(aci: ACI): BackupId { + fun deriveBackupId(aci: ServiceId.ACI): BackupId { return BackupId( LibSignalBackupKey(value).deriveBackupId(aci.libSignalAci) ) diff --git a/core-models/src/main/java/org/signal/core/models/storageservice/StorageCipherKey.kt b/core-models/src/main/java/org/signal/core/models/storageservice/StorageCipherKey.kt new file mode 100644 index 0000000000..2f390ab1d2 --- /dev/null +++ b/core-models/src/main/java/org/signal/core/models/storageservice/StorageCipherKey.kt @@ -0,0 +1,10 @@ +/* + * Copyright 2025 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.signal.core.models.storageservice + +interface StorageCipherKey { + fun serialize(): ByteArray +} diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/storage/StorageItemKey.kt b/core-models/src/main/java/org/signal/core/models/storageservice/StorageItemKey.kt similarity index 80% rename from libsignal-service/src/main/java/org/whispersystems/signalservice/api/storage/StorageItemKey.kt rename to core-models/src/main/java/org/signal/core/models/storageservice/StorageItemKey.kt index 90a58702c0..a6e102ff9b 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/storage/StorageItemKey.kt +++ b/core-models/src/main/java/org/signal/core/models/storageservice/StorageItemKey.kt @@ -1,4 +1,9 @@ -package org.whispersystems.signalservice.api.storage +/* + * Copyright 2025 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.signal.core.models.storageservice /** * Key used to encrypt individual storage items in the storage service. diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/storage/StorageKey.kt b/core-models/src/main/java/org/signal/core/models/storageservice/StorageKey.kt similarity index 68% rename from libsignal-service/src/main/java/org/whispersystems/signalservice/api/storage/StorageKey.kt rename to core-models/src/main/java/org/signal/core/models/storageservice/StorageKey.kt index 14e06286f5..addec80640 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/storage/StorageKey.kt +++ b/core-models/src/main/java/org/signal/core/models/storageservice/StorageKey.kt @@ -1,15 +1,18 @@ -package org.whispersystems.signalservice.api.storage +/* + * Copyright 2025 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ -import org.signal.core.util.Base64.encodeWithPadding +package org.signal.core.models.storageservice + +import org.signal.core.util.Base64 import org.signal.core.util.CryptoUtil -import org.whispersystems.signalservice.api.kbs.MasterKey -import org.whispersystems.util.StringUtil /** * Key used to encrypt data on the storage service. Not used directly -- instead we used keys that * are derived for each item we're storing. * - * Created via [MasterKey.deriveStorageServiceKey]. + * Created via [org.signal.core.models.MasterKey.deriveStorageServiceKey]. */ class StorageKey(val key: ByteArray) { init { @@ -21,11 +24,11 @@ class StorageKey(val key: ByteArray) { } fun deriveItemKey(rawId: ByteArray): StorageItemKey { - return StorageItemKey(derive("Item_" + encodeWithPadding(rawId))) + return StorageItemKey(derive("Item_" + Base64.encodeWithPadding(rawId))) } private fun derive(keyName: String): ByteArray { - return CryptoUtil.hmacSha256(key, StringUtil.utf8(keyName)) + return CryptoUtil.hmacSha256(key, keyName.toByteArray(Charsets.UTF_8)) } fun serialize(): ByteArray { diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/storage/StorageManifestKey.kt b/core-models/src/main/java/org/signal/core/models/storageservice/StorageManifestKey.kt similarity index 69% rename from libsignal-service/src/main/java/org/whispersystems/signalservice/api/storage/StorageManifestKey.kt rename to core-models/src/main/java/org/signal/core/models/storageservice/StorageManifestKey.kt index 2a5aaa9428..66013f2df1 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/storage/StorageManifestKey.kt +++ b/core-models/src/main/java/org/signal/core/models/storageservice/StorageManifestKey.kt @@ -1,9 +1,14 @@ -package org.whispersystems.signalservice.api.storage +/* + * Copyright 2025 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.signal.core.models.storageservice /** * Key used to encrypt a manifest in the storage service. * - * Created via [StorageKey.deriveManifestKey]. + * Created via [org.whispersystems.signalservice.api.storage.StorageKey.deriveManifestKey]. */ class StorageManifestKey(val key: ByteArray) : StorageCipherKey { init { diff --git a/core-util-jvm/src/main/java/org/signal/core/util/RandomUtil.kt b/core-util-jvm/src/main/java/org/signal/core/util/RandomUtil.kt new file mode 100644 index 0000000000..a28d597875 --- /dev/null +++ b/core-util-jvm/src/main/java/org/signal/core/util/RandomUtil.kt @@ -0,0 +1,17 @@ +/* + * Copyright 2025 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.signal.core.util + +import java.security.SecureRandom + +object RandomUtil { + + fun getSecureBytes(size: Int): ByteArray { + val secret = ByteArray(size) + SecureRandom().nextBytes(secret) + return secret + } +} diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/util/UuidExtensions.kt b/core-util-jvm/src/main/java/org/signal/core/util/UuidExtensions.kt similarity index 60% rename from libsignal-service/src/main/java/org/whispersystems/signalservice/api/util/UuidExtensions.kt rename to core-util-jvm/src/main/java/org/signal/core/util/UuidExtensions.kt index dd380cdeec..adc8cfba09 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/util/UuidExtensions.kt +++ b/core-util-jvm/src/main/java/org/signal/core/util/UuidExtensions.kt @@ -1,9 +1,9 @@ /* - * Copyright 2023 Signal Messenger, LLC + * Copyright 2025 Signal Messenger, LLC * SPDX-License-Identifier: AGPL-3.0-only */ -package org.whispersystems.signalservice.api.util +package org.signal.core.util import java.util.UUID diff --git a/core-util-jvm/src/main/java/org/signal/core/util/UuidUtil.kt b/core-util-jvm/src/main/java/org/signal/core/util/UuidUtil.kt new file mode 100644 index 0000000000..9730fdc6d8 --- /dev/null +++ b/core-util-jvm/src/main/java/org/signal/core/util/UuidUtil.kt @@ -0,0 +1,127 @@ +/* + * Copyright 2025 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ +package org.signal.core.util + +import okio.ByteString +import java.nio.ByteBuffer +import java.util.Optional +import java.util.UUID +import java.util.regex.Pattern + +object UuidUtil { + @JvmField + val UNKNOWN_UUID: UUID = UUID(0, 0) + val UNKNOWN_UUID_STRING: String = UNKNOWN_UUID.toString() + + private val UUID_PATTERN: Pattern = Pattern.compile("[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}", Pattern.CASE_INSENSITIVE) + + fun parse(uuid: String?): Optional { + return Optional.ofNullable(parseOrNull(uuid)) + } + + @JvmStatic + fun parseOrNull(uuid: String?): UUID? { + return uuid?.takeIf { isUuid(it) }?.let { parseOrThrow(it) } + } + + fun parseOrUnknown(uuid: String?): UUID { + return parseOrNull(uuid) ?: UNKNOWN_UUID + } + + @JvmStatic + fun parseOrThrow(uuid: String): UUID { + return UUID.fromString(uuid) + } + + @JvmStatic + fun parseOrThrow(bytes: ByteArray): UUID { + val byteBuffer = ByteBuffer.wrap(bytes) + val high = byteBuffer.getLong() + val low = byteBuffer.getLong() + + return UUID(high, low) + } + + fun parseOrThrow(bytes: ByteString): UUID { + return parseOrNull(bytes.toByteArray())!! + } + + fun isUuid(uuid: String?): Boolean { + return uuid != null && UUID_PATTERN.matcher(uuid).matches() + } + + @JvmStatic + fun toByteArray(uuid: UUID): ByteArray { + val buffer = ByteBuffer.wrap(ByteArray(16)) + buffer.putLong(uuid.mostSignificantBits) + buffer.putLong(uuid.leastSignificantBits) + + return buffer.array() + } + + @JvmStatic + fun toByteString(uuid: UUID): ByteString { + return ByteString.of(*toByteArray(uuid)) + } + + @JvmStatic + fun fromByteString(bytes: ByteString): UUID { + return parseOrThrow(bytes.toByteArray()) + } + + @JvmStatic + fun fromByteStringOrNull(bytes: ByteString?): UUID? { + if (bytes == null) { + return null + } + + return parseOrNull(bytes.toByteArray()) + } + + @JvmStatic + fun getStringUUID(stringId: String?, bytes: ByteString?): String? { + val uuid = parseOrNull(bytes) + return uuid?.toString() ?: stringId + } + + @JvmStatic + fun fromByteStringOrUnknown(bytes: ByteString?): UUID { + val uuid = fromByteStringOrNull(bytes) + return uuid ?: UNKNOWN_UUID + } + + fun parseOrNull(byteArray: ByteArray?): UUID? { + return if (byteArray != null && byteArray.size == 16) parseOrThrow(byteArray) else null + } + + fun parseOrNull(byteString: ByteString?): UUID? { + return if (byteString != null) parseOrNull(byteString.toByteArray()) else null + } + + fun fromByteStrings(byteStringCollection: Collection): List { + val result = ArrayList(byteStringCollection.size) + + for (byteString in byteStringCollection) { + result.add(fromByteString(byteString)) + } + + return result + } + + /** + * Keep only UUIDs that are not the [.UNKNOWN_UUID]. + */ + fun filterKnown(uuids: MutableCollection): MutableList { + val result = ArrayList(uuids.size) + + for (uuid in uuids) { + if (UNKNOWN_UUID != uuid) { + result.add(uuid) + } + } + + return result + } +} diff --git a/libsignal-service/src/test/java/org/whispersystems/signalservice/api/util/UuidUtilTest.java b/core-util-jvm/src/test/java/org/signal/core/util/UuidUtilTest.java similarity index 93% rename from libsignal-service/src/test/java/org/whispersystems/signalservice/api/util/UuidUtilTest.java rename to core-util-jvm/src/test/java/org/signal/core/util/UuidUtilTest.java index 624e3f4521..be0b0ee840 100644 --- a/libsignal-service/src/test/java/org/whispersystems/signalservice/api/util/UuidUtilTest.java +++ b/core-util-jvm/src/test/java/org/signal/core/util/UuidUtilTest.java @@ -1,4 +1,9 @@ -package org.whispersystems.signalservice.api.util; +/* + * Copyright 2025 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.signal.core.util; import org.junit.Test; import org.signal.libsignal.protocol.util.Hex; diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 365853f90a..6be1231d83 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -102,6 +102,7 @@ androidx-navigation-safe-args-gradle-plugin = { module = "androidx.navigation:na androidx-navigation3-runtime = { module = "androidx.navigation3:navigation3-runtime", version.ref = "androidx-navigation3-core" } androidx-navigation3-ui = { module = "androidx.navigation3:navigation3-ui", version.ref = "androidx-navigation3-core" } androidx-lifecycle-viewmodel-ktx = { module = "androidx.lifecycle:lifecycle-viewmodel-ktx", version.ref = "androidx-lifecycle" } +androidx-lifecycle-viewmodel-compose = { module = "androidx.lifecycle:lifecycle-viewmodel-compose", version.ref = "androidx-lifecycle" } androidx-lifecycle-livedata-core = { module = "androidx.lifecycle:lifecycle-livedata", version.ref = "androidx-lifecycle" } androidx-lifecycle-livedata-ktx = { module = "androidx.lifecycle:lifecycle-livedata-ktx", version.ref = "androidx-lifecycle" } androidx-lifecycle-process = { module = "androidx.lifecycle:lifecycle-process", version.ref = "androidx-lifecycle" } diff --git a/libsignal-service/build.gradle.kts b/libsignal-service/build.gradle.kts index dcc6f9520d..5f234d29cb 100644 --- a/libsignal-service/build.gradle.kts +++ b/libsignal-service/build.gradle.kts @@ -119,6 +119,7 @@ dependencies { implementation(libs.kotlinx.coroutines.core.jvm) implementation(project(":core-util-jvm")) + implementation(project(":core-models")) testImplementation(testLibs.junit.junit) testImplementation(testLibs.assertk) diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/SignalServiceAccountManager.java b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/SignalServiceAccountManager.java index d81d49b3c3..1d8a61d28c 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/SignalServiceAccountManager.java +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/SignalServiceAccountManager.java @@ -11,8 +11,8 @@ import org.whispersystems.signalservice.api.account.AccountApi; import org.whispersystems.signalservice.api.groupsv2.ClientZkOperations; import org.whispersystems.signalservice.api.groupsv2.GroupsV2Api; import org.whispersystems.signalservice.api.groupsv2.GroupsV2Operations; -import org.whispersystems.signalservice.api.push.ServiceId.ACI; -import org.whispersystems.signalservice.api.push.ServiceId.PNI; +import org.signal.core.models.ServiceId.ACI; +import org.signal.core.models.ServiceId.PNI; import org.whispersystems.signalservice.api.registration.RegistrationApi; import org.whispersystems.signalservice.api.svr.SecureValueRecoveryV2; import org.whispersystems.signalservice.api.svr.SecureValueRecoveryV3; diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/SignalServiceDataStore.java b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/SignalServiceDataStore.java index 3b9cf25d28..d9254a4d1f 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/SignalServiceDataStore.java +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/SignalServiceDataStore.java @@ -1,6 +1,6 @@ package org.whispersystems.signalservice.api; -import org.whispersystems.signalservice.api.push.ServiceId; +import org.signal.core.models.ServiceId; /** * And extension of the normal protocol store interface that has additional methods that are needed diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/SignalServiceMessageReceiver.java b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/SignalServiceMessageReceiver.java index 5b568c3063..214d781b1c 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/SignalServiceMessageReceiver.java +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/SignalServiceMessageReceiver.java @@ -9,7 +9,7 @@ package org.whispersystems.signalservice.api; import org.signal.core.util.StreamUtil; import org.signal.libsignal.protocol.InvalidMessageException; import org.signal.libsignal.zkgroup.profiles.ProfileKey; -import org.whispersystems.signalservice.api.backup.MediaRootBackupKey; +import org.signal.core.models.backup.MediaRootBackupKey; import org.whispersystems.signalservice.api.crypto.AttachmentCipherInputStream; import org.whispersystems.signalservice.api.crypto.AttachmentCipherInputStream.IntegrityCheck; import org.whispersystems.signalservice.api.crypto.AttachmentCipherStreamUtil; diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/SignalServiceMessageSender.java b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/SignalServiceMessageSender.java index 8d76fb9827..03832dfe0c 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/SignalServiceMessageSender.java +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/SignalServiceMessageSender.java @@ -68,8 +68,8 @@ import org.whispersystems.signalservice.api.messages.multidevice.ViewOnceOpenMes import org.whispersystems.signalservice.api.messages.multidevice.ViewedMessage; import org.whispersystems.signalservice.api.messages.shared.SharedContact; import org.whispersystems.signalservice.api.push.DistributionId; -import org.whispersystems.signalservice.api.push.ServiceId; -import org.whispersystems.signalservice.api.push.ServiceId.PNI; +import org.signal.core.models.ServiceId; +import org.signal.core.models.ServiceId.PNI; import org.whispersystems.signalservice.api.push.SignalServiceAddress; import org.whispersystems.signalservice.api.push.exceptions.AuthorizationFailedException; import org.whispersystems.signalservice.api.push.exceptions.NonSuccessfulResponseCodeException; @@ -84,7 +84,7 @@ import org.whispersystems.signalservice.api.util.CredentialsProvider; import org.whispersystems.signalservice.api.util.Preconditions; import org.whispersystems.signalservice.api.util.Uint64RangeException; import org.whispersystems.signalservice.api.util.Uint64Util; -import org.whispersystems.signalservice.api.util.UuidUtil; +import org.signal.core.util.UuidUtil; import org.whispersystems.signalservice.api.websocket.WebSocketUnavailableException; import org.whispersystems.signalservice.internal.crypto.AttachmentDigest; import org.whispersystems.signalservice.internal.crypto.PaddingInputStream; diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/archive/ArchiveApi.kt b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/archive/ArchiveApi.kt index 48c419c2a8..06b96361ed 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/archive/ArchiveApi.kt +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/archive/ArchiveApi.kt @@ -5,6 +5,10 @@ package org.whispersystems.signalservice.api.archive +import org.signal.core.models.ServiceId.ACI +import org.signal.core.models.backup.BackupKey +import org.signal.core.models.backup.MediaRootBackupKey +import org.signal.core.models.backup.MessageBackupKey import org.signal.core.util.isNotNullOrBlank import org.signal.libsignal.protocol.ecc.ECPrivateKey import org.signal.libsignal.protocol.ecc.ECPublicKey @@ -14,11 +18,7 @@ import org.signal.libsignal.zkgroup.backups.BackupAuthCredentialRequestContext import org.signal.libsignal.zkgroup.backups.BackupAuthCredentialResponse import org.whispersystems.signalservice.api.NetworkResult import org.whispersystems.signalservice.api.archive.ArchiveGetMediaItemsResponse.StoredMediaObject -import org.whispersystems.signalservice.api.backup.BackupKey -import org.whispersystems.signalservice.api.backup.MediaRootBackupKey -import org.whispersystems.signalservice.api.backup.MessageBackupKey import org.whispersystems.signalservice.api.messages.SignalServiceAttachment -import org.whispersystems.signalservice.api.push.ServiceId.ACI import org.whispersystems.signalservice.api.websocket.SignalWebSocket import org.whispersystems.signalservice.internal.delete import org.whispersystems.signalservice.internal.get diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/archive/ArchiveServiceAccess.kt b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/archive/ArchiveServiceAccess.kt index 5ea15952c2..c115453e2b 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/archive/ArchiveServiceAccess.kt +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/archive/ArchiveServiceAccess.kt @@ -5,7 +5,7 @@ package org.whispersystems.signalservice.api.archive -import org.whispersystems.signalservice.api.backup.BackupKey +import org.signal.core.models.backup.BackupKey /** * Key and credential combo needed to perform backup operations on the server. diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/archive/ArchiveServiceAccessPair.kt b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/archive/ArchiveServiceAccessPair.kt index e04ed0a8de..004715fc39 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/archive/ArchiveServiceAccessPair.kt +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/archive/ArchiveServiceAccessPair.kt @@ -5,8 +5,8 @@ package org.whispersystems.signalservice.api.archive -import org.whispersystems.signalservice.api.backup.MediaRootBackupKey -import org.whispersystems.signalservice.api.backup.MessageBackupKey +import org.signal.core.models.backup.MediaRootBackupKey +import org.signal.core.models.backup.MessageBackupKey /** * A convenient container for passing around both a message and media archive service credential. diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/cds/CdsApi.kt b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/cds/CdsApi.kt index 2c3eba5640..2faebe9d28 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/cds/CdsApi.kt +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/cds/CdsApi.kt @@ -5,13 +5,13 @@ package org.whispersystems.signalservice.api.cds +import org.signal.core.models.ServiceId import org.signal.core.util.logging.Log import org.signal.libsignal.net.CdsiProtocolException import org.signal.libsignal.net.Network import org.signal.libsignal.zkgroup.profiles.ProfileKey import org.whispersystems.signalservice.api.NetworkResult import org.whispersystems.signalservice.api.NetworkResult.StatusCodeError -import org.whispersystems.signalservice.api.push.ServiceId import org.whispersystems.signalservice.api.push.exceptions.CdsiInvalidTokenException import org.whispersystems.signalservice.api.push.exceptions.CdsiResourceExhaustedException import org.whispersystems.signalservice.api.websocket.SignalWebSocket diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/cds/CdsiV2Service.java b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/cds/CdsiV2Service.java index f268029f00..6e53e9c742 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/cds/CdsiV2Service.java +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/cds/CdsiV2Service.java @@ -10,9 +10,9 @@ import org.signal.libsignal.net.CdsiLookupResponse; import org.signal.libsignal.net.Network; import org.signal.libsignal.zkgroup.profiles.ProfileKey; import org.whispersystems.signalservice.api.NetworkResult; -import org.whispersystems.signalservice.api.push.ServiceId; -import org.whispersystems.signalservice.api.push.ServiceId.ACI; -import org.whispersystems.signalservice.api.push.ServiceId.PNI; +import org.signal.core.models.ServiceId; +import org.signal.core.models.ServiceId.ACI; +import org.signal.core.models.ServiceId.PNI; import org.whispersystems.signalservice.api.push.exceptions.CdsiInvalidArgumentException; import org.whispersystems.signalservice.api.push.exceptions.CdsiInvalidTokenException; import org.whispersystems.signalservice.api.push.exceptions.CdsiResourceExhaustedException; diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/crypto/AttachmentCipherInputStream.kt b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/crypto/AttachmentCipherInputStream.kt index 9478cc986f..129a04d711 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/crypto/AttachmentCipherInputStream.kt +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/crypto/AttachmentCipherInputStream.kt @@ -5,6 +5,7 @@ */ package org.whispersystems.signalservice.api.crypto +import org.signal.core.models.backup.MediaRootBackupKey.MediaKeyMaterial import org.signal.core.util.Base64 import org.signal.core.util.readNBytesOrThrow import org.signal.core.util.stream.LimitedInputStream @@ -13,7 +14,6 @@ import org.signal.libsignal.protocol.InvalidMessageException import org.signal.libsignal.protocol.incrementalmac.ChunkSizeChoice import org.signal.libsignal.protocol.incrementalmac.IncrementalMacInputStream import org.signal.libsignal.protocol.kdf.HKDF -import org.whispersystems.signalservice.api.backup.MediaRootBackupKey.MediaKeyMaterial import org.whispersystems.signalservice.internal.util.Util import java.io.ByteArrayInputStream import java.io.File diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/crypto/EnvelopeMetadata.kt b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/crypto/EnvelopeMetadata.kt index 91924af8c7..b1d5b9801f 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/crypto/EnvelopeMetadata.kt +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/crypto/EnvelopeMetadata.kt @@ -1,6 +1,6 @@ package org.whispersystems.signalservice.api.crypto -import org.whispersystems.signalservice.api.push.ServiceId +import org.signal.core.models.ServiceId class EnvelopeMetadata( val sourceServiceId: ServiceId, diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/crypto/HmacSIV.java b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/crypto/HmacSIV.java index 11596a0b28..dc7fe4eb22 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/crypto/HmacSIV.java +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/crypto/HmacSIV.java @@ -1,7 +1,6 @@ package org.whispersystems.signalservice.api.crypto; -import org.whispersystems.util.StringUtil; - +import java.nio.charset.StandardCharsets; import java.util.Arrays; import static org.signal.core.util.CryptoUtil.hmacSha256; @@ -16,8 +15,8 @@ import static java.util.Arrays.copyOfRange; */ public final class HmacSIV { - private static final byte[] AUTH_BYTES = StringUtil.utf8("auth"); - private static final byte[] ENC_BYTES = StringUtil.utf8("enc"); + private static final byte[] AUTH_BYTES = "auth".getBytes(StandardCharsets.UTF_8); + private static final byte[] ENC_BYTES = "enc".getBytes(StandardCharsets.UTF_8); /** * Encrypts M with K. diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/crypto/SignalServiceCipher.java b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/crypto/SignalServiceCipher.java index 819198bc83..6cf3df2b16 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/crypto/SignalServiceCipher.java +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/crypto/SignalServiceCipher.java @@ -46,10 +46,10 @@ import org.whispersystems.signalservice.api.SignalServiceAccountDataStore; import org.whispersystems.signalservice.api.SignalSessionLock; import org.whispersystems.signalservice.api.messages.SignalServiceMetadata; import org.whispersystems.signalservice.api.push.DistributionId; -import org.whispersystems.signalservice.api.push.ServiceId; -import org.whispersystems.signalservice.api.push.ServiceId.ACI; +import org.signal.core.models.ServiceId; +import org.signal.core.models.ServiceId.ACI; import org.whispersystems.signalservice.api.push.SignalServiceAddress; -import org.whispersystems.signalservice.api.util.UuidUtil; +import org.signal.core.util.UuidUtil; import org.whispersystems.signalservice.internal.push.Content; import org.whispersystems.signalservice.internal.push.Envelope; import org.whispersystems.signalservice.internal.push.OutgoingPushMessage; diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/groupsv2/DecryptedGroupExtensions.kt b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/groupsv2/DecryptedGroupExtensions.kt index 4bd31c6e11..4fa9e4ddf7 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/groupsv2/DecryptedGroupExtensions.kt +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/groupsv2/DecryptedGroupExtensions.kt @@ -5,11 +5,11 @@ package org.whispersystems.signalservice.api.groupsv2 +import org.signal.core.models.ServiceId +import org.signal.core.models.ServiceId.ACI import org.signal.storageservice.protos.groups.local.DecryptedMember import org.signal.storageservice.protos.groups.local.DecryptedPendingMember import org.signal.storageservice.protos.groups.local.DecryptedRequestingMember -import org.whispersystems.signalservice.api.push.ServiceId -import org.whispersystems.signalservice.api.push.ServiceId.ACI import java.util.Optional fun Collection.toAciListWithUnknowns(): List { diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/groupsv2/DecryptedGroupUtil.java b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/groupsv2/DecryptedGroupUtil.java index d1552510e5..983630862b 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/groupsv2/DecryptedGroupUtil.java +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/groupsv2/DecryptedGroupUtil.java @@ -13,8 +13,8 @@ import org.signal.storageservice.protos.groups.local.DecryptedPendingMember; import org.signal.storageservice.protos.groups.local.DecryptedPendingMemberRemoval; import org.signal.storageservice.protos.groups.local.DecryptedRequestingMember; import org.signal.storageservice.protos.groups.local.EnabledState; -import org.whispersystems.signalservice.api.push.ServiceId; -import org.whispersystems.signalservice.api.push.ServiceId.ACI; +import org.signal.core.models.ServiceId; +import org.signal.core.models.ServiceId.ACI; import org.whispersystems.signalservice.api.push.ServiceIds; import java.util.ArrayList; diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/groupsv2/GroupCandidate.java b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/groupsv2/GroupCandidate.java index af1e94975e..e3f8d3fcc5 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/groupsv2/GroupCandidate.java +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/groupsv2/GroupCandidate.java @@ -1,7 +1,7 @@ package org.whispersystems.signalservice.api.groupsv2; import org.signal.libsignal.zkgroup.profiles.ExpiringProfileKeyCredential; -import org.whispersystems.signalservice.api.push.ServiceId; +import org.signal.core.models.ServiceId; import org.whispersystems.signalservice.api.util.ExpiringProfileCredentialUtil; import java.util.HashSet; diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/groupsv2/GroupSendEndorsements.kt b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/groupsv2/GroupSendEndorsements.kt index a8f5abbee0..78b757b2f7 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/groupsv2/GroupSendEndorsements.kt +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/groupsv2/GroupSendEndorsements.kt @@ -5,11 +5,11 @@ package org.whispersystems.signalservice.api.groupsv2 +import org.signal.core.models.ServiceId import org.signal.libsignal.metadata.certificate.SenderCertificate import org.signal.libsignal.zkgroup.groups.GroupSecretParams import org.signal.libsignal.zkgroup.groupsend.GroupSendEndorsement import org.signal.libsignal.zkgroup.groupsend.GroupSendFullToken -import org.whispersystems.signalservice.api.push.ServiceId import org.whispersystems.signalservice.api.push.SignalServiceAddress import java.time.Instant diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/groupsv2/GroupsV2Api.java b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/groupsv2/GroupsV2Api.java index a7d8e2bc15..aa0d63d140 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/groupsv2/GroupsV2Api.java +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/groupsv2/GroupsV2Api.java @@ -23,8 +23,8 @@ import org.signal.storageservice.protos.groups.local.DecryptedGroup; import org.signal.storageservice.protos.groups.local.DecryptedGroupChange; import org.signal.storageservice.protos.groups.local.DecryptedGroupJoinInfo; import org.whispersystems.signalservice.api.NetworkResult; -import org.whispersystems.signalservice.api.push.ServiceId.ACI; -import org.whispersystems.signalservice.api.push.ServiceId.PNI; +import org.signal.core.models.ServiceId.ACI; +import org.signal.core.models.ServiceId.PNI; import org.whispersystems.signalservice.api.websocket.SignalWebSocket; import org.whispersystems.signalservice.internal.push.PushServiceSocket; import org.whispersystems.signalservice.internal.push.exceptions.ForbiddenException; diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/groupsv2/GroupsV2AuthorizationString.java b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/groupsv2/GroupsV2AuthorizationString.java index bcd3e782e9..792bd59955 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/groupsv2/GroupsV2AuthorizationString.java +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/groupsv2/GroupsV2AuthorizationString.java @@ -1,8 +1,8 @@ package org.whispersystems.signalservice.api.groupsv2; +import org.signal.core.util.Hex; import org.signal.libsignal.zkgroup.auth.AuthCredentialPresentation; import org.signal.libsignal.zkgroup.groups.GroupSecretParams; -import org.whispersystems.signalservice.internal.util.Hex; import okhttp3.Credentials; diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/groupsv2/GroupsV2Operations.java b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/groupsv2/GroupsV2Operations.java index 3d44b1f354..603f8a4b43 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/groupsv2/GroupsV2Operations.java +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/groupsv2/GroupsV2Operations.java @@ -38,10 +38,10 @@ import org.signal.storageservice.protos.groups.local.DecryptedRequestingMember; import org.signal.storageservice.protos.groups.local.DecryptedString; import org.signal.storageservice.protos.groups.local.DecryptedTimer; import org.signal.storageservice.protos.groups.local.EnabledState; -import org.whispersystems.signalservice.api.push.ServiceId; -import org.whispersystems.signalservice.api.push.ServiceId.ACI; -import org.whispersystems.signalservice.api.push.ServiceId.PNI; -import org.whispersystems.signalservice.api.util.UuidUtil; +import org.signal.core.models.ServiceId; +import org.signal.core.models.ServiceId.ACI; +import org.signal.core.models.ServiceId.PNI; +import org.signal.core.util.UuidUtil; import java.io.IOException; import java.security.SecureRandom; diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/groupsv2/ReceivedGroupSendEndorsements.kt b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/groupsv2/ReceivedGroupSendEndorsements.kt index 86e8252912..9033d5f8cc 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/groupsv2/ReceivedGroupSendEndorsements.kt +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/groupsv2/ReceivedGroupSendEndorsements.kt @@ -5,9 +5,9 @@ package org.whispersystems.signalservice.api.groupsv2 +import org.signal.core.models.ServiceId import org.signal.libsignal.zkgroup.groupsend.GroupSendEndorsement import org.signal.libsignal.zkgroup.groupsend.GroupSendEndorsementsResponse -import org.whispersystems.signalservice.api.push.ServiceId import java.time.Instant /** diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/kbs/KbsData.java b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/kbs/KbsData.java index 4350a38086..7e22856d21 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/kbs/KbsData.java +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/kbs/KbsData.java @@ -1,5 +1,7 @@ package org.whispersystems.signalservice.api.kbs; +import org.signal.core.models.MasterKey; + /** * Construct from a {@link org.signal.libsignal.svr2.PinHash}. */ diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/kbs/MasterKey.java b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/kbs/MasterKey.java deleted file mode 100644 index 09c1d97f1f..0000000000 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/kbs/MasterKey.java +++ /dev/null @@ -1,71 +0,0 @@ -package org.whispersystems.signalservice.api.kbs; - -import org.signal.core.util.Base64; -import org.whispersystems.signalservice.api.storage.StorageKey; -import org.whispersystems.signalservice.internal.util.Hex; -import org.whispersystems.util.StringUtil; - -import java.security.SecureRandom; -import java.util.Arrays; - -import static org.signal.core.util.CryptoUtil.hmacSha256; - -public final class MasterKey { - - private static final int LENGTH = 32; - - private final byte[] masterKey; - - public MasterKey(byte[] masterKey) { - if (masterKey.length != LENGTH) throw new AssertionError(); - - this.masterKey = masterKey; - } - - public static MasterKey createNew(SecureRandom secureRandom) { - byte[] key = new byte[LENGTH]; - secureRandom.nextBytes(key); - return new MasterKey(key); - } - - public String deriveRegistrationLock() { - return Hex.toStringCondensed(derive("Registration Lock")); - } - - public String deriveRegistrationRecoveryPassword() { - return Base64.encodeWithPadding(derive("Registration Recovery")); - } - - public StorageKey deriveStorageServiceKey() { - return new StorageKey(derive("Storage Service Encryption")); - } - - public byte[] deriveLoggingKey() { - return derive("Logging Key"); - } - - private byte[] derive(String keyName) { - return hmacSha256(masterKey, StringUtil.utf8(keyName)); - } - - public byte[] serialize() { - return masterKey.clone(); - } - - @Override - public boolean equals(Object o) { - if (o == null || o.getClass() != getClass()) return false; - - return Arrays.equals(((MasterKey) o).masterKey, masterKey); - } - - @Override - public int hashCode() { - return Arrays.hashCode(masterKey); - } - - @Override - public String toString() { - return "MasterKey(xxx)"; - } -} diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/kbs/PinHashUtil.kt b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/kbs/PinHashUtil.kt index 93f188a1c4..6f053ee31d 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/kbs/PinHashUtil.kt +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/kbs/PinHashUtil.kt @@ -4,6 +4,7 @@ */ package org.whispersystems.signalservice.api.kbs +import org.signal.core.models.MasterKey import org.signal.libsignal.svr2.Pin import org.signal.libsignal.svr2.PinHash import org.whispersystems.signalservice.api.crypto.HmacSIV diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/link/LinkDeviceApi.kt b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/link/LinkDeviceApi.kt index fe2957d374..f268389cae 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/link/LinkDeviceApi.kt +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/link/LinkDeviceApi.kt @@ -6,20 +6,20 @@ package org.whispersystems.signalservice.api.link import okio.ByteString.Companion.toByteString +import org.signal.core.models.AccountEntropyPool +import org.signal.core.models.MasterKey +import org.signal.core.models.ServiceId.ACI +import org.signal.core.models.ServiceId.PNI +import org.signal.core.models.backup.MediaRootBackupKey +import org.signal.core.models.backup.MessageBackupKey import org.signal.core.util.Base64.encodeWithPadding import org.signal.core.util.urlEncode import org.signal.libsignal.protocol.IdentityKeyPair import org.signal.libsignal.protocol.ecc.ECPublicKey import org.signal.libsignal.zkgroup.profiles.ProfileKey -import org.whispersystems.signalservice.api.AccountEntropyPool import org.whispersystems.signalservice.api.NetworkResult -import org.whispersystems.signalservice.api.backup.MediaRootBackupKey -import org.whispersystems.signalservice.api.backup.MessageBackupKey -import org.whispersystems.signalservice.api.kbs.MasterKey import org.whispersystems.signalservice.api.messages.multidevice.DeviceInfo import org.whispersystems.signalservice.api.provisioning.ProvisioningMessage -import org.whispersystems.signalservice.api.push.ServiceId.ACI -import org.whispersystems.signalservice.api.push.ServiceId.PNI import org.whispersystems.signalservice.api.websocket.SignalWebSocket import org.whispersystems.signalservice.internal.crypto.PrimaryProvisioningCipher import org.whispersystems.signalservice.internal.delete diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/message/MessageApi.kt b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/message/MessageApi.kt index e0ec021134..179134a237 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/message/MessageApi.kt +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/message/MessageApi.kt @@ -5,9 +5,9 @@ package org.whispersystems.signalservice.api.message +import org.signal.core.models.ServiceId import org.whispersystems.signalservice.api.NetworkResult import org.whispersystems.signalservice.api.crypto.SealedSenderAccess -import org.whispersystems.signalservice.api.push.ServiceId import org.whispersystems.signalservice.api.websocket.SignalWebSocket import org.whispersystems.signalservice.internal.post import org.whispersystems.signalservice.internal.push.OutgoingPushMessageList diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/messages/EnvelopeContentValidator.kt b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/messages/EnvelopeContentValidator.kt index e865591d0a..124084ad12 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/messages/EnvelopeContentValidator.kt +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/messages/EnvelopeContentValidator.kt @@ -1,13 +1,13 @@ package org.whispersystems.signalservice.api.messages import okio.ByteString +import org.signal.core.models.ServiceId +import org.signal.core.models.ServiceId.ACI import org.signal.libsignal.protocol.message.DecryptionErrorMessage import org.signal.libsignal.protocol.message.SenderKeyDistributionMessage import org.signal.libsignal.zkgroup.InvalidInputException import org.signal.libsignal.zkgroup.groups.GroupMasterKey import org.signal.libsignal.zkgroup.receipts.ReceiptCredentialPresentation -import org.whispersystems.signalservice.api.push.ServiceId -import org.whispersystems.signalservice.api.push.ServiceId.ACI import org.whispersystems.signalservice.internal.push.AttachmentPointer import org.whispersystems.signalservice.internal.push.Content import org.whispersystems.signalservice.internal.push.DataMessage diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/messages/SignalServiceDataMessage.kt b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/messages/SignalServiceDataMessage.kt index 5347c5fe2f..afa9e246f0 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/messages/SignalServiceDataMessage.kt +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/messages/SignalServiceDataMessage.kt @@ -5,10 +5,10 @@ */ package org.whispersystems.signalservice.api.messages +import org.signal.core.models.ServiceId import org.signal.libsignal.zkgroup.groups.GroupSecretParams import org.signal.libsignal.zkgroup.receipts.ReceiptCredentialPresentation import org.whispersystems.signalservice.api.messages.shared.SharedContact -import org.whispersystems.signalservice.api.push.ServiceId import org.whispersystems.signalservice.api.util.OptionalUtil.asOptional import org.whispersystems.signalservice.api.util.OptionalUtil.emptyIfStringEmpty import org.whispersystems.signalservice.internal.push.BodyRange diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/messages/multidevice/BlockedListMessage.kt b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/messages/multidevice/BlockedListMessage.kt index 954b232f04..2b26bc4fd7 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/messages/multidevice/BlockedListMessage.kt +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/messages/multidevice/BlockedListMessage.kt @@ -1,6 +1,6 @@ package org.whispersystems.signalservice.api.messages.multidevice -import org.whispersystems.signalservice.api.push.ServiceId +import org.signal.core.models.ServiceId class BlockedListMessage( @JvmField val individuals: List, diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/messages/multidevice/DeviceContact.java b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/messages/multidevice/DeviceContact.java index 82b44e590e..332fe5fe9a 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/messages/multidevice/DeviceContact.java +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/messages/multidevice/DeviceContact.java @@ -6,8 +6,7 @@ package org.whispersystems.signalservice.api.messages.multidevice; -import org.signal.libsignal.zkgroup.profiles.ProfileKey; -import org.whispersystems.signalservice.api.push.ServiceId.ACI; +import org.signal.core.models.ServiceId.ACI; import java.util.Optional; diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/messages/multidevice/DeviceContactsInputStream.java b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/messages/multidevice/DeviceContactsInputStream.java index 3d0ce24b78..05893b92e6 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/messages/multidevice/DeviceContactsInputStream.java +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/messages/multidevice/DeviceContactsInputStream.java @@ -7,16 +7,7 @@ package org.whispersystems.signalservice.api.messages.multidevice; import org.signal.core.util.stream.LimitedInputStream; -import org.signal.libsignal.protocol.IdentityKey; -import org.signal.libsignal.protocol.InvalidKeyException; -import org.signal.libsignal.protocol.InvalidMessageException; -import org.signal.libsignal.protocol.logging.Log; -import org.signal.libsignal.zkgroup.InvalidInputException; -import org.signal.libsignal.zkgroup.profiles.ProfileKey; -import org.whispersystems.signalservice.api.push.ServiceId; -import org.whispersystems.signalservice.api.push.ServiceId.ACI; -import org.whispersystems.signalservice.api.push.SignalServiceAddress; -import org.whispersystems.signalservice.api.util.UuidUtil; +import org.signal.core.models.ServiceId.ACI; import org.whispersystems.signalservice.internal.push.ContactDetails; import org.whispersystems.signalservice.internal.util.Util; diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/messages/multidevice/KeysMessage.kt b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/messages/multidevice/KeysMessage.kt index 7ffe036f33..c58f146fd9 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/messages/multidevice/KeysMessage.kt +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/messages/multidevice/KeysMessage.kt @@ -1,9 +1,9 @@ package org.whispersystems.signalservice.api.messages.multidevice -import org.whispersystems.signalservice.api.AccountEntropyPool -import org.whispersystems.signalservice.api.backup.MediaRootBackupKey -import org.whispersystems.signalservice.api.kbs.MasterKey -import org.whispersystems.signalservice.api.storage.StorageKey +import org.signal.core.models.AccountEntropyPool +import org.signal.core.models.MasterKey +import org.signal.core.models.backup.MediaRootBackupKey +import org.signal.core.models.storageservice.StorageKey data class KeysMessage( val storageService: StorageKey?, diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/messages/multidevice/MessageRequestResponseMessage.java b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/messages/multidevice/MessageRequestResponseMessage.java index 1bcddfe659..db29f3bcde 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/messages/multidevice/MessageRequestResponseMessage.java +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/messages/multidevice/MessageRequestResponseMessage.java @@ -2,8 +2,7 @@ package org.whispersystems.signalservice.api.messages.multidevice; -import org.whispersystems.signalservice.api.push.ServiceId; -import org.whispersystems.signalservice.api.push.SignalServiceAddress; +import org.signal.core.models.ServiceId; import java.util.Optional; diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/messages/multidevice/OutgoingPaymentMessage.java b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/messages/multidevice/OutgoingPaymentMessage.java index 62b7fedbbe..c84529ca1f 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/messages/multidevice/OutgoingPaymentMessage.java +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/messages/multidevice/OutgoingPaymentMessage.java @@ -1,7 +1,7 @@ package org.whispersystems.signalservice.api.messages.multidevice; import org.whispersystems.signalservice.api.payments.Money; -import org.whispersystems.signalservice.api.push.ServiceId; +import org.signal.core.models.ServiceId; import java.util.List; import java.util.Optional; diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/messages/multidevice/ReadMessage.java b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/messages/multidevice/ReadMessage.java index ae9089e5c9..7b9c7ca9b1 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/messages/multidevice/ReadMessage.java +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/messages/multidevice/ReadMessage.java @@ -6,7 +6,7 @@ package org.whispersystems.signalservice.api.messages.multidevice; -import org.whispersystems.signalservice.api.push.ServiceId; +import org.signal.core.models.ServiceId; public class ReadMessage { diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/messages/multidevice/SentTranscriptMessage.java b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/messages/multidevice/SentTranscriptMessage.java index 2c46d1f8f1..786f091bd0 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/messages/multidevice/SentTranscriptMessage.java +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/messages/multidevice/SentTranscriptMessage.java @@ -11,7 +11,7 @@ import org.whispersystems.signalservice.api.messages.SignalServiceDataMessage; import org.whispersystems.signalservice.api.messages.SignalServiceEditMessage; import org.whispersystems.signalservice.api.messages.SignalServiceStoryMessage; import org.whispersystems.signalservice.api.messages.SignalServiceStoryMessageRecipient; -import org.whispersystems.signalservice.api.push.ServiceId; +import org.signal.core.models.ServiceId; import org.whispersystems.signalservice.api.push.SignalServiceAddress; import java.util.HashMap; diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/messages/multidevice/ViewOnceOpenMessage.java b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/messages/multidevice/ViewOnceOpenMessage.java index e9989fe978..e58ea37eeb 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/messages/multidevice/ViewOnceOpenMessage.java +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/messages/multidevice/ViewOnceOpenMessage.java @@ -1,6 +1,6 @@ package org.whispersystems.signalservice.api.messages.multidevice; -import org.whispersystems.signalservice.api.push.ServiceId; +import org.signal.core.models.ServiceId; public class ViewOnceOpenMessage { diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/messages/multidevice/ViewedMessage.java b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/messages/multidevice/ViewedMessage.java index eeffdd835a..7180e43eb0 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/messages/multidevice/ViewedMessage.java +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/messages/multidevice/ViewedMessage.java @@ -1,6 +1,6 @@ package org.whispersystems.signalservice.api.messages.multidevice; -import org.whispersystems.signalservice.api.push.ServiceId; +import org.signal.core.models.ServiceId; public class ViewedMessage { diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/profiles/ProfileApi.kt b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/profiles/ProfileApi.kt index da534a1660..7225486e97 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/profiles/ProfileApi.kt +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/profiles/ProfileApi.kt @@ -5,6 +5,8 @@ package org.whispersystems.signalservice.api.profiles +import org.signal.core.models.ServiceId +import org.signal.core.util.Hex import org.signal.core.util.logging.Log import org.signal.libsignal.zkgroup.VerificationFailedException import org.signal.libsignal.zkgroup.profiles.ClientZkProfileOperations @@ -15,7 +17,6 @@ import org.whispersystems.signalservice.api.NetworkResult import org.whispersystems.signalservice.api.crypto.ProfileCipher import org.whispersystems.signalservice.api.crypto.ProfileCipherOutputStream import org.whispersystems.signalservice.api.crypto.SealedSenderAccess -import org.whispersystems.signalservice.api.push.ServiceId import org.whispersystems.signalservice.api.services.ProfileService import org.whispersystems.signalservice.api.websocket.SignalWebSocket import org.whispersystems.signalservice.internal.get @@ -25,7 +26,6 @@ import org.whispersystems.signalservice.internal.push.ProfileAvatarUploadAttribu import org.whispersystems.signalservice.internal.push.PushServiceSocket import org.whispersystems.signalservice.internal.push.http.ProfileCipherOutputStreamFactory import org.whispersystems.signalservice.internal.put -import org.whispersystems.signalservice.internal.util.Hex import org.whispersystems.signalservice.internal.util.JsonUtil import org.whispersystems.signalservice.internal.websocket.WebSocketRequestMessage import org.whispersystems.signalservice.internal.websocket.WebsocketResponse diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/profiles/ProfileRepository.kt b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/profiles/ProfileRepository.kt index a3bce7cdff..e7004ea00e 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/profiles/ProfileRepository.kt +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/profiles/ProfileRepository.kt @@ -11,13 +11,13 @@ import kotlinx.coroutines.awaitAll import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock +import org.signal.core.models.ServiceId import org.signal.core.util.logging.Log import org.signal.libsignal.zkgroup.VerificationFailedException import org.signal.libsignal.zkgroup.profiles.ExpiringProfileKeyCredential import org.signal.libsignal.zkgroup.profiles.ProfileKey import org.whispersystems.signalservice.api.NetworkResult import org.whispersystems.signalservice.api.crypto.SealedSenderAccess -import org.whispersystems.signalservice.api.push.ServiceId import org.whispersystems.signalservice.api.push.exceptions.RateLimitException import kotlin.time.Duration diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/profiles/SignalServiceProfile.java b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/profiles/SignalServiceProfile.java index 1e648824e0..cac1c2965b 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/profiles/SignalServiceProfile.java +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/profiles/SignalServiceProfile.java @@ -10,7 +10,7 @@ import com.fasterxml.jackson.databind.annotation.JsonSerialize; import org.signal.libsignal.protocol.logging.Log; import org.signal.libsignal.zkgroup.InvalidInputException; import org.signal.libsignal.zkgroup.profiles.ExpiringProfileKeyCredentialResponse; -import org.whispersystems.signalservice.api.push.ServiceId; +import org.signal.core.models.ServiceId; import org.whispersystems.signalservice.internal.util.JsonUtil; import java.math.BigDecimal; diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/push/DistributionId.java b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/push/DistributionId.java index d54b037dc4..50efc6c8eb 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/push/DistributionId.java +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/push/DistributionId.java @@ -1,6 +1,6 @@ package org.whispersystems.signalservice.api.push; -import org.whispersystems.signalservice.api.util.UuidUtil; +import org.signal.core.util.UuidUtil; import java.util.Objects; import java.util.UUID; diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/push/ServiceIds.java b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/push/ServiceIds.java index 98a6f3b2b6..85fb9513ae 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/push/ServiceIds.java +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/push/ServiceIds.java @@ -1,7 +1,8 @@ package org.whispersystems.signalservice.api.push; -import org.whispersystems.signalservice.api.push.ServiceId.ACI; -import org.whispersystems.signalservice.api.push.ServiceId.PNI; +import org.signal.core.models.ServiceId; +import org.signal.core.models.ServiceId.ACI; +import org.signal.core.models.ServiceId.PNI; import java.util.Objects; diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/push/SignalServiceAddress.java b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/push/SignalServiceAddress.java index 62756fbfca..6085dc45d4 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/push/SignalServiceAddress.java +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/push/SignalServiceAddress.java @@ -6,9 +6,10 @@ package org.whispersystems.signalservice.api.push; +import org.signal.core.models.ServiceId; import org.whispersystems.signalservice.api.util.OptionalUtil; import org.whispersystems.signalservice.api.util.Preconditions; -import org.whispersystems.signalservice.api.util.UuidUtil; +import org.signal.core.util.UuidUtil; import java.util.Objects; import java.util.Optional; diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/services/ProfileService.java b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/services/ProfileService.java index 46270131a9..657c4e606f 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/services/ProfileService.java +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/services/ProfileService.java @@ -1,5 +1,6 @@ package org.whispersystems.signalservice.api.services; +import org.signal.core.util.Hex; import org.signal.libsignal.protocol.IdentityKey; import org.signal.libsignal.protocol.logging.Log; import org.signal.libsignal.zkgroup.VerificationFailedException; @@ -9,12 +10,11 @@ import org.signal.libsignal.zkgroup.profiles.ProfileKey; import org.signal.libsignal.zkgroup.profiles.ProfileKeyCredentialRequest; import org.signal.libsignal.zkgroup.profiles.ProfileKeyCredentialRequestContext; import org.signal.libsignal.zkgroup.profiles.ProfileKeyVersion; -import org.whispersystems.signalservice.api.SignalServiceMessageReceiver; import org.whispersystems.signalservice.api.crypto.SealedSenderAccess; import org.whispersystems.signalservice.api.profiles.ProfileAndCredential; import org.whispersystems.signalservice.api.profiles.SignalServiceProfile; -import org.whispersystems.signalservice.api.push.ServiceId; -import org.whispersystems.signalservice.api.push.ServiceId.ACI; +import org.signal.core.models.ServiceId; +import org.signal.core.models.ServiceId.ACI; import org.whispersystems.signalservice.api.push.SignalServiceAddress; import org.whispersystems.signalservice.api.push.exceptions.MalformedResponseException; import org.whispersystems.signalservice.api.websocket.SignalWebSocket; @@ -24,7 +24,6 @@ import org.whispersystems.signalservice.internal.push.IdentityCheckRequest; import org.whispersystems.signalservice.internal.push.IdentityCheckRequest.ServiceIdFingerprintPair; import org.whispersystems.signalservice.internal.push.IdentityCheckResponse; import org.whispersystems.signalservice.internal.push.http.AcceptLanguagesUtil; -import org.whispersystems.signalservice.internal.util.Hex; import org.whispersystems.signalservice.internal.util.JsonUtil; import org.whispersystems.signalservice.internal.websocket.DefaultResponseMapper; import org.whispersystems.signalservice.internal.websocket.ResponseMapper; diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/storage/AccountRecordExtensions.kt b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/storage/AccountRecordExtensions.kt index 6a5f4fadd9..412ac42c37 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/storage/AccountRecordExtensions.kt +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/storage/AccountRecordExtensions.kt @@ -7,9 +7,9 @@ package org.whispersystems.signalservice.api.storage import okio.ByteString import okio.ByteString.Companion.toByteString +import org.signal.core.models.ServiceId import org.signal.core.util.isNotEmpty import org.whispersystems.signalservice.api.payments.PaymentsConstants -import org.whispersystems.signalservice.api.push.ServiceId import org.whispersystems.signalservice.api.push.SignalServiceAddress import org.whispersystems.signalservice.api.storage.IAPSubscriptionId.Companion.isNotNullOrBlank import org.whispersystems.signalservice.api.storage.StorageRecordProtoUtil.defaultAccountRecord diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/storage/ContactRecordExtensions.kt b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/storage/ContactRecordExtensions.kt index 591b932a27..c207d3774b 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/storage/ContactRecordExtensions.kt +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/storage/ContactRecordExtensions.kt @@ -5,7 +5,7 @@ package org.whispersystems.signalservice.api.storage -import org.whispersystems.signalservice.api.push.ServiceId +import org.signal.core.models.ServiceId import org.whispersystems.signalservice.internal.storage.protos.ContactRecord val ContactRecord.signalAci: ServiceId.ACI? diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/storage/RecordIkm.kt b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/storage/RecordIkm.kt index 13f9d3d5ec..2c803ec89b 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/storage/RecordIkm.kt +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/storage/RecordIkm.kt @@ -5,11 +5,11 @@ package org.whispersystems.signalservice.api.storage +import org.signal.core.models.storageservice.StorageItemKey import org.whispersystems.signalservice.api.crypto.Crypto import org.whispersystems.signalservice.internal.storage.protos.ManifestRecord import org.whispersystems.signalservice.internal.storage.protos.StorageItem import org.whispersystems.signalservice.internal.util.Util -import org.whispersystems.util.StringUtil /** * A wrapper around a [ByteArray], just so the recordIkm is strongly typed. @@ -27,7 +27,7 @@ value class RecordIkm(val value: ByteArray) { fun deriveStorageItemKey(rawId: ByteArray): StorageItemKey { val key = Crypto.hkdf( inputKeyMaterial = this.value, - info = StringUtil.utf8("20240801_SIGNAL_STORAGE_SERVICE_ITEM_") + rawId, + info = "20240801_SIGNAL_STORAGE_SERVICE_ITEM_".toByteArray(Charsets.UTF_8) + rawId, outputLength = 32 ) diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/storage/SignalStorageCipher.kt b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/storage/SignalStorageCipher.kt index b2880b6dba..9fcdd936c1 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/storage/SignalStorageCipher.kt +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/storage/SignalStorageCipher.kt @@ -1,5 +1,6 @@ package org.whispersystems.signalservice.api.storage +import org.signal.core.models.storageservice.StorageCipherKey import org.whispersystems.signalservice.internal.util.Util import java.security.InvalidAlgorithmParameterException import java.security.InvalidKeyException diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/storage/StorageCipherKey.kt b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/storage/StorageCipherKey.kt deleted file mode 100644 index 1134716910..0000000000 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/storage/StorageCipherKey.kt +++ /dev/null @@ -1,5 +0,0 @@ -package org.whispersystems.signalservice.api.storage - -interface StorageCipherKey { - fun serialize(): ByteArray -} diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/storage/StorageServiceRepository.kt b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/storage/StorageServiceRepository.kt index f84d3604a7..29889f3734 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/storage/StorageServiceRepository.kt +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/storage/StorageServiceRepository.kt @@ -9,6 +9,7 @@ import com.squareup.wire.FieldEncoding import okio.ByteString import okio.ByteString.Companion.toByteString import okio.IOException +import org.signal.core.models.storageservice.StorageKey import org.signal.core.util.bytes import org.signal.core.util.isNotEmpty import org.signal.core.util.logging.Log diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/storage/StoryDistributionListRecordExtensions.kt b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/storage/StoryDistributionListRecordExtensions.kt index 68db9b31ec..91dc77e6ac 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/storage/StoryDistributionListRecordExtensions.kt +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/storage/StoryDistributionListRecordExtensions.kt @@ -5,7 +5,7 @@ package org.whispersystems.signalservice.api.storage -import org.whispersystems.signalservice.api.push.ServiceId +import org.signal.core.models.ServiceId import org.whispersystems.signalservice.api.push.SignalServiceAddress import org.whispersystems.signalservice.internal.storage.protos.StoryDistributionListRecord diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/svr/SecureValueRecovery.kt b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/svr/SecureValueRecovery.kt index ee08ae77ff..13e3c34046 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/svr/SecureValueRecovery.kt +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/svr/SecureValueRecovery.kt @@ -5,7 +5,7 @@ package org.whispersystems.signalservice.api.svr -import org.whispersystems.signalservice.api.kbs.MasterKey +import org.signal.core.models.MasterKey import org.whispersystems.signalservice.internal.push.AuthCredentials import java.io.IOException import kotlin.jvm.Throws diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/svr/SecureValueRecoveryV2.kt b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/svr/SecureValueRecoveryV2.kt index 428710e074..b801d0eccf 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/svr/SecureValueRecoveryV2.kt +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/svr/SecureValueRecoveryV2.kt @@ -4,6 +4,8 @@ import com.fasterxml.jackson.annotation.JsonProperty import com.fasterxml.jackson.databind.annotation.JsonDeserialize import com.fasterxml.jackson.databind.annotation.JsonSerialize import okio.ByteString.Companion.toByteString +import org.signal.core.models.MasterKey +import org.signal.core.util.Hex import org.signal.libsignal.protocol.logging.Log import org.signal.libsignal.svr2.PinHash import org.signal.svr2.proto.BackupRequest @@ -13,7 +15,6 @@ import org.signal.svr2.proto.Request import org.signal.svr2.proto.RestoreRequest import org.whispersystems.signalservice.api.NetworkResult import org.whispersystems.signalservice.api.crypto.InvalidCiphertextException -import org.whispersystems.signalservice.api.kbs.MasterKey import org.whispersystems.signalservice.api.kbs.PinHashUtil import org.whispersystems.signalservice.api.push.exceptions.NonSuccessfulResponseCodeException import org.whispersystems.signalservice.api.svr.SecureValueRecovery.BackupResponse @@ -26,7 +27,6 @@ import org.whispersystems.signalservice.api.websocket.SignalWebSocket import org.whispersystems.signalservice.internal.configuration.SignalServiceConfiguration import org.whispersystems.signalservice.internal.get import org.whispersystems.signalservice.internal.push.AuthCredentials -import org.whispersystems.signalservice.internal.util.Hex import org.whispersystems.signalservice.internal.util.JsonUtil import org.whispersystems.signalservice.internal.websocket.WebSocketRequestMessage import java.io.IOException diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/svr/SecureValueRecoveryV3.kt b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/svr/SecureValueRecoveryV3.kt index 786159ecd3..cdf7f543b1 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/svr/SecureValueRecoveryV3.kt +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/svr/SecureValueRecoveryV3.kt @@ -8,10 +8,10 @@ package org.whispersystems.signalservice.api.svr import com.fasterxml.jackson.annotation.JsonProperty import com.fasterxml.jackson.databind.annotation.JsonDeserialize import com.fasterxml.jackson.databind.annotation.JsonSerialize +import org.signal.core.models.MasterKey import org.signal.core.util.logging.Log import org.signal.libsignal.net.Network import org.whispersystems.signalservice.api.NetworkResult -import org.whispersystems.signalservice.api.kbs.MasterKey import org.whispersystems.signalservice.api.push.exceptions.NonSuccessfulResponseCodeException import org.whispersystems.signalservice.api.svr.SecureValueRecovery.BackupResponse import org.whispersystems.signalservice.api.svr.SecureValueRecovery.DeleteResponse diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/svr/Svr2Socket.kt b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/svr/Svr2Socket.kt index cae94e7747..0d848e2a13 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/svr/Svr2Socket.kt +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/svr/Svr2Socket.kt @@ -6,6 +6,7 @@ import okhttp3.WebSocket import okhttp3.WebSocketListener import okio.ByteString import okio.ByteString.Companion.toByteString +import org.signal.core.util.Hex import org.signal.libsignal.attest.AttestationDataException import org.signal.libsignal.protocol.logging.Log import org.signal.libsignal.sgxsession.SgxCommunicationFailureException @@ -16,7 +17,6 @@ import org.whispersystems.signalservice.api.push.exceptions.NonSuccessfulRespons import org.whispersystems.signalservice.internal.configuration.SignalServiceConfiguration import org.whispersystems.signalservice.internal.configuration.SignalSvr2Url import org.whispersystems.signalservice.internal.push.AuthCredentials -import org.whispersystems.signalservice.internal.util.Hex import java.io.IOException import java.time.Instant import java.util.concurrent.CountDownLatch diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/svr/SvrBApi.kt b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/svr/SvrBApi.kt index 7472b63f3a..5648bb28f0 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/svr/SvrBApi.kt +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/svr/SvrBApi.kt @@ -5,6 +5,7 @@ package org.whispersystems.signalservice.api.svr +import org.signal.core.models.backup.MessageBackupKey import org.signal.libsignal.attest.AttestationDataException import org.signal.libsignal.attest.AttestationFailedException import org.signal.libsignal.messagebackup.BackupKey @@ -20,7 +21,6 @@ import org.signal.libsignal.svr.DataMissingException import org.signal.libsignal.svr.InvalidSvrBDataException import org.signal.libsignal.svr.RestoreFailedException import org.whispersystems.signalservice.api.NetworkResult -import org.whispersystems.signalservice.api.backup.MessageBackupKey import org.whispersystems.signalservice.internal.push.AuthCredentials import java.io.IOException import java.util.concurrent.ExecutionException diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/username/UsernameApi.kt b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/username/UsernameApi.kt index 942b3bd281..c3efb355af 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/username/UsernameApi.kt +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/username/UsernameApi.kt @@ -6,6 +6,7 @@ package org.whispersystems.signalservice.api.username import kotlinx.coroutines.runBlocking +import org.signal.core.models.ServiceId import org.signal.core.util.Base64 import org.signal.libsignal.net.RequestResult import org.signal.libsignal.net.UnauthUsernamesService @@ -13,7 +14,6 @@ import org.signal.libsignal.net.getOrError import org.signal.libsignal.usernames.Username import org.whispersystems.signalservice.api.NetworkResult import org.whispersystems.signalservice.api.account.AccountApi -import org.whispersystems.signalservice.api.push.ServiceId import org.whispersystems.signalservice.api.websocket.SignalWebSocket import org.whispersystems.signalservice.internal.get import org.whispersystems.signalservice.internal.push.GetUsernameFromLinkResponseBody diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/util/AttachmentPointerUtil.java b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/util/AttachmentPointerUtil.java index 4ba7d0d3d7..15fa0a0eac 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/util/AttachmentPointerUtil.java +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/util/AttachmentPointerUtil.java @@ -1,5 +1,6 @@ package org.whispersystems.signalservice.api.util; +import org.signal.core.util.UuidUtil; import org.whispersystems.signalservice.api.InvalidMessageStructureException; import org.whispersystems.signalservice.api.messages.SignalServiceAttachmentPointer; import org.whispersystems.signalservice.api.messages.SignalServiceAttachmentRemoteId; diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/util/CredentialsProvider.java b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/util/CredentialsProvider.java index 46dd934c60..a08160dd88 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/util/CredentialsProvider.java +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/util/CredentialsProvider.java @@ -6,8 +6,8 @@ package org.whispersystems.signalservice.api.util; -import org.whispersystems.signalservice.api.push.ServiceId.ACI; -import org.whispersystems.signalservice.api.push.ServiceId.PNI; +import org.signal.core.models.ServiceId.ACI; +import org.signal.core.models.ServiceId.PNI; import org.whispersystems.signalservice.api.push.SignalServiceAddress; public interface CredentialsProvider { diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/util/UuidUtil.java b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/util/UuidUtil.java deleted file mode 100644 index 89ba3d4839..0000000000 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/util/UuidUtil.java +++ /dev/null @@ -1,123 +0,0 @@ -package org.whispersystems.signalservice.api.util; - -import java.nio.ByteBuffer; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.Optional; -import java.util.UUID; -import java.util.regex.Pattern; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; - -import okio.ByteString; - -public final class UuidUtil { - - public static final UUID UNKNOWN_UUID = new UUID(0, 0); - public static final String UNKNOWN_UUID_STRING = UNKNOWN_UUID.toString(); - - private static final Pattern UUID_PATTERN = Pattern.compile("[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}", Pattern.CASE_INSENSITIVE); - - private UuidUtil() { } - - public static Optional parse(String uuid) { - return Optional.ofNullable(parseOrNull(uuid)); - } - - public static UUID parseOrNull(@Nullable String uuid) { - return isUuid(uuid) ? parseOrThrow(uuid) : null; - } - - public static UUID parseOrUnknown(String uuid) { - return uuid == null || uuid.isEmpty() ? UNKNOWN_UUID : parseOrThrow(uuid); - } - - public static UUID parseOrThrow(String uuid) { - return UUID.fromString(uuid); - } - - public static UUID parseOrThrow(byte[] bytes) { - ByteBuffer byteBuffer = ByteBuffer.wrap(bytes); - long high = byteBuffer.getLong(); - long low = byteBuffer.getLong(); - - return new UUID(high, low); - } - - public static UUID parseOrThrow(ByteString bytes) { - return parseOrNull(bytes.toByteArray()); - } - - public static boolean isUuid(String uuid) { - return uuid != null && UUID_PATTERN.matcher(uuid).matches(); - } - - public static byte[] toByteArray(@Nonnull UUID uuid) { - ByteBuffer buffer = ByteBuffer.wrap(new byte[16]); - buffer.putLong(uuid.getMostSignificantBits()); - buffer.putLong(uuid.getLeastSignificantBits()); - - return buffer.array(); - } - - public static ByteString toByteString(@Nonnull UUID uuid) { - return ByteString.of(toByteArray(uuid)); - } - - public static UUID fromByteString(ByteString bytes) { - return parseOrThrow(bytes.toByteArray()); - } - - public static @Nullable UUID fromByteStringOrNull(@Nullable ByteString bytes) { - if (bytes == null) { - return null; - } - - return parseOrNull(bytes.toByteArray()); - } - - public static @Nullable String getStringUUID(@Nullable String stringId, @Nullable ByteString bytes) { - UUID uuid = parseOrNull(bytes); - return (uuid != null) ? uuid.toString() : stringId; - } - - public static UUID fromByteStringOrUnknown(ByteString bytes) { - UUID uuid = fromByteStringOrNull(bytes); - return uuid != null ? uuid : UNKNOWN_UUID; - } - - public static UUID parseOrNull(byte[] byteArray) { - return byteArray != null && byteArray.length == 16 ? parseOrThrow(byteArray) : null; - } - - public static UUID parseOrNull(ByteString byteString) { - return byteString != null ? parseOrNull(byteString.toByteArray()): null; - } - - public static List fromByteStrings(Collection byteStringCollection) { - ArrayList result = new ArrayList<>(byteStringCollection.size()); - - for (ByteString byteString : byteStringCollection) { - result.add(fromByteString(byteString)); - } - - return result; - } - - /** - * Keep only UUIDs that are not the {@link #UNKNOWN_UUID}. - */ - public static List filterKnown(Collection uuids) { - ArrayList result = new ArrayList<>(uuids.size()); - - for (UUID uuid : uuids) { - if (!UNKNOWN_UUID.equals(uuid)) { - result.add(uuid); - } - } - - return result; - } -} diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/contacts/entities/DiscoveryResponse.java b/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/contacts/entities/DiscoveryResponse.java index 56de4ba092..431873bccd 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/contacts/entities/DiscoveryResponse.java +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/contacts/entities/DiscoveryResponse.java @@ -18,7 +18,7 @@ package org.whispersystems.signalservice.internal.contacts.entities; import com.fasterxml.jackson.annotation.JsonProperty; -import org.whispersystems.signalservice.internal.util.Hex; +import org.signal.core.util.Hex; public class DiscoveryResponse { diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/contacts/entities/KeyBackupRequest.java b/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/contacts/entities/KeyBackupRequest.java index 0315588e6c..aef91904c0 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/contacts/entities/KeyBackupRequest.java +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/contacts/entities/KeyBackupRequest.java @@ -2,7 +2,7 @@ package org.whispersystems.signalservice.internal.contacts.entities; import com.fasterxml.jackson.annotation.JsonProperty; -import org.whispersystems.signalservice.internal.util.Hex; +import org.signal.core.util.Hex; public class KeyBackupRequest { diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/contacts/entities/KeyBackupResponse.java b/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/contacts/entities/KeyBackupResponse.java index 76bb663f33..29bda6522c 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/contacts/entities/KeyBackupResponse.java +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/contacts/entities/KeyBackupResponse.java @@ -2,7 +2,7 @@ package org.whispersystems.signalservice.internal.contacts.entities; import com.fasterxml.jackson.annotation.JsonProperty; -import org.whispersystems.signalservice.internal.util.Hex; +import org.signal.core.util.Hex; public class KeyBackupResponse { diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/push/IdentityCheckRequest.java b/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/push/IdentityCheckRequest.java index 669f30bf51..d15b94b3b9 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/push/IdentityCheckRequest.java +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/push/IdentityCheckRequest.java @@ -4,7 +4,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import org.signal.libsignal.protocol.IdentityKey; -import org.whispersystems.signalservice.api.push.ServiceId; +import org.signal.core.models.ServiceId; import org.whispersystems.signalservice.internal.util.JsonUtil; import org.signal.core.util.Base64; diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/push/IdentityCheckResponse.java b/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/push/IdentityCheckResponse.java index 3e89cd82d3..873921d2e0 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/push/IdentityCheckResponse.java +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/push/IdentityCheckResponse.java @@ -4,7 +4,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import org.signal.libsignal.protocol.IdentityKey; -import org.whispersystems.signalservice.api.push.ServiceId; +import org.signal.core.models.ServiceId; import org.whispersystems.signalservice.internal.util.JsonUtil; import java.util.List; diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/push/PushServiceSocket.java b/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/push/PushServiceSocket.java index 5a7471796e..eab141706d 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/push/PushServiceSocket.java +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/push/PushServiceSocket.java @@ -11,6 +11,7 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.squareup.wire.Message; import org.signal.core.util.Base64; +import org.signal.core.util.Hex; import org.signal.libsignal.protocol.InvalidKeyException; import org.signal.libsignal.protocol.logging.Log; import org.signal.storageservice.protos.groups.AvatarUploadAttributes; @@ -96,7 +97,6 @@ import org.whispersystems.signalservice.internal.storage.protos.StorageItems; import org.whispersystems.signalservice.internal.storage.protos.StorageManifest; import org.whispersystems.signalservice.internal.storage.protos.WriteOperation; import org.whispersystems.signalservice.internal.util.BlacklistingTrustManager; -import org.whispersystems.signalservice.internal.util.Hex; import org.whispersystems.signalservice.internal.util.JsonUtil; import org.whispersystems.signalservice.internal.util.Util; diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/push/SendGroupMessageResponse.java b/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/push/SendGroupMessageResponse.java index 75ca6668f0..7710fb93c3 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/push/SendGroupMessageResponse.java +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/push/SendGroupMessageResponse.java @@ -3,7 +3,7 @@ package org.whispersystems.signalservice.internal.push; import com.fasterxml.jackson.annotation.JsonProperty; import org.signal.libsignal.protocol.logging.Log; -import org.whispersystems.signalservice.api.push.ServiceId; +import org.signal.core.models.ServiceId; import java.util.HashSet; import java.util.Set; diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/util/Hex.java b/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/util/Hex.java deleted file mode 100644 index 12384af3df..0000000000 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/util/Hex.java +++ /dev/null @@ -1,128 +0,0 @@ -/** - * Copyright (C) 2014-2016 Open Whisper Systems - * - * Licensed according to the LICENSE file in this repository. - */ - -package org.whispersystems.signalservice.internal.util; - -import java.io.IOException; - -/** - * Utility for generating hex dumps. - */ -public class Hex { - - private final static int HEX_DIGITS_START = 10; - private final static int ASCII_TEXT_START = HEX_DIGITS_START + (16*2 + (16/2)); - - final static String EOL = System.lineSeparator(); - - private final static char[] HEX_DIGITS = { - '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' - }; - - public static String toString(byte[] bytes) { - return toString(bytes, 0, bytes.length); - } - - public static String toString(byte[] bytes, int offset, int length) { - StringBuffer buf = new StringBuffer(); - for (int i = 0; i < length; i++) { - appendHexChar(buf, bytes[offset + i]); - buf.append(' '); - } - return buf.toString(); - } - - public static String toStringCondensed(byte[] bytes) { - StringBuffer buf = new StringBuffer(); - for (int i=0;i> 1]; - - // two characters form the hex value. - for (int i = 0, j = 0; j < len; i++) { - int f = Character.digit(data[j], 16) << 4; - j++; - f = f | Character.digit(data[j], 16); - j++; - out[i] = (byte) (f & 0xFF); - } - - return out; - } - - public static String dump(byte[] bytes) { - return dump(bytes, 0, bytes.length); - } - - public static String dump(byte[] bytes, int offset, int length) { - StringBuffer buf = new StringBuffer(); - int lines = ((length - 1) / 16) + 1; - int lineOffset; - int lineLength; - - for (int i = 0; i < lines; i++) { - lineOffset = (i * 16) + offset; - lineLength = Math.min(16, (length - (i * 16))); - appendDumpLine(buf, i, bytes, lineOffset, lineLength); - buf.append(EOL); - } - - return buf.toString(); - } - - private static void appendDumpLine(StringBuffer buf, int line, byte[] bytes, int lineOffset, int lineLength) { - buf.append(HEX_DIGITS[(line >> 28) & 0xf]); - buf.append(HEX_DIGITS[(line >> 24) & 0xf]); - buf.append(HEX_DIGITS[(line >> 20) & 0xf]); - buf.append(HEX_DIGITS[(line >> 16) & 0xf]); - buf.append(HEX_DIGITS[(line >> 12) & 0xf]); - buf.append(HEX_DIGITS[(line >> 8) & 0xf]); - buf.append(HEX_DIGITS[(line >> 4) & 0xf]); - buf.append(HEX_DIGITS[(line ) & 0xf]); - buf.append(": "); - - for (int i = 0; i < 16; i++) { - int idx = i + lineOffset; - if (i < lineLength) { - int b = bytes[idx]; - appendHexChar(buf, b); - } else { - buf.append(" "); - } - if ((i % 2) == 1) { - buf.append(' '); - } - } - - for (int i = 0; i < 16 && i < lineLength; i++) { - int idx = i + lineOffset; - int b = bytes[idx]; - if (b >= 0x20 && b <= 0x7e) { - buf.append((char)b); - } else { - buf.append('.'); - } - } - } - - private static void appendHexChar(StringBuffer buf, int b) { - buf.append(HEX_DIGITS[(b >> 4) & 0xf]); - buf.append(HEX_DIGITS[b & 0xf]); - } - -} diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/util/JsonUtil.java b/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/util/JsonUtil.java index dfbcd2e0c9..58541e1708 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/util/JsonUtil.java +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/util/JsonUtil.java @@ -23,11 +23,11 @@ import org.signal.core.util.Base64; import org.signal.libsignal.protocol.IdentityKey; import org.signal.libsignal.protocol.InvalidKeyException; import org.signal.libsignal.protocol.logging.Log; -import org.whispersystems.signalservice.api.kbs.MasterKey; -import org.whispersystems.signalservice.api.push.ServiceId; -import org.whispersystems.signalservice.api.push.ServiceId.ACI; +import org.signal.core.models.MasterKey; +import org.signal.core.models.ServiceId; +import org.signal.core.models.ServiceId.ACI; import org.whispersystems.signalservice.api.push.exceptions.MalformedResponseException; -import org.whispersystems.signalservice.api.util.UuidUtil; +import org.signal.core.util.UuidUtil; import java.io.IOException; import java.util.UUID; diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/util/StaticCredentialsProvider.java b/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/util/StaticCredentialsProvider.java index 57ca633b99..47b6314db1 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/util/StaticCredentialsProvider.java +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/util/StaticCredentialsProvider.java @@ -6,8 +6,8 @@ package org.whispersystems.signalservice.internal.util; -import org.whispersystems.signalservice.api.push.ServiceId.ACI; -import org.whispersystems.signalservice.api.push.ServiceId.PNI; +import org.signal.core.models.ServiceId.ACI; +import org.signal.core.models.ServiceId.PNI; import org.whispersystems.signalservice.api.util.CredentialsProvider; public class StaticCredentialsProvider implements CredentialsProvider { diff --git a/libsignal-service/src/main/java/org/whispersystems/util/StringUtil.java b/libsignal-service/src/main/java/org/whispersystems/util/StringUtil.java deleted file mode 100644 index 6a20e4c9d1..0000000000 --- a/libsignal-service/src/main/java/org/whispersystems/util/StringUtil.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.whispersystems.util; - -import java.nio.charset.StandardCharsets; - -public final class StringUtil { - - private StringUtil() { - } - - public static byte[] utf8(String string) { - return string.getBytes(StandardCharsets.UTF_8); - } -} diff --git a/libsignal-service/src/test/java/org/whispersystems/signalservice/api/crypto/AttachmentCipherTestHelper.kt b/libsignal-service/src/test/java/org/whispersystems/signalservice/api/crypto/AttachmentCipherTestHelper.kt index 40e3a319d4..ea20d0b02f 100644 --- a/libsignal-service/src/test/java/org/whispersystems/signalservice/api/crypto/AttachmentCipherTestHelper.kt +++ b/libsignal-service/src/test/java/org/whispersystems/signalservice/api/crypto/AttachmentCipherTestHelper.kt @@ -5,8 +5,8 @@ package org.whispersystems.signalservice.api.crypto -import org.whispersystems.signalservice.api.backup.MediaId -import org.whispersystems.signalservice.api.backup.MediaRootBackupKey.MediaKeyMaterial +import org.signal.core.models.backup.MediaId +import org.signal.core.models.backup.MediaRootBackupKey.MediaKeyMaterial import org.whispersystems.signalservice.internal.util.Util object AttachmentCipherTestHelper { diff --git a/libsignal-service/src/test/java/org/whispersystems/signalservice/api/groupsv2/DecryptedGroupUtilTest.kt b/libsignal-service/src/test/java/org/whispersystems/signalservice/api/groupsv2/DecryptedGroupUtilTest.kt index 772d329b16..f7bc9a4873 100644 --- a/libsignal-service/src/test/java/org/whispersystems/signalservice/api/groupsv2/DecryptedGroupUtilTest.kt +++ b/libsignal-service/src/test/java/org/whispersystems/signalservice/api/groupsv2/DecryptedGroupUtilTest.kt @@ -6,10 +6,10 @@ import assertk.assertions.isEqualTo import assertk.assertions.isNull import okio.ByteString import org.junit.Test +import org.signal.core.models.ServiceId import org.signal.storageservice.protos.groups.local.DecryptedGroupChange import org.signal.storageservice.protos.groups.local.DecryptedPendingMember import org.signal.storageservice.protos.groups.local.DecryptedPendingMemberRemoval -import org.whispersystems.signalservice.api.push.ServiceId import org.whispersystems.signalservice.internal.util.Util import java.util.UUID diff --git a/libsignal-service/src/test/java/org/whispersystems/signalservice/api/groupsv2/DecryptedGroupUtil_apply_Test.java b/libsignal-service/src/test/java/org/whispersystems/signalservice/api/groupsv2/DecryptedGroupUtil_apply_Test.java index bb1cafdc15..13a63fc76e 100644 --- a/libsignal-service/src/test/java/org/whispersystems/signalservice/api/groupsv2/DecryptedGroupUtil_apply_Test.java +++ b/libsignal-service/src/test/java/org/whispersystems/signalservice/api/groupsv2/DecryptedGroupUtil_apply_Test.java @@ -16,7 +16,7 @@ import org.signal.storageservice.protos.groups.local.DecryptedRequestingMember; import org.signal.storageservice.protos.groups.local.DecryptedString; import org.signal.storageservice.protos.groups.local.DecryptedTimer; import org.signal.storageservice.protos.groups.local.EnabledState; -import org.whispersystems.signalservice.api.util.UuidUtil; +import org.signal.core.util.UuidUtil; import org.whispersystems.signalservice.internal.util.Util; import java.util.List; diff --git a/libsignal-service/src/test/java/org/whispersystems/signalservice/api/groupsv2/DecryptedGroupUtil_empty_Test.java b/libsignal-service/src/test/java/org/whispersystems/signalservice/api/groupsv2/DecryptedGroupUtil_empty_Test.java index 6d320059a7..1dae49f766 100644 --- a/libsignal-service/src/test/java/org/whispersystems/signalservice/api/groupsv2/DecryptedGroupUtil_empty_Test.java +++ b/libsignal-service/src/test/java/org/whispersystems/signalservice/api/groupsv2/DecryptedGroupUtil_empty_Test.java @@ -9,7 +9,7 @@ import org.signal.storageservice.protos.groups.local.DecryptedRequestingMember; import org.signal.storageservice.protos.groups.local.DecryptedString; import org.signal.storageservice.protos.groups.local.DecryptedTimer; import org.signal.storageservice.protos.groups.local.EnabledState; -import org.whispersystems.signalservice.api.util.UuidUtil; +import org.signal.core.util.UuidUtil; import java.util.List; import java.util.UUID; diff --git a/libsignal-service/src/test/java/org/whispersystems/signalservice/api/groupsv2/GroupChangeReconstructTest.java b/libsignal-service/src/test/java/org/whispersystems/signalservice/api/groupsv2/GroupChangeReconstructTest.java index db65fefa90..8498160cb3 100644 --- a/libsignal-service/src/test/java/org/whispersystems/signalservice/api/groupsv2/GroupChangeReconstructTest.java +++ b/libsignal-service/src/test/java/org/whispersystems/signalservice/api/groupsv2/GroupChangeReconstructTest.java @@ -8,7 +8,7 @@ import org.signal.storageservice.protos.groups.local.DecryptedGroupChange; import org.signal.storageservice.protos.groups.local.DecryptedString; import org.signal.storageservice.protos.groups.local.DecryptedTimer; import org.signal.storageservice.protos.groups.local.EnabledState; -import org.whispersystems.signalservice.api.util.UuidUtil; +import org.signal.core.util.UuidUtil; import org.whispersystems.signalservice.internal.util.Util; import java.util.List; diff --git a/libsignal-service/src/test/java/org/whispersystems/signalservice/api/groupsv2/GroupChangeUtil_resolveConflict_Test.java b/libsignal-service/src/test/java/org/whispersystems/signalservice/api/groupsv2/GroupChangeUtil_resolveConflict_Test.java index aa5d0b51c9..25163ac045 100644 --- a/libsignal-service/src/test/java/org/whispersystems/signalservice/api/groupsv2/GroupChangeUtil_resolveConflict_Test.java +++ b/libsignal-service/src/test/java/org/whispersystems/signalservice/api/groupsv2/GroupChangeUtil_resolveConflict_Test.java @@ -13,7 +13,7 @@ import org.signal.storageservice.protos.groups.local.DecryptedMember; import org.signal.storageservice.protos.groups.local.DecryptedString; import org.signal.storageservice.protos.groups.local.DecryptedTimer; import org.signal.storageservice.protos.groups.local.EnabledState; -import org.whispersystems.signalservice.api.util.UuidUtil; +import org.signal.core.util.UuidUtil; import org.whispersystems.signalservice.internal.util.Util; import java.util.List; diff --git a/libsignal-service/src/test/java/org/whispersystems/signalservice/api/groupsv2/GroupChangeUtil_resolveConflict_decryptedOnly_Test.java b/libsignal-service/src/test/java/org/whispersystems/signalservice/api/groupsv2/GroupChangeUtil_resolveConflict_decryptedOnly_Test.java index cb93004931..5b18a37895 100644 --- a/libsignal-service/src/test/java/org/whispersystems/signalservice/api/groupsv2/GroupChangeUtil_resolveConflict_decryptedOnly_Test.java +++ b/libsignal-service/src/test/java/org/whispersystems/signalservice/api/groupsv2/GroupChangeUtil_resolveConflict_decryptedOnly_Test.java @@ -9,7 +9,7 @@ import org.signal.storageservice.protos.groups.local.DecryptedMember; import org.signal.storageservice.protos.groups.local.DecryptedString; import org.signal.storageservice.protos.groups.local.DecryptedTimer; import org.signal.storageservice.protos.groups.local.EnabledState; -import org.whispersystems.signalservice.api.util.UuidUtil; +import org.signal.core.util.UuidUtil; import org.whispersystems.signalservice.internal.util.Util; import java.util.List; diff --git a/libsignal-service/src/test/java/org/whispersystems/signalservice/api/groupsv2/GroupsV2Operations_ban_Test.kt b/libsignal-service/src/test/java/org/whispersystems/signalservice/api/groupsv2/GroupsV2Operations_ban_Test.kt index af6b88e812..d4240a9950 100644 --- a/libsignal-service/src/test/java/org/whispersystems/signalservice/api/groupsv2/GroupsV2Operations_ban_Test.kt +++ b/libsignal-service/src/test/java/org/whispersystems/signalservice/api/groupsv2/GroupsV2Operations_ban_Test.kt @@ -6,10 +6,10 @@ import assertk.assertions.isEqualTo import assertk.assertions.single import org.junit.Before import org.junit.Test +import org.signal.core.models.ServiceId import org.signal.libsignal.zkgroup.groups.GroupMasterKey import org.signal.libsignal.zkgroup.groups.GroupSecretParams import org.whispersystems.signalservice.api.groupsv2.GroupsV2Operations.GroupOperations -import org.whispersystems.signalservice.api.push.ServiceId import org.whispersystems.signalservice.internal.util.Util import org.whispersystems.signalservice.testutil.LibSignalLibraryUtil import java.util.UUID diff --git a/libsignal-service/src/test/java/org/whispersystems/signalservice/api/groupsv2/GroupsV2Operations_decrypt_change_Test.java b/libsignal-service/src/test/java/org/whispersystems/signalservice/api/groupsv2/GroupsV2Operations_decrypt_change_Test.java index 1ba884d1e7..b2bf96012f 100644 --- a/libsignal-service/src/test/java/org/whispersystems/signalservice/api/groupsv2/GroupsV2Operations_decrypt_change_Test.java +++ b/libsignal-service/src/test/java/org/whispersystems/signalservice/api/groupsv2/GroupsV2Operations_decrypt_change_Test.java @@ -30,9 +30,9 @@ import org.signal.storageservice.protos.groups.local.DecryptedRequestingMember; import org.signal.storageservice.protos.groups.local.DecryptedString; import org.signal.storageservice.protos.groups.local.DecryptedTimer; import org.signal.storageservice.protos.groups.local.EnabledState; -import org.whispersystems.signalservice.api.push.ServiceId.ACI; -import org.whispersystems.signalservice.api.push.ServiceId.PNI; -import org.whispersystems.signalservice.api.util.UuidUtil; +import org.signal.core.models.ServiceId.ACI; +import org.signal.core.models.ServiceId.PNI; +import org.signal.core.util.UuidUtil; import org.whispersystems.signalservice.internal.util.Util; import org.whispersystems.signalservice.testutil.LibSignalLibraryUtil; diff --git a/libsignal-service/src/test/java/org/whispersystems/signalservice/api/groupsv2/GroupsV2Operations_decrypt_group_Test.java b/libsignal-service/src/test/java/org/whispersystems/signalservice/api/groupsv2/GroupsV2Operations_decrypt_group_Test.java index 02bdef57e6..75349a59b3 100644 --- a/libsignal-service/src/test/java/org/whispersystems/signalservice/api/groupsv2/GroupsV2Operations_decrypt_group_Test.java +++ b/libsignal-service/src/test/java/org/whispersystems/signalservice/api/groupsv2/GroupsV2Operations_decrypt_group_Test.java @@ -20,7 +20,7 @@ import org.signal.storageservice.protos.groups.local.DecryptedMember; import org.signal.storageservice.protos.groups.local.DecryptedPendingMember; import org.signal.storageservice.protos.groups.local.DecryptedRequestingMember; import org.signal.storageservice.protos.groups.local.EnabledState; -import org.whispersystems.signalservice.api.push.ServiceId.ACI; +import org.signal.core.models.ServiceId.ACI; import org.whispersystems.signalservice.internal.util.Util; import org.whispersystems.signalservice.testutil.LibSignalLibraryUtil; diff --git a/libsignal-service/src/test/java/org/whispersystems/signalservice/api/groupsv2/ProtoTestUtils.java b/libsignal-service/src/test/java/org/whispersystems/signalservice/api/groupsv2/ProtoTestUtils.java index f404eb174a..faef1f3f29 100644 --- a/libsignal-service/src/test/java/org/whispersystems/signalservice/api/groupsv2/ProtoTestUtils.java +++ b/libsignal-service/src/test/java/org/whispersystems/signalservice/api/groupsv2/ProtoTestUtils.java @@ -11,7 +11,7 @@ import org.signal.storageservice.protos.groups.local.DecryptedModifyMemberRole; import org.signal.storageservice.protos.groups.local.DecryptedPendingMember; import org.signal.storageservice.protos.groups.local.DecryptedPendingMemberRemoval; import org.signal.storageservice.protos.groups.local.DecryptedRequestingMember; -import org.whispersystems.signalservice.api.util.UuidUtil; +import org.signal.core.util.UuidUtil; import org.whispersystems.signalservice.internal.util.Util; import java.security.SecureRandom; diff --git a/libsignal-service/src/test/java/org/whispersystems/signalservice/api/groupsv2/TestZkGroupServer.java b/libsignal-service/src/test/java/org/whispersystems/signalservice/api/groupsv2/TestZkGroupServer.java index bd074e5a14..724ceee26c 100644 --- a/libsignal-service/src/test/java/org/whispersystems/signalservice/api/groupsv2/TestZkGroupServer.java +++ b/libsignal-service/src/test/java/org/whispersystems/signalservice/api/groupsv2/TestZkGroupServer.java @@ -9,7 +9,7 @@ import org.signal.libsignal.zkgroup.profiles.ProfileKeyCommitment; import org.signal.libsignal.zkgroup.profiles.ProfileKeyCredentialPresentation; import org.signal.libsignal.zkgroup.profiles.ProfileKeyCredentialRequest; import org.signal.libsignal.zkgroup.profiles.ServerZkProfileOperations; -import org.whispersystems.signalservice.api.push.ServiceId.ACI; +import org.signal.core.models.ServiceId.ACI; import org.whispersystems.signalservice.testutil.LibSignalLibraryUtil; import java.time.Instant; diff --git a/libsignal-service/src/test/java/org/whispersystems/signalservice/api/kbs/MasterKeyTest.java b/libsignal-service/src/test/java/org/whispersystems/signalservice/api/kbs/MasterKeyTest.java index 3e2f881af3..104df54ef7 100644 --- a/libsignal-service/src/test/java/org/whispersystems/signalservice/api/kbs/MasterKeyTest.java +++ b/libsignal-service/src/test/java/org/whispersystems/signalservice/api/kbs/MasterKeyTest.java @@ -1,18 +1,19 @@ package org.whispersystems.signalservice.api.kbs; import org.junit.Test; +import org.signal.core.models.MasterKey; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotEquals; public final class MasterKeyTest { - @Test(expected = AssertionError.class) + @Test(expected = IllegalStateException.class) public void wrong_length_too_short() { new MasterKey(new byte[31]); } - @Test(expected = AssertionError.class) + @Test(expected = IllegalStateException.class) public void wrong_length_too_long() { new MasterKey(new byte[33]); } diff --git a/libsignal-service/src/test/java/org/whispersystems/signalservice/api/messages/EnvelopeContentValidatorTest.kt b/libsignal-service/src/test/java/org/whispersystems/signalservice/api/messages/EnvelopeContentValidatorTest.kt index 50a3657d10..d8d4523649 100644 --- a/libsignal-service/src/test/java/org/whispersystems/signalservice/api/messages/EnvelopeContentValidatorTest.kt +++ b/libsignal-service/src/test/java/org/whispersystems/signalservice/api/messages/EnvelopeContentValidatorTest.kt @@ -7,7 +7,7 @@ package org.whispersystems.signalservice.api.messages import okio.ByteString.Companion.toByteString import org.junit.Test -import org.whispersystems.signalservice.api.push.ServiceId +import org.signal.core.models.ServiceId import org.whispersystems.signalservice.internal.push.Content import org.whispersystems.signalservice.internal.push.DataMessage import org.whispersystems.signalservice.internal.push.Envelope diff --git a/libsignal-service/src/test/java/org/whispersystems/signalservice/api/messages/multidevice/DeviceContactsInputStreamTest.java b/libsignal-service/src/test/java/org/whispersystems/signalservice/api/messages/multidevice/DeviceContactsInputStreamTest.java index bb08a13acf..0d1e8d61e0 100644 --- a/libsignal-service/src/test/java/org/whispersystems/signalservice/api/messages/multidevice/DeviceContactsInputStreamTest.java +++ b/libsignal-service/src/test/java/org/whispersystems/signalservice/api/messages/multidevice/DeviceContactsInputStreamTest.java @@ -2,7 +2,7 @@ package org.whispersystems.signalservice.api.messages.multidevice; import org.junit.Test; import org.signal.libsignal.zkgroup.InvalidInputException; -import org.whispersystems.signalservice.api.push.ServiceId.ACI; +import org.signal.core.models.ServiceId.ACI; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; diff --git a/libsignal-service/src/test/java/org/whispersystems/signalservice/api/push/ServiceIdTests.kt b/libsignal-service/src/test/java/org/whispersystems/signalservice/api/push/ServiceIdTests.kt index e0cc114ae8..61273fcd1f 100644 --- a/libsignal-service/src/test/java/org/whispersystems/signalservice/api/push/ServiceIdTests.kt +++ b/libsignal-service/src/test/java/org/whispersystems/signalservice/api/push/ServiceIdTests.kt @@ -8,9 +8,10 @@ package org.whispersystems.signalservice.api.push import org.junit.Assert.assertEquals import org.junit.Assert.assertNull import org.junit.Test -import org.whispersystems.signalservice.api.push.ServiceId.ACI -import org.whispersystems.signalservice.api.push.ServiceId.PNI -import org.whispersystems.signalservice.api.util.UuidUtil +import org.signal.core.models.ServiceId +import org.signal.core.models.ServiceId.ACI +import org.signal.core.models.ServiceId.PNI +import org.signal.core.util.UuidUtil import java.util.UUID import org.signal.libsignal.protocol.ServiceId.Aci as LibSignalAci import org.signal.libsignal.protocol.ServiceId.Pni as LibSignalPni diff --git a/libsignal-service/src/test/java/org/whispersystems/signalservice/api/storage/SignalContactRecordTest.java b/libsignal-service/src/test/java/org/whispersystems/signalservice/api/storage/SignalContactRecordTest.java index b81b856c57..c56672f781 100644 --- a/libsignal-service/src/test/java/org/whispersystems/signalservice/api/storage/SignalContactRecordTest.java +++ b/libsignal-service/src/test/java/org/whispersystems/signalservice/api/storage/SignalContactRecordTest.java @@ -1,7 +1,7 @@ package org.whispersystems.signalservice.api.storage; import org.junit.Test; -import org.whispersystems.signalservice.api.push.ServiceId.ACI; +import org.signal.core.models.ServiceId.ACI; import org.whispersystems.signalservice.internal.storage.protos.ContactRecord; import okio.ByteString; diff --git a/libsignal-service/src/test/java/org/whispersystems/signalservice/api/storage/SignalStorageCipherTest.java b/libsignal-service/src/test/java/org/whispersystems/signalservice/api/storage/SignalStorageCipherTest.java index bcbc0b2ef9..ab23c0bcd7 100644 --- a/libsignal-service/src/test/java/org/whispersystems/signalservice/api/storage/SignalStorageCipherTest.java +++ b/libsignal-service/src/test/java/org/whispersystems/signalservice/api/storage/SignalStorageCipherTest.java @@ -1,6 +1,7 @@ package org.whispersystems.signalservice.api.storage; import org.junit.Test; +import org.signal.core.models.storageservice.StorageItemKey; import org.signal.libsignal.protocol.InvalidKeyException; import org.whispersystems.signalservice.internal.util.Util; diff --git a/libsignal-service/src/test/java/org/whispersystems/signalservice/api/util/CredentialsProviderTest.kt b/libsignal-service/src/test/java/org/whispersystems/signalservice/api/util/CredentialsProviderTest.kt index 936292cffe..afbe00f493 100644 --- a/libsignal-service/src/test/java/org/whispersystems/signalservice/api/util/CredentialsProviderTest.kt +++ b/libsignal-service/src/test/java/org/whispersystems/signalservice/api/util/CredentialsProviderTest.kt @@ -7,7 +7,7 @@ package org.whispersystems.signalservice.api.util import org.junit.Assert.assertEquals import org.junit.Assert.assertThrows import org.junit.Test -import org.whispersystems.signalservice.api.push.ServiceId +import org.signal.core.models.ServiceId import org.whispersystems.signalservice.api.push.SignalServiceAddress import java.util.UUID diff --git a/libsignal-service/src/test/java/org/whispersystems/signalservice/internal/crypto/SecondaryProvisioningCipherTest.kt b/libsignal-service/src/test/java/org/whispersystems/signalservice/internal/crypto/SecondaryProvisioningCipherTest.kt index 0e2d87dd59..bef24a991d 100644 --- a/libsignal-service/src/test/java/org/whispersystems/signalservice/internal/crypto/SecondaryProvisioningCipherTest.kt +++ b/libsignal-service/src/test/java/org/whispersystems/signalservice/internal/crypto/SecondaryProvisioningCipherTest.kt @@ -11,12 +11,12 @@ import assertk.assertions.isInstanceOf import okio.ByteString import okio.ByteString.Companion.toByteString import org.junit.Test +import org.signal.core.util.UuidUtil +import org.signal.core.util.toByteArray import org.signal.libsignal.protocol.IdentityKey import org.signal.libsignal.protocol.IdentityKeyPair import org.signal.libsignal.protocol.ecc.ECPrivateKey import org.signal.libsignal.zkgroup.profiles.ProfileKey -import org.whispersystems.signalservice.api.util.UuidUtil -import org.whispersystems.signalservice.api.util.toByteArray import org.whispersystems.signalservice.internal.push.ProvisionEnvelope import org.whispersystems.signalservice.internal.push.ProvisionMessage import org.whispersystems.signalservice.internal.push.ProvisioningVersion @@ -52,7 +52,7 @@ class SecondaryProvisioningCipherTest { val success = result as SecondaryProvisioningCipher.ProvisioningDecryptResult.Success - assertThat(message.aci).isEqualTo(UuidUtil.parseOrThrow(success.message.aci).toString()) + assertThat(message.aci).isEqualTo(UuidUtil.parseOrThrow(success.message.aci!!).toString()) assertThat(message.number).isEqualTo(success.message.number) assertThat(primaryIdentityKeyPair.serialize()).isEqualTo(IdentityKeyPair(IdentityKey(success.message.aciIdentityKeyPublic!!.toByteArray()), ECPrivateKey(success.message.aciIdentityKeyPrivate!!.toByteArray())).serialize()) assertThat(primaryProfileKey.serialize()).isEqualTo(ProfileKey(success.message.profileKey!!.toByteArray()).serialize()) @@ -60,7 +60,7 @@ class SecondaryProvisioningCipherTest { assertThat(message.userAgent).isEqualTo(success.message.userAgent) assertThat(message.provisioningCode).isEqualTo(success.message.provisioningCode!!) assertThat(message.provisioningVersion).isEqualTo(success.message.provisioningVersion!!) - assertThat(message.aciBinary).isEqualTo(UuidUtil.parseOrThrow(success.message.aciBinary).toByteArray().toByteString()) + assertThat(message.aciBinary).isEqualTo(UuidUtil.parseOrThrow(success.message.aciBinary!!).toByteArray().toByteString()) } companion object { diff --git a/microbenchmark/build.gradle.kts b/microbenchmark/build.gradle.kts index f85bfe2098..4f2a539710 100644 --- a/microbenchmark/build.gradle.kts +++ b/microbenchmark/build.gradle.kts @@ -52,6 +52,7 @@ dependencies { lintChecks(project(":lintchecks")) implementation(project(":core-util")) + implementation(project(":core-models")) // Base dependencies androidTestImplementation(testLibs.junit.junit) diff --git a/microbenchmark/src/androidTest/java/org/signal/util/SignalClient.kt b/microbenchmark/src/androidTest/java/org/signal/util/SignalClient.kt index c6c8f7b5d1..53da9a15f7 100644 --- a/microbenchmark/src/androidTest/java/org/signal/util/SignalClient.kt +++ b/microbenchmark/src/androidTest/java/org/signal/util/SignalClient.kt @@ -1,7 +1,9 @@ package org.signal.util import okio.ByteString.Companion.toByteString +import org.signal.core.models.ServiceId import org.signal.core.util.Base64 +import org.signal.core.util.toByteArray import org.signal.libsignal.metadata.certificate.CertificateValidator import org.signal.libsignal.metadata.certificate.SenderCertificate import org.signal.libsignal.metadata.certificate.ServerCertificate @@ -25,9 +27,7 @@ import org.whispersystems.signalservice.api.crypto.SignalGroupSessionBuilder import org.whispersystems.signalservice.api.crypto.SignalServiceCipher import org.whispersystems.signalservice.api.crypto.UnidentifiedAccess import org.whispersystems.signalservice.api.push.DistributionId -import org.whispersystems.signalservice.api.push.ServiceId.ACI import org.whispersystems.signalservice.api.push.SignalServiceAddress -import org.whispersystems.signalservice.api.util.toByteArray import org.whispersystems.signalservice.internal.push.Content import org.whispersystems.signalservice.internal.push.DataMessage import org.whispersystems.signalservice.internal.push.Envelope @@ -50,7 +50,7 @@ class SignalClient { private val lock = TestSessionLock() - private val aci: ACI = ACI.from(UUID.randomUUID()) + private val aci: ServiceId.ACI = ServiceId.ACI.from(UUID.randomUUID()) private val store: SignalServiceAccountDataStore = InMemorySignalServiceAccountDataStore() diff --git a/registration/app/build.gradle.kts b/registration/app/build.gradle.kts index b0ee445e12..ae6ce5ac8e 100644 --- a/registration/app/build.gradle.kts +++ b/registration/app/build.gradle.kts @@ -1,6 +1,7 @@ plugins { id("signal-sample-app") alias(libs.plugins.compose.compiler) + alias(libs.plugins.kotlinx.serialization) } android { @@ -36,6 +37,7 @@ dependencies { // Core dependencies implementation(project(":core-ui")) implementation(project(":core-util")) + implementation(project(":core-models")) implementation(project(":libsignal-service")) // libsignal-protocol for PreKeyCollection types @@ -48,6 +50,16 @@ dependencies { implementation(libs.androidx.activity.compose) implementation(libs.androidx.core.ktx) + // Lifecycle + implementation(libs.androidx.lifecycle.viewmodel.compose) + + // Kotlinx Serialization + implementation(libs.kotlinx.serialization.json) + + // Navigation 3 + implementation(libs.androidx.navigation3.runtime) + implementation(libs.androidx.navigation3.ui) + // Compose BOM platform(libs.androidx.compose.bom).let { composeBom -> implementation(composeBom) diff --git a/registration/app/src/main/java/org/signal/registration/sample/AppViewModel.kt b/registration/app/src/main/java/org/signal/registration/sample/AppViewModel.kt new file mode 100644 index 0000000000..ada2bfe25c --- /dev/null +++ b/registration/app/src/main/java/org/signal/registration/sample/AppViewModel.kt @@ -0,0 +1,13 @@ +/* + * Copyright 2025 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.signal.registration.sample + +import androidx.lifecycle.ViewModel +import org.signal.core.ui.navigation.ResultEventBus + +class AppViewModel : ViewModel() { + val resultEventBus = ResultEventBus() +} diff --git a/registration/app/src/main/java/org/signal/registration/sample/MainActivity.kt b/registration/app/src/main/java/org/signal/registration/sample/MainActivity.kt index 93e2e0b5e7..cc1233bda7 100644 --- a/registration/app/src/main/java/org/signal/registration/sample/MainActivity.kt +++ b/registration/app/src/main/java/org/signal/registration/sample/MainActivity.kt @@ -8,60 +8,79 @@ package org.signal.registration.sample import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Column +import androidx.activity.result.ActivityResultLauncher +import androidx.activity.viewModels import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.padding -import androidx.compose.material3.Button import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface -import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.setValue -import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.unit.dp +import androidx.lifecycle.compose.collectAsStateWithLifecycle +import androidx.lifecycle.viewmodel.compose.viewModel +import androidx.navigation3.runtime.NavBackStack +import androidx.navigation3.runtime.NavEntry +import androidx.navigation3.runtime.NavKey +import androidx.navigation3.runtime.entryProvider +import androidx.navigation3.runtime.rememberDecoratedNavEntries +import androidx.navigation3.runtime.rememberNavBackStack +import androidx.navigation3.runtime.rememberSaveableStateHolderNavEntryDecorator +import androidx.navigation3.ui.NavDisplay +import kotlinx.serialization.Serializable import org.signal.core.ui.compose.theme.SignalTheme +import org.signal.core.ui.navigation.ResultEffect +import org.signal.core.ui.navigation.ResultEventBus import org.signal.registration.RegistrationActivity +import org.signal.registration.sample.MainActivity.Companion.REGISTRATION_RESULT +import org.signal.registration.sample.screens.RegistrationCompleteScreen +import org.signal.registration.sample.screens.main.MainScreen +import org.signal.registration.sample.screens.main.MainScreenViewModel + +/** + * Navigation routes for the sample app. + */ +sealed interface SampleRoute : NavKey { + @Serializable + data object Main : SampleRoute + + @Serializable + data object RegistrationComplete : SampleRoute +} /** * Sample app activity that launches the registration flow for testing. */ class MainActivity : ComponentActivity() { - - private val registrationLauncher = registerForActivityResult( - RegistrationActivity.RegistrationContract() - ) { success -> - registrationComplete = success + companion object { + const val REGISTRATION_RESULT = "registration_result" } - private var registrationComplete by mutableStateOf(false) + private val viewModel: AppViewModel by viewModels() + + private val registrationLauncher: ActivityResultLauncher = registerForActivityResult(RegistrationActivity.RegistrationContract()) { success -> + viewModel.resultEventBus.sendResult(REGISTRATION_RESULT, success) + } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { - SignalTheme(incognitoKeyboardEnabled = false) { + SignalTheme { Surface( modifier = Modifier.fillMaxSize(), color = MaterialTheme.colorScheme.background ) { - if (registrationComplete) { - RegistrationCompleteScreen( - onStartOver = { - registrationComplete = false - } - ) - } else { - MainScreen( - onLaunchRegistration = { - registrationLauncher.launch(Unit) - } - ) - } + val backStack = rememberNavBackStack(SampleRoute.Main) + + SampleNavHost( + onLaunchRegistration = { registrationLauncher.launch(Unit) }, + backStack = backStack, + resultEventBus = viewModel.resultEventBus, + onStartOver = { + backStack.clear() + backStack.add(SampleRoute.Main) + } + ) } } } @@ -69,63 +88,50 @@ class MainActivity : ComponentActivity() { } @Composable -private fun MainScreen( +private fun SampleNavHost( onLaunchRegistration: () -> Unit, - modifier: Modifier = Modifier -) { - Column( - modifier = modifier - .fillMaxSize() - .padding(24.dp), - horizontalAlignment = Alignment.CenterHorizontally, - verticalArrangement = Arrangement.Center - ) { - Text( - text = "Registration Sample App", - style = MaterialTheme.typography.headlineMedium - ) - - Text( - text = "Test the registration flow", - style = MaterialTheme.typography.bodyLarge, - modifier = Modifier.padding(top = 8.dp) - ) - - Button( - onClick = onLaunchRegistration, - modifier = Modifier - .fillMaxWidth() - .padding(top = 48.dp) - ) { - Text("Start Registration") - } - } -} - -@Composable -private fun RegistrationCompleteScreen( onStartOver: () -> Unit, + backStack: NavBackStack, + resultEventBus: ResultEventBus, modifier: Modifier = Modifier ) { - Column( - modifier = modifier - .fillMaxSize() - .padding(24.dp), - horizontalAlignment = Alignment.CenterHorizontally, - verticalArrangement = Arrangement.Center - ) { - Text( - text = "Registration Complete!", - style = MaterialTheme.typography.headlineMedium - ) + val entryProvider: (NavKey) -> NavEntry = entryProvider { + entry { + val viewModel: MainScreenViewModel = viewModel( + factory = MainScreenViewModel.Factory(onLaunchRegistration) + ) + val state by viewModel.state.collectAsStateWithLifecycle() - Button( - onClick = onStartOver, - modifier = Modifier - .fillMaxWidth() - .padding(top = 48.dp) - ) { - Text("Start Over") + ResultEffect(resultEventBus, REGISTRATION_RESULT) { success -> + if (success) { + backStack.add(SampleRoute.RegistrationComplete) + } + } + + MainScreen( + state = state, + onEvent = { viewModel.onEvent(it) } + ) + } + + entry { + RegistrationCompleteScreen(onStartOver = onStartOver) } } + + val decorators = listOf( + rememberSaveableStateHolderNavEntryDecorator() + ) + + val entries = rememberDecoratedNavEntries( + backStack = backStack, + entryDecorators = decorators, + entryProvider = entryProvider + ) + + NavDisplay( + entries = entries, + onBack = {}, + modifier = modifier + ) } diff --git a/registration/app/src/main/java/org/signal/registration/sample/RegistrationApplication.kt b/registration/app/src/main/java/org/signal/registration/sample/RegistrationApplication.kt index d59e0768db..cd01c2a114 100644 --- a/registration/app/src/main/java/org/signal/registration/sample/RegistrationApplication.kt +++ b/registration/app/src/main/java/org/signal/registration/sample/RegistrationApplication.kt @@ -7,14 +7,14 @@ package org.signal.registration.sample import android.app.Application import android.os.Build +import org.signal.core.models.ServiceId.ACI +import org.signal.core.models.ServiceId.PNI import org.signal.core.util.Base64 import org.signal.core.util.logging.AndroidLogger import org.signal.core.util.logging.Log import org.signal.registration.RegistrationDependencies import org.signal.registration.sample.dependencies.RealNetworkController import org.signal.registration.sample.dependencies.RealStorageController -import org.whispersystems.signalservice.api.push.ServiceId.ACI -import org.whispersystems.signalservice.api.push.ServiceId.PNI import org.whispersystems.signalservice.api.push.TrustStore import org.whispersystems.signalservice.api.util.CredentialsProvider import org.whispersystems.signalservice.internal.configuration.SignalCdnUrl diff --git a/registration/app/src/main/java/org/signal/registration/sample/dependencies/RealNetworkController.kt b/registration/app/src/main/java/org/signal/registration/sample/dependencies/RealNetworkController.kt index 1c8252bdb1..25600f221d 100644 --- a/registration/app/src/main/java/org/signal/registration/sample/dependencies/RealNetworkController.kt +++ b/registration/app/src/main/java/org/signal/registration/sample/dependencies/RealNetworkController.kt @@ -51,7 +51,7 @@ class RealNetworkController( val session = json.decodeFromString(response.body.string()) RegistrationNetworkResult.Success(session) } - 400 -> { + 422 -> { RegistrationNetworkResult.Failure(CreateSessionError.InvalidRequest(response.body.string())) } 429 -> { @@ -208,7 +208,7 @@ class RealNetworkController( RegistrationNetworkResult.Success(session) } 400 -> { - RegistrationNetworkResult.Failure(SubmitVerificationCodeError.IncorrectVerificationCode(response.body.string())) + RegistrationNetworkResult.Failure(SubmitVerificationCodeError.InvalidSessionIdOrVerificationCode(response.body.string())) } 404 -> { RegistrationNetworkResult.Failure(SubmitVerificationCodeError.SessionNotFound(response.body.string())) diff --git a/registration/app/src/main/java/org/signal/registration/sample/dependencies/RealStorageController.kt b/registration/app/src/main/java/org/signal/registration/sample/dependencies/RealStorageController.kt index 674fd68648..46ead9e385 100644 --- a/registration/app/src/main/java/org/signal/registration/sample/dependencies/RealStorageController.kt +++ b/registration/app/src/main/java/org/signal/registration/sample/dependencies/RealStorageController.kt @@ -11,8 +11,10 @@ import android.database.sqlite.SQLiteDatabase import android.database.sqlite.SQLiteOpenHelper import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext +import org.signal.core.models.AccountEntropyPool import org.signal.core.util.Base64 import org.signal.libsignal.protocol.IdentityKeyPair +import org.signal.libsignal.protocol.ServiceId import org.signal.libsignal.protocol.ecc.ECKeyPair import org.signal.libsignal.protocol.kem.KEMKeyPair import org.signal.libsignal.protocol.kem.KEMKeyType @@ -20,6 +22,8 @@ import org.signal.libsignal.protocol.state.KyberPreKeyRecord import org.signal.libsignal.protocol.state.SignedPreKeyRecord import org.signal.libsignal.zkgroup.profiles.ProfileKey import org.signal.registration.KeyMaterial +import org.signal.registration.NewRegistrationData +import org.signal.registration.PreExistingRegistrationData import org.signal.registration.StorageController import java.security.SecureRandom import javax.crypto.Cipher @@ -73,6 +77,69 @@ class RealStorageController(context: Context) : StorageController { keyMaterial } + override suspend fun saveNewRegistrationData(newRegistrationData: NewRegistrationData) = withContext(Dispatchers.IO) { + val database = db.writableDatabase + database.beginTransaction() + try { + database.delete(RegistrationDatabase.TABLE_ACCOUNT, null, null) + + database.insert( + RegistrationDatabase.TABLE_ACCOUNT, + null, + ContentValues().apply { + put(RegistrationDatabase.COLUMN_E164, newRegistrationData.e164) + put(RegistrationDatabase.COLUMN_ACI, newRegistrationData.aci.toString()) + put(RegistrationDatabase.COLUMN_PNI, newRegistrationData.pni.toString()) + put(RegistrationDatabase.COLUMN_SERVICE_PASSWORD, newRegistrationData.servicePassword) + put(RegistrationDatabase.COLUMN_AEP, newRegistrationData.aep.toString()) + } + ) + + database.setTransactionSuccessful() + } finally { + database.endTransaction() + } + } + + override suspend fun getPreExistingRegistrationData(): PreExistingRegistrationData? = withContext(Dispatchers.IO) { + val database = db.readableDatabase + val cursor = database.query( + RegistrationDatabase.TABLE_ACCOUNT, + arrayOf( + RegistrationDatabase.COLUMN_E164, + RegistrationDatabase.COLUMN_ACI, + RegistrationDatabase.COLUMN_PNI, + RegistrationDatabase.COLUMN_SERVICE_PASSWORD, + RegistrationDatabase.COLUMN_AEP + ), + null, + null, + null, + null, + null + ) + + cursor.use { + if (it.moveToFirst()) { + val e164 = it.getString(it.getColumnIndexOrThrow(RegistrationDatabase.COLUMN_E164)) + val aciString = it.getString(it.getColumnIndexOrThrow(RegistrationDatabase.COLUMN_ACI)) + val pniString = it.getString(it.getColumnIndexOrThrow(RegistrationDatabase.COLUMN_PNI)) + val servicePassword = it.getString(it.getColumnIndexOrThrow(RegistrationDatabase.COLUMN_SERVICE_PASSWORD)) + val aepValue = it.getString(it.getColumnIndexOrThrow(RegistrationDatabase.COLUMN_AEP)) + + PreExistingRegistrationData( + e164 = e164, + aci = ServiceId.Aci.parseFromString(aciString), + pni = ServiceId.Pni.parseFromString(pniString), + servicePassword = servicePassword, + aep = AccountEntropyPool(aepValue) + ) + } else { + null + } + } + } + private fun storeKeyMaterial(keyMaterial: KeyMaterial, profileKey: ProfileKey) { val database = db.writableDatabase database.beginTransaction() @@ -254,12 +321,18 @@ class RealStorageController(context: Context) : StorageController { const val TABLE_KYBER_PREKEYS = "kyber_prekeys" const val TABLE_REGISTRATION_IDS = "registration_ids" const val TABLE_PROFILE_KEY = "profile_key" + const val TABLE_ACCOUNT = "account" const val COLUMN_ID = "_id" const val COLUMN_ACCOUNT_TYPE = "account_type" const val COLUMN_KEY_ID = "key_id" const val COLUMN_KEY_DATA = "key_data" const val COLUMN_REGISTRATION_ID = "registration_id" + const val COLUMN_E164 = "e164" + const val COLUMN_ACI = "aci" + const val COLUMN_PNI = "pni" + const val COLUMN_SERVICE_PASSWORD = "service_password" + const val COLUMN_AEP = "aep" } override fun onCreate(db: SQLiteDatabase) { @@ -313,6 +386,19 @@ class RealStorageController(context: Context) : StorageController { ) """.trimIndent() ) + + db.execSQL( + """ + CREATE TABLE $TABLE_ACCOUNT ( + $COLUMN_ID INTEGER PRIMARY KEY AUTOINCREMENT, + $COLUMN_E164 TEXT NOT NULL, + $COLUMN_ACI TEXT NOT NULL, + $COLUMN_PNI TEXT NOT NULL, + $COLUMN_SERVICE_PASSWORD TEXT NOT NULL, + $COLUMN_AEP TEXT NOT NULL + ) + """.trimIndent() + ) } override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) { diff --git a/registration/app/src/main/java/org/signal/registration/sample/screens/RegistrationCompleteScreen.kt b/registration/app/src/main/java/org/signal/registration/sample/screens/RegistrationCompleteScreen.kt new file mode 100644 index 0000000000..4229e0ff95 --- /dev/null +++ b/registration/app/src/main/java/org/signal/registration/sample/screens/RegistrationCompleteScreen.kt @@ -0,0 +1,57 @@ +/* + * Copyright 2025 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.signal.registration.sample.screens + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Button +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import org.signal.core.ui.compose.Previews + +@Composable +fun RegistrationCompleteScreen( + onStartOver: () -> Unit, + modifier: Modifier = Modifier +) { + Column( + modifier = modifier + .fillMaxSize() + .padding(24.dp), + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.Center + ) { + Text( + text = "Registration Complete!", + style = MaterialTheme.typography.headlineMedium + ) + + Button( + onClick = onStartOver, + modifier = Modifier + .fillMaxWidth() + .padding(top = 48.dp) + ) { + Text("Start Over") + } + } +} + +@Preview(showBackground = true) +@Composable +private fun RegistrationCompleteScreenPreview() { + Previews.Preview { + RegistrationCompleteScreen(onStartOver = {}) + } +} diff --git a/registration/app/src/main/java/org/signal/registration/sample/screens/main/MainScreen.kt b/registration/app/src/main/java/org/signal/registration/sample/screens/main/MainScreen.kt new file mode 100644 index 0000000000..664b40a811 --- /dev/null +++ b/registration/app/src/main/java/org/signal/registration/sample/screens/main/MainScreen.kt @@ -0,0 +1,75 @@ +/* + * Copyright 2025 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.signal.registration.sample.screens.main + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Button +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import org.signal.core.ui.compose.Previews + +@Composable +fun MainScreen( + state: MainScreenState, + onEvent: (MainScreenEvents) -> Unit, + modifier: Modifier = Modifier +) { + Column( + modifier = modifier + .fillMaxSize() + .padding(24.dp), + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.Center + ) { + Text( + text = "Registration Sample App", + style = MaterialTheme.typography.headlineMedium + ) + + Text( + text = "Test the registration flow", + style = MaterialTheme.typography.bodyLarge, + modifier = Modifier.padding(top = 8.dp) + ) + + Button( + onClick = { onEvent(MainScreenEvents.LaunchRegistration) }, + modifier = Modifier + .fillMaxWidth() + .padding(top = 48.dp) + ) { + Text("Start Registration") + } + + if (state.existingRegistrationState != null) { + RegistrationInfo(state.existingRegistrationState) + } + } +} + +@Composable +private fun RegistrationInfo(data: MainScreenState.ExistingRegistrationState) { +} + +@Preview(showBackground = true) +@Composable +private fun MainScreenPreview() { + Previews.Preview { + MainScreen( + state = MainScreenState(), + onEvent = {} + ) + } +} diff --git a/registration/app/src/main/java/org/signal/registration/sample/screens/main/MainScreenEvents.kt b/registration/app/src/main/java/org/signal/registration/sample/screens/main/MainScreenEvents.kt new file mode 100644 index 0000000000..665128a616 --- /dev/null +++ b/registration/app/src/main/java/org/signal/registration/sample/screens/main/MainScreenEvents.kt @@ -0,0 +1,10 @@ +/* + * Copyright 2025 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.signal.registration.sample.screens.main + +sealed interface MainScreenEvents { + data object LaunchRegistration : MainScreenEvents +} diff --git a/registration/app/src/main/java/org/signal/registration/sample/screens/main/MainScreenState.kt b/registration/app/src/main/java/org/signal/registration/sample/screens/main/MainScreenState.kt new file mode 100644 index 0000000000..3e282f69cf --- /dev/null +++ b/registration/app/src/main/java/org/signal/registration/sample/screens/main/MainScreenState.kt @@ -0,0 +1,12 @@ +/* + * Copyright 2025 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.signal.registration.sample.screens.main + +data class MainScreenState( + val existingRegistrationState: ExistingRegistrationState? = null +) { + data class ExistingRegistrationState(val phoneNumber: String) +} diff --git a/registration/app/src/main/java/org/signal/registration/sample/screens/main/MainScreenViewModel.kt b/registration/app/src/main/java/org/signal/registration/sample/screens/main/MainScreenViewModel.kt new file mode 100644 index 0000000000..bd175a317f --- /dev/null +++ b/registration/app/src/main/java/org/signal/registration/sample/screens/main/MainScreenViewModel.kt @@ -0,0 +1,36 @@ +/* + * Copyright 2025 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.signal.registration.sample.screens.main + +import androidx.lifecycle.ViewModel +import androidx.lifecycle.ViewModelProvider +import androidx.lifecycle.viewModelScope +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.launch + +class MainScreenViewModel( + private val onLaunchRegistration: () -> Unit +) : ViewModel() { + + private val _state = MutableStateFlow(MainScreenState()) + val state: StateFlow = _state.asStateFlow() + + fun onEvent(event: MainScreenEvents) { + viewModelScope.launch { + when (event) { + MainScreenEvents.LaunchRegistration -> onLaunchRegistration() + } + } + } + + class Factory(private val onLaunchRegistration: () -> Unit) : ViewModelProvider.Factory { + override fun create(modelClass: Class): T { + return MainScreenViewModel(onLaunchRegistration) as T + } + } +} diff --git a/registration/lib/build.gradle.kts b/registration/lib/build.gradle.kts index c4f6ea1e2e..32cd59aa1d 100644 --- a/registration/lib/build.gradle.kts +++ b/registration/lib/build.gradle.kts @@ -26,6 +26,7 @@ dependencies { // Project dependencies implementation(project(":core-ui")) implementation(project(":core-util")) + implementation(project(":core-models")) implementation(libs.libsignal.android) // Compose BOM diff --git a/registration/lib/src/main/java/org/signal/registration/NetworkController.kt b/registration/lib/src/main/java/org/signal/registration/NetworkController.kt index 055210fe0a..e97c7b855e 100644 --- a/registration/lib/src/main/java/org/signal/registration/NetworkController.kt +++ b/registration/lib/src/main/java/org/signal/registration/NetworkController.kt @@ -160,7 +160,7 @@ interface NetworkController { } sealed class SubmitVerificationCodeError() { - data class IncorrectVerificationCode(val message: String) : SubmitVerificationCodeError() + data class InvalidSessionIdOrVerificationCode(val message: String) : SubmitVerificationCodeError() data class SessionNotFound(val message: String) : SubmitVerificationCodeError() data class SessionAlreadyVerifiedOrNoCodeRequested(val session: SessionMetadata) : SubmitVerificationCodeError() data class RateLimited(val retryAfter: Duration, val session: SessionMetadata) : SubmitVerificationCodeError() diff --git a/registration/lib/src/main/java/org/signal/registration/StorageController.kt b/registration/lib/src/main/java/org/signal/registration/StorageController.kt index 1d9a2a82af..2bd613851f 100644 --- a/registration/lib/src/main/java/org/signal/registration/StorageController.kt +++ b/registration/lib/src/main/java/org/signal/registration/StorageController.kt @@ -5,7 +5,9 @@ package org.signal.registration +import org.signal.core.models.AccountEntropyPool import org.signal.libsignal.protocol.IdentityKeyPair +import org.signal.libsignal.protocol.ServiceId import org.signal.libsignal.protocol.state.KyberPreKeyRecord import org.signal.libsignal.protocol.state.SignedPreKeyRecord @@ -18,6 +20,18 @@ interface StorageController { * @return [KeyMaterial] containing all generated cryptographic material needed for registration. */ suspend fun generateAndStoreKeyMaterial(): KeyMaterial + + /** + * Called after a successful registration to store new registration data. + */ + suspend fun saveNewRegistrationData(newRegistrationData: NewRegistrationData) + + /** + * Retrieves previously stored registration data for registered installs, if any. + * + * @return Data for the existing registration if registered, otherwise null. + */ + suspend fun getPreExistingRegistrationData(): PreExistingRegistrationData? } /** @@ -45,3 +59,19 @@ data class KeyMaterial( /** Password for basic auth during registration (18 random bytes, base64 encoded). */ val servicePassword: String ) + +data class NewRegistrationData( + val e164: String, + val aci: ServiceId.Aci, + val pni: ServiceId.Pni, + val servicePassword: String, + val aep: AccountEntropyPool +) + +data class PreExistingRegistrationData( + val e164: String, + val aci: ServiceId.Aci, + val pni: ServiceId.Pni, + val servicePassword: String, + val aep: AccountEntropyPool +) diff --git a/registration/lib/src/main/java/org/signal/registration/screens/verificationcode/VerificationCodeViewModel.kt b/registration/lib/src/main/java/org/signal/registration/screens/verificationcode/VerificationCodeViewModel.kt index e1cb70b2d4..d9b07d3179 100644 --- a/registration/lib/src/main/java/org/signal/registration/screens/verificationcode/VerificationCodeViewModel.kt +++ b/registration/lib/src/main/java/org/signal/registration/screens/verificationcode/VerificationCodeViewModel.kt @@ -72,7 +72,7 @@ class VerificationCodeViewModel( private suspend fun transformCodeEntered(inputState: VerificationCodeState, code: String): VerificationCodeState { var state = inputState.copy() - var sessionMetadata = state.sessionMetadata ?: return state.copy(oneTimeEvent = OneTimeEvent.UnknownError) + var sessionMetadata = state.sessionMetadata ?: return state.also { parentEventEmitter(RegistrationFlowEvent.ResetState) } // TODO should we be checking on whether we need to do more captcha stuff? @@ -84,12 +84,13 @@ class VerificationCodeViewModel( } is NetworkController.RegistrationNetworkResult.Failure -> { when (result.error) { - is NetworkController.SubmitVerificationCodeError.IncorrectVerificationCode -> { - Log.w(TAG, "[SubmitCode] Incorrect verification code entered. Body: ${result.error.message}") + is NetworkController.SubmitVerificationCodeError.InvalidSessionIdOrVerificationCode -> { + Log.w(TAG, "[SubmitCode] Invalid sessionId or verification code entered. This is distinct from an *incorrect* verification code. Body: ${result.error.message}") return state.copy(oneTimeEvent = OneTimeEvent.IncorrectVerificationCode) } is NetworkController.SubmitVerificationCodeError.SessionNotFound -> { Log.w(TAG, "[SubmitCode] Session not found: ${result.error.message}") + // TODO don't start over, go back to phone number entry parentEventEmitter(RegistrationFlowEvent.ResetState) return state } @@ -113,13 +114,18 @@ class VerificationCodeViewModel( return state.copy(oneTimeEvent = OneTimeEvent.NetworkError) } is NetworkController.RegistrationNetworkResult.ApplicationError -> { - Log.w(TAG, "Unknown error when submitting verification code.", result.exception) + Log.w(TAG, "[SubmitCode] Unknown error when submitting verification code.", result.exception) return state.copy(oneTimeEvent = OneTimeEvent.UnknownError) } } state = state.copy(sessionMetadata = sessionMetadata) + if (!sessionMetadata.verified) { + Log.w(TAG, "[SubmitCode] Verification code was incorrect.") + return state.copy(oneTimeEvent = OneTimeEvent.IncorrectVerificationCode) + } + // Attempt to register val registerResult = repository.registerAccount(e164 = state.e164, sessionId = sessionMetadata.id, skipDeviceTransfer = true) @@ -198,6 +204,7 @@ class VerificationCodeViewModel( state.copy(oneTimeEvent = OneTimeEvent.CouldNotRequestCodeWithSelectedTransport) } is NetworkController.RequestVerificationCodeError.InvalidSessionId -> { + // TODO don't start over, go back to phone number entry parentEventEmitter(RegistrationFlowEvent.ResetState) state } @@ -206,6 +213,7 @@ class VerificationCodeViewModel( state.copy(oneTimeEvent = OneTimeEvent.NetworkError) } is NetworkController.RequestVerificationCodeError.SessionNotFound -> { + // TODO don't start over, go back to phone number entry parentEventEmitter(RegistrationFlowEvent.ResetState) state } diff --git a/registration/lib/src/test/java/org/signal/registration/screens/verificationcode/VerificationCodeViewModelTest.kt b/registration/lib/src/test/java/org/signal/registration/screens/verificationcode/VerificationCodeViewModelTest.kt new file mode 100644 index 0000000000..c6b74cbbd3 --- /dev/null +++ b/registration/lib/src/test/java/org/signal/registration/screens/verificationcode/VerificationCodeViewModelTest.kt @@ -0,0 +1,773 @@ +/* + * Copyright 2025 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.signal.registration.screens.verificationcode + +import assertk.assertThat +import assertk.assertions.hasSize +import assertk.assertions.isEqualTo +import assertk.assertions.isInstanceOf +import assertk.assertions.isNotNull +import assertk.assertions.isNull +import assertk.assertions.prop +import io.mockk.coEvery +import io.mockk.mockk +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.test.runTest +import org.junit.Before +import org.junit.Ignore +import org.junit.Test +import org.signal.registration.NetworkController +import org.signal.registration.RegistrationFlowEvent +import org.signal.registration.RegistrationFlowState +import org.signal.registration.RegistrationRepository +import org.signal.registration.RegistrationRoute +import kotlin.time.Duration.Companion.seconds + +class VerificationCodeViewModelTest { + + private lateinit var viewModel: VerificationCodeViewModel + private lateinit var mockRepository: RegistrationRepository + private lateinit var parentState: MutableStateFlow + private lateinit var emittedEvents: MutableList + private lateinit var parentEventEmitter: (RegistrationFlowEvent) -> Unit + + @Before + fun setup() { + mockRepository = mockk(relaxed = true) + // Initialize with valid session data to prevent ResetState emission during ViewModel initialization + parentState = MutableStateFlow( + RegistrationFlowState( + sessionMetadata = createSessionMetadata(), + sessionE164 = "+15551234567" + ) + ) + emittedEvents = mutableListOf() + parentEventEmitter = { event -> emittedEvents.add(event) } + viewModel = VerificationCodeViewModel(mockRepository, parentState, parentEventEmitter) + } + + // ==================== applyParentState Tests ==================== + + @Test + fun `applyParentState with null sessionMetadata emits ResetState`() { + val state = VerificationCodeState() + val parentFlowState = RegistrationFlowState( + sessionMetadata = null, + sessionE164 = "+15551234567" + ) + + viewModel.applyParentState(state, parentFlowState) + + assertThat(emittedEvents).hasSize(1) + assertThat(emittedEvents.first()).isEqualTo(RegistrationFlowEvent.ResetState) + } + + @Test + fun `applyParentState with null sessionE164 emits ResetState`() { + val state = VerificationCodeState() + val parentFlowState = RegistrationFlowState( + sessionMetadata = createSessionMetadata(), + sessionE164 = null + ) + + viewModel.applyParentState(state, parentFlowState) + + assertThat(emittedEvents).hasSize(1) + assertThat(emittedEvents.first()).isEqualTo(RegistrationFlowEvent.ResetState) + } + + @Test + fun `applyParentState with both null values emits ResetState`() { + val state = VerificationCodeState() + val parentFlowState = RegistrationFlowState( + sessionMetadata = null, + sessionE164 = null + ) + + viewModel.applyParentState(state, parentFlowState) + + assertThat(emittedEvents).hasSize(1) + assertThat(emittedEvents.first()).isEqualTo(RegistrationFlowEvent.ResetState) + } + + @Test + fun `applyParentState with valid session copies metadata and e164`() { + val state = VerificationCodeState() + val sessionMetadata = createSessionMetadata(id = "test-session") + val e164 = "+15551234567" + val parentFlowState = RegistrationFlowState( + sessionMetadata = sessionMetadata, + sessionE164 = e164 + ) + + val result = viewModel.applyParentState(state, parentFlowState) + + assertThat(emittedEvents).hasSize(0) + assertThat(result.sessionMetadata).isEqualTo(sessionMetadata) + assertThat(result.e164).isEqualTo(e164) + } + + @Test + fun `applyParentState preserves existing oneTimeEvent`() { + val state = VerificationCodeState(oneTimeEvent = VerificationCodeState.OneTimeEvent.NetworkError) + val sessionMetadata = createSessionMetadata() + val parentFlowState = RegistrationFlowState( + sessionMetadata = sessionMetadata, + sessionE164 = "+15551234567" + ) + + val result = viewModel.applyParentState(state, parentFlowState) + + assertThat(result.oneTimeEvent).isEqualTo(VerificationCodeState.OneTimeEvent.NetworkError) + } + + // ==================== applyEvent: ConsumeInnerOneTimeEvent Tests ==================== + + @Test + fun `ConsumeInnerOneTimeEvent clears oneTimeEvent`() = runTest { + val initialState = VerificationCodeState( + oneTimeEvent = VerificationCodeState.OneTimeEvent.NetworkError + ) + + val result = viewModel.applyEvent( + initialState, + VerificationCodeScreenEvents.ConsumeInnerOneTimeEvent + ) + + assertThat(result.oneTimeEvent).isNull() + } + + @Test + fun `ConsumeInnerOneTimeEvent with null event returns state with null event`() = runTest { + val initialState = VerificationCodeState(oneTimeEvent = null) + + val result = viewModel.applyEvent( + initialState, + VerificationCodeScreenEvents.ConsumeInnerOneTimeEvent + ) + + assertThat(result.oneTimeEvent).isNull() + } + + // ==================== applyEvent: WrongNumber Tests ==================== + + @Test + fun `WrongNumber navigates to PhoneNumberEntry`() = runTest { + val initialState = VerificationCodeState() + + viewModel.applyEvent(initialState, VerificationCodeScreenEvents.WrongNumber) + + assertThat(emittedEvents).hasSize(1) + assertThat(emittedEvents.first()) + .isInstanceOf() + .prop(RegistrationFlowEvent.NavigateToScreen::route) + .isInstanceOf() + } + + // ==================== applyEvent: CodeEntered Tests ==================== + + @Test + fun `CodeEntered emits ResetState when sessionMetadata is null`() = runTest { + val initialState = VerificationCodeState(sessionMetadata = null) + + val result = viewModel.applyEvent( + initialState, + VerificationCodeScreenEvents.CodeEntered("123456") + ) + + assertThat(result).isEqualTo(initialState) + assertThat(emittedEvents).hasSize(1) + assertThat(emittedEvents.first()) + .isInstanceOf() + } + + @Test + fun `CodeEntered with success registers account and navigates to FullyComplete`() = runTest { + val sessionMetadata = createSessionMetadata(verified = true) + val initialState = VerificationCodeState( + sessionMetadata = sessionMetadata, + e164 = "+15551234567" + ) + + val registerResponse = createRegisterAccountResponse() + + coEvery { mockRepository.submitVerificationCode(any(), any()) } returns + NetworkController.RegistrationNetworkResult.Success(sessionMetadata) + coEvery { mockRepository.registerAccount(any(), any(), any()) } returns + NetworkController.RegistrationNetworkResult.Success(registerResponse) + + viewModel.applyEvent(initialState, VerificationCodeScreenEvents.CodeEntered("123456")) + + assertThat(emittedEvents).hasSize(1) + assertThat(emittedEvents.first()) + .isInstanceOf() + .prop(RegistrationFlowEvent.NavigateToScreen::route) + .isInstanceOf() + } + + @Test + fun `CodeEntered with incorrect code returns IncorrectVerificationCode event`() = runTest { + val sessionMetadata = createSessionMetadata() + val initialState = VerificationCodeState( + sessionMetadata = sessionMetadata, + e164 = "+15551234567" + ) + + coEvery { mockRepository.submitVerificationCode(any(), any()) } returns + NetworkController.RegistrationNetworkResult.Failure( + NetworkController.SubmitVerificationCodeError.InvalidSessionIdOrVerificationCode("Wrong code") + ) + + val result = viewModel.applyEvent( + initialState, + VerificationCodeScreenEvents.CodeEntered("123456") + ) + + assertThat(result.oneTimeEvent).isEqualTo(VerificationCodeState.OneTimeEvent.IncorrectVerificationCode) + } + + @Test + fun `CodeEntered with session not found emits ResetState`() = runTest { + val sessionMetadata = createSessionMetadata() + val initialState = VerificationCodeState( + sessionMetadata = sessionMetadata, + e164 = "+15551234567" + ) + + coEvery { mockRepository.submitVerificationCode(any(), any()) } returns + NetworkController.RegistrationNetworkResult.Failure( + NetworkController.SubmitVerificationCodeError.SessionNotFound("Session expired") + ) + + viewModel.applyEvent(initialState, VerificationCodeScreenEvents.CodeEntered("123456")) + + assertThat(emittedEvents).hasSize(1) + assertThat(emittedEvents.first()).isEqualTo(RegistrationFlowEvent.ResetState) + } + + @Test + fun `CodeEntered with already verified session continues to register`() = runTest { + val verifiedSession = createSessionMetadata(verified = true) + val initialState = VerificationCodeState( + sessionMetadata = createSessionMetadata(verified = false), + e164 = "+15551234567" + ) + + val registerResponse = createRegisterAccountResponse() + + coEvery { mockRepository.submitVerificationCode(any(), any()) } returns + NetworkController.RegistrationNetworkResult.Failure( + NetworkController.SubmitVerificationCodeError.SessionAlreadyVerifiedOrNoCodeRequested(verifiedSession) + ) + coEvery { mockRepository.registerAccount(any(), any(), any()) } returns + NetworkController.RegistrationNetworkResult.Success(registerResponse) + + viewModel.applyEvent(initialState, VerificationCodeScreenEvents.CodeEntered("123456")) + + assertThat(emittedEvents).hasSize(1) + assertThat(emittedEvents.first()) + .isInstanceOf() + .prop(RegistrationFlowEvent.NavigateToScreen::route) + .isInstanceOf() + } + + @Test + fun `CodeEntered with no code requested and not verified navigates back`() = runTest { + val unverifiedSession = createSessionMetadata(verified = false) + val initialState = VerificationCodeState( + sessionMetadata = createSessionMetadata(), + e164 = "+15551234567" + ) + + coEvery { mockRepository.submitVerificationCode(any(), any()) } returns + NetworkController.RegistrationNetworkResult.Failure( + NetworkController.SubmitVerificationCodeError.SessionAlreadyVerifiedOrNoCodeRequested(unverifiedSession) + ) + + viewModel.applyEvent(initialState, VerificationCodeScreenEvents.CodeEntered("123456")) + + assertThat(emittedEvents).hasSize(1) + assertThat(emittedEvents.first()).isEqualTo(RegistrationFlowEvent.NavigateBack) + } + + @Test + fun `CodeEntered with rate limit from submitVerificationCode returns RateLimited event`() = runTest { + val sessionMetadata = createSessionMetadata() + val initialState = VerificationCodeState( + sessionMetadata = sessionMetadata, + e164 = "+15551234567" + ) + + coEvery { mockRepository.submitVerificationCode(any(), any()) } returns + NetworkController.RegistrationNetworkResult.Failure( + NetworkController.SubmitVerificationCodeError.RateLimited(60.seconds, sessionMetadata) + ) + + val result = viewModel.applyEvent( + initialState, + VerificationCodeScreenEvents.CodeEntered("123456") + ) + + assertThat(result.oneTimeEvent).isNotNull() + .isInstanceOf() + .prop(VerificationCodeState.OneTimeEvent.RateLimited::retryAfter) + .isEqualTo(60.seconds) + } + + @Test + fun `CodeEntered with network error from submitVerificationCode returns NetworkError event`() = runTest { + val sessionMetadata = createSessionMetadata() + val initialState = VerificationCodeState( + sessionMetadata = sessionMetadata, + e164 = "+15551234567" + ) + + coEvery { mockRepository.submitVerificationCode(any(), any()) } returns + NetworkController.RegistrationNetworkResult.NetworkError(java.io.IOException("Network error")) + + val result = viewModel.applyEvent( + initialState, + VerificationCodeScreenEvents.CodeEntered("123456") + ) + + assertThat(result.oneTimeEvent).isEqualTo(VerificationCodeState.OneTimeEvent.NetworkError) + } + + @Test + fun `CodeEntered with application error from submitVerificationCode returns UnknownError event`() = runTest { + val sessionMetadata = createSessionMetadata() + val initialState = VerificationCodeState( + sessionMetadata = sessionMetadata, + e164 = "+15551234567" + ) + + coEvery { mockRepository.submitVerificationCode(any(), any()) } returns + NetworkController.RegistrationNetworkResult.ApplicationError(RuntimeException("Unexpected")) + + val result = viewModel.applyEvent( + initialState, + VerificationCodeScreenEvents.CodeEntered("123456") + ) + + assertThat(result.oneTimeEvent).isEqualTo(VerificationCodeState.OneTimeEvent.UnknownError) + } + + // ==================== applyEvent: CodeEntered - Registration Errors ==================== + + @Ignore + @Test + fun `CodeEntered with DeviceTransferPossible emits ResetState`() = runTest { + val sessionMetadata = createSessionMetadata() + val initialState = VerificationCodeState( + sessionMetadata = sessionMetadata, + e164 = "+15551234567" + ) + + coEvery { mockRepository.submitVerificationCode(any(), any()) } returns + NetworkController.RegistrationNetworkResult.Success(sessionMetadata) + coEvery { mockRepository.registerAccount(any(), any(), any()) } returns + NetworkController.RegistrationNetworkResult.Failure( + NetworkController.RegisterAccountError.DeviceTransferPossible + ) + + viewModel.applyEvent(initialState, VerificationCodeScreenEvents.CodeEntered("123456")) + + assertThat(emittedEvents).hasSize(1) + assertThat(emittedEvents.first()).isEqualTo(RegistrationFlowEvent.ResetState) + } + + @Ignore + @Test + fun `CodeEntered with rate limit from registerAccount returns RateLimited event`() = runTest { + val sessionMetadata = createSessionMetadata() + val initialState = VerificationCodeState( + sessionMetadata = sessionMetadata, + e164 = "+15551234567" + ) + + coEvery { mockRepository.submitVerificationCode(any(), any()) } returns + NetworkController.RegistrationNetworkResult.Success(sessionMetadata) + coEvery { mockRepository.registerAccount(any(), any(), any()) } returns + NetworkController.RegistrationNetworkResult.Failure( + NetworkController.RegisterAccountError.RateLimited(30.seconds) + ) + + val result = viewModel.applyEvent( + initialState, + VerificationCodeScreenEvents.CodeEntered("123456") + ) + + assertThat(result.oneTimeEvent).isNotNull() + .isInstanceOf() + .prop(VerificationCodeState.OneTimeEvent.RateLimited::retryAfter) + .isEqualTo(30.seconds) + } + + @Ignore + @Test + fun `CodeEntered with InvalidRequest from registerAccount returns RegistrationError event`() = runTest { + val sessionMetadata = createSessionMetadata() + val initialState = VerificationCodeState( + sessionMetadata = sessionMetadata, + e164 = "+15551234567" + ) + + coEvery { mockRepository.submitVerificationCode(any(), any()) } returns + NetworkController.RegistrationNetworkResult.Success(sessionMetadata) + coEvery { mockRepository.registerAccount(any(), any(), any()) } returns + NetworkController.RegistrationNetworkResult.Failure( + NetworkController.RegisterAccountError.InvalidRequest("Bad request") + ) + + val result = viewModel.applyEvent( + initialState, + VerificationCodeScreenEvents.CodeEntered("123456") + ) + + assertThat(result.oneTimeEvent).isEqualTo(VerificationCodeState.OneTimeEvent.RegistrationError) + } + + @Ignore + @Test + fun `CodeEntered with RegistrationRecoveryPasswordIncorrect returns RegistrationError event`() = runTest { + val sessionMetadata = createSessionMetadata() + val initialState = VerificationCodeState( + sessionMetadata = sessionMetadata, + e164 = "+15551234567" + ) + + coEvery { mockRepository.submitVerificationCode(any(), any()) } returns + NetworkController.RegistrationNetworkResult.Success(sessionMetadata) + coEvery { mockRepository.registerAccount(any(), any(), any()) } returns + NetworkController.RegistrationNetworkResult.Failure( + NetworkController.RegisterAccountError.RegistrationRecoveryPasswordIncorrect("Wrong password") + ) + + val result = viewModel.applyEvent( + initialState, + VerificationCodeScreenEvents.CodeEntered("123456") + ) + + assertThat(result.oneTimeEvent).isEqualTo(VerificationCodeState.OneTimeEvent.RegistrationError) + } + + @Ignore + @Test + fun `CodeEntered with network error from registerAccount returns NetworkError event`() = runTest { + val sessionMetadata = createSessionMetadata() + val initialState = VerificationCodeState( + sessionMetadata = sessionMetadata, + e164 = "+15551234567" + ) + + coEvery { mockRepository.submitVerificationCode(any(), any()) } returns + NetworkController.RegistrationNetworkResult.Success(sessionMetadata) + coEvery { mockRepository.registerAccount(any(), any(), any()) } returns + NetworkController.RegistrationNetworkResult.NetworkError(java.io.IOException("Network error")) + + val result = viewModel.applyEvent( + initialState, + VerificationCodeScreenEvents.CodeEntered("123456") + ) + + assertThat(result.oneTimeEvent).isEqualTo(VerificationCodeState.OneTimeEvent.NetworkError) + } + + @Ignore + @Test + fun `CodeEntered with application error from registerAccount returns UnknownError event`() = runTest { + val sessionMetadata = createSessionMetadata() + val initialState = VerificationCodeState( + sessionMetadata = sessionMetadata, + e164 = "+15551234567" + ) + + coEvery { mockRepository.submitVerificationCode(any(), any()) } returns + NetworkController.RegistrationNetworkResult.Success(sessionMetadata) + coEvery { mockRepository.registerAccount(any(), any(), any()) } returns + NetworkController.RegistrationNetworkResult.ApplicationError(RuntimeException("Unexpected")) + + val result = viewModel.applyEvent( + initialState, + VerificationCodeScreenEvents.CodeEntered("123456") + ) + + assertThat(result.oneTimeEvent).isEqualTo(VerificationCodeState.OneTimeEvent.UnknownError) + } + + // ==================== applyEvent: ResendSms Tests ==================== + + @Test + fun `ResendSms with null sessionMetadata emits ResetState`() = runTest { + val initialState = VerificationCodeState(sessionMetadata = null) + + val result = viewModel.applyEvent(initialState, VerificationCodeScreenEvents.ResendSms) + + assertThat(emittedEvents).hasSize(1) + assertThat(emittedEvents.first()).isEqualTo(RegistrationFlowEvent.ResetState) + assertThat(result).isEqualTo(initialState) + } + + @Test + fun `ResendSms with success updates sessionMetadata`() = runTest { + val sessionMetadata = createSessionMetadata(id = "original-session") + val updatedSession = createSessionMetadata(id = "updated-session") + val initialState = VerificationCodeState(sessionMetadata = sessionMetadata) + + coEvery { mockRepository.requestVerificationCode(any(), any(), eq(NetworkController.VerificationCodeTransport.SMS)) } returns + NetworkController.RegistrationNetworkResult.Success(updatedSession) + + val result = viewModel.applyEvent(initialState, VerificationCodeScreenEvents.ResendSms) + + assertThat(result.sessionMetadata).isEqualTo(updatedSession) + } + + @Test + fun `ResendSms with rate limit returns RateLimited event`() = runTest { + val sessionMetadata = createSessionMetadata() + val initialState = VerificationCodeState(sessionMetadata = sessionMetadata) + + coEvery { mockRepository.requestVerificationCode(any(), any(), eq(NetworkController.VerificationCodeTransport.SMS)) } returns + NetworkController.RegistrationNetworkResult.Failure( + NetworkController.RequestVerificationCodeError.RateLimited(45.seconds, sessionMetadata) + ) + + val result = viewModel.applyEvent(initialState, VerificationCodeScreenEvents.ResendSms) + + assertThat(result.oneTimeEvent).isNotNull() + .isInstanceOf() + .prop(VerificationCodeState.OneTimeEvent.RateLimited::retryAfter) + .isEqualTo(45.seconds) + } + + @Test + fun `ResendSms with InvalidRequest returns UnknownError event`() = runTest { + val sessionMetadata = createSessionMetadata() + val initialState = VerificationCodeState(sessionMetadata = sessionMetadata) + + coEvery { mockRepository.requestVerificationCode(any(), any(), eq(NetworkController.VerificationCodeTransport.SMS)) } returns + NetworkController.RegistrationNetworkResult.Failure( + NetworkController.RequestVerificationCodeError.InvalidRequest("Bad request") + ) + + val result = viewModel.applyEvent(initialState, VerificationCodeScreenEvents.ResendSms) + + assertThat(result.oneTimeEvent).isEqualTo(VerificationCodeState.OneTimeEvent.UnknownError) + } + + @Test + fun `ResendSms with CouldNotFulfillWithRequestedTransport returns appropriate event`() = runTest { + val sessionMetadata = createSessionMetadata() + val initialState = VerificationCodeState(sessionMetadata = sessionMetadata) + + coEvery { mockRepository.requestVerificationCode(any(), any(), eq(NetworkController.VerificationCodeTransport.SMS)) } returns + NetworkController.RegistrationNetworkResult.Failure( + NetworkController.RequestVerificationCodeError.CouldNotFulfillWithRequestedTransport(sessionMetadata) + ) + + val result = viewModel.applyEvent(initialState, VerificationCodeScreenEvents.ResendSms) + + assertThat(result.oneTimeEvent).isEqualTo(VerificationCodeState.OneTimeEvent.CouldNotRequestCodeWithSelectedTransport) + } + + @Test + fun `ResendSms with InvalidSessionId emits ResetState`() = runTest { + val sessionMetadata = createSessionMetadata() + val initialState = VerificationCodeState(sessionMetadata = sessionMetadata) + + coEvery { mockRepository.requestVerificationCode(any(), any(), eq(NetworkController.VerificationCodeTransport.SMS)) } returns + NetworkController.RegistrationNetworkResult.Failure( + NetworkController.RequestVerificationCodeError.InvalidSessionId("Invalid session") + ) + + viewModel.applyEvent(initialState, VerificationCodeScreenEvents.ResendSms) + + assertThat(emittedEvents).hasSize(1) + assertThat(emittedEvents.first()).isEqualTo(RegistrationFlowEvent.ResetState) + } + + @Test + fun `ResendSms with SessionNotFound emits ResetState`() = runTest { + val sessionMetadata = createSessionMetadata() + val initialState = VerificationCodeState(sessionMetadata = sessionMetadata) + + coEvery { mockRepository.requestVerificationCode(any(), any(), eq(NetworkController.VerificationCodeTransport.SMS)) } returns + NetworkController.RegistrationNetworkResult.Failure( + NetworkController.RequestVerificationCodeError.SessionNotFound("Session not found") + ) + + viewModel.applyEvent(initialState, VerificationCodeScreenEvents.ResendSms) + + assertThat(emittedEvents).hasSize(1) + assertThat(emittedEvents.first()).isEqualTo(RegistrationFlowEvent.ResetState) + } + + @Test + fun `ResendSms with MissingRequestInformationOrAlreadyVerified returns NetworkError event`() = runTest { + val sessionMetadata = createSessionMetadata() + val initialState = VerificationCodeState(sessionMetadata = sessionMetadata) + + coEvery { mockRepository.requestVerificationCode(any(), any(), eq(NetworkController.VerificationCodeTransport.SMS)) } returns + NetworkController.RegistrationNetworkResult.Failure( + NetworkController.RequestVerificationCodeError.MissingRequestInformationOrAlreadyVerified(sessionMetadata) + ) + + val result = viewModel.applyEvent(initialState, VerificationCodeScreenEvents.ResendSms) + + assertThat(result.oneTimeEvent).isEqualTo(VerificationCodeState.OneTimeEvent.NetworkError) + } + + @Test + fun `ResendSms with ThirdPartyServiceError returns ThirdPartyError event`() = runTest { + val sessionMetadata = createSessionMetadata() + val initialState = VerificationCodeState(sessionMetadata = sessionMetadata) + + coEvery { mockRepository.requestVerificationCode(any(), any(), eq(NetworkController.VerificationCodeTransport.SMS)) } returns + NetworkController.RegistrationNetworkResult.Failure( + NetworkController.RequestVerificationCodeError.ThirdPartyServiceError( + NetworkController.ThirdPartyServiceErrorResponse("Provider error", false) + ) + ) + + val result = viewModel.applyEvent(initialState, VerificationCodeScreenEvents.ResendSms) + + assertThat(result.oneTimeEvent).isEqualTo(VerificationCodeState.OneTimeEvent.ThirdPartyError) + } + + @Test + fun `ResendSms with network error returns NetworkError event`() = runTest { + val sessionMetadata = createSessionMetadata() + val initialState = VerificationCodeState(sessionMetadata = sessionMetadata) + + coEvery { mockRepository.requestVerificationCode(any(), any(), eq(NetworkController.VerificationCodeTransport.SMS)) } returns + NetworkController.RegistrationNetworkResult.NetworkError(java.io.IOException("Network error")) + + val result = viewModel.applyEvent(initialState, VerificationCodeScreenEvents.ResendSms) + + assertThat(result.oneTimeEvent).isEqualTo(VerificationCodeState.OneTimeEvent.NetworkError) + } + + @Test + fun `ResendSms with application error returns UnknownError event`() = runTest { + val sessionMetadata = createSessionMetadata() + val initialState = VerificationCodeState(sessionMetadata = sessionMetadata) + + coEvery { mockRepository.requestVerificationCode(any(), any(), eq(NetworkController.VerificationCodeTransport.SMS)) } returns + NetworkController.RegistrationNetworkResult.ApplicationError(RuntimeException("Unexpected")) + + val result = viewModel.applyEvent(initialState, VerificationCodeScreenEvents.ResendSms) + + assertThat(result.oneTimeEvent).isEqualTo(VerificationCodeState.OneTimeEvent.UnknownError) + } + + // ==================== applyEvent: CallMe Tests ==================== + + @Test + fun `CallMe with null sessionMetadata emits ResetState`() = runTest { + val initialState = VerificationCodeState(sessionMetadata = null) + + val result = viewModel.applyEvent(initialState, VerificationCodeScreenEvents.CallMe) + + assertThat(emittedEvents).hasSize(1) + assertThat(emittedEvents.first()).isEqualTo(RegistrationFlowEvent.ResetState) + assertThat(result).isEqualTo(initialState) + } + + @Test + fun `CallMe with success updates sessionMetadata`() = runTest { + val sessionMetadata = createSessionMetadata(id = "original-session") + val updatedSession = createSessionMetadata(id = "updated-session") + val initialState = VerificationCodeState(sessionMetadata = sessionMetadata) + + coEvery { mockRepository.requestVerificationCode(any(), any(), eq(NetworkController.VerificationCodeTransport.VOICE)) } returns + NetworkController.RegistrationNetworkResult.Success(updatedSession) + + val result = viewModel.applyEvent(initialState, VerificationCodeScreenEvents.CallMe) + + assertThat(result.sessionMetadata).isEqualTo(updatedSession) + } + + @Test + fun `CallMe with rate limit returns RateLimited event`() = runTest { + val sessionMetadata = createSessionMetadata() + val initialState = VerificationCodeState(sessionMetadata = sessionMetadata) + + coEvery { mockRepository.requestVerificationCode(any(), any(), eq(NetworkController.VerificationCodeTransport.VOICE)) } returns + NetworkController.RegistrationNetworkResult.Failure( + NetworkController.RequestVerificationCodeError.RateLimited(90.seconds, sessionMetadata) + ) + + val result = viewModel.applyEvent(initialState, VerificationCodeScreenEvents.CallMe) + + assertThat(result.oneTimeEvent).isNotNull() + .isInstanceOf() + .prop(VerificationCodeState.OneTimeEvent.RateLimited::retryAfter) + .isEqualTo(90.seconds) + } + + @Test + fun `CallMe with CouldNotFulfillWithRequestedTransport returns appropriate event`() = runTest { + val sessionMetadata = createSessionMetadata() + val initialState = VerificationCodeState(sessionMetadata = sessionMetadata) + + coEvery { mockRepository.requestVerificationCode(any(), any(), eq(NetworkController.VerificationCodeTransport.VOICE)) } returns + NetworkController.RegistrationNetworkResult.Failure( + NetworkController.RequestVerificationCodeError.CouldNotFulfillWithRequestedTransport(sessionMetadata) + ) + + val result = viewModel.applyEvent(initialState, VerificationCodeScreenEvents.CallMe) + + assertThat(result.oneTimeEvent).isEqualTo(VerificationCodeState.OneTimeEvent.CouldNotRequestCodeWithSelectedTransport) + } + + @Test + fun `CallMe with ThirdPartyServiceError returns ThirdPartyError event`() = runTest { + val sessionMetadata = createSessionMetadata() + val initialState = VerificationCodeState(sessionMetadata = sessionMetadata) + + coEvery { mockRepository.requestVerificationCode(any(), any(), eq(NetworkController.VerificationCodeTransport.VOICE)) } returns + NetworkController.RegistrationNetworkResult.Failure( + NetworkController.RequestVerificationCodeError.ThirdPartyServiceError( + NetworkController.ThirdPartyServiceErrorResponse("Voice provider error", true) + ) + ) + + val result = viewModel.applyEvent(initialState, VerificationCodeScreenEvents.CallMe) + + assertThat(result.oneTimeEvent).isEqualTo(VerificationCodeState.OneTimeEvent.ThirdPartyError) + } + + // ==================== Helper Functions ==================== + + private fun createSessionMetadata( + id: String = "test-session-id", + requestedInformation: List = emptyList(), + verified: Boolean = false + ) = NetworkController.SessionMetadata( + id = id, + nextSms = null, + nextCall = null, + nextVerificationAttempt = null, + allowedToRequestCode = true, + requestedInformation = requestedInformation, + verified = verified + ) + + private fun createRegisterAccountResponse( + aci: String = "test-aci", + pni: String = "test-pni", + e164: String = "+15551234567" + ) = NetworkController.RegisterAccountResponse( + aci = aci, + pni = pni, + e164 = e164, + usernameHash = null, + usernameLinkHandle = null, + storageCapable = false, + entitlements = null, + reregistration = false + ) +} diff --git a/settings.gradle.kts b/settings.gradle.kts index febcd45a90..71eb75a5f1 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -61,6 +61,7 @@ include(":paging") include(":paging-app") include(":core-util") include(":core-util-jvm") +include(":core-models") include(":glide-config") include(":device-transfer") include(":device-transfer-app")