#[allow(deprecated)]
use aes::cipher::{KeyIvInit, StreamCipher, generic_array::GenericArray};
pub struct ObfuscatedCipher {
#[allow(deprecated)]
rx: ctr::Ctr128BE<aes::Aes256>,
#[allow(deprecated)]
tx: ctr::Ctr128BE<aes::Aes256>,
}
impl ObfuscatedCipher {
#[allow(deprecated)]
pub fn new(init: &[u8; 64]) -> Self {
let rev: Vec<u8> = init.iter().copied().rev().collect();
Self {
rx: ctr::Ctr128BE::<aes::Aes256>::new(
GenericArray::from_slice(&rev[8..40]),
GenericArray::from_slice(&rev[40..56]),
),
tx: ctr::Ctr128BE::<aes::Aes256>::new(
GenericArray::from_slice(&init[8..40]),
GenericArray::from_slice(&init[40..56]),
),
}
}
#[allow(deprecated)]
pub fn from_keys(
tx_key: &[u8; 32],
tx_iv: &[u8; 16],
rx_key: &[u8; 32],
rx_iv: &[u8; 16],
) -> Self {
Self {
tx: ctr::Ctr128BE::<aes::Aes256>::new(
GenericArray::from_slice(tx_key),
GenericArray::from_slice(tx_iv),
),
rx: ctr::Ctr128BE::<aes::Aes256>::new(
GenericArray::from_slice(rx_key),
GenericArray::from_slice(rx_iv),
),
}
}
pub fn encrypt(&mut self, buf: &mut [u8]) {
self.tx.apply_keystream(buf);
}
pub fn decrypt(&mut self, buf: &mut [u8]) {
self.rx.apply_keystream(buf);
}
}