mls-spec 3.0.0-pre.1

This crate is a repository of MLS / RFC9420-related data structures.
use crate::{
    SensitiveBytes,
    defs::LeafIndex,
    tree::{NodeType, ParentNode, leaf_node::LeafNode},
};

pub type ParentNodeHash<'a> = SensitiveBytes<'a>;
pub type NodeHash<'a> = SensitiveBytes<'a>;

#[derive(Debug, Clone, PartialEq, Eq, thalassa::TlsplSerialize, thalassa::TlsplSize)]
pub struct ParentNodeHashInput<'a> {
    pub parent_node: Option<&'a ParentNode<'a>>,
    pub left_hash: &'a [u8],
    pub right_hash: &'a [u8],
}

#[derive(Debug, Clone, PartialEq, Eq, thalassa::TlsplSerialize, thalassa::TlsplSize)]
pub struct LeafNodeHashInput<'a> {
    pub leaf_index: &'a LeafIndex,
    pub leaf_node: Option<&'a LeafNode<'a>>,
}

#[derive(Debug, Clone, PartialEq, Eq, thalassa::TlsplSerialize, thalassa::TlsplSize)]
#[repr(u8)]
pub enum TreeHashInput<'a> {
    #[tlspl(discriminant = "NodeType::Leaf")]
    Leaf(LeafNodeHashInput<'a>),
    #[tlspl(discriminant = "NodeType::Parent")]
    Parent(ParentNodeHashInput<'a>),
}

#[derive(Debug, Clone, PartialEq, Eq, thalassa::TlsplSerialize, thalassa::TlsplSize)]
pub struct ParentHashInput<'a> {
    pub encryption_key: &'a [u8],
    pub parent_hash: &'a [u8],
    pub original_sibling_tree_hash: &'a [u8],
}