1use crate::{group::extensions::Extension, tree::RatchetTree};
2
3#[derive(
4 Debug,
5 Clone,
6 PartialEq,
7 Eq,
8 Hash,
9 tls_codec::TlsSerialize,
10 tls_codec::TlsDeserialize,
11 tls_codec::TlsSize,
12)]
13#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
14pub struct Domain {
15 #[tls_codec(with = "crate::tlspl::string")]
16 pub domain: String,
17}
18
19#[derive(
20 Debug,
21 Clone,
22 PartialEq,
23 Eq,
24 Hash,
25 tls_codec::TlsSerialize,
26 tls_codec::TlsDeserialize,
27 tls_codec::TlsSize,
28)]
29#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
30pub struct DomainList {
31 pub domains: Vec<Domain>,
32}
33
34#[derive(
35 Debug,
36 Clone,
37 PartialEq,
38 Eq,
39 Hash,
40 tls_codec::TlsSerialize,
41 tls_codec::TlsDeserialize,
42 tls_codec::TlsSize,
43)]
44#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
45#[repr(transparent)]
46pub struct RatchetTreeSourceDomainsExtension(pub DomainList);
47
48pub const EXTENSION_RATCHET_TREE_SOURCE_DOMAINS: u16 = 0xF4C0;
49
50#[derive(
51 Debug,
52 Clone,
53 Copy,
54 PartialEq,
55 Eq,
56 tls_codec::TlsSerialize,
57 tls_codec::TlsDeserialize,
58 tls_codec::TlsSize,
59)]
60#[repr(u8)]
61#[cfg_attr(
62 feature = "serde",
63 derive(serde_repr::Serialize_repr, serde_repr::Deserialize_repr)
64)]
65pub enum RatchetTreeRepresentation {
66 Reserved = 0x00,
67 Full = 0x01,
68 HttpsUri = 0x02,
69 OutOfBand = 0x03,
70 DistributionService = 0x04,
71}
72
73#[derive(
74 Debug,
75 Clone,
76 PartialEq,
77 Eq,
78 tls_codec::TlsSerialize,
79 tls_codec::TlsDeserialize,
80 tls_codec::TlsSize,
81)]
82#[repr(u8)]
83#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
84pub enum RatchetTreeOption {
85 #[tls_codec(discriminant = "RatchetTreeRepresentation::Full")]
86 Full { ratchet_tree: RatchetTree },
87 #[tls_codec(discriminant = "RatchetTreeRepresentation::HttpsUri")]
88 HttpsUri {
89 #[tls_codec(with = "crate::tlspl::string")]
90 ratchet_tree_url: String,
91 },
92 #[tls_codec(discriminant = "RatchetTreeRepresentation::OutOfBand")]
93 OutOfBand,
94 #[tls_codec(discriminant = "RatchetTreeRepresentation::DistributionService")]
95 DistributionService,
96}
97
98#[derive(
99 Debug,
100 Clone,
101 Copy,
102 PartialEq,
103 Eq,
104 tls_codec::TlsSerialize,
105 tls_codec::TlsDeserialize,
106 tls_codec::TlsSize,
107)]
108#[repr(u8)]
109#[cfg_attr(
110 feature = "serde",
111 derive(serde_repr::Serialize_repr, serde_repr::Deserialize_repr)
112)]
113pub enum RatchetTreePresence {
114 NoRatchetTree = 0x00,
115 Present = 0x01,
116 Removed = 0x02,
117 Added = 0x03,
118}
119
120#[derive(
121 Debug,
122 Clone,
123 PartialEq,
124 Eq,
125 tls_codec::TlsSerialize,
126 tls_codec::TlsDeserialize,
127 tls_codec::TlsSize,
128)]
129#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
130pub struct PartialGroupInfo {
131 pub ratchet_tree_presence: RatchetTreePresence,
132 pub group_info_extensions: Vec<Extension>,
133 #[tls_codec(with = "crate::tlspl::bytes")]
134 pub signature: Vec<u8>,
135}