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