# SPDX-License-Identifier: GPL-2.0-or-later

config CRYPTO_LIB_AES_CBC_MACS_KUNIT_TEST
	tristate "KUnit tests for AES-CMAC, AES-XCBC-MAC, and AES-CBC-MAC" if !KUNIT_ALL_TESTS
	depends on KUNIT && CRYPTO_LIB_AES_CBC_MACS
	default KUNIT_ALL_TESTS
	select CRYPTO_LIB_BENCHMARK_VISIBLE
	help
	  KUnit tests for the AES-CMAC, AES-XCBC-MAC, and AES-CBC-MAC message
	  authentication codes.

config CRYPTO_LIB_BLAKE2B_KUNIT_TEST
	tristate "KUnit tests for BLAKE2b" if !KUNIT_ALL_TESTS
	depends on KUNIT && CRYPTO_LIB_BLAKE2B
	default KUNIT_ALL_TESTS
	select CRYPTO_LIB_BENCHMARK_VISIBLE
	help
	  KUnit tests for the BLAKE2b cryptographic hash function.

config CRYPTO_LIB_BLAKE2S_KUNIT_TEST
	tristate "KUnit tests for BLAKE2s" if !KUNIT_ALL_TESTS
	depends on KUNIT
	default KUNIT_ALL_TESTS
	select CRYPTO_LIB_BENCHMARK_VISIBLE
	# No need to depend on CRYPTO_LIB_BLAKE2S here, as that option doesn't
	# exist; the BLAKE2s code is always built-in for the /dev/random driver.
	help
	  KUnit tests for the BLAKE2s cryptographic hash function.

config CRYPTO_LIB_CHACHA20POLY1305_KUNIT_TEST
	tristate "KUnit tests for ChaCha20Poly1305" if !KUNIT_ALL_TESTS
	depends on KUNIT && CRYPTO_LIB_CHACHA20POLY1305
	default KUNIT_ALL_TESTS
	select CRYPTO_LIB_BENCHMARK_VISIBLE
	help
	  KUnit tests for the ChaCha20Poly1305 authenticated encryption
	  algorithm.

config CRYPTO_LIB_CURVE25519_KUNIT_TEST
	tristate "KUnit tests for Curve25519" if !KUNIT_ALL_TESTS
	depends on KUNIT && CRYPTO_LIB_CURVE25519
	default KUNIT_ALL_TESTS
	select CRYPTO_LIB_BENCHMARK_VISIBLE
	help
	  KUnit tests for the Curve25519 Diffie-Hellman function.

config CRYPTO_LIB_GHASH_KUNIT_TEST
	tristate "KUnit tests for GHASH" if !KUNIT_ALL_TESTS
	depends on KUNIT && CRYPTO_LIB_GF128HASH
	default KUNIT_ALL_TESTS
	select CRYPTO_LIB_BENCHMARK_VISIBLE
	help
	  KUnit tests for the GHASH library functions.

config CRYPTO_LIB_MD5_KUNIT_TEST
	tristate "KUnit tests for MD5" if !KUNIT_ALL_TESTS
	depends on KUNIT && CRYPTO_LIB_MD5
	default KUNIT_ALL_TESTS
	select CRYPTO_LIB_BENCHMARK_VISIBLE
	help
	  KUnit tests for the MD5 cryptographic hash function and its
	  corresponding HMAC.

config CRYPTO_LIB_MLDSA_KUNIT_TEST
	tristate "KUnit tests for ML-DSA" if !KUNIT_ALL_TESTS
	depends on KUNIT && CRYPTO_LIB_MLDSA
	default KUNIT_ALL_TESTS
	select CRYPTO_LIB_BENCHMARK_VISIBLE
	help
	  KUnit tests for the ML-DSA digital signature algorithm.

config CRYPTO_LIB_NH_KUNIT_TEST
	tristate "KUnit tests for NH" if !KUNIT_ALL_TESTS
	depends on KUNIT && CRYPTO_LIB_NH
	default KUNIT_ALL_TESTS
	help
	  KUnit tests for the NH almost-universal hash function.

config CRYPTO_LIB_POLY1305_KUNIT_TEST
	tristate "KUnit tests for Poly1305" if !KUNIT_ALL_TESTS
	depends on KUNIT && CRYPTO_LIB_POLY1305
	default KUNIT_ALL_TESTS
	select CRYPTO_LIB_BENCHMARK_VISIBLE
	help
	  KUnit tests for the Poly1305 library functions.

config CRYPTO_LIB_POLYVAL_KUNIT_TEST
	tristate "KUnit tests for POLYVAL" if !KUNIT_ALL_TESTS
	depends on KUNIT && CRYPTO_LIB_GF128HASH
	default KUNIT_ALL_TESTS
	select CRYPTO_LIB_BENCHMARK_VISIBLE
	help
	  KUnit tests for the POLYVAL library functions.

config CRYPTO_LIB_SHA1_KUNIT_TEST
	tristate "KUnit tests for SHA-1" if !KUNIT_ALL_TESTS
	depends on KUNIT && CRYPTO_LIB_SHA1
	default KUNIT_ALL_TESTS
	select CRYPTO_LIB_BENCHMARK_VISIBLE
	help
	  KUnit tests for the SHA-1 cryptographic hash function and its
	  corresponding HMAC.

# Option is named *_SHA256_KUNIT_TEST, though both SHA-224 and SHA-256 tests are
# included, for consistency with the naming used elsewhere (e.g. CRYPTO_SHA256).
config CRYPTO_LIB_SHA256_KUNIT_TEST
	tristate "KUnit tests for SHA-224 and SHA-256" if !KUNIT_ALL_TESTS
	depends on KUNIT && CRYPTO_LIB_SHA256
	default KUNIT_ALL_TESTS
	select CRYPTO_LIB_BENCHMARK_VISIBLE
	help
	  KUnit tests for the SHA-224 and SHA-256 cryptographic hash functions
	  and their corresponding HMACs.

# Option is named *_SHA512_KUNIT_TEST, though both SHA-384 and SHA-512 tests are
# included, for consistency with the naming used elsewhere (e.g. CRYPTO_SHA512).
config CRYPTO_LIB_SHA512_KUNIT_TEST
	tristate "KUnit tests for SHA-384 and SHA-512" if !KUNIT_ALL_TESTS
	depends on KUNIT && CRYPTO_LIB_SHA512
	default KUNIT_ALL_TESTS
	select CRYPTO_LIB_BENCHMARK_VISIBLE
	help
	  KUnit tests for the SHA-384 and SHA-512 cryptographic hash functions
	  and their corresponding HMACs.

config CRYPTO_LIB_SHA3_KUNIT_TEST
	tristate "KUnit tests for SHA-3" if !KUNIT_ALL_TESTS
	depends on KUNIT && CRYPTO_LIB_SHA3
	default KUNIT_ALL_TESTS
	select CRYPTO_LIB_BENCHMARK_VISIBLE
	help
	  KUnit tests for the SHA3 cryptographic hash and XOF functions,
	  including SHA3-224, SHA3-256, SHA3-384, SHA3-512, SHAKE128 and
	  SHAKE256.

config CRYPTO_LIB_SM3_KUNIT_TEST
	tristate "KUnit tests for SM3" if !KUNIT_ALL_TESTS
	depends on KUNIT && CRYPTO_LIB_SM3
	default KUNIT_ALL_TESTS
	select CRYPTO_LIB_BENCHMARK_VISIBLE
	help
	  KUnit tests for the SM3 cryptographic hash function.

config CRYPTO_LIB_ENABLE_ALL_FOR_KUNIT
	tristate "Enable all crypto library code for KUnit tests"
	depends on KUNIT
	select CRYPTO_LIB_AES_CBC_MACS
	select CRYPTO_LIB_BLAKE2B
	select CRYPTO_LIB_CHACHA20POLY1305
	select CRYPTO_LIB_CURVE25519
	select CRYPTO_LIB_GF128HASH
	select CRYPTO_LIB_MD5
	select CRYPTO_LIB_MLDSA
	select CRYPTO_LIB_NH
	select CRYPTO_LIB_POLY1305
	select CRYPTO_LIB_SHA1
	select CRYPTO_LIB_SHA256
	select CRYPTO_LIB_SHA512
	select CRYPTO_LIB_SHA3
	select CRYPTO_LIB_SM3
	help
	  Enable all the crypto library code that has KUnit tests.

	  Enable this only if you'd like to test all the crypto library code,
	  even code that wouldn't otherwise need to be built.

	  You'll still need to enable the tests themselves, either individually
	  or using KUNIT_ALL_TESTS.

config CRYPTO_LIB_BENCHMARK_VISIBLE
	bool

config CRYPTO_LIB_BENCHMARK
	bool "Include benchmarks in KUnit tests for cryptographic functions"
	depends on CRYPTO_LIB_BENCHMARK_VISIBLE
	help
	  Include benchmarks in the KUnit tests for cryptographic functions.
	  The benchmark results are printed to the kernel log when the
	  corresponding KUnit test suite runs.

	  This is useful for evaluating the performance of the cryptographic
	  functions.  However, it will increase the runtime of the KUnit tests.

	  If you're only interested in correctness testing, leave this disabled.
