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;
[block, &vec![0u8; extend]].concat()
}
}
}
pub fn xor_blocks(block_a: &[u8], block_b: &[u8]) -> Vec<u8> {
let (a, b) = match block_a.len() > block_b.len() {
true => (block_a, block_b),
false => (block_b, block_a),
};
(0..b.len())
.map(|i| a[i] ^ b[i])
.chain(a[b.len()..a.len()].to_owned())
.collect()
}
pub fn inc_block(block: &mut [u8]) {
for elem in block {
*elem = elem.wrapping_add(1);
if *elem != 0 {
return;
}
}
}