sentinel_crypto/hash/
blake3.rs1use serde_json::Value;
2use tracing::trace;
3
4use crate::{error::CryptoError, hash_trait::HashFunction};
5
6pub struct Blake3Hasher;
14
15impl HashFunction for Blake3Hasher {
16 fn hash_data(data: &Value) -> Result<String, CryptoError> {
17 trace!("Hashing data with Blake3");
18 let json_str = serde_json::to_string(data).map_err(CryptoError::from)?;
19 let hash = blake3::hash(json_str.as_bytes());
20 let hash_str = hash.to_hex().to_string();
21 trace!("Blake3 hash computed: {}", hash_str);
22 Ok(hash_str)
23 }
24}
25
26impl crate::hash_trait::private::Sealed for Blake3Hasher {}
27
28#[test]
29fn test_blake3_hash() {
30 let data = serde_json::json!({"key": "value", "number": 42});
31 let hash = Blake3Hasher::hash_data(&data).unwrap();
32 assert_eq!(hash.len(), 64);
33 let hash2 = Blake3Hasher::hash_data(&data).unwrap();
34 assert_eq!(hash, hash2);
35}