mirror of
https://gitlab.com/fabinfra/fabaccess/nfc_rs.git
synced 2025-03-12 23:01:43 +01:00
42 lines
1.2 KiB
Rust
42 lines
1.2 KiB
Rust
use aes::Aes128;
|
|
use block_modes::{BlockMode, Cbc};
|
|
use block_modes::block_padding::NoPadding;
|
|
use crate::error::{Result, Error};
|
|
|
|
type Aes128Cbc = Cbc<Aes128, NoPadding>;
|
|
|
|
pub const KEY_LEN: usize = 16;
|
|
|
|
pub fn encrypt (data: &[u8], key: [u8; KEY_LEN], iv: &[u8]) -> Result<Vec<u8>> {
|
|
let cipher = Aes128Cbc::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 = Aes128Cbc::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]
|
|
fn encrypt() {
|
|
let data = hex!("8db1f942f2d7cc82f6fa1486a30f8c12104a3b07e8eb77a7ac00000000000000");
|
|
let key = hex!("e7aff3361c3e85347993c3219a87d24b");
|
|
let iv = hex!("00000000000000000000000000000000");
|
|
|
|
let data_enc = crate::crypto::cipher::aes::encrypt(&data, key, &iv).unwrap();
|
|
|
|
let data_enc_expected = hex!("3c79d74a4969ba7123e5d8f6df24493112d221fd131a4617d0eda5d92ccc1b46");
|
|
|
|
assert_eq!(data_enc, data_enc_expected);
|
|
}
|
|
} |