Struct Client
pub struct Client<Provider>where
Provider: OpenMlsProvider,{
pub identity: Vec<u8>,
pub credentials: HashMap<Ciphersuite, CredentialWithKey>,
pub provider: Provider,
pub groups: RwLock<HashMap<GroupId, MlsGroup>>,
}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§
§impl<Provider> Client<Provider>where
Provider: OpenMlsProvider,
impl<Provider> Client<Provider>where
Provider: OpenMlsProvider,
pub fn get_fresh_key_package(
&self,
ciphersuite: Ciphersuite,
) -> Result<KeyPackage, ClientError<<Provider as OpenMlsProvider>::StorageError>>
pub fn get_fresh_key_package( &self, ciphersuite: Ciphersuite, ) -> Result<KeyPackage, ClientError<<Provider as OpenMlsProvider>::StorageError>>
Generate a fresh key package and return it.
The first ciphersuite determines the
credential used to generate the KeyPackage.
pub fn create_group(
&self,
mls_group_create_config: MlsGroupCreateConfig,
ciphersuite: Ciphersuite,
) -> Result<GroupId, ClientError<<Provider as OpenMlsProvider>::StorageError>>
pub fn create_group( &self, mls_group_create_config: MlsGroupCreateConfig, ciphersuite: Ciphersuite, ) -> Result<GroupId, ClientError<<Provider as OpenMlsProvider>::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.
pub fn join_group(
&self,
mls_group_config: MlsGroupJoinConfig,
welcome: Welcome,
ratchet_tree: Option<RatchetTreeIn>,
) -> Result<(), ClientError<<Provider as OpenMlsProvider>::StorageError>>
pub fn join_group( &self, mls_group_config: MlsGroupJoinConfig, welcome: Welcome, ratchet_tree: Option<RatchetTreeIn>, ) -> Result<(), ClientError<<Provider as OpenMlsProvider>::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.
pub fn receive_messages_for_group<AS>(
&self,
message: &ProtocolMessage,
sender_id: &[u8],
authentication_service: &AS,
) -> Result<(), ClientError<<Provider as OpenMlsProvider>::StorageError>>
pub fn receive_messages_for_group<AS>( &self, message: &ProtocolMessage, sender_id: &[u8], authentication_service: &AS, ) -> Result<(), ClientError<<Provider as OpenMlsProvider>::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.
pub fn get_members_of_group(
&self,
group_id: &GroupId,
) -> Result<Vec<Member>, ClientError<<Provider as OpenMlsProvider>::StorageError>>
pub fn get_members_of_group( &self, group_id: &GroupId, ) -> Result<Vec<Member>, ClientError<<Provider as OpenMlsProvider>::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.
pub fn self_update(
&self,
action_type: ActionType,
group_id: &GroupId,
leaf_node_parameters: LeafNodeParameters,
) -> Result<(MlsMessageOut, Option<Welcome>, Option<GroupInfo>), ClientError<<Provider as OpenMlsProvider>::StorageError>>
pub fn self_update( &self, action_type: ActionType, group_id: &GroupId, leaf_node_parameters: LeafNodeParameters, ) -> Result<(MlsMessageOut, Option<Welcome>, Option<GroupInfo>), ClientError<<Provider as OpenMlsProvider>::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.
pub fn add_members(
&self,
action_type: ActionType,
group_id: &GroupId,
key_packages: &[KeyPackage],
) -> Result<(Vec<MlsMessageOut>, Option<Welcome>, Option<GroupInfo>), ClientError<<Provider as OpenMlsProvider>::StorageError>>
pub fn add_members( &self, action_type: ActionType, group_id: &GroupId, key_packages: &[KeyPackage], ) -> Result<(Vec<MlsMessageOut>, Option<Welcome>, Option<GroupInfo>), ClientError<<Provider as OpenMlsProvider>::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.
pub fn remove_members(
&self,
action_type: ActionType,
group_id: &GroupId,
targets: &[LeafNodeIndex],
) -> Result<(Vec<MlsMessageOut>, Option<Welcome>, Option<GroupInfo>), ClientError<<Provider as OpenMlsProvider>::StorageError>>
pub fn remove_members( &self, action_type: ActionType, group_id: &GroupId, targets: &[LeafNodeIndex], ) -> Result<(Vec<MlsMessageOut>, Option<Welcome>, Option<GroupInfo>), ClientError<<Provider as OpenMlsProvider>::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> Conv for T
impl<T> Conv for T
§impl<T> Declassify for T
impl<T> Declassify for T
type Declassified = T
fn declassify(self) -> T
§impl<T> FmtForward for T
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
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§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.