#[inline(always)]
pub fn resize_block(block: &[u8], count: usize) -> Vec<u8> {
let mut result = block.to_vec();
result.resize(count, 0);
result
}
#[inline(always)]
pub fn pad_block(block: &[u8], count: usize) -> Vec<u8> {
match count == 0 {
true => Vec::from(block),
false => {
let remainder = block.len() % count;
let extend = (count - remainder) % count;
resize_block(block, block.len() + extend)
}
}
}
#[inline(always)]
pub fn xor_blocks(block_a: &[u8], block_b: &[u8]) -> Vec<u8> {
let max_len = block_a.len().max(block_b.len());
let resized_a = resize_block(block_a, max_len);
let resized_b = resize_block(block_b, max_len);
(0..max_len).map(|i| resized_a[i] ^ resized_b[i]).collect()
}
#[inline(always)]
pub fn inc_block(block: &mut [u8]) {
for elem in block {
*elem = elem.wrapping_add(1);
if *elem != 0 {
return;
}
}
}