eris_rs/
lib.rs

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}