blob: 737b4eecc205738ecd9589105861b084db80dfad [file] [log] [blame] [view]
Manuel Pégourié-Gonnard89d4ab02021-04-23 11:54:27 +02001Migrating from Mbed TLS 2.x to Mbed TLS 3.0
2===========================================
3
4This guide details the steps required to migrate from Mbed TLS version 2.x to
5Mbed TLS version 3.0 or greater. Unlike normal releases, Mbed TLS 3.0 breaks
6compatibility with previous versions, so users (and alt implementors) might
7need to change their own code in order to make it work with Mbed TLS 3.0.
8
9Here's the list of breaking changes; each entry should help you answer these
10two questions: (1) am I affected? (2) if yes, what's my migration path?
11
Dave Rodgman1aea4042021-06-29 13:27:15 +010012The changes are detailed below, and include:
Dave Rodgman759c0102021-06-29 15:55:08 +010013
Dave Rodgman949c21b2021-06-29 18:05:04 +010014- Removal of many insecure or obsolete features
15- Tidying up of configuration options (including removing some less useful options).
Dave Rodgman1aea4042021-06-29 13:27:15 +010016- Changing function signatures (e.g., adding return codes or extra parameters); introducing const to arguments.
17- Removal of functions marked as deprecated in 2.x
18
Dave Rodgmane45e6402021-06-29 13:21:55 +010019Introduce a level of indirection and versioning in the config files
20-------------------------------------------------------------------
Manuel Pégourié-Gonnard89d4ab02021-04-23 11:54:27 +020021
Dave Rodgmane45e6402021-06-29 13:21:55 +010022`config.h` was split into `build_info.h` and `mbedtls_config.h`.
Manuel Pégourié-Gonnard89d4ab02021-04-23 11:54:27 +020023
Dave Rodgmane45e6402021-06-29 13:21:55 +010024* In code, use `#include <mbedtls/build_info.h>`. Don't include `mbedtls/config.h` and don't refer to `MBEDTLS_CONFIG_FILE`.
25* In build tools, edit `mbedtls_config.h`, or edit `MBEDTLS_CONFIG_FILE` as before.
26* If you had a tool that parsed the library version from `include/mbedtls/version.h`, this has moved to `include/mbedtls/build_info.h`. From C code, both headers now define the `MBEDTLS_VERSION_xxx` macros.
27
28Also, if you have a custom configuration file:
29
30* Don't include `check_config.h` or `config_psa.h` anymore.
31* Don't define `MBEDTLS_CONFIG_H` anymore.
32
33A config file version symbol, `MBEDTLS_CONFIG_VERSION` was introduced.
34Defining it to a particular value will ensure that Mbed TLS interprets
35the config file in a way that's compatible with the config file format
36used by the Mbed TLS release whose `MBEDTLS_VERSION_NUMBER` has the same
37value.
38The only value supported by Mbed TLS 3.0.0 is `0x03000000`.
39
Dave Rodgman759c0102021-06-29 15:55:08 +010040Remove support for TLS 1.0, 1.1 and DTLS 1.0
Dave Rodgmane45e6402021-06-29 13:21:55 +010041-------------------------------------------
42
43This change affects users of the TLS 1.0, 1.1 and DTLS 1.0 protocols.
44
45These versions have been deprecated by RFC 8996.
46Keeping them in the library creates opportunities for misconfiguration
47and possibly downgrade attacks. More generally, more code means a larger attack
48surface, even if the code is supposedly not used.
49
50The migration path is to adopt the latest versions of the protocol.
51
52As a consequence of removing TLS 1.0, support for CBC record splitting was
53also removed, as it was a work-around for a weakness in this particular
54version. There is no migration path since the feature is no longer relevant.
55
56As a consequence of currently supporting only one version of (D)TLS (and in the
Dave Rodgman759c0102021-06-29 15:55:08 +010057future 1.3 which will have a different version negotiation mechanism), support
Dave Rodgmane45e6402021-06-29 13:21:55 +010058for fallback SCSV (RFC 7507) was also removed. There is no migration path as
59it's no longer useful with TLS 1.2 and later.
60
61As a consequence of currently supporting only one version of (D)TLS (and in the
62future 1.3 which will have a different concept of ciphersuites), support for
63configuring ciphersuites separately for each version via
64`mbedtls_ssl_conf_ciphersuites_for_version()` was removed. Use
65`mbedtls_ssl_conf_ciphersuites()` to configure ciphersuites to use with (D)TLS
661.2; in the future a different API will be added for (D)TLS 1.3.
67
68Remove support for SSL 3.0
69--------------------------
70
71This doesn't affect people using the default configuration as it was already
72disabled by default.
73
74This only affects TLS users who explicitly enabled `MBEDTLS_SSL_PROTO_SSL3`
75and relied on that version in order to communicate with peers that are not up
76to date. If one of your peers is in that case, please try contacting them and
77encouraging them to upgrade their software.
Dave Rodgmane45e6402021-06-29 13:21:55 +010078
79Strengthen default algorithm selection for X.509 and TLS
80--------------------------------------------------------
81
82The default X.509 verification profile (`mbedtls_x509_crt_profile_default`) and the default curve and hash selection in TLS have changed. They are now aligned, except that the X.509 profile only lists curves that support signature verification.
83
84Hashes and curves weaker than 255 bits (security strength less than 128 bits) are no longer accepted by default. The following hashes have been removed: SHA-1 (formerly only accepted for key exchanges but not for certificate signatures), SHA-224 (weaker hashes were already not accepted). The following curves have been removed: secp192r1, secp224r1, secp192k1, secp224k1.
85
86The compile-time options `MBEDTLS_TLS_DEFAULT_ALLOW_SHA1_IN_CERTIFICATES` and `MBEDTLS_TLS_DEFAULT_ALLOW_SHA1_IN_KEY_EXCHANGE` are no longer available.
87
88The curve secp256k1 has also been removed from the default X.509 and TLS profiles. [RFC 8422](https://datatracker.ietf.org/doc/html/rfc8422#section-5.1.1) deprecates it in TLS, and it is very rarely used, although it is not known to be weak at the time of writing.
89
90If you still need to accept certificates signed with algorithms that have been removed from the default profile, call `mbedtls_x509_crt_verify_with_profile` instead of `mbedtls_x509_crt_verify` and pass a profile that allows the curves and hashes you want. For example, to allow SHA-224:
91```
92mbedtls_x509_crt_profile my_profile = mbedtls_x509_crt_profile_default;
93my_profile.allowed_mds |= MBEDTLS_X509_ID_FLAG( MBEDTLS_MD_SHA224 );
94```
95
96If you still need to allow hashes and curves in TLS that have been removed from the default configuration, call `mbedtls_ssl_conf_sig_hashes()` and `mbedtls_ssl_conf_curves()` with the desired lists.
Manuel Pégourié-Gonnard89d4ab02021-04-23 11:54:27 +020097
98Deprecated functions were removed from hashing modules
99------------------------------------------------------
100
TRodziewiczf41dc7c2021-06-21 13:27:29 +0200101Modules: MD5, SHA1, SHA256, SHA512, MD.
Manuel Pégourié-Gonnard89d4ab02021-04-23 11:54:27 +0200102
Dave Rodgman8cccbe12021-06-29 13:15:50 +0100103- The functions `mbedtls_xxx_starts_ret()`, `mbedtls_xxx_update_ret()`,
104 `mbedtls_xxx_finish_ret()` and `mbedtls_xxx_ret()` were renamed to replace
105 the corresponding functions without `_ret` appended. Please call the name without `_ret` appended and check the return value.
Manuel Pégourié-Gonnard89d4ab02021-04-23 11:54:27 +0200106- The function `mbedtls_md_init_ctx()` was removed; please use
107 `mbedtls_md_setup()` instead.
108- The functions `mbedtls_xxx_process()` were removed. You normally don't need
Manuel Pégourié-Gonnard143b1e32021-05-05 09:46:01 +0200109 to call that from application code. However if you do (or if you want to
Dave Rodgman8cccbe12021-06-29 13:15:50 +0100110 provide your own version of that function), please use
111 `mbedtls_internal_xxx_process()` instead, and check the return value.
Manuel Pégourié-Gonnard89d4ab02021-04-23 11:54:27 +0200112
113Deprecated error codes for hardware failures were removed
114---------------------------------------------------------
115
116- The macros `MBEDTLS_ERR_xxx_FEATURE_UNSUPPORTED` from various crypto modules
117 were removed; `MBEDTLS_ERR_PLATFORM_FEATURE_UNSUPPORTED` is now used
Dave Rodgman8cccbe12021-06-29 13:15:50 +0100118 instead.
Manuel Pégourié-Gonnard89d4ab02021-04-23 11:54:27 +0200119- The macros `MBEDTLS_ERR_xxx_HW_ACCEL_FAILED` from various crypto modules
120 were removed; `MBEDTLS_ERR_PLATFORM_HW_ACCEL_FAILED` is now used instead.
121
122Deprecated names for PSA constants and types were removed
123---------------------------------------------------------
124
Manuel Pégourié-Gonnard2960b2e2021-04-26 09:57:36 +0200125Some constants and types that were present in beta versions of the PSA Crypto
Manuel Pégourié-Gonnard143b1e32021-05-05 09:46:01 +0200126API were removed from version 1.0 of specification. Please switch to the new
Manuel Pégourié-Gonnard89d4ab02021-04-23 11:54:27 +0200127names provided by the 1.0 specification instead.
128
129Internal / alt-focused headers were moved to a private location
130----------------------------------------------------------------
131
132This shouldn't affect users who took care not to include headers that
133were documented as internal, despite being in the public include directory.
134
135If you're providing alt implementations of ECP or RSA, you'll need to add our
136`library` directory to your include path when building your alt
137implementations, and note that `ecp_internal.h` and `rsa_internal.h` have been
Gilles Peskine6a2fb612021-05-24 22:25:04 +0200138renamed to `ecp_internal_alt.h` and `rsa_alt_helpers.h` respectively.
Manuel Pégourié-Gonnard89d4ab02021-04-23 11:54:27 +0200139
140If you're a library user and used to rely on having access to a structure or
141function that's now in a private header, please reach out on the mailing list
142and explain your need; we'll consider adding a new API in a future version.
143
Manuel Pégourié-Gonnard89d4ab02021-04-23 11:54:27 +0200144Remove the certs module from the library
145----------------------------------------
146
147This should not affect production use of the library, as the certificates and
148keys included there were never suitable for production use.
149
150However it might affect you if you relied on them for testing purposes. In
151that case, please embed your own test certificates in your test code; now that
152`certs.c` is out of the library there is no longer any stability guaranteed
153and it may change in incompatible ways at any time.
154
155Remove the HAVEGE module
156------------------------
157
158This doesn't affect people using the default configuration as it was already
159disabled by default.
160
161This only affects users who called the HAVEGE modules directly (not
Manuel Pégourié-Gonnard143b1e32021-05-05 09:46:01 +0200162recommended), or users who used it through the entropy module but had it as the
Manuel Pégourié-Gonnard89d4ab02021-04-23 11:54:27 +0200163only source of entropy. If you're in that case, please declare OS or hardware
164RNG interfaces with `mbedtls_entropy_add_source()` and/or use an entropy seed
165file created securely during device provisioning. See
166<https://tls.mbed.org/kb/how-to/add-entropy-sources-to-entropy-pool> for more
167information.
168
169Remove support for parsing SSLv2 ClientHello
170--------------------------------------------
171
172This doesn't affect people using the default configuration as it was already
173disabled by default.
174
Manuel Pégourié-Gonnard143b1e32021-05-05 09:46:01 +0200175This only affects TLS servers that have clients who send an SSLv2 ClientHello.
Manuel Pégourié-Gonnard89d4ab02021-04-23 11:54:27 +0200176These days clients are very unlikely to do that. If you have a client that
177does, please try contacting them and encouraging them to upgrade their
178software.
179
Thomas Daubney379227c2021-06-18 10:46:12 +0100180Remove support for truncated HMAC
181---------------------------------
Manuel Pégourié-Gonnard89d4ab02021-04-23 11:54:27 +0200182
Thomas Daubneyac844692021-06-18 14:08:56 +0100183This affects users of truncated HMAC, that is, users who called
184`mbedtls_ssl_conf_truncated_hmac( ..., MBEDTLS_SSL_TRUNC_HMAC_ENABLED)`,
185regardless of whether the standard version was used or compatibility version
186(`MBEDTLS_SSL_TRUNCATED_HMAC_COMPAT`).
Manuel Pégourié-Gonnard89d4ab02021-04-23 11:54:27 +0200187
Thomas Daubneyac844692021-06-18 14:08:56 +0100188The recommended migration path for people who want minimal overhead is to use a
189CCM-8 ciphersuite.
Manuel Pégourié-Gonnard89d4ab02021-04-23 11:54:27 +0200190
191Remove support for TLS record-level compression
192-----------------------------------------------
193
194This doesn't affect people using the default configuration as it was already
195disabled by default.
196
197This only affects TLS users who enabled `MBEDTLS_ZLIB_SUPPORT`. This will not
198cause any failures however if you used to enable TLS record-level compression
199you may find that your bandwidth usage increases without compression. There's
200no general solution to this problem; application protocols might have their
201own compression mechanisms and are in a better position than the TLS stack to
202avoid variants of the CRIME and BREACH attacks.
203
204Remove support for TLS RC4-based ciphersuites
205---------------------------------------------
206
Bence Szépkútibb0cfeb2021-05-28 09:42:25 +0200207This does not affect people who used the default `mbedtls_config.h` and the default
Manuel Pégourié-Gonnard2960b2e2021-04-26 09:57:36 +0200208list of ciphersuites, as RC4-based ciphersuites were already not negotiated in
Manuel Pégourié-Gonnard89d4ab02021-04-23 11:54:27 +0200209that case.
210
211Please switch to any of the modern, recommended ciphersuites (based on
212AES-GCM, AES-CCM or ChachaPoly for example) and if your peer doesn't support
213any, encourage them to upgrade their software.
214
215Remove support for TLS single-DES ciphersuites
216----------------------------------------------
217
218This doesn't affect people using the default configuration as it was already
219disabled by default.
220
221Please switch to any of the modern, recommended ciphersuites (based on
222AES-GCM, AES-CCM or ChachaPoly for example) and if your peer doesn't support
223any, encourage them to upgrade their software.
224
225Remove support for TLS record-level hardware acceleration
226---------------------------------------------------------
227
228This doesn't affect people using the default configuration as it was already
229disabled by default.
230
231This feature had been broken for a while so we doubt anyone still used it.
232However if you did, please reach out on the mailing list and let us know about
233your use case.
234
235Remove wrapper for libpkcs11-helper
236-----------------------------------
237
238This doesn't affect people using the default configuration as it was already
239disabled by default.
240
241If you used to rely on this module in order to store your private keys
242securely, please have a look at the key management facilities provided by the
243PSA crypto API. If you have a use case that's not covered yet by this API,
244please reach out on the mailing list.
245
246Remove config option `MBEDTLS_SSL_DEFAULT_TICKET_LIFETIME`
247----------------------------------------------------------
248
249This doesn't affect people using the default configuration.
250
Manuel Pégourié-Gonnard57e93e52021-04-26 09:59:47 +0200251This option has not had any effect for a long time. Please use the `lifetime`
Manuel Pégourié-Gonnard89d4ab02021-04-23 11:54:27 +0200252parameter of `mbedtls_ssl_ticket_setup()` instead.
253
254Remove helpers for the transition from Mbed TLS 1.3 to Mbed TLS 2.0
255-------------------------------------------------------------------
256
257This only affects people who've been using Mbed TLS since before version 2.0
258and still relied on `compat-1.3.h` in their code.
259
260Please use the new names directly in your code; `scripts/rename.pl` (from any
Dave Rodgman949c21b2021-06-29 18:05:04 +0100261of the 2.x releases — no longer included in 3.0) might help you do that.
Dave Rodgman8cccbe12021-06-29 13:15:50 +0100262
Dave Rodgman8cccbe12021-06-29 13:15:50 +0100263Remove 3DES ciphersuites
264--
265
266This change does not affect users using default settings for 3DES in `mbedtls_config.h`
267because the 3DES ciphersuites were disabled by that.
268
2693DES has weaknesses/limitations and there are better alternatives, and more and
270more standard bodies are recommending against its use in TLS.
271
Dave Rodgman759c0102021-06-29 15:55:08 +0100272The migration path here is to chose from the recommended in literature alternatives.
273
Dave Rodgman8cccbe12021-06-29 13:15:50 +0100274CCM interface changes: impact for alternative implementations
275-------------------------------------------------------------
276
277The CCM interface has changed with the addition of support for
278multi-part operations. Five new API functions have been defined:
279mbedtls_ccm_starts(), mbedtls_ccm_set_lengths(),
280mbedtls_ccm_update_ad(), mbedtls_ccm_update() and mbedtls_ccm_finish().
281Alternative implementations of CCM (`MBEDTLS_CCM_ALT`) have now to
282implement those additional five API functions.
Dave Rodgman759c0102021-06-29 15:55:08 +0100283
Dave Rodgman8cccbe12021-06-29 13:15:50 +0100284Calling `mbedtls_cipher_finish()` is mandatory for all multi-part operations
285----------------------------------------------------------------------------
286
287This only affects people who use the cipher module to perform AEAD operations
288using the multi-part API.
289
290Previously, the documentation didn't state explicitly if it was OK to call
291`mbedtls_cipher_check_tag()` or `mbedtls_cipher_write_tag()` directly after
Dave Rodgman949c21b2021-06-29 18:05:04 +0100292the last call to `mbedtls_cipher_update()` that is, without calling
Dave Rodgman8cccbe12021-06-29 13:15:50 +0100293`mbedtls_cipher_finish()` in-between. If you code was missing that call,
294please add it and be prepared to get as much as 15 bytes of output.
295
296Currently the output is always 0 bytes, but it may be more when alternative
297implementations of the underlying primitives are in use, or with future
298versions of the library.
Dave Rodgman759c0102021-06-29 15:55:08 +0100299
Dave Rodgman8cccbe12021-06-29 13:15:50 +0100300Combine the `MBEDTLS_SSL_CID_PADDING_GRANULARITY` and `MBEDTLS_SSL_TLS1_3_PADDING_GRANULARITY` options
301--
302
303This change affects users who modified the default `mbedtls_config.h` padding granularity
304settings, i.e. enabled at least one of the options.
305
306The `mbedtls_config.h` options `MBEDTLS_SSL_CID_PADDING_GRANULARITY` and
307`MBEDTLS_SSL_TLS1_3_PADDING_GRANULARITY` were combined into one option because
308they used exactly the same padding mechanism and hence their respective padding
309granularities can be used in exactly the same way. This change simplifies the
310code maintenance.
311
312The new single option `MBEDTLS_SSL_CID_TLS1_3_PADDING_GRANULARITY` can be used
313for both DTLS-CID and TLS 1.3.
Dave Rodgman759c0102021-06-29 15:55:08 +0100314
Dave Rodgman8cccbe12021-06-29 13:15:50 +0100315Change the API to allow adding critical extensions to CSRs
316------------------------------------------------------------------
317
318This affects applications that call the `mbedtls_x509write_csr_set_extension`
319function.
320
321The API is changed to include the parameter `critical` which allow to mark an
Dave Rodgman7b0c4de2021-06-29 16:05:28 +0100322extension included in a CSR as critical. To get the previous behavior pass 0.
Dave Rodgman8cccbe12021-06-29 13:15:50 +0100323
324TLS now favors faster curves over larger curves
325-----------------------------------------------
326
327The default preference order for curves in TLS now favors resource usage (performance and memory consumption) over size. The exact order is unspecified and may change, but generally you can expect 256-bit curves to be preferred over larger curves.
328
329If you prefer a different order, call `mbedtls_ssl_conf_curves()` when configuring a TLS connection.
Dave Rodgman759c0102021-06-29 15:55:08 +0100330
Dave Rodgman8cccbe12021-06-29 13:15:50 +0100331GCM interface changes: impact for alternative implementations
332-------------------------------------------------------------
333
334The GCM multipart interface has changed as described in [“GCM multipart interface: application changes”](#gcm-multipart-interface:-application-changes). The consequences for an alternative implementation of GCM (`MBEDTLS_GCM_ALT`) are as follows:
335
336* `mbedtls_gcm_starts()` now only sets the mode and the nonce (IV). The new function `mbedtls_gcm_update_ad()` receives the associated data. It may be called multiple times.
337* `mbedtls_gcm_update()` now allows arbitrary-length inputs, takes an extra parameter to indicate the actual output length. Alternative implementations may choose between two modes:
338 * Always return the partial output immediately, even if it does not consist of a whole number of blocks.
339 * Buffer the data for the last partial block, to be returned in the next call to `mbedtls_gcm_update()` or `mbedtls_gcm_finish()`.
340* `mbedtls_gcm_finish()` now takes an extra output buffer for the last partial block if needed.
Dave Rodgman759c0102021-06-29 15:55:08 +0100341
Dave Rodgman8cccbe12021-06-29 13:15:50 +0100342GCM multipart interface: application changes
343--------------------------------------------
344
345The GCM module now supports arbitrary chunked input in the multipart interface.
346This changes the interface for applications using the GCM module directly for multipart operations.
347Applications using one-shot GCM or using GCM via the `mbedtls_cipher_xxx` or `psa_aead_xxx` interfaces do not require any changes.
348
349* `mbedtls_gcm_starts()` now only sets the mode and the nonce (IV). Call the new function `mbedtls_gcm_update_ad()` to pass the associated data.
350* `mbedtls_gcm_update()` now takes an extra parameter to indicate the actual output length. In Mbed TLS 2.x, applications had to pass inputs consisting of whole 16-byte blocks except for the last block (this limitation has been lifted). In this case:
351 * As long as the input remains block-aligned, the output length is exactly the input length, as before.
352 * If the length of the last input is not a multiple of 16, alternative implementations may return the last partial block in the call to `mbedtls_gcm_finish()` instead of returning it in the last call to `mbedtls_gcm_update()`.
353* `mbedtls_gcm_finish()` now takes an extra output buffer for the last partial block. This is needed for alternative implementations that can only process a whole block at a time.
Dave Rodgman759c0102021-06-29 15:55:08 +0100354
Dave Rodgman8cccbe12021-06-29 13:15:50 +0100355SSL key export interface change
356-------------------------------
357
358This affects users of the SSL key export APIs:
359```
360 mbedtls_ssl_conf_export_keys_cb()
361 mbedtls_ssl_conf_export_keys_ext_cb()
362```
363
364Those APIs have been removed and replaced by the new API
365`mbedtls_ssl_set_export_keys_cb()`. This API differs from
366the previous key export API in the following ways:
367
368- It is no longer bound to an SSL configuration, but to an
369 SSL context. This allows users to more easily identify the
370 connection an exported key belongs to.
371- It no longer exports raw keys and IV.
372- A secret type parameter has been added to identify which key
373 is being exported. For TLS 1.2, only the master secret is
374 exported, but upcoming TLS 1.3 support will add other kinds of keys.
375- The callback now specifies a void return type, rather than
376 returning an error code. It is the responsibility of the application
377 to handle failures in the key export callback, for example by
378 shutting down the TLS connection.
379
380For users which do not rely on raw keys and IV, adjusting to the new
Dave Rodgman949c21b2021-06-29 18:05:04 +0100381callback type should be straightforward see the example programs
382`programs/ssl/ssl_client2` and `programs/ssl/ssl_server2` for callbacks
Dave Rodgman8cccbe12021-06-29 13:15:50 +0100383for NSSKeylog, EAP-TLS and DTLS-SRTP.
384
385Users which require access to the raw keys used to secure application
386traffic may derive those by hand based on the master secret and the
387handshake transcript hashes which can be obtained from the raw data
388on the wire. Such users are also encouraged to reach out to the
389Mbed TLS team on the mailing list, to let the team know about their
390use case.
Dave Rodgman759c0102021-06-29 15:55:08 +0100391
Dave Rodgman8cccbe12021-06-29 13:15:50 +0100392The RNG parameter is now mandatory for all functions that accept one
393--------------------------------------------------------------------
394
395This change affects all users who called a function accepting a `f_rng`
396parameter with `NULL` as the value of this argument; this is no longer
397supported.
398
399The changed functions are: the X.509 CRT and CSR writing functions; the PK and
400RSA sign and decrypt functions; `mbedtls_rsa_private()`; the functions in DHM
401and ECDH that compute the shared secret; the scalar multiplication functions in
402ECP.
403
404You now need to pass a properly seeded, cryptographically secure RNG to all
405functions that accept a `f_rng` parameter. It is of course still possible to
406pass `NULL` as the context pointer `p_rng` if your RNG function doesn't need a
407context.
408
409Alternative implementations of a module (enabled with the `MBEDTLS_module_ALT`
410configuration options) may have their own internal and are free to ignore the
411`f_rng` argument but must allow users to pass one anyway.
412
413Some functions gained an RNG parameter
414--------------------------------------
415
416This affects users of the following functions: `mbedtls_ecp_check_pub_priv()`,
417`mbedtls_pk_check_pair()`, `mbedtls_pk_parse_key()`, and
418`mbedtls_pk_parse_keyfile()`.
419
420You now need to pass a properly seeded, cryptographically secure RNG when
Dave Rodgman949c21b2021-06-29 18:05:04 +0100421calling these functions. It is used for blinding, a countermeasure against
Dave Rodgman8cccbe12021-06-29 13:15:50 +0100422side-channel attacks.
423
424The configuration option `MBEDTLS_ECP_NO_INTERNAL_RNG` was removed
425------------------------------------------------------------------
426
427This doesn't affect users of the default configuration; it only affects people
428who were explicitly setting this option.
429
Dave Rodgman949c21b2021-06-29 18:05:04 +0100430This was a trade-off between code size and countermeasures; it is no longer
431relevant as the countermeasure is now always on at no cost in code size.
Dave Rodgman759c0102021-06-29 15:55:08 +0100432
Dave Rodgman8cccbe12021-06-29 13:15:50 +0100433Remove MaximumFragmentLength (MFL) query API
434-----------------------------------------------------------------
435
436This affects users which use the MFL query APIs
437`mbedtls_ssl_get_{input,output}_max_frag_len()` to
438infer upper bounds on the plaintext size of incoming and
439outgoing record.
440
441Users should switch to `mbedtls_ssl_get_max_{in,out}_record_payload()`
442instead, which also provides such upper bounds but takes more factors
443than just the MFL configuration into account.
Dave Rodgman759c0102021-06-29 15:55:08 +0100444
445Change MBEDTLS_ECP_FIXED_POINT_OPTIM behavior
Dave Rodgman8cccbe12021-06-29 13:15:50 +0100446------------------------------------------------------
447
448The option `MBEDTLS_ECP_FIXED_POINT_OPTIM` now increase code size and it does
449not increase peak RAM usage anymore.
450
451If you are limited by code size, you can define `MBEDTLS_ECP_FIXED_POINT_OPTIM`
452to `0` in your config file. The impact depends on the number and size of
453enabled curves. For example, for P-256 the difference is 1KB; see the documentation
454of this option for details.
455
456Replaced MBEDTLS_SHA512_NO_SHA384 with MBEDTLS_SHA384_C
457------------------------------------------------------
458
459This does not affect users who use the default `mbedtls_config.h`.
460MBEDTLS_SHA512_NO_SHA384 was disabled by default, now MBEDTLS_SHA384_C is
461enabled by default.
462
463If you were using a config file with both MBEDTLS_SHA512_C and
464MBEDTLS_SHA512_NO_SHA384, then just remove the MBEDTLS_SHA512_NO_SHA384.
465If you were using a config file with MBEDTLS_SHA512_C and without
466MBEDTLS_SHA512_NO_SHA384 and you need the SHA-384 algorithm, then add
467`#define MBEDTLS_SHA384_C` to your config file.
Dave Rodgman759c0102021-06-29 15:55:08 +0100468
Dave Rodgman8cccbe12021-06-29 13:15:50 +0100469Move part of timing module out of the library
470--
471
472The change affects users who use any of the following functions:
473`mbedtls_timing_self_test()`, `mbedtls_hardclock_poll()`,
474`mbedtls_timing_hardclock()` and `mbedtls_set_alarm()`.
475
476If you were relying on these functions, you'll now need to change to using your
477platform's corresponding functions directly.
Dave Rodgman759c0102021-06-29 15:55:08 +0100478
Dave Rodgman8cccbe12021-06-29 13:15:50 +0100479Extra parameter for the output buffer size
480------------------------------------------
481
482The following functions now take an extra parameter indicating the size of the output buffer:
483
484* `mbedtls_ecdsa_write_signature()`, `mbedtls_ecdsa_write_signature_restartable()`
485* `mbedtls_pk_sign()`, `mbedtls_pk_sign_restartable()`
486
487The requirements for the output buffer have not changed, but passing a buffer that is too small now reliably causes the functions to return an error, rather than overflowing the buffer.
Dave Rodgman759c0102021-06-29 15:55:08 +0100488
Dave Rodgman8cccbe12021-06-29 13:15:50 +0100489Relaxed semantics for PSK configuration
490-----------------------------------------------------------------
491
492This affects users which call the PSK configuration APIs
493`mbedtlsl_ssl_conf_psk()` and `mbedtls_ssl_conf_psk_opaque()`
494multiple times on the same SSL configuration.
495
496In Mbed TLS 2.x, users would observe later calls overwriting
497the effect of earlier calls, with the prevailing PSK being
498the one that has been configured last. In Mbed TLS 3.0,
499calling `mbedtls_ssl_conf_[opaque_]psk()` multiple times
500will return an error, leaving the first PSK intact.
501
502To achieve equivalent functionality when migrating to Mbed TLS 3.0,
503users calling `mbedtls_ssl_conf_[opaque_]psk()` multiple times should
504remove all but the last call, so that only one call to _either_
505`mbedtls_ssl_conf_psk()` _or_ `mbedtls_ssl_conf_psk_opaque()`
506remains.
Dave Rodgman759c0102021-06-29 15:55:08 +0100507
Dave Rodgman8cccbe12021-06-29 13:15:50 +0100508Remove the configuration to enable weak ciphersuites in SSL / TLS
509-----------------------------------------------------------------
510
511This does not affect users who use the default `mbedtls_config.h`, as this option was
512already off by default.
513
514If you were using a weak cipher, please switch to any of the modern,
515recommended ciphersuites (based on AES-GCM, AES-CCM or ChachaPoly for example)
516and if your peer doesn't support any, encourage them to upgrade their software.
517
518If you were using a ciphersuite without encryption, you just have to
519enable MBEDTLS_CIPHER_NULL_CIPHER now.
Dave Rodgman759c0102021-06-29 15:55:08 +0100520
Dave Rodgman8cccbe12021-06-29 13:15:50 +0100521Remove the `MBEDTLS_SSL_MAX_CONTENT_LEN` configuration option
522-------------------------------------------------------------
523
524This affects users who use the `MBEDTLS_SSL_MAX_CONTENT_LEN` option to
525set the maximum length of incoming and outgoing plaintext fragments,
526which can save memory by reducing the size of the TLS I/O buffers.
527
528This option is replaced by the more fine-grained options
529`MBEDTLS_SSL_IN_CONTENT_LEN` and `MBEDTLS_SSL_OUT_CONTENT_LEN` that set
530the maximum incoming and outgoing plaintext fragment lengths, respectively.
Dave Rodgman759c0102021-06-29 15:55:08 +0100531
Dave Rodgman8cccbe12021-06-29 13:15:50 +0100532Remove the option to build the library without any entropy sources
533------------------------------------------------------------------
534
535This does not affect users who use the default `mbedtls_config.h`, as this option was
536already off by default.
537
538If you were using the `MBEDTLS_TEST_NULL_ENTROPY` option and your platform
539doesn't have any entropy source, you should use `MBEDTLS_ENTROPY_NV_SEED`
540and make sure your device is provisioned with a strong random seed.
541Alternatively, for testing purposes only, you can create and register a fake
542entropy function.
Dave Rodgman759c0102021-06-29 15:55:08 +0100543
Dave Rodgman8cccbe12021-06-29 13:15:50 +0100544Remove the mode parameter from RSA functions
545--------------------------------------------
546
547This affects all users who use the RSA encryption, decryption, sign and
548verify APIs.
549
550The RSA module no longer supports private-key operations with the public key or
551vice versa. As a consequence, RSA operation functions no longer have a mode
552parameter. If you were calling RSA operations with the normal mode (public key
553for verification or encryption, private key for signature or decryption), remove
554the `MBEDTLS_MODE_PUBLIC` or `MBEDTLS_MODE_PRIVATE` argument. If you were calling
555RSA operations with the wrong mode, which rarely makes sense from a security
556perspective, this is no longer supported.
557
558Remove the RNG parameter from RSA verify functions
559--------------------------------------------------
560
561RSA verification functions also no longer take random generator arguments (this
562was only needed when using a private key). This affects all applications using
563the RSA verify functions.
564
565Remove the SSL API mbedtls_ssl_get_session_pointer()
566-----------------------------------------------------------------
567
568This affects two classes of users:
569
5701. Users who manually inspect parts of the current session through
571 direct structure field access.
572
5732. Users of session resumption who query the current session
574 via `mbedtls_ssl_get_session_pointer()` prior to saving or exporting
575 it via `mbedtls_ssl_session_copy()` or `mbedtls_ssl_session_save()`,
576 respectively.
577
578Migration paths:
579
Dave Rodgman759c0102021-06-29 15:55:08 +01005801. Mbed TLS 3.0 does not offer a migration path for the use case 1: Like many
Dave Rodgman8cccbe12021-06-29 13:15:50 +0100581 other Mbed TLS structures, the structure of `mbedtls_ssl_session` is no
582 longer part of the public API in Mbed TLS 3.0, and direct structure field
583 access is no longer supported. Please see the corresponding migration guide.
584
5852. Users should replace calls to `mbedtls_ssl_get_session_pointer()` by
586 calls to `mbedtls_ssl_get_session()` as demonstrated in the example
587 program `programs/ssl/ssl_client2.c`.
Dave Rodgman759c0102021-06-29 15:55:08 +0100588
589Remove the config option MBEDTLS_X509_ALLOW_UNSUPPORTED_CRITICAL_EXTENSION
Dave Rodgman8cccbe12021-06-29 13:15:50 +0100590--------------------------------------------------------------------------
591
Dave Rodgman759c0102021-06-29 15:55:08 +0100592This change does not affect users of the default configuration; it only affects
Dave Rodgman8cccbe12021-06-29 13:15:50 +0100593users who enable this option.
594
595The X.509 standard says that implementations must reject critical extensions that
596they don't recognize, and this is what Mbed TLS does by default. This option
597allowed to continue parsing those certificates but didn't provide a convenient
598way to handle those extensions.
599
600The migration path from that option is to use the
601`mbedtls_x509_crt_parse_der_with_ext_cb()` function which is functionally
602equivalent to `mbedtls_x509_crt_parse_der()`, and/or
603`mbedtls_x509_crt_parse_der_nocopy()` but it calls the callback with every
604unsupported certificate extension and additionally the "certificate policies"
605extension if it contains any unsupported certificate policies.
Dave Rodgman759c0102021-06-29 15:55:08 +0100606
Dave Rodgman8cccbe12021-06-29 13:15:50 +0100607Remove `MBEDTLS_X509_CHECK_*_KEY_USAGE` options from `mbedtls_config.h`
608-------------------------------------------------------------------
609
610This change affects users who have chosen the configuration options to disable the
611library's verification of the `keyUsage` and `extendedKeyUsage` fields of x509
612certificates.
613
614The `MBEDTLS_X509_CHECK_KEY_USAGE` and `MBEDTLS_X509_CHECK_EXTENDED_KEY_USAGE`
615configuration options are removed and the X509 code now behaves as if they were
616always enabled. It is consequently not possible anymore to disable at compile
617time the verification of the `keyUsage` and `extendedKeyUsage` fields of X509
618certificates.
619
620The verification of the `keyUsage` and `extendedKeyUsage` fields is important,
621disabling it can cause security issues and it is thus not recommended. If the
622verification is for some reason undesirable, it can still be disabled by means
623of the verification callback function passed to `mbedtls_x509_crt_verify()` (see
624the documentation of this function for more information).
Dave Rodgman759c0102021-06-29 15:55:08 +0100625
Dave Rodgman8cccbe12021-06-29 13:15:50 +0100626Remove MD2, MD4, RC4, Blowfish and XTEA algorithms
627--
628
629This change affects users of the MD2, MD4, RC4, Blowfish and XTEA algorithms.
630
631They are already niche or obsolete and most of them are weak or broken. For
632those reasons possible users should consider switching to modern and safe
633alternatives to be found in literature.
Dave Rodgman759c0102021-06-29 15:55:08 +0100634
Dave Rodgman8cccbe12021-06-29 13:15:50 +0100635Remove MBEDTLS_SSL_DTLS_BADMAC_LIMIT option
636-------------------------------------------
637
638This change does not affect users who used the default `mbedtls_config.h`, as the option
639MBEDTLS_SSL_DTLS_BADMAC_LIMIT was already on by default.
640
641This option was a trade-off between functionality and code size: it allowed
642users who didn't need that feature to avoid paying the cost in code size, by
643disabling it.
644
645This option is no longer present, but its functionality is now always enabled.
Dave Rodgman759c0102021-06-29 15:55:08 +0100646
Dave Rodgman8cccbe12021-06-29 13:15:50 +0100647Deprecated functions were removed from AES
648------------------------------------------
649
650The functions `mbedtls_aes_encrypt()` and `mbedtls_aes_decrypt()` were
651removed.
652
653If you're simply using the AES module, you should be calling the higher-level
654functions `mbedtls_aes_crypt_xxx()`.
655
656If you're providing an alternative implementation using
657`MBEDTLS_AES_ENCRYPT_ALT` or `MBEDTLS_AES_DECRYPT_ALT`, you should be
658replacing the removed functions with `mbedtls_internal_aes_encrypt()` and
659`mbedtls_internal_aes_decrypt()` respectively.
660
661Deprecated functions were removed from bignum
662---------------------------------------------
663
664The function `mbedtls_mpi_is_prime()` was removed. Please use
665`mbedtls_mpi_is_prime_ext()` instead which additionally allows specifying the
666number of Miller-Rabin rounds.
667
668Deprecated functions were removed from cipher
669---------------------------------------------
670
671The functions `mbedtls_cipher_auth_encrypt()` and
672`mbedtls_cipher_auth_decrypt()` were removed. They were superseded by
673`mbedtls_cipher_auth_encrypt_ext()` and `mbedtls_cipher_auth_decrypt_ext()`
674respectively which additionally support key wrapping algorithms such as
675NIST_KW.
676
677Deprecated functions were removed from DRBGs
678--------------------------------------------
679
680The functions `mbedtls_ctr_drbg_update()` and `mbedtls_hmac_drbg_update()`
681were removed. They were superseded by `mbedtls_ctr_drbg_update_ret()` and
682`mbedtls_hmac_drbg_update_ret()` respectively.
683
684Deprecated functions were removed from ECDSA
685--------------------------------------------
686
687The functions `mbedtls_ecdsa_write_signature_det()` and
688`mbedtls_ecdsa_sign_det()` were removed. They were superseded by
689`mbedtls_ecdsa_write_signature()` and `mbedtls_ecdsa_sign_det_ext()`
690respectively.
691
692Deprecated functions were removed from SSL
693------------------------------------------
694
695The function `mbedtls_ssl_conf_dh_param()` was removed. Please use
696`mbedtls_ssl_conf_dh_param_bin()` or `mbedtls_ssl_conf_dh_param_ctx()` instead.
697
698The function `mbedtls_ssl_get_max_frag_len()` was removed. Please use
699`mbedtls_ssl_get_max_out_record_payload()` and
700`mbedtls_ssl_get_max_in_record_payload()`
701instead.
702
703Deprecated hex-encoded primes were removed from DHM
704---------------------------------------------------
705
706The macros `MBEDTLS_DHM_RFC5114_MODP_2048_P`, `MBEDTLS_DHM_RFC5114_MODP_2048_G`,
707`MBEDTLS_DHM_RFC3526_MODP_2048_P`, `MBEDTLS_DHM_RFC3526_MODP_2048_G`,
708`MBEDTLS_DHM_RFC3526_MODP_3072_P`, `MBEDTLS_DHM_RFC3526_MODP_3072_G`,
709`MBEDTLS_DHM_RFC3526_MODP_4096_P `and `MBEDTLS_DHM_RFC3526_MODP_4096_G` were
710removed. The primes from RFC 5114 are deprecated because their derivation is not
711documented and therefore their usage constitutes a security risk; they are fully
712removed from the library. Please use parameters from RFC3526 (still in the
713library, only in binary form) or RFC 7919 (also available in the library) or
714other trusted sources instead.
715
716Deprecated net.h file was removed
717---------------------------------
718
719The file `include/mbedtls/net.h` was removed because its only function was to
720include `mbedtls/net_sockets.h` which now should be included directly.
Dave Rodgman759c0102021-06-29 15:55:08 +0100721
Dave Rodgman8cccbe12021-06-29 13:15:50 +0100722Remove MBEDTLS_CHECK_PARAMS option
723----------------------------------
724
725This change does not affect users who use the default configuration; it only
726affects users who enabled that option.
727
728The option `MBEDTLS_CHECK_PARAMS` (disabled by default) enabled certain kinds
729of parameter validation”. It covered two kinds of validations:
730
731- In some functions that require a valid pointer, parameter validation checks
732that the pointer is non-null. With the feature disabled, a null pointer is not
733treated differently from any other invalid pointer, and typically leads to a
734runtime crash. 90% of the uses of the feature are of this kind.
735- In some functions that take an enum-like argument, parameter validation
736checks that the value is a valid one. With the feature disabled, an invalid
737value causes a silent default to one of the valid values.
738
739The default reaction to a failed check was to call a function
740`mbedtls_param_failed()` which the application had to provide. If this function
741returned, its caller returned an error `MBEDTLS_ERR_xxx_BAD_INPUT_DATA`.
742
743This feature was only used in some classic (non-PSA) cryptography modules. It was
744not used in X.509, TLS or in PSA crypto, and it was not implemented in all
745classic crypto modules.
746
747This feature has been removed. The library no longer checks for NULL pointers;
748checks for enum-like arguments will be kept or re-introduced on a case-by-case
749basis, but their presence will no longer be dependent on a compile-time option.
750
751Validation of enum-like values is somewhat useful, but not extremely important,
752because the parameters concerned are usually constants in applications.
753
754For more information see issue #4313.
Dave Rodgman759c0102021-06-29 15:55:08 +0100755
Dave Rodgman8cccbe12021-06-29 13:15:50 +0100756Remove MBEDTLS_SSL_RECORD_CHECKING option and enable its action by default
757--------------------------------------------------------------------------
758
759This change does not affect users who use the default mbedtls_config.h, as the
760option MBEDTLS_SSL_RECORD_CHECKING was already on by default.
761
762This option was added only to control compilation of one function,
763mbedtls_ssl_check_record(), which is only useful in some specific cases, so it
764was made optional to allow users who don't need it to save some code space.
765However, the same effect can be achieve by using link-time garbage collection.
766
767Users who changed the default setting of the option need to change the config/
768build system to remove that change.
Dave Rodgman759c0102021-06-29 15:55:08 +0100769
Dave Rodgman8cccbe12021-06-29 13:15:50 +0100770Remove the `MBEDTLS_X509_ALLOW_EXTENSIONS_NON_V3` option
771--
772
773This change does not affect users who were using the default configuration, as
774this option was already disabled by default. Also, it does not affect users who
775are working with current V3 X.509 certificates.
776
777Extensions were added in V3 of the X.509 specification, so pre-V3 certificates
778containing extensions were never compliant. Mbed TLS now rejects them with a
779parsing error in all configurations, as it did previously in the default
780configuration.
781
782If you are working with the pre-V3 certificates you need to switch to the
783current ones.
Dave Rodgman8cccbe12021-06-29 13:15:50 +0100784
785Rename mbedtls_*_ret() cryptography functions whose deprecated variants have been removed
786-----------------
787
788This change affects users who were using the `mbedtls_*_ret()` cryptography
789functions.
790
791Those functions were created based on now-deprecated functions according to a
792requirement that a function needs to return a value. This change brings back the
793original names of those functions. The renamed functions are:
794
795| name before this change | after the change |
796|------------------------------|--------------------------|
797| mbedtls_ctr_drbg_update_ret | mbedtls_ctr_drbg_update |
798| mbedtls_hmac_drbg_update_ret | mbedtls_hmac_drbg_update |
799| mbedtls_md5_starts_ret | mbedtls_md5_starts |
800| mbedtls_md5_update_ret | mbedtls_md5_update |
801| mbedtls_md5_finish_ret | mbedtls_md5_finish |
802| mbedtls_md5_ret | mbedtls_md5 |
803| mbedtls_ripemd160_starts_ret | mbedtls_ripemd160_starts |
804| mbedtls_ripemd160_update_ret | mbedtls_ripemd160_update |
805| mbedtls_ripemd160_finish_ret | mbedtls_ripemd160_finish |
806| mbedtls_ripemd160_ret | mbedtls_ripemd160 |
807| mbedtls_sha1_starts_ret | mbedtls_sha1_starts |
808| mbedtls_sha1_update_ret | mbedtls_sha1_update |
809| mbedtls_sha1_finish_ret | mbedtls_sha1_finish |
810| mbedtls_sha1_ret | mbedtls_sha1 |
811| mbedtls_sha256_starts_ret | mbedtls_sha256_starts |
812| mbedtls_sha256_update_ret | mbedtls_sha256_update |
813| mbedtls_sha256_finish_ret | mbedtls_sha256_finish |
814| mbedtls_sha256_ret | mbedtls_sha256 |
815| mbedtls_sha512_starts_ret | mbedtls_sha512_starts |
816| mbedtls_sha512_update_ret | mbedtls_sha512_update |
817| mbedtls_sha512_finish_ret | mbedtls_sha512_finish |
818| mbedtls_sha512_ret | mbedtls_sha512 |
819
820To migrate to the this change the user can keep the `*_ret` names in their code
821and include the `compat_2.x.h` header file which holds macros with proper
822renaming or to rename those function in their code according to the list from
823mentioned header file.
824
Dave Rodgman8cccbe12021-06-29 13:15:50 +0100825Signature functions now require the hash length to match the expected value
826---------------------------------------------------------------------------
827
828This affects users of the PK API as well as users of the low-level API in the RSA module. Users of the PSA API or of the ECDSA module are unaffected.
829
830All the functions in the RSA module that accept a `hashlen` parameter used to
831ignore it unless the `md_alg` parameter was `MBEDTLS_MD_NONE`, indicating raw
832data was signed. The `hashlen` parameter is now always the size that is read
833from the `hash` input buffer. This length must be equal to the output size of
834the hash algorithm used when signing a hash. (The requirements when signing
835raw data are unchanged.) This affects the following functions:
836
837* `mbedtls_rsa_pkcs1_sign`, `mbedtls_rsa_pkcs1_verify`
838* `mbedtls_rsa_rsassa_pkcs1_v15_sign`, `mbedtls_rsa_rsassa_pkcs1_v15_verify`
839* `mbedtls_rsa_rsassa_pss_sign`, `mbedtls_rsa_rsassa_pss_verify`
840* `mbedtls_rsa_rsassa_pss_sign_ext`, `mbedtls_rsa_rsassa_pss_verify_ext`
841
842The signature functions in the PK module no longer accept 0 as the `hash_len` parameter. The `hash_len` parameter is now always the size that is read from the `hash` input buffer. This affects the following functions:
843
844* `mbedtls_pk_sign`, `mbedtls_pk_verify`
845* `mbedtls_pk_sign_restartable`, `mbedtls_pk_verify_restartable`
846* `mbedtls_pk_verify_ext`
847
848The migration path is to pass the correct value to those functions.
Dave Rodgman759c0102021-06-29 15:55:08 +0100849
Dave Rodgman8cccbe12021-06-29 13:15:50 +0100850Remove the padding parameters from mbedtls_rsa_init()
851-----------------------------------------------------
852
853This affects all users who use the RSA encryption, decryption, sign and
854verify APIs.
855
856The function mbedtls_rsa_init() no longer supports selecting the PKCS#1 v2.1
857encoding and its hash. It just selects the PKCS#1 v1.5 encoding by default. If
858you were using the PKCS#1 v2.1 encoding you now need, subsequently to the call
859to mbedtls_rsa_init(), to call mbedtls_rsa_set_padding() to set it.
860
861To choose the padding type when initializing a context, instead of
862```C
863 mbedtls_rsa_init(ctx, padding, hash_id);
864```
865, use
866```C
867 mbedtls_rsa_init(ctx);
868 mbedtls_rsa_set_padding(ctx, padding, hash_id);
869```
870
871To use PKCS#1 v1.5 padding, instead of
872```C
873 mbedtls_rsa_init(ctx, MBEDTLS_RSA_PKCS_V15, <ignored>);
874```
875, just use
876```C
877 mbedtls_rsa_init(ctx);
878```
Dave Rodgman759c0102021-06-29 15:55:08 +0100879
Dave Rodgman8cccbe12021-06-29 13:15:50 +0100880Separated MBEDTLS_SHA224_C and MBEDTLS_SHA256_C
881-----------------------------------------------------------------
882
883This does not affect users who use the default `mbedtls_config.h`. MBEDTLS_SHA256_C
884was enabled by default. Now both MBEDTLS_SHA256_C and MBEDTLS_SHA224_C are
885enabled.
886
887If you were using custom config file with MBEDTLS_SHA256_C enabled, then
888you will need to add `#define MBEDTLS_SHA224_C` option your config.
889Current version of the library does not support enabling MBEDTLS_SHA256_C
890without MBEDTLS_SHA224_C.
Dave Rodgman759c0102021-06-29 15:55:08 +0100891
Dave Rodgman8cccbe12021-06-29 13:15:50 +0100892Session Cache API Change
893-----------------------------------------------------------------
894
895This affects users who use `mbedtls_ssl_conf_session_cache()`
896to configure a custom session cache implementation different
897from the one Mbed TLS implements in `library/ssl_cache.c`.
898
899Those users will need to modify the API of their session cache
900implementation to that of a key-value store with keys being
901session IDs and values being instances of `mbedtls_ssl_session`:
902
903```
904typedef int mbedtls_ssl_cache_get_t( void *data,
905 unsigned char const *session_id,
906 size_t session_id_len,
907 mbedtls_ssl_session *session );
908typedef int mbedtls_ssl_cache_set_t( void *data,
909 unsigned char const *session_id,
910 size_t session_id_len,
911 const mbedtls_ssl_session *session );
912```
913
914Since the structure of `mbedtls_ssl_session` is no longer public from 3.0
915onwards, portable session cache implementations must not access fields of
916`mbedtls_ssl_session`. See the corresponding migration guide. Users that
917find themselves unable to migrate their session cache functionality without
Dave Rodgman759c0102021-06-29 15:55:08 +0100918accessing fields of `mbedtls_ssl_session` should describe their use case
Dave Rodgman8cccbe12021-06-29 13:15:50 +0100919on the Mbed TLS mailing list.
Dave Rodgman759c0102021-06-29 15:55:08 +0100920
Dave Rodgman8cccbe12021-06-29 13:15:50 +0100921SHA-512 and SHA-256 output type change
922--------------------------
923
924The output parameter of `mbedtls_sha256_finish_ret()`, `mbedtls_sha256_ret()`, `mbedtls_sha512_finish_ret()`, `mbedtls_sha512_ret()` now has a pointer type rather than array type. This makes no difference in terms of C semantics, but removes spurious warnings in some compilers when outputting a SHA-384 hash into a 48-byte buffer or a SHA-224 hash into a 28-byte buffer.
925
926This makes no difference to a vast majority of applications. If your code takes a pointer to one of these functions, you may need to change the type of the pointer.
927
928Alternative implementations of the SHA256 and SHA512 modules must adjust their functions' prototype accordingly.
Dave Rodgman8cccbe12021-06-29 13:15:50 +0100929
Dave Rodgman8cccbe12021-06-29 13:15:50 +0100930Removal of some SSL error codes
931-----------------------------------------------------------------
932
933This affects users manually checking for the following error codes:
Dave Rodgman759c0102021-06-29 15:55:08 +0100934
Dave Rodgman8cccbe12021-06-29 13:15:50 +0100935- `MBEDTLS_ERR_SSL_CERTIFICATE_REQUIRED`
936- `MBEDTLS_ERR_SSL_INVALID_VERIFY_HASH`
937- `MBEDTLS_ERR_SSL_CERTIFICATE_TOO_LARGE`
938- `MBEDTLS_ERR_SSL_NO_CIPHER_CHOSEN`
939- `MBEDTLS_ERR_SSL_NO_USABLE_CIPHERSUITE`
940- `MBEDTLS_ERR_SSL_BAD_HS_XXX`
941
942Migration paths:
943- `MBEDTLS_ERR_SSL_CERTIFICATE_REQUIRED` and `MBEDTLS_ERR_SSL_INVALID_VERIFY_HASH`
944 should never be returned from Mbed TLS, and there is no need to check for it.
Dave Rodgman759c0102021-06-29 15:55:08 +0100945
Dave Rodgman8cccbe12021-06-29 13:15:50 +0100946 Users should simply remove manual checks for those codes, and let the Mbed TLS
Dave Rodgman949c21b2021-06-29 18:05:04 +0100947 team know if contrary to the team's understanding — there is in fact a situation
Dave Rodgman8cccbe12021-06-29 13:15:50 +0100948 where one of them was ever returned.
Dave Rodgman759c0102021-06-29 15:55:08 +0100949
Dave Rodgman8cccbe12021-06-29 13:15:50 +0100950- `MBEDTLS_ERR_SSL_CERTIFICATE_TOO_LARGE` has been removed, and
951 `MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL` is returned instead if the user's own certificate
Dave Rodgman759c0102021-06-29 15:55:08 +0100952 is too large to fit into the output buffers.
953
954 Users should check for `MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL` instead, and potentially
955 compare the size of their own certificate against the configured size of the output buffer to
956 understand if the error is due to an overly large certificate.
957
958- `MBEDTLS_ERR_SSL_NO_CIPHER_CHOSEN` and `MBEDTLS_ERR_SSL_NO_USABLE_CIPHERSUITE` have been replaced by `MBEDTLS_ERR_SSL_HANDSHAKE_FAILURE`
Dave Rodgman8cccbe12021-06-29 13:15:50 +0100959
Dave Rodgman759c0102021-06-29 15:55:08 +0100960- all codes of the form `MBEDTLS_ERR_SSL_BAD_HS_XXX` have been replaced by various alternatives.
961
962Modified semantics of mbedtls_ssl_{get,set}_session()
Dave Rodgman8cccbe12021-06-29 13:15:50 +0100963-----------------------------------------------------------------
964
965This affects users who call `mbedtls_ssl_get_session()` or
966`mbedtls_ssl_set_session()` multiple times on the same SSL context
967representing an established TLS 1.2 connection.
968Those users will now observe the second call to fail with
969`MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE`.
970
971Migration path:
972- Exporting the same TLS 1.2 connection multiple times via
973 `mbedtls_ssl_get_session()` leads to multiple copies of
974 the same session. This use of `mbedtls_ssl_get_session()`
975 is discouraged, and the following should be considered:
976 * If the various session copies are later loaded into
977 fresh SSL contexts via `mbedtls_ssl_set_session()`,
978 export via `mbedtls_ssl_get_session()` only once and
979 load the same session into different contexts via
980 `mbedtls_ssl_set_session()`. Since `mbedtls_ssl_set_session()`
981 makes a copy of the session that's being loaded, this
982 is functionally equivalent.
983 * If the various session copies are later serialized
984 via `mbedtls_ssl_session_save()`, export and serialize
985 the session only once via `mbedtls_ssl_get_session()` and
986 `mbedtls_ssl_session_save()` and make copies of the raw
987 data instead.
988- Calling `mbedtls_ssl_set_session()` multiple times in Mbed TLS 2.x
989 is not useful since subsequent calls overwrite the effect of previous
Dave Rodgman759c0102021-06-29 15:55:08 +0100990 calls. Applications achieve equivalent functional behavior by
Dave Rodgman8cccbe12021-06-29 13:15:50 +0100991 issuing only the very last call to `mbedtls_ssl_set_session()`.
992
Dave Rodgman759c0102021-06-29 15:55:08 +0100993Turn MBEDTLS_SSL_SRV_RESPECT_CLIENT_PREFERENCE configuration option into a runtime option
Dave Rodgman8cccbe12021-06-29 13:15:50 +0100994 --
995
996This change affects users who were enabling MBEDTLS_SSL_SRV_RESPECT_CLIENT_PREFERENCE
997option in the `mbedtls_config.h`
998
999This option has been removed and a new function with similar functionality has
1000been introduced into the SSL API.
1001
1002This new function `mbedtls_ssl_conf_preference_order()` can be used to
1003change the preferred order of ciphersuites on the server to those used on the client,
1004e.g.: `mbedtls_ssl_conf_preference_order(ssl_config, MBEDTLS_SSL_SRV_CIPHERSUITE_ORDER_CLIENT)`
1005has the same effect as enabling the removed option. The default state is to use
1006the server order of suites.
Dave Rodgmane45e6402021-06-29 13:21:55 +01001007
1008Some function parameters were made const
1009----------------------------------------
1010
1011Various functions in the PK and ASN.1 modules had a `const` qualifier added to
1012some of their parameters.
1013
1014This normally doesn't affect your code, unless you use pointers to reference
1015those functions. In this case, you'll need to update the type of your pointers
1016in order to match the new signature.