freebsd-nq/sys/crypto
Conrad Meyer fe182ba1d0 aesni(4): Add support for x86 SHA intrinsics
Some x86 class CPUs have accelerated intrinsics for SHA1 and SHA256.
Provide this functionality on CPUs that support it.

This implements CRYPTO_SHA1, CRYPTO_SHA1_HMAC, and CRYPTO_SHA2_256_HMAC.

Correctness: The cryptotest.py suite in tests/sys/opencrypto has been
enhanced to verify SHA1 and SHA256 HMAC using standard NIST test vectors.
The test passes on this driver.  Additionally, jhb's cryptocheck tool has
been used to compare various random inputs against OpenSSL.  This test also
passes.

Rough performance averages on AMD Ryzen 1950X (4kB buffer):
aesni:      SHA1: ~8300 Mb/s    SHA256: ~8000 Mb/s
cryptosoft:       ~1800 Mb/s    SHA256: ~1800 Mb/s

So ~4.4-4.6x speedup depending on algorithm choice.  This is consistent with
the results the Linux folks saw for 4kB buffers.

The driver borrows SHA update code from sys/crypto sha1 and sha256.  The
intrinsic step function comes from Intel under a 3-clause BSDL.[0]  The
intel_sha_extensions_sha<foo>_intrinsic.c files were renamed and lightly
modified (added const, resolved a warning or two; included the sha_sse
header to declare the functions).

[0]: https://software.intel.com/en-us/articles/intel-sha-extensions-implementations

Reviewed by:	jhb
Sponsored by:	Dell EMC Isilon
Differential Revision:	https://reviews.freebsd.org/D12452
2017-09-26 23:12:32 +00:00
..
aesni aesni(4): Add support for x86 SHA intrinsics 2017-09-26 23:12:32 +00:00
armv8 Add accelerated AES with using the ARMv8 crypto instructions. This is based 2016-11-21 11:18:00 +00:00
blowfish
camellia
chacha20 Fix counter increment in Salsa and ChaCha. 2017-04-22 01:06:23 +00:00
des Remove register keyword from sys/ and ANSIfy prototypes 2017-05-17 00:34:34 +00:00
rc4
rijndael Fix gcc build: preserve const qualifier when casting input values. 2014-11-11 13:37:28 +00:00
sha2 Fix C++ includability of crypto headers with static array sizes 2016-10-18 23:20:49 +00:00
siphash Fix C++ includability of crypto headers with static array sizes 2016-10-18 23:20:49 +00:00
skein libmd: add noexec stack annotation in skein_block_asm.s 2017-01-07 19:26:25 +00:00
via opencrypto: Use C99 initializers for auth_hash instances 2017-09-26 17:52:52 +00:00
intake.h Implement boot-time encryption key passing (keybuf) 2017-04-01 05:05:22 +00:00
sha1.c crypto routines: Hint minimum buffer sizes to the compiler 2016-05-26 19:29:29 +00:00
sha1.h Fix C++ includability of crypto headers with static array sizes 2016-10-18 23:20:49 +00:00