S2vState

Struct S2vState 

Source
pub struct S2vState<'a, C: AesCipher> { /* private fields */ }
Expand description

Incremental RFC 5297 §2.4 S2V state.

Associated-data components are absorbed one at a time with push_component; the final vector component (the plaintext) is supplied to finalize, which returns the synthetic IV V. The state borrows a single keyed cipher, so one key schedule serves every CMAC in the computation.

Implementations§

Source§

impl<'a, C: AesCipher> S2vState<'a, C>

Source

pub fn new(cipher: &'a C) -> Self

Initialize the running value: D = CMAC(K, <zero>).

Source

pub fn push_component(&mut self, feed: impl FnOnce(&mut CmacState<&'a C>))

Absorb one associated-data component S_i, streamed through feed: D = dbl(D) xor CMAC(K, S_i).

Source

pub fn finalize(self, last: &[u8]) -> [u8; 16]

Finish with the final component S_n and return V.

Per RFC 5297: V = CMAC(K, S_n xorend D) when S_n fills a block, otherwise V = CMAC(K, dbl(D) xor pad(S_n)).

Auto Trait Implementations§

§

impl<'a, C> Freeze for S2vState<'a, C>

§

impl<'a, C> RefUnwindSafe for S2vState<'a, C>
where C: RefUnwindSafe,

§

impl<'a, C> Send for S2vState<'a, C>
where C: Sync,

§

impl<'a, C> Sync for S2vState<'a, C>
where C: Sync,

§

impl<'a, C> Unpin for S2vState<'a, C>

§

impl<'a, C> UnwindSafe for S2vState<'a, C>
where C: RefUnwindSafe,

Blanket Implementations§

§

impl<T> Any for T
where T: 'static + ?Sized,

§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
§

impl<T> Borrow<T> for T
where T: ?Sized,

§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
§

impl<T> BorrowMut<T> for T
where T: ?Sized,

§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> From<T> for T

§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T, U> Into<U> for T
where U: From<T>,

§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.