use sm3::{Digest, Sm3};
use crate::contract::Hasher;
use crate::error::Result;
use crate::hash::hasher;
hasher!(Sm3Hasher, "sm3", "SM3 哈希器(无状态,可复用)。");
impl Hasher for Sm3Hasher {
fn digest(&self, data: &[u8]) -> Result<Vec<u8>> {
Ok(Sm3::digest(data).to_vec())
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn matches_standard_vector() {
let hasher = Sm3Hasher::new();
assert_eq!(
hasher.digest_hex(b"abc").unwrap(),
"66c7f0f462eeedd9d1f2d46bdc10e4e24167c4875cf2f7a2297da02b8f4ba8e0"
);
assert_eq!(hasher.digest(b"abc").unwrap().len(), 32);
}
}