arb_hash 0.1.9

Arbitrary block length hash function, including some other related and handy functions.
Documentation
use crate::{
    block::{inc_block, resize_block, xor_blocks},
    hash::arb_hash,
};

#[no_mangle]
pub fn serial_arb_digest(
    padded_input: &[u8],
    offset: usize,
    length: usize,
    rounds: u64,
) -> Vec<u8> {
    let mut result_block = vec![0u8; length];
    let mut chunk_hash_temp = vec![0u8; length];
    let mut second_hash_temp = vec![0u8; length];
    let mut ctr_block = resize_block(&offset.to_le_bytes(), length);
    for chunk in padded_input.chunks_exact(length) {
        arb_hash(chunk, &mut chunk_hash_temp, rounds);
        xor_blocks(&mut chunk_hash_temp, &ctr_block);
        arb_hash(&chunk_hash_temp, &mut second_hash_temp, rounds);
        xor_blocks(&mut result_block, &second_hash_temp);
        inc_block(&mut ctr_block);
    }
    result_block
}