From e78146eb67da3e011028c9df6a23df114306ec1b Mon Sep 17 00:00:00 2001 From: AsamK Date: Sat, 10 Feb 2024 11:54:32 +0100 Subject: [PATCH] Fix saving username link components --- graalvm-config-dir/reflect-config.json | 13 ++++++++++++- .../signal/manager/storage/SignalAccount.java | 14 +++++++++++--- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/graalvm-config-dir/reflect-config.json b/graalvm-config-dir/reflect-config.json index d4548612..8be37576 100644 --- a/graalvm-config-dir/reflect-config.json +++ b/graalvm-config-dir/reflect-config.json @@ -1128,7 +1128,7 @@ "allDeclaredFields":true, "queryAllDeclaredMethods":true, "queryAllDeclaredConstructors":true, - "methods":[{"name":"","parameterTypes":["int","java.lang.String","boolean","java.lang.String","java.lang.String","java.lang.String","int","boolean","java.lang.String","org.asamk.signal.manager.storage.SignalAccount$Storage$AccountData","org.asamk.signal.manager.storage.SignalAccount$Storage$AccountData","java.lang.String","java.lang.String","java.lang.String","java.lang.String"] }, {"name":"aciAccountData","parameterTypes":[] }, {"name":"deviceId","parameterTypes":[] }, {"name":"encryptedDeviceName","parameterTypes":[] }, {"name":"isMultiDevice","parameterTypes":[] }, {"name":"number","parameterTypes":[] }, {"name":"password","parameterTypes":[] }, {"name":"pinMasterKey","parameterTypes":[] }, {"name":"pniAccountData","parameterTypes":[] }, {"name":"profileKey","parameterTypes":[] }, {"name":"registered","parameterTypes":[] }, {"name":"registrationLockPin","parameterTypes":[] }, {"name":"serviceEnvironment","parameterTypes":[] }, {"name":"storageKey","parameterTypes":[] }, {"name":"username","parameterTypes":[] }, {"name":"version","parameterTypes":[] }] + "methods":[{"name":"","parameterTypes":["int","java.lang.String","boolean","java.lang.String","java.lang.String","java.lang.String","int","boolean","java.lang.String","org.asamk.signal.manager.storage.SignalAccount$Storage$AccountData","org.asamk.signal.manager.storage.SignalAccount$Storage$AccountData","java.lang.String","java.lang.String","java.lang.String","java.lang.String"] }, {"name":"","parameterTypes":["int","java.lang.String","boolean","java.lang.String","java.lang.String","java.lang.String","int","boolean","java.lang.String","org.asamk.signal.manager.storage.SignalAccount$Storage$AccountData","org.asamk.signal.manager.storage.SignalAccount$Storage$AccountData","java.lang.String","java.lang.String","java.lang.String","java.lang.String","java.lang.String","java.lang.String"] }, {"name":"aciAccountData","parameterTypes":[] }, {"name":"deviceId","parameterTypes":[] }, {"name":"encryptedDeviceName","parameterTypes":[] }, {"name":"isMultiDevice","parameterTypes":[] }, {"name":"number","parameterTypes":[] }, {"name":"password","parameterTypes":[] }, {"name":"pinMasterKey","parameterTypes":[] }, {"name":"pniAccountData","parameterTypes":[] }, {"name":"profileKey","parameterTypes":[] }, {"name":"registered","parameterTypes":[] }, {"name":"registrationLockPin","parameterTypes":[] }, {"name":"serviceEnvironment","parameterTypes":[] }, {"name":"storageKey","parameterTypes":[] }, {"name":"username","parameterTypes":[] }, {"name":"usernameLinkEntropy","parameterTypes":[] }, {"name":"usernameLinkServerId","parameterTypes":[] }, {"name":"version","parameterTypes":[] }] }, { "name":"org.asamk.signal.manager.storage.SignalAccount$Storage$AccountData", @@ -2383,6 +2383,13 @@ "queryAllDeclaredMethods":true, "queryAllDeclaredConstructors":true }, +{ + "name":"org.whispersystems.signalservice.internal.push.ConfirmUsernameResponse", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true, + "queryAllDeclaredConstructors":true, + "methods":[{"name":"","parameterTypes":["java.lang.String","java.util.UUID"] }, {"name":"","parameterTypes":["java.lang.String","java.util.UUID","int","kotlin.jvm.internal.DefaultConstructorMarker"] }] +}, { "name":"org.whispersystems.signalservice.internal.push.DeviceCode", "allDeclaredFields":true, @@ -2722,6 +2729,10 @@ "name":"org.whispersystems.signalservice.internal.storage.protos.AccountRecord$PinnedConversation$Contact", "fields":[{"name":"e164_"}, {"name":"serviceId_"}, {"name":"uuid_"}] }, +{ + "name":"org.whispersystems.signalservice.internal.storage.protos.AccountRecord$UsernameLink", + "allDeclaredFields":true +}, { "name":"org.whispersystems.signalservice.internal.storage.protos.ContactRecord", "allDeclaredFields":true 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 e0d6598e..5f37c402 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 @@ -102,6 +102,7 @@ import java.util.Comparator; import java.util.HashSet; import java.util.List; import java.util.Optional; +import java.util.UUID; import java.util.function.Function; import java.util.function.Supplier; @@ -499,7 +500,10 @@ public class SignalAccount implements Closeable { e); } } - + if (storage.usernameLinkEntropy != null && storage.usernameLinkServerId != null) { + usernameLink = new UsernameLinkComponents(base64.decode(storage.usernameLinkEntropy), + UUID.fromString(storage.usernameLinkServerId)); + } } if (migratedLegacyConfig) { @@ -964,7 +968,9 @@ public class SignalAccount implements Closeable { registrationLockPin, pinMasterKey == null ? null : base64.encodeToString(pinMasterKey.serialize()), storageKey == null ? null : base64.encodeToString(storageKey.serialize()), - profileKey == null ? null : base64.encodeToString(profileKey.serialize())); + profileKey == null ? null : base64.encodeToString(profileKey.serialize()), + usernameLink == null ? null : base64.encodeToString(usernameLink.getEntropy()), + usernameLink == null ? null : usernameLink.getServerId().toString()); try { try (var output = new ByteArrayOutputStream()) { // Write to memory first to prevent corrupting the file in case of serialization errors @@ -1853,7 +1859,9 @@ public class SignalAccount implements Closeable { String registrationLockPin, String pinMasterKey, String storageKey, - String profileKey + String profileKey, + String usernameLinkEntropy, + String usernameLinkServerId ) { public record AccountData( -- 2.50.1