mls_spec/drafts/
ratchet_tree_options.rs1use 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}