Mbed TLS v3.6.1
ssl.h
Go to the documentation of this file.
1 
6 /*
7  * Copyright The Mbed TLS Contributors
8  * SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
9  */
10 #ifndef MBEDTLS_SSL_H
11 #define MBEDTLS_SSL_H
12 #include "mbedtls/platform_util.h"
13 #include "mbedtls/private_access.h"
14 
15 #include "mbedtls/build_info.h"
16 
17 #include "mbedtls/bignum.h"
18 #include "mbedtls/ecp.h"
19 
21 
22 #if defined(MBEDTLS_X509_CRT_PARSE_C)
23 #include "mbedtls/x509_crt.h"
24 #include "mbedtls/x509_crl.h"
25 #endif
26 
27 #if defined(MBEDTLS_DHM_C)
28 #include "mbedtls/dhm.h"
29 #endif
30 
31 #include "mbedtls/md.h"
32 
33 #if defined(MBEDTLS_KEY_EXCHANGE_SOME_ECDH_OR_ECDHE_ANY_ENABLED)
34 #include "mbedtls/ecdh.h"
35 #endif
36 
37 #if defined(MBEDTLS_HAVE_TIME)
38 #include "mbedtls/platform_time.h"
39 #endif
40 
41 #include "psa/crypto.h"
42 
43 /*
44  * SSL Error codes
45  */
47 #define MBEDTLS_ERR_SSL_CRYPTO_IN_PROGRESS -0x7000
49 #define MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE -0x7080
51 #define MBEDTLS_ERR_SSL_BAD_INPUT_DATA -0x7100
53 #define MBEDTLS_ERR_SSL_INVALID_MAC -0x7180
55 #define MBEDTLS_ERR_SSL_INVALID_RECORD -0x7200
57 #define MBEDTLS_ERR_SSL_CONN_EOF -0x7280
59 #define MBEDTLS_ERR_SSL_DECODE_ERROR -0x7300
60 /* Error space gap */
62 #define MBEDTLS_ERR_SSL_NO_RNG -0x7400
64 #define MBEDTLS_ERR_SSL_NO_CLIENT_CERTIFICATE -0x7480
66 #define MBEDTLS_ERR_SSL_UNSUPPORTED_EXTENSION -0x7500
68 #define MBEDTLS_ERR_SSL_NO_APPLICATION_PROTOCOL -0x7580
70 #define MBEDTLS_ERR_SSL_PRIVATE_KEY_REQUIRED -0x7600
72 #define MBEDTLS_ERR_SSL_CA_CHAIN_REQUIRED -0x7680
74 #define MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE -0x7700
76 #define MBEDTLS_ERR_SSL_FATAL_ALERT_MESSAGE -0x7780
78 #define MBEDTLS_ERR_SSL_UNRECOGNIZED_NAME -0x7800
80 #define MBEDTLS_ERR_SSL_PEER_CLOSE_NOTIFY -0x7880
81 /* Error space gap */
82 /* Error space gap */
84 #define MBEDTLS_ERR_SSL_BAD_CERTIFICATE -0x7A00
85 /* Error space gap */
87 #define MBEDTLS_ERR_SSL_RECEIVED_NEW_SESSION_TICKET -0x7B00
89 #define MBEDTLS_ERR_SSL_CANNOT_READ_EARLY_DATA -0x7B80
99 #define MBEDTLS_ERR_SSL_RECEIVED_EARLY_DATA -0x7C00
101 #define MBEDTLS_ERR_SSL_CANNOT_WRITE_EARLY_DATA -0x7C80
102 /* Error space gap */
103 /* Error space gap */
104 /* Error space gap */
105 /* Error space gap */
107 #define MBEDTLS_ERR_SSL_CACHE_ENTRY_NOT_FOUND -0x7E80
109 #define MBEDTLS_ERR_SSL_ALLOC_FAILED -0x7F00
111 #define MBEDTLS_ERR_SSL_HW_ACCEL_FAILED -0x7F80
113 #define MBEDTLS_ERR_SSL_HW_ACCEL_FALLTHROUGH -0x6F80
115 #define MBEDTLS_ERR_SSL_BAD_PROTOCOL_VERSION -0x6E80
117 #define MBEDTLS_ERR_SSL_HANDSHAKE_FAILURE -0x6E00
119 #define MBEDTLS_ERR_SSL_SESSION_TICKET_EXPIRED -0x6D80
121 #define MBEDTLS_ERR_SSL_PK_TYPE_MISMATCH -0x6D00
123 #define MBEDTLS_ERR_SSL_UNKNOWN_IDENTITY -0x6C80
125 #define MBEDTLS_ERR_SSL_INTERNAL_ERROR -0x6C00
127 #define MBEDTLS_ERR_SSL_COUNTER_WRAPPING -0x6B80
129 #define MBEDTLS_ERR_SSL_WAITING_SERVER_HELLO_RENEGO -0x6B00
131 #define MBEDTLS_ERR_SSL_HELLO_VERIFY_REQUIRED -0x6A80
133 #define MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL -0x6A00
134 /* Error space gap */
136 #define MBEDTLS_ERR_SSL_WANT_READ -0x6900
138 #define MBEDTLS_ERR_SSL_WANT_WRITE -0x6880
140 #define MBEDTLS_ERR_SSL_TIMEOUT -0x6800
142 #define MBEDTLS_ERR_SSL_CLIENT_RECONNECT -0x6780
144 #define MBEDTLS_ERR_SSL_UNEXPECTED_RECORD -0x6700
146 #define MBEDTLS_ERR_SSL_NON_FATAL -0x6680
148 #define MBEDTLS_ERR_SSL_ILLEGAL_PARAMETER -0x6600
150 #define MBEDTLS_ERR_SSL_CONTINUE_PROCESSING -0x6580
152 #define MBEDTLS_ERR_SSL_ASYNC_IN_PROGRESS -0x6500
154 #define MBEDTLS_ERR_SSL_EARLY_MESSAGE -0x6480
155 /* Error space gap */
156 /* Error space gap */
157 /* Error space gap */
158 /* Error space gap */
159 /* Error space gap */
160 /* Error space gap */
161 /* Error space gap */
162 /* Error space gap */
164 #define MBEDTLS_ERR_SSL_UNEXPECTED_CID -0x6000
166 #define MBEDTLS_ERR_SSL_VERSION_MISMATCH -0x5F00
168 #define MBEDTLS_ERR_SSL_BAD_CONFIG -0x5E80
169 
170 /*
171  * Constants from RFC 8446 for TLS 1.3 PSK modes
172  *
173  * Those are used in the Pre-Shared Key Exchange Modes extension.
174  * See Section 4.2.9 in RFC 8446.
175  */
176 #define MBEDTLS_SSL_TLS1_3_PSK_MODE_PURE 0 /* Pure PSK-based exchange */
177 #define MBEDTLS_SSL_TLS1_3_PSK_MODE_ECDHE 1 /* PSK+ECDHE-based exchange */
178 
179 /*
180  * TLS 1.3 NamedGroup values
181  *
182  * From RF 8446
183  * enum {
184  * // Elliptic Curve Groups (ECDHE)
185  * secp256r1(0x0017), secp384r1(0x0018), secp521r1(0x0019),
186  * x25519(0x001D), x448(0x001E),
187  * // Finite Field Groups (DHE)
188  * ffdhe2048(0x0100), ffdhe3072(0x0101), ffdhe4096(0x0102),
189  * ffdhe6144(0x0103), ffdhe8192(0x0104),
190  * // Reserved Code Points
191  * ffdhe_private_use(0x01FC..0x01FF),
192  * ecdhe_private_use(0xFE00..0xFEFF),
193  * (0xFFFF)
194  * } NamedGroup;
195  *
196  */
197 
198 /* Elliptic Curve Groups (ECDHE) */
199 #define MBEDTLS_SSL_IANA_TLS_GROUP_NONE 0
200 #define MBEDTLS_SSL_IANA_TLS_GROUP_SECP192K1 0x0012
201 #define MBEDTLS_SSL_IANA_TLS_GROUP_SECP192R1 0x0013
202 #define MBEDTLS_SSL_IANA_TLS_GROUP_SECP224K1 0x0014
203 #define MBEDTLS_SSL_IANA_TLS_GROUP_SECP224R1 0x0015
204 #define MBEDTLS_SSL_IANA_TLS_GROUP_SECP256K1 0x0016
205 #define MBEDTLS_SSL_IANA_TLS_GROUP_SECP256R1 0x0017
206 #define MBEDTLS_SSL_IANA_TLS_GROUP_SECP384R1 0x0018
207 #define MBEDTLS_SSL_IANA_TLS_GROUP_SECP521R1 0x0019
208 #define MBEDTLS_SSL_IANA_TLS_GROUP_BP256R1 0x001A
209 #define MBEDTLS_SSL_IANA_TLS_GROUP_BP384R1 0x001B
210 #define MBEDTLS_SSL_IANA_TLS_GROUP_BP512R1 0x001C
211 #define MBEDTLS_SSL_IANA_TLS_GROUP_X25519 0x001D
212 #define MBEDTLS_SSL_IANA_TLS_GROUP_X448 0x001E
213 /* Finite Field Groups (DHE) */
214 #define MBEDTLS_SSL_IANA_TLS_GROUP_FFDHE2048 0x0100
215 #define MBEDTLS_SSL_IANA_TLS_GROUP_FFDHE3072 0x0101
216 #define MBEDTLS_SSL_IANA_TLS_GROUP_FFDHE4096 0x0102
217 #define MBEDTLS_SSL_IANA_TLS_GROUP_FFDHE6144 0x0103
218 #define MBEDTLS_SSL_IANA_TLS_GROUP_FFDHE8192 0x0104
219 
220 /*
221  * TLS 1.3 Key Exchange Modes
222  *
223  * Mbed TLS internal identifiers for use with the SSL configuration API
224  * mbedtls_ssl_conf_tls13_key_exchange_modes().
225  */
226 
227 #define MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK (1u << 0)
230 #define MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL (1u << 1)
233 #define MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL (1u << 2)
237 /* Convenience macros for sets of key exchanges. */
238 #define MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_ALL \
239  (MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK | \
240  MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL | \
241  MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL)
242 #define MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ALL \
243  (MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK | \
244  MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL)
245 #define MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ALL \
246  (MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL | \
247  MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL)
249 #define MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_NONE (0)
250 
251 /*
252  * Various constants
253  */
254 
255 #if !defined(MBEDTLS_DEPRECATED_REMOVED)
256 /* These are the high and low bytes of ProtocolVersion as defined by:
257  * - RFC 5246: ProtocolVersion version = { 3, 3 }; // TLS v1.2
258  * - RFC 8446: see section 4.2.1
259  */
260 #define MBEDTLS_SSL_MAJOR_VERSION_3 3
261 #define MBEDTLS_SSL_MINOR_VERSION_3 3
262 #define MBEDTLS_SSL_MINOR_VERSION_4 4
263 #endif /* MBEDTLS_DEPRECATED_REMOVED */
264 
265 #define MBEDTLS_SSL_TRANSPORT_STREAM 0
266 #define MBEDTLS_SSL_TRANSPORT_DATAGRAM 1
268 #define MBEDTLS_SSL_MAX_HOST_NAME_LEN 255
269 #define MBEDTLS_SSL_MAX_ALPN_NAME_LEN 255
271 #define MBEDTLS_SSL_MAX_ALPN_LIST_LEN 65535
273 /* RFC 6066 section 4, see also mfl_code_to_length in ssl_tls.c
274  * NONE must be zero so that memset()ing structure to zero works */
275 #define MBEDTLS_SSL_MAX_FRAG_LEN_NONE 0
276 #define MBEDTLS_SSL_MAX_FRAG_LEN_512 1
277 #define MBEDTLS_SSL_MAX_FRAG_LEN_1024 2
278 #define MBEDTLS_SSL_MAX_FRAG_LEN_2048 3
279 #define MBEDTLS_SSL_MAX_FRAG_LEN_4096 4
280 #define MBEDTLS_SSL_MAX_FRAG_LEN_INVALID 5
282 #define MBEDTLS_SSL_IS_CLIENT 0
283 #define MBEDTLS_SSL_IS_SERVER 1
284 
285 #define MBEDTLS_SSL_EXTENDED_MS_DISABLED 0
286 #define MBEDTLS_SSL_EXTENDED_MS_ENABLED 1
287 
288 #define MBEDTLS_SSL_CID_DISABLED 0
289 #define MBEDTLS_SSL_CID_ENABLED 1
290 
291 #define MBEDTLS_SSL_ETM_DISABLED 0
292 #define MBEDTLS_SSL_ETM_ENABLED 1
293 
294 #define MBEDTLS_SSL_COMPRESS_NULL 0
295 
296 #define MBEDTLS_SSL_VERIFY_NONE 0
297 #define MBEDTLS_SSL_VERIFY_OPTIONAL 1
298 #define MBEDTLS_SSL_VERIFY_REQUIRED 2
299 #define MBEDTLS_SSL_VERIFY_UNSET 3 /* Used only for sni_authmode */
300 
301 #define MBEDTLS_SSL_LEGACY_RENEGOTIATION 0
302 #define MBEDTLS_SSL_SECURE_RENEGOTIATION 1
303 
304 #define MBEDTLS_SSL_RENEGOTIATION_DISABLED 0
305 #define MBEDTLS_SSL_RENEGOTIATION_ENABLED 1
306 
307 #define MBEDTLS_SSL_ANTI_REPLAY_DISABLED 0
308 #define MBEDTLS_SSL_ANTI_REPLAY_ENABLED 1
309 
310 #define MBEDTLS_SSL_RENEGOTIATION_NOT_ENFORCED -1
311 #define MBEDTLS_SSL_RENEGO_MAX_RECORDS_DEFAULT 16
312 
313 #define MBEDTLS_SSL_LEGACY_NO_RENEGOTIATION 0
314 #define MBEDTLS_SSL_LEGACY_ALLOW_RENEGOTIATION 1
315 #define MBEDTLS_SSL_LEGACY_BREAK_HANDSHAKE 2
316 
317 #define MBEDTLS_SSL_TRUNC_HMAC_DISABLED 0
318 #define MBEDTLS_SSL_TRUNC_HMAC_ENABLED 1
319 #define MBEDTLS_SSL_TRUNCATED_HMAC_LEN 10 /* 80 bits, rfc 6066 section 7 */
320 
321 #define MBEDTLS_SSL_SESSION_TICKETS_DISABLED 0
322 #define MBEDTLS_SSL_SESSION_TICKETS_ENABLED 1
323 
324 #define MBEDTLS_SSL_TLS1_3_SIGNAL_NEW_SESSION_TICKETS_DISABLED 0
325 #define MBEDTLS_SSL_TLS1_3_SIGNAL_NEW_SESSION_TICKETS_ENABLED 1
326 
327 #define MBEDTLS_SSL_PRESET_DEFAULT 0
328 #define MBEDTLS_SSL_PRESET_SUITEB 2
329 
330 #define MBEDTLS_SSL_CERT_REQ_CA_LIST_ENABLED 1
331 #define MBEDTLS_SSL_CERT_REQ_CA_LIST_DISABLED 0
332 
333 #define MBEDTLS_SSL_EARLY_DATA_DISABLED 0
334 #define MBEDTLS_SSL_EARLY_DATA_ENABLED 1
335 
336 #define MBEDTLS_SSL_DTLS_SRTP_MKI_UNSUPPORTED 0
337 #define MBEDTLS_SSL_DTLS_SRTP_MKI_SUPPORTED 1
338 
339 #define MBEDTLS_SSL_SRV_CIPHERSUITE_ORDER_CLIENT 1
340 #define MBEDTLS_SSL_SRV_CIPHERSUITE_ORDER_SERVER 0
341 
342 #if defined(MBEDTLS_SSL_PROTO_TLS1_3) && defined(MBEDTLS_SSL_SESSION_TICKETS)
343 #if defined(PSA_WANT_ALG_SHA_384)
344 #define MBEDTLS_SSL_TLS1_3_TICKET_RESUMPTION_KEY_LEN 48
345 #elif defined(PSA_WANT_ALG_SHA_256)
346 #define MBEDTLS_SSL_TLS1_3_TICKET_RESUMPTION_KEY_LEN 32
347 #endif
348 #endif /* MBEDTLS_SSL_PROTO_TLS1_3 && MBEDTLS_SSL_SESSION_TICKETS */
349 /*
350  * Default range for DTLS retransmission timer value, in milliseconds.
351  * RFC 6347 4.2.4.1 says from 1 second to 60 seconds.
352  */
353 #define MBEDTLS_SSL_DTLS_TIMEOUT_DFL_MIN 1000
354 #define MBEDTLS_SSL_DTLS_TIMEOUT_DFL_MAX 60000
355 
356 /*
357  * Whether early data record should be discarded or not and how.
358  *
359  * The client has indicated early data and the server has rejected them.
360  * The server has then to skip past early data by either:
361  * - attempting to deprotect received records using the handshake traffic
362  * key, discarding records which fail deprotection (up to the configured
363  * max_early_data_size). Once a record is deprotected successfully,
364  * it is treated as the start of the client's second flight and the
365  * server proceeds as with an ordinary 1-RTT handshake.
366  * - skipping all records with an external content type of
367  * "application_data" (indicating that they are encrypted), up to the
368  * configured max_early_data_size. This is the expected behavior if the
369  * server has sent an HelloRetryRequest message. The server ignores
370  * application data message before 2nd ClientHello.
371  */
372 #define MBEDTLS_SSL_EARLY_DATA_NO_DISCARD 0
373 #define MBEDTLS_SSL_EARLY_DATA_TRY_TO_DEPROTECT_AND_DISCARD 1
374 #define MBEDTLS_SSL_EARLY_DATA_DISCARD 2
375 
384 /*
385  * Maximum fragment length in bytes,
386  * determines the size of each of the two internal I/O buffers.
387  *
388  * Note: the RFC defines the default size of SSL / TLS messages. If you
389  * change the value here, other clients / servers may not be able to
390  * communicate with you anymore. Only change this value if you control
391  * both sides of the connection and have it reduced at both sides, or
392  * if you're using the Max Fragment Length extension and you know all your
393  * peers are using it too!
394  */
395 #if !defined(MBEDTLS_SSL_IN_CONTENT_LEN)
396 #define MBEDTLS_SSL_IN_CONTENT_LEN 16384
397 #endif
398 
399 #if !defined(MBEDTLS_SSL_OUT_CONTENT_LEN)
400 #define MBEDTLS_SSL_OUT_CONTENT_LEN 16384
401 #endif
402 
403 /*
404  * Maximum number of heap-allocated bytes for the purpose of
405  * DTLS handshake message reassembly and future message buffering.
406  */
407 #if !defined(MBEDTLS_SSL_DTLS_MAX_BUFFERING)
408 #define MBEDTLS_SSL_DTLS_MAX_BUFFERING 32768
409 #endif
410 
411 /*
412  * Maximum length of CIDs for incoming and outgoing messages.
413  */
414 #if !defined(MBEDTLS_SSL_CID_IN_LEN_MAX)
415 #define MBEDTLS_SSL_CID_IN_LEN_MAX 32
416 #endif
417 
418 #if !defined(MBEDTLS_SSL_CID_OUT_LEN_MAX)
419 #define MBEDTLS_SSL_CID_OUT_LEN_MAX 32
420 #endif
421 
422 #if !defined(MBEDTLS_SSL_CID_TLS1_3_PADDING_GRANULARITY)
423 #define MBEDTLS_SSL_CID_TLS1_3_PADDING_GRANULARITY 16
424 #endif
425 
426 #if !defined(MBEDTLS_SSL_MAX_EARLY_DATA_SIZE)
427 #define MBEDTLS_SSL_MAX_EARLY_DATA_SIZE 1024
428 #endif
429 
430 #if !defined(MBEDTLS_SSL_TLS1_3_TICKET_AGE_TOLERANCE)
431 #define MBEDTLS_SSL_TLS1_3_TICKET_AGE_TOLERANCE 6000
432 #endif
433 
434 #if !defined(MBEDTLS_SSL_TLS1_3_TICKET_NONCE_LENGTH)
435 #define MBEDTLS_SSL_TLS1_3_TICKET_NONCE_LENGTH 32
436 #endif
437 
438 #if !defined(MBEDTLS_SSL_TLS1_3_DEFAULT_NEW_SESSION_TICKETS)
439 #define MBEDTLS_SSL_TLS1_3_DEFAULT_NEW_SESSION_TICKETS 1
440 #endif
441 
444 /*
445  * Default to standard CID mode
446  */
447 #if defined(MBEDTLS_SSL_DTLS_CONNECTION_ID) && \
448  !defined(MBEDTLS_SSL_DTLS_CONNECTION_ID_COMPAT)
449 #define MBEDTLS_SSL_DTLS_CONNECTION_ID_COMPAT 0
450 #endif
451 
452 /*
453  * Length of the verify data for secure renegotiation
454  */
455 #define MBEDTLS_SSL_VERIFY_DATA_MAX_LEN 12
456 
457 /*
458  * Signaling ciphersuite values (SCSV)
459  */
460 #define MBEDTLS_SSL_EMPTY_RENEGOTIATION_INFO 0xFF
462 /*
463  * Supported Signature and Hash algorithms (For TLS 1.2)
464  * RFC 5246 section 7.4.1.4.1
465  */
466 #define MBEDTLS_SSL_HASH_NONE 0
467 #define MBEDTLS_SSL_HASH_MD5 1
468 #define MBEDTLS_SSL_HASH_SHA1 2
469 #define MBEDTLS_SSL_HASH_SHA224 3
470 #define MBEDTLS_SSL_HASH_SHA256 4
471 #define MBEDTLS_SSL_HASH_SHA384 5
472 #define MBEDTLS_SSL_HASH_SHA512 6
473 
474 #define MBEDTLS_SSL_SIG_ANON 0
475 #define MBEDTLS_SSL_SIG_RSA 1
476 #define MBEDTLS_SSL_SIG_ECDSA 3
477 
478 /*
479  * TLS 1.3 signature algorithms
480  * RFC 8446, Section 4.2.3
481  */
482 
483 /* RSASSA-PKCS1-v1_5 algorithms */
484 #define MBEDTLS_TLS1_3_SIG_RSA_PKCS1_SHA256 0x0401
485 #define MBEDTLS_TLS1_3_SIG_RSA_PKCS1_SHA384 0x0501
486 #define MBEDTLS_TLS1_3_SIG_RSA_PKCS1_SHA512 0x0601
487 
488 /* ECDSA algorithms */
489 #define MBEDTLS_TLS1_3_SIG_ECDSA_SECP256R1_SHA256 0x0403
490 #define MBEDTLS_TLS1_3_SIG_ECDSA_SECP384R1_SHA384 0x0503
491 #define MBEDTLS_TLS1_3_SIG_ECDSA_SECP521R1_SHA512 0x0603
492 
493 /* RSASSA-PSS algorithms with public key OID rsaEncryption */
494 #define MBEDTLS_TLS1_3_SIG_RSA_PSS_RSAE_SHA256 0x0804
495 #define MBEDTLS_TLS1_3_SIG_RSA_PSS_RSAE_SHA384 0x0805
496 #define MBEDTLS_TLS1_3_SIG_RSA_PSS_RSAE_SHA512 0x0806
497 
498 /* EdDSA algorithms */
499 #define MBEDTLS_TLS1_3_SIG_ED25519 0x0807
500 #define MBEDTLS_TLS1_3_SIG_ED448 0x0808
501 
502 /* RSASSA-PSS algorithms with public key OID RSASSA-PSS */
503 #define MBEDTLS_TLS1_3_SIG_RSA_PSS_PSS_SHA256 0x0809
504 #define MBEDTLS_TLS1_3_SIG_RSA_PSS_PSS_SHA384 0x080A
505 #define MBEDTLS_TLS1_3_SIG_RSA_PSS_PSS_SHA512 0x080B
506 
507 /* LEGACY ALGORITHMS */
508 #define MBEDTLS_TLS1_3_SIG_RSA_PKCS1_SHA1 0x0201
509 #define MBEDTLS_TLS1_3_SIG_ECDSA_SHA1 0x0203
510 
511 #define MBEDTLS_TLS1_3_SIG_NONE 0x0
512 
513 /*
514  * Client Certificate Types
515  * RFC 5246 section 7.4.4 plus RFC 4492 section 5.5
516  */
517 #define MBEDTLS_SSL_CERT_TYPE_RSA_SIGN 1
518 #define MBEDTLS_SSL_CERT_TYPE_ECDSA_SIGN 64
519 
520 /*
521  * Message, alert and handshake types
522  */
523 #define MBEDTLS_SSL_MSG_CHANGE_CIPHER_SPEC 20
524 #define MBEDTLS_SSL_MSG_ALERT 21
525 #define MBEDTLS_SSL_MSG_HANDSHAKE 22
526 #define MBEDTLS_SSL_MSG_APPLICATION_DATA 23
527 #define MBEDTLS_SSL_MSG_CID 25
528 
529 #define MBEDTLS_SSL_ALERT_LEVEL_WARNING 1
530 #define MBEDTLS_SSL_ALERT_LEVEL_FATAL 2
531 
532 #define MBEDTLS_SSL_ALERT_MSG_CLOSE_NOTIFY 0 /* 0x00 */
533 #define MBEDTLS_SSL_ALERT_MSG_UNEXPECTED_MESSAGE 10 /* 0x0A */
534 #define MBEDTLS_SSL_ALERT_MSG_BAD_RECORD_MAC 20 /* 0x14 */
535 #define MBEDTLS_SSL_ALERT_MSG_DECRYPTION_FAILED 21 /* 0x15 */
536 #define MBEDTLS_SSL_ALERT_MSG_RECORD_OVERFLOW 22 /* 0x16 */
537 #define MBEDTLS_SSL_ALERT_MSG_DECOMPRESSION_FAILURE 30 /* 0x1E */
538 #define MBEDTLS_SSL_ALERT_MSG_HANDSHAKE_FAILURE 40 /* 0x28 */
539 #define MBEDTLS_SSL_ALERT_MSG_NO_CERT 41 /* 0x29 */
540 #define MBEDTLS_SSL_ALERT_MSG_BAD_CERT 42 /* 0x2A */
541 #define MBEDTLS_SSL_ALERT_MSG_UNSUPPORTED_CERT 43 /* 0x2B */
542 #define MBEDTLS_SSL_ALERT_MSG_CERT_REVOKED 44 /* 0x2C */
543 #define MBEDTLS_SSL_ALERT_MSG_CERT_EXPIRED 45 /* 0x2D */
544 #define MBEDTLS_SSL_ALERT_MSG_CERT_UNKNOWN 46 /* 0x2E */
545 #define MBEDTLS_SSL_ALERT_MSG_ILLEGAL_PARAMETER 47 /* 0x2F */
546 #define MBEDTLS_SSL_ALERT_MSG_UNKNOWN_CA 48 /* 0x30 */
547 #define MBEDTLS_SSL_ALERT_MSG_ACCESS_DENIED 49 /* 0x31 */
548 #define MBEDTLS_SSL_ALERT_MSG_DECODE_ERROR 50 /* 0x32 */
549 #define MBEDTLS_SSL_ALERT_MSG_DECRYPT_ERROR 51 /* 0x33 */
550 #define MBEDTLS_SSL_ALERT_MSG_EXPORT_RESTRICTION 60 /* 0x3C */
551 #define MBEDTLS_SSL_ALERT_MSG_PROTOCOL_VERSION 70 /* 0x46 */
552 #define MBEDTLS_SSL_ALERT_MSG_INSUFFICIENT_SECURITY 71 /* 0x47 */
553 #define MBEDTLS_SSL_ALERT_MSG_INTERNAL_ERROR 80 /* 0x50 */
554 #define MBEDTLS_SSL_ALERT_MSG_INAPROPRIATE_FALLBACK 86 /* 0x56 */
555 #define MBEDTLS_SSL_ALERT_MSG_USER_CANCELED 90 /* 0x5A */
556 #define MBEDTLS_SSL_ALERT_MSG_NO_RENEGOTIATION 100 /* 0x64 */
557 #define MBEDTLS_SSL_ALERT_MSG_MISSING_EXTENSION 109 /* 0x6d -- new in TLS 1.3 */
558 #define MBEDTLS_SSL_ALERT_MSG_UNSUPPORTED_EXT 110 /* 0x6E */
559 #define MBEDTLS_SSL_ALERT_MSG_UNRECOGNIZED_NAME 112 /* 0x70 */
560 #define MBEDTLS_SSL_ALERT_MSG_UNKNOWN_PSK_IDENTITY 115 /* 0x73 */
561 #define MBEDTLS_SSL_ALERT_MSG_CERT_REQUIRED 116 /* 0x74 */
562 #define MBEDTLS_SSL_ALERT_MSG_NO_APPLICATION_PROTOCOL 120 /* 0x78 */
563 
564 #define MBEDTLS_SSL_HS_HELLO_REQUEST 0
565 #define MBEDTLS_SSL_HS_CLIENT_HELLO 1
566 #define MBEDTLS_SSL_HS_SERVER_HELLO 2
567 #define MBEDTLS_SSL_HS_HELLO_VERIFY_REQUEST 3
568 #define MBEDTLS_SSL_HS_NEW_SESSION_TICKET 4
569 #define MBEDTLS_SSL_HS_END_OF_EARLY_DATA 5
570 #define MBEDTLS_SSL_HS_ENCRYPTED_EXTENSIONS 8
571 #define MBEDTLS_SSL_HS_CERTIFICATE 11
572 #define MBEDTLS_SSL_HS_SERVER_KEY_EXCHANGE 12
573 #define MBEDTLS_SSL_HS_CERTIFICATE_REQUEST 13
574 #define MBEDTLS_SSL_HS_SERVER_HELLO_DONE 14
575 #define MBEDTLS_SSL_HS_CERTIFICATE_VERIFY 15
576 #define MBEDTLS_SSL_HS_CLIENT_KEY_EXCHANGE 16
577 #define MBEDTLS_SSL_HS_FINISHED 20
578 #define MBEDTLS_SSL_HS_MESSAGE_HASH 254
579 
580 /*
581  * TLS extensions
582  */
583 #define MBEDTLS_TLS_EXT_SERVERNAME 0
584 #define MBEDTLS_TLS_EXT_SERVERNAME_HOSTNAME 0
585 
586 #define MBEDTLS_TLS_EXT_MAX_FRAGMENT_LENGTH 1
587 
588 #define MBEDTLS_TLS_EXT_TRUNCATED_HMAC 4
589 #define MBEDTLS_TLS_EXT_STATUS_REQUEST 5 /* RFC 6066 TLS 1.2 and 1.3 */
590 
591 #define MBEDTLS_TLS_EXT_SUPPORTED_ELLIPTIC_CURVES 10
592 #define MBEDTLS_TLS_EXT_SUPPORTED_GROUPS 10 /* RFC 8422,7919 TLS 1.2 and 1.3 */
593 #define MBEDTLS_TLS_EXT_SUPPORTED_POINT_FORMATS 11
594 
595 #define MBEDTLS_TLS_EXT_SIG_ALG 13 /* RFC 8446 TLS 1.3 */
596 #define MBEDTLS_TLS_EXT_USE_SRTP 14
597 #define MBEDTLS_TLS_EXT_HEARTBEAT 15 /* RFC 6520 TLS 1.2 and 1.3 */
598 #define MBEDTLS_TLS_EXT_ALPN 16
599 
600 #define MBEDTLS_TLS_EXT_SCT 18 /* RFC 6962 TLS 1.2 and 1.3 */
601 #define MBEDTLS_TLS_EXT_CLI_CERT_TYPE 19 /* RFC 7250 TLS 1.2 and 1.3 */
602 #define MBEDTLS_TLS_EXT_SERV_CERT_TYPE 20 /* RFC 7250 TLS 1.2 and 1.3 */
603 #define MBEDTLS_TLS_EXT_PADDING 21 /* RFC 7685 TLS 1.2 and 1.3 */
604 #define MBEDTLS_TLS_EXT_ENCRYPT_THEN_MAC 22 /* 0x16 */
605 #define MBEDTLS_TLS_EXT_EXTENDED_MASTER_SECRET 0x0017 /* 23 */
606 
607 #define MBEDTLS_TLS_EXT_RECORD_SIZE_LIMIT 28 /* RFC 8449 (implemented for TLS 1.3 only) */
608 
609 #define MBEDTLS_TLS_EXT_SESSION_TICKET 35
610 
611 #define MBEDTLS_TLS_EXT_PRE_SHARED_KEY 41 /* RFC 8446 TLS 1.3 */
612 #define MBEDTLS_TLS_EXT_EARLY_DATA 42 /* RFC 8446 TLS 1.3 */
613 #define MBEDTLS_TLS_EXT_SUPPORTED_VERSIONS 43 /* RFC 8446 TLS 1.3 */
614 #define MBEDTLS_TLS_EXT_COOKIE 44 /* RFC 8446 TLS 1.3 */
615 #define MBEDTLS_TLS_EXT_PSK_KEY_EXCHANGE_MODES 45 /* RFC 8446 TLS 1.3 */
616 
617 #define MBEDTLS_TLS_EXT_CERT_AUTH 47 /* RFC 8446 TLS 1.3 */
618 #define MBEDTLS_TLS_EXT_OID_FILTERS 48 /* RFC 8446 TLS 1.3 */
619 #define MBEDTLS_TLS_EXT_POST_HANDSHAKE_AUTH 49 /* RFC 8446 TLS 1.3 */
620 #define MBEDTLS_TLS_EXT_SIG_ALG_CERT 50 /* RFC 8446 TLS 1.3 */
621 #define MBEDTLS_TLS_EXT_KEY_SHARE 51 /* RFC 8446 TLS 1.3 */
622 
623 #if MBEDTLS_SSL_DTLS_CONNECTION_ID_COMPAT == 0
624 #define MBEDTLS_TLS_EXT_CID 54 /* RFC 9146 DTLS 1.2 CID */
625 #else
626 #define MBEDTLS_TLS_EXT_CID 254 /* Pre-RFC 9146 DTLS 1.2 CID */
627 #endif
628 
629 #define MBEDTLS_TLS_EXT_ECJPAKE_KKPP 256 /* experimental */
630 
631 #define MBEDTLS_TLS_EXT_RENEGOTIATION_INFO 0xFF01
632 
633 /*
634  * Size defines
635  */
636 #if !defined(MBEDTLS_PSK_MAX_LEN)
637 /*
638  * If the library supports TLS 1.3 tickets and the cipher suite
639  * TLS1-3-AES-256-GCM-SHA384, set the PSK maximum length to 48 instead of 32.
640  * That way, the TLS 1.3 client and server are able to resume sessions where
641  * the cipher suite is TLS1-3-AES-256-GCM-SHA384 (pre-shared keys are 48
642  * bytes long in that case).
643  */
644 #if defined(MBEDTLS_SSL_PROTO_TLS1_3) && \
645  defined(MBEDTLS_SSL_SESSION_TICKETS) && \
646  defined(MBEDTLS_SSL_HAVE_AES) && defined(MBEDTLS_SSL_HAVE_GCM) && \
647  defined(MBEDTLS_MD_CAN_SHA384)
648 #define MBEDTLS_PSK_MAX_LEN 48 /* 384 bits */
649 #else
650 #define MBEDTLS_PSK_MAX_LEN 32 /* 256 bits */
651 #endif
652 #endif /* !MBEDTLS_PSK_MAX_LEN */
653 
654 /* Dummy type used only for its size */
656  unsigned char dummy; /* Make the union non-empty even with SSL disabled */
657 #if defined(MBEDTLS_KEY_EXCHANGE_RSA_ENABLED)
658  unsigned char _pms_rsa[48]; /* RFC 5246 8.1.1 */
659 #endif
660 #if defined(MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED)
661  unsigned char _pms_dhm[MBEDTLS_MPI_MAX_SIZE]; /* RFC 5246 8.1.2 */
662 #endif
663 #if defined(MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED) || \
664  defined(MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) || \
665  defined(MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED) || \
666  defined(MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED)
667  unsigned char _pms_ecdh[MBEDTLS_ECP_MAX_BYTES]; /* RFC 4492 5.10 */
668 #endif
669 #if defined(MBEDTLS_KEY_EXCHANGE_PSK_ENABLED)
670  unsigned char _pms_psk[4 + 2 * MBEDTLS_PSK_MAX_LEN]; /* RFC 4279 2 */
671 #endif
672 #if defined(MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED)
674  + MBEDTLS_PSK_MAX_LEN]; /* RFC 4279 3 */
675 #endif
676 #if defined(MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED)
677  unsigned char _pms_rsa_psk[52 + MBEDTLS_PSK_MAX_LEN]; /* RFC 4279 4 */
678 #endif
679 #if defined(MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED)
681  + MBEDTLS_PSK_MAX_LEN]; /* RFC 5489 2 */
682 #endif
683 #if defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED)
684  unsigned char _pms_ecjpake[32]; /* Thread spec: SHA-256 output */
685 #endif
686 };
687 
688 #define MBEDTLS_PREMASTER_SIZE sizeof(union mbedtls_ssl_premaster_secret)
689 
690 #define MBEDTLS_TLS1_3_MD_MAX_SIZE PSA_HASH_MAX_SIZE
691 
692 
693 /* Length in number of bytes of the TLS sequence number */
694 #define MBEDTLS_SSL_SEQUENCE_NUMBER_LEN 8
695 
696 #ifdef __cplusplus
697 extern "C" {
698 #endif
699 
700 /*
701  * SSL state machine
702  */
703 typedef enum {
734 }
736 
737 /*
738  * Early data status, client side only.
739  */
740 
741 #if defined(MBEDTLS_SSL_EARLY_DATA) && defined(MBEDTLS_SSL_CLI_C)
742 typedef enum {
743 /*
744  * See documentation of mbedtls_ssl_get_early_data_status().
745  */
746  MBEDTLS_SSL_EARLY_DATA_STATUS_NOT_INDICATED,
747  MBEDTLS_SSL_EARLY_DATA_STATUS_ACCEPTED,
748  MBEDTLS_SSL_EARLY_DATA_STATUS_REJECTED,
749 } mbedtls_ssl_early_data_status;
750 #endif /* MBEDTLS_SSL_EARLY_DATA && MBEDTLS_SSL_CLI_C */
751 
769 typedef int mbedtls_ssl_send_t(void *ctx,
770  const unsigned char *buf,
771  size_t len);
772 
793 typedef int mbedtls_ssl_recv_t(void *ctx,
794  unsigned char *buf,
795  size_t len);
796 
819 typedef int mbedtls_ssl_recv_timeout_t(void *ctx,
820  unsigned char *buf,
821  size_t len,
822  uint32_t timeout);
845 typedef void mbedtls_ssl_set_timer_t(void *ctx,
846  uint32_t int_ms,
847  uint32_t fin_ms);
848 
860 typedef int mbedtls_ssl_get_timer_t(void *ctx);
861 
862 /* Defined below */
866 
867 /* Defined in library/ssl_misc.h */
871 #if defined(MBEDTLS_X509_CRT_PARSE_C)
873 #endif
874 #if defined(MBEDTLS_SSL_PROTO_DTLS)
876 #endif
877 
878 #if defined(MBEDTLS_SSL_PROTO_TLS1_3) && defined(MBEDTLS_SSL_SESSION_TICKETS)
879 #define MBEDTLS_SSL_TLS1_3_TICKET_ALLOW_PSK_RESUMPTION \
880  MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK /* 1U << 0 */
881 #define MBEDTLS_SSL_TLS1_3_TICKET_ALLOW_PSK_EPHEMERAL_RESUMPTION \
882  MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL /* 1U << 2 */
883 #define MBEDTLS_SSL_TLS1_3_TICKET_ALLOW_EARLY_DATA (1U << 3)
884 
885 #define MBEDTLS_SSL_TLS1_3_TICKET_FLAGS_MASK \
886  (MBEDTLS_SSL_TLS1_3_TICKET_ALLOW_PSK_RESUMPTION | \
887  MBEDTLS_SSL_TLS1_3_TICKET_ALLOW_PSK_EPHEMERAL_RESUMPTION | \
888  MBEDTLS_SSL_TLS1_3_TICKET_ALLOW_EARLY_DATA)
889 #endif /* MBEDTLS_SSL_PROTO_TLS1_3 && MBEDTLS_SSL_SESSION_TICKETS */
890 
914 typedef int mbedtls_ssl_cache_get_t(void *data,
915  unsigned char const *session_id,
916  size_t session_id_len,
917  mbedtls_ssl_session *session);
936 typedef int mbedtls_ssl_cache_set_t(void *data,
937  unsigned char const *session_id,
938  size_t session_id_len,
939  const mbedtls_ssl_session *session);
940 
941 #if defined(MBEDTLS_SSL_ASYNC_PRIVATE)
942 #if defined(MBEDTLS_X509_CRT_PARSE_C)
1014 typedef int mbedtls_ssl_async_sign_t(mbedtls_ssl_context *ssl,
1015  mbedtls_x509_crt *cert,
1016  mbedtls_md_type_t md_alg,
1017  const unsigned char *hash,
1018  size_t hash_len);
1019 
1080 typedef int mbedtls_ssl_async_decrypt_t(mbedtls_ssl_context *ssl,
1081  mbedtls_x509_crt *cert,
1082  const unsigned char *input,
1083  size_t input_len);
1084 #endif /* MBEDTLS_X509_CRT_PARSE_C */
1085 
1128 typedef int mbedtls_ssl_async_resume_t(mbedtls_ssl_context *ssl,
1129  unsigned char *output,
1130  size_t *output_len,
1131  size_t output_size);
1132 
1150 typedef void mbedtls_ssl_async_cancel_t(mbedtls_ssl_context *ssl);
1151 #endif /* MBEDTLS_SSL_ASYNC_PRIVATE */
1152 
1153 #if defined(MBEDTLS_KEY_EXCHANGE_WITH_CERT_ENABLED) && \
1154  !defined(MBEDTLS_SSL_KEEP_PEER_CERTIFICATE)
1155 #define MBEDTLS_SSL_PEER_CERT_DIGEST_MAX_LEN 48
1156 #if defined(MBEDTLS_MD_CAN_SHA256)
1157 #define MBEDTLS_SSL_PEER_CERT_DIGEST_DFL_TYPE MBEDTLS_MD_SHA256
1158 #define MBEDTLS_SSL_PEER_CERT_DIGEST_DFL_LEN 32
1159 #elif defined(MBEDTLS_MD_CAN_SHA384)
1160 #define MBEDTLS_SSL_PEER_CERT_DIGEST_DFL_TYPE MBEDTLS_MD_SHA384
1161 #define MBEDTLS_SSL_PEER_CERT_DIGEST_DFL_LEN 48
1162 #elif defined(MBEDTLS_MD_CAN_SHA1)
1163 #define MBEDTLS_SSL_PEER_CERT_DIGEST_DFL_TYPE MBEDTLS_MD_SHA1
1164 #define MBEDTLS_SSL_PEER_CERT_DIGEST_DFL_LEN 20
1165 #else
1166 /* This is already checked in check_config.h, but be sure. */
1167 #error "Bad configuration - need SHA-1, SHA-256 or SHA-512 enabled to compute digest of peer CRT."
1168 #endif
1169 #endif /* MBEDTLS_KEY_EXCHANGE_WITH_CERT_ENABLED &&
1170  !MBEDTLS_SSL_KEEP_PEER_CERTIFICATE */
1171 
1172 typedef struct {
1173  unsigned char client_application_traffic_secret_N[MBEDTLS_TLS1_3_MD_MAX_SIZE];
1174  unsigned char server_application_traffic_secret_N[MBEDTLS_TLS1_3_MD_MAX_SIZE];
1175  unsigned char exporter_master_secret[MBEDTLS_TLS1_3_MD_MAX_SIZE];
1176  unsigned char resumption_master_secret[MBEDTLS_TLS1_3_MD_MAX_SIZE];
1178 
1179 #if defined(MBEDTLS_SSL_DTLS_SRTP)
1180 
1181 #define MBEDTLS_TLS_SRTP_MAX_MKI_LENGTH 255
1182 #define MBEDTLS_TLS_SRTP_MAX_PROFILE_LIST_LENGTH 4
1183 /*
1184  * For code readability use a typedef for DTLS-SRTP profiles
1185  *
1186  * Use_srtp extension protection profiles values as defined in
1187  * http://www.iana.org/assignments/srtp-protection/srtp-protection.xhtml
1188  *
1189  * Reminder: if this list is expanded mbedtls_ssl_check_srtp_profile_value
1190  * must be updated too.
1191  */
1192 #define MBEDTLS_TLS_SRTP_AES128_CM_HMAC_SHA1_80 ((uint16_t) 0x0001)
1193 #define MBEDTLS_TLS_SRTP_AES128_CM_HMAC_SHA1_32 ((uint16_t) 0x0002)
1194 #define MBEDTLS_TLS_SRTP_NULL_HMAC_SHA1_80 ((uint16_t) 0x0005)
1195 #define MBEDTLS_TLS_SRTP_NULL_HMAC_SHA1_32 ((uint16_t) 0x0006)
1196 /* This one is not iana defined, but for code readability. */
1197 #define MBEDTLS_TLS_SRTP_UNSET ((uint16_t) 0x0000)
1198 
1199 typedef uint16_t mbedtls_ssl_srtp_profile;
1200 
1201 typedef struct mbedtls_dtls_srtp_info_t {
1203  mbedtls_ssl_srtp_profile MBEDTLS_PRIVATE(chosen_dtls_srtp_profile);
1205  uint16_t MBEDTLS_PRIVATE(mki_len);
1207  unsigned char MBEDTLS_PRIVATE(mki_value)[MBEDTLS_TLS_SRTP_MAX_MKI_LENGTH];
1208 }
1209 mbedtls_dtls_srtp_info;
1210 
1211 #endif /* MBEDTLS_SSL_DTLS_SRTP */
1212 
1214 typedef enum {
1219 
1220 /*
1221  * This structure is used for storing current session data.
1222  *
1223  * Note: when changing this definition, we need to check and update:
1224  * - in tests/suites/test_suite_ssl.function:
1225  * ssl_populate_session() and ssl_serialize_session_save_load()
1226  * - in library/ssl_tls.c:
1227  * mbedtls_ssl_session_init() and mbedtls_ssl_session_free()
1228  * mbedtls_ssl_session_save() and ssl_session_load()
1229  * ssl_session_copy()
1230  */
1232 #if defined(MBEDTLS_SSL_MAX_FRAGMENT_LENGTH)
1233  unsigned char MBEDTLS_PRIVATE(mfl_code);
1234 #endif /* MBEDTLS_SSL_MAX_FRAGMENT_LENGTH */
1235 
1237 #if defined(MBEDTLS_SSL_RECORD_SIZE_LIMIT)
1238  uint16_t MBEDTLS_PRIVATE(record_size_limit);
1239 #endif /* MBEDTLS_SSL_RECORD_SIZE_LIMIT */
1240 
1241  unsigned char MBEDTLS_PRIVATE(exported);
1242  uint8_t MBEDTLS_PRIVATE(endpoint);
1248 
1249 #if defined(MBEDTLS_HAVE_TIME)
1251 #endif
1252  int MBEDTLS_PRIVATE(ciphersuite);
1253  size_t MBEDTLS_PRIVATE(id_len);
1254  unsigned char MBEDTLS_PRIVATE(id)[32];
1255  unsigned char MBEDTLS_PRIVATE(master)[48];
1257 #if defined(MBEDTLS_X509_CRT_PARSE_C)
1258 #if defined(MBEDTLS_SSL_KEEP_PEER_CERTIFICATE)
1260 #else /* MBEDTLS_SSL_KEEP_PEER_CERTIFICATE */
1263  unsigned char *MBEDTLS_PRIVATE(peer_cert_digest);
1264  size_t MBEDTLS_PRIVATE(peer_cert_digest_len);
1265  mbedtls_md_type_t MBEDTLS_PRIVATE(peer_cert_digest_type);
1266 #endif /* !MBEDTLS_SSL_KEEP_PEER_CERTIFICATE */
1267 #endif /* MBEDTLS_X509_CRT_PARSE_C */
1268  uint32_t MBEDTLS_PRIVATE(verify_result);
1270 #if defined(MBEDTLS_SSL_SESSION_TICKETS) && defined(MBEDTLS_SSL_CLI_C)
1271  unsigned char *MBEDTLS_PRIVATE(ticket);
1272  size_t MBEDTLS_PRIVATE(ticket_len);
1273  uint32_t MBEDTLS_PRIVATE(ticket_lifetime);
1274 #endif /* MBEDTLS_SSL_SESSION_TICKETS && MBEDTLS_SSL_CLI_C */
1275 
1276 #if defined(MBEDTLS_SSL_SESSION_TICKETS) && defined(MBEDTLS_SSL_SRV_C) && \
1277  defined(MBEDTLS_HAVE_TIME)
1294  mbedtls_ms_time_t MBEDTLS_PRIVATE(ticket_creation_time);
1295 #endif
1296 
1297 #if defined(MBEDTLS_SSL_PROTO_TLS1_3) && defined(MBEDTLS_SSL_SESSION_TICKETS)
1298  uint32_t MBEDTLS_PRIVATE(ticket_age_add);
1299  uint8_t MBEDTLS_PRIVATE(ticket_flags);
1300  uint8_t MBEDTLS_PRIVATE(resumption_key_len);
1302 
1303 #if defined(MBEDTLS_SSL_SERVER_NAME_INDICATION) && defined(MBEDTLS_SSL_CLI_C)
1304  char *MBEDTLS_PRIVATE(hostname);
1305 #endif /* MBEDTLS_SSL_SERVER_NAME_INDICATION && MBEDTLS_SSL_CLI_C */
1306 
1307 #if defined(MBEDTLS_SSL_EARLY_DATA) && defined(MBEDTLS_SSL_ALPN) && defined(MBEDTLS_SSL_SRV_C)
1308  char *ticket_alpn;
1310 #endif
1311 
1312 #if defined(MBEDTLS_HAVE_TIME) && defined(MBEDTLS_SSL_CLI_C)
1314  mbedtls_ms_time_t MBEDTLS_PRIVATE(ticket_reception_time);
1315 #endif
1316 #endif /* MBEDTLS_SSL_PROTO_TLS1_3 && MBEDTLS_SSL_SESSION_TICKETS */
1317 
1318 #if defined(MBEDTLS_SSL_EARLY_DATA)
1319  uint32_t MBEDTLS_PRIVATE(max_early_data_size);
1320 #endif
1321 
1322 #if defined(MBEDTLS_SSL_ENCRYPT_THEN_MAC)
1323  int MBEDTLS_PRIVATE(encrypt_then_mac);
1324 #endif
1325 
1326 #if defined(MBEDTLS_SSL_PROTO_TLS1_3)
1328 #endif
1329 };
1330 
1331 /*
1332  * Identifiers for PRFs used in various versions of TLS.
1333  */
1334 typedef enum {
1342 
1343 typedef enum {
1345 #if defined(MBEDTLS_SSL_PROTO_TLS1_3)
1352 #endif /* MBEDTLS_SSL_PROTO_TLS1_3 */
1354 
1370 typedef void mbedtls_ssl_export_keys_t(void *p_expkey,
1372  const unsigned char *secret,
1373  size_t secret_len,
1374  const unsigned char client_random[32],
1375  const unsigned char server_random[32],
1376  mbedtls_tls_prf_types tls_prf_type);
1377 
1378 #if defined(MBEDTLS_SSL_SRV_C)
1395 #endif
1396 
1397 /* A type for storing user data in a library structure.
1398  *
1399  * The representation of type may change in future versions of the library.
1400  * Only the behaviors guaranteed by documented accessor functions are
1401  * guaranteed to remain stable.
1402  */
1403 typedef union {
1404  uintptr_t n; /* typically a handle to an associated object */
1405  void *p; /* typically a pointer to extra data */
1407 
1412  /* Group items mostly by size. This helps to reduce memory wasted to
1413  * padding. It also helps to keep smaller fields early in the structure,
1414  * so that elements tend to be in the 128-element direct access window
1415  * on Arm Thumb, which reduces the code size. */
1416 
1420  /*
1421  * Flags (could be bit-fields to save RAM, but separate bytes make
1422  * the code smaller on architectures with an instruction for direct
1423  * byte access).
1424  */
1425 
1426  uint8_t MBEDTLS_PRIVATE(endpoint);
1427  uint8_t MBEDTLS_PRIVATE(transport);
1428  uint8_t MBEDTLS_PRIVATE(authmode);
1429  /* needed even with renego disabled for LEGACY_BREAK_HANDSHAKE */
1430  uint8_t MBEDTLS_PRIVATE(allow_legacy_renegotiation);
1431 #if defined(MBEDTLS_SSL_MAX_FRAGMENT_LENGTH)
1432  uint8_t MBEDTLS_PRIVATE(mfl_code);
1434 #endif
1435 #if defined(MBEDTLS_SSL_ENCRYPT_THEN_MAC)
1436  uint8_t MBEDTLS_PRIVATE(encrypt_then_mac);
1437 #endif
1438 #if defined(MBEDTLS_SSL_EXTENDED_MASTER_SECRET)
1439  uint8_t MBEDTLS_PRIVATE(extended_ms);
1440 #endif
1441 #if defined(MBEDTLS_SSL_DTLS_ANTI_REPLAY)
1442  uint8_t MBEDTLS_PRIVATE(anti_replay);
1443 #endif
1444 #if defined(MBEDTLS_SSL_RENEGOTIATION)
1445  uint8_t MBEDTLS_PRIVATE(disable_renegotiation);
1446 #endif
1447 #if defined(MBEDTLS_SSL_SESSION_TICKETS) && \
1448  defined(MBEDTLS_SSL_CLI_C)
1455  uint8_t MBEDTLS_PRIVATE(session_tickets);
1456 #endif
1457 
1458 #if defined(MBEDTLS_SSL_SESSION_TICKETS) && \
1459  defined(MBEDTLS_SSL_SRV_C) && \
1460  defined(MBEDTLS_SSL_PROTO_TLS1_3)
1461  uint16_t MBEDTLS_PRIVATE(new_session_tickets_count);
1462 #endif
1463 
1464 #if defined(MBEDTLS_SSL_SRV_C)
1465  uint8_t MBEDTLS_PRIVATE(cert_req_ca_list);
1467  uint8_t MBEDTLS_PRIVATE(respect_cli_pref);
1470 #endif
1471 #if defined(MBEDTLS_SSL_DTLS_CONNECTION_ID)
1472  uint8_t MBEDTLS_PRIVATE(ignore_unexpected_cid);
1475 #endif /* MBEDTLS_SSL_DTLS_CONNECTION_ID */
1476 #if defined(MBEDTLS_SSL_DTLS_SRTP)
1477  uint8_t MBEDTLS_PRIVATE(dtls_srtp_mki_support); /* support having mki_value
1478  in the use_srtp extension? */
1479 #endif
1480 
1481  /*
1482  * Pointers
1483  */
1484 
1486  const int *MBEDTLS_PRIVATE(ciphersuite_list);
1487 
1488 #if defined(MBEDTLS_SSL_PROTO_TLS1_3)
1490  int MBEDTLS_PRIVATE(tls13_kex_modes);
1491 #endif /* MBEDTLS_SSL_PROTO_TLS1_3 */
1492 
1494  void(*MBEDTLS_PRIVATE(f_dbg))(void *, int, const char *, int, const char *);
1495  void *MBEDTLS_PRIVATE(p_dbg);
1498  int(*MBEDTLS_PRIVATE(f_rng))(void *, unsigned char *, size_t);
1499  void *MBEDTLS_PRIVATE(p_rng);
1505  void *MBEDTLS_PRIVATE(p_cache);
1507 #if defined(MBEDTLS_SSL_SERVER_NAME_INDICATION)
1509  int(*MBEDTLS_PRIVATE(f_sni))(void *, mbedtls_ssl_context *, const unsigned char *, size_t);
1510  void *MBEDTLS_PRIVATE(p_sni);
1511 #endif
1512 
1513 #if defined(MBEDTLS_X509_CRT_PARSE_C)
1515  int(*MBEDTLS_PRIVATE(f_vrfy))(void *, mbedtls_x509_crt *, int, uint32_t *);
1516  void *MBEDTLS_PRIVATE(p_vrfy);
1517 #endif
1518 
1519 #if defined(MBEDTLS_SSL_HANDSHAKE_WITH_PSK_ENABLED)
1520 #if defined(MBEDTLS_SSL_SRV_C)
1522  int(*MBEDTLS_PRIVATE(f_psk))(void *, mbedtls_ssl_context *, const unsigned char *, size_t);
1523  void *MBEDTLS_PRIVATE(p_psk);
1524 #endif
1525 #endif
1526 
1527 #if defined(MBEDTLS_SSL_DTLS_HELLO_VERIFY) && defined(MBEDTLS_SSL_SRV_C)
1529  int(*MBEDTLS_PRIVATE(f_cookie_write))(void *, unsigned char **, unsigned char *,
1530  const unsigned char *, size_t);
1532  int(*MBEDTLS_PRIVATE(f_cookie_check))(void *, const unsigned char *, size_t,
1533  const unsigned char *, size_t);
1534  void *MBEDTLS_PRIVATE(p_cookie);
1535 #endif
1536 
1537 #if defined(MBEDTLS_SSL_SESSION_TICKETS) && defined(MBEDTLS_SSL_SRV_C)
1539  int(*MBEDTLS_PRIVATE(f_ticket_write))(void *, const mbedtls_ssl_session *,
1540  unsigned char *, const unsigned char *, size_t *,
1541  uint32_t *);
1543  int(*MBEDTLS_PRIVATE(f_ticket_parse))(void *, mbedtls_ssl_session *, unsigned char *, size_t);
1544  void *MBEDTLS_PRIVATE(p_ticket);
1545 #endif /* MBEDTLS_SSL_SESSION_TICKETS && MBEDTLS_SSL_SRV_C */
1546 #if defined(MBEDTLS_SSL_DTLS_CONNECTION_ID)
1547  size_t MBEDTLS_PRIVATE(cid_len);
1548 #endif /* MBEDTLS_SSL_DTLS_CONNECTION_ID */
1549 
1550 #if defined(MBEDTLS_X509_CRT_PARSE_C)
1555 #if defined(MBEDTLS_X509_TRUSTED_CERTIFICATE_CALLBACK)
1557  void *MBEDTLS_PRIVATE(p_ca_cb);
1558 #endif /* MBEDTLS_X509_TRUSTED_CERTIFICATE_CALLBACK */
1559 #endif /* MBEDTLS_X509_CRT_PARSE_C */
1560 
1561 #if defined(MBEDTLS_SSL_ASYNC_PRIVATE)
1562 #if defined(MBEDTLS_X509_CRT_PARSE_C)
1563  mbedtls_ssl_async_sign_t *MBEDTLS_PRIVATE(f_async_sign_start);
1564  mbedtls_ssl_async_decrypt_t *MBEDTLS_PRIVATE(f_async_decrypt_start);
1565 #endif /* MBEDTLS_X509_CRT_PARSE_C */
1566  mbedtls_ssl_async_resume_t *MBEDTLS_PRIVATE(f_async_resume);
1567  mbedtls_ssl_async_cancel_t *MBEDTLS_PRIVATE(f_async_cancel);
1568  void *MBEDTLS_PRIVATE(p_async_config_data);
1569 #endif /* MBEDTLS_SSL_ASYNC_PRIVATE */
1570 
1571 #if defined(MBEDTLS_SSL_HANDSHAKE_WITH_CERT_ENABLED)
1572 
1573 #if !defined(MBEDTLS_DEPRECATED_REMOVED)
1574  const int *MBEDTLS_PRIVATE(sig_hashes);
1575 #endif
1576  const uint16_t *MBEDTLS_PRIVATE(sig_algs);
1577 #endif /* MBEDTLS_SSL_HANDSHAKE_WITH_CERT_ENABLED */
1578 
1579 #if defined(MBEDTLS_ECP_C) && !defined(MBEDTLS_DEPRECATED_REMOVED)
1581 #endif
1582 
1583  const uint16_t *MBEDTLS_PRIVATE(group_list);
1585 #if defined(MBEDTLS_DHM_C)
1588 #endif
1589 
1590 #if defined(MBEDTLS_SSL_HANDSHAKE_WITH_PSK_ENABLED)
1591 
1592 #if defined(MBEDTLS_USE_PSA_CRYPTO)
1599 #endif /* MBEDTLS_USE_PSA_CRYPTO */
1600  unsigned char *MBEDTLS_PRIVATE(psk);
1604  size_t MBEDTLS_PRIVATE(psk_len);
1610  unsigned char *MBEDTLS_PRIVATE(psk_identity);
1615  size_t MBEDTLS_PRIVATE(psk_identity_len);
1621 #endif /* MBEDTLS_SSL_HANDSHAKE_WITH_PSK_ENABLED */
1622 
1623 #if defined(MBEDTLS_SSL_EARLY_DATA)
1624  int MBEDTLS_PRIVATE(early_data_enabled);
1628 #if defined(MBEDTLS_SSL_SRV_C)
1629  /* The maximum amount of 0-RTT data. RFC 8446 section 4.6.1 */
1630  uint32_t MBEDTLS_PRIVATE(max_early_data_size);
1631 #endif /* MBEDTLS_SSL_SRV_C */
1632 
1633 #endif /* MBEDTLS_SSL_EARLY_DATA */
1634 
1635 #if defined(MBEDTLS_SSL_ALPN)
1636  const char **MBEDTLS_PRIVATE(alpn_list);
1637 #endif
1638 
1639 #if defined(MBEDTLS_SSL_DTLS_SRTP)
1641  const mbedtls_ssl_srtp_profile *MBEDTLS_PRIVATE(dtls_srtp_profile_list);
1643  size_t MBEDTLS_PRIVATE(dtls_srtp_profile_list_len);
1644 #endif /* MBEDTLS_SSL_DTLS_SRTP */
1645 
1646  /*
1647  * Numerical settings (int)
1648  */
1649 
1650  uint32_t MBEDTLS_PRIVATE(read_timeout);
1652 #if defined(MBEDTLS_SSL_PROTO_DTLS)
1653  uint32_t MBEDTLS_PRIVATE(hs_timeout_min);
1655  uint32_t MBEDTLS_PRIVATE(hs_timeout_max);
1657 #endif
1658 
1659 #if defined(MBEDTLS_SSL_RENEGOTIATION)
1660  int MBEDTLS_PRIVATE(renego_max_records);
1661  unsigned char MBEDTLS_PRIVATE(renego_period)[8];
1663 #endif
1664 
1665  unsigned int MBEDTLS_PRIVATE(badmac_limit);
1667 #if defined(MBEDTLS_DHM_C) && defined(MBEDTLS_SSL_CLI_C)
1668  unsigned int MBEDTLS_PRIVATE(dhm_min_bitlen);
1669 #endif
1670 
1677 
1678 #if defined(MBEDTLS_SSL_SRV_C)
1680 #endif /* MBEDTLS_SSL_SRV_C */
1681 
1682 #if defined(MBEDTLS_KEY_EXCHANGE_CERT_REQ_ALLOWED_ENABLED)
1684 #endif
1685 };
1686 
1690  /*
1691  * Miscellaneous
1692  */
1693  int MBEDTLS_PRIVATE(state);
1694 #if defined(MBEDTLS_SSL_RENEGOTIATION)
1695  int MBEDTLS_PRIVATE(renego_status);
1696  int MBEDTLS_PRIVATE(renego_records_seen);
1699 #endif /* MBEDTLS_SSL_RENEGOTIATION */
1700 
1718 
1719 #if defined(MBEDTLS_SSL_EARLY_DATA) && defined(MBEDTLS_SSL_CLI_C)
1724  int MBEDTLS_PRIVATE(early_data_state);
1725 #endif
1726 
1727  unsigned MBEDTLS_PRIVATE(badmac_seen);
1729 #if defined(MBEDTLS_X509_CRT_PARSE_C)
1731  int(*MBEDTLS_PRIVATE(f_vrfy))(void *, mbedtls_x509_crt *, int, uint32_t *);
1732  void *MBEDTLS_PRIVATE(p_vrfy);
1733 #endif
1734 
1740  void *MBEDTLS_PRIVATE(p_bio);
1742  /*
1743  * Session layer
1744  */
1748  mbedtls_ssl_session *MBEDTLS_PRIVATE(session_negotiate);
1753  /*
1754  * Record layer transformations
1755  */
1765 #if defined(MBEDTLS_SSL_PROTO_TLS1_2)
1766  mbedtls_ssl_transform *MBEDTLS_PRIVATE(transform_negotiate);
1769 #endif /* MBEDTLS_SSL_PROTO_TLS1_2 */
1770 
1771 #if defined(MBEDTLS_SSL_PROTO_TLS1_3)
1774  mbedtls_ssl_transform *MBEDTLS_PRIVATE(transform_application);
1775 #endif /* MBEDTLS_SSL_PROTO_TLS1_3 */
1776 
1777  /*
1778  * Timers
1779  */
1780  void *MBEDTLS_PRIVATE(p_timer);
1785  /*
1786  * Record layer (incoming data)
1787  */
1788  unsigned char *MBEDTLS_PRIVATE(in_buf);
1789  unsigned char *MBEDTLS_PRIVATE(in_ctr);
1792  unsigned char *MBEDTLS_PRIVATE(in_hdr);
1793 #if defined(MBEDTLS_SSL_DTLS_CONNECTION_ID)
1794  unsigned char *MBEDTLS_PRIVATE(in_cid);
1796 #endif /* MBEDTLS_SSL_DTLS_CONNECTION_ID */
1797  unsigned char *MBEDTLS_PRIVATE(in_len);
1798  unsigned char *MBEDTLS_PRIVATE(in_iv);
1799  unsigned char *MBEDTLS_PRIVATE(in_msg);
1800  unsigned char *MBEDTLS_PRIVATE(in_offt);
1802  int MBEDTLS_PRIVATE(in_msgtype);
1803  size_t MBEDTLS_PRIVATE(in_msglen);
1804  size_t MBEDTLS_PRIVATE(in_left);
1805 #if defined(MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH)
1806  size_t MBEDTLS_PRIVATE(in_buf_len);
1807 #endif
1808 #if defined(MBEDTLS_SSL_PROTO_DTLS)
1809  uint16_t MBEDTLS_PRIVATE(in_epoch);
1810  size_t MBEDTLS_PRIVATE(next_record_offset);
1812 #endif /* MBEDTLS_SSL_PROTO_DTLS */
1813 #if defined(MBEDTLS_SSL_DTLS_ANTI_REPLAY)
1814  uint64_t MBEDTLS_PRIVATE(in_window_top);
1815  uint64_t MBEDTLS_PRIVATE(in_window);
1816 #endif /* MBEDTLS_SSL_DTLS_ANTI_REPLAY */
1817 
1818  size_t MBEDTLS_PRIVATE(in_hslen);
1820  int MBEDTLS_PRIVATE(nb_zero);
1822  int MBEDTLS_PRIVATE(keep_current_message);
1825  /* The following three variables indicate if and, if yes,
1826  * what kind of alert is pending to be sent.
1827  */
1828  unsigned char MBEDTLS_PRIVATE(send_alert);
1832  unsigned char MBEDTLS_PRIVATE(alert_type);
1834  int MBEDTLS_PRIVATE(alert_reason);
1838 #if defined(MBEDTLS_SSL_PROTO_DTLS)
1839  uint8_t MBEDTLS_PRIVATE(disable_datagram_packing);
1841 #endif /* MBEDTLS_SSL_PROTO_DTLS */
1842 
1843 #if defined(MBEDTLS_SSL_EARLY_DATA)
1844 #if defined(MBEDTLS_SSL_SRV_C)
1845  /*
1846  * One of:
1847  * MBEDTLS_SSL_EARLY_DATA_NO_DISCARD
1848  * MBEDTLS_SSL_EARLY_DATA_TRY_TO_DEPROTECT_AND_DISCARD
1849  * MBEDTLS_SSL_EARLY_DATA_DISCARD
1850  */
1851  uint8_t MBEDTLS_PRIVATE(discard_early_data_record);
1852 #endif
1853  uint32_t MBEDTLS_PRIVATE(total_early_data_size);
1854 #endif /* MBEDTLS_SSL_EARLY_DATA */
1855 
1856  /*
1857  * Record layer (outgoing data)
1858  */
1859  unsigned char *MBEDTLS_PRIVATE(out_buf);
1860  unsigned char *MBEDTLS_PRIVATE(out_ctr);
1861  unsigned char *MBEDTLS_PRIVATE(out_hdr);
1862 #if defined(MBEDTLS_SSL_DTLS_CONNECTION_ID)
1863  unsigned char *MBEDTLS_PRIVATE(out_cid);
1865 #endif /* MBEDTLS_SSL_DTLS_CONNECTION_ID */
1866  unsigned char *MBEDTLS_PRIVATE(out_len);
1867  unsigned char *MBEDTLS_PRIVATE(out_iv);
1868  unsigned char *MBEDTLS_PRIVATE(out_msg);
1870  int MBEDTLS_PRIVATE(out_msgtype);
1871  size_t MBEDTLS_PRIVATE(out_msglen);
1872  size_t MBEDTLS_PRIVATE(out_left);
1873 #if defined(MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH)
1874  size_t MBEDTLS_PRIVATE(out_buf_len);
1875 #endif
1876 
1877  unsigned char MBEDTLS_PRIVATE(cur_out_ctr)[MBEDTLS_SSL_SEQUENCE_NUMBER_LEN];
1879 #if defined(MBEDTLS_SSL_PROTO_DTLS)
1880  uint16_t MBEDTLS_PRIVATE(mtu);
1881 #endif /* MBEDTLS_SSL_PROTO_DTLS */
1882 
1883  /*
1884  * User settings
1885  */
1886 #if defined(MBEDTLS_X509_CRT_PARSE_C)
1887  char *MBEDTLS_PRIVATE(hostname);
1889 #endif /* MBEDTLS_X509_CRT_PARSE_C */
1890 
1891 #if defined(MBEDTLS_SSL_ALPN)
1892  const char *MBEDTLS_PRIVATE(alpn_chosen);
1893 #endif /* MBEDTLS_SSL_ALPN */
1894 
1895 #if defined(MBEDTLS_SSL_DTLS_SRTP)
1896  /*
1897  * use_srtp extension
1898  */
1899  mbedtls_dtls_srtp_info MBEDTLS_PRIVATE(dtls_srtp_info);
1900 #endif /* MBEDTLS_SSL_DTLS_SRTP */
1901 
1902  /*
1903  * Information for DTLS hello verify
1904  */
1905 #if defined(MBEDTLS_SSL_DTLS_HELLO_VERIFY) && defined(MBEDTLS_SSL_SRV_C)
1906  unsigned char *MBEDTLS_PRIVATE(cli_id);
1907  size_t MBEDTLS_PRIVATE(cli_id_len);
1908 #endif /* MBEDTLS_SSL_DTLS_HELLO_VERIFY && MBEDTLS_SSL_SRV_C */
1909 
1910  /*
1911  * Secure renegotiation
1912  */
1913  /* needed to know when to send extension on server */
1914  int MBEDTLS_PRIVATE(secure_renegotiation);
1916 #if defined(MBEDTLS_SSL_RENEGOTIATION)
1917  size_t MBEDTLS_PRIVATE(verify_data_len);
1920 #endif /* MBEDTLS_SSL_RENEGOTIATION */
1921 
1922 #if defined(MBEDTLS_SSL_DTLS_CONNECTION_ID)
1923  /* CID configuration to use in subsequent handshakes. */
1924 
1930  uint8_t MBEDTLS_PRIVATE(own_cid_len);
1931  uint8_t MBEDTLS_PRIVATE(negotiate_cid);
1935 #endif /* MBEDTLS_SSL_DTLS_CONNECTION_ID */
1936 
1939  void *MBEDTLS_PRIVATE(p_export_keys);
1951 };
1952 
1961 const char *mbedtls_ssl_get_ciphersuite_name(const int ciphersuite_id);
1962 
1971 int mbedtls_ssl_get_ciphersuite_id(const char *ciphersuite_name);
1972 
1981 
2007  const mbedtls_ssl_config *conf);
2008 
2019 
2027 
2037 {
2038  return conf->MBEDTLS_PRIVATE(endpoint);
2039 }
2040 
2056 
2084 
2085 #if defined(MBEDTLS_SSL_EARLY_DATA)
2112 void mbedtls_ssl_conf_early_data(mbedtls_ssl_config *conf,
2113  int early_data_enabled);
2114 
2115 #if defined(MBEDTLS_SSL_SRV_C)
2140 void mbedtls_ssl_conf_max_early_data_size(
2141  mbedtls_ssl_config *conf, uint32_t max_early_data_size);
2142 #endif /* MBEDTLS_SSL_SRV_C */
2143 
2144 #endif /* MBEDTLS_SSL_EARLY_DATA */
2145 
2146 #if defined(MBEDTLS_X509_CRT_PARSE_C)
2163  int (*f_vrfy)(void *, mbedtls_x509_crt *, int, uint32_t *),
2164  void *p_vrfy);
2165 #endif /* MBEDTLS_X509_CRT_PARSE_C */
2166 
2175  int (*f_rng)(void *, unsigned char *, size_t),
2176  void *p_rng);
2177 
2193  void (*f_dbg)(void *, int, const char *, int, const char *),
2194  void *p_dbg);
2195 
2207  const mbedtls_ssl_context *ssl)
2208 {
2209  return ssl->MBEDTLS_PRIVATE(conf);
2210 }
2211 
2243  void *p_bio,
2244  mbedtls_ssl_send_t *f_send,
2245  mbedtls_ssl_recv_t *f_recv,
2246  mbedtls_ssl_recv_timeout_t *f_recv_timeout);
2247 
2248 #if defined(MBEDTLS_SSL_PROTO_DTLS)
2249 
2250 #if defined(MBEDTLS_SSL_DTLS_CONNECTION_ID)
2251 
2252 
2338  int enable,
2339  unsigned char const *own_cid,
2340  size_t own_cid_len);
2341 
2372  int *enabled,
2373  unsigned char own_cid[MBEDTLS_SSL_CID_IN_LEN_MAX],
2374  size_t *own_cid_len);
2375 
2414  int *enabled,
2415  unsigned char peer_cid[MBEDTLS_SSL_CID_OUT_LEN_MAX],
2416  size_t *peer_cid_len);
2417 
2418 #endif /* MBEDTLS_SSL_DTLS_CONNECTION_ID */
2419 
2459 void mbedtls_ssl_set_mtu(mbedtls_ssl_context *ssl, uint16_t mtu);
2460 #endif /* MBEDTLS_SSL_PROTO_DTLS */
2461 
2462 #if defined(MBEDTLS_X509_CRT_PARSE_C)
2482  int (*f_vrfy)(void *, mbedtls_x509_crt *, int, uint32_t *),
2483  void *p_vrfy);
2484 #endif /* MBEDTLS_X509_CRT_PARSE_C */
2485 
2503 
2549  unsigned char *buf,
2550  size_t buflen);
2551 
2573  void *p_timer,
2574  mbedtls_ssl_set_timer_t *f_set_timer,
2575  mbedtls_ssl_get_timer_t *f_get_timer);
2576 
2577 #if defined(MBEDTLS_SSL_SRV_C)
2589  mbedtls_ssl_hs_cb_t f_cert_cb)
2590 {
2591  conf->MBEDTLS_PRIVATE(f_cert_cb) = f_cert_cb;
2592 }
2593 #endif /* MBEDTLS_SSL_SRV_C */
2594 
2614 typedef int mbedtls_ssl_ticket_write_t(void *p_ticket,
2615  const mbedtls_ssl_session *session,
2616  unsigned char *start,
2617  const unsigned char *end,
2618  size_t *tlen,
2619  uint32_t *lifetime);
2620 
2644 typedef int mbedtls_ssl_ticket_parse_t(void *p_ticket,
2645  mbedtls_ssl_session *session,
2646  unsigned char *buf,
2647  size_t len);
2648 
2649 #if defined(MBEDTLS_SSL_SESSION_TICKETS) && defined(MBEDTLS_SSL_SRV_C)
2665  mbedtls_ssl_ticket_write_t *f_ticket_write,
2666  mbedtls_ssl_ticket_parse_t *f_ticket_parse,
2667  void *p_ticket);
2668 
2669 #if defined(MBEDTLS_HAVE_TIME)
2684  mbedtls_ssl_session *session, mbedtls_ms_time_t *ticket_creation_time)
2685 {
2686  if (session == NULL || ticket_creation_time == NULL ||
2687  session->MBEDTLS_PRIVATE(endpoint) != MBEDTLS_SSL_IS_SERVER) {
2689  }
2690 
2691  *ticket_creation_time = session->MBEDTLS_PRIVATE(ticket_creation_time);
2692 
2693  return 0;
2694 }
2695 #endif /* MBEDTLS_HAVE_TIME */
2696 #endif /* MBEDTLS_SSL_SESSION_TICKETS && MBEDTLS_SSL_SRV_C */
2697 
2705 static inline unsigned const char (*mbedtls_ssl_session_get_id(const mbedtls_ssl_session *
2706  session))[32]
2707 {
2708  return &session->MBEDTLS_PRIVATE(id);
2709 }
2710 
2718 static inline size_t mbedtls_ssl_session_get_id_len(const mbedtls_ssl_session *session)
2719 {
2720  return session->MBEDTLS_PRIVATE(id_len);
2721 }
2722 
2731 {
2732  return session->MBEDTLS_PRIVATE(ciphersuite);
2733 }
2734 
2754  mbedtls_ssl_export_keys_t *f_export_keys,
2755  void *p_export_keys);
2756 
2768  mbedtls_ssl_config *conf,
2769  void *p)
2770 {
2771  conf->MBEDTLS_PRIVATE(user_data).p = p;
2772 }
2773 
2782  mbedtls_ssl_config *conf,
2783  uintptr_t n)
2784 {
2785  conf->MBEDTLS_PRIVATE(user_data).n = n;
2786 }
2787 
2799  mbedtls_ssl_config *conf)
2800 {
2801  return conf->MBEDTLS_PRIVATE(user_data).p;
2802 }
2803 
2814 static inline uintptr_t mbedtls_ssl_conf_get_user_data_n(
2815  mbedtls_ssl_config *conf)
2816 {
2817  return conf->MBEDTLS_PRIVATE(user_data).n;
2818 }
2819 
2830 static inline void mbedtls_ssl_set_user_data_p(
2831  mbedtls_ssl_context *ssl,
2832  void *p)
2833 {
2834  ssl->MBEDTLS_PRIVATE(user_data).p = p;
2835 }
2836 
2844 static inline void mbedtls_ssl_set_user_data_n(
2845  mbedtls_ssl_context *ssl,
2846  uintptr_t n)
2847 {
2848  ssl->MBEDTLS_PRIVATE(user_data).n = n;
2849 }
2850 
2861 static inline void *mbedtls_ssl_get_user_data_p(
2862  mbedtls_ssl_context *ssl)
2863 {
2864  return ssl->MBEDTLS_PRIVATE(user_data).p;
2865 }
2866 
2877 static inline uintptr_t mbedtls_ssl_get_user_data_n(
2878  mbedtls_ssl_context *ssl)
2879 {
2880  return ssl->MBEDTLS_PRIVATE(user_data).n;
2881 }
2882 
2883 #if defined(MBEDTLS_SSL_ASYNC_PRIVATE)
2914 void mbedtls_ssl_conf_async_private_cb(mbedtls_ssl_config *conf,
2915  mbedtls_ssl_async_sign_t *f_async_sign,
2916  mbedtls_ssl_async_decrypt_t *f_async_decrypt,
2917  mbedtls_ssl_async_resume_t *f_async_resume,
2918  mbedtls_ssl_async_cancel_t *f_async_cancel,
2919  void *config_data);
2920 
2929 void *mbedtls_ssl_conf_get_async_config_data(const mbedtls_ssl_config *conf);
2930 
2945 void *mbedtls_ssl_get_async_operation_data(const mbedtls_ssl_context *ssl);
2946 
2958 void mbedtls_ssl_set_async_operation_data(mbedtls_ssl_context *ssl,
2959  void *ctx);
2960 #endif /* MBEDTLS_SSL_ASYNC_PRIVATE */
2961 
2976 typedef int mbedtls_ssl_cookie_write_t(void *ctx,
2977  unsigned char **p, unsigned char *end,
2978  const unsigned char *info, size_t ilen);
2979 
2993 typedef int mbedtls_ssl_cookie_check_t(void *ctx,
2994  const unsigned char *cookie, size_t clen,
2995  const unsigned char *info, size_t ilen);
2996 
2997 #if defined(MBEDTLS_SSL_DTLS_HELLO_VERIFY) && defined(MBEDTLS_SSL_SRV_C)
3027  mbedtls_ssl_cookie_write_t *f_cookie_write,
3028  mbedtls_ssl_cookie_check_t *f_cookie_check,
3029  void *p_cookie);
3030 
3051  const unsigned char *info,
3052  size_t ilen);
3053 
3054 #endif /* MBEDTLS_SSL_DTLS_HELLO_VERIFY && MBEDTLS_SSL_SRV_C */
3055 
3056 #if defined(MBEDTLS_SSL_DTLS_ANTI_REPLAY)
3073 #endif /* MBEDTLS_SSL_DTLS_ANTI_REPLAY */
3074 
3099 
3100 #if defined(MBEDTLS_SSL_PROTO_DTLS)
3101 
3131  unsigned allow_packing);
3132 
3164 void mbedtls_ssl_conf_handshake_timeout(mbedtls_ssl_config *conf, uint32_t min, uint32_t max);
3165 #endif /* MBEDTLS_SSL_PROTO_DTLS */
3166 
3167 #if defined(MBEDTLS_SSL_SRV_C)
3206  void *p_cache,
3207  mbedtls_ssl_cache_get_t *f_get_cache,
3208  mbedtls_ssl_cache_set_t *f_set_cache);
3209 #endif /* MBEDTLS_SSL_SRV_C */
3210 
3211 #if defined(MBEDTLS_SSL_CLI_C)
3259 #endif /* MBEDTLS_SSL_CLI_C */
3260 
3294  const unsigned char *buf,
3295  size_t len);
3296 
3331  unsigned char *buf,
3332  size_t buf_len,
3333  size_t *olen);
3334 
3377  const int *ciphersuites);
3378 
3379 #if defined(MBEDTLS_SSL_PROTO_TLS1_3)
3423  const int kex_modes);
3424 #endif /* MBEDTLS_SSL_PROTO_TLS1_3 */
3425 
3426 #if defined(MBEDTLS_SSL_DTLS_CONNECTION_ID)
3427 #define MBEDTLS_SSL_UNEXPECTED_CID_IGNORE 0
3428 #define MBEDTLS_SSL_UNEXPECTED_CID_FAIL 1
3462  int ignore_other_cids);
3463 #endif /* MBEDTLS_SSL_DTLS_CONNECTION_ID */
3464 
3465 #if defined(MBEDTLS_X509_CRT_PARSE_C)
3477  const mbedtls_x509_crt_profile *profile);
3478 
3491  mbedtls_x509_crt *ca_chain,
3492  mbedtls_x509_crl *ca_crl);
3493 
3494 #if defined(MBEDTLS_KEY_EXCHANGE_CERT_REQ_ALLOWED_ENABLED)
3506 static inline
3508  const mbedtls_x509_crt *crt)
3509 {
3510  conf->MBEDTLS_PRIVATE(dn_hints) = crt;
3511 }
3512 #endif /* MBEDTLS_KEY_EXCHANGE_CERT_REQ_ALLOWED_ENABLED */
3513 
3514 #if defined(MBEDTLS_X509_TRUSTED_CERTIFICATE_CALLBACK)
3566 void mbedtls_ssl_conf_ca_cb(mbedtls_ssl_config *conf,
3567  mbedtls_x509_crt_ca_cb_t f_ca_cb,
3568  void *p_ca_cb);
3569 #endif /* MBEDTLS_X509_TRUSTED_CERTIFICATE_CALLBACK */
3570 
3608  mbedtls_x509_crt *own_cert,
3609  mbedtls_pk_context *pk_key);
3610 #endif /* MBEDTLS_X509_CRT_PARSE_C */
3611 
3612 #if defined(MBEDTLS_SSL_HANDSHAKE_WITH_PSK_ENABLED)
3646  const unsigned char *psk, size_t psk_len,
3647  const unsigned char *psk_identity, size_t psk_identity_len);
3648 
3649 #if defined(MBEDTLS_USE_PSA_CRYPTO)
3687 int mbedtls_ssl_conf_psk_opaque(mbedtls_ssl_config *conf,
3689  const unsigned char *psk_identity,
3690  size_t psk_identity_len);
3691 #endif /* MBEDTLS_USE_PSA_CRYPTO */
3692 
3710  const unsigned char *psk, size_t psk_len);
3711 
3712 #if defined(MBEDTLS_USE_PSA_CRYPTO)
3733 int mbedtls_ssl_set_hs_psk_opaque(mbedtls_ssl_context *ssl,
3734  mbedtls_svc_key_id_t psk);
3735 #endif /* MBEDTLS_USE_PSA_CRYPTO */
3736 
3737 #if defined(MBEDTLS_SSL_SRV_C)
3777  int (*f_psk)(void *, mbedtls_ssl_context *, const unsigned char *,
3778  size_t),
3779  void *p_psk);
3780 #endif /* MBEDTLS_SSL_SRV_C */
3781 #endif /* MBEDTLS_SSL_HANDSHAKE_WITH_PSK_ENABLED */
3782 
3783 #if defined(MBEDTLS_DHM_C) && defined(MBEDTLS_SSL_SRV_C)
3798  const unsigned char *dhm_P, size_t P_len,
3799  const unsigned char *dhm_G, size_t G_len);
3800 
3811 #endif /* MBEDTLS_DHM_C && defined(MBEDTLS_SSL_SRV_C) */
3812 
3813 #if defined(MBEDTLS_DHM_C) && defined(MBEDTLS_SSL_CLI_C)
3823  unsigned int bitlen);
3824 #endif /* MBEDTLS_DHM_C && MBEDTLS_SSL_CLI_C */
3825 
3826 #if defined(MBEDTLS_ECP_C)
3827 #if !defined(MBEDTLS_DEPRECATED_REMOVED)
3870  const mbedtls_ecp_group_id *curves);
3871 #endif /* MBEDTLS_DEPRECATED_REMOVED */
3872 #endif /* MBEDTLS_ECP_C */
3873 
3912  const uint16_t *groups);
3913 
3914 #if defined(MBEDTLS_SSL_HANDSHAKE_WITH_CERT_ENABLED)
3915 #if !defined(MBEDTLS_DEPRECATED_REMOVED) && defined(MBEDTLS_SSL_PROTO_TLS1_2)
3948  const int *hashes);
3949 #endif /* !MBEDTLS_DEPRECATED_REMOVED && MBEDTLS_SSL_PROTO_TLS1_2 */
3950 
3964  const uint16_t *sig_algs);
3965 #endif /* MBEDTLS_SSL_HANDSHAKE_WITH_CERT_ENABLED */
3966 
3967 #if defined(MBEDTLS_X509_CRT_PARSE_C)
3986 int mbedtls_ssl_set_hostname(mbedtls_ssl_context *ssl, const char *hostname);
3987 
3998 static inline const char *mbedtls_ssl_get_hostname(mbedtls_ssl_context *ssl)
3999 {
4000  return ssl->MBEDTLS_PRIVATE(hostname);
4001 }
4002 #endif /* MBEDTLS_X509_CRT_PARSE_C */
4003 
4004 #if defined(MBEDTLS_SSL_SERVER_NAME_INDICATION)
4024  size_t *name_len);
4025 
4042  mbedtls_x509_crt *own_cert,
4043  mbedtls_pk_context *pk_key);
4044 
4057  mbedtls_x509_crt *ca_chain,
4058  mbedtls_x509_crl *ca_crl);
4059 
4060 #if defined(MBEDTLS_KEY_EXCHANGE_CERT_REQ_ALLOWED_ENABLED)
4072  const mbedtls_x509_crt *crt);
4073 #endif /* MBEDTLS_KEY_EXCHANGE_CERT_REQ_ALLOWED_ENABLED */
4074 
4086  int authmode);
4087 
4111  int (*f_sni)(void *, mbedtls_ssl_context *, const unsigned char *,
4112  size_t),
4113  void *p_sni);
4114 #endif /* MBEDTLS_SSL_SERVER_NAME_INDICATION */
4115 
4116 #if defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED)
4135 int mbedtls_ssl_set_hs_ecjpake_password(mbedtls_ssl_context *ssl,
4136  const unsigned char *pw,
4137  size_t pw_len);
4138 
4153 int mbedtls_ssl_set_hs_ecjpake_password_opaque(mbedtls_ssl_context *ssl,
4154  mbedtls_svc_key_id_t pwd);
4155 #endif /*MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED */
4156 
4157 #if defined(MBEDTLS_SSL_ALPN)
4170 int mbedtls_ssl_conf_alpn_protocols(mbedtls_ssl_config *conf, const char **protos);
4171 
4182 #endif /* MBEDTLS_SSL_ALPN */
4183 
4184 #if defined(MBEDTLS_SSL_DTLS_SRTP)
4185 #if defined(MBEDTLS_DEBUG_C)
4186 static inline const char *mbedtls_ssl_get_srtp_profile_as_string(mbedtls_ssl_srtp_profile profile)
4187 {
4188  switch (profile) {
4189  case MBEDTLS_TLS_SRTP_AES128_CM_HMAC_SHA1_80:
4190  return "MBEDTLS_TLS_SRTP_AES128_CM_HMAC_SHA1_80";
4191  case MBEDTLS_TLS_SRTP_AES128_CM_HMAC_SHA1_32:
4192  return "MBEDTLS_TLS_SRTP_AES128_CM_HMAC_SHA1_32";
4193  case MBEDTLS_TLS_SRTP_NULL_HMAC_SHA1_80:
4194  return "MBEDTLS_TLS_SRTP_NULL_HMAC_SHA1_80";
4195  case MBEDTLS_TLS_SRTP_NULL_HMAC_SHA1_32:
4196  return "MBEDTLS_TLS_SRTP_NULL_HMAC_SHA1_32";
4197  default: break;
4198  }
4199  return "";
4200 }
4201 #endif /* MBEDTLS_DEBUG_C */
4215 void mbedtls_ssl_conf_srtp_mki_value_supported(mbedtls_ssl_config *conf,
4216  int support_mki_value);
4217 
4237 int mbedtls_ssl_conf_dtls_srtp_protection_profiles
4238  (mbedtls_ssl_config *conf,
4239  const mbedtls_ssl_srtp_profile *profiles);
4240 
4257 int mbedtls_ssl_dtls_srtp_set_mki_value(mbedtls_ssl_context *ssl,
4258  unsigned char *mki_value,
4259  uint16_t mki_len);
4278 void mbedtls_ssl_get_dtls_srtp_negotiation_result(const mbedtls_ssl_context *ssl,
4279  mbedtls_dtls_srtp_info *dtls_srtp_info);
4280 #endif /* MBEDTLS_SSL_DTLS_SRTP */
4281 
4282 #if !defined(MBEDTLS_DEPRECATED_REMOVED)
4301  int minor);
4302 #endif /* MBEDTLS_DEPRECATED_REMOVED */
4303 
4317  mbedtls_ssl_protocol_version tls_version)
4318 {
4319  conf->MBEDTLS_PRIVATE(max_tls_version) = tls_version;
4320 }
4321 
4322 #if !defined(MBEDTLS_DEPRECATED_REMOVED)
4358  int minor);
4359 #endif /* MBEDTLS_DEPRECATED_REMOVED */
4360 
4374  mbedtls_ssl_protocol_version tls_version)
4375 {
4376  conf->MBEDTLS_PRIVATE(min_tls_version) = tls_version;
4377 }
4378 
4379 #if defined(MBEDTLS_SSL_ENCRYPT_THEN_MAC)
4392 #endif /* MBEDTLS_SSL_ENCRYPT_THEN_MAC */
4393 
4394 #if defined(MBEDTLS_SSL_EXTENDED_MASTER_SECRET)
4407 #endif /* MBEDTLS_SSL_EXTENDED_MASTER_SECRET */
4408 
4409 #if defined(MBEDTLS_SSL_SRV_C)
4420  char cert_req_ca_list);
4421 #endif /* MBEDTLS_SSL_SRV_C */
4422 
4423 #if defined(MBEDTLS_SSL_MAX_FRAGMENT_LENGTH)
4458 int mbedtls_ssl_conf_max_frag_len(mbedtls_ssl_config *conf, unsigned char mfl_code);
4459 #endif /* MBEDTLS_SSL_MAX_FRAGMENT_LENGTH */
4460 
4461 #if defined(MBEDTLS_SSL_SRV_C)
4472 #endif /* MBEDTLS_SSL_SRV_C */
4473 
4474 #if defined(MBEDTLS_SSL_SESSION_TICKETS) && defined(MBEDTLS_SSL_CLI_C)
4486 
4487 #if defined(MBEDTLS_SSL_PROTO_TLS1_3)
4514  mbedtls_ssl_config *conf, int signal_new_session_tickets);
4515 
4516 #endif /* MBEDTLS_SSL_PROTO_TLS1_3 */
4517 #endif /* MBEDTLS_SSL_SESSION_TICKETS && MBEDTLS_SSL_CLI_C */
4518 
4519 #if defined(MBEDTLS_SSL_SESSION_TICKETS) && \
4520  defined(MBEDTLS_SSL_SRV_C) && \
4521  defined(MBEDTLS_SSL_PROTO_TLS1_3)
4540  uint16_t num_tickets);
4541 #endif /* MBEDTLS_SSL_SESSION_TICKETS &&
4542  MBEDTLS_SSL_SRV_C &&
4543  MBEDTLS_SSL_PROTO_TLS1_3*/
4544 
4545 #if defined(MBEDTLS_SSL_RENEGOTIATION)
4564 #endif /* MBEDTLS_SSL_RENEGOTIATION */
4565 
4594 
4595 #if defined(MBEDTLS_SSL_RENEGOTIATION)
4634 
4661  const unsigned char period[8]);
4662 #endif /* MBEDTLS_SSL_RENEGOTIATION */
4663 
4703 
4720 
4734 
4743 
4752 
4753 
4766  const mbedtls_ssl_context *ssl)
4767 {
4768  return ssl->MBEDTLS_PRIVATE(tls_version);
4769 }
4770 
4779 
4789 
4816 
4836 
4837 #if defined(MBEDTLS_X509_CRT_PARSE_C)
4869 #endif /* MBEDTLS_X509_CRT_PARSE_C */
4870 
4871 #if defined(MBEDTLS_SSL_CLI_C)
4900  mbedtls_ssl_session *session);
4901 #endif /* MBEDTLS_SSL_CLI_C */
4902 
4975 
4988 {
4989  return ssl->MBEDTLS_PRIVATE(state) >= MBEDTLS_SSL_HANDSHAKE_OVER;
4990 }
4991 
5028 
5029 #if defined(MBEDTLS_SSL_RENEGOTIATION)
5054 #endif /* MBEDTLS_SSL_RENEGOTIATION */
5055 
5153 int mbedtls_ssl_read(mbedtls_ssl_context *ssl, unsigned char *buf, size_t len);
5154 
5228 int mbedtls_ssl_write(mbedtls_ssl_context *ssl, const unsigned char *buf, size_t len);
5229 
5247  unsigned char level,
5248  unsigned char message);
5263 
5264 #if defined(MBEDTLS_SSL_EARLY_DATA)
5265 
5266 #if defined(MBEDTLS_SSL_SRV_C)
5314 int mbedtls_ssl_read_early_data(mbedtls_ssl_context *ssl,
5315  unsigned char *buf, size_t len);
5316 #endif /* MBEDTLS_SSL_SRV_C */
5317 
5318 #if defined(MBEDTLS_SSL_CLI_C)
5403 int mbedtls_ssl_write_early_data(mbedtls_ssl_context *ssl,
5404  const unsigned char *buf, size_t len);
5405 
5432 int mbedtls_ssl_get_early_data_status(mbedtls_ssl_context *ssl);
5433 #endif /* MBEDTLS_SSL_CLI_C */
5434 
5435 #endif /* MBEDTLS_SSL_EARLY_DATA */
5436 
5443 
5444 #if defined(MBEDTLS_SSL_CONTEXT_SERIALIZATION)
5502  unsigned char *buf,
5503  size_t buf_len,
5504  size_t *olen);
5505 
5575  const unsigned char *buf,
5576  size_t len);
5577 #endif /* MBEDTLS_SSL_CONTEXT_SERIALIZATION */
5578 
5590 
5607  int endpoint, int transport, int preset);
5608 
5615 
5622 
5633 
5650  const unsigned char *secret, size_t slen,
5651  const char *label,
5652  const unsigned char *random, size_t rlen,
5653  unsigned char *dstbuf, size_t dlen);
5654 
5655 #ifdef __cplusplus
5656 }
5657 #endif
5658 
5659 #endif /* ssl.h */
Multi-precision integer library.
#define MBEDTLS_MPI_MAX_SIZE
Definition: bignum.h:73
Platform Security Architecture cryptography module.
This file contains Diffie-Hellman-Merkle (DHM) key exchange definitions and functions.
This file contains ECDH definitions and functions.
This file provides an API for Elliptic Curves over GF(P) (ECP).
#define MBEDTLS_ECP_MAX_BYTES
Definition: ecp.h:354
mbedtls_ecp_group_id
Definition: ecp.h:102
psa_key_id_t mbedtls_svc_key_id_t
Definition: crypto_types.h:292
int(* mbedtls_x509_crt_ca_cb_t)(void *p_ctx, mbedtls_x509_crt const *child, mbedtls_x509_crt **candidate_cas)
The type of trusted certificate callbacks.
Definition: x509_crt.h:784
Build-time configuration info.
This file contains the generic functions for message-digest (hashing) and HMAC.
mbedtls_md_type_t
Supported message digests.
Definition: md.h:47
Mbed TLS Platform time abstraction.
int64_t mbedtls_ms_time_t
Definition: platform_time.h:35
time_t mbedtls_time_t
Definition: platform_time.h:27
Common and shared functions used by multiple modules in the Mbed TLS library.
#define MBEDTLS_DEPRECATED
Definition: platform_util.h:37
Macro wrapper for struct's members.
#define MBEDTLS_PRIVATE(member)
void mbedtls_ssl_conf_cert_req_ca_list(mbedtls_ssl_config *conf, char cert_req_ca_list)
Whether to send a list of acceptable CAs in CertificateRequest messages. (Default: do send)
#define MBEDTLS_PSK_MAX_LEN
Definition: ssl.h:648
void mbedtls_ssl_set_hs_dn_hints(mbedtls_ssl_context *ssl, const mbedtls_x509_crt *crt)
Set DN hints sent to client in CertificateRequest message.
void mbedtls_ssl_conf_read_timeout(mbedtls_ssl_config *conf, uint32_t timeout)
Set the timeout period for mbedtls_ssl_read() (Default: no timeout.)
int mbedtls_ssl_cache_get_t(void *data, unsigned char const *session_id, size_t session_id_len, mbedtls_ssl_session *session)
Callback type: server-side session cache getter.
Definition: ssl.h:914
int mbedtls_ssl_ticket_write_t(void *p_ticket, const mbedtls_ssl_session *session, unsigned char *start, const unsigned char *end, size_t *tlen, uint32_t *lifetime)
Callback type: generate and write session ticket.
Definition: ssl.h:2614
void mbedtls_ssl_conf_extended_master_secret(mbedtls_ssl_config *conf, char ems)
Enable or disable Extended Master Secret negotiation. (Default: MBEDTLS_SSL_EXTENDED_MS_ENABLED)
void mbedtls_ssl_set_mtu(mbedtls_ssl_context *ssl, uint16_t mtu)
Set the Maximum Transport Unit (MTU). Special value: 0 means unset (no limit). This represents the ma...
int mbedtls_ssl_set_client_transport_id(mbedtls_ssl_context *ssl, const unsigned char *info, size_t ilen)
Set client's transport-level identification info. (Server only. DTLS only.)
void mbedtls_ssl_conf_renegotiation_period(mbedtls_ssl_config *conf, const unsigned char period[8])
Set record counter threshold for periodic renegotiation. (Default: 2^48 - 1)
#define MBEDTLS_SSL_CID_OUT_LEN_MAX
Definition: ssl.h:419
const char * mbedtls_ssl_get_ciphersuite(const mbedtls_ssl_context *ssl)
Return the name of the current ciphersuite.
void mbedtls_ssl_conf_legacy_renegotiation(mbedtls_ssl_config *conf, int allow_legacy)
Prevent or allow legacy renegotiation. (Default: MBEDTLS_SSL_LEGACY_NO_RENEGOTIATION)
void mbedtls_ssl_conf_psk_cb(mbedtls_ssl_config *conf, int(*f_psk)(void *, mbedtls_ssl_context *, const unsigned char *, size_t), void *p_psk)
Set the PSK callback (server-side only).
void mbedtls_ssl_export_keys_t(void *p_expkey, mbedtls_ssl_key_export_type type, const unsigned char *secret, size_t secret_len, const unsigned char client_random[32], const unsigned char server_random[32], mbedtls_tls_prf_types tls_prf_type)
Callback type: Export key alongside random values for session identification, and PRF for implementat...
Definition: ssl.h:1370
void mbedtls_ssl_conf_tls13_enable_signal_new_session_tickets(mbedtls_ssl_config *conf, int signal_new_session_tickets)
Enable / Disable handling of TLS 1.3 NewSessionTicket messages (client only, TLS 1....
int mbedtls_ssl_conf_psk(mbedtls_ssl_config *conf, const unsigned char *psk, size_t psk_len, const unsigned char *psk_identity, size_t psk_identity_len)
Configure pre-shared keys (PSKs) and their identities to be used in PSK-based ciphersuites.
const char * mbedtls_ssl_get_version(const mbedtls_ssl_context *ssl)
Return the current TLS version.
int mbedtls_ssl_session_save(const mbedtls_ssl_session *session, unsigned char *buf, size_t buf_len, size_t *olen)
Save session structure as serialized data in a buffer. On client, this can be used for saving session...
void MBEDTLS_DEPRECATED mbedtls_ssl_conf_sig_hashes(mbedtls_ssl_config *conf, const int *hashes)
Set the allowed hashes for signatures during the handshake.
int mbedtls_ssl_session_reset(mbedtls_ssl_context *ssl)
Reset an already initialized SSL context for re-use while retaining application-set variables,...
static uintptr_t mbedtls_ssl_get_user_data_n(mbedtls_ssl_context *ssl)
Retrieve the user data in an SSL context as an integer.
Definition: ssl.h:2877
static void mbedtls_ssl_conf_set_user_data_n(mbedtls_ssl_config *conf, uintptr_t n)
Set the user data in an SSL configuration to an integer.
Definition: ssl.h:2781
int mbedtls_ssl_check_record(mbedtls_ssl_context const *ssl, unsigned char *buf, size_t buflen)
Check whether a buffer contains a valid and authentic record that has not been seen before....
struct mbedtls_ssl_transform mbedtls_ssl_transform
Definition: ssl.h:868
void mbedtls_ssl_conf_renegotiation_enforced(mbedtls_ssl_config *conf, int max_records)
Enforce renegotiation requests. (Default: enforced, max_records = 16)
void mbedtls_ssl_free(mbedtls_ssl_context *ssl)
Free referenced items in an SSL context and clear memory.
void mbedtls_ssl_conf_transport(mbedtls_ssl_config *conf, int transport)
Set the transport type (TLS or DTLS). Default: TLS.
#define MBEDTLS_SSL_CID_IN_LEN_MAX
Definition: ssl.h:415
void mbedtls_ssl_set_timer_cb(mbedtls_ssl_context *ssl, void *p_timer, mbedtls_ssl_set_timer_t *f_set_timer, mbedtls_ssl_get_timer_t *f_get_timer)
Set the timer callbacks (Mandatory for DTLS.)
void mbedtls_ssl_set_hs_ca_chain(mbedtls_ssl_context *ssl, mbedtls_x509_crt *ca_chain, mbedtls_x509_crl *ca_crl)
Set the data required to verify peer certificate for the current handshake.
mbedtls_tls_prf_types
Definition: ssl.h:1334
@ MBEDTLS_SSL_TLS_PRF_SHA384
Definition: ssl.h:1336
@ MBEDTLS_SSL_HKDF_EXPAND_SHA256
Definition: ssl.h:1339
@ MBEDTLS_SSL_TLS_PRF_SHA256
Definition: ssl.h:1337
@ MBEDTLS_SSL_TLS_PRF_NONE
Definition: ssl.h:1335
@ MBEDTLS_SSL_HKDF_EXPAND_SHA384
Definition: ssl.h:1338
int mbedtls_ssl_send_t(void *ctx, const unsigned char *buf, size_t len)
Callback type: send data on the network.
Definition: ssl.h:769
void mbedtls_ssl_conf_sni(mbedtls_ssl_config *conf, int(*f_sni)(void *, mbedtls_ssl_context *, const unsigned char *, size_t), void *p_sni)
Set server side ServerName TLS extension callback (optional, server-side only).
mbedtls_ssl_states
Definition: ssl.h:703
@ MBEDTLS_SSL_CERTIFICATE_VERIFY
Definition: ssl.h:713
@ MBEDTLS_SSL_HANDSHAKE_OVER
Definition: ssl.h:731
@ MBEDTLS_SSL_SERVER_HELLO_DONE
Definition: ssl.h:710
@ MBEDTLS_SSL_END_OF_EARLY_DATA
Definition: ssl.h:724
@ MBEDTLS_SSL_NEW_SESSION_TICKET
Definition: ssl.h:720
@ MBEDTLS_SSL_SERVER_FINISHED
Definition: ssl.h:717
@ MBEDTLS_SSL_SERVER_KEY_EXCHANGE
Definition: ssl.h:708
@ MBEDTLS_SSL_ENCRYPTED_EXTENSIONS
Definition: ssl.h:723
@ MBEDTLS_SSL_SERVER_HELLO
Definition: ssl.h:706
@ MBEDTLS_SSL_SERVER_CCS_AFTER_HELLO_RETRY_REQUEST
Definition: ssl.h:730
@ MBEDTLS_SSL_CLIENT_KEY_EXCHANGE
Definition: ssl.h:712
@ MBEDTLS_SSL_CLIENT_CCS_BEFORE_2ND_CLIENT_HELLO
Definition: ssl.h:727
@ MBEDTLS_SSL_CLIENT_HELLO
Definition: ssl.h:705
@ MBEDTLS_SSL_SERVER_CERTIFICATE
Definition: ssl.h:707
@ MBEDTLS_SSL_CERTIFICATE_REQUEST
Definition: ssl.h:709
@ MBEDTLS_SSL_CLIENT_FINISHED
Definition: ssl.h:715
@ MBEDTLS_SSL_SERVER_CHANGE_CIPHER_SPEC
Definition: ssl.h:716
@ MBEDTLS_SSL_SERVER_HELLO_VERIFY_REQUEST_SENT
Definition: ssl.h:721
@ MBEDTLS_SSL_HANDSHAKE_WRAPUP
Definition: ssl.h:719
@ MBEDTLS_SSL_CLIENT_CCS_AFTER_SERVER_FINISHED
Definition: ssl.h:726
@ MBEDTLS_SSL_CLIENT_CHANGE_CIPHER_SPEC
Definition: ssl.h:714
@ MBEDTLS_SSL_CLIENT_CERTIFICATE_VERIFY
Definition: ssl.h:725
@ MBEDTLS_SSL_HELLO_REQUEST
Definition: ssl.h:704
@ MBEDTLS_SSL_CLIENT_CERTIFICATE
Definition: ssl.h:711
@ MBEDTLS_SSL_TLS1_3_NEW_SESSION_TICKET_FLUSH
Definition: ssl.h:733
@ MBEDTLS_SSL_FLUSH_BUFFERS
Definition: ssl.h:718
@ MBEDTLS_SSL_CLIENT_CCS_AFTER_CLIENT_HELLO
Definition: ssl.h:729
@ MBEDTLS_SSL_TLS1_3_NEW_SESSION_TICKET
Definition: ssl.h:732
@ MBEDTLS_SSL_HELLO_RETRY_REQUEST
Definition: ssl.h:722
@ MBEDTLS_SSL_SERVER_CCS_AFTER_SERVER_HELLO
Definition: ssl.h:728
void mbedtls_ssl_set_verify(mbedtls_ssl_context *ssl, int(*f_vrfy)(void *, mbedtls_x509_crt *, int, uint32_t *), void *p_vrfy)
Set a connection-specific verification callback (optional).
void mbedtls_ssl_conf_endpoint(mbedtls_ssl_config *conf, int endpoint)
Set the current endpoint type.
int(* mbedtls_ssl_hs_cb_t)(mbedtls_ssl_context *ssl)
Callback type: generic handshake callback.
Definition: ssl.h:1394
int mbedtls_ssl_check_pending(const mbedtls_ssl_context *ssl)
Check if there is data already read from the underlying transport but not yet processed.
mbedtls_ssl_protocol_version
Definition: ssl.h:1214
@ MBEDTLS_SSL_VERSION_TLS1_2
Definition: ssl.h:1216
@ MBEDTLS_SSL_VERSION_TLS1_3
Definition: ssl.h:1217
@ MBEDTLS_SSL_VERSION_UNKNOWN
Definition: ssl.h:1215
int mbedtls_ssl_send_alert_message(mbedtls_ssl_context *ssl, unsigned char level, unsigned char message)
Send an alert message.
static int mbedtls_ssl_is_handshake_over(mbedtls_ssl_context *ssl)
After calling mbedtls_ssl_handshake() to start the SSL handshake you can call this function to check ...
Definition: ssl.h:4987
int mbedtls_ssl_conf_dh_param_bin(mbedtls_ssl_config *conf, const unsigned char *dhm_P, size_t P_len, const unsigned char *dhm_G, size_t G_len)
Set the Diffie-Hellman public P and G values from big-endian binary presentations....
void mbedtls_ssl_conf_rng(mbedtls_ssl_config *conf, int(*f_rng)(void *, unsigned char *, size_t), void *p_rng)
Set the random number generator callback.
void mbedtls_ssl_conf_dtls_anti_replay(mbedtls_ssl_config *conf, char mode)
Enable or disable anti-replay protection for DTLS. (DTLS only, no effect on TLS.) Default: enabled.
int mbedtls_ssl_ticket_parse_t(void *p_ticket, mbedtls_ssl_session *session, unsigned char *buf, size_t len)
Callback type: parse and load session ticket.
Definition: ssl.h:2644
int mbedtls_ssl_renegotiate(mbedtls_ssl_context *ssl)
Initiate an SSL renegotiation on the running connection. Client: perform the renegotiation right now....
static void mbedtls_ssl_conf_cert_cb(mbedtls_ssl_config *conf, mbedtls_ssl_hs_cb_t f_cert_cb)
Set the certificate selection callback (server-side only).
Definition: ssl.h:2588
int mbedtls_ssl_handshake(mbedtls_ssl_context *ssl)
Perform the SSL handshake.
int mbedtls_ssl_conf_own_cert(mbedtls_ssl_config *conf, mbedtls_x509_crt *own_cert, mbedtls_pk_context *pk_key)
Set own certificate chain and private key.
void mbedtls_ssl_conf_new_session_tickets(mbedtls_ssl_config *conf, uint16_t num_tickets)
Number of NewSessionTicket messages for the server to send after handshake completion.
struct mbedtls_ssl_sig_hash_set_t mbedtls_ssl_sig_hash_set_t
Definition: ssl.h:870
static void * mbedtls_ssl_conf_get_user_data_p(mbedtls_ssl_config *conf)
Retrieve the user data in an SSL configuration as a pointer.
Definition: ssl.h:2798
int mbedtls_ssl_set_hs_psk(mbedtls_ssl_context *ssl, const unsigned char *psk, size_t psk_len)
Set the pre-shared Key (PSK) for the current handshake.
uint32_t mbedtls_ssl_get_verify_result(const mbedtls_ssl_context *ssl)
Return the result of the certificate verification.
#define MBEDTLS_SSL_SEQUENCE_NUMBER_LEN
Definition: ssl.h:694
mbedtls_ssl_key_export_type
Definition: ssl.h:1343
@ MBEDTLS_SSL_KEY_EXPORT_TLS1_3_CLIENT_APPLICATION_TRAFFIC_SECRET
Definition: ssl.h:1350
@ MBEDTLS_SSL_KEY_EXPORT_TLS12_MASTER_SECRET
Definition: ssl.h:1344
@ MBEDTLS_SSL_KEY_EXPORT_TLS1_3_SERVER_APPLICATION_TRAFFIC_SECRET
Definition: ssl.h:1351
@ MBEDTLS_SSL_KEY_EXPORT_TLS1_3_SERVER_HANDSHAKE_TRAFFIC_SECRET
Definition: ssl.h:1349
@ MBEDTLS_SSL_KEY_EXPORT_TLS1_3_CLIENT_HANDSHAKE_TRAFFIC_SECRET
Definition: ssl.h:1348
@ MBEDTLS_SSL_KEY_EXPORT_TLS1_3_EARLY_EXPORTER_SECRET
Definition: ssl.h:1347
@ MBEDTLS_SSL_KEY_EXPORT_TLS1_3_CLIENT_EARLY_SECRET
Definition: ssl.h:1346
int mbedtls_ssl_session_load(mbedtls_ssl_session *session, const unsigned char *buf, size_t len)
Load serialized session data into a session structure. On client, this can be used for loading saved ...
int mbedtls_ssl_cookie_write_t(void *ctx, unsigned char **p, unsigned char *end, const unsigned char *info, size_t ilen)
Callback type: generate a cookie.
Definition: ssl.h:2976
static mbedtls_ssl_protocol_version mbedtls_ssl_get_version_number(const mbedtls_ssl_context *ssl)
Return the (D)TLS protocol version negotiated in the given connection.
Definition: ssl.h:4765
void mbedtls_ssl_conf_authmode(mbedtls_ssl_config *conf, int authmode)
Set the certificate verification mode Default: NONE on server, REQUIRED on client.
void mbedtls_ssl_conf_dtls_cookies(mbedtls_ssl_config *conf, mbedtls_ssl_cookie_write_t *f_cookie_write, mbedtls_ssl_cookie_check_t *f_cookie_check, void *p_cookie)
Register callbacks for DTLS cookies (Server only. DTLS only.)
int mbedtls_ssl_get_max_out_record_payload(const mbedtls_ssl_context *ssl)
Return the current maximum outgoing record payload in bytes.
int mbedtls_ssl_write(mbedtls_ssl_context *ssl, const unsigned char *buf, size_t len)
Try to write exactly 'len' application data bytes.
struct mbedtls_ssl_handshake_params mbedtls_ssl_handshake_params
Definition: ssl.h:869
int mbedtls_ssl_get_max_in_record_payload(const mbedtls_ssl_context *ssl)
Return the current maximum incoming record payload in bytes.
void mbedtls_ssl_conf_preference_order(mbedtls_ssl_config *conf, int order)
Pick the ciphersuites order according to the second parameter in the SSL Server module (MBEDTLS_SSL_S...
void mbedtls_ssl_set_timer_t(void *ctx, uint32_t int_ms, uint32_t fin_ms)
Callback type: set a pair of timers/delays to watch.
Definition: ssl.h:845
void mbedtls_ssl_conf_handshake_timeout(mbedtls_ssl_config *conf, uint32_t min, uint32_t max)
Set retransmit timeout values for the DTLS handshake. (DTLS only, no effect on TLS....
#define MBEDTLS_ERR_SSL_BAD_INPUT_DATA
Definition: ssl.h:51
void mbedtls_ssl_conf_sig_algs(mbedtls_ssl_config *conf, const uint16_t *sig_algs)
Configure allowed signature algorithms for use in TLS.
int mbedtls_ssl_recv_timeout_t(void *ctx, unsigned char *buf, size_t len, uint32_t timeout)
Callback type: receive data from the network, with timeout.
Definition: ssl.h:819
#define MBEDTLS_SSL_IS_SERVER
Definition: ssl.h:283
void mbedtls_ssl_conf_session_tickets_cb(mbedtls_ssl_config *conf, mbedtls_ssl_ticket_write_t *f_ticket_write, mbedtls_ssl_ticket_parse_t *f_ticket_parse, void *p_ticket)
Configure SSL session ticket callbacks (server only). (Default: none.)
void mbedtls_ssl_config_free(mbedtls_ssl_config *conf)
Free an SSL configuration context.
static void mbedtls_ssl_conf_dn_hints(mbedtls_ssl_config *conf, const mbedtls_x509_crt *crt)
Set DN hints sent to client in CertificateRequest message.
Definition: ssl.h:3507
void mbedtls_ssl_conf_cert_profile(mbedtls_ssl_config *conf, const mbedtls_x509_crt_profile *profile)
Set the X.509 security profile used for verification.
int mbedtls_ssl_get_own_cid(mbedtls_ssl_context *ssl, int *enabled, unsigned char own_cid[MBEDTLS_SSL_CID_IN_LEN_MAX], size_t *own_cid_len)
Get information about our request for usage of the CID extension in the current connection.
void mbedtls_ssl_session_init(mbedtls_ssl_session *session)
Initialize SSL session structure.
#define MBEDTLS_SSL_VERIFY_DATA_MAX_LEN
Definition: ssl.h:455
int mbedtls_ssl_get_peer_cid(mbedtls_ssl_context *ssl, int *enabled, unsigned char peer_cid[MBEDTLS_SSL_CID_OUT_LEN_MAX], size_t *peer_cid_len)
Get information about the use of the CID extension in the current connection.
int mbedtls_ssl_context_load(mbedtls_ssl_context *ssl, const unsigned char *buf, size_t len)
Load serialized connection data to an SSL context.
void mbedtls_ssl_set_hs_authmode(mbedtls_ssl_context *ssl, int authmode)
Set authmode for the current handshake.
void mbedtls_ssl_set_datagram_packing(mbedtls_ssl_context *ssl, unsigned allow_packing)
Allow or disallow packing of multiple handshake records within a single datagram.
void mbedtls_ssl_init(mbedtls_ssl_context *ssl)
Initialize an SSL context Just makes the context ready for mbedtls_ssl_setup() or mbedtls_ssl_free()
void mbedtls_ssl_conf_ca_chain(mbedtls_ssl_config *conf, mbedtls_x509_crt *ca_chain, mbedtls_x509_crl *ca_crl)
Set the data required to verify peer certificate.
static uintptr_t mbedtls_ssl_conf_get_user_data_n(mbedtls_ssl_config *conf)
Retrieve the user data in an SSL configuration as an integer.
Definition: ssl.h:2814
int mbedtls_ssl_conf_cid(mbedtls_ssl_config *conf, size_t len, int ignore_other_cids)
Specify the length of Connection IDs for incoming encrypted DTLS records, as well as the behaviour on...
void mbedtls_ssl_set_bio(mbedtls_ssl_context *ssl, void *p_bio, mbedtls_ssl_send_t *f_send, mbedtls_ssl_recv_t *f_recv, mbedtls_ssl_recv_timeout_t *f_recv_timeout)
Set the underlying BIO callbacks for write, read and read-with-timeout.
int mbedtls_ssl_set_session(mbedtls_ssl_context *ssl, const mbedtls_ssl_session *session)
Load a session for session resumption.
int mbedtls_ssl_get_record_expansion(const mbedtls_ssl_context *ssl)
Return the (maximum) number of bytes added by the record layer: header + encryption/MAC overhead (inc...
#define MBEDTLS_SSL_TLS1_3_TICKET_RESUMPTION_KEY_LEN
Definition: ssl.h:344
static void * mbedtls_ssl_get_user_data_p(mbedtls_ssl_context *ssl)
Retrieve the user data in an SSL context as a pointer.
Definition: ssl.h:2861
void mbedtls_ssl_conf_session_cache(mbedtls_ssl_config *conf, void *p_cache, mbedtls_ssl_cache_get_t *f_get_cache, mbedtls_ssl_cache_set_t *f_set_cache)
Set the session cache callbacks (server-side only) If not set, no session resuming is done (except if...
void mbedtls_ssl_conf_session_tickets(mbedtls_ssl_config *conf, int use_tickets)
Enable / Disable TLS 1.2 session tickets (client only, TLS 1.2 only). Enabled by default.
int mbedtls_ssl_get_ciphersuite_id(const char *ciphersuite_name)
Return the ID of the ciphersuite associated with the given name.
static const char * mbedtls_ssl_get_hostname(mbedtls_ssl_context *ssl)
Get the hostname that checked against the received server certificate. It is used to set the ServerNa...
Definition: ssl.h:3998
void mbedtls_ssl_conf_dtls_badmac_limit(mbedtls_ssl_config *conf, unsigned limit)
Set a limit on the number of records with a bad MAC before terminating the connection....
int mbedtls_ssl_cookie_check_t(void *ctx, const unsigned char *cookie, size_t clen, const unsigned char *info, size_t ilen)
Callback type: verify a cookie.
Definition: ssl.h:2993
void mbedtls_ssl_conf_dhm_min_bitlen(mbedtls_ssl_config *conf, unsigned int bitlen)
Set the minimum length for Diffie-Hellman parameters. (Client-side only.) (Default: 1024 bits....
int mbedtls_ssl_set_hs_own_cert(mbedtls_ssl_context *ssl, mbedtls_x509_crt *own_cert, mbedtls_pk_context *pk_key)
Set own certificate and key for the current handshake.
static int mbedtls_ssl_session_get_ciphersuite_id(const mbedtls_ssl_session *session)
Get the ciphersuite-id.
Definition: ssl.h:2730
int mbedtls_ssl_config_defaults(mbedtls_ssl_config *conf, int endpoint, int transport, int preset)
Load reasonable default SSL configuration values. (You need to call mbedtls_ssl_config_init() first....
int mbedtls_ssl_read(mbedtls_ssl_context *ssl, unsigned char *buf, size_t len)
Read at most 'len' application data bytes.
void MBEDTLS_DEPRECATED mbedtls_ssl_conf_curves(mbedtls_ssl_config *conf, const mbedtls_ecp_group_id *curves)
Set the allowed curves in order of preference.
int mbedtls_ssl_set_hostname(mbedtls_ssl_context *ssl, const char *hostname)
Set or reset the hostname to check against the received server certificate. It sets the ServerName TL...
static int mbedtls_ssl_session_get_ticket_creation_time(mbedtls_ssl_session *session, mbedtls_ms_time_t *ticket_creation_time)
Get the creation time of a session ticket.
Definition: ssl.h:2683
const mbedtls_x509_crt * mbedtls_ssl_get_peer_cert(const mbedtls_ssl_context *ssl)
Return the peer certificate from the current connection.
void mbedtls_ssl_conf_groups(mbedtls_ssl_config *conf, const uint16_t *groups)
Set the allowed groups in order of preference.
void MBEDTLS_DEPRECATED mbedtls_ssl_conf_max_version(mbedtls_ssl_config *conf, int major, int minor)
Set the maximum supported version sent from the client side and/or accepted at the server side.
int mbedtls_ssl_handshake_step(mbedtls_ssl_context *ssl)
Perform a single step of the SSL handshake.
int mbedtls_ssl_cache_set_t(void *data, unsigned char const *session_id, size_t session_id_len, const mbedtls_ssl_session *session)
Callback type: server-side session cache setter.
Definition: ssl.h:936
void mbedtls_ssl_conf_renegotiation(mbedtls_ssl_config *conf, int renegotiation)
Enable / Disable renegotiation support for connection when initiated by peer (Default: MBEDTLS_SSL_RE...
const unsigned char * mbedtls_ssl_get_hs_sni(mbedtls_ssl_context *ssl, size_t *name_len)
Retrieve SNI extension value for the current handshake. Available in f_cert_cb of mbedtls_ssl_conf_ce...
void mbedtls_ssl_conf_dbg(mbedtls_ssl_config *conf, void(*f_dbg)(void *, int, const char *, int, const char *), void *p_dbg)
Set the debug callback.
static const mbedtls_ssl_config * mbedtls_ssl_context_get_config(const mbedtls_ssl_context *ssl)
Return the SSL configuration structure associated with the given SSL context.
Definition: ssl.h:2206
#define MBEDTLS_TLS1_3_MD_MAX_SIZE
Definition: ssl.h:690
void mbedtls_ssl_config_init(mbedtls_ssl_config *conf)
Initialize an SSL configuration context Just makes the context ready for mbedtls_ssl_config_defaults(...
static void mbedtls_ssl_conf_max_tls_version(mbedtls_ssl_config *conf, mbedtls_ssl_protocol_version tls_version)
Set the maximum supported version sent from the client side and/or accepted at the server side.
Definition: ssl.h:4316
int mbedtls_ssl_context_save(mbedtls_ssl_context *ssl, unsigned char *buf, size_t buf_len, size_t *olen)
Save an active connection as serialized data in a buffer. This allows the freeing or re-using of the ...
int mbedtls_ssl_tls_prf(const mbedtls_tls_prf_types prf, const unsigned char *secret, size_t slen, const char *label, const unsigned char *random, size_t rlen, unsigned char *dstbuf, size_t dlen)
TLS-PRF function for key derivation.
struct mbedtls_ssl_flight_item mbedtls_ssl_flight_item
Definition: ssl.h:875
int mbedtls_ssl_recv_t(void *ctx, unsigned char *buf, size_t len)
Callback type: receive data from the network.
Definition: ssl.h:793
void mbedtls_ssl_session_free(mbedtls_ssl_session *session)
Free referenced items in an SSL session including the peer certificate and clear memory.
static unsigned const char(* mbedtls_ssl_session_get_id(const mbedtls_ssl_session *session))[32]
Get the session-id buffer.
Definition: ssl.h:2705
int mbedtls_ssl_close_notify(mbedtls_ssl_context *ssl)
Notify the peer that the connection is being closed.
int mbedtls_ssl_conf_max_frag_len(mbedtls_ssl_config *conf, unsigned char mfl_code)
Set the maximum fragment length to emit and/or negotiate. (Typical: the smaller of MBEDTLS_SSL_IN_CON...
int mbedtls_ssl_get_ciphersuite_id_from_ssl(const mbedtls_ssl_context *ssl)
Return the id of the current ciphersuite.
void mbedtls_ssl_conf_ciphersuites(mbedtls_ssl_config *conf, const int *ciphersuites)
Set the list of allowed ciphersuites and the preference order. First in the list has the highest pref...
const char * mbedtls_ssl_get_alpn_protocol(const mbedtls_ssl_context *ssl)
Get the name of the negotiated Application Layer Protocol. This function should be called after the h...
size_t mbedtls_ssl_get_bytes_avail(const mbedtls_ssl_context *ssl)
Return the number of application data bytes remaining to be read from the current record.
int mbedtls_ssl_get_session(const mbedtls_ssl_context *ssl, mbedtls_ssl_session *session)
Export a session in order to resume it later.
void MBEDTLS_DEPRECATED mbedtls_ssl_conf_min_version(mbedtls_ssl_config *conf, int major, int minor)
Set the minimum accepted SSL/TLS protocol version.
static void mbedtls_ssl_conf_set_user_data_p(mbedtls_ssl_config *conf, void *p)
Set the user data in an SSL configuration to a pointer.
Definition: ssl.h:2767
const char * mbedtls_ssl_get_ciphersuite_name(const int ciphersuite_id)
Return the name of the ciphersuite associated with the given ID.
int mbedtls_ssl_get_timer_t(void *ctx)
Callback type: get status of timers/delays.
Definition: ssl.h:860
int mbedtls_ssl_conf_alpn_protocols(mbedtls_ssl_config *conf, const char **protos)
Set the supported Application Layer Protocols.
static void mbedtls_ssl_set_user_data_n(mbedtls_ssl_context *ssl, uintptr_t n)
Set the user data in an SSL context to an integer.
Definition: ssl.h:2844
int mbedtls_ssl_conf_dh_param_ctx(mbedtls_ssl_config *conf, mbedtls_dhm_context *dhm_ctx)
Set the Diffie-Hellman public P and G values, read from existing context (server-side only)
static void mbedtls_ssl_conf_min_tls_version(mbedtls_ssl_config *conf, mbedtls_ssl_protocol_version tls_version)
Set the minimum supported version sent from the client side and/or accepted at the server side.
Definition: ssl.h:4373
struct mbedtls_ssl_key_cert mbedtls_ssl_key_cert
Definition: ssl.h:872
void mbedtls_ssl_conf_tls13_key_exchange_modes(mbedtls_ssl_config *conf, const int kex_modes)
Set the supported key exchange modes for TLS 1.3 connections.
static size_t mbedtls_ssl_session_get_id_len(const mbedtls_ssl_session *session)
Get the size of the session-id.
Definition: ssl.h:2718
int mbedtls_ssl_setup(mbedtls_ssl_context *ssl, const mbedtls_ssl_config *conf)
Set up an SSL context for use.
static void mbedtls_ssl_set_user_data_p(mbedtls_ssl_context *ssl, void *p)
Set the user data in an SSL context to a pointer.
Definition: ssl.h:2830
static int mbedtls_ssl_conf_get_endpoint(const mbedtls_ssl_config *conf)
Get the current endpoint type.
Definition: ssl.h:2036
void mbedtls_ssl_conf_encrypt_then_mac(mbedtls_ssl_config *conf, char etm)
Enable or disable Encrypt-then-MAC (Default: MBEDTLS_SSL_ETM_ENABLED)
void mbedtls_ssl_conf_verify(mbedtls_ssl_config *conf, int(*f_vrfy)(void *, mbedtls_x509_crt *, int, uint32_t *), void *p_vrfy)
Set the verification callback (Optional).
void mbedtls_ssl_set_export_keys_cb(mbedtls_ssl_context *ssl, mbedtls_ssl_export_keys_t *f_export_keys, void *p_export_keys)
Configure a key export callback. (Default: none.)
int mbedtls_ssl_set_cid(mbedtls_ssl_context *ssl, int enable, unsigned char const *own_cid, size_t own_cid_len)
Configure the use of the Connection ID (CID) extension in the next handshake.
SSL Ciphersuites for Mbed TLS.
The DHM context structure.
Definition: dhm.h:101
MPI structure.
Definition: bignum.h:207
Public key container.
Definition: pk.h:220
unsigned char _pms_ecdhe_psk[4+MBEDTLS_ECP_MAX_BYTES+MBEDTLS_PSK_MAX_LEN]
Definition: ssl.h:681
unsigned char _pms_dhm[MBEDTLS_MPI_MAX_SIZE]
Definition: ssl.h:661
unsigned char _pms_psk[4+2 *MBEDTLS_PSK_MAX_LEN]
Definition: ssl.h:670
unsigned char _pms_rsa_psk[52+MBEDTLS_PSK_MAX_LEN]
Definition: ssl.h:677
unsigned char dummy
Definition: ssl.h:656
unsigned char _pms_rsa[48]
Definition: ssl.h:658
unsigned char _pms_dhe_psk[4+MBEDTLS_MPI_MAX_SIZE+MBEDTLS_PSK_MAX_LEN]
Definition: ssl.h:674
unsigned char _pms_ecdh[MBEDTLS_ECP_MAX_BYTES]
Definition: ssl.h:667
X.509 certificate revocation list parsing.
X.509 certificate parsing and writing.