Crate blake2s_simd

source ·
Expand description

GitHub crates.io Actions Status

An implementation of the BLAKE2s and BLAKE2sp hash functions. See also blake2b_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 BLAKE2s hashes in parallel, matching the efficiency of BLAKE2sp. See the many module.

Example

use blake2s_simd::{blake2s, Params};

let expected = "08d6cad88075de8f192db097573d0e829411cd91eb6ec65e8fc16c017edfdb74";
let hash = blake2s(b"foo");
assert_eq!(expected, &hash.to_hex());

let hash = Params::new()
    .hash_length(16)
    .key(b"Squeamish Ossifrage")
    .personal(b"Shaftoe")
    .to_state()
    .update(b"foo")
    .update(b"bar")
    .update(b"baz")
    .finalize();
assert_eq!("28325512782cbf5019424fa65da9a6c7", &hash.to_hex());

Modules

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

Structs

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

Constants

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.

Functions

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