aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2022-01-17special-case MSVC, which lacks stdatomic.hatomic_featuresJack O'Connor
2022-01-16make g_cpu_features atomicJack O'Connor
This change fixes a data race. The race was x86-only and probably harmless in practice, but as they say, "There's no such thing as a benign data race." When TSan's happy, everybody's happy. As part of this change, #ifdef the CPU feature detection code to be x86-only. This should silence some unused code warnings on other platforms, and it means that we only depend on stdatomic.h on x86, where compilers are at least a little bit more likely to be up to date. Reported by https://github.com/BLAKE3-team/BLAKE3/issues/220.
2022-01-16clang-format blake3_dispatch.cJack O'Connor
2022-01-10silence a couple more warnings on 32-bit WindowsJack O'Connor
https://github.com/BLAKE3-team/BLAKE3/issues/218#issuecomment-1009510462
2022-01-08fix some compiler warningsSamuel Neves
2022-01-08version 1.3.01.3.0Jack O'Connor
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.
2022-01-08add Samuel Neves as a listed author of the Rust crateJack O'Connor
Samuel wrote all of the assembly implementations, with the sole exception of the SSE2 port.
2022-01-07update clap to v3Jack O'Connor
2022-01-07add blake3_hasher_reset to the C APIJack O'Connor
2021-12-30a few more comment tweaksJack O'Connor
2021-12-30Update digest crate to 0.10 for traits-preview featureMatthias Schiffer
Adjust to the following changes that happened in digest: - The crypto-mac crate has been merged into digest (with "mac" feature enabled) - Various traits have been split up - The Digest and Mac traits now share their update/finalize/reset implementations - The BlockInput trait was dropped without replacement apparently (as long as the low-level core API is not used)
2021-12-18check in the Cargo.lock for b3sumJack O'Connor
We'll need to make sure to update this when we do a version bump. Adding an explicit `!Cargo.lock` line to b3sum/.gitignore helps with this, by making sure Cargo.lock shows up by defauls in searches like: rg "1\.2\.0" Closes https://github.com/BLAKE3-team/BLAKE3/issues/210.
2021-11-30add an assert and remove an iter_mut in reference_implJack O'Connor
Suggested in https://github.com/rust-lang/rust-clippy/issues/8039.
2021-11-13fix a typo in the check docJack O'Connor
2021-11-05version 1.2.01.2.0Jack O'Connor
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 https://github.com/BLAKE3-team/BLAKE3/issues/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.
2021-11-05fix incorrect output / undefined behavior in Windows SSE2 assemblyJack O'Connor
The SSE2 patch introduced xmm10 as a temporary register for one of the rotations, but xmm6-xmm15 are callee-save registers on Windows, and SSE4.1 was only saving the registers it used. The minimal fix is to use one of the saved registers instead of xmm10. See https://github.com/BLAKE3-team/BLAKE3/issues/206.
2021-11-04add Hasher::countJack O'Connor
2021-10-29make field ordering more consistent in the reference implJack O'Connor
2021-10-29distinguish between key and key_words in the reference implJack O'Connor
2021-10-29remove an incorrect commentJack O'Connor
2021-10-23update NEON docs in lib.rsJack O'Connor
2021-10-21add aarch64-apple-darwin builds to GitHub CIJack O'Connor
I'm not sure how to build for Apple Silicon from a Linux host, but it seems to work as-is from an x86_64 macOS host. Alas, GitHub doesn't yet provide Apple Silicon hosts to run these binaries, and Cross doesn't yet support virtualizing them either.
2021-10-21version 1.1.01.1.0Jack O'Connor
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. build.rs 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.
2021-10-21a small capitalization changeJack O'Connor
2021-10-21fix a comment typoJack O'Connor
2021-10-14Merge pull request #201 from symmetree-labs/masterJack O'Connor
Improve compile-time target detection for NEON
2021-10-12Use BLAKE3_USE_NEON=0 instead of BLAKE3_NO_NEON defrsdy
2021-10-12Disable no_neon feature for C bindings as we can't propagate from cargo buildrsdy
2021-10-12Include MSVC naming of aarch64 archrsdy
2021-10-11Match the C binding's target arch detection with the root crate'srsdy
2021-10-08Make the C implementation default to using NEON on aarch64rsdy
2021-10-08Add no_neon feature tests to CIrsdy
2021-10-08Add `no_neon` feature to disable NEON on aarch64rsdy
2021-10-07Implement better target detection for NEONrsdy
2021-09-17linkfixJP Aumasson
2021-09-10replace an assert!(... != ...) with an assert_ne!Jack O'Connor
2021-09-10clarify that OutputReader::position is equivalent to Seek::stream_positionJack O'Connor
2021-09-10link to the paper in the derive_key docsJack O'Connor
2021-09-01check length arg (out_len_ll) instead of default value (out_len)David Burkett
2021-08-24explicitly #error on big-endian ARMJack O'Connor
2021-08-24add a redundant loop condition to silence GCC warningsJack O'Connor
See: https://github.com/BLAKE3-team/BLAKE3/issues/94 https://github.com/BLAKE3-team/BLAKE3/issues/183 https://github.com/BLAKE3-team/BLAKE3/issues/189
2021-08-24handle IO errors in example.cJack O'Connor
2021-07-27update the version number in the b3sum readmeJack O'Connor
2021-07-25version 1.0.01.0.0Jack O'Connor
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 Hasher::finalize_xof(). - 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.
2021-07-25update README examplesJack O'Connor
2021-05-18upgrade to arrayvec 0.7.0Jack O'Connor
This version uses const generics, which bumps our minimum supported compiler version to 1.51.
2021-05-18upgrade crypto-mac to 0.11.0Jack O'Connor
2021-05-18explicitly document the properties of short outputsJack O'Connor
Suggested by @joshtriplett at: https://github.com/BLAKE3-team/BLAKE3/issues/168#issuecomment-829609667
2021-03-28more cleaup of undocumented APIJack O'Connor
2021-03-28update doc comments on guts moduleJack O'Connor