core_crypto/mls/session/
identifier.rs1use std::collections::HashMap;
2
3use openmls::prelude::CredentialType;
4use openmls_traits::types::SignatureScheme;
5
6use super::error::{Error, Result};
7use crate::{CertificateBundle, ClientId, RecursiveError, mls::session::id::ClientIdRef};
8
9#[derive(Debug, Clone, derive_more::From)]
12pub enum ClientIdentifier {
13 Basic(ClientId),
15 X509(HashMap<SignatureScheme, CertificateBundle>),
17}
18
19impl ClientIdentifier {
20 pub fn get_id(
23 &self,
24 env: Option<&wire_e2e_identity::x509_check::revocation::PkiEnvironment>,
25 ) -> Result<std::borrow::Cow<'_, ClientIdRef>> {
26 match self {
27 ClientIdentifier::Basic(id) => Ok(std::borrow::Cow::Borrowed(id)),
28 ClientIdentifier::X509(certs) => {
29 let cert = certs.values().next().ok_or(Error::NoX509CertificateBundle)?;
33 let id = cert
34 .get_client_id(env)
35 .map_err(RecursiveError::mls_credential("getting client id"))?;
36 Ok(std::borrow::Cow::Owned(id))
37 }
38 }
39 }
40
41 pub fn credential_type(&self) -> CredentialType {
43 match self {
44 ClientIdentifier::Basic(_) => CredentialType::Basic,
45 ClientIdentifier::X509(_) => CredentialType::X509,
46 }
47 }
48}