pub struct Client<Provider: OpenMlsProvider> {
pub identity: Vec<u8>,
pub credentials: HashMap<Ciphersuite, CredentialWithKey>,
pub provider: Provider,
pub groups: RwLock<HashMap<GroupId, MlsGroup>>,
}test-utils) only.Expand description
The client contains the necessary state for a client in the context of MLS.
It contains the group states, as well as a reference to a KeyStore
containing its CredentialWithKeys. The key_package_bundles field
contains generated KeyPackageBundles that are waiting to be used for new
groups.
Fields§
§identity: Vec<u8>Name of the client.
credentials: HashMap<Ciphersuite, CredentialWithKey>Ciphersuites supported by the client.
provider: Provider§groups: RwLock<HashMap<GroupId, MlsGroup>>Implementations§
Source§impl<Provider: OpenMlsProvider> Client<Provider>
impl<Provider: OpenMlsProvider> Client<Provider>
Sourcepub fn get_fresh_key_package(
&self,
ciphersuite: Ciphersuite,
) -> Result<KeyPackage, ClientError<Provider::StorageError>>
pub fn get_fresh_key_package( &self, ciphersuite: Ciphersuite, ) -> Result<KeyPackage, ClientError<Provider::StorageError>>
Generate a fresh key package and return it.
The first ciphersuite determines the
credential used to generate the KeyPackage.
Sourcepub fn create_group(
&self,
mls_group_create_config: MlsGroupCreateConfig,
ciphersuite: Ciphersuite,
) -> Result<GroupId, ClientError<Provider::StorageError>>
pub fn create_group( &self, mls_group_create_config: MlsGroupCreateConfig, ciphersuite: Ciphersuite, ) -> Result<GroupId, ClientError<Provider::StorageError>>
Create a group with the given MlsGroupCreateConfig and Ciphersuite, and return the created GroupId.
Returns an error if the client doesn’t support the ciphersuite.
Sourcepub fn join_group(
&self,
mls_group_config: MlsGroupJoinConfig,
welcome: Welcome,
ratchet_tree: Option<RatchetTreeIn>,
) -> Result<(), ClientError<Provider::StorageError>>
pub fn join_group( &self, mls_group_config: MlsGroupJoinConfig, welcome: Welcome, ratchet_tree: Option<RatchetTreeIn>, ) -> Result<(), ClientError<Provider::StorageError>>
Join a group based on the given welcome and ratchet_tree. The group
is created with the given MlsGroupCreateConfig. Throws an error if no
KeyPackage exists matching the Welcome, if the client doesn’t
support the ciphersuite, or if an error occurs processing the Welcome.
Sourcepub fn receive_messages_for_group<AS: Fn(&Credential) -> bool>(
&self,
message: &ProtocolMessage,
sender_id: &[u8],
authentication_service: &AS,
) -> Result<(), ClientError<Provider::StorageError>>
pub fn receive_messages_for_group<AS: Fn(&Credential) -> bool>( &self, message: &ProtocolMessage, sender_id: &[u8], authentication_service: &AS, ) -> Result<(), ClientError<Provider::StorageError>>
Have the client process the given messages. Returns an error if an error occurs during message processing or if no group exists for one of the messages.
Sourcepub fn get_members_of_group(
&self,
group_id: &GroupId,
) -> Result<Vec<Member>, ClientError<Provider::StorageError>>
pub fn get_members_of_group( &self, group_id: &GroupId, ) -> Result<Vec<Member>, ClientError<Provider::StorageError>>
Get the credential and the index of each group member of the group with the given id. Returns an error if no group exists with the given group id.
Sourcepub fn self_update(
&self,
action_type: ActionType,
group_id: &GroupId,
leaf_node_parameters: LeafNodeParameters,
) -> Result<(MlsMessageOut, Option<Welcome>, Option<GroupInfo>), ClientError<Provider::StorageError>>
pub fn self_update( &self, action_type: ActionType, group_id: &GroupId, leaf_node_parameters: LeafNodeParameters, ) -> Result<(MlsMessageOut, Option<Welcome>, Option<GroupInfo>), ClientError<Provider::StorageError>>
Have the client either propose or commit (depending on the
action_type) a self update in the group with the given group id.
Optionally, a HpkeKeyPair can be provided, which the client will
update their leaf with. Returns an error if no group with the given
group id can be found or if an error occurs while creating the update.
Sourcepub fn add_members(
&self,
action_type: ActionType,
group_id: &GroupId,
key_packages: &[KeyPackage],
) -> Result<(Vec<MlsMessageOut>, Option<Welcome>, Option<GroupInfo>), ClientError<Provider::StorageError>>
pub fn add_members( &self, action_type: ActionType, group_id: &GroupId, key_packages: &[KeyPackage], ) -> Result<(Vec<MlsMessageOut>, Option<Welcome>, Option<GroupInfo>), ClientError<Provider::StorageError>>
Have the client either propose or commit (depending on the
action_type) adding the clients with the given KeyPackages to the
group with the given group id. Returns an error if no group with the
given group id can be found or if an error occurs while performing the
add operation.
Sourcepub fn remove_members(
&self,
action_type: ActionType,
group_id: &GroupId,
targets: &[LeafNodeIndex],
) -> Result<(Vec<MlsMessageOut>, Option<Welcome>, Option<GroupInfo>), ClientError<Provider::StorageError>>
pub fn remove_members( &self, action_type: ActionType, group_id: &GroupId, targets: &[LeafNodeIndex], ) -> Result<(Vec<MlsMessageOut>, Option<Welcome>, Option<GroupInfo>), ClientError<Provider::StorageError>>
Have the client either propose or commit (depending on the
action_type) removing the clients with the given indices from the
group with the given group id. Returns an error if no group with the
given group id can be found or if an error occurs while performing the
remove operation.
Trait Implementations§
Auto Trait Implementations§
impl<Provider> !Freeze for Client<Provider>
impl<Provider> RefUnwindSafe for Client<Provider>where
Provider: RefUnwindSafe,
impl<Provider> Send for Client<Provider>where
Provider: Send,
impl<Provider> Sync for Client<Provider>where
Provider: Sync,
impl<Provider> Unpin for Client<Provider>where
Provider: Unpin,
impl<Provider> UnwindSafe for Client<Provider>where
Provider: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> Classify for T
impl<T> Classify for T
type Classified = T
fn classify(self) -> T
§impl<T> Declassify for T
impl<T> Declassify for T
type Declassified = T
fn declassify(self) -> T
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more