# 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))
	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

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
