#compiler-optimization #memory #volatile #secure #memset #zero

no-std zeroize

Securely clear secrets from memory with a simple trait built on stable Rust primitives which guarantee memory is zeroed using an operation will not be 'optimized away' by the compiler. Uses a portable pure Rust implementation that works everywhere, even WASM!

17 stable releases

1.8.1 May 25, 2024
1.7.0 Nov 16, 2023
1.6.0 Mar 26, 2023
1.5.7 Jul 20, 2022
0.4.2 Nov 28, 2018

#835 in Cryptography

Download history 1643187/week @ 2024-08-15 1709082/week @ 2024-08-22 1615319/week @ 2024-08-29 1757491/week @ 2024-09-05 1659961/week @ 2024-09-12 1787607/week @ 2024-09-19 1914279/week @ 2024-09-26 2321835/week @ 2024-10-03 2266119/week @ 2024-10-10 2371026/week @ 2024-10-17 1871275/week @ 2024-10-24 1758046/week @ 2024-10-31 1782358/week @ 2024-11-07 1903474/week @ 2024-11-14 1846549/week @ 2024-11-21 1363023/week @ 2024-11-28

7,207,678 downloads per month
Used in 14,463 crates (973 directly)

Apache-2.0 OR MIT

36KB
456 lines

RustCrypto: zeroize

Crate Docs Apache 2.0/MIT Licensed MSRV Build Status

Securely zero memory (a.k.a. zeroize) while avoiding compiler optimizations.

This crate implements a portable approach to securely zeroing memory using techniques which guarantee they won't be "optimized away" by the compiler.

The Zeroize trait is the crate's primary API.

Documentation

About

Zeroing memory securely is hard - compilers optimize for performance, and in doing so they love to "optimize away" unnecessary zeroing calls. There are many documented "tricks" to attempt to avoid these optimizations and ensure that a zeroing routine is performed reliably.

This crate isn't about tricks: it uses core::ptr::write_volatile and core::sync::atomic memory fences to provide easy-to-use, portable zeroing behavior which works on all of Rust's core number types and slices thereof, implemented in pure Rust with no usage of FFI or assembly.

  • No insecure fallbacks!
  • No dependencies!
  • No FFI or inline assembly! WASM friendly (and tested)!
  • #![no_std] i.e. embedded-friendly!
  • No functionality besides securely zeroing memory!
  • (Optional) Custom derive support for zeroing complex structures

Minimum Supported Rust Version

Rust 1.60 or newer.

In the future, we reserve the right to change MSRV (i.e. MSRV is out-of-scope for this crate's SemVer guarantees), however when we do it will be accompanied by a minor version bump.

License

Licensed under either of:

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Dependencies

~160KB