diff --git a/app/src/main/java/org/thoughtcrime/securesms/PassphraseCreateActivity.java b/app/src/main/java/org/thoughtcrime/securesms/PassphraseCreateActivity.java index fd61c300dd..c0adaa33ab 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/PassphraseCreateActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/PassphraseCreateActivity.java @@ -61,7 +61,7 @@ public class PassphraseCreateActivity extends PassphraseActivity { passphrase); MasterSecretUtil.generateAsymmetricMasterSecret(PassphraseCreateActivity.this, masterSecret); - SignalStore.account().generateAciIdentityKey(); + SignalStore.account().generateAciIdentityKeyIfNecessary(); SignalStore.account().generatePniIdentityKeyIfNecessary(); VersionTracker.updateLastSeenVersion(PassphraseCreateActivity.this); 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 2f5323747d..e0f39f1419 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider.java +++ b/app/src/main/java/org/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider.java @@ -296,8 +296,19 @@ public class ApplicationDependencyProvider implements ApplicationDependencies.Pr throw new IllegalStateException("No PNI set!"); } + boolean needsPreKeyJob = false; + + if (!SignalStore.account().hasAciIdentityKey()) { + SignalStore.account().generateAciIdentityKeyIfNecessary(); + needsPreKeyJob = true; + } + if (!SignalStore.account().hasPniIdentityKey()) { SignalStore.account().generatePniIdentityKeyIfNecessary(); + needsPreKeyJob = true; + } + + if (needsPreKeyJob) { 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 9f9e2c58b7..3455c07852 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/AccountValues.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/AccountValues.kt @@ -150,11 +150,19 @@ internal class AccountValues internal constructor(store: KeyValueStore) : Signal ) } + fun hasAciIdentityKey(): Boolean { + return store.containsKey(KEY_ACI_IDENTITY_PUBLIC_KEY) + } + /** Generates and saves an identity key pair for the ACI identity. Should only be done once. */ - fun generateAciIdentityKey() { + fun generateAciIdentityKeyIfNecessary() { synchronized(this) { + if (store.containsKey(KEY_ACI_IDENTITY_PUBLIC_KEY)) { + Log.w(TAG, "Tried to generate an ANI identity, but one was already set!", Throwable()) + return + } + Log.i(TAG, "Generating a new ACI identity key pair.") - require(!store.containsKey(KEY_ACI_IDENTITY_PUBLIC_KEY)) { "Already generated!" } val key: IdentityKeyPair = IdentityKeyUtil.generateIdentityKeyPair() store