1use crate::constants::{KEY_SIZE_BYTES, REFKEY_SIZE_BYTES, REF_SIZE_BYTES};
2use blake2b_simd::Params;
3
4pub mod constants;
5pub mod decode;
6pub mod encode;
7pub mod types;
8pub mod urn;
9
10fn arity(block_size_bytes: usize) -> usize {
11 if (block_size_bytes % (REF_SIZE_BYTES + KEY_SIZE_BYTES)) != 0 {
12 panic!(
13 "block size ({}) must be a multiple of {}",
14 block_size_bytes,
15 REF_SIZE_BYTES + KEY_SIZE_BYTES
16 );
17 }
18 block_size_bytes / (REF_SIZE_BYTES + KEY_SIZE_BYTES)
19}
20
21fn blake2b256_hash(input: &[u8], key: Option<&[u8]>) -> [u8; REFKEY_SIZE_BYTES] {
22 let mut hasher = match key {
23 Some(k) => Params::new().hash_length(32).key(k).to_state(),
24 None => Params::new().hash_length(32).to_state(),
25 };
26 hasher.update(input);
27 let mut result: [u8; REFKEY_SIZE_BYTES] = Default::default();
28 result.copy_from_slice(hasher.finalize().as_bytes());
29 result
30}
31
32#[cfg(test)]
33mod tests {
34 pub mod vectors;
35}