mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-30 14:34:51 +08:00
9d2c0b485c
Add hardware accelerated version of POLYVAL for ARM64 CPUs with Crypto Extensions support. This implementation is accelerated using PMULL instructions to perform the finite field computations. For added efficiency, 8 blocks of the message are processed simultaneously by precomputing the first 8 powers of the key. Karatsuba multiplication is used instead of Schoolbook multiplication because it was found to be slightly faster on ARM64 CPUs. Montgomery reduction must be used instead of Barrett reduction due to the difference in modulus between POLYVAL's field and other finite fields. More information on POLYVAL can be found in the HCTR2 paper: "Length-preserving encryption with HCTR2": https://eprint.iacr.org/2021/1441.pdf Signed-off-by: Nathan Huckleberry <nhuck@google.com> Reviewed-by: Ard Biesheuvel <ardb@kernel.org> Reviewed-by: Eric Biggers <ebiggers@google.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
90 lines
2.8 KiB
Makefile
90 lines
2.8 KiB
Makefile
# SPDX-License-Identifier: GPL-2.0-only
|
|
#
|
|
# linux/arch/arm64/crypto/Makefile
|
|
#
|
|
# Copyright (C) 2014 Linaro Ltd <ard.biesheuvel@linaro.org>
|
|
#
|
|
|
|
obj-$(CONFIG_CRYPTO_SHA1_ARM64_CE) += sha1-ce.o
|
|
sha1-ce-y := sha1-ce-glue.o sha1-ce-core.o
|
|
|
|
obj-$(CONFIG_CRYPTO_SHA2_ARM64_CE) += sha2-ce.o
|
|
sha2-ce-y := sha2-ce-glue.o sha2-ce-core.o
|
|
|
|
obj-$(CONFIG_CRYPTO_SHA512_ARM64_CE) += sha512-ce.o
|
|
sha512-ce-y := sha512-ce-glue.o sha512-ce-core.o
|
|
|
|
obj-$(CONFIG_CRYPTO_SHA3_ARM64) += sha3-ce.o
|
|
sha3-ce-y := sha3-ce-glue.o sha3-ce-core.o
|
|
|
|
obj-$(CONFIG_CRYPTO_SM3_ARM64_CE) += sm3-ce.o
|
|
sm3-ce-y := sm3-ce-glue.o sm3-ce-core.o
|
|
|
|
obj-$(CONFIG_CRYPTO_SM4_ARM64_CE) += sm4-ce-cipher.o
|
|
sm4-ce-cipher-y := sm4-ce-cipher-glue.o sm4-ce-cipher-core.o
|
|
|
|
obj-$(CONFIG_CRYPTO_SM4_ARM64_CE_BLK) += sm4-ce.o
|
|
sm4-ce-y := sm4-ce-glue.o sm4-ce-core.o
|
|
|
|
obj-$(CONFIG_CRYPTO_SM4_ARM64_NEON_BLK) += sm4-neon.o
|
|
sm4-neon-y := sm4-neon-glue.o sm4-neon-core.o
|
|
|
|
obj-$(CONFIG_CRYPTO_GHASH_ARM64_CE) += ghash-ce.o
|
|
ghash-ce-y := ghash-ce-glue.o ghash-ce-core.o
|
|
|
|
obj-$(CONFIG_CRYPTO_POLYVAL_ARM64_CE) += polyval-ce.o
|
|
polyval-ce-y := polyval-ce-glue.o polyval-ce-core.o
|
|
|
|
obj-$(CONFIG_CRYPTO_CRCT10DIF_ARM64_CE) += crct10dif-ce.o
|
|
crct10dif-ce-y := crct10dif-ce-core.o crct10dif-ce-glue.o
|
|
|
|
obj-$(CONFIG_CRYPTO_AES_ARM64_CE) += aes-ce-cipher.o
|
|
aes-ce-cipher-y := aes-ce-core.o aes-ce-glue.o
|
|
|
|
obj-$(CONFIG_CRYPTO_AES_ARM64_CE_CCM) += aes-ce-ccm.o
|
|
aes-ce-ccm-y := aes-ce-ccm-glue.o aes-ce-ccm-core.o
|
|
|
|
obj-$(CONFIG_CRYPTO_AES_ARM64_CE_BLK) += aes-ce-blk.o
|
|
aes-ce-blk-y := aes-glue-ce.o aes-ce.o
|
|
|
|
obj-$(CONFIG_CRYPTO_AES_ARM64_NEON_BLK) += aes-neon-blk.o
|
|
aes-neon-blk-y := aes-glue-neon.o aes-neon.o
|
|
|
|
obj-$(CONFIG_CRYPTO_SHA256_ARM64) += sha256-arm64.o
|
|
sha256-arm64-y := sha256-glue.o sha256-core.o
|
|
|
|
obj-$(CONFIG_CRYPTO_SHA512_ARM64) += sha512-arm64.o
|
|
sha512-arm64-y := sha512-glue.o sha512-core.o
|
|
|
|
obj-$(CONFIG_CRYPTO_CHACHA20_NEON) += chacha-neon.o
|
|
chacha-neon-y := chacha-neon-core.o chacha-neon-glue.o
|
|
|
|
obj-$(CONFIG_CRYPTO_POLY1305_NEON) += poly1305-neon.o
|
|
poly1305-neon-y := poly1305-core.o poly1305-glue.o
|
|
AFLAGS_poly1305-core.o += -Dpoly1305_init=poly1305_init_arm64
|
|
|
|
obj-$(CONFIG_CRYPTO_NHPOLY1305_NEON) += nhpoly1305-neon.o
|
|
nhpoly1305-neon-y := nh-neon-core.o nhpoly1305-neon-glue.o
|
|
|
|
obj-$(CONFIG_CRYPTO_AES_ARM64) += aes-arm64.o
|
|
aes-arm64-y := aes-cipher-core.o aes-cipher-glue.o
|
|
|
|
obj-$(CONFIG_CRYPTO_AES_ARM64_BS) += aes-neon-bs.o
|
|
aes-neon-bs-y := aes-neonbs-core.o aes-neonbs-glue.o
|
|
|
|
CFLAGS_aes-glue-ce.o := -DUSE_V8_CRYPTO_EXTENSIONS
|
|
|
|
$(obj)/aes-glue-%.o: $(src)/aes-glue.c FORCE
|
|
$(call if_changed_rule,cc_o_c)
|
|
|
|
quiet_cmd_perlasm = PERLASM $@
|
|
cmd_perlasm = $(PERL) $(<) void $(@)
|
|
|
|
$(obj)/%-core.S: $(src)/%-armv8.pl
|
|
$(call cmd,perlasm)
|
|
|
|
$(obj)/sha256-core.S: $(src)/sha512-armv8.pl
|
|
$(call cmd,perlasm)
|
|
|
|
clean-files += poly1305-core.S sha256-core.S sha512-core.S
|