mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/netfilter/nf.git
synced 2026-04-18 06:34:27 -04:00
Move the POWER8 AES assembly code into lib/crypto/, wire the key expansion and single-block en/decryption functions up to the AES library API, and remove the superseded "p8_aes" crypto_cipher algorithm. The result is that both the AES library and crypto_cipher APIs are now optimized for POWER8, whereas previously only crypto_cipher was (and optimizations weren't enabled by default, which this commit fixes too). Note that many of the functions in the POWER8 assembly code are still used by the AES mode implementations in arch/powerpc/crypto/. For now, just export these functions. These exports will go away once the AES modes are migrated to the library as well. (Trying to split up the assembly file seemed like much more trouble than it would be worth.) Another challenge with this code is that the POWER8 assembly code uses a custom format for the expanded AES key. Since that code is imported from OpenSSL and is also targeted to POWER8 (rather than POWER9 which has better data movement and byteswap instructions), that is not easily changed. For now I've just kept the custom format. To maintain full correctness, this requires executing some slow fallback code in the case where the usability of VSX changes between key expansion and use. This should be tolerable, as this case shouldn't happen in practice. Acked-by: Ard Biesheuvel <ardb@kernel.org> Link: https://lore.kernel.org/r/20260112192035.10427-14-ebiggers@kernel.org Signed-off-by: Eric Biggers <ebiggers@kernel.org>
259 lines
6.3 KiB
Plaintext
259 lines
6.3 KiB
Plaintext
# SPDX-License-Identifier: GPL-2.0
|
|
|
|
menu "Crypto library routines"
|
|
|
|
config CRYPTO_HASH_INFO
|
|
bool
|
|
|
|
config CRYPTO_LIB_UTILS
|
|
tristate
|
|
|
|
config CRYPTO_LIB_AES
|
|
tristate
|
|
|
|
config CRYPTO_LIB_AES_ARCH
|
|
bool
|
|
depends on CRYPTO_LIB_AES && !UML && !KMSAN
|
|
default y if ARM
|
|
default y if ARM64
|
|
default y if PPC && (SPE || (PPC64 && VSX))
|
|
|
|
config CRYPTO_LIB_AESCFB
|
|
tristate
|
|
select CRYPTO_LIB_AES
|
|
select CRYPTO_LIB_UTILS
|
|
|
|
config CRYPTO_LIB_AESGCM
|
|
tristate
|
|
select CRYPTO_LIB_AES
|
|
select CRYPTO_LIB_GF128MUL
|
|
select CRYPTO_LIB_UTILS
|
|
|
|
config CRYPTO_LIB_ARC4
|
|
tristate
|
|
|
|
config CRYPTO_LIB_GF128MUL
|
|
tristate
|
|
|
|
config CRYPTO_LIB_BLAKE2B
|
|
tristate
|
|
help
|
|
The BLAKE2b library functions. Select this if your module uses any of
|
|
the functions from <crypto/blake2b.h>.
|
|
|
|
config CRYPTO_LIB_BLAKE2B_ARCH
|
|
bool
|
|
depends on CRYPTO_LIB_BLAKE2B && !UML
|
|
default y if ARM && KERNEL_MODE_NEON
|
|
|
|
# BLAKE2s support is always built-in, so there's no CRYPTO_LIB_BLAKE2S option.
|
|
|
|
config CRYPTO_LIB_BLAKE2S_ARCH
|
|
bool
|
|
depends on !UML
|
|
default y if ARM
|
|
default y if X86_64
|
|
|
|
config CRYPTO_LIB_CHACHA
|
|
tristate
|
|
select CRYPTO_LIB_UTILS
|
|
help
|
|
Enable the ChaCha library interface. Select this if your module uses
|
|
chacha_crypt() or hchacha_block().
|
|
|
|
config CRYPTO_LIB_CHACHA_ARCH
|
|
bool
|
|
depends on CRYPTO_LIB_CHACHA && !UML && !KMSAN
|
|
default y if ARM
|
|
default y if ARM64 && KERNEL_MODE_NEON
|
|
default y if MIPS && CPU_MIPS32_R2
|
|
default y if PPC64 && CPU_LITTLE_ENDIAN && VSX
|
|
default y if RISCV && 64BIT && TOOLCHAIN_HAS_VECTOR_CRYPTO && \
|
|
RISCV_EFFICIENT_VECTOR_UNALIGNED_ACCESS
|
|
default y if S390
|
|
default y if X86_64
|
|
|
|
config CRYPTO_LIB_CURVE25519
|
|
tristate
|
|
select CRYPTO_LIB_UTILS
|
|
help
|
|
The Curve25519 library functions. Select this if your module uses any
|
|
of the functions from <crypto/curve25519.h>.
|
|
|
|
config CRYPTO_LIB_CURVE25519_ARCH
|
|
bool
|
|
depends on CRYPTO_LIB_CURVE25519 && !UML && !KMSAN
|
|
default y if ARM && KERNEL_MODE_NEON && !CPU_BIG_ENDIAN
|
|
default y if PPC64 && CPU_LITTLE_ENDIAN
|
|
default y if X86_64
|
|
|
|
config CRYPTO_LIB_CURVE25519_GENERIC
|
|
bool
|
|
depends on CRYPTO_LIB_CURVE25519
|
|
default y if !CRYPTO_LIB_CURVE25519_ARCH || ARM || X86_64
|
|
|
|
config CRYPTO_LIB_DES
|
|
tristate
|
|
|
|
config CRYPTO_LIB_MD5
|
|
tristate
|
|
help
|
|
The MD5 and HMAC-MD5 library functions. Select this if your module
|
|
uses any of the functions from <crypto/md5.h>.
|
|
|
|
config CRYPTO_LIB_MD5_ARCH
|
|
bool
|
|
depends on CRYPTO_LIB_MD5 && !UML
|
|
default y if MIPS && CPU_CAVIUM_OCTEON
|
|
default y if PPC
|
|
default y if SPARC64
|
|
|
|
config CRYPTO_LIB_MLDSA
|
|
tristate
|
|
select CRYPTO_LIB_SHA3
|
|
help
|
|
The ML-DSA library functions. Select this if your module uses any of
|
|
the functions from <crypto/mldsa.h>.
|
|
|
|
config CRYPTO_LIB_NH
|
|
tristate
|
|
help
|
|
Implementation of the NH almost-universal hash function, specifically
|
|
the variant of NH used in Adiantum.
|
|
|
|
config CRYPTO_LIB_NH_ARCH
|
|
bool
|
|
depends on CRYPTO_LIB_NH && !UML && !KMSAN
|
|
default y if ARM && KERNEL_MODE_NEON
|
|
default y if ARM64 && KERNEL_MODE_NEON
|
|
default y if X86_64
|
|
|
|
config CRYPTO_LIB_POLY1305
|
|
tristate
|
|
help
|
|
The Poly1305 library functions. Select this if your module uses any
|
|
of the functions from <crypto/poly1305.h>.
|
|
|
|
config CRYPTO_LIB_POLY1305_ARCH
|
|
bool
|
|
depends on CRYPTO_LIB_POLY1305 && !UML && !KMSAN
|
|
default y if ARM
|
|
default y if ARM64 && KERNEL_MODE_NEON
|
|
default y if MIPS
|
|
# The PPC64 code needs to be fixed to work in softirq context.
|
|
default y if PPC64 && CPU_LITTLE_ENDIAN && VSX && BROKEN
|
|
default y if RISCV
|
|
default y if X86_64
|
|
|
|
# This symbol controls the inclusion of the Poly1305 generic code. This differs
|
|
# from most of the other algorithms, which handle the generic code
|
|
# "automatically" via __maybe_unused. This is needed so that the Adiantum code,
|
|
# which calls the poly1305_core_*() functions directly, can enable them.
|
|
config CRYPTO_LIB_POLY1305_GENERIC
|
|
bool
|
|
depends on CRYPTO_LIB_POLY1305
|
|
# Enable if there's no arch impl or the arch impl requires the generic
|
|
# impl as a fallback. (Or if selected explicitly.)
|
|
default y if !CRYPTO_LIB_POLY1305_ARCH || PPC64
|
|
|
|
config CRYPTO_LIB_POLY1305_RSIZE
|
|
int
|
|
default 2 if MIPS || RISCV
|
|
default 11 if X86_64
|
|
default 9 if ARM || ARM64
|
|
default 1
|
|
|
|
config CRYPTO_LIB_POLYVAL
|
|
tristate
|
|
help
|
|
The POLYVAL library functions. Select this if your module uses any of
|
|
the functions from <crypto/polyval.h>.
|
|
|
|
config CRYPTO_LIB_POLYVAL_ARCH
|
|
bool
|
|
depends on CRYPTO_LIB_POLYVAL && !UML
|
|
default y if ARM64 && KERNEL_MODE_NEON
|
|
default y if X86_64
|
|
|
|
config CRYPTO_LIB_CHACHA20POLY1305
|
|
tristate
|
|
select CRYPTO_LIB_CHACHA
|
|
select CRYPTO_LIB_POLY1305
|
|
select CRYPTO_LIB_UTILS
|
|
|
|
config CRYPTO_LIB_SHA1
|
|
tristate
|
|
help
|
|
The SHA-1 and HMAC-SHA1 library functions. Select this if your module
|
|
uses any of the functions from <crypto/sha1.h>.
|
|
|
|
config CRYPTO_LIB_SHA1_ARCH
|
|
bool
|
|
depends on CRYPTO_LIB_SHA1 && !UML
|
|
default y if ARM
|
|
default y if ARM64 && KERNEL_MODE_NEON
|
|
default y if MIPS && CPU_CAVIUM_OCTEON
|
|
default y if PPC
|
|
default y if S390
|
|
default y if SPARC64
|
|
default y if X86_64
|
|
|
|
config CRYPTO_LIB_SHA256
|
|
tristate
|
|
help
|
|
The SHA-224, SHA-256, HMAC-SHA224, and HMAC-SHA256 library functions.
|
|
Select this if your module uses any of these functions from
|
|
<crypto/sha2.h>.
|
|
|
|
config CRYPTO_LIB_SHA256_ARCH
|
|
bool
|
|
depends on CRYPTO_LIB_SHA256 && !UML
|
|
default y if ARM && !CPU_V7M
|
|
default y if ARM64
|
|
default y if MIPS && CPU_CAVIUM_OCTEON
|
|
default y if PPC && SPE
|
|
default y if RISCV && 64BIT && TOOLCHAIN_HAS_VECTOR_CRYPTO && \
|
|
RISCV_EFFICIENT_VECTOR_UNALIGNED_ACCESS
|
|
default y if S390
|
|
default y if SPARC64
|
|
default y if X86_64
|
|
|
|
config CRYPTO_LIB_SHA512
|
|
tristate
|
|
help
|
|
The SHA-384, SHA-512, HMAC-SHA384, and HMAC-SHA512 library functions.
|
|
Select this if your module uses any of these functions from
|
|
<crypto/sha2.h>.
|
|
|
|
config CRYPTO_LIB_SHA512_ARCH
|
|
bool
|
|
depends on CRYPTO_LIB_SHA512 && !UML
|
|
default y if ARM && !CPU_V7M
|
|
default y if ARM64
|
|
default y if MIPS && CPU_CAVIUM_OCTEON
|
|
default y if RISCV && 64BIT && TOOLCHAIN_HAS_VECTOR_CRYPTO && \
|
|
RISCV_EFFICIENT_VECTOR_UNALIGNED_ACCESS
|
|
default y if S390
|
|
default y if SPARC64
|
|
default y if X86_64
|
|
|
|
config CRYPTO_LIB_SHA3
|
|
tristate
|
|
select CRYPTO_LIB_UTILS
|
|
help
|
|
The SHA3 library functions. Select this if your module uses any of
|
|
the functions from <crypto/sha3.h>.
|
|
|
|
config CRYPTO_LIB_SHA3_ARCH
|
|
bool
|
|
depends on CRYPTO_LIB_SHA3 && !UML
|
|
default y if ARM64 && KERNEL_MODE_NEON
|
|
default y if S390
|
|
|
|
config CRYPTO_LIB_SM3
|
|
tristate
|
|
|
|
source "lib/crypto/tests/Kconfig"
|
|
|
|
endmenu
|