Skip to main content

Cost

Struct Cost 

Source
pub struct Cost {
    pub memory_kib: u32,
    pub iterations: u32,
    pub parallelism: u32,
}
Expand description

How much work one password hash costs.

Fields§

§memory_kib: u32

Memory used per hash, in kibibytes.

§iterations: u32

Passes over that memory.

§parallelism: u32

Lanes hashed in parallel.

Implementations§

Source§

impl Cost

Source

pub const DEFAULT: Cost

The default: 19 MiB of memory, two passes, one lane.

This is OWASP’s first recommended argon2id configuration. Memory is the parameter that actually defends against attackers: a GPU or ASIC can pipeline iterations cheaply but has to buy 19 MiB of fast memory per guess, which is what collapses their parallelism advantage. Two passes is the minimum argon2id allows at this memory size, and one lane keeps the cost predictable on a busy web server that is already running one request per core.

On a modern server this lands around 40 ms per hash — slow enough to make offline cracking expensive, fast enough that a login request does not feel it.

Source

pub const FAST: Cost

The cheapest configuration argon2 accepts.

Deliberately far too weak for real passwords. It exists because a test suite that hashes a dozen passwords at the real cost spends its whole runtime inside argon2, and a slow suite is a suite that stops being run. Never use this to store a password.

Trait Implementations§

Source§

impl Clone for Cost

Source§

fn clone(&self) -> Cost

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Copy for Cost

Source§

impl Debug for Cost

Source§

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

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

impl Default for Cost

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl Eq for Cost

Source§

impl PartialEq for Cost

Source§

fn eq(&self, other: &Cost) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for Cost

Auto Trait Implementations§

§

impl Freeze for Cost

§

impl RefUnwindSafe for Cost

§

impl Send for Cost

§

impl Sync for Cost

§

impl Unpin for Cost

§

impl UnsafeUnpin for Cost

§

impl UnwindSafe for Cost

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. 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> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

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

Source§

type Error = !

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

fn try_from(value: U) -> Result<T, !>

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.