1
0
Fork 0
mirror of https://github.com/BLAKE3-team/BLAKE3 synced 2024-05-23 04:36:05 +02:00
Commit Graph

117 Commits

Author SHA1 Message Date
rsdy ed09e45e7a Include MSVC naming of aarch64 arch 2021-10-12 16:23:28 +01:00
rsdy 6b9cbe5e23 Match the C binding's target arch detection with the root crate's 2021-10-11 20:45:01 +01:00
rsdy c5941a2731 Make the C implementation default to using NEON on aarch64 2021-10-08 12:45:04 +01:00
David Burkett 038be4571a check length arg (out_len_ll) instead of default value (out_len) 2021-09-01 13:41:24 -04:00
Jack O'Connor 080b333015 explicitly #error on big-endian ARM 2021-08-24 15:00:15 -04:00
Jack O'Connor b8e2dda186 add a redundant loop condition to silence GCC warnings
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-24 14:05:42 -04:00
Jack O'Connor 32758e34a4 handle IO errors in example.c 2021-08-24 12:15:46 -04:00
Jack O'Connor b404c851c2 version 1.0.0
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-25 12:42:09 -04:00
Jack O'Connor 037de38bfe upgrade to arrayvec 0.7.0
This version uses const generics, which bumps our minimum supported
compiler version to 1.51.
2021-05-18 12:28:29 -04:00
Jack O'Connor 7cd208afcf explicitly document the properties of short outputs
Suggested by @joshtriplett at:
https://github.com/BLAKE3-team/BLAKE3/issues/168#issuecomment-829609667
2021-05-18 11:02:05 -04:00
Samuel Neves 0359065018 Another movd/movq inconsistency.
- Visual Studio <= 2015 does not support AVX-512 either way;
 - Visual Studio 2017 does not tolerate vmovd with 64-bit operands;
 - Visual Studio 2019 does not care.
2021-02-26 00:17:12 +00:00
Jack O'Connor 1074f02d57 clarify C build instructions a bit 2021-02-18 15:34:40 -05:00
Jack O'Connor e2ae3bdd94 delete an unused constant
Fixes https://github.com/BLAKE3-team/BLAKE3/issues/152.
2021-02-15 14:24:37 -05:00
Jack O'Connor 8969cdd2f8 clang-format a few files
Some of the SIMD code is still unformatted, so for now I'm only touching
the files that just have a couple small changes.
2021-02-15 14:24:37 -05:00
Samuel Neves 8c350836b8 revert unwanted changes 2021-02-06 22:25:40 +00:00
Samuel Neves 953654e25e
More movd/movq discrepancies. Fixes #149. (#150)
This should be irrelevant, but some toolchains will not accept movd with 64-bit arguments.
2021-02-06 20:02:53 +00:00
Jack O'Connor aea29ace2d replace the 'Differences' section with 'Multithreading' 2021-02-05 17:25:45 -05:00
Samuel Neves 3a8204f5f3
Replace movq by movd on MSVC assembly targets (#143) 2021-01-13 11:56:42 +00:00
Hans Henrik Bergan a2f9515785 add blake3_version(void) / BLAKE3_VERSION_STRING
related discussion here: https://github.com/BLAKE3-team/BLAKE3/issues/130
2020-10-29 23:18:34 +01:00
Jack O'Connor 09546a677d include example.c 2020-10-20 12:51:30 -04:00
Jack O'Connor dae5dc5ef3
Merge pull request #128 from divinity76/features-unused-fix
fix disabled-optimization -Wall -Werror
2020-10-20 12:23:35 -04:00
Jack O'Connor b928701893 readme tweaks 2020-10-20 12:05:27 -04:00
Hans Henrik Bergan c7c4bfafab fix disabled-optimization -Wall -Werror
patch by Samuel Neves ( https://github.com/sneves )

if you tried to compile blake3_dispatch.c with
-Wall -Werror -DBLAKE3_NO_SSE2 -DBLAKE3_NO_SSE41 -DBLAKE3_NO_AVX2 -DBLAKE3_NO_AVX512

something like this would happen:

hans@xDevAd:~/projects/BLAKE3/c$ gcc -O0 -o example example.c blake3.c blake3_dispatch.c blake3_portable.c     blake3_sse2_x86-64_unix.S blake3_sse41_x86-64_unix.S blake3_avx2_x86-64_unix.S     blake3_avx512_x86-64_unix.S -DBLAKE3_NO_SSE2 -DBLAKE3_NO_SSE41 -DBLAKE3_NO_AVX2 -DBLAKE3_NO_AVX512 -Wall -Wextra -Wpedantic -Werror
blake3_dispatch.c: In function ‘blake3_compress_in_place’:
blake3_dispatch.c:139:26: error: unused variable ‘features’ [-Werror=unused-variable]
  139 |   const enum cpu_feature features = get_cpu_features();
      |                          ^~~~~~~~
blake3_dispatch.c: In function ‘blake3_compress_xof’:
blake3_dispatch.c:167:26: error: unused variable ‘features’ [-Werror=unused-variable]
  167 |   const enum cpu_feature features = get_cpu_features();
      |                          ^~~~~~~~
blake3_dispatch.c: In function ‘blake3_hash_many’:
blake3_dispatch.c:195:26: error: unused variable ‘features’ [-Werror=unused-variable]
  195 |   const enum cpu_feature features = get_cpu_features();
      |                          ^~~~~~~~
blake3_dispatch.c: In function ‘blake3_simd_degree’:
blake3_dispatch.c:244:26: error: unused variable ‘features’ [-Werror=unused-variable]
  244 |   const enum cpu_feature features = get_cpu_features();
      |                          ^~~~~~~~
cc1: all warnings being treated as errors
2020-10-20 05:49:23 +02:00
Jack O'Connor 3d212291b9 add cross_test.sh for the C bindings
This will let us add big endian testing to CI for our C code. (We were
already doing it for our Rust code.)

This is adapted from test_vectors/cross_test.sh. It works around the
limitation that the `cross` tool can't reach parent directories. It's an
unfortunate hack, but at least it's only for testing. It might've been
less hacky to use symlinks for this somehow, but I worry that would
break things on Windows, and I don't want to have to add workarounds for
my workarounds.
2020-09-29 16:48:18 -04:00
Jack O'Connor 0b13637ae3 fix a couple of big-endianness mistakes in blake3.c
Kudos to @pascal-cuoq and @jakub-zwolakowski from TrustInSoft for
catching these bugs.

Original report: https://github.com/BLAKE3-team/BLAKE3/pull/118
2020-09-29 16:09:28 -04:00
Jack O'Connor 3817999f17 fix the short_test_cases loop in the C bindings tests 2020-09-29 11:06:32 -04:00
Jack O'Connor 5bdfd07666 update the blake3_c_rust_bindings test cases also 2020-09-29 10:59:56 -04:00
Jack O'Connor a01fd16011 add some horizontal rules to the C readme 2020-09-10 17:38:35 -04:00
Jack O'Connor ac1da75bb9 add a test for blake3_hasher_init_derive_key_raw 2020-09-10 16:52:14 -04:00
Jack O'Connor 44fd9efbc2 C readme edits 2020-09-10 16:40:25 -04:00
Jack O'Connor 27b7f610e0
Merge pull request #114 from k0001/no-cstr
C: Add blake3_hasher_init_derive_key_len
2020-09-10 14:54:15 -05:00
Renzo Carbonara b205e0efa1 C: rename blake3_hasher_init_derive_key_raw and documentation 2020-09-01 13:20:16 +03:00
Samuel Neves 8610ebda6a add sse2 tests and benchmarks 2020-08-31 19:12:01 +01:00
Samuel Neves bf705f2d54 remove avoidable spill 2020-08-31 19:11:58 +01:00
Samuel Neves 3340e32c7f
Merge pull request #110 from mkrupcale/sse2
Add SSE2 implementations
2020-08-31 18:56:55 +01:00
Matthew Krupcale be2da69b6b C: asm: simplify pblendw emulation
Use statically calculated ~mask. This reduces the number of moves and registers necessary at the expense of an extra memory load. This is probably a good trade-off since we are not bound by memory uops in this loop.
2020-08-31 12:12:42 -04:00
Matthew Krupcale 47e415c7f1 C: asm: simplify pinsrd emulation
Use punpckl{,q}dq instead of pinsrw.
2020-08-31 00:21:47 -04:00
Matthew Krupcale c592e9a3f6 C: asm: remove blendvps usage altogether
This simplifies the operation by removing the need to use blendvps at all.
2020-08-30 23:13:47 -04:00
Renzo Carbonara 31e4080aa2 C: Add blake3_hasher_init_derive_key_len
blake3_hasher_init_derive_key_len is an alternative version of
blake3_hasher_init_derive_key which takes the context and its
length as separate parameters, and not together as a C string.

The motivation for this addition is making it easier for
bindings to this C library to call this function without
having to first copy over the context bytes just to add
one 0x00 byte at the end.

Notice that contrary to blake3_hasher_init_derive_key,
blake3_hasher_init_derive_key_len allows the inclusion of a
0x00 byte in the context. Given the rules about context string
selection, this byte is unlikely to be used as part of a context
string. But if for some reason it is ever given, it will be
included in the context string and processed like any other
non-alphanumeric byte would. For compatibility with
blake3_hasher_init_derive_key, bindings should still check for
the absence of 0x00 bytes.
2020-08-30 12:27:33 +03:00
Jack O'Connor c8a5b53e1d wording tweak in the C readme 2020-08-26 16:55:39 -04:00
Matthew Krupcale c33a8462d1 Write _mm_blend_epi16 emulation without multiplication
Use _mm_and_si128 and _mm_cmpeq_epi16 rather than expensive multiplication _mm_mullo_epi16 with _mm_srai_epi16 that compiler may not be able to optimize.
2020-08-25 12:26:15 -04:00
Matthew Krupcale 90e2a924a4 Fix Windows MSVC undefined symbol errors
MSVC returns "error A2006:undefined symbol : FFFFFFFFH", so use 0FFFFFFFFH instead. Also use 0 prefix for 0H to align things.
2020-08-24 21:31:29 -04:00
Matthew Krupcale e581035bd3 Put PBLENDW masks in the RDATA section
Previously, these masks were undefined because they were outside of the RDATA section.
2020-08-24 21:26:41 -04:00
Matthew Krupcale 00849f8625 Fix Windows MSVC undefined symbol errors
MSVC returns "error A2006:undefined symbol : B1H", so use 0B1H instead.
2020-08-24 21:20:10 -04:00
Matthew Krupcale e4681ec39e C: asm: emulate pshufb ROT8 using SSE2 instructions
Use a simple shift for the rotation.

 * c/blake3_sse2_x86-64_unix.S: emulate pshufb using SSE2 instructions for x86_64 unix
 * c/blake3_sse2_x86-64_windows_gnu.S: Likewise for x86_64 Windows GNU.
 * c/blake3_sse2_x86-64_windows_msvc.asm: Likewise for x86_64 Windows MSVC.
2020-08-24 00:57:39 -04:00
Matthew Krupcale 769c7cdc96 C: asm: emulate pshufb ROT16 using SSE2 instructions
Use two 16-bit shuffles: one for the low 64-bits and one for the high 64-bits.

 * c/blake3_sse2_x86-64_unix.S: emulate pshufb using SSE2 instructions for x86_64 unix
 * c/blake3_sse2_x86-64_windows_gnu.S: Likewise for x86_64 Windows GNU.
 * c/blake3_sse2_x86-64_windows_msvc.asm: Likewise for x86_64 Windows MSVC.
2020-08-24 00:57:39 -04:00
Matthew Krupcale 1ef915dbea C: asm: emulate pinsrd using SSE2 instructions
Use two pinsrw and a 16-bit shift to insert the 32-bit integer at the desired location.

 * c/blake3_sse2_x86-64_unix.S: emulate pinsrd using SSE2 instructions for x86_64 unix
 * c/blake3_sse2_x86-64_windows_gnu.S: Likewise for x86_64 Windows GNU.
 * c/blake3_sse2_x86-64_windows_msvc.asm: Likewise for x86_64 Windows MSVC.
2020-08-24 00:57:39 -04:00
Matthew Krupcale e632967a8d C: asm: emulate blendvps using SSE2 instructions
Blend according to (mask & b) | ((~mask) & a).

 * c/blake3_sse2_x86-64_unix.S: emulate blendvps using SSE2 instructions for x86_64 unix
 * c/blake3_sse2_x86-64_windows_gnu.S: Likewise for x86_64 Windows GNU.
 * c/blake3_sse2_x86-64_windows_msvc.asm: Likewise for x86_64 Windows MSVC.
2020-08-24 00:57:28 -04:00
Matthew Krupcale 460c9d3031 C: asm: emulate pblendw using SSE2 instructions
Use a constant mask to blend according to (mask & b) | ((~mask) & a).

 * c/blake3_sse2_x86-64_unix.S: emulate pblendw using SSE2 instructions for x86_64 unix
 * c/blake3_sse2_x86-64_windows_gnu.S: Likewise for x86_64 Windows GNU.
 * c/blake3_sse2_x86-64_windows_msvc.asm: Likewise for x86_64 Windows MSVC.
2020-08-24 00:57:09 -04:00
Matthew Krupcale a9a701c622 SSE2 intrinsic: emulate _mm_shuffle_epi8 SSSE3 intrinsic rot8 with SSE2 intrinsics
Use a simple shift version for the 8-bit rotation.

 * c/blake3_sse2.c: emulate _mm_shuffle_epi8 rot8 using SSE2 intrinsics
2020-08-24 00:56:57 -04:00