]> nmode's Git Repositories - signal-cli/commitdiff
Separate registrationLock attribute from master key
authorAsamK <asamk@gmx.de>
Tue, 21 Jun 2022 14:58:15 +0000 (16:58 +0200)
committerAsamK <asamk@gmx.de>
Tue, 21 Jun 2022 18:38:10 +0000 (20:38 +0200)
lib/src/main/java/org/asamk/signal/manager/RegistrationManagerImpl.java
lib/src/main/java/org/asamk/signal/manager/helper/AccountHelper.java
lib/src/main/java/org/asamk/signal/manager/storage/SignalAccount.java

index 3ce77557e97dac34db516de0c781526a211cfcb5..5a99b82713de9c451b670c3ee3fba36b8a08e6d4 100644 (file)
@@ -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,
index bae049c51f52ddbff4e2a11459537a2439b72597..0c66a1821b90fef319a6e8b1ab31cf22c9d1513e 100644 (file)
@@ -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();
 
index a66af78407b87e0df61db64a4a99d0cf305aff03..7268693aa4b7788815ca7c02548bbb381b4a8c13 100644 (file)
@@ -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;
     }