use crate::BlackBoxResolutionError;
use aes::cipher::{BlockModeEncrypt, KeyIvInit, block_padding::NoPadding};
type Aes128CbcEnc = cbc::Encryptor<aes::Aes128>;
pub fn aes128_encrypt(
inputs: &[u8],
iv: [u8; 16],
key: [u8; 16],
) -> Result<Vec<u8>, BlackBoxResolutionError> {
if !inputs.len().is_multiple_of(16) {
return Err(BlackBoxResolutionError::Failed(
acir::BlackBoxFunc::AES128Encrypt,
"input length must be a multiple of 16".to_string(),
));
}
let mut buffer = inputs.to_vec();
Aes128CbcEnc::new(&key.into(), &iv.into())
.encrypt_padded::<NoPadding>(&mut buffer, inputs.len())
.expect("input length is block-aligned");
Ok(buffer)
}