chore: Bump rand

This commit is contained in:
Damir Jelić
2026-03-30 14:27:59 +02:00
parent f0193cc8ac
commit 16c1b9b57f
34 changed files with 320 additions and 141 deletions
Generated
+221 -23
View File
@@ -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"
+2 -2
View File
@@ -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 }
+3 -3
View File
@@ -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.
@@ -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<Self> {
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<Self> {
let mut rng = thread_rng();
let mut rng = rng();
let salt: String = iter::repeat(())
.map(|()| rng.sample(Alphanumeric))
.map(char::from)
@@ -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<matrix_sdk_crypto::dehydrated_devices::DehydrationError> 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;
+3 -3
View File
@@ -850,9 +850,9 @@ pub struct DehydratedDeviceKey {
impl DehydratedDeviceKey {
/// Generates a new random pickle key.
pub fn new() -> Result<Self, DehydrationError> {
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.
+1
View File
@@ -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]
+1
View File
@@ -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]
@@ -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();
+4 -4
View File
@@ -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 {
+2 -2
View File
@@ -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);
@@ -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();
@@ -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
@@ -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);
@@ -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)
@@ -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 {
@@ -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::<Hmac<Sha512>>(
@@ -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();
+3 -5
View File
@@ -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())
+11 -8
View File
@@ -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<Self, rand::Error> {
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<Self, rand::Error> {
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.
@@ -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)
+1 -1
View File
@@ -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"] }
@@ -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<KeyBuffer, IoError> {
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<InitialKeyDerivationResult, IoError> {
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)))?;
@@ -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<AesWriter<E, M, W>> {
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 = <M as Mac>::new_from_slice(mac_key)
.map_err(|e| Error::other(format!("error creating mac: {:?}", e)))?;
@@ -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
+12 -16
View File
@@ -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<Vec<u8>, 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<u8>) -> Result<EncryptedValue, Error> {
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
}
}
@@ -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()
+1 -2
View File
@@ -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
+2 -2
View File
@@ -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::<Vec<_>>();
+2 -2
View File
@@ -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();
+2 -2
View File
@@ -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<Client> {
/// 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
@@ -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<str>) -> 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)
}
@@ -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()
}
@@ -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