core_crypto::mls::conversation

Struct ConversationGuard

Source
pub struct ConversationGuard { /* private fields */ }
Expand description

A Conversation Guard wraps a GroupStoreValue<MlsConversation>.

By doing so, it permits mutable accesses to the conversation. This in turn means that we don’t have to duplicate the entire MlsConversation API on CentralContext.

Implementations§

Source§

impl ConversationGuard

Source

pub async fn add_members( &mut self, key_packages: Vec<KeyPackageIn>, ) -> Result<NewCrlDistributionPoint>

Adds new members to the group/conversation

Source

pub async fn remove_members(&mut self, clients: &[ClientId]) -> Result<()>

Removes clients from the group/conversation.

§Arguments
  • id - group/conversation id
  • clients - list of client ids to be removed from the group
Source

pub async fn update_key_material(&mut self) -> Result<()>

Self updates the KeyPackage and automatically commits. Pending proposals will be commited.

§Arguments
  • conversation_id - the group/conversation id

see [MlsCentral::update_keying_material]

Source

pub async fn e2ei_rotate(&mut self, cb: Option<&CredentialBundle>) -> Result<()>

Send a commit in a conversation for changing the credential. Requires first having enrolled a new X509 certificate with either crate::context::CentralContext::e2ei_new_activation_enrollment or crate::context::CentralContext::e2ei_new_rotate_enrollment and having saved it with crate::context::CentralContext::save_x509_credential.

Source

pub async fn commit_pending_proposals(&mut self) -> Result<()>

Commits all pending proposals of the group

Source§

impl ConversationGuard

Source

pub async fn decrypt_message( &mut self, message: impl AsRef<[u8]>, ) -> Result<MlsConversationDecryptMessage>

Deserializes a TLS-serialized message, then processes it

§Arguments
  • message - the encrypted message as a byte array
§Returns

An MlsConversationDecryptMessage

§Errors

If a message has been buffered, this will be indicated by an error. Other errors are originating from OpenMls and the KeyStore

Source§

impl ConversationGuard

Source

pub async fn encrypt_message( &mut self, message: impl AsRef<[u8]>, ) -> Result<Vec<u8>>

Encrypts a raw payload then serializes it to the TLS wire format Can only be called when there is no pending commit and no pending proposal.

§Arguments
  • message - the message as a byte array
§Return type

This method will return an encrypted TLS serialized message.

§Errors

If the conversation can’t be found, an error will be returned. Other errors are originating from OpenMls and the KeyStore

Source§

impl ConversationGuard

Source

pub async fn clear_pending_proposal( &mut self, proposal_ref: MlsProposalRef, ) -> Result<()>

Allows to remove a pending (uncommitted) proposal. Use this when backend rejects the proposal you just sent e.g. if permissions have changed meanwhile.

CAUTION: only use this when you had an explicit response from the Delivery Service e.g. 403 or 409. Do not use otherwise e.g. 5xx responses, timeout etc..

§Arguments
  • conversation_id - the group/conversation id
  • proposal_ref - unique proposal identifier which is present in crate::prelude::MlsProposalBundle and returned from all operation creating a proposal
§Errors

When the conversation is not found or the proposal reference does not identify a proposal in the local pending proposal store

Source§

impl ConversationGuard

Source

pub async fn wipe(&mut self) -> Result<()>

Destroys a group locally

§Errors

KeyStore errors, such as IO

Source

pub async fn mark_as_child_of( &mut self, parent_id: &ConversationId, ) -> Result<()>

Marks this conversation as child of another. Prerequisite: Must be a member of the parent group, and it must exist in the keystore

Trait Implementations§

Source§

impl Debug for ConversationGuard

Source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

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

impl<'a, T> Conversation<'a> for T
where T: ConversationWithMls<'a>,

Source§

fn epoch<'async_trait>( &'a self, ) -> Pin<Box<dyn Future<Output = u64> + Send + 'async_trait>>
where Self: Sync + 'async_trait, 'a: 'async_trait,

Returns the epoch of a given conversation
Source§

fn ciphersuite<'async_trait>( &'a self, ) -> Pin<Box<dyn Future<Output = MlsCiphersuite> + Send + 'async_trait>>
where Self: Sync + 'async_trait, 'a: 'async_trait,

Returns the ciphersuite of a given conversation
Source§

fn export_secret_key<'async_trait>( &'a self, key_length: usize, ) -> Pin<Box<dyn Future<Output = Result<Vec<u8>>> + Send + 'async_trait>>
where Self: Sync + 'async_trait, 'a: 'async_trait,

Derives a new key from the one in the group, to be used elsewhere. Read more
Source§

fn get_client_ids<'async_trait>( &'a self, ) -> Pin<Box<dyn Future<Output = Vec<ClientId>> + Send + 'async_trait>>
where Self: Sync + 'async_trait, 'a: 'async_trait,

Exports the clients from a conversation Read more
Source§

fn get_external_sender<'async_trait>( &'a self, ) -> Pin<Box<dyn Future<Output = Result<Vec<u8>>> + Send + 'async_trait>>
where Self: Sync + 'async_trait, 'a: 'async_trait,

Returns the raw public key of the single external sender present in this group. This should be used to initialize a subconversation
Source§

fn e2ei_conversation_state<'async_trait>( &'a self, ) -> Pin<Box<dyn Future<Output = Result<E2eiConversationState>> + Send + 'async_trait>>
where Self: Sync + 'async_trait, 'a: 'async_trait,

Indicates when to mark a conversation as not verified i.e. when not all its members have a X509 Credential generated by Wire’s end-to-end identity enrollment
Source§

fn get_device_identities<'life0, 'async_trait>( &'a self, device_ids: &'life0 [ClientId], ) -> Pin<Box<dyn Future<Output = Result<Vec<WireIdentity>>> + Send + 'async_trait>>
where Self: Sync + 'async_trait, 'a: 'async_trait, 'life0: 'async_trait,

From a given conversation, get the identity of the members supplied. Identity is only present for members with a Certificate Credential (after turning on end-to-end identity). If no member has a x509 certificate, it will return an empty Vec
Source§

fn get_user_identities<'life0, 'async_trait>( &'a self, user_ids: &'life0 [String], ) -> Pin<Box<dyn Future<Output = Result<HashMap<String, Vec<WireIdentity>>>> + Send + 'async_trait>>
where Self: Sync + 'async_trait, 'a: 'async_trait, 'life0: 'async_trait,

From a given conversation, get the identity of the users (device holders) supplied. Identity is only present for devices with a Certificate Credential (after turning on end-to-end identity). If no member has a x509 certificate, it will return an empty Vec. Read more
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
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

§

impl<T> ErasedDestructor for T
where T: 'static,

§

impl<T> MaybeSendSync for T