45 lines
1.1 KiB
Rust
Raw Normal View History

2021-01-24 05:19:35 +01:00
//FIXME: Which TDES Mode should be used by this?
use des::TdesEde2;
use block_modes::{BlockMode, Cbc};
use block_modes::block_padding::NoPadding;
use crate::error::{Result, Error};
type TDesEde2Cbc = Cbc<TdesEde2, NoPadding>;
pub const KEY_LEN: usize = 16;
pub fn encrypt (data: &[u8], key: [u8; KEY_LEN], iv: &[u8]) -> Result<Vec<u8>> {
let cipher = TDesEde2Cbc::new_var(&key, &iv)?;
return Ok(cipher.encrypt_vec(data));
}
pub fn decrypt(data: &[u8], key: [u8; KEY_LEN], iv: &[u8]) -> Result<Vec<u8>> {
let cipher = TDesEde2Cbc::new_var(&key, &iv)?;
let result = cipher.decrypt_vec(data);
return match result {
Ok(data) => {Ok(data)}
Err(err) => {Err(Error::BlockModeError(err))}
}
}
#[cfg(test)]
mod tests {
use hex_literal::hex;
#[test]
#[ignore]
fn encrypt() {
let data = hex!("");
let key = hex!("00000000000000000000000000000000");
let iv = hex!("00000000000000000000000000000000");
let data_enc = crate::crypto::cipher::tdes::encrypt(&data, key, &iv).unwrap();
let data_enc_expected = hex!("");
assert_eq!(data_enc, data_enc_expected);
}
}