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    Hash,
25    zeroize::Zeroize,
26    zeroize::ZeroizeOnDrop,
27    tls_codec::TlsSerialize,
28    tls_codec::TlsDeserialize,
29    tls_codec::TlsSize,
30)]
31#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
32pub struct KeyPackage {
33    #[zeroize(skip)]
34    pub version: ProtocolVersion,
35    #[zeroize(skip)]
36    pub cipher_suite: CiphersuiteId,
37    pub init_key: SensitiveBytes,
38    #[zeroize(skip)]
39    pub leaf_node: LeafNode,
40    #[zeroize(skip)]
41    pub extensions: Vec<Extension>,
42    pub signature: SensitiveBytes,
43}
44
45impl KeyPackage {
46    pub fn to_tbs(&self) -> KeyPackageTBS<'_> {
47        KeyPackageTBS {
48            version: &self.version,
49            cipher_suite: &self.cipher_suite,
50            init_key: &self.init_key,
51            leaf_node: &self.leaf_node,
52            extensions: &self.extensions,
53        }
54    }
55
56    pub fn into_message(self) -> MlsMessage {
57        MlsMessage {
58            version: ProtocolVersion::default(),
59            content: crate::messages::MlsMessageContent::KeyPackage(self),
60        }
61    }
62}
63
64#[derive(Debug, Clone, PartialEq, Eq, Hash, zeroize::Zeroize, zeroize::ZeroizeOnDrop)]
65#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
66pub struct KeyPackageWithRef {
67    pub keypackage_ref: KeyPackageRef,
68    pub keypackage: KeyPackage,
69}