diff options
Diffstat (limited to 'openssl/src/hash.rs')
-rw-r--r-- | openssl/src/hash.rs | 83 |
1 files changed, 34 insertions, 49 deletions
diff --git a/openssl/src/hash.rs b/openssl/src/hash.rs index bb60ed35..9ceaebbc 100644 --- a/openssl/src/hash.rs +++ b/openssl/src/hash.rs @@ -5,7 +5,7 @@ use std::fmt; use ffi; #[cfg(ossl110)] -use ffi::{EVP_MD_CTX_new, EVP_MD_CTX_free}; +use ffi::{EVP_MD_CTX_free, EVP_MD_CTX_new}; #[cfg(any(ossl101, ossl102))] use ffi::{EVP_MD_CTX_create as EVP_MD_CTX_new, EVP_MD_CTX_destroy as EVP_MD_CTX_free}; @@ -70,7 +70,7 @@ use self::State::*; /// let data = b"\x42\xF4\x97\xE0"; /// let spec = b"\x7c\x43\x0f\x17\x8a\xef\xdf\x14\x87\xfe\xe7\x14\x4e\x96\x41\xe2"; /// let res = hash(MessageDigest::md5(), data).unwrap(); -/// assert_eq!(res, spec); +/// assert_eq!(&*res, spec); /// ``` /// /// Supply the input in chunks: @@ -84,7 +84,7 @@ use self::State::*; /// h.update(data[0]).unwrap(); /// h.update(data[1]).unwrap(); /// let res = h.finish().unwrap(); -/// assert_eq!(res, spec); +/// assert_eq!(&*res, spec); /// ``` /// /// # Warning @@ -120,7 +120,7 @@ impl Hasher { match self.state { Reset => return Ok(()), Updated => { - self.finish2()?; + self.finish()?; } Finalized => (), } @@ -147,15 +147,8 @@ impl Hasher { Ok(()) } - #[deprecated(note = "use finish2 instead", since = "0.9.11")] - pub fn finish(&mut self) -> Result<Vec<u8>, ErrorStack> { - self.finish2().map(|b| b.to_vec()) - } - /// Returns the hash of the data written and resets the hasher. - /// - /// Unlike `finish`, this method does not allocate. - pub fn finish2(&mut self) -> Result<DigestBytes, ErrorStack> { + pub fn finish(&mut self) -> Result<DigestBytes, ErrorStack> { if self.state == Finalized { self.init()?; } @@ -210,7 +203,7 @@ impl Drop for Hasher { fn drop(&mut self) { unsafe { if self.state != Finalized { - drop(self.finish2()); + drop(self.finish()); } EVP_MD_CTX_free(self.ctx); } @@ -263,18 +256,11 @@ impl fmt::Debug for DigestBytes { } } -#[deprecated(note = "use hash2 instead", since = "0.9.11")] -pub fn hash(t: MessageDigest, data: &[u8]) -> Result<Vec<u8>, ErrorStack> { - hash2(t, data).map(|b| b.to_vec()) -} - /// Computes the hash of the `data` with the hash `t`. -/// -/// Unlike `hash`, this function does not allocate the return value. -pub fn hash2(t: MessageDigest, data: &[u8]) -> Result<DigestBytes, ErrorStack> { +pub fn hash(t: MessageDigest, data: &[u8]) -> Result<DigestBytes, ErrorStack> { let mut h = Hasher::new(t)?; h.update(data)?; - h.finish2() + h.finish() } #[cfg(test)] @@ -285,37 +271,36 @@ mod tests { use super::*; fn hash_test(hashtype: MessageDigest, hashtest: &(&str, &str)) { - let res = hash2(hashtype, &Vec::from_hex(hashtest.0).unwrap()).unwrap(); + let res = hash(hashtype, &Vec::from_hex(hashtest.0).unwrap()).unwrap(); assert_eq!(res.to_hex(), hashtest.1); } fn hash_recycle_test(h: &mut Hasher, hashtest: &(&str, &str)) { let _ = h.write_all(&Vec::from_hex(hashtest.0).unwrap()).unwrap(); - let res = h.finish2().unwrap(); + let res = h.finish().unwrap(); assert_eq!(res.to_hex(), hashtest.1); } // Test vectors from http://www.nsrl.nist.gov/testdata/ #[allow(non_upper_case_globals)] - const md5_tests: [(&'static str, &'static str); 13] = - [ - ("", "d41d8cd98f00b204e9800998ecf8427e"), - ("7F", "83acb6e67e50e31db6ed341dd2de1595"), - ("EC9C", "0b07f0d4ca797d8ac58874f887cb0b68"), - ("FEE57A", "e0d583171eb06d56198fc0ef22173907"), - ("42F497E0", "7c430f178aefdf1487fee7144e9641e2"), - ("C53B777F1C", "75ef141d64cb37ec423da2d9d440c925"), - ("89D5B576327B", "ebbaf15eb0ed784c6faa9dc32831bf33"), - ("5D4CCE781EB190", "ce175c4b08172019f05e6b5279889f2c"), - ("81901FE94932D7B9", "cd4d2f62b8cdb3a0cf968a735a239281"), - ("C9FFDEE7788EFB4EC9", "e0841a231ab698db30c6c0f3f246c014"), - ("66AC4B7EBA95E53DC10B", "a3b3cea71910d9af56742aa0bb2fe329"), - ("A510CD18F7A56852EB0319", "577e216843dd11573574d3fb209b97d8"), - ( - "AAED18DBE8938C19ED734A8D", - "6f80fb775f27e0a4ce5c2f42fc72c5f1", - ), - ]; + const md5_tests: [(&'static str, &'static str); 13] = [ + ("", "d41d8cd98f00b204e9800998ecf8427e"), + ("7F", "83acb6e67e50e31db6ed341dd2de1595"), + ("EC9C", "0b07f0d4ca797d8ac58874f887cb0b68"), + ("FEE57A", "e0d583171eb06d56198fc0ef22173907"), + ("42F497E0", "7c430f178aefdf1487fee7144e9641e2"), + ("C53B777F1C", "75ef141d64cb37ec423da2d9d440c925"), + ("89D5B576327B", "ebbaf15eb0ed784c6faa9dc32831bf33"), + ("5D4CCE781EB190", "ce175c4b08172019f05e6b5279889f2c"), + ("81901FE94932D7B9", "cd4d2f62b8cdb3a0cf968a735a239281"), + ("C9FFDEE7788EFB4EC9", "e0841a231ab698db30c6c0f3f246c014"), + ("66AC4B7EBA95E53DC10B", "a3b3cea71910d9af56742aa0bb2fe329"), + ("A510CD18F7A56852EB0319", "577e216843dd11573574d3fb209b97d8"), + ( + "AAED18DBE8938C19ED734A8D", + "6f80fb775f27e0a4ce5c2f42fc72c5f1", + ), + ]; #[test] fn test_md5() { @@ -337,9 +322,9 @@ mod tests { let mut h = Hasher::new(MessageDigest::md5()).unwrap(); h.write_all(&Vec::from_hex(md5_tests[6].0).unwrap()) .unwrap(); - h.finish2().unwrap(); - let res = h.finish2().unwrap(); - let null = hash2(MessageDigest::md5(), &[]).unwrap(); + h.finish().unwrap(); + let res = h.finish().unwrap(); + let null = hash(MessageDigest::md5(), &[]).unwrap(); assert_eq!(&*res, &*null); } @@ -358,18 +343,18 @@ mod tests { println!("Clone an updated hasher"); let mut h2 = h1.clone(); h2.write_all(&inp[p..]).unwrap(); - let res = h2.finish2().unwrap(); + let res = h2.finish().unwrap(); assert_eq!(res.to_hex(), md5_tests[i].1); } h1.write_all(&inp[p..]).unwrap(); - let res = h1.finish2().unwrap(); + let res = h1.finish().unwrap(); assert_eq!(res.to_hex(), md5_tests[i].1); println!("Clone a finished hasher"); let mut h3 = h1.clone(); h3.write_all(&Vec::from_hex(md5_tests[i + 1].0).unwrap()) .unwrap(); - let res = h3.finish2().unwrap(); + let res = h3.finish().unwrap(); assert_eq!(res.to_hex(), md5_tests[i + 1].1); } |