c80ae7ca37
This replaces the SHA-512 NEON module with the faster and more versatile implementation from the OpenSSL project. It consists of both a NEON and a generic ASM version of the core SHA-512 transform, where the NEON version reverts to the ASM version when invoked in non-process context. This patch is based on the OpenSSL upstream version b1a5d1c65208 of sha512-armv4.pl, which can be found here: https://git.openssl.org/gitweb/?p=openssl.git;h=b1a5d1c65208 Performance relative to the generic implementation (measured using tcrypt.ko mode=306 sec=1 running on a Cortex-A57 under KVM): input size block size asm neon old neon 16 16 1.39 2.54 2.21 64 16 1.32 2.33 2.09 64 64 1.38 2.53 2.19 256 16 1.31 2.28 2.06 256 64 1.38 2.54 2.25 256 256 1.40 2.77 2.39 1024 16 1.29 2.22 2.01 1024 256 1.40 2.82 2.45 1024 1024 1.41 2.93 2.53 2048 16 1.33 2.21 2.00 2048 256 1.40 2.84 2.46 2048 1024 1.41 2.96 2.55 2048 2048 1.41 2.98 2.56 4096 16 1.34 2.20 1.99 4096 256 1.40 2.84 2.46 4096 1024 1.41 2.97 2.56 4096 4096 1.41 3.01 2.58 8192 16 1.34 2.19 1.99 8192 256 1.40 2.85 2.47 8192 1024 1.41 2.98 2.56 8192 4096 1.41 2.71 2.59 8192 8192 1.51 3.51 2.69 Acked-by: Jussi Kivilinna <jussi.kivilinna@iki.fi> Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
53 lines
1.7 KiB
Makefile
53 lines
1.7 KiB
Makefile
#
|
|
# Arch-specific CryptoAPI modules.
|
|
#
|
|
|
|
obj-$(CONFIG_CRYPTO_AES_ARM) += aes-arm.o
|
|
obj-$(CONFIG_CRYPTO_AES_ARM_BS) += aes-arm-bs.o
|
|
obj-$(CONFIG_CRYPTO_SHA1_ARM) += sha1-arm.o
|
|
obj-$(CONFIG_CRYPTO_SHA1_ARM_NEON) += sha1-arm-neon.o
|
|
obj-$(CONFIG_CRYPTO_SHA256_ARM) += sha256-arm.o
|
|
obj-$(CONFIG_CRYPTO_SHA512_ARM) += sha512-arm.o
|
|
|
|
ce-obj-$(CONFIG_CRYPTO_AES_ARM_CE) += aes-arm-ce.o
|
|
ce-obj-$(CONFIG_CRYPTO_SHA1_ARM_CE) += sha1-arm-ce.o
|
|
ce-obj-$(CONFIG_CRYPTO_SHA2_ARM_CE) += sha2-arm-ce.o
|
|
ce-obj-$(CONFIG_CRYPTO_GHASH_ARM_CE) += ghash-arm-ce.o
|
|
|
|
ifneq ($(ce-obj-y)$(ce-obj-m),)
|
|
ifeq ($(call as-instr,.fpu crypto-neon-fp-armv8,y,n),y)
|
|
obj-y += $(ce-obj-y)
|
|
obj-m += $(ce-obj-m)
|
|
else
|
|
$(warning These ARMv8 Crypto Extensions modules need binutils 2.23 or higher)
|
|
$(warning $(ce-obj-y) $(ce-obj-m))
|
|
endif
|
|
endif
|
|
|
|
aes-arm-y := aes-armv4.o aes_glue.o
|
|
aes-arm-bs-y := aesbs-core.o aesbs-glue.o
|
|
sha1-arm-y := sha1-armv4-large.o sha1_glue.o
|
|
sha1-arm-neon-y := sha1-armv7-neon.o sha1_neon_glue.o
|
|
sha256-arm-neon-$(CONFIG_KERNEL_MODE_NEON) := sha256_neon_glue.o
|
|
sha256-arm-y := sha256-core.o sha256_glue.o $(sha256-arm-neon-y)
|
|
sha512-arm-neon-$(CONFIG_KERNEL_MODE_NEON) := sha512-neon-glue.o
|
|
sha512-arm-y := sha512-core.o sha512-glue.o $(sha512-arm-neon-y)
|
|
sha1-arm-ce-y := sha1-ce-core.o sha1-ce-glue.o
|
|
sha2-arm-ce-y := sha2-ce-core.o sha2-ce-glue.o
|
|
aes-arm-ce-y := aes-ce-core.o aes-ce-glue.o
|
|
ghash-arm-ce-y := ghash-ce-core.o ghash-ce-glue.o
|
|
|
|
quiet_cmd_perl = PERL $@
|
|
cmd_perl = $(PERL) $(<) > $(@)
|
|
|
|
$(src)/aesbs-core.S_shipped: $(src)/bsaes-armv7.pl
|
|
$(call cmd,perl)
|
|
|
|
$(src)/sha256-core.S_shipped: $(src)/sha256-armv4.pl
|
|
$(call cmd,perl)
|
|
|
|
$(src)/sha512-core.S_shipped: $(src)/sha512-armv4.pl
|
|
$(call cmd,perl)
|
|
|
|
.PRECIOUS: $(obj)/aesbs-core.S $(obj)/sha256-core.S $(obj)/sha512-core.S
|