Probably, the following code might work in the webasm, could you please provide the usage of the macros for this one?
use aes::{Aes128, Aes192, Aes256};
use block_modes::block_padding::{AnsiX923, Iso7816, NoPadding, Pkcs7, ZeroPadding};
use block_modes::{BlockMode, Cbc, Ecb, Pcbc};
use std::error::Error;
// #[cfg(target_arch = "wasm32")]
// use wasm_bindgen::prelude::wasm_bindgen;
pub enum Pad {
AnsiX923,
Iso7816,
NoPadding,
Pkcs7,
ZeroPadding,
}
pub enum Mode {
Ecb,
Cbc,
Pcbc,
}
pub enum Len {
Aes128,
Aes192,
Aes256,
}
pub struct Aes {
len: Len,
mode: Mode,
pad: Pad,
}
impl Aes {
pub fn new(len: Len, mode: Mode, pad: Pad) -> Self {
Self { len, mode, pad }
}
pub fn encrypt(
&self,
key: Vec<u8>,
iv: Vec<u8>,
plaintext: Vec<u8>,
) -> Result<Vec<u8>, Box<dyn Error>> {
match (&self.len, &self.mode, &self.pad) {
(Len::Aes128, Mode::Cbc, Pad::Pkcs7) => {
Ok(Cbc::<Aes128, Pkcs7>::new_var(&key, &iv)?.encrypt_vec(&plaintext))
}
(Len::Aes128, Mode::Cbc, Pad::ZeroPadding) => {
Ok(Cbc::<Aes128, ZeroPadding>::new_var(&key, &iv)?.encrypt_vec(&plaintext))
}
(Len::Aes128, Mode::Cbc, Pad::NoPadding) => {
Ok(Cbc::<Aes128, NoPadding>::new_var(&key, &iv)?.encrypt_vec(&plaintext))
}
(Len::Aes128, Mode::Cbc, Pad::Iso7816) => {
Ok(Cbc::<Aes128, Iso7816>::new_var(&key, &iv)?.encrypt_vec(&plaintext))
}
(Len::Aes128, Mode::Cbc, Pad::AnsiX923) => {
Ok(Cbc::<Aes128, AnsiX923>::new_var(&key, &iv)?.encrypt_vec(&plaintext))
}
(Len::Aes128, Mode::Ecb, Pad::Pkcs7) => {
Ok(Ecb::<Aes128, Pkcs7>::new_var(&key, &iv)?.encrypt_vec(&plaintext))
}
(Len::Aes128, Mode::Ecb, Pad::ZeroPadding) => {
Ok(Ecb::<Aes128, ZeroPadding>::new_var(&key, &iv)?.encrypt_vec(&plaintext))
}
(Len::Aes128, Mode::Ecb, Pad::NoPadding) => {
Ok(Ecb::<Aes128, NoPadding>::new_var(&key, &iv)?.encrypt_vec(&plaintext))
}
(Len::Aes128, Mode::Ecb, Pad::Iso7816) => {
Ok(Ecb::<Aes128, Iso7816>::new_var(&key, &iv)?.encrypt_vec(&plaintext))
}
(Len::Aes128, Mode::Ecb, Pad::AnsiX923) => {
Ok(Ecb::<Aes128, AnsiX923>::new_var(&key, &iv)?.encrypt_vec(&plaintext))
}
(Len::Aes128, Mode::Pcbc, Pad::Pkcs7) => {
Ok(Pcbc::<Aes128, Pkcs7>::new_var(&key, &iv)?.encrypt_vec(&plaintext))
}
(Len::Aes128, Mode::Pcbc, Pad::ZeroPadding) => {
Ok(Pcbc::<Aes128, ZeroPadding>::new_var(&key, &iv)?.encrypt_vec(&plaintext))
}
(Len::Aes128, Mode::Pcbc, Pad::NoPadding) => {
Ok(Pcbc::<Aes128, NoPadding>::new_var(&key, &iv)?.encrypt_vec(&plaintext))
}
(Len::Aes128, Mode::Pcbc, Pad::Iso7816) => {
Ok(Pcbc::<Aes128, Iso7816>::new_var(&key, &iv)?.encrypt_vec(&plaintext))
}
(Len::Aes128, Mode::Pcbc, Pad::AnsiX923) => {
Ok(Pcbc::<Aes128, AnsiX923>::new_var(&key, &iv)?.encrypt_vec(&plaintext))
}
(Len::Aes192, Mode::Cbc, Pad::Pkcs7) => {
Ok(Cbc::<Aes192, Pkcs7>::new_var(&key, &iv)?.encrypt_vec(&plaintext))
}
(Len::Aes192, Mode::Cbc, Pad::ZeroPadding) => {
Ok(Cbc::<Aes192, ZeroPadding>::new_var(&key, &iv)?.encrypt_vec(&plaintext))
}
(Len::Aes192, Mode::Cbc, Pad::NoPadding) => {
Ok(Cbc::<Aes192, NoPadding>::new_var(&key, &iv)?.encrypt_vec(&plaintext))
}
(Len::Aes192, Mode::Cbc, Pad::Iso7816) => {
Ok(Cbc::<Aes192, Iso7816>::new_var(&key, &iv)?.encrypt_vec(&plaintext))
}
(Len::Aes192, Mode::Cbc, Pad::AnsiX923) => {
Ok(Cbc::<Aes192, AnsiX923>::new_var(&key, &iv)?.encrypt_vec(&plaintext))
}
(Len::Aes192, Mode::Ecb, Pad::Pkcs7) => {
Ok(Ecb::<Aes192, Pkcs7>::new_var(&key, &iv)?.encrypt_vec(&plaintext))
}
(Len::Aes192, Mode::Ecb, Pad::ZeroPadding) => {
Ok(Ecb::<Aes192, ZeroPadding>::new_var(&key, &iv)?.encrypt_vec(&plaintext))
}
(Len::Aes192, Mode::Ecb, Pad::NoPadding) => {
Ok(Ecb::<Aes192, NoPadding>::new_var(&key, &iv)?.encrypt_vec(&plaintext))
}
(Len::Aes192, Mode::Ecb, Pad::Iso7816) => {
Ok(Ecb::<Aes192, Iso7816>::new_var(&key, &iv)?.encrypt_vec(&plaintext))
}
(Len::Aes192, Mode::Ecb, Pad::AnsiX923) => {
Ok(Ecb::<Aes192, AnsiX923>::new_var(&key, &iv)?.encrypt_vec(&plaintext))
}
(Len::Aes192, Mode::Pcbc, Pad::Pkcs7) => {
Ok(Pcbc::<Aes192, Pkcs7>::new_var(&key, &iv)?.encrypt_vec(&plaintext))
}
(Len::Aes192, Mode::Pcbc, Pad::ZeroPadding) => {
Ok(Pcbc::<Aes192, ZeroPadding>::new_var(&key, &iv)?.encrypt_vec(&plaintext))
}
(Len::Aes192, Mode::Pcbc, Pad::NoPadding) => {
Ok(Pcbc::<Aes192, NoPadding>::new_var(&key, &iv)?.encrypt_vec(&plaintext))
}
(Len::Aes192, Mode::Pcbc, Pad::Iso7816) => {
Ok(Pcbc::<Aes192, Iso7816>::new_var(&key, &iv)?.encrypt_vec(&plaintext))
}
(Len::Aes192, Mode::Pcbc, Pad::AnsiX923) => {
Ok(Pcbc::<Aes192, AnsiX923>::new_var(&key, &iv)?.encrypt_vec(&plaintext))
}
(Len::Aes256, Mode::Cbc, Pad::Pkcs7) => {
Ok(Cbc::<Aes256, Pkcs7>::new_var(&key, &iv)?.encrypt_vec(&plaintext))
}
(Len::Aes256, Mode::Cbc, Pad::ZeroPadding) => {
Ok(Cbc::<Aes256, ZeroPadding>::new_var(&key, &iv)?.encrypt_vec(&plaintext))
}
(Len::Aes256, Mode::Cbc, Pad::NoPadding) => {
Ok(Cbc::<Aes256, NoPadding>::new_var(&key, &iv)?.encrypt_vec(&plaintext))
}
(Len::Aes256, Mode::Cbc, Pad::Iso7816) => {
Ok(Cbc::<Aes256, Iso7816>::new_var(&key, &iv)?.encrypt_vec(&plaintext))
}
(Len::Aes256, Mode::Cbc, Pad::AnsiX923) => {
Ok(Cbc::<Aes256, AnsiX923>::new_var(&key, &iv)?.encrypt_vec(&plaintext))
}
(Len::Aes256, Mode::Ecb, Pad::Pkcs7) => {
Ok(Ecb::<Aes256, Pkcs7>::new_var(&key, &iv)?.encrypt_vec(&plaintext))
}
(Len::Aes256, Mode::Ecb, Pad::ZeroPadding) => {
Ok(Ecb::<Aes256, ZeroPadding>::new_var(&key, &iv)?.encrypt_vec(&plaintext))
}
(Len::Aes256, Mode::Ecb, Pad::NoPadding) => {
Ok(Ecb::<Aes256, NoPadding>::new_var(&key, &iv)?.encrypt_vec(&plaintext))
}
(Len::Aes256, Mode::Ecb, Pad::Iso7816) => {
Ok(Ecb::<Aes256, Iso7816>::new_var(&key, &iv)?.encrypt_vec(&plaintext))
}
(Len::Aes256, Mode::Ecb, Pad::AnsiX923) => {
Ok(Ecb::<Aes256, AnsiX923>::new_var(&key, &iv)?.encrypt_vec(&plaintext))
}
(Len::Aes256, Mode::Pcbc, Pad::Pkcs7) => {
Ok(Pcbc::<Aes256, Pkcs7>::new_var(&key, &iv)?.encrypt_vec(&plaintext))
}
(Len::Aes256, Mode::Pcbc, Pad::ZeroPadding) => {
Ok(Pcbc::<Aes256, ZeroPadding>::new_var(&key, &iv)?.encrypt_vec(&plaintext))
}
(Len::Aes256, Mode::Pcbc, Pad::NoPadding) => {
Ok(Pcbc::<Aes256, NoPadding>::new_var(&key, &iv)?.encrypt_vec(&plaintext))
}
(Len::Aes256, Mode::Pcbc, Pad::Iso7816) => {
Ok(Pcbc::<Aes256, Iso7816>::new_var(&key, &iv)?.encrypt_vec(&plaintext))
}
(Len::Aes256, Mode::Pcbc, Pad::AnsiX923) => {
Ok(Pcbc::<Aes256, AnsiX923>::new_var(&key, &iv)?.encrypt_vec(&plaintext))
}
}
}
pub fn decrypt(
&self,
key: Vec<u8>,
iv: Vec<u8>,
ciphertext: Vec<u8>,
) -> Result<Vec<u8>, Box<dyn Error>> {
match (&self.len, &self.mode, &self.pad) {
(Len::Aes128, Mode::Cbc, Pad::Pkcs7) => {
Ok(Cbc::<Aes128, Pkcs7>::new_var(&key, &iv)?.decrypt_vec(&ciphertext)?)
}
(Len::Aes128, Mode::Cbc, Pad::ZeroPadding) => {
Ok(Cbc::<Aes128, ZeroPadding>::new_var(&key, &iv)?.decrypt_vec(&ciphertext)?)
}
(Len::Aes128, Mode::Cbc, Pad::NoPadding) => {
Ok(Cbc::<Aes128, NoPadding>::new_var(&key, &iv)?.decrypt_vec(&ciphertext)?)
}
(Len::Aes128, Mode::Cbc, Pad::Iso7816) => {
Ok(Cbc::<Aes128, Iso7816>::new_var(&key, &iv)?.decrypt_vec(&ciphertext)?)
}
(Len::Aes128, Mode::Cbc, Pad::AnsiX923) => {
Ok(Cbc::<Aes128, AnsiX923>::new_var(&key, &iv)?.decrypt_vec(&ciphertext)?)
}
(Len::Aes128, Mode::Ecb, Pad::Pkcs7) => {
Ok(Ecb::<Aes128, Pkcs7>::new_var(&key, &iv)?.decrypt_vec(&ciphertext)?)
}
(Len::Aes128, Mode::Ecb, Pad::ZeroPadding) => {
Ok(Ecb::<Aes128, ZeroPadding>::new_var(&key, &iv)?.decrypt_vec(&ciphertext)?)
}
(Len::Aes128, Mode::Ecb, Pad::NoPadding) => {
Ok(Ecb::<Aes128, NoPadding>::new_var(&key, &iv)?.decrypt_vec(&ciphertext)?)
}
(Len::Aes128, Mode::Ecb, Pad::Iso7816) => {
Ok(Ecb::<Aes128, Iso7816>::new_var(&key, &iv)?.decrypt_vec(&ciphertext)?)
}
(Len::Aes128, Mode::Ecb, Pad::AnsiX923) => {
Ok(Ecb::<Aes128, AnsiX923>::new_var(&key, &iv)?.decrypt_vec(&ciphertext)?)
}
(Len::Aes128, Mode::Pcbc, Pad::Pkcs7) => {
Ok(Pcbc::<Aes128, Pkcs7>::new_var(&key, &iv)?.decrypt_vec(&ciphertext)?)
}
(Len::Aes128, Mode::Pcbc, Pad::ZeroPadding) => {
Ok(Pcbc::<Aes128, ZeroPadding>::new_var(&key, &iv)?.decrypt_vec(&ciphertext)?)
}
(Len::Aes128, Mode::Pcbc, Pad::NoPadding) => {
Ok(Pcbc::<Aes128, NoPadding>::new_var(&key, &iv)?.decrypt_vec(&ciphertext)?)
}
(Len::Aes128, Mode::Pcbc, Pad::Iso7816) => {
Ok(Pcbc::<Aes128, Iso7816>::new_var(&key, &iv)?.decrypt_vec(&ciphertext)?)
}
(Len::Aes128, Mode::Pcbc, Pad::AnsiX923) => {
Ok(Pcbc::<Aes128, AnsiX923>::new_var(&key, &iv)?.decrypt_vec(&ciphertext)?)
}
(Len::Aes192, Mode::Ecb, Pad::Pkcs7) => {
Ok(Ecb::<Aes192, Pkcs7>::new_var(&key, &iv)?.decrypt_vec(&ciphertext)?)
}
(Len::Aes192, Mode::Ecb, Pad::ZeroPadding) => {
Ok(Ecb::<Aes192, ZeroPadding>::new_var(&key, &iv)?.decrypt_vec(&ciphertext)?)
}
(Len::Aes192, Mode::Ecb, Pad::NoPadding) => {
Ok(Ecb::<Aes192, NoPadding>::new_var(&key, &iv)?.decrypt_vec(&ciphertext)?)
}
(Len::Aes192, Mode::Ecb, Pad::Iso7816) => {
Ok(Ecb::<Aes192, Iso7816>::new_var(&key, &iv)?.decrypt_vec(&ciphertext)?)
}
(Len::Aes192, Mode::Ecb, Pad::AnsiX923) => {
Ok(Ecb::<Aes192, AnsiX923>::new_var(&key, &iv)?.decrypt_vec(&ciphertext)?)
}
(Len::Aes192, Mode::Cbc, Pad::Pkcs7) => {
Ok(Cbc::<Aes192, Pkcs7>::new_var(&key, &iv)?.decrypt_vec(&ciphertext)?)
}
(Len::Aes192, Mode::Cbc, Pad::ZeroPadding) => {
Ok(Cbc::<Aes192, ZeroPadding>::new_var(&key, &iv)?.decrypt_vec(&ciphertext)?)
}
(Len::Aes192, Mode::Cbc, Pad::NoPadding) => {
Ok(Cbc::<Aes192, NoPadding>::new_var(&key, &iv)?.decrypt_vec(&ciphertext)?)
}
(Len::Aes192, Mode::Cbc, Pad::Iso7816) => {
Ok(Cbc::<Aes192, Iso7816>::new_var(&key, &iv)?.decrypt_vec(&ciphertext)?)
}
(Len::Aes192, Mode::Cbc, Pad::AnsiX923) => {
Ok(Cbc::<Aes192, AnsiX923>::new_var(&key, &iv)?.decrypt_vec(&ciphertext)?)
}
(Len::Aes192, Mode::Pcbc, Pad::Pkcs7) => {
Ok(Pcbc::<Aes192, Pkcs7>::new_var(&key, &iv)?.decrypt_vec(&ciphertext)?)
}
(Len::Aes192, Mode::Pcbc, Pad::ZeroPadding) => {
Ok(Pcbc::<Aes192, ZeroPadding>::new_var(&key, &iv)?.decrypt_vec(&ciphertext)?)
}
(Len::Aes192, Mode::Pcbc, Pad::NoPadding) => {
Ok(Pcbc::<Aes192, NoPadding>::new_var(&key, &iv)?.decrypt_vec(&ciphertext)?)
}
(Len::Aes192, Mode::Pcbc, Pad::Iso7816) => {
Ok(Pcbc::<Aes192, Iso7816>::new_var(&key, &iv)?.decrypt_vec(&ciphertext)?)
}
(Len::Aes192, Mode::Pcbc, Pad::AnsiX923) => {
Ok(Pcbc::<Aes192, AnsiX923>::new_var(&key, &iv)?.decrypt_vec(&ciphertext)?)
}
(Len::Aes256, Mode::Cbc, Pad::Pkcs7) => {
Ok(Cbc::<Aes256, Pkcs7>::new_var(&key, &iv)?.decrypt_vec(&ciphertext)?)
}
(Len::Aes256, Mode::Cbc, Pad::ZeroPadding) => {
Ok(Cbc::<Aes256, ZeroPadding>::new_var(&key, &iv)?.decrypt_vec(&ciphertext)?)
}
(Len::Aes256, Mode::Cbc, Pad::NoPadding) => {
Ok(Cbc::<Aes256, NoPadding>::new_var(&key, &iv)?.decrypt_vec(&ciphertext)?)
}
(Len::Aes256, Mode::Cbc, Pad::Iso7816) => {
Ok(Cbc::<Aes256, Iso7816>::new_var(&key, &iv)?.decrypt_vec(&ciphertext)?)
}
(Len::Aes256, Mode::Cbc, Pad::AnsiX923) => {
Ok(Cbc::<Aes256, AnsiX923>::new_var(&key, &iv)?.decrypt_vec(&ciphertext)?)
}
(Len::Aes256, Mode::Ecb, Pad::Pkcs7) => {
Ok(Ecb::<Aes256, Pkcs7>::new_var(&key, &iv)?.decrypt_vec(&ciphertext)?)
}
(Len::Aes256, Mode::Ecb, Pad::ZeroPadding) => {
Ok(Ecb::<Aes256, ZeroPadding>::new_var(&key, &iv)?.decrypt_vec(&ciphertext)?)
}
(Len::Aes256, Mode::Ecb, Pad::NoPadding) => {
Ok(Ecb::<Aes256, NoPadding>::new_var(&key, &iv)?.decrypt_vec(&ciphertext)?)
}
(Len::Aes256, Mode::Ecb, Pad::Iso7816) => {
Ok(Ecb::<Aes256, Iso7816>::new_var(&key, &iv)?.decrypt_vec(&ciphertext)?)
}
(Len::Aes256, Mode::Ecb, Pad::AnsiX923) => {
Ok(Ecb::<Aes256, AnsiX923>::new_var(&key, &iv)?.decrypt_vec(&ciphertext)?)
}
(Len::Aes256, Mode::Pcbc, Pad::Pkcs7) => {
Ok(Pcbc::<Aes256, Pkcs7>::new_var(&key, &iv)?.decrypt_vec(&ciphertext)?)
}
(Len::Aes256, Mode::Pcbc, Pad::ZeroPadding) => {
Ok(Pcbc::<Aes256, ZeroPadding>::new_var(&key, &iv)?.decrypt_vec(&ciphertext)?)
}
(Len::Aes256, Mode::Pcbc, Pad::NoPadding) => {
Ok(Pcbc::<Aes256, NoPadding>::new_var(&key, &iv)?.decrypt_vec(&ciphertext)?)
}
(Len::Aes256, Mode::Pcbc, Pad::Iso7816) => {
Ok(Pcbc::<Aes256, Iso7816>::new_var(&key, &iv)?.decrypt_vec(&ciphertext)?)
}
(Len::Aes256, Mode::Pcbc, Pad::AnsiX923) => {
Ok(Pcbc::<Aes256, AnsiX923>::new_var(&key, &iv)?.decrypt_vec(&ciphertext)?)
}
}
}
}