1
0
Fork 0
mirror of https://github.com/BLAKE3-team/BLAKE3 synced 2024-05-08 19:06:02 +02:00
Commit Graph

38 Commits

Author SHA1 Message Date
Jack O'Connor 35aa4259bd 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: https://github.com/BLAKE3-team/BLAKE3/pull/118
- BUGFIX: The C build on x86-64 was producing binaries with an
  executable stack. @tristanheaven reported this bug:
  https://github.com/BLAKE3-team/BLAKE3/issues/109
- @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.
2020-10-01 10:00:06 -04:00
Matthew Krupcale d91f20dd29 Start SSE2 implementation based on SSE4.1 version
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-24 00:54:46 -04:00
Jack O'Connor 63d27d4d1e version 0.3.6
Changes since 0.3.5:
- Fix a build break in the assembly files under older versions of GCC.
2020-07-29 19:21:23 -04:00
Jack O'Connor 7d0de7be14 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.
2020-07-10 12:21:12 -04:00
Justus K 7eea9b4c75 Bump digest to 0.9.0 and crypto-mac to 0.8.0 2020-06-14 14:35:14 -04:00
Jack O'Connor 7f154ceea3 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/what_does_check_do.md`.
- 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
  Coreutils.
2020-05-23 14:37:49 -04:00
Jack O'Connor 4ad79ae457 lower our required version of `cc`
I've tested manually and found that 1.0.4 is the oldest version of `cc`
that builds successfully for us. (Version 1.0.3 is missing the
`is_flag_supported` method.)

This change might help with
https://github.com/BLAKE3-team/BLAKE3/issues/83. That said, the
underlying issue there is related to "minimum supported Rust versions",
and `blake3` does not yet have an MSRV other than latest stable.
2020-05-04 10:23:03 -04:00
Jack O'Connor 0db6fddc86 version 0.3.3
Changes since 0.3.2:
- `b3sum` binaries are built in CI and attached to new GitHub tags.
2020-04-28 11:20:39 -04:00
Jack O'Connor fcb4b83419 version 0.3.2
Changes since 0.3.1:
- Fixed a compiler error on older versions of Clang,
  https://github.com/BLAKE3-team/BLAKE3/issues/79.
2020-04-14 01:13:38 -04:00
Jack O'Connor 5e82396d80 version 0.3.1
Changes since 0.3.0:
- The x86 build now automatically falls back to "pure" Rust intrinsics,
  under either of two possible conditions:
  1. The `cc` crate fails to invoke a C compiler at all, indicating that
     nothing of the right name (e.g. "cc" or "$CC" on Unix) is installed.
  2. The `cc` crate detects that the compiler doesn't support AVX-512
     flags, usually because it's too old.
  The end result should be that most callers successfully build the
  assembly implementations, and that callers who can't build those see a
  warning but not an error. (And note that Cargo suppresses warnings for
  non-path depencies.)
2020-04-02 10:08:47 -04:00
Jack O'Connor b8cdcb1f84 automatically fall back to the pure Rust build
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-04-01 19:13:15 -04:00
Jack O'Connor 6fbc1a679d version 0.3.0
Changes since version 0.2.3:
- The optimized assembly implementations are now built by default. They
  perform better than the intrinsics implementations, and they compile
  much more quickly. Bringing the default behavior in line with reported
  benchmark figures should also simplify things for people running their
  own benchmarks. Previously this crate only built Rust intrinsics
  implementations by default, and the assembly implementations were
  gated by the (slightly confusingly named) "c" feature. Now the "c"
  feature is gone, and applications that need the old behavior can use
  the new "pure" feature. Mainly this will be applications that don't
  want to require a C compiler. Note that the `b3sum` crate previously
  activated the "c" feature by default, so its behavior hasn't changed.
2020-03-30 00:36:13 -04:00
Jack O'Connor 152740578e add testing-only flags to disable individual instruction sets
This lets CI test a wider range of possible SIMD support settings.
2020-03-29 23:12:47 -04:00
Jack O'Connor e06a0f255a refactor the Cargo feature set
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-29 18:02:03 -04:00
Jack O'Connor 7caf1ad4bb version 0.2.3
Changes since version 0.2.2:
- Bug fix: Commit 13556be fixes a crash on Windows when using the SSE4.1
  assembly implementation (--features=c, set by default for b3sum). This
  is undefined behavior and therefore a potential security issue.
- b3sum now supports the --num-threads flag.
- The C API now includes a blake3_hasher_finalize_seek() function, which
  returns output from any position in the extended output stream.
- Build fix: Commit 5fad419 fixes a compiler error in the AVX-512 C
  intrinsics implementation targeting the Windows GNU ABI.
2020-03-29 01:44:00 -04:00
Jack O'Connor 1f529a841c add an example of parsing a Hash from a hex string
Suggested by @zaynetro:
https://github.com/BLAKE3-team/BLAKE3/pull/24#issuecomment-594369061
2020-03-05 10:54:22 -05:00
Jack O'Connor c197a773ac version 0.2.2
Changes since 0.2.1 (and since c-0.2.0):
- Fix a performance issue when the caller makes multiple calls to
  update() with uneven lengths. (#69, reported by @willbryant.)
2020-02-25 12:15:27 -05:00
Jack O'Connor 865d201722 version 0.2.1
Changes since 0.2.0:
- Workarounds in the assembly implementations (enabled by the "c"
  feature), to build with older compilers.
2020-02-14 11:20:03 -05:00
Jack O'Connor afdaf3036b version 0.2.0
Changes since 0.1.5:
- The `c_avx512` feature has been replaced by the `c` feature. In
  addition to providing AVX-512 support, `c` also provides optimized
  assembly implementations. These assembly implementations perform
  better, perform more consistently across compilers, and compile more
  quickly. As before, `c` is off by default, but the `b3sum` binary
  crate activates it by default.
- The `rayon` feature no longer affects the entire API. Instead, it
  provides the `join::RayonJoin` type for use with
  `Hasher::update_with_join`, so that the caller can control when
  multi-threading happens. Standalone API functions like `hash` are
  always single-threaded now.
2020-02-12 14:57:57 -05:00
Jack O'Connor efbfa0463c integrate assembly implementations into the blake3 crate 2020-02-12 10:23:17 -05:00
Jack O'Connor fc219f4f8d Hasher::update_with_join
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-06 15:07:15 -05:00
Jack O'Connor 0de4412884 version 0.1.4
Changes since 0.1.3:
- Hasher supports the reset() method.
- Hasher implements several traits from the `digest` and `crypto_mac`
  crates.
- Bug fixes in the C implementation for MSVC and for 32-bit x86.
2020-02-03 12:05:26 -05:00
Jack O'Connor 9ffe377d45 implement crypto_mac::Mac 2020-02-03 10:18:02 -05:00
Jack O'Connor 9bab77d2cf implement traits from the digest crate 2020-02-02 17:28:22 -05:00
Jack O'Connor e17c45ddd5 version 0.1.3
Changes since 0.1.2:
- All x86 implementations include _mm_prefetch optimizations. These
  improve performance for very large inputs.
- The C implementation performs parallel parent hashing, matching the
  performance of the single-threaded Rust implementation.
- b3sum supports --no-mmap. Contributed by @cesarb.
2020-01-22 21:35:24 -05:00
Jack O'Connor 14cd5c51c4 version 0.1.2
Changes since 0.1.1:
- b3sum no longer mmaps files smaller than 16 KiB. This improves
  performance for hashing many small files. Contributed by @xzfc.
- b3sum now supports --raw output. Contributed by @phayes.
2020-01-17 13:58:55 -05:00
Jack O'Connor 02250a7b7c version 0.1.1
Changes since 0.1.0:
- Optimizations contributed by @cesarb.
- Fix the build on x86_64-pc-windows-gnu when c_avx512 is enabled.
- Add an explicit error message for compilers that don't support c_avx512.
2020-01-13 14:47:28 -05:00
Cesar Eduardo Barros 4690c5f14e Use fixed-size constant_time_eq
The generic constant_time_eq has several branches on the slice length,
which are not necessary when the slice length is known. However, the
optimizer is not allowed to look into the core of constant_time_eq, so
these branches cannot be elided.

Use instead a fixed-size variant of constant_time_eq, which has no
branches since the length is known.
2020-01-12 17:40:57 -05:00
Brendan Molloy a7e11c7cf7 Update license field in Cargo.toml
Fixes the issue of crates.io not recognising the license, and using the `OR` terminology to describe the dual licensing option.
2020-01-10 09:57:25 -05:00
Jack O'Connor 7f43ed9f47 use the Apache-2.0 license in Cargo.toml
This project is also CC0, but crates.io doesn't seem to understand that
one.
2020-01-09 11:48:09 -05:00
Jack O'Connor 3cf242b651 fill out Cargo.toml files for publication 2020-01-09 10:50:55 -05:00
Jack O'Connor 9bf1020213 make the "c_avx512" feature a no-op on non-x86
This lets us enable it by default in b3sum.
2019-12-12 15:13:04 -05:00
Jack O'Connor 98dd9cbbf1 add ci.yml 2019-12-09 21:20:04 -05:00
Jack O'Connor 78191a676f feature comments in Cargo.toml 2019-12-08 21:56:10 -05:00
Jack O'Connor c7fff32392 add Rust FFI wrappers for AVX-512 and NEON 2019-12-08 21:56:10 -05:00
Jack O'Connor 912ae19bce get rid of the bitflags dependency 2019-12-06 15:32:20 -05:00
Jack O'Connor 47ef3ad01f add struct Hasher 2019-12-06 15:13:27 -05:00
Jack O'Connor 21df6b1103 add portable.rs 2019-12-02 17:30:55 -05:00