Client

Struct Client 

Source
pub struct Client<Provider: OpenMlsProvider> {
    pub identity: Vec<u8>,
    pub credentials: HashMap<Ciphersuite, CredentialWithKey>,
    pub provider: Provider,
    pub groups: RwLock<HashMap<GroupId, MlsGroup>>,
}
Available on (32-bit or 64-bit) and (crate features 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>

Source

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.

Source

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.

Source

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.

Source

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.

Source

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.

Source

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.

Source

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.

Source

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.

Source

pub fn identity(&self, group_id: &GroupId) -> Option<Vec<u8>>

Get the identity of this client in the given group.

Trait Implementations§

Source§

impl<Provider: Debug + OpenMlsProvider> Debug for Client<Provider>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

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> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> Classify for T

§

type Classified = T

§

fn classify(self) -> T

§

impl<T> Declassify for T

§

type Declassified = T

§

fn declassify(self) -> T

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V