mls_spec/group/
welcome.rs

1use 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}