1 /* Copyright (C) 1995-1998 Eric Young (eay (at) cryptsoft.com) 2 * All rights reserved. 3 * 4 * This package is an SSL implementation written 5 * by Eric Young (eay (at) 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 (at) 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 (at) 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 (at) 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 (at) 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 (at) cryptsoft.com). This product includes software written by Tim 107 * Hudson (tjh (at) 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. */ 154 OPENSSL_MSVC_PRAGMA(warning(push, 3)) 155 #include <winsock2.h> 156 OPENSSL_MSVC_PRAGMA(warning(pop)) 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_kGENERIC 0x00000010L 175 176 /* Bits for |algorithm_auth| (server authentication). */ 177 #define SSL_aRSA 0x00000001L 178 #define SSL_aECDSA 0x00000002L 179 /* SSL_aPSK is set for both PSK and ECDHE_PSK. */ 180 #define SSL_aPSK 0x00000004L 181 #define SSL_aGENERIC 0x00000008L 182 183 #define SSL_aCERT (SSL_aRSA | SSL_aECDSA) 184 185 /* Bits for |algorithm_enc| (symmetric encryption). */ 186 #define SSL_3DES 0x00000001L 187 #define SSL_AES128 0x00000002L 188 #define SSL_AES256 0x00000004L 189 #define SSL_AES128GCM 0x00000008L 190 #define SSL_AES256GCM 0x00000010L 191 #define SSL_eNULL 0x00000020L 192 #define SSL_CHACHA20POLY1305 0x00000040L 193 194 #define SSL_AES (SSL_AES128 | SSL_AES256 | SSL_AES128GCM | SSL_AES256GCM) 195 196 /* Bits for |algorithm_mac| (symmetric authentication). */ 197 #define SSL_SHA1 0x00000001L 198 #define SSL_SHA256 0x00000002L 199 #define SSL_SHA384 0x00000004L 200 /* SSL_AEAD is set for all AEADs. */ 201 #define SSL_AEAD 0x00000008L 202 203 /* Bits for |algorithm_prf| (handshake digest). */ 204 #define SSL_HANDSHAKE_MAC_DEFAULT 0x1 205 #define SSL_HANDSHAKE_MAC_SHA256 0x2 206 #define SSL_HANDSHAKE_MAC_SHA384 0x4 207 208 /* SSL_MAX_DIGEST is the number of digest types which exist. When adding a new 209 * one, update the table in ssl_cipher.c. */ 210 #define SSL_MAX_DIGEST 4 211 212 /* ssl_cipher_get_evp_aead sets |*out_aead| to point to the correct EVP_AEAD 213 * object for |cipher| protocol version |version|. It sets |*out_mac_secret_len| 214 * and |*out_fixed_iv_len| to the MAC key length and fixed IV length, 215 * respectively. The MAC key length is zero except for legacy block and stream 216 * ciphers. It returns 1 on success and 0 on error. */ 217 int ssl_cipher_get_evp_aead(const EVP_AEAD **out_aead, 218 size_t *out_mac_secret_len, 219 size_t *out_fixed_iv_len, 220 const SSL_CIPHER *cipher, uint16_t version); 221 222 /* ssl_get_handshake_digest returns the |EVP_MD| corresponding to 223 * |algorithm_prf| and the |version|. */ 224 const EVP_MD *ssl_get_handshake_digest(uint32_t algorithm_prf, 225 uint16_t version); 226 227 /* ssl_create_cipher_list evaluates |rule_str| according to the ciphers in 228 * |ssl_method|. It sets |*out_cipher_list| to a newly-allocated 229 * |ssl_cipher_preference_list_st| containing the result. It returns 1 on 230 * success and 0 on failure. If |strict| is true, nonsense will be rejected. If 231 * false, nonsense will be silently ignored. An empty result is considered an 232 * error regardless of |strict|. */ 233 int ssl_create_cipher_list( 234 const SSL_PROTOCOL_METHOD *ssl_method, 235 struct ssl_cipher_preference_list_st **out_cipher_list, 236 const char *rule_str, int strict); 237 238 /* ssl_cipher_get_value returns the cipher suite id of |cipher|. */ 239 uint16_t ssl_cipher_get_value(const SSL_CIPHER *cipher); 240 241 /* ssl_cipher_get_key_type returns the |EVP_PKEY_*| value corresponding to the 242 * server key used in |cipher| or |EVP_PKEY_NONE| if there is none. */ 243 int ssl_cipher_get_key_type(const SSL_CIPHER *cipher); 244 245 /* ssl_cipher_uses_certificate_auth returns one if |cipher| authenticates the 246 * server and, optionally, the client with a certificate. Otherwise it returns 247 * zero. */ 248 int ssl_cipher_uses_certificate_auth(const SSL_CIPHER *cipher); 249 250 /* ssl_cipher_requires_server_key_exchange returns 1 if |cipher| requires a 251 * ServerKeyExchange message. Otherwise it returns 0. 252 * 253 * This function may return zero while still allowing |cipher| an optional 254 * ServerKeyExchange. This is the case for plain PSK ciphers. */ 255 int ssl_cipher_requires_server_key_exchange(const SSL_CIPHER *cipher); 256 257 /* ssl_cipher_get_record_split_len, for TLS 1.0 CBC mode ciphers, returns the 258 * length of an encrypted 1-byte record, for use in record-splitting. Otherwise 259 * it returns zero. */ 260 size_t ssl_cipher_get_record_split_len(const SSL_CIPHER *cipher); 261 262 263 /* Transcript layer. */ 264 265 /* SSL_TRANSCRIPT maintains the handshake transcript as a combination of a 266 * buffer and running hash. */ 267 typedef struct ssl_transcript_st { 268 /* buffer, if non-NULL, contains the handshake transcript. */ 269 BUF_MEM *buffer; 270 /* hash, if initialized with an |EVP_MD|, maintains the handshake hash. For 271 * TLS 1.1 and below, it is the SHA-1 half. */ 272 EVP_MD_CTX hash; 273 /* md5, if initialized with an |EVP_MD|, maintains the MD5 half of the 274 * handshake hash for TLS 1.1 and below. */ 275 EVP_MD_CTX md5; 276 } SSL_TRANSCRIPT; 277 278 /* SSL_TRANSCRIPT_init initializes the handshake transcript. If called on an 279 * existing transcript, it resets the transcript and hash. It returns one on 280 * success and zero on failure. */ 281 int SSL_TRANSCRIPT_init(SSL_TRANSCRIPT *transcript); 282 283 /* SSL_TRANSCRIPT_init_hash initializes the handshake hash based on the PRF and 284 * contents of the handshake transcript. Subsequent calls to 285 * |SSL_TRANSCRIPT_update| will update the rolling hash. It returns one on 286 * success and zero on failure. It is an error to call this function after the 287 * handshake buffer is released. */ 288 int SSL_TRANSCRIPT_init_hash(SSL_TRANSCRIPT *transcript, uint16_t version, 289 int algorithm_prf); 290 291 /* SSL_TRANSCRIPT_cleanup cleans up the hash and transcript. */ 292 void SSL_TRANSCRIPT_cleanup(SSL_TRANSCRIPT *transcript); 293 294 /* SSL_TRANSCRIPT_free_buffer releases the handshake buffer. Subsequent calls to 295 * |SSL_TRANSCRIPT_update| will not update the handshake buffer. */ 296 void SSL_TRANSCRIPT_free_buffer(SSL_TRANSCRIPT *transcript); 297 298 /* SSL_TRANSCRIPT_digest_len returns the length of the PRF hash. */ 299 size_t SSL_TRANSCRIPT_digest_len(const SSL_TRANSCRIPT *transcript); 300 301 /* SSL_TRANSCRIPT_md returns the PRF hash. For TLS 1.1 and below, this is 302 * |EVP_md5_sha1|. */ 303 const EVP_MD *SSL_TRANSCRIPT_md(const SSL_TRANSCRIPT *transcript); 304 305 /* SSL_TRANSCRIPT_update adds |in| to the handshake buffer and handshake hash, 306 * whichever is enabled. It returns one on success and zero on failure. */ 307 int SSL_TRANSCRIPT_update(SSL_TRANSCRIPT *transcript, const uint8_t *in, 308 size_t in_len); 309 310 /* SSL_TRANSCRIPT_get_hash writes the handshake hash to |out| which must have 311 * room for at least |SSL_TRANSCRIPT_digest_len| bytes. On success, it returns 312 * one and sets |*out_len| to the number of bytes written. Otherwise, it returns 313 * zero. */ 314 int SSL_TRANSCRIPT_get_hash(const SSL_TRANSCRIPT *transcript, uint8_t *out, 315 size_t *out_len); 316 317 /* SSL_TRANSCRIPT_ssl3_cert_verify_hash writes the SSL 3.0 CertificateVerify 318 * hash into the bytes pointed to by |out| and writes the number of bytes to 319 * |*out_len|. |out| must have room for |EVP_MAX_MD_SIZE| bytes. It returns one 320 * on success and zero on failure. */ 321 int SSL_TRANSCRIPT_ssl3_cert_verify_hash(SSL_TRANSCRIPT *transcript, 322 uint8_t *out, size_t *out_len, 323 const SSL_SESSION *session, 324 int signature_algorithm); 325 326 /* SSL_TRANSCRIPT_finish_mac computes the MAC for the Finished message into the 327 * bytes pointed by |out| and writes the number of bytes to |*out_len|. |out| 328 * must have room for |EVP_MAX_MD_SIZE| bytes. It returns one on success and 329 * zero on failure. */ 330 int SSL_TRANSCRIPT_finish_mac(SSL_TRANSCRIPT *transcript, uint8_t *out, 331 size_t *out_len, const SSL_SESSION *session, 332 int from_server, uint16_t version); 333 334 /* tls1_prf computes the PRF function for |ssl|. It writes |out_len| bytes to 335 * |out|, using |secret| as the secret and |label| as the label. |seed1| and 336 * |seed2| are concatenated to form the seed parameter. It returns one on 337 * success and zero on failure. */ 338 int tls1_prf(const EVP_MD *digest, uint8_t *out, size_t out_len, 339 const uint8_t *secret, size_t secret_len, const char *label, 340 size_t label_len, const uint8_t *seed1, size_t seed1_len, 341 const uint8_t *seed2, size_t seed2_len); 342 343 344 /* Encryption layer. */ 345 346 /* SSL_AEAD_CTX contains information about an AEAD that is being used to encrypt 347 * an SSL connection. */ 348 typedef struct ssl_aead_ctx_st { 349 const SSL_CIPHER *cipher; 350 EVP_AEAD_CTX ctx; 351 /* fixed_nonce contains any bytes of the nonce that are fixed for all 352 * records. */ 353 uint8_t fixed_nonce[12]; 354 uint8_t fixed_nonce_len, variable_nonce_len; 355 /* version is the protocol version that should be used with this AEAD. */ 356 uint16_t version; 357 /* variable_nonce_included_in_record is non-zero if the variable nonce 358 * for a record is included as a prefix before the ciphertext. */ 359 unsigned variable_nonce_included_in_record : 1; 360 /* random_variable_nonce is non-zero if the variable nonce is 361 * randomly generated, rather than derived from the sequence 362 * number. */ 363 unsigned random_variable_nonce : 1; 364 /* omit_length_in_ad is non-zero if the length should be omitted in the 365 * AEAD's ad parameter. */ 366 unsigned omit_length_in_ad : 1; 367 /* omit_version_in_ad is non-zero if the version should be omitted 368 * in the AEAD's ad parameter. */ 369 unsigned omit_version_in_ad : 1; 370 /* omit_ad is non-zero if the AEAD's ad parameter should be omitted. */ 371 unsigned omit_ad : 1; 372 /* xor_fixed_nonce is non-zero if the fixed nonce should be XOR'd into the 373 * variable nonce rather than prepended. */ 374 unsigned xor_fixed_nonce : 1; 375 } SSL_AEAD_CTX; 376 377 /* SSL_AEAD_CTX_new creates a newly-allocated |SSL_AEAD_CTX| using the supplied 378 * key material. It returns NULL on error. Only one of |SSL_AEAD_CTX_open| or 379 * |SSL_AEAD_CTX_seal| may be used with the resulting object, depending on 380 * |direction|. |version| is the normalized protocol version, so DTLS 1.0 is 381 * represented as 0x0301, not 0xffef. */ 382 SSL_AEAD_CTX *SSL_AEAD_CTX_new(enum evp_aead_direction_t direction, 383 uint16_t version, const SSL_CIPHER *cipher, 384 const uint8_t *enc_key, size_t enc_key_len, 385 const uint8_t *mac_key, size_t mac_key_len, 386 const uint8_t *fixed_iv, size_t fixed_iv_len); 387 388 /* SSL_AEAD_CTX_free frees |ctx|. */ 389 void SSL_AEAD_CTX_free(SSL_AEAD_CTX *ctx); 390 391 /* SSL_AEAD_CTX_explicit_nonce_len returns the length of the explicit nonce for 392 * |ctx|, if any. |ctx| may be NULL to denote the null cipher. */ 393 size_t SSL_AEAD_CTX_explicit_nonce_len(const SSL_AEAD_CTX *ctx); 394 395 /* SSL_AEAD_CTX_max_overhead returns the maximum overhead of calling 396 * |SSL_AEAD_CTX_seal|. |ctx| may be NULL to denote the null cipher. */ 397 size_t SSL_AEAD_CTX_max_overhead(const SSL_AEAD_CTX *ctx); 398 399 /* SSL_AEAD_CTX_open authenticates and decrypts |in_len| bytes from |in| 400 * in-place. On success, it sets |*out| to the plaintext in |in| and returns 401 * one. Otherwise, it returns zero. |ctx| may be NULL to denote the null cipher. 402 * The output will always be |explicit_nonce_len| bytes ahead of |in|. */ 403 int SSL_AEAD_CTX_open(SSL_AEAD_CTX *ctx, CBS *out, uint8_t type, 404 uint16_t wire_version, const uint8_t seqnum[8], 405 uint8_t *in, size_t in_len); 406 407 /* SSL_AEAD_CTX_seal encrypts and authenticates |in_len| bytes from |in| and 408 * writes the result to |out|. It returns one on success and zero on 409 * error. |ctx| may be NULL to denote the null cipher. 410 * 411 * If |in| and |out| alias then |out| + |explicit_nonce_len| must be == |in|. */ 412 int SSL_AEAD_CTX_seal(SSL_AEAD_CTX *ctx, uint8_t *out, size_t *out_len, 413 size_t max_out, uint8_t type, uint16_t wire_version, 414 const uint8_t seqnum[8], const uint8_t *in, 415 size_t in_len); 416 417 418 /* DTLS replay bitmap. */ 419 420 /* DTLS1_BITMAP maintains a sliding window of 64 sequence numbers to detect 421 * replayed packets. It should be initialized by zeroing every field. */ 422 typedef struct dtls1_bitmap_st { 423 /* map is a bit mask of the last 64 sequence numbers. Bit 424 * |1<<i| corresponds to |max_seq_num - i|. */ 425 uint64_t map; 426 /* max_seq_num is the largest sequence number seen so far as a 64-bit 427 * integer. */ 428 uint64_t max_seq_num; 429 } DTLS1_BITMAP; 430 431 432 /* Record layer. */ 433 434 /* ssl_record_sequence_update increments the sequence number in |seq|. It 435 * returns one on success and zero on wraparound. */ 436 int ssl_record_sequence_update(uint8_t *seq, size_t seq_len); 437 438 /* ssl_record_prefix_len returns the length of the prefix before the ciphertext 439 * of a record for |ssl|. 440 * 441 * TODO(davidben): Expose this as part of public API once the high-level 442 * buffer-free APIs are available. */ 443 size_t ssl_record_prefix_len(const SSL *ssl); 444 445 enum ssl_open_record_t { 446 ssl_open_record_success, 447 ssl_open_record_discard, 448 ssl_open_record_partial, 449 ssl_open_record_close_notify, 450 ssl_open_record_fatal_alert, 451 ssl_open_record_error, 452 }; 453 454 /* tls_open_record decrypts a record from |in| in-place. 455 * 456 * If the input did not contain a complete record, it returns 457 * |ssl_open_record_partial|. It sets |*out_consumed| to the total number of 458 * bytes necessary. It is guaranteed that a successful call to |tls_open_record| 459 * will consume at least that many bytes. 460 * 461 * Otherwise, it sets |*out_consumed| to the number of bytes of input 462 * consumed. Note that input may be consumed on all return codes if a record was 463 * decrypted. 464 * 465 * On success, it returns |ssl_open_record_success|. It sets |*out_type| to the 466 * record type and |*out| to the record body in |in|. Note that |*out| may be 467 * empty. 468 * 469 * If a record was successfully processed but should be discarded, it returns 470 * |ssl_open_record_discard|. 471 * 472 * If a record was successfully processed but is a close_notify or fatal alert, 473 * it returns |ssl_open_record_close_notify| or |ssl_open_record_fatal_alert|. 474 * 475 * On failure, it returns |ssl_open_record_error| and sets |*out_alert| to an 476 * alert to emit. */ 477 enum ssl_open_record_t tls_open_record(SSL *ssl, uint8_t *out_type, CBS *out, 478 size_t *out_consumed, uint8_t *out_alert, 479 uint8_t *in, size_t in_len); 480 481 /* dtls_open_record implements |tls_open_record| for DTLS. It never returns 482 * |ssl_open_record_partial| but otherwise behaves analogously. */ 483 enum ssl_open_record_t dtls_open_record(SSL *ssl, uint8_t *out_type, CBS *out, 484 size_t *out_consumed, 485 uint8_t *out_alert, uint8_t *in, 486 size_t in_len); 487 488 /* ssl_seal_align_prefix_len returns the length of the prefix before the start 489 * of the bulk of the ciphertext when sealing a record with |ssl|. Callers may 490 * use this to align buffers. 491 * 492 * Note when TLS 1.0 CBC record-splitting is enabled, this includes the one byte 493 * record and is the offset into second record's ciphertext. Thus sealing a 494 * small record may result in a smaller output than this value. 495 * 496 * TODO(davidben): Is this alignment valuable? Record-splitting makes this a 497 * mess. */ 498 size_t ssl_seal_align_prefix_len(const SSL *ssl); 499 500 /* tls_seal_record seals a new record of type |type| and body |in| and writes it 501 * to |out|. At most |max_out| bytes will be written. It returns one on success 502 * and zero on error. If enabled, |tls_seal_record| implements TLS 1.0 CBC 1/n-1 503 * record splitting and may write two records concatenated. 504 * 505 * For a large record, the bulk of the ciphertext will begin 506 * |ssl_seal_align_prefix_len| bytes into out. Aligning |out| appropriately may 507 * improve performance. It writes at most |in_len| + |SSL_max_seal_overhead| 508 * bytes to |out|. 509 * 510 * |in| and |out| may not alias. */ 511 int tls_seal_record(SSL *ssl, uint8_t *out, size_t *out_len, size_t max_out, 512 uint8_t type, const uint8_t *in, size_t in_len); 513 514 enum dtls1_use_epoch_t { 515 dtls1_use_previous_epoch, 516 dtls1_use_current_epoch, 517 }; 518 519 /* dtls_max_seal_overhead returns the maximum overhead, in bytes, of sealing a 520 * record. */ 521 size_t dtls_max_seal_overhead(const SSL *ssl, enum dtls1_use_epoch_t use_epoch); 522 523 /* dtls_seal_prefix_len returns the number of bytes of prefix to reserve in 524 * front of the plaintext when sealing a record in-place. */ 525 size_t dtls_seal_prefix_len(const SSL *ssl, enum dtls1_use_epoch_t use_epoch); 526 527 /* dtls_seal_record implements |tls_seal_record| for DTLS. |use_epoch| selects 528 * which epoch's cipher state to use. Unlike |tls_seal_record|, |in| and |out| 529 * may alias but, if they do, |in| must be exactly |dtls_seal_prefix_len| bytes 530 * ahead of |out|. */ 531 int dtls_seal_record(SSL *ssl, uint8_t *out, size_t *out_len, size_t max_out, 532 uint8_t type, const uint8_t *in, size_t in_len, 533 enum dtls1_use_epoch_t use_epoch); 534 535 /* ssl_process_alert processes |in| as an alert and updates |ssl|'s shutdown 536 * state. It returns one of |ssl_open_record_discard|, |ssl_open_record_error|, 537 * |ssl_open_record_close_notify|, or |ssl_open_record_fatal_alert| as 538 * appropriate. */ 539 enum ssl_open_record_t ssl_process_alert(SSL *ssl, uint8_t *out_alert, 540 const uint8_t *in, size_t in_len); 541 542 543 /* Private key operations. */ 544 545 /* ssl_has_private_key returns one if |ssl| has a private key 546 * configured and zero otherwise. */ 547 int ssl_has_private_key(const SSL *ssl); 548 549 /* ssl_is_ecdsa_key_type returns one if |type| is an ECDSA key type and zero 550 * otherwise. */ 551 int ssl_is_ecdsa_key_type(int type); 552 553 /* ssl_private_key_* call the corresponding function on the 554 * |SSL_PRIVATE_KEY_METHOD| for |ssl|, if configured. Otherwise, they implement 555 * the operation with |EVP_PKEY|. */ 556 557 int ssl_private_key_type(SSL *ssl); 558 559 size_t ssl_private_key_max_signature_len(SSL *ssl); 560 561 enum ssl_private_key_result_t ssl_private_key_sign( 562 SSL *ssl, uint8_t *out, size_t *out_len, size_t max_out, 563 uint16_t signature_algorithm, const uint8_t *in, size_t in_len); 564 565 enum ssl_private_key_result_t ssl_private_key_decrypt( 566 SSL *ssl, uint8_t *out, size_t *out_len, size_t max_out, 567 const uint8_t *in, size_t in_len); 568 569 enum ssl_private_key_result_t ssl_private_key_complete(SSL *ssl, uint8_t *out, 570 size_t *out_len, 571 size_t max_out); 572 573 /* ssl_private_key_supports_signature_algorithm returns one if |ssl|'s private 574 * key supports |signature_algorithm| and zero otherwise. */ 575 int ssl_private_key_supports_signature_algorithm(SSL *ssl, 576 uint16_t signature_algorithm); 577 578 /* ssl_public_key_verify verifies that the |signature| is valid for the public 579 * key |pkey| and input |in|, using the |signature_algorithm| specified. */ 580 int ssl_public_key_verify( 581 SSL *ssl, const uint8_t *signature, size_t signature_len, 582 uint16_t signature_algorithm, EVP_PKEY *pkey, 583 const uint8_t *in, size_t in_len); 584 585 586 /* Custom extensions */ 587 588 typedef struct ssl_handshake_st SSL_HANDSHAKE; 589 590 /* ssl_custom_extension (a.k.a. SSL_CUSTOM_EXTENSION) is a structure that 591 * contains information about custom-extension callbacks. */ 592 struct ssl_custom_extension { 593 SSL_custom_ext_add_cb add_callback; 594 void *add_arg; 595 SSL_custom_ext_free_cb free_callback; 596 SSL_custom_ext_parse_cb parse_callback; 597 void *parse_arg; 598 uint16_t value; 599 }; 600 601 void SSL_CUSTOM_EXTENSION_free(SSL_CUSTOM_EXTENSION *custom_extension); 602 603 int custom_ext_add_clienthello(SSL_HANDSHAKE *hs, CBB *extensions); 604 int custom_ext_parse_serverhello(SSL_HANDSHAKE *hs, int *out_alert, 605 uint16_t value, const CBS *extension); 606 int custom_ext_parse_clienthello(SSL_HANDSHAKE *hs, int *out_alert, 607 uint16_t value, const CBS *extension); 608 int custom_ext_add_serverhello(SSL_HANDSHAKE *hs, CBB *extensions); 609 610 611 /* ECDH groups. */ 612 613 typedef struct ssl_ecdh_ctx_st SSL_ECDH_CTX; 614 615 /* An SSL_ECDH_METHOD is an implementation of ECDH-like key exchanges for 616 * TLS. */ 617 typedef struct ssl_ecdh_method_st { 618 int nid; 619 uint16_t group_id; 620 const char name[8]; 621 622 /* cleanup releases state in |ctx|. */ 623 void (*cleanup)(SSL_ECDH_CTX *ctx); 624 625 /* offer generates a keypair and writes the public value to 626 * |out_public_key|. It returns one on success and zero on error. */ 627 int (*offer)(SSL_ECDH_CTX *ctx, CBB *out_public_key); 628 629 /* accept performs a key exchange against the |peer_key| generated by |offer|. 630 * On success, it returns one, writes the public value to |out_public_key|, 631 * and sets |*out_secret| and |*out_secret_len| to a newly-allocated buffer 632 * containing the shared secret. The caller must release this buffer with 633 * |OPENSSL_free|. On failure, it returns zero and sets |*out_alert| to an 634 * alert to send to the peer. */ 635 int (*accept)(SSL_ECDH_CTX *ctx, CBB *out_public_key, uint8_t **out_secret, 636 size_t *out_secret_len, uint8_t *out_alert, 637 const uint8_t *peer_key, size_t peer_key_len); 638 639 /* finish performs a key exchange against the |peer_key| generated by 640 * |accept|. On success, it returns one and sets |*out_secret| and 641 * |*out_secret_len| to a newly-allocated buffer containing the shared 642 * secret. The caller must release this buffer with |OPENSSL_free|. On 643 * failure, it returns zero and sets |*out_alert| to an alert to send to the 644 * peer. */ 645 int (*finish)(SSL_ECDH_CTX *ctx, uint8_t **out_secret, size_t *out_secret_len, 646 uint8_t *out_alert, const uint8_t *peer_key, 647 size_t peer_key_len); 648 649 /* get_key initializes |out| with a length-prefixed key from |cbs|. It returns 650 * one on success and zero on error. */ 651 int (*get_key)(CBS *cbs, CBS *out); 652 653 /* add_key initializes |out_contents| to receive a key. Typically it will then 654 * be passed to |offer| or |accept|. It returns one on success and zero on 655 * error. */ 656 int (*add_key)(CBB *cbb, CBB *out_contents); 657 } SSL_ECDH_METHOD; 658 659 struct ssl_ecdh_ctx_st { 660 const SSL_ECDH_METHOD *method; 661 void *data; 662 }; 663 664 /* ssl_nid_to_group_id looks up the group corresponding to |nid|. On success, it 665 * sets |*out_group_id| to the group ID and returns one. Otherwise, it returns 666 * zero. */ 667 int ssl_nid_to_group_id(uint16_t *out_group_id, int nid); 668 669 /* ssl_name_to_group_id looks up the group corresponding to the |name| string 670 * of length |len|. On success, it sets |*out_group_id| to the group ID and 671 * returns one. Otherwise, it returns zero. */ 672 int ssl_name_to_group_id(uint16_t *out_group_id, const char *name, size_t len); 673 674 /* SSL_ECDH_CTX_init sets up |ctx| for use with curve |group_id|. It returns one 675 * on success and zero on error. */ 676 int SSL_ECDH_CTX_init(SSL_ECDH_CTX *ctx, uint16_t group_id); 677 678 /* SSL_ECDH_CTX_init_for_dhe sets up |ctx| for use with legacy DHE-based ciphers 679 * where the server specifies a group. It takes ownership of |params|. */ 680 void SSL_ECDH_CTX_init_for_dhe(SSL_ECDH_CTX *ctx, DH *params); 681 682 /* SSL_ECDH_CTX_cleanup releases memory associated with |ctx|. It is legal to 683 * call it in the zero state. */ 684 void SSL_ECDH_CTX_cleanup(SSL_ECDH_CTX *ctx); 685 686 /* SSL_ECDH_CTX_get_id returns the group ID for |ctx|. */ 687 uint16_t SSL_ECDH_CTX_get_id(const SSL_ECDH_CTX *ctx); 688 689 /* SSL_ECDH_CTX_get_key calls the |get_key| method of |SSL_ECDH_METHOD|. */ 690 int SSL_ECDH_CTX_get_key(SSL_ECDH_CTX *ctx, CBS *cbs, CBS *out); 691 692 /* SSL_ECDH_CTX_add_key calls the |add_key| method of |SSL_ECDH_METHOD|. */ 693 int SSL_ECDH_CTX_add_key(SSL_ECDH_CTX *ctx, CBB *cbb, CBB *out_contents); 694 695 /* SSL_ECDH_CTX_offer calls the |offer| method of |SSL_ECDH_METHOD|. */ 696 int SSL_ECDH_CTX_offer(SSL_ECDH_CTX *ctx, CBB *out_public_key); 697 698 /* SSL_ECDH_CTX_accept calls the |accept| method of |SSL_ECDH_METHOD|. */ 699 int SSL_ECDH_CTX_accept(SSL_ECDH_CTX *ctx, CBB *out_public_key, 700 uint8_t **out_secret, size_t *out_secret_len, 701 uint8_t *out_alert, const uint8_t *peer_key, 702 size_t peer_key_len); 703 704 /* SSL_ECDH_CTX_finish the |finish| method of |SSL_ECDH_METHOD|. */ 705 int SSL_ECDH_CTX_finish(SSL_ECDH_CTX *ctx, uint8_t **out_secret, 706 size_t *out_secret_len, uint8_t *out_alert, 707 const uint8_t *peer_key, size_t peer_key_len); 708 709 /* Handshake messages. */ 710 711 /* SSL_MAX_HANDSHAKE_FLIGHT is the number of messages, including 712 * ChangeCipherSpec, in the longest handshake flight. Currently this is the 713 * client's second leg in a full handshake when client certificates, NPN, and 714 * Channel ID, are all enabled. */ 715 #define SSL_MAX_HANDSHAKE_FLIGHT 7 716 717 /* ssl_max_handshake_message_len returns the maximum number of bytes permitted 718 * in a handshake message for |ssl|. */ 719 size_t ssl_max_handshake_message_len(const SSL *ssl); 720 721 /* dtls_clear_incoming_messages releases all buffered incoming messages. */ 722 void dtls_clear_incoming_messages(SSL *ssl); 723 724 /* dtls_has_incoming_messages returns one if there are buffered incoming 725 * messages ahead of the current message and zero otherwise. */ 726 int dtls_has_incoming_messages(const SSL *ssl); 727 728 typedef struct dtls_outgoing_message_st { 729 uint8_t *data; 730 uint32_t len; 731 uint16_t epoch; 732 char is_ccs; 733 } DTLS_OUTGOING_MESSAGE; 734 735 /* dtls_clear_outgoing_messages releases all buffered outgoing messages. */ 736 void dtls_clear_outgoing_messages(SSL *ssl); 737 738 739 /* Callbacks. */ 740 741 /* ssl_do_info_callback calls |ssl|'s info callback, if set. */ 742 void ssl_do_info_callback(const SSL *ssl, int type, int value); 743 744 /* ssl_do_msg_callback calls |ssl|'s message callback, if set. */ 745 void ssl_do_msg_callback(SSL *ssl, int is_write, int content_type, 746 const void *buf, size_t len); 747 748 749 /* Transport buffers. */ 750 751 /* ssl_read_buffer returns a pointer to contents of the read buffer. */ 752 uint8_t *ssl_read_buffer(SSL *ssl); 753 754 /* ssl_read_buffer_len returns the length of the read buffer. */ 755 size_t ssl_read_buffer_len(const SSL *ssl); 756 757 /* ssl_read_buffer_extend_to extends the read buffer to the desired length. For 758 * TLS, it reads to the end of the buffer until the buffer is |len| bytes 759 * long. For DTLS, it reads a new packet and ignores |len|. It returns one on 760 * success, zero on EOF, and a negative number on error. 761 * 762 * It is an error to call |ssl_read_buffer_extend_to| in DTLS when the buffer is 763 * non-empty. */ 764 int ssl_read_buffer_extend_to(SSL *ssl, size_t len); 765 766 /* ssl_read_buffer_consume consumes |len| bytes from the read buffer. It 767 * advances the data pointer and decrements the length. The memory consumed will 768 * remain valid until the next call to |ssl_read_buffer_extend| or it is 769 * discarded with |ssl_read_buffer_discard|. */ 770 void ssl_read_buffer_consume(SSL *ssl, size_t len); 771 772 /* ssl_read_buffer_discard discards the consumed bytes from the read buffer. If 773 * the buffer is now empty, it releases memory used by it. */ 774 void ssl_read_buffer_discard(SSL *ssl); 775 776 /* ssl_read_buffer_clear releases all memory associated with the read buffer and 777 * zero-initializes it. */ 778 void ssl_read_buffer_clear(SSL *ssl); 779 780 /* ssl_write_buffer_is_pending returns one if the write buffer has pending data 781 * and zero if is empty. */ 782 int ssl_write_buffer_is_pending(const SSL *ssl); 783 784 /* ssl_write_buffer_init initializes the write buffer. On success, it sets 785 * |*out_ptr| to the start of the write buffer with space for up to |max_len| 786 * bytes. It returns one on success and zero on failure. Call 787 * |ssl_write_buffer_set_len| to complete initialization. */ 788 int ssl_write_buffer_init(SSL *ssl, uint8_t **out_ptr, size_t max_len); 789 790 /* ssl_write_buffer_set_len is called after |ssl_write_buffer_init| to complete 791 * initialization after |len| bytes are written to the buffer. */ 792 void ssl_write_buffer_set_len(SSL *ssl, size_t len); 793 794 /* ssl_write_buffer_flush flushes the write buffer to the transport. It returns 795 * one on success and <= 0 on error. For DTLS, whether or not the write 796 * succeeds, the write buffer will be cleared. */ 797 int ssl_write_buffer_flush(SSL *ssl); 798 799 /* ssl_write_buffer_clear releases all memory associated with the write buffer 800 * and zero-initializes it. */ 801 void ssl_write_buffer_clear(SSL *ssl); 802 803 804 /* Certificate functions. */ 805 806 /* ssl_has_certificate returns one if a certificate and private key are 807 * configured and zero otherwise. */ 808 int ssl_has_certificate(const SSL *ssl); 809 810 /* ssl_parse_cert_chain parses a certificate list from |cbs| in the format used 811 * by a TLS Certificate message. On success, it returns a newly-allocated 812 * |CRYPTO_BUFFER| list and advances |cbs|. Otherwise, it returns NULL and sets 813 * |*out_alert| to an alert to send to the peer. 814 * 815 * If the list is non-empty then |*out_pubkey| will be set to a freshly 816 * allocated public-key from the leaf certificate. 817 * 818 * If the list is non-empty and |out_leaf_sha256| is non-NULL, it writes the 819 * SHA-256 hash of the leaf to |out_leaf_sha256|. */ 820 STACK_OF(CRYPTO_BUFFER) *ssl_parse_cert_chain(uint8_t *out_alert, 821 EVP_PKEY **out_pubkey, 822 uint8_t *out_leaf_sha256, 823 CBS *cbs, 824 CRYPTO_BUFFER_POOL *pool); 825 826 /* ssl_add_cert_chain adds |ssl|'s certificate chain to |cbb| in the format used 827 * by a TLS Certificate message. If there is no certificate chain, it emits an 828 * empty certificate list. It returns one on success and zero on error. */ 829 int ssl_add_cert_chain(SSL *ssl, CBB *cbb); 830 831 /* ssl_cert_check_digital_signature_key_usage parses the DER-encoded, X.509 832 * certificate in |in| and returns one if doesn't specify a key usage or, if it 833 * does, if it includes digitalSignature. Otherwise it pushes to the error 834 * queue and returns zero. */ 835 int ssl_cert_check_digital_signature_key_usage(const CBS *in); 836 837 /* ssl_cert_parse_pubkey extracts the public key from the DER-encoded, X.509 838 * certificate in |in|. It returns an allocated |EVP_PKEY| or else returns NULL 839 * and pushes to the error queue. */ 840 EVP_PKEY *ssl_cert_parse_pubkey(const CBS *in); 841 842 /* ssl_parse_client_CA_list parses a CA list from |cbs| in the format used by a 843 * TLS CertificateRequest message. On success, it returns a newly-allocated 844 * |CRYPTO_BUFFER| list and advances |cbs|. Otherwise, it returns NULL and sets 845 * |*out_alert| to an alert to send to the peer. */ 846 STACK_OF(CRYPTO_BUFFER) * 847 ssl_parse_client_CA_list(SSL *ssl, uint8_t *out_alert, CBS *cbs); 848 849 /* ssl_add_client_CA_list adds the configured CA list to |cbb| in the format 850 * used by a TLS CertificateRequest message. It returns one on success and zero 851 * on error. */ 852 int ssl_add_client_CA_list(SSL *ssl, CBB *cbb); 853 854 /* ssl_check_leaf_certificate returns one if |pkey| and |leaf| are suitable as 855 * a server's leaf certificate for |hs|. Otherwise, it returns zero and pushes 856 * an error on the error queue. */ 857 int ssl_check_leaf_certificate(SSL_HANDSHAKE *hs, EVP_PKEY *pkey, 858 const CRYPTO_BUFFER *leaf); 859 860 861 /* TLS 1.3 key derivation. */ 862 863 /* tls13_init_key_schedule initializes the handshake hash and key derivation 864 * state. The cipher suite and PRF hash must have been selected at this point. 865 * It returns one on success and zero on error. */ 866 int tls13_init_key_schedule(SSL_HANDSHAKE *hs); 867 868 /* tls13_init_early_key_schedule initializes the handshake hash and key 869 * derivation state from the resumption secret to derive the early secrets. It 870 * returns one on success and zero on error. */ 871 int tls13_init_early_key_schedule(SSL_HANDSHAKE *hs); 872 873 /* tls13_advance_key_schedule incorporates |in| into the key schedule with 874 * HKDF-Extract. It returns one on success and zero on error. */ 875 int tls13_advance_key_schedule(SSL_HANDSHAKE *hs, const uint8_t *in, 876 size_t len); 877 878 /* tls13_set_traffic_key sets the read or write traffic keys to 879 * |traffic_secret|. It returns one on success and zero on error. */ 880 int tls13_set_traffic_key(SSL *ssl, enum evp_aead_direction_t direction, 881 const uint8_t *traffic_secret, 882 size_t traffic_secret_len); 883 884 /* tls13_derive_early_secrets derives the early traffic secret. It returns one 885 * on success and zero on error. */ 886 int tls13_derive_early_secrets(SSL_HANDSHAKE *hs); 887 888 /* tls13_derive_handshake_secrets derives the handshake traffic secret. It 889 * returns one on success and zero on error. */ 890 int tls13_derive_handshake_secrets(SSL_HANDSHAKE *hs); 891 892 /* tls13_rotate_traffic_key derives the next read or write traffic secret. It 893 * returns one on success and zero on error. */ 894 int tls13_rotate_traffic_key(SSL *ssl, enum evp_aead_direction_t direction); 895 896 /* tls13_derive_application_secrets derives the initial application data traffic 897 * and exporter secrets based on the handshake transcripts and |master_secret|. 898 * It returns one on success and zero on error. */ 899 int tls13_derive_application_secrets(SSL_HANDSHAKE *hs); 900 901 /* tls13_derive_resumption_secret derives the |resumption_secret|. */ 902 int tls13_derive_resumption_secret(SSL_HANDSHAKE *hs); 903 904 /* tls13_export_keying_material provides an exporter interface to use the 905 * |exporter_secret|. */ 906 int tls13_export_keying_material(SSL *ssl, uint8_t *out, size_t out_len, 907 const char *label, size_t label_len, 908 const uint8_t *context, size_t context_len, 909 int use_context); 910 911 /* tls13_finished_mac calculates the MAC of the handshake transcript to verify 912 * the integrity of the Finished message, and stores the result in |out| and 913 * length in |out_len|. |is_server| is 1 if this is for the Server Finished and 914 * 0 for the Client Finished. */ 915 int tls13_finished_mac(SSL_HANDSHAKE *hs, uint8_t *out, 916 size_t *out_len, int is_server); 917 918 /* tls13_write_psk_binder calculates the PSK binder value and replaces the last 919 * bytes of |msg| with the resulting value. It returns 1 on success, and 0 on 920 * failure. */ 921 int tls13_write_psk_binder(SSL_HANDSHAKE *hs, uint8_t *msg, size_t len); 922 923 /* tls13_verify_psk_binder verifies that the handshake transcript, truncated 924 * up to the binders has a valid signature using the value of |session|'s 925 * resumption secret. It returns 1 on success, and 0 on failure. */ 926 int tls13_verify_psk_binder(SSL_HANDSHAKE *hs, SSL_SESSION *session, 927 CBS *binders); 928 929 930 /* Handshake functions. */ 931 932 enum ssl_hs_wait_t { 933 ssl_hs_error, 934 ssl_hs_ok, 935 ssl_hs_read_message, 936 ssl_hs_flush, 937 ssl_hs_flush_and_read_message, 938 ssl_hs_x509_lookup, 939 ssl_hs_channel_id_lookup, 940 ssl_hs_private_key_operation, 941 ssl_hs_pending_ticket, 942 ssl_hs_read_end_of_early_data, 943 }; 944 945 struct ssl_handshake_st { 946 /* ssl is a non-owning pointer to the parent |SSL| object. */ 947 SSL *ssl; 948 949 /* do_tls13_handshake runs the TLS 1.3 handshake. On completion, it returns 950 * |ssl_hs_ok|. Otherwise, it returns a value corresponding to what operation 951 * is needed to progress. */ 952 enum ssl_hs_wait_t (*do_tls13_handshake)(SSL_HANDSHAKE *hs); 953 954 /* wait contains the operation |do_tls13_handshake| is currently blocking on 955 * or |ssl_hs_ok| if none. */ 956 enum ssl_hs_wait_t wait; 957 958 /* state contains one of the SSL3_ST_* values. */ 959 int state; 960 961 /* next_state is used when SSL_ST_FLUSH_DATA is entered */ 962 int next_state; 963 964 /* tls13_state is the internal state for the TLS 1.3 handshake. Its values 965 * depend on |do_tls13_handshake| but the starting state is always zero. */ 966 int tls13_state; 967 968 size_t hash_len; 969 uint8_t secret[EVP_MAX_MD_SIZE]; 970 uint8_t early_traffic_secret[EVP_MAX_MD_SIZE]; 971 uint8_t client_handshake_secret[EVP_MAX_MD_SIZE]; 972 uint8_t server_handshake_secret[EVP_MAX_MD_SIZE]; 973 uint8_t client_traffic_secret_0[EVP_MAX_MD_SIZE]; 974 uint8_t server_traffic_secret_0[EVP_MAX_MD_SIZE]; 975 uint8_t expected_client_finished[EVP_MAX_MD_SIZE]; 976 977 union { 978 /* sent is a bitset where the bits correspond to elements of kExtensions 979 * in t1_lib.c. Each bit is set if that extension was sent in a 980 * ClientHello. It's not used by servers. */ 981 uint32_t sent; 982 /* received is a bitset, like |sent|, but is used by servers to record 983 * which extensions were received from a client. */ 984 uint32_t received; 985 } extensions; 986 987 union { 988 /* sent is a bitset where the bits correspond to elements of 989 * |client_custom_extensions| in the |SSL_CTX|. Each bit is set if that 990 * extension was sent in a ClientHello. It's not used by servers. */ 991 uint16_t sent; 992 /* received is a bitset, like |sent|, but is used by servers to record 993 * which custom extensions were received from a client. The bits here 994 * correspond to |server_custom_extensions|. */ 995 uint16_t received; 996 } custom_extensions; 997 998 /* retry_group is the group ID selected by the server in HelloRetryRequest in 999 * TLS 1.3. */ 1000 uint16_t retry_group; 1001 1002 /* ecdh_ctx is the current ECDH instance. */ 1003 SSL_ECDH_CTX ecdh_ctx; 1004 1005 /* transcript is the current handshake transcript. */ 1006 SSL_TRANSCRIPT transcript; 1007 1008 /* cookie is the value of the cookie received from the server, if any. */ 1009 uint8_t *cookie; 1010 size_t cookie_len; 1011 1012 /* key_share_bytes is the value of the previously sent KeyShare extension by 1013 * the client in TLS 1.3. */ 1014 uint8_t *key_share_bytes; 1015 size_t key_share_bytes_len; 1016 1017 /* public_key, for servers, is the key share to be sent to the client in TLS 1018 * 1.3. */ 1019 uint8_t *public_key; 1020 size_t public_key_len; 1021 1022 /* peer_sigalgs are the signature algorithms that the peer supports. These are 1023 * taken from the contents of the signature algorithms extension for a server 1024 * or from the CertificateRequest for a client. */ 1025 uint16_t *peer_sigalgs; 1026 /* num_peer_sigalgs is the number of entries in |peer_sigalgs|. */ 1027 size_t num_peer_sigalgs; 1028 1029 /* peer_supported_group_list contains the supported group IDs advertised by 1030 * the peer. This is only set on the server's end. The server does not 1031 * advertise this extension to the client. */ 1032 uint16_t *peer_supported_group_list; 1033 size_t peer_supported_group_list_len; 1034 1035 /* peer_key is the peer's ECDH key for a TLS 1.2 client. */ 1036 uint8_t *peer_key; 1037 size_t peer_key_len; 1038 1039 /* server_params, in TLS 1.2, stores the ServerKeyExchange parameters to be 1040 * signed while the signature is being computed. */ 1041 uint8_t *server_params; 1042 size_t server_params_len; 1043 1044 /* peer_psk_identity_hint, on the client, is the psk_identity_hint sent by the 1045 * server when using a TLS 1.2 PSK key exchange. */ 1046 char *peer_psk_identity_hint; 1047 1048 /* ca_names, on the client, contains the list of CAs received in a 1049 * CertificateRequest message. */ 1050 STACK_OF(CRYPTO_BUFFER) *ca_names; 1051 1052 /* cached_x509_ca_names contains a cache of parsed versions of the elements 1053 * of |ca_names|. */ 1054 STACK_OF(X509_NAME) *cached_x509_ca_names; 1055 1056 /* certificate_types, on the client, contains the set of certificate types 1057 * received in a CertificateRequest message. */ 1058 uint8_t *certificate_types; 1059 size_t num_certificate_types; 1060 1061 /* hostname, on the server, is the value of the SNI extension. */ 1062 char *hostname; 1063 1064 /* peer_pubkey is the public key parsed from the peer's leaf certificate. */ 1065 EVP_PKEY *peer_pubkey; 1066 1067 /* new_session is the new mutable session being established by the current 1068 * handshake. It should not be cached. */ 1069 SSL_SESSION *new_session; 1070 1071 /* new_cipher is the cipher being negotiated in this handshake. */ 1072 const SSL_CIPHER *new_cipher; 1073 1074 /* key_block is the record-layer key block for TLS 1.2 and earlier. */ 1075 uint8_t *key_block; 1076 uint8_t key_block_len; 1077 1078 /* scts_requested is one if the SCT extension is in the ClientHello. */ 1079 unsigned scts_requested:1; 1080 1081 /* needs_psk_binder if the ClientHello has a placeholder PSK binder to be 1082 * filled in. */ 1083 unsigned needs_psk_binder:1; 1084 1085 unsigned received_hello_retry_request:1; 1086 1087 /* accept_psk_mode stores whether the client's PSK mode is compatible with our 1088 * preferences. */ 1089 unsigned accept_psk_mode:1; 1090 1091 /* cert_request is one if a client certificate was requested and zero 1092 * otherwise. */ 1093 unsigned cert_request:1; 1094 1095 /* certificate_status_expected is one if OCSP stapling was negotiated and the 1096 * server is expected to send a CertificateStatus message. (This is used on 1097 * both the client and server sides.) */ 1098 unsigned certificate_status_expected:1; 1099 1100 /* ocsp_stapling_requested is one if a client requested OCSP stapling. */ 1101 unsigned ocsp_stapling_requested:1; 1102 1103 /* should_ack_sni is used by a server and indicates that the SNI extension 1104 * should be echoed in the ServerHello. */ 1105 unsigned should_ack_sni:1; 1106 1107 /* in_false_start is one if there is a pending client handshake in False 1108 * Start. The client may write data at this point. */ 1109 unsigned in_false_start:1; 1110 1111 /* early_data_offered is one if the client sent the early_data extension. */ 1112 unsigned early_data_offered:1; 1113 1114 /* can_early_read is one if application data may be read at this point in the 1115 * handshake. */ 1116 unsigned can_early_read:1; 1117 1118 /* can_early_write is one if application data may be written at this point in 1119 * the handshake. */ 1120 unsigned can_early_write:1; 1121 1122 /* next_proto_neg_seen is one of NPN was negotiated. */ 1123 unsigned next_proto_neg_seen:1; 1124 1125 /* ticket_expected is one if a TLS 1.2 NewSessionTicket message is to be sent 1126 * or received. */ 1127 unsigned ticket_expected:1; 1128 1129 /* v2_clienthello is one if we received a V2ClientHello. */ 1130 unsigned v2_clienthello:1; 1131 1132 /* extended_master_secret is one if the extended master secret extension is 1133 * negotiated in this handshake. */ 1134 unsigned extended_master_secret:1; 1135 1136 /* client_version is the value sent or received in the ClientHello version. */ 1137 uint16_t client_version; 1138 } /* SSL_HANDSHAKE */; 1139 1140 SSL_HANDSHAKE *ssl_handshake_new(SSL *ssl); 1141 1142 /* ssl_handshake_free releases all memory associated with |hs|. */ 1143 void ssl_handshake_free(SSL_HANDSHAKE *hs); 1144 1145 /* ssl_check_message_type checks if the current message has type |type|. If so 1146 * it returns one. Otherwise, it sends an alert and returns zero. */ 1147 int ssl_check_message_type(SSL *ssl, int type); 1148 1149 /* tls13_handshake runs the TLS 1.3 handshake. It returns one on success and <= 1150 * 0 on error. It sets |out_early_return| to one if we've completed the 1151 * handshake early. */ 1152 int tls13_handshake(SSL_HANDSHAKE *hs, int *out_early_return); 1153 1154 /* The following are implementations of |do_tls13_handshake| for the client and 1155 * server. */ 1156 enum ssl_hs_wait_t tls13_client_handshake(SSL_HANDSHAKE *hs); 1157 enum ssl_hs_wait_t tls13_server_handshake(SSL_HANDSHAKE *hs); 1158 1159 /* tls13_post_handshake processes a post-handshake message. It returns one on 1160 * success and zero on failure. */ 1161 int tls13_post_handshake(SSL *ssl); 1162 1163 int tls13_process_certificate(SSL_HANDSHAKE *hs, int allow_anonymous); 1164 int tls13_process_certificate_verify(SSL_HANDSHAKE *hs); 1165 1166 /* tls13_process_finished processes the current message as a Finished message 1167 * from the peer. If |use_saved_value| is one, the verify_data is compared 1168 * against |hs->expected_client_finished| rather than computed fresh. */ 1169 int tls13_process_finished(SSL_HANDSHAKE *hs, int use_saved_value); 1170 1171 int tls13_add_certificate(SSL_HANDSHAKE *hs); 1172 enum ssl_private_key_result_t tls13_add_certificate_verify(SSL_HANDSHAKE *hs, 1173 int is_first_run); 1174 int tls13_add_finished(SSL_HANDSHAKE *hs); 1175 int tls13_process_new_session_ticket(SSL *ssl); 1176 1177 int ssl_ext_key_share_parse_serverhello(SSL_HANDSHAKE *hs, uint8_t **out_secret, 1178 size_t *out_secret_len, 1179 uint8_t *out_alert, CBS *contents); 1180 int ssl_ext_key_share_parse_clienthello(SSL_HANDSHAKE *hs, int *out_found, 1181 uint8_t **out_secret, 1182 size_t *out_secret_len, 1183 uint8_t *out_alert, CBS *contents); 1184 int ssl_ext_key_share_add_serverhello(SSL_HANDSHAKE *hs, CBB *out); 1185 1186 int ssl_ext_pre_shared_key_parse_serverhello(SSL_HANDSHAKE *hs, 1187 uint8_t *out_alert, CBS *contents); 1188 int ssl_ext_pre_shared_key_parse_clienthello( 1189 SSL_HANDSHAKE *hs, CBS *out_ticket, CBS *out_binders, 1190 uint32_t *out_obfuscated_ticket_age, uint8_t *out_alert, CBS *contents); 1191 int ssl_ext_pre_shared_key_add_serverhello(SSL_HANDSHAKE *hs, CBB *out); 1192 1193 /* ssl_is_sct_list_valid does a shallow parse of the SCT list in |contents| and 1194 * returns one iff it's valid. */ 1195 int ssl_is_sct_list_valid(const CBS *contents); 1196 1197 int ssl_write_client_hello(SSL_HANDSHAKE *hs); 1198 1199 /* ssl_clear_tls13_state releases client state only needed for TLS 1.3. It 1200 * should be called once the version is known to be TLS 1.2 or earlier. */ 1201 void ssl_clear_tls13_state(SSL_HANDSHAKE *hs); 1202 1203 enum ssl_cert_verify_context_t { 1204 ssl_cert_verify_server, 1205 ssl_cert_verify_client, 1206 ssl_cert_verify_channel_id, 1207 }; 1208 1209 /* tls13_get_cert_verify_signature_input generates the message to be signed for 1210 * TLS 1.3's CertificateVerify message. |cert_verify_context| determines the 1211 * type of signature. It sets |*out| and |*out_len| to a newly allocated buffer 1212 * containing the result. The caller must free it with |OPENSSL_free| to release 1213 * it. This function returns one on success and zero on failure. */ 1214 int tls13_get_cert_verify_signature_input( 1215 SSL_HANDSHAKE *hs, uint8_t **out, size_t *out_len, 1216 enum ssl_cert_verify_context_t cert_verify_context); 1217 1218 /* ssl_negotiate_alpn negotiates the ALPN extension, if applicable. It returns 1219 * one on successful negotiation or if nothing was negotiated. It returns zero 1220 * and sets |*out_alert| to an alert on error. */ 1221 int ssl_negotiate_alpn(SSL_HANDSHAKE *hs, uint8_t *out_alert, 1222 const SSL_CLIENT_HELLO *client_hello); 1223 1224 typedef struct { 1225 uint16_t type; 1226 int *out_present; 1227 CBS *out_data; 1228 } SSL_EXTENSION_TYPE; 1229 1230 /* ssl_parse_extensions parses a TLS extensions block out of |cbs| and advances 1231 * it. It writes the parsed extensions to pointers denoted by |ext_types|. On 1232 * success, it fills in the |out_present| and |out_data| fields and returns one. 1233 * Otherwise, it sets |*out_alert| to an alert to send and returns zero. Unknown 1234 * extensions are rejected unless |ignore_unknown| is 1. */ 1235 int ssl_parse_extensions(const CBS *cbs, uint8_t *out_alert, 1236 const SSL_EXTENSION_TYPE *ext_types, 1237 size_t num_ext_types, int ignore_unknown); 1238 1239 1240 /* SSLKEYLOGFILE functions. */ 1241 1242 /* ssl_log_secret logs |secret| with label |label|, if logging is enabled for 1243 * |ssl|. It returns one on success and zero on failure. */ 1244 int ssl_log_secret(const SSL *ssl, const char *label, const uint8_t *secret, 1245 size_t secret_len); 1246 1247 1248 /* ClientHello functions. */ 1249 1250 int ssl_client_hello_init(SSL *ssl, SSL_CLIENT_HELLO *out, const uint8_t *in, 1251 size_t in_len); 1252 1253 int ssl_client_hello_get_extension(const SSL_CLIENT_HELLO *client_hello, 1254 CBS *out, uint16_t extension_type); 1255 1256 int ssl_client_cipher_list_contains_cipher(const SSL_CLIENT_HELLO *client_hello, 1257 uint16_t id); 1258 1259 1260 /* GREASE. */ 1261 1262 enum ssl_grease_index_t { 1263 ssl_grease_cipher = 0, 1264 ssl_grease_group, 1265 ssl_grease_extension1, 1266 ssl_grease_extension2, 1267 ssl_grease_version, 1268 ssl_grease_ticket_extension, 1269 }; 1270 1271 /* ssl_get_grease_value returns a GREASE value for |ssl|. For a given 1272 * connection, the values for each index will be deterministic. This allows the 1273 * same ClientHello be sent twice for a HelloRetryRequest or the same group be 1274 * advertised in both supported_groups and key_shares. */ 1275 uint16_t ssl_get_grease_value(const SSL *ssl, enum ssl_grease_index_t index); 1276 1277 1278 /* Signature algorithms. */ 1279 1280 /* tls1_parse_peer_sigalgs parses |sigalgs| as the list of peer signature 1281 * algorithms and saves them on |hs|. It returns one on success and zero on 1282 * error. */ 1283 int tls1_parse_peer_sigalgs(SSL_HANDSHAKE *hs, const CBS *sigalgs); 1284 1285 /* tls1_choose_signature_algorithm sets |*out| to a signature algorithm for use 1286 * with |hs|'s private key based on the peer's preferences and the algorithms 1287 * supported. It returns one on success and zero on error. */ 1288 int tls1_choose_signature_algorithm(SSL_HANDSHAKE *hs, uint16_t *out); 1289 1290 /* tls12_get_verify_sigalgs sets |*out| to the signature algorithms acceptable 1291 * for the peer signature and returns the length of the list. */ 1292 size_t tls12_get_verify_sigalgs(const SSL *ssl, const uint16_t **out); 1293 1294 /* tls12_check_peer_sigalg checks if |sigalg| is acceptable for the peer 1295 * signature. It returns one on success and zero on error, setting |*out_alert| 1296 * to an alert to send. */ 1297 int tls12_check_peer_sigalg(SSL *ssl, int *out_alert, uint16_t sigalg); 1298 1299 1300 /* Underdocumented functions. 1301 * 1302 * Functions below here haven't been touched up and may be underdocumented. */ 1303 1304 #define TLSEXT_CHANNEL_ID_SIZE 128 1305 1306 /* From RFC4492, used in encoding the curve type in ECParameters */ 1307 #define NAMED_CURVE_TYPE 3 1308 1309 typedef struct cert_st { 1310 EVP_PKEY *privatekey; 1311 1312 /* chain contains the certificate chain, with the leaf at the beginning. The 1313 * first element of |chain| may be NULL to indicate that the leaf certificate 1314 * has not yet been set. 1315 * If |chain| != NULL -> len(chain) >= 1 1316 * If |chain[0]| == NULL -> len(chain) >= 2. 1317 * |chain[1..]| != NULL */ 1318 STACK_OF(CRYPTO_BUFFER) *chain; 1319 1320 /* x509_chain may contain a parsed copy of |chain[1..]|. This is only used as 1321 * a cache in order to implement get0 functions that return a non-owning 1322 * pointer to the certificate chain. */ 1323 STACK_OF(X509) *x509_chain; 1324 1325 /* x509_leaf may contain a parsed copy of the first element of |chain|. This 1326 * is only used as a cache in order to implement get0 functions that return 1327 * a non-owning pointer to the certificate chain. */ 1328 X509 *x509_leaf; 1329 1330 /* x509_stash contains the last |X509| object append to the chain. This is a 1331 * workaround for some third-party code that continue to use an |X509| object 1332 * even after passing ownership with an add0 function. */ 1333 X509 *x509_stash; 1334 1335 /* key_method, if non-NULL, is a set of callbacks to call for private key 1336 * operations. */ 1337 const SSL_PRIVATE_KEY_METHOD *key_method; 1338 1339 /* x509_method contains pointers to functions that might deal with |X509| 1340 * compatibility, or might be a no-op, depending on the application. */ 1341 const SSL_X509_METHOD *x509_method; 1342 1343 DH *dh_tmp; 1344 DH *(*dh_tmp_cb)(SSL *ssl, int is_export, int keysize); 1345 1346 /* sigalgs, if non-NULL, is the set of signature algorithms supported by 1347 * |privatekey| in decreasing order of preference. */ 1348 uint16_t *sigalgs; 1349 size_t num_sigalgs; 1350 1351 /* Certificate setup callback: if set is called whenever a 1352 * certificate may be required (client or server). the callback 1353 * can then examine any appropriate parameters and setup any 1354 * certificates required. This allows advanced applications 1355 * to select certificates on the fly: for example based on 1356 * supported signature algorithms or curves. */ 1357 int (*cert_cb)(SSL *ssl, void *arg); 1358 void *cert_cb_arg; 1359 1360 /* Optional X509_STORE for certificate validation. If NULL the parent SSL_CTX 1361 * store is used instead. */ 1362 X509_STORE *verify_store; 1363 1364 /* Signed certificate timestamp list to be sent to the client, if requested */ 1365 CRYPTO_BUFFER *signed_cert_timestamp_list; 1366 1367 /* OCSP response to be sent to the client, if requested. */ 1368 CRYPTO_BUFFER *ocsp_response; 1369 1370 /* sid_ctx partitions the session space within a shared session cache or 1371 * ticket key. Only sessions with a matching value will be accepted. */ 1372 uint8_t sid_ctx_length; 1373 uint8_t sid_ctx[SSL_MAX_SID_CTX_LENGTH]; 1374 } CERT; 1375 1376 /* SSL_METHOD is a compatibility structure to support the legacy version-locked 1377 * methods. */ 1378 struct ssl_method_st { 1379 /* version, if non-zero, is the only protocol version acceptable to an 1380 * SSL_CTX initialized from this method. */ 1381 uint16_t version; 1382 /* method is the underlying SSL_PROTOCOL_METHOD that initializes the 1383 * SSL_CTX. */ 1384 const SSL_PROTOCOL_METHOD *method; 1385 /* x509_method contains pointers to functions that might deal with |X509| 1386 * compatibility, or might be a no-op, depending on the application. */ 1387 const SSL_X509_METHOD *x509_method; 1388 }; 1389 1390 /* Used to hold functions for SSLv2 or SSLv3/TLSv1 functions */ 1391 struct ssl_protocol_method_st { 1392 /* is_dtls is one if the protocol is DTLS and zero otherwise. */ 1393 char is_dtls; 1394 /* min_version is the minimum implemented version. */ 1395 uint16_t min_version; 1396 /* max_version is the maximum implemented version. */ 1397 uint16_t max_version; 1398 /* version_from_wire maps |wire_version| to a protocol version. On success, it 1399 * sets |*out_version| to the result and returns one. If the version is 1400 * unknown, it returns zero. */ 1401 int (*version_from_wire)(uint16_t *out_version, uint16_t wire_version); 1402 /* version_to_wire maps |version| to the wire representation. It is an error 1403 * to call it with an invalid version. */ 1404 uint16_t (*version_to_wire)(uint16_t version); 1405 int (*ssl_new)(SSL *ssl); 1406 void (*ssl_free)(SSL *ssl); 1407 /* ssl_get_message reads the next handshake message. On success, it returns 1408 * one and sets |ssl->s3->tmp.message_type|, |ssl->init_msg|, and 1409 * |ssl->init_num|. Otherwise, it returns <= 0. */ 1410 int (*ssl_get_message)(SSL *ssl); 1411 /* get_current_message sets |*out| to the current handshake message. This 1412 * includes the protocol-specific message header. */ 1413 void (*get_current_message)(const SSL *ssl, CBS *out); 1414 /* release_current_message is called to release the current handshake message. 1415 * If |free_buffer| is one, buffers will also be released. */ 1416 void (*release_current_message)(SSL *ssl, int free_buffer); 1417 /* read_app_data reads up to |len| bytes of application data into |buf|. On 1418 * success, it returns the number of bytes read. Otherwise, it returns <= 0 1419 * and sets |*out_got_handshake| to whether the failure was due to a 1420 * post-handshake handshake message. If so, it fills in the current message as 1421 * in |ssl_get_message|. */ 1422 int (*read_app_data)(SSL *ssl, int *out_got_handshake, uint8_t *buf, int len, 1423 int peek); 1424 int (*read_change_cipher_spec)(SSL *ssl); 1425 void (*read_close_notify)(SSL *ssl); 1426 int (*write_app_data)(SSL *ssl, const uint8_t *buf, int len); 1427 int (*dispatch_alert)(SSL *ssl); 1428 /* supports_cipher returns one if |cipher| is supported by this protocol and 1429 * zero otherwise. */ 1430 int (*supports_cipher)(const SSL_CIPHER *cipher); 1431 /* init_message begins a new handshake message of type |type|. |cbb| is the 1432 * root CBB to be passed into |finish_message|. |*body| is set to a child CBB 1433 * the caller should write to. It returns one on success and zero on error. */ 1434 int (*init_message)(SSL *ssl, CBB *cbb, CBB *body, uint8_t type); 1435 /* finish_message finishes a handshake message. It sets |*out_msg| to a 1436 * newly-allocated buffer with the serialized message. The caller must 1437 * release it with |OPENSSL_free| when done. It returns one on success and 1438 * zero on error. */ 1439 int (*finish_message)(SSL *ssl, CBB *cbb, uint8_t **out_msg, size_t *out_len); 1440 /* add_message adds a handshake message to the pending flight. It returns one 1441 * on success and zero on error. In either case, it takes ownership of |msg| 1442 * and releases it with |OPENSSL_free| when done. */ 1443 int (*add_message)(SSL *ssl, uint8_t *msg, size_t len); 1444 /* add_change_cipher_spec adds a ChangeCipherSpec record to the pending 1445 * flight. It returns one on success and zero on error. */ 1446 int (*add_change_cipher_spec)(SSL *ssl); 1447 /* add_alert adds an alert to the pending flight. It returns one on success 1448 * and zero on error. */ 1449 int (*add_alert)(SSL *ssl, uint8_t level, uint8_t desc); 1450 /* flush_flight flushes the pending flight to the transport. It returns one on 1451 * success and <= 0 on error. */ 1452 int (*flush_flight)(SSL *ssl); 1453 /* expect_flight is called when the handshake expects a flight of messages from 1454 * the peer. */ 1455 void (*expect_flight)(SSL *ssl); 1456 /* received_flight is called when the handshake has received a flight of 1457 * messages from the peer. */ 1458 void (*received_flight)(SSL *ssl); 1459 /* set_read_state sets |ssl|'s read cipher state to |aead_ctx|. It takes 1460 * ownership of |aead_ctx|. It returns one on success and zero if changing the 1461 * read state is forbidden at this point. */ 1462 int (*set_read_state)(SSL *ssl, SSL_AEAD_CTX *aead_ctx); 1463 /* set_write_state sets |ssl|'s write cipher state to |aead_ctx|. It takes 1464 * ownership of |aead_ctx|. It returns one on success and zero if changing the 1465 * write state is forbidden at this point. */ 1466 int (*set_write_state)(SSL *ssl, SSL_AEAD_CTX *aead_ctx); 1467 }; 1468 1469 struct ssl_x509_method_st { 1470 /* check_client_CA_list returns one if |names| is a good list of X.509 1471 * distinguished names and zero otherwise. This is used to ensure that we can 1472 * reject unparsable values at handshake time when using crypto/x509. */ 1473 int (*check_client_CA_list)(STACK_OF(CRYPTO_BUFFER) *names); 1474 1475 /* cert_clear frees and NULLs all X509 certificate-related state. */ 1476 void (*cert_clear)(CERT *cert); 1477 /* cert_free frees all X509-related state. */ 1478 void (*cert_free)(CERT *cert); 1479 /* cert_flush_cached_chain drops any cached |X509|-based certificate chain 1480 * from |cert|. */ 1481 /* cert_dup duplicates any needed fields from |cert| to |new_cert|. */ 1482 void (*cert_dup)(CERT *new_cert, const CERT *cert); 1483 void (*cert_flush_cached_chain)(CERT *cert); 1484 /* cert_flush_cached_chain drops any cached |X509|-based leaf certificate 1485 * from |cert|. */ 1486 void (*cert_flush_cached_leaf)(CERT *cert); 1487 1488 /* session_cache_objects fills out |sess->x509_peer| and |sess->x509_chain| 1489 * from |sess->certs| and erases |sess->x509_chain_without_leaf|. It returns 1490 * one on success or zero on error. */ 1491 int (*session_cache_objects)(SSL_SESSION *session); 1492 /* session_dup duplicates any needed fields from |session| to |new_session|. 1493 * It returns one on success or zero on error. */ 1494 int (*session_dup)(SSL_SESSION *new_session, const SSL_SESSION *session); 1495 /* session_clear frees any X509-related state from |session|. */ 1496 void (*session_clear)(SSL_SESSION *session); 1497 /* session_verify_cert_chain verifies the certificate chain in |session|, 1498 * sets |session->verify_result| and returns one on success or zero on 1499 * error. */ 1500 int (*session_verify_cert_chain)(SSL_SESSION *session, SSL *ssl); 1501 1502 /* hs_flush_cached_ca_names drops any cached |X509_NAME|s from |hs|. */ 1503 void (*hs_flush_cached_ca_names)(SSL_HANDSHAKE *hs); 1504 /* ssl_new does any neccessary initialisation of |ssl|. It returns one on 1505 * success or zero on error. */ 1506 int (*ssl_new)(SSL *ssl); 1507 /* ssl_free frees anything created by |ssl_new|. */ 1508 void (*ssl_free)(SSL *ssl); 1509 /* ssl_flush_cached_client_CA drops any cached |X509_NAME|s from |ssl|. */ 1510 void (*ssl_flush_cached_client_CA)(SSL *ssl); 1511 /* ssl_auto_chain_if_needed runs the deprecated auto-chaining logic if 1512 * necessary. On success, it updates |ssl|'s certificate configuration as 1513 * needed and returns one. Otherwise, it returns zero. */ 1514 int (*ssl_auto_chain_if_needed)(SSL *ssl); 1515 /* ssl_ctx_new does any neccessary initialisation of |ctx|. It returns one on 1516 * success or zero on error. */ 1517 int (*ssl_ctx_new)(SSL_CTX *ctx); 1518 /* ssl_ctx_free frees anything created by |ssl_ctx_new|. */ 1519 void (*ssl_ctx_free)(SSL_CTX *ctx); 1520 /* ssl_ctx_flush_cached_client_CA drops any cached |X509_NAME|s from |ctx|. */ 1521 void (*ssl_ctx_flush_cached_client_CA)(SSL_CTX *ssl); 1522 }; 1523 1524 /* ssl_crypto_x509_method provides the |ssl_x509_method_st| functions using 1525 * crypto/x509. */ 1526 extern const struct ssl_x509_method_st ssl_crypto_x509_method; 1527 1528 typedef struct ssl3_record_st { 1529 /* type is the record type. */ 1530 uint8_t type; 1531 /* length is the number of unconsumed bytes in the record. */ 1532 uint16_t length; 1533 /* data is a non-owning pointer to the first unconsumed byte of the record. */ 1534 uint8_t *data; 1535 } SSL3_RECORD; 1536 1537 typedef struct ssl3_buffer_st { 1538 /* buf is the memory allocated for this buffer. */ 1539 uint8_t *buf; 1540 /* offset is the offset into |buf| which the buffer contents start at. */ 1541 uint16_t offset; 1542 /* len is the length of the buffer contents from |buf| + |offset|. */ 1543 uint16_t len; 1544 /* cap is how much memory beyond |buf| + |offset| is available. */ 1545 uint16_t cap; 1546 } SSL3_BUFFER; 1547 1548 /* An ssl_shutdown_t describes the shutdown state of one end of the connection, 1549 * whether it is alive or has been shutdown via close_notify or fatal alert. */ 1550 enum ssl_shutdown_t { 1551 ssl_shutdown_none = 0, 1552 ssl_shutdown_close_notify = 1, 1553 ssl_shutdown_fatal_alert = 2, 1554 }; 1555 1556 typedef struct ssl3_state_st { 1557 uint8_t read_sequence[8]; 1558 uint8_t write_sequence[8]; 1559 1560 uint8_t server_random[SSL3_RANDOM_SIZE]; 1561 uint8_t client_random[SSL3_RANDOM_SIZE]; 1562 1563 /* read_buffer holds data from the transport to be processed. */ 1564 SSL3_BUFFER read_buffer; 1565 /* write_buffer holds data to be written to the transport. */ 1566 SSL3_BUFFER write_buffer; 1567 1568 SSL3_RECORD rrec; /* each decoded record goes in here */ 1569 1570 /* partial write - check the numbers match */ 1571 unsigned int wnum; /* number of bytes sent so far */ 1572 int wpend_tot; /* number bytes written */ 1573 int wpend_type; 1574 int wpend_ret; /* number of bytes submitted */ 1575 const uint8_t *wpend_buf; 1576 1577 /* recv_shutdown is the shutdown state for the receive half of the 1578 * connection. */ 1579 enum ssl_shutdown_t recv_shutdown; 1580 1581 /* recv_shutdown is the shutdown state for the send half of the connection. */ 1582 enum ssl_shutdown_t send_shutdown; 1583 1584 int alert_dispatch; 1585 1586 int total_renegotiations; 1587 1588 /* early_data_skipped is the amount of early data that has been skipped by the 1589 * record layer. */ 1590 uint16_t early_data_skipped; 1591 1592 /* empty_record_count is the number of consecutive empty records received. */ 1593 uint8_t empty_record_count; 1594 1595 /* warning_alert_count is the number of consecutive warning alerts 1596 * received. */ 1597 uint8_t warning_alert_count; 1598 1599 /* key_update_count is the number of consecutive KeyUpdates received. */ 1600 uint8_t key_update_count; 1601 1602 /* skip_early_data instructs the record layer to skip unexpected early data 1603 * messages when 0RTT is rejected. */ 1604 unsigned skip_early_data:1; 1605 1606 /* have_version is true if the connection's final version is known. Otherwise 1607 * the version has not been negotiated yet. */ 1608 unsigned have_version:1; 1609 1610 /* v2_hello_done is true if the peer's V2ClientHello, if any, has been handled 1611 * and future messages should use the record layer. */ 1612 unsigned v2_hello_done:1; 1613 1614 /* is_v2_hello is true if the current handshake message was derived from a 1615 * V2ClientHello rather than received from the peer directly. */ 1616 unsigned is_v2_hello:1; 1617 1618 /* initial_handshake_complete is true if the initial handshake has 1619 * completed. */ 1620 unsigned initial_handshake_complete:1; 1621 1622 /* session_reused indicates whether a session was resumed. */ 1623 unsigned session_reused:1; 1624 1625 unsigned send_connection_binding:1; 1626 1627 /* In a client, this means that the server supported Channel ID and that a 1628 * Channel ID was sent. In a server it means that we echoed support for 1629 * Channel IDs and that tlsext_channel_id will be valid after the 1630 * handshake. */ 1631 unsigned tlsext_channel_id_valid:1; 1632 1633 uint8_t send_alert[2]; 1634 1635 /* pending_flight is the pending outgoing flight. This is used to flush each 1636 * handshake flight in a single write. */ 1637 BUF_MEM *pending_flight; 1638 1639 /* pending_flight_offset is the number of bytes of |pending_flight| which have 1640 * been successfully written. */ 1641 uint32_t pending_flight_offset; 1642 1643 /* aead_read_ctx is the current read cipher state. */ 1644 SSL_AEAD_CTX *aead_read_ctx; 1645 1646 /* aead_write_ctx is the current write cipher state. */ 1647 SSL_AEAD_CTX *aead_write_ctx; 1648 1649 /* hs is the handshake state for the current handshake or NULL if there isn't 1650 * one. */ 1651 SSL_HANDSHAKE *hs; 1652 1653 uint8_t write_traffic_secret[EVP_MAX_MD_SIZE]; 1654 uint8_t read_traffic_secret[EVP_MAX_MD_SIZE]; 1655 uint8_t exporter_secret[EVP_MAX_MD_SIZE]; 1656 uint8_t early_exporter_secret[EVP_MAX_MD_SIZE]; 1657 uint8_t write_traffic_secret_len; 1658 uint8_t read_traffic_secret_len; 1659 uint8_t exporter_secret_len; 1660 uint8_t early_exporter_secret_len; 1661 1662 /* Connection binding to prevent renegotiation attacks */ 1663 uint8_t previous_client_finished[12]; 1664 uint8_t previous_client_finished_len; 1665 uint8_t previous_server_finished_len; 1666 uint8_t previous_server_finished[12]; 1667 1668 /* State pertaining to the pending handshake. 1669 * 1670 * TODO(davidben): Move everything not needed after the handshake completes to 1671 * |hs| and remove this. */ 1672 struct { 1673 int message_type; 1674 1675 int reuse_message; 1676 1677 uint8_t new_mac_secret_len; 1678 uint8_t new_key_len; 1679 uint8_t new_fixed_iv_len; 1680 } tmp; 1681 1682 /* established_session is the session established by the connection. This 1683 * session is only filled upon the completion of the handshake and is 1684 * immutable. */ 1685 SSL_SESSION *established_session; 1686 1687 /* Next protocol negotiation. For the client, this is the protocol that we 1688 * sent in NextProtocol and is set when handling ServerHello extensions. 1689 * 1690 * For a server, this is the client's selected_protocol from NextProtocol and 1691 * is set when handling the NextProtocol message, before the Finished 1692 * message. */ 1693 uint8_t *next_proto_negotiated; 1694 size_t next_proto_negotiated_len; 1695 1696 /* ALPN information 1697 * (we are in the process of transitioning from NPN to ALPN.) */ 1698 1699 /* In a server these point to the selected ALPN protocol after the 1700 * ClientHello has been processed. In a client these contain the protocol 1701 * that the server selected once the ServerHello has been processed. */ 1702 uint8_t *alpn_selected; 1703 size_t alpn_selected_len; 1704 1705 /* For a server: 1706 * If |tlsext_channel_id_valid| is true, then this contains the 1707 * verified Channel ID from the client: a P256 point, (x,y), where 1708 * each are big-endian values. */ 1709 uint8_t tlsext_channel_id[64]; 1710 1711 /* ticket_age_skew is the difference, in seconds, between the client-sent 1712 * ticket age and the server-computed value in TLS 1.3 server connections 1713 * which resumed a session. */ 1714 int32_t ticket_age_skew; 1715 } SSL3_STATE; 1716 1717 /* lengths of messages */ 1718 #define DTLS1_COOKIE_LENGTH 256 1719 1720 #define DTLS1_RT_HEADER_LENGTH 13 1721 1722 #define DTLS1_HM_HEADER_LENGTH 12 1723 1724 #define DTLS1_CCS_HEADER_LENGTH 1 1725 1726 #define DTLS1_AL_HEADER_LENGTH 2 1727 1728 struct hm_header_st { 1729 uint8_t type; 1730 uint32_t msg_len; 1731 uint16_t seq; 1732 uint32_t frag_off; 1733 uint32_t frag_len; 1734 }; 1735 1736 /* An hm_fragment is an incoming DTLS message, possibly not yet assembled. */ 1737 typedef struct hm_fragment_st { 1738 /* type is the type of the message. */ 1739 uint8_t type; 1740 /* seq is the sequence number of this message. */ 1741 uint16_t seq; 1742 /* msg_len is the length of the message body. */ 1743 uint32_t msg_len; 1744 /* data is a pointer to the message, including message header. It has length 1745 * |DTLS1_HM_HEADER_LENGTH| + |msg_len|. */ 1746 uint8_t *data; 1747 /* reassembly is a bitmask of |msg_len| bits corresponding to which parts of 1748 * the message have been received. It is NULL if the message is complete. */ 1749 uint8_t *reassembly; 1750 } hm_fragment; 1751 1752 struct OPENSSL_timeval { 1753 uint64_t tv_sec; 1754 uint32_t tv_usec; 1755 }; 1756 1757 typedef struct dtls1_state_st { 1758 /* send_cookie is true if we are resending the ClientHello 1759 * with a cookie from a HelloVerifyRequest. */ 1760 unsigned int send_cookie; 1761 1762 uint8_t cookie[DTLS1_COOKIE_LENGTH]; 1763 size_t cookie_len; 1764 1765 /* The current data and handshake epoch. This is initially undefined, and 1766 * starts at zero once the initial handshake is completed. */ 1767 uint16_t r_epoch; 1768 uint16_t w_epoch; 1769 1770 /* records being received in the current epoch */ 1771 DTLS1_BITMAP bitmap; 1772 1773 uint16_t handshake_write_seq; 1774 uint16_t handshake_read_seq; 1775 1776 /* save last sequence number for retransmissions */ 1777 uint8_t last_write_sequence[8]; 1778 1779 /* incoming_messages is a ring buffer of incoming handshake messages that have 1780 * yet to be processed. The front of the ring buffer is message number 1781 * |handshake_read_seq|, at position |handshake_read_seq| % 1782 * |SSL_MAX_HANDSHAKE_FLIGHT|. */ 1783 hm_fragment *incoming_messages[SSL_MAX_HANDSHAKE_FLIGHT]; 1784 1785 /* outgoing_messages is the queue of outgoing messages from the last handshake 1786 * flight. */ 1787 DTLS_OUTGOING_MESSAGE outgoing_messages[SSL_MAX_HANDSHAKE_FLIGHT]; 1788 uint8_t outgoing_messages_len; 1789 1790 /* outgoing_written is the number of outgoing messages that have been 1791 * written. */ 1792 uint8_t outgoing_written; 1793 /* outgoing_offset is the number of bytes of the next outgoing message have 1794 * been written. */ 1795 uint32_t outgoing_offset; 1796 1797 unsigned int mtu; /* max DTLS packet size */ 1798 1799 /* num_timeouts is the number of times the retransmit timer has fired since 1800 * the last time it was reset. */ 1801 unsigned int num_timeouts; 1802 1803 /* Indicates when the last handshake msg or heartbeat sent will 1804 * timeout. */ 1805 struct OPENSSL_timeval next_timeout; 1806 1807 /* timeout_duration_ms is the timeout duration in milliseconds. */ 1808 unsigned timeout_duration_ms; 1809 } DTLS1_STATE; 1810 1811 struct ssl_st { 1812 /* method is the method table corresponding to the current protocol (DTLS or 1813 * TLS). */ 1814 const SSL_PROTOCOL_METHOD *method; 1815 1816 /* version is the protocol version. */ 1817 int version; 1818 1819 /* max_version is the maximum acceptable protocol version. Note this version 1820 * is normalized in DTLS. */ 1821 uint16_t max_version; 1822 1823 /* min_version is the minimum acceptable protocol version. Note this version 1824 * is normalized in DTLS. */ 1825 uint16_t min_version; 1826 1827 uint16_t max_send_fragment; 1828 1829 /* There are 2 BIO's even though they are normally both the same. This is so 1830 * data can be read and written to different handlers */ 1831 1832 BIO *rbio; /* used by SSL_read */ 1833 BIO *wbio; /* used by SSL_write */ 1834 1835 int (*handshake_func)(SSL_HANDSHAKE *hs); 1836 1837 BUF_MEM *init_buf; /* buffer used during init */ 1838 1839 /* init_msg is a pointer to the current handshake message body. */ 1840 const uint8_t *init_msg; 1841 /* init_num is the length of the current handshake message body. */ 1842 uint32_t init_num; 1843 1844 struct ssl3_state_st *s3; /* SSLv3 variables */ 1845 struct dtls1_state_st *d1; /* DTLSv1 variables */ 1846 1847 /* callback that allows applications to peek at protocol messages */ 1848 void (*msg_callback)(int write_p, int version, int content_type, 1849 const void *buf, size_t len, SSL *ssl, void *arg); 1850 void *msg_callback_arg; 1851 1852 X509_VERIFY_PARAM *param; 1853 1854 /* crypto */ 1855 struct ssl_cipher_preference_list_st *cipher_list; 1856 1857 /* session info */ 1858 1859 /* client cert? */ 1860 /* This is used to hold the server certificate used */ 1861 struct cert_st /* CERT */ *cert; 1862 1863 /* This holds a variable that indicates what we were doing when a 0 or -1 is 1864 * returned. This is needed for non-blocking IO so we know what request 1865 * needs re-doing when in SSL_accept or SSL_connect */ 1866 int rwstate; 1867 1868 /* initial_timeout_duration_ms is the default DTLS timeout duration in 1869 * milliseconds. It's used to initialize the timer any time it's restarted. */ 1870 unsigned initial_timeout_duration_ms; 1871 1872 /* session is the configured session to be offered by the client. This session 1873 * is immutable. */ 1874 SSL_SESSION *session; 1875 1876 int (*verify_callback)(int ok, 1877 X509_STORE_CTX *ctx); /* fail if callback returns 0 */ 1878 1879 void (*info_callback)(const SSL *ssl, int type, int value); 1880 1881 /* Server-only: psk_identity_hint is the identity hint to send in 1882 * PSK-based key exchanges. */ 1883 char *psk_identity_hint; 1884 1885 unsigned int (*psk_client_callback)(SSL *ssl, const char *hint, 1886 char *identity, 1887 unsigned int max_identity_len, 1888 uint8_t *psk, unsigned int max_psk_len); 1889 unsigned int (*psk_server_callback)(SSL *ssl, const char *identity, 1890 uint8_t *psk, unsigned int max_psk_len); 1891 1892 SSL_CTX *ctx; 1893 1894 /* extra application data */ 1895 CRYPTO_EX_DATA ex_data; 1896 1897 /* for server side, keep the list of CA_dn we can use */ 1898 STACK_OF(CRYPTO_BUFFER) *client_CA; 1899 1900 /* cached_x509_client_CA is a cache of parsed versions of the elements of 1901 * |client_CA|. */ 1902 STACK_OF(X509_NAME) *cached_x509_client_CA; 1903 1904 uint32_t options; /* protocol behaviour */ 1905 uint32_t mode; /* API behaviour */ 1906 uint32_t max_cert_list; 1907 char *tlsext_hostname; 1908 size_t supported_group_list_len; 1909 uint16_t *supported_group_list; /* our list */ 1910 1911 /* session_ctx is the |SSL_CTX| used for the session cache and related 1912 * settings. */ 1913 SSL_CTX *session_ctx; 1914 1915 /* srtp_profiles is the list of configured SRTP protection profiles for 1916 * DTLS-SRTP. */ 1917 STACK_OF(SRTP_PROTECTION_PROFILE) *srtp_profiles; 1918 1919 /* srtp_profile is the selected SRTP protection profile for 1920 * DTLS-SRTP. */ 1921 const SRTP_PROTECTION_PROFILE *srtp_profile; 1922 1923 /* The client's Channel ID private key. */ 1924 EVP_PKEY *tlsext_channel_id_private; 1925 1926 /* For a client, this contains the list of supported protocols in wire 1927 * format. */ 1928 uint8_t *alpn_client_proto_list; 1929 unsigned alpn_client_proto_list_len; 1930 1931 /* renegotiate_mode controls how peer renegotiation attempts are handled. */ 1932 enum ssl_renegotiate_mode_t renegotiate_mode; 1933 1934 /* verify_mode is a bitmask of |SSL_VERIFY_*| values. */ 1935 uint8_t verify_mode; 1936 1937 /* server is true iff the this SSL* is the server half. Note: before the SSL* 1938 * is initialized by either SSL_set_accept_state or SSL_set_connect_state, 1939 * the side is not determined. In this state, server is always false. */ 1940 unsigned server:1; 1941 1942 /* quiet_shutdown is true if the connection should not send a close_notify on 1943 * shutdown. */ 1944 unsigned quiet_shutdown:1; 1945 1946 /* Enable signed certificate time stamps. Currently client only. */ 1947 unsigned signed_cert_timestamps_enabled:1; 1948 1949 /* ocsp_stapling_enabled is only used by client connections and indicates 1950 * whether OCSP stapling will be requested. */ 1951 unsigned ocsp_stapling_enabled:1; 1952 1953 /* tlsext_channel_id_enabled is copied from the |SSL_CTX|. For a server, 1954 * means that we'll accept Channel IDs from clients. For a client, means that 1955 * we'll advertise support. */ 1956 unsigned tlsext_channel_id_enabled:1; 1957 1958 /* retain_only_sha256_of_client_certs is true if we should compute the SHA256 1959 * hash of the peer's certificate and then discard it to save memory and 1960 * session space. Only effective on the server side. */ 1961 unsigned retain_only_sha256_of_client_certs:1; 1962 1963 /* early_data_accepted is true if early data was accepted by the server. */ 1964 unsigned early_data_accepted:1; 1965 }; 1966 1967 /* From draft-ietf-tls-tls13-18, used in determining PSK modes. */ 1968 #define SSL_PSK_KE 0x0 1969 #define SSL_PSK_DHE_KE 0x1 1970 1971 /* From draft-ietf-tls-tls13-16, used in determining whether to respond with a 1972 * KeyUpdate. */ 1973 #define SSL_KEY_UPDATE_NOT_REQUESTED 0 1974 #define SSL_KEY_UPDATE_REQUESTED 1 1975 1976 CERT *ssl_cert_new(const SSL_X509_METHOD *x509_method); 1977 CERT *ssl_cert_dup(CERT *cert); 1978 void ssl_cert_clear_certs(CERT *c); 1979 void ssl_cert_free(CERT *c); 1980 int ssl_set_cert(CERT *cert, CRYPTO_BUFFER *buffer); 1981 int ssl_is_key_type_supported(int key_type); 1982 /* ssl_compare_public_and_private_key returns one if |pubkey| is the public 1983 * counterpart to |privkey|. Otherwise it returns zero and pushes a helpful 1984 * message on the error queue. */ 1985 int ssl_compare_public_and_private_key(const EVP_PKEY *pubkey, 1986 const EVP_PKEY *privkey); 1987 int ssl_cert_check_private_key(const CERT *cert, const EVP_PKEY *privkey); 1988 int ssl_get_new_session(SSL_HANDSHAKE *hs, int is_server); 1989 int ssl_encrypt_ticket(SSL *ssl, CBB *out, const SSL_SESSION *session); 1990 1991 /* ssl_session_new returns a newly-allocated blank |SSL_SESSION| or NULL on 1992 * error. */ 1993 SSL_SESSION *ssl_session_new(const SSL_X509_METHOD *x509_method); 1994 1995 /* SSL_SESSION_parse parses an |SSL_SESSION| from |cbs| and advances |cbs| over 1996 * the parsed data. */ 1997 SSL_SESSION *SSL_SESSION_parse(CBS *cbs, const SSL_X509_METHOD *x509_method, 1998 CRYPTO_BUFFER_POOL *pool); 1999 2000 /* ssl_session_is_context_valid returns one if |session|'s session ID context 2001 * matches the one set on |ssl| and zero otherwise. */ 2002 int ssl_session_is_context_valid(const SSL *ssl, const SSL_SESSION *session); 2003 2004 /* ssl_session_is_time_valid returns one if |session| is still valid and zero if 2005 * it has expired. */ 2006 int ssl_session_is_time_valid(const SSL *ssl, const SSL_SESSION *session); 2007 2008 /* ssl_session_is_resumable returns one if |session| is resumable for |hs| and 2009 * zero otherwise. */ 2010 int ssl_session_is_resumable(const SSL_HANDSHAKE *hs, 2011 const SSL_SESSION *session); 2012 2013 /* SSL_SESSION_get_digest returns the digest used in |session|. If the digest is 2014 * invalid, it returns NULL. */ 2015 const EVP_MD *SSL_SESSION_get_digest(const SSL_SESSION *session, 2016 const SSL *ssl); 2017 2018 void ssl_set_session(SSL *ssl, SSL_SESSION *session); 2019 2020 enum ssl_session_result_t { 2021 ssl_session_success, 2022 ssl_session_error, 2023 ssl_session_retry, 2024 ssl_session_ticket_retry, 2025 }; 2026 2027 /* ssl_get_prev_session looks up the previous session based on |client_hello|. 2028 * On success, it sets |*out_session| to the session or NULL if none was found. 2029 * If the session could not be looked up synchronously, it returns 2030 * |ssl_session_retry| and should be called again. If a ticket could not be 2031 * decrypted immediately it returns |ssl_session_ticket_retry| and should also 2032 * be called again. Otherwise, it returns |ssl_session_error|. */ 2033 enum ssl_session_result_t ssl_get_prev_session( 2034 SSL *ssl, SSL_SESSION **out_session, int *out_tickets_supported, 2035 int *out_renew_ticket, const SSL_CLIENT_HELLO *client_hello); 2036 2037 /* The following flags determine which parts of the session are duplicated. */ 2038 #define SSL_SESSION_DUP_AUTH_ONLY 0x0 2039 #define SSL_SESSION_INCLUDE_TICKET 0x1 2040 #define SSL_SESSION_INCLUDE_NONAUTH 0x2 2041 #define SSL_SESSION_DUP_ALL \ 2042 (SSL_SESSION_INCLUDE_TICKET | SSL_SESSION_INCLUDE_NONAUTH) 2043 2044 /* SSL_SESSION_dup returns a newly-allocated |SSL_SESSION| with a copy of the 2045 * fields in |session| or NULL on error. The new session is non-resumable and 2046 * must be explicitly marked resumable once it has been filled in. */ 2047 OPENSSL_EXPORT SSL_SESSION *SSL_SESSION_dup(SSL_SESSION *session, 2048 int dup_flags); 2049 2050 /* ssl_session_rebase_time updates |session|'s start time to the current time, 2051 * adjusting the timeout so the expiration time is unchanged. */ 2052 void ssl_session_rebase_time(SSL *ssl, SSL_SESSION *session); 2053 2054 /* ssl_session_renew_timeout calls |ssl_session_rebase_time| and renews 2055 * |session|'s timeout to |timeout| (measured from the current time). The 2056 * renewal is clamped to the session's auth_timeout. */ 2057 void ssl_session_renew_timeout(SSL *ssl, SSL_SESSION *session, 2058 uint32_t timeout); 2059 2060 void ssl_cipher_preference_list_free( 2061 struct ssl_cipher_preference_list_st *cipher_list); 2062 2063 /* ssl_get_cipher_preferences returns the cipher preference list for TLS 1.2 and 2064 * below. */ 2065 const struct ssl_cipher_preference_list_st *ssl_get_cipher_preferences( 2066 const SSL *ssl); 2067 2068 void ssl_update_cache(SSL_HANDSHAKE *hs, int mode); 2069 2070 int ssl3_get_finished(SSL_HANDSHAKE *hs); 2071 int ssl3_send_alert(SSL *ssl, int level, int desc); 2072 int ssl3_get_message(SSL *ssl); 2073 void ssl3_get_current_message(const SSL *ssl, CBS *out); 2074 void ssl3_release_current_message(SSL *ssl, int free_buffer); 2075 2076 int ssl3_send_finished(SSL_HANDSHAKE *hs); 2077 int ssl3_dispatch_alert(SSL *ssl); 2078 int ssl3_read_app_data(SSL *ssl, int *out_got_handshake, uint8_t *buf, int len, 2079 int peek); 2080 int ssl3_read_change_cipher_spec(SSL *ssl); 2081 void ssl3_read_close_notify(SSL *ssl); 2082 int ssl3_read_handshake_bytes(SSL *ssl, uint8_t *buf, int len); 2083 int ssl3_write_app_data(SSL *ssl, const uint8_t *buf, int len); 2084 int ssl3_output_cert_chain(SSL *ssl); 2085 2086 int ssl3_new(SSL *ssl); 2087 void ssl3_free(SSL *ssl); 2088 int ssl3_accept(SSL_HANDSHAKE *hs); 2089 int ssl3_connect(SSL_HANDSHAKE *hs); 2090 2091 int ssl3_init_message(SSL *ssl, CBB *cbb, CBB *body, uint8_t type); 2092 int ssl3_finish_message(SSL *ssl, CBB *cbb, uint8_t **out_msg, size_t *out_len); 2093 int ssl3_add_message(SSL *ssl, uint8_t *msg, size_t len); 2094 int ssl3_add_change_cipher_spec(SSL *ssl); 2095 int ssl3_add_alert(SSL *ssl, uint8_t level, uint8_t desc); 2096 int ssl3_flush_flight(SSL *ssl); 2097 2098 int dtls1_init_message(SSL *ssl, CBB *cbb, CBB *body, uint8_t type); 2099 int dtls1_finish_message(SSL *ssl, CBB *cbb, uint8_t **out_msg, 2100 size_t *out_len); 2101 int dtls1_add_message(SSL *ssl, uint8_t *msg, size_t len); 2102 int dtls1_add_change_cipher_spec(SSL *ssl); 2103 int dtls1_add_alert(SSL *ssl, uint8_t level, uint8_t desc); 2104 int dtls1_flush_flight(SSL *ssl); 2105 2106 /* ssl_add_message_cbb finishes the handshake message in |cbb| and adds it to 2107 * the pending flight. It returns one on success and zero on error. */ 2108 int ssl_add_message_cbb(SSL *ssl, CBB *cbb); 2109 2110 /* ssl_hash_current_message incorporates the current handshake message into the 2111 * handshake hash. It returns one on success and zero on allocation failure. */ 2112 int ssl_hash_current_message(SSL_HANDSHAKE *hs); 2113 2114 /* dtls1_get_record reads a new input record. On success, it places it in 2115 * |ssl->s3->rrec| and returns one. Otherwise it returns <= 0 on error or if 2116 * more data is needed. */ 2117 int dtls1_get_record(SSL *ssl); 2118 2119 int dtls1_read_app_data(SSL *ssl, int *out_got_handshake, uint8_t *buf, int len, 2120 int peek); 2121 int dtls1_read_change_cipher_spec(SSL *ssl); 2122 void dtls1_read_close_notify(SSL *ssl); 2123 2124 int dtls1_write_app_data(SSL *ssl, const uint8_t *buf, int len); 2125 2126 /* dtls1_write_record sends a record. It returns one on success and <= 0 on 2127 * error. */ 2128 int dtls1_write_record(SSL *ssl, int type, const uint8_t *buf, size_t len, 2129 enum dtls1_use_epoch_t use_epoch); 2130 2131 int dtls1_send_finished(SSL *ssl, int a, int b, const char *sender, int slen); 2132 int dtls1_retransmit_outgoing_messages(SSL *ssl); 2133 void dtls1_clear_record_buffer(SSL *ssl); 2134 int dtls1_parse_fragment(CBS *cbs, struct hm_header_st *out_hdr, 2135 CBS *out_body); 2136 int dtls1_check_timeout_num(SSL *ssl); 2137 int dtls1_handshake_write(SSL *ssl); 2138 2139 void dtls1_start_timer(SSL *ssl); 2140 void dtls1_stop_timer(SSL *ssl); 2141 int dtls1_is_timer_expired(SSL *ssl); 2142 void dtls1_double_timeout(SSL *ssl); 2143 unsigned int dtls1_min_mtu(void); 2144 2145 int dtls1_new(SSL *ssl); 2146 int dtls1_accept(SSL *ssl); 2147 int dtls1_connect(SSL *ssl); 2148 void dtls1_free(SSL *ssl); 2149 2150 int dtls1_get_message(SSL *ssl); 2151 void dtls1_get_current_message(const SSL *ssl, CBS *out); 2152 void dtls1_release_current_message(SSL *ssl, int free_buffer); 2153 int dtls1_dispatch_alert(SSL *ssl); 2154 2155 int tls1_change_cipher_state(SSL_HANDSHAKE *hs, int which); 2156 int tls1_generate_master_secret(SSL_HANDSHAKE *hs, uint8_t *out, 2157 const uint8_t *premaster, size_t premaster_len); 2158 2159 /* tls1_get_grouplist sets |*out_group_ids| and |*out_group_ids_len| to the 2160 * locally-configured group preference list. */ 2161 void tls1_get_grouplist(SSL *ssl, const uint16_t **out_group_ids, 2162 size_t *out_group_ids_len); 2163 2164 /* tls1_check_group_id returns one if |group_id| is consistent with 2165 * locally-configured group preferences. */ 2166 int tls1_check_group_id(SSL *ssl, uint16_t group_id); 2167 2168 /* tls1_get_shared_group sets |*out_group_id| to the first preferred shared 2169 * group between client and server preferences and returns one. If none may be 2170 * found, it returns zero. */ 2171 int tls1_get_shared_group(SSL_HANDSHAKE *hs, uint16_t *out_group_id); 2172 2173 /* tls1_set_curves converts the array of |ncurves| NIDs pointed to by |curves| 2174 * into a newly allocated array of TLS group IDs. On success, the function 2175 * returns one and writes the array to |*out_group_ids| and its size to 2176 * |*out_group_ids_len|. Otherwise, it returns zero. */ 2177 int tls1_set_curves(uint16_t **out_group_ids, size_t *out_group_ids_len, 2178 const int *curves, size_t ncurves); 2179 2180 /* tls1_set_curves_list converts the string of curves pointed to by |curves| 2181 * into a newly allocated array of TLS group IDs. On success, the function 2182 * returns one and writes the array to |*out_group_ids| and its size to 2183 * |*out_group_ids_len|. Otherwise, it returns zero. */ 2184 int tls1_set_curves_list(uint16_t **out_group_ids, size_t *out_group_ids_len, 2185 const char *curves); 2186 2187 /* ssl_add_clienthello_tlsext writes ClientHello extensions to |out|. It 2188 * returns one on success and zero on failure. The |header_len| argument is the 2189 * length of the ClientHello written so far and is used to compute the padding 2190 * length. (It does not include the record header.) */ 2191 int ssl_add_clienthello_tlsext(SSL_HANDSHAKE *hs, CBB *out, size_t header_len); 2192 2193 int ssl_add_serverhello_tlsext(SSL_HANDSHAKE *hs, CBB *out); 2194 int ssl_parse_clienthello_tlsext(SSL_HANDSHAKE *hs, 2195 const SSL_CLIENT_HELLO *client_hello); 2196 int ssl_parse_serverhello_tlsext(SSL_HANDSHAKE *hs, CBS *cbs); 2197 2198 #define tlsext_tick_md EVP_sha256 2199 2200 /* ssl_process_ticket processes a session ticket from the client. It returns 2201 * one of: 2202 * |ssl_ticket_aead_success|: |*out_session| is set to the parsed session and 2203 * |*out_renew_ticket| is set to whether the ticket should be renewed. 2204 * |ssl_ticket_aead_ignore_ticket|: |*out_renew_ticket| is set to whether a 2205 * fresh ticket should be sent, but the given ticket cannot be used. 2206 * |ssl_ticket_aead_retry|: the ticket could not be immediately decrypted. 2207 * Retry later. 2208 * |ssl_ticket_aead_error|: an error occured that is fatal to the connection. */ 2209 enum ssl_ticket_aead_result_t ssl_process_ticket( 2210 SSL *ssl, SSL_SESSION **out_session, int *out_renew_ticket, 2211 const uint8_t *ticket, size_t ticket_len, const uint8_t *session_id, 2212 size_t session_id_len); 2213 2214 /* tls1_verify_channel_id processes the current message as a Channel ID message, 2215 * and verifies the signature. If the key is valid, it saves the Channel ID and 2216 * returns one. Otherwise, it returns zero. */ 2217 int tls1_verify_channel_id(SSL_HANDSHAKE *hs); 2218 2219 /* tls1_write_channel_id generates a Channel ID message and puts the output in 2220 * |cbb|. |ssl->tlsext_channel_id_private| must already be set before calling. 2221 * This function returns one on success and zero on error. */ 2222 int tls1_write_channel_id(SSL_HANDSHAKE *hs, CBB *cbb); 2223 2224 /* tls1_channel_id_hash computes the hash to be signed by Channel ID and writes 2225 * it to |out|, which must contain at least |EVP_MAX_MD_SIZE| bytes. It returns 2226 * one on success and zero on failure. */ 2227 int tls1_channel_id_hash(SSL_HANDSHAKE *hs, uint8_t *out, size_t *out_len); 2228 2229 int tls1_record_handshake_hashes_for_channel_id(SSL_HANDSHAKE *hs); 2230 2231 /* ssl_do_channel_id_callback checks runs |ssl->ctx->channel_id_cb| if 2232 * necessary. It returns one on success and zero on fatal error. Note that, on 2233 * success, |ssl->tlsext_channel_id_private| may be unset, in which case the 2234 * operation should be retried later. */ 2235 int ssl_do_channel_id_callback(SSL *ssl); 2236 2237 /* ssl3_can_false_start returns one if |ssl| is allowed to False Start and zero 2238 * otherwise. */ 2239 int ssl3_can_false_start(const SSL *ssl); 2240 2241 /* ssl_can_write returns one if |ssl| is allowed to write and zero otherwise. */ 2242 int ssl_can_write(const SSL *ssl); 2243 2244 /* ssl_can_read returns one if |ssl| is allowed to read and zero otherwise. */ 2245 int ssl_can_read(const SSL *ssl); 2246 2247 /* ssl_get_version_range sets |*out_min_version| and |*out_max_version| to the 2248 * minimum and maximum enabled protocol versions, respectively. */ 2249 int ssl_get_version_range(const SSL *ssl, uint16_t *out_min_version, 2250 uint16_t *out_max_version); 2251 2252 /* ssl3_protocol_version returns |ssl|'s protocol version. It is an error to 2253 * call this function before the version is determined. */ 2254 uint16_t ssl3_protocol_version(const SSL *ssl); 2255 2256 void ssl_get_current_time(const SSL *ssl, struct OPENSSL_timeval *out_clock); 2257 2258 /* ssl_reset_error_state resets state for |SSL_get_error|. */ 2259 void ssl_reset_error_state(SSL *ssl); 2260 2261 2262 #if defined(__cplusplus) 2263 } /* extern C */ 2264 #endif 2265 2266 #endif /* OPENSSL_HEADER_SSL_INTERNAL_H */ 2267