core_crypto_ffi/bundles/
group_info.rs

1use core_crypto::prelude::MlsGroupInfoBundle;
2#[cfg(target_family = "wasm")]
3use wasm_bindgen::prelude::*;
4
5#[derive(Debug, Clone, Copy)]
6#[cfg_attr(target_family = "wasm", wasm_bindgen, derive(serde::Serialize, serde::Deserialize))]
7#[cfg_attr(not(target_family = "wasm"), derive(uniffi::Enum))]
8#[repr(u8)]
9pub enum MlsGroupInfoEncryptionType {
10    /// Unencrypted `GroupInfo`
11    Plaintext = 1,
12    /// `GroupInfo` encrypted in a JWE
13    JweEncrypted = 2,
14}
15
16impl From<core_crypto::prelude::MlsGroupInfoEncryptionType> for MlsGroupInfoEncryptionType {
17    fn from(value: core_crypto::prelude::MlsGroupInfoEncryptionType) -> Self {
18        match value {
19            core_crypto::prelude::MlsGroupInfoEncryptionType::Plaintext => Self::Plaintext,
20            core_crypto::prelude::MlsGroupInfoEncryptionType::JweEncrypted => Self::JweEncrypted,
21        }
22    }
23}
24
25impl From<MlsGroupInfoEncryptionType> for core_crypto::prelude::MlsGroupInfoEncryptionType {
26    fn from(value: MlsGroupInfoEncryptionType) -> Self {
27        match value {
28            MlsGroupInfoEncryptionType::Plaintext => Self::Plaintext,
29            MlsGroupInfoEncryptionType::JweEncrypted => Self::JweEncrypted,
30        }
31    }
32}
33
34#[derive(Debug, Clone, Copy)]
35#[cfg_attr(target_family = "wasm", wasm_bindgen, derive(serde::Serialize, serde::Deserialize))]
36#[cfg_attr(not(target_family = "wasm"), derive(uniffi::Enum))]
37#[repr(u8)]
38pub enum MlsRatchetTreeType {
39    /// Plain old and complete `GroupInfo`
40    Full = 1,
41    /// Contains `GroupInfo` changes since previous epoch (not yet implemented)
42    /// (see [draft](https://github.com/rohan-wire/ietf-drafts/blob/main/mahy-mls-ratchet-tree-delta/draft-mahy-mls-ratchet-tree-delta.md))
43    Delta = 2,
44    ByRef = 3,
45}
46
47impl From<core_crypto::prelude::MlsRatchetTreeType> for MlsRatchetTreeType {
48    fn from(value: core_crypto::prelude::MlsRatchetTreeType) -> Self {
49        match value {
50            core_crypto::prelude::MlsRatchetTreeType::Full => Self::Full,
51            core_crypto::prelude::MlsRatchetTreeType::Delta => Self::Delta,
52            core_crypto::prelude::MlsRatchetTreeType::ByRef => Self::ByRef,
53        }
54    }
55}
56
57impl From<MlsRatchetTreeType> for core_crypto::prelude::MlsRatchetTreeType {
58    fn from(value: MlsRatchetTreeType) -> Self {
59        match value {
60            MlsRatchetTreeType::Full => Self::Full,
61            MlsRatchetTreeType::Delta => Self::Delta,
62            MlsRatchetTreeType::ByRef => Self::ByRef,
63        }
64    }
65}
66
67#[derive(Debug, Clone)]
68#[cfg_attr(
69    target_family = "wasm",
70    wasm_bindgen(getter_with_clone),
71    derive(serde::Serialize, serde::Deserialize)
72)]
73#[cfg_attr(not(target_family = "wasm"), derive(uniffi::Record))]
74pub struct GroupInfoBundle {
75    pub encryption_type: MlsGroupInfoEncryptionType,
76    pub ratchet_tree_type: MlsRatchetTreeType,
77    pub payload: Vec<u8>,
78}
79
80impl From<MlsGroupInfoBundle> for GroupInfoBundle {
81    fn from(gi: MlsGroupInfoBundle) -> Self {
82        Self {
83            encryption_type: gi.encryption_type.into(),
84            ratchet_tree_type: gi.ratchet_tree_type.into(),
85            payload: gi.payload.bytes(),
86        }
87    }
88}