Skip to content

Commit 9adf33b

Browse files
committed
Implement Zeroize
Introduce new dependency `zeroize`. Implement `Zeroize` for our array types with the `impl_array_newtype` macro. Add a unit test that test a newly create `SecretKey` is zeroized after calling `zeroize()` on it.
1 parent 867b920 commit 9adf33b

File tree

4 files changed

+26
-1
lines changed

4 files changed

+26
-1
lines changed

Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ secp256k1-sys = { version = "0.3.1", default-features = false, path = "./secp256
3131
bitcoin_hashes = { version = "0.9", optional = true }
3232
rand = { version = "0.6", default-features = false, optional = true }
3333
serde = { version = "1.0", default-features = false, optional = true }
34-
34+
zeroize = { version = "1.2", default-features = false, optional = true }
3535

3636
[dev-dependencies]
3737
rand = "0.6"

secp256k1-sys/src/macros.rs

+8
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,14 @@ macro_rules! impl_array_newtype {
8383
}
8484
}
8585

86+
#[cfg(feature = "zeroize")]
87+
impl zeroize::Zeroize for $thing {
88+
fn zeroize(&mut self) {
89+
let &mut $thing(ref mut dat) = self;
90+
dat.zeroize()
91+
}
92+
}
93+
8694
impl ::core::ops::Index<usize> for $thing {
8795
type Output = $ty;
8896

src/key.rs

+16
Original file line numberDiff line numberDiff line change
@@ -850,4 +850,20 @@ mod test {
850850
assert_tokens(&pk.compact(), &[Token::BorrowedBytes(&PK_BYTES[..])]);
851851
assert_tokens(&pk.readable(), &[Token::BorrowedStr(PK_STR)]);
852852
}
853+
854+
#[cfg(feature = "zeroize")]
855+
#[test]
856+
fn zeroize_secret_key() {
857+
use zeroize::Zeroize;
858+
859+
let mut sk = SecretKey::new(&mut thread_rng());
860+
sk.zeroize();
861+
862+
let ptr = &sk.0[0];
863+
864+
for _ in 0..32 {
865+
assert_eq!(*ptr, 0x00);
866+
}
867+
}
853868
}
869+

src/lib.rs

+1
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,7 @@ pub use secp256k1_sys as ffi;
135135
#[cfg(any(test, feature = "rand"))] use rand::Rng;
136136
#[cfg(any(test, feature = "std"))] extern crate core;
137137
#[cfg(all(test, target_arch = "wasm32"))] extern crate wasm_bindgen_test;
138+
#[cfg(feature = "zeroize")] extern crate zeroize;
138139

139140
use core::{fmt, ptr, str};
140141

0 commit comments

Comments
 (0)