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),
|
EXTERNAL_INIT(6),
|
||||||
GROUP_CONTEXT_EXTENSIONS(7),
|
GROUP_CONTEXT_EXTENSIONS(7),
|
||||||
|
|
||||||
// Marmot custom proposal types (private-use range 0xF000-0xFFFF)
|
// SelfRemove is standardized in MLS Extensions draft-ietf-mls-extensions
|
||||||
SELF_REMOVE(0xF001),
|
// 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 {
|
companion object {
|
||||||
|
|||||||
Reference in New Issue
Block a user