From c2b9c25b7ce6297ab840e3193a65258e0ffed239 Mon Sep 17 00:00:00 2001 From: AsamK Date: Wed, 14 Oct 2026 11:57:50 +0200 Subject: [PATCH] Always use server signed group change for updating local group --- .../signal/manager/helper/GroupV2Helper.java | 24 ++++--------------- 1 file changed, 5 insertions(+), 19 deletions(-) diff --git a/lib/src/main/java/org/asamk/signal/manager/helper/GroupV2Helper.java b/lib/src/main/java/org/asamk/signal/manager/helper/GroupV2Helper.java index 456c56e4..a8fc01b1 100644 --- a/lib/src/main/java/org/asamk/signal/manager/helper/GroupV2Helper.java +++ b/lib/src/main/java/org/asamk/signal/manager/helper/GroupV2Helper.java @@ -636,32 +636,18 @@ class GroupV2Helper { final DecryptedGroupChange decryptedChange; final DecryptedGroup decryptedGroupState; - if (!changeActions.promote_members_pending_pni_aci_profile_key.isEmpty()) { - // The server fills in the ACI and PNI ciphertexts of a PNI promotion, so decrypt its signed change - final var signedGroupChange = dependencies.getGroupsV2Api() - .patchGroup(changeActions, getGroupAuthForToday(groupSecretParams), Optional.empty()); - final var groupId = groupSecretParams.getPublicParams().getGroupIdentifier(); - try { - decryptedChange = groupOperations.decryptChange(signedGroupChange.group_change, - DecryptChangeVerificationMode.verify(groupId)).orElseThrow(); - decryptedGroupState = DecryptedGroupUtil.apply(previousGroupState, decryptedChange); - } catch (VerificationFailedException | InvalidGroupStateException | NotAbleToApplyGroupV2ChangeException e) { - throw new IOException(e); - } - groupInfoV2.setGroup(decryptedGroupState); - return new Pair<>(decryptedGroupState, signedGroupChange); - } + var signedGroupChange = dependencies.getGroupsV2Api() + .patchGroup(changeActions, getGroupAuthForToday(groupSecretParams), Optional.empty()); + final var groupId = groupSecretParams.getPublicParams().getGroupIdentifier(); try { - decryptedChange = groupOperations.decryptChange(changeActions, getSelfAci()); + decryptedChange = groupOperations.decryptChange(signedGroupChange.group_change, + DecryptChangeVerificationMode.verify(groupId)).orElseThrow(); decryptedGroupState = DecryptedGroupUtil.apply(previousGroupState, decryptedChange); } catch (VerificationFailedException | InvalidGroupStateException | NotAbleToApplyGroupV2ChangeException e) { throw new IOException(e); } - var signedGroupChange = dependencies.getGroupsV2Api() - .patchGroup(changeActions, getGroupAuthForToday(groupSecretParams), Optional.empty()); - groupInfoV2.setGroup(decryptedGroupState); return new Pair<>(decryptedGroupState, signedGroupChange);