use docext::docext;
mod block;
mod onetimepad;
pub use {
block::{
aes,
Aes128,
Aes192,
Aes256,
BlockCipher,
BlockDecrypt,
BlockEncrypt,
BlockMode,
BlockSizeTooSmall,
Cbc,
Ctr,
Ecb,
Padding,
Pkcs7,
},
onetimepad::OneTimePad,
};
#[docext]
pub trait Cipher:
CipherEncrypt<EncryptionKey = Self::Key> + CipherDecrypt<DecryptionKey = Self::Key>
{
type Key;
}
pub trait CipherEncrypt {
type EncryptionErr;
type EncryptionKey;
fn encrypt(
&self,
data: Vec<u8>,
key: Self::EncryptionKey,
) -> Result<Vec<u8>, Self::EncryptionErr>;
}
pub trait CipherDecrypt {
type DecryptionErr;
type DecryptionKey;
fn decrypt(
&self,
data: Vec<u8>,
key: Self::DecryptionKey,
) -> Result<Vec<u8>, Self::DecryptionErr>;
}