mirror of
https://github.com/torvalds/linux.git
synced 2025-12-07 20:06:24 +00:00
Pull crypto library updates from Eric Biggers:
"This is the main crypto library pull request for 6.19. It includes:
- Add SHA-3 support to lib/crypto/, including support for both the
hash functions and the extendable-output functions. Reimplement the
existing SHA-3 crypto_shash support on top of the library.
This is motivated mainly by the upcoming support for the ML-DSA
signature algorithm, which needs the SHAKE128 and SHAKE256
functions. But even on its own it's a useful cleanup.
This also fixes the longstanding issue where the
architecture-optimized SHA-3 code was disabled by default.
- Add BLAKE2b support to lib/crypto/, and reimplement the existing
BLAKE2b crypto_shash support on top of the library.
This is motivated mainly by btrfs, which supports BLAKE2b
checksums. With this change, all btrfs checksum algorithms now have
library APIs. btrfs is planned to start just using the library
directly.
This refactor also improves consistency between the BLAKE2b code
and BLAKE2s code. And as usual, it also fixes the issue where the
architecture-optimized BLAKE2b code was disabled by default.
- Add POLYVAL support to lib/crypto/, replacing the existing POLYVAL
support in crypto_shash. Reimplement HCTR2 on top of the library.
This simplifies the code and improves HCTR2 performance. As usual,
it also makes the architecture-optimized code be enabled by
default. The generic implementation of POLYVAL is greatly improved
as well.
- Clean up the BLAKE2s code
- Add FIPS self-tests for SHA-1, SHA-2, and SHA-3"
* tag 'libcrypto-updates-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ebiggers/linux: (37 commits)
fscrypt: Drop obsolete recommendation to enable optimized POLYVAL
crypto: polyval - Remove the polyval crypto_shash
crypto: hctr2 - Convert to use POLYVAL library
lib/crypto: x86/polyval: Migrate optimized code into library
lib/crypto: arm64/polyval: Migrate optimized code into library
lib/crypto: polyval: Add POLYVAL library
crypto: polyval - Rename conflicting functions
lib/crypto: x86/blake2s: Use vpternlogd for 3-input XORs
lib/crypto: x86/blake2s: Avoid writing back unchanged 'f' value
lib/crypto: x86/blake2s: Improve readability
lib/crypto: x86/blake2s: Use local labels for data
lib/crypto: x86/blake2s: Drop check for nblocks == 0
lib/crypto: x86/blake2s: Fix 32-bit arg treated as 64-bit
lib/crypto: arm, arm64: Drop filenames from file comments
lib/crypto: arm/blake2s: Fix some comments
crypto: s390/sha3 - Remove superseded SHA-3 code
crypto: sha3 - Reimplement using library API
crypto: jitterentropy - Use default sha3 implementation
lib/crypto: s390/sha3: Add optimized one-shot SHA-3 digest functions
lib/crypto: sha3: Support arch overrides of one-shot digest functions
...
311 lines
10 KiB
Makefile
311 lines
10 KiB
Makefile
# SPDX-License-Identifier: GPL-2.0
|
|
|
|
aflags-thumb2-$(CONFIG_THUMB2_KERNEL) := -U__thumb2__ -D__thumb2__=1
|
|
|
|
quiet_cmd_perlasm = PERLASM $@
|
|
cmd_perlasm = $(PERL) $(<) > $(@)
|
|
|
|
quiet_cmd_perlasm_with_args = PERLASM $@
|
|
cmd_perlasm_with_args = $(PERL) $(<) void $(@)
|
|
|
|
obj-$(CONFIG_KUNIT) += tests/
|
|
|
|
obj-$(CONFIG_CRYPTO_HASH_INFO) += hash_info.o
|
|
|
|
obj-$(CONFIG_CRYPTO_LIB_UTILS) += libcryptoutils.o
|
|
libcryptoutils-y := memneq.o utils.o
|
|
|
|
obj-$(CONFIG_CRYPTO_LIB_AES) += libaes.o
|
|
libaes-y := aes.o
|
|
|
|
obj-$(CONFIG_CRYPTO_LIB_AESCFB) += libaescfb.o
|
|
libaescfb-y := aescfb.o
|
|
|
|
obj-$(CONFIG_CRYPTO_LIB_AESGCM) += libaesgcm.o
|
|
libaesgcm-y := aesgcm.o
|
|
|
|
obj-$(CONFIG_CRYPTO_LIB_ARC4) += libarc4.o
|
|
libarc4-y := arc4.o
|
|
|
|
obj-$(CONFIG_CRYPTO_LIB_GF128MUL) += gf128mul.o
|
|
|
|
################################################################################
|
|
|
|
obj-$(CONFIG_CRYPTO_LIB_BLAKE2B) += libblake2b.o
|
|
libblake2b-y := blake2b.o
|
|
CFLAGS_blake2b.o := -Wframe-larger-than=4096 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105930
|
|
ifeq ($(CONFIG_CRYPTO_LIB_BLAKE2B_ARCH),y)
|
|
CFLAGS_blake2b.o += -I$(src)/$(SRCARCH)
|
|
libblake2b-$(CONFIG_ARM) += arm/blake2b-neon-core.o
|
|
endif # CONFIG_CRYPTO_LIB_BLAKE2B_ARCH
|
|
|
|
################################################################################
|
|
|
|
# blake2s is used by the /dev/random driver which is always builtin
|
|
obj-y += blake2s.o
|
|
ifeq ($(CONFIG_CRYPTO_LIB_BLAKE2S_ARCH),y)
|
|
CFLAGS_blake2s.o += -I$(src)/$(SRCARCH)
|
|
obj-$(CONFIG_ARM) += arm/blake2s-core.o
|
|
obj-$(CONFIG_X86) += x86/blake2s-core.o
|
|
endif
|
|
|
|
################################################################################
|
|
|
|
# chacha20_block() is used by the /dev/random driver which is always builtin
|
|
obj-y += chacha-block-generic.o
|
|
|
|
obj-$(CONFIG_CRYPTO_LIB_CHACHA) += libchacha.o
|
|
libchacha-y := chacha.o
|
|
|
|
ifeq ($(CONFIG_CRYPTO_LIB_CHACHA_ARCH),y)
|
|
CFLAGS_chacha.o += -I$(src)/$(SRCARCH)
|
|
|
|
ifeq ($(CONFIG_ARM),y)
|
|
libchacha-y += arm/chacha-scalar-core.o
|
|
libchacha-$(CONFIG_KERNEL_MODE_NEON) += arm/chacha-neon-core.o
|
|
endif
|
|
|
|
libchacha-$(CONFIG_ARM64) += arm64/chacha-neon-core.o
|
|
|
|
ifeq ($(CONFIG_MIPS),y)
|
|
libchacha-y += mips/chacha-core.o
|
|
AFLAGS_mips/chacha-core.o += -O2 # needed to fill branch delay slots
|
|
endif
|
|
|
|
libchacha-$(CONFIG_PPC) += powerpc/chacha-p10le-8x.o
|
|
libchacha-$(CONFIG_RISCV) += riscv/chacha-riscv64-zvkb.o
|
|
libchacha-$(CONFIG_S390) += s390/chacha-s390.o
|
|
libchacha-$(CONFIG_X86) += x86/chacha-ssse3-x86_64.o \
|
|
x86/chacha-avx2-x86_64.o \
|
|
x86/chacha-avx512vl-x86_64.o
|
|
endif # CONFIG_CRYPTO_LIB_CHACHA_ARCH
|
|
|
|
################################################################################
|
|
|
|
obj-$(CONFIG_CRYPTO_LIB_CHACHA20POLY1305) += libchacha20poly1305.o
|
|
libchacha20poly1305-y += chacha20poly1305.o
|
|
libchacha20poly1305-$(CONFIG_CRYPTO_SELFTESTS) += chacha20poly1305-selftest.o
|
|
|
|
################################################################################
|
|
|
|
obj-$(CONFIG_CRYPTO_LIB_CURVE25519) += libcurve25519.o
|
|
libcurve25519-y := curve25519.o
|
|
|
|
# Disable GCOV in odd or sensitive code
|
|
GCOV_PROFILE_curve25519.o := n
|
|
|
|
ifeq ($(CONFIG_ARCH_SUPPORTS_INT128),y)
|
|
libcurve25519-$(CONFIG_CRYPTO_LIB_CURVE25519_GENERIC) += curve25519-hacl64.o
|
|
else
|
|
libcurve25519-$(CONFIG_CRYPTO_LIB_CURVE25519_GENERIC) += curve25519-fiat32.o
|
|
endif
|
|
# clang versions prior to 18 may blow out the stack with KASAN
|
|
ifeq ($(CONFIG_CC_IS_CLANG)_$(call clang-min-version, 180000),y_)
|
|
KASAN_SANITIZE_curve25519-hacl64.o := n
|
|
endif
|
|
|
|
ifeq ($(CONFIG_CRYPTO_LIB_CURVE25519_ARCH),y)
|
|
CFLAGS_curve25519.o += -I$(src)/$(SRCARCH)
|
|
libcurve25519-$(CONFIG_ARM) += arm/curve25519-core.o
|
|
libcurve25519-$(CONFIG_PPC) += powerpc/curve25519-ppc64le_asm.o
|
|
endif
|
|
|
|
################################################################################
|
|
|
|
obj-$(CONFIG_CRYPTO_LIB_DES) += libdes.o
|
|
libdes-y := des.o
|
|
|
|
################################################################################
|
|
|
|
obj-$(CONFIG_CRYPTO_LIB_MD5) += libmd5.o
|
|
libmd5-y := md5.o
|
|
ifeq ($(CONFIG_CRYPTO_LIB_MD5_ARCH),y)
|
|
CFLAGS_md5.o += -I$(src)/$(SRCARCH)
|
|
libmd5-$(CONFIG_PPC) += powerpc/md5-asm.o
|
|
libmd5-$(CONFIG_SPARC) += sparc/md5_asm.o
|
|
endif # CONFIG_CRYPTO_LIB_MD5_ARCH
|
|
|
|
################################################################################
|
|
|
|
obj-$(CONFIG_CRYPTO_LIB_POLY1305) += libpoly1305.o
|
|
libpoly1305-y := poly1305.o
|
|
ifeq ($(CONFIG_ARCH_SUPPORTS_INT128),y)
|
|
libpoly1305-$(CONFIG_CRYPTO_LIB_POLY1305_GENERIC) += poly1305-donna64.o
|
|
else
|
|
libpoly1305-$(CONFIG_CRYPTO_LIB_POLY1305_GENERIC) += poly1305-donna32.o
|
|
endif
|
|
|
|
ifeq ($(CONFIG_CRYPTO_LIB_POLY1305_ARCH),y)
|
|
CFLAGS_poly1305.o += -I$(src)/$(SRCARCH)
|
|
|
|
ifeq ($(CONFIG_ARM),y)
|
|
libpoly1305-y += arm/poly1305-core.o
|
|
$(obj)/arm/poly1305-core.S: $(src)/arm/poly1305-armv4.pl
|
|
$(call cmd,perlasm)
|
|
# massage the perlasm code a bit so we only get the NEON routine if we need it
|
|
poly1305-aflags-$(CONFIG_CPU_V7) := -U__LINUX_ARM_ARCH__ -D__LINUX_ARM_ARCH__=5
|
|
poly1305-aflags-$(CONFIG_KERNEL_MODE_NEON) := -U__LINUX_ARM_ARCH__ -D__LINUX_ARM_ARCH__=7
|
|
AFLAGS_arm/poly1305-core.o += $(poly1305-aflags-y) $(aflags-thumb2-y)
|
|
endif
|
|
|
|
ifeq ($(CONFIG_ARM64),y)
|
|
libpoly1305-y += arm64/poly1305-core.o
|
|
$(obj)/arm64/poly1305-core.S: $(src)/arm64/poly1305-armv8.pl
|
|
$(call cmd,perlasm_with_args)
|
|
endif
|
|
|
|
ifeq ($(CONFIG_MIPS),y)
|
|
libpoly1305-y += mips/poly1305-core.o
|
|
poly1305-perlasm-flavour-$(CONFIG_32BIT) := o32
|
|
poly1305-perlasm-flavour-$(CONFIG_64BIT) := 64
|
|
quiet_cmd_perlasm_poly1305 = PERLASM $@
|
|
cmd_perlasm_poly1305 = $(PERL) $< $(poly1305-perlasm-flavour-y) $@
|
|
# Use if_changed instead of cmd, in case the flavour changed.
|
|
$(obj)/mips/poly1305-core.S: $(src)/mips/poly1305-mips.pl FORCE
|
|
$(call if_changed,perlasm_poly1305)
|
|
targets += mips/poly1305-core.S
|
|
endif
|
|
|
|
libpoly1305-$(CONFIG_PPC) += powerpc/poly1305-p10le_64.o
|
|
|
|
ifeq ($(CONFIG_RISCV),y)
|
|
libpoly1305-y += riscv/poly1305-core.o
|
|
poly1305-perlasm-flavour-$(CONFIG_32BIT) := 32
|
|
poly1305-perlasm-flavour-$(CONFIG_64BIT) := 64
|
|
quiet_cmd_perlasm_poly1305 = PERLASM $@
|
|
cmd_perlasm_poly1305 = $(PERL) $< $(poly1305-perlasm-flavour-y) $@
|
|
# Use if_changed instead of cmd, in case the flavour changed.
|
|
$(obj)/riscv/poly1305-core.S: $(src)/riscv/poly1305-riscv.pl FORCE
|
|
$(call if_changed,perlasm_poly1305)
|
|
targets += riscv/poly1305-core.S
|
|
AFLAGS_riscv/poly1305-core.o += -Dpoly1305_init=poly1305_block_init
|
|
endif
|
|
|
|
ifeq ($(CONFIG_X86),y)
|
|
libpoly1305-y += x86/poly1305-x86_64-cryptogams.o
|
|
$(obj)/x86/poly1305-x86_64-cryptogams.S: $(src)/x86/poly1305-x86_64-cryptogams.pl
|
|
$(call cmd,perlasm)
|
|
endif
|
|
|
|
endif # CONFIG_CRYPTO_LIB_POLY1305_ARCH
|
|
|
|
# clean-files must be defined unconditionally
|
|
clean-files += arm/poly1305-core.S \
|
|
arm64/poly1305-core.S \
|
|
mips/poly1305-core.S \
|
|
riscv/poly1305-core.S \
|
|
x86/poly1305-x86_64-cryptogams.S
|
|
|
|
################################################################################
|
|
|
|
obj-$(CONFIG_CRYPTO_LIB_POLYVAL) += libpolyval.o
|
|
libpolyval-y := polyval.o
|
|
ifeq ($(CONFIG_CRYPTO_LIB_POLYVAL_ARCH),y)
|
|
CFLAGS_polyval.o += -I$(src)/$(SRCARCH)
|
|
libpolyval-$(CONFIG_ARM64) += arm64/polyval-ce-core.o
|
|
libpolyval-$(CONFIG_X86) += x86/polyval-pclmul-avx.o
|
|
endif
|
|
|
|
################################################################################
|
|
|
|
obj-$(CONFIG_CRYPTO_LIB_SHA1) += libsha1.o
|
|
libsha1-y := sha1.o
|
|
ifeq ($(CONFIG_CRYPTO_LIB_SHA1_ARCH),y)
|
|
CFLAGS_sha1.o += -I$(src)/$(SRCARCH)
|
|
ifeq ($(CONFIG_ARM),y)
|
|
libsha1-y += arm/sha1-armv4-large.o
|
|
libsha1-$(CONFIG_KERNEL_MODE_NEON) += arm/sha1-armv7-neon.o \
|
|
arm/sha1-ce-core.o
|
|
endif
|
|
libsha1-$(CONFIG_ARM64) += arm64/sha1-ce-core.o
|
|
ifeq ($(CONFIG_PPC),y)
|
|
libsha1-y += powerpc/sha1-powerpc-asm.o
|
|
libsha1-$(CONFIG_SPE) += powerpc/sha1-spe-asm.o
|
|
endif
|
|
libsha1-$(CONFIG_SPARC) += sparc/sha1_asm.o
|
|
libsha1-$(CONFIG_X86) += x86/sha1-ssse3-and-avx.o \
|
|
x86/sha1-avx2-asm.o \
|
|
x86/sha1-ni-asm.o
|
|
endif # CONFIG_CRYPTO_LIB_SHA1_ARCH
|
|
|
|
################################################################################
|
|
|
|
obj-$(CONFIG_CRYPTO_LIB_SHA256) += libsha256.o
|
|
libsha256-y := sha256.o
|
|
ifeq ($(CONFIG_CRYPTO_LIB_SHA256_ARCH),y)
|
|
CFLAGS_sha256.o += -I$(src)/$(SRCARCH)
|
|
|
|
ifeq ($(CONFIG_ARM),y)
|
|
libsha256-y += arm/sha256-ce.o arm/sha256-core.o
|
|
$(obj)/arm/sha256-core.S: $(src)/arm/sha256-armv4.pl
|
|
$(call cmd,perlasm)
|
|
AFLAGS_arm/sha256-core.o += $(aflags-thumb2-y)
|
|
endif
|
|
|
|
ifeq ($(CONFIG_ARM64),y)
|
|
libsha256-y += arm64/sha256-core.o
|
|
$(obj)/arm64/sha256-core.S: $(src)/arm64/sha2-armv8.pl
|
|
$(call cmd,perlasm_with_args)
|
|
libsha256-$(CONFIG_KERNEL_MODE_NEON) += arm64/sha256-ce.o
|
|
endif
|
|
|
|
libsha256-$(CONFIG_PPC) += powerpc/sha256-spe-asm.o
|
|
libsha256-$(CONFIG_RISCV) += riscv/sha256-riscv64-zvknha_or_zvknhb-zvkb.o
|
|
libsha256-$(CONFIG_SPARC) += sparc/sha256_asm.o
|
|
libsha256-$(CONFIG_X86) += x86/sha256-ssse3-asm.o \
|
|
x86/sha256-avx-asm.o \
|
|
x86/sha256-avx2-asm.o \
|
|
x86/sha256-ni-asm.o
|
|
endif # CONFIG_CRYPTO_LIB_SHA256_ARCH
|
|
|
|
################################################################################
|
|
|
|
obj-$(CONFIG_CRYPTO_LIB_SHA512) += libsha512.o
|
|
libsha512-y := sha512.o
|
|
ifeq ($(CONFIG_CRYPTO_LIB_SHA512_ARCH),y)
|
|
CFLAGS_sha512.o += -I$(src)/$(SRCARCH)
|
|
|
|
ifeq ($(CONFIG_ARM),y)
|
|
libsha512-y += arm/sha512-core.o
|
|
$(obj)/arm/sha512-core.S: $(src)/arm/sha512-armv4.pl
|
|
$(call cmd,perlasm)
|
|
AFLAGS_arm/sha512-core.o += $(aflags-thumb2-y)
|
|
endif
|
|
|
|
ifeq ($(CONFIG_ARM64),y)
|
|
libsha512-y += arm64/sha512-core.o
|
|
$(obj)/arm64/sha512-core.S: $(src)/arm64/sha2-armv8.pl
|
|
$(call cmd,perlasm_with_args)
|
|
libsha512-$(CONFIG_KERNEL_MODE_NEON) += arm64/sha512-ce-core.o
|
|
endif
|
|
|
|
libsha512-$(CONFIG_RISCV) += riscv/sha512-riscv64-zvknhb-zvkb.o
|
|
libsha512-$(CONFIG_SPARC) += sparc/sha512_asm.o
|
|
libsha512-$(CONFIG_X86) += x86/sha512-ssse3-asm.o \
|
|
x86/sha512-avx-asm.o \
|
|
x86/sha512-avx2-asm.o
|
|
endif # CONFIG_CRYPTO_LIB_SHA512_ARCH
|
|
|
|
################################################################################
|
|
|
|
obj-$(CONFIG_CRYPTO_LIB_SHA3) += libsha3.o
|
|
libsha3-y := sha3.o
|
|
|
|
ifeq ($(CONFIG_CRYPTO_LIB_SHA3_ARCH),y)
|
|
CFLAGS_sha3.o += -I$(src)/$(SRCARCH)
|
|
libsha3-$(CONFIG_ARM64) += arm64/sha3-ce-core.o
|
|
endif # CONFIG_CRYPTO_LIB_SHA3_ARCH
|
|
|
|
################################################################################
|
|
|
|
obj-$(CONFIG_MPILIB) += mpi/
|
|
|
|
obj-$(CONFIG_CRYPTO_SELFTESTS_FULL) += simd.o
|
|
|
|
obj-$(CONFIG_CRYPTO_LIB_SM3) += libsm3.o
|
|
libsm3-y := sm3.o
|
|
|
|
# clean-files must be defined unconditionally
|
|
clean-files += arm/sha256-core.S arm/sha512-core.S
|
|
clean-files += arm64/sha256-core.S arm64/sha512-core.S
|