Skip to main content

openmls/test_utils/frankenstein/
commit.rs

1use openmls_traits::types::HpkeCiphertext;
2use tls_codec::*;
3
4use super::{FrankenLeafNode, FrankenProposal};
5
6#[derive(
7    Debug, Clone, PartialEq, Eq, TlsSerialize, TlsDeserialize, TlsDeserializeBytes, TlsSize,
8)]
9pub struct FrankenCommit {
10    pub proposals: Vec<FrankenProposalOrRef>,
11    pub path: Option<FrankenUpdatePathIn>,
12}
13
14#[derive(
15    Debug, Clone, PartialEq, Eq, TlsSerialize, TlsDeserialize, TlsDeserializeBytes, TlsSize,
16)]
17#[repr(u8)]
18#[allow(clippy::large_enum_variant)]
19pub enum FrankenProposalOrRef {
20    #[tls_codec(discriminant = 1)]
21    Proposal(FrankenProposal),
22    Reference(VLBytes),
23}
24
25#[derive(
26    Debug, Clone, PartialEq, Eq, TlsSerialize, TlsDeserialize, TlsDeserializeBytes, TlsSize,
27)]
28pub struct FrankenUpdatePathIn {
29    pub leaf_node: FrankenLeafNode,
30    pub nodes: Vec<FrankenUpdatePathNode>,
31}
32
33#[derive(
34    Debug, Clone, PartialEq, Eq, TlsSerialize, TlsDeserialize, TlsDeserializeBytes, TlsSize,
35)]
36pub struct FrankenUpdatePathNode {
37    pub public_key: VLBytes,
38    pub encrypted_path_secrets: Vec<FrankenHpkeCiphertext>,
39}
40
41#[derive(
42    Debug, Clone, PartialEq, Eq, TlsSerialize, TlsDeserialize, TlsDeserializeBytes, TlsSize,
43)]
44pub struct FrankenHpkeCiphertext {
45    pub kem_output: VLBytes,
46    pub ciphertext: VLBytes,
47}
48
49impl From<FrankenHpkeCiphertext> for HpkeCiphertext {
50    fn from(ln: FrankenHpkeCiphertext) -> Self {
51        HpkeCiphertext::tls_deserialize(&mut ln.tls_serialize_detached().unwrap().as_slice())
52            .unwrap()
53    }
54}
55
56impl From<HpkeCiphertext> for FrankenHpkeCiphertext {
57    fn from(ln: HpkeCiphertext) -> Self {
58        FrankenHpkeCiphertext::tls_deserialize(&mut ln.tls_serialize_detached().unwrap().as_slice())
59            .unwrap()
60    }
61}