Merge pull request #92 from jmesmon/hash-writier

crypto/hash: impl Writer for Hasher to allow use of Reader-Writer convenience functions
This commit is contained in:
Steven Fackler 2014-11-07 14:24:23 -08:00
commit 766ce4b778
1 changed files with 21 additions and 0 deletions

View File

@ -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();
@ -112,6 +120,12 @@ mod tests {
assert!(calced == hashtest.expected_output);
}
pub fn hash_writer(t: super::HashType, data: &[u8]) -> Vec<u8> {
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() {
@ -167,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));
}
}