From 8be27f1d09a57338fbabc91e51d9a6ccc8f09b2a Mon Sep 17 00:00:00 2001 From: Elias Rohrer Date: Wed, 18 Feb 2026 10:04:44 +0100 Subject: [PATCH] Remove `proptest` dev-dependency in favor of manual randomization A sub-dependency of `proptest` started depending on `getrandom` v0.4.1 which uses `edition = 2024`, which isn't supported in our MSRV of 1.75.0. Here we replace the `proptest`-based round-trip test with a simple loop using `rand` (already a regular dependency) to generate random inputs. This removes a dev-dependency and its associated MSRV pin in CI. Co-Authored-By: HAL 9000 Signed-off-by: Elias Rohrer --- .github/workflows/build.yml | 1 - Cargo.toml | 1 - src/util/key_obfuscator.rs | 19 +++++++++++++++---- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 4ccc9e2..17088f2 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -26,7 +26,6 @@ jobs: if: matrix.msrv run: | cargo update -p idna_adapter --precise 1.1.0 # This has us use `unicode-normalization` which has a more conservative MSRV - cargo update -p proptest --precise "1.8.0" --verbose # proptest 1.9.0 requires rustc 1.82.0 - name: Build on Rust ${{ matrix.toolchain }} run: cargo build --verbose --color always - name: Check formatting diff --git a/Cargo.toml b/Cargo.toml index c2c2d48..99bbde0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -40,7 +40,6 @@ reqwest = { version = "0.12", default-features = false, features = ["rustls-tls [dev-dependencies] mockito = "0.28.0" -proptest = "1.1.0" tokio = { version = "1.22.0", features = ["macros"]} [lints.rust.unexpected_cfgs] diff --git a/src/util/key_obfuscator.rs b/src/util/key_obfuscator.rs index 320d368..c096e3d 100644 --- a/src/util/key_obfuscator.rs +++ b/src/util/key_obfuscator.rs @@ -194,11 +194,22 @@ mod tests { assert_eq!(deobfuscated_key, "my_storage_key_v031_compat"); } - use proptest::prelude::*; + #[test] + fn obfuscate_deobfuscate_randomized() { + use rand::Rng; + + let charset = + b"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_!@#,;:% *$^&()[]{}.\t\n\r"; + let mut rng = rand::thread_rng(); + + for _ in 0..100 { + let mut obfuscation_master_key = [0u8; 32]; + rng.fill(&mut obfuscation_master_key); + + let key_len: usize = rng.gen_range(0..128); + let expected_key: String = + (0..key_len).map(|_| charset[rng.gen_range(0..charset.len())] as char).collect(); - proptest! { - #[test] - fn obfuscate_deobfuscate_proptest(expected_key in "[a-zA-Z0-9_!@#,;:%\\s\\*\\$\\^&\\(\\)\\[\\]\\{\\}\\.]*", obfuscation_master_key in any::<[u8; 32]>()) { let key_obfuscator = KeyObfuscator::new(obfuscation_master_key); let obfuscated_key = key_obfuscator.obfuscate(&expected_key); let actual_key = key_obfuscator.deobfuscate(obfuscated_key.as_str()).unwrap();