mls_spec/group/
welcome.rs1use crate::{
2 SensitiveBytes,
3 crypto::HpkeCiphertext,
4 defs::{CiphersuiteId, ProtocolVersion},
5 group::KeyPackageRef,
6 key_schedule::PreSharedKeyId,
7 messages::{MlsMessage, MlsMessageContent},
8};
9
10#[derive(
11 Debug,
12 Clone,
13 PartialEq,
14 Eq,
15 tls_codec::TlsSerialize,
16 tls_codec::TlsDeserialize,
17 tls_codec::TlsSize,
18)]
19#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
20pub struct PathSecret {
21 pub path_secret: SensitiveBytes,
22}
23
24#[derive(
25 Debug,
26 Clone,
27 PartialEq,
28 Eq,
29 tls_codec::TlsSerialize,
30 tls_codec::TlsDeserialize,
31 tls_codec::TlsSize,
32)]
33#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
34pub struct GroupSecrets {
35 pub joiner_secret: SensitiveBytes,
36 pub path_secret: Option<PathSecret>,
37 pub psks: Vec<PreSharedKeyId>,
38}
39
40#[derive(Debug, Clone, PartialEq, Eq, tls_codec::TlsSerialize, tls_codec::TlsSize)]
41pub struct GroupSecretsRef<'a> {
42 pub joiner_secret: &'a [u8],
43 pub path_secret: Option<&'a [u8]>,
44 pub psks: &'a [PreSharedKeyId],
45}
46
47#[derive(
48 Debug,
49 Clone,
50 PartialEq,
51 Eq,
52 tls_codec::TlsSerialize,
53 tls_codec::TlsDeserialize,
54 tls_codec::TlsSize,
55)]
56#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
57pub struct EncryptedGroupSecrets {
58 pub new_member: KeyPackageRef,
59 pub encrypted_group_secrets: HpkeCiphertext,
60}
61
62#[derive(
63 Debug,
64 Clone,
65 PartialEq,
66 Eq,
67 tls_codec::TlsSerialize,
68 tls_codec::TlsDeserialize,
69 tls_codec::TlsSize,
70)]
71#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
72pub struct Welcome {
73 pub cipher_suite: CiphersuiteId,
74 pub secrets: Vec<EncryptedGroupSecrets>,
75 pub encrypted_group_info: SensitiveBytes,
76}
77
78impl Welcome {
79 pub fn into_mls_message(self, protocol_version: ProtocolVersion) -> MlsMessage {
80 MlsMessage {
81 version: protocol_version,
82 content: MlsMessageContent::Welcome(self),
83 }
84 }
85}