package mls // MLS secret tree (RFC 9420 ยง9). // Type definitions - crypto derivation methods go in secret_tree_crypto.mx. // // A ratchet label is a []byte and a secret tree is a [][]byte. Moxie forbids // named slice types, so the old methods are free functions whose first // parameter is the value. var ( ratchetLabelHandshake []byte ratchetLabelApplication []byte ) func ratchetLabelFromContentType(ct contentType) (v []byte) { switch ct { case contentTypeApplication: return ratchetLabelApplication case contentTypeProposal, contentTypeCommit: return ratchetLabelHandshake default: panic("unreachable") } } // secretTreeGet returns the secret stored at node ni. func secretTreeGet(tree [][]byte, ni nodeIndex) (buf []byte) { secret := tree[int32(ni)] if secret == nil { panic("empty node in secret tree") } return secret } // secretTreeSet stores secret at node ni. func secretTreeSet(tree [][]byte, ni nodeIndex, secret []byte) { tree[int32(ni)] = secret } type ratchetSecret struct { secret []byte generation uint32 }