Algorithms

BLAKE3

A Merkle tree of 1 KiB chunks with a 32-byte digest. Absurdly fast and no HMAC mode
IDblake315 / 46BLAKE · 256-bit
Hash / Cryptographic

BLAKE3

A Merkle tree of chunks, absurdly fast.

Digest
256-bit · 32 bytes
HMAC
no key mode
Security
128-bit security against collisions and preimages
Family
6 in BLAKE
3 options, 0 required

Sample

hex
d74981efa70a0c880b8d8c1985d075dbcbf679b99a5f9914e5aaf96b831a9e24
base64
10mB76cKDIgLjYwZhdB128v2ebmaX5kU5ar5a4ManiQ=

Options

encodingstring
default hex
Output encoding: hex, base64, base64url, binary
roundsnumber
default 1
How many times to hash, each round hashing the previous digest
chainstring
default bytes
What each round after the first hashes: bytes of the digest, or its lowercase hex

Access

Createcreate("blake3")
CLIhashes blake3 'hello world'
Tryplayground with the sample above
Kinblake2b, blake2b-256, blake2b-224, blake2s +1

BLAKE3 splits the input into 1 KiB chunks, hashes them as leaves of a binary tree and compresses its way up to one root. The tree is what makes it parallel, and why it runs so fast on large inputs. This implementation is plain TypeScript and checked against the reference blake3 on 285 input lengths up to 1 MiB, so it's right. It isn't SIMD fast, though.

ts
create("blake3").hash("").digest;
// "af1349b9f5f9a1a6a0404dea36dcc9499bcb25c9adc112b7cc9a93cae41f3262"
create("blake3").hash("abc").digest;
// "6437b3ac38465133ffb63b75273a8db548c558465d79db03fd359c6cd5bd9d85"

No HMAC. BLAKE3 has its own keyed mode, which isn't HMAC and isn't here, so a key is refused instead of quietly ignored.