mirror of
https://github.com/espressif/mbedtls.git
synced 2026-06-05 21:14:47 +00:00
654 lines
38 KiB
Plaintext
654 lines
38 KiB
Plaintext
= TF-PSA-Crypto 1.1.0 branch released 2026-03-31
|
|
|
|
Removals
|
|
* The undocumented ability to load persistent keys outside the user key ID
|
|
range has been removed. (This does not affect
|
|
MBEDTLS_PSA_CRYPTO_BUILTIN_KEYS.)
|
|
* The headers no longer define 'inline' as a macro. This was done on Arm
|
|
Compiler 5 and MSVC. The compiler versions that needed this definition are
|
|
no longer supported since TF-PSA-Crypto 1.0.
|
|
|
|
Features
|
|
* The automatic computation of MBEDTLS_PSA_STATIC_KEY_SLOT_BUFFER_SIZE has
|
|
been improved to take into account the following key types:
|
|
asymmetric keys, ciphers, AEADs, CMAC and HMAC.
|
|
* mbedtls_pk_write_pubkey_psa() is introduced to allow exporting the public
|
|
key from a PK context in a format that can easily be imported into PSA.
|
|
* Implement SHAKE (PSA_ALG_SHAKE128, PSA_ALG_SHAKE256).
|
|
* The device for reading entropy on platforms without a dedicated system
|
|
call can now be configured with MBEDTLS_PLATFORM_DEV_RANDOM or
|
|
mbedtls_platform_dev_random.
|
|
* Applications can use the new functions psa_random_reseed() to
|
|
request an immediate reseed of the PSA random generator, or
|
|
psa_random_deplete() to force a reseed on the next random generator call.
|
|
* Applications can call psa_random_set_prediction_resistance() to toggle
|
|
prediction resistance in the PSA random generator.
|
|
|
|
Security
|
|
* The default device for reading entropy on platforms without a dedicated
|
|
system call is now /dev/random instead of /dev/urandom. This is safer
|
|
on Linux in case the application runs early after the kernel boots,
|
|
but may block needlessly on Linux <= 5.6. Reported by supers1ngular
|
|
(BayLibre).
|
|
* Fix missing validation of the peer's key in key agreement operations using
|
|
PSA_ALG_FFDH: low-order elements were not rejected as they should be. This
|
|
is a problem for protocols using FFDH that expect contributory behaviour,
|
|
that is, where neither party should be able to force the shared secret
|
|
into a small set. Reported independently by Eva Crystal (0xiviel) and
|
|
+ another reporter.
|
|
* Add tag length validation in mbedtls_ccm_finish() to prevent
|
|
out-of-bounds reads and mitigate potential application buffer
|
|
overflows where applications relied on the library to enforce
|
|
tag length constraints.
|
|
Reported by Eva Crystal (0xiviel).
|
|
* Fix a buffer overflow in psa_export_public_key() for FFDH keys when the
|
|
output buffer is too small. Found by Haruto Kimura (Stella).
|
|
* If an application called psa_crypto_init() then fork() and continued to
|
|
use cryptography APIs (possibly indirectly, e.g. for TLS), the random
|
|
generator states were duplicated. Fix this by forcing a RNG reseed in
|
|
the child process. CVE-2026-25835
|
|
* Applications running in environments where the application state is
|
|
cloned (for example due to resuming a frozen system state multiple
|
|
times, or due to cloning a virtual machine image) should arrange to
|
|
reseed the random generator using one of the new functions
|
|
psa_random_reseed() or psa_random_deplete(). CVE-2026-25835
|
|
|
|
Bugfix
|
|
* Appease GCC 14.3's array bounds checker by inserting checks in mbedtls_xor
|
|
that bail before the byte-at-a-time loop when the array size is a constant
|
|
(using MBEDTLS_HAS_BUILTIN) and an exact multiple of the larger loop size.
|
|
* CMake now installs headers to `CMAKE_INSTALL_INCLUDEDIR` instead of the
|
|
hard-coded `include` directory.
|
|
* Fix CMake package version that was inconsistent with the product version.
|
|
Fixes #553.
|
|
* Fix CMake failure on Windows because of a native directory separator.
|
|
Fixes Mbed-TLS/mbedtls#10502.
|
|
* Partially fix a performance regression in RSA operations introduced by a
|
|
security fix in 1.0, by improving the performance of RSA private key
|
|
operations when MBEDTLS_RSA_NO_CRT is disabled, which is the default.
|
|
* Fix compilation errors in `aesce.c` in some Visual Studio builds.
|
|
Fixes #548.
|
|
* Interruptible operations (ECDH key agreement, ECC key generation) were not
|
|
actually interruptible (always completed in one go) in builds with ECDSA
|
|
disabled.
|
|
* Built-in SHA3 was included in the build even when SHA3 had a PSA
|
|
accelerator. Fix this. Fixes #542.
|
|
* Fix a bug that caused GCM tag calculations to fail, so that data was
|
|
correctly encrypted but could not be authenticated. The bug was only
|
|
observed with GCC 10.0 to 14.2 inclusive, when compiling with -O3, and
|
|
running without AESNI or AESCE.
|
|
Fixes #665.
|
|
* Fix a build failure with dietlibc.
|
|
* Some functions in PK were using large buffers (around 2KB in the default
|
|
configuration) on the stack, which was a problem in environments with a
|
|
small stack. Those buffers are now allocated on the heap, except in
|
|
configurations where ECC is the only supported key type in PK, making PK
|
|
still independent of the heap in such configurations (if the ECC driver
|
|
itself is not using the heap). Fixes #476.
|
|
|
|
Changes
|
|
* ChaCha20 size and performance: add a Neon implementation of ChaCha20 for
|
|
Thumb2 and 32 and 64-bit Arm, for Armv7 onwards. At default settings,
|
|
this improves performance by around 2x to 2.7x on Aarch64.
|
|
* Add a new function, mbedtls_pk_get_key_type(), which returns the PSA
|
|
key type corresponding to the type of the key represented by the
|
|
given PK object.
|
|
* Running the unit tests now requires a heap (possibly from
|
|
MBEDTLS_MEMORY_BUFFER_ALLOC_C). They now use less stack (almost
|
|
5000 bytes less).
|
|
* Static assertions in the library (`MBEDTLS_STATIC_ASSERT`) are now
|
|
always enabled, using indirect methods in pre-C11 compilers. This change
|
|
also fixes warnings in pedantic mode with GCC or Clang on some platforms.
|
|
* Tweak the detection of Unix-like platforms, which makes more system
|
|
interfaces (timing, threading) available on Haiku, QNX and Midipix.
|
|
* On MinGW, always use a standard-compliant printf function family.
|
|
* Non-driver files have been moved out of `drivers/builtin/src` into three
|
|
new directories at the root of the repository:
|
|
- `extras`: modules implemented on top of the PSA Cryptography API, or
|
|
providing functionality beyond it (for example, the LMS stateful hash
|
|
implementation currently).
|
|
- `platform`: modules implementing the platform abstraction layer.
|
|
- `utilities`: utility modules used by the built-in drivers, the PSA
|
|
Cryptography API implementation, modules in `extras`, and potentially
|
|
by security protocols such as TLS.
|
|
* A new directory `dispatch` has been added at the root of the repository
|
|
to eventually host all code that dispatches cryptographic operations to
|
|
drivers, such as `psa_crypto_driver_wrappers_no_static.c`. For the time
|
|
being, it only contains `psa_crypto_driver_wrappers_no_static.h`.
|
|
|
|
= TF-PSA-Crypto 1.0.0 branch released 2025-10-15
|
|
|
|
API changes
|
|
* The experimental functions psa_generate_key_ext() and
|
|
psa_key_derivation_output_key_ext() have been replaced by
|
|
psa_generate_key_custom() and psa_key_derivation_output_key_custom().
|
|
They have almost exactly the same interface, but the variable-length
|
|
data is passed in a separate parameter instead of a flexible array
|
|
member. This resolves a build failure under C++ compilers that do not
|
|
support flexible array members (a C99 feature not adopted by C++).
|
|
Fixes #9020.
|
|
* The PSA and Mbed TLS error spaces are now unified. mbedtls_xxx()
|
|
functions can now return PSA_ERROR_xxx values.
|
|
This will not affect most applications since the error values are
|
|
between -32767 and -1 as before.
|
|
* Remove MBEDTLS_PK_RSA_ALT from the PK module.
|
|
* MBEDTLS_ERR_PK_SIG_LEN_MISMATCH is no longer a distinct error code.
|
|
A valid signature with trailing garbage is now reported as an invalid
|
|
signature with all algorithms.
|
|
* All API functions now use the PSA random generator psa_generate_random()
|
|
internally. As a consequence, functions no longer take RNG parameters.
|
|
Please refer to the migration guide at :
|
|
docs/4.0-migration-guide.md.
|
|
* Privatize the functions mbedtls_ecc_group_to_psa and
|
|
mbedtls_ecc_group_from_psa.
|
|
* Remove the functions mbedtls_ecc_group_to_psa() and
|
|
mbedtls_ecc_group_from_psa(), which are no longer meaningful since
|
|
ECC groups are no longer exposed directly in the API.
|
|
* mbedtls_pk_verify_ext() ignores the options parameter when an
|
|
MBEDTLS_PK_RSASSA_PSS context type is used. The function assumes that
|
|
salt length is any and that the hash algorithm used for message, encoding
|
|
and MGF1 is the same. An error will be returned if any of these assumptions
|
|
is false.
|
|
* Align the mbedtls_nist_kw_wrap() and mbedtls_nist_kw_unwrap() functions
|
|
with the PSA Crypto API. The functions mbedtls_nist_kw_wrap() and
|
|
mbedtls_nist_kw_unwrap() now take a PSA key identifier instead of a
|
|
plain-text key via a custom context.
|
|
* Remove mbedtls_pk_encrypt() and mbedtls_pk_decrypt(). Convert the
|
|
key to PSA and use the PSA functions instead, see the migration guide for
|
|
details.
|
|
* Change MBEDTLS_ERR_ECP_IN_PROGRESS to be an alias of
|
|
PSA_OPERATION_INCOMPLETE and MBEDTLS_ERR_RSA_VERIFY_FAILED to be an alias
|
|
of PSA_ERROR_INVALID_SIGNATURE.
|
|
* Rename mbedtls_pk_setup_opaque to mbedtls_pk_wrap_psa.
|
|
* The custom entropy collector callback mbedtls_hardware_poll()
|
|
(enabled by MBEDTLS_ENTROPY_HARDWARE_ALT) has been replaced by a
|
|
new callback mbedtls_platform_get_entropy() with different parameters
|
|
(enabled by MBEDTLS_PSA_DRIVER_GET_ENTROPY). See the new function's
|
|
documentation and “Custom entropy collector” in the migration guide.
|
|
* To build the library with only a nonvolatile seed and no actual entropy
|
|
source, you now need to enable the new option
|
|
MBEDTLS_ENTROPY_NO_SOURCES_OK.
|
|
* Due to the entropy configuration changes, if you write a configuration file
|
|
from scratch, the default entropy source MBEDTLS_PSA_BUILTIN_GET_ENTROPY
|
|
now needs to be enabled explicitly.
|
|
* The configuration options MBEDTLS_CTR_DRBG_RESEED_INTERVAL and
|
|
MBEDTLS_HMAC_DRBG_RESEED_INTERVAL have been replaced by a unified
|
|
setting of MBEDTLS_PSA_RNG_RESEED_INTERVAL.
|
|
* The configuration option MBEDTLS_ENTROPY_FORCE_SHA256 has been removed.
|
|
MBEDTLS_PSA_CRYPTO_RNG_HASH can now be used to select the entropy
|
|
module's hashing algorithm.
|
|
* The mutex functions provided by platforms where MBEDTLS_THREADING_ALT is
|
|
enabled have changed in minor ways:
|
|
- The type of mutex objects provided by the platform functions is
|
|
now called mbedtls_platform_mutex_t, distinct from the API type
|
|
mbedtls_threading_mutex_t.
|
|
- The mutex_init function now returns an error code.
|
|
- Mutex functions other than mutex_init can now assume that the mutex
|
|
has been successfully initialized.
|
|
* The Random Number Generator configuration options have been refactored.
|
|
The following options have been removed:
|
|
MBEDTLS_ENTROPY_C, MBEDTLS_ENTROPY_FORCE_SHA256,
|
|
MBEDTLS_ENTROPY_MAX_GATHER, MBEDTLS_ENTROPY_MAX_SOURCES,
|
|
MBEDTLS_CTR_DRBG_ENTROPY_LEN, MBEDTLS_CTR_DRBG_MAX_INPUT,
|
|
MBEDTLS_CTR_DRBG_MAX_REQUEST, MBEDTLS_CTR_DRBG_MAX_SEED_INPUT,
|
|
MBEDTLS_CTR_DRBG_USE_128_BIT_KEY, MBEDTLS_HMAC_DRBG_MAX_INPUT,
|
|
MBEDTLS_HMAC_DRBG_MAX_REQUEST, MBEDTLS_HMAC_DRBG_MAX_SEED_INPUT and
|
|
MBEDTLS_PSA_HMAC_DRBG_MD_TYPE.
|
|
The following options have been introduced:
|
|
MBEDTLS_PSA_CRYPTO_RNG_HASH and MBEDTLS_PSA_CRYPTO_RNG_STRENGTH.
|
|
See "Random number generation configuration" in the migration guide for
|
|
more information.
|
|
* The following PK interfaces are now private and should no longer be used.
|
|
mbedtls_pk_type_t
|
|
mbedtls_pk_debug_type
|
|
mbedtls_pk_debug_item
|
|
MBEDTLS_PK_DEBUG_MAX_ITEMS
|
|
mbedtls_pk_info_from_type()
|
|
mbedtls_pk_setup()
|
|
mbedtls_pk_get_len()
|
|
mbedtls_pk_can_do()
|
|
mbedtls_pk_can_do_ext()
|
|
mbedtls_pk_debug()
|
|
mbedtls_pk_get_name()
|
|
mbedtls_pk_get_type()
|
|
mbedtls_pk_rsa()
|
|
mbedtls_pk_ec()
|
|
mbedtls_pk_parse_subpubkey()
|
|
mbedtls_pk_write_pubkey()
|
|
mbedtls_pk_verify_new()
|
|
* The hmac parameter of the mbedtls_md_setup() function must now always be
|
|
set to 0 as HMAC is no longer supported by MD. To use HMAC, please use
|
|
the psa_mac_ API.
|
|
* Make the following error codes aliases of their PSA equivalents, where
|
|
xxx is a module, e.g. ASN1 or PK.
|
|
MBEDTLS_ERR_xxx_BAD_INPUT[_DATA] -> PSA_ERROR_INVALID_ARGUMENT
|
|
MBEDTLS_ERR_xxx_ALLOC_FAILED -> PSA_ERROR_INSUFFICIENT_MEMORY
|
|
MBEDTLS_ERR_xxx_[AUTH/VERIFY]_FAILED -> PSA_ERROR_INVALID_SIGNATURE
|
|
MBEDTLS_ERR_xxx_BUFFER_TOO_SMALL -> PSA_ERROR_BUFFER_TOO_SMALL
|
|
MBEDTLS_ERR_xxx_OUTPUT_TOO_LARGE -> PSA_ERROR_BUFFER_TOO_SMALL
|
|
MBEDTLS_ERR_xxx_INVALID_PADDING -> PSA_ERROR_INVALID_PADDING
|
|
* A PK context no longer associates specific algorithms with the key, except
|
|
when wrapping a PSA key. In particular, after mbedtls_pk_copy_from_psa() or
|
|
mbedtls_pk_copy_public_from_psa() on an RSA key, the functions
|
|
mbedtls_pk_get_psa_attributes(), mbedtls_pk_sign() and mbedtls_pk_verify()
|
|
will use PKCS#1v1.5 signature or encryption, regardless of the original
|
|
key's policy.
|
|
|
|
Default behavior changes
|
|
* In a PSA-client-only build (i.e. MBEDTLS_PSA_CRYPTO_CLIENT &&
|
|
!MBEDTLS_PSA_CRYPTO_C), do not automatically enable local crypto when the
|
|
corresponding PSA mechanism is enabled, since the server provides the
|
|
crypto. Fixes #9126.
|
|
* The PK module now always uses the PSA subsystem
|
|
to perform cryptographic operations, with a few exceptions documented
|
|
in docs/architecture/psa-migration/psa-limitations.md. This
|
|
corresponds to the behavior of Mbed TLS 3.x when
|
|
MBEDTLS_USE_PSA_CRYPTO is enabled. In effect, MBEDTLS_USE_PSA_CRYPTO
|
|
is now always enabled.
|
|
* psa_crypto_init() must be called before performing any cryptographic
|
|
operation, including indirect requests such as parsing a key or
|
|
certificate or starting a TLS handshake.
|
|
* The `PSA_WANT_XXX` symbols as defined in
|
|
tf-psa-crypto/include/psa/crypto_config.h are now always used in the
|
|
configuration of the cryptographic mechanisms exposed by the PSA API.
|
|
This corresponds to the configuration behavior of Mbed TLS 3.x when
|
|
MBEDTLS_PSA_CRYPTO_CONFIG is enabled. In effect, MBEDTLS_PSA_CRYPTO_CONFIG
|
|
is now always enabled and the configuration option has been removed.
|
|
|
|
Requirement changes
|
|
* Implementations of MBEDTLS_THREADING_ALT must now provide condition
|
|
variables in addition to mutexes.
|
|
|
|
Removals
|
|
* Drop support for crypto alt interface. Removes MBEDTLS_XXX_ALT options
|
|
at the module and function level for crypto mechanisms only. The remaining
|
|
alt interfaces for platform, threading and timing are unchanged.
|
|
Fixes #8149.
|
|
* Drop support for VIA Padlock. Removes MBEDTLS_PADLOCK_C.
|
|
Fixes #5903.
|
|
* Remove many MBEDTLS_ERR_xxx error codes, superseded by PSA_ERROR_xxx.
|
|
See the 4.0 migration guide for details.
|
|
* Support for dynamic secure elements (i.e. MBEDTLS_PSA_CRYPTO_SE_C) was
|
|
already marked as deprecated and it has been removed.
|
|
* Removed the MBEDTLS_PSA_INJECT_ENTROPY configuration option from
|
|
crypto_config.h. The functionality that this option was enabling will be
|
|
reintroduced as part of the work on issue #8150.
|
|
* MBEDTLS_NO_PLATFORM_ENTROPY and the previously deprecated
|
|
MBEDTLS_ENTROPY_HARDWARE_ALT are removed. See the documentation of
|
|
MBEDTLS_PLATFORM_GET_ENTROPY_ALT for a description on how the entropy
|
|
module gathers entropy data.
|
|
* MBEDTLS_ENTROPY_MIN_HARDWARE is also removed following the removal of
|
|
MBEDTLS_ENTROPY_HARDWARE_ALT.
|
|
* TF-PSA-Crypto does not provide an OID API. A subset of the OID
|
|
interfaces of Mbed TLS 3.x are now in the X.509 library in
|
|
Mbed TLS 4.x.
|
|
* Removed the MBEDTLS_SHA3_C configuration option from crypto_config.h.
|
|
SHA3 can now be configured with the PSA_WANT_SHA3_* options.
|
|
* The library no longer offers interfaces to look up values by OID
|
|
or OID by enum values. The compilation option MBEDTLS_OID_C no longer
|
|
exists. OID tables are included in the build automatically as needed.
|
|
OIDs that are not relevant to TF-PSA-Crypto have been removed.
|
|
* Remove the function mbedtls_asn1_get_mpi() from the public interface.
|
|
It is replaced by mbedtls_asn1_get_integer().
|
|
* Remove mbedtls_asn1_write_mpi() from the public API. This has been replaced
|
|
by mbedtls_asn1_write_integer(), which does not use the legacy mbedtls_mpi
|
|
type.
|
|
* Remove the legacy HKDF module (mbedtls_hkdf_xxx enabled by
|
|
MBEDTLS_HKDF_C). Use PSA instead (psa_key_derivation_xxx with
|
|
PSA_ALG_HKDF, enabled by PSA_WANT_ALG_HKDF).
|
|
* Remove mbedtls_asn1_free_named_data(). Use
|
|
mbedtls_asn1_free_named_data_list() or
|
|
mbedtls_asn1_free_named_data_list_shallow() instead.
|
|
* The options MBEDTLS_NO_PLATFORM_ENTROPY,
|
|
MBEDTLS_NO_DEFAULT_ENTROPY_SOURCES, MBEDTLS_ENTROPY_HARDWARE_ALT and
|
|
MBEDTLS_ENTROPY_MIN_HARDWARE have been removed. Entropy sources are
|
|
now controlled by MBEDTLS_PSA_BUILTIN_GET_ENTROPY and
|
|
MBEDTLS_PSA_DRIVER_GET_ENTROPY. See “Entropy configuration” in the
|
|
migration guide for more information.
|
|
* MBEDTLS_PLATFORM_GET_ENTROPY_ALT, introduced in TF-PSA-Crypto 1.0.0-beta,
|
|
has been removed in favor of MBEDTLS_PSA_DRIVER_GET_ENTROPY.
|
|
* Remove the PKCS12 module, which provided the ability to read keys
|
|
encrypted with PKCS#5 v1.5 PBES1 with a DES-based cipher.
|
|
* Removed the `psa_pake_set_password_key()` function to comply
|
|
with the PSA API 1.2 PAKE extension.
|
|
* Removed the `psa_pake_get_implicit_key()` function. Removed to comply
|
|
with PSA API 1.2 PAKE extension.
|
|
* Support for EC curves secp224r1, secp224k1, secp192k1 and secp192r1 is
|
|
removed.
|
|
* mbedtls_pk_rsassa_pss_options has been removed from the interface.
|
|
* The configuration options MBEDTLS_MD5_C, MBEDTLS_RIPEMD160_C,
|
|
MBEDTLS_SHA1_C, MBEDTLS_SHA224_C, MBEDTLS_SHA256_C, MBEDTLS_SHA384_C and
|
|
MBEDTLS_SHA512_C have been removed. Support for hash algorithms can now
|
|
only be enabled through the hash-related `PSA_WANT_XXX` symbols. See
|
|
psa-transition.md for more information.
|
|
|
|
* The configuration options MBEDTLS_AES_C, MBEDTLS_ARIA_C,
|
|
MBEDTLS_CAMELLIA_C, MBEDTLS_CCM_C, MBEDTLS_CHACHA20_C,
|
|
MBEDTLS_CHACHAPOLY_C, MBEDTLS_CIPHER_C, MBEDTLS_CIPHER_MODE_CBC,
|
|
MBEDTLS_CIPHER_MODE_CFB, MBEDTLS_CIPHER_MODE_CTR, MBEDTLS_CIPHER_MODE_OFB,
|
|
MBEDTLS_CIPHER_MODE_XTS, MBEDTLS_CIPHER_NULL_CIPHER,
|
|
MBEDTLS_CIPHER_PADDING_PKCS7, MBEDTLS_CIPHER_PADDING_ONE_AND_ZEROS,
|
|
MBEDTLS_CIPHER_PADDING_ZEROS_AND_LEN, MBEDTLS_CIPHER_PADDING_ZEROS,
|
|
MBEDTLS_CMAC_C, MBEDTLS_DES_C MBEDTLS_GCM_C and MBEDTLS_POLY1305_C have
|
|
been removed. Support for ciphers and AEAD algorithms can now only be
|
|
enabled through the cipher and AEAD related `PSA_WANT_XXX` symbols. The
|
|
only padding mode now supported in CBC cipher mode is PKCS7. See
|
|
psa-transition.md for more information.
|
|
|
|
* The configuration options MBEDTLS_GENPRIME, MBEDTLS_PKCS1_V15,
|
|
MBEDTLS_PKCS1_V21 and MBEDTLS_RSA_C have been removed. Support for
|
|
RSA algorithms can now only be enabled through the RSA-related
|
|
`PSA_WANT_XXX` symbols. See psa-transition.md for more information.
|
|
|
|
* The configuration options MBEDTLS_ECDH_C, MBEDTLS_ECDSA_C,
|
|
MBEDTLS_ECDSA_DETERMINISTIC, MBEDTLS_ECJPAKE_C, MBEDTLS_ECP_C,
|
|
MBEDTLS_ECP_DP_BP256R1_ENABLED, MBEDTLS_ECP_DP_BP384R1_ENABLED,
|
|
MBEDTLS_ECP_DP_BP512R1_ENABLED, MBEDTLS_ECP_DP_CURVE25519_ENABLED,
|
|
MBEDTLS_ECP_DP_CURVE448_ENABLED, MBEDTLS_ECP_DP_SECP192K1_ENABLED,
|
|
MBEDTLS_ECP_DP_SECP192R1_ENABLED, MBEDTLS_ECP_DP_SECP224R1_ENABLED,
|
|
MBEDTLS_ECP_DP_SECP256K1_ENABLED, MBEDTLS_ECP_DP_SECP256R1_ENABLED,
|
|
MBEDTLS_ECP_DP_SECP384R1_ENABLED, MBEDTLS_ECP_DP_SECP521R1_ENABLE have
|
|
been removed. Support for algorithms based on elliptic curves can now
|
|
only be enabled through the elliptic-curve-related `PSA_WANT_XXX` symbols.
|
|
See psa-transition.md for more information.
|
|
|
|
* The configuration option MBEDTLS_BIGNUM_C has been removed. Support for
|
|
big number calculations is now enabled internally only when required by
|
|
enabled asymmetric cryptographic algorithms.
|
|
* Removed the ability to customize psa_can_do_hash() and
|
|
psa_can_do_cipher(), which allowed hash or cipher operations to be
|
|
performed through a legacy implementation when PSA is not yet fully
|
|
initialized.
|
|
* The following options have been removed as
|
|
they are deprecated:
|
|
PSA_WANT_KEY_TYPE_ECC_KEY_PAIR
|
|
PSA_WANT_KEY_TYPE_RSA_KEY_PAIR
|
|
MBEDTLS_PSA_BUILTIN_KEY_TYPE_RSA_KEY_PAIR
|
|
MBEDTLS_PSA_BUILTIN_KEY_TYPE_ECC_KEY_PAIR
|
|
MBEDTLS_PSA_ACCEL_KEY_TYPE_RSA_KEY_PAIR
|
|
MBEDTLS_PSA_ACCEL_KEY_TYPE_ECC_KEY_PAIR
|
|
MBEDTLS_SHA256_USE_A64_CRYPTO_IF_PRESENT
|
|
MBEDTLS_SHA256_USE_A64_CRYPTO_ONLY
|
|
* Deprecated PSA key handle related functions and macros are removed:
|
|
psa_open_key() and psa_close_key() functions, PSA_KEY_HANDLE_INIT
|
|
macro and psa_key_handle_t type.
|
|
* Deprecated PSA custom Diffie-Hellman group support functions and macros
|
|
are removed: psa_get_key_domain_parameters() and
|
|
psa_set_key_domain_parameters() functions, PSA_DH_FAMILY_CUSTOM and
|
|
PSA_KEY_DOMAIN_PARAMETERS_SIZE macros.
|
|
* The following functions have been removed from the MD module:
|
|
mbedtls_md_list()
|
|
mbedtls_md_info_from_string()
|
|
mbedtls_md_get_name()
|
|
mbedtls_md_info_from_ctx()
|
|
mbedtls_md_file()
|
|
mbedtls_md_hmac_starts()
|
|
mbedtls_md_hmac_update()
|
|
mbedtls_md_hmac_finish()
|
|
mbedtls_md_hmac_reset()
|
|
mbedtls_md_hmac()
|
|
To use HMAC, please use the psa_mac_ API. Looking up hash algorithms by
|
|
name is no longer supported.
|
|
* Removed DES (including 3DES)
|
|
|
|
Features
|
|
* Added new configuration option MBEDTLS_PSA_STATIC_KEY_SLOTS, which
|
|
uses static storage for keys, enabling malloc-less use of key slots.
|
|
The size of each buffer is given by the option
|
|
MBEDTLS_PSA_STATIC_KEY_SLOT_BUFFER_SIZE. By default it accommodates the
|
|
largest PSA key enabled in the build.
|
|
* Add an interruptible version of generate key to the PSA interface.
|
|
See psa_generate_key_iop_setup() and related functions.
|
|
* Add an interruptible version of key agreement to the PSA interface.
|
|
See psa_key_agreement_iop_setup() and related functions.
|
|
* Add a new psa_key_agreement() PSA API to perform key agreement and return
|
|
an identifier for the newly created key.
|
|
* When the new compilation option MBEDTLS_PSA_KEY_STORE_DYNAMIC is enabled,
|
|
the number of volatile PSA keys is virtually unlimited, at the expense
|
|
of increased code size. This option is off by default, but enabled in
|
|
the default mbedtls_config.h. Fixes #9216.
|
|
* Add an interruptible version of export public-key to the PSA interface.
|
|
See psa_export_public_key_iop_setup() and related functions.
|
|
* MD module can now perform PSA dispatching also when
|
|
`MBEDTLS_PSA_CRYPTO_CLIENT && !MBEDTLS_PSA_CRYPTO_C`, even though this
|
|
configuration is not officially supported. This requires that a
|
|
PSA Crypto provider library which:
|
|
* supports the required `PSA_WANT_ALG_xxx` and
|
|
* implements `psa_can_do_hash()` on the client interface
|
|
is linked against Mbed TLS and that `psa_crypto_init()` is called before
|
|
performing any PSA call.
|
|
* Add a program (which_aes) that uses an internal function to print out
|
|
the current implementation of AES, i.e. software, AESCE, AESNI assembly,
|
|
or AESNI intrinsics.
|
|
* To supply a platform-specific entropy source, define the compilation option
|
|
MBEDTLS_PLATFORM_GET_ENTROPY_ALT and provide the callback function
|
|
mbedtls_platform_get_entropy_alt(). This function should typically access
|
|
a TRNG ("true hardware random generator") device on bare-metal platforms,
|
|
or call an operating system function to obtain cryptographic-quality random
|
|
data. Mbed TLS requires that a minimum of 32 bytes (not configurable) are
|
|
returned from this function for a successful entropy gathering round.
|
|
* The new function mbedtls_asn1_get_integer() parses an integer into a byte
|
|
array. It replaces mbedtls_asn1_get_mpi().
|
|
* Add a new function mbedtls_asn1_write_integer() that encodes an arbitrary
|
|
precision integer into ASN.1 DER format. This function replaces
|
|
mbedtls_asn1_write_mpi(), which has been made internal-only.
|
|
* Introduce macros and functions for getting the current version of
|
|
TF-PSA-Crypto at build time and at runtime. These can be accessed
|
|
by including "tf-psa-crypto/version.h".
|
|
* Helper symbol MBEDTLS_PK_ALG_ECDSA is added to the public "mbedtls/pk.h"
|
|
header file. It exposes the ECDSA variant used by the PK module.
|
|
* The threading platform abstraction now exposes condition variables
|
|
in addition to mutexes.
|
|
* Function mbedtls_pk_can_do_psa() is added to allow testing PK context
|
|
capabilities against a specified algorithm and usage.
|
|
* Users can set the macro TF_PSA_CRYPTO_CONFIG_VERSION in the TF-PSA-Crypto
|
|
config file to maximize backward compatibility in case of future changes
|
|
to how the config file is interpreted. TF-PSA-Crypto will maintain
|
|
backward compatibility on functional matters (except at major version
|
|
changes, e.g. from 1.x.y to 2.0), but the config version may influence
|
|
other aspect such as optimisations, or experimental options.
|
|
|
|
Security
|
|
* Fix a buffer underrun in mbedtls_pk_write_key_der() when
|
|
called on an opaque key, MBEDTLS_USE_PSA_CRYPTO is enabled,
|
|
and the output buffer is smaller than the actual output.
|
|
Fix a related buffer underrun in mbedtls_pk_write_key_pem()
|
|
when called on an opaque RSA key, MBEDTLS_USE_PSA_CRYPTO is enabled
|
|
and MBEDTLS_MPI_MAX_SIZE is smaller than needed for a 4096-bit RSA key.
|
|
CVE-2024-49195
|
|
* Unlike previously documented, enabling MBEDTLS_PSA_HMAC_DRBG_MD_TYPE does
|
|
not cause the PSA subsystem to use HMAC_DRBG: it uses HMAC_DRBG only when
|
|
MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG and MBEDTLS_CTR_DRBG_C are disabled.
|
|
CVE-2024-45157
|
|
* Fix a stack buffer overflow in mbedtls_ecdsa_der_to_raw() and
|
|
mbedtls_ecdsa_raw_to_der() when the bits parameter is larger than the
|
|
largest supported curve. In some configurations with PSA disabled,
|
|
all values of bits are affected. This never happens in internal library
|
|
calls, but can affect applications that call these functions directly.
|
|
CVE-2024-45158
|
|
* Zeroize a temporary heap buffer used in psa_key_derivation_output_key()
|
|
when deriving an ECC key pair.
|
|
* Zeroize temporary heap buffers used in PSA operations.
|
|
* Fix a buffer overread in mbedtls_lms_import_public_key() when the input is
|
|
less than 3 bytes. Reported by Linh Le and Ngan Nguyen from Calif.
|
|
CVE-2025-49601
|
|
* Fix a vulnerability in LMS verification through which an adversary could
|
|
get an invalid signature accepted if they could cause a hash accelerator
|
|
to fail. Found and reported by Linh Le and Ngan Nguyen from Calif.
|
|
CVE-2025-49600
|
|
* On x86/amd64 platforms, with some compilers, when the library is
|
|
compiled with support for both AESNI and software AES and AESNI is
|
|
available in hardware, an adversary with fine control over which
|
|
threads make progress in a multithreaded program could force software
|
|
AES to be used for some time when the program starts. This could allow
|
|
the adversary to conduct timing attacks and potentially recover the
|
|
key. In particular, this attacker model may be possible against an SGX
|
|
enclave.
|
|
The same vulnerability affects GCM acceleration, which could allow
|
|
a similarly powerful adversary to craft GCM forgeries.
|
|
CVE-2025-52496
|
|
* Fix a bug in mbedtls_asn1_store_named_data() where it would sometimes leave
|
|
an item in the output list in an inconsistent state with val.p == NULL but
|
|
val.len > 0. Functions using the structure after that, including
|
|
mbedtls_asn1_store_named_data() itself would then dereference a NULL
|
|
pointer. Applications that do not call this function are not affected.
|
|
Found by Linh Le and Ngan Nguyen from Calif.
|
|
CVE-2025-48965
|
|
* Fix an integer underflow that could occur when parsing malformed PEM
|
|
keys, which could be used by an attacker capable of feeding encrypted
|
|
PEM keys to a user. This could cause a crash or information disclosure.
|
|
Found and reported by Linh Le and Ngan Nguyen from Calif.
|
|
CVE-2025-52497
|
|
* Fix a timing side channel in the implementation of PKCS#7 padding
|
|
which would allow an attacker who can request decryption of arbitrary
|
|
ciphertexts to recover the plaintext through a timing oracle attack.
|
|
Reported by Ka Lok Wu from Stony Brook University and Doria Tang from
|
|
The Chinese University of Hong Kong.
|
|
CVE-2025-49087
|
|
* Fix a timing side channel in CBC-PKCS7 decryption that could
|
|
allow an attacker who can submit chosen ciphertexts to recover
|
|
some plaintexts through a timing-based padding oracle attack.
|
|
Credits to Beat Heeb from Oberon microsystems AG. CVE-2025-59438
|
|
* Fix a local timing side-channel in modular inversion and GCD that was
|
|
exploitable in RSA key generation and other RSA operations (see the full
|
|
advisory for details), allowing a local attacker to fully recover the
|
|
private key. This can be exploited on some Arm-v9 CPUs by an unprivileged
|
|
attacker running code on the same core (SSBleed), or when Trustzone-M is
|
|
used, by the non-secure side abusing timer interrupts (M-Step), and
|
|
probably in other similar settings as well. Found and reported
|
|
independently by: SSBleed: Chang Liu (Tsinghua University) and Trevor E.
|
|
Carlson (National University of Singapore); M-Step: Cristiano Rodrigues
|
|
(University of Minho), Marton Bognar (DistriNet, KU Leuven), Sandro Pinto
|
|
(University of Minho), Jo Van Bulck (DistriNet, KU Leuven). CVE-2025-54764
|
|
|
|
Bugfix
|
|
* MBEDTLS_ASN1_PARSE_C and MBEDTLS_ASN1_WRITE_C are now automatically enabled
|
|
as soon as MBEDTLS_RSA_C is enabled. Fixes #9041.
|
|
* Fix interference between PSA volatile keys and built-in keys
|
|
when MBEDTLS_PSA_CRYPTO_BUILTIN_KEYS is enabled and
|
|
MBEDTLS_PSA_KEY_SLOT_COUNT is more than 4096.
|
|
* Fix missing constraints on the AES-NI inline assembly which is used on
|
|
GCC-like compilers when building AES for generic x86_64 targets. This
|
|
may have resulted in incorrect code with some compilers, depending on
|
|
optimizations. Fixes #9819.
|
|
* Fix rare concurrent access bug where attempting to operate on a
|
|
non-existent key while concurrently creating a new key could potentially
|
|
corrupt the key store.
|
|
* Fix invalid JSON schemas for driver descriptions used by
|
|
generate_driver_wrappers.py.
|
|
* Fix the build when MBEDTLS_PSA_CRYPTO_CONFIG is enabled and the built-in
|
|
CMAC is enabled, but no built-in unauthenticated cipher is enabled.
|
|
Fixes #9209.
|
|
* Fix issue of redefinition warning messages for _GNU_SOURCE in
|
|
entropy_poll.c and sha_256.c. There was a build warning during
|
|
building for linux platform.
|
|
Resolves #9026
|
|
* Fix unintended performance regression when using short RSA public keys.
|
|
Fixes #9232.
|
|
* Fix error handling when creating a key in a dynamic secure element
|
|
(feature enabled by MBEDTLS_PSA_CRYPTO_SE_C). In a low memory condition,
|
|
the creation could return PSA_SUCCESS but using or destroying the key
|
|
would not work. Fixes #8537.
|
|
* Fix redefinition warnings when SECP192R1 and/or SECP192K1 are disabled.
|
|
Fixes #9029.
|
|
* Fix undefined behaviour (incrementing a NULL pointer by zero length) when
|
|
passing in zero length additional data to multipart AEAD.
|
|
* Document and enforce the limitation of mbedtls_psa_register_se_key()
|
|
to persistent keys. Resolves #9253.
|
|
* Fix a memory leak that could occur when failing to process an RSA
|
|
key through some PSA functions due to low memory conditions.
|
|
* Fix a compilation warning in pk.c when PSA is enabled and RSA is disabled.
|
|
* Fix psa_cipher_decrypt() with CCM* rejecting messages less than 3 bytes
|
|
long. Credit to Cryptofuzz. Fixes #9314.
|
|
* Fix undefined behavior in some cases when mbedtls_psa_raw_to_der() or
|
|
mbedtls_psa_der_to_raw() is called with bits=0.
|
|
* When MBEDTLS_PSA_CRYPTO_C was disabled and MBEDTLS_ECDSA_C enabled,
|
|
some code was defining 0-size arrays, resulting in compilation errors.
|
|
Fixed by disabling the offending code in configurations without PSA
|
|
Crypto, where it never worked. Fixes #9311.
|
|
* Remove Everest Visual Studio 2010 compatibility headers, which could
|
|
shadow standard CRT headers inttypes.h and stdbool.h with incomplete
|
|
implementatios if placed on the include path.
|
|
* Fix issue where psa_key_derivation_input_integer() is not detecting
|
|
bad state after an operation has been aborted.
|
|
* Fix failures of PSA multipart or interruptible operations when the
|
|
library or the application is built with a compiler where
|
|
"union foo x = {0}" does not initialize non-default members of the
|
|
union, such as GCC 15 and some versions of Clang 18. This affected MAC
|
|
multipart operations, MAC-based key derivation operations, interruptible
|
|
signature, interruptible verification, and potentially other operations
|
|
when using third-party drivers. This also affected one-shot MAC
|
|
operations using the built-in implementation. Fixes #9814.
|
|
* On entry to PSA driver entry points that set up a multipart operation
|
|
("xxx_setup"), the operation object is supposed to be all-bits-zero.
|
|
This was sometimes not the case when an operation object is reused,
|
|
or with compilers where "union foo x = {0}" does not initialize
|
|
non-default members of the union. The PSA core now ensures that this
|
|
guarantee is met in all cases. Fixes #9975.
|
|
* Resolved build issue with C++ projects using TF-PSA-Crypto when compiling
|
|
with the MSVC toolset v142 and earlier. Fixes mbedtls issue #7087.
|
|
* Silence spurious -Wunterminated-string-initialization warnings introduced
|
|
by GCC 15. Fixes #9944.
|
|
* Fix a sloppy check in LMS public key import, which could lead to accepting
|
|
keys with a different LMS or LM-OTS types on some platforms. Specifically,
|
|
this could happen on platforms where enum types are smaller than 32 bits
|
|
and compiler optimization is enabled. Found and reported by Linh Le and
|
|
Ngan Nguyen from Calif.
|
|
* Fix a race condition on x86/amd64 platforms in AESNI support detection
|
|
that could lead to using software AES in some threads at the very
|
|
beginning of a multithreaded program. Reported by Solar Designer.
|
|
Fixes #9840.
|
|
* Fix mbedtls_base64_decode() on inputs that did not have the correct
|
|
number of trailing equal signs, or had 4*k+1 digits. They were accepted
|
|
as long as they had at most two trailing equal signs. They are now
|
|
rejected. Furthermore, before, on inputs with too few equal signs, the
|
|
function reported the correct size in *olen when it returned
|
|
MBEDTLS_ERR_BASE64_BUFFER_TOO_SMALL, but truncated the output to the
|
|
last multiple of 3 bytes.
|
|
* When calling mbedtls_asn1_write_raw_buffer() with NULL, 0 as the last two
|
|
arguments, undefined behaviour would be triggered, in the form of a call to
|
|
memcpy(..., NULL, 0). This was harmless in practice, but could trigger
|
|
complains from sanitizers or static analyzers.
|
|
* Fix occasional CMake parallel build failure when building both the
|
|
static and shared tfpsacrypto libraries. Fixes #286.
|
|
* PAKE returns PSA_ERROR_INVALID_SIGNATURE instead of PSA_ERROR_DATA_INVALID
|
|
when the signature in Schnorr NIZKP is invalid.
|
|
|
|
Changes
|
|
* Cryptography and platform configuration options have been migrated
|
|
from the Mbed TLS library configuration file mbedtls_config.h to
|
|
crypto_config.h that is now the TF-PSA-Crypto configuration file.
|
|
The reference and test custom configuration files respectively in
|
|
configs/ and tests/configs/ have been updated accordingly.
|
|
To migrate custom Mbed TLS configurations where
|
|
MBEDTLS_PSA_CRYPTO_CONFIG is disabled, you should first adapt them
|
|
to the PSA configuration scheme based on PSA_WANT_XXX symbols
|
|
(see psa-conditional-inclusion-c.md for more information).
|
|
To migrate custom Mbed TLS configurations where
|
|
MBEDTLS_PSA_CRYPTO_CONFIG is enabled, you should migrate the
|
|
cryptographic and platform configuration options from mbedtls_config.h
|
|
to crypto_config.h (see the 4.0 configuration guide at
|
|
docs/4.0-migration-guide/configuration.md which includes
|
|
configuration details and examples).
|
|
* Improve performance of PSA key generation with ECC keys: it no longer
|
|
computes the public key (which was immediately discarded). Fixes #9732.
|
|
* Make the file p256-m.h internal, it is no longer installed or documented.
|
|
* Added the `key_confirmation` field to the PAKE cipher suite to conform to
|
|
PSA API 1.2 PAKE extension
|
|
* Added the `psa_pake_cs_get_key_confirmation()` function which retrieves
|
|
the value from a cipher suite, the `psa_pake_cs_set_key_confirmation()`
|
|
function which declares the value for a cipher suite
|
|
* Now the functionality of `psa_pake_set_password_key()` is implemented in
|
|
`psa_pake_setup()` function, as per the PSA API 1.2 PAKE extension.
|
|
* Changed the `PSA_ALG_JPAKE` macro to accommodate the hash algorithm
|
|
parameter, to be conformant to the PSA API 1.2 PAKE extension
|
|
* Added the `PSA_ALG_IS_JPAKE` macro to test whether a given algorithm is
|
|
JPAKE
|
|
* All tf-psa-crypto private headers were moved to a private subdirectory
|
|
* Implemented the `psa_pake_get_shared_key()` function, compliant with the
|
|
PSA API 1.2 PAKE extension, replacement for `psa_pake_get_implicit_key()`
|
|
|
|
= Mbed TLS 3.6.0 branch released 2024-03-28
|
|
Please refer to the Mbed TLS changelog, available at
|
|
https://github.com/Mbed-TLS/mbedtls/blob/mbedtls-3.6.0/ChangeLog
|