use openmls_traits::signatures::Signer;
use crate::{group::errors::ExporterError, schedule::EpochAuthenticator, storage::OpenMlsProvider};
use super::*;
impl MlsGroup {
pub fn export_secret<Provider: OpenMlsProvider>(
&self,
provider: &Provider,
label: &str,
context: &[u8],
key_length: usize,
) -> Result<Vec<u8>, ExportSecretError<Provider::StorageError>> {
let crypto = provider.crypto();
if self.is_active() {
Ok(self
.group
.export_secret(crypto, label, context, key_length)
.map_err(|e| match e {
ExporterError::LibraryError(e) => e.into(),
ExporterError::KeyLengthTooLong => ExportSecretError::KeyLengthTooLong,
})?)
} else {
Err(ExportSecretError::GroupStateError(
MlsGroupStateError::UseAfterEviction,
))
}
}
pub fn epoch_authenticator(&self) -> &EpochAuthenticator {
self.group.epoch_authenticator()
}
pub fn resumption_psk_secret(&self) -> &ResumptionPskSecret {
self.group.resumption_psk_secret()
}
pub fn get_past_resumption_psk(&self, epoch: GroupEpoch) -> Option<&ResumptionPskSecret> {
self.group.resumption_psk_store.get(epoch)
}
pub fn export_group_info<Provider: OpenMlsProvider>(
&self,
provider: &Provider,
signer: &impl Signer,
with_ratchet_tree: bool,
) -> Result<MlsMessageOut, ExportGroupInfoError<Provider::StorageError>> {
Ok(self
.group
.export_group_info(provider.crypto(), signer, with_ratchet_tree)?
.into())
}
}