1#![forbid(unsafe_code)]
4#![deny(missing_docs)]
5#![cfg_attr(not(feature = "std"), no_std)]
6
7#[inline]
11pub fn xor<D: AsMut<[u8]>>(mut data: D, key: u8) {
12 fn xor_inner(data: &mut [u8], key: u8) {
13 data.iter_mut().for_each(|byte| *byte ^= key);
14 }
15
16 xor_inner(data.as_mut(), key);
17}
18
19#[inline]
24pub fn cyclic_xor<D: AsMut<[u8]>, K: AsRef<[u8]>>(mut data: D, key: K) {
25 fn cyclic_xor_inner(data: &mut [u8], key: &[u8]) {
26 data.iter_mut()
27 .zip(key.iter().cycle())
28 .for_each(|(byte, key_byte)| *byte ^= key_byte);
29 }
30
31 cyclic_xor_inner(data.as_mut(), key.as_ref());
32}