mirror of
https://github.com/vitorpamplona/amethyst.git
synced 2026-08-11 16:57:39 +00:00
RFC 9420 §8.2 says ConfirmedTranscriptHashInput carries the wire_format of the AuthenticatedContent being committed, not a hard-coded value. openmls/mdk pass mls_content.wire_format() through, so B's PrivateMessage commits use wire_format=2 in their transcript-hash input. Quartz always wrote wire_format=1 (PublicMessage), so amy's receiver-side new_confirmed_transcript_hash diverged from B's — and every tag derived from it (confirmation_key, confirmation_tag, epoch secrets) diverged too, surfacing as "Confirmation tag verification failed" once my error-surfacing fix stopped hiding it. Plumb the real wire format through processCommit and its decrypt() dispatch so PrivateMessage commits from B are hashed as PrivateMessage on amy's side. https://claude.ai/code/session_1469d7f4-bb66-4ffa-a44d-1dfa4b526484