X-Git-Url: https://git.nmode.ca/signal-cli/blobdiff_plain/f6061f95dee516bcd9163460e5702bb73a5e763d..c10910e4660e96c24dce35455c31ec8056d9088c:/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); + } + } }