aboutsummaryrefslogtreecommitdiff
path: root/src/lib.rs
AgeCommit message (Collapse)Author
2022-03-08start working on a refactored assembly implementationJack O'Connor
The main goal is to eventually have extended outputs benefit from the same SIMD optimizations as inputs. To make this easier, I want to factor out a shared "kernel" routine that can be shared among several different interfaces: - compressing chunks - compressing parents - producing XOF output - xor'ing XOF output The timing here partly coincides with Rust stabilizing inline asm. That's certainly not necessary for any of this to work, but it gives me the confidence to try this without needing to master the rules of three different calling conventions.
2022-03-04add "(if any)" regarding keying in the security notesJack O'Connor
2022-03-03simplify a bit moreJack O'Connor
2022-03-02simplify the security notes, avoid referring to entropyJack O'Connor
2022-03-02document the extended output security issue found by Aldo GunsingJack O'Connor
https://eprint.iacr.org/2022/283
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-11-04add Hasher::countJack O'Connor
2021-10-29remove an incorrect commentJack O'Connor
2021-10-23update NEON docs in lib.rsJack O'Connor
2021-10-07Implement better target detection for NEONrsdy
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-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-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-21implement Display for HashJack O'Connor
2021-03-21get rid of the standalone "*_rayon" functionsJack O'Connor
These clutter the toplevel API, and their prominence might lead callers to prefer them as a first resort, which probably isn't a good idea. Restricting multithreading to `Hasher::update_rayon` feels better, similar to what we've done with `Hasher::finalize_xof`. (But I think `update_rayon` is still an improvement over the trait-based interface that it replaced.)
2021-03-21gate digest and crypto-mac implementations behind "traits-preview"Jack O'Connor
This approach was suggested by @tarcieri at https://github.com/BLAKE3-team/BLAKE3/pull/157.
2021-03-20Rayon-related doc fixesJack O'Connor
2021-03-14add *_rayon methodsJack O'Connor
2021-03-14re-privatize the Join traitJack O'Connor
2021-02-28make derive_key() return an arrayJack O'Connor
2021-02-28impl PartialEq<[u8]> for HashJack O'Connor
2021-02-04rename ParseError to HexError and update docsJack O'Connor
2021-02-04implement Error for ParseError, make it opaque, and support from_hex(&[u8])Jack O'Connor
2021-02-03merge "Adding from_hex and implementing FromStr for Hash"Jack O'Connor
https://github.com/BLAKE3-team/BLAKE3/pull/24
2020-09-10cargo fmtJack O'Connor
2020-08-31Merge pull request #110 from mkrupcale/sse2Samuel Neves
Add SSE2 implementations
2020-08-31Implement `fmt::Debug` using buildersNikolai Vazquez
This enables pretty printing via `{:#?}`. The normal style for `{:?}` is kept exactly the same.
2020-08-24Start SSE2 implementation based on SSE4.1 versionMatthew Krupcale
Wire up basic functions and features for SSE2 support using the SSE4.1 version as a basis without implementing the SSE2 instructions yet. * Cargo.toml: add no_sse2 feature * benches/bench.rs: wire SSE2 benchmarks * build.rs: add SSE2 rust intrinsics and assembly builds * c/Makefile.testing: add SSE2 C and assembly targets * c/README.md: add SSE2 to C build instructions * c/blake3_c_rust_bindings/build.rs: add SSE2 C rust binding builds * c/blake3_c_rust_bindings/src/lib.rs: add SSE2 C rust bindings * c/blake3_dispatch.c: add SSE2 C dispatch * c/blake3_impl.h: add SSE2 C function prototypes * c/blake3_sse2.c: add SSE2 C intrinsic file starting with SSE4.1 version * c/blake3_sse2_x86-64_{unix.S,windows_gnu.S,windows_msvc.asm}: add SSE2 assembly files starting with SSE4.1 version * src/ffi_sse2.rs: add rust implementation using SSE2 C rust bindings * src/lib.rs: add SSE2 rust intrinsics and SSE2 C rust binding rust SSE2 module configurations * src/platform.rs: add SSE2 rust platform detection and dispatch * src/rust_sse2.rs: add SSE2 rust intrinsic file starting with SSE4.1 version * tools/instruction_set_support/src/main.rs: add SSE2 feature detection
2020-08-14the same hex example for rustdocsJack O'Connor
2020-06-26shrink a stack array that's twice as big as it needs to beJack O'Connor
It looks like I originally made this mistake when I was copying code from the baokeshed prototype (a274a9b0faa444dd842a0584483eae6e97dbf21e), and then it got replicated into the C implementation later.
2020-05-23fix another small mistake in the docsJack O'Connor
2020-04-01automatically fall back to the pure Rust buildJack O'Connor
There are two scenarios where compiling AVX-512 C or assembly code might not work: 1. There might not be a C compiler installed at all. Most commonly this is either in cross-compiling situations, or with the Windows GNU target. 2. The installed C compiler might not support e.g. -mavx512f, because it's too old. In both of these cases, print a relevant warning, and then automatically fall back to using the pure Rust intrinsics build. Note that this only affects x86 targets. Other targets always use pure Rust, unless the "neon" feature is enabled.
2020-03-29refactor the Cargo feature setJack O'Connor
The biggest change here is that assembly implementations are enabled by default. Added features: - "pure" (Pure Rust, with no C or assembly implementations.) Removed features: - "c" (Now basically the default.) Renamed features; - "c_prefer_intrinsics" -> "prefer_intrinsics" - "c_neon" -> "neon" Unchanged: - "rayon" - "std" (Still the only feature on by default.)
2020-03-05add an example of parsing a Hash from a hex stringJack O'Connor
Suggested by @zaynetro: https://github.com/BLAKE3-team/BLAKE3/pull/24#issuecomment-594369061
2020-02-27some comment typosJack O'Connor
2020-02-25remove a mis-optimization that hurt performance for uneven updatesJack O'Connor
If the total number of chunks hashed so far is e.g. 1, and update() is called with e.g. 8 more chunks, we can't compress all 8 together. We have to break the input up, to make sure that that 1 lone chunk CV gets merged with its proper sibling, and that in general the correct layout of the tree is preserved. What we should do is hash 1-2-4-1 chunks of input, using increasing powers of 2 (with some cleanup at the end). What we were doing was 2-2-2-2 chunks. This was the result of a mistaken optimization that got us stuck with an always-odd number of chunks so far. Fixes https://github.com/BLAKE3-team/BLAKE3/issues/69.
2020-02-12add a performance note and a usage example for HasherJack O'Connor
2020-02-12document optional Cargo features on docs.rsJack O'Connor
2020-02-12integrate assembly implementations into the blake3 crateJack O'Connor
2020-02-06Hasher::update_with_joinJack O'Connor
This is a new interface that allows the caller to provide a multi-threading implementation. It's defined in terms of a new `Join` trait, for which we provide two implementations, `SerialJoin` and `RayonJoin`. This lets the caller control when multi-threading is used, rather than the previous all-or-nothing design of the "rayon" feature. Although existing callers should keep working, this is a compatibility break, because callers who were relying on automatic multi-threading before will now be single-threaded. Thus the next release of this crate will need to be version 0.2. See https://github.com/BLAKE3-team/BLAKE3/issues/25 and https://github.com/BLAKE3-team/BLAKE3/issues/54.
2020-02-04re-export digest and crypto_macJack O'Connor
2020-02-03Inline wrapper methodsCesar Eduardo Barros
2020-02-03make the inherent reset() method return &mut selfJack O'Connor
2020-02-03implement crypto_mac::MacJack O'Connor
2020-02-02mention the digest traits in the docsJack O'Connor
2020-02-02implement traits from the digest crateJack O'Connor