mls_spec/tree/
hashes.rs

1use crate::{
2    SensitiveBytes,
3    defs::LeafIndex,
4    tree::{NodeType, ParentNode, leaf_node::LeafNode},
5};
6
7pub type ParentNodeHash = SensitiveBytes;
8pub type NodeHash = SensitiveBytes;
9
10#[derive(Debug, Clone, PartialEq, Eq, tls_codec::TlsSerialize, tls_codec::TlsSize)]
11pub struct ParentNodeHashInput<'a> {
12    pub parent_node: Option<&'a ParentNode>,
13    #[tls_codec(with = "crate::tlspl::bytes")]
14    pub left_hash: &'a [u8],
15    #[tls_codec(with = "crate::tlspl::bytes")]
16    pub right_hash: &'a [u8],
17}
18
19#[derive(Debug, Clone, PartialEq, Eq, tls_codec::TlsSerialize, tls_codec::TlsSize)]
20pub struct LeafNodeHashInput<'a> {
21    pub leaf_index: &'a LeafIndex,
22    pub leaf_node: Option<&'a LeafNode>,
23}
24
25#[derive(Debug, Clone, PartialEq, Eq, tls_codec::TlsSerialize, tls_codec::TlsSize)]
26#[repr(u8)]
27pub enum TreeHashInput<'a> {
28    #[tls_codec(discriminant = "NodeType::Leaf")]
29    Leaf(LeafNodeHashInput<'a>),
30    #[tls_codec(discriminant = "NodeType::Parent")]
31    Parent(ParentNodeHashInput<'a>),
32}
33
34#[derive(Debug, Clone, PartialEq, Eq, tls_codec::TlsSerialize, tls_codec::TlsSize)]
35pub struct ParentHashInput<'a> {
36    #[tls_codec(with = "crate::tlspl::bytes")]
37    pub encryption_key: &'a [u8],
38    #[tls_codec(with = "crate::tlspl::bytes")]
39    pub parent_hash: &'a [u8],
40    #[tls_codec(with = "crate::tlspl::bytes")]
41    pub original_sibling_tree_hash: &'a [u8],
42}