mls_spec/
key_package.rs

1use crate::{
2    SensitiveBytes,
3    defs::{CiphersuiteId, ProtocolVersion},
4    group::{KeyPackageRef, extensions::Extension},
5    messages::MlsMessage,
6    tree::leaf_node::LeafNode,
7};
8
9#[derive(Debug, Clone, PartialEq, Eq, tls_codec::TlsSerialize, tls_codec::TlsSize)]
10#[cfg_attr(feature = "serde", derive(serde::Serialize))]
11pub struct KeyPackageTBS<'a> {
12    pub version: &'a ProtocolVersion,
13    pub cipher_suite: &'a CiphersuiteId,
14    pub init_key: &'a [u8],
15    pub leaf_node: &'a LeafNode,
16    pub extensions: &'a [Extension],
17}
18
19#[derive(
20    Debug,
21    Clone,
22    PartialEq,
23    Eq,
24    zeroize::Zeroize,
25    zeroize::ZeroizeOnDrop,
26    tls_codec::TlsSerialize,
27    tls_codec::TlsDeserialize,
28    tls_codec::TlsSize,
29)]
30#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
31pub struct KeyPackage {
32    #[zeroize(skip)]
33    pub version: ProtocolVersion,
34    #[zeroize(skip)]
35    pub cipher_suite: CiphersuiteId,
36    pub init_key: SensitiveBytes,
37    #[zeroize(skip)]
38    pub leaf_node: LeafNode,
39    #[zeroize(skip)]
40    pub extensions: Vec<Extension>,
41    pub signature: SensitiveBytes,
42}
43
44impl KeyPackage {
45    pub fn to_tbs(&self) -> KeyPackageTBS {
46        KeyPackageTBS {
47            version: &self.version,
48            cipher_suite: &self.cipher_suite,
49            init_key: &self.init_key,
50            leaf_node: &self.leaf_node,
51            extensions: &self.extensions,
52        }
53    }
54
55    pub fn into_message(self) -> MlsMessage {
56        MlsMessage {
57            version: ProtocolVersion::default(),
58            content: crate::messages::MlsMessageContent::KeyPackage(self),
59        }
60    }
61}
62
63#[derive(Debug, Clone, PartialEq, Eq, zeroize::Zeroize, zeroize::ZeroizeOnDrop)]
64#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
65pub struct KeyPackageWithRef {
66    pub keypackage_ref: KeyPackageRef,
67    pub keypackage: KeyPackage,
68}