xmtp_proto/
convert.rs

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}