GitPedia

Argon2rs

The pure-Rust password hashing library running on Argon2.

From bryant·Updated October 26, 2025·View on GitHub·

[![Build Status](https://travis-ci.org/bryant/argon2rs.svg?branch=master)](https://travis-ci.org/bryant/argon2rs) The project is written primarily in Rust, distributed under the MIT License license, first published in 2016. Key topics include: argon2, argon2i, argon2id, cryptography, password-hash.

argon2rs

Build
Status

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.

Documentation

Installation

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"

Usage

From examples/helloworld.rs:

rust
extern crate argon2rs; pub fn main() { let (password, salt) = ("argon2i!", "delicious salt"); println!("argon2i_simple(\"{}\", \"{}\"):", password, salt); for byte in argon2rs::argon2i_simple(&password, &salt).iter() { print!("{:02x}", byte); } println!(""); }

outputs:

argon2i_simple("argon2i!", "delicious salt"):
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.

TODO

  • Parallelize.
  • Incorporate SIMD into compression function.
  • Zero-on-drop trait for sensitive(s): Matrix
  • Constant-time verification API.
  • Benchmarks.
  • Support NEON and SIMD on other arches.
  • Fuzz.
  • Prove safety of unchecked accesses in Block, Matrix.

Benchmarks

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 bench_ref"

# output trimmed for brevity

     Running target/release/versus_cargon-b5955411e1594c85

running 5 tests
test ensure_identical_hashes ... ignored
test bench_argon2rs_i        ... bench:   9,547,031 ns/iter (+/- 15,964)
test bench_argon2rs_threaded ... bench:   4,584,163 ns/iter (+/- 398,803)
test bench_cargon_i          ... bench:  10,013,015 ns/iter (+/- 177,482)
test bench_cargon_threaded   ... bench:   3,753,022 ns/iter (+/- 48,688)

test result: ok. 0 passed; 0 failed; 0 ignored; 2 measured

References

"Argon2: The Memory-Hard Function for Password Hashing and Other
Applications"

Contributors

Showing top 6 contributors by commit count.

View all contributors on GitHub →

This article is auto-generated from bryant/argon2rs via the GitHub API.Last fetched: 6/19/2026