# TLS/DTLS related options

# Copyright (c) 2018 Intel Corporation
# Copyright (c) 2018 Nordic Semiconductor ASA
# SPDX-License-Identifier: Apache-2.0

menu "Mbed TLS configuration"
	depends on MBEDTLS_BUILTIN && MBEDTLS_CFG_FILE = "config-mbedtls.h"

menu "TLS"

config MBEDTLS_SSL_PROTO_TLS1_2
	bool "Support for TLS 1.2 (DTLS 1.2)"
	select MBEDTLS_CIPHER
	select MBEDTLS_MD_C

if MBEDTLS_SSL_PROTO_TLS1_2

config MBEDTLS_SSL_PROTO_DTLS
	bool "Support for DTLS"

endif # MBEDTLS_SSL_PROTO_TLS1_2

config MBEDTLS_SSL_PROTO_TLS1_3
	bool "Support for TLS 1.3"

if MBEDTLS_SSL_PROTO_TLS1_3

config MBEDTLS_SSL_SESSION_TICKETS
	bool "Support for RFC 5077 session tickets in TLS 1.3"

endif # MBEDTLS_SSL_PROTO_TLS1_3

if MBEDTLS_SSL_PROTO_TLS1_2 || MBEDTLS_SSL_PROTO_TLS1_3

config MBEDTLS_SSL_ALPN
	bool "Support for setting the supported Application Layer Protocols"

endif # MBEDTLS_SSL_PROTO_TLS1_2 || MBEDTLS_SSL_PROTO_TLS1_3

endmenu # TLS

menu "Ciphersuite configuration"

comment "Supported key exchange modes"

config MBEDTLS_RSA_C
	bool "RSA base support"

if MBEDTLS_RSA_C

config MBEDTLS_PKCS1_V15
	bool "RSA PKCS1 v1.5"

config MBEDTLS_PKCS1_V21
	bool "RSA PKCS1 v2.1"

config MBEDTLS_GENPRIME_ENABLED
	bool "Prime number generation code"

endif # MBEDTLS_RSA_C

config MBEDTLS_KEY_EXCHANGE_ALL_ENABLED
	bool "All available ciphersuite modes"
	select MBEDTLS_MD_C
	select MBEDTLS_RSA_C
	select MBEDTLS_PKCS1_V15
	select MBEDTLS_PKCS1_V21
	select MBEDTLS_KEY_EXCHANGE_PSK_ENABLED
	select MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED
	select MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED
	select MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED
	select MBEDTLS_KEY_EXCHANGE_RSA_ENABLED
	select MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED
	select MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED
	select MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED
	select MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED
	select MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED
	select MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED

config MBEDTLS_KEY_EXCHANGE_PSK_ENABLED
	bool "PSK based ciphersuite modes"

config MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED
	bool "DHE-PSK based ciphersuite modes"

config MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED
	bool "ECDHE-PSK based ciphersuite modes"
	depends on MBEDTLS_ECDH_C

config MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED
	bool "RSA-PSK based ciphersuite modes"
	depends on MBEDTLS_PKCS1_V15 || MBEDTLS_PKCS1_V21

config MBEDTLS_PSK_MAX_LEN
	int "Max size of TLS pre-shared keys"
	default 32
	help
	  Max size of TLS pre-shared keys, in bytes. It has no effect if no
	  PSK key exchange is used.

config MBEDTLS_KEY_EXCHANGE_RSA_ENABLED
	bool "RSA-only based ciphersuite modes"
	depends on MBEDTLS_MD_C
	depends on PSA_CRYPTO_CLIENT || MBEDTLS_PKCS1_V15 || MBEDTLS_PKCS1_V21
	select PSA_WANT_KEY_TYPE_RSA_PUBLIC_KEY if PSA_CRYPTO_CLIENT
	select PSA_WANT_KEY_TYPE_RSA_KEY_PAIR_IMPORT if PSA_CRYPTO_CLIENT
	select PSA_WANT_KEY_TYPE_RSA_KEY_PAIR_EXPORT if PSA_CRYPTO_CLIENT
	select PSA_WANT_KEY_TYPE_RSA_KEY_PAIR_GENERATE if PSA_CRYPTO_CLIENT

config MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED
	bool "DHE-RSA based ciphersuite modes"
	depends on MBEDTLS_PKCS1_V15 || MBEDTLS_PKCS1_V21

config MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED
	bool "ECDHE-RSA based ciphersuite modes"
	depends on MBEDTLS_PKCS1_V15 || MBEDTLS_PKCS1_V21
	depends on MBEDTLS_ECDH_C

config MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED
	bool "ECDHE-ECDSA based ciphersuite modes"
	depends on (MBEDTLS_ECDH_C && MBEDTLS_ECDSA_C) || (PSA_WANT_ALG_ECDH && PSA_WANT_ALG_ECDSA)

config MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED
	bool "ECDH-ECDSA based ciphersuite modes"
	depends on (MBEDTLS_ECDH_C && MBEDTLS_ECDSA_C) || (PSA_WANT_ALG_ECDH && PSA_WANT_ALG_ECDSA)

config MBEDTLS_ECDSA_DETERMINISTIC
	bool "Deterministic ECDSA (RFC 6979)"

config MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED
	bool "ECDH-RSA based ciphersuite modes"
	depends on MBEDTLS_ECDH_C

config MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED
	bool "ECJPAKE based ciphersuite modes"
	depends on MBEDTLS_ECJPAKE_C

if MBEDTLS_SSL_PROTO_TLS1_3

config MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ENABLED
	bool "TLS 1.3 PSK key exchange mode"

config MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED
	bool "TLS 1.3 ephemeral key exchange mode"

config MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL_ENABLED
	bool "TLS 1.3 PSK ephemeral key exchange mode"

endif # MBEDTLS_SSL_PROTO_TLS1_3

config MBEDTLS_HKDF_C
	bool "HMAC-based Extract-and-Expand Key Derivation Function"

comment "Elliptic curve libraries"

config MBEDTLS_ECDH_C
	bool "Elliptic curve Diffie-Hellman library"
	depends on MBEDTLS_ECP_C

config MBEDTLS_ECDSA_C
	bool "Elliptic curve DSA library"
	depends on MBEDTLS_ECP_C
	select MBEDTLS_ASN1_PARSE_C

config MBEDTLS_ECJPAKE_C
	bool "Elliptic curve J-PAKE library"
	depends on MBEDTLS_ECP_C

config MBEDTLS_ECP_C
	bool "Elliptic curve over GF(p) library"

if MBEDTLS_ECP_C

comment "Supported elliptic curves"

config MBEDTLS_ECP_ALL_ENABLED
	bool "All available elliptic curves"
	select MBEDTLS_ECP_DP_SECP192R1_ENABLED
	select MBEDTLS_ECP_DP_SECP192R1_ENABLED
	select MBEDTLS_ECP_DP_SECP224R1_ENABLED
	select MBEDTLS_ECP_DP_SECP256R1_ENABLED
	select MBEDTLS_ECP_DP_SECP384R1_ENABLED
	select MBEDTLS_ECP_DP_SECP521R1_ENABLED
	select MBEDTLS_ECP_DP_SECP192K1_ENABLED
	select MBEDTLS_ECP_DP_SECP224K1_ENABLED
	select MBEDTLS_ECP_DP_SECP256K1_ENABLED
	select MBEDTLS_ECP_DP_BP256R1_ENABLED
	select MBEDTLS_ECP_DP_BP384R1_ENABLED
	select MBEDTLS_ECP_DP_BP512R1_ENABLED
	select MBEDTLS_ECP_DP_CURVE25519_ENABLED
	select MBEDTLS_ECP_DP_CURVE448_ENABLED
	select MBEDTLS_ECP_NIST_OPTIM

config MBEDTLS_ECP_DP_SECP192R1_ENABLED
	bool "SECP192R1 elliptic curve"

config MBEDTLS_ECP_DP_SECP224R1_ENABLED
	bool "SECP224R1 elliptic curve"

config MBEDTLS_ECP_DP_SECP256R1_ENABLED
	bool "SECP256R1 elliptic curve"

config MBEDTLS_ECP_DP_SECP384R1_ENABLED
	bool "SECP384R1 elliptic curve"

config MBEDTLS_ECP_DP_SECP521R1_ENABLED
	bool "SECP521R1 elliptic curve"

config MBEDTLS_ECP_DP_SECP192K1_ENABLED
	bool "SECP192K1 elliptic curve"

config MBEDTLS_ECP_DP_SECP224K1_ENABLED
	bool "SECP224K1 elliptic curve"

config MBEDTLS_ECP_DP_SECP256K1_ENABLED
	bool "SECP256K1 elliptic curve"

config MBEDTLS_ECP_DP_BP256R1_ENABLED
	bool "BP256R1 elliptic curve"

config MBEDTLS_ECP_DP_BP384R1_ENABLED
	bool "BP384R1 elliptic curve"

config MBEDTLS_ECP_DP_BP512R1_ENABLED
	bool "BP512R1 elliptic curve"

config MBEDTLS_ECP_DP_CURVE25519_ENABLED
	bool "CURVE25519 elliptic curve"

config MBEDTLS_ECP_DP_CURVE448_ENABLED
	bool "CURVE448 elliptic curve"

config MBEDTLS_ECP_NIST_OPTIM
	bool "NSIT curves optimization"

endif

comment "Supported ciphers and cipher modes"

config MBEDTLS_CIPHER_ALL_ENABLED
	bool "All available ciphers and modes"
	select MBEDTLS_CIPHER_AES_ENABLED
	select MBEDTLS_CIPHER_CAMELLIA_ENABLED
	select MBEDTLS_CIPHER_DES_ENABLED
	select MBEDTLS_CIPHER_CHACHA20_ENABLED
	select MBEDTLS_CIPHER_CCM_ENABLED
	select MBEDTLS_CIPHER_GCM_ENABLED
	select MBEDTLS_CIPHER_MODE_XTS_ENABLED
	select MBEDTLS_CIPHER_MODE_CBC_ENABLED
	select MBEDTLS_CIPHER_MODE_CTR_ENABLED
	select MBEDTLS_CHACHAPOLY_AEAD_ENABLED

config MBEDTLS_SOME_AEAD_CIPHER_ENABLED
	bool
	default y
	depends on \
		MBEDTLS_CIPHER_AES_ENABLED || \
		MBEDTLS_CIPHER_CAMELLIA_ENABLED

config MBEDTLS_SOME_CIPHER_ENABLED
	bool
	default y
	depends on \
		MBEDTLS_SOME_AEAD_CIPHER_ENABLED || \
		MBEDTLS_CIPHER_DES_ENABLED || \
		MBEDTLS_CIPHER_CHACHA20_ENABLED

config MBEDTLS_CIPHER_AES_ENABLED
	bool "AES block cipher"
	default y if PSA_WANT_KEY_TYPE_AES && MBEDTLS_PSA_CRYPTO_C

if MBEDTLS_CIPHER_AES_ENABLED

config MBEDTLS_AES_ROM_TABLES
	bool "Use precomputed AES tables stored in ROM"

config MBEDTLS_AES_FEWER_TABLES
	bool "Reduce the size of precomputed AES tables by ~6kB"
	default y
	depends on MBEDTLS_AES_ROM_TABLES
	help
	  Reduce the size of the AES tables at a tradeoff of more
	  arithmetic operations at runtime. Specifically 4 table
	  lookups are converted to 1 table lookup, 3 additions
	  and 6 bit shifts.

config MBEDTLS_CIPHER_MODE_XTS_ENABLED
	bool "Xor-encrypt-xor with ciphertext stealing mode (XTS) for AES"

endif # MBEDTLS_CIPHER_AES_ENABLED

config MBEDTLS_CIPHER_CAMELLIA_ENABLED
	bool "Camellia block cipher"

config MBEDTLS_CIPHER_DES_ENABLED
	bool "DES block cipher"

config MBEDTLS_CIPHER_CHACHA20_ENABLED
	bool "ChaCha20 stream cipher"

if MBEDTLS_SOME_AEAD_CIPHER_ENABLED

config MBEDTLS_CIPHER_CCM_ENABLED
	bool "Counter with CBC-MAC (CCM) mode for 128-bit block cipher"

config MBEDTLS_CIPHER_GCM_ENABLED
	bool "Galois/Counter Mode (GCM) for symmetric ciphers"

endif # MBEDTLS_SOME_AEAD_CIPHER_ENABLED

if MBEDTLS_SOME_CIPHER_ENABLED

config MBEDTLS_CIPHER_MODE_CBC_ENABLED
	bool "Cipher Block Chaining mode (CBC) for symmetric ciphers"
	default y if !NET_L2_OPENTHREAD

config MBEDTLS_CIPHER_MODE_CTR_ENABLED
	bool "Counter Block Cipher mode (CTR) for symmetric ciphers"

endif # MBEDTLS_SOME_CIPHER_ENABLED

config MBEDTLS_CHACHAPOLY_AEAD_ENABLED
	bool "ChaCha20-Poly1305 AEAD algorithm"
	depends on MBEDTLS_CIPHER_CHACHA20_ENABLED && MBEDTLS_POLY1305

config MBEDTLS_CMAC
	bool "CMAC (Cipher-based Message Authentication Code) mode for block ciphers"
	depends on MBEDTLS_CIPHER_AES_ENABLED || MBEDTLS_CIPHER_DES_ENABLED

comment "Supported hash algorithms"

config MBEDTLS_HASH_ALL_ENABLED
	bool "All available MAC methods"
	select MBEDTLS_MD5
	select MBEDTLS_SHA1
	select MBEDTLS_SHA224
	select MBEDTLS_SHA256
	select MBEDTLS_SHA384
	select MBEDTLS_SHA512
	select MBEDTLS_POLY1305

config MBEDTLS_MD5
	bool "MD5 hash algorithm"

config MBEDTLS_SHA1
	bool "SHA-1 hash algorithm"

config MBEDTLS_SHA224
	bool "SHA-224 hash algorithm"

config MBEDTLS_SHA256
	bool "SHA-256 hash algorithm"
	default y

config MBEDTLS_SHA256_SMALLER
	bool "Smaller SHA-256 implementation"
	depends on MBEDTLS_SHA256
	default y
	help
	  Enable an implementation of SHA-256 that has a
	  smaller ROM footprint but also lower performance.

config MBEDTLS_SHA384
	bool "SHA-384 hash algorithm"

config MBEDTLS_SHA512
	bool "SHA-512 hash algorithm"

config MBEDTLS_POLY1305
	bool "Poly1305 hash family"

endmenu

comment "Random number generators"

config MBEDTLS_CTR_DRBG_C
	bool "CTR_DRBG AES-256-based random generator"
	depends on MBEDTLS_CIPHER_AES_ENABLED
	default y

config MBEDTLS_HMAC_DRBG_C
	bool "HMAC_DRBG random generator"
	select MBEDTLS_MD_C

comment "Other configurations"

config MBEDTLS_CIPHER
	bool "Generic cipher layer"
	default y if PSA_WANT_ALG_CMAC

config MBEDTLS_MD_C
	bool "Generic message digest layer"

config MBEDTLS_ASN1_PARSE_C
	bool "Support for ASN1 parser functions"

config MBEDTLS_PLATFORM_NO_STD_FUNCTIONS
	bool "Remove usage of standard libc functions"
	help
	  This prevents Mbed TLS from linking against the following standard functions
	  from libc: `snprintf`, `vsnprintf`, `printf`, `fprintf`, `calloc`, `free`, `setbuf`, `exit`
	  and `time`. By default Mbed TLS will use stub functions for all these functions.
	  These stubs are just meant to return successfully, but they don't implement
	  the required functionality.
	  Users can individually override each of these stubs by calling
	  `mbedtls_platform_set_xxx()` to set the their implementation of `xxx()` function
	  at runtime.

if MBEDTLS_PLATFORM_NO_STD_FUNCTIONS

config MBEDTLS_PLATFORM_SNPRINTF_ALT
	bool "Allow setting custom snprintf at run-time"
	help
	  Allow setting a custom `snprintf()` function with `mbedtls_platform_set_snprintf()`.
	  Include `mbedtls/platform.h` for the prototype of this function.

endif # MBEDTLS_PLATFORM_NO_STD_FUNCTIONS

config MBEDTLS_PEM_CERTIFICATE_FORMAT
	bool "Support for PEM certificate format"
	help
	  By default only DER (binary) format of certificates is supported. Enable
	  this option to enable support for PEM format.

config MBEDTLS_HAVE_ASM
	bool "Use of assembly code"
	default y if !ARM
	help
	  Enable use of assembly code in mbedTLS. This improves the performances
	  of asymmetric cryptography, however this might have an impact on the
	  code size.

config MBEDTLS_ENTROPY_C
	bool "Mbed TLS entropy accumulator"
	depends on MBEDTLS_SHA256 || MBEDTLS_SHA384 || MBEDTLS_SHA512
	help
	  This module gathers entropy data from enabled entropy sources. It's
	  mostly used in conjunction with CTR_DRBG or HMAC_DRBG to create
	  a deterministic random number generator.

config MBEDTLS_ENTROPY_POLL_ZEPHYR
	bool "Provide entropy data to Mbed TLS through entropy driver or random generator"
	default y
	depends on MBEDTLS_ENTROPY_C
	help
	  Provide entropy data to the Mbed TLS's entropy module through either
	  an entropy driver (if available in the system) or a generic random
	  number generator.
	  Warning: the latter choice is potentially non secure because it might
	  end up using weaker/test-only sources (ex: random number generator
	  built on system timer).

config MBEDTLS_OPENTHREAD_OPTIMIZATIONS_ENABLED
	bool "MbedTLS optimizations for OpenThread"
	depends on OPENTHREAD
	default y if !NET_SOCKETS_SOCKOPT_TLS
	help
	  Enable some OpenThread specific mbedTLS optimizations that allows to
	  save some RAM/ROM when OpenThread is used. Note, that when application
	  aims to use other mbedTLS services on top of OpenThread (e.g. secure
	  sockets), it's advised to disable this option.

config MBEDTLS_USER_CONFIG_ENABLE
	bool "User mbedTLS config file"
	help
	  Enable user mbedTLS config file that will be included at the end of
	  the generic config file.

config MBEDTLS_USER_CONFIG_FILE
	string "User configuration file for mbed TLS" if MBEDTLS_USER_CONFIG_ENABLE
	help
	  User config file that can contain mbedTLS configs that were not
	  covered by the generic config file.

config MBEDTLS_SERVER_NAME_INDICATION
	bool "Support for RFC 6066 server name indication (SNI) in SSL"
	help
	  Enable this to support RFC 6066 server name indication (SNI) in SSL.
	  This requires that MBEDTLS_X509_CRT_PARSE_C is also set.

config MBEDTLS_PK_WRITE_C
	bool "The generic public (asymmetric) key writer"
	help
	  Enable generic public key write functions.

config MBEDTLS_HAVE_TIME_DATE
	bool "Date/time validation in mbed TLS"
	help
	  System has time.h, time(), and an implementation for gmtime_r().
	  There also need to be a valid time source in the system, as mbedTLS
	  expects a valid date/time for certificate validation.

config MBEDTLS_PKCS5_C
	bool "Password-based encryption functions"
	select MBEDTLS_MD_C
	help
	  Enable PKCS5 functions

config MBEDTLS_SSL_CACHE_C
	bool "SSL session cache support"
	help
	  This option enables simple SSL cache implementation (server side).

if MBEDTLS_SSL_CACHE_C

config MBEDTLS_SSL_CACHE_DEFAULT_TIMEOUT
	int "Default timeout for SSL cache entries"
	default 86400

config MBEDTLS_SSL_CACHE_DEFAULT_MAX_ENTRIES
	int "Maximum number of SSL cache entries"
	default 5

endif # MBEDTLS_SSL_CACHE_C

config MBEDTLS_SSL_EXTENDED_MASTER_SECRET
	bool "(D)TLS Extended Master Secret extension"
	depends on MBEDTLS_SSL_PROTO_TLS1_2
	help
	  Enable support for the (D)TLS Extended Master Secret extension
	  which ensures that master secrets are different for every
	  connection and every session.

# CONFIG_CSPRNG_AVAILABLE must automatically enable CONFIG_ENTROPY_GENERATOR.
# But we're doing it here because this enablement should be gated by Mbed TLS
# being also enabled in the build, otherwise this will result in entropy
# drivers being enabled without anyone needing them.
config CSPRNG_AVAILABLE
	select ENTROPY_GENERATOR

choice MBEDTLS_PSA_CRYPTO_RNG_SOURCE
	prompt "Select random source for built-in PSA crypto"
	depends on MBEDTLS_PSA_CRYPTO_C
	# The only way to check if there is any entropy driver available on the
	# platform is to check if the "zephyr,entropy" chosen property exists.
	# CONFIG_CSPRNG_ENABLED cannot be used for this because it gets enabled by
	# entropy drivers but these are gated by CONFIG_ENTROPY_GENERATOR which
	# is disabled by default.
	default MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG if CSPRNG_ENABLED
	default MBEDTLS_PSA_CRYPTO_LEGACY_RNG

config MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG
	bool "Use a cryptographically secure driver as random source"
	help
	  Use a cryptographically secure random generator to provide random data
	  instead of legacy Mbed TLS modules. This has a smaller footprint
	  than its legacy counterpart MBEDTLS_PSA_CRYPTO_LEGACY_RNG, but it
	  requires a cryptographically secure random number generator (CSPRNG)
	  to be available in the system. If no CSPRNG is available:
	  - there is no fallback to weak entropy random generators.
	  - the initialization of PSA crypto will fail and none of its API
	    will be available.

config MBEDTLS_PSA_CRYPTO_LEGACY_RNG
	bool "Use legacy modules to generate random data"
	select MBEDTLS_ENTROPY_C
	select MBEDTLS_HMAC_DRBG_C if !MBEDTLS_CTR_DRBG_C
	# If there is any entropy driver in the system, then the choice would be
	# CONFIG_MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG. If we fall here, then the only
	# way to get some random data is to enable CONFIG_TEST_RANDOM_GENERATOR.
	select TEST_RANDOM_GENERATOR
	help
	  Use legacy Mbed TLS modules to generate random data. In this
	  configuration the entropy module is used to gather some data and then
	  either ctr_drbg or hmac_drbg are applied on top of it to improve
	  the randomness.
	  Security level in this case really depends on the type of entropy
	  sources which are enabled in the system: if weak entropy sources are
	  used, then the generated data will only be pseudo random. Strong
	  entropy sources are strongly recommended (if possible) to have real
	  random data.
	  Another difference between this implementation and the
	  MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG counterpart is the memory footprint:
	  this implementation brings in legacy modules which are not required
	  in the "external" version, so the footprint is larger.

endchoice

config MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG_ALLOW_NON_CSPRNG
	bool "Allow non cryptographically secure random sources (for test only!)"
	depends on MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG
	help
	  MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG is by default limited to rely only
	  on cryptographically secure random number generators. However, only
	  for test purposes, it might be useful to enable external random
	  number generation, but have it using weak random sources (non
	  cryptographically secure).
	  Warning: this is meant to be enabled only for tests, not in production
	  as the generated values are not cryptographically secure!

config MBEDTLS_PSA_CRYPTO_C
	bool "Platform Security Architecture cryptography API"
	depends on !BUILD_WITH_TFM

config MBEDTLS_USE_PSA_CRYPTO
	bool "Use PSA APIs instead of legacy MbedTLS when possible"
	default y if MBEDTLS_PSA_CRYPTO_CLIENT
	help
	  Use PSA APIs instead of legacy MbedTLS functions in TLS/DTLS and other
	  "intermediate" modules such as PK, MD and Cipher.

config MBEDTLS_PSA_CRYPTO_CLIENT
	bool
	default y
	depends on BUILD_WITH_TFM || MBEDTLS_PSA_CRYPTO_C
	select PSA_CRYPTO_CLIENT

config MBEDTLS_LMS_C
	bool "Support LMS signature schemes"
	depends on MBEDTLS_PSA_CRYPTO_CLIENT
	depends on MBEDTLS_SHA256
	select PSA_WANT_ALG_SHA_256

if MBEDTLS_PSA_CRYPTO_C

config MBEDTLS_PSA_P256M_DRIVER_ENABLED
	bool "P256-M driver"
	imply PSA_WANT_ALG_SHA_256
	help
	  Enable support for the optimized software implementation of the secp256r1
	  curve through the standard PSA API.

config MBEDTLS_PSA_P256M_DRIVER_RAW
	bool "Access p256-m driver directly (without PSA interface)"
	depends on MBEDTLS_PSA_P256M_DRIVER_ENABLED
	help
	  Allow direct access to the p256-m driver interface.
	  Warning: Usage of this Kconfig option is prohibited in Zephyr's codebase.
	           Users can enable it in case of very memory-constrained devices, but be aware that the p256-m interface is absolutely not guaranteed to remain stable over time.

config MBEDTLS_PSA_CRYPTO_STORAGE_C
	bool

config MBEDTLS_PSA_STATIC_KEY_SLOTS
	bool "Use statically allocated key buffers to store key material"
	default y if !MBEDTLS_ENABLE_HEAP
	help
	  By default Mbed TLS's PSA Crypto core uses heap memory to store the
	  key material for each key slot. This might impose an undesired
	  requirement to support heap memory and its management code, affecting
	  RAM and ROM footprints at the same time.
	  Enabling this symbol causes Mbed TLS to pre-allocate all the key slot
	  buffers that are used to store the key material at build time, thus
	  removing the need for heap memory. Each buffer will be sized to
	  contain the largest asymmetric/symmetric key type enabled in the build
	  through PSA_WANT symbols.

config MBEDTLS_PSA_KEY_SLOT_COUNT
	int "Number of key slots in PSA Crypto core"
	default 16
	help
	  Set the number of key slots that are available in the PSA Crypto core.
	  Be aware that each slot, even if unused, increases RAM consumption
	  by ~40 bytes plus:
	  * the length of the largest asymmetric/symmetric key type enabled in
	    the build through PSA_WANT symbols, if MBEDTLS_PSA_STATIC_KEY_SLOTS
	    is set. (This is all defined statically at build time).
	  * the heap-allocated memory to store the key material of a given slot,
	    if it is used and MBEDTLS_PSA_STATIC_KEY_SLOTS is not set.

config MBEDTLS_PSA_CRYPTO_BUILTIN_KEYS
	bool "Built-in key support in PSA Crypto core"
	help
	  Enable support for platform built-in keys in PSA Crypto. Built-in keys
	  are typically derived from a hardware unique key or stored in a secure
	  element. Mbed TLS uses key IDs from MBEDTLS_PSA_KEY_ID_BUILTIN_MIN to
	  MBEDTLS_PSA_KEY_ID_BUILTIN_MAX for built-in keys. The platform must
	  implement mbedtls_psa_platform_get_builtin_key().

endif # MBEDTLS_PSA_CRYPTO_C

config MBEDTLS_SSL_DTLS_CONNECTION_ID
	bool "DTLS Connection ID extension"
	depends on MBEDTLS_SSL_PROTO_DTLS
	help
	  Enable support for the DTLS Connection ID extension
	  which allows to identify DTLS connections across changes
	  in the underlying transport.


config MBEDTLS_NIST_KW_C
	bool "NIST key wrap"
	depends on MBEDTLS_CIPHER_AES_ENABLED
	help
	  Key Wrapping mode for 128-bit block ciphers,
	  as defined in NIST SP 800-38F.

config MBEDTLS_DHM_C
	bool "Diffie-Hellman-Merkle mode"
	help
	  Used by the following key exchanges,
	  DHE-RSA, DHE-PSK

config MBEDTLS_X509_CRL_PARSE_C
	bool "X.509 CRL parsing"
	help
	  Used by X.509 CRL parsing

config MBEDTLS_X509_CSR_WRITE_C
	bool "X.509 Certificate Signing Requests writing"
	help
	  For X.509 certificate request writing.

config MBEDTLS_X509_CSR_PARSE_C
	bool "X.509 Certificate Signing Request parsing"
	help
	  For reading X.509 certificate request.

config MBEDTLS_X509_CRT_WRITE_C
	bool "X.509 certificate creation"

endmenu
