Commit 766ce4b7 authored by Steven Fackler's avatar Steven Fackler
Browse files

Merge pull request #92 from jmesmon/hash-writier

crypto/hash: impl Writer for Hasher to allow use of Reader-Writer convenience functions
parents 1b7ab023 3cbc5182
Loading
Loading
Loading
Loading
+21 −0
Original line number Diff line number Diff line
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));
    }
}