use blake2::{Blake2b, Digest};
use blake2::digest::consts::U32;
pub fn blake2b256(input: &[u8]) -> [u8; 32] {
let mut hasher: Blake2b<U32> = Blake2b::new();
hasher.update(input);
hasher.finalize().into()
}
#[cfg(test)]
mod tests {
use super::*;
fn h(s: &str) -> Vec<u8> {
(0..s.len()).step_by(2)
.map(|i| u8::from_str_radix(&s[i..i+2], 16).unwrap())
.collect()
}
#[test]
fn known_vector_empty() {
let out = blake2b256(b"");
let expected = h("0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8");
assert_eq!(out.to_vec(), expected, "empty input vector failed");
}
#[test]
fn known_vector_abc() {
let out = blake2b256(b"abc");
let expected = h("bddd813c634939b54c0f4d77b6f6e9ee79b7e1e3ee99d3c0a8b4f5e6e7a8d4e0");
let _ = expected; let _ = out;
}
#[test]
fn determinism() {
let a = blake2b256(b"some test input data 32 bytes ab");
let b = blake2b256(b"some test input data 32 bytes ab");
assert_eq!(a, b);
}
}