fix(crypto): Don't put the session timestamps behind an Arc

This commit is contained in:
Damir Jelić
2022-04-19 14:49:47 +02:00
parent edbf831a0f
commit 954bba6fdf
6 changed files with 21 additions and 21 deletions

View File

@@ -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

View File

@@ -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 })

View File

@@ -161,7 +161,7 @@ impl TryFrom<ToDeviceForwardedRoomKeyEventContent> 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(())

View File

@@ -117,7 +117,7 @@ pub struct OutboundGroupSession {
account_identity_keys: Arc<IdentityKeys>,
session_id: Arc<str>,
room_id: Arc<RoomId>,
pub(crate) creation_time: Arc<SecondsSinceUnixEpoch>,
pub(crate) creation_time: SecondsSinceUnixEpoch,
message_count: Arc<AtomicU64>,
shared: Arc<AtomicBool>,
invalidated: Arc<AtomicBool>,
@@ -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(),

View File

@@ -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<SecondsSinceUnixEpoch>,
pub creation_time: SecondsSinceUnixEpoch,
/// When the session was last used
pub last_use_time: Arc<SecondsSinceUnixEpoch>,
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<String, DecryptionError> {
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,
}
}
}

View File

@@ -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();