diff --git a/Cargo.lock b/Cargo.lock index 1e62cfc51..8ff7163f7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -47,7 +47,7 @@ checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" dependencies = [ "cfg-if", "cipher", - "cpufeatures", + "cpufeatures 0.2.12", ] [[package]] @@ -479,7 +479,7 @@ dependencies = [ "matrix-sdk-sqlite", "matrix-sdk-test", "matrix-sdk-ui", - "rand 0.8.5", + "rand 0.10.0", "ruma", "serde", "serde_json", @@ -719,7 +719,18 @@ checksum = "c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818" dependencies = [ "cfg-if", "cipher", - "cpufeatures", + "cpufeatures 0.2.12", +] + +[[package]] +name = "chacha20" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f8d983286843e49675a4b7a2d174efe136dc93a18d69130dd18198a6c167601" +dependencies = [ + "cfg-if", + "cpufeatures 0.3.0", + "rand_core 0.10.0", ] [[package]] @@ -729,7 +740,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "10cd79432192d1c0f4e1a0fef9527696cc039165d729fb41b3f4f4f354c2dc35" dependencies = [ "aead", - "chacha20", + "chacha20 0.9.1", "cipher", "poly1305", "zeroize", @@ -1044,6 +1055,15 @@ dependencies = [ "libc", ] +[[package]] +name = "cpufeatures" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b2a41393f66f16b0823bb79094d54ac5fbd34ab292ddafb9a0456ac9f87d201" +dependencies = [ + "libc", +] + [[package]] name = "crc32fast" version = "1.4.2" @@ -1165,7 +1185,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" dependencies = [ "cfg-if", - "cpufeatures", + "cpufeatures 0.2.12", "curve25519-dalek-derive", "digest", "fiat-crypto", @@ -1564,7 +1584,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad" dependencies = [ "libc", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -1709,7 +1729,7 @@ dependencies = [ "futures-util", "matrix-sdk", "matrix-sdk-ui", - "rand 0.8.5", + "rand 0.10.0", "serde", "serde_json", "tokio", @@ -1724,7 +1744,7 @@ dependencies = [ "anyhow", "dirs", "matrix-sdk", - "rand 0.8.5", + "rand 0.10.0", "serde", "serde_json", "tokio", @@ -2116,11 +2136,27 @@ dependencies = [ "cfg-if", "js-sys", "libc", - "r-efi", + "r-efi 5.3.0", "wasip2", "wasm-bindgen", ] +[[package]] +name = "getrandom" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "r-efi 6.0.0", + "rand_core 0.10.0", + "wasip2", + "wasip3", + "wasm-bindgen", +] + [[package]] name = "gimli" version = "0.32.3" @@ -2634,6 +2670,12 @@ dependencies = [ "syn 2.0.101", ] +[[package]] +name = "id-arena" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" + [[package]] name = "ident_case" version = "1.0.1" @@ -2968,6 +3010,12 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +[[package]] +name = "leb128fmt" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" + [[package]] name = "levenshtein_automata" version = "0.2.1" @@ -3257,7 +3305,7 @@ dependencies = [ "percent-encoding", "pin-project-lite", "proptest", - "rand 0.8.5", + "rand 0.10.0", "reqwest", "ruma", "rustls", @@ -3306,6 +3354,7 @@ dependencies = [ "eyeball-im", "futures-executor", "futures-util", + "getrandom 0.3.4", "gloo-timers", "growable-bloom-filter", "http", @@ -3340,6 +3389,7 @@ dependencies = [ "futures-executor", "futures-util", "getrandom 0.3.4", + "getrandom 0.4.2", "gloo-timers", "imbl", "insta", @@ -3392,7 +3442,7 @@ dependencies = [ "matrix-sdk-test-utils", "pbkdf2", "proptest", - "rand 0.8.5", + "rand 0.10.0", "rmp-serde", "ruma", "serde", @@ -3428,7 +3478,7 @@ dependencies = [ "matrix-sdk-ffi-macros", "matrix-sdk-sqlite", "pbkdf2", - "rand 0.8.5", + "rand 0.10.0", "ruma", "serde", "serde_json", @@ -3507,7 +3557,7 @@ dependencies = [ "async-trait", "base64", "futures-util", - "getrandom 0.3.4", + "getrandom 0.4.2", "gloo-timers", "gloo-utils", "growable-bloom-filter", @@ -3519,7 +3569,7 @@ dependencies = [ "matrix-sdk-store-encryption", "matrix-sdk-test", "matrix_indexed_db_futures", - "rand 0.8.5", + "rand 0.10.0", "rmp-serde", "ruma", "serde", @@ -3558,7 +3608,7 @@ dependencies = [ "matrix-sdk-test", "matrix-sdk-test-utils", "matrix-sdk-ui", - "rand 0.8.5", + "rand 0.10.0", "reqwest", "serde_json", "similar-asserts", @@ -3592,7 +3642,7 @@ dependencies = [ "hmac", "matrix-sdk-test", "pbkdf2", - "rand 0.8.5", + "rand 0.10.0", "ruma", "sha2", "tantivy", @@ -3643,10 +3693,10 @@ dependencies = [ "base64", "blake3", "chacha20poly1305", - "getrandom 0.3.4", + "getrandom 0.4.2", "hmac", "pbkdf2", - "rand 0.8.5", + "rand 0.10.0", "rmp-serde", "serde", "serde_json", @@ -3661,7 +3711,7 @@ version = "0.16.0" dependencies = [ "as_variant", "ctor", - "getrandom 0.3.4", + "getrandom 0.4.2", "http", "insta", "matrix-sdk-common", @@ -4386,7 +4436,7 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf" dependencies = [ - "cpufeatures", + "cpufeatures 0.2.12", "opaque-debug", "universal-hash", ] @@ -4602,6 +4652,12 @@ version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" +[[package]] +name = "r-efi" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" + [[package]] name = "rand" version = "0.8.5" @@ -4623,6 +4679,17 @@ dependencies = [ "rand_core 0.9.3", ] +[[package]] +name = "rand" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc266eb313df6c5c09c1c7b1fbe2510961e5bcd3add930c1e31f7ed9da0feff8" +dependencies = [ + "chacha20 0.10.0", + "getrandom 0.4.2", + "rand_core 0.10.0", +] + [[package]] name = "rand_chacha" version = "0.3.1" @@ -4661,6 +4728,12 @@ dependencies = [ "getrandom 0.3.4", ] +[[package]] +name = "rand_core" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c8d0fd677905edcbeedbf2edb6494d676f0e98d54d5cf9bda0b061cb8fb8aba" + [[package]] name = "rand_distr" version = "0.4.3" @@ -5132,7 +5205,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys 0.9.4", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -5565,7 +5638,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" dependencies = [ "cfg-if", - "cpufeatures", + "cpufeatures 0.2.12", "digest", ] @@ -5576,7 +5649,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" dependencies = [ "cfg-if", - "cpufeatures", + "cpufeatures 0.2.12", "digest", ] @@ -6984,6 +7057,15 @@ dependencies = [ "wit-bindgen", ] +[[package]] +name = "wasip3" +version = "0.4.0+wasi-0.3.0-rc-2026-01-06" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" +dependencies = [ + "wit-bindgen", +] + [[package]] name = "wasm-bindgen" version = "0.2.114" @@ -7082,6 +7164,28 @@ version = "0.2.114" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cfe29135b180b72b04c74aa97b2b4a2ef275161eff9a6c7955ea9eaedc7e1d4e" +[[package]] +name = "wasm-encoder" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" +dependencies = [ + "leb128fmt", + "wasmparser", +] + +[[package]] +name = "wasm-metadata" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" +dependencies = [ + "anyhow", + "indexmap", + "wasm-encoder", + "wasmparser", +] + [[package]] name = "wasm-streams" version = "0.5.0" @@ -7113,6 +7217,18 @@ dependencies = [ "web-sys", ] +[[package]] +name = "wasmparser" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" +dependencies = [ + "bitflags", + "hashbrown 0.15.2", + "indexmap", + "semver", +] + [[package]] name = "web-sys" version = "0.3.91" @@ -7679,6 +7795,88 @@ name = "wit-bindgen" version = "0.51.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" +dependencies = [ + "wit-bindgen-rust-macro", +] + +[[package]] +name = "wit-bindgen-core" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc" +dependencies = [ + "anyhow", + "heck", + "wit-parser", +] + +[[package]] +name = "wit-bindgen-rust" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" +dependencies = [ + "anyhow", + "heck", + "indexmap", + "prettyplease", + "syn 2.0.101", + "wasm-metadata", + "wit-bindgen-core", + "wit-component", +] + +[[package]] +name = "wit-bindgen-rust-macro" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a" +dependencies = [ + "anyhow", + "prettyplease", + "proc-macro2", + "quote", + "syn 2.0.101", + "wit-bindgen-core", + "wit-bindgen-rust", +] + +[[package]] +name = "wit-component" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" +dependencies = [ + "anyhow", + "bitflags", + "indexmap", + "log", + "serde", + "serde_derive", + "serde_json", + "wasm-encoder", + "wasm-metadata", + "wasmparser", + "wit-parser", +] + +[[package]] +name = "wit-parser" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" +dependencies = [ + "anyhow", + "id-arena", + "indexmap", + "log", + "semver", + "serde", + "serde_derive", + "serde_json", + "unicode-xid", + "wasmparser", +] [[package]] name = "write16" diff --git a/Cargo.toml b/Cargo.toml index 604cf7468..dc53aa5b6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -46,7 +46,7 @@ eyeball-im-util = { version = "0.10.0", default-features = false } futures-core = { version = "0.3.31", default-features = false, features = ["std"] } futures-executor = { version = "0.3.31", default-features = false, features = ["std"] } futures-util = { version = "0.3.31", default-features = false, features = ["std"] } -getrandom = { version = "0.3.4", default-features = false } +getrandom = { version = "0.4.2", default-features = false } gloo-timers = { version = "0.3.0", default-features = false } gloo-utils = { version = "0.2.0", default-features = false, features = ["serde"] } growable-bloom-filter = { version = "2.1.1", default-features = false } @@ -67,7 +67,7 @@ pin-project-lite = { version = "0.2.16", default-features = false } proc-macro2 = { version = "1.0.106", default-features = false } proptest = { version = "1.9.0", default-features = false, features = ["std"] } quote = { version = "1.0.37", default-features = false } -rand = { version = "0.8.5", default-features = false, features = ["std", "std_rng"] } +rand = { version = "0.10.0", default-features = false, features = ["std", "std_rng", "thread_rng"] } regex = { version = "1.12.2", default-features = false } reqwest = { version = "0.13.1", default-features = false } rmp-serde = { version = "1.3.0", default-features = false } diff --git a/benchmarks/benches/room_list.rs b/benchmarks/benches/room_list.rs index ceab23dc6..0de019cec 100644 --- a/benchmarks/benches/room_list.rs +++ b/benchmarks/benches/room_list.rs @@ -6,7 +6,7 @@ use matrix_sdk_test::{JoinedRoomBuilder, base64_sha256_hash, event_factory::Even use matrix_sdk_ui::{ RoomListService, eyeball_im::VectorDiff, room_list_service::filters::new_filter_non_left, }; -use rand::{distributions::Uniform, prelude::Distribution}; +use rand::{distr::Uniform, prelude::Distribution}; use ruma::{OwnedRoomId, RoomId, owned_user_id}; use tokio::runtime::Builder; @@ -26,8 +26,8 @@ pub fn create(c: &mut Criterion) { }); let sender_id = owned_user_id!("@mnt_io:matrix.org"); - let mut rand = rand::thread_rng(); - let server_ts_range = Uniform::from(100..1000); + let mut rand = rand::rng(); + let server_ts_range = Uniform::try_from(100..1000).unwrap(); for room_nth in 0..NUMBER_OF_ROOMS { // Synapse's room IDs for rooms v1 to v11 have an 18 characters localpart. diff --git a/bindings/matrix-sdk-crypto-ffi/src/backup_recovery_key.rs b/bindings/matrix-sdk-crypto-ffi/src/backup_recovery_key.rs index 239b90772..7cae63c5d 100644 --- a/bindings/matrix-sdk-crypto-ffi/src/backup_recovery_key.rs +++ b/bindings/matrix-sdk-crypto-ffi/src/backup_recovery_key.rs @@ -6,7 +6,7 @@ use matrix_sdk_crypto::{ store::{types::BackupDecryptionKey, CryptoStoreError as InnerStoreError}, }; use pbkdf2::pbkdf2; -use rand::{distributions::Alphanumeric, thread_rng, Rng}; +use rand::{distr::Alphanumeric, rng, RngExt}; use sha2::Sha512; use thiserror::Error; use zeroize::Zeroize; @@ -75,11 +75,7 @@ impl BackupRecoveryKey { #[allow(clippy::new_without_default)] #[uniffi::constructor] pub fn new() -> Arc { - Arc::new(Self { - inner: BackupDecryptionKey::new() - .expect("Can't gather enough randomness to create a recovery key"), - passphrase_info: None, - }) + Arc::new(Self { inner: BackupDecryptionKey::new(), passphrase_info: None }) } /// Try to create a [`BackupRecoveryKey`] from a base 64 encoded string. @@ -97,7 +93,7 @@ impl BackupRecoveryKey { /// Create a new [`BackupRecoveryKey`] from the given passphrase. #[uniffi::constructor] pub fn new_from_passphrase(passphrase: String) -> Arc { - let mut rng = thread_rng(); + let mut rng = rng(); let salt: String = iter::repeat(()) .map(|()| rng.sample(Alphanumeric)) .map(char::from) diff --git a/bindings/matrix-sdk-crypto-ffi/src/dehydrated_devices.rs b/bindings/matrix-sdk-crypto-ffi/src/dehydrated_devices.rs index 7597d0ffb..c7ab865be 100644 --- a/bindings/matrix-sdk-crypto-ffi/src/dehydrated_devices.rs +++ b/bindings/matrix-sdk-crypto-ffi/src/dehydrated_devices.rs @@ -29,8 +29,6 @@ pub enum DehydrationError { Store(#[from] matrix_sdk_crypto::CryptoStoreError), #[error("The pickle key has an invalid length, expected 32 bytes, got {0}")] PickleKeyLength(usize), - #[error(transparent)] - Rand(#[from] rand::Error), } impl From for DehydrationError { @@ -231,9 +229,7 @@ mod tests { #[test] fn test_creating_dehydrated_key() { - let result = DehydratedDeviceKey::new(); - assert!(result.is_ok()); - let dehydrated_device_key = result.unwrap(); + let dehydrated_device_key = DehydratedDeviceKey::new(); let base_64 = dehydrated_device_key.to_base64(); let inner_bytes = dehydrated_device_key.inner; diff --git a/bindings/matrix-sdk-crypto-ffi/src/lib.rs b/bindings/matrix-sdk-crypto-ffi/src/lib.rs index a8223e53e..c05e5a471 100644 --- a/bindings/matrix-sdk-crypto-ffi/src/lib.rs +++ b/bindings/matrix-sdk-crypto-ffi/src/lib.rs @@ -850,9 +850,9 @@ pub struct DehydratedDeviceKey { impl DehydratedDeviceKey { /// Generates a new random pickle key. - pub fn new() -> Result { - let inner = InnerDehydratedDeviceKey::new()?; - Ok(inner.into()) + #[allow(clippy::new_without_default)] + pub fn new() -> Self { + InnerDehydratedDeviceKey::new().into() } /// Creates a new dehydration pickle key from the given slice. diff --git a/crates/matrix-sdk-base/Cargo.toml b/crates/matrix-sdk-base/Cargo.toml index 90772cd8d..7a57ad78c 100644 --- a/crates/matrix-sdk-base/Cargo.toml +++ b/crates/matrix-sdk-base/Cargo.toml @@ -113,6 +113,7 @@ tokio = { workspace = true, features = ["rt-multi-thread", "macros"] } [target.'cfg(target_family = "wasm")'.dev-dependencies] wasm-bindgen-test.workspace = true +getrandom3 = { version = "0.3.4", package = "getrandom", default-features = false, features = ["wasm_js"] } gloo-timers = { workspace = true, features = ["futures"] } [lints] diff --git a/crates/matrix-sdk-common/Cargo.toml b/crates/matrix-sdk-common/Cargo.toml index a105ad9ea..92500766a 100644 --- a/crates/matrix-sdk-common/Cargo.toml +++ b/crates/matrix-sdk-common/Cargo.toml @@ -66,6 +66,7 @@ wasm-bindgen-test.workspace = true [target.'cfg(target_family = "wasm")'.dev-dependencies] # Enable the JS feature for getrandom. getrandom = { workspace = true, default-features = false, features = ["wasm_js"] } +getrandom3 = { version = "0.3.4", package = "getrandom", default-features = false, features = ["wasm_js"] } js-sys.workspace = true [lints] diff --git a/crates/matrix-sdk-crypto/src/backups/keys/decryption.rs b/crates/matrix-sdk-crypto/src/backups/keys/decryption.rs index 929ebd54a..e48c8da89 100644 --- a/crates/matrix-sdk-crypto/src/backups/keys/decryption.rs +++ b/crates/matrix-sdk-crypto/src/backups/keys/decryption.rs @@ -303,7 +303,7 @@ mod tests { #[test] fn base64_decoding() -> Result<(), DecodeError> { - let key = BackupDecryptionKey::new().expect("Can't create a new recovery key"); + let key = BackupDecryptionKey::new(); let base64 = key.to_base64(); let decoded_key = BackupDecryptionKey::from_base64(&base64)?; @@ -316,7 +316,7 @@ mod tests { #[test] fn base58_decoding() -> Result<(), DecodeError> { - let key = BackupDecryptionKey::new().expect("Can't create a new recovery key"); + let key = BackupDecryptionKey::new(); let base64 = key.to_base58(); let decoded_key = BackupDecryptionKey::from_base58(&base64)?; @@ -394,7 +394,7 @@ mod tests { async fn test_encryption_cycle() { let session = InboundGroupSession::from_export(&room_key()).unwrap(); - let decryption_key = BackupDecryptionKey::new().unwrap(); + let decryption_key = BackupDecryptionKey::new(); let encryption_key = decryption_key.megolm_v1_public_key(); let encrypted = encryption_key.encrypt(session).await; @@ -406,7 +406,7 @@ mod tests { #[test] fn key_matches() { - let decryption_key = BackupDecryptionKey::new().unwrap(); + let decryption_key = BackupDecryptionKey::new(); let key_info = decryption_key.to_backup_info(); diff --git a/crates/matrix-sdk-crypto/src/backups/mod.rs b/crates/matrix-sdk-crypto/src/backups/mod.rs index 3ec40dbce..2aa0fd14f 100644 --- a/crates/matrix-sdk-crypto/src/backups/mod.rs +++ b/crates/matrix-sdk-crypto/src/backups/mod.rs @@ -701,7 +701,7 @@ mod tests { assert_eq!(counts.total, 2, "Two room keys need to exist in the store"); assert_eq!(counts.backed_up, 0, "No room keys have been backed up yet"); - let decryption_key = BackupDecryptionKey::new().expect("Can't create new recovery key"); + let decryption_key = BackupDecryptionKey::new(); let backup_key = decryption_key.megolm_v1_public_key(); backup_key.set_version("1".to_owned()); @@ -838,7 +838,7 @@ mod tests { let backup_machine = machine.backup_machine(); // We set up a backup key, so that we can test `backup_machine.backup()` later. - let decryption_key = BackupDecryptionKey::new().expect("Couldn't create new recovery key"); + let decryption_key = BackupDecryptionKey::new(); let backup_key = decryption_key.megolm_v1_public_key(); backup_key.set_version("1".to_owned()); backup_machine.enable_backup_v1(backup_key).await.expect("Couldn't enable backup"); @@ -886,7 +886,7 @@ mod tests { let machine = OlmMachine::new(alice_id(), alice_device_id()).await; let backup_machine = machine.backup_machine(); - let decryption_key = BackupDecryptionKey::new().unwrap(); + let decryption_key = BackupDecryptionKey::new(); let mut backup_info = decryption_key.to_backup_info(); let result = backup_machine.verify_backup(backup_info.to_owned(), false).await.unwrap(); @@ -904,7 +904,7 @@ mod tests { async fn test_fix_backup_key_mismatch() { let store = MemoryStore::new(); - let backup_decryption_key = BackupDecryptionKey::new().unwrap(); + let backup_decryption_key = BackupDecryptionKey::new(); store .save_changes(Changes { diff --git a/crates/matrix-sdk-crypto/src/ciphers.rs b/crates/matrix-sdk-crypto/src/ciphers.rs index aeb4efc9f..c97aa4322 100644 --- a/crates/matrix-sdk-crypto/src/ciphers.rs +++ b/crates/matrix-sdk-crypto/src/ciphers.rs @@ -23,7 +23,7 @@ use hmac::{ digest::{FixedOutput, MacError}, }; use pbkdf2::pbkdf2; -use rand::{RngCore, thread_rng}; +use rand::{Rng, rng}; use sha2::{Sha256, Sha512}; use zeroize::{Zeroize, ZeroizeOnDrop}; @@ -247,7 +247,7 @@ impl AesHmacSha2Key { /// The initialization vector will be clamped and will be used to encrypt /// the ciphertext. fn generate_iv() -> [u8; IV_SIZE] { - let mut rng = thread_rng(); + let mut rng = rng(); let mut iv = [0u8; IV_SIZE]; rng.fill_bytes(&mut iv); diff --git a/crates/matrix-sdk-crypto/src/dehydrated_devices.rs b/crates/matrix-sdk-crypto/src/dehydrated_devices.rs index 3eb646fa7..5d1ff0faf 100644 --- a/crates/matrix-sdk-crypto/src/dehydrated_devices.rs +++ b/crates/matrix-sdk-crypto/src/dehydrated_devices.rs @@ -343,7 +343,7 @@ impl DehydratedDevice { /// async fn example() -> anyhow::Result<()> { /// # let machine: OlmMachine = unimplemented!(); /// // Create a new random key - /// let pickle_key = DehydratedDeviceKey::new()?; + /// let pickle_key = DehydratedDeviceKey::new(); /// /// // Create the dehydrated device. /// let device = machine.dehydrated_devices().create().await?; @@ -612,7 +612,7 @@ mod tests { let stored_key = dehydrated_manager.get_dehydrated_device_pickle_key().await.unwrap(); assert!(stored_key.is_none()); - let pickle_key = DehydratedDeviceKey::new().unwrap(); + let pickle_key = DehydratedDeviceKey::new(); dehydrated_manager.save_dehydrated_device_pickle_key(&pickle_key).await.unwrap(); diff --git a/crates/matrix-sdk-crypto/src/file_encryption/attachments.rs b/crates/matrix-sdk-crypto/src/file_encryption/attachments.rs index 7321b1582..fd7f26ddb 100644 --- a/crates/matrix-sdk-crypto/src/file_encryption/attachments.rs +++ b/crates/matrix-sdk-crypto/src/file_encryption/attachments.rs @@ -18,7 +18,7 @@ use aes::{ Aes256, cipher::{KeyIvInit, StreamCipher}, }; -use rand::{RngCore, thread_rng}; +use rand::{Rng, rng}; use ruma::{ events::room::{ EncryptedFile, EncryptedFileHash, EncryptedFileHashAlgorithm, EncryptedFileHashes, @@ -216,7 +216,7 @@ impl<'a, R: Read + ?Sized + 'a> AttachmentEncryptor<'a, R> { let mut key = [0u8; KEY_SIZE]; let mut iv = [0u8; IV_SIZE]; - let mut rng = thread_rng(); + let mut rng = rng(); rng.fill_bytes(&mut key); // Only populate the first 8 bytes with randomness, the rest is 0 diff --git a/crates/matrix-sdk-crypto/src/file_encryption/key_export.rs b/crates/matrix-sdk-crypto/src/file_encryption/key_export.rs index d3cd530a1..7b5d47c29 100644 --- a/crates/matrix-sdk-crypto/src/file_encryption/key_export.rs +++ b/crates/matrix-sdk-crypto/src/file_encryption/key_export.rs @@ -15,7 +15,7 @@ use std::io::{Cursor, Read, Seek, SeekFrom}; use byteorder::{BigEndian, ReadBytesExt}; -use rand::{RngCore, thread_rng}; +use rand::{Rng, rng}; use serde_json::Error as SerdeError; use thiserror::Error; use vodozemac::{base64_decode, base64_encode}; @@ -149,7 +149,7 @@ pub fn encrypt_room_key_export( fn encrypt_helper(plaintext: &[u8], passphrase: &str, rounds: u32) -> String { let mut salt = [0u8; SALT_SIZE]; - let mut rng = thread_rng(); + let mut rng = rng(); rng.fill_bytes(&mut salt); diff --git a/crates/matrix-sdk-crypto/src/gossiping/machine.rs b/crates/matrix-sdk-crypto/src/gossiping/machine.rs index 3203545f1..44ddffed8 100644 --- a/crates/matrix-sdk-crypto/src/gossiping/machine.rs +++ b/crates/matrix-sdk-crypto/src/gossiping/machine.rs @@ -2060,7 +2060,7 @@ mod tests { alice_machine.store().save_device_data(&[bob_device.inner]).await.unwrap(); bob_machine.store().save_device_data(&[alice_device.inner]).await.unwrap(); - let decryption_key = crate::store::types::BackupDecryptionKey::new().unwrap(); + let decryption_key = crate::store::types::BackupDecryptionKey::new(); alice_machine .backup_machine() .save_decryption_key(Some(decryption_key), None) diff --git a/crates/matrix-sdk-crypto/src/machine/tests/mod.rs b/crates/matrix-sdk-crypto/src/machine/tests/mod.rs index a04a42ba7..cee03f339 100644 --- a/crates/matrix-sdk-crypto/src/machine/tests/mod.rs +++ b/crates/matrix-sdk-crypto/src/machine/tests/mod.rs @@ -1613,7 +1613,7 @@ async fn test_wait_on_key_query_doesnt_block_store() { async fn test_fix_incorrect_usage_of_backup_key_causing_decryption_errors() { let store = MemoryStore::new(); - let backup_decryption_key = BackupDecryptionKey::new().unwrap(); + let backup_decryption_key = BackupDecryptionKey::new(); store .save_changes(Changes { diff --git a/crates/matrix-sdk-crypto/src/secret_storage.rs b/crates/matrix-sdk-crypto/src/secret_storage.rs index 756b5a4df..b091b9896 100644 --- a/crates/matrix-sdk-crypto/src/secret_storage.rs +++ b/crates/matrix-sdk-crypto/src/secret_storage.rs @@ -29,9 +29,9 @@ use hmac::Hmac; pub use hmac::digest::MacError; use pbkdf2::pbkdf2; use rand::{ - RngCore, - distributions::{Alphanumeric, DistString}, - thread_rng, + Rng, + distr::{Alphanumeric, SampleString}, + rng, }; use ruma::{ UInt, @@ -313,7 +313,7 @@ impl SecretStorageKey { /// Create a new random [`SecretStorageKey`]. pub fn new() -> Self { let mut key = Box::new([0u8; KEY_SIZE]); - let mut rng = thread_rng(); + let mut rng = rng(); rng.fill_bytes(key.as_mut_slice()); let key_id = Alphanumeric.sample_string(&mut rng, Self::DEFAULT_KEY_ID_LEN); @@ -329,7 +329,7 @@ impl SecretStorageKey { /// [spec]: https://spec.matrix.org/v1.8/client-server-api/#deriving-keys-from-passphrases pub fn new_from_passphrase(passphrase: &str) -> Self { let mut key = Box::new([0u8; 32]); - let mut rng = thread_rng(); + let mut rng = rng(); let salt = Alphanumeric.sample_string(&mut rng, Self::DEFAULT_KEY_ID_LEN); pbkdf2::>( diff --git a/crates/matrix-sdk-crypto/src/store/integration_tests.rs b/crates/matrix-sdk-crypto/src/store/integration_tests.rs index 6e74c986e..96226f698 100644 --- a/crates/matrix-sdk-crypto/src/store/integration_tests.rs +++ b/crates/matrix-sdk-crypto/src/store/integration_tests.rs @@ -1273,7 +1273,7 @@ macro_rules! cryptostore_integration_tests { let restored = store.load_backup_keys().await.unwrap(); assert!(restored.decryption_key.is_none(), "Initially no backup decryption key should be present"); - let backup_decryption_key = Some(BackupDecryptionKey::new().unwrap()); + let backup_decryption_key = Some(BackupDecryptionKey::new()); let changes = Changes { backup_decryption_key, ..Default::default() }; store.save_changes(changes).await.unwrap(); @@ -1297,7 +1297,7 @@ macro_rules! cryptostore_integration_tests { let restored = store.load_dehydrated_device_pickle_key().await.unwrap(); assert!(restored.is_none(), "Initially no pickle key should be present"); - let dehydrated_device_pickle_key = Some(DehydratedDeviceKey::new().unwrap()); + let dehydrated_device_pickle_key = Some(DehydratedDeviceKey::new()); let exported_base64 = dehydrated_device_pickle_key.clone().unwrap().to_base64(); let changes = Changes { dehydrated_device_pickle_key, ..Default::default() }; @@ -1321,7 +1321,7 @@ macro_rules! cryptostore_integration_tests { async fn test_delete_dehydration_pickle_key() { let (_account, store) = get_loaded_store("delete_dehydration_pickle_key").await; - let dehydrated_device_pickle_key = DehydratedDeviceKey::new().unwrap(); + let dehydrated_device_pickle_key = DehydratedDeviceKey::new(); let changes = Changes { dehydrated_device_pickle_key: Some(dehydrated_device_pickle_key), ..Default::default() }; store.save_changes(changes).await.unwrap(); diff --git a/crates/matrix-sdk-crypto/src/store/mod.rs b/crates/matrix-sdk-crypto/src/store/mod.rs index 279694bd9..a7628e352 100644 --- a/crates/matrix-sdk-crypto/src/store/mod.rs +++ b/crates/matrix-sdk-crypto/src/store/mod.rs @@ -1904,6 +1904,7 @@ mod tests { use futures_util::StreamExt; use insta::{_macro_support::Content, assert_json_snapshot, internals::ContentPath}; use matrix_sdk_test::async_test; + use rand::RngExt; use ruma::{ RoomId, device_id, events::room::{EncryptedFile, EncryptedFileHashes, V2EncryptedFileInfo}, @@ -2041,8 +2042,6 @@ mod tests { /// Make a Megolm [`SessionKey`] using the given Ed25519 key as a signing /// key/session ID. fn make_session_key(signing_key: &Ed25519Keypair) -> SessionKey { - use rand::Rng; - // `SessionKey::new` is not public, so the easiest way to construct a Megolm // session using a known Ed25519 key is to build a byte array in the export // format. @@ -2052,7 +2051,7 @@ mod tests { session_key_bytes[0] = 2; // 1..5: index // 5..133: ratchet key - rand::thread_rng().fill(&mut session_key_bytes[5..133]); + rand::rng().fill(&mut session_key_bytes[5..133]); // 133..165: public ed25519 key session_key_bytes[133..165].copy_from_slice(signing_key.public_key().as_bytes()); // 165..229: signature @@ -2201,8 +2200,7 @@ mod tests { #[async_test] async fn test_create_dehydrated_device_key() { - let pickle_key = DehydratedDeviceKey::new() - .expect("Should be able to create a random dehydrated device key"); + let pickle_key = DehydratedDeviceKey::new(); let to_vec = pickle_key.inner.to_vec(); let pickle_key_from_slice = DehydratedDeviceKey::from_slice(to_vec.as_slice()) diff --git a/crates/matrix-sdk-crypto/src/store/types.rs b/crates/matrix-sdk-crypto/src/store/types.rs index 7661f692d..db81c07aa 100644 --- a/crates/matrix-sdk-crypto/src/store/types.rs +++ b/crates/matrix-sdk-crypto/src/store/types.rs @@ -22,6 +22,7 @@ use std::{ time::Duration, }; +use rand::Rng; use ruma::{MilliSecondsSinceUnixEpoch, OwnedDeviceId, OwnedRoomId, OwnedUserId}; use serde::{Deserialize, Serialize}; use vodozemac::{Curve25519PublicKey, base64_encode}; @@ -261,13 +262,14 @@ impl BackupDecryptionKey { pub const KEY_SIZE: usize = 32; /// Create a new random decryption key. - pub fn new() -> Result { - let mut rng = rand::thread_rng(); + #[allow(clippy::new_without_default)] + pub fn new() -> Self { + let mut rng = rand::rng(); let mut key = Box::new([0u8; Self::KEY_SIZE]); - rand::Fill::try_fill(key.as_mut_slice(), &mut rng)?; + rng.fill_bytes(key.as_mut_slice()); - Ok(Self { inner: key }) + Self { inner: key } } /// Export the [`BackupDecryptionKey`] as a base64 encoded string. @@ -298,13 +300,14 @@ impl DehydratedDeviceKey { pub const KEY_SIZE: usize = 32; /// Generates a new random pickle key. - pub fn new() -> Result { - let mut rng = rand::thread_rng(); + #[allow(clippy::new_without_default)] + pub fn new() -> Self { + let mut rng = rand::rng(); let mut key = Box::new([0u8; Self::KEY_SIZE]); - rand::Fill::try_fill(key.as_mut_slice(), &mut rng)?; + rng.fill_bytes(key.as_mut_slice()); - Ok(Self { inner: key }) + Self { inner: key } } /// Creates a new dehydration pickle key from the given slice. diff --git a/crates/matrix-sdk-crypto/src/verification/qrcode.rs b/crates/matrix-sdk-crypto/src/verification/qrcode.rs index 7af54fa7b..aace1b471 100644 --- a/crates/matrix-sdk-crypto/src/verification/qrcode.rs +++ b/crates/matrix-sdk-crypto/src/verification/qrcode.rs @@ -22,7 +22,7 @@ use matrix_sdk_qrcode::{ EncodingError, QrVerificationData, SelfVerificationData, SelfVerificationNoMasterKey, VerificationData, qrcode::QrCode, }; -use rand::{RngCore, thread_rng}; +use rand::{Rng, rng}; use ruma::{ DeviceId, OwnedDeviceId, OwnedUserId, RoomId, TransactionId, UserId, api::client::keys::upload_signatures::v3::Request as SignatureUploadRequest, @@ -495,7 +495,7 @@ impl QrVerification { fn generate_secret() -> Base64 { let mut shared_secret = vec![0u8; SECRET_SIZE]; - let mut rng = thread_rng(); + let mut rng = rng(); rng.fill_bytes(&mut shared_secret); Base64::new(shared_secret) diff --git a/crates/matrix-sdk-search/Cargo.toml b/crates/matrix-sdk-search/Cargo.toml index 9f8675b26..d65e99bcd 100644 --- a/crates/matrix-sdk-search/Cargo.toml +++ b/crates/matrix-sdk-search/Cargo.toml @@ -22,7 +22,7 @@ hmac = { workspace = true, features = ["reset"] } hkdf.workspace = true matrix-sdk-test = { workspace = true, optional = true } pbkdf2.workspace = true -rand.workspace = true +rand = { workspace = true, features = ["thread_rng"] } sha2.workspace = true tantivy = { version = "0.25.0", default-features = false, features = ["mmap", "stopwords", "lz4-compression", "columnar-zstd-compression"] } tracing = { workspace = true, features = ["attributes"] } diff --git a/crates/matrix-sdk-search/src/encrypted/encrypted_dir.rs b/crates/matrix-sdk-search/src/encrypted/encrypted_dir.rs index ce3afa541..e3b4d2949 100644 --- a/crates/matrix-sdk-search/src/encrypted/encrypted_dir.rs +++ b/crates/matrix-sdk-search/src/encrypted/encrypted_dir.rs @@ -27,7 +27,7 @@ use byteorder::{BigEndian, ReadBytesExt, WriteBytesExt}; use hkdf::Hkdf; use hmac::{Hmac, Mac}; use pbkdf2::pbkdf2; -use rand::{Rng, thread_rng}; +use rand::{Rng, rng}; use sha2::{ Sha256, Sha512, digest::{FixedOutputReset, Update}, @@ -488,18 +488,18 @@ impl EncryptedMmapDirectory { /// Generate a random IV. fn generate_iv() -> Result<[u8; IV_SIZE], IoError> { let mut iv = [0u8; IV_SIZE]; - let mut rng = thread_rng(); - rng.try_fill(&mut iv[..]) - .map_err(|e| IoError::other(format!("error generating iv: {:?}", e)))?; + let mut rng = rng(); + rng.fill_bytes(&mut iv[..]); + Ok(iv) } /// Generate a random key. fn generate_key() -> Result { let mut key = Zeroizing::new(vec![0u8; KEY_SIZE]); - let mut rng = thread_rng(); - rng.try_fill(&mut key[..]) - .map_err(|e| IoError::other(format!("error generating key: {:?}", e)))?; + let mut rng = rng(); + rng.fill_bytes(&mut key[..]); + Ok(key) } @@ -523,10 +523,9 @@ impl EncryptedMmapDirectory { passphrase: &str, pbkdf_count: u32, ) -> Result { - let mut rng = thread_rng(); + let mut rng = rng(); let mut salt = vec![0u8; SALT_SIZE]; - rng.try_fill(&mut salt[..]) - .map_err(|e| IoError::other(format!("error generating salt: {:?}", e)))?; + rng.fill_bytes(&mut salt[..]); let (key, hmac_key) = EncryptedMmapDirectory::rederive_key(passphrase, &salt, pbkdf_count) .map_err(|e| IoError::other(format!("error deriving key: {:?}", e)))?; diff --git a/crates/matrix-sdk-search/src/encrypted/encrypted_stream.rs b/crates/matrix-sdk-search/src/encrypted/encrypted_stream.rs index 431aa78ff..7197e083b 100644 --- a/crates/matrix-sdk-search/src/encrypted/encrypted_stream.rs +++ b/crates/matrix-sdk-search/src/encrypted/encrypted_stream.rs @@ -27,7 +27,7 @@ use std::{ use aes::cipher::{KeyInit, KeyIvInit, StreamCipher}; use hmac::Mac; -use rand::{Rng, thread_rng}; +use rand::{Rng, rng}; use sha2::digest::{FixedOutputReset, Update}; const BUFFER_SIZE: usize = 8192; @@ -73,9 +73,8 @@ impl< iv_size: usize, ) -> Result> { let mut iv = vec![0u8; iv_size]; - let mut rng = thread_rng(); - rng.try_fill(&mut iv[0..iv_size / 2]) - .map_err(|e| Error::other(format!("error generating iv: {:?}", e)))?; + let mut rng = rng(); + rng.fill_bytes(&mut iv[0..iv_size / 2]); let mac = ::new_from_slice(mac_key) .map_err(|e| Error::other(format!("error creating mac: {:?}", e)))?; diff --git a/crates/matrix-sdk-store-encryption/Cargo.toml b/crates/matrix-sdk-store-encryption/Cargo.toml index 323573338..7d7f2f870 100644 --- a/crates/matrix-sdk-store-encryption/Cargo.toml +++ b/crates/matrix-sdk-store-encryption/Cargo.toml @@ -23,7 +23,7 @@ chacha20poly1305 = { version = "0.10.1", default-features = false, features = [" getrandom = { workspace = true, optional = true } hmac.workspace = true pbkdf2.workspace = true -rand.workspace = true +rand = { workspace = true, features = ["thread_rng"] } rmp-serde.workspace = true serde = { workspace = true, features = ["derive"] } serde_json.workspace = true diff --git a/crates/matrix-sdk-store-encryption/src/lib.rs b/crates/matrix-sdk-store-encryption/src/lib.rs index 925811c10..2f1aaa79b 100644 --- a/crates/matrix-sdk-store-encryption/src/lib.rs +++ b/crates/matrix-sdk-store-encryption/src/lib.rs @@ -29,7 +29,7 @@ use chacha20poly1305::{ }; use hmac::Hmac; use pbkdf2::pbkdf2; -use rand::{Error as RandomError, Fill, thread_rng}; +use rand::{Rng, rng}; use serde::{Deserialize, Serialize, de::DeserializeOwned}; use sha2::Sha256; use zeroize::{Zeroize, ZeroizeOnDrop}; @@ -62,10 +62,6 @@ pub enum Error { #[error("Error encrypting or decrypting a value: `{0}`")] Encryption(#[from] EncryptionError), - /// Could not generate enough randomness for a cryptographic operation: {0} - #[error("Could not generate enough randomness for a cryptographic operation: `{0}`")] - Random(#[from] RandomError), - /// Unsupported ciphertext version. #[error("Unsupported ciphertext version, expected `{0}`, got `{1}`")] Version(u8, u8), @@ -191,7 +187,7 @@ impl StoreCipher { let key = ChachaKey::from_slice(key.as_ref()); let cipher = XChaCha20Poly1305::new(key); - let nonce = Keys::get_nonce()?; + let nonce = Keys::get_nonce(); let mut keys = [0u8; 64]; @@ -214,10 +210,10 @@ impl StoreCipher { } fn export_kdf(&self, passphrase: &str, kdf_rounds: u32) -> Result, Error> { - let mut rng = thread_rng(); + let mut rng = rng(); let mut salt = [0u8; KDF_SALT_SIZE]; - salt.try_fill(&mut rng)?; + rng.fill_bytes(&mut salt); let key = StoreCipher::expand_key(passphrase, &salt, kdf_rounds); @@ -453,7 +449,7 @@ impl StoreCipher { /// # anyhow::Ok(()) }; /// ``` pub fn encrypt_value_data(&self, mut data: Vec) -> Result { - let nonce = Keys::get_nonce()?; + let nonce = Keys::get_nonce(); let cipher = XChaCha20Poly1305::new(self.inner.encryption_key()); let ciphertext = cipher.encrypt(XNonce::from_slice(&nonce), data.as_ref())?; @@ -735,10 +731,10 @@ impl Keys { let mut encryption_key = Box::new([0u8; 32]); let mut mac_key_seed = Box::new([0u8; 32]); - let mut rng = thread_rng(); + let mut rng = rng(); - encryption_key.try_fill(&mut rng)?; - mac_key_seed.try_fill(&mut rng)?; + rng.fill_bytes(encryption_key.as_mut_slice()); + rng.fill_bytes(mac_key_seed.as_mut_slice()); Ok(Self { encryption_key, mac_key_seed }) } @@ -762,13 +758,13 @@ impl Keys { key } - fn get_nonce() -> Result<[u8; XNONCE_SIZE], RandomError> { + fn get_nonce() -> [u8; XNONCE_SIZE] { let mut nonce = [0u8; XNONCE_SIZE]; - let mut rng = thread_rng(); + let mut rng = rng(); - nonce.try_fill(&mut rng)?; + rng.fill_bytes(&mut nonce); - Ok(nonce) + nonce } } diff --git a/crates/matrix-sdk/src/encryption/backups/mod.rs b/crates/matrix-sdk/src/encryption/backups/mod.rs index 6a563d317..97a6c103c 100644 --- a/crates/matrix-sdk/src/encryption/backups/mod.rs +++ b/crates/matrix-sdk/src/encryption/backups/mod.rs @@ -105,10 +105,7 @@ impl Backups { let olm_machine = olm_machine.as_ref().ok_or(Error::NoOlmMachine)?; // Create a new backup recovery key. - let decryption_key = BackupDecryptionKey::new().expect( - "We should be able to generate enough randomness to create a new backup recovery \ - key", - ); + let decryption_key = BackupDecryptionKey::new(); // Get the info about the new backup key, this needs to be uploaded to the // homeserver[1]. @@ -1162,7 +1159,7 @@ mod test { let server = MatrixMockServer::new().await; let client = server.client_builder().build().await; let backups = client.encryption().backups(); - let backup_decryption_key = BackupDecryptionKey::new().unwrap(); + let backup_decryption_key = BackupDecryptionKey::new(); let matching_public_key = derive_public_key_from(&backup_decryption_key); @@ -1199,9 +1196,9 @@ mod test { let server = MatrixMockServer::new().await; let client = server.client_builder().build().await; let backups = client.encryption().backups(); - let backup_decryption_key = BackupDecryptionKey::new().unwrap(); + let backup_decryption_key = BackupDecryptionKey::new(); - let non_matching_public_key = derive_public_key_from(&BackupDecryptionKey::new().unwrap()); + let non_matching_public_key = derive_public_key_from(&BackupDecryptionKey::new()); server .mock_room_keys_version() diff --git a/crates/matrix-sdk/src/encryption/mod.rs b/crates/matrix-sdk/src/encryption/mod.rs index 98cdce7a4..2536187c2 100644 --- a/crates/matrix-sdk/src/encryption/mod.rs +++ b/crates/matrix-sdk/src/encryption/mod.rs @@ -2247,8 +2247,7 @@ mod tests { client1.olm_machine().await.clone().expect("must have an olm machine"); // Also enable backup to check that new machine has the same backup keys. - let decryption_key = matrix_sdk_base::crypto::store::types::BackupDecryptionKey::new() - .expect("Can't create new recovery key"); + let decryption_key = matrix_sdk_base::crypto::store::types::BackupDecryptionKey::new(); let backup_key = decryption_key.megolm_v1_public_key(); backup_key.set_version("1".to_owned()); initial_olm_machine diff --git a/crates/matrix-sdk/src/utils/local_server.rs b/crates/matrix-sdk/src/utils/local_server.rs index 6752ec6ee..d58bcc7fb 100644 --- a/crates/matrix-sdk/src/utils/local_server.rs +++ b/crates/matrix-sdk/src/utils/local_server.rs @@ -48,7 +48,7 @@ use axum::{body::Body, response::IntoResponse, routing::any_service}; use http::{HeaderValue, Method, Request, StatusCode, header}; use matrix_sdk_base::{boxed_into_future, locks::Mutex}; use matrix_sdk_common::executor::spawn; -use rand::{Rng, thread_rng}; +use rand::{RngExt, rng}; use tokio::{net::TcpListener, sync::oneshot}; use tower::service_fn; use url::Url; @@ -143,7 +143,7 @@ impl LocalServerBuilder { let mut n = 0u8; loop { - let port = thread_rng().gen_range(port_range.clone()); + let port = rng().random_range(port_range.clone()); let socket_addresses = ip_addresses.iter().map(|ip| SocketAddr::new(*ip, port)).collect::>(); diff --git a/examples/oauth_cli/src/main.rs b/examples/oauth_cli/src/main.rs index accbe0abd..92588ab38 100644 --- a/examples/oauth_cli/src/main.rs +++ b/examples/oauth_cli/src/main.rs @@ -39,7 +39,7 @@ use matrix_sdk::{ utils::local_server::{LocalServerBuilder, LocalServerRedirectHandle, QueryString}, }; use matrix_sdk_ui::sync_service::SyncService; -use rand::{Rng, distributions::Alphanumeric, thread_rng}; +use rand::{RngExt, distr::Alphanumeric, rng}; use serde::{Deserialize, Serialize}; use tokio::{fs, io::AsyncBufReadExt as _}; use url::Url; @@ -588,7 +588,7 @@ async fn build_client(data_dir: &Path) -> anyhow::Result<(Client, ClientSession) let db_path = data_dir.join("db"); // Generate a random passphrase. - let mut rng = thread_rng(); + let mut rng = rng(); let passphrase: String = (&mut rng).sample_iter(Alphanumeric).take(32).map(char::from).collect(); diff --git a/examples/persist_session/src/main.rs b/examples/persist_session/src/main.rs index 16b2d8671..f55a156d6 100644 --- a/examples/persist_session/src/main.rs +++ b/examples/persist_session/src/main.rs @@ -12,7 +12,7 @@ use matrix_sdk::{ events::room::message::{MessageType, OriginalSyncRoomMessageEvent}, }, }; -use rand::{Rng, distributions::Alphanumeric, thread_rng}; +use rand::{RngExt, distr::Alphanumeric, rng}; use serde::{Deserialize, Serialize}; use tokio::fs; @@ -162,7 +162,7 @@ async fn login(data_dir: &Path, session_file: &Path) -> anyhow::Result { /// Build a new client. async fn build_client(data_dir: &Path) -> anyhow::Result<(Client, ClientSession)> { - let mut rng = thread_rng(); + let mut rng = rng(); // Generating a subfolder for the database is not mandatory, but it is useful if // you allow several clients to run at the same time. Each one must have a diff --git a/testing/matrix-sdk-integration-testing/src/helpers.rs b/testing/matrix-sdk-integration-testing/src/helpers.rs index 0b6b2829d..5850d781c 100644 --- a/testing/matrix-sdk-integration-testing/src/helpers.rs +++ b/testing/matrix-sdk-integration-testing/src/helpers.rs @@ -24,7 +24,7 @@ use matrix_sdk::{ }; use matrix_sdk_base::crypto::{CollectStrategy, DecryptionSettings, TrustRequirement}; use matrix_sdk_common::cross_process_lock::CrossProcessLockConfig; -use rand::Rng as _; +use rand::RngExt; use tempfile::{TempDir, tempdir}; use tokio::{sync::Mutex, time::sleep}; @@ -51,7 +51,7 @@ pub struct TestClientBuilder { impl TestClientBuilder { pub fn new(username: impl AsRef) -> Self { - let suffix: u128 = rand::thread_rng().r#gen(); + let suffix: u128 = rand::rng().random(); let randomized_username = format!("{}{}", username.as_ref(), suffix); Self::with_exact_username(randomized_username) } diff --git a/testing/matrix-sdk-integration-testing/src/tests/room_directory_search.rs b/testing/matrix-sdk-integration-testing/src/tests/room_directory_search.rs index 91ad47778..b82d62c87 100644 --- a/testing/matrix-sdk-integration-testing/src/tests/room_directory_search.rs +++ b/testing/matrix-sdk-integration-testing/src/tests/room_directory_search.rs @@ -23,7 +23,7 @@ use matrix_sdk::{ room_directory_search::RoomDirectorySearch, ruma::api::client::room::{Visibility, create_room::v3::Request as CreateRoomRequest}, }; -use rand::{Rng, thread_rng}; +use rand::{RngExt, rng}; use stream_assert::assert_pending; use tokio::time::sleep; use tracing::warn; @@ -72,9 +72,5 @@ async fn test_room_directory_search_filter() -> Result<()> { } fn random_string(length: usize) -> String { - thread_rng() - .sample_iter(&rand::distributions::Alphanumeric) - .take(length) - .map(char::from) - .collect() + rng().sample_iter(&rand::distr::Alphanumeric).take(length).map(char::from).collect() } diff --git a/testing/matrix-sdk-integration-testing/src/tests/sliding_sync/room.rs b/testing/matrix-sdk-integration-testing/src/tests/sliding_sync/room.rs index 93424417a..6da40c03a 100644 --- a/testing/matrix-sdk-integration-testing/src/tests/sliding_sync/room.rs +++ b/testing/matrix-sdk-integration-testing/src/tests/sliding_sync/room.rs @@ -49,7 +49,7 @@ use matrix_sdk_ui::{ RoomListService, room_list_service::filters::new_filter_all, sync_service::SyncService, timeline::RoomExt, }; -use rand::Rng as _; +use rand::{Rng as _, RngExt}; use serde_json::Value; use stream_assert::assert_pending; use tokio::{ @@ -946,7 +946,7 @@ async fn test_room_preview() -> Result<()> { .await?; // Alice creates a room in which they're alone, to start with. - let suffix: u128 = rand::thread_rng().r#gen(); + let suffix: u128 = rand::rng().random(); let room_alias = format!("aliasy_mac_alias{suffix}"); let room = alice