1use crate::ConversionError;
2use crate::xmtp::identity::MlsCredential;
3use openmls::{
4 credentials::{BasicCredential, errors::BasicCredentialError},
5 prelude::Credential as OpenMlsCredential,
6};
7use prost::Message;
8
9impl TryFrom<MlsCredential> for OpenMlsCredential {
10 type Error = BasicCredentialError;
11
12 fn try_from(proto: MlsCredential) -> Result<OpenMlsCredential, Self::Error> {
13 let bytes = proto.encode_to_vec();
14 Ok(BasicCredential::new(bytes).into())
15 }
16}
17
18impl TryFrom<openmls::prelude::AeadType>
19 for crate::xmtp::mls::message_contents::WelcomePointeeEncryptionAeadType
20{
21 type Error = ConversionError;
22
23 fn try_from(aead_type: openmls::prelude::AeadType) -> Result<Self, Self::Error> {
24 match aead_type {
25 openmls::prelude::AeadType::ChaCha20Poly1305 => {
26 Ok(crate::xmtp::mls::message_contents::WelcomePointeeEncryptionAeadType::Chacha20Poly1305)
27 }
28 openmls::prelude::AeadType::Aes128Gcm | openmls::prelude::AeadType::Aes256Gcm => Err(ConversionError::InvalidValue {
29 item: "AeadType",
30 expected: "ChaCha20Poly1305",
31 got: format!("{:?}", aead_type),
32 }),
33 }
34 }
35}
36
37impl TryFrom<crate::xmtp::mls::message_contents::WelcomePointeeEncryptionAeadType>
38 for openmls::prelude::AeadType
39{
40 type Error = ConversionError;
41
42 fn try_from(
43 aead_type: crate::xmtp::mls::message_contents::WelcomePointeeEncryptionAeadType,
44 ) -> Result<Self, Self::Error> {
45 match aead_type {
46 crate::xmtp::mls::message_contents::WelcomePointeeEncryptionAeadType::Chacha20Poly1305 => {
47 Ok(openmls::prelude::AeadType::ChaCha20Poly1305)
48 }
49 crate::xmtp::mls::message_contents::WelcomePointeeEncryptionAeadType::Unspecified => {
50 Err(ConversionError::InvalidValue {
51 item: "AeadType",
52 expected: "ChaCha20Poly1305",
53 got: format!("{:?}", aead_type),
54 })
55 }
56 }
57 }
58}