use openmls::credentials::{BasicCredential, CredentialWithKey};
use openmls_basic_credential::SignatureKeyPair;
use crate::{
identity::Identity,
mls_crypto::{MlsError, service::CIPHERSUITE},
};
#[derive(Debug)]
pub struct MlsCredentials {
credential: CredentialWithKey,
signer: SignatureKeyPair,
}
impl MlsCredentials {
pub fn from_identity<I: Identity + ?Sized>(identity: &I) -> Result<Self, MlsError> {
let credential = BasicCredential::new(identity.identity_bytes().to_vec());
let signer = SignatureKeyPair::new(CIPHERSUITE.signature_algorithm())?;
Ok(Self {
credential: CredentialWithKey {
credential: credential.into(),
signature_key: signer.to_public_vec().into(),
},
signer,
})
}
pub fn credential(&self) -> &CredentialWithKey {
&self.credential
}
pub fn signer(&self) -> &SignatureKeyPair {
&self.signer
}
}