f79c648cec | ||
---|---|---|
.github/workflows | ||
b3sum | ||
benches | ||
media | ||
reference_impl | ||
src | ||
test_vectors | ||
.gitignore | ||
CONTRIBUTING.md | ||
Cargo.toml | ||
LICENSE | ||
README.md | ||
build.rs |
BLAKE3
BLAKE3 is a cryptographic hash function that is
- Faster than MD5, SHA1, SHA2, SHA3, and even BLAKE2.
- 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 MerkleTree under the hood.)
- Capable of verified streaming and incremental updates. (Again: the magic of Merkle Trees.)
- Carefully engineered to be simple and safe to use, with no "flavors" or variants.
The complete specifications and design rationale are available as a PDF and its LaTeX source.
This repository provides the official Rust implementation of BLAKE3,
which includes both a portable implementation and also optimized
versions for various instructions sets, using dynamic CPU feature
detection on x86. SSE4.1 and AVX2 support are implemented in Rust and
always available, while AVX-512 and NEON support are implemented in C
and gated by the c_avx512
and c_neon
features. Multi-threading is
implemented with Rayon and gated 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:
- @oconnor63 (Jack O'Connor)
- @sneves (Samuel Neves)
- @veorq (Jean-Philippe Aumasson)
- @zookozcash (Zooko)
WARNING: BLAKE3 is not a password hash, 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
History
BLAKE3 is essentially an adapted version of BLAKE2 using the Bao tree mode.
BLAKE2 is an established cryptographic hash function, for example supported by OpenSSL, and used in countless applications. Bao is a tree hashing mode satisfying the requirements for provably secure tree hashing.
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.