From a298344178e53b0e5f9781e5fe73452668f673c4 Mon Sep 17 00:00:00 2001 From: Praveen Perera Date: Mon, 19 Apr 2021 11:31:53 -0400 Subject: [PATCH 1/3] Add optional zeroize support --- Cargo.toml | 1 + src/lib.rs | 12 ++++++++++++ 2 files changed, 13 insertions(+) diff --git a/Cargo.toml b/Cargo.toml index cd4c2aa..4d7b5d8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -46,6 +46,7 @@ rand_core = "0.4.0" unicode-normalization = { version = "=0.1.9", optional = true } rand = { version = "0.6.0", optional = true } serde = { version = "1.0", default-features = false, optional = true } +zeroize = {version = "1.2", optional = true} [dev-dependencies] rand = { version = "0.6.0", optional = false } diff --git a/src/lib.rs b/src/lib.rs index 79cb52f..51f7226 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -53,6 +53,11 @@ use bitcoin_hashes::{sha256, Hash}; #[cfg(feature = "std")] use unicode_normalization::UnicodeNormalization; +#[cfg(feature = "zeroize")] +extern crate zeroize; +#[cfg(feature = "zeroize")] +use zeroize::Zeroize; + #[macro_use] mod internal_macros; mod language; @@ -160,6 +165,13 @@ pub struct Mnemonic { words: [u16; MAX_NB_WORDS], } +#[cfg(feature = "zeroize")] +impl Zeroize for Mnemonic { + fn zeroize(&mut self) { + self.words.zeroize() + } +} + serde_string_impl!(Mnemonic, "a BIP-39 Mnemonic Code"); impl Mnemonic { From bb0f63298ad21592946b8f8684a9fd613a276a49 Mon Sep 17 00:00:00 2001 From: Praveen Perera Date: Mon, 19 Apr 2021 12:08:04 -0400 Subject: [PATCH 2/3] Use `zeroize_derive` feature instead of impl zeroize --- Cargo.toml | 2 +- src/language/mod.rs | 6 ++++++ src/lib.rs | 7 ++----- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 4d7b5d8..9799420 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -46,7 +46,7 @@ rand_core = "0.4.0" unicode-normalization = { version = "=0.1.9", optional = true } rand = { version = "0.6.0", optional = true } serde = { version = "1.0", default-features = false, optional = true } -zeroize = {version = "1.2", optional = true} +zeroize = {version = "1.2", features = ["zeroize_derive"], optional = true} [dev-dependencies] rand = { version = "0.6.0", optional = false } diff --git a/src/language/mod.rs b/src/language/mod.rs index 10e0a44..0ea9dc6 100644 --- a/src/language/mod.rs +++ b/src/language/mod.rs @@ -55,6 +55,12 @@ pub enum Language { Spanish, } +impl Default for Language { + fn default() -> Self { + Language::English + } +} + impl Language { /// The list of supported languages. /// Language support is managed by compile features. diff --git a/src/lib.rs b/src/lib.rs index 51f7226..1aedcd7 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -157,6 +157,7 @@ impl error::Error for Error {} /// /// Supported number of words are 12, 18 and 24. #[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)] +#[cfg_attr(feature = "zeroize", derive(Zeroize), zeroize(drop))] pub struct Mnemonic { /// The language the mnemonic. lang: Language, @@ -166,11 +167,7 @@ pub struct Mnemonic { } #[cfg(feature = "zeroize")] -impl Zeroize for Mnemonic { - fn zeroize(&mut self) { - self.words.zeroize() - } -} +impl zeroize::DefaultIsZeroes for Language {} serde_string_impl!(Mnemonic, "a BIP-39 Mnemonic Code"); From e409dc2481953a47e6d705d4e1ff61b6642f8433 Mon Sep 17 00:00:00 2001 From: Praveen Perera Date: Fri, 13 May 2022 10:39:49 -0400 Subject: [PATCH 3/3] Replace deprecated `zeroize(drop)` with trait --- Cargo.toml | 2 +- src/lib.rs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 9799420..a322787 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -46,7 +46,7 @@ rand_core = "0.4.0" unicode-normalization = { version = "=0.1.9", optional = true } rand = { version = "0.6.0", optional = true } serde = { version = "1.0", default-features = false, optional = true } -zeroize = {version = "1.2", features = ["zeroize_derive"], optional = true} +zeroize = {version = "1.5", features = ["zeroize_derive"], optional = true} [dev-dependencies] rand = { version = "0.6.0", optional = false } diff --git a/src/lib.rs b/src/lib.rs index 1aedcd7..7e007a8 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -56,7 +56,7 @@ use unicode_normalization::UnicodeNormalization; #[cfg(feature = "zeroize")] extern crate zeroize; #[cfg(feature = "zeroize")] -use zeroize::Zeroize; +use zeroize::{Zeroize, ZeroizeOnDrop}; #[macro_use] mod internal_macros; @@ -157,7 +157,7 @@ impl error::Error for Error {} /// /// Supported number of words are 12, 18 and 24. #[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)] -#[cfg_attr(feature = "zeroize", derive(Zeroize), zeroize(drop))] +#[cfg_attr(feature = "zeroize", derive(Zeroize, ZeroizeOnDrop))] pub struct Mnemonic { /// The language the mnemonic. lang: Language,