From b9f95b4ce4887c481ac4934e02a7a3aca4a316a6 Mon Sep 17 00:00:00 2001 From: Cody P Schafer Date: Fri, 7 Nov 2014 12:19:01 -0500 Subject: [PATCH 1/2] crypto/hash: impl Writer for Hasher to allow use of Reader-Writer convenience functions --- src/crypto/hash.rs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/crypto/hash.rs b/src/crypto/hash.rs index a72b8d9f..60517adf 100644 --- a/src/crypto/hash.rs +++ b/src/crypto/hash.rs @@ -1,5 +1,6 @@ use libc::c_uint; use std::ptr; +use std::io; use ffi; @@ -34,6 +35,13 @@ pub struct Hasher { len: uint, } +impl io::Writer for Hasher { + fn write(&mut self, buf: &[u8]) -> io::IoResult<()> { + self.update(buf); + Ok(()) + } +} + impl Hasher { pub fn new(ht: HashType) -> Hasher { ffi::init(); From 3cbc5182496297abab0918430a9d5e72295c0b24 Mon Sep 17 00:00:00 2001 From: Cody P Schafer Date: Fri, 7 Nov 2014 16:56:00 -0500 Subject: [PATCH 2/2] Hasher::write(): add basic test --- src/crypto/hash.rs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/crypto/hash.rs b/src/crypto/hash.rs index 60517adf..b00dfba8 100644 --- a/src/crypto/hash.rs +++ b/src/crypto/hash.rs @@ -120,6 +120,12 @@ mod tests { assert!(calced == hashtest.expected_output); } + pub fn hash_writer(t: super::HashType, data: &[u8]) -> Vec { + let mut h = super::Hasher::new(t); + h.write(data); + h.finalize() + } + // Test vectors from http://www.nsrl.nist.gov/testdata/ #[test] fn test_md5() { @@ -175,4 +181,11 @@ mod tests { hash_test(super::RIPEMD160, test); } } + + #[test] + fn test_writer() { + let tv = "rust-openssl".as_bytes(); + let ht = super::RIPEMD160; + assert!(hash_writer(ht, tv) == super::hash(ht, tv)); + } }