1
0
mirror of https://github.com/BLAKE3-team/BLAKE3 synced 2024-11-10 21:31:03 +01:00
official implementations of the BLAKE3 cryptographic hash function https://github.com/BLAKE3-team/BLAKE3
Go to file
2020-01-07 15:20:56 -05:00
.github/workflows test release mode in CI 2019-12-13 13:15:48 -05:00
b3sum make the --length argument require a value 2020-01-05 19:21:47 -05:00
benches rename 1_chunk benchmarks to 1_kib 2019-12-13 10:06:46 -05:00
media replace the README graph with a bar chart 2020-01-07 15:20:56 -05:00
reference_impl switch to the new permutations 2020-01-05 14:57:17 -05:00
src switch to the new permutations 2020-01-05 14:57:17 -05:00
test_vectors switch to the new permutations 2020-01-05 14:57:17 -05:00
.gitignore add portable.rs 2019-12-02 17:30:55 -05:00
build.rs make the "c_avx512" feature a no-op on non-x86 2019-12-12 15:13:04 -05:00
Cargo.toml make the "c_avx512" feature a no-op on non-x86 2019-12-12 15:13:04 -05:00
CONTRIBUTING.md . 2020-01-05 23:16:20 -05:00
LICENSE add a LICENSE file including CC0 and Apache 2.0 2019-12-15 17:44:01 -05:00
README.md s/zcash/ecc 2020-01-06 18:25:53 -05:00

BLAKE3

BLAKE3 is a cryptographic hash function that is:

  1. Faster than MD5, SHA1, SHA2, SHA3, and even BLAKE2.
  2. Highly parallelizable: The more data and the more cores, the faster it goes. (For you specialists reading this: this is because it is actually a Merkle tree under the hood.)
  3. Capable of verified streaming and incremental updates. (Again: the magic of Merkle trees.)
  4. Supporting simple hashing as well as PRF, MAC, KDF, XOF
  5. Carefully engineered to be simple and safe to use, with no "flavors" or variants.

performance graph

BLAKE3 is based on an optimized instance of the established hash function BLAKE2, and on the Bao tree mode. The BLAKE3 specifications and design rationale are available in the BLAKE3 paper.

This repository provides the official Rust implementation of BLAKE3, the blake3 crate. It includes optimized SIMD implementations, using dynamic CPU feature detection on x86. SSE4.1 and AVX2 support are implemented in Rust, while AVX-512 and ARM NEON support are implemented in C and controlled by the c_avx512 and c_neon features. Multi-threading is implemented with Rayon and controlled by the rayon feature. This repository also hosts the simplified reference implementation, which is portable and no_std-compatible.

The b3sum sub-crate provides a command line interface. You can install it with cargo install b3sum. It includes multi-threading and AVX-512 support by default.

BLAKE3 was designed by:

The development of BLAKE3 was sponsored by Teserakt and Electric Coin Company.

WARNING: BLAKE3 is not a password hashing algorithm, because it's designed to be fast, whereas password hashing should not be fast. If you hash passwords to store the hashes or if you derive keys from passwords, we recommend Argon2.

Usage

TODO

Contributing

Please see CONTRIBUTING.md

Intellectual property

The source code in the present repository is dual-licensed under CC0 1.0 and Apache 2.0 licences.

The Rust code is copyright Jack O'Connor, 2019. The C code is copyright Samuel Neves and Jack O'Connor, 2019.