Home | History | Annotate | Download | only in openssl
      1 /* ssl/ssl3.h */
      2 /* Copyright (C) 1995-1998 Eric Young (eay (at) cryptsoft.com)
      3  * All rights reserved.
      4  *
      5  * This package is an SSL implementation written
      6  * by Eric Young (eay (at) cryptsoft.com).
      7  * The implementation was written so as to conform with Netscapes SSL.
      8  *
      9  * This library is free for commercial and non-commercial use as long as
     10  * the following conditions are aheared to.  The following conditions
     11  * apply to all code found in this distribution, be it the RC4, RSA,
     12  * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
     13  * included with this distribution is covered by the same copyright terms
     14  * except that the holder is Tim Hudson (tjh (at) cryptsoft.com).
     15  *
     16  * Copyright remains Eric Young's, and as such any Copyright notices in
     17  * the code are not to be removed.
     18  * If this package is used in a product, Eric Young should be given attribution
     19  * as the author of the parts of the library used.
     20  * This can be in the form of a textual message at program startup or
     21  * in documentation (online or textual) provided with the package.
     22  *
     23  * Redistribution and use in source and binary forms, with or without
     24  * modification, are permitted provided that the following conditions
     25  * are met:
     26  * 1. Redistributions of source code must retain the copyright
     27  *    notice, this list of conditions and the following disclaimer.
     28  * 2. Redistributions in binary form must reproduce the above copyright
     29  *    notice, this list of conditions and the following disclaimer in the
     30  *    documentation and/or other materials provided with the distribution.
     31  * 3. All advertising materials mentioning features or use of this software
     32  *    must display the following acknowledgement:
     33  *    "This product includes cryptographic software written by
     34  *     Eric Young (eay (at) cryptsoft.com)"
     35  *    The word 'cryptographic' can be left out if the rouines from the library
     36  *    being used are not cryptographic related :-).
     37  * 4. If you include any Windows specific code (or a derivative thereof) from
     38  *    the apps directory (application code) you must include an acknowledgement:
     39  *    "This product includes software written by Tim Hudson (tjh (at) cryptsoft.com)"
     40  *
     41  * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
     42  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     43  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     44  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
     45  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     46  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     47  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     48  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     49  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     50  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     51  * SUCH DAMAGE.
     52  *
     53  * The licence and distribution terms for any publically available version or
     54  * derivative of this code cannot be changed.  i.e. this code cannot simply be
     55  * copied and put under another distribution licence
     56  * [including the GNU Public Licence.]
     57  */
     58 /* ====================================================================
     59  * Copyright (c) 1998-2002 The OpenSSL Project.  All rights reserved.
     60  *
     61  * Redistribution and use in source and binary forms, with or without
     62  * modification, are permitted provided that the following conditions
     63  * are met:
     64  *
     65  * 1. Redistributions of source code must retain the above copyright
     66  *    notice, this list of conditions and the following disclaimer.
     67  *
     68  * 2. Redistributions in binary form must reproduce the above copyright
     69  *    notice, this list of conditions and the following disclaimer in
     70  *    the documentation and/or other materials provided with the
     71  *    distribution.
     72  *
     73  * 3. All advertising materials mentioning features or use of this
     74  *    software must display the following acknowledgment:
     75  *    "This product includes software developed by the OpenSSL Project
     76  *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
     77  *
     78  * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
     79  *    endorse or promote products derived from this software without
     80  *    prior written permission. For written permission, please contact
     81  *    openssl-core (at) openssl.org.
     82  *
     83  * 5. Products derived from this software may not be called "OpenSSL"
     84  *    nor may "OpenSSL" appear in their names without prior written
     85  *    permission of the OpenSSL Project.
     86  *
     87  * 6. Redistributions of any form whatsoever must retain the following
     88  *    acknowledgment:
     89  *    "This product includes software developed by the OpenSSL Project
     90  *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
     91  *
     92  * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
     93  * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     94  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     95  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
     96  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     97  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
     98  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
     99  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    100  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
    101  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
    102  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
    103  * OF THE POSSIBILITY OF SUCH DAMAGE.
    104  * ====================================================================
    105  *
    106  * This product includes cryptographic software written by Eric Young
    107  * (eay (at) cryptsoft.com).  This product includes software written by Tim
    108  * Hudson (tjh (at) cryptsoft.com).
    109  *
    110  */
    111 /* ====================================================================
    112  * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.
    113  * ECC cipher suite support in OpenSSL originally developed by
    114  * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project.
    115  */
    116 
    117 #ifndef HEADER_SSL3_H
    118 #define HEADER_SSL3_H
    119 
    120 #include <openssl/aead.h>
    121 #include <openssl/buf.h>
    122 #include <openssl/evp.h>
    123 #include <openssl/ssl.h>
    124 #include <openssl/type_check.h>
    125 
    126 #ifdef  __cplusplus
    127 extern "C" {
    128 #endif
    129 
    130 
    131 /* Signalling cipher suite value: from RFC5746 */
    132 #define SSL3_CK_SCSV 0x030000FF
    133 /* Fallback signalling cipher suite value: not IANA assigned.
    134  * See https://tools.ietf.org/html/draft-bmoeller-tls-downgrade-scsv-01 */
    135 #define SSL3_CK_FALLBACK_SCSV 0x03005600
    136 
    137 #define SSL3_CK_RSA_NULL_MD5 0x03000001
    138 #define SSL3_CK_RSA_NULL_SHA 0x03000002
    139 #define SSL3_CK_RSA_RC4_40_MD5 0x03000003
    140 #define SSL3_CK_RSA_RC4_128_MD5 0x03000004
    141 #define SSL3_CK_RSA_RC4_128_SHA 0x03000005
    142 #define SSL3_CK_RSA_RC2_40_MD5 0x03000006
    143 #define SSL3_CK_RSA_IDEA_128_SHA 0x03000007
    144 #define SSL3_CK_RSA_DES_40_CBC_SHA 0x03000008
    145 #define SSL3_CK_RSA_DES_64_CBC_SHA 0x03000009
    146 #define SSL3_CK_RSA_DES_192_CBC3_SHA 0x0300000A
    147 
    148 #define SSL3_CK_DH_DSS_DES_40_CBC_SHA 0x0300000B
    149 #define SSL3_CK_DH_DSS_DES_64_CBC_SHA 0x0300000C
    150 #define SSL3_CK_DH_DSS_DES_192_CBC3_SHA 0x0300000D
    151 #define SSL3_CK_DH_RSA_DES_40_CBC_SHA 0x0300000E
    152 #define SSL3_CK_DH_RSA_DES_64_CBC_SHA 0x0300000F
    153 #define SSL3_CK_DH_RSA_DES_192_CBC3_SHA 0x03000010
    154 
    155 #define SSL3_CK_EDH_DSS_DES_40_CBC_SHA 0x03000011
    156 #define SSL3_CK_EDH_DSS_DES_64_CBC_SHA 0x03000012
    157 #define SSL3_CK_EDH_DSS_DES_192_CBC3_SHA 0x03000013
    158 #define SSL3_CK_EDH_RSA_DES_40_CBC_SHA 0x03000014
    159 #define SSL3_CK_EDH_RSA_DES_64_CBC_SHA 0x03000015
    160 #define SSL3_CK_EDH_RSA_DES_192_CBC3_SHA 0x03000016
    161 
    162 #define SSL3_CK_ADH_RC4_40_MD5 0x03000017
    163 #define SSL3_CK_ADH_RC4_128_MD5 0x03000018
    164 #define SSL3_CK_ADH_DES_40_CBC_SHA 0x03000019
    165 #define SSL3_CK_ADH_DES_64_CBC_SHA 0x0300001A
    166 #define SSL3_CK_ADH_DES_192_CBC_SHA 0x0300001B
    167 
    168 #define SSL3_TXT_RSA_NULL_MD5 "NULL-MD5"
    169 #define SSL3_TXT_RSA_NULL_SHA "NULL-SHA"
    170 #define SSL3_TXT_RSA_RC4_40_MD5 "EXP-RC4-MD5"
    171 #define SSL3_TXT_RSA_RC4_128_MD5 "RC4-MD5"
    172 #define SSL3_TXT_RSA_RC4_128_SHA "RC4-SHA"
    173 #define SSL3_TXT_RSA_RC2_40_MD5 "EXP-RC2-CBC-MD5"
    174 #define SSL3_TXT_RSA_IDEA_128_SHA "IDEA-CBC-SHA"
    175 #define SSL3_TXT_RSA_DES_40_CBC_SHA "EXP-DES-CBC-SHA"
    176 #define SSL3_TXT_RSA_DES_64_CBC_SHA "DES-CBC-SHA"
    177 #define SSL3_TXT_RSA_DES_192_CBC3_SHA "DES-CBC3-SHA"
    178 
    179 #define SSL3_TXT_DH_DSS_DES_40_CBC_SHA "EXP-DH-DSS-DES-CBC-SHA"
    180 #define SSL3_TXT_DH_DSS_DES_64_CBC_SHA "DH-DSS-DES-CBC-SHA"
    181 #define SSL3_TXT_DH_DSS_DES_192_CBC3_SHA "DH-DSS-DES-CBC3-SHA"
    182 #define SSL3_TXT_DH_RSA_DES_40_CBC_SHA "EXP-DH-RSA-DES-CBC-SHA"
    183 #define SSL3_TXT_DH_RSA_DES_64_CBC_SHA "DH-RSA-DES-CBC-SHA"
    184 #define SSL3_TXT_DH_RSA_DES_192_CBC3_SHA "DH-RSA-DES-CBC3-SHA"
    185 
    186 #define SSL3_TXT_EDH_DSS_DES_40_CBC_SHA "EXP-EDH-DSS-DES-CBC-SHA"
    187 #define SSL3_TXT_EDH_DSS_DES_64_CBC_SHA "EDH-DSS-DES-CBC-SHA"
    188 #define SSL3_TXT_EDH_DSS_DES_192_CBC3_SHA "EDH-DSS-DES-CBC3-SHA"
    189 #define SSL3_TXT_EDH_RSA_DES_40_CBC_SHA "EXP-EDH-RSA-DES-CBC-SHA"
    190 #define SSL3_TXT_EDH_RSA_DES_64_CBC_SHA "EDH-RSA-DES-CBC-SHA"
    191 #define SSL3_TXT_EDH_RSA_DES_192_CBC3_SHA "EDH-RSA-DES-CBC3-SHA"
    192 
    193 #define SSL3_TXT_ADH_RC4_40_MD5 "EXP-ADH-RC4-MD5"
    194 #define SSL3_TXT_ADH_RC4_128_MD5 "ADH-RC4-MD5"
    195 #define SSL3_TXT_ADH_DES_40_CBC_SHA "EXP-ADH-DES-CBC-SHA"
    196 #define SSL3_TXT_ADH_DES_64_CBC_SHA "ADH-DES-CBC-SHA"
    197 #define SSL3_TXT_ADH_DES_192_CBC_SHA "ADH-DES-CBC3-SHA"
    198 
    199 #define SSL3_SSL_SESSION_ID_LENGTH 32
    200 #define SSL3_MAX_SSL_SESSION_ID_LENGTH 32
    201 
    202 #define SSL3_MASTER_SECRET_SIZE 48
    203 #define SSL3_RANDOM_SIZE 32
    204 #define SSL3_SESSION_ID_SIZE 32
    205 #define SSL3_RT_HEADER_LENGTH 5
    206 
    207 #define SSL3_HM_HEADER_LENGTH 4
    208 
    209 #ifndef SSL3_ALIGN_PAYLOAD
    210 /* Some will argue that this increases memory footprint, but it's not actually
    211  * true. Point is that malloc has to return at least 64-bit aligned pointers,
    212  * meaning that allocating 5 bytes wastes 3 bytes in either case. Suggested
    213  * pre-gaping simply moves these wasted bytes from the end of allocated region
    214  * to its front, but makes data payload aligned, which improves performance. */
    215 #define SSL3_ALIGN_PAYLOAD 8
    216 #else
    217 #if (SSL3_ALIGN_PAYLOAD & (SSL3_ALIGN_PAYLOAD - 1)) != 0
    218 #error "insane SSL3_ALIGN_PAYLOAD"
    219 #undef SSL3_ALIGN_PAYLOAD
    220 #endif
    221 #endif
    222 
    223 /* This is the maximum MAC (digest) size used by the SSL library. Currently
    224  * maximum of 20 is used by SHA1, but we reserve for future extension for
    225  * 512-bit hashes. */
    226 
    227 #define SSL3_RT_MAX_MD_SIZE 64
    228 
    229 /* Maximum block size used in all ciphersuites. Currently 16 for AES. */
    230 
    231 #define SSL_RT_MAX_CIPHER_BLOCK_SIZE 16
    232 
    233 #define SSL3_RT_MAX_EXTRA (16384)
    234 
    235 /* Maximum plaintext length: defined by SSL/TLS standards */
    236 #define SSL3_RT_MAX_PLAIN_LENGTH 16384
    237 /* Maximum compression overhead: defined by SSL/TLS standards */
    238 #define SSL3_RT_MAX_COMPRESSED_OVERHEAD 1024
    239 
    240 /* The standards give a maximum encryption overhead of 1024 bytes. In practice
    241  * the value is lower than this. The overhead is the maximum number of padding
    242  * bytes (256) plus the mac size.
    243  *
    244  * TODO(davidben): This derivation doesn't take AEADs into account, or TLS 1.1
    245  * explicit nonces. It happens to work because |SSL3_RT_MAX_MD_SIZE| is larger
    246  * than necessary and no true AEAD has variable overhead in TLS 1.2. */
    247 #define SSL3_RT_MAX_ENCRYPTED_OVERHEAD (256 + SSL3_RT_MAX_MD_SIZE)
    248 
    249 /* SSL3_RT_SEND_MAX_ENCRYPTED_OVERHEAD is the maximum overhead in encrypting a
    250  * record. This does not include the record header. Some ciphers use explicit
    251  * nonces, so it includes both the AEAD overhead as well as the nonce. */
    252 #define SSL3_RT_SEND_MAX_ENCRYPTED_OVERHEAD \
    253     (EVP_AEAD_MAX_OVERHEAD + EVP_AEAD_MAX_NONCE_LENGTH)
    254 
    255 OPENSSL_COMPILE_ASSERT(
    256     SSL3_RT_MAX_ENCRYPTED_OVERHEAD >= SSL3_RT_SEND_MAX_ENCRYPTED_OVERHEAD,
    257     max_overheads_are_consistent);
    258 
    259 /* SSL3_RT_MAX_COMPRESSED_LENGTH is an alias for
    260  * |SSL3_RT_MAX_PLAIN_LENGTH|. Compression is gone, so don't include the
    261  * compression overhead. */
    262 #define SSL3_RT_MAX_COMPRESSED_LENGTH SSL3_RT_MAX_PLAIN_LENGTH
    263 
    264 #define SSL3_RT_MAX_ENCRYPTED_LENGTH \
    265   (SSL3_RT_MAX_ENCRYPTED_OVERHEAD + SSL3_RT_MAX_COMPRESSED_LENGTH)
    266 #define SSL3_RT_MAX_PACKET_SIZE \
    267   (SSL3_RT_MAX_ENCRYPTED_LENGTH + SSL3_RT_HEADER_LENGTH)
    268 
    269 #define SSL3_MD_CLIENT_FINISHED_CONST "\x43\x4C\x4E\x54"
    270 #define SSL3_MD_SERVER_FINISHED_CONST "\x53\x52\x56\x52"
    271 
    272 #define SSL3_VERSION 0x0300
    273 #define SSL3_VERSION_MAJOR 0x03
    274 #define SSL3_VERSION_MINOR 0x00
    275 
    276 #define SSL3_RT_CHANGE_CIPHER_SPEC 20
    277 #define SSL3_RT_ALERT 21
    278 #define SSL3_RT_HANDSHAKE 22
    279 #define SSL3_RT_APPLICATION_DATA 23
    280 
    281 /* Pseudo content types to indicate additional parameters */
    282 #define TLS1_RT_CRYPTO 0x1000
    283 #define TLS1_RT_CRYPTO_PREMASTER (TLS1_RT_CRYPTO | 0x1)
    284 #define TLS1_RT_CRYPTO_CLIENT_RANDOM (TLS1_RT_CRYPTO | 0x2)
    285 #define TLS1_RT_CRYPTO_SERVER_RANDOM (TLS1_RT_CRYPTO | 0x3)
    286 #define TLS1_RT_CRYPTO_MASTER (TLS1_RT_CRYPTO | 0x4)
    287 
    288 #define TLS1_RT_CRYPTO_READ 0x0000
    289 #define TLS1_RT_CRYPTO_WRITE 0x0100
    290 #define TLS1_RT_CRYPTO_MAC (TLS1_RT_CRYPTO | 0x5)
    291 #define TLS1_RT_CRYPTO_KEY (TLS1_RT_CRYPTO | 0x6)
    292 #define TLS1_RT_CRYPTO_IV (TLS1_RT_CRYPTO | 0x7)
    293 #define TLS1_RT_CRYPTO_FIXED_IV (TLS1_RT_CRYPTO | 0x8)
    294 
    295 /* Pseudo content type for SSL/TLS header info */
    296 #define SSL3_RT_HEADER 0x100
    297 
    298 #define SSL3_AL_WARNING 1
    299 #define SSL3_AL_FATAL 2
    300 
    301 #define SSL3_AD_CLOSE_NOTIFY 0
    302 #define SSL3_AD_UNEXPECTED_MESSAGE 10    /* fatal */
    303 #define SSL3_AD_BAD_RECORD_MAC 20        /* fatal */
    304 #define SSL3_AD_DECOMPRESSION_FAILURE 30 /* fatal */
    305 #define SSL3_AD_HANDSHAKE_FAILURE 40     /* fatal */
    306 #define SSL3_AD_NO_CERTIFICATE 41
    307 #define SSL3_AD_BAD_CERTIFICATE 42
    308 #define SSL3_AD_UNSUPPORTED_CERTIFICATE 43
    309 #define SSL3_AD_CERTIFICATE_REVOKED 44
    310 #define SSL3_AD_CERTIFICATE_EXPIRED 45
    311 #define SSL3_AD_CERTIFICATE_UNKNOWN 46
    312 #define SSL3_AD_ILLEGAL_PARAMETER 47      /* fatal */
    313 #define SSL3_AD_INAPPROPRIATE_FALLBACK 86 /* fatal */
    314 
    315 typedef struct ssl3_record_st {
    316   /* type is the record type. */
    317   uint8_t type;
    318   /* length is the number of unconsumed bytes of |data|. */
    319   uint16_t length;
    320   /* off is the number of consumed bytes of |data|. */
    321   uint16_t off;
    322   /* data is a non-owning pointer to the record contents. The total length of
    323    * the buffer is |off| + |length|. */
    324   uint8_t *data;
    325   /* epoch, in DTLS, is the epoch number of the record. */
    326   uint16_t epoch;
    327   /* seq_num, in DTLS, is the sequence number of the record. The top two bytes
    328    * are always zero.
    329    *
    330    * TODO(davidben): This is confusing. They should include the epoch or the
    331    * field should be six bytes. */
    332   uint8_t seq_num[8];
    333 } SSL3_RECORD;
    334 
    335 typedef struct ssl3_buffer_st {
    336   uint8_t *buf;       /* at least SSL3_RT_MAX_PACKET_SIZE bytes, see
    337                          ssl3_setup_buffers() */
    338   size_t len;         /* buffer size */
    339   int offset;         /* where to 'copy from' */
    340   int left;           /* how many bytes left */
    341 } SSL3_BUFFER;
    342 
    343 #define SSL3_CT_RSA_SIGN 1
    344 #define SSL3_CT_DSS_SIGN 2
    345 #define SSL3_CT_RSA_FIXED_DH 3
    346 #define SSL3_CT_DSS_FIXED_DH 4
    347 #define SSL3_CT_RSA_EPHEMERAL_DH 5
    348 #define SSL3_CT_DSS_EPHEMERAL_DH 6
    349 #define SSL3_CT_FORTEZZA_DMS 20
    350 
    351 
    352 /* TODO(davidben): This flag can probably be merged into s3->change_cipher_spec
    353  * to something tri-state. (Normal / Expect CCS / Between CCS and Finished). */
    354 #define SSL3_FLAGS_EXPECT_CCS 0x0080
    355 
    356 typedef struct ssl3_state_st {
    357   long flags;
    358 
    359   uint8_t read_sequence[8];
    360   int read_mac_secret_size;
    361   uint8_t read_mac_secret[EVP_MAX_MD_SIZE];
    362   uint8_t write_sequence[8];
    363   int write_mac_secret_size;
    364   uint8_t write_mac_secret[EVP_MAX_MD_SIZE];
    365 
    366   uint8_t server_random[SSL3_RANDOM_SIZE];
    367   uint8_t client_random[SSL3_RANDOM_SIZE];
    368 
    369   /* flags for countermeasure against known-IV weakness */
    370   int need_record_splitting;
    371 
    372   /* The value of 'extra' when the buffers were initialized */
    373   int init_extra;
    374 
    375   /* have_version is true if the connection's final version is known. Otherwise
    376    * the version has not been negotiated yet. */
    377   char have_version;
    378 
    379   /* initial_handshake_complete is true if the initial handshake has
    380    * completed. */
    381   char initial_handshake_complete;
    382 
    383   /* sniff_buffer is used by the server in the initial handshake to read a
    384    * V2ClientHello before the record layer is initialized. */
    385   BUF_MEM *sniff_buffer;
    386   size_t sniff_buffer_len;
    387 
    388   SSL3_BUFFER rbuf; /* read IO goes into here */
    389   SSL3_BUFFER wbuf; /* write IO goes into here */
    390 
    391   SSL3_RECORD rrec; /* each decoded record goes in here */
    392 
    393   /* storage for Handshake protocol data received but not yet processed by
    394    * ssl3_read_bytes: */
    395   uint8_t handshake_fragment[4];
    396   unsigned int handshake_fragment_len;
    397 
    398   /* partial write - check the numbers match */
    399   unsigned int wnum; /* number of bytes sent so far */
    400   int wpend_tot;     /* number bytes written */
    401   int wpend_type;
    402   int wpend_ret; /* number of bytes submitted */
    403   const uint8_t *wpend_buf;
    404 
    405   /* used during startup, digest all incoming/outgoing packets */
    406   BIO *handshake_buffer;
    407   /* When set of handshake digests is determined, buffer is hashed and freed
    408    * and MD_CTX-es for all required digests are stored in this array */
    409   EVP_MD_CTX **handshake_dgst;
    410   /* this is set whenerver we see a change_cipher_spec message come in when we
    411    * are not looking for one */
    412   int change_cipher_spec;
    413 
    414   int warn_alert;
    415   int fatal_alert;
    416   /* we allow one fatal and one warning alert to be outstanding, send close
    417    * alert via the warning alert */
    418   int alert_dispatch;
    419   uint8_t send_alert[2];
    420 
    421   int total_renegotiations;
    422 
    423   /* State pertaining to the pending handshake.
    424    *
    425    * TODO(davidben): State is current spread all over the place. Move
    426    * pending handshake state here so it can be managed separately from
    427    * established connection state in case of renegotiations. */
    428   struct {
    429     /* actually only need to be 16+20 for SSLv3 and 12 for TLS */
    430     uint8_t finish_md[EVP_MAX_MD_SIZE * 2];
    431     int finish_md_len;
    432     uint8_t peer_finish_md[EVP_MAX_MD_SIZE * 2];
    433     int peer_finish_md_len;
    434 
    435     unsigned long message_size;
    436     int message_type;
    437 
    438     /* used to hold the new cipher we are going to use */
    439     const SSL_CIPHER *new_cipher;
    440     DH *dh;
    441 
    442     EC_KEY *ecdh; /* holds short lived ECDH key */
    443 
    444     /* used when SSL_ST_FLUSH_DATA is entered */
    445     int next_state;
    446 
    447     int reuse_message;
    448 
    449     /* Client-only: cert_req determines if a client certificate is to be sent.
    450      * This is 0 if no client Certificate message is to be sent, 1 if there is
    451      * a client certificate, and 2 to send an empty client Certificate
    452      * message. */
    453     int cert_req;
    454 
    455     /* Client-only: ca_names contains the list of CAs received in a
    456      * CertificateRequest message. */
    457     STACK_OF(X509_NAME) *ca_names;
    458 
    459     /* Client-only: certificate_types contains the set of certificate types
    460      * received in a CertificateRequest message. */
    461     uint8_t *certificate_types;
    462     size_t num_certificate_types;
    463 
    464     int key_block_length;
    465     uint8_t *key_block;
    466 
    467     const EVP_AEAD *new_aead;
    468     uint8_t new_mac_secret_len;
    469     uint8_t new_fixed_iv_len;
    470     uint8_t new_variable_iv_len;
    471 
    472     /* Server-only: cert_request is true if a client certificate was
    473      * requested. */
    474     int cert_request;
    475 
    476     /* certificate_status_expected is true if OCSP stapling was negotiated and
    477      * the server is expected to send a CertificateStatus message. */
    478     char certificate_status_expected;
    479 
    480     /* peer_ecpointformatlist contains the EC point formats advertised by the
    481      * peer. */
    482     uint8_t *peer_ecpointformatlist;
    483     size_t peer_ecpointformatlist_length;
    484 
    485     /* Server-only: peer_ellipticcurvelist contains the EC curve IDs advertised
    486      * by the peer. This is only set on the server's end. The server does not
    487      * advertise this extension to the client. */
    488     uint16_t *peer_ellipticcurvelist;
    489     size_t peer_ellipticcurvelist_length;
    490 
    491     /* extended_master_secret indicates whether the extended master secret
    492      * computation is used in this handshake. Note that this is different from
    493      * whether it was used for the current session. If this is a resumption
    494      * handshake then EMS might be negotiated in the client and server hello
    495      * messages, but it doesn't matter if the session that's being resumed
    496      * didn't use it to create the master secret initially. */
    497     char extended_master_secret;
    498 
    499     /* Client-only: peer_psk_identity_hint is the psk_identity_hint sent by the
    500      * server when using a PSK key exchange. */
    501     char *peer_psk_identity_hint;
    502 
    503     /* new_mac_secret_size is unused and exists only until wpa_supplicant can
    504      * be updated. It is only needed for EAP-FAST, which we don't support. */
    505     uint8_t new_mac_secret_size;
    506 
    507     /* Client-only: in_false_start is one if there is a pending handshake in
    508      * False Start. The client may write data at this point. */
    509     char in_false_start;
    510   } tmp;
    511 
    512   /* Connection binding to prevent renegotiation attacks */
    513   uint8_t previous_client_finished[EVP_MAX_MD_SIZE];
    514   uint8_t previous_client_finished_len;
    515   uint8_t previous_server_finished[EVP_MAX_MD_SIZE];
    516   uint8_t previous_server_finished_len;
    517   int send_connection_binding; /* TODOEKR */
    518 
    519   /* Set if we saw the Next Protocol Negotiation extension from our peer. */
    520   int next_proto_neg_seen;
    521 
    522   /* ALPN information
    523    * (we are in the process of transitioning from NPN to ALPN.) */
    524 
    525   /* In a server these point to the selected ALPN protocol after the
    526    * ClientHello has been processed. In a client these contain the protocol
    527    * that the server selected once the ServerHello has been processed. */
    528   uint8_t *alpn_selected;
    529   size_t alpn_selected_len;
    530 
    531   /* In a client, this means that the server supported Channel ID and that a
    532    * Channel ID was sent. In a server it means that we echoed support for
    533    * Channel IDs and that tlsext_channel_id will be valid after the
    534    * handshake. */
    535   char tlsext_channel_id_valid;
    536   /* tlsext_channel_id_new means that the updated Channel ID extension was
    537    * negotiated. This is a temporary hack in the code to support both forms of
    538    * Channel ID extension while we transition to the new format, which fixed a
    539    * security issue. */
    540   char tlsext_channel_id_new;
    541   /* For a server:
    542    *     If |tlsext_channel_id_valid| is true, then this contains the
    543    *     verified Channel ID from the client: a P256 point, (x,y), where
    544    *     each are big-endian values. */
    545   uint8_t tlsext_channel_id[64];
    546 } SSL3_STATE;
    547 
    548 /* SSLv3 */
    549 /* client */
    550 /* extra state */
    551 #define SSL3_ST_CW_FLUSH (0x100 | SSL_ST_CONNECT)
    552 #define SSL3_ST_FALSE_START (0x101 | SSL_ST_CONNECT)
    553 /* write to server */
    554 #define SSL3_ST_CW_CLNT_HELLO_A (0x110 | SSL_ST_CONNECT)
    555 #define SSL3_ST_CW_CLNT_HELLO_B (0x111 | SSL_ST_CONNECT)
    556 /* read from server */
    557 #define SSL3_ST_CR_SRVR_HELLO_A (0x120 | SSL_ST_CONNECT)
    558 #define SSL3_ST_CR_SRVR_HELLO_B (0x121 | SSL_ST_CONNECT)
    559 #define DTLS1_ST_CR_HELLO_VERIFY_REQUEST_A (0x126 | SSL_ST_CONNECT)
    560 #define DTLS1_ST_CR_HELLO_VERIFY_REQUEST_B (0x127 | SSL_ST_CONNECT)
    561 #define SSL3_ST_CR_CERT_A (0x130 | SSL_ST_CONNECT)
    562 #define SSL3_ST_CR_CERT_B (0x131 | SSL_ST_CONNECT)
    563 #define SSL3_ST_CR_KEY_EXCH_A (0x140 | SSL_ST_CONNECT)
    564 #define SSL3_ST_CR_KEY_EXCH_B (0x141 | SSL_ST_CONNECT)
    565 #define SSL3_ST_CR_CERT_REQ_A (0x150 | SSL_ST_CONNECT)
    566 #define SSL3_ST_CR_CERT_REQ_B (0x151 | SSL_ST_CONNECT)
    567 #define SSL3_ST_CR_SRVR_DONE_A (0x160 | SSL_ST_CONNECT)
    568 #define SSL3_ST_CR_SRVR_DONE_B (0x161 | SSL_ST_CONNECT)
    569 /* write to server */
    570 #define SSL3_ST_CW_CERT_A (0x170 | SSL_ST_CONNECT)
    571 #define SSL3_ST_CW_CERT_B (0x171 | SSL_ST_CONNECT)
    572 #define SSL3_ST_CW_CERT_C (0x172 | SSL_ST_CONNECT)
    573 #define SSL3_ST_CW_CERT_D (0x173 | SSL_ST_CONNECT)
    574 #define SSL3_ST_CW_KEY_EXCH_A (0x180 | SSL_ST_CONNECT)
    575 #define SSL3_ST_CW_KEY_EXCH_B (0x181 | SSL_ST_CONNECT)
    576 #define SSL3_ST_CW_CERT_VRFY_A (0x190 | SSL_ST_CONNECT)
    577 #define SSL3_ST_CW_CERT_VRFY_B (0x191 | SSL_ST_CONNECT)
    578 #define SSL3_ST_CW_CHANGE_A (0x1A0 | SSL_ST_CONNECT)
    579 #define SSL3_ST_CW_CHANGE_B (0x1A1 | SSL_ST_CONNECT)
    580 #define SSL3_ST_CW_NEXT_PROTO_A (0x200 | SSL_ST_CONNECT)
    581 #define SSL3_ST_CW_NEXT_PROTO_B (0x201 | SSL_ST_CONNECT)
    582 #define SSL3_ST_CW_CHANNEL_ID_A (0x220 | SSL_ST_CONNECT)
    583 #define SSL3_ST_CW_CHANNEL_ID_B (0x221 | SSL_ST_CONNECT)
    584 #define SSL3_ST_CW_FINISHED_A (0x1B0 | SSL_ST_CONNECT)
    585 #define SSL3_ST_CW_FINISHED_B (0x1B1 | SSL_ST_CONNECT)
    586 /* read from server */
    587 #define SSL3_ST_CR_CHANGE (0x1C0 | SSL_ST_CONNECT)
    588 #define SSL3_ST_CR_FINISHED_A (0x1D0 | SSL_ST_CONNECT)
    589 #define SSL3_ST_CR_FINISHED_B (0x1D1 | SSL_ST_CONNECT)
    590 #define SSL3_ST_CR_SESSION_TICKET_A (0x1E0 | SSL_ST_CONNECT)
    591 #define SSL3_ST_CR_SESSION_TICKET_B (0x1E1 | SSL_ST_CONNECT)
    592 #define SSL3_ST_CR_CERT_STATUS_A (0x1F0 | SSL_ST_CONNECT)
    593 #define SSL3_ST_CR_CERT_STATUS_B (0x1F1 | SSL_ST_CONNECT)
    594 
    595 /* server */
    596 /* extra state */
    597 #define SSL3_ST_SW_FLUSH (0x100 | SSL_ST_ACCEPT)
    598 /* read from client */
    599 #define SSL3_ST_SR_INITIAL_BYTES (0x240 | SSL_ST_ACCEPT)
    600 #define SSL3_ST_SR_V2_CLIENT_HELLO (0x241 | SSL_ST_ACCEPT)
    601 /* Do not change the number values, they do matter */
    602 #define SSL3_ST_SR_CLNT_HELLO_A (0x110 | SSL_ST_ACCEPT)
    603 #define SSL3_ST_SR_CLNT_HELLO_B (0x111 | SSL_ST_ACCEPT)
    604 #define SSL3_ST_SR_CLNT_HELLO_C (0x112 | SSL_ST_ACCEPT)
    605 #define SSL3_ST_SR_CLNT_HELLO_D (0x115 | SSL_ST_ACCEPT)
    606 /* write to client */
    607 #define SSL3_ST_SW_HELLO_REQ_A (0x120 | SSL_ST_ACCEPT)
    608 #define SSL3_ST_SW_HELLO_REQ_B (0x121 | SSL_ST_ACCEPT)
    609 #define SSL3_ST_SW_HELLO_REQ_C (0x122 | SSL_ST_ACCEPT)
    610 #define SSL3_ST_SW_SRVR_HELLO_A (0x130 | SSL_ST_ACCEPT)
    611 #define SSL3_ST_SW_SRVR_HELLO_B (0x131 | SSL_ST_ACCEPT)
    612 #define SSL3_ST_SW_CERT_A (0x140 | SSL_ST_ACCEPT)
    613 #define SSL3_ST_SW_CERT_B (0x141 | SSL_ST_ACCEPT)
    614 #define SSL3_ST_SW_KEY_EXCH_A (0x150 | SSL_ST_ACCEPT)
    615 #define SSL3_ST_SW_KEY_EXCH_B (0x151 | SSL_ST_ACCEPT)
    616 #define SSL3_ST_SW_CERT_REQ_A (0x160 | SSL_ST_ACCEPT)
    617 #define SSL3_ST_SW_CERT_REQ_B (0x161 | SSL_ST_ACCEPT)
    618 #define SSL3_ST_SW_SRVR_DONE_A (0x170 | SSL_ST_ACCEPT)
    619 #define SSL3_ST_SW_SRVR_DONE_B (0x171 | SSL_ST_ACCEPT)
    620 /* read from client */
    621 #define SSL3_ST_SR_CERT_A (0x180 | SSL_ST_ACCEPT)
    622 #define SSL3_ST_SR_CERT_B (0x181 | SSL_ST_ACCEPT)
    623 #define SSL3_ST_SR_KEY_EXCH_A (0x190 | SSL_ST_ACCEPT)
    624 #define SSL3_ST_SR_KEY_EXCH_B (0x191 | SSL_ST_ACCEPT)
    625 #define SSL3_ST_SR_CERT_VRFY_A (0x1A0 | SSL_ST_ACCEPT)
    626 #define SSL3_ST_SR_CERT_VRFY_B (0x1A1 | SSL_ST_ACCEPT)
    627 #define SSL3_ST_SR_CHANGE (0x1B0 | SSL_ST_ACCEPT)
    628 #define SSL3_ST_SR_NEXT_PROTO_A (0x210 | SSL_ST_ACCEPT)
    629 #define SSL3_ST_SR_NEXT_PROTO_B (0x211 | SSL_ST_ACCEPT)
    630 #define SSL3_ST_SR_CHANNEL_ID_A (0x230 | SSL_ST_ACCEPT)
    631 #define SSL3_ST_SR_CHANNEL_ID_B (0x231 | SSL_ST_ACCEPT)
    632 #define SSL3_ST_SR_FINISHED_A (0x1C0 | SSL_ST_ACCEPT)
    633 #define SSL3_ST_SR_FINISHED_B (0x1C1 | SSL_ST_ACCEPT)
    634 
    635 /* write to client */
    636 #define SSL3_ST_SW_CHANGE_A (0x1D0 | SSL_ST_ACCEPT)
    637 #define SSL3_ST_SW_CHANGE_B (0x1D1 | SSL_ST_ACCEPT)
    638 #define SSL3_ST_SW_FINISHED_A (0x1E0 | SSL_ST_ACCEPT)
    639 #define SSL3_ST_SW_FINISHED_B (0x1E1 | SSL_ST_ACCEPT)
    640 #define SSL3_ST_SW_SESSION_TICKET_A (0x1F0 | SSL_ST_ACCEPT)
    641 #define SSL3_ST_SW_SESSION_TICKET_B (0x1F1 | SSL_ST_ACCEPT)
    642 #define SSL3_ST_SW_CERT_STATUS_A (0x200 | SSL_ST_ACCEPT)
    643 #define SSL3_ST_SW_CERT_STATUS_B (0x201 | SSL_ST_ACCEPT)
    644 #define SSL3_ST_SW_SUPPLEMENTAL_DATA_A (0x220 | SSL_ST_ACCEPT)
    645 #define SSL3_ST_SW_SUPPLEMENTAL_DATA_B (0x221 | SSL_ST_ACCEPT)
    646 
    647 #define SSL3_MT_HELLO_REQUEST 0
    648 #define SSL3_MT_CLIENT_HELLO 1
    649 #define SSL3_MT_SERVER_HELLO 2
    650 #define SSL3_MT_NEWSESSION_TICKET 4
    651 #define SSL3_MT_CERTIFICATE 11
    652 #define SSL3_MT_SERVER_KEY_EXCHANGE 12
    653 #define SSL3_MT_CERTIFICATE_REQUEST 13
    654 #define SSL3_MT_SERVER_DONE 14
    655 #define SSL3_MT_CERTIFICATE_VERIFY 15
    656 #define SSL3_MT_CLIENT_KEY_EXCHANGE 16
    657 #define SSL3_MT_FINISHED 20
    658 #define SSL3_MT_CERTIFICATE_STATUS 22
    659 #define SSL3_MT_SUPPLEMENTAL_DATA 23
    660 #define SSL3_MT_NEXT_PROTO 67
    661 #define SSL3_MT_ENCRYPTED_EXTENSIONS 203
    662 #define DTLS1_MT_HELLO_VERIFY_REQUEST 3
    663 
    664 
    665 #define SSL3_MT_CCS 1
    666 
    667 /* These are used when changing over to a new cipher */
    668 #define SSL3_CC_READ 0x01
    669 #define SSL3_CC_WRITE 0x02
    670 #define SSL3_CC_CLIENT 0x10
    671 #define SSL3_CC_SERVER 0x20
    672 #define SSL3_CHANGE_CIPHER_CLIENT_WRITE (SSL3_CC_CLIENT | SSL3_CC_WRITE)
    673 #define SSL3_CHANGE_CIPHER_SERVER_READ (SSL3_CC_SERVER | SSL3_CC_READ)
    674 #define SSL3_CHANGE_CIPHER_CLIENT_READ (SSL3_CC_CLIENT | SSL3_CC_READ)
    675 #define SSL3_CHANGE_CIPHER_SERVER_WRITE (SSL3_CC_SERVER | SSL3_CC_WRITE)
    676 
    677 
    678 #ifdef  __cplusplus
    679 }
    680 #endif
    681 #endif
    682