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