arb_hash 0.1.0

Arbitrary block length hash function, potentially cryptographically secure.
Documentation
pub fn arb_hash(input: &[u8], rounds: u128) -> Vec<u8> {
    const SHIFTS: [u32; 5] = [1, 2, 3, 5, 7];
    let mut output = Vec::from(input);
    let len: usize = input.len();
    for _rnd in 0..rounds {
        for b_shift in 0..len {
            for elem in 0..len {
                let shift = SHIFTS[(b_shift + elem) % 5];
                output[elem] = output[elem].wrapping_add(output[(elem + 1) % len]);
                output[(elem + 2) % len] ^= output[elem];
                output[(elem + 2) % len] = output[(elem + 2) % len].rotate_left(shift);
            }
        }
    }
    output
        .iter_mut()
        .enumerate()
        .for_each(|(i, elem)| *elem ^= input[i]);
    output
}