Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion hmac/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ digest = { version = "0.11.2", features = ["mac"] }
digest = { version = "0.11.2", features = ["dev"] }
md-5 = { version = "0.11", default-features = false }
sha1 = { version = "0.11", default-features = false }
sha2 = { version = "0.11", default-features = false }
sha2 = { version = "0.11", default-features = false, features = ["zeroize"] }
streebog = { version = "0.11", default-features = false }
hex-literal = "1"

Expand Down
9 changes: 9 additions & 0 deletions hmac/src/block_api.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@ use digest::{
common::{Key, KeySizeUser},
};

#[cfg(feature = "zeroize")]
use digest::zeroize::ZeroizeOnDrop;

/// Generic core HMAC instance, which operates over blocks.
pub struct HmacCore<D: EagerHash> {
digest: D::Core,
Expand Down Expand Up @@ -98,6 +101,9 @@ impl<D: EagerHash + AlgorithmName> AlgorithmName for HmacCore<D> {
}
}

#[cfg(feature = "zeroize")]
impl<D: EagerHash> ZeroizeOnDrop for HmacCore<D> where D::Core: ZeroizeOnDrop {}

impl<D: EagerHash> fmt::Debug for HmacCore<D>
where
D::Core: AlgorithmName,
Expand Down Expand Up @@ -205,6 +211,9 @@ impl<D: EagerHash + AlgorithmName> AlgorithmName for HmacResetCore<D> {
}
}

#[cfg(feature = "zeroize")]
impl<D: EagerHash> ZeroizeOnDrop for HmacResetCore<D> where D::Core: ZeroizeOnDrop {}

impl<D: EagerHash> fmt::Debug for HmacResetCore<D>
where
D::Core: AlgorithmName,
Expand Down
9 changes: 9 additions & 0 deletions hmac/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,9 @@ pub use simple_reset::SimpleHmacReset;
use core::fmt;
use digest::block_api::{AlgorithmName, CoreProxy};

#[cfg(feature = "zeroize")]
use digest::zeroize::ZeroizeOnDrop;

digest::buffer_fixed!(
/// Generic HMAC instance.
#[derive(Clone)]
Expand All @@ -44,6 +47,9 @@ impl<D: EagerHash + AlgorithmName> AlgorithmName for Hmac<D> {
}
}

#[cfg(feature = "zeroize")]
impl<D: EagerHash> ZeroizeOnDrop for Hmac<D> where D::Core: ZeroizeOnDrop {}

digest::buffer_fixed!(
/// Generic HMAC instance with reset support.
#[derive(Clone)]
Expand All @@ -56,3 +62,6 @@ impl<D: EagerHash + AlgorithmName> AlgorithmName for HmacReset<D> {
<Self as CoreProxy>::Core::write_alg_name(f)
}
}

#[cfg(feature = "zeroize")]
impl<D: EagerHash> ZeroizeOnDrop for HmacReset<D> where D::Core: ZeroizeOnDrop {}
21 changes: 21 additions & 0 deletions hmac/tests/zeroize.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
//! `ZeroizeOnDrop` tests.
#![cfg(feature = "zeroize")]

use digest::zeroize::ZeroizeOnDrop;
use hmac::{
Hmac, HmacReset,
block_api::{HmacCore, HmacResetCore},
};
use sha2::{Sha256, Sha512};

fn assert_zeroize_on_drop<T: ZeroizeOnDrop>() {}

#[test]
fn zeroize_on_drop() {
assert_zeroize_on_drop::<HmacCore<Sha256>>();
assert_zeroize_on_drop::<HmacResetCore<Sha256>>();
assert_zeroize_on_drop::<Hmac<Sha256>>();
assert_zeroize_on_drop::<HmacReset<Sha256>>();
assert_zeroize_on_drop::<Hmac<Sha512>>();
assert_zeroize_on_drop::<HmacReset<Sha512>>();
}
Loading