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}