layer_crypto/
obfuscated.rs1#[allow(deprecated)]
14use aes::cipher::{KeyIvInit, StreamCipher, generic_array::GenericArray};
15
16pub struct ObfuscatedCipher {
18 #[allow(deprecated)]
19 rx: ctr::Ctr128BE<aes::Aes256>,
20 #[allow(deprecated)]
21 tx: ctr::Ctr128BE<aes::Aes256>,
22}
23
24impl ObfuscatedCipher {
25 #[allow(deprecated)]
27 pub fn new(init: &[u8; 64]) -> Self {
28 let rev: Vec<u8> = init.iter().copied().rev().collect();
29 Self {
30 rx: ctr::Ctr128BE::<aes::Aes256>::new(
31 GenericArray::from_slice(&rev[8..40]),
32 GenericArray::from_slice(&rev[40..56]),
33 ),
34 tx: ctr::Ctr128BE::<aes::Aes256>::new(
35 GenericArray::from_slice(&init[8..40]),
36 GenericArray::from_slice(&init[40..56]),
37 ),
38 }
39 }
40
41 #[allow(deprecated)]
44 pub fn from_keys(
45 tx_key: &[u8; 32],
46 tx_iv: &[u8; 16],
47 rx_key: &[u8; 32],
48 rx_iv: &[u8; 16],
49 ) -> Self {
50 Self {
51 tx: ctr::Ctr128BE::<aes::Aes256>::new(
52 GenericArray::from_slice(tx_key),
53 GenericArray::from_slice(tx_iv),
54 ),
55 rx: ctr::Ctr128BE::<aes::Aes256>::new(
56 GenericArray::from_slice(rx_key),
57 GenericArray::from_slice(rx_iv),
58 ),
59 }
60 }
61
62 pub fn encrypt(&mut self, buf: &mut [u8]) {
64 self.tx.apply_keystream(buf);
65 }
66
67 pub fn decrypt(&mut self, buf: &mut [u8]) {
69 self.rx.apply_keystream(buf);
70 }
71}