use rand::{rngs::OsRng, Rng};
use super::AES_BLOCK;
#[derive(Clone, Copy)]
pub struct NakedCryptContext {
key: [u8; AES_BLOCK],
iv: [u8; AES_BLOCK],
}
impl NakedCryptContext {
pub fn new() -> Self {
NakedCryptContext {
key: OsRng.gen(),
iv: OsRng.gen(),
}
}
pub fn encryptor(&self) -> openssl::symm::Crypter {
let mut c = openssl::symm::Crypter::new(
openssl::symm::Cipher::aes_128_ctr(),
openssl::symm::Mode::Encrypt,
&self.key,
Some(&self.iv),
)
.unwrap();
c.pad(false);
c
}
pub fn decryptor(&self) -> openssl::symm::Crypter {
let mut c = openssl::symm::Crypter::new(
openssl::symm::Cipher::aes_128_ctr(),
openssl::symm::Mode::Decrypt,
&self.key,
Some(&self.iv),
)
.unwrap();
c.pad(false);
c
}
}