mls_spec/drafts/
ratchet_tree_options.rs

1use crate::{group::extensions::Extension, tree::RatchetTree};
2
3#[derive(
4    Debug,
5    Clone,
6    Copy,
7    PartialEq,
8    Eq,
9    tls_codec::TlsSerialize,
10    tls_codec::TlsDeserialize,
11    tls_codec::TlsSize,
12)]
13#[repr(u8)]
14#[cfg_attr(
15    feature = "serde",
16    derive(serde_repr::Serialize_repr, serde_repr::Deserialize_repr)
17)]
18pub enum RatchetTreeRepresentation {
19    Reserved = 0x00,
20    Full = 0x01,
21    HttpsUri = 0x02,
22    OutOfBand = 0x03,
23    DistributionService = 0x04,
24}
25
26#[derive(
27    Debug,
28    Clone,
29    PartialEq,
30    Eq,
31    tls_codec::TlsSerialize,
32    tls_codec::TlsDeserialize,
33    tls_codec::TlsSize,
34)]
35#[repr(u8)]
36#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
37pub enum RatchetTreeOption {
38    #[tls_codec(discriminant = "RatchetTreeRepresentation::Full")]
39    Full { ratchet_tree: RatchetTree },
40    #[tls_codec(discriminant = "RatchetTreeRepresentation::HttpsUri")]
41    HttpsUri {
42        #[tls_codec(with = "crate::tlspl::string")]
43        ratchet_tree_url: String,
44        #[tls_codec(with = "crate::tlspl::bytes")]
45        tree_signature: Vec<u8>,
46    },
47    #[tls_codec(discriminant = "RatchetTreeRepresentation::OutOfBand")]
48    OutOfBand {
49        #[tls_codec(with = "crate::tlspl::bytes")]
50        tree_signature: Vec<u8>,
51    },
52    #[tls_codec(discriminant = "RatchetTreeRepresentation::DistributionService")]
53    DistributionService,
54}
55
56#[derive(
57    Debug,
58    Clone,
59    Copy,
60    PartialEq,
61    Eq,
62    tls_codec::TlsSerialize,
63    tls_codec::TlsDeserialize,
64    tls_codec::TlsSize,
65)]
66#[repr(u8)]
67#[cfg_attr(
68    feature = "serde",
69    derive(serde_repr::Serialize_repr, serde_repr::Deserialize_repr)
70)]
71pub enum RatchetTreePresence {
72    NoRatchetTree = 0x00,
73    Present = 0x01,
74    Removed = 0x02,
75    Added = 0x03,
76}
77
78#[derive(
79    Debug,
80    Clone,
81    PartialEq,
82    Eq,
83    tls_codec::TlsSerialize,
84    tls_codec::TlsDeserialize,
85    tls_codec::TlsSize,
86)]
87#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
88pub struct PartialGroupInfo {
89    pub ratchet_tree_presence: RatchetTreePresence,
90    pub group_info_extensions: Vec<Extension>,
91    #[tls_codec(with = "crate::tlspl::bytes")]
92    pub signature: Vec<u8>,
93}