webkit  2cdf99a9e3038c7e01b3c37e8ad903ecbe5eecf1
https://github.com/WebKit/webkit
internal.h
Go to the documentation of this file.
1 /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
2  * All rights reserved.
3  *
4  * This package is an SSL implementation written
5  * by Eric Young (eay@cryptsoft.com).
6  * The implementation was written so as to conform with Netscapes SSL.
7  *
8  * This library is free for commercial and non-commercial use as long as
9  * the following conditions are aheared to. The following conditions
10  * apply to all code found in this distribution, be it the RC4, RSA,
11  * lhash, DES, etc., code; not just the SSL code. The SSL documentation
12  * included with this distribution is covered by the same copyright terms
13  * except that the holder is Tim Hudson (tjh@cryptsoft.com).
14  *
15  * Copyright remains Eric Young's, and as such any Copyright notices in
16  * the code are not to be removed.
17  * If this package is used in a product, Eric Young should be given attribution
18  * as the author of the parts of the library used.
19  * This can be in the form of a textual message at program startup or
20  * in documentation (online or textual) provided with the package.
21  *
22  * Redistribution and use in source and binary forms, with or without
23  * modification, are permitted provided that the following conditions
24  * are met:
25  * 1. Redistributions of source code must retain the copyright
26  * notice, this list of conditions and the following disclaimer.
27  * 2. Redistributions in binary form must reproduce the above copyright
28  * notice, this list of conditions and the following disclaimer in the
29  * documentation and/or other materials provided with the distribution.
30  * 3. All advertising materials mentioning features or use of this software
31  * must display the following acknowledgement:
32  * "This product includes cryptographic software written by
33  * Eric Young (eay@cryptsoft.com)"
34  * The word 'cryptographic' can be left out if the rouines from the library
35  * being used are not cryptographic related :-).
36  * 4. If you include any Windows specific code (or a derivative thereof) from
37  * the apps directory (application code) you must include an acknowledgement:
38  * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
39  *
40  * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
41  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
42  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
43  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
44  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
45  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
46  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
47  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
48  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
49  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
50  * SUCH DAMAGE.
51  *
52  * The licence and distribution terms for any publically available version or
53  * derivative of this code cannot be changed. i.e. this code cannot simply be
54  * copied and put under another distribution licence
55  * [including the GNU Public Licence.]
56  */
57 /* ====================================================================
58  * Copyright (c) 1998-2007 The OpenSSL Project. All rights reserved.
59  *
60  * Redistribution and use in source and binary forms, with or without
61  * modification, are permitted provided that the following conditions
62  * are met:
63  *
64  * 1. Redistributions of source code must retain the above copyright
65  * notice, this list of conditions and the following disclaimer.
66  *
67  * 2. Redistributions in binary form must reproduce the above copyright
68  * notice, this list of conditions and the following disclaimer in
69  * the documentation and/or other materials provided with the
70  * distribution.
71  *
72  * 3. All advertising materials mentioning features or use of this
73  * software must display the following acknowledgment:
74  * "This product includes software developed by the OpenSSL Project
75  * for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
76  *
77  * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
78  * endorse or promote products derived from this software without
79  * prior written permission. For written permission, please contact
80  * openssl-core@openssl.org.
81  *
82  * 5. Products derived from this software may not be called "OpenSSL"
83  * nor may "OpenSSL" appear in their names without prior written
84  * permission of the OpenSSL Project.
85  *
86  * 6. Redistributions of any form whatsoever must retain the following
87  * acknowledgment:
88  * "This product includes software developed by the OpenSSL Project
89  * for use in the OpenSSL Toolkit (http://www.openssl.org/)"
90  *
91  * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
92  * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
93  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
94  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
95  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
96  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
97  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
98  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
99  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
100  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
101  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
102  * OF THE POSSIBILITY OF SUCH DAMAGE.
103  * ====================================================================
104  *
105  * This product includes cryptographic software written by Eric Young
106  * (eay@cryptsoft.com). This product includes software written by Tim
107  * Hudson (tjh@cryptsoft.com).
108  *
109  */
110 /* ====================================================================
111  * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.
112  * ECC cipher suite support in OpenSSL originally developed by
113  * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project.
114  */
115 /* ====================================================================
116  * Copyright 2005 Nokia. All rights reserved.
117  *
118  * The portions of the attached software ("Contribution") is developed by
119  * Nokia Corporation and is licensed pursuant to the OpenSSL open source
120  * license.
121  *
122  * The Contribution, originally written by Mika Kousa and Pasi Eronen of
123  * Nokia Corporation, consists of the "PSK" (Pre-Shared Key) ciphersuites
124  * support (see RFC 4279) to OpenSSL.
125  *
126  * No patent licenses or other rights except those expressly stated in
127  * the OpenSSL open source license shall be deemed granted or received
128  * expressly, by implication, estoppel, or otherwise.
129  *
130  * No assurances are provided by Nokia that the Contribution does not
131  * infringe the patent or other intellectual property rights of any third
132  * party or that the license provides you with all the necessary rights
133  * to make use of the Contribution.
134  *
135  * THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. IN
136  * ADDITION TO THE DISCLAIMERS INCLUDED IN THE LICENSE, NOKIA
137  * SPECIFICALLY DISCLAIMS ANY LIABILITY FOR CLAIMS BROUGHT BY YOU OR ANY
138  * OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS OR
139  * OTHERWISE.
140  */
141 
142 #ifndef OPENSSL_HEADER_SSL_INTERNAL_H
143 #define OPENSSL_HEADER_SSL_INTERNAL_H
144 
145 #include <openssl/base.h>
146 
147 #include <openssl/aead.h>
148 #include <openssl/ssl.h>
149 #include <openssl/stack.h>
150 
151 
152 #if defined(OPENSSL_WINDOWS)
153 /* Windows defines struct timeval in winsock2.h. */
155 #include <winsock2.h>
157 #else
158 #include <sys/time.h>
159 #endif
160 
161 #if defined(__cplusplus)
162 extern "C" {
163 #endif
164 
165 
166 /* Cipher suites. */
167 
168 /* Bits for |algorithm_mkey| (key exchange algorithm). */
169 #define SSL_kRSA 0x00000001L
170 #define SSL_kDHE 0x00000002L
171 #define SSL_kECDHE 0x00000004L
172 /* SSL_kPSK is only set for plain PSK, not ECDHE_PSK. */
173 #define SSL_kPSK 0x00000008L
174 #define SSL_kCECPQ1 0x00000010L
175 #define SSL_kGENERIC 0x00000020L
176 
177 /* Bits for |algorithm_auth| (server authentication). */
178 #define SSL_aRSA 0x00000001L
179 #define SSL_aECDSA 0x00000002L
180 /* SSL_aPSK is set for both PSK and ECDHE_PSK. */
181 #define SSL_aPSK 0x00000004L
182 #define SSL_aGENERIC 0x00000008L
183 
184 #define SSL_aCERT (SSL_aRSA | SSL_aECDSA)
185 
186 /* Bits for |algorithm_enc| (symmetric encryption). */
187 #define SSL_3DES 0x00000001L
188 #define SSL_AES128 0x00000002L
189 #define SSL_AES256 0x00000004L
190 #define SSL_AES128GCM 0x00000008L
191 #define SSL_AES256GCM 0x00000010L
192 #define SSL_CHACHA20POLY1305_OLD 0x00000020L
193 #define SSL_eNULL 0x00000040L
194 #define SSL_CHACHA20POLY1305 0x00000080L
195 
196 #define SSL_AES (SSL_AES128 | SSL_AES256 | SSL_AES128GCM | SSL_AES256GCM)
197 
198 /* Bits for |algorithm_mac| (symmetric authentication). */
199 #define SSL_MD5 0x00000001L
200 #define SSL_SHA1 0x00000002L
201 #define SSL_SHA256 0x00000004L
202 #define SSL_SHA384 0x00000008L
203 /* SSL_AEAD is set for all AEADs. */
204 #define SSL_AEAD 0x00000010L
205 
206 /* Bits for |algorithm_prf| (handshake digest). */
207 #define SSL_HANDSHAKE_MAC_DEFAULT 0x1
208 #define SSL_HANDSHAKE_MAC_SHA256 0x2
209 #define SSL_HANDSHAKE_MAC_SHA384 0x4
210 
211 /* SSL_MAX_DIGEST is the number of digest types which exist. When adding a new
212  * one, update the table in ssl_cipher.c. */
213 #define SSL_MAX_DIGEST 4
214 
215 /* ssl_cipher_get_evp_aead sets |*out_aead| to point to the correct EVP_AEAD
216  * object for |cipher| protocol version |version|. It sets |*out_mac_secret_len|
217  * and |*out_fixed_iv_len| to the MAC key length and fixed IV length,
218  * respectively. The MAC key length is zero except for legacy block and stream
219  * ciphers. It returns 1 on success and 0 on error. */
220 int ssl_cipher_get_evp_aead(const EVP_AEAD **out_aead,
221  size_t *out_mac_secret_len,
222  size_t *out_fixed_iv_len,
223  const SSL_CIPHER *cipher, uint16_t version);
224 
225 /* ssl_get_handshake_digest returns the |EVP_MD| corresponding to
226  * |algorithm_prf|. It returns SHA-1 for |SSL_HANDSHAKE_DEFAULT|. The caller is
227  * responsible for maintaining the additional MD5 digest and switching to
228  * SHA-256 in TLS 1.2. */
229 const EVP_MD *ssl_get_handshake_digest(uint32_t algorithm_prf);
230 
231 /* ssl_create_cipher_list evaluates |rule_str| according to the ciphers in
232  * |ssl_method|. It sets |*out_cipher_list| to a newly-allocated
233  * |ssl_cipher_preference_list_st| containing the result.
234  * |*out_cipher_list_by_id| is set to a list of selected ciphers sorted by
235  * id. It returns |(*out_cipher_list)->ciphers| on success and NULL on
236  * failure. */
238 ssl_create_cipher_list(const SSL_PROTOCOL_METHOD *ssl_method,
240  STACK_OF(SSL_CIPHER) **out_cipher_list_by_id,
241  const char *rule_str);
242 
243 /* ssl_cipher_get_value returns the cipher suite id of |cipher|. */
245 
246 /* ssl_cipher_get_key_type returns the |EVP_PKEY_*| value corresponding to the
247  * server key used in |cipher| or |EVP_PKEY_NONE| if there is none. */
248 int ssl_cipher_get_key_type(const SSL_CIPHER *cipher);
249 
250 /* ssl_cipher_uses_certificate_auth returns one if |cipher| authenticates the
251  * server and, optionally, the client with a certificate. Otherwise it returns
252  * zero. */
254 
255 /* ssl_cipher_requires_server_key_exchange returns 1 if |cipher| requires a
256  * ServerKeyExchange message. Otherwise it returns 0.
257  *
258  * This function may return zero while still allowing |cipher| an optional
259  * ServerKeyExchange. This is the case for plain PSK ciphers. */
261 
262 /* ssl_cipher_get_record_split_len, for TLS 1.0 CBC mode ciphers, returns the
263  * length of an encrypted 1-byte record, for use in record-splitting. Otherwise
264  * it returns zero. */
265 size_t ssl_cipher_get_record_split_len(const SSL_CIPHER *cipher);
266 
267 
268 /* Encryption layer. */
269 
270 /* SSL_AEAD_CTX contains information about an AEAD that is being used to encrypt
271  * an SSL connection. */
275  /* fixed_nonce contains any bytes of the nonce that are fixed for all
276  * records. */
279  /* variable_nonce_included_in_record is non-zero if the variable nonce
280  * for a record is included as a prefix before the ciphertext. */
282  /* random_variable_nonce is non-zero if the variable nonce is
283  * randomly generated, rather than derived from the sequence
284  * number. */
286  /* omit_length_in_ad is non-zero if the length should be omitted in the
287  * AEAD's ad parameter. */
289  /* omit_version_in_ad is non-zero if the version should be omitted
290  * in the AEAD's ad parameter. */
292  /* omit_ad is non-zero if the AEAD's ad parameter should be omitted. */
293  char omit_ad;
294  /* xor_fixed_nonce is non-zero if the fixed nonce should be XOR'd into the
295  * variable nonce rather than prepended. */
297 } /* SSL_AEAD_CTX */;
298 
299 /* SSL_AEAD_CTX_new creates a newly-allocated |SSL_AEAD_CTX| using the supplied
300  * key material. It returns NULL on error. Only one of |SSL_AEAD_CTX_open| or
301  * |SSL_AEAD_CTX_seal| may be used with the resulting object, depending on
302  * |direction|. |version| is the normalized protocol version, so DTLS 1.0 is
303  * represented as 0x0301, not 0xffef. */
306  const uint8_t *enc_key, size_t enc_key_len,
307  const uint8_t *mac_key, size_t mac_key_len,
308  const uint8_t *fixed_iv, size_t fixed_iv_len);
309 
310 /* SSL_AEAD_CTX_free frees |ctx|. */
312 
313 /* SSL_AEAD_CTX_explicit_nonce_len returns the length of the explicit nonce for
314  * |ctx|, if any. |ctx| may be NULL to denote the null cipher. */
316 
317 /* SSL_AEAD_CTX_max_overhead returns the maximum overhead of calling
318  * |SSL_AEAD_CTX_seal|. |ctx| may be NULL to denote the null cipher. */
320 
321 /* SSL_AEAD_CTX_open authenticates and decrypts |in_len| bytes from |in|
322  * in-place. On success, it sets |*out| to the plaintext in |in| and returns
323  * one. Otherwise, it returns zero. |ctx| may be NULL to denote the null cipher.
324  * The output will always be |explicit_nonce_len| bytes ahead of |in|. */
326  uint16_t wire_version, const uint8_t seqnum[8],
327  uint8_t *in, size_t in_len);
328 
329 /* SSL_AEAD_CTX_seal encrypts and authenticates |in_len| bytes from |in| and
330  * writes the result to |out|. It returns one on success and zero on
331  * error. |ctx| may be NULL to denote the null cipher.
332  *
333  * If |in| and |out| alias then |out| + |explicit_nonce_len| must be == |in|. */
334 int SSL_AEAD_CTX_seal(SSL_AEAD_CTX *ctx, uint8_t *out, size_t *out_len,
335  size_t max_out, uint8_t type, uint16_t wire_version,
336  const uint8_t seqnum[8], const uint8_t *in,
337  size_t in_len);
338 
339 
340 /* DTLS replay bitmap. */
341 
342 /* DTLS1_BITMAP maintains a sliding window of 64 sequence numbers to detect
343  * replayed packets. It should be initialized by zeroing every field. */
344 typedef struct dtls1_bitmap_st {
345  /* map is a bit mask of the last 64 sequence numbers. Bit
346  * |1<<i| corresponds to |max_seq_num - i|. */
348  /* max_seq_num is the largest sequence number seen so far as a 64-bit
349  * integer. */
351 } DTLS1_BITMAP;
352 
353 
354 /* Record layer. */
355 
356 /* ssl_record_sequence_update increments the sequence number in |seq|. It
357  * returns one on success and zero on wraparound. */
358 int ssl_record_sequence_update(uint8_t *seq, size_t seq_len);
359 
360 /* ssl_record_prefix_len returns the length of the prefix before the ciphertext
361  * of a record for |ssl|.
362  *
363  * TODO(davidben): Expose this as part of public API once the high-level
364  * buffer-free APIs are available. */
365 size_t ssl_record_prefix_len(const SSL *ssl);
366 
374 };
375 
376 /* tls_open_record decrypts a record from |in| in-place.
377  *
378  * If the input did not contain a complete record, it returns
379  * |ssl_open_record_partial|. It sets |*out_consumed| to the total number of
380  * bytes necessary. It is guaranteed that a successful call to |tls_open_record|
381  * will consume at least that many bytes.
382  *
383  * Otherwise, it sets |*out_consumed| to the number of bytes of input
384  * consumed. Note that input may be consumed on all return codes if a record was
385  * decrypted.
386  *
387  * On success, it returns |ssl_open_record_success|. It sets |*out_type| to the
388  * record type and |*out| to the record body in |in|. Note that |*out| may be
389  * empty.
390  *
391  * If a record was successfully processed but should be discarded, it returns
392  * |ssl_open_record_discard|.
393  *
394  * If a record was successfully processed but is a close_notify or fatal alert,
395  * it returns |ssl_open_record_close_notify| or |ssl_open_record_fatal_alert|.
396  *
397  * On failure, it returns |ssl_open_record_error| and sets |*out_alert| to an
398  * alert to emit. */
399 enum ssl_open_record_t tls_open_record(SSL *ssl, uint8_t *out_type, CBS *out,
400  size_t *out_consumed, uint8_t *out_alert,
401  uint8_t *in, size_t in_len);
402 
403 /* dtls_open_record implements |tls_open_record| for DTLS. It never returns
404  * |ssl_open_record_partial| but otherwise behaves analogously. */
405 enum ssl_open_record_t dtls_open_record(SSL *ssl, uint8_t *out_type, CBS *out,
406  size_t *out_consumed,
407  uint8_t *out_alert, uint8_t *in,
408  size_t in_len);
409 
410 /* ssl_seal_align_prefix_len returns the length of the prefix before the start
411  * of the bulk of the ciphertext when sealing a record with |ssl|. Callers may
412  * use this to align buffers.
413  *
414  * Note when TLS 1.0 CBC record-splitting is enabled, this includes the one byte
415  * record and is the offset into second record's ciphertext. Thus this value may
416  * differ from |ssl_record_prefix_len| and sealing a small record may result in
417  * a smaller output than this value.
418  *
419  * TODO(davidben): Expose this as part of public API once the high-level
420  * buffer-free APIs are available. */
421 size_t ssl_seal_align_prefix_len(const SSL *ssl);
422 
423 /* ssl_max_seal_overhead returns the maximum overhead of sealing a record with
424  * |ssl|.
425  *
426  * TODO(davidben): Expose this as part of public API once the high-level
427  * buffer-free APIs are available. */
428 size_t ssl_max_seal_overhead(const SSL *ssl);
429 
430 /* tls_seal_record seals a new record of type |type| and body |in| and writes it
431  * to |out|. At most |max_out| bytes will be written. It returns one on success
432  * and zero on error. If enabled, |tls_seal_record| implements TLS 1.0 CBC 1/n-1
433  * record splitting and may write two records concatenated.
434  *
435  * For a large record, the bulk of the ciphertext will begin
436  * |ssl_seal_align_prefix_len| bytes into out. Aligning |out| appropriately may
437  * improve performance. It writes at most |in_len| + |ssl_max_seal_overhead|
438  * bytes to |out|.
439  *
440  * |in| and |out| may not alias. */
441 int tls_seal_record(SSL *ssl, uint8_t *out, size_t *out_len, size_t max_out,
442  uint8_t type, const uint8_t *in, size_t in_len);
443 
447 };
448 
449 /* dtls_seal_record implements |tls_seal_record| for DTLS. |use_epoch| selects
450  * which epoch's cipher state to use. */
451 int dtls_seal_record(SSL *ssl, uint8_t *out, size_t *out_len, size_t max_out,
452  uint8_t type, const uint8_t *in, size_t in_len,
453  enum dtls1_use_epoch_t use_epoch);
454 
455 /* ssl_process_alert processes |in| as an alert and updates |ssl|'s shutdown
456  * state. It returns one of |ssl_open_record_discard|, |ssl_open_record_error|,
457  * |ssl_open_record_close_notify|, or |ssl_open_record_fatal_alert| as
458  * appropriate. */
460  const uint8_t *in, size_t in_len);
461 
462 
463 /* Private key operations. */
464 
465 /* ssl_has_private_key returns one if |ssl| has a private key
466  * configured and zero otherwise. */
467 int ssl_has_private_key(const SSL *ssl);
468 
469 /* ssl_is_ecdsa_key_type returns one if |type| is an ECDSA key type and zero
470  * otherwise. */
471 int ssl_is_ecdsa_key_type(int type);
472 
473 /* ssl_private_key_* call the corresponding function on the
474  * |SSL_PRIVATE_KEY_METHOD| for |ssl|, if configured. Otherwise, they implement
475  * the operation with |EVP_PKEY|. */
476 
477 int ssl_private_key_type(SSL *ssl);
478 
480 
482  SSL *ssl, uint8_t *out, size_t *out_len, size_t max_out,
483  uint16_t signature_algorithm, const uint8_t *in, size_t in_len);
484 
486  SSL *ssl, uint8_t *out, size_t *out_len, size_t max_out,
487  const uint8_t *in, size_t in_len);
488 
490  size_t *out_len,
491  size_t max_out);
492 
493 /* ssl_private_key_supports_signature_algorithm returns one if |ssl|'s private
494  * key supports |signature_algorithm| and zero otherwise. */
496  uint16_t signature_algorithm);
497 
498 /* ssl_public_key_verify verifies that the |signature| is valid for the public
499  * key |pkey| and input |in|, using the |signature_algorithm| specified. */
501  SSL *ssl, const uint8_t *signature, size_t signature_len,
502  uint16_t signature_algorithm, EVP_PKEY *pkey,
503  const uint8_t *in, size_t in_len);
504 
505 
506 /* Custom extensions */
507 
508 /* ssl_custom_extension (a.k.a. SSL_CUSTOM_EXTENSION) is a structure that
509  * contains information about custom-extension callbacks. */
512  void *add_arg;
515  void *parse_arg;
517 };
518 
519 void SSL_CUSTOM_EXTENSION_free(SSL_CUSTOM_EXTENSION *custom_extension);
520 
521 int custom_ext_add_clienthello(SSL *ssl, CBB *extensions);
523  const CBS *extension);
525  const CBS *extension);
526 int custom_ext_add_serverhello(SSL *ssl, CBB *extensions);
527 
528 
529 /* Handshake hash.
530  *
531  * The TLS handshake maintains a transcript of all handshake messages. At
532  * various points in the protocol, this is either a handshake buffer, a rolling
533  * hash (selected by cipher suite) or both. */
534 
535 /* ssl3_init_handshake_buffer initializes the handshake buffer and resets the
536  * handshake hash. It returns one success and zero on failure. */
538 
539 /* ssl3_init_handshake_hash initializes the handshake hash based on the pending
540  * cipher and the contents of the handshake buffer. Subsequent calls to
541  * |ssl3_update_handshake_hash| will update the rolling hash. It returns one on
542  * success and zero on failure. It is an error to call this function after the
543  * handshake buffer is released. */
544 int ssl3_init_handshake_hash(SSL *ssl);
545 
546 /* ssl3_free_handshake_buffer releases the handshake buffer. Subsequent calls
547  * to |ssl3_update_handshake_hash| will not update the handshake buffer. */
549 
550 /* ssl3_free_handshake_hash releases the handshake hash. */
551 void ssl3_free_handshake_hash(SSL *ssl);
552 
553 /* ssl3_update_handshake_hash adds |in| to the handshake buffer and handshake
554  * hash, whichever is enabled. It returns one on success and zero on failure. */
555 int ssl3_update_handshake_hash(SSL *ssl, const uint8_t *in, size_t in_len);
556 
557 
558 /* ECDH groups. */
559 
560 /* An SSL_ECDH_METHOD is an implementation of ECDH-like key exchanges for
561  * TLS. */
563  int nid;
565  const char name[8];
566 
567  /* cleanup releases state in |ctx|. */
568  void (*cleanup)(SSL_ECDH_CTX *ctx);
569 
570  /* offer generates a keypair and writes the public value to
571  * |out_public_key|. It returns one on success and zero on error. */
572  int (*offer)(SSL_ECDH_CTX *ctx, CBB *out_public_key);
573 
574  /* accept performs a key exchange against the |peer_key| generated by |offer|.
575  * On success, it returns one, writes the public value to |out_public_key|,
576  * and sets |*out_secret| and |*out_secret_len| to a newly-allocated buffer
577  * containing the shared secret. The caller must release this buffer with
578  * |OPENSSL_free|. On failure, it returns zero and sets |*out_alert| to an
579  * alert to send to the peer. */
580  int (*accept)(SSL_ECDH_CTX *ctx, CBB *out_public_key, uint8_t **out_secret,
581  size_t *out_secret_len, uint8_t *out_alert,
582  const uint8_t *peer_key, size_t peer_key_len);
583 
584  /* finish performs a key exchange against the |peer_key| generated by
585  * |accept|. On success, it returns one and sets |*out_secret| and
586  * |*out_secret_len| to a newly-allocated buffer containing the shared
587  * secret. The caller must release this buffer with |OPENSSL_free|. On
588  * failure, it returns zero and sets |*out_alert| to an alert to send to the
589  * peer. */
590  int (*finish)(SSL_ECDH_CTX *ctx, uint8_t **out_secret, size_t *out_secret_len,
591  uint8_t *out_alert, const uint8_t *peer_key,
592  size_t peer_key_len);
593 
594  /* get_key initializes |out| with a length-prefixed key from |cbs|. It returns
595  * one on success and zero on error. */
596  int (*get_key)(CBS *cbs, CBS *out);
597 
598  /* add_key initializes |out_contents| to receive a key. Typically it will then
599  * be passed to |offer| or |accept|. It returns one on success and zero on
600  * error. */
601  int (*add_key)(CBB *cbb, CBB *out_contents);
602 } /* SSL_ECDH_METHOD */;
603 
604 /* ssl_nid_to_group_id looks up the group corresponding to |nid|. On success, it
605  * sets |*out_group_id| to the group ID and returns one. Otherwise, it returns
606  * zero. */
607 int ssl_nid_to_group_id(uint16_t *out_group_id, int nid);
608 
609 /* ssl_name_to_group_id looks up the group corresponding to the |name| string
610  * of length |len|. On success, it sets |*out_group_id| to the group ID and
611  * returns one. Otherwise, it returns zero. */
612 int ssl_name_to_group_id(uint16_t *out_group_id, const char *name, size_t len);
613 
614 /* SSL_ECDH_CTX_init sets up |ctx| for use with curve |group_id|. It returns one
615  * on success and zero on error. */
617 
618 /* SSL_ECDH_CTX_init_for_dhe sets up |ctx| for use with legacy DHE-based ciphers
619  * where the server specifies a group. It takes ownership of |params|. */
621 
622 /* SSL_ECDH_CTX_init_for_cecpq1 sets up |ctx| for use with CECPQ1. */
624 
625 /* SSL_ECDH_CTX_cleanup releases memory associated with |ctx|. It is legal to
626  * call it in the zero state. */
628 
629 /* SSL_ECDH_CTX_get_id returns the group ID for |ctx|. */
631 
632 /* SSL_ECDH_CTX_get_key calls the |get_key| method of |SSL_ECDH_METHOD|. */
634 
635 /* SSL_ECDH_CTX_add_key calls the |add_key| method of |SSL_ECDH_METHOD|. */
636 int SSL_ECDH_CTX_add_key(SSL_ECDH_CTX *ctx, CBB *cbb, CBB *out_contents);
637 
638 /* SSL_ECDH_CTX_offer calls the |offer| method of |SSL_ECDH_METHOD|. */
639 int SSL_ECDH_CTX_offer(SSL_ECDH_CTX *ctx, CBB *out_public_key);
640 
641 /* SSL_ECDH_CTX_accept calls the |accept| method of |SSL_ECDH_METHOD|. */
642 int SSL_ECDH_CTX_accept(SSL_ECDH_CTX *ctx, CBB *out_public_key,
643  uint8_t **out_secret, size_t *out_secret_len,
644  uint8_t *out_alert, const uint8_t *peer_key,
645  size_t peer_key_len);
646 
647 /* SSL_ECDH_CTX_finish the |finish| method of |SSL_ECDH_METHOD|. */
648 int SSL_ECDH_CTX_finish(SSL_ECDH_CTX *ctx, uint8_t **out_secret,
649  size_t *out_secret_len, uint8_t *out_alert,
650  const uint8_t *peer_key, size_t peer_key_len);
651 
652 /* Handshake messages. */
653 
654 /* SSL_MAX_HANDSHAKE_FLIGHT is the number of messages, including
655  * ChangeCipherSpec, in the longest handshake flight. Currently this is the
656  * client's second leg in a full handshake when client certificates, NPN, and
657  * Channel ID, are all enabled. */
658 #define SSL_MAX_HANDSHAKE_FLIGHT 7
659 
660 /* ssl_max_handshake_message_len returns the maximum number of bytes permitted
661  * in a handshake message for |ssl|. */
662 size_t ssl_max_handshake_message_len(const SSL *ssl);
663 
664 /* dtls_clear_incoming_messages releases all buffered incoming messages. */
666 
667 /* dtls_has_incoming_messages returns one if there are buffered incoming
668  * messages ahead of the current message and zero otherwise. */
669 int dtls_has_incoming_messages(const SSL *ssl);
670 
671 typedef struct dtls_outgoing_message_st {
675  char is_ccs;
677 
678 /* dtls_clear_outgoing_messages releases all buffered outgoing messages. */
680 
681 
682 /* Callbacks. */
683 
684 /* ssl_do_info_callback calls |ssl|'s info callback, if set. */
685 void ssl_do_info_callback(const SSL *ssl, int type, int value);
686 
687 /* ssl_do_msg_callback calls |ssl|'s message callback, if set. */
688 void ssl_do_msg_callback(SSL *ssl, int is_write, int content_type,
689  const void *buf, size_t len);
690 
691 
692 /* Transport buffers. */
693 
694 /* ssl_read_buffer returns a pointer to contents of the read buffer. */
696 
697 /* ssl_read_buffer_len returns the length of the read buffer. */
698 size_t ssl_read_buffer_len(const SSL *ssl);
699 
700 /* ssl_read_buffer_extend_to extends the read buffer to the desired length. For
701  * TLS, it reads to the end of the buffer until the buffer is |len| bytes
702  * long. For DTLS, it reads a new packet and ignores |len|. It returns one on
703  * success, zero on EOF, and a negative number on error.
704  *
705  * It is an error to call |ssl_read_buffer_extend_to| in DTLS when the buffer is
706  * non-empty. */
707 int ssl_read_buffer_extend_to(SSL *ssl, size_t len);
708 
709 /* ssl_read_buffer_consume consumes |len| bytes from the read buffer. It
710  * advances the data pointer and decrements the length. The memory consumed will
711  * remain valid until the next call to |ssl_read_buffer_extend| or it is
712  * discarded with |ssl_read_buffer_discard|. */
713 void ssl_read_buffer_consume(SSL *ssl, size_t len);
714 
715 /* ssl_read_buffer_discard discards the consumed bytes from the read buffer. If
716  * the buffer is now empty, it releases memory used by it. */
717 void ssl_read_buffer_discard(SSL *ssl);
718 
719 /* ssl_read_buffer_clear releases all memory associated with the read buffer and
720  * zero-initializes it. */
721 void ssl_read_buffer_clear(SSL *ssl);
722 
723 /* ssl_write_buffer_is_pending returns one if the write buffer has pending data
724  * and zero if is empty. */
725 int ssl_write_buffer_is_pending(const SSL *ssl);
726 
727 /* ssl_write_buffer_init initializes the write buffer. On success, it sets
728  * |*out_ptr| to the start of the write buffer with space for up to |max_len|
729  * bytes. It returns one on success and zero on failure. Call
730  * |ssl_write_buffer_set_len| to complete initialization. */
731 int ssl_write_buffer_init(SSL *ssl, uint8_t **out_ptr, size_t max_len);
732 
733 /* ssl_write_buffer_set_len is called after |ssl_write_buffer_init| to complete
734  * initialization after |len| bytes are written to the buffer. */
735 void ssl_write_buffer_set_len(SSL *ssl, size_t len);
736 
737 /* ssl_write_buffer_flush flushes the write buffer to the transport. It returns
738  * one on success and <= 0 on error. For DTLS, whether or not the write
739  * succeeds, the write buffer will be cleared. */
740 int ssl_write_buffer_flush(SSL *ssl);
741 
742 /* ssl_write_buffer_clear releases all memory associated with the write buffer
743  * and zero-initializes it. */
744 void ssl_write_buffer_clear(SSL *ssl);
745 
746 
747 /* Certificate functions. */
748 
749 /* ssl_has_certificate returns one if a certificate and private key are
750  * configured and zero otherwise. */
751 int ssl_has_certificate(const SSL *ssl);
752 
753 /* ssl_parse_cert_chain parses a certificate list from |cbs| in the format used
754  * by a TLS Certificate message. On success, it returns a newly-allocated
755  * |X509| list and advances |cbs|. Otherwise, it returns NULL and sets
756  * |*out_alert| to an alert to send to the peer. If the list is non-empty and
757  * |out_leaf_sha256| is non-NULL, it writes the SHA-256 hash of the leaf to
758  * |out_leaf_sha256|. */
759 STACK_OF(X509) *ssl_parse_cert_chain(SSL *ssl, uint8_t *out_alert,
761 
762 /* ssl_add_cert_to_cbb adds |x509| to |cbb|. It returns one on success and zero
763  * on error. */
764 int ssl_add_cert_to_cbb(CBB *cbb, X509 *x509);
765 
766 /* ssl_add_cert_chain adds |ssl|'s certificate chain to |cbb| in the format used
767  * by a TLS Certificate message. If there is no certificate chain, it emits an
768  * empty certificate list. It returns one on success and zero on error. */
769 int ssl_add_cert_chain(SSL *ssl, CBB *cbb);
770 
771 /* ssl_parse_client_CA_list parses a CA list from |cbs| in the format used by a
772  * TLS CertificateRequest message. On success, it returns a newly-allocated
773  * |X509_NAME| list and advances |cbs|. Otherwise, it returns NULL and sets
774  * |*out_alert| to an alert to send to the peer. */
776  ssl_parse_client_CA_list(SSL *ssl, uint8_t *out_alert, CBS *cbs);
777 
778 /* ssl_add_client_CA_list adds the configured CA list to |cbb| in the format
779  * used by a TLS CertificateRequest message. It returns one on success and zero
780  * on error. */
781 int ssl_add_client_CA_list(SSL *ssl, CBB *cbb);
782 
783 /* ssl_check_leaf_certificate returns one if |leaf| is a suitable leaf server
784  * certificate for |ssl|. Otherwise, it returns zero and pushes an error on the
785  * error queue. */
786 int ssl_check_leaf_certificate(SSL *ssl, X509 *leaf);
787 
788 /* ssl_do_client_cert_cb runs the client_cert_cb, if any, and returns one on
789  * success and zero on error. On error, it sets |*out_should_retry| to one if
790  * the callback failed and should be retried and zero otherwise. */
791 int ssl_do_client_cert_cb(SSL *ssl, int *out_should_retry);
792 
793 
794 /* TLS 1.3 key derivation. */
795 
796 /* tls13_init_key_schedule initializes the handshake hash and key derivation
797  * state with the given resumption context. The cipher suite and PRF hash must
798  * have been selected at this point. It returns one on success and zero on
799  * error. */
800 int tls13_init_key_schedule(SSL *ssl, const uint8_t *resumption_ctx,
801  size_t resumption_ctx_len);
802 
803 /* tls13_advance_key_schedule incorporates |in| into the key schedule with
804  * HKDF-Extract. It returns one on success and zero on error. */
805 int tls13_advance_key_schedule(SSL *ssl, const uint8_t *in, size_t len);
806 
807 /* tls13_get_context_hashes writes Hash(Handshake Context) +
808  * Hash(resumption_context) to |out| which much have room for at least 2 *
809  * |EVP_MAX_MD_SIZE| bytes. On success, it returns one and sets |*out_len| to
810  * the number of bytes written. Otherwise, it returns zero. */
811 int tls13_get_context_hashes(SSL *ssl, uint8_t *out, size_t *out_len);
812 
818 };
819 
820 /* tls13_set_traffic_key sets the read or write traffic keys to |traffic_secret|
821  * for the given traffic phase |type|. It returns one on success and zero on
822  * error. */
824  enum evp_aead_direction_t direction,
825  const uint8_t *traffic_secret,
826  size_t traffic_secret_len);
827 
828 /* tls13_set_handshake_traffic derives the handshake traffic secret and
829  * switches both read and write traffic to it. It returns one on success and
830  * zero on error. */
832 
833 /* tls13_rotate_traffic_key derives the next read or write traffic secret. It
834  * returns one on success and zero on error. */
835 int tls13_rotate_traffic_key(SSL *ssl, enum evp_aead_direction_t direction);
836 
837 /* tls13_derive_traffic_secret_0 derives the initial application data traffic
838  * secret based on the handshake transcripts and |master_secret|. It returns one
839  * on success and zero on error. */
841 
842 /* tls13_finalize_keys derives the |exporter_secret| and |resumption_secret|. */
843 int tls13_finalize_keys(SSL *ssl);
844 
845 /* tls13_export_keying_material provides and exporter interface to use the
846  * |exporter_secret|. */
847 int tls13_export_keying_material(SSL *ssl, uint8_t *out, size_t out_len,
848  const char *label, size_t label_len,
849  const uint8_t *context, size_t context_len,
850  int use_context);
851 
852 /* tls13_finished_mac calculates the MAC of the handshake transcript to verify
853  * the integrity of the Finished message, and stores the result in |out| and
854  * length in |out_len|. |is_server| is 1 if this is for the Server Finished and
855  * 0 for the Client Finished. */
856 int tls13_finished_mac(SSL *ssl, uint8_t *out, size_t *out_len, int is_server);
857 
858 /* tls13_resumption_psk calculates the PSK to use for the resumption of
859  * |session| and stores the result in |out|. It returns one on success, and
860  * zero on failure. */
861 int tls13_resumption_psk(SSL *ssl, uint8_t *out, size_t out_len,
862  const SSL_SESSION *session);
863 
864 /* tls13_resumption_context derives the context to be used for the handshake
865  * transcript on the resumption of |session|. It returns one on success, and
866  * zero on failure. */
867 int tls13_resumption_context(SSL *ssl, uint8_t *out, size_t out_len,
868  const SSL_SESSION *session);
869 
870 
871 /* Handshake functions. */
872 
883 };
884 
886  /* wait contains the operation |do_handshake| is currently blocking on or
887  * |ssl_hs_ok| if none. */
888  enum ssl_hs_wait_t wait;
889 
890  /* do_handshake runs the handshake. On completion, it returns |ssl_hs_ok|.
891  * Otherwise, it returns a value corresponding to what operation is needed to
892  * progress. */
894 
895  int state;
896 
897  size_t hash_len;
898  uint8_t resumption_hash[EVP_MAX_MD_SIZE];
900  uint8_t client_traffic_secret_0[EVP_MAX_MD_SIZE];
901  uint8_t server_traffic_secret_0[EVP_MAX_MD_SIZE];
902 
903  union {
904  /* sent is a bitset where the bits correspond to elements of kExtensions
905  * in t1_lib.c. Each bit is set if that extension was sent in a
906  * ClientHello. It's not used by servers. */
908  /* received is a bitset, like |sent|, but is used by servers to record
909  * which extensions were received from a client. */
911  } extensions;
912 
913  union {
914  /* sent is a bitset where the bits correspond to elements of
915  * |client_custom_extensions| in the |SSL_CTX|. Each bit is set if that
916  * extension was sent in a ClientHello. It's not used by servers. */
918  /* received is a bitset, like |sent|, but is used by servers to record
919  * which custom extensions were received from a client. The bits here
920  * correspond to |server_custom_extensions|. */
922  } custom_extensions;
923 
924  /* ecdh_ctx is the current ECDH instance. */
926 
928 
929  /* retry_group is the group ID selected by the server in HelloRetryRequest in
930  * TLS 1.3. */
932 
933  /* cookie is the value of the cookie received from the server, if any. */
935  size_t cookie_len;
936 
937  /* key_share_bytes is the value of the previously sent KeyShare extension by
938  * the client in TLS 1.3. */
941 
942  /* public_key, for servers, is the key share to be sent to the client in TLS
943  * 1.3. */
946 
947  /* peer_sigalgs are the signature algorithms that the peer supports. These are
948  * taken from the contents of the signature algorithms extension for a server
949  * or from the CertificateRequest for a client. */
951  /* num_peer_sigalgs is the number of entries in |peer_sigalgs|. */
953 
954  /* peer_supported_group_list contains the supported group IDs advertised by
955  * the peer. This is only set on the server's end. The server does not
956  * advertise this extension to the client. */
959 
960  /* peer_key is the peer's ECDH key for a TLS 1.2 client. */
962  size_t peer_key_len;
963 
964  /* server_params, in TLS 1.2, stores the ServerKeyExchange parameters to be
965  * signed while the signature is being computed. */
968 
969  /* session_tickets_sent, in TLS 1.3, is the number of tickets the server has
970  * sent. */
972 
973  /* cert_request is one if a client certificate was requested and zero
974  * otherwise. */
975  unsigned cert_request:1;
976 
977  /* certificate_status_expected is one if OCSP stapling was negotiated and the
978  * server is expected to send a CertificateStatus message. (This is used on
979  * both the client and server sides.) */
981 
982  /* ocsp_stapling_requested is one if a client requested OCSP stapling. */
984 
985  /* should_ack_sni is used by a server and indicates that the SNI extension
986  * should be echoed in the ServerHello. */
987  unsigned should_ack_sni:1;
988 
989  /* in_false_start is one if there is a pending client handshake in False
990  * Start. The client may write data at this point. */
991  unsigned in_false_start:1;
992 
993  /* next_proto_neg_seen is one of NPN was negotiated. */
995 
996  /* peer_psk_identity_hint, on the client, is the psk_identity_hint sent by the
997  * server when using a TLS 1.2 PSK key exchange. */
999 
1000  /* ca_names, on the client, contains the list of CAs received in a
1001  * CertificateRequest message. */
1002  STACK_OF(X509_NAME) *ca_names;
1003 
1004  /* certificate_types, on the client, contains the set of certificate types
1005  * received in a CertificateRequest message. */
1008 } /* SSL_HANDSHAKE */;
1009 
1011 
1012 /* ssl_handshake_free releases all memory associated with |hs|. */
1014 
1015 /* tls13_handshake runs the TLS 1.3 handshake. It returns one on success and <=
1016  * 0 on error. */
1017 int tls13_handshake(SSL *ssl);
1018 
1019 /* The following are implementations of |do_handshake| for the client and
1020  * server. */
1023 
1024 /* tls13_post_handshake processes a post-handshake message. It returns one on
1025  * success and zero on failure. */
1026 int tls13_post_handshake(SSL *ssl);
1027 
1028 /* tls13_check_message_type checks if the current message has type |type|. If so
1029  * it returns one. Otherwise, it sends an alert and returns zero. */
1030 int tls13_check_message_type(SSL *ssl, int type);
1031 
1032 int tls13_process_certificate(SSL *ssl, int allow_anonymous);
1034 int tls13_process_finished(SSL *ssl);
1035 
1036 int tls13_prepare_certificate(SSL *ssl);
1038  SSL *ssl, int is_first_run);
1039 int tls13_prepare_finished(SSL *ssl);
1041 
1042 int ssl_ext_key_share_parse_serverhello(SSL *ssl, uint8_t **out_secret,
1043  size_t *out_secret_len,
1045 int ssl_ext_key_share_parse_clienthello(SSL *ssl, int *out_found,
1046  uint8_t **out_secret,
1047  size_t *out_secret_len,
1050 
1052  CBS *contents);
1054  SSL_SESSION **out_session,
1057 
1059 
1060 /* ssl_clear_tls13_state releases client state only needed for TLS 1.3. It
1061  * should be called once the version is known to be TLS 1.2 or earlier. */
1062 void ssl_clear_tls13_state(SSL *ssl);
1063 
1068 };
1069 
1070 /* tls13_get_cert_verify_signature_input generates the message to be signed for
1071  * TLS 1.3's CertificateVerify message. |cert_verify_context| determines the
1072  * type of signature. It sets |*out| and |*out_len| to a newly allocated buffer
1073  * containing the result. The caller must free it with |OPENSSL_free| to release
1074  * it. This function returns one on success and zero on failure. */
1076  SSL *ssl, uint8_t **out, size_t *out_len,
1077  enum ssl_cert_verify_context_t cert_verify_context);
1078 
1079 
1080 /* SSLKEYLOGFILE functions. */
1081 
1082 /* ssl_log_rsa_client_key_exchange logs |premaster|, if logging is enabled for
1083  * |ssl|. It returns one on success and zero on failure. The entry is identified
1084  * by the first 8 bytes of |encrypted_premaster|. */
1085 int ssl_log_rsa_client_key_exchange(const SSL *ssl,
1086  const uint8_t *encrypted_premaster,
1087  size_t encrypted_premaster_len,
1088  const uint8_t *premaster,
1089  size_t premaster_len);
1090 
1091 /* ssl_log_secret logs |secret| with label |label|, if logging is enabled for
1092  * |ssl|. It returns one on success and zero on failure. */
1093 int ssl_log_secret(const SSL *ssl, const char *label, const uint8_t *secret,
1094  size_t secret_len);
1095 
1096 
1097 /* ClientHello functions. */
1098 
1100  const uint8_t *in, size_t in_len);
1101 
1103  CBS *out, uint16_t extension_type);
1104 
1106  ssl_parse_client_cipher_list(const struct ssl_early_callback_ctx *ctx);
1107 
1109  const struct ssl_early_callback_ctx *client_hello, uint16_t id);
1110 
1111 
1112 /* GREASE. */
1113 
1121 };
1122 
1123 /* ssl_get_grease_value returns a GREASE value for |ssl|. For a given
1124  * connection, the values for each index will be deterministic. This allows the
1125  * same ClientHello be sent twice for a HelloRetryRequest or the same group be
1126  * advertised in both supported_groups and key_shares. */
1128 
1129 
1130 /* Signature algorithms. */
1131 
1132 /* tls1_parse_peer_sigalgs parses |sigalgs| as the list of peer signature
1133  * algorithms and them on |ssl|. It returns one on success and zero on error. */
1134 int tls1_parse_peer_sigalgs(SSL *ssl, const CBS *sigalgs);
1135 
1136 /* tls1_choose_signature_algorithm sets |*out| to a signature algorithm for use
1137  * with |ssl|'s private key based on the peer's preferences and the algorithms
1138  * supported. It returns one on success and zero on error. */
1140 
1141 /* tls12_get_verify_sigalgs sets |*out| to the signature algorithms acceptable
1142  * for the peer signature and returns the length of the list. */
1143 size_t tls12_get_verify_sigalgs(const SSL *ssl, const uint16_t **out);
1144 
1145 /* tls12_check_peer_sigalg checks if |sigalg| is acceptable for the peer
1146  * signature. It returns one on success and zero on error, setting |*out_alert|
1147  * to an alert to send. */
1148 int tls12_check_peer_sigalg(SSL *ssl, int *out_alert, uint16_t sigalg);
1149 
1150 
1151 /* Underdocumented functions.
1152  *
1153  * Functions below here haven't been touched up and may be underdocumented. */
1154 
1155 #define TLSEXT_CHANNEL_ID_SIZE 128
1156 
1157 /* From RFC4492, used in encoding the curve type in ECParameters */
1158 #define NAMED_CURVE_TYPE 3
1159 
1163 };
1164 
1165 typedef struct cert_st {
1168  /* Chain for this certificate */
1169  STACK_OF(X509) *chain;
1170 
1171  /* key_method, if non-NULL, is a set of callbacks to call for private key
1172  * operations. */
1174 
1175  /* For clients the following masks are of *disabled* key and auth algorithms
1176  * based on the current configuration.
1177  *
1178  * TODO(davidben): Remove these. They get checked twice: when sending the
1179  * ClientHello and when processing the ServerHello. */
1182 
1184  DH *(*dh_tmp_cb)(SSL *ssl, int is_export, int keysize);
1185 
1186  /* sigalgs, if non-NULL, is the set of signature algorithms supported by
1187  * |privatekey| in decreasing order of preference. */
1189  size_t num_sigalgs;
1190 
1191  /* Certificate setup callback: if set is called whenever a
1192  * certificate may be required (client or server). the callback
1193  * can then examine any appropriate parameters and setup any
1194  * certificates required. This allows advanced applications
1195  * to select certificates on the fly: for example based on
1196  * supported signature algorithms or curves. */
1197  int (*cert_cb)(SSL *ssl, void *arg);
1199 
1200  /* Optional X509_STORE for certificate validation. If NULL the parent SSL_CTX
1201  * store is used instead. */
1203 } CERT;
1204 
1205 /* SSL_METHOD is a compatibility structure to support the legacy version-locked
1206  * methods. */
1208  /* version, if non-zero, is the only protocol version acceptable to an
1209  * SSL_CTX initialized from this method. */
1211  /* method is the underlying SSL_PROTOCOL_METHOD that initializes the
1212  * SSL_CTX. */
1214 };
1215 
1216 /* Used to hold functions for SSLv2 or SSLv3/TLSv1 functions */
1218  /* is_dtls is one if the protocol is DTLS and zero otherwise. */
1219  char is_dtls;
1220  /* min_version is the minimum implemented version. */
1222  /* max_version is the maximum implemented version. */
1224  /* version_from_wire maps |wire_version| to a protocol version. On success, it
1225  * sets |*out_version| to the result and returns one. If the version is
1226  * unknown, it returns zero. */
1227  int (*version_from_wire)(uint16_t *out_version, uint16_t wire_version);
1228  /* version_to_wire maps |version| to the wire representation. It is an error
1229  * to call it with an invalid version. */
1230  uint16_t (*version_to_wire)(uint16_t version);
1231  int (*ssl_new)(SSL *ssl);
1232  void (*ssl_free)(SSL *ssl);
1233  /* ssl_get_message reads the next handshake message. If |msg_type| is not -1,
1234  * the message must have the specified type. On success, it returns one and
1235  * sets |ssl->s3->tmp.message_type|, |ssl->init_msg|, and |ssl->init_num|.
1236  * Otherwise, it returns <= 0. */
1237  int (*ssl_get_message)(SSL *ssl, int msg_type,
1238  enum ssl_hash_message_t hash_message);
1239  /* hash_current_message incorporates the current handshake message into the
1240  * handshake hash. It returns one on success and zero on allocation
1241  * failure. */
1242  int (*hash_current_message)(SSL *ssl);
1243  /* release_current_message is called to release the current handshake message.
1244  * If |free_buffer| is one, buffers will also be released. */
1245  void (*release_current_message)(SSL *ssl, int free_buffer);
1246  /* read_app_data reads up to |len| bytes of application data into |buf|. On
1247  * success, it returns the number of bytes read. Otherwise, it returns <= 0
1248  * and sets |*out_got_handshake| to whether the failure was due to a
1249  * post-handshake handshake message. If so, it fills in the current message as
1250  * in |ssl_get_message|. */
1251  int (*read_app_data)(SSL *ssl, int *out_got_handshake, uint8_t *buf, int len,
1252  int peek);
1253  int (*read_change_cipher_spec)(SSL *ssl);
1254  void (*read_close_notify)(SSL *ssl);
1255  int (*write_app_data)(SSL *ssl, const void *buf_, int len);
1256  int (*dispatch_alert)(SSL *ssl);
1257  /* supports_cipher returns one if |cipher| is supported by this protocol and
1258  * zero otherwise. */
1259  int (*supports_cipher)(const SSL_CIPHER *cipher);
1260  /* init_message begins a new handshake message of type |type|. |cbb| is the
1261  * root CBB to be passed into |finish_message|. |*body| is set to a child CBB
1262  * the caller should write to. It returns one on success and zero on error. */
1263  int (*init_message)(SSL *ssl, CBB *cbb, CBB *body, uint8_t type);
1264  /* finish_message finishes a handshake message and prepares it to be
1265  * written. It returns one on success and zero on error. */
1266  int (*finish_message)(SSL *ssl, CBB *cbb);
1267  /* write_message writes the next message to the transport. It returns one on
1268  * success and <= 0 on error. */
1269  int (*write_message)(SSL *ssl);
1270  /* send_change_cipher_spec sends a ChangeCipherSpec message. */
1271  int (*send_change_cipher_spec)(SSL *ssl);
1272  /* expect_flight is called when the handshake expects a flight of messages from
1273  * the peer. */
1274  void (*expect_flight)(SSL *ssl);
1275  /* received_flight is called when the handshake has received a flight of
1276  * messages from the peer. */
1277  void (*received_flight)(SSL *ssl);
1278  /* set_read_state sets |ssl|'s read cipher state to |aead_ctx|. It takes
1279  * ownership of |aead_ctx|. It returns one on success and zero if changing the
1280  * read state is forbidden at this point. */
1281  int (*set_read_state)(SSL *ssl, SSL_AEAD_CTX *aead_ctx);
1282  /* set_write_state sets |ssl|'s write cipher state to |aead_ctx|. It takes
1283  * ownership of |aead_ctx|. It returns one on success and zero if changing the
1284  * write state is forbidden at this point. */
1285  int (*set_write_state)(SSL *ssl, SSL_AEAD_CTX *aead_ctx);
1286 };
1287 
1288 /* This is for the SSLv3/TLSv1.0 differences in crypto/hash stuff It is a bit
1289  * of a mess of functions, but hell, think of it as an opaque structure. */
1291  /* prf computes the PRF function for |ssl|. It writes |out_len| bytes to
1292  * |out|, using |secret| as the secret and |label| as the label. |seed1| and
1293  * |seed2| are concatenated to form the seed parameter. It returns one on
1294  * success and zero on failure. */
1295  int (*prf)(const SSL *ssl, uint8_t *out, size_t out_len,
1296  const uint8_t *secret, size_t secret_len, const char *label,
1297  size_t label_len, const uint8_t *seed1, size_t seed1_len,
1298  const uint8_t *seed2, size_t seed2_len);
1299  int (*final_finish_mac)(SSL *ssl, int from_server, uint8_t *out);
1300 };
1301 
1302 typedef struct ssl3_record_st {
1303  /* type is the record type. */
1305  /* length is the number of unconsumed bytes in the record. */
1307  /* data is a non-owning pointer to the first unconsumed byte of the record. */
1309 } SSL3_RECORD;
1310 
1311 typedef struct ssl3_buffer_st {
1312  /* buf is the memory allocated for this buffer. */
1314  /* offset is the offset into |buf| which the buffer contents start at. */
1316  /* len is the length of the buffer contents from |buf| + |offset|. */
1318  /* cap is how much memory beyond |buf| + |offset| is available. */
1320 } SSL3_BUFFER;
1321 
1322 /* An ssl_shutdown_t describes the shutdown state of one end of the connection,
1323  * whether it is alive or has been shutdown via close_notify or fatal alert. */
1328 };
1329 
1330 typedef struct ssl3_state_st {
1331  uint8_t read_sequence[8];
1332  uint8_t write_sequence[8];
1333 
1334  uint8_t server_random[SSL3_RANDOM_SIZE];
1335  uint8_t client_random[SSL3_RANDOM_SIZE];
1336 
1337  /* have_version is true if the connection's final version is known. Otherwise
1338  * the version has not been negotiated yet. */
1339  unsigned have_version:1;
1340 
1341  /* v2_hello_done is true if the peer's V2ClientHello, if any, has been handled
1342  * and future messages should use the record layer. */
1343  unsigned v2_hello_done:1;
1344 
1345  /* initial_handshake_complete is true if the initial handshake has
1346  * completed. */
1348 
1349  /* read_buffer holds data from the transport to be processed. */
1351  /* write_buffer holds data to be written to the transport. */
1353 
1354  SSL3_RECORD rrec; /* each decoded record goes in here */
1355 
1356  /* partial write - check the numbers match */
1357  unsigned int wnum; /* number of bytes sent so far */
1358  int wpend_tot; /* number bytes written */
1360  int wpend_ret; /* number of bytes submitted */
1362 
1363  /* handshake_buffer, if non-NULL, contains the handshake transcript. */
1365  /* handshake_hash, if initialized with an |EVP_MD|, maintains the handshake
1366  * hash. For TLS 1.1 and below, it is the SHA-1 half. */
1368  /* handshake_md5, if initialized with an |EVP_MD|, maintains the MD5 half of
1369  * the handshake hash for TLS 1.1 and below. */
1371 
1372  /* recv_shutdown is the shutdown state for the receive half of the
1373  * connection. */
1374  enum ssl_shutdown_t recv_shutdown;
1375 
1376  /* recv_shutdown is the shutdown state for the send half of the connection. */
1377  enum ssl_shutdown_t send_shutdown;
1378 
1380  uint8_t send_alert[2];
1381 
1383 
1384  /* empty_record_count is the number of consecutive empty records received. */
1386 
1387  /* warning_alert_count is the number of consecutive warning alerts
1388  * received. */
1390 
1391  /* key_update_count is the number of consecutive KeyUpdates received. */
1393 
1394  /* aead_read_ctx is the current read cipher state. */
1396 
1397  /* aead_write_ctx is the current write cipher state. */
1399 
1400  /* enc_method is the method table corresponding to the current protocol
1401  * version. */
1403 
1404  /* pending_message is the current outgoing handshake message. */
1407 
1408  /* hs is the handshake state for the current handshake or NULL if there isn't
1409  * one. */
1411 
1412  uint8_t write_traffic_secret[EVP_MAX_MD_SIZE];
1414  uint8_t read_traffic_secret[EVP_MAX_MD_SIZE];
1416  uint8_t exporter_secret[EVP_MAX_MD_SIZE];
1418 
1419  /* State pertaining to the pending handshake.
1420  *
1421  * TODO(davidben): Move everything not needed after the handshake completes to
1422  * |hs| and remove this. */
1423  struct {
1425 
1426  /* used to hold the new cipher we are going to use */
1428 
1429  /* used when SSL_ST_FLUSH_DATA is entered */
1431 
1433 
1436 
1440 
1441  /* extended_master_secret indicates whether the extended master secret
1442  * computation is used in this handshake. Note that this is different from
1443  * whether it was used for the current session. If this is a resumption
1444  * handshake then EMS might be negotiated in the client and server hello
1445  * messages, but it doesn't matter if the session that's being resumed
1446  * didn't use it to create the master secret initially. */
1448 
1449  /* peer_signature_algorithm is the signature algorithm used to authenticate
1450  * the peer, or zero if not applicable. */
1452  } tmp;
1453 
1454  /* new_session is the new mutable session being established by the current
1455  * handshake. It should not be cached. */
1457 
1458  /* established_session is the session established by the connection. This
1459  * session is only filled upon the completion of the handshake and is
1460  * immutable. */
1462 
1463  /* session_reused indicates whether a session was resumed. */
1464  unsigned session_reused:1;
1465 
1466  /* Connection binding to prevent renegotiation attacks */
1467  uint8_t previous_client_finished[12];
1469  uint8_t previous_server_finished[12];
1472 
1473  /* Next protocol negotiation. For the client, this is the protocol that we
1474  * sent in NextProtocol and is set when handling ServerHello extensions.
1475  *
1476  * For a server, this is the client's selected_protocol from NextProtocol and
1477  * is set when handling the NextProtocol message, before the Finished
1478  * message. */
1481 
1482  /* ALPN information
1483  * (we are in the process of transitioning from NPN to ALPN.) */
1484 
1485  /* In a server these point to the selected ALPN protocol after the
1486  * ClientHello has been processed. In a client these contain the protocol
1487  * that the server selected once the ServerHello has been processed. */
1490 
1491  /* In a client, this means that the server supported Channel ID and that a
1492  * Channel ID was sent. In a server it means that we echoed support for
1493  * Channel IDs and that tlsext_channel_id will be valid after the
1494  * handshake. */
1496  /* For a server:
1497  * If |tlsext_channel_id_valid| is true, then this contains the
1498  * verified Channel ID from the client: a P256 point, (x,y), where
1499  * each are big-endian values. */
1500  uint8_t tlsext_channel_id[64];
1501 } SSL3_STATE;
1502 
1503 /* lengths of messages */
1504 #define DTLS1_COOKIE_LENGTH 256
1505 
1506 #define DTLS1_RT_HEADER_LENGTH 13
1507 
1508 #define DTLS1_HM_HEADER_LENGTH 12
1509 
1510 #define DTLS1_CCS_HEADER_LENGTH 1
1511 
1512 #define DTLS1_AL_HEADER_LENGTH 2
1513 
1520 };
1521 
1522 /* An hm_fragment is an incoming DTLS message, possibly not yet assembled. */
1523 typedef struct hm_fragment_st {
1524  /* type is the type of the message. */
1526  /* seq is the sequence number of this message. */
1528  /* msg_len is the length of the message body. */
1530  /* data is a pointer to the message, including message header. It has length
1531  * |DTLS1_HM_HEADER_LENGTH| + |msg_len|. */
1533  /* reassembly is a bitmask of |msg_len| bits corresponding to which parts of
1534  * the message have been received. It is NULL if the message is complete. */
1536 } hm_fragment;
1537 
1538 typedef struct dtls1_state_st {
1539  /* send_cookie is true if we are resending the ClientHello
1540  * with a cookie from a HelloVerifyRequest. */
1541  unsigned int send_cookie;
1542 
1544  size_t cookie_len;
1545 
1546  /* The current data and handshake epoch. This is initially undefined, and
1547  * starts at zero once the initial handshake is completed. */
1550 
1551  /* records being received in the current epoch */
1553 
1556 
1557  /* save last sequence number for retransmissions */
1558  uint8_t last_write_sequence[8];
1559 
1560  /* incoming_messages is a ring buffer of incoming handshake messages that have
1561  * yet to be processed. The front of the ring buffer is message number
1562  * |handshake_read_seq|, at position |handshake_read_seq| %
1563  * |SSL_MAX_HANDSHAKE_FLIGHT|. */
1565 
1566  /* outgoing_messages is the queue of outgoing messages from the last handshake
1567  * flight. */
1570 
1571  unsigned int mtu; /* max DTLS packet size */
1572 
1573  /* num_timeouts is the number of times the retransmit timer has fired since
1574  * the last time it was reset. */
1575  unsigned int num_timeouts;
1576 
1577  /* Indicates when the last handshake msg or heartbeat sent will
1578  * timeout. */
1579  struct timeval next_timeout;
1580 
1581  /* timeout_duration_ms is the timeout duration in milliseconds. */
1583 } DTLS1_STATE;
1584 
1585 extern const SSL3_ENC_METHOD TLSv1_enc_data;
1586 extern const SSL3_ENC_METHOD SSLv3_enc_data;
1587 
1588 /* From draft-ietf-tls-tls13-16, used in determining PSK modes. */
1589 #define SSL_PSK_KE 0x0
1590 #define SSL_PSK_DHE_KE 0x1
1591 
1592 #define SSL_PSK_AUTH 0x0
1593 #define SSL_PSK_SIGN_AUTH 0x1
1594 
1595 /* From draft-ietf-tls-tls13-16, used in determining whether to respond with a
1596  * KeyUpdate. */
1597 #define SSL_KEY_UPDATE_NOT_REQUESTED 0
1598 #define SSL_KEY_UPDATE_REQUESTED 1
1599 
1600 CERT *ssl_cert_new(void);
1601 CERT *ssl_cert_dup(CERT *cert);
1602 void ssl_cert_clear_certs(CERT *c);
1603 void ssl_cert_free(CERT *c);
1604 int ssl_get_new_session(SSL *ssl, int is_server);
1605 int ssl_encrypt_ticket(SSL *ssl, CBB *out, const SSL_SESSION *session);
1606 
1607 /* ssl_session_is_context_valid returns one if |session|'s session ID context
1608  * matches the one set on |ssl| and zero otherwise. */
1609 int ssl_session_is_context_valid(const SSL *ssl, const SSL_SESSION *session);
1610 
1611 /* ssl_session_is_time_valid returns one if |session| is still valid and zero if
1612  * it has expired. */
1613 int ssl_session_is_time_valid(const SSL *ssl, const SSL_SESSION *session);
1614 
1615 void ssl_set_session(SSL *ssl, SSL_SESSION *session);
1616 
1621 };
1622 
1623 /* ssl_get_prev_session looks up the previous session based on |ctx|. On
1624  * success, it sets |*out_session| to the session or NULL if none was found. It
1625  * sets |*out_send_ticket| to whether a ticket should be sent at the end of the
1626  * handshake. If the session could not be looked up synchronously, it returns
1627  * |ssl_session_retry| and should be called again. Otherwise, it returns
1628  * |ssl_session_error|. */
1630  SSL *ssl, SSL_SESSION **out_session, int *out_send_ticket,
1631  const struct ssl_early_callback_ctx *ctx);
1632 
1633 /* The following flags determine which parts of the session are duplicated. */
1634 #define SSL_SESSION_DUP_AUTH_ONLY 0x0
1635 #define SSL_SESSION_INCLUDE_TICKET 0x1
1636 #define SSL_SESSION_INCLUDE_NONAUTH 0x2
1637 #define SSL_SESSION_DUP_ALL \
1638  (SSL_SESSION_INCLUDE_TICKET | SSL_SESSION_INCLUDE_NONAUTH)
1639 
1640 /* SSL_SESSION_dup returns a newly-allocated |SSL_SESSION| with a copy of the
1641  * fields in |session| or NULL on error. The new session is non-resumable and
1642  * must be explicitly marked resumable once it has been filled in. */
1644  int dup_flags);
1645 
1647  struct ssl_cipher_preference_list_st *cipher_list);
1649 
1650 int ssl_cert_set0_chain(CERT *cert, STACK_OF(X509) *chain);
1651 int ssl_cert_set1_chain(CERT *cert, STACK_OF(X509) *chain);
1652 int ssl_cert_add0_chain_cert(CERT *cert, X509 *x509);
1653 int ssl_cert_add1_chain_cert(CERT *cert, X509 *x509);
1654 void ssl_cert_set_cert_cb(CERT *cert,
1655  int (*cb)(SSL *ssl, void *arg), void *arg);
1656 
1657 int ssl_verify_cert_chain(SSL *ssl, long *out_verify_result,
1658  STACK_OF(X509) * cert_chain);
1659 void ssl_update_cache(SSL *ssl, int mode);
1660 
1661 /* ssl_get_compatible_server_ciphers determines the key exchange and
1662  * authentication cipher suite masks compatible with the server configuration
1663  * and current ClientHello parameters of |ssl|. It sets |*out_mask_k| to the key
1664  * exchange mask and |*out_mask_a| to the authentication mask. */
1665 void ssl_get_compatible_server_ciphers(SSL *ssl, uint32_t *out_mask_k,
1666  uint32_t *out_mask_a);
1667 
1668 STACK_OF(SSL_CIPHER) *ssl_get_ciphers_by_id(SSL *ssl);
1669 int ssl_verify_alarm_type(long type);
1670 
1671 int ssl3_get_finished(SSL *ssl);
1673 void ssl3_cleanup_key_block(SSL *ssl);
1674 int ssl3_send_alert(SSL *ssl, int level, int desc);
1675 int ssl3_get_message(SSL *ssl, int msg_type,
1676  enum ssl_hash_message_t hash_message);
1677 int ssl3_hash_current_message(SSL *ssl);
1678 void ssl3_release_current_message(SSL *ssl, int free_buffer);
1679 
1680 /* ssl3_cert_verify_hash writes the SSL 3.0 CertificateVerify hash into the
1681  * bytes pointed to by |out| and writes the number of bytes to |*out_len|. |out|
1682  * must have room for |EVP_MAX_MD_SIZE| bytes. It sets |*out_md| to the hash
1683  * function used. It returns one on success and zero on failure. */
1684 int ssl3_cert_verify_hash(SSL *ssl, const EVP_MD **out_md, uint8_t *out,
1685  size_t *out_len, uint16_t signature_algorithm);
1686 
1687 int ssl3_send_finished(SSL *ssl, int a, int b);
1689 int ssl3_dispatch_alert(SSL *ssl);
1690 int ssl3_read_app_data(SSL *ssl, int *out_got_handshake, uint8_t *buf, int len,
1691  int peek);
1693 void ssl3_read_close_notify(SSL *ssl);
1694 int ssl3_read_handshake_bytes(SSL *ssl, uint8_t *buf, int len);
1695 int ssl3_write_app_data(SSL *ssl, const void *buf, int len);
1696 int ssl3_write_bytes(SSL *ssl, int type, const void *buf, int len);
1697 int ssl3_output_cert_chain(SSL *ssl);
1699  SSL *ssl, const struct ssl_early_callback_ctx *client_hello,
1700  const struct ssl_cipher_preference_list_st *srvr);
1701 
1702 int ssl3_new(SSL *ssl);
1703 void ssl3_free(SSL *ssl);
1704 int ssl3_accept(SSL *ssl);
1705 int ssl3_connect(SSL *ssl);
1706 
1707 int ssl3_init_message(SSL *ssl, CBB *cbb, CBB *body, uint8_t type);
1708 int ssl3_finish_message(SSL *ssl, CBB *cbb);
1709 int ssl3_write_message(SSL *ssl);
1710 
1711 void ssl3_expect_flight(SSL *ssl);
1712 void ssl3_received_flight(SSL *ssl);
1713 
1714 int dtls1_init_message(SSL *ssl, CBB *cbb, CBB *body, uint8_t type);
1715 int dtls1_finish_message(SSL *ssl, CBB *cbb);
1716 int dtls1_write_message(SSL *ssl);
1717 
1718 /* dtls1_get_record reads a new input record. On success, it places it in
1719  * |ssl->s3->rrec| and returns one. Otherwise it returns <= 0 on error or if
1720  * more data is needed. */
1721 int dtls1_get_record(SSL *ssl);
1722 
1723 int dtls1_read_app_data(SSL *ssl, int *out_got_handshake, uint8_t *buf, int len,
1724  int peek);
1726 void dtls1_read_close_notify(SSL *ssl);
1727 
1728 int dtls1_write_app_data(SSL *ssl, const void *buf, int len);
1729 
1730 /* dtls1_write_record sends a record. It returns one on success and <= 0 on
1731  * error. */
1732 int dtls1_write_record(SSL *ssl, int type, const uint8_t *buf, size_t len,
1733  enum dtls1_use_epoch_t use_epoch);
1734 
1736 int dtls1_send_finished(SSL *ssl, int a, int b, const char *sender, int slen);
1738 void dtls1_clear_record_buffer(SSL *ssl);
1739 int dtls1_parse_fragment(CBS *cbs, struct hm_header_st *out_hdr,
1740  CBS *out_body);
1741 int dtls1_check_timeout_num(SSL *ssl);
1742 int dtls1_handshake_write(SSL *ssl);
1743 void dtls1_expect_flight(SSL *ssl);
1744 void dtls1_received_flight(SSL *ssl);
1745 
1747 void dtls1_start_timer(SSL *ssl);
1748 void dtls1_stop_timer(SSL *ssl);
1749 int dtls1_is_timer_expired(SSL *ssl);
1750 void dtls1_double_timeout(SSL *ssl);
1751 unsigned int dtls1_min_mtu(void);
1752 
1753 int dtls1_new(SSL *ssl);
1754 int dtls1_accept(SSL *ssl);
1755 int dtls1_connect(SSL *ssl);
1756 void dtls1_free(SSL *ssl);
1757 
1758 int dtls1_get_message(SSL *ssl, int mt, enum ssl_hash_message_t hash_message);
1760 void dtls1_release_current_message(SSL *ssl, int free_buffer);
1761 int dtls1_dispatch_alert(SSL *ssl);
1762 
1763 /* ssl_is_wbio_buffered returns one if |ssl|'s write BIO is buffered and zero
1764  * otherwise. */
1765 int ssl_is_wbio_buffered(const SSL *ssl);
1766 
1767 int ssl_init_wbio_buffer(SSL *ssl);
1768 void ssl_free_wbio_buffer(SSL *ssl);
1769 
1770 int tls1_change_cipher_state(SSL *ssl, int which);
1771 int tls1_setup_key_block(SSL *ssl);
1772 int tls1_handshake_digest(SSL *ssl, uint8_t *out, size_t out_len);
1773 int tls1_generate_master_secret(SSL *ssl, uint8_t *out, const uint8_t *premaster,
1774  size_t premaster_len);
1775 
1776 /* tls1_get_grouplist sets |*out_group_ids| and |*out_group_ids_len| to the
1777  * locally-configured group preference list. */
1778 void tls1_get_grouplist(SSL *ssl, const uint16_t **out_group_ids,
1779  size_t *out_group_ids_len);
1780 
1781 /* tls1_check_group_id returns one if |group_id| is consistent with
1782  * locally-configured group preferences. */
1783 int tls1_check_group_id(SSL *ssl, uint16_t group_id);
1784 
1785 /* tls1_get_shared_group sets |*out_group_id| to the first preferred shared
1786  * group between client and server preferences and returns one. If none may be
1787  * found, it returns zero. */
1788 int tls1_get_shared_group(SSL *ssl, uint16_t *out_group_id);
1789 
1790 /* tls1_set_curves converts the array of |ncurves| NIDs pointed to by |curves|
1791  * into a newly allocated array of TLS group IDs. On success, the function
1792  * returns one and writes the array to |*out_group_ids| and its size to
1793  * |*out_group_ids_len|. Otherwise, it returns zero. */
1794 int tls1_set_curves(uint16_t **out_group_ids, size_t *out_group_ids_len,
1795  const int *curves, size_t ncurves);
1796 
1797 /* tls1_set_curves_list converts the string of curves pointed to by |curves|
1798  * into a newly allocated array of TLS group IDs. On success, the function
1799  * returns one and writes the array to |*out_group_ids| and its size to
1800  * |*out_group_ids_len|. Otherwise, it returns zero. */
1801 int tls1_set_curves_list(uint16_t **out_group_ids, size_t *out_group_ids_len,
1802  const char *curves);
1803 
1804 /* ssl_add_clienthello_tlsext writes ClientHello extensions to |out|. It
1805  * returns one on success and zero on failure. The |header_len| argument is the
1806  * length of the ClientHello written so far and is used to compute the padding
1807  * length. (It does not include the record header.) */
1808 int ssl_add_clienthello_tlsext(SSL *ssl, CBB *out, size_t header_len);
1809 
1812  SSL *ssl, const struct ssl_early_callback_ctx *client_hello);
1814 
1815 #define tlsext_tick_md EVP_sha256
1816 
1817 /* tls_process_ticket processes a session ticket from the client. On success,
1818  * it sets |*out_session| to the decrypted session or NULL if the ticket was
1819  * rejected. If the ticket was valid, it sets |*out_renew_ticket| to whether
1820  * the ticket should be renewed. It returns one on success and zero on fatal
1821  * error. */
1822 int tls_process_ticket(SSL *ssl, SSL_SESSION **out_session,
1823  int *out_renew_ticket, const uint8_t *ticket,
1824  size_t ticket_len, const uint8_t *session_id,
1825  size_t session_id_len);
1826 
1827 /* tls1_verify_channel_id processes the current message as a Channel ID message,
1828  * and verifies the signature. If the key is valid, it saves the Channel ID and
1829  * returns one. Otherwise, it returns zero. */
1830 int tls1_verify_channel_id(SSL *ssl);
1831 
1832 /* tls1_write_channel_id generates a Channel ID message and puts the output in
1833  * |cbb|. |ssl->tlsext_channel_id_private| must already be set before calling.
1834  * This function returns one on success and zero on error. */
1835 int tls1_write_channel_id(SSL *ssl, CBB *cbb);
1836 
1837 /* tls1_channel_id_hash computes the hash to be signed by Channel ID and writes
1838  * it to |out|, which must contain at least |EVP_MAX_MD_SIZE| bytes. It returns
1839  * one on success and zero on failure. */
1840 int tls1_channel_id_hash(SSL *ssl, uint8_t *out, size_t *out_len);
1841 
1843 
1844 /* ssl_do_channel_id_callback checks runs |ssl->ctx->channel_id_cb| if
1845  * necessary. It returns one on success and zero on fatal error. Note that, on
1846  * success, |ssl->tlsext_channel_id_private| may be unset, in which case the
1847  * operation should be retried later. */
1849 
1850 /* ssl3_can_false_start returns one if |ssl| is allowed to False Start and zero
1851  * otherwise. */
1852 int ssl3_can_false_start(const SSL *ssl);
1853 
1854 /* ssl3_get_enc_method returns the SSL3_ENC_METHOD corresponding to
1855  * |version|. */
1857 
1858 /* ssl_get_version_range sets |*out_min_version| and |*out_max_version| to the
1859  * minimum and maximum enabled protocol versions, respectively. */
1860 int ssl_get_version_range(const SSL *ssl, uint16_t *out_min_version,
1861  uint16_t *out_max_version);
1862 
1863 /* ssl3_protocol_version returns |ssl|'s protocol version. It is an error to
1864  * call this function before the version is determined. */
1865 uint16_t ssl3_protocol_version(const SSL *ssl);
1866 
1867 uint32_t ssl_get_algorithm_prf(const SSL *ssl);
1868 
1869 void ssl_set_client_disabled(SSL *ssl);
1870 
1871 void ssl_get_current_time(const SSL *ssl, struct timeval *out_clock);
1872 
1873 
1874 #if defined(__cplusplus)
1875 } /* extern C */
1876 #endif
1877 
1878 #endif /* OPENSSL_HEADER_SSL_INTERNAL_H */
Definition: internal.h:372
uint16_t handshake_read_seq
Definition: internal.h:1555
Definition: internal.h:1161
Definition: internal.h:1311
int SSL_AEAD_CTX_seal(SSL_AEAD_CTX *ctx, uint8_t *out, size_t *out_len, size_t max_out, uint8_t type, uint16_t wire_version, const uint8_t seqnum[8], const uint8_t *in, size_t in_len)
Definition: ssl_aead_ctx.c:247
int tls_seal_record(SSL *ssl, uint8_t *out, size_t *out_len, size_t max_out, uint8_t type, const uint8_t *in, size_t in_len)
Definition: tls_record.c:357
int ssl3_read_handshake_bytes(SSL *ssl, uint8_t *buf, int len)
Definition: s3_pkt.c:425
int nid
Definition: internal.h:563
int ssl_ext_pre_shared_key_parse_clienthello(SSL *ssl, SSL_SESSION **out_session, uint8_t *out_alert, CBS *contents)
Definition: t1_lib.c:1978
Definition: internal.h:1618
char is_ccs
Definition: internal.h:675
void ssl_set_session(SSL *ssl, SSL_SESSION *session)
Definition: ssl_session.c:810
size_t peer_supported_group_list_len
Definition: internal.h:958
uint8_t variable_nonce_len
Definition: internal.h:278
int ssl_is_wbio_buffered(const SSL *ssl)
Definition: ssl_lib.c:2227
int ssl_private_key_supports_signature_algorithm(SSL *ssl, uint16_t signature_algorithm)
Definition: ssl_rsa.c:762
void dtls_clear_outgoing_messages(SSL *ssl)
Definition: d1_both.c:680
Definition: internal.h:1115
int ssl_cipher_requires_server_key_exchange(const SSL_CIPHER *cipher)
Definition: ssl_cipher.c:2025
int tls1_setup_key_block(SSL *ssl)
Definition: t1_enc.c:336
void ssl_cipher_preference_list_free(struct ssl_cipher_preference_list_st *cipher_list)
Definition: ssl_lib.c:1152
uint8_t * next_proto_negotiated
Definition: internal.h:1479
int dtls1_accept(SSL *ssl)
int tls13_process_new_session_ticket(SSL *ssl)
Definition: tls13_client.c:707
unsigned timeout_duration_ms
Definition: internal.h:1582
int ssl3_get_message(SSL *ssl, int msg_type, enum ssl_hash_message_t hash_message)
Definition: s3_both.c:558
uint16_t ssl3_protocol_version(const SSL *ssl)
Definition: ssl_lib.c:2813
unsigned long long uint64_t
Definition: ptypes.h:120
int dtls1_handshake_write(SSL *ssl)
int dtls1_send_finished(SSL *ssl, int a, int b, const char *sender, int slen)
Definition: ssl.h:3635
int ssl_get_new_session(SSL *ssl, int is_server)
Definition: ssl_session.c:427
std::integral_constant< std::uint16_t, V > uint16_t
Definition: Brigand.h:437
uint8_t * key_block
Definition: internal.h:1434
int SSL_ECDH_CTX_init(SSL_ECDH_CTX *ctx, uint16_t group_id)
Definition: ssl_ecdh.c:560
void ssl_do_msg_callback(SSL *ssl, int is_write, int content_type, const void *buf, size_t len)
Definition: ssl_lib.c:2990
void ssl3_free_handshake_hash(SSL *ssl)
Definition: s3_enc.c:258
uint8_t * peer_key
Definition: internal.h:961
const SSL3_ENC_METHOD TLSv1_enc_data
Definition: t1_enc.c:544
enum ssl_private_key_result_t tls13_prepare_certificate_verify(SSL *ssl, int is_first_run)
Definition: tls13_both.c:340
int ssl_write_buffer_init(SSL *ssl, uint8_t **out_ptr, size_t max_len)
Definition: ssl_buffer.c:219
ssl_session_result_t
Definition: internal.h:1617
int ssl_nid_to_group_id(uint16_t *out_group_id, int nid)
Definition: ssl_ecdh.c:542
unsigned received_hello_retry_request
Definition: internal.h:927
Definition: dh.h:249
uint8_t exporter_secret_len
Definition: internal.h:1417
DOMString body
Definition: Notification.idl:65
int ssl_check_leaf_certificate(SSL *ssl, X509 *leaf)
Definition: ssl_cert.c:780
int tls13_set_traffic_key(SSL *ssl, enum tls_record_type_t type, enum evp_aead_direction_t direction, const uint8_t *traffic_secret, size_t traffic_secret_len)
Definition: tls13_enc.c:128
Definition: internal.h:1290
int ssl_ext_key_share_parse_serverhello(SSL *ssl, uint8_t **out_secret, size_t *out_secret_len, uint8_t *out_alert, CBS *contents)
Definition: t1_lib.c:2110
unsigned certificate_status_expected
Definition: internal.h:980
SSL3_BUFFER write_buffer
Definition: internal.h:1352
int ssl_parse_serverhello_tlsext(SSL *ssl, CBS *cbs)
Definition: t1_lib.c:2949
int next_state
Definition: internal.h:1430
int c
Definition: cpp_unittests.cpp:275
char is_dtls
Definition: internal.h:1219
uint8_t * data
Definition: internal.h:1532
OPENSSL_EXPORT pem_password_cb * cb
Definition: pem.h:398
struct ssl_cipher_preference_list_st const char * rule_str
Definition: internal.h:241
uint8_t * alpn_selected
Definition: internal.h:1488
int ssl_ext_key_share_add_serverhello(SSL *ssl, CBB *out)
Definition: t1_lib.c:2218
uint8_t warning_alert_count
Definition: internal.h:1389
Definition: internal.h:1065
enum ssl_hs_wait_t tls13_client_handshake(SSL *ssl)
Definition: tls13_client.c:639
SSL3_RECORD rrec
Definition: internal.h:1354
int ssl_write_buffer_is_pending(const SSL *ssl)
Definition: ssl_buffer.c:205
uint16_t * peer_supported_group_list
Definition: internal.h:957
int dtls1_retransmit_outgoing_messages(SSL *ssl)
Definition: d1_both.c:805
int dtls1_write_record(SSL *ssl, int type, const uint8_t *buf, size_t len, enum dtls1_use_epoch_t use_epoch)
Definition: d1_pkt.c:358
int ssl_add_client_hello_body(SSL *ssl, CBB *body)
Definition: handshake_client.c:652
struct hm_fragment_st hm_fragment
int ssl_cert_add0_chain_cert(CERT *cert, X509 *x509)
Definition: ssl_cert.c:271
Definition: ssl.h:3644
int dtls1_write_app_data(SSL *ssl, const void *buf, int len)
Definition: d1_pkt.c:333
unsigned should_ack_sni
Definition: internal.h:987
int tls13_process_certificate_verify(SSL *ssl)
Definition: tls13_both.c:233
uint16_t received
Definition: internal.h:921
unsigned int uint32_t
Definition: ptypes.h:105
CERT * ssl_cert_new(void)
Definition: ssl_cert.c:142
void ssl_update_cache(SSL *ssl, int mode)
Definition: ssl_lib.c:2092
int dtls_has_incoming_messages(const SSL *ssl)
Definition: d1_both.c:476
Definition: internal.h:445
Definition: internal.h:272
int ssl_has_private_key(const SSL *ssl)
Definition: ssl_rsa.c:427
void ssl3_free(SSL *ssl)
Definition: s3_lib.c:198
unsigned cert_request
Definition: internal.h:975
size_t ssl_cipher_get_record_split_len(const SSL_CIPHER *cipher)
Definition: ssl_cipher.c:2037
int ssl_public_key_verify(SSL *ssl, const uint8_t *signature, size_t signature_len, uint16_t signature_algorithm, EVP_PKEY *pkey, const uint8_t *in, size_t in_len)
Definition: ssl_rsa.c:707
uint8_t new_key_len
Definition: internal.h:1438
size_t ssl_max_seal_overhead(const SSL *ssl)
Definition: tls_record.c:177
Definition: internal.h:1325
uint16_t length
Definition: internal.h:1306
int tls13_init_key_schedule(SSL *ssl, const uint8_t *resumption_ctx, size_t resumption_ctx_len)
Definition: tls13_enc.c:30
Definition: internal.h:1067
Definition: internal.h:1118
ssl_private_key_result_t
Definition: ssl.h:1018
void SSL_ECDH_CTX_init_for_cecpq1(SSL_ECDH_CTX *ctx)
Definition: ssl_ecdh.c:579
uint8_t previous_client_finished_len
Definition: internal.h:1468
enum ssl_open_record_t ssl_process_alert(SSL *ssl, uint8_t *out_alert, const uint8_t *in, size_t in_len)
Definition: tls_record.c:408
Definition: internal.h:67
size_t public_key_len
Definition: internal.h:945
uint8_t uint8_t CBS * cbs
Definition: internal.h:759
int ssl3_write_app_data(SSL *ssl, const void *buf, int len)
Definition: s3_pkt.c:190
uint32_t msg_len
Definition: internal.h:1529
uint16_t ssl_get_grease_value(const SSL *ssl, enum ssl_grease_index_t index)
Definition: handshake_client.c:579
EVP_MD_CTX handshake_md5
Definition: internal.h:1370
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: gl2ext.h:134
#define max_out
Definition: test_opus_api.c:1436
int ssl_session_is_context_valid(const SSL *ssl, const SSL_SESSION *session)
Definition: ssl_session.c:586
void dtls1_read_close_notify(SSL *ssl)
Definition: d1_pkt.c:323
const SSL_CIPHER * new_cipher
Definition: internal.h:1427
uint8_t fixed_nonce[12]
Definition: internal.h:277
Definition: rtpw.c:144
uint32_t len
Definition: internal.h:673
int ssl_record_sequence_update(uint8_t *seq, size_t seq_len)
Definition: tls_record.c:141
uint16_t value
Definition: internal.h:516
int ssl3_output_cert_chain(SSL *ssl)
Definition: s3_both.c:345
ssl_hash_message_t
Definition: internal.h:1160
SSL3_BUFFER read_buffer
Definition: internal.h:1350
uint16_t retry_group
Definition: internal.h:931
int ssl3_accept(SSL *ssl)
Definition: handshake_server.c:188
int SSL_ECDH_CTX_finish(SSL_ECDH_CTX *ctx, uint8_t **out_secret, size_t *out_secret_len, uint8_t *out_alert, const uint8_t *peer_key, size_t peer_key_len)
Definition: ssl_ecdh.c:624
uint8_t empty_record_count
Definition: internal.h:1385
void ssl_read_buffer_consume(SSL *ssl, size_t len)
Definition: ssl_buffer.c:181
int ssl_add_serverhello_tlsext(SSL *ssl, CBB *out)
Definition: t1_lib.c:2678
size_t ssl_record_prefix_len(const SSL *ssl)
Definition: tls_record.c:152
uint32_t pending_message_len
Definition: internal.h:1406
int tls13_process_finished(SSL *ssl)
Definition: tls13_both.c:304
uint16_t min_version
Definition: internal.h:1221
enum ssl_private_key_result_t ssl_private_key_decrypt(SSL *ssl, uint8_t *out, size_t *out_len, size_t max_out, const uint8_t *in, size_t in_len)
Definition: ssl_rsa.c:732
void ssl_write_buffer_set_len(SSL *ssl, size_t len)
Definition: ssl_buffer.c:253
dtls1_use_epoch_t
Definition: internal.h:444
int ssl_read_buffer_extend_to(SSL *ssl, size_t len)
Definition: ssl_buffer.c:152
uint16_t ssl_cipher_get_value(const SSL_CIPHER *cipher)
Definition: ssl_cipher.c:1575
int alert_dispatch
Definition: internal.h:1379
unsigned in_false_start
Definition: internal.h:991
unsigned initial_handshake_complete
Definition: internal.h:1347
int ssl3_update_handshake_hash(SSL *ssl, const uint8_t *in, size_t in_len)
Definition: s3_enc.c:268
void dtls1_double_timeout(SSL *ssl)
Definition: d1_lib.c:200
int ssl_verify_cert_chain(SSL *ssl, long *out_verify_result, STACK_OF(X509) *cert_chain)
Definition: ssl_cert.c:296
void * cert_cb_arg
Definition: internal.h:1198
int SSL_AEAD_CTX_open(SSL_AEAD_CTX *ctx, CBS *out, uint8_t type, uint16_t wire_version, const uint8_t seqnum[8], uint8_t *in, size_t in_len)
Definition: ssl_aead_ctx.c:171
Definition: internal.h:1330
uint8_t previous_server_finished_len
Definition: internal.h:1470
int ssl_log_rsa_client_key_exchange(const SSL *ssl, const uint8_t *encrypted_premaster, size_t encrypted_premaster_len, const uint8_t *premaster, size_t premaster_len)
Definition: ssl_lib.c:2612
char random_variable_nonce
Definition: internal.h:285
void * parse_arg
Definition: internal.h:515
int ssl3_new(SSL *ssl)
Definition: s3_lib.c:173
enum ssl_private_key_result_t ssl_private_key_complete(SSL *ssl, uint8_t *out, size_t *out_len, size_t max_out)
Definition: ssl_rsa.c:755
int tls13_get_cert_verify_signature_input(SSL *ssl, uint8_t **out, size_t *out_len, enum ssl_cert_verify_context_t cert_verify_context)
Definition: tls13_both.c:113
uint32_t frag_off
Definition: internal.h:1518
int ssl3_write_message(SSL *ssl)
Definition: s3_both.c:224
int ssl_cipher_get_evp_aead(const EVP_AEAD **out_aead, size_t *out_mac_secret_len, size_t *out_fixed_iv_len, const SSL_CIPHER *cipher, uint16_t version)
Definition: ssl_cipher.c:776
struct dtls1_state_st DTLS1_STATE
int ssl_name_to_group_id(uint16_t *out_group_id, const char *name, size_t len)
Definition: ssl_ecdh.c:551
enum ssl_open_record_t dtls_open_record(SSL *ssl, uint8_t *out_type, CBS *out, size_t *out_consumed, uint8_t *out_alert, uint8_t *in, size_t in_len)
Definition: dtls_record.c:175
int wpend_type
Definition: internal.h:1359
uint16_t seq
Definition: internal.h:1517
EGLenum EGLObjectKHR EGLLabelKHR label
Definition: eglext.h:121
Definition: internal.h:877
evp_aead_direction_t
Definition: aead.h:291
const SSL3_ENC_METHOD SSLv3_enc_data
Definition: s3_enc.c:409
int ssl3_write_bytes(SSL *ssl, int type, const void *buf, int len)
Definition: s3_pkt.c:198
SSL_custom_ext_add_cb add_callback
Definition: internal.h:511
uint16_t version
Definition: ssl_lib.c:2731
unsigned int num_timeouts
Definition: internal.h:1575
int ssl3_hash_current_message(SSL *ssl)
Definition: s3_both.c:650
uint8_t * buf
Definition: internal.h:1313
uint16_t * peer_sigalgs
Definition: internal.h:950
int custom_ext_parse_serverhello(SSL *ssl, int *out_alert, uint16_t value, const CBS *extension)
Definition: custom_extensions.c:128
X509_STORE * verify_store
Definition: internal.h:1202
void ssl3_expect_flight(SSL *ssl)
Definition: s3_lib.c:169
void dtls1_stop_timer(SSL *ssl)
Definition: d1_lib.c:208
int ssl_add_cert_to_cbb(CBB *cbb, X509 *x509)
Definition: ssl_cert.c:502
int dtls1_hash_current_message(SSL *ssl)
Definition: d1_both.c:445
int dtls1_dispatch_alert(SSL *ssl)
Definition: d1_pkt.c:398
size_t next_proto_negotiated_len
Definition: internal.h:1480
GLenum mode
Definition: gl2.h:461
Definition: internal.h:370
int dtls1_read_app_data(SSL *ssl, int *out_got_handshake, uint8_t *buf, int len, int peek)
Definition: d1_pkt.c:200
void ssl_set_client_disabled(SSL *ssl)
Definition: t1_lib.c:526
ssl_open_record_t
Definition: internal.h:367
int state
Definition: internal.h:895
int tls12_check_peer_sigalg(SSL *ssl, int *out_alert, uint16_t sigalg)
Definition: t1_lib.c:508
size_t num_peer_sigalgs
Definition: internal.h:952
uint8_t write_traffic_secret_len
Definition: internal.h:1413
int ssl_early_callback_get_extension(const struct ssl_early_callback_ctx *ctx, CBS *out, uint16_t extension_type)
Definition: t1_lib.c:271
#define desc
Definition: extension_set.h:320
SSL_ECDH_CTX ecdh_ctx
Definition: internal.h:925
int ssl_ext_pre_shared_key_parse_serverhello(SSL *ssl, uint8_t *out_alert, CBS *contents)
Definition: t1_lib.c:1959
uint8_t new_fixed_iv_len
Definition: internal.h:1439
void * add_arg
Definition: internal.h:512
size_t num_sigalgs
Definition: internal.h:1189
SSL_custom_ext_free_cb free_callback
Definition: internal.h:513
const gchar * contents
Definition: WebKitDOMDeprecated.h:51
Definition: ssl.h:3769
void dtls1_release_current_message(SSL *ssl, int free_buffer)
Definition: d1_both.c:454
DH * dh_tmp
Definition: internal.h:1183
int ssl3_read_app_data(SSL *ssl, int *out_got_handshake, uint8_t *buf, int len, int peek)
Definition: s3_pkt.c:334
size_t key_share_bytes_len
Definition: internal.h:940
uint16_t seq
Definition: internal.h:1527
int tls13_derive_traffic_secret_0(SSL *ssl)
Definition: tls13_enc.c:261
Definition: internal.h:878
uint64_t max_seq_num
Definition: internal.h:350
Definition: internal.h:369
size_t SSL_AEAD_CTX_explicit_nonce_len(SSL_AEAD_CTX *ctx)
Definition: ssl_aead_ctx.c:124
int(* SSL_custom_ext_add_cb)(SSL *ssl, unsigned extension_value, const uint8_t **out, size_t *out_len, int *out_alert_value, void *add_arg)
Definition: ssl.h:1468
def do_handshake(request, dispatcher, allowDraft75=False, strict=False)
Definition: __init__.py:52
uint8_t * pending_message
Definition: internal.h:1405
GLint level
Definition: gl2.h:402
const SSL3_ENC_METHOD * enc_method
Definition: internal.h:1402
Definition: internal.h:875
void
Definition: AVFoundationCFSoftLinking.h:81
Definition: internal.h:74
const SSL_PROTOCOL_METHOD * method
Definition: internal.h:1213
enum ssl_open_record_t tls_open_record(SSL *ssl, uint8_t *out_type, CBS *out, size_t *out_consumed, uint8_t *out_alert, uint8_t *in, size_t in_len)
Definition: tls_record.c:195
int reuse_message
Definition: internal.h:1432
size_t ssl_max_handshake_message_len(const SSL *ssl)
Definition: s3_both.c:358
void ssl_cert_free(CERT *c)
Definition: ssl_cert.c:232
int
Definition: runtests.py:53
uint8_t uint8_t * out_leaf_sha256
Definition: internal.h:759
unsigned int mtu
Definition: internal.h:1571
int ssl3_init_handshake_buffer(SSL *ssl)
Definition: s3_enc.c:221
struct ssl3_record_st SSL3_RECORD
enum ssl_private_key_result_t ssl_private_key_sign(SSL *ssl, uint8_t *out, size_t *out_len, size_t max_out, uint16_t signature_algorithm, const uint8_t *in, size_t in_len)
Definition: ssl_rsa.c:653
int dtls1_finish_message(SSL *ssl, CBB *cbb)
Definition: d1_both.c:739
CERT * ssl_cert_dup(CERT *cert)
Definition: ssl_cert.c:153
Definition: internal.h:1523
size_t hash_len
Definition: internal.h:897
Definition: internal.h:1514
OPENSSL_EXPORT int nid
Definition: x509.h:1056
Definition: internal.h:344
struct ssl_cipher_preference_list_st ** out_cipher_list
Definition: internal.h:239
int ssl_verify_alarm_type(long type)
Definition: s3_both.c:672
int ssl3_can_false_start(const SSL *ssl)
Definition: ssl_lib.c:2700
int SSL_ECDH_CTX_get_key(SSL_ECDH_CTX *ctx, CBS *cbs, CBS *out)
Definition: ssl_ecdh.c:598
Definition: evp.h:730
void ssl_do_info_callback(const SSL *ssl, int type, int value)
Definition: ssl_lib.c:2977
Definition: internal.h:446
int wpend_ret
Definition: internal.h:1360
ssl_shutdown_t
Definition: internal.h:1324
void ssl_get_compatible_server_ciphers(SSL *ssl, uint32_t *out_mask_k, uint32_t *out_mask_a)
Definition: ssl_lib.c:2048
OPENSSL_EXPORT const ASN1_OBJECT int const unsigned char int len
Definition: x509.h:1053
void SSL_AEAD_CTX_free(SSL_AEAD_CTX *ctx)
Definition: ssl_aead_ctx.c:116
Definition: internal.h:1326
DTLS1_BITMAP bitmap
Definition: internal.h:1552
Definition: bytestring.h:286
size_t server_params_len
Definition: internal.h:967
int dtls1_supports_cipher(const SSL_CIPHER *cipher)
Definition: d1_lib.c:116
const SSL_CIPHER * cipher
Definition: internal.h:273
int tls1_verify_channel_id(SSL *ssl)
Definition: t1_lib.c:3202
uint32_t frag_len
Definition: internal.h:1519
uint8_t fixed_nonce_len
Definition: internal.h:278
const uint8_t * wpend_buf
Definition: internal.h:1361
void(* SSL_custom_ext_free_cb)(SSL *ssl, unsigned extension_value, const uint8_t *out, void *add_arg)
Definition: ssl.h:1477
char omit_version_in_ad
Definition: internal.h:291
Definition: internal.h:874
int ssl_add_client_CA_list(SSL *ssl, CBB *cbb)
Definition: ssl_cert.c:635
Definition: internal.h:1117
uint32_t ssl_get_algorithm_prf(const SSL *ssl)
Definition: s3_lib.c:323
int int * out
Definition: gcc-loops.cpp:206
#define OPENSSL_EXPORT
Definition: base.h:160
void ssl_handshake_free(SSL_HANDSHAKE *hs)
Definition: s3_both.c:145
uint16_t group_id
Definition: internal.h:564
int ssl_cert_set0_chain(CERT *cert, STACK_OF(X509) *chain)
Definition: ssl_cert.c:246
int ssl_add_clienthello_tlsext(SSL *ssl, CBB *out, size_t header_len)
Definition: t1_lib.c:2571
uint16_t r_epoch
Definition: internal.h:1548
GLuint index
Definition: gl2.h:383
char omit_ad
Definition: internal.h:293
struct ssl3_buffer_st SSL3_BUFFER
int tls13_get_context_hashes(SSL *ssl, uint8_t *out, size_t *out_len)
Definition: tls13_enc.c:92
EGLAttrib * value
Definition: eglext.h:120
struct cert_st CERT
void ssl_read_buffer_discard(SSL *ssl)
Definition: ssl_buffer.c:194
unsigned session_reused
Definition: internal.h:1464
EGLContext ctx
Definition: eglext.h:192
unsigned char uint8_t
Definition: ptypes.h:89
const SSL3_ENC_METHOD * ssl3_get_enc_method(uint16_t version)
Definition: ssl_lib.c:2714
Definition: aead.h:146
char extended_master_secret
Definition: internal.h:1447
Definition: internal.h:1165
int ssl_ext_pre_shared_key_add_serverhello(SSL *ssl, CBB *out)
Definition: t1_lib.c:2008
int SSL_ECDH_CTX_add_key(SSL_ECDH_CTX *ctx, CBB *cbb, CBB *out_contents)
Definition: ssl_ecdh.c:605
Definition: bytestring.h:37
Definition: internal.h:815
Definition: internal.h:1116
EVP_MD_CTX handshake_hash
Definition: internal.h:1367
size_t cookie_len
Definition: internal.h:935
int tls1_set_curves_list(uint16_t **out_group_ids, size_t *out_group_ids_len, const char *curves)
Definition: t1_lib.c:388
Definition: RTCSessionDescription.idl:46
void ssl_write_buffer_clear(SSL *ssl)
Definition: ssl_buffer.c:309
unsigned short uint16_t
Definition: ptypes.h:97
Definition: ssl.h:2939
struct ssl3_state_st SSL3_STATE
uint64_t map
Definition: internal.h:347
uint8_t outgoing_messages_len
Definition: internal.h:1569
void dtls1_received_flight(SSL *ssl)
Definition: d1_lib.c:268
Definition: accept.py:1
OPENSSL_MSVC_PRAGMA(warning(disable:4702))
Definition: e_aes.c:70
int tls1_choose_signature_algorithm(SSL *ssl, uint16_t *out)
Definition: t1_lib.c:3142
void ssl3_read_close_notify(SSL *ssl)
Definition: s3_pkt.c:418
uint8_t * ssl_read_buffer(SSL *ssl)
Definition: ssl_buffer.c:97
Definition: internal.h:1066
int message_type
Definition: internal.h:1424
Definition: buf.h:71
void dtls1_expect_flight(SSL *ssl)
Definition: d1_lib.c:264
uint8_t * out_alert
Definition: internal.h:759
void ssl_read_buffer_clear(SSL *ssl)
Definition: ssl_buffer.c:200
EGLImageKHR EGLint * name
Definition: eglext.h:851
int tls13_handshake(SSL *ssl)
Definition: tls13_both.c:36
int ssl_add_cert_chain(SSL *ssl, CBB *cbb)
Definition: ssl_cert.c:525
Definition: internal.h:1619
Definition: internal.h:1620
char omit_length_in_ad
Definition: internal.h:288
size_t peer_key_len
Definition: internal.h:962
X509 * x509
Definition: internal.h:1166
size_t cookie_len
Definition: internal.h:1544
unsigned v2_hello_done
Definition: internal.h:1343
int tls13_set_handshake_traffic(SSL *ssl)
Definition: tls13_enc.c:225
uint8_t * data
Definition: internal.h:672
void dtls1_start_timer(SSL *ssl)
Definition: d1_lib.c:124
int dtls1_write_message(SSL *ssl)
Definition: d1_both.c:761
void dtls_clear_incoming_messages(SSL *ssl)
Definition: d1_both.c:469
Definition: x509_vfy.h:181
int(* SSL_custom_ext_parse_cb)(SSL *ssl, unsigned extension_value, const uint8_t *contents, size_t contents_len, int *out_alert_value, void *parse_arg)
Definition: ssl.h:1490
int ssl_write_buffer_flush(SSL *ssl)
Definition: ssl_buffer.c:296
char * peer_psk_identity_hint
Definition: internal.h:998
GLboolean GLboolean GLboolean GLboolean a
Definition: gl2ext.h:306
unsigned next_proto_neg_seen
Definition: internal.h:994
Definition: ssl.h:1026
int tls13_prepare_certificate(SSL *ssl)
Definition: tls13_both.c:326
int ssl3_init_handshake_hash(SSL *ssl)
Definition: s3_enc.c:239
STACK_OF(SSL_CIPHER) *ssl_create_cipher_list(const SSL_PROTOCOL_METHOD *ssl_method
void ssl_cert_set_cert_cb(CERT *cert, int(*cb)(SSL *ssl, void *arg), void *arg)
Definition: ssl_cert.c:291
SSL_AEAD_CTX * aead_read_ctx
Definition: internal.h:1395
Definition: internal.h:1207
void ssl3_cleanup_key_block(SSL *ssl)
Definition: s3_enc.c:212
void dtls1_clear_record_buffer(SSL *ssl)
int ssl3_connect(SSL *ssl)
Definition: handshake_client.c:188
ssl_hs_wait_t
Definition: internal.h:873
int tls_process_ticket(SSL *ssl, SSL_SESSION **out_session, int *out_renew_ticket, const uint8_t *ticket, size_t ticket_len, const uint8_t *session_id, size_t session_id_len)
Definition: t1_lib.c:2964
int ssl_private_key_type(SSL *ssl)
Definition: ssl_rsa.c:444
uint8_t session_tickets_sent
Definition: internal.h:971
Definition: x509.h:147
void dtls1_free(SSL *ssl)
Definition: d1_lib.c:102
size_t tls12_get_verify_sigalgs(const SSL *ssl, const uint16_t **out)
Definition: t1_lib.c:503
Definition: internal.h:814
uint16_t max_version
Definition: internal.h:1223
struct ssl_cipher_preference_list_st * ssl_get_cipher_preferences(SSL *ssl)
Definition: s3_lib.c:223
SSL_AEAD_CTX * SSL_AEAD_CTX_new(enum evp_aead_direction_t direction, uint16_t version, const SSL_CIPHER *cipher, const uint8_t *enc_key, size_t enc_key_len, const uint8_t *mac_key, size_t mac_key_len, const uint8_t *fixed_iv, size_t fixed_iv_len)
Definition: ssl_aead_ctx.c:31
int ssl_get_version_range(const SSL *ssl, uint16_t *out_min_version, uint16_t *out_max_version)
Definition: ssl_lib.c:2743
uint8_t read_traffic_secret_len
Definition: internal.h:1415
SSL_SESSION * established_session
Definition: internal.h:1461
uint8_t * cookie
Definition: internal.h:934
unsigned long which
Definition: KeyboardEvent.idl:72
Definition: internal.h:562
int tls13_finished_mac(SSL *ssl, uint8_t *out, size_t *out_len, int is_server)
Definition: tls13_enc.c:323
Definition: internal.h:371
uint8_t * public_key
Definition: internal.h:944
enum ssl_hs_wait_t tls13_server_handshake(SSL *ssl)
Definition: tls13_server.c:613
uint16_t SSL_ECDH_CTX_get_id(const SSL_ECDH_CTX *ctx)
Definition: ssl_ecdh.c:594
int ssl_ext_key_share_parse_clienthello(SSL *ssl, int *out_found, uint8_t **out_secret, size_t *out_secret_len, uint8_t *out_alert, CBS *contents)
Definition: t1_lib.c:2140
EGLenum type
Definition: eglext.h:63
void ssl3_free_handshake_buffer(SSL *ssl)
Definition: s3_enc.c:263
void SSL_CUSTOM_EXTENSION_free(SSL_CUSTOM_EXTENSION *custom_extension)
Definition: custom_extensions.c:28
tls_record_type_t
Definition: internal.h:813
int custom_ext_add_clienthello(SSL *ssl, CBB *extensions)
Definition: custom_extensions.c:124
uint8_t new_mac_secret_len
Definition: internal.h:1437
OPENSSL_EXPORT SSL_SESSION * SSL_SESSION_dup(SSL_SESSION *session, int dup_flags)
Definition: ssl_session.c:179
int tls1_change_cipher_state(SSL *ssl, int which)
Definition: t1_enc.c:261
Definition: digest.h:245
unsigned int dtls1_min_mtu(void)
Definition: d1_both.c:843
int ssl_cert_set1_chain(CERT *cert, STACK_OF(X509) *chain)
Definition: ssl_cert.c:252
int wpend_tot
Definition: internal.h:1358
EVP_PKEY * privatekey
Definition: internal.h:1167
Definition: internal.h:882
uint32_t mask_k
Definition: internal.h:1180
void ssl_clear_tls13_state(SSL *ssl)
Definition: tls13_client.c:748
uint32_t mask_a
Definition: internal.h:1181
int dtls1_connect(SSL *ssl)
Definition: internal.h:1302
int dtls1_send_change_cipher_spec(SSL *ssl)
Definition: d1_both.c:834
size_t ssl_read_buffer_len(const SSL *ssl)
Definition: ssl_buffer.c:101
#define EVP_MAX_MD_SIZE
Definition: digest.h:144
Definition: internal.h:876
uint8_t * key_share_bytes
Definition: internal.h:939
void ssl_cert_clear_certs(CERT *c)
Definition: ssl_cert.c:218
const SSL_CIPHER * ssl3_choose_cipher(SSL *ssl, const struct ssl_early_callback_ctx *client_hello, const struct ssl_cipher_preference_list_st *srvr)
Definition: s3_lib.c:243
int tls13_advance_key_schedule(SSL *ssl, const uint8_t *in, size_t len)
Definition: tls13_enc.c:55
Definition: internal.h:816
Definition: x509.h:241
Definition: internal.h:1119
int tls13_resumption_context(SSL *ssl, uint8_t *out, size_t out_len, const SSL_SESSION *session)
Definition: tls13_enc.c:365
void ssl_free_wbio_buffer(SSL *ssl)
Definition: ssl_lib.c:2250
int dtls_seal_record(SSL *ssl, uint8_t *out, size_t *out_len, size_t max_out, uint8_t type, const uint8_t *in, size_t in_len, enum dtls1_use_epoch_t use_epoch)
Definition: dtls_record.c:252
uint16_t sent
Definition: internal.h:917
int send_connection_binding
Definition: internal.h:1471
Definition: internal.h:510
int ssl_init_wbio_buffer(SSL *ssl)
Definition: ssl_lib.c:2231
uint16_t version
Definition: internal.h:1210
int custom_ext_add_serverhello(SSL *ssl, CBB *extensions)
Definition: custom_extensions.c:179
unsigned int wnum
Definition: internal.h:1357
uint8_t * reassembly
Definition: internal.h:1535
SSL_custom_ext_parse_cb parse_callback
Definition: internal.h:514
int SSL_ECDH_CTX_offer(SSL_ECDH_CTX *ctx, CBB *out_public_key)
Definition: ssl_ecdh.c:612
int ssl3_supports_cipher(const SSL_CIPHER *cipher)
Definition: s3_lib.c:165
Definition: ssl.h:4031
int dtls1_parse_fragment(CBS *cbs, struct hm_header_st *out_hdr, CBS *out_body)
Definition: d1_both.c:491
uint16_t cap
Definition: internal.h:1319
int ssl3_read_change_cipher_spec(SSL *ssl)
Definition: s3_pkt.c:388
int tls1_write_channel_id(SSL *ssl, CBB *cbb)
Definition: t1_lib.c:3290
const EVP_MD * ssl_get_handshake_digest(uint32_t algorithm_prf)
Definition: ssl_cipher.c:906
SSL_SESSION * new_session
Definition: internal.h:1456
ssl_cert_verify_context_t
Definition: internal.h:1064
uint8_t key_update_count
Definition: internal.h:1392
int tls1_channel_id_hash(SSL *ssl, uint8_t *out, size_t *out_len)
Definition: t1_lib.c:3339
size_t SSL_AEAD_CTX_max_overhead(SSL_AEAD_CTX *ctx)
Definition: ssl_aead_ctx.c:135
int tls13_resumption_psk(SSL *ssl, uint8_t *out, size_t out_len, const SSL_SESSION *session)
Definition: tls13_enc.c:356
int ssl_cert_add1_chain_cert(CERT *cert, X509 *x509)
Definition: ssl_cert.c:282
int tls13_prepare_finished(SSL *ssl)
Definition: tls13_both.c:402
uint32_t msg_len
Definition: internal.h:1516
int dtls1_read_change_cipher_spec(SSL *ssl)
Definition: d1_pkt.c:283
struct dtls_outgoing_message_st DTLS_OUTGOING_MESSAGE
Definition: internal.h:817
SSL_AEAD_CTX * aead_write_ctx
Definition: internal.h:1398
ssl_grease_index_t
Definition: internal.h:1114
Definition: WebCryptoAPI.idl:27
Definition: internal.h:879
int ssl_cipher_uses_certificate_auth(const SSL_CIPHER *cipher)
Definition: ssl_cipher.c:2021
int tls13_process_certificate(SSL *ssl, int allow_anonymous)
Definition: tls13_both.c:166
midl_pragma warning(disable:2111) midl_pragma warning(disable
Definition: Accessible2.idl:352
void ssl3_release_current_message(SSL *ssl, int free_buffer)
Definition: s3_both.c:655
uint16_t len
Definition: internal.h:1317
void SSL_ECDH_CTX_init_for_dhe(SSL_ECDH_CTX *ctx, DH *params)
Definition: ssl_ecdh.c:572
Definition: internal.h:881
uint8_t * certificate_types
Definition: internal.h:1006
GLboolean GLboolean GLboolean b
Definition: gl2ext.h:306
uint8_t type
Definition: internal.h:1304
int tls1_set_curves(uint16_t **out_group_ids, size_t *out_group_ids_len, const int *curves, size_t ncurves)
Definition: t1_lib.c:365
Definition: internal.h:880
Definition: internal.h:1327
int ssl_client_cipher_list_contains_cipher(const struct ssl_early_callback_ctx *client_hello, uint16_t id)
Definition: handshake_server.c:538
int ssl3_send_change_cipher_spec(SSL *ssl)
Definition: s3_both.c:338
uint8_t type
Definition: internal.h:1525
int ssl_log_secret(const SSL *ssl, const char *label, const uint8_t *secret, size_t secret_len)
Definition: ssl_lib.c:2647
int ssl_do_channel_id_callback(SSL *ssl)
Definition: t1_lib.c:3407
int ssl3_init_message(SSL *ssl, CBB *cbb, CBB *body, uint8_t type)
Definition: s3_both.c:184
size_t num_certificate_types
Definition: internal.h:1007
int total_renegotiations
Definition: internal.h:1382
uint8_t * data
Definition: internal.h:1308
struct dtls1_bitmap_st DTLS1_BITMAP
Definition: internal.h:671
int ssl_session_is_time_valid(const SSL *ssl, const SSL_SESSION *session)
Definition: ssl_session.c:595
int tls13_check_message_type(SSL *ssl, int type)
Definition: tls13_both.c:292
int ssl3_cert_verify_hash(SSL *ssl, const EVP_MD **out_md, uint8_t *out, size_t *out_len, uint16_t signature_algorithm)
Definition: s3_enc.c:383
Definition: ssl.h:3620
int ssl_has_certificate(const SSL *ssl)
Definition: ssl_cert.c:445
int ssl_cipher_get_key_type(const SSL_CIPHER *cipher)
Definition: ssl_cipher.c:2009
int tls13_finalize_keys(SSL *ssl)
Definition: tls13_enc.c:305
const char * extension
Definition: MIMETypeRegistry.cpp:58
void ssl_get_current_time(const SSL *ssl, struct timeval *out_clock)
Definition: ssl_lib.c:3057
void tls1_get_grouplist(SSL *ssl, const uint16_t **out_group_ids, size_t *out_group_ids_len)
Definition: t1_lib.c:315
uint32_t sent
Definition: internal.h:907
uint16_t offset
Definition: internal.h:1315
int ssl3_dispatch_alert(SSL *ssl)
Definition: s3_pkt.c:477
int ssl_encrypt_ticket(SSL *ssl, CBB *out, const SSL_SESSION *session)
Definition: ssl_session.c:494
void ssl3_received_flight(SSL *ssl)
Definition: s3_lib.c:171
unsigned int send_cookie
Definition: internal.h:1541
def peek(state, pos=0)
Definition: http_header_util.py:61
uint16_t peer_signature_algorithm
Definition: internal.h:1451
int dtls1_init_message(SSL *ssl, CBB *cbb, CBB *body, uint8_t type)
Definition: d1_both.c:725
SSL_HANDSHAKE * ssl_handshake_new(enum ssl_hs_wait_t(*do_handshake)(SSL *ssl))
Definition: s3_both.c:133
uint16_t * sigalgs
Definition: internal.h:1188
int ssl_is_ecdsa_key_type(int type)
Definition: ssl_rsa.c:431
Definition: internal.h:368
BUF_MEM * handshake_buffer
Definition: internal.h:1364
Definition: internal.h:1538
size_t ssl_seal_align_prefix_len(const SSL *ssl)
Definition: tls_record.c:162
int tls1_parse_peer_sigalgs(SSL *ssl, const CBS *sigalgs)
Definition: t1_lib.c:3100
#define SSL_MAX_HANDSHAKE_FLIGHT
Definition: internal.h:658
int tls1_generate_master_secret(SSL *ssl, uint8_t *out, const uint8_t *premaster, size_t premaster_len)
Definition: t1_enc.c:470
int tls13_post_handshake(SSL *ssl)
Definition: tls13_both.c:441
int dtls1_new(SSL *ssl)
Definition: d1_lib.c:78
#define DTLS1_COOKIE_LENGTH
Definition: internal.h:1504
SSL_HANDSHAKE * hs
Definition: internal.h:1410
int SSL_ECDH_CTX_accept(SSL_ECDH_CTX *ctx, CBB *out_public_key, uint8_t **out_secret, size_t *out_secret_len, uint8_t *out_alert, const uint8_t *peer_key, size_t peer_key_len)
Definition: ssl_ecdh.c:616
uint16_t handshake_write_seq
Definition: internal.h:1554
Definition: internal.h:885
GLenum GLint * params
Definition: gl2.h:440
int ssl3_finish_message(SSL *ssl, CBB *cbb)
Definition: s3_both.c:202
int tls1_check_group_id(SSL *ssl, uint16_t group_id)
Definition: t1_lib.c:431
uint8_t key_block_length
Definition: internal.h:1435
unsigned ocsp_stapling_requested
Definition: internal.h:983
int dtls1_is_timer_expired(SSL *ssl)
Definition: d1_lib.c:183
int ssl_parse_clienthello_tlsext(SSL *ssl, const struct ssl_early_callback_ctx *client_hello)
Definition: t1_lib.c:2800
int tls1_record_handshake_hashes_for_channel_id(SSL *ssl)
Definition: t1_lib.c:3385
int ssl_early_callback_init(SSL *ssl, struct ssl_early_callback_ctx *ctx, const uint8_t *in, size_t in_len)
Definition: t1_lib.c:206
uint16_t epoch
Definition: internal.h:674
int tls13_export_keying_material(SSL *ssl, uint8_t *out, size_t out_len, const char *label, size_t label_len, const uint8_t *context, size_t context_len, int use_context)
Definition: tls13_enc.c:375
unsigned have_version
Definition: internal.h:1339
U_CDECL_BEGIN typedef void * context
Definition: ustring.h:1023
size_t ssl_private_key_max_signature_len(SSL *ssl)
Definition: ssl_rsa.c:459
int ssl_do_client_cert_cb(SSL *ssl, int *out_should_retry)
Definition: ssl_cert.c:663
const SSL_PRIVATE_KEY_METHOD * key_method
Definition: internal.h:1173
int tls1_handshake_digest(SSL *ssl, uint8_t *out, size_t out_len)
Definition: t1_enc.c:425
void SSL_ECDH_CTX_cleanup(SSL_ECDH_CTX *ctx)
Definition: ssl_ecdh.c:585
int dtls1_get_message(SSL *ssl, int mt, enum ssl_hash_message_t hash_message)
Definition: d1_both.c:396
enum ssl_session_result_t ssl_get_prev_session(SSL *ssl, SSL_SESSION **out_session, int *out_send_ticket, const struct ssl_early_callback_ctx *ctx)
Definition: ssl_session.c:684
size_t alpn_selected_len
Definition: internal.h:1489
int custom_ext_parse_clienthello(SSL *ssl, int *out_alert, uint16_t value, const CBS *extension)
Definition: custom_extensions.c:155
EVP_AEAD_CTX ctx
Definition: internal.h:274
uint8_t type
Definition: internal.h:1515
Definition: internal.h:373
char tlsext_channel_id_valid
Definition: internal.h:1495
char variable_nonce_included_in_record
Definition: internal.h:281
Definition: internal.h:1120
uint32_t received
Definition: internal.h:910
int dtls1_check_timeout_num(SSL *ssl)
Definition: d1_lib.c:219
char xor_fixed_nonce
Definition: internal.h:296
uint16_t w_epoch
Definition: internal.h:1549
int ssl3_get_finished(SSL *ssl)
Definition: s3_both.c:291
int dtls1_get_record(SSL *ssl)
Definition: d1_pkt.c:128
int tls1_get_shared_group(SSL *ssl, uint16_t *out_group_id)
Definition: t1_lib.c:325
Definition: internal.h:1217
int ssl3_send_finished(SSL *ssl, int a, int b)
Definition: s3_both.c:242
uint8_t * server_params
Definition: internal.h:966
Definition: internal.h:1162
int tls13_rotate_traffic_key(SSL *ssl, enum evp_aead_direction_t direction)
Definition: tls13_enc.c:279
int ssl3_send_alert(SSL *ssl, int level, int desc)
Definition: s3_pkt.c:451
#define SSL3_RANDOM_SIZE
Definition: ssl3.h:204