diff options
Diffstat (limited to 'keystore2/src/crypto/lib.rs')
-rw-r--r-- | keystore2/src/crypto/lib.rs | 29 |
1 files changed, 10 insertions, 19 deletions
diff --git a/keystore2/src/crypto/lib.rs b/keystore2/src/crypto/lib.rs index 14bdf045..08b7589e 100644 --- a/keystore2/src/crypto/lib.rs +++ b/keystore2/src/crypto/lib.rs @@ -190,31 +190,23 @@ impl<'a> Password<'a> { fn get_key(&'a self) -> &'a [u8] { match self { Self::Ref(b) => b, - Self::Owned(z) => &*z, + Self::Owned(z) => z, } } /// Generate a key from the given password and salt. /// The salt must be exactly 16 bytes long. /// Two key sizes are accepted: 16 and 32 bytes. - pub fn derive_key(&self, salt: Option<&[u8]>, key_length: usize) -> Result<ZVec, Error> { - let pw = self.get_key(); - - let salt: *const u8 = match salt { - Some(s) => { - if s.len() != SALT_LENGTH { - return Err(Error::InvalidSaltLength); - } - s.as_ptr() - } - None => std::ptr::null(), - }; - + pub fn derive_key(&self, salt: &[u8], key_length: usize) -> Result<ZVec, Error> { + if salt.len() != SALT_LENGTH { + return Err(Error::InvalidSaltLength); + } match key_length { AES_128_KEY_LENGTH | AES_256_KEY_LENGTH => {} _ => return Err(Error::InvalidKeyLength), } + let pw = self.get_key(); let mut result = ZVec::new(key_length)?; unsafe { @@ -223,7 +215,7 @@ impl<'a> Password<'a> { result.len(), pw.as_ptr() as *const std::os::raw::c_char, pw.len(), - salt, + salt.as_ptr(), ) }; @@ -368,8 +360,7 @@ pub fn ec_key_marshal_private_key(key: &ECKey) -> Result<ZVec, Error> { // Safety: the key is valid. // This will not write past the specified length of the buffer; if the // len above is too short, it returns 0. - let written_len = - unsafe { ECKEYMarshalPrivateKey(key.0, buf.as_mut_ptr(), buf.len()) } as usize; + let written_len = unsafe { ECKEYMarshalPrivateKey(key.0, buf.as_mut_ptr(), buf.len()) }; if written_len == len { Ok(buf) } else { @@ -541,9 +532,9 @@ mod tests { fn test_generate_key_from_password() { let mut key = vec![0; 16]; let pw = vec![0; 16]; - let mut salt = vec![0; 16]; + let salt = vec![0; 16]; unsafe { - generateKeyFromPassword(key.as_mut_ptr(), 16, pw.as_ptr(), 16, salt.as_mut_ptr()); + generateKeyFromPassword(key.as_mut_ptr(), 16, pw.as_ptr(), 16, salt.as_ptr()); } assert_ne!(key, vec![0; 16]); } |