core_crypto/transaction_context/conversation/
external_sender.rs

1//! This module is concerned with setting the external sender.
2
3use super::{Result, TransactionContext};
4use crate::{RecursiveError, prelude::MlsConversationConfiguration};
5
6impl TransactionContext {
7    /// Parses supplied key from Delivery Service in order to build back an [ExternalSender]
8    pub async fn set_raw_external_senders(
9        &self,
10        cfg: &mut MlsConversationConfiguration,
11        external_senders: Vec<Vec<u8>>,
12    ) -> Result<()> {
13        let mls_provider = self.mls_provider().await?;
14        cfg.external_senders = external_senders
15            .into_iter()
16            .map(|key| {
17                MlsConversationConfiguration::parse_external_sender(&key).or_else(|_| {
18                    MlsConversationConfiguration::legacy_external_sender(
19                        key,
20                        cfg.ciphersuite.signature_algorithm(),
21                        &mls_provider,
22                    )
23                })
24            })
25            .collect::<crate::mls::conversation::Result<_>>()
26            .map_err(RecursiveError::mls_conversation("setting external sender"))?;
27        Ok(())
28    }
29}