PolarSSL is now part of ARM Official announcement and rebranded as mbed TLS.

API Documentation (Doxygen generated)

These pages are generated with doxygen directly from the source code!

ssl.h
Go to the documentation of this file.
1 
6 /*
7  * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved
8  * SPDX-License-Identifier: Apache-2.0
9  *
10  * Licensed under the Apache License, Version 2.0 (the "License"); you may
11  * not use this file except in compliance with the License.
12  * You may obtain a copy of the License at
13  *
14  * http://www.apache.org/licenses/LICENSE-2.0
15  *
16  * Unless required by applicable law or agreed to in writing, software
17  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
18  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19  * See the License for the specific language governing permissions and
20  * limitations under the License.
21  *
22  * This file is part of mbed TLS (https://tls.mbed.org)
23  */
24 #ifndef MBEDTLS_SSL_H
25 #define MBEDTLS_SSL_H
26 
27 #if !defined(MBEDTLS_CONFIG_FILE)
28 #include "config.h"
29 #else
30 #include MBEDTLS_CONFIG_FILE
31 #endif
32 
33 #include "bignum.h"
34 #include "ecp.h"
35 
36 #include "ssl_ciphersuites.h"
37 
38 #if defined(MBEDTLS_X509_CRT_PARSE_C)
39 #include "x509_crt.h"
40 #include "x509_crl.h"
41 #endif
42 
43 #if defined(MBEDTLS_DHM_C)
44 #include "dhm.h"
45 #endif
46 
47 #if defined(MBEDTLS_ECDH_C)
48 #include "ecdh.h"
49 #endif
50 
51 #if defined(MBEDTLS_ZLIB_SUPPORT)
52 
53 #if defined(MBEDTLS_DEPRECATED_WARNING)
54 #warning "Record compression support via MBEDTLS_ZLIB_SUPPORT is deprecated and will be removed in the next major revision of the library"
55 #endif
56 
57 #if defined(MBEDTLS_DEPRECATED_REMOVED)
58 #error "Record compression support via MBEDTLS_ZLIB_SUPPORT is deprecated and cannot be used if MBEDTLS_DEPRECATED_REMOVED is set"
59 #endif
60 
61 #include "zlib.h"
62 #endif
63 
64 #if defined(MBEDTLS_HAVE_TIME)
65 #include "platform_time.h"
66 #endif
67 
68 /*
69  * SSL Error codes
70  */
71 #define MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE -0x7080
72 #define MBEDTLS_ERR_SSL_BAD_INPUT_DATA -0x7100
73 #define MBEDTLS_ERR_SSL_INVALID_MAC -0x7180
74 #define MBEDTLS_ERR_SSL_INVALID_RECORD -0x7200
75 #define MBEDTLS_ERR_SSL_CONN_EOF -0x7280
76 #define MBEDTLS_ERR_SSL_UNKNOWN_CIPHER -0x7300
77 #define MBEDTLS_ERR_SSL_NO_CIPHER_CHOSEN -0x7380
78 #define MBEDTLS_ERR_SSL_NO_RNG -0x7400
79 #define MBEDTLS_ERR_SSL_NO_CLIENT_CERTIFICATE -0x7480
80 #define MBEDTLS_ERR_SSL_CERTIFICATE_TOO_LARGE -0x7500
81 #define MBEDTLS_ERR_SSL_CERTIFICATE_REQUIRED -0x7580
82 #define MBEDTLS_ERR_SSL_PRIVATE_KEY_REQUIRED -0x7600
83 #define MBEDTLS_ERR_SSL_CA_CHAIN_REQUIRED -0x7680
84 #define MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE -0x7700
85 #define MBEDTLS_ERR_SSL_FATAL_ALERT_MESSAGE -0x7780
86 #define MBEDTLS_ERR_SSL_PEER_VERIFY_FAILED -0x7800
87 #define MBEDTLS_ERR_SSL_PEER_CLOSE_NOTIFY -0x7880
88 #define MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO -0x7900
89 #define MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO -0x7980
90 #define MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE -0x7A00
91 #define MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_REQUEST -0x7A80
92 #define MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE -0x7B00
93 #define MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO_DONE -0x7B80
94 #define MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE -0x7C00
95 #define MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE_RP -0x7C80
96 #define MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE_CS -0x7D00
97 #define MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_VERIFY -0x7D80
98 #define MBEDTLS_ERR_SSL_BAD_HS_CHANGE_CIPHER_SPEC -0x7E00
99 #define MBEDTLS_ERR_SSL_BAD_HS_FINISHED -0x7E80
100 #define MBEDTLS_ERR_SSL_ALLOC_FAILED -0x7F00
101 #define MBEDTLS_ERR_SSL_HW_ACCEL_FAILED -0x7F80
102 #define MBEDTLS_ERR_SSL_HW_ACCEL_FALLTHROUGH -0x6F80
103 #define MBEDTLS_ERR_SSL_COMPRESSION_FAILED -0x6F00
104 #define MBEDTLS_ERR_SSL_BAD_HS_PROTOCOL_VERSION -0x6E80
105 #define MBEDTLS_ERR_SSL_BAD_HS_NEW_SESSION_TICKET -0x6E00
106 #define MBEDTLS_ERR_SSL_SESSION_TICKET_EXPIRED -0x6D80
107 #define MBEDTLS_ERR_SSL_PK_TYPE_MISMATCH -0x6D00
108 #define MBEDTLS_ERR_SSL_UNKNOWN_IDENTITY -0x6C80
109 #define MBEDTLS_ERR_SSL_INTERNAL_ERROR -0x6C00
110 #define MBEDTLS_ERR_SSL_COUNTER_WRAPPING -0x6B80
111 #define MBEDTLS_ERR_SSL_WAITING_SERVER_HELLO_RENEGO -0x6B00
112 #define MBEDTLS_ERR_SSL_HELLO_VERIFY_REQUIRED -0x6A80
113 #define MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL -0x6A00
114 #define MBEDTLS_ERR_SSL_NO_USABLE_CIPHERSUITE -0x6980
115 #define MBEDTLS_ERR_SSL_WANT_READ -0x6900
116 #define MBEDTLS_ERR_SSL_WANT_WRITE -0x6880
117 #define MBEDTLS_ERR_SSL_TIMEOUT -0x6800
118 #define MBEDTLS_ERR_SSL_CLIENT_RECONNECT -0x6780
119 #define MBEDTLS_ERR_SSL_UNEXPECTED_RECORD -0x6700
120 #define MBEDTLS_ERR_SSL_NON_FATAL -0x6680
121 #define MBEDTLS_ERR_SSL_INVALID_VERIFY_HASH -0x6600
122 #define MBEDTLS_ERR_SSL_CONTINUE_PROCESSING -0x6580
123 #define MBEDTLS_ERR_SSL_ASYNC_IN_PROGRESS -0x6500
124 #define MBEDTLS_ERR_SSL_EARLY_MESSAGE -0x6480
125 #define MBEDTLS_ERR_SSL_CRYPTO_IN_PROGRESS -0x7000
127 /*
128  * Various constants
129  */
130 #define MBEDTLS_SSL_MAJOR_VERSION_3 3
131 #define MBEDTLS_SSL_MINOR_VERSION_0 0
132 #define MBEDTLS_SSL_MINOR_VERSION_1 1
133 #define MBEDTLS_SSL_MINOR_VERSION_2 2
134 #define MBEDTLS_SSL_MINOR_VERSION_3 3
136 #define MBEDTLS_SSL_TRANSPORT_STREAM 0
137 #define MBEDTLS_SSL_TRANSPORT_DATAGRAM 1
139 #define MBEDTLS_SSL_MAX_HOST_NAME_LEN 255
141 /* RFC 6066 section 4, see also mfl_code_to_length in ssl_tls.c
142  * NONE must be zero so that memset()ing structure to zero works */
143 #define MBEDTLS_SSL_MAX_FRAG_LEN_NONE 0
144 #define MBEDTLS_SSL_MAX_FRAG_LEN_512 1
145 #define MBEDTLS_SSL_MAX_FRAG_LEN_1024 2
146 #define MBEDTLS_SSL_MAX_FRAG_LEN_2048 3
147 #define MBEDTLS_SSL_MAX_FRAG_LEN_4096 4
148 #define MBEDTLS_SSL_MAX_FRAG_LEN_INVALID 5
150 #define MBEDTLS_SSL_IS_CLIENT 0
151 #define MBEDTLS_SSL_IS_SERVER 1
152 
153 #define MBEDTLS_SSL_IS_NOT_FALLBACK 0
154 #define MBEDTLS_SSL_IS_FALLBACK 1
155 
156 #define MBEDTLS_SSL_EXTENDED_MS_DISABLED 0
157 #define MBEDTLS_SSL_EXTENDED_MS_ENABLED 1
158 
159 #define MBEDTLS_SSL_ETM_DISABLED 0
160 #define MBEDTLS_SSL_ETM_ENABLED 1
161 
162 #define MBEDTLS_SSL_COMPRESS_NULL 0
163 #define MBEDTLS_SSL_COMPRESS_DEFLATE 1
164 
165 #define MBEDTLS_SSL_VERIFY_NONE 0
166 #define MBEDTLS_SSL_VERIFY_OPTIONAL 1
167 #define MBEDTLS_SSL_VERIFY_REQUIRED 2
168 #define MBEDTLS_SSL_VERIFY_UNSET 3 /* Used only for sni_authmode */
169 
170 #define MBEDTLS_SSL_LEGACY_RENEGOTIATION 0
171 #define MBEDTLS_SSL_SECURE_RENEGOTIATION 1
172 
173 #define MBEDTLS_SSL_RENEGOTIATION_DISABLED 0
174 #define MBEDTLS_SSL_RENEGOTIATION_ENABLED 1
175 
176 #define MBEDTLS_SSL_ANTI_REPLAY_DISABLED 0
177 #define MBEDTLS_SSL_ANTI_REPLAY_ENABLED 1
178 
179 #define MBEDTLS_SSL_RENEGOTIATION_NOT_ENFORCED -1
180 #define MBEDTLS_SSL_RENEGO_MAX_RECORDS_DEFAULT 16
181 
182 #define MBEDTLS_SSL_LEGACY_NO_RENEGOTIATION 0
183 #define MBEDTLS_SSL_LEGACY_ALLOW_RENEGOTIATION 1
184 #define MBEDTLS_SSL_LEGACY_BREAK_HANDSHAKE 2
185 
186 #define MBEDTLS_SSL_TRUNC_HMAC_DISABLED 0
187 #define MBEDTLS_SSL_TRUNC_HMAC_ENABLED 1
188 #define MBEDTLS_SSL_TRUNCATED_HMAC_LEN 10 /* 80 bits, rfc 6066 section 7 */
189 
190 #define MBEDTLS_SSL_SESSION_TICKETS_DISABLED 0
191 #define MBEDTLS_SSL_SESSION_TICKETS_ENABLED 1
192 
193 #define MBEDTLS_SSL_CBC_RECORD_SPLITTING_DISABLED 0
194 #define MBEDTLS_SSL_CBC_RECORD_SPLITTING_ENABLED 1
195 
196 #define MBEDTLS_SSL_ARC4_ENABLED 0
197 #define MBEDTLS_SSL_ARC4_DISABLED 1
198 
199 #define MBEDTLS_SSL_PRESET_DEFAULT 0
200 #define MBEDTLS_SSL_PRESET_SUITEB 2
201 
202 #define MBEDTLS_SSL_CERT_REQ_CA_LIST_ENABLED 1
203 #define MBEDTLS_SSL_CERT_REQ_CA_LIST_DISABLED 0
204 
205 /*
206  * Default range for DTLS retransmission timer value, in milliseconds.
207  * RFC 6347 4.2.4.1 says from 1 second to 60 seconds.
208  */
209 #define MBEDTLS_SSL_DTLS_TIMEOUT_DFL_MIN 1000
210 #define MBEDTLS_SSL_DTLS_TIMEOUT_DFL_MAX 60000
211 
220 #if !defined(MBEDTLS_SSL_DEFAULT_TICKET_LIFETIME)
221 #define MBEDTLS_SSL_DEFAULT_TICKET_LIFETIME 86400
222 #endif
223 
224 /*
225  * Maximum fragment length in bytes,
226  * determines the size of each of the two internal I/O buffers.
227  *
228  * Note: the RFC defines the default size of SSL / TLS messages. If you
229  * change the value here, other clients / servers may not be able to
230  * communicate with you anymore. Only change this value if you control
231  * both sides of the connection and have it reduced at both sides, or
232  * if you're using the Max Fragment Length extension and you know all your
233  * peers are using it too!
234  */
235 #if !defined(MBEDTLS_SSL_MAX_CONTENT_LEN)
236 #define MBEDTLS_SSL_MAX_CONTENT_LEN 16384
237 #endif
238 
239 #if !defined(MBEDTLS_SSL_IN_CONTENT_LEN)
240 #define MBEDTLS_SSL_IN_CONTENT_LEN MBEDTLS_SSL_MAX_CONTENT_LEN
241 #endif
242 
243 #if !defined(MBEDTLS_SSL_OUT_CONTENT_LEN)
244 #define MBEDTLS_SSL_OUT_CONTENT_LEN MBEDTLS_SSL_MAX_CONTENT_LEN
245 #endif
246 
247 /*
248  * Maximum number of heap-allocated bytes for the purpose of
249  * DTLS handshake message reassembly and future message buffering.
250  */
251 #if !defined(MBEDTLS_SSL_DTLS_MAX_BUFFERING)
252 #define MBEDTLS_SSL_DTLS_MAX_BUFFERING 32768
253 #endif
254 
255 /* \} name SECTION: Module settings */
256 
257 /*
258  * Length of the verify data for secure renegotiation
259  */
260 #if defined(MBEDTLS_SSL_PROTO_SSL3)
261 #define MBEDTLS_SSL_VERIFY_DATA_MAX_LEN 36
262 #else
263 #define MBEDTLS_SSL_VERIFY_DATA_MAX_LEN 12
264 #endif
265 
266 /*
267  * Signaling ciphersuite values (SCSV)
268  */
269 #define MBEDTLS_SSL_EMPTY_RENEGOTIATION_INFO 0xFF
270 #define MBEDTLS_SSL_FALLBACK_SCSV_VALUE 0x5600
272 /*
273  * Supported Signature and Hash algorithms (For TLS 1.2)
274  * RFC 5246 section 7.4.1.4.1
275  */
276 #define MBEDTLS_SSL_HASH_NONE 0
277 #define MBEDTLS_SSL_HASH_MD5 1
278 #define MBEDTLS_SSL_HASH_SHA1 2
279 #define MBEDTLS_SSL_HASH_SHA224 3
280 #define MBEDTLS_SSL_HASH_SHA256 4
281 #define MBEDTLS_SSL_HASH_SHA384 5
282 #define MBEDTLS_SSL_HASH_SHA512 6
283 
284 #define MBEDTLS_SSL_SIG_ANON 0
285 #define MBEDTLS_SSL_SIG_RSA 1
286 #define MBEDTLS_SSL_SIG_ECDSA 3
287 
288 /*
289  * Client Certificate Types
290  * RFC 5246 section 7.4.4 plus RFC 4492 section 5.5
291  */
292 #define MBEDTLS_SSL_CERT_TYPE_RSA_SIGN 1
293 #define MBEDTLS_SSL_CERT_TYPE_ECDSA_SIGN 64
294 
295 /*
296  * Message, alert and handshake types
297  */
298 #define MBEDTLS_SSL_MSG_CHANGE_CIPHER_SPEC 20
299 #define MBEDTLS_SSL_MSG_ALERT 21
300 #define MBEDTLS_SSL_MSG_HANDSHAKE 22
301 #define MBEDTLS_SSL_MSG_APPLICATION_DATA 23
302 
303 #define MBEDTLS_SSL_ALERT_LEVEL_WARNING 1
304 #define MBEDTLS_SSL_ALERT_LEVEL_FATAL 2
305 
306 #define MBEDTLS_SSL_ALERT_MSG_CLOSE_NOTIFY 0 /* 0x00 */
307 #define MBEDTLS_SSL_ALERT_MSG_UNEXPECTED_MESSAGE 10 /* 0x0A */
308 #define MBEDTLS_SSL_ALERT_MSG_BAD_RECORD_MAC 20 /* 0x14 */
309 #define MBEDTLS_SSL_ALERT_MSG_DECRYPTION_FAILED 21 /* 0x15 */
310 #define MBEDTLS_SSL_ALERT_MSG_RECORD_OVERFLOW 22 /* 0x16 */
311 #define MBEDTLS_SSL_ALERT_MSG_DECOMPRESSION_FAILURE 30 /* 0x1E */
312 #define MBEDTLS_SSL_ALERT_MSG_HANDSHAKE_FAILURE 40 /* 0x28 */
313 #define MBEDTLS_SSL_ALERT_MSG_NO_CERT 41 /* 0x29 */
314 #define MBEDTLS_SSL_ALERT_MSG_BAD_CERT 42 /* 0x2A */
315 #define MBEDTLS_SSL_ALERT_MSG_UNSUPPORTED_CERT 43 /* 0x2B */
316 #define MBEDTLS_SSL_ALERT_MSG_CERT_REVOKED 44 /* 0x2C */
317 #define MBEDTLS_SSL_ALERT_MSG_CERT_EXPIRED 45 /* 0x2D */
318 #define MBEDTLS_SSL_ALERT_MSG_CERT_UNKNOWN 46 /* 0x2E */
319 #define MBEDTLS_SSL_ALERT_MSG_ILLEGAL_PARAMETER 47 /* 0x2F */
320 #define MBEDTLS_SSL_ALERT_MSG_UNKNOWN_CA 48 /* 0x30 */
321 #define MBEDTLS_SSL_ALERT_MSG_ACCESS_DENIED 49 /* 0x31 */
322 #define MBEDTLS_SSL_ALERT_MSG_DECODE_ERROR 50 /* 0x32 */
323 #define MBEDTLS_SSL_ALERT_MSG_DECRYPT_ERROR 51 /* 0x33 */
324 #define MBEDTLS_SSL_ALERT_MSG_EXPORT_RESTRICTION 60 /* 0x3C */
325 #define MBEDTLS_SSL_ALERT_MSG_PROTOCOL_VERSION 70 /* 0x46 */
326 #define MBEDTLS_SSL_ALERT_MSG_INSUFFICIENT_SECURITY 71 /* 0x47 */
327 #define MBEDTLS_SSL_ALERT_MSG_INTERNAL_ERROR 80 /* 0x50 */
328 #define MBEDTLS_SSL_ALERT_MSG_INAPROPRIATE_FALLBACK 86 /* 0x56 */
329 #define MBEDTLS_SSL_ALERT_MSG_USER_CANCELED 90 /* 0x5A */
330 #define MBEDTLS_SSL_ALERT_MSG_NO_RENEGOTIATION 100 /* 0x64 */
331 #define MBEDTLS_SSL_ALERT_MSG_UNSUPPORTED_EXT 110 /* 0x6E */
332 #define MBEDTLS_SSL_ALERT_MSG_UNRECOGNIZED_NAME 112 /* 0x70 */
333 #define MBEDTLS_SSL_ALERT_MSG_UNKNOWN_PSK_IDENTITY 115 /* 0x73 */
334 #define MBEDTLS_SSL_ALERT_MSG_NO_APPLICATION_PROTOCOL 120 /* 0x78 */
335 
336 #define MBEDTLS_SSL_HS_HELLO_REQUEST 0
337 #define MBEDTLS_SSL_HS_CLIENT_HELLO 1
338 #define MBEDTLS_SSL_HS_SERVER_HELLO 2
339 #define MBEDTLS_SSL_HS_HELLO_VERIFY_REQUEST 3
340 #define MBEDTLS_SSL_HS_NEW_SESSION_TICKET 4
341 #define MBEDTLS_SSL_HS_CERTIFICATE 11
342 #define MBEDTLS_SSL_HS_SERVER_KEY_EXCHANGE 12
343 #define MBEDTLS_SSL_HS_CERTIFICATE_REQUEST 13
344 #define MBEDTLS_SSL_HS_SERVER_HELLO_DONE 14
345 #define MBEDTLS_SSL_HS_CERTIFICATE_VERIFY 15
346 #define MBEDTLS_SSL_HS_CLIENT_KEY_EXCHANGE 16
347 #define MBEDTLS_SSL_HS_FINISHED 20
348 
349 /*
350  * TLS extensions
351  */
352 #define MBEDTLS_TLS_EXT_SERVERNAME 0
353 #define MBEDTLS_TLS_EXT_SERVERNAME_HOSTNAME 0
354 
355 #define MBEDTLS_TLS_EXT_MAX_FRAGMENT_LENGTH 1
356 
357 #define MBEDTLS_TLS_EXT_TRUNCATED_HMAC 4
358 
359 #define MBEDTLS_TLS_EXT_SUPPORTED_ELLIPTIC_CURVES 10
360 #define MBEDTLS_TLS_EXT_SUPPORTED_POINT_FORMATS 11
361 
362 #define MBEDTLS_TLS_EXT_SIG_ALG 13
363 
364 #define MBEDTLS_TLS_EXT_ALPN 16
365 
366 #define MBEDTLS_TLS_EXT_ENCRYPT_THEN_MAC 22 /* 0x16 */
367 #define MBEDTLS_TLS_EXT_EXTENDED_MASTER_SECRET 0x0017 /* 23 */
368 
369 #define MBEDTLS_TLS_EXT_SESSION_TICKET 35
370 
371 #define MBEDTLS_TLS_EXT_ECJPAKE_KKPP 256 /* experimental */
372 
373 #define MBEDTLS_TLS_EXT_RENEGOTIATION_INFO 0xFF01
374 
375 /*
376  * Size defines
377  */
378 #if !defined(MBEDTLS_PSK_MAX_LEN)
379 #define MBEDTLS_PSK_MAX_LEN 32 /* 256 bits */
380 #endif
381 
382 /* Dummy type used only for its size */
384 {
385 #if defined(MBEDTLS_KEY_EXCHANGE_RSA_ENABLED)
386  unsigned char _pms_rsa[48]; /* RFC 5246 8.1.1 */
387 #endif
388 #if defined(MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED)
389  unsigned char _pms_dhm[MBEDTLS_MPI_MAX_SIZE]; /* RFC 5246 8.1.2 */
390 #endif
391 #if defined(MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED) || \
392  defined(MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) || \
393  defined(MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED) || \
394  defined(MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED)
395  unsigned char _pms_ecdh[MBEDTLS_ECP_MAX_BYTES]; /* RFC 4492 5.10 */
396 #endif
397 #if defined(MBEDTLS_KEY_EXCHANGE_PSK_ENABLED)
398  unsigned char _pms_psk[4 + 2 * MBEDTLS_PSK_MAX_LEN]; /* RFC 4279 2 */
399 #endif
400 #if defined(MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED)
401  unsigned char _pms_dhe_psk[4 + MBEDTLS_MPI_MAX_SIZE
402  + MBEDTLS_PSK_MAX_LEN]; /* RFC 4279 3 */
403 #endif
404 #if defined(MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED)
405  unsigned char _pms_rsa_psk[52 + MBEDTLS_PSK_MAX_LEN]; /* RFC 4279 4 */
406 #endif
407 #if defined(MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED)
408  unsigned char _pms_ecdhe_psk[4 + MBEDTLS_ECP_MAX_BYTES
409  + MBEDTLS_PSK_MAX_LEN]; /* RFC 5489 2 */
410 #endif
411 #if defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED)
412  unsigned char _pms_ecjpake[32]; /* Thread spec: SHA-256 output */
413 #endif
414 };
415 
416 #define MBEDTLS_PREMASTER_SIZE sizeof( union mbedtls_ssl_premaster_secret )
417 
418 #ifdef __cplusplus
419 extern "C" {
420 #endif
421 
422 /*
423  * SSL state machine
424  */
425 typedef enum
426 {
446 }
448 
466 typedef int mbedtls_ssl_send_t( void *ctx,
467  const unsigned char *buf,
468  size_t len );
469 
489 typedef int mbedtls_ssl_recv_t( void *ctx,
490  unsigned char *buf,
491  size_t len );
492 
515 typedef int mbedtls_ssl_recv_timeout_t( void *ctx,
516  unsigned char *buf,
517  size_t len,
518  uint32_t timeout );
541 typedef void mbedtls_ssl_set_timer_t( void * ctx,
542  uint32_t int_ms,
543  uint32_t fin_ms );
544 
556 typedef int mbedtls_ssl_get_timer_t( void * ctx );
557 
558 /* Defined below */
562 
563 /* Defined in ssl_internal.h */
567 #if defined(MBEDTLS_X509_CRT_PARSE_C)
569 #endif
570 #if defined(MBEDTLS_SSL_PROTO_DTLS)
572 #endif
573 
574 #if defined(MBEDTLS_SSL_ASYNC_PRIVATE)
575 #if defined(MBEDTLS_X509_CRT_PARSE_C)
576 
647 typedef int mbedtls_ssl_async_sign_t( mbedtls_ssl_context *ssl,
648  mbedtls_x509_crt *cert,
649  mbedtls_md_type_t md_alg,
650  const unsigned char *hash,
651  size_t hash_len );
652 
713 typedef int mbedtls_ssl_async_decrypt_t( mbedtls_ssl_context *ssl,
714  mbedtls_x509_crt *cert,
715  const unsigned char *input,
716  size_t input_len );
717 #endif /* MBEDTLS_X509_CRT_PARSE_C */
718 
761 typedef int mbedtls_ssl_async_resume_t( mbedtls_ssl_context *ssl,
762  unsigned char *output,
763  size_t *output_len,
764  size_t output_size );
765 
783 typedef void mbedtls_ssl_async_cancel_t( mbedtls_ssl_context *ssl );
784 #endif /* MBEDTLS_SSL_ASYNC_PRIVATE */
785 
786 /*
787  * This structure is used for storing current session data.
788  */
790 {
791 #if defined(MBEDTLS_HAVE_TIME)
793 #endif
796  size_t id_len;
797  unsigned char id[32];
798  unsigned char master[48];
800 #if defined(MBEDTLS_X509_CRT_PARSE_C)
802 #endif /* MBEDTLS_X509_CRT_PARSE_C */
803  uint32_t verify_result;
805 #if defined(MBEDTLS_SSL_SESSION_TICKETS) && defined(MBEDTLS_SSL_CLI_C)
806  unsigned char *ticket;
807  size_t ticket_len;
808  uint32_t ticket_lifetime;
809 #endif /* MBEDTLS_SSL_SESSION_TICKETS && MBEDTLS_SSL_CLI_C */
810 
811 #if defined(MBEDTLS_SSL_MAX_FRAGMENT_LENGTH)
812  unsigned char mfl_code;
813 #endif /* MBEDTLS_SSL_MAX_FRAGMENT_LENGTH */
814 
815 #if defined(MBEDTLS_SSL_TRUNCATED_HMAC)
817 #endif /* MBEDTLS_SSL_TRUNCATED_HMAC */
818 
819 #if defined(MBEDTLS_SSL_ENCRYPT_THEN_MAC)
821 #endif
822 };
823 
828 {
829  /* Group items by size (largest first) to minimize padding overhead */
830 
831  /*
832  * Pointers
833  */
834 
835  const int *ciphersuite_list[4];
838  void (*f_dbg)(void *, int, const char *, int, const char *);
839  void *p_dbg;
842  int (*f_rng)(void *, unsigned char *, size_t);
843  void *p_rng;
846  int (*f_get_cache)(void *, mbedtls_ssl_session *);
848  int (*f_set_cache)(void *, const mbedtls_ssl_session *);
849  void *p_cache;
851 #if defined(MBEDTLS_SSL_SERVER_NAME_INDICATION)
852 
853  int (*f_sni)(void *, mbedtls_ssl_context *, const unsigned char *, size_t);
854  void *p_sni;
855 #endif
856 
857 #if defined(MBEDTLS_X509_CRT_PARSE_C)
858 
859  int (*f_vrfy)(void *, mbedtls_x509_crt *, int, uint32_t *);
860  void *p_vrfy;
861 #endif
862 
863 #if defined(MBEDTLS_KEY_EXCHANGE__SOME__PSK_ENABLED)
864 
865  int (*f_psk)(void *, mbedtls_ssl_context *, const unsigned char *, size_t);
866  void *p_psk;
867 #endif
868 
869 #if defined(MBEDTLS_SSL_DTLS_HELLO_VERIFY) && defined(MBEDTLS_SSL_SRV_C)
870 
871  int (*f_cookie_write)( void *, unsigned char **, unsigned char *,
872  const unsigned char *, size_t );
874  int (*f_cookie_check)( void *, const unsigned char *, size_t,
875  const unsigned char *, size_t );
876  void *p_cookie;
877 #endif
878 
879 #if defined(MBEDTLS_SSL_SESSION_TICKETS) && defined(MBEDTLS_SSL_SRV_C)
880 
881  int (*f_ticket_write)( void *, const mbedtls_ssl_session *,
882  unsigned char *, const unsigned char *, size_t *, uint32_t * );
884  int (*f_ticket_parse)( void *, mbedtls_ssl_session *, unsigned char *, size_t);
885  void *p_ticket;
886 #endif /* MBEDTLS_SSL_SESSION_TICKETS && MBEDTLS_SSL_SRV_C */
887 
888 #if defined(MBEDTLS_SSL_EXPORT_KEYS)
889 
890  int (*f_export_keys)( void *, const unsigned char *,
891  const unsigned char *, size_t, size_t, size_t );
893 #endif
894 
895 #if defined(MBEDTLS_X509_CRT_PARSE_C)
898  mbedtls_x509_crt *ca_chain;
900 #endif /* MBEDTLS_X509_CRT_PARSE_C */
901 
902 #if defined(MBEDTLS_SSL_ASYNC_PRIVATE)
903 #if defined(MBEDTLS_X509_CRT_PARSE_C)
904  mbedtls_ssl_async_sign_t *f_async_sign_start;
905  mbedtls_ssl_async_decrypt_t *f_async_decrypt_start;
906 #endif /* MBEDTLS_X509_CRT_PARSE_C */
907  mbedtls_ssl_async_resume_t *f_async_resume;
908  mbedtls_ssl_async_cancel_t *f_async_cancel;
909  void *p_async_config_data;
910 #endif /* MBEDTLS_SSL_ASYNC_PRIVATE */
911 
912 #if defined(MBEDTLS_KEY_EXCHANGE__WITH_CERT__ENABLED)
913  const int *sig_hashes;
914 #endif
915 
916 #if defined(MBEDTLS_ECP_C)
918 #endif
919 
920 #if defined(MBEDTLS_DHM_C)
923 #endif
924 
925 #if defined(MBEDTLS_KEY_EXCHANGE__SOME__PSK_ENABLED)
926  unsigned char *psk;
929  size_t psk_len;
932  unsigned char *psk_identity;
938 #endif
939 
940 #if defined(MBEDTLS_SSL_ALPN)
941  const char **alpn_list;
942 #endif
943 
944  /*
945  * Numerical settings (int then char)
946  */
947 
948  uint32_t read_timeout;
950 #if defined(MBEDTLS_SSL_PROTO_DTLS)
951  uint32_t hs_timeout_min;
953  uint32_t hs_timeout_max;
955 #endif
956 
957 #if defined(MBEDTLS_SSL_RENEGOTIATION)
959  unsigned char renego_period[8];
961 #endif
962 
963 #if defined(MBEDTLS_SSL_DTLS_BADMAC_LIMIT)
964  unsigned int badmac_limit;
965 #endif
966 
967 #if defined(MBEDTLS_DHM_C) && defined(MBEDTLS_SSL_CLI_C)
968  unsigned int dhm_min_bitlen;
969 #endif
970 
971  unsigned char max_major_ver;
972  unsigned char max_minor_ver;
973  unsigned char min_major_ver;
974  unsigned char min_minor_ver;
976  /*
977  * Flags (bitfields)
978  */
979 
980  unsigned int endpoint : 1;
981  unsigned int transport : 1;
982  unsigned int authmode : 2;
983  /* needed even with renego disabled for LEGACY_BREAK_HANDSHAKE */
984  unsigned int allow_legacy_renegotiation : 2 ;
985 #if defined(MBEDTLS_ARC4_C)
986  unsigned int arc4_disabled : 1;
987 #endif
988 #if defined(MBEDTLS_SSL_MAX_FRAGMENT_LENGTH)
989  unsigned int mfl_code : 3;
990 #endif
991 #if defined(MBEDTLS_SSL_ENCRYPT_THEN_MAC)
992  unsigned int encrypt_then_mac : 1 ;
993 #endif
994 #if defined(MBEDTLS_SSL_EXTENDED_MASTER_SECRET)
995  unsigned int extended_ms : 1;
996 #endif
997 #if defined(MBEDTLS_SSL_DTLS_ANTI_REPLAY)
998  unsigned int anti_replay : 1;
999 #endif
1000 #if defined(MBEDTLS_SSL_CBC_RECORD_SPLITTING)
1001  unsigned int cbc_record_splitting : 1;
1002 #endif
1003 #if defined(MBEDTLS_SSL_RENEGOTIATION)
1004  unsigned int disable_renegotiation : 1;
1005 #endif
1006 #if defined(MBEDTLS_SSL_TRUNCATED_HMAC)
1007  unsigned int trunc_hmac : 1;
1008 #endif
1009 #if defined(MBEDTLS_SSL_SESSION_TICKETS)
1010  unsigned int session_tickets : 1;
1011 #endif
1012 #if defined(MBEDTLS_SSL_FALLBACK_SCSV) && defined(MBEDTLS_SSL_CLI_C)
1013  unsigned int fallback : 1;
1014 #endif
1015 #if defined(MBEDTLS_SSL_SRV_C)
1016  unsigned int cert_req_ca_list : 1;
1018 #endif
1019 };
1020 
1021 
1023 {
1026  /*
1027  * Miscellaneous
1028  */
1029  int state;
1030 #if defined(MBEDTLS_SSL_RENEGOTIATION)
1035 #endif /* MBEDTLS_SSL_RENEGOTIATION */
1036 
1040 #if defined(MBEDTLS_SSL_DTLS_BADMAC_LIMIT)
1041  unsigned badmac_seen;
1042 #endif /* MBEDTLS_SSL_DTLS_BADMAC_LIMIT */
1043 
1049  void *p_bio;
1051  /*
1052  * Session layer
1053  */
1062  /*
1063  * Record layer transformations
1064  */
1070  /*
1071  * Timers
1072  */
1073  void *p_timer;
1078  /*
1079  * Record layer (incoming data)
1080  */
1081  unsigned char *in_buf;
1082  unsigned char *in_ctr;
1085  unsigned char *in_hdr;
1086  unsigned char *in_len;
1087  unsigned char *in_iv;
1088  unsigned char *in_msg;
1089  unsigned char *in_offt;
1092  size_t in_msglen;
1093  size_t in_left;
1094 #if defined(MBEDTLS_SSL_PROTO_DTLS)
1095  uint16_t in_epoch;
1098 #endif /* MBEDTLS_SSL_PROTO_DTLS */
1099 #if defined(MBEDTLS_SSL_DTLS_ANTI_REPLAY)
1100  uint64_t in_window_top;
1101  uint64_t in_window;
1102 #endif /* MBEDTLS_SSL_DTLS_ANTI_REPLAY */
1103 
1104  size_t in_hslen;
1106  int nb_zero;
1111 #if defined(MBEDTLS_SSL_PROTO_DTLS)
1114 #endif /* MBEDTLS_SSL_PROTO_DTLS */
1115 
1116  /*
1117  * Record layer (outgoing data)
1118  */
1119  unsigned char *out_buf;
1120  unsigned char *out_ctr;
1121  unsigned char *out_hdr;
1122  unsigned char *out_len;
1123  unsigned char *out_iv;
1124  unsigned char *out_msg;
1127  size_t out_msglen;
1128  size_t out_left;
1130  unsigned char cur_out_ctr[8];
1132 #if defined(MBEDTLS_SSL_PROTO_DTLS)
1133  uint16_t mtu;
1134 #endif /* MBEDTLS_SSL_PROTO_DTLS */
1135 
1136 #if defined(MBEDTLS_ZLIB_SUPPORT)
1137  unsigned char *compress_buf;
1138 #endif /* MBEDTLS_ZLIB_SUPPORT */
1139 #if defined(MBEDTLS_SSL_CBC_RECORD_SPLITTING)
1140  signed char split_done;
1141 #endif /* MBEDTLS_SSL_CBC_RECORD_SPLITTING */
1142 
1143  /*
1144  * PKI layer
1145  */
1148  /*
1149  * User settings
1150  */
1151 #if defined(MBEDTLS_X509_CRT_PARSE_C)
1152  char *hostname;
1154 #endif /* MBEDTLS_X509_CRT_PARSE_C */
1155 
1156 #if defined(MBEDTLS_SSL_ALPN)
1157  const char *alpn_chosen;
1158 #endif /* MBEDTLS_SSL_ALPN */
1159 
1160  /*
1161  * Information for DTLS hello verify
1162  */
1163 #if defined(MBEDTLS_SSL_DTLS_HELLO_VERIFY) && defined(MBEDTLS_SSL_SRV_C)
1164  unsigned char *cli_id;
1165  size_t cli_id_len;
1166 #endif /* MBEDTLS_SSL_DTLS_HELLO_VERIFY && MBEDTLS_SSL_SRV_C */
1167 
1168  /*
1169  * Secure renegotiation
1170  */
1171  /* needed to know when to send extension on server */
1174 #if defined(MBEDTLS_SSL_RENEGOTIATION)
1178 #endif /* MBEDTLS_SSL_RENEGOTIATION */
1179 };
1180 
1181 #if defined(MBEDTLS_SSL_HW_RECORD_ACCEL)
1182 
1183 #define MBEDTLS_SSL_CHANNEL_OUTBOUND 0
1184 #define MBEDTLS_SSL_CHANNEL_INBOUND 1
1185 
1186 extern int (*mbedtls_ssl_hw_record_init)(mbedtls_ssl_context *ssl,
1187  const unsigned char *key_enc, const unsigned char *key_dec,
1188  size_t keylen,
1189  const unsigned char *iv_enc, const unsigned char *iv_dec,
1190  size_t ivlen,
1191  const unsigned char *mac_enc, const unsigned char *mac_dec,
1192  size_t maclen);
1193 extern int (*mbedtls_ssl_hw_record_activate)(mbedtls_ssl_context *ssl, int direction);
1194 extern int (*mbedtls_ssl_hw_record_reset)(mbedtls_ssl_context *ssl);
1195 extern int (*mbedtls_ssl_hw_record_write)(mbedtls_ssl_context *ssl);
1196 extern int (*mbedtls_ssl_hw_record_read)(mbedtls_ssl_context *ssl);
1197 extern int (*mbedtls_ssl_hw_record_finish)(mbedtls_ssl_context *ssl);
1198 #endif /* MBEDTLS_SSL_HW_RECORD_ACCEL */
1199 
1208 const char *mbedtls_ssl_get_ciphersuite_name( const int ciphersuite_id );
1209 
1218 int mbedtls_ssl_get_ciphersuite_id( const char *ciphersuite_name );
1219 
1228 
1250  const mbedtls_ssl_config *conf );
1251 
1263 
1270 void mbedtls_ssl_conf_endpoint( mbedtls_ssl_config *conf, int endpoint );
1271 
1286 void mbedtls_ssl_conf_transport( mbedtls_ssl_config *conf, int transport );
1287 
1314 void mbedtls_ssl_conf_authmode( mbedtls_ssl_config *conf, int authmode );
1315 
1316 #if defined(MBEDTLS_X509_CRT_PARSE_C)
1317 
1329  int (*f_vrfy)(void *, mbedtls_x509_crt *, int, uint32_t *),
1330  void *p_vrfy );
1331 #endif /* MBEDTLS_X509_CRT_PARSE_C */
1332 
1341  int (*f_rng)(void *, unsigned char *, size_t),
1342  void *p_rng );
1343 
1359  void (*f_dbg)(void *, int, const char *, int, const char *),
1360  void *p_dbg );
1361 
1393  void *p_bio,
1394  mbedtls_ssl_send_t *f_send,
1395  mbedtls_ssl_recv_t *f_recv,
1396  mbedtls_ssl_recv_timeout_t *f_recv_timeout );
1397 
1398 #if defined(MBEDTLS_SSL_PROTO_DTLS)
1399 
1441 void mbedtls_ssl_set_mtu( mbedtls_ssl_context *ssl, uint16_t mtu );
1442 #endif /* MBEDTLS_SSL_PROTO_DTLS */
1443 
1460 void mbedtls_ssl_conf_read_timeout( mbedtls_ssl_config *conf, uint32_t timeout );
1461 
1483  void *p_timer,
1484  mbedtls_ssl_set_timer_t *f_set_timer,
1485  mbedtls_ssl_get_timer_t *f_get_timer );
1486 
1506 typedef int mbedtls_ssl_ticket_write_t( void *p_ticket,
1507  const mbedtls_ssl_session *session,
1508  unsigned char *start,
1509  const unsigned char *end,
1510  size_t *tlen,
1511  uint32_t *lifetime );
1512 
1513 #if defined(MBEDTLS_SSL_EXPORT_KEYS)
1514 
1534 typedef int mbedtls_ssl_export_keys_t( void *p_expkey,
1535  const unsigned char *ms,
1536  const unsigned char *kb,
1537  size_t maclen,
1538  size_t keylen,
1539  size_t ivlen );
1540 #endif /* MBEDTLS_SSL_EXPORT_KEYS */
1541 
1565 typedef int mbedtls_ssl_ticket_parse_t( void *p_ticket,
1566  mbedtls_ssl_session *session,
1567  unsigned char *buf,
1568  size_t len );
1569 
1570 #if defined(MBEDTLS_SSL_SESSION_TICKETS) && defined(MBEDTLS_SSL_SRV_C)
1571 
1586  mbedtls_ssl_ticket_write_t *f_ticket_write,
1587  mbedtls_ssl_ticket_parse_t *f_ticket_parse,
1588  void *p_ticket );
1589 #endif /* MBEDTLS_SSL_SESSION_TICKETS && MBEDTLS_SSL_SRV_C */
1590 
1591 #if defined(MBEDTLS_SSL_EXPORT_KEYS)
1592 
1603  mbedtls_ssl_export_keys_t *f_export_keys,
1604  void *p_export_keys );
1605 #endif /* MBEDTLS_SSL_EXPORT_KEYS */
1606 
1607 #if defined(MBEDTLS_SSL_ASYNC_PRIVATE)
1608 
1638 void mbedtls_ssl_conf_async_private_cb( mbedtls_ssl_config *conf,
1639  mbedtls_ssl_async_sign_t *f_async_sign,
1640  mbedtls_ssl_async_decrypt_t *f_async_decrypt,
1641  mbedtls_ssl_async_resume_t *f_async_resume,
1642  mbedtls_ssl_async_cancel_t *f_async_cancel,
1643  void *config_data );
1644 
1653 void *mbedtls_ssl_conf_get_async_config_data( const mbedtls_ssl_config *conf );
1654 
1669 void *mbedtls_ssl_get_async_operation_data( const mbedtls_ssl_context *ssl );
1670 
1682 void mbedtls_ssl_set_async_operation_data( mbedtls_ssl_context *ssl,
1683  void *ctx );
1684 #endif /* MBEDTLS_SSL_ASYNC_PRIVATE */
1685 
1700 typedef int mbedtls_ssl_cookie_write_t( void *ctx,
1701  unsigned char **p, unsigned char *end,
1702  const unsigned char *info, size_t ilen );
1703 
1717 typedef int mbedtls_ssl_cookie_check_t( void *ctx,
1718  const unsigned char *cookie, size_t clen,
1719  const unsigned char *info, size_t ilen );
1720 
1721 #if defined(MBEDTLS_SSL_DTLS_HELLO_VERIFY) && defined(MBEDTLS_SSL_SRV_C)
1722 
1751  mbedtls_ssl_cookie_write_t *f_cookie_write,
1752  mbedtls_ssl_cookie_check_t *f_cookie_check,
1753  void *p_cookie );
1754 
1775  const unsigned char *info,
1776  size_t ilen );
1777 
1778 #endif /* MBEDTLS_SSL_DTLS_HELLO_VERIFY && MBEDTLS_SSL_SRV_C */
1779 
1780 #if defined(MBEDTLS_SSL_DTLS_ANTI_REPLAY)
1781 
1796 void mbedtls_ssl_conf_dtls_anti_replay( mbedtls_ssl_config *conf, char mode );
1797 #endif /* MBEDTLS_SSL_DTLS_ANTI_REPLAY */
1798 
1799 #if defined(MBEDTLS_SSL_DTLS_BADMAC_LIMIT)
1800 
1823 void mbedtls_ssl_conf_dtls_badmac_limit( mbedtls_ssl_config *conf, unsigned limit );
1824 #endif /* MBEDTLS_SSL_DTLS_BADMAC_LIMIT */
1825 
1826 #if defined(MBEDTLS_SSL_PROTO_DTLS)
1827 
1857  unsigned allow_packing );
1858 
1890 void mbedtls_ssl_conf_handshake_timeout( mbedtls_ssl_config *conf, uint32_t min, uint32_t max );
1891 #endif /* MBEDTLS_SSL_PROTO_DTLS */
1892 
1893 #if defined(MBEDTLS_SSL_SRV_C)
1894 
1932  void *p_cache,
1933  int (*f_get_cache)(void *, mbedtls_ssl_session *),
1934  int (*f_set_cache)(void *, const mbedtls_ssl_session *) );
1935 #endif /* MBEDTLS_SSL_SRV_C */
1936 
1937 #if defined(MBEDTLS_SSL_CLI_C)
1938 
1953 #endif /* MBEDTLS_SSL_CLI_C */
1954 
1971  const int *ciphersuites );
1972 
1993  const int *ciphersuites,
1994  int major, int minor );
1995 
1996 #if defined(MBEDTLS_X509_CRT_PARSE_C)
1997 
2008  const mbedtls_x509_crt_profile *profile );
2009 
2022  mbedtls_x509_crt *ca_chain,
2023  mbedtls_x509_crl *ca_crl );
2024 
2062  mbedtls_x509_crt *own_cert,
2063  mbedtls_pk_context *pk_key );
2064 #endif /* MBEDTLS_X509_CRT_PARSE_C */
2065 
2066 #if defined(MBEDTLS_KEY_EXCHANGE__SOME__PSK_ENABLED)
2067 
2088  const unsigned char *psk, size_t psk_len,
2089  const unsigned char *psk_identity, size_t psk_identity_len );
2090 
2091 
2105  const unsigned char *psk, size_t psk_len );
2106 
2132  int (*f_psk)(void *, mbedtls_ssl_context *, const unsigned char *,
2133  size_t),
2134  void *p_psk );
2135 #endif /* MBEDTLS_KEY_EXCHANGE__SOME__PSK_ENABLED */
2136 
2137 #if defined(MBEDTLS_DHM_C) && defined(MBEDTLS_SSL_SRV_C)
2138 
2139 #if !defined(MBEDTLS_DEPRECATED_REMOVED)
2140 
2141 #if defined(MBEDTLS_DEPRECATED_WARNING)
2142 #define MBEDTLS_DEPRECATED __attribute__((deprecated))
2143 #else
2144 #define MBEDTLS_DEPRECATED
2145 #endif
2146 
2161  const char *dhm_P,
2162  const char *dhm_G );
2163 
2164 #endif /* MBEDTLS_DEPRECATED_REMOVED */
2165 
2180  const unsigned char *dhm_P, size_t P_len,
2181  const unsigned char *dhm_G, size_t G_len );
2182 
2193 #endif /* MBEDTLS_DHM_C && defined(MBEDTLS_SSL_SRV_C) */
2194 
2195 #if defined(MBEDTLS_DHM_C) && defined(MBEDTLS_SSL_CLI_C)
2196 
2205  unsigned int bitlen );
2206 #endif /* MBEDTLS_DHM_C && MBEDTLS_SSL_CLI_C */
2207 
2208 #if defined(MBEDTLS_ECP_C)
2209 
2237  const mbedtls_ecp_group_id *curves );
2238 #endif /* MBEDTLS_ECP_C */
2239 
2240 #if defined(MBEDTLS_KEY_EXCHANGE__WITH_CERT__ENABLED)
2241 
2260  const int *hashes );
2261 #endif /* MBEDTLS_KEY_EXCHANGE__WITH_CERT__ENABLED */
2262 
2263 #if defined(MBEDTLS_X509_CRT_PARSE_C)
2264 
2282 int mbedtls_ssl_set_hostname( mbedtls_ssl_context *ssl, const char *hostname );
2283 #endif /* MBEDTLS_X509_CRT_PARSE_C */
2284 
2285 #if defined(MBEDTLS_SSL_SERVER_NAME_INDICATION)
2286 
2299  mbedtls_x509_crt *own_cert,
2300  mbedtls_pk_context *pk_key );
2301 
2314  mbedtls_x509_crt *ca_chain,
2315  mbedtls_x509_crl *ca_crl );
2316 
2328  int authmode );
2329 
2354  int (*f_sni)(void *, mbedtls_ssl_context *, const unsigned char *,
2355  size_t),
2356  void *p_sni );
2357 #endif /* MBEDTLS_SSL_SERVER_NAME_INDICATION */
2358 
2359 #if defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED)
2360 
2377 int mbedtls_ssl_set_hs_ecjpake_password( mbedtls_ssl_context *ssl,
2378  const unsigned char *pw,
2379  size_t pw_len );
2380 #endif /*MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED */
2381 
2382 #if defined(MBEDTLS_SSL_ALPN)
2383 
2395 int mbedtls_ssl_conf_alpn_protocols( mbedtls_ssl_config *conf, const char **protos );
2396 
2406 const char *mbedtls_ssl_get_alpn_protocol( const mbedtls_ssl_context *ssl );
2407 #endif /* MBEDTLS_SSL_ALPN */
2408 
2425 void mbedtls_ssl_conf_max_version( mbedtls_ssl_config *conf, int major, int minor );
2426 
2445 void mbedtls_ssl_conf_min_version( mbedtls_ssl_config *conf, int major, int minor );
2446 
2447 #if defined(MBEDTLS_SSL_FALLBACK_SCSV) && defined(MBEDTLS_SSL_CLI_C)
2448 
2467 void mbedtls_ssl_conf_fallback( mbedtls_ssl_config *conf, char fallback );
2468 #endif /* MBEDTLS_SSL_FALLBACK_SCSV && MBEDTLS_SSL_CLI_C */
2469 
2470 #if defined(MBEDTLS_SSL_ENCRYPT_THEN_MAC)
2471 
2483 #endif /* MBEDTLS_SSL_ENCRYPT_THEN_MAC */
2484 
2485 #if defined(MBEDTLS_SSL_EXTENDED_MASTER_SECRET)
2486 
2498 #endif /* MBEDTLS_SSL_EXTENDED_MASTER_SECRET */
2499 
2500 #if defined(MBEDTLS_ARC4_C)
2501 
2516 void mbedtls_ssl_conf_arc4_support( mbedtls_ssl_config *conf, char arc4 );
2517 #endif /* MBEDTLS_ARC4_C */
2518 
2519 #if defined(MBEDTLS_SSL_SRV_C)
2520 
2530  char cert_req_ca_list );
2531 #endif /* MBEDTLS_SSL_SRV_C */
2532 
2533 #if defined(MBEDTLS_SSL_MAX_FRAGMENT_LENGTH)
2534 
2562 int mbedtls_ssl_conf_max_frag_len( mbedtls_ssl_config *conf, unsigned char mfl_code );
2563 #endif /* MBEDTLS_SSL_MAX_FRAGMENT_LENGTH */
2564 
2565 #if defined(MBEDTLS_SSL_TRUNCATED_HMAC)
2566 
2574 void mbedtls_ssl_conf_truncated_hmac( mbedtls_ssl_config *conf, int truncate );
2575 #endif /* MBEDTLS_SSL_TRUNCATED_HMAC */
2576 
2577 #if defined(MBEDTLS_SSL_CBC_RECORD_SPLITTING)
2578 
2590 #endif /* MBEDTLS_SSL_CBC_RECORD_SPLITTING */
2591 
2592 #if defined(MBEDTLS_SSL_SESSION_TICKETS) && defined(MBEDTLS_SSL_CLI_C)
2593 
2603 void mbedtls_ssl_conf_session_tickets( mbedtls_ssl_config *conf, int use_tickets );
2604 #endif /* MBEDTLS_SSL_SESSION_TICKETS && MBEDTLS_SSL_CLI_C */
2605 
2606 #if defined(MBEDTLS_SSL_RENEGOTIATION)
2607 
2624 void mbedtls_ssl_conf_renegotiation( mbedtls_ssl_config *conf, int renegotiation );
2625 #endif /* MBEDTLS_SSL_RENEGOTIATION */
2626 
2654 void mbedtls_ssl_conf_legacy_renegotiation( mbedtls_ssl_config *conf, int allow_legacy );
2655 
2656 #if defined(MBEDTLS_SSL_RENEGOTIATION)
2657 
2694 void mbedtls_ssl_conf_renegotiation_enforced( mbedtls_ssl_config *conf, int max_records );
2695 
2722  const unsigned char period[8] );
2723 #endif /* MBEDTLS_SSL_RENEGOTIATION */
2724 
2764 
2781 
2794 uint32_t mbedtls_ssl_get_verify_result( const mbedtls_ssl_context *ssl );
2795 
2803 const char *mbedtls_ssl_get_ciphersuite( const mbedtls_ssl_context *ssl );
2804 
2812 const char *mbedtls_ssl_get_version( const mbedtls_ssl_context *ssl );
2813 
2828 
2829 #if defined(MBEDTLS_SSL_MAX_FRAGMENT_LENGTH)
2830 
2843 #endif /* MBEDTLS_SSL_MAX_FRAGMENT_LENGTH */
2844 
2872 
2873 #if defined(MBEDTLS_X509_CRT_PARSE_C)
2874 
2889 #endif /* MBEDTLS_X509_CRT_PARSE_C */
2890 
2891 #if defined(MBEDTLS_SSL_CLI_C)
2892 
2919 #endif /* MBEDTLS_SSL_CLI_C */
2920 
2972 
2994 
2995 #if defined(MBEDTLS_SSL_RENEGOTIATION)
2996 
3020 #endif /* MBEDTLS_SSL_RENEGOTIATION */
3021 
3092 int mbedtls_ssl_read( mbedtls_ssl_context *ssl, unsigned char *buf, size_t len );
3093 
3154 int mbedtls_ssl_write( mbedtls_ssl_context *ssl, const unsigned char *buf, size_t len );
3155 
3173  unsigned char level,
3174  unsigned char message );
3189 
3196 
3208 
3225  int endpoint, int transport, int preset );
3226 
3233 
3240 
3251 
3252 #ifdef __cplusplus
3253 }
3254 #endif
3255 
3256 #endif /* ssl.h */
uint64_t in_window_top
Definition: ssl.h:1100
mbedtls_ssl_send_t * f_send
Definition: ssl.h:1044
void * p_rng
Definition: ssl.h:843
const char ** alpn_list
Definition: ssl.h:941
unsigned int transport
Definition: ssl.h:981
unsigned char * in_ctr
Definition: ssl.h:1082
mbedtls_x509_crt * peer_cert
Definition: ssl.h:801
unsigned char * out_msg
Definition: ssl.h:1124
unsigned char master[48]
Definition: ssl.h:798
unsigned int trunc_hmac
Definition: ssl.h:1007
unsigned char * in_len
Definition: ssl.h:1086
unsigned char * in_buf
Definition: ssl.h:1081
unsigned int endpoint
Definition: ssl.h:980
Public key container.
Definition: pk.h:130
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.
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:1565
mbedtls_mpi dhm_P
Definition: ssl.h:921
char peer_verify_data[MBEDTLS_SSL_VERIFY_DATA_MAX_LEN]
Definition: ssl.h:1177
unsigned char max_minor_ver
Definition: ssl.h:972
const char * mbedtls_ssl_get_ciphersuite_name(const int ciphersuite_id)
Return the name of the ciphersuite associated with the given ID.
void mbedtls_ssl_conf_encrypt_then_mac(mbedtls_ssl_config *conf, char etm)
Enable or disable Encrypt-then-MAC (Default: MBEDTLS_SSL_ETM_ENABLED)
unsigned char min_minor_ver
Definition: ssl.h:974
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:1700
unsigned char * in_hdr
Definition: ssl.h:1085
size_t psk_identity_len
Definition: ssl.h:935
unsigned int dhm_min_bitlen
Definition: ssl.h:968
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:1717
void * p_sni
Definition: ssl.h:854
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.)
unsigned char * ticket
Definition: ssl.h:806
size_t ticket_len
Definition: ssl.h:807
void mbedtls_ssl_conf_extended_master_secret(mbedtls_ssl_config *conf, char ems)
Enable or disable Extended Master Secret negotiation.
unsigned char * out_iv
Definition: ssl.h:1123
mbedtls_ssl_transform * transform_in
Definition: ssl.h:1065
size_t in_left
Definition: ssl.h:1093
unsigned int authmode
Definition: ssl.h:982
int mbedtls_ssl_send_t(void *ctx, const unsigned char *buf, size_t len)
Callback type: send data on the network.
Definition: ssl.h:466
unsigned int badmac_limit
Definition: ssl.h:964
void * p_psk
Definition: ssl.h:866
void mbedtls_ssl_conf_fallback(mbedtls_ssl_config *conf, char fallback)
Set the fallback flag (client-side only).
unsigned int anti_replay
Definition: ssl.h:998
int mbedtls_ssl_recv_t(void *ctx, unsigned char *buf, size_t len)
Callback type: receive data from the network.
Definition: ssl.h:489
unsigned int fallback
Definition: ssl.h:1013
#define MBEDTLS_MPI_MAX_SIZE
const mbedtls_ecp_group_id * curve_list
Definition: ssl.h:917
This file provides an API for Elliptic Curves over GF(P) (ECP).
void mbedtls_ssl_conf_cbc_record_splitting(mbedtls_ssl_config *conf, char split)
Enable / Disable 1/n-1 record splitting (Default: MBEDTLS_SSL_CBC_RECORD_SPLITTING_ENABLED) ...
Certificate revocation list structure.
Definition: x509_crl.h:70
void(* f_dbg)(void *, int, const char *, int, const char *)
Callback for printing debug output.
Definition: ssl.h:838
unsigned char _pms_dhm[MBEDTLS_MPI_MAX_SIZE]
Definition: ssl.h:389
void * p_cache
Definition: ssl.h:849
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).
unsigned int cert_req_ca_list
Definition: ssl.h:1016
unsigned char _pms_rsa[48]
Definition: ssl.h:386
unsigned char _pms_ecdh[MBEDTLS_ECP_MAX_BYTES]
Definition: ssl.h:395
unsigned char renego_period[8]
Definition: ssl.h:959
uint32_t ticket_lifetime
Definition: ssl.h:808
int mbedtls_ssl_get_max_out_record_payload(const mbedtls_ssl_context *ssl)
Return the current maximum outgoing record payload in bytes.
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...
mbedtls_ssl_session * session_in
Definition: ssl.h:1054
uint8_t disable_datagram_packing
Definition: ssl.h:1112
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.
unsigned badmac_seen
Definition: ssl.h:1041
void mbedtls_ssl_conf_dtls_anti_replay(mbedtls_ssl_config *conf, char mode)
Enable or disable anti-replay protection for DTLS.
int(* f_cookie_check)(void *, const unsigned char *, size_t, const unsigned char *, size_t)
Callback to verify validity of a ClientHello cookie.
Definition: ssl.h:874
mbedtls_ssl_get_timer_t * f_get_timer
Definition: ssl.h:1076
Configuration options (set of defines)
void 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 (Defau...
uint32_t mbedtls_ssl_get_verify_result(const mbedtls_ssl_context *ssl)
Return the result of the certificate verification.
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).
mbedtls_x509_crl * ca_crl
Definition: ssl.h:899
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_session * session_out
Definition: ssl.h:1055
const mbedtls_x509_crt * mbedtls_ssl_get_peer_cert(const mbedtls_ssl_context *ssl)
Return the peer certificate from the current connection.
int mbedtls_ssl_send_alert_message(mbedtls_ssl_context *ssl, unsigned char level, unsigned char message)
Send an alert message.
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:515
uint16_t mtu
Definition: ssl.h:1133
SSL Ciphersuites for mbed TLS.
mbedtls_ssl_transform * transform_out
Definition: ssl.h:1066
unsigned char mfl_code
Definition: ssl.h:812
void mbedtls_ssl_conf_renegotiation_period(mbedtls_ssl_config *conf, const unsigned char period[8])
Set record counter threshold for periodic renegotiation.
unsigned int mfl_code
Definition: ssl.h:989
Multi-precision integer library.
int encrypt_then_mac
Definition: ssl.h:820
size_t in_hslen
Definition: ssl.h:1104
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)
Set the Pre Shared Key (PSK) and the expected identity name.
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 (Default: the smaller of MBEDTLS_SSL_IN_CONT...
int(* f_sni)(void *, mbedtls_ssl_context *, const unsigned char *, size_t)
Callback for setting cert according to SNI extension.
Definition: ssl.h:853
time_t mbedtls_time_t
Definition: platform_time.h:53
int mbedtls_ssl_write(mbedtls_ssl_context *ssl, const unsigned char *buf, size_t len)
Try to write exactly 'len' application data bytes.
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.
void mbedtls_ssl_conf_min_version(mbedtls_ssl_config *conf, int major, int minor)
Set the minimum accepted SSL/TLS protocol version (Default: TLS 1.0)
uint64_t in_window
Definition: ssl.h:1101
int mbedtls_ssl_close_notify(mbedtls_ssl_context *ssl)
Notify the peer that the connection is being closed.
void * p_cookie
Definition: ssl.h:876
void mbedtls_ssl_conf_session_tickets(mbedtls_ssl_config *conf, int use_tickets)
Enable / Disable session tickets (client only).
void mbedtls_ssl_conf_ciphersuites_for_version(mbedtls_ssl_config *conf, const int *ciphersuites, int major, int minor)
Set the list of allowed ciphersuites and the preference order for a specific version of the protocol...
mbedtls_ssl_transform * transform
Definition: ssl.h:1067
uint32_t hs_timeout_min
Definition: ssl.h:951
mbedtls_ssl_handshake_params * handshake
Definition: ssl.h:1059
void mbedtls_ssl_free(mbedtls_ssl_context *ssl)
Free referenced items in an SSL context and clear memory.
void mbedtls_ssl_conf_export_keys_cb(mbedtls_ssl_config *conf, mbedtls_ssl_export_keys_t *f_export_keys, void *p_export_keys)
Configure key export callback.
void mbedtls_ssl_conf_endpoint(mbedtls_ssl_config *conf, int endpoint)
Set the current endpoint type.
size_t out_left
Definition: ssl.h:1128
void mbedtls_ssl_session_free(mbedtls_ssl_session *session)
Free referenced items in an SSL session including the peer certificate and clear memory.
void mbedtls_ssl_conf_arc4_support(mbedtls_ssl_config *conf, char arc4)
Disable or enable support for RC4 (Default: MBEDTLS_SSL_ARC4_DISABLED)
unsigned char * in_msg
Definition: ssl.h:1088
void mbedtls_ssl_conf_sig_hashes(mbedtls_ssl_config *conf, const int *hashes)
Set the allowed hashes for signatures during the handshake.
unsigned char min_major_ver
Definition: ssl.h:973
mbedtls_ssl_set_timer_t * f_set_timer
Definition: ssl.h:1075
const char * mbedtls_ssl_get_alpn_protocol(const mbedtls_ssl_context *ssl)
Get the name of the negotiated Application Layer Protocol.
int(* f_vrfy)(void *, mbedtls_x509_crt *, int, uint32_t *)
Callback to customize X.509 certificate chain verification.
Definition: ssl.h:859
int(* f_set_cache)(void *, const mbedtls_ssl_session *)
Callback to store a session into the cache.
Definition: ssl.h:848
const int * ciphersuite_list[4]
Definition: ssl.h:835
void mbedtls_ssl_conf_dhm_min_bitlen(mbedtls_ssl_config *conf, unsigned int bitlen)
Set the minimum length for Diffie-Hellman parameters.
int(* f_cookie_write)(void *, unsigned char **, unsigned char *, const unsigned char *, size_t)
Callback to create & write a cookie for ClientHello veirifcation.
Definition: ssl.h:871
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.
mbedtls_ssl_key_cert * key_cert
Definition: ssl.h:897
MBEDTLS_DEPRECATED int mbedtls_ssl_conf_dh_param(mbedtls_ssl_config *conf, const char *dhm_P, const char *dhm_G)
Set the Diffie-Hellman public P and G values, read as hexadecimal strings (server-side only) (Default...
mbedtls_ssl_recv_t * f_recv
Definition: ssl.h:1045
int mbedtls_ssl_get_ciphersuite_id(const char *ciphersuite_name)
Return the ID of the ciphersuite associated with the given name.
void mbedtls_ssl_conf_transport(mbedtls_ssl_config *conf, int transport)
Set the transport type (TLS or DTLS).
mbedtls_ssl_session * session_negotiate
Definition: ssl.h:1057
mbedtls_ssl_states
Definition: ssl.h:425
int(* f_psk)(void *, mbedtls_ssl_context *, const unsigned char *, size_t)
Callback to retrieve PSK key from identity.
Definition: ssl.h:865
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).
const int * sig_hashes
Definition: ssl.h:913
void mbedtls_ssl_conf_renegotiation_enforced(mbedtls_ssl_config *conf, int max_records)
Enforce renegotiation requests.
void mbedtls_ssl_set_mtu(mbedtls_ssl_context *ssl, uint16_t mtu)
Set the Maximum Tranport Unit (MTU).
#define MBEDTLS_DEPRECATED
Definition: ssl.h:2144
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.
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.
size_t id_len
Definition: ssl.h:796
unsigned int encrypt_then_mac
Definition: ssl.h:992
void * p_bio
Definition: ssl.h:1049
unsigned int cbc_record_splitting
Definition: ssl.h:1001
int(* f_ticket_write)(void *, const mbedtls_ssl_session *, unsigned char *, const unsigned char *, size_t *, uint32_t *)
Callback to create & write a session ticket.
Definition: ssl.h:881
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.
int mbedtls_ssl_conf_alpn_protocols(mbedtls_ssl_config *conf, const char **protos)
Set the supported Application Layer Protocols.
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.
unsigned char _pms_ecdhe_psk[4+MBEDTLS_ECP_MAX_BYTES+MBEDTLS_PSK_MAX_LEN]
Definition: ssl.h:409
void * p_vrfy
Definition: ssl.h:860
const mbedtls_x509_crt_profile * cert_profile
Definition: ssl.h:896
void * p_timer
Definition: ssl.h:1073
This file contains Diffie-Hellman-Merkle (DHM) key exchange definitions and functions.
X.509 certificate parsing and writing.
void mbedtls_ssl_conf_session_cache(mbedtls_ssl_config *conf, void *p_cache, int(*f_get_cache)(void *, mbedtls_ssl_session *), int(*f_set_cache)(void *, const mbedtls_ssl_session *))
Set the session cache callbacks (server-side only) If not set, no session resuming is done (except if...
#define MBEDTLS_PSK_MAX_LEN
Definition: ssl.h:379
unsigned int session_tickets
Definition: ssl.h:1010
void mbedtls_ssl_conf_truncated_hmac(mbedtls_ssl_config *conf, int truncate)
Activate negotiation of truncated HMAC (Default: MBEDTLS_SSL_TRUNC_HMAC_DISABLED) ...
mbedtls_ssl_session * session
Definition: ssl.h:1056
unsigned char * in_iv
Definition: ssl.h:1087
char own_verify_data[MBEDTLS_SSL_VERIFY_DATA_MAX_LEN]
Definition: ssl.h:1176
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() ...
mbedtls_ssl_transform * transform_negotiate
Definition: ssl.h:1068
const char * mbedtls_ssl_get_ciphersuite(const mbedtls_ssl_context *ssl)
Return the name of the current ciphersuite.
mbedtls_ecp_group_id
Domain-parameter identifiers: curve, subgroup, and generator.
Definition: ecp.h:71
unsigned char * out_ctr
Definition: ssl.h:1120
int secure_renegotiation
Definition: ssl.h:1172
int mbedtls_ssl_get_timer_t(void *ctx)
Callback type: get status of timers/delays.
Definition: ssl.h:556
The DHM context structure.
Definition: dhm.h:102
const mbedtls_ssl_config * conf
Definition: ssl.h:1024
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.
unsigned char * in_offt
Definition: ssl.h:1089
unsigned int extended_ms
Definition: ssl.h:995
unsigned char max_major_ver
Definition: ssl.h:971
unsigned char * psk
Definition: ssl.h:926
void mbedtls_ssl_config_init(mbedtls_ssl_config *conf)
Initialize an SSL configuration context Just makes the context ready for mbedtls_ssl_config_defaults(...
int(* f_export_keys)(void *, const unsigned char *, const unsigned char *, size_t, size_t, size_t)
Callback to export key block and master secret.
Definition: ssl.h:890
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...
const char * alpn_chosen
Definition: ssl.h:1157
This file contains ECDH definitions and functions.
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) ...
mbedtls_mpi dhm_G
Definition: ssl.h:922
int mbedtls_ssl_set_session(mbedtls_ssl_context *ssl, const mbedtls_ssl_session *session)
Request resumption of session (client-side only) Session data is copied from presented session struct...
unsigned int disable_renegotiation
Definition: ssl.h:1004
void * p_export_keys
Definition: ssl.h:892
char * hostname
Definition: ssl.h:1152
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. ...
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.
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.
int mbedtls_ssl_setup(mbedtls_ssl_context *ssl, const mbedtls_ssl_config *conf)
Set up an SSL context for use.
size_t out_msglen
Definition: ssl.h:1127
uint32_t read_timeout
Definition: ssl.h:948
void mbedtls_ssl_conf_legacy_renegotiation(mbedtls_ssl_config *conf, int allow_legacy)
Prevent or allow legacy renegotiation.
unsigned char _pms_rsa_psk[52+MBEDTLS_PSK_MAX_LEN]
Definition: ssl.h:405
int mbedtls_ssl_renegotiate(mbedtls_ssl_context *ssl)
Initiate an SSL renegotiation on the running connection.
int mbedtls_ssl_export_keys_t(void *p_expkey, const unsigned char *ms, const unsigned char *kb, size_t maclen, size_t keylen, size_t ivlen)
Callback type: Export key block and master secret.
Definition: ssl.h:1534
unsigned char * out_len
Definition: ssl.h:1122
unsigned int arc4_disabled
Definition: ssl.h:986
int(* f_rng)(void *, unsigned char *, size_t)
Callback for getting (pseudo-)random numbers.
Definition: ssl.h:842
uint32_t hs_timeout_max
Definition: ssl.h:953
MPI structure.
Definition: bignum.h:180
X.509 certificate revocation list parsing.
SSL/TLS configuration to be shared between mbedtls_ssl_context structures.
Definition: ssl.h:827
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).
Container for an X.509 certificate.
Definition: x509_crt.h:53
int(* f_ticket_parse)(void *, mbedtls_ssl_session *, unsigned char *, size_t)
Callback to parse a session ticket into a session structure.
Definition: ssl.h:884
unsigned char * cli_id
Definition: ssl.h:1164
int renego_max_records
Definition: ssl.h:958
mbedtls_ssl_recv_timeout_t * f_recv_timeout
Definition: ssl.h:1046
mbedtls_x509_crt * ca_chain
Definition: ssl.h:898
void mbedtls_ssl_conf_read_timeout(mbedtls_ssl_config *conf, uint32_t timeout)
Set the timeout period for mbedtls_ssl_read() (Default: no timeout.)
size_t verify_data_len
Definition: ssl.h:1175
void mbedtls_ssl_config_free(mbedtls_ssl_config *conf)
Free an SSL configuration context.
unsigned char * psk_identity
Definition: ssl.h:932
int mbedtls_ssl_read(mbedtls_ssl_context *ssl, unsigned char *buf, size_t len)
Read at most 'len' application data bytes.
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:541
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...
unsigned char _pms_dhe_psk[4+MBEDTLS_MPI_MAX_SIZE+MBEDTLS_PSK_MAX_LEN]
Definition: ssl.h:402
size_t next_record_offset
Definition: ssl.h:1096
unsigned char * out_buf
Definition: ssl.h:1119
size_t psk_len
Definition: ssl.h:929
int(* f_get_cache)(void *, mbedtls_ssl_session *)
Callback to retrieve a session from the cache.
Definition: ssl.h:846
void mbedtls_ssl_session_init(mbedtls_ssl_session *session)
Initialize SSL session structure.
Security profile for certificate verification.
Definition: x509_crt.h:108
void * p_dbg
Definition: ssl.h:839
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:1506
size_t cli_id_len
Definition: ssl.h:1165
void mbedtls_ssl_conf_handshake_timeout(mbedtls_ssl_config *conf, uint32_t min, uint32_t max)
Set retransmit timeout values for the DTLS handshake.
mbed TLS Platform time abstraction
int mbedtls_ssl_config_defaults(mbedtls_ssl_config *conf, int endpoint, int transport, int preset)
Load reasonnable default SSL configuration values.
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.
void mbedtls_ssl_conf_curves(mbedtls_ssl_config *conf, const mbedtls_ecp_group_id *curves)
Set the allowed curves in order of preference.
int renego_records_seen
Definition: ssl.h:1032
unsigned char * out_hdr
Definition: ssl.h:1121
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.
unsigned char _pms_psk[4+2 *MBEDTLS_PSK_MAX_LEN]
Definition: ssl.h:398
uint32_t verify_result
Definition: ssl.h:803
int mbedtls_ssl_handshake(mbedtls_ssl_context *ssl)
Perform the SSL handshake.
void mbedtls_ssl_set_hs_authmode(mbedtls_ssl_context *ssl, int authmode)
Set authmode for the current handshake.
unsigned int allow_legacy_renegotiation
Definition: ssl.h:984
mbedtls_md_type_t
Supported message digests.
Definition: md.h:58
int keep_current_message
Definition: ssl.h:1108
signed char split_done
Definition: ssl.h:1140
int mbedtls_ssl_handshake_step(mbedtls_ssl_context *ssl)
Perform a single step of the SSL handshake.
unsigned char cur_out_ctr[8]
Definition: ssl.h:1130
const char * mbedtls_ssl_get_version(const mbedtls_ssl_context *ssl)
Return the current SSL version (SSLv3/TLSv1/etc)
void mbedtls_ssl_conf_authmode(mbedtls_ssl_config *conf, int authmode)
Set the certificate verification mode Default: NONE on server, REQUIRED on client.
int mbedtls_ssl_session_reset(mbedtls_ssl_context *ssl)
Reset an already initialized SSL context for re-use while retaining application-set variables...
int mbedtls_ssl_set_hostname(mbedtls_ssl_context *ssl, const char *hostname)
Set or reset the hostname to check against the received server certificate.
#define MBEDTLS_ECP_MAX_BYTES
Definition: ecp.h:271
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.
int mbedtls_ssl_get_session(const mbedtls_ssl_context *ssl, mbedtls_ssl_session *session)
Save session in order to resume it later (client-side only) Session data is copied to presented sessi...
void * p_ticket
Definition: ssl.h:885
void mbedtls_ssl_conf_ciphersuites(mbedtls_ssl_config *conf, const int *ciphersuites)
Set the list of allowed ciphersuites and the preference order.
size_t mbedtls_ssl_get_max_frag_len(const mbedtls_ssl_context *ssl)
Return the maximum fragment length (payload, in bytes).
#define MBEDTLS_SSL_VERIFY_DATA_MAX_LEN
Definition: ssl.h:263
mbedtls_time_t start
Definition: ssl.h:792
size_t in_msglen
Definition: ssl.h:1092
uint16_t in_epoch
Definition: ssl.h:1095