encryption/hash/
sha256.rs1use sha2::{Digest, Sha256};
6
7use crate::contract::{Hasher, Identified};
8use crate::error::Result;
9
10#[derive(Debug, Default, Clone, Copy)]
12pub struct Sha256Hasher;
13
14impl Sha256Hasher {
15 pub const IDENTIFIER: &'static str = "sha256";
16
17 pub fn new() -> Self {
18 Self
19 }
20}
21
22impl Identified for Sha256Hasher {
23 fn identifier(&self) -> &str {
24 Self::IDENTIFIER
25 }
26}
27
28impl Hasher for Sha256Hasher {
29 fn digest(&self, data: &[u8]) -> Result<Vec<u8>> {
30 Ok(Sha256::digest(data).to_vec())
31 }
32}
33
34#[cfg(test)]
35mod tests {
36 use super::*;
37
38 #[test]
39 fn matches_known_vector() {
40 let hasher = Sha256Hasher::new();
41 assert_eq!(
42 hasher.digest_hex(b"abc").unwrap(),
43 "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"
44 );
45 assert_eq!(hasher.digest(b"abc").unwrap().len(), 32);
46 }
47}