From 653410cf277df8164a9002d3662e67e94bcf099d Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Wed, 23 Feb 2022 12:10:22 -0500 Subject: [PATCH] Only generate a PNI key if necessary. --- .../securesms/PassphraseCreateActivity.java | 3 +-- .../dependencies/ApplicationDependencyProvider.java | 2 +- .../thoughtcrime/securesms/keyvalue/AccountValues.kt | 10 +++++++--- .../PniAccountInitializationMigrationJob.java | 3 +-- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/PassphraseCreateActivity.java b/app/src/main/java/org/thoughtcrime/securesms/PassphraseCreateActivity.java index 2bb40817c3..fd61c300dd 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/PassphraseCreateActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/PassphraseCreateActivity.java @@ -19,7 +19,6 @@ package org.thoughtcrime.securesms; import android.os.AsyncTask; import android.os.Bundle; -import org.thoughtcrime.securesms.crypto.IdentityKeyUtil; import org.thoughtcrime.securesms.crypto.MasterSecret; import org.thoughtcrime.securesms.crypto.MasterSecretUtil; import org.thoughtcrime.securesms.keyvalue.SignalStore; @@ -63,7 +62,7 @@ public class PassphraseCreateActivity extends PassphraseActivity { MasterSecretUtil.generateAsymmetricMasterSecret(PassphraseCreateActivity.this, masterSecret); SignalStore.account().generateAciIdentityKey(); - SignalStore.account().generatePniIdentityKey(); + SignalStore.account().generatePniIdentityKeyIfNecessary(); VersionTracker.updateLastSeenVersion(PassphraseCreateActivity.this); return null; 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 a534dc3ebb..5cfc5a45d0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider.java +++ b/app/src/main/java/org/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider.java @@ -291,7 +291,7 @@ public class ApplicationDependencyProvider implements ApplicationDependencies.Pr } if (!SignalStore.account().hasPniIdentityKey()) { - SignalStore.account().generatePniIdentityKey(); + SignalStore.account().generatePniIdentityKeyIfNecessary(); CreateSignedPreKeyJob.enqueueIfNeeded(); } 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 ac011c9851..2db7745a96 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/AccountValues.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/AccountValues.kt @@ -168,11 +168,15 @@ internal class AccountValues internal constructor(store: KeyValueStore) : Signal return store.containsKey(KEY_PNI_IDENTITY_PUBLIC_KEY) } - /** Generates and saves an identity key pair for the PNI identity. Should only be done once. */ - fun generatePniIdentityKey() { + /** Generates and saves an identity key pair for the PNI identity if one doesn't already exist. */ + fun generatePniIdentityKeyIfNecessary() { synchronized(this) { + if (store.containsKey(KEY_PNI_IDENTITY_PUBLIC_KEY)) { + Log.w(TAG, "Tried to generate a PNI identity, but one was already set!", Throwable()) + return + } + Log.i(TAG, "Generating a new PNI identity key pair.") - require(!store.containsKey(KEY_PNI_IDENTITY_PUBLIC_KEY)) { "Already generated!" } val key: IdentityKeyPair = IdentityKeyUtil.generateIdentityKeyPair() store 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 10497842d4..0d4a070c2b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/migrations/PniAccountInitializationMigrationJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/PniAccountInitializationMigrationJob.java @@ -9,7 +9,6 @@ import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; -import org.thoughtcrime.securesms.jobs.KbsEnclaveMigrationWorkerJob; import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.recipients.Recipient; import org.whispersystems.libsignal.state.PreKeyRecord; @@ -65,7 +64,7 @@ public class PniAccountInitializationMigrationJob extends MigrationJob { if (!SignalStore.account().hasPniIdentityKey()) { Log.i(TAG, "Generating PNI identity."); - SignalStore.account().generatePniIdentityKey(); + SignalStore.account().generatePniIdentityKeyIfNecessary(); } else { Log.w(TAG, "Already generated the PNI identity. Skipping this step."); }