Skip to main content

Salt

Struct Salt 

Source
pub struct Salt {
    algorithm: Algorithm,
    bytes: Arc<[u8]>,
}
Expand description

A salt for HKDF operations.

Fields§

§algorithm: Algorithm§bytes: Arc<[u8]>

Implementations§

Source§

impl Salt

Source

pub fn new(algorithm: Algorithm, value: &[u8]) -> Self

Constructs a new Salt with the given value based on the given digest algorithm.

Constructing a Salt is relatively expensive so it is good to reuse a Salt object instead of re-constructing Salts with the same value.

§Panics

new panics if salt creation fails

Source

pub fn none(algorithm: Algorithm) -> Self

Constructs a Salt with no salt value.

This is equivalent to a salt argument of “a string of HashLen zeros” as described in RFC 5869 Section 2.2, and avoids the awkward Salt::new(alg, b"") idiom.

§Use a salt when you can

HKDF’s extraction step is strengthened by a non-secret, ideally random salt; RFC 5869 Section 3.1 recommends supplying one whenever the application can, and NIST SP 800-56C Rev. 2 §5.1 likewise recommends a non-empty salt for the key-derivation key. In particular, when the input keying material is not uniformly random or when an attacker has any control over it, a salt is what gives the extract step a reduction to HMAC’s PRF security.

Use this constructor only when no salt material is available to the application. Otherwise prefer Salt::new with a salt that is at least as long as the underlying digest’s output and is either random or chosen with care to avoid collisions across uses of the same key.

Source

pub fn extract(&self, secret: &[u8]) -> Prk

The HKDF-Extract operation.

§Panics

Panics if the extract operation is unable to be performed

Source

pub fn algorithm(&self) -> Algorithm

The algorithm used to derive this salt.

Trait Implementations§

Source§

impl Debug for Salt

Source§

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

Formats the value using the given formatter. Read more
Source§

impl From<Okm<'_, Algorithm>> for Salt

Source§

fn from(okm: Okm<'_, Algorithm>) -> Self

Converts to this type from the input type.

Auto Trait Implementations§

§

impl Freeze for Salt

§

impl RefUnwindSafe for Salt

§

impl Send for Salt

§

impl Sync for Salt

§

impl Unpin for Salt

§

impl UnsafeUnpin for Salt

§

impl UnwindSafe for Salt

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.