fix(marmot): SelfRemove uses IANA proposal type 0x000A (not 0xF001)
SelfRemove is standardized in draft-ietf-mls-extensions with
IANA-registered proposal type 0x000A. openmls and mdk encode it
that way on the wire. Quartz was writing 0xF001 (Marmot private-use
range), so mdk's strict tls_codec read 0x000A for a known proposal
type it didn't recognize and the decoder drifted past the variant
body, surfacing later as
Tls(DecodingError("Trying to decode Option<T> with 64 for option..."))
when it reached `Commit.path` with misaligned bytes.
Fixes test 11 (amy leave → B still sees A as member).
https://claude.ai/code/session_1469d7f4-bb66-4ffa-a44d-1dfa4b526484
This commit is contained in:
+5
-2
@@ -45,8 +45,11 @@ enum class ProposalType(
|
||||
EXTERNAL_INIT(6),
|
||||
GROUP_CONTEXT_EXTENSIONS(7),
|
||||
|
||||
// Marmot custom proposal types (private-use range 0xF000-0xFFFF)
|
||||
SELF_REMOVE(0xF001),
|
||||
// SelfRemove is standardized in MLS Extensions draft-ietf-mls-extensions
|
||||
// as IANA proposal type 0x000A, NOT a Marmot private-use value.
|
||||
// openmls / mdk encode it as 0x000A on the wire; quartz was writing
|
||||
// 0xF001, which strict receivers reject as "Unknown ProposalType".
|
||||
SELF_REMOVE(0x000A),
|
||||
;
|
||||
|
||||
companion object {
|
||||
|
||||
Reference in New Issue
Block a user