pub trait StreamPrimitive<A>where
    A: AeadInPlace,
    A::NonceSize: Sub<Self::NonceOverhead>,
    NonceSize<A, Self>: ArrayLength<u8>,{
    type NonceOverhead: ArrayLength<u8>;
    type Counter: AddAssign + Copy + Default + Eq;

    const COUNTER_INCR: Self::Counter;
    const COUNTER_MAX: Self::Counter;

    // Required methods
    fn encrypt_in_place(
        &self,
        position: Self::Counter,
        last_block: bool,
        associated_data: &[u8],
        buffer: &mut dyn Buffer
    ) -> Result<()>;
    fn decrypt_in_place(
        &self,
        position: Self::Counter,
        last_block: bool,
        associated_data: &[u8],
        buffer: &mut dyn Buffer
    ) -> Result<()>;

    // Provided methods
    fn encrypt<'msg, 'aad>(
        &self,
        position: Self::Counter,
        last_block: bool,
        plaintext: impl Into<Payload<'msg, 'aad>>
    ) -> Result<Vec<u8>> { ... }
    fn decrypt<'msg, 'aad>(
        &self,
        position: Self::Counter,
        last_block: bool,
        ciphertext: impl Into<Payload<'msg, 'aad>>
    ) -> Result<Vec<u8>> { ... }
    fn encryptor(self) -> Encryptor<A, Self>
       where Self: Sized { ... }
    fn decryptor(self) -> Decryptor<A, Self>
       where Self: Sized { ... }
}
Available on crate feature stream only.
Expand description

Low-level STREAM implementation.

This trait provides a particular “flavor” of STREAM, as there are different ways the specifics of the construction can be implemented.

Deliberately immutable and stateless to permit parallel operation.

Required Associated Types§

source

type NonceOverhead: ArrayLength<u8>

Number of bytes this STREAM primitive requires from the nonce.

source

type Counter: AddAssign + Copy + Default + Eq

Type used as the STREAM counter.

Required Associated Constants§

source

const COUNTER_INCR: Self::Counter

Value to use when incrementing the STREAM counter (i.e. one)

source

const COUNTER_MAX: Self::Counter

Maximum value of the STREAM counter.

Required Methods§

source

fn encrypt_in_place( &self, position: Self::Counter, last_block: bool, associated_data: &[u8], buffer: &mut dyn Buffer ) -> Result<()>

Encrypt an AEAD message in-place at the given position in the STREAM.

source

fn decrypt_in_place( &self, position: Self::Counter, last_block: bool, associated_data: &[u8], buffer: &mut dyn Buffer ) -> Result<()>

Decrypt an AEAD message in-place at the given position in the STREAM.

Provided Methods§

source

fn encrypt<'msg, 'aad>( &self, position: Self::Counter, last_block: bool, plaintext: impl Into<Payload<'msg, 'aad>> ) -> Result<Vec<u8>>

Available on crate feature alloc only.

Encrypt the given plaintext payload, and return the resulting ciphertext as a vector of bytes.

source

fn decrypt<'msg, 'aad>( &self, position: Self::Counter, last_block: bool, ciphertext: impl Into<Payload<'msg, 'aad>> ) -> Result<Vec<u8>>

Available on crate feature alloc only.

Decrypt the given ciphertext slice, and return the resulting plaintext as a vector of bytes.

source

fn encryptor(self) -> Encryptor<A, Self>where Self: Sized,

Obtain Encryptor for this StreamPrimitive.

source

fn decryptor(self) -> Decryptor<A, Self>where Self: Sized,

Obtain Decryptor for this StreamPrimitive.

Implementors§

source§

impl<A> StreamPrimitive<A> for StreamBE32<A>where A: AeadInPlace, A::NonceSize: Sub<U5>, <<A as AeadCore>::NonceSize as Sub<U5>>::Output: ArrayLength<u8>,

§

type NonceOverhead = UInt<UInt<UInt<UTerm, B1>, B0>, B1>

§

type Counter = u32

source§

const COUNTER_INCR: u32 = 1u32

source§

const COUNTER_MAX: u32 = 4_294_967_295u32

source§

impl<A> StreamPrimitive<A> for StreamLE31<A>where A: AeadInPlace, A::NonceSize: Sub<U4>, <<A as AeadCore>::NonceSize as Sub<U4>>::Output: ArrayLength<u8>,

§

type NonceOverhead = UInt<UInt<UInt<UTerm, B1>, B0>, B0>

§

type Counter = u32

source§

const COUNTER_INCR: u32 = 1u32

source§

const COUNTER_MAX: u32 = 268_435_455u32