Fixes a bug that was not returning the hash

The way this library works is that it is demand-driven, not
supply-driven; i.e. it will only fill as many bytes as you provide in a
given slice. The prior implementation was a vector of length 0 so the
backing slice requested no bytes.
This commit is contained in:
Alex Stokes 2018-12-11 17:47:00 -08:00
parent 97bd323a52
commit cc7982b277
No known key found for this signature in database
GPG Key ID: 51CE1721B245C086

View File

@ -5,7 +5,26 @@ use tiny_keccak::Keccak;
pub fn canonical_hash(input: &[u8]) -> Vec<u8> { pub fn canonical_hash(input: &[u8]) -> Vec<u8> {
let mut keccak = Keccak::new_keccak256(); let mut keccak = Keccak::new_keccak256();
keccak.update(input); keccak.update(input);
let mut result = Vec::with_capacity(32); let mut result = vec![0; 32];
keccak.finalize(result.as_mut_slice()); keccak.finalize(result.as_mut_slice());
result result
} }
#[cfg(test)]
mod tests {
use super::*;
use std::convert::From;
#[test]
fn test_hashing() {
let input: Vec<u8> = From::from("hello");
let output = canonical_hash(input.as_ref());
let expected = &[
0x1c, 0x8a, 0xff, 0x95, 0x06, 0x85, 0xc2, 0xed, 0x4b, 0xc3, 0x17, 0x4f, 0x34, 0x72,
0x28, 0x7b, 0x56, 0xd9, 0x51, 0x7b, 0x9c, 0x94, 0x81, 0x27, 0x31, 0x9a, 0x09, 0xa7,
0xa3, 0x6d, 0xea, 0xc8,
];
assert_eq!(expected, output.as_slice());
}
}