CtPoly1305

Struct CtPoly1305 

Source
pub struct CtPoly1305 { /* private fields */ }
Available on crate feature allow-non-fips only.
Expand description

Provides a constant-time interface for updating the MAC computation, enhancing resistance against side-channel attacks.

§Example

use wolf_crypto::{mac::{Poly1305, poly1305::Key}, aead::Tag};

let key: Key = [42u8; 32].into();
let ct_poly = Poly1305::new(key.as_ref())
    .update_ct(b"constant time ")
    .update_ct(b"chunk")
    .finalize()
    .unwrap();

Implementations§

Source§

impl CtPoly1305

Source

pub fn update_ct(self, input: &[u8]) -> Self

Adds more data to the constant-time streaming MAC computation.

§Arguments
  • input - A byte slice representing the additional data to include.
§Returns

The updated CtPoly1305 instance.

§Example
use wolf_crypto::{mac::{Poly1305, poly1305::Key}, aead::Tag};

let key: Key = [42u8; 32].into();
let ct_poly = Poly1305::new(key.as_ref())
    .update_ct(b"chunk1")
    .update_ct(b"chunk2")
    .finalize()
    .unwrap();
Source

pub const fn is_ok(&self) -> bool

Returns true if no errors have been encountered to this point.

Source

pub const fn is_err(&self) -> bool

Returns true if an error has been encountered at some point.

Source

pub fn finalize(self) -> Result<Tag, Unspecified>

Finalizes the constant-time streaming MAC computation and returns the resulting Tag.

§Returns

The associated authentication Tag representing all updates and the total length of the updates.

§Errors

The CtPoly1305 instance accumulates errors throughout the updating process without branching. The only error which could occur:

One of the provided inputs had a length which was greater than u32::MAX.

§Example
use wolf_crypto::{mac::{Poly1305, poly1305::Key}, aead::Tag};

let key: Key = [42u8; 32].into();
let tag = Poly1305::new(key.as_ref())
    .update_ct(b"chunk1")
    .update_ct(b"chunk2")
    .finalize()
    .unwrap();
Source

pub fn finalize_no_padding(self) -> Result<Tag, Unspecified>

Finalizes the constant-time streaming MAC computation and returns the resulting Tag.

§Note

It is far more common in practice to use to pad the finalize method. This is only here for XSalsa20Poly1305.

§Returns

The associated authentication Tag representing all updates and the total length of the updates.

§Errors

The CtPoly1305 instance accumulates errors throughout the updating process without branching. The only error which could occur:

One of the provided inputs had a length which was greater than u32::MAX.

§Example
use wolf_crypto::{mac::{Poly1305, poly1305::Key}, aead::Tag};

let key: Key = [42u8; 32].into();
let tag = Poly1305::new(key.as_ref())
    .update_ct(b"chunk1")
    .update_ct(b"chunk2")
    .finalize_no_padding()
    .unwrap();

Trait Implementations§

Source§

impl Debug for CtPoly1305

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

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

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

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

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

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

Source§

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

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

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

Source§

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, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

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

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

Performs the conversion.
Source§

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

Source§

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

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

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

Performs the conversion.