secret_tree.mx raw
1 package mls
2
3 // MLS secret tree (RFC 9420 ยง9).
4 // Type definitions - crypto derivation methods go in secret_tree_crypto.mx.
5 //
6 // A ratchet label is a []byte and a secret tree is a [][]byte. Moxie forbids
7 // named slice types, so the old methods are free functions whose first
8 // parameter is the value.
9
10 var (
11 ratchetLabelHandshake []byte
12 ratchetLabelApplication []byte
13 )
14
15 func ratchetLabelFromContentType(ct contentType) (v []byte) {
16 switch ct {
17 case contentTypeApplication:
18 return ratchetLabelApplication
19 case contentTypeProposal, contentTypeCommit:
20 return ratchetLabelHandshake
21 default:
22 panic("unreachable")
23 }
24 }
25
26 // secretTreeGet returns the secret stored at node ni.
27 func secretTreeGet(tree [][]byte, ni nodeIndex) (buf []byte) {
28 secret := tree[int32(ni)]
29 if secret == nil {
30 panic("empty node in secret tree")
31 }
32 return secret
33 }
34
35 // secretTreeSet stores secret at node ni.
36 func secretTreeSet(tree [][]byte, ni nodeIndex, secret []byte) {
37 tree[int32(ni)] = secret
38 }
39
40 type ratchetSecret struct {
41 secret []byte
42 generation uint32
43 }
44