cb9aaa4117
Critical MLS protocol compliance fixes:
1. Transcript hash computation (RFC 9420 Section 8.2):
- Added interimTranscriptHash field to MlsGroup
- confirmed_transcript_hash updated after each commit
- interim_transcript_hash computed from confirmation_tag
- Both commit() and processCommit() maintain transcript hashes
2. Confirmation tag (RFC 9420 Section 6.1):
- computeConfirmationTag() using HMAC(confirmation_key, confirmed_hash)
- Used in buildWelcome GroupInfo
- Interim hash computed from confirmation tag after each epoch
3. LeafNode signature verification (RFC 9420 Section 7.2):
- verifyLeafNodeSignature() verifies signature over encodeTbs
- Called in processCommit when receiving UpdatePath
- Rejects commits with invalid LeafNode signatures
4. processCommit proposal ordering (RFC 9420 Section 12.4.2):
- Proposals applied before UpdatePath processing
- Matches the commit() ordering fix from earlier
5. Welcome ratchet tree (RFC 9420 Section 12.4.3):
- buildWelcome serializes full ratchet tree in GroupInfo extensions
(extension type 0x0001 = ratchet_tree)
- processWelcome reconstructs tree from GroupInfo extensions
- Finds joining member's leaf index by matching signature key
6. Welcome key derivation fix:
- member_secret = Extract(joiner_secret, psk_secret)
- welcome_secret = DeriveSecret(member_secret, "welcome")
- epoch_secret derived from member_secret (not separate KeySchedule)
- All 12 epoch sub-secrets computed directly
All 120 MLS tests pass (41 interop + 79 unit), 0 failures.
https://claude.ai/code/session_01NocQDWj2Y92FugjfgazzL3