Home | History | Annotate | Download | only in ssl
      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 #include <assert.h>
    142 #include <stdio.h>
    143 #include <string.h>
    144 
    145 #include <openssl/bytestring.h>
    146 #include <openssl/dh.h>
    147 #include <openssl/err.h>
    148 #include <openssl/lhash.h>
    149 #include <openssl/mem.h>
    150 #include <openssl/obj.h>
    151 #include <openssl/rand.h>
    152 #include <openssl/x509v3.h>
    153 
    154 #include "internal.h"
    155 #include "../crypto/internal.h"
    156 
    157 
    158 /* Some error codes are special. Ensure the make_errors.go script never
    159  * regresses this. */
    160 OPENSSL_COMPILE_ASSERT(SSL_R_TLSV1_ALERT_NO_RENEGOTIATION ==
    161                            SSL_AD_NO_RENEGOTIATION + SSL_AD_REASON_OFFSET,
    162                        ssl_alert_reason_code_mismatch);
    163 
    164 /* kMaxHandshakeSize is the maximum size, in bytes, of a handshake message. */
    165 static const size_t kMaxHandshakeSize = (1u << 24) - 1;
    166 
    167 static CRYPTO_EX_DATA_CLASS g_ex_data_class_ssl = CRYPTO_EX_DATA_CLASS_INIT;
    168 static CRYPTO_EX_DATA_CLASS g_ex_data_class_ssl_ctx = CRYPTO_EX_DATA_CLASS_INIT;
    169 
    170 int SSL_clear(SSL *ssl) {
    171   if (ssl->method == NULL) {
    172     OPENSSL_PUT_ERROR(SSL, SSL_clear, SSL_R_NO_METHOD_SPECIFIED);
    173     return 0;
    174   }
    175 
    176   if (ssl_clear_bad_session(ssl)) {
    177     SSL_SESSION_free(ssl->session);
    178     ssl->session = NULL;
    179   }
    180 
    181   ssl->hit = 0;
    182   ssl->shutdown = 0;
    183 
    184   /* SSL_clear may be called before or after the |ssl| is initialized in either
    185    * accept or connect state. In the latter case, SSL_clear should preserve the
    186    * half and reset |ssl->state| accordingly. */
    187   if (ssl->handshake_func != NULL) {
    188     if (ssl->server) {
    189       SSL_set_accept_state(ssl);
    190     } else {
    191       SSL_set_connect_state(ssl);
    192     }
    193   } else {
    194     assert(ssl->state == 0);
    195   }
    196 
    197   /* TODO(davidben): Some state on |ssl| is reset both in |SSL_new| and
    198    * |SSL_clear| because it is per-connection state rather than configuration
    199    * state. Per-connection state should be on |ssl->s3| and |ssl->d1| so it is
    200    * naturally reset at the right points between |SSL_new|, |SSL_clear|, and
    201    * |ssl3_new|. */
    202 
    203   ssl->rwstate = SSL_NOTHING;
    204   ssl->rstate = SSL_ST_READ_HEADER;
    205 
    206   BUF_MEM_free(ssl->init_buf);
    207   ssl->init_buf = NULL;
    208 
    209   ssl->packet = NULL;
    210   ssl->packet_length = 0;
    211 
    212   ssl_clear_cipher_ctx(ssl);
    213 
    214   OPENSSL_free(ssl->next_proto_negotiated);
    215   ssl->next_proto_negotiated = NULL;
    216   ssl->next_proto_negotiated_len = 0;
    217 
    218   /* The ssl->d1->mtu is simultaneously configuration (preserved across
    219    * clear) and connection-specific state (gets reset).
    220    *
    221    * TODO(davidben): Avoid this. */
    222   unsigned mtu = 0;
    223   if (ssl->d1 != NULL) {
    224     mtu = ssl->d1->mtu;
    225   }
    226 
    227   ssl->method->ssl_free(ssl);
    228   if (!ssl->method->ssl_new(ssl)) {
    229     return 0;
    230   }
    231   ssl->enc_method = ssl3_get_enc_method(ssl->version);
    232   assert(ssl->enc_method != NULL);
    233 
    234   if (SSL_IS_DTLS(ssl) && (SSL_get_options(ssl) & SSL_OP_NO_QUERY_MTU)) {
    235     ssl->d1->mtu = mtu;
    236   }
    237 
    238   ssl->client_version = ssl->version;
    239 
    240   return 1;
    241 }
    242 
    243 SSL *SSL_new(SSL_CTX *ctx) {
    244   SSL *s;
    245 
    246   if (ctx == NULL) {
    247     OPENSSL_PUT_ERROR(SSL, SSL_new, SSL_R_NULL_SSL_CTX);
    248     return NULL;
    249   }
    250   if (ctx->method == NULL) {
    251     OPENSSL_PUT_ERROR(SSL, SSL_new, SSL_R_SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION);
    252     return NULL;
    253   }
    254 
    255   s = (SSL *)OPENSSL_malloc(sizeof(SSL));
    256   if (s == NULL) {
    257     goto err;
    258   }
    259   memset(s, 0, sizeof(SSL));
    260 
    261   s->min_version = ctx->min_version;
    262   s->max_version = ctx->max_version;
    263 
    264   s->options = ctx->options;
    265   s->mode = ctx->mode;
    266   s->max_cert_list = ctx->max_cert_list;
    267 
    268   s->cert = ssl_cert_dup(ctx->cert);
    269   if (s->cert == NULL) {
    270     goto err;
    271   }
    272 
    273   s->msg_callback = ctx->msg_callback;
    274   s->msg_callback_arg = ctx->msg_callback_arg;
    275   s->verify_mode = ctx->verify_mode;
    276   s->sid_ctx_length = ctx->sid_ctx_length;
    277   assert(s->sid_ctx_length <= sizeof s->sid_ctx);
    278   memcpy(&s->sid_ctx, &ctx->sid_ctx, sizeof(s->sid_ctx));
    279   s->verify_callback = ctx->default_verify_callback;
    280   s->generate_session_id = ctx->generate_session_id;
    281 
    282   s->param = X509_VERIFY_PARAM_new();
    283   if (!s->param) {
    284     goto err;
    285   }
    286   X509_VERIFY_PARAM_inherit(s->param, ctx->param);
    287   s->quiet_shutdown = ctx->quiet_shutdown;
    288   s->max_send_fragment = ctx->max_send_fragment;
    289 
    290   CRYPTO_refcount_inc(&ctx->references);
    291   s->ctx = ctx;
    292   s->tlsext_ticket_expected = 0;
    293   CRYPTO_refcount_inc(&ctx->references);
    294   s->initial_ctx = ctx;
    295   if (ctx->tlsext_ecpointformatlist) {
    296     s->tlsext_ecpointformatlist = BUF_memdup(
    297         ctx->tlsext_ecpointformatlist, ctx->tlsext_ecpointformatlist_length);
    298     if (!s->tlsext_ecpointformatlist) {
    299       goto err;
    300     }
    301     s->tlsext_ecpointformatlist_length = ctx->tlsext_ecpointformatlist_length;
    302   }
    303 
    304   if (ctx->tlsext_ellipticcurvelist) {
    305     s->tlsext_ellipticcurvelist =
    306         BUF_memdup(ctx->tlsext_ellipticcurvelist,
    307                    ctx->tlsext_ellipticcurvelist_length * 2);
    308     if (!s->tlsext_ellipticcurvelist) {
    309       goto err;
    310     }
    311     s->tlsext_ellipticcurvelist_length = ctx->tlsext_ellipticcurvelist_length;
    312   }
    313   s->next_proto_negotiated = NULL;
    314 
    315   if (s->ctx->alpn_client_proto_list) {
    316     s->alpn_client_proto_list = BUF_memdup(s->ctx->alpn_client_proto_list,
    317                                            s->ctx->alpn_client_proto_list_len);
    318     if (s->alpn_client_proto_list == NULL) {
    319       goto err;
    320     }
    321     s->alpn_client_proto_list_len = s->ctx->alpn_client_proto_list_len;
    322   }
    323 
    324   s->verify_result = X509_V_OK;
    325   s->method = ctx->method;
    326 
    327   if (!s->method->ssl_new(s)) {
    328     goto err;
    329   }
    330   s->enc_method = ssl3_get_enc_method(s->version);
    331   assert(s->enc_method != NULL);
    332 
    333   s->rwstate = SSL_NOTHING;
    334   s->rstate = SSL_ST_READ_HEADER;
    335 
    336   CRYPTO_new_ex_data(&g_ex_data_class_ssl, s, &s->ex_data);
    337 
    338   s->psk_identity_hint = NULL;
    339   if (ctx->psk_identity_hint) {
    340     s->psk_identity_hint = BUF_strdup(ctx->psk_identity_hint);
    341     if (s->psk_identity_hint == NULL) {
    342       goto err;
    343     }
    344   }
    345   s->psk_client_callback = ctx->psk_client_callback;
    346   s->psk_server_callback = ctx->psk_server_callback;
    347 
    348   s->tlsext_channel_id_enabled = ctx->tlsext_channel_id_enabled;
    349   if (ctx->tlsext_channel_id_private) {
    350     s->tlsext_channel_id_private =
    351         EVP_PKEY_up_ref(ctx->tlsext_channel_id_private);
    352   }
    353 
    354   s->signed_cert_timestamps_enabled = s->ctx->signed_cert_timestamps_enabled;
    355   s->ocsp_stapling_enabled = s->ctx->ocsp_stapling_enabled;
    356 
    357   return s;
    358 
    359 err:
    360   SSL_free(s);
    361   OPENSSL_PUT_ERROR(SSL, SSL_new, ERR_R_MALLOC_FAILURE);
    362 
    363   return NULL;
    364 }
    365 
    366 int SSL_CTX_set_session_id_context(SSL_CTX *ctx, const uint8_t *sid_ctx,
    367                                    unsigned int sid_ctx_len) {
    368   if (sid_ctx_len > sizeof ctx->sid_ctx) {
    369     OPENSSL_PUT_ERROR(SSL, SSL_CTX_set_session_id_context,
    370                       SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG);
    371     return 0;
    372   }
    373   ctx->sid_ctx_length = sid_ctx_len;
    374   memcpy(ctx->sid_ctx, sid_ctx, sid_ctx_len);
    375 
    376   return 1;
    377 }
    378 
    379 int SSL_set_session_id_context(SSL *ssl, const uint8_t *sid_ctx,
    380                                unsigned int sid_ctx_len) {
    381   if (sid_ctx_len > SSL_MAX_SID_CTX_LENGTH) {
    382     OPENSSL_PUT_ERROR(SSL, SSL_set_session_id_context,
    383                       SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG);
    384     return 0;
    385   }
    386   ssl->sid_ctx_length = sid_ctx_len;
    387   memcpy(ssl->sid_ctx, sid_ctx, sid_ctx_len);
    388 
    389   return 1;
    390 }
    391 
    392 int SSL_CTX_set_generate_session_id(SSL_CTX *ctx, GEN_SESSION_CB cb) {
    393   ctx->generate_session_id = cb;
    394   return 1;
    395 }
    396 
    397 int SSL_set_generate_session_id(SSL *ssl, GEN_SESSION_CB cb) {
    398   ssl->generate_session_id = cb;
    399   return 1;
    400 }
    401 
    402 int SSL_has_matching_session_id(const SSL *ssl, const uint8_t *id,
    403                                 unsigned int id_len) {
    404   /* A quick examination of SSL_SESSION_hash and SSL_SESSION_cmp shows how we
    405    * can "construct" a session to give us the desired check - ie. to find if
    406    * there's a session in the hash table that would conflict with any new
    407    * session built out of this id/id_len and the ssl_version in use by this
    408    * SSL. */
    409   SSL_SESSION r, *p;
    410 
    411   if (id_len > sizeof r.session_id) {
    412     return 0;
    413   }
    414 
    415   r.ssl_version = ssl->version;
    416   r.session_id_length = id_len;
    417   memcpy(r.session_id, id, id_len);
    418 
    419   CRYPTO_MUTEX_lock_read(&ssl->ctx->lock);
    420   p = lh_SSL_SESSION_retrieve(ssl->ctx->sessions, &r);
    421   CRYPTO_MUTEX_unlock(&ssl->ctx->lock);
    422   return p != NULL;
    423 }
    424 
    425 int SSL_CTX_set_purpose(SSL_CTX *s, int purpose) {
    426   return X509_VERIFY_PARAM_set_purpose(s->param, purpose);
    427 }
    428 
    429 int SSL_set_purpose(SSL *s, int purpose) {
    430   return X509_VERIFY_PARAM_set_purpose(s->param, purpose);
    431 }
    432 
    433 int SSL_CTX_set_trust(SSL_CTX *s, int trust) {
    434   return X509_VERIFY_PARAM_set_trust(s->param, trust);
    435 }
    436 
    437 int SSL_set_trust(SSL *s, int trust) {
    438   return X509_VERIFY_PARAM_set_trust(s->param, trust);
    439 }
    440 
    441 int SSL_CTX_set1_param(SSL_CTX *ctx, X509_VERIFY_PARAM *vpm) {
    442   return X509_VERIFY_PARAM_set1(ctx->param, vpm);
    443 }
    444 
    445 int SSL_set1_param(SSL *ssl, X509_VERIFY_PARAM *vpm) {
    446   return X509_VERIFY_PARAM_set1(ssl->param, vpm);
    447 }
    448 
    449 void ssl_cipher_preference_list_free(
    450     struct ssl_cipher_preference_list_st *cipher_list) {
    451   if (cipher_list == NULL) {
    452     return;
    453   }
    454   sk_SSL_CIPHER_free(cipher_list->ciphers);
    455   OPENSSL_free(cipher_list->in_group_flags);
    456   OPENSSL_free(cipher_list);
    457 }
    458 
    459 struct ssl_cipher_preference_list_st *ssl_cipher_preference_list_dup(
    460     struct ssl_cipher_preference_list_st *cipher_list) {
    461   struct ssl_cipher_preference_list_st *ret = NULL;
    462   size_t n = sk_SSL_CIPHER_num(cipher_list->ciphers);
    463 
    464   ret = OPENSSL_malloc(sizeof(struct ssl_cipher_preference_list_st));
    465   if (!ret) {
    466     goto err;
    467   }
    468 
    469   ret->ciphers = NULL;
    470   ret->in_group_flags = NULL;
    471   ret->ciphers = sk_SSL_CIPHER_dup(cipher_list->ciphers);
    472   if (!ret->ciphers) {
    473     goto err;
    474   }
    475   ret->in_group_flags = BUF_memdup(cipher_list->in_group_flags, n);
    476   if (!ret->in_group_flags) {
    477     goto err;
    478   }
    479 
    480   return ret;
    481 
    482 err:
    483   ssl_cipher_preference_list_free(ret);
    484   return NULL;
    485 }
    486 
    487 struct ssl_cipher_preference_list_st *ssl_cipher_preference_list_from_ciphers(
    488     STACK_OF(SSL_CIPHER) *ciphers) {
    489   struct ssl_cipher_preference_list_st *ret = NULL;
    490   size_t n = sk_SSL_CIPHER_num(ciphers);
    491 
    492   ret = OPENSSL_malloc(sizeof(struct ssl_cipher_preference_list_st));
    493   if (!ret) {
    494     goto err;
    495   }
    496   ret->ciphers = NULL;
    497   ret->in_group_flags = NULL;
    498   ret->ciphers = sk_SSL_CIPHER_dup(ciphers);
    499   if (!ret->ciphers) {
    500     goto err;
    501   }
    502   ret->in_group_flags = OPENSSL_malloc(n);
    503   if (!ret->in_group_flags) {
    504     goto err;
    505   }
    506   memset(ret->in_group_flags, 0, n);
    507   return ret;
    508 
    509 err:
    510   ssl_cipher_preference_list_free(ret);
    511   return NULL;
    512 }
    513 
    514 X509_VERIFY_PARAM *SSL_CTX_get0_param(SSL_CTX *ctx) { return ctx->param; }
    515 
    516 X509_VERIFY_PARAM *SSL_get0_param(SSL *ssl) { return ssl->param; }
    517 
    518 void SSL_certs_clear(SSL *s) { ssl_cert_clear_certs(s->cert); }
    519 
    520 void SSL_free(SSL *ssl) {
    521   if (ssl == NULL) {
    522     return;
    523   }
    524 
    525   X509_VERIFY_PARAM_free(ssl->param);
    526 
    527   CRYPTO_free_ex_data(&g_ex_data_class_ssl, ssl, &ssl->ex_data);
    528 
    529   if (ssl->bbio != NULL) {
    530     /* If the buffering BIO is in place, pop it off */
    531     if (ssl->bbio == ssl->wbio) {
    532       ssl->wbio = BIO_pop(ssl->wbio);
    533     }
    534     BIO_free(ssl->bbio);
    535     ssl->bbio = NULL;
    536   }
    537 
    538   int free_wbio = ssl->wbio != ssl->rbio;
    539   BIO_free_all(ssl->rbio);
    540   if (free_wbio) {
    541     BIO_free_all(ssl->wbio);
    542   }
    543 
    544   BUF_MEM_free(ssl->init_buf);
    545 
    546   /* add extra stuff */
    547   ssl_cipher_preference_list_free(ssl->cipher_list);
    548   sk_SSL_CIPHER_free(ssl->cipher_list_by_id);
    549 
    550   ssl_clear_bad_session(ssl);
    551   SSL_SESSION_free(ssl->session);
    552 
    553   ssl_clear_cipher_ctx(ssl);
    554 
    555   ssl_cert_free(ssl->cert);
    556 
    557   OPENSSL_free(ssl->tlsext_hostname);
    558   SSL_CTX_free(ssl->initial_ctx);
    559   OPENSSL_free(ssl->tlsext_ecpointformatlist);
    560   OPENSSL_free(ssl->tlsext_ellipticcurvelist);
    561   OPENSSL_free(ssl->alpn_client_proto_list);
    562   EVP_PKEY_free(ssl->tlsext_channel_id_private);
    563   OPENSSL_free(ssl->psk_identity_hint);
    564   sk_X509_NAME_pop_free(ssl->client_CA, X509_NAME_free);
    565   OPENSSL_free(ssl->next_proto_negotiated);
    566   sk_SRTP_PROTECTION_PROFILE_free(ssl->srtp_profiles);
    567 
    568   if (ssl->method != NULL) {
    569     ssl->method->ssl_free(ssl);
    570   }
    571   SSL_CTX_free(ssl->ctx);
    572 
    573   OPENSSL_free(ssl);
    574 }
    575 
    576 void SSL_set_bio(SSL *s, BIO *rbio, BIO *wbio) {
    577   /* If the output buffering BIO is still in place, remove it. */
    578   if (s->bbio != NULL) {
    579     if (s->wbio == s->bbio) {
    580       s->wbio = s->wbio->next_bio;
    581       s->bbio->next_bio = NULL;
    582     }
    583   }
    584 
    585   if (s->rbio != rbio) {
    586     BIO_free_all(s->rbio);
    587   }
    588   if (s->wbio != wbio && s->rbio != s->wbio) {
    589     BIO_free_all(s->wbio);
    590   }
    591   s->rbio = rbio;
    592   s->wbio = wbio;
    593 }
    594 
    595 BIO *SSL_get_rbio(const SSL *s) { return s->rbio; }
    596 
    597 BIO *SSL_get_wbio(const SSL *s) { return s->wbio; }
    598 
    599 int SSL_get_fd(const SSL *s) { return SSL_get_rfd(s); }
    600 
    601 int SSL_get_rfd(const SSL *s) {
    602   int ret = -1;
    603   BIO *b, *r;
    604 
    605   b = SSL_get_rbio(s);
    606   r = BIO_find_type(b, BIO_TYPE_DESCRIPTOR);
    607   if (r != NULL) {
    608     BIO_get_fd(r, &ret);
    609   }
    610   return ret;
    611 }
    612 
    613 int SSL_get_wfd(const SSL *s) {
    614   int ret = -1;
    615   BIO *b, *r;
    616 
    617   b = SSL_get_wbio(s);
    618   r = BIO_find_type(b, BIO_TYPE_DESCRIPTOR);
    619   if (r != NULL) {
    620     BIO_get_fd(r, &ret);
    621   }
    622 
    623   return ret;
    624 }
    625 
    626 int SSL_set_fd(SSL *s, int fd) {
    627   int ret = 0;
    628   BIO *bio = NULL;
    629 
    630   bio = BIO_new(BIO_s_fd());
    631 
    632   if (bio == NULL) {
    633     OPENSSL_PUT_ERROR(SSL, SSL_set_fd, ERR_R_BUF_LIB);
    634     goto err;
    635   }
    636   BIO_set_fd(bio, fd, BIO_NOCLOSE);
    637   SSL_set_bio(s, bio, bio);
    638   ret = 1;
    639 
    640 err:
    641   return ret;
    642 }
    643 
    644 int SSL_set_wfd(SSL *s, int fd) {
    645   int ret = 0;
    646   BIO *bio = NULL;
    647 
    648   if (s->rbio == NULL || BIO_method_type(s->rbio) != BIO_TYPE_FD ||
    649       (int)BIO_get_fd(s->rbio, NULL) != fd) {
    650     bio = BIO_new(BIO_s_fd());
    651 
    652     if (bio == NULL) {
    653       OPENSSL_PUT_ERROR(SSL, SSL_set_wfd, ERR_R_BUF_LIB);
    654       goto err;
    655     }
    656     BIO_set_fd(bio, fd, BIO_NOCLOSE);
    657     SSL_set_bio(s, SSL_get_rbio(s), bio);
    658   } else {
    659     SSL_set_bio(s, SSL_get_rbio(s), SSL_get_rbio(s));
    660   }
    661 
    662   ret = 1;
    663 
    664 err:
    665   return ret;
    666 }
    667 
    668 int SSL_set_rfd(SSL *s, int fd) {
    669   int ret = 0;
    670   BIO *bio = NULL;
    671 
    672   if (s->wbio == NULL || BIO_method_type(s->wbio) != BIO_TYPE_FD ||
    673       (int)BIO_get_fd(s->wbio, NULL) != fd) {
    674     bio = BIO_new(BIO_s_fd());
    675 
    676     if (bio == NULL) {
    677       OPENSSL_PUT_ERROR(SSL, SSL_set_rfd, ERR_R_BUF_LIB);
    678       goto err;
    679     }
    680     BIO_set_fd(bio, fd, BIO_NOCLOSE);
    681     SSL_set_bio(s, bio, SSL_get_wbio(s));
    682   } else {
    683     SSL_set_bio(s, SSL_get_wbio(s), SSL_get_wbio(s));
    684   }
    685   ret = 1;
    686 
    687 err:
    688   return ret;
    689 }
    690 
    691 /* return length of latest Finished message we sent, copy to 'buf' */
    692 size_t SSL_get_finished(const SSL *s, void *buf, size_t count) {
    693   size_t ret = 0;
    694 
    695   if (s->s3 != NULL) {
    696     ret = s->s3->tmp.finish_md_len;
    697     if (count > ret) {
    698       count = ret;
    699     }
    700     memcpy(buf, s->s3->tmp.finish_md, count);
    701   }
    702 
    703   return ret;
    704 }
    705 
    706 /* return length of latest Finished message we expected, copy to 'buf' */
    707 size_t SSL_get_peer_finished(const SSL *s, void *buf, size_t count) {
    708   size_t ret = 0;
    709 
    710   if (s->s3 != NULL) {
    711     ret = s->s3->tmp.peer_finish_md_len;
    712     if (count > ret) {
    713       count = ret;
    714     }
    715     memcpy(buf, s->s3->tmp.peer_finish_md, count);
    716   }
    717 
    718   return ret;
    719 }
    720 
    721 int SSL_get_verify_mode(const SSL *s) { return s->verify_mode; }
    722 
    723 int SSL_get_verify_depth(const SSL *s) {
    724   return X509_VERIFY_PARAM_get_depth(s->param);
    725 }
    726 
    727 int (*SSL_get_verify_callback(const SSL *s))(int, X509_STORE_CTX *) {
    728   return s->verify_callback;
    729 }
    730 
    731 int SSL_CTX_get_verify_mode(const SSL_CTX *ctx) { return ctx->verify_mode; }
    732 
    733 int SSL_CTX_get_verify_depth(const SSL_CTX *ctx) {
    734   return X509_VERIFY_PARAM_get_depth(ctx->param);
    735 }
    736 
    737 int (*SSL_CTX_get_verify_callback(const SSL_CTX *ctx))(int, X509_STORE_CTX *) {
    738   return ctx->default_verify_callback;
    739 }
    740 
    741 void SSL_set_verify(SSL *s, int mode,
    742                     int (*callback)(int ok, X509_STORE_CTX *ctx)) {
    743   s->verify_mode = mode;
    744   if (callback != NULL) {
    745     s->verify_callback = callback;
    746   }
    747 }
    748 
    749 void SSL_set_verify_depth(SSL *s, int depth) {
    750   X509_VERIFY_PARAM_set_depth(s->param, depth);
    751 }
    752 
    753 int SSL_CTX_get_read_ahead(const SSL_CTX *ctx) { return 0; }
    754 
    755 int SSL_get_read_ahead(const SSL *s) { return 0; }
    756 
    757 void SSL_CTX_set_read_ahead(SSL_CTX *ctx, int yes) { }
    758 
    759 void SSL_set_read_ahead(SSL *s, int yes) { }
    760 
    761 int SSL_pending(const SSL *s) {
    762   if (s->rstate == SSL_ST_READ_BODY) {
    763     return 0;
    764   }
    765 
    766   return (s->s3->rrec.type == SSL3_RT_APPLICATION_DATA) ? s->s3->rrec.length
    767                                                         : 0;
    768 }
    769 
    770 X509 *SSL_get_peer_certificate(const SSL *s) {
    771   X509 *r;
    772 
    773   if (s == NULL || s->session == NULL) {
    774     r = NULL;
    775   } else {
    776     r = s->session->peer;
    777   }
    778 
    779   if (r == NULL) {
    780     return NULL;
    781   }
    782 
    783   return X509_up_ref(r);
    784 }
    785 
    786 STACK_OF(X509) *SSL_get_peer_cert_chain(const SSL *s) {
    787   STACK_OF(X509) *r;
    788 
    789   if (s == NULL || s->session == NULL || s->session->sess_cert == NULL) {
    790     r = NULL;
    791   } else {
    792     r = s->session->sess_cert->cert_chain;
    793   }
    794 
    795   /* If we are a client, cert_chain includes the peer's own certificate; if we
    796    * are a server, it does not. */
    797   return r;
    798 }
    799 
    800 /* Fix this so it checks all the valid key/cert options */
    801 int SSL_CTX_check_private_key(const SSL_CTX *ctx) {
    802   if (ctx == NULL || ctx->cert == NULL || ctx->cert->key->x509 == NULL) {
    803     OPENSSL_PUT_ERROR(SSL, SSL_CTX_check_private_key,
    804                       SSL_R_NO_CERTIFICATE_ASSIGNED);
    805     return 0;
    806   }
    807 
    808   if (ctx->cert->key->privatekey == NULL) {
    809     OPENSSL_PUT_ERROR(SSL, SSL_CTX_check_private_key,
    810                       SSL_R_NO_PRIVATE_KEY_ASSIGNED);
    811     return 0;
    812   }
    813 
    814   return X509_check_private_key(ctx->cert->key->x509,
    815                                 ctx->cert->key->privatekey);
    816 }
    817 
    818 /* Fix this function so that it takes an optional type parameter */
    819 int SSL_check_private_key(const SSL *ssl) {
    820   if (ssl == NULL) {
    821     OPENSSL_PUT_ERROR(SSL, SSL_check_private_key, ERR_R_PASSED_NULL_PARAMETER);
    822     return 0;
    823   }
    824 
    825   if (ssl->cert == NULL) {
    826     OPENSSL_PUT_ERROR(SSL, SSL_check_private_key,
    827                       SSL_R_NO_CERTIFICATE_ASSIGNED);
    828     return 0;
    829   }
    830 
    831   if (ssl->cert->key->x509 == NULL) {
    832     OPENSSL_PUT_ERROR(SSL, SSL_check_private_key,
    833                       SSL_R_NO_CERTIFICATE_ASSIGNED);
    834     return 0;
    835   }
    836 
    837   if (ssl->cert->key->privatekey == NULL) {
    838     OPENSSL_PUT_ERROR(SSL, SSL_check_private_key,
    839                       SSL_R_NO_PRIVATE_KEY_ASSIGNED);
    840     return 0;
    841   }
    842 
    843   return X509_check_private_key(ssl->cert->key->x509,
    844                                 ssl->cert->key->privatekey);
    845 }
    846 
    847 int SSL_accept(SSL *s) {
    848   if (s->handshake_func == 0) {
    849     /* Not properly initialized yet */
    850     SSL_set_accept_state(s);
    851   }
    852 
    853   if (s->handshake_func != s->method->ssl_accept) {
    854     OPENSSL_PUT_ERROR(SSL, SSL_accept, ERR_R_INTERNAL_ERROR);
    855     return -1;
    856   }
    857 
    858   return s->handshake_func(s);
    859 }
    860 
    861 int SSL_connect(SSL *s) {
    862   if (s->handshake_func == 0) {
    863     /* Not properly initialized yet */
    864     SSL_set_connect_state(s);
    865   }
    866 
    867   if (s->handshake_func != s->method->ssl_connect) {
    868     OPENSSL_PUT_ERROR(SSL, SSL_connect, ERR_R_INTERNAL_ERROR);
    869     return -1;
    870   }
    871 
    872   return s->handshake_func(s);
    873 }
    874 
    875 long SSL_get_default_timeout(const SSL *s) {
    876   return SSL_DEFAULT_SESSION_TIMEOUT;
    877 }
    878 
    879 int SSL_read(SSL *s, void *buf, int num) {
    880   if (s->handshake_func == 0) {
    881     OPENSSL_PUT_ERROR(SSL, SSL_read, SSL_R_UNINITIALIZED);
    882     return -1;
    883   }
    884 
    885   if (s->shutdown & SSL_RECEIVED_SHUTDOWN) {
    886     s->rwstate = SSL_NOTHING;
    887     return 0;
    888   }
    889 
    890   ERR_clear_system_error();
    891   return s->method->ssl_read_app_data(s, buf, num, 0);
    892 }
    893 
    894 int SSL_peek(SSL *s, void *buf, int num) {
    895   if (s->handshake_func == 0) {
    896     OPENSSL_PUT_ERROR(SSL, SSL_peek, SSL_R_UNINITIALIZED);
    897     return -1;
    898   }
    899 
    900   if (s->shutdown & SSL_RECEIVED_SHUTDOWN) {
    901     return 0;
    902   }
    903 
    904   ERR_clear_system_error();
    905   return s->method->ssl_read_app_data(s, buf, num, 1);
    906 }
    907 
    908 int SSL_write(SSL *s, const void *buf, int num) {
    909   if (s->handshake_func == 0) {
    910     OPENSSL_PUT_ERROR(SSL, SSL_write, SSL_R_UNINITIALIZED);
    911     return -1;
    912   }
    913 
    914   if (s->shutdown & SSL_SENT_SHUTDOWN) {
    915     s->rwstate = SSL_NOTHING;
    916     OPENSSL_PUT_ERROR(SSL, SSL_write, SSL_R_PROTOCOL_IS_SHUTDOWN);
    917     return -1;
    918   }
    919 
    920   ERR_clear_system_error();
    921   return s->method->ssl_write_app_data(s, buf, num);
    922 }
    923 
    924 int SSL_shutdown(SSL *s) {
    925   /* Note that this function behaves differently from what one might expect.
    926    * Return values are 0 for no success (yet), 1 for success; but calling it
    927    * once is usually not enough, even if blocking I/O is used (see
    928    * ssl3_shutdown). */
    929 
    930   if (s->handshake_func == 0) {
    931     OPENSSL_PUT_ERROR(SSL, SSL_shutdown, SSL_R_UNINITIALIZED);
    932     return -1;
    933   }
    934 
    935   if (SSL_in_init(s)) {
    936     return 1;
    937   }
    938 
    939   /* Do nothing if configured not to send a close_notify. */
    940   if (s->quiet_shutdown) {
    941     s->shutdown = SSL_SENT_SHUTDOWN | SSL_RECEIVED_SHUTDOWN;
    942     return 1;
    943   }
    944 
    945   if (!(s->shutdown & SSL_SENT_SHUTDOWN)) {
    946     s->shutdown |= SSL_SENT_SHUTDOWN;
    947     ssl3_send_alert(s, SSL3_AL_WARNING, SSL_AD_CLOSE_NOTIFY);
    948 
    949     /* our shutdown alert has been sent now, and if it still needs to be
    950      * written, s->s3->alert_dispatch will be true */
    951     if (s->s3->alert_dispatch) {
    952       return -1; /* return WANT_WRITE */
    953     }
    954   } else if (s->s3->alert_dispatch) {
    955     /* resend it if not sent */
    956     int ret = s->method->ssl_dispatch_alert(s);
    957     if (ret == -1) {
    958       /* we only get to return -1 here the 2nd/Nth invocation, we must  have
    959        * already signalled return 0 upon a previous invoation, return
    960        * WANT_WRITE */
    961       return ret;
    962     }
    963   } else if (!(s->shutdown & SSL_RECEIVED_SHUTDOWN)) {
    964     /* If we are waiting for a close from our peer, we are closed */
    965     s->method->ssl_read_close_notify(s);
    966     if (!(s->shutdown & SSL_RECEIVED_SHUTDOWN)) {
    967       return -1; /* return WANT_READ */
    968     }
    969   }
    970 
    971   if (s->shutdown == (SSL_SENT_SHUTDOWN | SSL_RECEIVED_SHUTDOWN) &&
    972       !s->s3->alert_dispatch) {
    973     return 1;
    974   } else {
    975     return 0;
    976   }
    977 }
    978 
    979 int SSL_renegotiate(SSL *ssl) {
    980   /* Caller-initiated renegotiation is not supported. */
    981   OPENSSL_PUT_ERROR(SSL, SSL_renegotiate, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
    982   return 0;
    983 }
    984 
    985 int SSL_renegotiate_pending(SSL *ssl) {
    986   return SSL_in_init(ssl) && ssl->s3->initial_handshake_complete;
    987 }
    988 
    989 uint32_t SSL_CTX_set_options(SSL_CTX *ctx, uint32_t options) {
    990   ctx->options |= options;
    991   return ctx->options;
    992 }
    993 
    994 uint32_t SSL_set_options(SSL *ssl, uint32_t options) {
    995   ssl->options |= options;
    996   return ssl->options;
    997 }
    998 
    999 uint32_t SSL_CTX_clear_options(SSL_CTX *ctx, uint32_t options) {
   1000   ctx->options &= ~options;
   1001   return ctx->options;
   1002 }
   1003 
   1004 uint32_t SSL_clear_options(SSL *ssl, uint32_t options) {
   1005   ssl->options &= ~options;
   1006   return ssl->options;
   1007 }
   1008 
   1009 uint32_t SSL_CTX_get_options(const SSL_CTX *ctx) { return ctx->options; }
   1010 
   1011 uint32_t SSL_get_options(const SSL *ssl) { return ssl->options; }
   1012 
   1013 uint32_t SSL_CTX_set_mode(SSL_CTX *ctx, uint32_t mode) {
   1014   ctx->mode |= mode;
   1015   return ctx->mode;
   1016 }
   1017 
   1018 uint32_t SSL_set_mode(SSL *ssl, uint32_t mode) {
   1019   ssl->mode |= mode;
   1020   return ssl->mode;
   1021 }
   1022 
   1023 uint32_t SSL_CTX_clear_mode(SSL_CTX *ctx, uint32_t mode) {
   1024   ctx->mode &= ~mode;
   1025   return ctx->mode;
   1026 }
   1027 
   1028 uint32_t SSL_clear_mode(SSL *ssl, uint32_t mode) {
   1029   ssl->mode &= ~mode;
   1030   return ssl->mode;
   1031 }
   1032 
   1033 uint32_t SSL_CTX_get_mode(const SSL_CTX *ctx) { return ctx->mode; }
   1034 
   1035 uint32_t SSL_get_mode(const SSL *ssl) { return ssl->mode; }
   1036 
   1037 size_t SSL_CTX_get_max_cert_list(const SSL_CTX *ctx) {
   1038   return ctx->max_cert_list;
   1039 }
   1040 
   1041 void SSL_CTX_set_max_cert_list(SSL_CTX *ctx, size_t max_cert_list) {
   1042   if (max_cert_list > kMaxHandshakeSize) {
   1043     max_cert_list = kMaxHandshakeSize;
   1044   }
   1045   ctx->max_cert_list = (uint32_t)max_cert_list;
   1046 }
   1047 
   1048 size_t SSL_get_max_cert_list(const SSL *ssl) {
   1049   return ssl->max_cert_list;
   1050 }
   1051 
   1052 void SSL_set_max_cert_list(SSL *ssl, size_t max_cert_list) {
   1053   if (max_cert_list > kMaxHandshakeSize) {
   1054     max_cert_list = kMaxHandshakeSize;
   1055   }
   1056   ssl->max_cert_list = (uint32_t)max_cert_list;
   1057 }
   1058 
   1059 void SSL_CTX_set_max_send_fragment(SSL_CTX *ctx, size_t max_send_fragment) {
   1060   if (max_send_fragment < 512) {
   1061     max_send_fragment = 512;
   1062   }
   1063   if (max_send_fragment > SSL3_RT_MAX_PLAIN_LENGTH) {
   1064     max_send_fragment = SSL3_RT_MAX_PLAIN_LENGTH;
   1065   }
   1066   ctx->max_send_fragment = (uint16_t)max_send_fragment;
   1067 }
   1068 
   1069 void SSL_set_max_send_fragment(SSL *ssl, size_t max_send_fragment) {
   1070   if (max_send_fragment < 512) {
   1071     max_send_fragment = 512;
   1072   }
   1073   if (max_send_fragment > SSL3_RT_MAX_PLAIN_LENGTH) {
   1074     max_send_fragment = SSL3_RT_MAX_PLAIN_LENGTH;
   1075   }
   1076   ssl->max_send_fragment = (uint16_t)max_send_fragment;
   1077 }
   1078 
   1079 int SSL_set_mtu(SSL *ssl, unsigned mtu) {
   1080   if (!SSL_IS_DTLS(ssl) || mtu < dtls1_min_mtu()) {
   1081     return 0;
   1082   }
   1083   ssl->d1->mtu = mtu;
   1084   return 1;
   1085 }
   1086 
   1087 int SSL_get_secure_renegotiation_support(const SSL *ssl) {
   1088   return ssl->s3->send_connection_binding;
   1089 }
   1090 
   1091 long SSL_ctrl(SSL *s, int cmd, long larg, void *parg) {
   1092   return s->method->ssl_ctrl(s, cmd, larg, parg);
   1093 }
   1094 
   1095 LHASH_OF(SSL_SESSION) *SSL_CTX_sessions(SSL_CTX *ctx) { return ctx->sessions; }
   1096 
   1097 size_t SSL_CTX_sess_number(const SSL_CTX *ctx) {
   1098   return lh_SSL_SESSION_num_items(ctx->sessions);
   1099 }
   1100 
   1101 unsigned long SSL_CTX_sess_set_cache_size(SSL_CTX *ctx, unsigned long size) {
   1102   unsigned long ret = ctx->session_cache_size;
   1103   ctx->session_cache_size = size;
   1104   return ret;
   1105 }
   1106 
   1107 unsigned long SSL_CTX_sess_get_cache_size(const SSL_CTX *ctx) {
   1108   return ctx->session_cache_size;
   1109 }
   1110 
   1111 int SSL_CTX_set_session_cache_mode(SSL_CTX *ctx, int mode) {
   1112   int ret = ctx->session_cache_mode;
   1113   ctx->session_cache_mode = mode;
   1114   return ret;
   1115 }
   1116 
   1117 int SSL_CTX_get_session_cache_mode(const SSL_CTX *ctx) {
   1118   return ctx->session_cache_mode;
   1119 }
   1120 
   1121 long SSL_CTX_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg) {
   1122   return ctx->method->ssl_ctx_ctrl(ctx, cmd, larg, parg);
   1123 }
   1124 
   1125 /* return a STACK of the ciphers available for the SSL and in order of
   1126  * preference */
   1127 STACK_OF(SSL_CIPHER) *SSL_get_ciphers(const SSL *s) {
   1128   if (s == NULL) {
   1129     return NULL;
   1130   }
   1131 
   1132   if (s->cipher_list != NULL) {
   1133     return s->cipher_list->ciphers;
   1134   }
   1135 
   1136   if (s->version >= TLS1_1_VERSION && s->ctx != NULL &&
   1137       s->ctx->cipher_list_tls11 != NULL) {
   1138     return s->ctx->cipher_list_tls11->ciphers;
   1139   }
   1140 
   1141   if (s->ctx != NULL && s->ctx->cipher_list != NULL) {
   1142     return s->ctx->cipher_list->ciphers;
   1143   }
   1144 
   1145   return NULL;
   1146 }
   1147 
   1148 /* return a STACK of the ciphers available for the SSL and in order of
   1149  * algorithm id */
   1150 STACK_OF(SSL_CIPHER) *ssl_get_ciphers_by_id(SSL *s) {
   1151   if (s == NULL) {
   1152     return NULL;
   1153   }
   1154 
   1155   if (s->cipher_list_by_id != NULL) {
   1156     return s->cipher_list_by_id;
   1157   }
   1158 
   1159   if (s->ctx != NULL && s->ctx->cipher_list_by_id != NULL) {
   1160     return s->ctx->cipher_list_by_id;
   1161   }
   1162 
   1163   return NULL;
   1164 }
   1165 
   1166 /* The old interface to get the same thing as SSL_get_ciphers() */
   1167 const char *SSL_get_cipher_list(const SSL *s, int n) {
   1168   const SSL_CIPHER *c;
   1169   STACK_OF(SSL_CIPHER) *sk;
   1170 
   1171   if (s == NULL) {
   1172     return NULL;
   1173   }
   1174 
   1175   sk = SSL_get_ciphers(s);
   1176   if (sk == NULL || n < 0 || (size_t)n >= sk_SSL_CIPHER_num(sk)) {
   1177     return NULL;
   1178   }
   1179 
   1180   c = sk_SSL_CIPHER_value(sk, n);
   1181   if (c == NULL) {
   1182     return NULL;
   1183   }
   1184 
   1185   return c->name;
   1186 }
   1187 
   1188 /* specify the ciphers to be used by default by the SSL_CTX */
   1189 int SSL_CTX_set_cipher_list(SSL_CTX *ctx, const char *str) {
   1190   STACK_OF(SSL_CIPHER) *sk;
   1191 
   1192   sk = ssl_create_cipher_list(ctx->method, &ctx->cipher_list,
   1193                               &ctx->cipher_list_by_id, str);
   1194   /* ssl_create_cipher_list may return an empty stack if it was unable to find
   1195    * a cipher matching the given rule string (for example if the rule string
   1196    * specifies a cipher which has been disabled). This is not an error as far
   1197    * as ssl_create_cipher_list is concerned, and hence ctx->cipher_list and
   1198    * ctx->cipher_list_by_id has been updated. */
   1199   if (sk == NULL) {
   1200     return 0;
   1201   } else if (sk_SSL_CIPHER_num(sk) == 0) {
   1202     OPENSSL_PUT_ERROR(SSL, SSL_CTX_set_cipher_list, SSL_R_NO_CIPHER_MATCH);
   1203     return 0;
   1204   }
   1205 
   1206   return 1;
   1207 }
   1208 
   1209 int SSL_CTX_set_cipher_list_tls11(SSL_CTX *ctx, const char *str) {
   1210   STACK_OF(SSL_CIPHER) *sk;
   1211 
   1212   sk = ssl_create_cipher_list(ctx->method, &ctx->cipher_list_tls11, NULL, str);
   1213   if (sk == NULL) {
   1214     return 0;
   1215   } else if (sk_SSL_CIPHER_num(sk) == 0) {
   1216     OPENSSL_PUT_ERROR(SSL, SSL_CTX_set_cipher_list_tls11,
   1217                       SSL_R_NO_CIPHER_MATCH);
   1218     return 0;
   1219   }
   1220 
   1221   return 1;
   1222 }
   1223 
   1224 /* specify the ciphers to be used by the SSL */
   1225 int SSL_set_cipher_list(SSL *s, const char *str) {
   1226   STACK_OF(SSL_CIPHER) *sk;
   1227 
   1228   sk = ssl_create_cipher_list(s->ctx->method, &s->cipher_list,
   1229                               &s->cipher_list_by_id, str);
   1230 
   1231   /* see comment in SSL_CTX_set_cipher_list */
   1232   if (sk == NULL) {
   1233     return 0;
   1234   } else if (sk_SSL_CIPHER_num(sk) == 0) {
   1235     OPENSSL_PUT_ERROR(SSL, SSL_set_cipher_list, SSL_R_NO_CIPHER_MATCH);
   1236     return 0;
   1237   }
   1238 
   1239   return 1;
   1240 }
   1241 
   1242 int ssl_cipher_list_to_bytes(SSL *s, STACK_OF(SSL_CIPHER) *sk, uint8_t *p) {
   1243   size_t i;
   1244   const SSL_CIPHER *c;
   1245   CERT *ct = s->cert;
   1246   uint8_t *q;
   1247   /* Set disabled masks for this session */
   1248   ssl_set_client_disabled(s);
   1249 
   1250   if (sk == NULL) {
   1251     return 0;
   1252   }
   1253   q = p;
   1254 
   1255   for (i = 0; i < sk_SSL_CIPHER_num(sk); i++) {
   1256     c = sk_SSL_CIPHER_value(sk, i);
   1257     /* Skip disabled ciphers */
   1258     if (c->algorithm_ssl & ct->mask_ssl ||
   1259         c->algorithm_mkey & ct->mask_k ||
   1260         c->algorithm_auth & ct->mask_a) {
   1261       continue;
   1262     }
   1263     s2n(ssl_cipher_get_value(c), p);
   1264   }
   1265 
   1266   /* If all ciphers were disabled, return the error to the caller. */
   1267   if (p == q) {
   1268     return 0;
   1269   }
   1270 
   1271   /* Add SCSVs. */
   1272   if (!s->s3->initial_handshake_complete) {
   1273     s2n(SSL3_CK_SCSV & 0xffff, p);
   1274   }
   1275 
   1276   if (s->mode & SSL_MODE_SEND_FALLBACK_SCSV) {
   1277     s2n(SSL3_CK_FALLBACK_SCSV & 0xffff, p);
   1278   }
   1279 
   1280   return p - q;
   1281 }
   1282 
   1283 STACK_OF(SSL_CIPHER) *ssl_bytes_to_cipher_list(SSL *s, const CBS *cbs) {
   1284   CBS cipher_suites = *cbs;
   1285   const SSL_CIPHER *c;
   1286   STACK_OF(SSL_CIPHER) *sk;
   1287 
   1288   if (s->s3) {
   1289     s->s3->send_connection_binding = 0;
   1290   }
   1291 
   1292   if (CBS_len(&cipher_suites) % 2 != 0) {
   1293     OPENSSL_PUT_ERROR(SSL, ssl_bytes_to_cipher_list,
   1294                       SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST);
   1295     return NULL;
   1296   }
   1297 
   1298   sk = sk_SSL_CIPHER_new_null();
   1299   if (sk == NULL) {
   1300     OPENSSL_PUT_ERROR(SSL, ssl_bytes_to_cipher_list, ERR_R_MALLOC_FAILURE);
   1301     goto err;
   1302   }
   1303 
   1304   while (CBS_len(&cipher_suites) > 0) {
   1305     uint16_t cipher_suite;
   1306 
   1307     if (!CBS_get_u16(&cipher_suites, &cipher_suite)) {
   1308       OPENSSL_PUT_ERROR(SSL, ssl_bytes_to_cipher_list, ERR_R_INTERNAL_ERROR);
   1309       goto err;
   1310     }
   1311 
   1312     /* Check for SCSV. */
   1313     if (s->s3 && cipher_suite == (SSL3_CK_SCSV & 0xffff)) {
   1314       /* SCSV is fatal if renegotiating. */
   1315       if (s->s3->initial_handshake_complete) {
   1316         OPENSSL_PUT_ERROR(SSL, ssl_bytes_to_cipher_list,
   1317                           SSL_R_SCSV_RECEIVED_WHEN_RENEGOTIATING);
   1318         ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_HANDSHAKE_FAILURE);
   1319         goto err;
   1320       }
   1321       s->s3->send_connection_binding = 1;
   1322       continue;
   1323     }
   1324 
   1325     /* Check for FALLBACK_SCSV. */
   1326     if (s->s3 && cipher_suite == (SSL3_CK_FALLBACK_SCSV & 0xffff)) {
   1327       uint16_t max_version = ssl3_get_max_server_version(s);
   1328       if (SSL_IS_DTLS(s) ? (uint16_t)s->version > max_version
   1329                          : (uint16_t)s->version < max_version) {
   1330         OPENSSL_PUT_ERROR(SSL, ssl_bytes_to_cipher_list,
   1331                           SSL_R_INAPPROPRIATE_FALLBACK);
   1332         ssl3_send_alert(s, SSL3_AL_FATAL, SSL3_AD_INAPPROPRIATE_FALLBACK);
   1333         goto err;
   1334       }
   1335       continue;
   1336     }
   1337 
   1338     c = SSL_get_cipher_by_value(cipher_suite);
   1339     if (c != NULL && !sk_SSL_CIPHER_push(sk, c)) {
   1340       OPENSSL_PUT_ERROR(SSL, ssl_bytes_to_cipher_list, ERR_R_MALLOC_FAILURE);
   1341       goto err;
   1342     }
   1343   }
   1344 
   1345   return sk;
   1346 
   1347 err:
   1348   sk_SSL_CIPHER_free(sk);
   1349   return NULL;
   1350 }
   1351 
   1352 
   1353 /* return a servername extension value if provided in Client Hello, or NULL. So
   1354  * far, only host_name types are defined (RFC 3546). */
   1355 const char *SSL_get_servername(const SSL *s, const int type) {
   1356   if (type != TLSEXT_NAMETYPE_host_name) {
   1357     return NULL;
   1358   }
   1359 
   1360   return s->session && !s->tlsext_hostname ? s->session->tlsext_hostname
   1361                                            : s->tlsext_hostname;
   1362 }
   1363 
   1364 int SSL_get_servername_type(const SSL *s) {
   1365   if (s->session &&
   1366       (!s->tlsext_hostname ? s->session->tlsext_hostname : s->tlsext_hostname)) {
   1367     return TLSEXT_NAMETYPE_host_name;
   1368   }
   1369 
   1370   return -1;
   1371 }
   1372 
   1373 void SSL_CTX_enable_signed_cert_timestamps(SSL_CTX *ctx) {
   1374   ctx->signed_cert_timestamps_enabled = 1;
   1375 }
   1376 
   1377 int SSL_enable_signed_cert_timestamps(SSL *ssl) {
   1378   ssl->signed_cert_timestamps_enabled = 1;
   1379   return 1;
   1380 }
   1381 
   1382 void SSL_CTX_enable_ocsp_stapling(SSL_CTX *ctx) {
   1383   ctx->ocsp_stapling_enabled = 1;
   1384 }
   1385 
   1386 int SSL_enable_ocsp_stapling(SSL *ssl) {
   1387   ssl->ocsp_stapling_enabled = 1;
   1388   return 1;
   1389 }
   1390 
   1391 void SSL_get0_signed_cert_timestamp_list(const SSL *ssl, const uint8_t **out,
   1392                                          size_t *out_len) {
   1393   SSL_SESSION *session = ssl->session;
   1394 
   1395   *out_len = 0;
   1396   *out = NULL;
   1397   if (ssl->server || !session || !session->tlsext_signed_cert_timestamp_list) {
   1398     return;
   1399   }
   1400 
   1401   *out = session->tlsext_signed_cert_timestamp_list;
   1402   *out_len = session->tlsext_signed_cert_timestamp_list_length;
   1403 }
   1404 
   1405 void SSL_get0_ocsp_response(const SSL *ssl, const uint8_t **out,
   1406                             size_t *out_len) {
   1407   SSL_SESSION *session = ssl->session;
   1408 
   1409   *out_len = 0;
   1410   *out = NULL;
   1411   if (ssl->server || !session || !session->ocsp_response) {
   1412     return;
   1413   }
   1414   *out = session->ocsp_response;
   1415   *out_len = session->ocsp_response_length;
   1416 }
   1417 
   1418 /* SSL_select_next_proto implements the standard protocol selection. It is
   1419  * expected that this function is called from the callback set by
   1420  * SSL_CTX_set_next_proto_select_cb.
   1421  *
   1422  * The protocol data is assumed to be a vector of 8-bit, length prefixed byte
   1423  * strings. The length byte itself is not included in the length. A byte
   1424  * string of length 0 is invalid. No byte string may be truncated.
   1425  *
   1426  * The current, but experimental algorithm for selecting the protocol is:
   1427  *
   1428  * 1) If the server doesn't support NPN then this is indicated to the
   1429  * callback. In this case, the client application has to abort the connection
   1430  * or have a default application level protocol.
   1431  *
   1432  * 2) If the server supports NPN, but advertises an empty list then the
   1433  * client selects the first protcol in its list, but indicates via the
   1434  * API that this fallback case was enacted.
   1435  *
   1436  * 3) Otherwise, the client finds the first protocol in the server's list
   1437  * that it supports and selects this protocol. This is because it's
   1438  * assumed that the server has better information about which protocol
   1439  * a client should use.
   1440  *
   1441  * 4) If the client doesn't support any of the server's advertised
   1442  * protocols, then this is treated the same as case 2.
   1443  *
   1444  * It returns either
   1445  * OPENSSL_NPN_NEGOTIATED if a common protocol was found, or
   1446  * OPENSSL_NPN_NO_OVERLAP if the fallback case was reached.
   1447  */
   1448 int SSL_select_next_proto(uint8_t **out, uint8_t *outlen, const uint8_t *server,
   1449                           unsigned int server_len, const uint8_t *client,
   1450                           unsigned int client_len) {
   1451   unsigned int i, j;
   1452   const uint8_t *result;
   1453   int status = OPENSSL_NPN_UNSUPPORTED;
   1454 
   1455   /* For each protocol in server preference order, see if we support it. */
   1456   for (i = 0; i < server_len;) {
   1457     for (j = 0; j < client_len;) {
   1458       if (server[i] == client[j] &&
   1459           memcmp(&server[i + 1], &client[j + 1], server[i]) == 0) {
   1460         /* We found a match */
   1461         result = &server[i];
   1462         status = OPENSSL_NPN_NEGOTIATED;
   1463         goto found;
   1464       }
   1465       j += client[j];
   1466       j++;
   1467     }
   1468     i += server[i];
   1469     i++;
   1470   }
   1471 
   1472   /* There's no overlap between our protocols and the server's list. */
   1473   result = client;
   1474   status = OPENSSL_NPN_NO_OVERLAP;
   1475 
   1476 found:
   1477   *out = (uint8_t *)result + 1;
   1478   *outlen = result[0];
   1479   return status;
   1480 }
   1481 
   1482 /* SSL_get0_next_proto_negotiated sets *data and *len to point to the client's
   1483  * requested protocol for this connection and returns 0. If the client didn't
   1484  * request any protocol, then *data is set to NULL.
   1485  *
   1486  * Note that the client can request any protocol it chooses. The value returned
   1487  * from this function need not be a member of the list of supported protocols
   1488  * provided by the callback. */
   1489 void SSL_get0_next_proto_negotiated(const SSL *s, const uint8_t **data,
   1490                                     unsigned *len) {
   1491   *data = s->next_proto_negotiated;
   1492   if (!*data) {
   1493     *len = 0;
   1494   } else {
   1495     *len = s->next_proto_negotiated_len;
   1496   }
   1497 }
   1498 
   1499 /* SSL_CTX_set_next_protos_advertised_cb sets a callback that is called when a
   1500  * TLS server needs a list of supported protocols for Next Protocol
   1501  * Negotiation. The returned list must be in wire format.  The list is returned
   1502  * by setting |out| to point to it and |outlen| to its length. This memory will
   1503  * not be modified, but one should assume that the SSL* keeps a reference to
   1504  * it.
   1505  *
   1506  * The callback should return SSL_TLSEXT_ERR_OK if it wishes to advertise.
   1507  * Otherwise, no such extension will be included in the ServerHello. */
   1508 void SSL_CTX_set_next_protos_advertised_cb(
   1509     SSL_CTX *ctx,
   1510     int (*cb)(SSL *ssl, const uint8_t **out, unsigned int *outlen, void *arg),
   1511     void *arg) {
   1512   ctx->next_protos_advertised_cb = cb;
   1513   ctx->next_protos_advertised_cb_arg = arg;
   1514 }
   1515 
   1516 /* SSL_CTX_set_next_proto_select_cb sets a callback that is called when a
   1517  * client needs to select a protocol from the server's provided list. |out|
   1518  * must be set to point to the selected protocol (which may be within |in|).
   1519  * The length of the protocol name must be written into |outlen|. The server's
   1520  * advertised protocols are provided in |in| and |inlen|. The callback can
   1521  * assume that |in| is syntactically valid.
   1522  *
   1523  * The client must select a protocol. It is fatal to the connection if this
   1524  * callback returns a value other than SSL_TLSEXT_ERR_OK.
   1525  */
   1526 void SSL_CTX_set_next_proto_select_cb(
   1527     SSL_CTX *ctx, int (*cb)(SSL *s, uint8_t **out, uint8_t *outlen,
   1528                             const uint8_t *in, unsigned int inlen, void *arg),
   1529     void *arg) {
   1530   ctx->next_proto_select_cb = cb;
   1531   ctx->next_proto_select_cb_arg = arg;
   1532 }
   1533 
   1534 int SSL_CTX_set_alpn_protos(SSL_CTX *ctx, const uint8_t *protos,
   1535                             unsigned protos_len) {
   1536   OPENSSL_free(ctx->alpn_client_proto_list);
   1537   ctx->alpn_client_proto_list = BUF_memdup(protos, protos_len);
   1538   if (!ctx->alpn_client_proto_list) {
   1539     return 1;
   1540   }
   1541   ctx->alpn_client_proto_list_len = protos_len;
   1542 
   1543   return 0;
   1544 }
   1545 
   1546 int SSL_set_alpn_protos(SSL *ssl, const uint8_t *protos, unsigned protos_len) {
   1547   OPENSSL_free(ssl->alpn_client_proto_list);
   1548   ssl->alpn_client_proto_list = BUF_memdup(protos, protos_len);
   1549   if (!ssl->alpn_client_proto_list) {
   1550     return 1;
   1551   }
   1552   ssl->alpn_client_proto_list_len = protos_len;
   1553 
   1554   return 0;
   1555 }
   1556 
   1557 /* SSL_CTX_set_alpn_select_cb sets a callback function on |ctx| that is called
   1558  * during ClientHello processing in order to select an ALPN protocol from the
   1559  * client's list of offered protocols. */
   1560 void SSL_CTX_set_alpn_select_cb(SSL_CTX *ctx,
   1561                                 int (*cb)(SSL *ssl, const uint8_t **out,
   1562                                           uint8_t *outlen, const uint8_t *in,
   1563                                           unsigned int inlen, void *arg),
   1564                                 void *arg) {
   1565   ctx->alpn_select_cb = cb;
   1566   ctx->alpn_select_cb_arg = arg;
   1567 }
   1568 
   1569 /* SSL_get0_alpn_selected gets the selected ALPN protocol (if any) from |ssl|.
   1570  * On return it sets |*data| to point to |*len| bytes of protocol name (not
   1571  * including the leading length-prefix byte). If the server didn't respond with
   1572  * a negotiated protocol then |*len| will be zero. */
   1573 void SSL_get0_alpn_selected(const SSL *ssl, const uint8_t **data,
   1574                             unsigned *len) {
   1575   *data = NULL;
   1576   if (ssl->s3) {
   1577     *data = ssl->s3->alpn_selected;
   1578   }
   1579   if (*data == NULL) {
   1580     *len = 0;
   1581   } else {
   1582     *len = ssl->s3->alpn_selected_len;
   1583   }
   1584 }
   1585 
   1586 int SSL_export_keying_material(SSL *s, uint8_t *out, size_t out_len,
   1587                                const char *label, size_t label_len,
   1588                                const uint8_t *context, size_t context_len,
   1589                                int use_context) {
   1590   if (s->version < TLS1_VERSION) {
   1591     return 0;
   1592   }
   1593 
   1594   return s->enc_method->export_keying_material(
   1595       s, out, out_len, label, label_len, context, context_len, use_context);
   1596 }
   1597 
   1598 static uint32_t ssl_session_hash(const SSL_SESSION *a) {
   1599   uint32_t hash =
   1600       ((uint32_t)a->session_id[0]) ||
   1601       ((uint32_t)a->session_id[1] << 8) ||
   1602       ((uint32_t)a->session_id[2] << 16) ||
   1603       ((uint32_t)a->session_id[3] << 24);
   1604 
   1605   return hash;
   1606 }
   1607 
   1608 /* NB: If this function (or indeed the hash function which uses a sort of
   1609  * coarser function than this one) is changed, ensure
   1610  * SSL_CTX_has_matching_session_id() is checked accordingly. It relies on being
   1611  * able to construct an SSL_SESSION that will collide with any existing session
   1612  * with a matching session ID. */
   1613 static int ssl_session_cmp(const SSL_SESSION *a, const SSL_SESSION *b) {
   1614   if (a->ssl_version != b->ssl_version) {
   1615     return 1;
   1616   }
   1617 
   1618   if (a->session_id_length != b->session_id_length) {
   1619     return 1;
   1620   }
   1621 
   1622   return memcmp(a->session_id, b->session_id, a->session_id_length);
   1623 }
   1624 
   1625 SSL_CTX *SSL_CTX_new(const SSL_METHOD *method) {
   1626   SSL_CTX *ret = NULL;
   1627 
   1628   if (method == NULL) {
   1629     OPENSSL_PUT_ERROR(SSL, SSL_CTX_new, SSL_R_NULL_SSL_METHOD_PASSED);
   1630     return NULL;
   1631   }
   1632 
   1633   if (SSL_get_ex_data_X509_STORE_CTX_idx() < 0) {
   1634     OPENSSL_PUT_ERROR(SSL, SSL_CTX_new, SSL_R_X509_VERIFICATION_SETUP_PROBLEMS);
   1635     goto err;
   1636   }
   1637 
   1638   ret = (SSL_CTX *)OPENSSL_malloc(sizeof(SSL_CTX));
   1639   if (ret == NULL) {
   1640     goto err;
   1641   }
   1642 
   1643   memset(ret, 0, sizeof(SSL_CTX));
   1644 
   1645   ret->method = method->method;
   1646 
   1647   CRYPTO_MUTEX_init(&ret->lock);
   1648 
   1649   ret->cert_store = NULL;
   1650   ret->session_cache_mode = SSL_SESS_CACHE_SERVER;
   1651   ret->session_cache_size = SSL_SESSION_CACHE_MAX_SIZE_DEFAULT;
   1652   ret->session_cache_head = NULL;
   1653   ret->session_cache_tail = NULL;
   1654 
   1655   /* We take the system default */
   1656   ret->session_timeout = SSL_DEFAULT_SESSION_TIMEOUT;
   1657 
   1658   ret->new_session_cb = 0;
   1659   ret->remove_session_cb = 0;
   1660   ret->get_session_cb = 0;
   1661   ret->generate_session_id = 0;
   1662 
   1663   ret->references = 1;
   1664   ret->quiet_shutdown = 0;
   1665 
   1666   ret->info_callback = NULL;
   1667 
   1668   ret->app_verify_callback = 0;
   1669   ret->app_verify_arg = NULL;
   1670 
   1671   ret->max_cert_list = SSL_MAX_CERT_LIST_DEFAULT;
   1672   ret->msg_callback = 0;
   1673   ret->msg_callback_arg = NULL;
   1674   ret->verify_mode = SSL_VERIFY_NONE;
   1675   ret->sid_ctx_length = 0;
   1676   ret->default_verify_callback = NULL;
   1677   ret->cert = ssl_cert_new();
   1678   if (ret->cert == NULL) {
   1679     goto err;
   1680   }
   1681 
   1682   ret->default_passwd_callback = 0;
   1683   ret->default_passwd_callback_userdata = NULL;
   1684   ret->client_cert_cb = 0;
   1685 
   1686   ret->sessions = lh_SSL_SESSION_new(ssl_session_hash, ssl_session_cmp);
   1687   if (ret->sessions == NULL) {
   1688     goto err;
   1689   }
   1690   ret->cert_store = X509_STORE_new();
   1691   if (ret->cert_store == NULL) {
   1692     goto err;
   1693   }
   1694 
   1695   ssl_create_cipher_list(ret->method, &ret->cipher_list,
   1696                          &ret->cipher_list_by_id, SSL_DEFAULT_CIPHER_LIST);
   1697   if (ret->cipher_list == NULL ||
   1698       sk_SSL_CIPHER_num(ret->cipher_list->ciphers) <= 0) {
   1699     OPENSSL_PUT_ERROR(SSL, SSL_CTX_new, SSL_R_LIBRARY_HAS_NO_CIPHERS);
   1700     goto err2;
   1701   }
   1702 
   1703   ret->param = X509_VERIFY_PARAM_new();
   1704   if (!ret->param) {
   1705     goto err;
   1706   }
   1707 
   1708   ret->client_CA = sk_X509_NAME_new_null();
   1709   if (ret->client_CA == NULL) {
   1710     goto err;
   1711   }
   1712 
   1713   CRYPTO_new_ex_data(&g_ex_data_class_ssl_ctx, ret, &ret->ex_data);
   1714 
   1715   ret->extra_certs = NULL;
   1716 
   1717   ret->max_send_fragment = SSL3_RT_MAX_PLAIN_LENGTH;
   1718 
   1719   ret->tlsext_servername_callback = 0;
   1720   ret->tlsext_servername_arg = NULL;
   1721   /* Setup RFC4507 ticket keys */
   1722   if (!RAND_bytes(ret->tlsext_tick_key_name, 16) ||
   1723       !RAND_bytes(ret->tlsext_tick_hmac_key, 16) ||
   1724       !RAND_bytes(ret->tlsext_tick_aes_key, 16)) {
   1725     ret->options |= SSL_OP_NO_TICKET;
   1726   }
   1727 
   1728   ret->next_protos_advertised_cb = 0;
   1729   ret->next_proto_select_cb = 0;
   1730   ret->psk_identity_hint = NULL;
   1731   ret->psk_client_callback = NULL;
   1732   ret->psk_server_callback = NULL;
   1733 
   1734   /* Default is to connect to non-RI servers. When RI is more widely deployed
   1735    * might change this. */
   1736   ret->options |= SSL_OP_LEGACY_SERVER_CONNECT;
   1737 
   1738   /* Lock the SSL_CTX to the specified version, for compatibility with legacy
   1739    * uses of SSL_METHOD. */
   1740   if (method->version != 0) {
   1741     SSL_CTX_set_max_version(ret, method->version);
   1742     SSL_CTX_set_min_version(ret, method->version);
   1743   }
   1744 
   1745   return ret;
   1746 
   1747 err:
   1748   OPENSSL_PUT_ERROR(SSL, SSL_CTX_new, ERR_R_MALLOC_FAILURE);
   1749 err2:
   1750   SSL_CTX_free(ret);
   1751   return NULL;
   1752 }
   1753 
   1754 void SSL_CTX_free(SSL_CTX *ctx) {
   1755   if (ctx == NULL ||
   1756       !CRYPTO_refcount_dec_and_test_zero(&ctx->references)) {
   1757     return;
   1758   }
   1759 
   1760   X509_VERIFY_PARAM_free(ctx->param);
   1761 
   1762   /* Free internal session cache. However: the remove_cb() may reference the
   1763    * ex_data of SSL_CTX, thus the ex_data store can only be removed after the
   1764    * sessions were flushed. As the ex_data handling routines might also touch
   1765    * the session cache, the most secure solution seems to be: empty (flush) the
   1766    * cache, then free ex_data, then finally free the cache. (See ticket
   1767    * [openssl.org #212].) */
   1768   SSL_CTX_flush_sessions(ctx, 0);
   1769 
   1770   CRYPTO_free_ex_data(&g_ex_data_class_ssl_ctx, ctx, &ctx->ex_data);
   1771 
   1772   CRYPTO_MUTEX_cleanup(&ctx->lock);
   1773   lh_SSL_SESSION_free(ctx->sessions);
   1774   X509_STORE_free(ctx->cert_store);
   1775   ssl_cipher_preference_list_free(ctx->cipher_list);
   1776   sk_SSL_CIPHER_free(ctx->cipher_list_by_id);
   1777   ssl_cipher_preference_list_free(ctx->cipher_list_tls11);
   1778   ssl_cert_free(ctx->cert);
   1779   sk_X509_NAME_pop_free(ctx->client_CA, X509_NAME_free);
   1780   sk_X509_pop_free(ctx->extra_certs, X509_free);
   1781   sk_SRTP_PROTECTION_PROFILE_free(ctx->srtp_profiles);
   1782   OPENSSL_free(ctx->psk_identity_hint);
   1783   OPENSSL_free(ctx->tlsext_ecpointformatlist);
   1784   OPENSSL_free(ctx->tlsext_ellipticcurvelist);
   1785   OPENSSL_free(ctx->alpn_client_proto_list);
   1786   EVP_PKEY_free(ctx->tlsext_channel_id_private);
   1787   BIO_free(ctx->keylog_bio);
   1788 
   1789   OPENSSL_free(ctx);
   1790 }
   1791 
   1792 void SSL_CTX_set_default_passwd_cb(SSL_CTX *ctx, pem_password_cb *cb) {
   1793   ctx->default_passwd_callback = cb;
   1794 }
   1795 
   1796 void SSL_CTX_set_default_passwd_cb_userdata(SSL_CTX *ctx, void *u) {
   1797   ctx->default_passwd_callback_userdata = u;
   1798 }
   1799 
   1800 void SSL_CTX_set_cert_verify_callback(SSL_CTX *ctx,
   1801                                       int (*cb)(X509_STORE_CTX *, void *),
   1802                                       void *arg) {
   1803   ctx->app_verify_callback = cb;
   1804   ctx->app_verify_arg = arg;
   1805 }
   1806 
   1807 void SSL_CTX_set_verify(SSL_CTX *ctx, int mode,
   1808                         int (*cb)(int, X509_STORE_CTX *)) {
   1809   ctx->verify_mode = mode;
   1810   ctx->default_verify_callback = cb;
   1811 }
   1812 
   1813 void SSL_CTX_set_verify_depth(SSL_CTX *ctx, int depth) {
   1814   X509_VERIFY_PARAM_set_depth(ctx->param, depth);
   1815 }
   1816 
   1817 void SSL_CTX_set_cert_cb(SSL_CTX *c, int (*cb)(SSL *ssl, void *arg),
   1818                          void *arg) {
   1819   ssl_cert_set_cert_cb(c->cert, cb, arg);
   1820 }
   1821 
   1822 void SSL_set_cert_cb(SSL *s, int (*cb)(SSL *ssl, void *arg), void *arg) {
   1823   ssl_cert_set_cert_cb(s->cert, cb, arg);
   1824 }
   1825 
   1826 static int ssl_has_key(SSL *s, size_t idx) {
   1827   CERT_PKEY *cpk = &s->cert->pkeys[idx];
   1828   return cpk->x509 && cpk->privatekey;
   1829 }
   1830 
   1831 void ssl_get_compatible_server_ciphers(SSL *s, uint32_t *out_mask_k,
   1832                                        uint32_t *out_mask_a) {
   1833   CERT *c = s->cert;
   1834   int rsa_enc, rsa_sign, dh_tmp;
   1835   uint32_t mask_k, mask_a;
   1836   int have_ecc_cert, ecdsa_ok;
   1837   X509 *x;
   1838 
   1839   if (c == NULL) {
   1840     /* TODO(davidben): Is this codepath possible? */
   1841     *out_mask_k = 0;
   1842     *out_mask_a = 0;
   1843     return;
   1844   }
   1845 
   1846   dh_tmp = (c->dh_tmp != NULL || c->dh_tmp_cb != NULL);
   1847 
   1848   rsa_enc = ssl_has_key(s, SSL_PKEY_RSA_ENC);
   1849   rsa_sign = ssl_has_key(s, SSL_PKEY_RSA_SIGN);
   1850   have_ecc_cert = ssl_has_key(s, SSL_PKEY_ECC);
   1851   mask_k = 0;
   1852   mask_a = 0;
   1853 
   1854   if (rsa_enc) {
   1855     mask_k |= SSL_kRSA;
   1856   }
   1857   if (dh_tmp) {
   1858     mask_k |= SSL_kDHE;
   1859   }
   1860   if (rsa_enc || rsa_sign) {
   1861     mask_a |= SSL_aRSA;
   1862   }
   1863 
   1864   /* An ECC certificate may be usable for ECDSA cipher suites depending on the
   1865    * key usage extension and on the client's curve preferences. */
   1866   if (have_ecc_cert) {
   1867     x = c->pkeys[SSL_PKEY_ECC].x509;
   1868     /* This call populates extension flags (ex_flags). */
   1869     X509_check_purpose(x, -1, 0);
   1870     ecdsa_ok = (x->ex_flags & EXFLAG_KUSAGE)
   1871                    ? (x->ex_kusage & X509v3_KU_DIGITAL_SIGNATURE)
   1872                    : 1;
   1873     if (!tls1_check_ec_cert(s, x)) {
   1874       ecdsa_ok = 0;
   1875     }
   1876     if (ecdsa_ok) {
   1877       mask_a |= SSL_aECDSA;
   1878     }
   1879   }
   1880 
   1881   /* If we are considering an ECC cipher suite that uses an ephemeral EC
   1882    * key, check it. */
   1883   if (tls1_check_ec_tmp_key(s)) {
   1884     mask_k |= SSL_kECDHE;
   1885   }
   1886 
   1887   /* PSK requires a server callback. */
   1888   if (s->psk_server_callback != NULL) {
   1889     mask_k |= SSL_kPSK;
   1890     mask_a |= SSL_aPSK;
   1891   }
   1892 
   1893   *out_mask_k = mask_k;
   1894   *out_mask_a = mask_a;
   1895 }
   1896 
   1897 /* This handy macro borrowed from crypto/x509v3/v3_purp.c */
   1898 #define ku_reject(x, usage) \
   1899   (((x)->ex_flags & EXFLAG_KUSAGE) && !((x)->ex_kusage & (usage)))
   1900 
   1901 int ssl_check_srvr_ecc_cert_and_alg(X509 *x, SSL *s) {
   1902   const SSL_CIPHER *cs = s->s3->tmp.new_cipher;
   1903   uint32_t alg_a = cs->algorithm_auth;
   1904   int signature_nid = 0, md_nid = 0, pk_nid = 0;
   1905 
   1906   /* This call populates the ex_flags field correctly */
   1907   X509_check_purpose(x, -1, 0);
   1908   if (x->sig_alg && x->sig_alg->algorithm) {
   1909     signature_nid = OBJ_obj2nid(x->sig_alg->algorithm);
   1910     OBJ_find_sigid_algs(signature_nid, &md_nid, &pk_nid);
   1911   }
   1912   if (alg_a & SSL_aECDSA) {
   1913     /* key usage, if present, must allow signing */
   1914     if (ku_reject(x, X509v3_KU_DIGITAL_SIGNATURE)) {
   1915       OPENSSL_PUT_ERROR(SSL, ssl_check_srvr_ecc_cert_and_alg,
   1916                         SSL_R_ECC_CERT_NOT_FOR_SIGNING);
   1917       return 0;
   1918     }
   1919   }
   1920 
   1921   return 1; /* all checks are ok */
   1922 }
   1923 
   1924 static int ssl_get_server_cert_index(const SSL *s) {
   1925   int idx;
   1926   idx = ssl_cipher_get_cert_index(s->s3->tmp.new_cipher);
   1927   if (idx == SSL_PKEY_RSA_ENC && !s->cert->pkeys[SSL_PKEY_RSA_ENC].x509) {
   1928     idx = SSL_PKEY_RSA_SIGN;
   1929   }
   1930   if (idx == -1) {
   1931     OPENSSL_PUT_ERROR(SSL, ssl_get_server_cert_index, ERR_R_INTERNAL_ERROR);
   1932   }
   1933   return idx;
   1934 }
   1935 
   1936 CERT_PKEY *ssl_get_server_send_pkey(const SSL *s) {
   1937   int i = ssl_get_server_cert_index(s);
   1938 
   1939   /* This may or may not be an error. */
   1940   if (i < 0) {
   1941     return NULL;
   1942   }
   1943 
   1944   /* May be NULL. */
   1945   return &s->cert->pkeys[i];
   1946 }
   1947 
   1948 EVP_PKEY *ssl_get_sign_pkey(SSL *s, const SSL_CIPHER *cipher) {
   1949   uint32_t alg_a = cipher->algorithm_auth;
   1950   CERT *c = s->cert;
   1951   int idx = -1;
   1952 
   1953   if (alg_a & SSL_aRSA) {
   1954     if (c->pkeys[SSL_PKEY_RSA_SIGN].privatekey != NULL) {
   1955       idx = SSL_PKEY_RSA_SIGN;
   1956     } else if (c->pkeys[SSL_PKEY_RSA_ENC].privatekey != NULL) {
   1957       idx = SSL_PKEY_RSA_ENC;
   1958     }
   1959   } else if ((alg_a & SSL_aECDSA) &&
   1960              (c->pkeys[SSL_PKEY_ECC].privatekey != NULL)) {
   1961     idx = SSL_PKEY_ECC;
   1962   }
   1963 
   1964   if (idx == -1) {
   1965     OPENSSL_PUT_ERROR(SSL, ssl_get_sign_pkey, ERR_R_INTERNAL_ERROR);
   1966     return NULL;
   1967   }
   1968 
   1969   return c->pkeys[idx].privatekey;
   1970 }
   1971 
   1972 void ssl_update_cache(SSL *s, int mode) {
   1973   /* Never cache sessions with empty session IDs. */
   1974   if (s->session->session_id_length == 0) {
   1975     return;
   1976   }
   1977 
   1978   SSL_CTX *ctx = s->initial_ctx;
   1979   if ((ctx->session_cache_mode & mode) == mode && !s->hit &&
   1980       ((ctx->session_cache_mode & SSL_SESS_CACHE_NO_INTERNAL_STORE) ||
   1981        SSL_CTX_add_session(ctx, s->session)) &&
   1982       ctx->new_session_cb != NULL) {
   1983     /* Note: |new_session_cb| is called whether the internal session cache is
   1984      * used or not. */
   1985     if (!ctx->new_session_cb(s, SSL_SESSION_up_ref(s->session))) {
   1986       SSL_SESSION_free(s->session);
   1987     }
   1988   }
   1989 
   1990   if (!(ctx->session_cache_mode & SSL_SESS_CACHE_NO_AUTO_CLEAR) &&
   1991       !(ctx->session_cache_mode & SSL_SESS_CACHE_NO_INTERNAL_STORE) &&
   1992       (ctx->session_cache_mode & mode) == mode) {
   1993     /* Automatically flush the internal session cache every 255 connections. */
   1994     int flush_cache = 0;
   1995     CRYPTO_MUTEX_lock_write(&ctx->lock);
   1996     ctx->handshakes_since_cache_flush++;
   1997     if (ctx->handshakes_since_cache_flush >= 255) {
   1998       flush_cache = 1;
   1999       ctx->handshakes_since_cache_flush = 0;
   2000     }
   2001     CRYPTO_MUTEX_unlock(&ctx->lock);
   2002 
   2003     if (flush_cache) {
   2004       SSL_CTX_flush_sessions(ctx, (unsigned long)time(NULL));
   2005     }
   2006   }
   2007 }
   2008 
   2009 int SSL_get_error(const SSL *s, int ret_code) {
   2010   int reason;
   2011   uint32_t err;
   2012   BIO *bio;
   2013 
   2014   if (ret_code > 0) {
   2015     return SSL_ERROR_NONE;
   2016   }
   2017 
   2018   /* Make things return SSL_ERROR_SYSCALL when doing SSL_do_handshake etc,
   2019    * where we do encode the error */
   2020   err = ERR_peek_error();
   2021   if (err != 0) {
   2022     if (ERR_GET_LIB(err) == ERR_LIB_SYS) {
   2023       return SSL_ERROR_SYSCALL;
   2024     }
   2025     return SSL_ERROR_SSL;
   2026   }
   2027 
   2028   if (ret_code == 0) {
   2029     if ((s->shutdown & SSL_RECEIVED_SHUTDOWN) &&
   2030         (s->s3->warn_alert == SSL_AD_CLOSE_NOTIFY)) {
   2031       /* The socket was cleanly shut down with a close_notify. */
   2032       return SSL_ERROR_ZERO_RETURN;
   2033     }
   2034     /* An EOF was observed which violates the protocol, and the underlying
   2035      * transport does not participate in the error queue. Bubble up to the
   2036      * caller. */
   2037     return SSL_ERROR_SYSCALL;
   2038   }
   2039 
   2040   if (SSL_want_session(s)) {
   2041     return SSL_ERROR_PENDING_SESSION;
   2042   }
   2043 
   2044   if (SSL_want_certificate(s)) {
   2045     return SSL_ERROR_PENDING_CERTIFICATE;
   2046   }
   2047 
   2048   if (SSL_want_read(s)) {
   2049     bio = SSL_get_rbio(s);
   2050     if (BIO_should_read(bio)) {
   2051       return SSL_ERROR_WANT_READ;
   2052     }
   2053 
   2054     if (BIO_should_write(bio)) {
   2055       /* This one doesn't make too much sense ... We never try to write to the
   2056        * rbio, and an application program where rbio and wbio are separate
   2057        * couldn't even know what it should wait for. However if we ever set
   2058        * s->rwstate incorrectly (so that we have SSL_want_read(s) instead of
   2059        * SSL_want_write(s)) and rbio and wbio *are* the same, this test works
   2060        * around that bug; so it might be safer to keep it. */
   2061       return SSL_ERROR_WANT_WRITE;
   2062     }
   2063 
   2064     if (BIO_should_io_special(bio)) {
   2065       reason = BIO_get_retry_reason(bio);
   2066       if (reason == BIO_RR_CONNECT) {
   2067         return SSL_ERROR_WANT_CONNECT;
   2068       }
   2069 
   2070       if (reason == BIO_RR_ACCEPT) {
   2071         return SSL_ERROR_WANT_ACCEPT;
   2072       }
   2073 
   2074       return SSL_ERROR_SYSCALL; /* unknown */
   2075     }
   2076   }
   2077 
   2078   if (SSL_want_write(s)) {
   2079     bio = SSL_get_wbio(s);
   2080     if (BIO_should_write(bio)) {
   2081       return SSL_ERROR_WANT_WRITE;
   2082     }
   2083 
   2084     if (BIO_should_read(bio)) {
   2085       /* See above (SSL_want_read(s) with BIO_should_write(bio)) */
   2086       return SSL_ERROR_WANT_READ;
   2087     }
   2088 
   2089     if (BIO_should_io_special(bio)) {
   2090       reason = BIO_get_retry_reason(bio);
   2091       if (reason == BIO_RR_CONNECT) {
   2092         return SSL_ERROR_WANT_CONNECT;
   2093       }
   2094 
   2095       if (reason == BIO_RR_ACCEPT) {
   2096         return SSL_ERROR_WANT_ACCEPT;
   2097       }
   2098 
   2099       return SSL_ERROR_SYSCALL;
   2100     }
   2101   }
   2102 
   2103   if (SSL_want_x509_lookup(s)) {
   2104     return SSL_ERROR_WANT_X509_LOOKUP;
   2105   }
   2106 
   2107   if (SSL_want_channel_id_lookup(s)) {
   2108     return SSL_ERROR_WANT_CHANNEL_ID_LOOKUP;
   2109   }
   2110 
   2111   return SSL_ERROR_SYSCALL;
   2112 }
   2113 
   2114 int SSL_do_handshake(SSL *s) {
   2115   int ret = 1;
   2116 
   2117   if (s->handshake_func == NULL) {
   2118     OPENSSL_PUT_ERROR(SSL, SSL_do_handshake, SSL_R_CONNECTION_TYPE_NOT_SET);
   2119     return -1;
   2120   }
   2121 
   2122   if (SSL_in_init(s)) {
   2123     ret = s->handshake_func(s);
   2124   }
   2125   return ret;
   2126 }
   2127 
   2128 void SSL_set_accept_state(SSL *ssl) {
   2129   ssl->server = 1;
   2130   ssl->shutdown = 0;
   2131   ssl->state = SSL_ST_ACCEPT;
   2132   ssl->handshake_func = ssl->method->ssl_accept;
   2133   /* clear the current cipher */
   2134   ssl_clear_cipher_ctx(ssl);
   2135 }
   2136 
   2137 void SSL_set_connect_state(SSL *ssl) {
   2138   ssl->server = 0;
   2139   ssl->shutdown = 0;
   2140   ssl->state = SSL_ST_CONNECT;
   2141   ssl->handshake_func = ssl->method->ssl_connect;
   2142   /* clear the current cipher */
   2143   ssl_clear_cipher_ctx(ssl);
   2144 }
   2145 
   2146 static const char *ssl_get_version(int version) {
   2147   switch (version) {
   2148     case TLS1_2_VERSION:
   2149       return "TLSv1.2";
   2150 
   2151     case TLS1_1_VERSION:
   2152       return "TLSv1.1";
   2153 
   2154     case TLS1_VERSION:
   2155       return "TLSv1";
   2156 
   2157     case SSL3_VERSION:
   2158       return "SSLv3";
   2159 
   2160     case DTLS1_VERSION:
   2161       return "DTLSv1";
   2162 
   2163     case DTLS1_2_VERSION:
   2164       return "DTLSv1.2";
   2165 
   2166     default:
   2167       return "unknown";
   2168   }
   2169 }
   2170 
   2171 const char *SSL_get_version(const SSL *s) {
   2172   return ssl_get_version(s->version);
   2173 }
   2174 
   2175 const char *SSL_SESSION_get_version(const SSL_SESSION *sess) {
   2176   return ssl_get_version(sess->ssl_version);
   2177 }
   2178 
   2179 void ssl_clear_cipher_ctx(SSL *s) {
   2180   SSL_AEAD_CTX_free(s->aead_read_ctx);
   2181   s->aead_read_ctx = NULL;
   2182   SSL_AEAD_CTX_free(s->aead_write_ctx);
   2183   s->aead_write_ctx = NULL;
   2184 }
   2185 
   2186 X509 *SSL_get_certificate(const SSL *s) {
   2187   if (s->cert != NULL) {
   2188     return s->cert->key->x509;
   2189   }
   2190 
   2191   return NULL;
   2192 }
   2193 
   2194 EVP_PKEY *SSL_get_privatekey(const SSL *s) {
   2195   if (s->cert != NULL) {
   2196     return s->cert->key->privatekey;
   2197   }
   2198 
   2199   return NULL;
   2200 }
   2201 
   2202 X509 *SSL_CTX_get0_certificate(const SSL_CTX *ctx) {
   2203   if (ctx->cert != NULL) {
   2204     return ctx->cert->key->x509;
   2205   }
   2206 
   2207   return NULL;
   2208 }
   2209 
   2210 EVP_PKEY *SSL_CTX_get0_privatekey(const SSL_CTX *ctx) {
   2211   if (ctx->cert != NULL) {
   2212     return ctx->cert->key->privatekey;
   2213   }
   2214 
   2215   return NULL;
   2216 }
   2217 
   2218 const SSL_CIPHER *SSL_get_current_cipher(const SSL *s) {
   2219   if (s->aead_write_ctx == NULL) {
   2220     return NULL;
   2221   }
   2222   return s->aead_write_ctx->cipher;
   2223 }
   2224 
   2225 const void *SSL_get_current_compression(SSL *s) { return NULL; }
   2226 
   2227 const void *SSL_get_current_expansion(SSL *s) { return NULL; }
   2228 
   2229 int ssl_init_wbio_buffer(SSL *s, int push) {
   2230   BIO *bbio;
   2231 
   2232   if (s->bbio == NULL) {
   2233     bbio = BIO_new(BIO_f_buffer());
   2234     if (bbio == NULL) {
   2235       return 0;
   2236     }
   2237     s->bbio = bbio;
   2238   } else {
   2239     bbio = s->bbio;
   2240     if (s->bbio == s->wbio) {
   2241       s->wbio = BIO_pop(s->wbio);
   2242     }
   2243   }
   2244 
   2245   BIO_reset(bbio);
   2246   if (!BIO_set_read_buffer_size(bbio, 1)) {
   2247     OPENSSL_PUT_ERROR(SSL, ssl_init_wbio_buffer, ERR_R_BUF_LIB);
   2248     return 0;
   2249   }
   2250 
   2251   if (push) {
   2252     if (s->wbio != bbio) {
   2253       s->wbio = BIO_push(bbio, s->wbio);
   2254     }
   2255   } else {
   2256     if (s->wbio == bbio) {
   2257       s->wbio = BIO_pop(bbio);
   2258     }
   2259   }
   2260 
   2261   return 1;
   2262 }
   2263 
   2264 void ssl_free_wbio_buffer(SSL *s) {
   2265   if (s->bbio == NULL) {
   2266     return;
   2267   }
   2268 
   2269   if (s->bbio == s->wbio) {
   2270     /* remove buffering */
   2271     s->wbio = BIO_pop(s->wbio);
   2272   }
   2273 
   2274   BIO_free(s->bbio);
   2275   s->bbio = NULL;
   2276 }
   2277 
   2278 void SSL_CTX_set_quiet_shutdown(SSL_CTX *ctx, int mode) {
   2279   ctx->quiet_shutdown = mode;
   2280 }
   2281 
   2282 int SSL_CTX_get_quiet_shutdown(const SSL_CTX *ctx) {
   2283   return ctx->quiet_shutdown;
   2284 }
   2285 
   2286 void SSL_set_quiet_shutdown(SSL *s, int mode) { s->quiet_shutdown = mode; }
   2287 
   2288 int SSL_get_quiet_shutdown(const SSL *s) { return s->quiet_shutdown; }
   2289 
   2290 void SSL_set_shutdown(SSL *s, int mode) { s->shutdown = mode; }
   2291 
   2292 int SSL_get_shutdown(const SSL *s) { return s->shutdown; }
   2293 
   2294 int SSL_version(const SSL *s) { return s->version; }
   2295 
   2296 SSL_CTX *SSL_get_SSL_CTX(const SSL *ssl) { return ssl->ctx; }
   2297 
   2298 SSL_CTX *SSL_set_SSL_CTX(SSL *ssl, SSL_CTX *ctx) {
   2299   if (ssl->ctx == ctx) {
   2300     return ssl->ctx;
   2301   }
   2302 
   2303   if (ctx == NULL) {
   2304     ctx = ssl->initial_ctx;
   2305   }
   2306 
   2307   ssl_cert_free(ssl->cert);
   2308   ssl->cert = ssl_cert_dup(ctx->cert);
   2309 
   2310   CRYPTO_refcount_inc(&ctx->references);
   2311   SSL_CTX_free(ssl->ctx); /* decrement reference count */
   2312   ssl->ctx = ctx;
   2313 
   2314   ssl->sid_ctx_length = ctx->sid_ctx_length;
   2315   assert(ssl->sid_ctx_length <= sizeof(ssl->sid_ctx));
   2316   memcpy(ssl->sid_ctx, ctx->sid_ctx, sizeof(ssl->sid_ctx));
   2317 
   2318   return ssl->ctx;
   2319 }
   2320 
   2321 int SSL_CTX_set_default_verify_paths(SSL_CTX *ctx) {
   2322   return X509_STORE_set_default_paths(ctx->cert_store);
   2323 }
   2324 
   2325 int SSL_CTX_load_verify_locations(SSL_CTX *ctx, const char *CAfile,
   2326                                   const char *CApath) {
   2327   return X509_STORE_load_locations(ctx->cert_store, CAfile, CApath);
   2328 }
   2329 
   2330 void SSL_set_info_callback(SSL *ssl,
   2331                            void (*cb)(const SSL *ssl, int type, int val)) {
   2332   ssl->info_callback = cb;
   2333 }
   2334 
   2335 void (*SSL_get_info_callback(const SSL *ssl))(const SSL * /*ssl*/, int /*type*/,
   2336                                               int /*val*/) {
   2337   return ssl->info_callback;
   2338 }
   2339 
   2340 int SSL_state(const SSL *ssl) { return ssl->state; }
   2341 
   2342 void SSL_set_state(SSL *ssl, int state) { }
   2343 
   2344 void SSL_set_verify_result(SSL *ssl, long arg) { ssl->verify_result = arg; }
   2345 
   2346 long SSL_get_verify_result(const SSL *ssl) { return ssl->verify_result; }
   2347 
   2348 int SSL_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,
   2349                          CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func) {
   2350   int index;
   2351   if (!CRYPTO_get_ex_new_index(&g_ex_data_class_ssl, &index, argl, argp,
   2352                                new_func, dup_func, free_func)) {
   2353     return -1;
   2354   }
   2355   return index;
   2356 }
   2357 
   2358 int SSL_set_ex_data(SSL *s, int idx, void *arg) {
   2359   return CRYPTO_set_ex_data(&s->ex_data, idx, arg);
   2360 }
   2361 
   2362 void *SSL_get_ex_data(const SSL *s, int idx) {
   2363   return CRYPTO_get_ex_data(&s->ex_data, idx);
   2364 }
   2365 
   2366 int SSL_CTX_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,
   2367                              CRYPTO_EX_dup *dup_func,
   2368                              CRYPTO_EX_free *free_func) {
   2369   int index;
   2370   if (!CRYPTO_get_ex_new_index(&g_ex_data_class_ssl_ctx, &index, argl, argp,
   2371                                new_func, dup_func, free_func)) {
   2372     return -1;
   2373   }
   2374   return index;
   2375 }
   2376 
   2377 int SSL_CTX_set_ex_data(SSL_CTX *s, int idx, void *arg) {
   2378   return CRYPTO_set_ex_data(&s->ex_data, idx, arg);
   2379 }
   2380 
   2381 void *SSL_CTX_get_ex_data(const SSL_CTX *s, int idx) {
   2382   return CRYPTO_get_ex_data(&s->ex_data, idx);
   2383 }
   2384 
   2385 X509_STORE *SSL_CTX_get_cert_store(const SSL_CTX *ctx) {
   2386   return ctx->cert_store;
   2387 }
   2388 
   2389 void SSL_CTX_set_cert_store(SSL_CTX *ctx, X509_STORE *store) {
   2390   X509_STORE_free(ctx->cert_store);
   2391   ctx->cert_store = store;
   2392 }
   2393 
   2394 int SSL_want(const SSL *s) { return s->rwstate; }
   2395 
   2396 void SSL_CTX_set_tmp_rsa_callback(SSL_CTX *ctx,
   2397                                   RSA *(*cb)(SSL *ssl, int is_export,
   2398                                              int keylength)) {
   2399 }
   2400 
   2401 void SSL_set_tmp_rsa_callback(SSL *ssl, RSA *(*cb)(SSL *ssl, int is_export,
   2402                                                    int keylength)) {
   2403 }
   2404 
   2405 void SSL_CTX_set_tmp_dh_callback(SSL_CTX *ctx,
   2406                                  DH *(*callback)(SSL *ssl, int is_export,
   2407                                                  int keylength)) {
   2408   ctx->cert->dh_tmp_cb = callback;
   2409 }
   2410 
   2411 void SSL_set_tmp_dh_callback(SSL *ssl, DH *(*callback)(SSL *ssl, int is_export,
   2412                                                        int keylength)) {
   2413   ssl->cert->dh_tmp_cb = callback;
   2414 }
   2415 
   2416 void SSL_CTX_set_tmp_ecdh_callback(SSL_CTX *ctx,
   2417                                    EC_KEY *(*callback)(SSL *ssl, int is_export,
   2418                                                        int keylength)) {
   2419   ctx->cert->ecdh_tmp_cb = callback;
   2420 }
   2421 
   2422 void SSL_set_tmp_ecdh_callback(SSL *ssl,
   2423                                EC_KEY *(*callback)(SSL *ssl, int is_export,
   2424                                                    int keylength)) {
   2425   ssl->cert->ecdh_tmp_cb = callback;
   2426 }
   2427 
   2428 int SSL_CTX_use_psk_identity_hint(SSL_CTX *ctx, const char *identity_hint) {
   2429   if (identity_hint != NULL && strlen(identity_hint) > PSK_MAX_IDENTITY_LEN) {
   2430     OPENSSL_PUT_ERROR(SSL, SSL_CTX_use_psk_identity_hint,
   2431                       SSL_R_DATA_LENGTH_TOO_LONG);
   2432     return 0;
   2433   }
   2434 
   2435   OPENSSL_free(ctx->psk_identity_hint);
   2436 
   2437   if (identity_hint != NULL) {
   2438     ctx->psk_identity_hint = BUF_strdup(identity_hint);
   2439     if (ctx->psk_identity_hint == NULL) {
   2440       return 0;
   2441     }
   2442   } else {
   2443     ctx->psk_identity_hint = NULL;
   2444   }
   2445 
   2446   return 1;
   2447 }
   2448 
   2449 int SSL_use_psk_identity_hint(SSL *s, const char *identity_hint) {
   2450   if (s == NULL) {
   2451     return 0;
   2452   }
   2453 
   2454   if (identity_hint != NULL && strlen(identity_hint) > PSK_MAX_IDENTITY_LEN) {
   2455     OPENSSL_PUT_ERROR(SSL, SSL_use_psk_identity_hint,
   2456                       SSL_R_DATA_LENGTH_TOO_LONG);
   2457     return 0;
   2458   }
   2459 
   2460   /* Clear currently configured hint, if any. */
   2461   OPENSSL_free(s->psk_identity_hint);
   2462   s->psk_identity_hint = NULL;
   2463 
   2464   if (identity_hint != NULL) {
   2465     s->psk_identity_hint = BUF_strdup(identity_hint);
   2466     if (s->psk_identity_hint == NULL) {
   2467       return 0;
   2468     }
   2469   }
   2470 
   2471   return 1;
   2472 }
   2473 
   2474 const char *SSL_get_psk_identity_hint(const SSL *s) {
   2475   if (s == NULL) {
   2476     return NULL;
   2477   }
   2478   return s->psk_identity_hint;
   2479 }
   2480 
   2481 const char *SSL_get_psk_identity(const SSL *s) {
   2482   if (s == NULL || s->session == NULL) {
   2483     return NULL;
   2484   }
   2485 
   2486   return s->session->psk_identity;
   2487 }
   2488 
   2489 void SSL_set_psk_client_callback(
   2490     SSL *s, unsigned int (*cb)(SSL *ssl, const char *hint, char *identity,
   2491                                unsigned int max_identity_len, uint8_t *psk,
   2492                                unsigned int max_psk_len)) {
   2493   s->psk_client_callback = cb;
   2494 }
   2495 
   2496 void SSL_CTX_set_psk_client_callback(
   2497     SSL_CTX *ctx, unsigned int (*cb)(SSL *ssl, const char *hint, char *identity,
   2498                                      unsigned int max_identity_len,
   2499                                      uint8_t *psk, unsigned int max_psk_len)) {
   2500   ctx->psk_client_callback = cb;
   2501 }
   2502 
   2503 void SSL_set_psk_server_callback(
   2504     SSL *s, unsigned int (*cb)(SSL *ssl, const char *identity, uint8_t *psk,
   2505                                unsigned int max_psk_len)) {
   2506   s->psk_server_callback = cb;
   2507 }
   2508 
   2509 void SSL_CTX_set_psk_server_callback(
   2510     SSL_CTX *ctx, unsigned int (*cb)(SSL *ssl, const char *identity,
   2511                                      uint8_t *psk, unsigned int max_psk_len)) {
   2512   ctx->psk_server_callback = cb;
   2513 }
   2514 
   2515 void SSL_CTX_set_min_version(SSL_CTX *ctx, uint16_t version) {
   2516   ctx->min_version = version;
   2517 }
   2518 
   2519 void SSL_CTX_set_max_version(SSL_CTX *ctx, uint16_t version) {
   2520   ctx->max_version = version;
   2521 }
   2522 
   2523 void SSL_set_min_version(SSL *ssl, uint16_t version) {
   2524   ssl->min_version = version;
   2525 }
   2526 
   2527 void SSL_set_max_version(SSL *ssl, uint16_t version) {
   2528   ssl->max_version = version;
   2529 }
   2530 
   2531 void SSL_CTX_set_msg_callback(SSL_CTX *ctx,
   2532                               void (*cb)(int write_p, int version,
   2533                                          int content_type, const void *buf,
   2534                                          size_t len, SSL *ssl, void *arg)) {
   2535   ctx->msg_callback = cb;
   2536 }
   2537 
   2538 void SSL_CTX_set_msg_callback_arg(SSL_CTX *ctx, void *arg) {
   2539   ctx->msg_callback_arg = arg;
   2540 }
   2541 
   2542 void SSL_set_msg_callback(SSL *ssl,
   2543                           void (*cb)(int write_p, int version, int content_type,
   2544                                      const void *buf, size_t len, SSL *ssl,
   2545                                      void *arg)) {
   2546   ssl->msg_callback = cb;
   2547 }
   2548 
   2549 void SSL_set_msg_callback_arg(SSL *ssl, void *arg) {
   2550   ssl->msg_callback_arg = arg;
   2551 }
   2552 
   2553 void SSL_CTX_set_keylog_bio(SSL_CTX *ctx, BIO *keylog_bio) {
   2554   BIO_free(ctx->keylog_bio);
   2555   ctx->keylog_bio = keylog_bio;
   2556 }
   2557 
   2558 static int cbb_add_hex(CBB *cbb, const uint8_t *in, size_t in_len) {
   2559   static const char hextable[] = "0123456789abcdef";
   2560   uint8_t *out;
   2561   size_t i;
   2562 
   2563   if (!CBB_add_space(cbb, &out, in_len * 2)) {
   2564     return 0;
   2565   }
   2566 
   2567   for (i = 0; i < in_len; i++) {
   2568     *(out++) = (uint8_t)hextable[in[i] >> 4];
   2569     *(out++) = (uint8_t)hextable[in[i] & 0xf];
   2570   }
   2571 
   2572   return 1;
   2573 }
   2574 
   2575 int ssl_ctx_log_rsa_client_key_exchange(SSL_CTX *ctx,
   2576                                         const uint8_t *encrypted_premaster,
   2577                                         size_t encrypted_premaster_len,
   2578                                         const uint8_t *premaster,
   2579                                         size_t premaster_len) {
   2580   BIO *bio = ctx->keylog_bio;
   2581   CBB cbb;
   2582   uint8_t *out;
   2583   size_t out_len;
   2584   int ret;
   2585 
   2586   if (bio == NULL) {
   2587     return 1;
   2588   }
   2589 
   2590   if (encrypted_premaster_len < 8) {
   2591     OPENSSL_PUT_ERROR(SSL, ssl_ctx_log_rsa_client_key_exchange,
   2592                       ERR_R_INTERNAL_ERROR);
   2593     return 0;
   2594   }
   2595 
   2596   if (!CBB_init(&cbb, 4 + 16 + 1 + premaster_len * 2 + 1)) {
   2597     return 0;
   2598   }
   2599 
   2600   if (!CBB_add_bytes(&cbb, (const uint8_t *)"RSA ", 4) ||
   2601       /* Only the first 8 bytes of the encrypted premaster secret are
   2602        * logged. */
   2603       !cbb_add_hex(&cbb, encrypted_premaster, 8) ||
   2604       !CBB_add_bytes(&cbb, (const uint8_t *)" ", 1) ||
   2605       !cbb_add_hex(&cbb, premaster, premaster_len) ||
   2606       !CBB_add_bytes(&cbb, (const uint8_t *)"\n", 1) ||
   2607       !CBB_finish(&cbb, &out, &out_len)) {
   2608     CBB_cleanup(&cbb);
   2609     return 0;
   2610   }
   2611 
   2612   CRYPTO_MUTEX_lock_write(&ctx->lock);
   2613   ret = BIO_write(bio, out, out_len) >= 0 && BIO_flush(bio);
   2614   CRYPTO_MUTEX_unlock(&ctx->lock);
   2615 
   2616   OPENSSL_free(out);
   2617   return ret;
   2618 }
   2619 
   2620 int ssl_ctx_log_master_secret(SSL_CTX *ctx, const uint8_t *client_random,
   2621                               size_t client_random_len, const uint8_t *master,
   2622                               size_t master_len) {
   2623   BIO *bio = ctx->keylog_bio;
   2624   CBB cbb;
   2625   uint8_t *out;
   2626   size_t out_len;
   2627   int ret;
   2628 
   2629   if (bio == NULL) {
   2630     return 1;
   2631   }
   2632 
   2633   if (client_random_len != 32) {
   2634     OPENSSL_PUT_ERROR(SSL, ssl_ctx_log_master_secret, ERR_R_INTERNAL_ERROR);
   2635     return 0;
   2636   }
   2637 
   2638   if (!CBB_init(&cbb, 14 + 64 + 1 + master_len * 2 + 1)) {
   2639     return 0;
   2640   }
   2641 
   2642   if (!CBB_add_bytes(&cbb, (const uint8_t *)"CLIENT_RANDOM ", 14) ||
   2643       !cbb_add_hex(&cbb, client_random, 32) ||
   2644       !CBB_add_bytes(&cbb, (const uint8_t *)" ", 1) ||
   2645       !cbb_add_hex(&cbb, master, master_len) ||
   2646       !CBB_add_bytes(&cbb, (const uint8_t *)"\n", 1) ||
   2647       !CBB_finish(&cbb, &out, &out_len)) {
   2648     CBB_cleanup(&cbb);
   2649     return 0;
   2650   }
   2651 
   2652   CRYPTO_MUTEX_lock_write(&ctx->lock);
   2653   ret = BIO_write(bio, out, out_len) >= 0 && BIO_flush(bio);
   2654   CRYPTO_MUTEX_unlock(&ctx->lock);
   2655 
   2656   OPENSSL_free(out);
   2657   return ret;
   2658 }
   2659 
   2660 int SSL_in_false_start(const SSL *s) {
   2661   return s->s3->tmp.in_false_start;
   2662 }
   2663 
   2664 int SSL_cutthrough_complete(const SSL *s) {
   2665   return SSL_in_false_start(s);
   2666 }
   2667 
   2668 void SSL_get_structure_sizes(size_t *ssl_size, size_t *ssl_ctx_size,
   2669                              size_t *ssl_session_size) {
   2670   *ssl_size = sizeof(SSL);
   2671   *ssl_ctx_size = sizeof(SSL_CTX);
   2672   *ssl_session_size = sizeof(SSL_SESSION);
   2673 }
   2674 
   2675 int ssl3_can_false_start(const SSL *s) {
   2676   const SSL_CIPHER *const cipher = SSL_get_current_cipher(s);
   2677 
   2678   /* False Start only for TLS 1.2 with an ECDHE+AEAD cipher and ALPN or NPN. */
   2679   return !SSL_IS_DTLS(s) &&
   2680       SSL_version(s) >= TLS1_2_VERSION &&
   2681       (s->s3->alpn_selected || s->s3->next_proto_neg_seen) &&
   2682       cipher != NULL &&
   2683       cipher->algorithm_mkey == SSL_kECDHE &&
   2684       (cipher->algorithm_enc == SSL_AES128GCM ||
   2685        cipher->algorithm_enc == SSL_AES256GCM ||
   2686        cipher->algorithm_enc == SSL_CHACHA20POLY1305);
   2687 }
   2688 
   2689 const SSL3_ENC_METHOD *ssl3_get_enc_method(uint16_t version) {
   2690   switch (version) {
   2691     case SSL3_VERSION:
   2692       return &SSLv3_enc_data;
   2693 
   2694     case TLS1_VERSION:
   2695       return &TLSv1_enc_data;
   2696 
   2697     case DTLS1_VERSION:
   2698     case TLS1_1_VERSION:
   2699       return &TLSv1_1_enc_data;
   2700 
   2701     case DTLS1_2_VERSION:
   2702     case TLS1_2_VERSION:
   2703       return &TLSv1_2_enc_data;
   2704 
   2705     default:
   2706       return NULL;
   2707   }
   2708 }
   2709 
   2710 uint16_t ssl3_get_max_server_version(const SSL *s) {
   2711   uint16_t max_version;
   2712 
   2713   if (SSL_IS_DTLS(s)) {
   2714     max_version = (s->max_version != 0) ? s->max_version : DTLS1_2_VERSION;
   2715     if (!(s->options & SSL_OP_NO_DTLSv1_2) && DTLS1_2_VERSION >= max_version) {
   2716       return DTLS1_2_VERSION;
   2717     }
   2718     if (!(s->options & SSL_OP_NO_DTLSv1) && DTLS1_VERSION >= max_version) {
   2719       return DTLS1_VERSION;
   2720     }
   2721     return 0;
   2722   }
   2723 
   2724   max_version = (s->max_version != 0) ? s->max_version : TLS1_2_VERSION;
   2725   if (!(s->options & SSL_OP_NO_TLSv1_2) && TLS1_2_VERSION <= max_version) {
   2726     return TLS1_2_VERSION;
   2727   }
   2728   if (!(s->options & SSL_OP_NO_TLSv1_1) && TLS1_1_VERSION <= max_version) {
   2729     return TLS1_1_VERSION;
   2730   }
   2731   if (!(s->options & SSL_OP_NO_TLSv1) && TLS1_VERSION <= max_version) {
   2732     return TLS1_VERSION;
   2733   }
   2734   if (!(s->options & SSL_OP_NO_SSLv3) && SSL3_VERSION <= max_version) {
   2735     return SSL3_VERSION;
   2736   }
   2737   return 0;
   2738 }
   2739 
   2740 uint16_t ssl3_get_mutual_version(SSL *s, uint16_t client_version) {
   2741   uint16_t version = 0;
   2742 
   2743   if (SSL_IS_DTLS(s)) {
   2744     /* Clamp client_version to max_version. */
   2745     if (s->max_version != 0 && client_version < s->max_version) {
   2746       client_version = s->max_version;
   2747     }
   2748 
   2749     if (client_version <= DTLS1_2_VERSION && !(s->options & SSL_OP_NO_DTLSv1_2)) {
   2750       version = DTLS1_2_VERSION;
   2751     } else if (client_version <= DTLS1_VERSION &&
   2752                !(s->options & SSL_OP_NO_DTLSv1)) {
   2753       version = DTLS1_VERSION;
   2754     }
   2755 
   2756     /* Check against min_version. */
   2757     if (version != 0 && s->min_version != 0 && version > s->min_version) {
   2758       return 0;
   2759     }
   2760     return version;
   2761   } else {
   2762     /* Clamp client_version to max_version. */
   2763     if (s->max_version != 0 && client_version > s->max_version) {
   2764       client_version = s->max_version;
   2765     }
   2766 
   2767     if (client_version >= TLS1_2_VERSION && !(s->options & SSL_OP_NO_TLSv1_2)) {
   2768       version = TLS1_2_VERSION;
   2769     } else if (client_version >= TLS1_1_VERSION &&
   2770              !(s->options & SSL_OP_NO_TLSv1_1)) {
   2771       version = TLS1_1_VERSION;
   2772     } else if (client_version >= TLS1_VERSION && !(s->options & SSL_OP_NO_TLSv1)) {
   2773       version = TLS1_VERSION;
   2774     } else if (client_version >= SSL3_VERSION && !(s->options & SSL_OP_NO_SSLv3)) {
   2775       version = SSL3_VERSION;
   2776     }
   2777 
   2778     /* Check against min_version. */
   2779     if (version != 0 && s->min_version != 0 && version < s->min_version) {
   2780       return 0;
   2781     }
   2782     return version;
   2783   }
   2784 }
   2785 
   2786 uint16_t ssl3_get_max_client_version(SSL *s) {
   2787   uint32_t options = s->options;
   2788   uint16_t version = 0;
   2789 
   2790   /* OpenSSL's API for controlling versions entails blacklisting individual
   2791    * protocols. This has two problems. First, on the client, the protocol can
   2792    * only express a contiguous range of versions. Second, a library consumer
   2793    * trying to set a maximum version cannot disable protocol versions that get
   2794    * added in a future version of the library.
   2795    *
   2796    * To account for both of these, OpenSSL interprets the client-side bitmask
   2797    * as a min/max range by picking the lowest contiguous non-empty range of
   2798    * enabled protocols. Note that this means it is impossible to set a maximum
   2799    * version of TLS 1.2 in a future-proof way.
   2800    *
   2801    * By this scheme, the maximum version is the lowest version V such that V is
   2802    * enabled and V+1 is disabled or unimplemented. */
   2803   if (SSL_IS_DTLS(s)) {
   2804     if (!(options & SSL_OP_NO_DTLSv1_2)) {
   2805       version = DTLS1_2_VERSION;
   2806     }
   2807     if (!(options & SSL_OP_NO_DTLSv1) && (options & SSL_OP_NO_DTLSv1_2)) {
   2808       version = DTLS1_VERSION;
   2809     }
   2810     if (s->max_version != 0 && version < s->max_version) {
   2811       version = s->max_version;
   2812     }
   2813   } else {
   2814     if (!(options & SSL_OP_NO_TLSv1_2)) {
   2815       version = TLS1_2_VERSION;
   2816     }
   2817     if (!(options & SSL_OP_NO_TLSv1_1) && (options & SSL_OP_NO_TLSv1_2)) {
   2818       version = TLS1_1_VERSION;
   2819     }
   2820     if (!(options & SSL_OP_NO_TLSv1) && (options & SSL_OP_NO_TLSv1_1)) {
   2821       version = TLS1_VERSION;
   2822     }
   2823     if (!(options & SSL_OP_NO_SSLv3) && (options & SSL_OP_NO_TLSv1)) {
   2824       version = SSL3_VERSION;
   2825     }
   2826     if (s->max_version != 0 && version > s->max_version) {
   2827       version = s->max_version;
   2828     }
   2829   }
   2830 
   2831   return version;
   2832 }
   2833 
   2834 int ssl3_is_version_enabled(SSL *s, uint16_t version) {
   2835   if (SSL_IS_DTLS(s)) {
   2836     if (s->max_version != 0 && version < s->max_version) {
   2837       return 0;
   2838     }
   2839     if (s->min_version != 0 && version > s->min_version) {
   2840       return 0;
   2841     }
   2842 
   2843     switch (version) {
   2844       case DTLS1_VERSION:
   2845         return !(s->options & SSL_OP_NO_DTLSv1);
   2846 
   2847       case DTLS1_2_VERSION:
   2848         return !(s->options & SSL_OP_NO_DTLSv1_2);
   2849 
   2850       default:
   2851         return 0;
   2852     }
   2853   } else {
   2854     if (s->max_version != 0 && version > s->max_version) {
   2855       return 0;
   2856     }
   2857     if (s->min_version != 0 && version < s->min_version) {
   2858       return 0;
   2859     }
   2860 
   2861     switch (version) {
   2862       case SSL3_VERSION:
   2863         return !(s->options & SSL_OP_NO_SSLv3);
   2864 
   2865       case TLS1_VERSION:
   2866         return !(s->options & SSL_OP_NO_TLSv1);
   2867 
   2868       case TLS1_1_VERSION:
   2869         return !(s->options & SSL_OP_NO_TLSv1_1);
   2870 
   2871       case TLS1_2_VERSION:
   2872         return !(s->options & SSL_OP_NO_TLSv1_2);
   2873 
   2874       default:
   2875         return 0;
   2876     }
   2877   }
   2878 }
   2879 
   2880 uint16_t ssl3_version_from_wire(SSL *s, uint16_t wire_version) {
   2881   if (!SSL_IS_DTLS(s)) {
   2882     return wire_version;
   2883   }
   2884 
   2885   uint16_t tls_version = ~wire_version;
   2886   uint16_t version = tls_version + 0x0201;
   2887   /* If either component overflowed, clamp it so comparisons still work. */
   2888   if ((version >> 8) < (tls_version >> 8)) {
   2889     version = 0xff00 | (version & 0xff);
   2890   }
   2891   if ((version & 0xff) < (tls_version & 0xff)) {
   2892     version = (version & 0xff00) | 0xff;
   2893   }
   2894   /* DTLS 1.0 maps to TLS 1.1, not TLS 1.0. */
   2895   if (version == TLS1_VERSION) {
   2896     version = TLS1_1_VERSION;
   2897   }
   2898   return version;
   2899 }
   2900 
   2901 int SSL_cache_hit(SSL *s) { return s->hit; }
   2902 
   2903 int SSL_is_server(SSL *s) { return s->server; }
   2904 
   2905 void SSL_CTX_set_dos_protection_cb(
   2906     SSL_CTX *ctx, int (*cb)(const struct ssl_early_callback_ctx *)) {
   2907   ctx->dos_protection_cb = cb;
   2908 }
   2909 
   2910 void SSL_enable_fastradio_padding(SSL *s, char on_off) {
   2911   s->fastradio_padding = on_off;
   2912 }
   2913 
   2914 void SSL_set_reject_peer_renegotiations(SSL *s, int reject) {
   2915   s->accept_peer_renegotiations = !reject;
   2916 }
   2917 
   2918 int SSL_get_rc4_state(const SSL *ssl, const RC4_KEY **read_key,
   2919                       const RC4_KEY **write_key) {
   2920   if (ssl->aead_read_ctx == NULL || ssl->aead_write_ctx == NULL) {
   2921     return 0;
   2922   }
   2923 
   2924   return EVP_AEAD_CTX_get_rc4_state(&ssl->aead_read_ctx->ctx, read_key) &&
   2925          EVP_AEAD_CTX_get_rc4_state(&ssl->aead_write_ctx->ctx, write_key);
   2926 }
   2927 
   2928 int SSL_get_tls_unique(const SSL *ssl, uint8_t *out, size_t *out_len,
   2929                        size_t max_out) {
   2930   /* The tls-unique value is the first Finished message in the handshake, which
   2931    * is the client's in a full handshake and the server's for a resumption. See
   2932    * https://tools.ietf.org/html/rfc5929#section-3.1. */
   2933   const uint8_t *finished = ssl->s3->previous_client_finished;
   2934   size_t finished_len = ssl->s3->previous_client_finished_len;
   2935   if (ssl->hit) {
   2936     /* tls-unique is broken for resumed sessions unless EMS is used. */
   2937     if (!ssl->session->extended_master_secret) {
   2938       goto err;
   2939     }
   2940     finished = ssl->s3->previous_server_finished;
   2941     finished_len = ssl->s3->previous_server_finished_len;
   2942   }
   2943 
   2944   if (!ssl->s3->initial_handshake_complete ||
   2945       ssl->version < TLS1_VERSION) {
   2946     goto err;
   2947   }
   2948 
   2949   *out_len = finished_len;
   2950   if (finished_len > max_out) {
   2951     *out_len = max_out;
   2952   }
   2953 
   2954   memcpy(out, finished, *out_len);
   2955   return 1;
   2956 
   2957 err:
   2958   *out_len = 0;
   2959   memset(out, 0, max_out);
   2960   return 0;
   2961 }
   2962 
   2963 int SSL_CTX_sess_connect(const SSL_CTX *ctx) { return 0; }
   2964 int SSL_CTX_sess_connect_good(const SSL_CTX *ctx) { return 0; }
   2965 int SSL_CTX_sess_connect_renegotiate(const SSL_CTX *ctx) { return 0; }
   2966 int SSL_CTX_sess_accept(const SSL_CTX *ctx) { return 0; }
   2967 int SSL_CTX_sess_accept_renegotiate(const SSL_CTX *ctx) { return 0; }
   2968 int SSL_CTX_sess_accept_good(const SSL_CTX *ctx) { return 0; }
   2969 int SSL_CTX_sess_hits(const SSL_CTX *ctx) { return 0; }
   2970 int SSL_CTX_sess_cb_hits(const SSL_CTX *ctx) { return 0; }
   2971 int SSL_CTX_sess_misses(const SSL_CTX *ctx) { return 0; }
   2972 int SSL_CTX_sess_timeouts(const SSL_CTX *ctx) { return 0; }
   2973 int SSL_CTX_sess_cache_full(const SSL_CTX *ctx) { return 0; }
   2974