X-Git-Url: https://git.nmode.ca/signal-cli/blobdiff_plain/591c0fe8a3744608575a6dcb1f6f4f9f818948d2..83d5d53d8a201cebbdbfb2ebe3f39d8d91a80091:/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..a0e95c7a 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[] groupIdV1) { + try { + return new GroupMasterKey(new HKDFv3().deriveSecrets(groupIdV1, + "GV2 Migration".getBytes(), + GroupMasterKey.SIZE)); + } catch (InvalidInputException e) { + throw new AssertionError(e); + } + } }