From: AsamK Date: Tue, 17 Oct 2023 11:34:09 +0000 (+0200) Subject: Ignore failures from SVR v1 pin X-Git-Tag: v0.12.3~6 X-Git-Url: https://git.nmode.ca/signal-cli/commitdiff_plain/5cc20ace1f65c3c08be1b0812ba54b034d499c61 Ignore failures from SVR v1 pin --- diff --git a/lib/src/main/java/org/asamk/signal/manager/helper/AccountHelper.java b/lib/src/main/java/org/asamk/signal/manager/helper/AccountHelper.java index e021cc37..f2002347 100644 --- a/lib/src/main/java/org/asamk/signal/manager/helper/AccountHelper.java +++ b/lib/src/main/java/org/asamk/signal/manager/helper/AccountHelper.java @@ -416,12 +416,14 @@ public class AccountHelper { var masterKey = account.getOrCreatePinMasterKey(); context.getPinHelper().migrateRegistrationLockPin(account.getRegistrationLockPin(), masterKey); + dependencies.getAccountManager().enableRegistrationLock(masterKey); } public void setRegistrationPin(String pin) throws IOException { var masterKey = account.getOrCreatePinMasterKey(); context.getPinHelper().setRegistrationLockPin(pin, masterKey); + dependencies.getAccountManager().enableRegistrationLock(masterKey); account.setRegistrationLockPin(pin); } @@ -429,6 +431,7 @@ public class AccountHelper { public void removeRegistrationPin() throws IOException { // Remove KBS Pin context.getPinHelper().removeRegistrationLockPin(); + dependencies.getAccountManager().disableRegistrationLock(); account.setRegistrationLockPin(null); } diff --git a/lib/src/main/java/org/asamk/signal/manager/helper/Context.java b/lib/src/main/java/org/asamk/signal/manager/helper/Context.java index a11ea470..ed0cf391 100644 --- a/lib/src/main/java/org/asamk/signal/manager/helper/Context.java +++ b/lib/src/main/java/org/asamk/signal/manager/helper/Context.java @@ -6,6 +6,7 @@ import org.asamk.signal.manager.storage.AttachmentStore; import org.asamk.signal.manager.storage.AvatarStore; import org.asamk.signal.manager.storage.SignalAccount; import org.asamk.signal.manager.storage.stickerPacks.StickerPackStore; +import org.whispersystems.signalservice.api.svr.SecureValueRecoveryV1; import java.util.function.Supplier; @@ -115,9 +116,9 @@ public class Context { PinHelper getPinHelper() { return getOrCreate(() -> pinHelper, - () -> pinHelper = new PinHelper(dependencies.getKeyBackupService(), - dependencies.getFallbackKeyBackupServices(), - dependencies.getSecureValueRecoveryV2())); + () -> pinHelper = new PinHelper(new SecureValueRecoveryV1(dependencies.getKeyBackupService()), + dependencies.getSecureValueRecoveryV2(), + dependencies.getFallbackKeyBackupServices())); } public PreKeyHelper getPreKeyHelper() { diff --git a/lib/src/main/java/org/asamk/signal/manager/helper/PinHelper.java b/lib/src/main/java/org/asamk/signal/manager/helper/PinHelper.java index dcd89f20..d8c801be 100644 --- a/lib/src/main/java/org/asamk/signal/manager/helper/PinHelper.java +++ b/lib/src/main/java/org/asamk/signal/manager/helper/PinHelper.java @@ -5,11 +5,9 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.whispersystems.signalservice.api.KeyBackupService; import org.whispersystems.signalservice.api.kbs.MasterKey; -import org.whispersystems.signalservice.api.kbs.PinHashUtil; import org.whispersystems.signalservice.api.svr.SecureValueRecovery; import org.whispersystems.signalservice.api.svr.SecureValueRecoveryV1; import org.whispersystems.signalservice.api.svr.SecureValueRecoveryV2; -import org.whispersystems.signalservice.internal.contacts.crypto.UnauthenticatedResponseException; import org.whispersystems.signalservice.internal.push.AuthCredentials; import org.whispersystems.signalservice.internal.push.LockedException; @@ -20,35 +18,24 @@ public class PinHelper { private final static Logger logger = LoggerFactory.getLogger(PinHelper.class); - private final KeyBackupService keyBackupService; private final SecureValueRecoveryV1 secureValueRecoveryV1; private final SecureValueRecoveryV2 secureValueRecoveryV2; private final Collection fallbackKeyBackupServices; public PinHelper( - final KeyBackupService keyBackupService, - final Collection fallbackKeyBackupServices, - SecureValueRecoveryV2 secureValueRecoveryV2 + final SecureValueRecoveryV1 secureValueRecoveryV1, + final SecureValueRecoveryV2 secureValueRecoveryV2, + final Collection fallbackKeyBackupServices ) { - this.keyBackupService = keyBackupService; this.fallbackKeyBackupServices = fallbackKeyBackupServices; - this.secureValueRecoveryV1 = new SecureValueRecoveryV1(keyBackupService); + this.secureValueRecoveryV1 = secureValueRecoveryV1; this.secureValueRecoveryV2 = secureValueRecoveryV2; } public void setRegistrationLockPin( String pin, MasterKey masterKey ) throws IOException { - final var pinChangeSession = keyBackupService.newPinChangeSession(); - final var hashedPin = PinHashUtil.hashPin(pin, pinChangeSession.hashSalt()); - - try { - pinChangeSession.setPin(hashedPin, masterKey); - } catch (UnauthenticatedResponseException e) { - throw new IOException(e); - } - pinChangeSession.enableRegistrationLock(masterKey); - + secureValueRecoveryV1.setPin(pin, masterKey).execute(); final var backupResponse = secureValueRecoveryV2.setPin(pin, masterKey).execute(); if (backupResponse instanceof SecureValueRecovery.BackupResponse.Success) { } else if (backupResponse instanceof SecureValueRecovery.BackupResponse.ServerRejected) { @@ -80,14 +67,7 @@ public class PinHelper { } public void removeRegistrationLockPin() throws IOException { - final var pinChangeSession = keyBackupService.newPinChangeSession(); - pinChangeSession.disableRegistrationLock(); - try { - pinChangeSession.removePin(); - } catch (UnauthenticatedResponseException e) { - throw new IOException(e); - } - + secureValueRecoveryV1.deleteData(); final var deleteResponse = secureValueRecoveryV2.deleteData(); if (deleteResponse instanceof SecureValueRecovery.DeleteResponse.Success) { } else if (deleteResponse instanceof SecureValueRecovery.DeleteResponse.ServerRejected) { diff --git a/lib/src/main/java/org/asamk/signal/manager/internal/RegistrationManagerImpl.java b/lib/src/main/java/org/asamk/signal/manager/internal/RegistrationManagerImpl.java index 793f2f49..815cc8f1 100644 --- a/lib/src/main/java/org/asamk/signal/manager/internal/RegistrationManagerImpl.java +++ b/lib/src/main/java/org/asamk/signal/manager/internal/RegistrationManagerImpl.java @@ -45,6 +45,7 @@ import org.whispersystems.signalservice.api.push.ServiceIdType; import org.whispersystems.signalservice.api.push.SignalServiceAddress; import org.whispersystems.signalservice.api.push.exceptions.AlreadyVerifiedException; import org.whispersystems.signalservice.api.push.exceptions.DeprecatedVersionException; +import org.whispersystems.signalservice.api.svr.SecureValueRecoveryV1; import org.whispersystems.signalservice.internal.push.VerifyAccountResponse; import org.whispersystems.signalservice.internal.util.DynamicCredentialsProvider; @@ -108,7 +109,9 @@ public class RegistrationManagerImpl implements RegistrationManager { 10)) .toList(); final var secureValueRecoveryV2 = accountManager.getSecureValueRecoveryV2(serviceEnvironmentConfig.svr2Mrenclave()); - this.pinHelper = new PinHelper(keyBackupService, fallbackKeyBackupServices, secureValueRecoveryV2); + this.pinHelper = new PinHelper(new SecureValueRecoveryV1(keyBackupService), + secureValueRecoveryV2, + fallbackKeyBackupServices); } @Override