This is a purely Rust-based library that provides both variants of the state-of-the-art Argon2 hashing algorithm, suitable for password hashing and password-based key derivation.
Via cargo:
bash
$ cd $PROJECT_ROOT
$ cargo install --features "simd"
From git:
bash
$ git clone https://github.com/bryant/argon2rs $ARGON_DIR && cd $ARGON_DIR
$ cargo build --features "simd"
From examples/helloworld.rs
:
```rust extern crate argon2rs;
pub fn main() { let (password, salt) = ("argon2i!", "delicious salt"); println!("argon2i(\"argon2i\", \"delicious\"):"); for byte in argon2rs::simple2i(&password, &salt).iter() { print!("{:02x}", byte); } println!(""); } ```
outputs:
argon2i("argon2i", "delicious"):
e254b28d820f26706a19309f1888cefd5d48d91384f35dc2e3fe75c3a8f665a6
There are two variants of Argon2 that differ in the manner by which reference indices are computed during block-filling rounds. Argon2d does this in a faster but data-dependent fashion that could be vulnerable to side-channel attacks, whereas Argon2i ("i" denoting independence from plaintext input) works slower but is immune to such attacks and is therefore the preferred choice for password hashing.
Matrix
MIT.
Our primary benchmarks are single- and multi-threaded runs of Argon2i with default parameters against the reference implementation. In order to compile and run this, first pull in the C sources:
bash
$ git submodule init
$ git submodule update benches/cargon/phc-winner-argon2
and then benchmark with Cargo as usual:
``` $ rustc --version rustc 1.11.0-dev (4b240fe96 2016-06-08)
$ export RUSTFLAGS='-C target-feature=+avx' $ cargo bench --features=simd
Running target/release/versus_cargon-b5955411e1594c85
running 5 tests test ensureidenticalhashes ... ignored test benchargon2rsi ... bench: 9,547,031 ns/iter (+/- 15,964) test benchargon2rsthreaded ... bench: 4,584,163 ns/iter (+/- 398,803) test benchcargoni ... bench: 10,013,015 ns/iter (+/- 177,482) test benchcargonthreaded ... bench: 3,753,022 ns/iter (+/- 48,688)
test result: ok. 0 passed; 0 failed; 0 ignored; 2 measured ```
"Argon2: The Memory-Hard Function for Password Hashing and Other Applications"