From: AsamK Date: Tue, 21 Jun 2022 14:58:15 +0000 (+0200) Subject: Separate registrationLock attribute from master key X-Git-Tag: v0.10.9~13 X-Git-Url: https://git.nmode.ca/signal-cli/commitdiff_plain/c1dc44d4fd5cf1aba2a30f7c689cf9ea013e2d60?ds=sidebyside Separate registrationLock attribute from master key --- diff --git a/lib/src/main/java/org/asamk/signal/manager/RegistrationManagerImpl.java b/lib/src/main/java/org/asamk/signal/manager/RegistrationManagerImpl.java index 3ce77557..5a99b827 100644 --- a/lib/src/main/java/org/asamk/signal/manager/RegistrationManagerImpl.java +++ b/lib/src/main/java/org/asamk/signal/manager/RegistrationManagerImpl.java @@ -182,7 +182,7 @@ class RegistrationManagerImpl implements RegistrationManager { account.getLocalRegistrationId(), true, null, - account.getPinMasterKey() == null ? null : account.getPinMasterKey().deriveRegistrationLock(), + account.getRegistrationLock(), account.getSelfUnidentifiedAccessKey(), account.isUnrestrictedUnidentifiedAccess(), capabilities, 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 bae049c5..0c66a182 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 @@ -9,7 +9,6 @@ import org.asamk.signal.manager.api.NonNormalizedPhoneNumberException; import org.asamk.signal.manager.api.PinLockedException; import org.asamk.signal.manager.config.ServiceConfig; import org.asamk.signal.manager.storage.SignalAccount; -import org.asamk.signal.manager.util.KeyUtils; import org.asamk.signal.manager.util.NumberVerificationUtils; import org.signal.libsignal.protocol.InvalidKeyException; import org.slf4j.Logger; @@ -125,7 +124,7 @@ public class AccountHelper { account.getLocalRegistrationId(), true, null, - account.getPinMasterKey() == null ? null : account.getPinMasterKey().deriveRegistrationLock(), + account.getRegistrationLock(), account.getSelfUnidentifiedAccessKey(), account.isUnrestrictedUnidentifiedAccess(), ServiceConfig.capabilities, @@ -157,20 +156,18 @@ public class AccountHelper { } public void setRegistrationPin(String pin) throws IOException { - final var masterKey = account.getPinMasterKey() != null - ? account.getPinMasterKey() - : KeyUtils.createMasterKey(); + var masterKey = account.getOrCreatePinMasterKey(); context.getPinHelper().setRegistrationLockPin(pin, masterKey); - account.setRegistrationLockPin(pin, masterKey); + account.setRegistrationLockPin(pin); } public void removeRegistrationPin() throws IOException { // Remove KBS Pin context.getPinHelper().removeRegistrationLockPin(); - account.setRegistrationLockPin(null, null); + account.setRegistrationLockPin(null); } public void unregister() throws IOException { @@ -189,7 +186,7 @@ public class AccountHelper { } catch (IOException e) { logger.warn("Failed to remove registration lock pin"); } - account.setRegistrationLockPin(null, null); + account.setRegistrationLockPin(null); dependencies.getAccountManager().deleteAccount(); diff --git a/lib/src/main/java/org/asamk/signal/manager/storage/SignalAccount.java b/lib/src/main/java/org/asamk/signal/manager/storage/SignalAccount.java index a66af784..7268693a 100644 --- a/lib/src/main/java/org/asamk/signal/manager/storage/SignalAccount.java +++ b/lib/src/main/java/org/asamk/signal/manager/storage/SignalAccount.java @@ -1253,13 +1253,31 @@ public class SignalAccount implements Closeable { save(); } - public void setRegistrationLockPin(final String registrationLockPin, final MasterKey pinMasterKey) { + public void setRegistrationLockPin(final String registrationLockPin) { this.registrationLockPin = registrationLockPin; - this.pinMasterKey = pinMasterKey; save(); } - public MasterKey getPinMasterKey() { + public String getRegistrationLock() { + final var masterKey = getPinBackedMasterKey(); + if (masterKey == null) { + return null; + } + return masterKey.deriveRegistrationLock(); + } + + public MasterKey getPinBackedMasterKey() { + if (registrationLockPin == null) { + return null; + } + return pinMasterKey; + } + + public MasterKey getOrCreatePinMasterKey() { + if (pinMasterKey == null) { + pinMasterKey = KeyUtils.createMasterKey(); + save(); + } return pinMasterKey; }