pub trait SymmetricCipher: Sized {
type Key: Zeroize + AsRef<[u8]> + AsMut<[u8]> + Clone;
type Nonce: AsRef<[u8]> + AsMut<[u8]> + Clone;
type Ciphertext: AsRef<[u8]> + AsMut<[u8]> + Clone;
type EncryptOperation<'a>: EncryptOperation<'a, Self>
where Self: 'a;
type DecryptOperation<'a>: DecryptOperation<'a, Self>
where Self: 'a;
// Required methods
fn name() -> &'static str;
fn encrypt(&self) -> Self::EncryptOperation<'_>;
fn decrypt(&self) -> Self::DecryptOperation<'_>;
fn generate_key<R: RngCore + CryptoRng>(rng: &mut R) -> Result<Self::Key>;
fn generate_nonce<R: RngCore + CryptoRng>(
rng: &mut R,
) -> Result<Self::Nonce>;
fn derive_key_from_bytes(bytes: &[u8]) -> Result<Self::Key>;
}
Expand description
Trait for symmetric encryption algorithms with enhanced type safety
Required Associated Types§
Sourcetype Key: Zeroize + AsRef<[u8]> + AsMut<[u8]> + Clone
type Key: Zeroize + AsRef<[u8]> + AsMut<[u8]> + Clone
Key type with appropriate algorithm binding
Sourcetype EncryptOperation<'a>: EncryptOperation<'a, Self>
where
Self: 'a
type EncryptOperation<'a>: EncryptOperation<'a, Self> where Self: 'a
Operation type for encryption operations
Sourcetype DecryptOperation<'a>: DecryptOperation<'a, Self>
where
Self: 'a
type DecryptOperation<'a>: DecryptOperation<'a, Self> where Self: 'a
Operation type for decryption operations
Required Methods§
Sourcefn encrypt(&self) -> Self::EncryptOperation<'_>
fn encrypt(&self) -> Self::EncryptOperation<'_>
Begin encryption operation
Sourcefn decrypt(&self) -> Self::DecryptOperation<'_>
fn decrypt(&self) -> Self::DecryptOperation<'_>
Begin decryption operation
Sourcefn generate_key<R: RngCore + CryptoRng>(rng: &mut R) -> Result<Self::Key>
fn generate_key<R: RngCore + CryptoRng>(rng: &mut R) -> Result<Self::Key>
Generate a new random key
Sourcefn generate_nonce<R: RngCore + CryptoRng>(rng: &mut R) -> Result<Self::Nonce>
fn generate_nonce<R: RngCore + CryptoRng>(rng: &mut R) -> Result<Self::Nonce>
Generate a new random nonce
Sourcefn derive_key_from_bytes(bytes: &[u8]) -> Result<Self::Key>
fn derive_key_from_bytes(bytes: &[u8]) -> Result<Self::Key>
Derive a key from arbitrary bytes
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.