openmls 0.8.1

A Rust implementation of the Messaging Layer Security (MLS) protocol, as defined in RFC 9420.
use tls_codec::*;

use super::{FrankenLeafNode, FrankenProposal};

#[derive(
    Debug, Clone, PartialEq, Eq, TlsSerialize, TlsDeserialize, TlsDeserializeBytes, TlsSize,
)]
pub struct FrankenCommit {
    pub proposals: Vec<FrankenProposalOrRef>,
    pub path: Option<FrankenUpdatePathIn>,
}

#[derive(
    Debug, Clone, PartialEq, Eq, TlsSerialize, TlsDeserialize, TlsDeserializeBytes, TlsSize,
)]
#[repr(u8)]
#[allow(clippy::large_enum_variant)]
pub enum FrankenProposalOrRef {
    #[tls_codec(discriminant = 1)]
    Proposal(FrankenProposal),
    Reference(VLBytes),
}

#[derive(
    Debug, Clone, PartialEq, Eq, TlsSerialize, TlsDeserialize, TlsDeserializeBytes, TlsSize,
)]
pub struct FrankenUpdatePathIn {
    pub leaf_node: FrankenLeafNode,
    pub nodes: Vec<FrankenUpdatePathNode>,
}

#[derive(
    Debug, Clone, PartialEq, Eq, TlsSerialize, TlsDeserialize, TlsDeserializeBytes, TlsSize,
)]
pub struct FrankenUpdatePathNode {
    pub public_key: VLBytes,
    pub encrypted_path_secrets: Vec<FrankenHpkeCiphertext>,
}

#[derive(
    Debug, Clone, PartialEq, Eq, TlsSerialize, TlsDeserialize, TlsDeserializeBytes, TlsSize,
)]
pub struct FrankenHpkeCiphertext {
    pub kem_output: VLBytes,
    pub ciphertext: VLBytes,
}