Trait core_crypto::CoreCryptoCallbacks

source ·
pub trait CoreCryptoCallbacks:
    Debug
    + Send
    + Sync {
    // Required methods
    fn authorize<'life0, 'async_trait>(
        &'life0 self,
        conversation_id: ConversationId,
        client_id: ClientId,
    ) -> Pin<Box<dyn Future<Output = bool> + Send + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait;
    fn user_authorize<'life0, 'async_trait>(
        &'life0 self,
        conversation_id: ConversationId,
        external_client_id: ClientId,
        existing_clients: Vec<ClientId>,
    ) -> Pin<Box<dyn Future<Output = bool> + Send + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait;
    fn client_is_existing_group_user<'life0, 'async_trait>(
        &'life0 self,
        conversation_id: ConversationId,
        client_id: ClientId,
        existing_clients: Vec<ClientId>,
        parent_conversation_clients: Option<Vec<ClientId>>,
    ) -> Pin<Box<dyn Future<Output = bool> + Send + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait;
}
Expand description

Client callbacks in order to Core Crypto to verify user authorization

This trait is used to provide callback mechanisms for the MlsCentral struct, for example for operations like adding or removing memebers that can be authorized through a caller provided authorization method.

Required Methods§

source

fn authorize<'life0, 'async_trait>( &'life0 self, conversation_id: ConversationId, client_id: ClientId, ) -> Pin<Box<dyn Future<Output = bool> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Function responsible for authorizing an operation. Returns true if the operation is authorized.

§Arguments
  • conversation_id - id of the group/conversation
  • client_id - id of the client to authorize
source

fn user_authorize<'life0, 'async_trait>( &'life0 self, conversation_id: ConversationId, external_client_id: ClientId, existing_clients: Vec<ClientId>, ) -> Pin<Box<dyn Future<Output = bool> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Function responsible for authorizing an operation for a given user. Use external_client_id & existing_clients to get all the ‘client_id’ belonging to the same user as external_client_id. Then, given those client ids, verify that at least one has the right role (is authorized) exactly like it’s done in Self::authorize Returns true if the operation is authorized.

§Arguments
  • conversation_id - id of the group/conversation
  • external_client_id - id a client external to the MLS group
  • existing_clients - all the clients in the MLS group
source

fn client_is_existing_group_user<'life0, 'async_trait>( &'life0 self, conversation_id: ConversationId, client_id: ClientId, existing_clients: Vec<ClientId>, parent_conversation_clients: Option<Vec<ClientId>>, ) -> Pin<Box<dyn Future<Output = bool> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Validates if the given client_id belongs to one of the provided existing_clients This basically allows to defer the client ID parsing logic to the caller - because CoreCrypto is oblivious to such things

§Arguments
  • conversation_id - ID of the conversation
  • client_id - client ID of the client referenced within the sent proposal
  • existing_clients - all the clients in the MLS group

Implementors§