Crate blake2b_simd

source ·
Expand description

GitHub Actions Status

An implementation of the BLAKE2b and BLAKE2bp hash functions. See also blake2s_simd.

This crate includes:

  • 100% stable Rust.
  • SIMD implementations based on Samuel Neves’ blake2-avx2. These are very fast. For benchmarks, see the Performance section of the README.
  • Portable, safe implementations for other platforms.
  • Dynamic CPU feature detection. Binaries include multiple implementations by default and choose the fastest one the processor supports at runtime.
  • All the features from the the BLAKE2 spec, like adjustable length, keying, and associated data for tree hashing.
  • no_std support. The std Cargo feature is on by default, for CPU feature detection and for implementing std::io::Write.
  • Support for computing multiple BLAKE2b hashes in parallel, matching the efficiency of BLAKE2bp. See the many module.


use blake2b_simd::{blake2b, Params};

let expected = "ca002330e69d3e6b84a46a56a6533fd79d51d97a3bb7cad6c2ff43b354185d6d\
let hash = blake2b(b"foo");
assert_eq!(expected, &hash.to_hex());

let hash = Params::new()
    .key(b"The Magic Words are Squeamish Ossifrage")
    .personal(b"L. P. Waterhouse")
assert_eq!("ee8ff4e9be887297cf79348dc35dab56", &hash.to_hex());


BLAKE2bp, a variant of BLAKE2b that uses SIMD more efficiently.
Interfaces for hashing multiple inputs at once, using SIMD more efficiently.


A finalized BLAKE2 hash, with constant-time equality.
A parameter builder that exposes all the non-default BLAKE2 features.
An incremental hasher for BLAKE2b.


The number input bytes passed to each call to the compression function. Small benchmarks need to use an even multiple of BLOCKBYTES, or else their apparent throughput will be low.
The max key length.
The max hash length.
The max personalization length.
The max salt length.


Compute the BLAKE2b hash of a slice of bytes all at once, using default parameters.