Skip to content

feat: integrate de-mls leaf-index member-id rework in group_v2 - #225

Open
seemenkina wants to merge 4 commits into
mainfrom
feat/de-mls-member-id-rework
Open

feat: integrate de-mls leaf-index member-id rework in group_v2#225
seemenkina wants to merge 4 commits into
mainfrom
feat/de-mls-member-id-rework

Conversation

@seemenkina

@seemenkina seemenkina commented Aug 27, 2026

Copy link
Copy Markdown
Contributor

Bumps de-mls to the leaf-index member-id rework and reworks how GroupV2 talks to it.

Related de-mls PR: vacp2p/de-mls#145

de-mls now speaks Member out and an opaque MemberId handle in — raw member-id bytes no longer cross the boundary. The member list (members()) and message attribution read off the Member de-mls hands back, and the chat sender now comes from the MLS-authenticated sender: Member on ConversationMessage rather than a wire-supplied field, closing the sender-spoofing gap.

Construction follows the new surface: create/join no longer take a member_id (de-mls derives it from the credential), and add_member takes only the key package — de-mls reads the joiner credential from it.

The "already a member" check on add now matches the authenticated signature key — the per-device leaf identity — not the self-asserted credential. A local member directory (MemberId → signer id), seeded from members_view() and kept current from MembersChanged, lets libchat name the opaque handles de-mls returns.

Welcome routing is unchanged: it still correlates the joiner credential de-mls stamps on the welcome to the invitee's transport address.

@seemenkina
seemenkina requested a review from jazzz August 27, 2026 12:44
@jazzz
jazzz requested a review from mchenani August 27, 2026 17:26

@jazzz jazzz left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looking clean.

  1. The distinction between MemberId and JoinerId is working well - as a reader I can tell there is a difference. Clear. Concise. Easy.
  2. Commit Ref needs an update after upstream PR is merged. But thats not blocking my approval.

let members_to_add = fetch_key_packages(service_ctx, members)?;
let existing: HashSet<Vec<u8>> = self.conversation.members()?.into_iter().collect();
// Identify current members by their signature key — the authenticated
// per-device leaf identity — so a device already seated is skipped.F

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
// per-device leaf identity — so a device already seated is skipped.F
// per-device leaf identity — so a device already seated is skipped.

Comment thread core/conversations/Cargo.toml Outdated
base64 = "0.22"
chat-proto = { workspace = true }
de-mls = { git = "https://github.com/vacp2p/de-mls", rev = "5cfce1b97305363466c0e68668fcd85cad4b8996" }
de-mls = { git = "https://github.com/vacp2p/de-mls", branch = "feat/member-id-leaf-index" }

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[Boulder] Non-issue, but flagging this as a merge condition. Needs a rev, rather than a feature branch

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

pin on particular commit in main

de-mls now stamps the joiner's signature key on the welcome instead of its
credential, so a credential-keyed pending map missed every lookup and no
invitee received a welcome.
@seemenkina
seemenkina force-pushed the feat/de-mls-member-id-rework branch from 6f4c915 to 105b028 Compare August 28, 2026 18:26
@seemenkina
seemenkina requested a review from jazzz August 28, 2026 18:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants