```
pub enum Algorithm {
Argon2d = 0,
Argon2i = 1,
Argon2id = 2,
}
```

## Expand description

Argon2 primitive type: variants of the algorithm.

## Variants§

### Argon2d = 0

Optimizes against GPU cracking attacks but vulnerable to side-channels.

Accesses the memory array in a password dependent order, reducing the possibility of time–memory tradeoff (TMTO) attacks.

### Argon2i = 1

Optimized to resist side-channel attacks.

Accesses the memory array in a password independent order, increasing the possibility of time-memory tradeoff (TMTO) attacks.

### Argon2id = 2

Hybrid that mixes Argon2i and Argon2d passes (*default*).

Uses the Argon2i approach for the first half pass over memory and Argon2d approach for subsequent passes. This effectively places it in the “middle” between the other two: it doesn’t provide as good TMTO/GPU cracking resistance as Argon2d, nor as good of side-channel resistance as Argon2i, but overall provides the most well-rounded approach to both classes of attacks.

## Implementations§

## Trait Implementations§

§### impl Ord for Algorithm

### impl Ord for Algorithm

§### impl PartialOrd for Algorithm

### impl PartialOrd for Algorithm

§#### fn partial_cmp(&self, other: &Algorithm) -> Option<Ordering>

#### fn partial_cmp(&self, other: &Algorithm) -> Option<Ordering>

1.0.0 · source§#### fn le(&self, other: &Rhs) -> bool

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

`self`

and `other`

) and is used by the `<=`

operator. Read more### impl Copy for Algorithm

### impl Eq for Algorithm

### impl StructuralEq for Algorithm

### impl StructuralPartialEq for Algorithm

## Auto Trait Implementations§

### impl RefUnwindSafe for Algorithm

### impl Send for Algorithm

### impl Sync for Algorithm

### impl Unpin for Algorithm

### impl UnwindSafe for Algorithm

## Blanket Implementations§

§### impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,

### impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,

§### impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,

### impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,

source§### impl<T> BorrowMut<T> for Twhere
T: ?Sized,

### impl<T> BorrowMut<T> for Twhere
T: ?Sized,

source§#### fn borrow_mut(&mut self) -> &mut T

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

§### impl<Q, K> Comparable<K> for Q

### impl<Q, K> Comparable<K> for Q

§### impl<Q, K> Equivalent<K> for Q

### impl<Q, K> Equivalent<K> for Q

§#### fn equivalent(&self, key: &K) -> bool

#### fn equivalent(&self, key: &K) -> bool

§### impl<Q, K> Equivalent<K> for Q

### impl<Q, K> Equivalent<K> for Q

§#### fn equivalent(&self, key: &K) -> bool

#### fn equivalent(&self, key: &K) -> bool

`key`

and return `true`

if they are equal.