]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/commit
aesni(4): Add support for x86 SHA intrinsics
authorcem <cem@FreeBSD.org>
Tue, 26 Sep 2017 23:12:32 +0000 (23:12 +0000)
committercem <cem@FreeBSD.org>
Tue, 26 Sep 2017 23:12:32 +0000 (23:12 +0000)
commitde7a7877e14bb16e57914482518ff7618898cf9d
tree4339c4b8ae3cbb748c5151908f628c552fd4e615
parenta9aff4d0cde3e843f64a8ee1219fe1ec5b5c3443
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
share/man/man4/aesni.4
sys/conf/files.amd64
sys/conf/files.i386
sys/crypto/aesni/aesni.c
sys/crypto/aesni/aesni.h
sys/crypto/aesni/intel_sha1.c [new file with mode: 0644]
sys/crypto/aesni/intel_sha256.c [new file with mode: 0644]
sys/crypto/aesni/sha_sse.h [new file with mode: 0644]
sys/modules/aesni/Makefile
tests/sys/opencrypto/cryptotest.py