use crate::{
SensitiveBytes, defs::LeafIndex, group::welcome::Welcome, messages::MlsMessage, tree::TreeNode,
};
#[derive(
Debug,
Clone,
PartialEq,
Eq,
Default,
tls_codec::TlsSize,
tls_codec::TlsDeserialize,
tls_codec::TlsSerialize,
)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct CopathHash {
pub hash_value: SensitiveBytes,
}
#[derive(
Debug,
Clone,
PartialEq,
Eq,
Default,
tls_codec::TlsSize,
tls_codec::TlsDeserialize,
tls_codec::TlsSerialize,
)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct MembershipProof {
pub leaf_index: LeafIndex,
pub n_leaves: u32,
pub direct_path_nodes: Vec<Option<TreeNode>>,
pub copath_hashes: Vec<CopathHash>,
}
#[derive(
Debug,
Clone,
PartialEq,
Eq,
tls_codec::TlsSize,
tls_codec::TlsDeserialize,
tls_codec::TlsSerialize,
)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct SenderAuthenticatedMessage<T: tls_codec::Serialize + tls_codec::Deserialize> {
pub message: T,
pub sender_membership_proof: MembershipProof,
}
#[derive(
Debug,
Clone,
PartialEq,
Eq,
tls_codec::TlsSize,
tls_codec::TlsDeserialize,
tls_codec::TlsSerialize,
)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct AnnotatedWelcome {
pub welcome: SenderAuthenticatedMessage<Welcome>,
pub joiner_membership_proof: MembershipProof,
}
#[derive(
Debug,
Clone,
PartialEq,
Eq,
tls_codec::TlsSize,
tls_codec::TlsDeserialize,
tls_codec::TlsSerialize,
)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct AnnotatedCommit {
pub commit: MlsMessage,
pub sender_membership_proof: Option<MembershipProof>,
pub tree_hash_after: SensitiveBytes,
pub resolution_index: Option<u32>,
pub sender_membership_proof_after: MembershipProof,
pub receiver_membership_proof_after: MembershipProof,
}