Trait SymmetricCipher

Source
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§

Source

type Key: Zeroize + AsRef<[u8]> + AsMut<[u8]> + Clone

Key type with appropriate algorithm binding

Source

type Nonce: AsRef<[u8]> + AsMut<[u8]> + Clone

Nonce type with appropriate size constraint

Source

type Ciphertext: AsRef<[u8]> + AsMut<[u8]> + Clone

Ciphertext output type

Source

type EncryptOperation<'a>: EncryptOperation<'a, Self> where Self: 'a

Operation type for encryption operations

Source

type DecryptOperation<'a>: DecryptOperation<'a, Self> where Self: 'a

Operation type for decryption operations

Required Methods§

Source

fn name() -> &'static str

Returns the symmetric cipher algorithm name

Source

fn encrypt(&self) -> Self::EncryptOperation<'_>

Begin encryption operation

Source

fn decrypt(&self) -> Self::DecryptOperation<'_>

Begin decryption operation

Source

fn generate_key<R: RngCore + CryptoRng>(rng: &mut R) -> Result<Self::Key>

Generate a new random key

Source

fn generate_nonce<R: RngCore + CryptoRng>(rng: &mut R) -> Result<Self::Nonce>

Generate a new random nonce

Source

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.

Implementors§