Skip to content
Choose a tag to compare

version 1.3.1

Changes since 1.3.0:

  • The unstable traits-preview feature now includes an implementation
    of crypto_common::BlockSizeUser, AKA
    digest::core_api::BlockSizeUser. This allows blake3::Hasher to be
    used with hmac::SimpleHmac.
Choose a tag to compare

version 1.3.0

Changes since 1.2.0:

  • Added blake3_hasher_reset to the C API, for parity with the Rust API.
  • Updated digest to v0.10. This version merged the crypto-mac crate with
    digest, so the dependency on crypto-mac has been removed. These trait
    implementations are still gated behind the "traits-preview" feature.
  • Updated clap to v3.
Choose a tag to compare

version 1.2.0

Changes since 1.1.0:

  • SECURITY FIX: Fixed an instance of undefined behavior in the Windows
    SSE2 assembly implementations, which affected both the Rust and C
    libraries in their default build configurations. See
    #206. The cause was a
    vector register that wasn't properly saved and restored. This bug has
    been present since SSE2 support was initially added in v0.3.7. The
    effects of this bug depend on surrounding code and compiler
    optimizations; see test_issue_206_windows_sse2 for an example of this
    bug causing incorrect hash output. Note that even when surrounding
    code is arranged to trigger this bug, the SSE2 implementation is
    normally only invoked on CPUs where SSE4.1 (introduced in 2007) isn't
    supported. One notable exception, however, is if the Rust library is
    built in no_std mode, with default_features = false or similar. In
    that case, runtime CPU feature detection is disabled, and since LLVM
    assumes that all x86-64 targets support SSE2, the SSE2 implementation
    will be invoked. For that reason, Rust callers who build blake3 in
    no_std mode for x86-64 Windows targets are the most likely to
    trigger this bug. We found this bug in internal testing, and we aren't
    aware of any callers encountering it in practice.
  • Added the Hasher::count() method.
Choose a tag to compare

version 1.1.0

Changes since 1.0.0:

  • The NEON implementation is now enabled by default on AArch64 targets.
    Previously it was disabled without the "neon" Cargo feature in Rust or
    the "BLAKE3_USE_NEON=1" preprocessor flag in C. This is still the case
    on ARM targets other than AArch64, because of the lack of dynamic CPU
    feature detection on ARM. Contributed by @rsdy.
  • The previous change leads to some build incompatibilities,
    particularly in C. If you build the C implementation for AArch64
    targets, you now need to include blake3_neon.c, or else you'll get a
    linker error like "undefined reference to `blake3_hash_many_neon'". If
    you don't want the NEON implementation, you need to explicitly set
    "BLAKE3_USE_NEON=0". On the Rust side, AArch64 targets now require the
    C toolchain by default. includes workarounds for missing or
    very old C compilers for x86, but it doesn't currently include such
    workarounds for AArch64. If we hear about build breaks related to
    this, we can add more workarounds as appropriate.
  • C-specific Git tags ("c-0.3.7" etc.) have been removed, and all the
    projects in this repo (Rust "blake3", Rust "b3sum", and the C
    implementation) will continue to be versioned in lockstep for the
    foreseeable future.
Choose a tag to compare

version 1.0.0

Changes since 0.3.8:

  • Add Hash::from_hex() and implement FromStr for Hash.
  • Implement Display for Hash, equivalent to Hash::to_hex().
  • Implement PartialEq<[u8]> for Hash, using constant_time_eq.
  • Change derive_key() to return a 32-byte array. As with hash() and
    keyed_hash(), callers who want a non-default output length can use
  • Replace Hasher::update_with_join() with Hasher::update_rayon(). The
    former was excessively generic, and the Join trait leaked
    implementation details. As part of this change, the Join trait is no
    longer public.
  • Upgraded arrayvec to 0.7.0, which uses const generics. This bumps the
    minimum supported Rust compiler version to 1.51.
  • Gate the digest and crypto-mac trait implementations behind an
    unstable feature, "traits-preview". As part of this change upgrade
    crypto-mac to 0.11.0.
Choose a tag to compare

version 0.3.8

Changes since 0.3.7:

  • This is a backport release of bugfixes from master. The next release
    of master will be version 1.0.
  • Fix a build break under Visual Studio 2015:
Choose a tag to compare

version 0.3.7

Changes since 0.3.6:

  • BUGFIX: The C implementation was incorrect on big endian systems for
    inputs longer than 1024 bytes. This bug affected all previous versions
    of the C implementation. Little endian platforms like x86 were
    unaffected. The Rust implementation was also unaffected.
    @jakub-zwolakowski and @pascal-cuoq from TrustInSoft reported this
    bug: #118
  • BUGFIX: The C build on x86-64 was producing binaries with an
    executable stack. @tristanheaven reported this bug:
  • @mkrupcale added optimized implementations for SSE2. This improves
    performance on older x86 processors that don't support SSE4.1.
  • The C implementation now exposes the
    blake3_hasher_init_derive_key_raw function, to make it easier to
    implement language bindings. Added by @k0001.
Choose a tag to compare

version 0.3.6

Changes since 0.3.5:

  • Fix a build break in the assembly files under older versions of GCC.
Choose a tag to compare

version 0.3.5

Changes since 0.3.4:

  • The digest dependency is now v0.9 and the crypto-mac dependency is
    now v0.8.
  • Intel CET is supported in the assembly implementations.
  • b3sum error output includes filepaths again.
Choose a tag to compare

version 0.3.4

Changes since 0.3.3:

  • b3sum now supports the --check flag. This is intended to be a
    drop-in replacement for e.g. md5sum --check from Coreutils. The
    behavior is somewhat stricter than Coreutils with respect to invalid
    Unicode in filenames. For a complete description of how --check
    works, see the file b3sum/
  • To support the --check feature, backslashes and newlines that appear
    in filenames are now escaped in the output of b3sum. This is done
    the same way as in Coreutils.
  • To support --check interoperability between Unix and Windows,
    backslashes in filepaths on Windows are now replaced with forward
    slashes in the output of b3sum. Note that this is different from