core_crypto/transaction_context/
key_package.rs1use openmls::prelude::{KeyPackage, KeyPackageRef};
4
5use crate::{
6 RecursiveError,
7 prelude::{MlsCiphersuite, MlsCredentialType},
8};
9
10use super::{Result, TransactionContext};
11
12impl TransactionContext {
13 pub async fn get_or_create_client_keypackages(
27 &self,
28 ciphersuite: MlsCiphersuite,
29 credential_type: MlsCredentialType,
30 amount_requested: usize,
31 ) -> Result<Vec<KeyPackage>> {
32 let session = self.session().await?;
33 session
34 .request_key_packages(
35 amount_requested,
36 ciphersuite,
37 credential_type,
38 &self.mls_provider().await?,
39 )
40 .await
41 .map_err(RecursiveError::mls_client("requesting key packages"))
42 .map_err(Into::into)
43 }
44
45 pub async fn client_valid_key_packages_count(
47 &self,
48 ciphersuite: MlsCiphersuite,
49 credential_type: MlsCredentialType,
50 ) -> Result<usize> {
51 let session = self.session().await?;
52 session
53 .valid_keypackages_count(&self.mls_provider().await?, ciphersuite, credential_type)
54 .await
55 .map_err(RecursiveError::mls_client("counting valid key packages"))
56 .map_err(Into::into)
57 }
58
59 pub async fn delete_keypackages(&self, refs: impl IntoIterator<Item = KeyPackageRef>) -> Result<()> {
62 let mut session = self.session().await?;
63 session
64 .prune_keypackages_and_credential(&self.mls_provider().await?, refs)
65 .await
66 .map_err(RecursiveError::mls_client("pruning key packages and credential"))
67 .map_err(Into::into)
68 }
69}