From f807aa65a17025e0f170bb1070330b0cecbd63e2 Mon Sep 17 00:00:00 2001 From: Nikolay Volf Date: Mon, 16 Jan 2017 18:50:20 +0300 Subject: [PATCH] Secret - from hash function, also validate data (#4159) * from hash for secret * checked from_slice * move assert * remove fromhash --- ethkey/src/secret.rs | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/ethkey/src/secret.rs b/ethkey/src/secret.rs index f109abaa4..6e4aa5bae 100644 --- a/ethkey/src/secret.rs +++ b/ethkey/src/secret.rs @@ -33,14 +33,17 @@ impl fmt::Debug for Secret { } impl Secret { - pub fn from_slice(key: &[u8]) -> Result { - if key.len() != 32 { - return Err(Error::InvalidSecret); - } + fn from_slice_unchecked(key: &[u8]) -> Self { + assert_eq!(32, key.len(), "Caller should provide 32-byte length slice"); let mut h = H256::default(); h.copy_from_slice(&key[0..32]); - Ok(Secret { inner: h }) + Secret { inner: h } + } + + pub fn from_slice(key: &[u8]) -> Result { + let secret = key::SecretKey::from_slice(&super::SECP256K1, key)?; + Ok(secret.into()) } } @@ -54,8 +57,7 @@ impl FromStr for Secret { impl From for Secret { fn from(key: key::SecretKey) -> Self { - Self::from_slice(&key[0..32]) - .expect("`key::SecretKey` is valid (no way to construct invalid one); qed") + Self::from_slice_unchecked(&key[0..32]) } } @@ -66,4 +68,3 @@ impl Deref for Secret { &self.inner } } -