Struct core_crypto::proteus::ProteusCentral

source ·
pub struct ProteusCentral { /* private fields */ }
Expand description

Proteus counterpart of crate::mls::MlsCentral The big difference is that ProteusCentral doesn’t own its own keystore but must borrow it from the outside. Whether it’s exclusively for this struct’s purposes or it’s shared with our main struct, crate::mls::MlsCentral

Implementations§

source§

impl ProteusCentral

source

pub async fn try_new(keystore: &CryptoKeystore) -> CryptoResult<Self>

Initializes the ProteusCentral

source

pub async fn reload_sessions( &mut self, keystore: &CryptoKeystore, ) -> CryptoResult<()>

Restore proteus sessions from disk

source

pub async fn session_from_prekey( &mut self, session_id: &str, key: &[u8], ) -> CryptoResult<Arc<RwLock<ProteusConversationSession>>>

Creates a new session from a prekey

source

pub async fn session_from_message( &mut self, keystore: &mut CryptoKeystore, session_id: &str, envelope: &[u8], ) -> CryptoResult<(Arc<RwLock<ProteusConversationSession>>, Vec<u8>)>

Creates a new proteus Session from a received message

source

pub async fn session_save( &mut self, keystore: &mut CryptoKeystore, session_id: &str, ) -> CryptoResult<()>

Persists a session in store

Note: This isn’t usually needed as persisting sessions happens automatically when decrypting/encrypting messages and initializing Sessions

source

pub async fn session_delete( &mut self, keystore: &CryptoKeystore, session_id: &str, ) -> CryptoResult<()>

Deletes a session in the store

source

pub async fn session( &mut self, session_id: &str, keystore: &mut CryptoKeystore, ) -> CryptoResult<Option<Arc<RwLock<ProteusConversationSession>>>>

Session accessor

source

pub async fn session_exists( &mut self, session_id: &str, keystore: &mut CryptoKeystore, ) -> bool

Session exists

source

pub async fn decrypt( &mut self, keystore: &mut CryptoKeystore, session_id: &str, ciphertext: &[u8], ) -> CryptoResult<Vec<u8>>

Decrypt a proteus message for an already existing session Note: This cannot be used for handshake messages, see ProteusCentral::session_from_message

source

pub async fn encrypt( &mut self, keystore: &mut CryptoKeystore, session_id: &str, plaintext: &[u8], ) -> CryptoResult<Vec<u8>>

Encrypt a message for a session

source

pub async fn encrypt_batched( &mut self, keystore: &mut CryptoKeystore, sessions: &[impl AsRef<str>], plaintext: &[u8], ) -> CryptoResult<HashMap<String, Vec<u8>>>

Encrypts a message for a list of sessions This is mainly used for conversations with multiple clients, this allows to minimize FFI roundtrips

source

pub async fn new_prekey( &self, id: u16, keystore: &CryptoKeystore, ) -> CryptoResult<Vec<u8>>

Generates a new Proteus PreKey, stores it in the keystore and returns a serialized PreKeyBundle to be consumed externally

source

pub async fn new_prekey_auto( &self, keystore: &CryptoKeystore, ) -> CryptoResult<(u16, Vec<u8>)>

Generates a new Proteus Prekey, with an automatically auto-incremented ID.

See ProteusCentral::new_prekey

source

pub fn last_resort_prekey_id() -> u16

Returns the Proteus last resort prekey ID (u16::MAX = 65535 = 0xFFFF)

source

pub async fn last_resort_prekey( &self, keystore: &CryptoKeystore, ) -> CryptoResult<Vec<u8>>

Returns the Proteus last resort prekey If it cannot be found, one will be created.

source

pub fn identity(&self) -> &IdentityKeyPair

Proteus identity keypair

source

pub fn fingerprint(&self) -> String

Proteus Public key hex-encoded fingerprint

source

pub async fn fingerprint_local( &mut self, session_id: &str, keystore: &mut CryptoKeystore, ) -> CryptoResult<String>

Proteus Session local hex-encoded fingerprint

§Errors

When the session is not found

source

pub async fn fingerprint_remote( &mut self, session_id: &str, keystore: &mut CryptoKeystore, ) -> CryptoResult<String>

Proteus Session remote hex-encoded fingerprint

§Errors

When the session is not found

source

pub fn fingerprint_prekeybundle(prekey: &[u8]) -> CryptoResult<String>

Hex-encoded fingerprint of the given prekey

§Errors

If the prekey cannot be deserialized

source

pub async fn cryptobox_migrate( keystore: &CryptoKeystore, path: &str, ) -> CryptoResult<()>

Cryptobox -> CoreCrypto migration

Trait Implementations§

source§

impl Debug for ProteusCentral

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<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T, UT> HandleAlloc<UT> for T
where T: Send + Sync,

§

fn new_handle(value: Arc<T>) -> Handle

Create a new handle for an Arc value Read more
§

unsafe fn clone_handle(handle: Handle) -> Handle

Clone a handle Read more
§

unsafe fn consume_handle(handle: Handle) -> Arc<T>

Consume a handle, getting back the initial Arc<> Read more
§

unsafe fn get_arc(handle: Handle) -> Arc<Self>

Get a clone of the Arc<> using a “borrowed” handle. Read more
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