[−][src]Struct matrix_sdk_crypto::OlmMachine
State machine implementation of the Olm/Megolm encryption protocol used for Matrix end to end encryption.
Implementations
impl OlmMachine[src]
pub fn new(user_id: &UserId, device_id: &DeviceId) -> Self[src]
Create a new memory based OlmMachine.
The created machine will keep the encryption keys only in memory and once the object is dropped the keys will be lost.
Arguments
-
user_id- The unique id of the user that owns this machine. -
device_id- The unique id of the device that owns this machine.
pub async fn new_with_store(
user_id: UserId,
device_id: DeviceIdBox,
store: Box<dyn CryptoStore>
) -> StoreResult<Self>[src]
user_id: UserId,
device_id: DeviceIdBox,
store: Box<dyn CryptoStore>
) -> StoreResult<Self>
Create a new OlmMachine with the given CryptoStore.
The created machine will keep the encryption keys only in memory and once the object is dropped the keys will be lost.
If the store already contains encryption keys for the given user/device pair those will be re-used. Otherwise new ones will be created and stored.
Arguments
-
user_id- The unique id of the user that owns this machine. -
device_id- The unique id of the device that owns this machine. -
store- ACryptostoreimplementation that will be used to store the encryption keys.
pub async fn new_with_default_store(
user_id: &UserId,
device_id: &DeviceId,
path: impl AsRef<Path>,
passphrase: &str
) -> StoreResult<Self>[src]
user_id: &UserId,
device_id: &DeviceId,
path: impl AsRef<Path>,
passphrase: &str
) -> StoreResult<Self>
sqlite_cryptostore only.Create a new machine with the default crypto store.
The default store uses a SQLite database to store the encryption keys.
Arguments
-
user_id- The unique id of the user that owns this machine. -
device_id- The unique id of the device that owns this machine.
pub fn user_id(&self) -> &UserId[src]
The unique user id that owns this OlmMachine instance.
pub fn device_id(&self) -> &DeviceId[src]
The unique device id that identifies this OlmMachine.
pub fn identity_keys(&self) -> &IdentityKeys[src]
Get the public parts of our Olm identity keys.
pub async fn outgoing_requests(&self) -> Vec<OutgoingRequest>[src]
Get the outgoing requests that need to be sent out.
This returns a list of OutGoingRequest, those requests need to be sent
out to the server and the responses need to be passed back to the state
machine using mark_request_as_sent.
pub async fn mark_request_as_sent<'a>(
&self,
request_id: &Uuid,
response: impl Into<IncomingResponse<'a>>
) -> Result<(), OlmError>[src]
&self,
request_id: &Uuid,
response: impl Into<IncomingResponse<'a>>
) -> Result<(), OlmError>
Mark the request with the given request id as sent.
Arguments
-
request_id- The unique id of the request that was sent out. This is needed to couple the response with the now sent out request. -
response- The response that was received from the server after the outgoing request was sent out.
pub async fn bootstrap_cross_signing(
&self,
reset: bool
) -> StoreResult<(UploadSigningKeysRequest, UploadSignaturesRequest)>[src]
&self,
reset: bool
) -> StoreResult<(UploadSigningKeysRequest, UploadSignaturesRequest)>
Create a new cross signing identity and get the upload request to push the new public keys to the server.
Warning: This will delete any existing cross signing keys that might exist on the server and thus will reset the trust between all the devices.
Uploading these keys will require user interactive auth.
pub async fn get_missing_sessions(
&self,
users: &mut impl Iterator<Item = &UserId>
) -> Result<Option<(Uuid, KeysClaimRequest)>, OlmError>[src]
&self,
users: &mut impl Iterator<Item = &UserId>
) -> Result<Option<(Uuid, KeysClaimRequest)>, OlmError>
Get the a key claiming request for the user/device pairs that we are missing Olm sessions for.
Returns None if no key claiming request needs to be sent out.
Sessions need to be established between devices so group sessions for a room can be shared with them.
This should be called every time a group session needs to be shared as well as between sync calls. After a sync some devices may request room keys without us having a valid Olm session with them, making it impossible to server the room key request, thus it's necessary to check for missing sessions between sync as well.
Note: Care should be taken that only one such request at a time is in flight, e.g. using a lock.
The response of a successful key claiming requests needs to be passed to
the OlmMachine with the mark_request_as_sent.
Arguments
users - The list of users that we should check if we lack a session
with one of their devices. This can be an empty iterator when calling
this method between sync requests.
pub async fn encrypt(
&self,
room_id: &RoomId,
content: AnyMessageEventContent
) -> Result<EncryptedEventContent, MegolmError>[src]
&self,
room_id: &RoomId,
content: AnyMessageEventContent
) -> Result<EncryptedEventContent, MegolmError>
Encrypt a room message for the given room.
Beware that a group session needs to be shared before this method can be
called using the share_group_session method.
Since group sessions can expire or become invalid if the room membership
changes client authors should check with the
should_share_group_session method if a new group session needs to
be shared.
Arguments
-
room_id- The id of the room for which the message should be encrypted. -
content- The plaintext content of the message that should be encrypted.
Panics
Panics if a group session for the given room wasn't shared beforehand.
pub fn should_share_group_session(&self, room_id: &RoomId) -> bool[src]
Should the client share a group session for the given room.
Returns true if a session needs to be shared before room messages can be encrypted, false if one is already shared and ready to encrypt room messages.
This should be called every time a new room message wants to be sent out since group sessions can expire at any time.
pub fn invalidate_group_session(&self, room_id: &RoomId) -> bool[src]
Invalidate the currently active outbound group session for the given room.
Returns true if a session was invalidated, false if there was no session to invalidate.
pub async fn share_group_session(
&self,
room_id: &RoomId,
users: impl Iterator<Item = &UserId>,
encryption_settings: impl Into<EncryptionSettings>
) -> Result<Vec<Arc<ToDeviceRequest>>, OlmError>[src]
&self,
room_id: &RoomId,
users: impl Iterator<Item = &UserId>,
encryption_settings: impl Into<EncryptionSettings>
) -> Result<Vec<Arc<ToDeviceRequest>>, OlmError>
Get to-device requests to share a group session with users in a room.
Arguments
room_id - The room id of the room where the group session will be
used.
users - The list of users that should receive the group session.
pub fn get_verification(&self, flow_id: &str) -> Option<Sas>[src]
Get a Sas verification object with the given flow id.
pub async fn receive_sync_response(
&self,
response: &mut SyncResponse
) -> Result<(), OlmError>[src]
&self,
response: &mut SyncResponse
) -> Result<(), OlmError>
Handle a sync response and update the internal state of the Olm machine.
This will decrypt to-device events but will not touch events in the room timeline.
To decrypt an event from the room timeline call decrypt_room_event.
Arguments
response- The sync latest sync response.
pub async fn decrypt_room_event(
&self,
event: &SyncMessageEvent<EncryptedEventContent>,
room_id: &RoomId
) -> Result<Raw<AnySyncRoomEvent>, MegolmError>[src]
&self,
event: &SyncMessageEvent<EncryptedEventContent>,
room_id: &RoomId
) -> Result<Raw<AnySyncRoomEvent>, MegolmError>
Decrypt an event from a room timeline.
Arguments
-
event- The event that should be decrypted. -
room_id- The ID of the room where the event was sent to.
pub async fn update_tracked_users(
&self,
users: impl IntoIterator<Item = &UserId>
)[src]
&self,
users: impl IntoIterator<Item = &UserId>
)
Update the tracked users.
Arguments
users- An iterator over user ids that should be marked for tracking.
This will mark users that weren't seen before for a key query and tracking.
If the user is already known to the Olm machine it will not be considered for a key query.
pub async fn get_device(
&self,
user_id: &UserId,
device_id: &DeviceId
) -> StoreResult<Option<Device>>[src]
&self,
user_id: &UserId,
device_id: &DeviceId
) -> StoreResult<Option<Device>>
Get a specific device of a user.
Arguments
-
user_id- The unique id of the user that the device belongs to. -
device_id- The unique id of the device.
Returns a Device if one is found and the crypto store didn't throw an
error.
Example
let device = machine.get_device(&alice, "DEVICEID".into()).await; println!("{:?}", device);
pub async fn get_user_devices(
&self,
user_id: &UserId
) -> StoreResult<UserDevices>[src]
&self,
user_id: &UserId
) -> StoreResult<UserDevices>
Get a map holding all the devices of an user.
Arguments
user_id- The unique id of the user that the devices belong to.
Example
let devices = machine.get_user_devices(&alice).await.unwrap(); for device in devices.devices() { println!("{:?}", device); }
pub async fn import_keys(
&self,
exported_keys: Vec<ExportedRoomKey>
) -> StoreResult<(usize, usize)>[src]
&self,
exported_keys: Vec<ExportedRoomKey>
) -> StoreResult<(usize, usize)>
Import the given room keys into our store.
Arguments
exported_keys- A list of previously exported keys that should be imported into our store. If we already have a better version of a key the key will not be imported.
Returns a tuple of numbers that represent the number of sessions that were imported and the total number of sessions that were found in the key export.
Examples
let exported_keys = decrypt_key_export(export, "1234").unwrap(); machine.import_keys(exported_keys).await.unwrap();
pub async fn export_keys(
&self,
predicate: impl FnMut(&InboundGroupSession) -> bool
) -> StoreResult<Vec<ExportedRoomKey>>[src]
&self,
predicate: impl FnMut(&InboundGroupSession) -> bool
) -> StoreResult<Vec<ExportedRoomKey>>
Export the keys that match the given predicate.
Arguments
predicate- A closure that will be called for every knownInboundGroupSession, which represents a room key. If the closure returnstruetheInboundGroupSessoinwill be included in the export, if the closure returnsfalseit will not be included.
Panics
This method will panic if it can't get enough randomness from the OS to encrypt the exported keys securely.
Examples
let room_id = room_id!("!test:localhost"); let exported_keys = machine.export_keys(|s| s.room_id() == &room_id).await.unwrap(); let encrypted_export = encrypt_key_export(&exported_keys, "1234", 1);
Trait Implementations
impl Clone for OlmMachine[src]
pub fn clone(&self) -> OlmMachine[src]
pub fn clone_from(&mut self, source: &Self)1.0.0[src]
impl Debug for OlmMachine[src]
Auto Trait Implementations
impl !RefUnwindSafe for OlmMachine[src]
impl Send for OlmMachine[src]
impl Sync for OlmMachine[src]
impl Unpin for OlmMachine[src]
impl !UnwindSafe for OlmMachine[src]
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized, [src]
T: 'static + ?Sized,
impl<T> AsyncTraitDeps for T where
T: Send + Sync + Debug, [src]
T: Send + Sync + Debug,
impl<T> Borrow<T> for T where
T: ?Sized, [src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized, [src]
T: ?Sized,
pub fn borrow_mut(&mut self) -> &mut T[src]
impl<T> Conv for T
impl<T> Conv for T
impl<T> FmtForward for T
pub fn fmt_binary(self) -> FmtBinary<Self> where
Self: Binary,
Self: Binary,
pub fn fmt_display(self) -> FmtDisplay<Self> where
Self: Display,
Self: Display,
pub fn fmt_lower_exp(self) -> FmtLowerExp<Self> where
Self: LowerExp,
Self: LowerExp,
pub fn fmt_lower_hex(self) -> FmtLowerHex<Self> where
Self: LowerHex,
Self: LowerHex,
pub fn fmt_octal(self) -> FmtOctal<Self> where
Self: Octal,
Self: Octal,
pub fn fmt_pointer(self) -> FmtPointer<Self> where
Self: Pointer,
Self: Pointer,
pub fn fmt_upper_exp(self) -> FmtUpperExp<Self> where
Self: UpperExp,
Self: UpperExp,
pub fn fmt_upper_hex(self) -> FmtUpperHex<Self> where
Self: UpperHex,
Self: UpperHex,
impl<T> From<T> for T[src]
impl<T> Instrument for T[src]
pub fn instrument(self, span: Span) -> Instrumented<Self>[src]
pub fn in_current_span(self) -> Instrumented<Self>[src]
impl<T, U> Into<U> for T where
U: From<T>, [src]
U: From<T>,
impl<T> Pipe for T where
T: ?Sized,
T: ?Sized,
pub fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
pub fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R where
R: 'a,
R: 'a,
pub fn pipe_ref_mut<'a, R>(
&'a mut self,
func: impl FnOnce(&'a mut Self) -> R
) -> R where
R: 'a,
&'a mut self,
func: impl FnOnce(&'a mut Self) -> R
) -> R where
R: 'a,
pub fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R where
Self: Borrow<B>,
R: 'a,
B: 'a + ?Sized,
Self: Borrow<B>,
R: 'a,
B: 'a + ?Sized,
pub fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R
) -> R where
Self: BorrowMut<B>,
R: 'a,
B: 'a + ?Sized,
&'a mut self,
func: impl FnOnce(&'a mut B) -> R
) -> R where
Self: BorrowMut<B>,
R: 'a,
B: 'a + ?Sized,
pub fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R where
Self: AsRef<U>,
R: 'a,
U: 'a + ?Sized,
Self: AsRef<U>,
R: 'a,
U: 'a + ?Sized,
pub fn pipe_as_mut<'a, U, R>(
&'a mut self,
func: impl FnOnce(&'a mut U) -> R
) -> R where
Self: AsMut<U>,
R: 'a,
U: 'a + ?Sized,
&'a mut self,
func: impl FnOnce(&'a mut U) -> R
) -> R where
Self: AsMut<U>,
R: 'a,
U: 'a + ?Sized,
pub fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R where
Self: Deref<Target = T>,
T: 'a + ?Sized,
R: 'a,
Self: Deref<Target = T>,
T: 'a + ?Sized,
R: 'a,
pub fn pipe_deref_mut<'a, T, R>(
&'a mut self,
func: impl FnOnce(&'a mut T) -> R
) -> R where
Self: DerefMut<Target = T> + Deref,
T: 'a + ?Sized,
R: 'a,
&'a mut self,
func: impl FnOnce(&'a mut T) -> R
) -> R where
Self: DerefMut<Target = T> + Deref,
T: 'a + ?Sized,
R: 'a,
impl<T> Pipe for T
impl<T> PipeAsRef for T
pub fn pipe_as_ref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R where
Self: AsRef<T>,
T: 'a,
R: 'a,
Self: AsRef<T>,
T: 'a,
R: 'a,
pub fn pipe_as_mut<'a, T, R>(
&'a mut self,
func: impl FnOnce(&'a mut T) -> R
) -> R where
Self: AsMut<T>,
T: 'a,
R: 'a,
&'a mut self,
func: impl FnOnce(&'a mut T) -> R
) -> R where
Self: AsMut<T>,
T: 'a,
R: 'a,
impl<T> PipeBorrow for T
pub fn pipe_borrow<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R where
Self: Borrow<T>,
T: 'a,
R: 'a,
Self: Borrow<T>,
T: 'a,
R: 'a,
pub fn pipe_borrow_mut<'a, T, R>(
&'a mut self,
func: impl FnOnce(&'a mut T) -> R
) -> R where
Self: BorrowMut<T>,
T: 'a,
R: 'a,
&'a mut self,
func: impl FnOnce(&'a mut T) -> R
) -> R where
Self: BorrowMut<T>,
T: 'a,
R: 'a,
impl<T> PipeDeref for T
pub fn pipe_deref<'a, R>(
&'a self,
func: impl FnOnce(&'a Self::Target) -> R
) -> R where
Self: Deref,
R: 'a,
&'a self,
func: impl FnOnce(&'a Self::Target) -> R
) -> R where
Self: Deref,
R: 'a,
pub fn pipe_deref_mut<'a, R>(
&'a mut self,
func: impl FnOnce(&'a mut Self::Target) -> R
) -> R where
Self: DerefMut,
R: 'a,
&'a mut self,
func: impl FnOnce(&'a mut Self::Target) -> R
) -> R where
Self: DerefMut,
R: 'a,
impl<T> PipeRef for T
pub fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R where
R: 'a,
R: 'a,
pub fn pipe_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R where
R: 'a,
R: 'a,
impl<T> Same<T> for T
type Output = T
Should always be Self
impl<T> Tap for T
pub fn tap(self, func: impl FnOnce(&Self)) -> Self
pub fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self
pub fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self where
Self: Borrow<B>,
B: ?Sized,
Self: Borrow<B>,
B: ?Sized,
pub fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self where
Self: BorrowMut<B>,
B: ?Sized,
Self: BorrowMut<B>,
B: ?Sized,
pub fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self where
Self: AsRef<R>,
R: ?Sized,
Self: AsRef<R>,
R: ?Sized,
pub fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self where
Self: AsMut<R>,
R: ?Sized,
Self: AsMut<R>,
R: ?Sized,
pub fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self where
Self: Deref<Target = T>,
T: ?Sized,
Self: Deref<Target = T>,
T: ?Sized,
pub fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self where
Self: DerefMut<Target = T> + Deref,
T: ?Sized,
Self: DerefMut<Target = T> + Deref,
T: ?Sized,
pub fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
pub fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
pub fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self where
Self: Borrow<B>,
B: ?Sized,
Self: Borrow<B>,
B: ?Sized,
pub fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self where
Self: BorrowMut<B>,
B: ?Sized,
Self: BorrowMut<B>,
B: ?Sized,
pub fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self where
Self: AsRef<R>,
R: ?Sized,
Self: AsRef<R>,
R: ?Sized,
pub fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self where
Self: AsMut<R>,
R: ?Sized,
Self: AsMut<R>,
R: ?Sized,
pub fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self where
Self: Deref<Target = T>,
T: ?Sized,
Self: Deref<Target = T>,
T: ?Sized,
pub fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self where
Self: DerefMut<Target = T> + Deref,
T: ?Sized,
Self: DerefMut<Target = T> + Deref,
T: ?Sized,
impl<T> Tap for T
pub fn tap<F, R>(self, func: F) -> Self where
F: FnOnce(&Self) -> R,
F: FnOnce(&Self) -> R,
pub fn tap_dbg<F, R>(self, func: F) -> Self where
F: FnOnce(&Self) -> R,
F: FnOnce(&Self) -> R,
pub fn tap_mut<F, R>(self, func: F) -> Self where
F: FnOnce(&mut Self) -> R,
F: FnOnce(&mut Self) -> R,
pub fn tap_mut_dbg<F, R>(self, func: F) -> Self where
F: FnOnce(&mut Self) -> R,
F: FnOnce(&mut Self) -> R,
impl<T, U> TapAsRef<U> for T where
U: ?Sized,
U: ?Sized,
pub fn tap_ref<F, R>(self, func: F) -> Self where
Self: AsRef<T>,
F: FnOnce(&T) -> R,
Self: AsRef<T>,
F: FnOnce(&T) -> R,
pub fn tap_ref_dbg<F, R>(self, func: F) -> Self where
Self: AsRef<T>,
F: FnOnce(&T) -> R,
Self: AsRef<T>,
F: FnOnce(&T) -> R,
pub fn tap_ref_mut<F, R>(self, func: F) -> Self where
Self: AsMut<T>,
F: FnOnce(&mut T) -> R,
Self: AsMut<T>,
F: FnOnce(&mut T) -> R,
pub fn tap_ref_mut_dbg<F, R>(self, func: F) -> Self where
Self: AsMut<T>,
F: FnOnce(&mut T) -> R,
Self: AsMut<T>,
F: FnOnce(&mut T) -> R,
impl<T, U> TapBorrow<U> for T where
U: ?Sized,
U: ?Sized,
pub fn tap_borrow<F, R>(self, func: F) -> Self where
Self: Borrow<T>,
F: FnOnce(&T) -> R,
Self: Borrow<T>,
F: FnOnce(&T) -> R,
pub fn tap_borrow_dbg<F, R>(self, func: F) -> Self where
Self: Borrow<T>,
F: FnOnce(&T) -> R,
Self: Borrow<T>,
F: FnOnce(&T) -> R,
pub fn tap_borrow_mut<F, R>(self, func: F) -> Self where
Self: BorrowMut<T>,
F: FnOnce(&mut T) -> R,
Self: BorrowMut<T>,
F: FnOnce(&mut T) -> R,
pub fn tap_borrow_mut_dbg<F, R>(self, func: F) -> Self where
Self: BorrowMut<T>,
F: FnOnce(&mut T) -> R,
Self: BorrowMut<T>,
F: FnOnce(&mut T) -> R,
impl<T> TapDeref for T
pub fn tap_deref<F, R>(self, func: F) -> Self where
Self: Deref,
F: FnOnce(&Self::Target) -> R,
Self: Deref,
F: FnOnce(&Self::Target) -> R,
pub fn tap_deref_dbg<F, R>(self, func: F) -> Self where
Self: Deref,
F: FnOnce(&Self::Target) -> R,
Self: Deref,
F: FnOnce(&Self::Target) -> R,
pub fn tap_deref_mut<F, R>(self, func: F) -> Self where
Self: DerefMut,
F: FnOnce(&mut Self::Target) -> R,
Self: DerefMut,
F: FnOnce(&mut Self::Target) -> R,
pub fn tap_deref_mut_dbg<F, R>(self, func: F) -> Self where
Self: DerefMut,
F: FnOnce(&mut Self::Target) -> R,
Self: DerefMut,
F: FnOnce(&mut Self::Target) -> R,
impl<T> ToOwned for T where
T: Clone, [src]
T: Clone,
type Owned = T
The resulting type after obtaining ownership.
pub fn to_owned(&self) -> T[src]
pub fn clone_into(&self, target: &mut T)[src]
impl<T> TryConv for T
impl<T> TryConv for T
impl<T, U> TryFrom<U> for T where
U: Into<T>, [src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>, [src]
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
The type returned in the event of a conversion error.
pub fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>[src]
impl<V, T> VZip<V> for T where
V: MultiLane<T>,
V: MultiLane<T>,