X-Git-Url: https://git.nmode.ca/signal-cli/blobdiff_plain/591c0fe8a3744608575a6dcb1f6f4f9f818948d2..c49b05cd75dd8cee795859b6045fbec0040d4144:/src/main/java/org/asamk/signal/manager/GroupUtils.java diff --git a/src/main/java/org/asamk/signal/manager/GroupUtils.java b/src/main/java/org/asamk/signal/manager/GroupUtils.java index f4398f94..0d192002 100644 --- a/src/main/java/org/asamk/signal/manager/GroupUtils.java +++ b/src/main/java/org/asamk/signal/manager/GroupUtils.java @@ -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); + } + } }