2016-09-21 02:36:30 -04:00
|
|
|
menu "mbedTLS"
|
|
|
|
|
2019-01-25 11:10:53 -05:00
|
|
|
choice MBEDTLS_MEM_ALLOC_MODE
|
|
|
|
prompt "Memory allocation strategy"
|
|
|
|
default MBEDTLS_INTERNAL_MEM_ALLOC
|
|
|
|
help
|
|
|
|
Allocation strategy for mbedTLS, essentially provides ability to
|
|
|
|
allocate all required dynamic allocations from,
|
2018-09-19 05:59:20 -04:00
|
|
|
|
|
|
|
- Internal DRAM memory only
|
|
|
|
- External SPIRAM memory only
|
|
|
|
- Either internal or external memory based on default malloc()
|
|
|
|
behavior in ESP-IDF
|
|
|
|
- Custom allocation mode, by overwriting calloc()/free() using
|
|
|
|
mbedtls_platform_set_calloc_free() function
|
2020-02-26 07:21:59 -05:00
|
|
|
- Internal IRAM memory wherever applicable else internal DRAM
|
2018-09-19 05:59:20 -04:00
|
|
|
|
2021-05-07 14:38:49 -04:00
|
|
|
Recommended mode here is always internal (*), since that is most preferred
|
2019-01-25 11:10:53 -05:00
|
|
|
from security perspective. But if application requirement does not
|
|
|
|
allow sufficient free internal memory then alternate mode can be
|
|
|
|
selected.
|
|
|
|
|
2021-05-07 14:38:49 -04:00
|
|
|
(*) In case of ESP32-S2/ESP32-S3, hardware allows encryption of external
|
|
|
|
SPIRAM contents provided hardware flash encryption feature is enabled.
|
|
|
|
In that case, using external SPIRAM allocation strategy is also safe choice
|
|
|
|
from security perspective.
|
|
|
|
|
2019-01-25 11:10:53 -05:00
|
|
|
config MBEDTLS_INTERNAL_MEM_ALLOC
|
|
|
|
bool "Internal memory"
|
|
|
|
|
|
|
|
config MBEDTLS_EXTERNAL_MEM_ALLOC
|
|
|
|
bool "External SPIRAM"
|
2021-05-07 14:38:49 -04:00
|
|
|
depends on SPIRAM_USE_CAPS_ALLOC || SPIRAM_USE_MALLOC
|
2019-01-25 11:10:53 -05:00
|
|
|
|
|
|
|
config MBEDTLS_DEFAULT_MEM_ALLOC
|
|
|
|
bool "Default alloc mode"
|
|
|
|
|
|
|
|
config MBEDTLS_CUSTOM_MEM_ALLOC
|
|
|
|
bool "Custom alloc mode"
|
|
|
|
|
2020-02-26 07:21:59 -05:00
|
|
|
config MBEDTLS_IRAM_8BIT_MEM_ALLOC
|
|
|
|
bool "Internal IRAM"
|
|
|
|
depends on ESP32_IRAM_AS_8BIT_ACCESSIBLE_MEMORY
|
|
|
|
help
|
|
|
|
Allows to use IRAM memory region as 8bit accessible region.
|
|
|
|
|
|
|
|
TLS input and output buffers will be allocated in IRAM section which is 32bit aligned
|
|
|
|
memory. Every unaligned (8bit or 16bit) access will result in an exception
|
|
|
|
and incur penalty of certain clock cycles per unaligned read/write.
|
|
|
|
|
2019-01-25 11:10:53 -05:00
|
|
|
endchoice #MBEDTLS_MEM_ALLOC_MODE
|
|
|
|
|
|
|
|
config MBEDTLS_SSL_MAX_CONTENT_LEN
|
|
|
|
int "TLS maximum message content length"
|
|
|
|
default 16384
|
|
|
|
range 512 16384
|
|
|
|
depends on !MBEDTLS_ASYMMETRIC_CONTENT_LEN
|
|
|
|
help
|
|
|
|
Maximum TLS message length (in bytes) supported by mbedTLS.
|
|
|
|
|
|
|
|
16384 is the default and this value is required to comply
|
|
|
|
fully with TLS standards.
|
|
|
|
|
|
|
|
However you can set a lower value in order to save RAM. This
|
|
|
|
is safe if the other end of the connection supports Maximum
|
|
|
|
Fragment Length Negotiation Extension (max_fragment_length,
|
|
|
|
see RFC6066) or you know for certain that it will never send a
|
|
|
|
message longer than a certain number of bytes.
|
|
|
|
|
|
|
|
If the value is set too low, symptoms are a failed TLS
|
|
|
|
handshake or a return value of MBEDTLS_ERR_SSL_INVALID_RECORD
|
|
|
|
(-0x7200).
|
|
|
|
|
|
|
|
config MBEDTLS_ASYMMETRIC_CONTENT_LEN
|
|
|
|
bool "Asymmetric in/out fragment length"
|
2019-07-30 07:18:03 -04:00
|
|
|
default y
|
2019-01-25 11:10:53 -05:00
|
|
|
help
|
|
|
|
If enabled, this option allows customizing TLS in/out fragment length
|
|
|
|
in asymmetric way. Please note that enabling this with default values
|
|
|
|
saves 12KB of dynamic memory per TLS connection.
|
|
|
|
|
|
|
|
config MBEDTLS_SSL_IN_CONTENT_LEN
|
|
|
|
int "TLS maximum incoming fragment length"
|
|
|
|
default 16384
|
|
|
|
range 512 16384
|
|
|
|
depends on MBEDTLS_ASYMMETRIC_CONTENT_LEN
|
|
|
|
help
|
|
|
|
This defines maximum incoming fragment length, overriding default
|
|
|
|
maximum content length (MBEDTLS_SSL_MAX_CONTENT_LEN).
|
|
|
|
|
|
|
|
config MBEDTLS_SSL_OUT_CONTENT_LEN
|
|
|
|
int "TLS maximum outgoing fragment length"
|
|
|
|
default 4096
|
|
|
|
range 512 16384
|
|
|
|
depends on MBEDTLS_ASYMMETRIC_CONTENT_LEN
|
|
|
|
help
|
|
|
|
This defines maximum outgoing fragment length, overriding default
|
|
|
|
maximum content length (MBEDTLS_SSL_MAX_CONTENT_LEN).
|
|
|
|
|
2020-04-10 04:33:54 -04:00
|
|
|
config MBEDTLS_DYNAMIC_BUFFER
|
|
|
|
bool "Using dynamic TX/RX buffer"
|
|
|
|
default n
|
|
|
|
select MBEDTLS_ASYMMETRIC_CONTENT_LEN
|
2021-12-20 04:35:49 -05:00
|
|
|
# Dynamic buffer feature is not supported with DTLS
|
2023-02-17 00:39:14 -05:00
|
|
|
depends on !IDF_TARGET_LINUX && !MBEDTLS_SSL_PROTO_DTLS && !MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH
|
2020-04-10 04:33:54 -04:00
|
|
|
help
|
|
|
|
Using dynamic TX/RX buffer. After enabling this option, mbedTLS will
|
|
|
|
allocate TX buffer when need to send data and then free it if all data
|
|
|
|
is sent, allocate RX buffer when need to receive data and then free it
|
|
|
|
when all data is used or read by upper layer.
|
|
|
|
|
|
|
|
By default, when SSL is initialized, mbedTLS also allocate TX and
|
|
|
|
RX buffer with the default value of "MBEDTLS_SSL_OUT_CONTENT_LEN" or
|
|
|
|
"MBEDTLS_SSL_IN_CONTENT_LEN", so to save more heap, users can set
|
|
|
|
the options to be an appropriate value.
|
|
|
|
|
|
|
|
config MBEDTLS_DYNAMIC_FREE_CONFIG_DATA
|
2021-02-04 04:26:58 -05:00
|
|
|
bool "Free private key and DHM data after its usage"
|
2020-04-10 04:33:54 -04:00
|
|
|
default n
|
|
|
|
depends on MBEDTLS_DYNAMIC_BUFFER
|
|
|
|
help
|
2021-02-04 04:26:58 -05:00
|
|
|
Free private key and DHM data after its usage in handshake process.
|
2020-04-10 04:33:54 -04:00
|
|
|
|
|
|
|
The option will decrease heap cost when handshake, but also lead to problem:
|
|
|
|
|
|
|
|
Becasue all certificate, private key and DHM data are freed so users should register
|
|
|
|
certificate and private key to ssl config object again.
|
|
|
|
|
2021-02-04 04:26:58 -05:00
|
|
|
config MBEDTLS_DYNAMIC_FREE_CA_CERT
|
2021-12-19 23:57:44 -05:00
|
|
|
bool "Free SSL CA certificate after its usage"
|
2021-02-04 04:26:58 -05:00
|
|
|
default y
|
|
|
|
depends on MBEDTLS_DYNAMIC_FREE_CONFIG_DATA
|
|
|
|
help
|
2021-12-19 23:57:44 -05:00
|
|
|
Free CA certificate after its usage in the handshake process.
|
2021-02-04 04:26:58 -05:00
|
|
|
This option will decrease the heap footprint for the TLS handshake, but may lead to a problem:
|
|
|
|
If the respective ssl object needs to perform the TLS handshake again,
|
2021-12-19 23:57:44 -05:00
|
|
|
the CA certificate should once again be registered to the ssl object.
|
2021-02-04 04:26:58 -05:00
|
|
|
|
2019-01-25 11:10:53 -05:00
|
|
|
config MBEDTLS_DEBUG
|
|
|
|
bool "Enable mbedTLS debugging"
|
|
|
|
default n
|
|
|
|
help
|
|
|
|
Enable mbedTLS debugging functions at compile time.
|
|
|
|
|
|
|
|
If this option is enabled, you can include
|
|
|
|
"mbedtls/esp_debug.h" and call mbedtls_esp_enable_debug_log()
|
|
|
|
at runtime in order to enable mbedTLS debug output via the ESP
|
|
|
|
log mechanism.
|
|
|
|
|
2019-06-06 08:58:19 -04:00
|
|
|
choice MBEDTLS_DEBUG_LEVEL
|
|
|
|
bool "Set mbedTLS debugging level"
|
|
|
|
depends on MBEDTLS_DEBUG
|
|
|
|
default MBEDTLS_DEBUG_LEVEL_VERBOSE
|
|
|
|
help
|
|
|
|
Set mbedTLS debugging level
|
|
|
|
|
|
|
|
config MBEDTLS_DEBUG_LEVEL_WARN
|
|
|
|
bool "Warning"
|
|
|
|
config MBEDTLS_DEBUG_LEVEL_INFO
|
|
|
|
bool "Info"
|
|
|
|
config MBEDTLS_DEBUG_LEVEL_DEBUG
|
|
|
|
bool "Debug"
|
|
|
|
config MBEDTLS_DEBUG_LEVEL_VERBOSE
|
|
|
|
bool "Verbose"
|
|
|
|
endchoice
|
|
|
|
|
|
|
|
config MBEDTLS_DEBUG_LEVEL
|
|
|
|
int
|
|
|
|
default 1 if MBEDTLS_DEBUG_LEVEL_WARN
|
|
|
|
default 2 if MBEDTLS_DEBUG_LEVEL_INFO
|
|
|
|
default 3 if MBEDTLS_DEBUG_LEVEL_DEBUG
|
|
|
|
default 4 if MBEDTLS_DEBUG_LEVEL_VERBOSE
|
|
|
|
|
2022-02-20 16:44:25 -05:00
|
|
|
menu "mbedTLS v3.x related"
|
2022-03-09 07:54:44 -05:00
|
|
|
# NOTE: MBEDTLS_DYNAMIC_BUFFER feature is not supported with TLS 1.3 yet. Ref: IDF-4762
|
2022-02-20 16:44:25 -05:00
|
|
|
config MBEDTLS_SSL_PROTO_TLS1_3
|
|
|
|
bool "Support TLS 1.3 protocol"
|
2022-03-09 07:54:44 -05:00
|
|
|
depends on MBEDTLS_TLS_ENABLED && MBEDTLS_SSL_KEEP_PEER_CERTIFICATE && !MBEDTLS_DYNAMIC_BUFFER
|
2022-02-22 02:15:22 -05:00
|
|
|
select MBEDTLS_HKDF_C
|
2022-02-20 16:44:25 -05:00
|
|
|
default n
|
|
|
|
|
2023-01-04 06:02:37 -05:00
|
|
|
menu "TLS 1.3 related configurations"
|
2022-02-20 16:44:25 -05:00
|
|
|
depends on MBEDTLS_SSL_PROTO_TLS1_3
|
2023-01-04 06:02:37 -05:00
|
|
|
|
|
|
|
config MBEDTLS_SSL_TLS1_3_COMPATIBILITY_MODE
|
|
|
|
bool "TLS 1.3 middlebox compatibility mode"
|
|
|
|
default y
|
|
|
|
|
|
|
|
config MBEDTLS_SSL_TLS1_3_KEXM_PSK
|
|
|
|
bool "TLS 1.3 PSK key exchange mode"
|
|
|
|
default y
|
|
|
|
|
|
|
|
config MBEDTLS_SSL_TLS1_3_KEXM_EPHEMERAL
|
|
|
|
bool "TLS 1.3 ephemeral key exchange mode"
|
|
|
|
default y
|
|
|
|
|
|
|
|
config MBEDTLS_SSL_TLS1_3_KEXM_PSK_EPHEMERAL
|
|
|
|
bool "TLS 1.3 PSK ephemeral key exchange mode"
|
|
|
|
default y
|
|
|
|
|
|
|
|
endmenu
|
2022-01-23 23:34:05 -05:00
|
|
|
|
|
|
|
config MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH
|
|
|
|
bool "Variable SSL buffer length"
|
|
|
|
default n
|
|
|
|
help
|
|
|
|
This enables the SSL buffer to be resized automatically
|
|
|
|
based on the negotiated maximum fragment length in each direction.
|
|
|
|
|
|
|
|
config MBEDTLS_ECDH_LEGACY_CONTEXT
|
|
|
|
bool "Use a backward compatible ECDH context (Experimental)"
|
2022-02-10 21:25:31 -05:00
|
|
|
default n
|
2022-01-23 23:34:05 -05:00
|
|
|
depends on MBEDTLS_ECDH_C && MBEDTLS_ECP_RESTARTABLE
|
|
|
|
help
|
|
|
|
Use the legacy ECDH context format.
|
|
|
|
Define this option only if you enable MBEDTLS_ECP_RESTARTABLE or if you
|
|
|
|
want to access ECDH context fields directly.
|
|
|
|
|
|
|
|
config MBEDTLS_X509_TRUSTED_CERT_CALLBACK
|
|
|
|
bool "Enable trusted certificate callbacks"
|
|
|
|
default n
|
|
|
|
help
|
|
|
|
Enables users to configure the set of trusted certificates
|
|
|
|
through a callback instead of a linked list.
|
|
|
|
|
|
|
|
See mbedTLS documentation for required API and more details.
|
|
|
|
|
|
|
|
config MBEDTLS_SSL_CONTEXT_SERIALIZATION
|
|
|
|
bool "Enable serialization of the TLS context structures"
|
|
|
|
default n
|
2023-01-04 06:02:37 -05:00
|
|
|
depends on MBEDTLS_GCM_C || MBEDTLS_CCM_C || MBEDTLS_CHACHAPOLY_C
|
2022-01-23 23:34:05 -05:00
|
|
|
help
|
|
|
|
Enable serialization of the TLS context structures
|
|
|
|
This is a local optimization in handling a single, potentially long-lived connection.
|
|
|
|
|
|
|
|
See mbedTLS documentation for required API and more details.
|
|
|
|
Disabling this option will save some code size.
|
|
|
|
|
|
|
|
config MBEDTLS_SSL_KEEP_PEER_CERTIFICATE
|
|
|
|
bool "Keep peer certificate after handshake completion"
|
|
|
|
default y
|
|
|
|
help
|
|
|
|
Keep the peer's certificate after completion of the handshake.
|
|
|
|
Disabling this option will save about 4kB of heap and some code size.
|
|
|
|
|
|
|
|
See mbedTLS documentation for required API and more details.
|
|
|
|
|
2023-04-03 05:18:48 -04:00
|
|
|
config MBEDTLS_PKCS7_C
|
|
|
|
bool "Enable PKCS #7"
|
|
|
|
default y
|
|
|
|
depends on MBEDTLS_X509_CRL_PARSE_C
|
|
|
|
help
|
|
|
|
Enable PKCS #7 core for using PKCS #7-formatted signatures.
|
|
|
|
|
2023-09-01 14:08:14 -04:00
|
|
|
config MBEDTLS_SSL_CID_PADDING_GRANULARITY
|
|
|
|
int "Record plaintext padding"
|
|
|
|
default 16
|
|
|
|
range 0 32
|
|
|
|
depends on MBEDTLS_SSL_PROTO_TLS1_3 || MBEDTLS_SSL_DTLS_CONNECTION_ID
|
|
|
|
help
|
|
|
|
Controls the use of record plaintext padding in TLS 1.3 and
|
|
|
|
when using the Connection ID extension in DTLS 1.2.
|
|
|
|
|
|
|
|
The padding will always be chosen so that the length of the
|
|
|
|
padded plaintext is a multiple of the value of this option.
|
|
|
|
|
|
|
|
Notes:
|
|
|
|
A value of 1 means that no padding will be used for outgoing records.
|
|
|
|
On systems lacking division instructions, a power of two should be preferred.
|
|
|
|
|
2022-01-23 23:34:05 -05:00
|
|
|
menu "DTLS-based configurations"
|
2023-01-04 06:02:37 -05:00
|
|
|
depends on MBEDTLS_SSL_PROTO_DTLS
|
2022-01-23 23:34:05 -05:00
|
|
|
|
|
|
|
config MBEDTLS_SSL_DTLS_CONNECTION_ID
|
|
|
|
bool "Support for the DTLS Connection ID extension"
|
|
|
|
default n
|
|
|
|
help
|
|
|
|
Enable support for the DTLS Connection ID extension which allows to
|
|
|
|
identify DTLS connections across changes in the underlying transport.
|
|
|
|
|
|
|
|
config MBEDTLS_SSL_CID_IN_LEN_MAX
|
|
|
|
int "Maximum length of CIDs used for incoming DTLS messages"
|
|
|
|
default 32
|
|
|
|
range 0 32
|
|
|
|
depends on MBEDTLS_SSL_DTLS_CONNECTION_ID
|
|
|
|
help
|
|
|
|
Maximum length of CIDs used for incoming DTLS messages
|
|
|
|
|
|
|
|
config MBEDTLS_SSL_CID_OUT_LEN_MAX
|
|
|
|
int "Maximum length of CIDs used for outgoing DTLS messages"
|
|
|
|
default 32
|
|
|
|
range 0 32
|
|
|
|
depends on MBEDTLS_SSL_DTLS_CONNECTION_ID
|
|
|
|
help
|
|
|
|
Maximum length of CIDs used for outgoing DTLS messages
|
|
|
|
|
|
|
|
config MBEDTLS_SSL_DTLS_SRTP
|
|
|
|
bool "Enable support for negotiation of DTLS-SRTP (RFC 5764)"
|
|
|
|
default n
|
|
|
|
help
|
|
|
|
Enable support for negotiation of DTLS-SRTP (RFC 5764) through the use_srtp extension.
|
|
|
|
|
|
|
|
See mbedTLS documentation for required API and more details.
|
|
|
|
Disabling this option will save some code size.
|
|
|
|
|
|
|
|
endmenu
|
|
|
|
|
|
|
|
endmenu
|
2019-09-29 06:04:34 -04:00
|
|
|
|
|
|
|
menu "Certificate Bundle"
|
|
|
|
|
|
|
|
config MBEDTLS_CERTIFICATE_BUNDLE
|
|
|
|
bool "Enable trusted root certificate bundle"
|
|
|
|
default y
|
|
|
|
help
|
|
|
|
Enable support for large number of default root certificates
|
|
|
|
|
|
|
|
When enabled this option allows user to store default as well
|
|
|
|
as customer specific root certificates in compressed format rather
|
|
|
|
than storing full certificate. For the root certificates the public key and the subject name
|
|
|
|
will be stored.
|
|
|
|
|
|
|
|
choice MBEDTLS_DEFAULT_CERTIFICATE_BUNDLE
|
|
|
|
bool "Default certificate bundle options"
|
|
|
|
depends on MBEDTLS_CERTIFICATE_BUNDLE
|
|
|
|
default MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_FULL
|
|
|
|
|
|
|
|
config MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_FULL
|
|
|
|
bool "Use the full default certificate bundle"
|
|
|
|
config MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_CMN
|
|
|
|
bool "Use only the most common certificates from the default bundles"
|
|
|
|
help
|
|
|
|
Use only the most common certificates from the default bundles, reducing the size with 50%,
|
|
|
|
while still having around 99% coverage.
|
|
|
|
config MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_NONE
|
|
|
|
bool "Do not use the default certificate bundle"
|
|
|
|
endchoice
|
|
|
|
|
|
|
|
config MBEDTLS_CUSTOM_CERTIFICATE_BUNDLE
|
|
|
|
depends on MBEDTLS_CERTIFICATE_BUNDLE
|
|
|
|
default n
|
|
|
|
bool "Add custom certificates to the default bundle"
|
|
|
|
config MBEDTLS_CUSTOM_CERTIFICATE_BUNDLE_PATH
|
|
|
|
depends on MBEDTLS_CUSTOM_CERTIFICATE_BUNDLE
|
|
|
|
string "Custom certificate bundle path"
|
|
|
|
help
|
|
|
|
Name of the custom certificate directory or file. This path is evaluated
|
|
|
|
relative to the project root directory.
|
2022-03-29 23:57:46 -04:00
|
|
|
|
|
|
|
config MBEDTLS_CERTIFICATE_BUNDLE_MAX_CERTS
|
|
|
|
int "Maximum no of certificates allowed in certificate bundle"
|
|
|
|
default 200
|
|
|
|
depends on MBEDTLS_CERTIFICATE_BUNDLE
|
|
|
|
|
2019-09-29 06:04:34 -04:00
|
|
|
endmenu
|
|
|
|
|
2019-09-30 02:15:43 -04:00
|
|
|
config MBEDTLS_ECP_RESTARTABLE
|
|
|
|
bool "Enable mbedTLS ecp restartable"
|
2022-02-10 21:25:31 -05:00
|
|
|
select MBEDTLS_ECDH_LEGACY_CONTEXT
|
2023-04-03 05:18:48 -04:00
|
|
|
depends on MBEDTLS_ECP_C
|
2019-09-30 02:15:43 -04:00
|
|
|
default n
|
|
|
|
help
|
|
|
|
Enable "non-blocking" ECC operations that can return early and be resumed.
|
|
|
|
|
|
|
|
config MBEDTLS_CMAC_C
|
|
|
|
bool "Enable CMAC mode for block ciphers"
|
|
|
|
default n
|
2021-06-14 01:46:28 -04:00
|
|
|
depends on MBEDTLS_AES_C || MBEDTLS_DES_C
|
2019-09-30 02:15:43 -04:00
|
|
|
help
|
|
|
|
Enable the CMAC (Cipher-based Message Authentication Code) mode for
|
|
|
|
block ciphers.
|
|
|
|
|
2019-01-25 11:10:53 -05:00
|
|
|
config MBEDTLS_HARDWARE_AES
|
|
|
|
bool "Enable hardware AES acceleration"
|
|
|
|
default y
|
2022-03-17 05:41:52 -04:00
|
|
|
depends on !SPIRAM_CACHE_WORKAROUND_STRATEGY_DUPLDST && SOC_AES_SUPPORTED
|
2019-01-25 11:10:53 -05:00
|
|
|
help
|
|
|
|
Enable hardware accelerated AES encryption & decryption.
|
|
|
|
|
|
|
|
Note that if the ESP32 CPU is running at 240MHz, hardware AES does not
|
|
|
|
offer any speed boost over software AES.
|
|
|
|
|
2020-01-16 01:31:10 -05:00
|
|
|
config MBEDTLS_AES_USE_INTERRUPT
|
|
|
|
bool "Use interrupt for long AES operations"
|
2021-03-30 08:12:08 -04:00
|
|
|
depends on !IDF_TARGET_ESP32 && MBEDTLS_HARDWARE_AES
|
2020-01-16 01:31:10 -05:00
|
|
|
default y
|
|
|
|
help
|
|
|
|
Use an interrupt to coordinate long AES operations.
|
|
|
|
|
|
|
|
This allows other code to run on the CPU while an AES operation is pending.
|
|
|
|
Otherwise the CPU busy-waits.
|
|
|
|
|
2023-09-25 03:58:29 -04:00
|
|
|
config MBEDTLS_AES_INTERRUPT_LEVEL
|
|
|
|
int "AES hardware interrupt level"
|
|
|
|
default 0
|
|
|
|
depends on MBEDTLS_AES_USE_INTERRUPT
|
|
|
|
range 0 3
|
|
|
|
help
|
|
|
|
This config helps to set the interrupt priority level for the AES peripheral.
|
|
|
|
Value 0 (default) means that there is no preference regarding the interrupt
|
|
|
|
priority level and any level from 1 to 3 can be selected (based on the availability).
|
|
|
|
Note: Higher value indicates high interrupt priority.
|
|
|
|
|
2020-01-16 01:31:10 -05:00
|
|
|
config MBEDTLS_HARDWARE_GCM
|
|
|
|
bool "Enable partially hardware accelerated GCM"
|
2022-03-17 05:41:52 -04:00
|
|
|
depends on SOC_AES_SUPPORT_GCM && MBEDTLS_HARDWARE_AES
|
2020-03-17 06:21:30 -04:00
|
|
|
default y
|
2020-01-16 01:31:10 -05:00
|
|
|
help
|
2020-03-10 01:53:09 -04:00
|
|
|
Enable partially hardware accelerated GCM. GHASH calculation is still done
|
|
|
|
in software.
|
2020-01-16 01:31:10 -05:00
|
|
|
|
2020-03-10 01:53:09 -04:00
|
|
|
If MBEDTLS_HARDWARE_GCM is disabled and MBEDTLS_HARDWARE_AES is enabled then
|
|
|
|
mbedTLS will still use the hardware accelerated AES block operation, but
|
|
|
|
on a single block at a time.
|
2020-01-16 01:31:10 -05:00
|
|
|
|
2023-12-19 03:01:49 -05:00
|
|
|
config MBEDTLS_GCM_SUPPORT_NON_AES_CIPHER
|
|
|
|
bool "Enable support for non-AES ciphers in GCM operation"
|
|
|
|
depends on MBEDTLS_HARDWARE_AES
|
|
|
|
default n
|
|
|
|
help
|
|
|
|
Enable this config to support fallback to software definitions for a non-AES
|
|
|
|
cipher GCM operation as we support hardware acceleration only for AES cipher.
|
|
|
|
Some of the non-AES ciphers used in a GCM operation are DES, ARIA, CAMELLIA,
|
|
|
|
CHACHA20, BLOWFISH.
|
|
|
|
|
|
|
|
If this config is disabled, performing a non-AES cipher GCM operation with
|
|
|
|
the config MBEDTLS_HARDWARE_AES enabled will result in calculation of an
|
|
|
|
AES-GCM operation instead for the given input values and thus could lead
|
|
|
|
to failure in certificate validation which would ultimately lead to a SSL
|
|
|
|
handshake failure.
|
|
|
|
|
|
|
|
This config being by-default enabled leads to an increase in binary size
|
|
|
|
footprint of ~2.5KB.
|
|
|
|
In case you are sure that your use case (for example, client and server
|
|
|
|
configurations in case of a TLS handshake) would not involve any GCM
|
|
|
|
operations using a non-AES cipher, you can safely disable this config,
|
|
|
|
leading to reduction in binary size footprint.
|
|
|
|
|
2019-01-25 11:10:53 -05:00
|
|
|
config MBEDTLS_HARDWARE_MPI
|
|
|
|
bool "Enable hardware MPI (bignum) acceleration"
|
mbedtls: Add Montgomery exponentiation implementation (HAC 14.94)
It gave us a better performance of RSA operations. (2~11 times)
The old modexp implementation (Z = X ^ Y mod M) loaded all the data into
the hw registers and was waiting for completion, but due to
the hardware RSA implementation, the calculations always started with 4096 bit,
which took a lot of time.
Measurement results (measurements were made for keys: 2048, 3072 and 4096 bits)
(Old) - Sliding-window exponentiation (HAC 14.85):
keysize = 2048 bits
RSA key operation (performance): public [93206 us], private [280189 us]
keysize = 3072 bits
RSA key operation (performance): public [293614 us], private [858157 us]
keysize = 4096 bits
RSA key operation (performance): public [653192 us], private [1912126 us]
Instead (Old) - Sliding-window exponentiation (HAC 14.85) was implemented
(New) - Montgomery exponentiation (HAC 14.94) which showed
better performance on private and public keys.
keysize = 2048 bits
RSA key operation (performance): public [14504 us], private [149456 us]
keysize = 3072 bits
RSA key operation (performance): public [35073 us], private [392743 us]
keysize = 4096 bits
RSA key operation (performance): public [58650 us], private [787186 us]
For this reason, the old implementation was removed
and the MBEDTLS_HARDWARE_MPI option was turned on by default.
Why the MPI_INTERRUPT option is removed:
the old implementation used calculations on the hardware and
it took a lot of time (10ms - 500ms). And in order not to stand idle
while waiting for completion, an interrupt option was added.
This made it possible to carry out other tasks during the calculation,
and this one to block. The new method is free from such a drawback and
the maximum duration of one RSA HW operation does not exceed 70us (usually 2-70 μs).
This option is no longer needed.
Closes: IDF-965
2019-10-19 06:03:18 -04:00
|
|
|
default y
|
2022-03-17 05:41:52 -04:00
|
|
|
depends on !SPIRAM_CACHE_WORKAROUND_STRATEGY_DUPLDST && SOC_MPI_SUPPORTED
|
2019-01-25 11:10:53 -05:00
|
|
|
help
|
|
|
|
Enable hardware accelerated multiple precision integer operations.
|
|
|
|
|
|
|
|
Hardware accelerated multiplication, modulo multiplication,
|
2021-11-19 04:10:37 -05:00
|
|
|
and modular exponentiation for up to SOC_RSA_MAX_BIT_LEN bit results.
|
2019-01-25 11:10:53 -05:00
|
|
|
|
|
|
|
These operations are used by RSA.
|
|
|
|
|
2021-12-27 23:04:05 -05:00
|
|
|
config MBEDTLS_MPI_USE_INTERRUPT
|
|
|
|
bool "Use interrupt for MPI exp-mod operations"
|
|
|
|
depends on !IDF_TARGET_ESP32 && MBEDTLS_HARDWARE_MPI
|
2022-01-04 03:43:46 -05:00
|
|
|
default y
|
2021-12-27 23:04:05 -05:00
|
|
|
help
|
|
|
|
Use an interrupt to coordinate long MPI operations.
|
|
|
|
|
|
|
|
This allows other code to run on the CPU while an MPI operation is pending.
|
|
|
|
Otherwise the CPU busy-waits.
|
|
|
|
|
2023-09-25 03:58:29 -04:00
|
|
|
config MBEDTLS_MPI_INTERRUPT_LEVEL
|
|
|
|
int "MPI hardware interrupt level"
|
|
|
|
default 0
|
|
|
|
depends on MBEDTLS_MPI_USE_INTERRUPT
|
|
|
|
range 0 3
|
|
|
|
help
|
|
|
|
This config helps to set the interrupt priority level for the MPI peripheral.
|
|
|
|
Value 0 (default) means that there is no preference regarding the interrupt
|
|
|
|
priority level and any level from 1 to 3 can be selected (based on the availability).
|
|
|
|
Note: Higher value indicates high interrupt priority.
|
|
|
|
|
2019-01-25 11:10:53 -05:00
|
|
|
config MBEDTLS_HARDWARE_SHA
|
|
|
|
bool "Enable hardware SHA acceleration"
|
2019-10-17 04:30:46 -04:00
|
|
|
default y
|
2022-03-21 05:45:14 -04:00
|
|
|
depends on !SPIRAM_CACHE_WORKAROUND_STRATEGY_DUPLDST && SOC_SHA_SUPPORTED
|
2019-01-25 11:10:53 -05:00
|
|
|
help
|
|
|
|
Enable hardware accelerated SHA1, SHA256, SHA384 & SHA512 in mbedTLS.
|
|
|
|
|
2020-01-16 01:31:10 -05:00
|
|
|
Due to a hardware limitation, on the ESP32 hardware acceleration is only
|
2019-01-25 11:10:53 -05:00
|
|
|
guaranteed if SHA digests are calculated one at a time. If more
|
|
|
|
than one SHA digest is calculated at the same time, one will
|
|
|
|
be calculated fully in hardware and the rest will be calculated
|
|
|
|
(at least partially calculated) in software. This happens automatically.
|
|
|
|
|
|
|
|
SHA hardware acceleration is faster than software in some situations but
|
|
|
|
slower in others. You should benchmark to find the best setting for you.
|
|
|
|
|
2022-01-05 12:25:28 -05:00
|
|
|
config MBEDTLS_HARDWARE_ECC
|
|
|
|
bool "Enable hardware ECC acceleration"
|
|
|
|
default y
|
|
|
|
depends on SOC_ECC_SUPPORTED
|
|
|
|
help
|
|
|
|
Enable hardware accelerated ECC point multiplication and point verification for points
|
|
|
|
on curve SECP192R1 and SECP256R1 in mbedTLS
|
|
|
|
|
|
|
|
config MBEDTLS_ECC_OTHER_CURVES_SOFT_FALLBACK
|
|
|
|
bool "Fallback to software implementation for curves not supported in hardware"
|
|
|
|
depends on MBEDTLS_HARDWARE_ECC
|
|
|
|
default y
|
|
|
|
help
|
|
|
|
Fallback to software implementation of ECC point multiplication and point verification
|
|
|
|
for curves not supported in hardware.
|
|
|
|
|
2021-04-06 02:21:28 -04:00
|
|
|
config MBEDTLS_ROM_MD5
|
|
|
|
bool "Use MD5 implementation in ROM"
|
|
|
|
default y
|
|
|
|
help
|
|
|
|
Use ROM MD5 in mbedTLS.
|
|
|
|
|
2023-03-06 07:01:38 -05:00
|
|
|
config MBEDTLS_HARDWARE_ECDSA_SIGN
|
|
|
|
bool "Enable ECDSA signing using on-chip ECDSA peripheral"
|
|
|
|
default n
|
|
|
|
depends on SOC_ECDSA_SUPPORTED
|
|
|
|
help
|
|
|
|
Enable hardware accelerated ECDSA peripheral to sign data
|
|
|
|
on curve SECP192R1 and SECP256R1 in mbedTLS.
|
|
|
|
|
|
|
|
Note that for signing, the private key has to be burnt in an efuse key block
|
|
|
|
with key purpose set to ECDSA_KEY.
|
|
|
|
If no key is burnt, it will report an error
|
|
|
|
|
|
|
|
The key should be burnt in little endian format. espefuse.py utility handles it internally
|
|
|
|
but care needs to be taken while burning using esp_efuse APIs
|
|
|
|
|
|
|
|
config MBEDTLS_HARDWARE_ECDSA_VERIFY
|
|
|
|
bool "Enable ECDSA signature verification using on-chip ECDSA peripheral"
|
|
|
|
default y
|
|
|
|
depends on SOC_ECDSA_SUPPORTED
|
|
|
|
help
|
|
|
|
Enable hardware accelerated ECDSA peripheral to verify signature
|
|
|
|
on curve SECP192R1 and SECP256R1 in mbedTLS.
|
|
|
|
|
2020-04-06 10:42:52 -04:00
|
|
|
config MBEDTLS_ATCA_HW_ECDSA_SIGN
|
2019-02-10 14:38:11 -05:00
|
|
|
bool "Enable hardware ECDSA sign acceleration when using ATECC608A"
|
|
|
|
default n
|
|
|
|
help
|
|
|
|
This option enables hardware acceleration for ECDSA sign function, only
|
|
|
|
when using ATECC608A cryptoauth chip (integrated with ESP32-WROOM-32SE)
|
|
|
|
|
2020-04-06 10:42:52 -04:00
|
|
|
config MBEDTLS_ATCA_HW_ECDSA_VERIFY
|
2019-02-10 14:38:11 -05:00
|
|
|
bool "Enable hardware ECDSA verify acceleration when using ATECC608A"
|
|
|
|
default n
|
|
|
|
help
|
|
|
|
This option enables hardware acceleration for ECDSA sign function, only
|
|
|
|
when using ATECC608A cryptoauth chip (integrated with ESP32-WROOM-32SE)
|
|
|
|
|
2019-01-25 11:10:53 -05:00
|
|
|
config MBEDTLS_HAVE_TIME
|
2021-01-03 18:25:51 -05:00
|
|
|
bool "Enable mbedtls time support"
|
2020-10-20 02:09:32 -04:00
|
|
|
depends on !ESP_TIME_FUNCS_USE_NONE
|
2019-01-25 11:10:53 -05:00
|
|
|
default y
|
|
|
|
help
|
2021-01-03 18:25:51 -05:00
|
|
|
Enable use of time.h functions (time() and gmtime()) by mbedTLS.
|
|
|
|
|
|
|
|
This option doesn't require the system time to be correct, but enables
|
|
|
|
functionality that requires relative timekeeping - for example periodic
|
|
|
|
expiry of TLS session tickets or session cache entries.
|
|
|
|
|
|
|
|
Disabling this option will save some firmware size, particularly if
|
|
|
|
the rest of the firmware doesn't call any standard timekeeeping
|
|
|
|
functions.
|
2019-01-25 11:10:53 -05:00
|
|
|
|
2022-03-10 02:29:56 -05:00
|
|
|
config MBEDTLS_PLATFORM_TIME_ALT
|
|
|
|
bool "Enable mbedtls time support: platform-specific"
|
|
|
|
depends on MBEDTLS_HAVE_TIME
|
|
|
|
default n
|
|
|
|
help
|
|
|
|
Enabling this config will provide users with a function
|
|
|
|
"mbedtls_platform_set_time()" that allows to set an alternative
|
|
|
|
time function pointer.
|
|
|
|
|
2019-01-25 11:10:53 -05:00
|
|
|
config MBEDTLS_HAVE_TIME_DATE
|
|
|
|
bool "Enable mbedtls certificate expiry check"
|
|
|
|
depends on MBEDTLS_HAVE_TIME
|
|
|
|
default n
|
|
|
|
help
|
2021-01-03 18:25:51 -05:00
|
|
|
Enables X.509 certificate expiry checks in mbedTLS.
|
|
|
|
|
|
|
|
If this option is disabled (default) then X.509 certificate
|
|
|
|
"valid from" and "valid to" timestamp fields are ignored.
|
|
|
|
|
|
|
|
If this option is enabled, these fields are compared with the
|
|
|
|
current system date and time. The time is retrieved using the
|
|
|
|
standard time() and gmtime() functions. If the certificate is not
|
|
|
|
valid for the current system time then verification will fail with
|
|
|
|
code MBEDTLS_X509_BADCERT_FUTURE or MBEDTLS_X509_BADCERT_EXPIRED.
|
|
|
|
|
|
|
|
Enabling this option requires adding functionality in the firmware
|
|
|
|
to set the system clock to a valid timestamp before using TLS. The
|
|
|
|
recommended way to do this is via ESP-IDF's SNTP functionality, but
|
|
|
|
any method can be used.
|
|
|
|
|
|
|
|
In the case where only a small number of certificates are trusted by
|
|
|
|
the device, please carefully consider the tradeoffs of enabling this
|
|
|
|
option. There may be undesired consequences, for example if all
|
|
|
|
trusted certificates expire while the device is offline and a TLS
|
|
|
|
connection is required to update. Or if an issue with the SNTP
|
|
|
|
server means that the system time is invalid for an extended period
|
|
|
|
after a reset.
|
2019-01-25 11:10:53 -05:00
|
|
|
|
2020-04-23 02:11:24 -04:00
|
|
|
config MBEDTLS_ECDSA_DETERMINISTIC
|
|
|
|
bool "Enable deterministic ECDSA"
|
|
|
|
default y
|
|
|
|
help
|
|
|
|
Standard ECDSA is "fragile" in the sense that lack of entropy when signing
|
|
|
|
may result in a compromise of the long-term signing key.
|
|
|
|
|
|
|
|
config MBEDTLS_SHA512_C
|
|
|
|
bool "Enable the SHA-384 and SHA-512 cryptographic hash algorithms"
|
|
|
|
default y
|
|
|
|
help
|
|
|
|
Enable MBEDTLS_SHA512_C adds support for SHA-384 and SHA-512.
|
|
|
|
|
2019-01-25 11:10:53 -05:00
|
|
|
choice MBEDTLS_TLS_MODE
|
|
|
|
bool "TLS Protocol Role"
|
|
|
|
default MBEDTLS_TLS_SERVER_AND_CLIENT
|
|
|
|
help
|
|
|
|
mbedTLS can be compiled with protocol support for the TLS
|
|
|
|
server, TLS client, or both server and client.
|
|
|
|
|
|
|
|
Reducing the number of TLS roles supported saves code size.
|
|
|
|
|
|
|
|
config MBEDTLS_TLS_SERVER_AND_CLIENT
|
|
|
|
bool "Server & Client"
|
|
|
|
select MBEDTLS_TLS_SERVER
|
|
|
|
select MBEDTLS_TLS_CLIENT
|
|
|
|
config MBEDTLS_TLS_SERVER_ONLY
|
|
|
|
bool "Server"
|
|
|
|
select MBEDTLS_TLS_SERVER
|
|
|
|
config MBEDTLS_TLS_CLIENT_ONLY
|
|
|
|
bool "Client"
|
|
|
|
select MBEDTLS_TLS_CLIENT
|
|
|
|
config MBEDTLS_TLS_DISABLED
|
|
|
|
bool "None"
|
|
|
|
|
|
|
|
endchoice
|
|
|
|
|
|
|
|
config MBEDTLS_TLS_SERVER
|
|
|
|
bool
|
|
|
|
select MBEDTLS_TLS_ENABLED
|
|
|
|
config MBEDTLS_TLS_CLIENT
|
|
|
|
bool
|
|
|
|
select MBEDTLS_TLS_ENABLED
|
|
|
|
config MBEDTLS_TLS_ENABLED
|
|
|
|
bool
|
|
|
|
|
|
|
|
menu "TLS Key Exchange Methods"
|
|
|
|
depends on MBEDTLS_TLS_ENABLED
|
|
|
|
|
|
|
|
config MBEDTLS_PSK_MODES
|
|
|
|
bool "Enable pre-shared-key ciphersuites"
|
|
|
|
default n
|
|
|
|
help
|
|
|
|
Enable to show configuration for different types of pre-shared-key TLS authentatication methods.
|
|
|
|
|
|
|
|
Leaving this options disabled will save code size if they are not used.
|
|
|
|
|
|
|
|
config MBEDTLS_KEY_EXCHANGE_PSK
|
|
|
|
bool "Enable PSK based ciphersuite modes"
|
|
|
|
depends on MBEDTLS_PSK_MODES
|
|
|
|
default n
|
|
|
|
help
|
|
|
|
Enable to support symmetric key PSK (pre-shared-key) TLS key exchange modes.
|
|
|
|
|
|
|
|
config MBEDTLS_KEY_EXCHANGE_DHE_PSK
|
|
|
|
bool "Enable DHE-PSK based ciphersuite modes"
|
2021-10-25 09:05:50 -04:00
|
|
|
depends on MBEDTLS_PSK_MODES && MBEDTLS_DHM_C
|
2019-01-25 11:10:53 -05:00
|
|
|
default y
|
|
|
|
help
|
|
|
|
Enable to support Diffie-Hellman PSK (pre-shared-key) TLS authentication modes.
|
|
|
|
|
|
|
|
config MBEDTLS_KEY_EXCHANGE_ECDHE_PSK
|
|
|
|
bool "Enable ECDHE-PSK based ciphersuite modes"
|
2019-08-30 01:01:43 -04:00
|
|
|
depends on MBEDTLS_PSK_MODES && MBEDTLS_ECDH_C
|
2019-01-25 11:10:53 -05:00
|
|
|
default y
|
|
|
|
help
|
|
|
|
Enable to support Elliptic-Curve-Diffie-Hellman PSK (pre-shared-key) TLS authentication modes.
|
|
|
|
|
|
|
|
config MBEDTLS_KEY_EXCHANGE_RSA_PSK
|
|
|
|
bool "Enable RSA-PSK based ciphersuite modes"
|
|
|
|
depends on MBEDTLS_PSK_MODES
|
|
|
|
default y
|
|
|
|
help
|
|
|
|
Enable to support RSA PSK (pre-shared-key) TLS authentication modes.
|
|
|
|
|
|
|
|
config MBEDTLS_KEY_EXCHANGE_RSA
|
|
|
|
bool "Enable RSA-only based ciphersuite modes"
|
|
|
|
default y
|
|
|
|
help
|
|
|
|
Enable to support ciphersuites with prefix TLS-RSA-WITH-
|
|
|
|
|
|
|
|
config MBEDTLS_KEY_EXCHANGE_DHE_RSA
|
|
|
|
bool "Enable DHE-RSA based ciphersuite modes"
|
|
|
|
default y
|
2021-10-25 09:05:50 -04:00
|
|
|
depends on MBEDTLS_DHM_C
|
2019-01-25 11:10:53 -05:00
|
|
|
help
|
|
|
|
Enable to support ciphersuites with prefix TLS-DHE-RSA-WITH-
|
|
|
|
|
|
|
|
config MBEDTLS_KEY_EXCHANGE_ELLIPTIC_CURVE
|
|
|
|
bool "Support Elliptic Curve based ciphersuites"
|
|
|
|
depends on MBEDTLS_ECP_C
|
|
|
|
default y
|
|
|
|
help
|
|
|
|
Enable to show Elliptic Curve based ciphersuite mode options.
|
|
|
|
|
|
|
|
Disabling all Elliptic Curve ciphersuites saves code size and
|
|
|
|
can give slightly faster TLS handshakes, provided the server supports
|
|
|
|
RSA-only ciphersuite modes.
|
|
|
|
|
|
|
|
config MBEDTLS_KEY_EXCHANGE_ECDHE_RSA
|
|
|
|
bool "Enable ECDHE-RSA based ciphersuite modes"
|
|
|
|
depends on MBEDTLS_KEY_EXCHANGE_ELLIPTIC_CURVE && MBEDTLS_ECDH_C
|
|
|
|
default y
|
|
|
|
help
|
|
|
|
Enable to support ciphersuites with prefix TLS-ECDHE-RSA-WITH-
|
|
|
|
|
|
|
|
config MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA
|
|
|
|
bool "Enable ECDHE-ECDSA based ciphersuite modes"
|
|
|
|
depends on MBEDTLS_KEY_EXCHANGE_ELLIPTIC_CURVE && MBEDTLS_ECDH_C && MBEDTLS_ECDSA_C
|
|
|
|
default y
|
|
|
|
help
|
|
|
|
Enable to support ciphersuites with prefix TLS-ECDHE-RSA-WITH-
|
|
|
|
|
|
|
|
config MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA
|
|
|
|
bool "Enable ECDH-ECDSA based ciphersuite modes"
|
|
|
|
depends on MBEDTLS_KEY_EXCHANGE_ELLIPTIC_CURVE && MBEDTLS_ECDH_C && MBEDTLS_ECDSA_C
|
|
|
|
default y
|
|
|
|
help
|
|
|
|
Enable to support ciphersuites with prefix TLS-ECDHE-RSA-WITH-
|
|
|
|
|
|
|
|
config MBEDTLS_KEY_EXCHANGE_ECDH_RSA
|
|
|
|
bool "Enable ECDH-RSA based ciphersuite modes"
|
|
|
|
depends on MBEDTLS_KEY_EXCHANGE_ELLIPTIC_CURVE && MBEDTLS_ECDH_C
|
|
|
|
default y
|
|
|
|
help
|
|
|
|
Enable to support ciphersuites with prefix TLS-ECDHE-RSA-WITH-
|
|
|
|
|
2020-04-12 06:20:10 -04:00
|
|
|
config MBEDTLS_KEY_EXCHANGE_ECJPAKE
|
|
|
|
bool "Enable ECJPAKE based ciphersuite modes"
|
|
|
|
depends on MBEDTLS_ECJPAKE_C && MBEDTLS_ECP_DP_SECP256R1_ENABLED
|
|
|
|
default n
|
|
|
|
help
|
|
|
|
Enable to support ciphersuites with prefix TLS-ECJPAKE-WITH-
|
|
|
|
|
2019-01-25 11:10:53 -05:00
|
|
|
endmenu # TLS key exchange modes
|
|
|
|
|
|
|
|
config MBEDTLS_SSL_RENEGOTIATION
|
|
|
|
bool "Support TLS renegotiation"
|
|
|
|
depends on MBEDTLS_TLS_ENABLED
|
|
|
|
default y
|
|
|
|
help
|
|
|
|
The two main uses of renegotiation are (1) refresh keys on long-lived
|
|
|
|
connections and (2) client authentication after the initial handshake.
|
|
|
|
If you don't need renegotiation, disabling it will save code size and
|
|
|
|
reduce the possibility of abuse/vulnerability.
|
|
|
|
|
|
|
|
config MBEDTLS_SSL_PROTO_TLS1_2
|
|
|
|
bool "Support TLS 1.2 protocol"
|
|
|
|
depends on MBEDTLS_TLS_ENABLED
|
|
|
|
default y
|
|
|
|
|
2021-02-26 02:03:08 -05:00
|
|
|
config MBEDTLS_SSL_PROTO_GMTSSL1_1
|
|
|
|
bool "Support GM/T SSL 1.1 protocol"
|
|
|
|
depends on MBEDTLS_TLS_ENABLED
|
|
|
|
default n
|
|
|
|
help
|
|
|
|
Provisions for GM/T SSL 1.1 support
|
|
|
|
|
2019-01-25 11:10:53 -05:00
|
|
|
config MBEDTLS_SSL_PROTO_DTLS
|
|
|
|
bool "Support DTLS protocol (all versions)"
|
|
|
|
default n
|
2021-05-28 09:13:32 -04:00
|
|
|
depends on MBEDTLS_SSL_PROTO_TLS1_2
|
2019-01-25 11:10:53 -05:00
|
|
|
help
|
|
|
|
Requires TLS 1.2 to be enabled for DTLS 1.2
|
|
|
|
|
|
|
|
config MBEDTLS_SSL_ALPN
|
|
|
|
bool "Support ALPN (Application Layer Protocol Negotiation)"
|
|
|
|
depends on MBEDTLS_TLS_ENABLED
|
|
|
|
default y
|
|
|
|
help
|
|
|
|
Disabling this option will save some code size if it is not needed.
|
|
|
|
|
2018-10-15 20:28:29 -04:00
|
|
|
config MBEDTLS_CLIENT_SSL_SESSION_TICKETS
|
|
|
|
bool "TLS: Client Support for RFC 5077 SSL session tickets"
|
2019-01-25 11:10:53 -05:00
|
|
|
default y
|
|
|
|
depends on MBEDTLS_TLS_ENABLED
|
|
|
|
help
|
2018-10-15 20:28:29 -04:00
|
|
|
Client support for RFC 5077 session tickets. See mbedTLS documentation for more details.
|
|
|
|
Disabling this option will save some code size.
|
2019-01-25 11:10:53 -05:00
|
|
|
|
2018-10-15 20:28:29 -04:00
|
|
|
config MBEDTLS_SERVER_SSL_SESSION_TICKETS
|
|
|
|
bool "TLS: Server Support for RFC 5077 SSL session tickets"
|
|
|
|
default y
|
2023-01-04 06:02:37 -05:00
|
|
|
depends on MBEDTLS_TLS_ENABLED && (MBEDTLS_GCM_C || MBEDTLS_CCM_C || MBEDTLS_CHACHAPOLY_C)
|
2018-10-15 20:28:29 -04:00
|
|
|
help
|
|
|
|
Server support for RFC 5077 session tickets. See mbedTLS documentation for more details.
|
2019-01-25 11:10:53 -05:00
|
|
|
Disabling this option will save some code size.
|
|
|
|
|
|
|
|
menu "Symmetric Ciphers"
|
|
|
|
|
|
|
|
config MBEDTLS_AES_C
|
|
|
|
bool "AES block cipher"
|
|
|
|
default y
|
|
|
|
|
|
|
|
config MBEDTLS_CAMELLIA_C
|
|
|
|
bool "Camellia block cipher"
|
|
|
|
default n
|
|
|
|
|
|
|
|
config MBEDTLS_DES_C
|
|
|
|
bool "DES block cipher (legacy, insecure)"
|
|
|
|
default n
|
|
|
|
help
|
|
|
|
Enables the DES block cipher to support 3DES-based TLS ciphersuites.
|
|
|
|
|
|
|
|
3DES is vulnerable to the Sweet32 attack and should only be enabled
|
|
|
|
if absolutely necessary.
|
|
|
|
|
|
|
|
config MBEDTLS_BLOWFISH_C
|
|
|
|
bool "Blowfish block cipher (read help)"
|
|
|
|
default n
|
|
|
|
help
|
|
|
|
Enables the Blowfish block cipher (not used for TLS sessions.)
|
|
|
|
|
|
|
|
The Blowfish cipher is not used for mbedTLS TLS sessions but can be
|
|
|
|
used for other purposes. Read up on the limitations of Blowfish (including
|
|
|
|
Sweet32) before enabling.
|
|
|
|
|
|
|
|
config MBEDTLS_XTEA_C
|
|
|
|
bool "XTEA block cipher"
|
|
|
|
default n
|
|
|
|
help
|
|
|
|
Enables the XTEA block cipher.
|
|
|
|
|
|
|
|
|
|
|
|
config MBEDTLS_CCM_C
|
|
|
|
bool "CCM (Counter with CBC-MAC) block cipher modes"
|
|
|
|
default y
|
|
|
|
depends on MBEDTLS_AES_C || MBEDTLS_CAMELLIA_C
|
|
|
|
help
|
|
|
|
Enable Counter with CBC-MAC (CCM) modes for AES and/or Camellia ciphers.
|
|
|
|
|
|
|
|
Disabling this option saves some code size.
|
|
|
|
|
|
|
|
config MBEDTLS_GCM_C
|
|
|
|
bool "GCM (Galois/Counter) block cipher modes"
|
|
|
|
default y
|
|
|
|
depends on MBEDTLS_AES_C || MBEDTLS_CAMELLIA_C
|
|
|
|
help
|
|
|
|
Enable Galois/Counter Mode for AES and/or Camellia ciphers.
|
|
|
|
|
|
|
|
This option is generally faster than CCM.
|
|
|
|
|
2020-09-14 04:21:25 -04:00
|
|
|
config MBEDTLS_NIST_KW_C
|
|
|
|
bool "NIST key wrapping (KW) and KW padding (KWP)"
|
|
|
|
default n
|
|
|
|
depends on MBEDTLS_AES_C
|
|
|
|
help
|
|
|
|
Enable NIST key wrapping and key wrapping padding.
|
|
|
|
|
2019-01-25 11:10:53 -05:00
|
|
|
endmenu # Symmetric Ciphers
|
|
|
|
|
|
|
|
config MBEDTLS_RIPEMD160_C
|
|
|
|
bool "Enable RIPEMD-160 hash algorithm"
|
|
|
|
default n
|
|
|
|
help
|
|
|
|
Enable the RIPEMD-160 hash algorithm.
|
|
|
|
|
|
|
|
menu "Certificates"
|
|
|
|
|
|
|
|
config MBEDTLS_PEM_PARSE_C
|
|
|
|
bool "Read & Parse PEM formatted certificates"
|
|
|
|
default y
|
|
|
|
help
|
|
|
|
Enable decoding/parsing of PEM formatted certificates.
|
|
|
|
|
|
|
|
If your certificates are all in the simpler DER format, disabling
|
|
|
|
this option will save some code size.
|
|
|
|
|
|
|
|
config MBEDTLS_PEM_WRITE_C
|
|
|
|
bool "Write PEM formatted certificates"
|
|
|
|
default y
|
|
|
|
help
|
|
|
|
Enable writing of PEM formatted certificates.
|
|
|
|
|
|
|
|
If writing certificate data only in DER format, disabling this
|
|
|
|
option will save some code size.
|
|
|
|
|
|
|
|
config MBEDTLS_X509_CRL_PARSE_C
|
|
|
|
bool "X.509 CRL parsing"
|
|
|
|
default y
|
|
|
|
help
|
|
|
|
Support for parsing X.509 Certifificate Revocation Lists.
|
|
|
|
|
|
|
|
config MBEDTLS_X509_CSR_PARSE_C
|
|
|
|
bool "X.509 CSR parsing"
|
|
|
|
default y
|
|
|
|
help
|
|
|
|
Support for parsing X.509 Certifificate Signing Requests
|
|
|
|
|
|
|
|
endmenu # Certificates
|
|
|
|
|
|
|
|
menuconfig MBEDTLS_ECP_C
|
|
|
|
bool "Elliptic Curve Ciphers"
|
|
|
|
default y
|
|
|
|
|
2021-10-25 09:05:50 -04:00
|
|
|
config MBEDTLS_DHM_C
|
|
|
|
bool "Diffie-Hellman-Merkle key exchange (DHM)"
|
|
|
|
default n
|
|
|
|
help
|
|
|
|
Enable DHM. Needed to use DHE-xxx TLS ciphersuites.
|
|
|
|
|
|
|
|
Note that the security of Diffie-Hellman key exchanges depends on
|
|
|
|
a suitable prime being used for the exchange. Please see detailed
|
|
|
|
warning text about this in file `mbedtls/dhm.h` file.
|
|
|
|
|
2019-01-25 11:10:53 -05:00
|
|
|
config MBEDTLS_ECDH_C
|
|
|
|
bool "Elliptic Curve Diffie-Hellman (ECDH)"
|
|
|
|
depends on MBEDTLS_ECP_C
|
|
|
|
default y
|
|
|
|
help
|
|
|
|
Enable ECDH. Needed to use ECDHE-xxx TLS ciphersuites.
|
|
|
|
|
|
|
|
config MBEDTLS_ECDSA_C
|
|
|
|
bool "Elliptic Curve DSA"
|
|
|
|
depends on MBEDTLS_ECDH_C
|
|
|
|
default y
|
|
|
|
help
|
|
|
|
Enable ECDSA. Needed to use ECDSA-xxx TLS ciphersuites.
|
|
|
|
|
2020-04-12 06:20:10 -04:00
|
|
|
config MBEDTLS_ECJPAKE_C
|
|
|
|
bool "Elliptic curve J-PAKE"
|
|
|
|
depends on MBEDTLS_ECP_C
|
|
|
|
default n
|
|
|
|
help
|
|
|
|
Enable ECJPAKE. Needed to use ECJPAKE-xxx TLS ciphersuites.
|
|
|
|
|
2019-01-25 11:10:53 -05:00
|
|
|
config MBEDTLS_ECP_DP_SECP192R1_ENABLED
|
|
|
|
bool "Enable SECP192R1 curve"
|
|
|
|
depends on MBEDTLS_ECP_C
|
2020-04-06 10:42:52 -04:00
|
|
|
default y if !(MBEDTLS_ATCA_HW_ECDSA_SIGN || MBEDTLS_ATCA_HW_ECDSA_VERIFY)
|
2019-01-25 11:10:53 -05:00
|
|
|
help
|
|
|
|
Enable support for SECP192R1 Elliptic Curve.
|
|
|
|
|
|
|
|
config MBEDTLS_ECP_DP_SECP224R1_ENABLED
|
|
|
|
bool "Enable SECP224R1 curve"
|
|
|
|
depends on MBEDTLS_ECP_C
|
2020-04-06 10:42:52 -04:00
|
|
|
default y if !(MBEDTLS_ATCA_HW_ECDSA_SIGN || MBEDTLS_ATCA_HW_ECDSA_VERIFY)
|
2019-01-25 11:10:53 -05:00
|
|
|
help
|
|
|
|
Enable support for SECP224R1 Elliptic Curve.
|
|
|
|
|
|
|
|
config MBEDTLS_ECP_DP_SECP256R1_ENABLED
|
|
|
|
bool "Enable SECP256R1 curve"
|
|
|
|
depends on MBEDTLS_ECP_C
|
|
|
|
default y
|
|
|
|
help
|
|
|
|
Enable support for SECP256R1 Elliptic Curve.
|
|
|
|
|
|
|
|
config MBEDTLS_ECP_DP_SECP384R1_ENABLED
|
|
|
|
bool "Enable SECP384R1 curve"
|
|
|
|
depends on MBEDTLS_ECP_C
|
2020-04-06 10:42:52 -04:00
|
|
|
default y if !(MBEDTLS_ATCA_HW_ECDSA_SIGN || MBEDTLS_ATCA_HW_ECDSA_VERIFY)
|
2019-01-25 11:10:53 -05:00
|
|
|
help
|
|
|
|
Enable support for SECP384R1 Elliptic Curve.
|
|
|
|
|
|
|
|
config MBEDTLS_ECP_DP_SECP521R1_ENABLED
|
|
|
|
bool "Enable SECP521R1 curve"
|
|
|
|
depends on MBEDTLS_ECP_C
|
2020-04-06 10:42:52 -04:00
|
|
|
default y if !(MBEDTLS_ATCA_HW_ECDSA_SIGN || MBEDTLS_ATCA_HW_ECDSA_VERIFY)
|
2019-01-25 11:10:53 -05:00
|
|
|
help
|
|
|
|
Enable support for SECP521R1 Elliptic Curve.
|
|
|
|
|
|
|
|
config MBEDTLS_ECP_DP_SECP192K1_ENABLED
|
|
|
|
bool "Enable SECP192K1 curve"
|
|
|
|
depends on MBEDTLS_ECP_C
|
2020-04-06 10:42:52 -04:00
|
|
|
default y if !(MBEDTLS_ATCA_HW_ECDSA_SIGN || MBEDTLS_ATCA_HW_ECDSA_VERIFY)
|
2019-01-25 11:10:53 -05:00
|
|
|
help
|
|
|
|
Enable support for SECP192K1 Elliptic Curve.
|
|
|
|
|
|
|
|
config MBEDTLS_ECP_DP_SECP224K1_ENABLED
|
|
|
|
bool "Enable SECP224K1 curve"
|
|
|
|
depends on MBEDTLS_ECP_C
|
2020-04-06 10:42:52 -04:00
|
|
|
default y if !(MBEDTLS_ATCA_HW_ECDSA_SIGN || MBEDTLS_ATCA_HW_ECDSA_VERIFY)
|
2019-01-25 11:10:53 -05:00
|
|
|
help
|
|
|
|
Enable support for SECP224K1 Elliptic Curve.
|
|
|
|
|
|
|
|
config MBEDTLS_ECP_DP_SECP256K1_ENABLED
|
|
|
|
bool "Enable SECP256K1 curve"
|
|
|
|
depends on MBEDTLS_ECP_C
|
2020-04-06 10:42:52 -04:00
|
|
|
default y if !(MBEDTLS_ATCA_HW_ECDSA_SIGN || MBEDTLS_ATCA_HW_ECDSA_VERIFY)
|
2019-01-25 11:10:53 -05:00
|
|
|
help
|
|
|
|
Enable support for SECP256K1 Elliptic Curve.
|
|
|
|
|
|
|
|
config MBEDTLS_ECP_DP_BP256R1_ENABLED
|
|
|
|
bool "Enable BP256R1 curve"
|
|
|
|
depends on MBEDTLS_ECP_C
|
2020-04-06 10:42:52 -04:00
|
|
|
default y if !(MBEDTLS_ATCA_HW_ECDSA_SIGN || MBEDTLS_ATCA_HW_ECDSA_VERIFY)
|
2019-01-25 11:10:53 -05:00
|
|
|
help
|
|
|
|
support for DP Elliptic Curve.
|
|
|
|
|
|
|
|
config MBEDTLS_ECP_DP_BP384R1_ENABLED
|
|
|
|
bool "Enable BP384R1 curve"
|
|
|
|
depends on MBEDTLS_ECP_C
|
2020-04-06 10:42:52 -04:00
|
|
|
default y if !(MBEDTLS_ATCA_HW_ECDSA_SIGN || MBEDTLS_ATCA_HW_ECDSA_VERIFY)
|
2019-01-25 11:10:53 -05:00
|
|
|
help
|
|
|
|
support for DP Elliptic Curve.
|
|
|
|
|
|
|
|
config MBEDTLS_ECP_DP_BP512R1_ENABLED
|
|
|
|
bool "Enable BP512R1 curve"
|
|
|
|
depends on MBEDTLS_ECP_C
|
2020-04-06 10:42:52 -04:00
|
|
|
default y if !(MBEDTLS_ATCA_HW_ECDSA_SIGN || MBEDTLS_ATCA_HW_ECDSA_VERIFY)
|
2019-01-25 11:10:53 -05:00
|
|
|
help
|
|
|
|
support for DP Elliptic Curve.
|
|
|
|
|
|
|
|
config MBEDTLS_ECP_DP_CURVE25519_ENABLED
|
|
|
|
bool "Enable CURVE25519 curve"
|
|
|
|
depends on MBEDTLS_ECP_C
|
2020-04-06 10:42:52 -04:00
|
|
|
default y if !(MBEDTLS_ATCA_HW_ECDSA_SIGN || MBEDTLS_ATCA_HW_ECDSA_VERIFY)
|
2019-01-25 11:10:53 -05:00
|
|
|
help
|
|
|
|
Enable support for CURVE25519 Elliptic Curve.
|
|
|
|
|
|
|
|
config MBEDTLS_ECP_NIST_OPTIM
|
|
|
|
bool "NIST 'modulo p' optimisations"
|
|
|
|
depends on MBEDTLS_ECP_C
|
|
|
|
default y
|
|
|
|
help
|
|
|
|
NIST 'modulo p' optimisations increase Elliptic Curve operation performance.
|
|
|
|
|
|
|
|
Disabling this option saves some code size.
|
|
|
|
|
2023-08-02 05:56:02 -04:00
|
|
|
config MBEDTLS_ECP_FIXED_POINT_OPTIM
|
|
|
|
bool "Enable fixed-point multiplication optimisations"
|
|
|
|
depends on MBEDTLS_ECP_C
|
|
|
|
default y
|
|
|
|
help
|
|
|
|
This configuration option enables optimizations to speedup (about 3 ~ 4 times) the ECP
|
|
|
|
fixed point multiplication using pre-computed tables in the flash memory.
|
|
|
|
Disabling this configuration option saves flash footprint (about 29KB if all Elliptic Curve selected)
|
|
|
|
in the application binary.
|
|
|
|
|
2019-01-25 11:10:53 -05:00
|
|
|
# end of Elliptic Curve options
|
2017-08-18 03:44:33 -04:00
|
|
|
|
2020-05-05 12:22:56 -04:00
|
|
|
config MBEDTLS_POLY1305_C
|
|
|
|
bool "Poly1305 MAC algorithm"
|
|
|
|
default n
|
|
|
|
help
|
|
|
|
Enable support for Poly1305 MAC algorithm.
|
|
|
|
|
|
|
|
config MBEDTLS_CHACHA20_C
|
|
|
|
bool "Chacha20 stream cipher"
|
|
|
|
default n
|
|
|
|
help
|
|
|
|
Enable support for Chacha20 stream cipher.
|
|
|
|
|
|
|
|
config MBEDTLS_CHACHAPOLY_C
|
|
|
|
bool "ChaCha20-Poly1305 AEAD algorithm"
|
|
|
|
default n
|
|
|
|
depends on MBEDTLS_CHACHA20_C && MBEDTLS_POLY1305_C
|
|
|
|
help
|
2020-05-10 08:41:17 -04:00
|
|
|
Enable support for ChaCha20-Poly1305 AEAD algorithm.
|
|
|
|
|
|
|
|
config MBEDTLS_HKDF_C
|
|
|
|
bool "HKDF algorithm (RFC 5869)"
|
|
|
|
default n
|
|
|
|
help
|
|
|
|
Enable support for the Hashed Message Authentication Code
|
|
|
|
(HMAC)-based key derivation function (HKDF).
|
2020-05-05 12:22:56 -04:00
|
|
|
|
2020-04-23 02:11:24 -04:00
|
|
|
config MBEDTLS_THREADING_C
|
|
|
|
bool "Enable the threading abstraction layer"
|
|
|
|
default n
|
|
|
|
help
|
|
|
|
If you do intend to use contexts between threads, you will need to enable
|
|
|
|
this layer to prevent race conditions.
|
|
|
|
|
|
|
|
config MBEDTLS_THREADING_ALT
|
|
|
|
bool "Enable threading alternate implementation"
|
|
|
|
depends on MBEDTLS_THREADING_C
|
|
|
|
default y
|
|
|
|
help
|
|
|
|
Enable threading alt to allow your own alternate threading implementation.
|
|
|
|
|
|
|
|
config MBEDTLS_THREADING_PTHREAD
|
|
|
|
bool "Enable threading pthread implementation"
|
|
|
|
depends on MBEDTLS_THREADING_C
|
|
|
|
default n
|
|
|
|
help
|
|
|
|
Enable the pthread wrapper layer for the threading layer.
|
|
|
|
|
2021-01-12 00:49:11 -05:00
|
|
|
config MBEDTLS_LARGE_KEY_SOFTWARE_MPI
|
|
|
|
bool "Fallback to software implementation for larger MPI values"
|
|
|
|
depends on MBEDTLS_HARDWARE_MPI
|
2022-03-17 05:41:52 -04:00
|
|
|
default y if SOC_RSA_MAX_BIT_LEN <= 3072 # HW max 3072 bits
|
2021-01-12 00:49:11 -05:00
|
|
|
default n
|
|
|
|
help
|
|
|
|
Fallback to software implementation for RSA key lengths
|
|
|
|
larger than SOC_RSA_MAX_BIT_LEN. If this is not active
|
|
|
|
then the ESP will be unable to process keys greater
|
|
|
|
than SOC_RSA_MAX_BIT_LEN.
|
|
|
|
|
2023-08-08 08:58:44 -04:00
|
|
|
config MBEDTLS_USE_CRYPTO_ROM_IMPL
|
|
|
|
bool "Use ROM implementation of the crypto algorithm"
|
|
|
|
depends on ESP_ROM_HAS_MBEDTLS_CRYPTO_LIB && IDF_EXPERIMENTAL_FEATURES
|
|
|
|
default "n"
|
|
|
|
select MBEDTLS_SHA512_C
|
|
|
|
select MBEDTLS_AES_C
|
|
|
|
select MBEDTLS_CCM_C
|
|
|
|
select MBEDTLS_ROM_MD5
|
|
|
|
select MBEDTLS_HARDWARE_SHA
|
|
|
|
help
|
|
|
|
Enable this flag to use mbedtls crypto algorithm from ROM instead of ESP-IDF.
|
|
|
|
|
|
|
|
This configuration option saves flash footprint in the application binary.
|
|
|
|
Note that the version of mbedtls crypto algorithm library in ROM is v2.16.12.
|
|
|
|
We have done the security analysis of the mbedtls revision in ROM (v2.16.12)
|
|
|
|
and ensured that affected symbols have been patched (removed). If in the future
|
|
|
|
mbedtls revisions there are security issues that also affects the version in
|
|
|
|
ROM (v2.16.12) then we shall patch the relevant symbols. This would increase
|
|
|
|
the flash footprint and hence care must be taken to keep some reserved space
|
|
|
|
for the application binary in flash layout.
|
|
|
|
|
mbedtls: Expose compile-time config, disable some things by default
* Disables 3DES, Camellia, Blowfish, RC4, RIPEMD160, SSLv3, TLS-PSK modes, DTLS by default
* Saves about 40KB from the default TLS client code size
* Defaults no longer get "Bad" howsmyssl.com rating (no more vulnerable 3DES)
(ping https://github.com/espressif/arduino-esp32/issues/575 )
* Allows up to another 20-30KB code size to be trimmed without security
implications if using DER formatted certificates, RSA ciphersuites only,
etc.
* Can save up to another 8KB by setting the TLS Role to Server or Client only.
2017-08-17 03:15:04 -04:00
|
|
|
endmenu # mbedTLS
|