fe182ba1d0
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
45 lines
1.3 KiB
Makefile
45 lines
1.3 KiB
Makefile
# $FreeBSD$
|
|
|
|
.PATH: ${SRCTOP}/sys/crypto/aesni
|
|
.PATH: ${SRCTOP}/contrib/llvm/tools/clang/lib/Headers
|
|
|
|
KMOD= aesni
|
|
SRCS= aesni.c
|
|
SRCS+= aeskeys_${MACHINE_CPUARCH}.S
|
|
SRCS+= device_if.h bus_if.h opt_bus.h cryptodev_if.h
|
|
|
|
OBJS+= aesni_ghash.o aesni_wrap.o
|
|
OBJS+= intel_sha1.o intel_sha256.o
|
|
|
|
# Remove -nostdinc so we can get the intrinsics.
|
|
aesni_ghash.o: aesni_ghash.c
|
|
# XXX - gcc won't understand -mpclmul
|
|
${CC} -c ${CFLAGS:C/^-O2$/-O3/:N-nostdinc} ${WERROR} ${PROF} \
|
|
-mmmx -msse -msse4 -maes -mpclmul ${.IMPSRC}
|
|
${CTFCONVERT_CMD}
|
|
|
|
aesni_wrap.o: aesni_wrap.c
|
|
${CC} -c ${CFLAGS:C/^-O2$/-O3/:N-nostdinc} ${WERROR} ${PROF} \
|
|
-mmmx -msse -msse4 -maes ${.IMPSRC}
|
|
${CTFCONVERT_CMD}
|
|
|
|
intel_sha1.o: intel_sha1.c
|
|
${CC} -c ${CFLAGS:C/^-O2$/-O3/:N-nostdinc} ${WERROR} ${PROF} \
|
|
-mmmx -msse -msse4 -msha ${.IMPSRC}
|
|
${CTFCONVERT_CMD}
|
|
|
|
intel_sha256.o: intel_sha256.c
|
|
${CC} -c ${CFLAGS:C/^-O2$/-O3/:N-nostdinc} ${WERROR} ${PROF} \
|
|
-mmmx -msse -msse4 -msha ${.IMPSRC}
|
|
${CTFCONVERT_CMD}
|
|
|
|
aesni_ghash.o: aesni.h
|
|
aesni_wrap.o: aesni.h
|
|
intel_sha1.o: sha_sse.h immintrin.h shaintrin.h tmmintrin.h xmmintrin.h
|
|
intel_sha256.o: sha_sse.h immintrin.h shaintrin.h tmmintrin.h xmmintrin.h
|
|
|
|
.include <bsd.kmod.mk>
|
|
|
|
CWARNFLAGS.aesni_ghash.c= ${NO_WCAST_QUAL}
|
|
CWARNFLAGS.aesni_wrap.c= ${NO_WCAST_QUAL}
|