pub mod aes;
mod modes;
mod padding;
pub use {
aes::{Aes128, Aes192, Aes256},
modes::{BlockMode, BlockSizeTooSmall, Cbc, Ctr, Ecb},
padding::{Padding, Pkcs7},
};
pub trait BlockCipher:
BlockEncrypt<EncryptionBlock = Self::Block, EncryptionKey = Self::Key>
+ BlockDecrypt<DecryptionBlock = Self::Block, DecryptionKey = Self::Key>
{
type Block;
type Key;
}
pub trait BlockEncrypt {
type EncryptionBlock;
type EncryptionKey;
fn encrypt(
&self,
data: Self::EncryptionBlock,
key: Self::EncryptionKey,
) -> Self::EncryptionBlock;
}
pub trait BlockDecrypt {
type DecryptionBlock;
type DecryptionKey;
fn decrypt(
&self,
data: Self::DecryptionBlock,
key: Self::DecryptionKey,
) -> Self::DecryptionBlock;
}