Ignore failures from SVR v1 pin

This commit is contained in:
AsamK 2023-10-17 13:34:09 +02:00
parent 400dcf2899
commit 5cc20ace1f
4 changed files with 17 additions and 30 deletions

View file

@ -416,12 +416,14 @@ public class AccountHelper {
var masterKey = account.getOrCreatePinMasterKey(); var masterKey = account.getOrCreatePinMasterKey();
context.getPinHelper().migrateRegistrationLockPin(account.getRegistrationLockPin(), masterKey); context.getPinHelper().migrateRegistrationLockPin(account.getRegistrationLockPin(), masterKey);
dependencies.getAccountManager().enableRegistrationLock(masterKey);
} }
public void setRegistrationPin(String pin) throws IOException { public void setRegistrationPin(String pin) throws IOException {
var masterKey = account.getOrCreatePinMasterKey(); var masterKey = account.getOrCreatePinMasterKey();
context.getPinHelper().setRegistrationLockPin(pin, masterKey); context.getPinHelper().setRegistrationLockPin(pin, masterKey);
dependencies.getAccountManager().enableRegistrationLock(masterKey);
account.setRegistrationLockPin(pin); account.setRegistrationLockPin(pin);
} }
@ -429,6 +431,7 @@ public class AccountHelper {
public void removeRegistrationPin() throws IOException { public void removeRegistrationPin() throws IOException {
// Remove KBS Pin // Remove KBS Pin
context.getPinHelper().removeRegistrationLockPin(); context.getPinHelper().removeRegistrationLockPin();
dependencies.getAccountManager().disableRegistrationLock();
account.setRegistrationLockPin(null); account.setRegistrationLockPin(null);
} }

View file

@ -6,6 +6,7 @@ import org.asamk.signal.manager.storage.AttachmentStore;
import org.asamk.signal.manager.storage.AvatarStore; import org.asamk.signal.manager.storage.AvatarStore;
import org.asamk.signal.manager.storage.SignalAccount; import org.asamk.signal.manager.storage.SignalAccount;
import org.asamk.signal.manager.storage.stickerPacks.StickerPackStore; import org.asamk.signal.manager.storage.stickerPacks.StickerPackStore;
import org.whispersystems.signalservice.api.svr.SecureValueRecoveryV1;
import java.util.function.Supplier; import java.util.function.Supplier;
@ -115,9 +116,9 @@ public class Context {
PinHelper getPinHelper() { PinHelper getPinHelper() {
return getOrCreate(() -> pinHelper, return getOrCreate(() -> pinHelper,
() -> pinHelper = new PinHelper(dependencies.getKeyBackupService(), () -> pinHelper = new PinHelper(new SecureValueRecoveryV1(dependencies.getKeyBackupService()),
dependencies.getFallbackKeyBackupServices(), dependencies.getSecureValueRecoveryV2(),
dependencies.getSecureValueRecoveryV2())); dependencies.getFallbackKeyBackupServices()));
} }
public PreKeyHelper getPreKeyHelper() { public PreKeyHelper getPreKeyHelper() {

View file

@ -5,11 +5,9 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.whispersystems.signalservice.api.KeyBackupService; import org.whispersystems.signalservice.api.KeyBackupService;
import org.whispersystems.signalservice.api.kbs.MasterKey; 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.SecureValueRecovery;
import org.whispersystems.signalservice.api.svr.SecureValueRecoveryV1; import org.whispersystems.signalservice.api.svr.SecureValueRecoveryV1;
import org.whispersystems.signalservice.api.svr.SecureValueRecoveryV2; 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.AuthCredentials;
import org.whispersystems.signalservice.internal.push.LockedException; 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 static Logger logger = LoggerFactory.getLogger(PinHelper.class);
private final KeyBackupService keyBackupService;
private final SecureValueRecoveryV1 secureValueRecoveryV1; private final SecureValueRecoveryV1 secureValueRecoveryV1;
private final SecureValueRecoveryV2 secureValueRecoveryV2; private final SecureValueRecoveryV2 secureValueRecoveryV2;
private final Collection<KeyBackupService> fallbackKeyBackupServices; private final Collection<KeyBackupService> fallbackKeyBackupServices;
public PinHelper( public PinHelper(
final KeyBackupService keyBackupService, final SecureValueRecoveryV1 secureValueRecoveryV1,
final Collection<KeyBackupService> fallbackKeyBackupServices, final SecureValueRecoveryV2 secureValueRecoveryV2,
SecureValueRecoveryV2 secureValueRecoveryV2 final Collection<KeyBackupService> fallbackKeyBackupServices
) { ) {
this.keyBackupService = keyBackupService;
this.fallbackKeyBackupServices = fallbackKeyBackupServices; this.fallbackKeyBackupServices = fallbackKeyBackupServices;
this.secureValueRecoveryV1 = new SecureValueRecoveryV1(keyBackupService); this.secureValueRecoveryV1 = secureValueRecoveryV1;
this.secureValueRecoveryV2 = secureValueRecoveryV2; this.secureValueRecoveryV2 = secureValueRecoveryV2;
} }
public void setRegistrationLockPin( public void setRegistrationLockPin(
String pin, MasterKey masterKey String pin, MasterKey masterKey
) throws IOException { ) throws IOException {
final var pinChangeSession = keyBackupService.newPinChangeSession(); secureValueRecoveryV1.setPin(pin, masterKey).execute();
final var hashedPin = PinHashUtil.hashPin(pin, pinChangeSession.hashSalt());
try {
pinChangeSession.setPin(hashedPin, masterKey);
} catch (UnauthenticatedResponseException e) {
throw new IOException(e);
}
pinChangeSession.enableRegistrationLock(masterKey);
final var backupResponse = secureValueRecoveryV2.setPin(pin, masterKey).execute(); final var backupResponse = secureValueRecoveryV2.setPin(pin, masterKey).execute();
if (backupResponse instanceof SecureValueRecovery.BackupResponse.Success) { if (backupResponse instanceof SecureValueRecovery.BackupResponse.Success) {
} else if (backupResponse instanceof SecureValueRecovery.BackupResponse.ServerRejected) { } else if (backupResponse instanceof SecureValueRecovery.BackupResponse.ServerRejected) {
@ -80,14 +67,7 @@ public class PinHelper {
} }
public void removeRegistrationLockPin() throws IOException { public void removeRegistrationLockPin() throws IOException {
final var pinChangeSession = keyBackupService.newPinChangeSession(); secureValueRecoveryV1.deleteData();
pinChangeSession.disableRegistrationLock();
try {
pinChangeSession.removePin();
} catch (UnauthenticatedResponseException e) {
throw new IOException(e);
}
final var deleteResponse = secureValueRecoveryV2.deleteData(); final var deleteResponse = secureValueRecoveryV2.deleteData();
if (deleteResponse instanceof SecureValueRecovery.DeleteResponse.Success) { if (deleteResponse instanceof SecureValueRecovery.DeleteResponse.Success) {
} else if (deleteResponse instanceof SecureValueRecovery.DeleteResponse.ServerRejected) { } else if (deleteResponse instanceof SecureValueRecovery.DeleteResponse.ServerRejected) {

View file

@ -45,6 +45,7 @@ import org.whispersystems.signalservice.api.push.ServiceIdType;
import org.whispersystems.signalservice.api.push.SignalServiceAddress; import org.whispersystems.signalservice.api.push.SignalServiceAddress;
import org.whispersystems.signalservice.api.push.exceptions.AlreadyVerifiedException; import org.whispersystems.signalservice.api.push.exceptions.AlreadyVerifiedException;
import org.whispersystems.signalservice.api.push.exceptions.DeprecatedVersionException; 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.push.VerifyAccountResponse;
import org.whispersystems.signalservice.internal.util.DynamicCredentialsProvider; import org.whispersystems.signalservice.internal.util.DynamicCredentialsProvider;
@ -108,7 +109,9 @@ public class RegistrationManagerImpl implements RegistrationManager {
10)) 10))
.toList(); .toList();
final var secureValueRecoveryV2 = accountManager.getSecureValueRecoveryV2(serviceEnvironmentConfig.svr2Mrenclave()); final var secureValueRecoveryV2 = accountManager.getSecureValueRecoveryV2(serviceEnvironmentConfig.svr2Mrenclave());
this.pinHelper = new PinHelper(keyBackupService, fallbackKeyBackupServices, secureValueRecoveryV2); this.pinHelper = new PinHelper(new SecureValueRecoveryV1(keyBackupService),
secureValueRecoveryV2,
fallbackKeyBackupServices);
} }
@Override @Override