From 8a96d4da51522d692813e549d36dbac48480ee83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D1=80=D1=82=D1=91=D0=BC=20=D0=9F=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=BE=D0=B2=20=5BArtyom=20Pavlov=5D?= Date: Fri, 19 Sep 2025 16:31:56 +0300 Subject: [PATCH 1/7] Add `windows-legacy` opt-in backend --- Cargo.lock | 48 ++++++++++++++++++++++++------------------------ Cargo.toml | 2 +- README.md | 1 + src/backends.rs | 3 +++ 4 files changed, 29 insertions(+), 25 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 5fa47040..589df9fa 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -10,9 +10,9 @@ checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" [[package]] name = "cc" -version = "1.2.37" +version = "1.2.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65193589c6404eb80b450d618eaf9a2cafaaafd57ecce47370519ef674a7bd44" +checksum = "80f41ae168f955c12fb8960b057d70d0ca153fb83182b57d86380443527be7e9" dependencies = [ "find-msvc-tools", "shlex", @@ -26,9 +26,9 @@ checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9" [[package]] name = "find-msvc-tools" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fd99930f64d146689264c637b5af2f0233a933bef0d8570e2526bf9e083192d" +checksum = "1ced73b1dacfc750a6db6c0a0c3a3853c8b41997e2e2c563dc90804ae6867959" [[package]] name = "getrandom" @@ -45,9 +45,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.78" +version = "0.3.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c0b063578492ceec17683ef2f8c5e89121fbd0b172cbc280635ab7567db2738" +checksum = "852f13bec5eba4ba9afbeb93fd7c13fe56147f055939ae21c43a29a0ecb2702e" dependencies = [ "once_cell", "wasm-bindgen", @@ -158,9 +158,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.101" +version = "0.2.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e14915cadd45b529bb8d1f343c4ed0ac1de926144b746e2710f9cd05df6603b" +checksum = "ab10a69fbd0a177f5f649ad4d8d3305499c42bab9aef2f7ff592d0ec8f833819" dependencies = [ "cfg-if", "once_cell", @@ -170,9 +170,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.101" +version = "0.2.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e28d1ba982ca7923fd01448d5c30c6864d0a14109560296a162f80f305fb93bb" +checksum = "0bb702423545a6007bbc368fde243ba47ca275e549c8a28617f56f6ba53b1d1c" dependencies = [ "bumpalo", "log", @@ -184,9 +184,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.51" +version = "0.4.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ca85039a9b469b38336411d6d6ced91f3fc87109a2a27b0c197663f5144dffe" +checksum = "a0b221ff421256839509adbb55998214a70d829d3a28c69b4a6672e9d2a42f67" dependencies = [ "cfg-if", "js-sys", @@ -197,9 +197,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.101" +version = "0.2.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c3d463ae3eff775b0c45df9da45d68837702ac35af998361e2c84e7c5ec1b0d" +checksum = "fc65f4f411d91494355917b605e1480033152658d71f722a90647f56a70c88a0" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -207,9 +207,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.101" +version = "0.2.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bb4ce89b08211f923caf51d527662b75bdc9c9c7aab40f86dcb9fb85ac552aa" +checksum = "ffc003a991398a8ee604a401e194b6b3a39677b3173d6e74495eb51b82e99a32" dependencies = [ "proc-macro2", "quote", @@ -220,18 +220,18 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.101" +version = "0.2.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f143854a3b13752c6950862c906306adb27c7e839f7414cec8fea35beab624c1" +checksum = "293c37f4efa430ca14db3721dfbe48d8c33308096bd44d80ebaa775ab71ba1cf" dependencies = [ "unicode-ident", ] [[package]] name = "wasm-bindgen-test" -version = "0.3.51" +version = "0.3.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80cc7f8a4114fdaa0c58383caf973fc126cf004eba25c9dc639bccd3880d55ad" +checksum = "aee0a0f5343de9221a0d233b04520ed8dc2e6728dce180b1dcd9288ec9d9fa3c" dependencies = [ "js-sys", "minicov", @@ -242,9 +242,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-test-macro" -version = "0.3.51" +version = "0.3.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5ada2ab788d46d4bda04c9d567702a79c8ced14f51f221646a16ed39d0e6a5d" +checksum = "a369369e4360c2884c3168d22bded735c43cccae97bbc147586d4b480edd138d" dependencies = [ "proc-macro2", "quote", @@ -253,9 +253,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.78" +version = "0.3.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77e4b637749ff0d92b8fad63aa1f7cff3cbe125fd49c175cd6345e7272638b12" +checksum = "fbe734895e869dc429d78c4b433f8d17d95f8d05317440b4fad5ab2d33e596dc" dependencies = [ "js-sys", "wasm-bindgen", diff --git a/Cargo.toml b/Cargo.toml index 33322a04..a9e20f95 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -77,7 +77,7 @@ wasm-bindgen-test = "0.3" [lints.rust.unexpected_cfgs] level = "warn" check-cfg = [ - 'cfg(getrandom_backend, values("custom", "efi_rng", "rdrand", "rndr", "linux_getrandom", "linux_raw", "wasm_js", "unsupported"))', + 'cfg(getrandom_backend, values("custom", "efi_rng", "rdrand", "rndr", "linux_getrandom", "linux_raw", "wasm_js", "windows_legacy", "unsupported"))', 'cfg(getrandom_msan)', 'cfg(getrandom_windows_legacy)', 'cfg(getrandom_test_linux_fallback)', diff --git a/README.md b/README.md index 17e84860..9866302a 100644 --- a/README.md +++ b/README.md @@ -86,6 +86,7 @@ of randomness based on their specific needs: | `rndr` | AArch64 | `aarch64-*` | [`RNDR`] register | `wasm_js` | Web Browser, Node.js | `wasm32‑unknown‑unknown`, `wasm32v1-none` | [`Crypto.getRandomValues`]. Requires feature `wasm_js` ([see below](#webassembly-support)). | `efi_rng` | UEFI | `*-unknown‑uefi` | [`EFI_RNG_PROTOCOL`] with `EFI_RNG_ALGORITHM_RAW` (requires `std` and Nightly compiler) +| `windows_legacy` | Windows | `*-windows-*` | [`RtlGenRandom`] | `custom` | All targets | `*` | User-provided custom implementation (see [custom backend]) | `unsupported` | All targets | `*` | Always returns `Err(Error::UNSUPPORTED)` (see [unsupported backend]) diff --git a/src/backends.rs b/src/backends.rs index d7b73cec..28f788fe 100644 --- a/src/backends.rs +++ b/src/backends.rs @@ -28,6 +28,9 @@ cfg_if! { } else if #[cfg(getrandom_backend = "efi_rng")] { mod efi_rng; pub use efi_rng::*; + } else if #[cfg(getrandom_backend = "windows_legacy")] { + mod windows7; + pub use windows7::*; } else if #[cfg(all(getrandom_backend = "wasm_js"))] { cfg_if! { if #[cfg(feature = "wasm_js")] { From 67c2681bac4077392b81b7b635b534fbb99647c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D1=80=D1=82=D1=91=D0=BC=20=D0=9F=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=BE=D0=B2=20=5BArtyom=20Pavlov=5D?= Date: Fri, 19 Sep 2025 16:36:58 +0300 Subject: [PATCH 2/7] remove `getrandom_windows_legacy` --- Cargo.toml | 1 - build.rs | 2 +- src/backends.rs | 2 +- 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index a9e20f95..27f3532f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -79,7 +79,6 @@ level = "warn" check-cfg = [ 'cfg(getrandom_backend, values("custom", "efi_rng", "rdrand", "rndr", "linux_getrandom", "linux_raw", "wasm_js", "windows_legacy", "unsupported"))', 'cfg(getrandom_msan)', - 'cfg(getrandom_windows_legacy)', 'cfg(getrandom_test_linux_fallback)', 'cfg(getrandom_test_linux_without_fallback)', 'cfg(getrandom_test_netbsd_fallback)', diff --git a/build.rs b/build.rs index b87d2e55..14b64550 100644 --- a/build.rs +++ b/build.rs @@ -48,7 +48,7 @@ fn main() { match rustc_minor_version() { Some(minor_ver) if minor_ver < WIN7_INTRODUCED_MINOR_VER => { - println!("cargo:rustc-cfg=getrandom_windows_legacy"); + println!("cargo:rustc-cfg=getrandom_backend=\"windows-legacy\""); } None => println!("cargo:warning=Couldn't detect minor version of the Rust compiler"), _ => {} diff --git a/src/backends.rs b/src/backends.rs index 28f788fe..9d20c3ca 100644 --- a/src/backends.rs +++ b/src/backends.rs @@ -176,7 +176,7 @@ cfg_if! { } else if #[cfg(target_os = "solid_asp3")] { mod solid; pub use solid::*; - } else if #[cfg(all(windows, any(target_vendor = "win7", getrandom_windows_legacy)))] { + } else if #[cfg(all(windows, target_vendor = "win7"))] { mod windows7; pub use windows7::*; } else if #[cfg(windows)] { From caa81d5da0149f8b11a2c0c1e2a488ed79e123be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D1=80=D1=82=D1=91=D0=BC=20=D0=9F=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=BE=D0=B2=20=5BArtyom=20Pavlov=5D?= Date: Fri, 19 Sep 2025 16:39:12 +0300 Subject: [PATCH 3/7] rename windows7 to windows_legacy --- src/backends.rs | 8 ++++---- src/backends/{windows7.rs => windows_legacy.rs} | 0 2 files changed, 4 insertions(+), 4 deletions(-) rename src/backends/{windows7.rs => windows_legacy.rs} (100%) diff --git a/src/backends.rs b/src/backends.rs index 9d20c3ca..8f64824c 100644 --- a/src/backends.rs +++ b/src/backends.rs @@ -29,8 +29,8 @@ cfg_if! { mod efi_rng; pub use efi_rng::*; } else if #[cfg(getrandom_backend = "windows_legacy")] { - mod windows7; - pub use windows7::*; + mod windows_legacy; + pub use windows_legacy::*; } else if #[cfg(all(getrandom_backend = "wasm_js"))] { cfg_if! { if #[cfg(feature = "wasm_js")] { @@ -177,8 +177,8 @@ cfg_if! { mod solid; pub use solid::*; } else if #[cfg(all(windows, target_vendor = "win7"))] { - mod windows7; - pub use windows7::*; + mod windows_legacy; + pub use windows_legacy::*; } else if #[cfg(windows)] { mod windows; pub use windows::*; diff --git a/src/backends/windows7.rs b/src/backends/windows_legacy.rs similarity index 100% rename from src/backends/windows7.rs rename to src/backends/windows_legacy.rs From 1b109d38e98362f6445c0ca1f2d20d69168089ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D1=80=D1=82=D1=91=D0=BC=20=D0=9F=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=BE=D0=B2=20=5BArtyom=20Pavlov=5D?= Date: Fri, 19 Sep 2025 16:40:54 +0300 Subject: [PATCH 4/7] tweak build.rs --- build.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.rs b/build.rs index 14b64550..11312340 100644 --- a/build.rs +++ b/build.rs @@ -48,7 +48,7 @@ fn main() { match rustc_minor_version() { Some(minor_ver) if minor_ver < WIN7_INTRODUCED_MINOR_VER => { - println!("cargo:rustc-cfg=getrandom_backend=\"windows-legacy\""); + println!("cargo:rustc-cfg=\"getrandom_backend=windows-legacy\""); } None => println!("cargo:warning=Couldn't detect minor version of the Rust compiler"), _ => {} From e083a099c01be46bb0b280685288f038f4702d1a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D1=80=D1=82=D1=91=D0=BC=20=D0=9F=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=BE=D0=B2=20=5BArtyom=20Pavlov=5D?= Date: Fri, 19 Sep 2025 16:43:19 +0300 Subject: [PATCH 5/7] fix build.rs --- build.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.rs b/build.rs index 11312340..a35ad61b 100644 --- a/build.rs +++ b/build.rs @@ -48,7 +48,7 @@ fn main() { match rustc_minor_version() { Some(minor_ver) if minor_ver < WIN7_INTRODUCED_MINOR_VER => { - println!("cargo:rustc-cfg=\"getrandom_backend=windows-legacy\""); + println!("cargo:rustc-cfg=getrandom_backend=\"windows_legacy\""); } None => println!("cargo:warning=Couldn't detect minor version of the Rust compiler"), _ => {} From 72772936891bdc316334d95de5f4104cd8f5b808 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D1=80=D1=82=D1=91=D0=BC=20=D0=9F=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=BE=D0=B2=20=5BArtyom=20Pavlov=5D?= Date: Fri, 19 Sep 2025 16:57:54 +0300 Subject: [PATCH 6/7] Update changelog --- CHANGELOG.md | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d310fb57..799dc407 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,18 +6,26 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [0.3.4] - UNRELEASED -### Changed -- Relax MSRV for the `linux_raw` opt-in backend on ARM targets [#688] - ### Added - `unsupported` opt-in backend [#667] +- `windows_legacy` opt-in backend [#724] + +### Changed +- Implement Memory Sanitizer unpoisoning more precisely [#678] +- Relax MSRV for the `linux_raw` opt-in backend on ARM targets [#688] +- Use `getrandom` syscall on all RISC-V Linux targets [#699] +- Replaced `wasi` dependency with `wasip2` [#721] ### Removed - Unstable `rustc-dep-of-std` crate feature [#694] [#667]: https://github.com/rust-random/getrandom/pull/667 +[#678]: https://github.com/rust-random/getrandom/pull/678 [#688]: https://github.com/rust-random/getrandom/pull/688 [#694]: https://github.com/rust-random/getrandom/pull/694 +[#699]: https://github.com/rust-random/getrandom/pull/699 +[#721]: https://github.com/rust-random/getrandom/pull/721 +[#724]: https://github.com/rust-random/getrandom/pull/724 ## [0.3.3] - 2025-05-09 From 2040acd4511fee6ab5b7cb91c4ea0cc459531129 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D1=80=D1=82=D1=91=D0=BC=20=D0=9F=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=BE=D0=B2=20=5BArtyom=20Pavlov=5D?= Date: Fri, 19 Sep 2025 17:03:17 +0300 Subject: [PATCH 7/7] Add `compile_error!` --- src/backends/windows_legacy.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/backends/windows_legacy.rs b/src/backends/windows_legacy.rs index cee5f43a..4b3f0927 100644 --- a/src/backends/windows_legacy.rs +++ b/src/backends/windows_legacy.rs @@ -14,6 +14,9 @@ use core::{ffi::c_void, mem::MaybeUninit}; pub use crate::util::{inner_u32, inner_u64}; +#[cfg(not(windows))] +compile_error!("`windows_legacy` backend can be enabled only for Windows targets!"); + // Binding to the Windows.Win32.Security.Authentication.Identity.RtlGenRandom // API. Don't use windows-targets as it doesn't support Windows 7 targets. #[link(name = "advapi32")]