pub(crate) fn rc4_encrypt(key: &[u8], data: &[u8]) -> Vec<u8> {
if key.is_empty() {
return data.to_vec();
}
let mut s = [0u8; 256];
for (index, value) in s.iter_mut().enumerate() {
*value = index as u8;
}
let mut j = 0usize;
for i in 0..256 {
j = (j + s[i] as usize + key[i % key.len()] as usize) % 256;
s.swap(i, j);
}
let mut i = 0usize;
j = 0usize;
let mut output = Vec::with_capacity(data.len());
for byte in data {
i = (i + 1) % 256;
j = (j + s[i] as usize) % 256;
s.swap(i, j);
let t = (s[i] as usize + s[j] as usize) % 256;
output.push(byte ^ s[t]);
}
output
}