Skip to main content

fib_quant/
digest.rs

1use serde::Serialize;
2
3use crate::{FibQuantError, Result};
4
5/// Compute a deterministic BLAKE3 digest over a domain tag and JSON payload.
6pub fn json_digest<T: Serialize>(domain: &str, value: &T) -> Result<String> {
7    let mut bytes = Vec::new();
8    bytes.extend_from_slice(domain.as_bytes());
9    bytes.push(0);
10    serde_json::to_writer(&mut bytes, value)
11        .map_err(|err| FibQuantError::NumericalFailure(format!("json digest encode: {err}")))?;
12    Ok(bytes_digest(&bytes))
13}
14
15/// Compute a BLAKE3 digest over raw bytes.
16pub fn bytes_digest(bytes: &[u8]) -> String {
17    format!("blake3:{}", blake3::hash(bytes).to_hex())
18}