]> nmode's Git Repositories - signal-cli/blobdiff - src/main/java/org/asamk/signal/manager/GroupUtils.java
Migrate local group to v2 if another member has migrated it
[signal-cli] / src / main / java / org / asamk / signal / manager / GroupUtils.java
index f4398f94294116ed7e94f2f835cf46183577c823..0d192002e70975ea6778d25c7fbd40256ac2be00 100644 (file)
@@ -3,6 +3,10 @@ package org.asamk.signal.manager;
 import org.asamk.signal.storage.groups.GroupInfo;
 import org.asamk.signal.storage.groups.GroupInfoV1;
 import org.asamk.signal.storage.groups.GroupInfoV2;
+import org.signal.zkgroup.InvalidInputException;
+import org.signal.zkgroup.groups.GroupMasterKey;
+import org.signal.zkgroup.groups.GroupSecretParams;
+import org.whispersystems.libsignal.kdf.HKDFv3;
 import org.whispersystems.signalservice.api.messages.SignalServiceDataMessage;
 import org.whispersystems.signalservice.api.messages.SignalServiceGroup;
 import org.whispersystems.signalservice.api.messages.SignalServiceGroupV2;
@@ -25,4 +29,19 @@ public class GroupUtils {
             messageBuilder.asGroupMessage(group);
         }
     }
+
+    public static byte[] getGroupId(GroupMasterKey groupMasterKey) {
+        final GroupSecretParams groupSecretParams = GroupSecretParams.deriveFromMasterKey(groupMasterKey);
+        return groupSecretParams.getPublicParams().getGroupIdentifier().serialize();
+    }
+
+    public static GroupMasterKey deriveV2MigrationMasterKey(byte[] groupId) {
+        try {
+            return new GroupMasterKey(new HKDFv3().deriveSecrets(groupId,
+                    "GV2 Migration".getBytes(),
+                    GroupMasterKey.SIZE));
+        } catch (InvalidInputException e) {
+            throw new AssertionError(e);
+        }
+    }
 }