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