[package] name = "blake3" version = "0.3.7" authors = ["Jack O'Connor "] description = "the BLAKE3 hash function" repository = "https://github.com/BLAKE3-team/BLAKE3" license = "CC0-1.0 OR Apache-2.0" documentation = "https://docs.rs/blake3" readme = "README.md" edition = "2018" [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 = [] # This crate uses libstd for std::io trait implementations, and also for # runtime CPU feature detection. This feature is enabled by default. If you use # --no-default-features, the only way to use the SIMD implementations in this # crate is to enable the corresponding instruction sets statically for the # entire build, with e.g. RUSTFLAGS="-C target-cpu=native". std = ["digest/std"] # The "rayon" feature (defined below as an optional dependency) enables the # join::RayonJoin type, which can be used with Hasher::update_with_join to # perform multi-threaded hashing. However, even if this feature is enabled, all # other APIs remain single-threaded. # ---------- Features below this line are for internal testing only. ---------- # 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 downlocking. # 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 = [] [package.metadata.docs.rs] # Document blake3::join::RayonJoin on docs.rs. features = ["rayon"] [dependencies] arrayref = "0.3.5" arrayvec = { version = "0.5.1", default-features = false, features = ["array-sizes-33-128"] } constant_time_eq = "0.1.5" rayon = { version = "1.2.1", optional = true } cfg-if = "0.1.10" digest = "0.9.0" crypto-mac = "0.8.0" [dev-dependencies] hex = "0.4.2" page_size = "0.4.1" rand = "0.7.2" rand_chacha = "0.2.1" reference_impl = { path = "./reference_impl" } [build-dependencies] cc = "1.0.4"