# 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 "Enable 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 "Enable 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.c'
	  is not used.

config TFM_CRYPTO_AEAD_MODULE_ENABLED
	bool "Enable 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 "Enable 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 "Enable 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 "Enable 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_GENERATOR_MODULE_ENABLED
	bool "Enable GENERATOR crypto module"
	default y
	help
	  Enables the GENERATOR crypto module within the crypto partition.
	  Unset this option if the key generation, generate, raw key and
	  key derivation features from 'tfm_crypto_secure_api.c' is not used.

config TFM_CRYPTO_ASYMMETRIC_MODULE_ENABLED
	bool "Enable ASYMMETRIC crypto module"
	default y
	help
	  Enables the ASYMMETRIC crypto module within the crypto partition.
	  Unset this option if the functionality provided by 'crypto_asymmetric.c'
	  is not used.

config TFM_CRYPTO_KEY_DERIVATION_MODULE_ENABLED
	bool "Enable 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
