#blake2b #blake2 #blake2bp

no-std blake2b_simd

a pure Rust BLAKE2b implementation with dynamic SIMD

26 releases (3 stable)

1.0.2 Sep 10, 2023
1.0.1 Feb 9, 2023
1.0.0 Nov 19, 2021
0.5.11 Nov 2, 2020
0.4.1 Oct 26, 2018

#4 in Hardware support

Download history 48784/week @ 2023-12-23 73424/week @ 2023-12-30 105764/week @ 2024-01-06 112371/week @ 2024-01-13 120354/week @ 2024-01-20 134441/week @ 2024-01-27 134257/week @ 2024-02-03 135052/week @ 2024-02-10 134837/week @ 2024-02-17 138147/week @ 2024-02-24 130413/week @ 2024-03-02 127912/week @ 2024-03-09 127766/week @ 2024-03-16 131084/week @ 2024-03-23 148016/week @ 2024-03-30 114956/week @ 2024-04-06

543,519 downloads per month
Used in 1,196 crates (113 directly)

MIT license

145KB
3K SLoC

blake2b_simd GitHub crates.io 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.

Example

use blake2b_simd::{blake2b, Params};

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

let hash = Params::new()
    .hash_length(16)
    .key(b"The Magic Words are Squeamish Ossifrage")
    .personal(b"L. P. Waterhouse")
    .to_state()
    .update(b"foo")
    .update(b"bar")
    .update(b"baz")
    .finalize();
assert_eq!("ee8ff4e9be887297cf79348dc35dab56", &hash.to_hex());

Dependencies

~97KB