diff --git a/Cargo.lock b/Cargo.lock index 9834a8d..9460c61 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -39,6 +39,17 @@ version = "0.1.1" dependencies = [ "belt-block", "hex-literal", + "zeroize", +] + +[[package]] +name = "block-buffer" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdd35008169921d80bc60d3d0ab416eecb028c4cd653352907921d95084790be" +dependencies = [ + "hybrid-array", + "zeroize", ] [[package]] @@ -47,8 +58,10 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e8cf2a2c93cd704877c0858356ed03480ff301ee950b43f1cbe4573b088bfa6c" dependencies = [ + "block-buffer", "crypto-common", "inout", + "zeroize", ] [[package]] @@ -94,6 +107,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9155a582abd142abc056962c29e3ce5ff2ad5469f4246b537ed42c5deba857da" dependencies = [ "typenum", + "zeroize", ] [[package]] diff --git a/belt-kwp/CHANGELOG.md b/belt-kwp/CHANGELOG.md index d19c95d..a95e453 100644 --- a/belt-kwp/CHANGELOG.md +++ b/belt-kwp/CHANGELOG.md @@ -5,10 +5,15 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## 0.2.0 (UNRELEASED) +### Added +- Optional `zeroize` support ([#88]) + ### Removed - `std` and `alloc` crate features ([#87]) +- Implementation of `Copy` for `BeltKwp` ([#88]) [#87]: https://github.com/RustCrypto/key-wraps/pull/87 +[#88]: https://github.com/RustCrypto/key-wraps/pull/88 ## 0.1.1 (2026-05-27) ### Changed diff --git a/belt-kwp/Cargo.toml b/belt-kwp/Cargo.toml index 0c0b92b..5d8cdfb 100644 --- a/belt-kwp/Cargo.toml +++ b/belt-kwp/Cargo.toml @@ -13,9 +13,13 @@ rust-version = "1.85" [dependencies] belt-block = "0.2" +zeroize = { version = "1.8", optional = true, default-features = false } [dev-dependencies] hex-literal = "1" +[features] +zeroize = ["dep:zeroize", "belt-block/zeroize"] + [package.metadata.docs.rs] all-features = true diff --git a/belt-kwp/src/lib.rs b/belt-kwp/src/lib.rs index c13d666..c52dd84 100644 --- a/belt-kwp/src/lib.rs +++ b/belt-kwp/src/lib.rs @@ -29,7 +29,7 @@ pub type WrappedKey = Array>; pub const IV_LEN: usize = IvLen::USIZE; /// BelT Key Wrap instance as defined in STB 34.101.34-2020. -#[derive(Clone, Copy, PartialEq)] +#[derive(Clone, PartialEq)] pub struct BeltKwp { key: [u32; 8], } @@ -206,6 +206,19 @@ impl KeySizeUser for BeltKwp { } } +impl Drop for BeltKwp { + fn drop(&mut self) { + #[cfg(feature = "zeroize")] + { + use zeroize::Zeroize; + self.key.zeroize(); + } + } +} + +#[cfg(feature = "zeroize")] +impl zeroize::ZeroizeOnDrop for BeltKwp {} + /// Errors emitted from the wrap and unwrap operations. #[derive(Debug)] pub enum Error {