mirror of
https://github.com/BLAKE3-team/BLAKE3
synced 2026-03-07 11:41:53 +01:00
Changes since 1.8.2: - Add `Hash::as_slice`. - Update to the 2024 Edition and bump the MSRV to 1.85. - Fix a set of Miri failures in the intrinsics implementations. We were computing (though not dereferencing) an out-of-bounds pointer using `add` rather than `wrapping_add`. I'm not aware of any observable consequences of this bug. See https://github.com/BLAKE3-team/BLAKE3/pull/507. - CPU feature detection on x86/x86-64 no longer requires the `std` Cargo feature in the `blake3` crate. - Build fixes in the C implementation for macOS and Cygwin, and various improvements to the CMake build.
141 lines
6.2 KiB
INI
141 lines
6.2 KiB
INI
[package]
|
|
name = "blake3"
|
|
version = "1.8.3"
|
|
authors = ["Jack O'Connor <oconnor663@gmail.com>", "Samuel Neves"]
|
|
description = "the BLAKE3 hash function"
|
|
repository = "https://github.com/BLAKE3-team/BLAKE3"
|
|
license = "CC0-1.0 OR Apache-2.0 OR Apache-2.0 WITH LLVM-exception"
|
|
documentation = "https://docs.rs/blake3"
|
|
readme = "README.md"
|
|
edition = "2024"
|
|
|
|
[features]
|
|
default = ["std"]
|
|
|
|
# The NEON implementation does not participate in dynamic feature detection,
|
|
# which is currently x86-only. If "neon" is on, NEON support is assumed. Note
|
|
# that AArch64 always supports NEON, but support on ARMv7 varies. The NEON
|
|
# implementation uses C intrinsics and requires a C compiler.
|
|
neon = []
|
|
|
|
# The Wasm SIMD implementation does not participate in dynamic feature detection,
|
|
# which is currently x86-only. If "wasm_simd" is on, Wasm SIMD support is assumed.
|
|
# Note that not all Wasm implementations support the Wasm SIMD specification.
|
|
# This may become the default in the future.
|
|
wasm32_simd = []
|
|
|
|
# Enables std::io traits, including impl Write for Hasher, impl Read and Seek
|
|
# for OutputReader, and the Hasher::update_reader method. This feature is
|
|
# enabled by default. (Previously this also controlled runtime CPU feature
|
|
# detection on x86, but now we use the no-std-compatible `cpufeatures` crate
|
|
# for that.)
|
|
# Also enables the `std` feature of the `constant_time_eq` dependency, which
|
|
# toggles a runtime feature check on 64-bit ARM targets.
|
|
std = ["constant_time_eq/std"]
|
|
|
|
# The `rayon` feature (disabled by default, but enabled for docs.rs) adds the
|
|
# `update_rayon` and (in combination with `mmap` below) `update_mmap_rayon`
|
|
# methods, for multithreaded hashing. However, even if this feature is enabled,
|
|
# all other APIs remain single-threaded.
|
|
#
|
|
# Implementation detail: We take a dependency on rayon-core instead of rayon,
|
|
# because it builds faster and still includes all the APIs we need.
|
|
rayon = ["dep:rayon-core"]
|
|
|
|
# The `mmap` feature (disabled by default, but enabled for docs.rs) adds the
|
|
# `update_mmap` and (in combination with `rayon` above) `update_mmap_rayon`
|
|
# helper methods for memory-mapped IO.
|
|
mmap = ["std", "dep:memmap2"]
|
|
|
|
# Implement the zeroize::Zeroize trait for types in this crate.
|
|
zeroize = ["dep:zeroize", "arrayvec/zeroize"]
|
|
|
|
# This crate implements traits from the RustCrypto project, exposed here as the
|
|
# "traits-preview" feature. However, these traits aren't stable, and they're
|
|
# expected to change in incompatible ways before they reach 1.0. For that
|
|
# reason, this crate makes no SemVer guarantees for this feature, and callers
|
|
# who use it should expect breaking changes between patch versions of this
|
|
# crate. (The "*-preview" feature name follows the conventions of the RustCrypto
|
|
# "signature" crate.)
|
|
traits-preview = ["dep:digest"]
|
|
|
|
# ---------- Features below this line are undocumented and unstable. ----------
|
|
# The following features are mainly intended for testing and benchmarking, and
|
|
# they might change or disappear at any time without a major version bump.
|
|
|
|
# It wasn't originally intended to expose "digest" as its own feature, but the
|
|
# traits-preview feature above predated the "dep:" syntax in Cargo. Version
|
|
# 1.5.2 of this crate started using "dep:" syntax, but that broke some callers
|
|
# in the wild (https://solana.stackexchange.com/q/17787/29050). This feature
|
|
# unbreaks those callers. When Cargo gains the ability to deprecate features,
|
|
# this feature will be deprecated. Note that the relevant trait implementations
|
|
# are still gated by "traits-preview".
|
|
digest = ["dep:digest"]
|
|
|
|
# By default on x86_64, this crate uses Samuel Neves' hand-written assembly
|
|
# implementations for SSE4.1, AVX2, and AVX512. (These provide both the best
|
|
# runtime performance, and the fastest build times.) And by default on 32-bit
|
|
# x86, this crate uses Rust intrinsics implementations for SSE4.1 and AVX2, and
|
|
# a C intrinsics implementation for AVX-512. In both cases, if a C compiler is
|
|
# not detected, or if AVX-512 support is missing from the detected compiler,
|
|
# build.rs automatically falls back to a pure Rust build. This feature forces
|
|
# that fallback, for testing purposes. (Note that in CI testing, we set the
|
|
# BLAKE3_CI environment variable, which instructs build.rs to error out rather
|
|
# than doing an automatic fallback.)
|
|
pure = []
|
|
|
|
# As described above, on x86_64 this crate use assembly implementations by
|
|
# default. Enabling the "prefer_intrinsics" feature makes this crate use
|
|
# intrinsics implementations on both 32-bit and 64-bit x86, again for testing
|
|
# purposes.
|
|
prefer_intrinsics = []
|
|
|
|
# Disable individual instruction sets. CI testing uses these flags to simulate
|
|
# different levels of hardware SIMD support. Note that code for the
|
|
# corresponding instruction set is still compiled; only detection is disabled.
|
|
#
|
|
# As noted above, these flags are *for testing only* and are not stable. It's
|
|
# possible that some users might find that their particular use case performs
|
|
# better if e.g. AVX-512 is disabled, because of issues like CPU downclocking.
|
|
# If that comes up, and if disabling the instruction set here at the feature
|
|
# level turns out to be the right approach, then we can design a stable
|
|
# feature. Until then, we reserve the right to break these features in a patch
|
|
# release.
|
|
no_sse2 = []
|
|
no_sse41 = []
|
|
no_avx2 = []
|
|
no_avx512 = []
|
|
no_neon = []
|
|
|
|
[package.metadata.docs.rs]
|
|
# Document the rayon/mmap methods and the Serialize/Deserialize/Zeroize impls on docs.rs.
|
|
features = ["mmap", "rayon", "serde", "zeroize"]
|
|
|
|
[dependencies]
|
|
arrayref = "0.3.5"
|
|
arrayvec = { version = "0.7.4", default-features = false }
|
|
constant_time_eq = { version = "0.4.2", default-features = false }
|
|
cfg-if = "1.0.0"
|
|
digest = { version = "0.10.1", features = ["mac"], optional = true }
|
|
memmap2 = { version = "0.9", optional = true }
|
|
rayon-core = { version = "1.12.1", optional = true }
|
|
serde = { version = "1.0", default-features = false, features = ["derive"], optional = true }
|
|
zeroize = { version = "1", default-features = false, optional = true }
|
|
|
|
[target.'cfg(any(target_arch = "x86", target_arch = "x86_64"))'.dependencies]
|
|
cpufeatures = "0.2.17"
|
|
|
|
[dev-dependencies]
|
|
hmac = "0.12.0"
|
|
hex = "0.4.2"
|
|
page_size = "0.6.0"
|
|
rand = "0.9.0"
|
|
rand_chacha = "0.9.0"
|
|
reference_impl = { path = "./reference_impl" }
|
|
tempfile = "3.8.0"
|
|
serde_json = "1.0.107"
|
|
ciborium = "0.2.2"
|
|
|
|
[build-dependencies]
|
|
cc = "1.1.12"
|