From 954bba6fdff64912a4ea77b23ba83948d1ff1644 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Damir=20Jeli=C4=87?= Date: Tue, 19 Apr 2022 14:49:47 +0200 Subject: [PATCH] fix(crypto): Don't put the session timestamps behind an Arc --- .../matrix-sdk-crypto/src/identities/device.rs | 2 +- crates/matrix-sdk-crypto/src/olm/account.rs | 8 ++++---- .../src/olm/group_sessions/mod.rs | 4 ++-- .../src/olm/group_sessions/outbound.rs | 8 ++++---- crates/matrix-sdk-crypto/src/olm/session.rs | 16 ++++++++-------- .../src/session_manager/sessions.rs | 4 ++-- 6 files changed, 21 insertions(+), 21 deletions(-) diff --git a/crates/matrix-sdk-crypto/src/identities/device.rs b/crates/matrix-sdk-crypto/src/identities/device.rs index 39b4fd51d..2324ea560 100644 --- a/crates/matrix-sdk-crypto/src/identities/device.rs +++ b/crates/matrix-sdk-crypto/src/identities/device.rs @@ -526,7 +526,7 @@ impl ReadOnlyDevice { let session = if let Some(s) = store.get_sessions(&sender_key.to_base64()).await? { let mut sessions = s.lock().await; - sessions.sort_by_key(|s| *s.last_use_time); + sessions.sort_by_key(|s| s.last_use_time); sessions.get(0).cloned() } else { None diff --git a/crates/matrix-sdk-crypto/src/olm/account.rs b/crates/matrix-sdk-crypto/src/olm/account.rs index 64daf043a..ee2172b27 100644 --- a/crates/matrix-sdk-crypto/src/olm/account.rs +++ b/crates/matrix-sdk-crypto/src/olm/account.rs @@ -932,8 +932,8 @@ impl ReadOnlyAccount { session_id: session_id.into(), sender_key: identity_key, created_using_fallback_key: fallback_used, - creation_time: Arc::new(now), - last_use_time: Arc::new(now), + creation_time: now, + last_use_time: now, } } @@ -1028,8 +1028,8 @@ impl ReadOnlyAccount { session_id: session_id.into(), sender_key: their_identity_key, created_using_fallback_key: false, - creation_time: Arc::new(now), - last_use_time: Arc::new(now), + creation_time: now, + last_use_time: now, }; Ok(InboundCreationResult { session, plaintext: result.plaintext }) diff --git a/crates/matrix-sdk-crypto/src/olm/group_sessions/mod.rs b/crates/matrix-sdk-crypto/src/olm/group_sessions/mod.rs index 1f14f8178..28d02710c 100644 --- a/crates/matrix-sdk-crypto/src/olm/group_sessions/mod.rs +++ b/crates/matrix-sdk-crypto/src/olm/group_sessions/mod.rs @@ -161,7 +161,7 @@ impl TryFrom for ExportedRoomKey { #[cfg(all(test, any(target_os = "linux", target_arch = "wasm32")))] mod tests { - use std::{sync::Arc, time::Duration}; + use std::time::Duration; use matrix_sdk_common::instant::SystemTime; use matrix_sdk_test::async_test; @@ -205,7 +205,7 @@ mod tests { assert!(!session.expired()); // FIXME: this might break on macosx and windows let time = SystemTime::now() - Duration::from_secs(60 * 60); - session.creation_time = Arc::new(SecondsSinceUnixEpoch::from_system_time(time).unwrap()); + session.creation_time = SecondsSinceUnixEpoch::from_system_time(time).unwrap(); assert!(session.expired()); Ok(()) diff --git a/crates/matrix-sdk-crypto/src/olm/group_sessions/outbound.rs b/crates/matrix-sdk-crypto/src/olm/group_sessions/outbound.rs index 7f72946db..78d6259df 100644 --- a/crates/matrix-sdk-crypto/src/olm/group_sessions/outbound.rs +++ b/crates/matrix-sdk-crypto/src/olm/group_sessions/outbound.rs @@ -117,7 +117,7 @@ pub struct OutboundGroupSession { account_identity_keys: Arc, session_id: Arc, room_id: Arc, - pub(crate) creation_time: Arc, + pub(crate) creation_time: SecondsSinceUnixEpoch, message_count: Arc, shared: Arc, invalidated: Arc, @@ -174,7 +174,7 @@ impl OutboundGroupSession { device_id, account_identity_keys: identity_keys, session_id: session_id.into(), - creation_time: Arc::new(seconds_since_unix_epoch()), + creation_time: seconds_since_unix_epoch(), message_count: Arc::new(AtomicU64::new(0)), shared: Arc::new(AtomicBool::new(false)), invalidated: Arc::new(AtomicBool::new(false)), @@ -494,7 +494,7 @@ impl OutboundGroupSession { account_identity_keys: identity_keys, session_id: session_id.into(), room_id: pickle.room_id, - creation_time: pickle.creation_time.into(), + creation_time: pickle.creation_time, message_count: AtomicU64::from(pickle.message_count).into(), shared: AtomicBool::from(pickle.shared).into(), invalidated: AtomicBool::from(pickle.invalidated).into(), @@ -525,7 +525,7 @@ impl OutboundGroupSession { pickle, room_id: self.room_id.clone(), settings: self.settings.clone(), - creation_time: *self.creation_time, + creation_time: self.creation_time, message_count: self.message_count.load(Ordering::SeqCst), shared: self.shared(), invalidated: self.invalidated(), diff --git a/crates/matrix-sdk-crypto/src/olm/session.rs b/crates/matrix-sdk-crypto/src/olm/session.rs index f2181b81c..9bdfea6ba 100644 --- a/crates/matrix-sdk-crypto/src/olm/session.rs +++ b/crates/matrix-sdk-crypto/src/olm/session.rs @@ -57,9 +57,9 @@ pub struct Session { /// Has this been created using the fallback key pub created_using_fallback_key: bool, /// When the session was created - pub creation_time: Arc, + pub creation_time: SecondsSinceUnixEpoch, /// When the session was last used - pub last_use_time: Arc, + pub last_use_time: SecondsSinceUnixEpoch, } #[cfg(not(tarpaulin_include))] @@ -83,7 +83,7 @@ impl Session { /// * `message` - The Olm message that should be decrypted. pub async fn decrypt(&mut self, message: &OlmMessage) -> Result { let plaintext = self.inner.lock().await.decrypt(message)?; - self.last_use_time = Arc::new(seconds_since_unix_epoch()); + self.last_use_time = seconds_since_unix_epoch(); Ok(plaintext) } @@ -101,7 +101,7 @@ impl Session { /// * `plaintext` - The plaintext that should be encrypted. pub(crate) async fn encrypt_helper(&mut self, plaintext: &str) -> OlmMessage { let message = self.inner.lock().await.encrypt(plaintext); - self.last_use_time = Arc::new(seconds_since_unix_epoch()); + self.last_use_time = seconds_since_unix_epoch(); message } @@ -173,8 +173,8 @@ impl Session { pickle, sender_key: self.sender_key, created_using_fallback_key: self.created_using_fallback_key, - creation_time: *self.creation_time, - last_use_time: *self.last_use_time, + creation_time: self.creation_time, + last_use_time: self.last_use_time, } } @@ -212,8 +212,8 @@ impl Session { session_id: session_id.into(), created_using_fallback_key: pickle.created_using_fallback_key, sender_key: pickle.sender_key, - creation_time: Arc::new(pickle.creation_time), - last_use_time: Arc::new(pickle.last_use_time), + creation_time: pickle.creation_time, + last_use_time: pickle.last_use_time, } } } diff --git a/crates/matrix-sdk-crypto/src/session_manager/sessions.rs b/crates/matrix-sdk-crypto/src/session_manager/sessions.rs index b3afb1de2..e0273c5bd 100644 --- a/crates/matrix-sdk-crypto/src/session_manager/sessions.rs +++ b/crates/matrix-sdk-crypto/src/session_manager/sessions.rs @@ -84,7 +84,7 @@ impl SessionManager { if let Some(sessions) = sessions { let mut sessions = sessions.lock().await; - sessions.sort_by_key(|s| *s.creation_time); + sessions.sort_by_key(|s| s.creation_time); let session = sessions.get(0); @@ -451,7 +451,7 @@ mod tests { let bob_device = ReadOnlyDevice::from_account(&bob).await; let time = SystemTime::now() - Duration::from_secs(3601); - session.creation_time = Arc::new(SecondsSinceUnixEpoch::from_system_time(time).unwrap()); + session.creation_time = SecondsSinceUnixEpoch::from_system_time(time).unwrap(); manager.store.save_devices(&[bob_device.clone()]).await.unwrap(); manager.store.save_sessions(&[session]).await.unwrap();