# Configuration for the crypto modules in the TF-M Module

# Copyright (c) 2021 Nordic Semiconductor ASA
# SPDX-License-Identifier: Apache-2.0

if BUILD_WITH_TFM

if TFM_PARTITION_CRYPTO

config TFM_CRYPTO_RNG_MODULE_ENABLED
	bool "Random number generator crypto module"
	default y
	help
	  Enables the random number generator  module within the crypto partition.
	  Unset this option if 'psa_generate_random' is not used.

config TFM_CRYPTO_KEY_MODULE_ENABLED
	bool "KEY crypto module"
	default y
	help
	  Enables the KEY crypto module within the crypto partition.
	  Unset this option if the functionality provided by 'crypto_key_management.c'
	  is not used.

config TFM_CRYPTO_AEAD_MODULE_ENABLED
	bool "AEAD crypto module"
	default y
	help
	  Enables the AEAD crypto module within the crypto partition.
	  Unset this option if the functionality provided by 'crypto_aead.c'
	  is not used.

config TFM_CRYPTO_MAC_MODULE_ENABLED
	bool "MAC crypto module"
	default y
	help
	  Enables the MAC crypto module within the crypto partition.
	  Unset this option if the functionality provided by 'crypto_mac.c'
	  is not used.

config TFM_CRYPTO_HASH_MODULE_ENABLED
	bool "HASH crypto module"
	default y
	help
	  Enables the HASH crypto module within the crypto partition.
	  Unset this option if the functionality provided by 'crypto_hash.c'
	  is not used.

config TFM_CRYPTO_CIPHER_MODULE_ENABLED
	bool "CIPHER crypto module"
	default y
	help
	  Enables the CIPHER crypto module within the crypto partition.
	  Unset this option if the functionality provided by 'crypto_cipher.c'
	  is not used.

config TFM_CRYPTO_ASYM_ENCRYPT_MODULE_ENABLED
	bool "ASYM ENCRYPT crypto module"
	default y
	help
	  Enables the ASYM ENCRYPT crypto module within the crypto partition.
	  Unset this option if the encrypt functionality provided by 'crypto_asymmetric.c'
	  is not used.

config TFM_CRYPTO_ASYM_SIGN_MODULE_ENABLED
	bool "ASYM SIGN crypto module"
	default y
	help
	  Enables the ASYM SIGN crypto module within the crypto partition.
	  Unset this option if the sign functionality provided by 'crypto_asymmetric.c'
	  is not used.

config TFM_CRYPTO_KEY_DERIVATION_MODULE_ENABLED
	bool "KEY DERIVATION crypto module"
	default y
	help
	  Enables the KEY_DERIVATION crypto module within the crypto partition.
	  Unset this option if the functionality provided by 'crypto_key_derivation.c'
	  is not used.

endif # TFM_PARTITION_CRYPTO

endif # BUILD_WITH_TFM
