Home | History | Annotate | Line # | Download | only in ssl
ssl_lib.c revision 1.7
      1 /*
      2  * ! \file ssl/ssl_lib.c \brief Version independent SSL functions.
      3  */
      4 /* Copyright (C) 1995-1998 Eric Young (eay (at) cryptsoft.com)
      5  * All rights reserved.
      6  *
      7  * This package is an SSL implementation written
      8  * by Eric Young (eay (at) cryptsoft.com).
      9  * The implementation was written so as to conform with Netscapes SSL.
     10  *
     11  * This library is free for commercial and non-commercial use as long as
     12  * the following conditions are aheared to.  The following conditions
     13  * apply to all code found in this distribution, be it the RC4, RSA,
     14  * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
     15  * included with this distribution is covered by the same copyright terms
     16  * except that the holder is Tim Hudson (tjh (at) cryptsoft.com).
     17  *
     18  * Copyright remains Eric Young's, and as such any Copyright notices in
     19  * the code are not to be removed.
     20  * If this package is used in a product, Eric Young should be given attribution
     21  * as the author of the parts of the library used.
     22  * This can be in the form of a textual message at program startup or
     23  * in documentation (online or textual) provided with the package.
     24  *
     25  * Redistribution and use in source and binary forms, with or without
     26  * modification, are permitted provided that the following conditions
     27  * are met:
     28  * 1. Redistributions of source code must retain the copyright
     29  *    notice, this list of conditions and the following disclaimer.
     30  * 2. Redistributions in binary form must reproduce the above copyright
     31  *    notice, this list of conditions and the following disclaimer in the
     32  *    documentation and/or other materials provided with the distribution.
     33  * 3. All advertising materials mentioning features or use of this software
     34  *    must display the following acknowledgement:
     35  *    "This product includes cryptographic software written by
     36  *     Eric Young (eay (at) cryptsoft.com)"
     37  *    The word 'cryptographic' can be left out if the rouines from the library
     38  *    being used are not cryptographic related :-).
     39  * 4. If you include any Windows specific code (or a derivative thereof) from
     40  *    the apps directory (application code) you must include an acknowledgement:
     41  *    "This product includes software written by Tim Hudson (tjh (at) cryptsoft.com)"
     42  *
     43  * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
     44  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     45  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     46  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
     47  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     48  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     49  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     50  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     51  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     52  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     53  * SUCH DAMAGE.
     54  *
     55  * The licence and distribution terms for any publically available version or
     56  * derivative of this code cannot be changed.  i.e. this code cannot simply be
     57  * copied and put under another distribution licence
     58  * [including the GNU Public Licence.]
     59  */
     60 /* ====================================================================
     61  * Copyright (c) 1998-2007 The OpenSSL Project.  All rights reserved.
     62  *
     63  * Redistribution and use in source and binary forms, with or without
     64  * modification, are permitted provided that the following conditions
     65  * are met:
     66  *
     67  * 1. Redistributions of source code must retain the above copyright
     68  *    notice, this list of conditions and the following disclaimer.
     69  *
     70  * 2. Redistributions in binary form must reproduce the above copyright
     71  *    notice, this list of conditions and the following disclaimer in
     72  *    the documentation and/or other materials provided with the
     73  *    distribution.
     74  *
     75  * 3. All advertising materials mentioning features or use of this
     76  *    software must display the following acknowledgment:
     77  *    "This product includes software developed by the OpenSSL Project
     78  *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
     79  *
     80  * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
     81  *    endorse or promote products derived from this software without
     82  *    prior written permission. For written permission, please contact
     83  *    openssl-core (at) openssl.org.
     84  *
     85  * 5. Products derived from this software may not be called "OpenSSL"
     86  *    nor may "OpenSSL" appear in their names without prior written
     87  *    permission of the OpenSSL Project.
     88  *
     89  * 6. Redistributions of any form whatsoever must retain the following
     90  *    acknowledgment:
     91  *    "This product includes software developed by the OpenSSL Project
     92  *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
     93  *
     94  * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
     95  * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     96  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     97  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
     98  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     99  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
    100  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    101  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    102  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
    103  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
    104  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
    105  * OF THE POSSIBILITY OF SUCH DAMAGE.
    106  * ====================================================================
    107  *
    108  * This product includes cryptographic software written by Eric Young
    109  * (eay (at) cryptsoft.com).  This product includes software written by Tim
    110  * Hudson (tjh (at) cryptsoft.com).
    111  *
    112  */
    113 /* ====================================================================
    114  * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.
    115  * ECC cipher suite support in OpenSSL originally developed by
    116  * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project.
    117  */
    118 /* ====================================================================
    119  * Copyright 2005 Nokia. All rights reserved.
    120  *
    121  * The portions of the attached software ("Contribution") is developed by
    122  * Nokia Corporation and is licensed pursuant to the OpenSSL open source
    123  * license.
    124  *
    125  * The Contribution, originally written by Mika Kousa and Pasi Eronen of
    126  * Nokia Corporation, consists of the "PSK" (Pre-Shared Key) ciphersuites
    127  * support (see RFC 4279) to OpenSSL.
    128  *
    129  * No patent licenses or other rights except those expressly stated in
    130  * the OpenSSL open source license shall be deemed granted or received
    131  * expressly, by implication, estoppel, or otherwise.
    132  *
    133  * No assurances are provided by Nokia that the Contribution does not
    134  * infringe the patent or other intellectual property rights of any third
    135  * party or that the license provides you with all the necessary rights
    136  * to make use of the Contribution.
    137  *
    138  * THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. IN
    139  * ADDITION TO THE DISCLAIMERS INCLUDED IN THE LICENSE, NOKIA
    140  * SPECIFICALLY DISCLAIMS ANY LIABILITY FOR CLAIMS BROUGHT BY YOU OR ANY
    141  * OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS OR
    142  * OTHERWISE.
    143  */
    144 
    145 #ifdef REF_CHECK
    146 # include <assert.h>
    147 #endif
    148 #include <stdio.h>
    149 #include "ssl_locl.h"
    150 #include "kssl_lcl.h"
    151 #include <openssl/objects.h>
    152 #include <openssl/lhash.h>
    153 #include <openssl/x509v3.h>
    154 #include <openssl/rand.h>
    155 #include <openssl/ocsp.h>
    156 #ifndef OPENSSL_NO_DH
    157 # include <openssl/dh.h>
    158 #endif
    159 #ifndef OPENSSL_NO_ENGINE
    160 # include <openssl/engine.h>
    161 #endif
    162 
    163 const char *SSL_version_str = OPENSSL_VERSION_TEXT;
    164 
    165 SSL3_ENC_METHOD ssl3_undef_enc_method = {
    166     /*
    167      * evil casts, but these functions are only called if there's a library
    168      * bug
    169      */
    170     (int (*)(SSL *, int))ssl_undefined_function,
    171     (int (*)(SSL *, unsigned char *, int))ssl_undefined_function,
    172     ssl_undefined_function,
    173     (int (*)(SSL *, unsigned char *, unsigned char *, int))
    174         ssl_undefined_function,
    175     (int (*)(SSL *, int))ssl_undefined_function,
    176     (int (*)(SSL *, const char *, int, unsigned char *))
    177         ssl_undefined_function,
    178     0,                          /* finish_mac_length */
    179     (int (*)(SSL *, int, unsigned char *))ssl_undefined_function,
    180     NULL,                       /* client_finished_label */
    181     0,                          /* client_finished_label_len */
    182     NULL,                       /* server_finished_label */
    183     0,                          /* server_finished_label_len */
    184     (int (*)(int))ssl_undefined_function,
    185     (int (*)(SSL *, unsigned char *, size_t, const char *,
    186              size_t, const unsigned char *, size_t,
    187              int use_context))ssl_undefined_function,
    188 };
    189 
    190 int SSL_clear(SSL *s)
    191 {
    192 
    193     if (s->method == NULL) {
    194         SSLerr(SSL_F_SSL_CLEAR, SSL_R_NO_METHOD_SPECIFIED);
    195         return (0);
    196     }
    197 
    198     if (ssl_clear_bad_session(s)) {
    199         SSL_SESSION_free(s->session);
    200         s->session = NULL;
    201     }
    202 
    203     s->error = 0;
    204     s->hit = 0;
    205     s->shutdown = 0;
    206 
    207 #if 0
    208     /*
    209      * Disabled since version 1.10 of this file (early return not
    210      * needed because SSL_clear is not called when doing renegotiation)
    211      */
    212     /*
    213      * This is set if we are doing dynamic renegotiation so keep
    214      * the old cipher.  It is sort of a SSL_clear_lite :-)
    215      */
    216     if (s->renegotiate)
    217         return (1);
    218 #else
    219     if (s->renegotiate) {
    220         SSLerr(SSL_F_SSL_CLEAR, ERR_R_INTERNAL_ERROR);
    221         return 0;
    222     }
    223 #endif
    224 
    225     s->type = 0;
    226 
    227     s->state = SSL_ST_BEFORE | ((s->server) ? SSL_ST_ACCEPT : SSL_ST_CONNECT);
    228 
    229     s->version = s->method->version;
    230     s->client_version = s->version;
    231     s->rwstate = SSL_NOTHING;
    232     s->rstate = SSL_ST_READ_HEADER;
    233 #if 0
    234     s->read_ahead = s->ctx->read_ahead;
    235 #endif
    236 
    237     if (s->init_buf != NULL) {
    238         BUF_MEM_free(s->init_buf);
    239         s->init_buf = NULL;
    240     }
    241 
    242     ssl_clear_cipher_ctx(s);
    243     ssl_clear_hash_ctx(&s->read_hash);
    244     ssl_clear_hash_ctx(&s->write_hash);
    245 
    246     s->first_packet = 0;
    247 
    248 #if 1
    249     /*
    250      * Check to see if we were changed into a different method, if so, revert
    251      * back if we are not doing session-id reuse.
    252      */
    253     if (!s->in_handshake && (s->session == NULL)
    254         && (s->method != s->ctx->method)) {
    255         s->method->ssl_free(s);
    256         s->method = s->ctx->method;
    257         if (!s->method->ssl_new(s))
    258             return (0);
    259     } else
    260 #endif
    261         s->method->ssl_clear(s);
    262     return (1);
    263 }
    264 
    265 /** Used to change an SSL_CTXs default SSL method type */
    266 int SSL_CTX_set_ssl_version(SSL_CTX *ctx, const SSL_METHOD *meth)
    267 {
    268     STACK_OF(SSL_CIPHER) *sk;
    269 
    270     ctx->method = meth;
    271 
    272     sk = ssl_create_cipher_list(ctx->method, &(ctx->cipher_list),
    273                                 &(ctx->cipher_list_by_id),
    274                                 meth->version ==
    275                                 SSL2_VERSION ? "SSLv2" :
    276                                 SSL_DEFAULT_CIPHER_LIST);
    277     if ((sk == NULL) || (sk_SSL_CIPHER_num(sk) <= 0)) {
    278         SSLerr(SSL_F_SSL_CTX_SET_SSL_VERSION,
    279                SSL_R_SSL_LIBRARY_HAS_NO_CIPHERS);
    280         return (0);
    281     }
    282     return (1);
    283 }
    284 
    285 SSL *SSL_new(SSL_CTX *ctx)
    286 {
    287     SSL *s;
    288 
    289     if (ctx == NULL) {
    290         SSLerr(SSL_F_SSL_NEW, SSL_R_NULL_SSL_CTX);
    291         return (NULL);
    292     }
    293     if (ctx->method == NULL) {
    294         SSLerr(SSL_F_SSL_NEW, SSL_R_SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION);
    295         return (NULL);
    296     }
    297 
    298     s = (SSL *)OPENSSL_malloc(sizeof(SSL));
    299     if (s == NULL)
    300         goto err;
    301     memset(s, 0, sizeof(SSL));
    302 
    303 #ifndef OPENSSL_NO_KRB5
    304     s->kssl_ctx = kssl_ctx_new();
    305 #endif                          /* OPENSSL_NO_KRB5 */
    306 
    307     s->options = ctx->options;
    308     s->mode = ctx->mode;
    309     s->max_cert_list = ctx->max_cert_list;
    310     s->references = 1;
    311 
    312     if (ctx->cert != NULL) {
    313         /*
    314          * Earlier library versions used to copy the pointer to the CERT, not
    315          * its contents; only when setting new parameters for the per-SSL
    316          * copy, ssl_cert_new would be called (and the direct reference to
    317          * the per-SSL_CTX settings would be lost, but those still were
    318          * indirectly accessed for various purposes, and for that reason they
    319          * used to be known as s->ctx->default_cert). Now we don't look at the
    320          * SSL_CTX's CERT after having duplicated it once.
    321          */
    322 
    323         s->cert = ssl_cert_dup(ctx->cert);
    324         if (s->cert == NULL)
    325             goto err;
    326     } else
    327         s->cert = NULL;         /* Cannot really happen (see SSL_CTX_new) */
    328 
    329     s->read_ahead = ctx->read_ahead;
    330     s->msg_callback = ctx->msg_callback;
    331     s->msg_callback_arg = ctx->msg_callback_arg;
    332     s->verify_mode = ctx->verify_mode;
    333 #if 0
    334     s->verify_depth = ctx->verify_depth;
    335 #endif
    336     s->sid_ctx_length = ctx->sid_ctx_length;
    337     OPENSSL_assert(s->sid_ctx_length <= sizeof s->sid_ctx);
    338     memcpy(&s->sid_ctx, &ctx->sid_ctx, sizeof(s->sid_ctx));
    339     s->verify_callback = ctx->default_verify_callback;
    340     s->generate_session_id = ctx->generate_session_id;
    341 
    342     s->param = X509_VERIFY_PARAM_new();
    343     if (!s->param)
    344         goto err;
    345     X509_VERIFY_PARAM_inherit(s->param, ctx->param);
    346 #if 0
    347     s->purpose = ctx->purpose;
    348     s->trust = ctx->trust;
    349 #endif
    350     s->quiet_shutdown = ctx->quiet_shutdown;
    351     s->max_send_fragment = ctx->max_send_fragment;
    352 
    353     CRYPTO_add(&ctx->references, 1, CRYPTO_LOCK_SSL_CTX);
    354     s->ctx = ctx;
    355 #ifndef OPENSSL_NO_TLSEXT
    356     s->tlsext_debug_cb = 0;
    357     s->tlsext_debug_arg = NULL;
    358     s->tlsext_ticket_expected = 0;
    359     s->tlsext_status_type = -1;
    360     s->tlsext_status_expected = 0;
    361     s->tlsext_ocsp_ids = NULL;
    362     s->tlsext_ocsp_exts = NULL;
    363     s->tlsext_ocsp_resp = NULL;
    364     s->tlsext_ocsp_resplen = -1;
    365     CRYPTO_add(&ctx->references, 1, CRYPTO_LOCK_SSL_CTX);
    366     s->initial_ctx = ctx;
    367 # ifndef OPENSSL_NO_NEXTPROTONEG
    368     s->next_proto_negotiated = NULL;
    369 # endif
    370 #endif
    371 
    372     s->verify_result = X509_V_OK;
    373 
    374     s->method = ctx->method;
    375 
    376     if (!s->method->ssl_new(s))
    377         goto err;
    378 
    379     s->server = (ctx->method->ssl_accept == ssl_undefined_function) ? 0 : 1;
    380 
    381     SSL_clear(s);
    382 
    383     CRYPTO_new_ex_data(CRYPTO_EX_INDEX_SSL, s, &s->ex_data);
    384 
    385 #ifndef OPENSSL_NO_PSK
    386     s->psk_client_callback = ctx->psk_client_callback;
    387     s->psk_server_callback = ctx->psk_server_callback;
    388 #endif
    389 
    390     return (s);
    391  err:
    392     if (s != NULL)
    393         SSL_free(s);
    394     SSLerr(SSL_F_SSL_NEW, ERR_R_MALLOC_FAILURE);
    395     return (NULL);
    396 }
    397 
    398 int SSL_CTX_set_session_id_context(SSL_CTX *ctx, const unsigned char *sid_ctx,
    399                                    unsigned int sid_ctx_len)
    400 {
    401     if (sid_ctx_len > sizeof ctx->sid_ctx) {
    402         SSLerr(SSL_F_SSL_CTX_SET_SESSION_ID_CONTEXT,
    403                SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG);
    404         return 0;
    405     }
    406     ctx->sid_ctx_length = sid_ctx_len;
    407     memcpy(ctx->sid_ctx, sid_ctx, sid_ctx_len);
    408 
    409     return 1;
    410 }
    411 
    412 int SSL_set_session_id_context(SSL *ssl, const unsigned char *sid_ctx,
    413                                unsigned int sid_ctx_len)
    414 {
    415     if (sid_ctx_len > SSL_MAX_SID_CTX_LENGTH) {
    416         SSLerr(SSL_F_SSL_SET_SESSION_ID_CONTEXT,
    417                SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG);
    418         return 0;
    419     }
    420     ssl->sid_ctx_length = sid_ctx_len;
    421     memcpy(ssl->sid_ctx, sid_ctx, sid_ctx_len);
    422 
    423     return 1;
    424 }
    425 
    426 int SSL_CTX_set_generate_session_id(SSL_CTX *ctx, GEN_SESSION_CB cb)
    427 {
    428     CRYPTO_w_lock(CRYPTO_LOCK_SSL_CTX);
    429     ctx->generate_session_id = cb;
    430     CRYPTO_w_unlock(CRYPTO_LOCK_SSL_CTX);
    431     return 1;
    432 }
    433 
    434 int SSL_set_generate_session_id(SSL *ssl, GEN_SESSION_CB cb)
    435 {
    436     CRYPTO_w_lock(CRYPTO_LOCK_SSL);
    437     ssl->generate_session_id = cb;
    438     CRYPTO_w_unlock(CRYPTO_LOCK_SSL);
    439     return 1;
    440 }
    441 
    442 int SSL_has_matching_session_id(const SSL *ssl, const unsigned char *id,
    443                                 unsigned int id_len)
    444 {
    445     /*
    446      * A quick examination of SSL_SESSION_hash and SSL_SESSION_cmp shows how
    447      * we can "construct" a session to give us the desired check - ie. to
    448      * find if there's a session in the hash table that would conflict with
    449      * any new session built out of this id/id_len and the ssl_version in use
    450      * by this SSL.
    451      */
    452     SSL_SESSION r, *p;
    453 
    454     if (id_len > sizeof r.session_id)
    455         return 0;
    456 
    457     r.ssl_version = ssl->version;
    458     r.session_id_length = id_len;
    459     memcpy(r.session_id, id, id_len);
    460     /*
    461      * NB: SSLv2 always uses a fixed 16-byte session ID, so even if a
    462      * callback is calling us to check the uniqueness of a shorter ID, it
    463      * must be compared as a padded-out ID because that is what it will be
    464      * converted to when the callback has finished choosing it.
    465      */
    466     if ((r.ssl_version == SSL2_VERSION) &&
    467         (id_len < SSL2_SSL_SESSION_ID_LENGTH)) {
    468         memset(r.session_id + id_len, 0, SSL2_SSL_SESSION_ID_LENGTH - id_len);
    469         r.session_id_length = SSL2_SSL_SESSION_ID_LENGTH;
    470     }
    471 
    472     CRYPTO_r_lock(CRYPTO_LOCK_SSL_CTX);
    473     p = lh_SSL_SESSION_retrieve(ssl->ctx->sessions, &r);
    474     CRYPTO_r_unlock(CRYPTO_LOCK_SSL_CTX);
    475     return (p != NULL);
    476 }
    477 
    478 int SSL_CTX_set_purpose(SSL_CTX *s, int purpose)
    479 {
    480     return X509_VERIFY_PARAM_set_purpose(s->param, purpose);
    481 }
    482 
    483 int SSL_set_purpose(SSL *s, int purpose)
    484 {
    485     return X509_VERIFY_PARAM_set_purpose(s->param, purpose);
    486 }
    487 
    488 int SSL_CTX_set_trust(SSL_CTX *s, int trust)
    489 {
    490     return X509_VERIFY_PARAM_set_trust(s->param, trust);
    491 }
    492 
    493 int SSL_set_trust(SSL *s, int trust)
    494 {
    495     return X509_VERIFY_PARAM_set_trust(s->param, trust);
    496 }
    497 
    498 int SSL_CTX_set1_param(SSL_CTX *ctx, X509_VERIFY_PARAM *vpm)
    499 {
    500     return X509_VERIFY_PARAM_set1(ctx->param, vpm);
    501 }
    502 
    503 int SSL_set1_param(SSL *ssl, X509_VERIFY_PARAM *vpm)
    504 {
    505     return X509_VERIFY_PARAM_set1(ssl->param, vpm);
    506 }
    507 
    508 void SSL_free(SSL *s)
    509 {
    510     int i;
    511 
    512     if (s == NULL)
    513         return;
    514 
    515     i = CRYPTO_add(&s->references, -1, CRYPTO_LOCK_SSL);
    516 #ifdef REF_PRINT
    517     REF_PRINT("SSL", s);
    518 #endif
    519     if (i > 0)
    520         return;
    521 #ifdef REF_CHECK
    522     if (i < 0) {
    523         fprintf(stderr, "SSL_free, bad reference count\n");
    524         abort();                /* ok */
    525     }
    526 #endif
    527 
    528     if (s->param)
    529         X509_VERIFY_PARAM_free(s->param);
    530 
    531     CRYPTO_free_ex_data(CRYPTO_EX_INDEX_SSL, s, &s->ex_data);
    532 
    533     if (s->bbio != NULL) {
    534         /* If the buffering BIO is in place, pop it off */
    535         if (s->bbio == s->wbio) {
    536             s->wbio = BIO_pop(s->wbio);
    537         }
    538         BIO_free(s->bbio);
    539         s->bbio = NULL;
    540     }
    541     if (s->rbio != NULL)
    542         BIO_free_all(s->rbio);
    543     if ((s->wbio != NULL) && (s->wbio != s->rbio))
    544         BIO_free_all(s->wbio);
    545 
    546     if (s->init_buf != NULL)
    547         BUF_MEM_free(s->init_buf);
    548 
    549     /* add extra stuff */
    550     if (s->cipher_list != NULL)
    551         sk_SSL_CIPHER_free(s->cipher_list);
    552     if (s->cipher_list_by_id != NULL)
    553         sk_SSL_CIPHER_free(s->cipher_list_by_id);
    554 
    555     /* Make the next call work :-) */
    556     if (s->session != NULL) {
    557         ssl_clear_bad_session(s);
    558         SSL_SESSION_free(s->session);
    559     }
    560 
    561     ssl_clear_cipher_ctx(s);
    562     ssl_clear_hash_ctx(&s->read_hash);
    563     ssl_clear_hash_ctx(&s->write_hash);
    564 
    565     if (s->cert != NULL)
    566         ssl_cert_free(s->cert);
    567     /* Free up if allocated */
    568 
    569 #ifndef OPENSSL_NO_TLSEXT
    570     if (s->tlsext_hostname)
    571         OPENSSL_free(s->tlsext_hostname);
    572     if (s->initial_ctx)
    573         SSL_CTX_free(s->initial_ctx);
    574 # ifndef OPENSSL_NO_EC
    575     if (s->tlsext_ecpointformatlist)
    576         OPENSSL_free(s->tlsext_ecpointformatlist);
    577     if (s->tlsext_ellipticcurvelist)
    578         OPENSSL_free(s->tlsext_ellipticcurvelist);
    579 # endif                         /* OPENSSL_NO_EC */
    580     if (s->tlsext_opaque_prf_input)
    581         OPENSSL_free(s->tlsext_opaque_prf_input);
    582     if (s->tlsext_ocsp_exts)
    583         sk_X509_EXTENSION_pop_free(s->tlsext_ocsp_exts, X509_EXTENSION_free);
    584     if (s->tlsext_ocsp_ids)
    585         sk_OCSP_RESPID_pop_free(s->tlsext_ocsp_ids, OCSP_RESPID_free);
    586     if (s->tlsext_ocsp_resp)
    587         OPENSSL_free(s->tlsext_ocsp_resp);
    588 #endif
    589 
    590     if (s->client_CA != NULL)
    591         sk_X509_NAME_pop_free(s->client_CA, X509_NAME_free);
    592 
    593     if (s->method != NULL)
    594         s->method->ssl_free(s);
    595 
    596     if (s->ctx)
    597         SSL_CTX_free(s->ctx);
    598 
    599 #ifndef OPENSSL_NO_KRB5
    600     if (s->kssl_ctx != NULL)
    601         kssl_ctx_free(s->kssl_ctx);
    602 #endif                          /* OPENSSL_NO_KRB5 */
    603 
    604 #if !defined(OPENSSL_NO_TLSEXT) && !defined(OPENSSL_NO_NEXTPROTONEG)
    605     if (s->next_proto_negotiated)
    606         OPENSSL_free(s->next_proto_negotiated);
    607 #endif
    608 
    609 #ifndef OPENSSL_NO_SRTP
    610     if (s->srtp_profiles)
    611         sk_SRTP_PROTECTION_PROFILE_free(s->srtp_profiles);
    612 #endif
    613 
    614     OPENSSL_free(s);
    615 }
    616 
    617 void SSL_set_bio(SSL *s, BIO *rbio, BIO *wbio)
    618 {
    619     /*
    620      * If the output buffering BIO is still in place, remove it
    621      */
    622     if (s->bbio != NULL) {
    623         if (s->wbio == s->bbio) {
    624             s->wbio = s->wbio->next_bio;
    625             s->bbio->next_bio = NULL;
    626         }
    627     }
    628     if ((s->rbio != NULL) && (s->rbio != rbio))
    629         BIO_free_all(s->rbio);
    630     if ((s->wbio != NULL) && (s->wbio != wbio) && (s->rbio != s->wbio))
    631         BIO_free_all(s->wbio);
    632     s->rbio = rbio;
    633     s->wbio = wbio;
    634 }
    635 
    636 BIO *SSL_get_rbio(const SSL *s)
    637 {
    638     return (s->rbio);
    639 }
    640 
    641 BIO *SSL_get_wbio(const SSL *s)
    642 {
    643     return (s->wbio);
    644 }
    645 
    646 int SSL_get_fd(const SSL *s)
    647 {
    648     return (SSL_get_rfd(s));
    649 }
    650 
    651 int SSL_get_rfd(const SSL *s)
    652 {
    653     int ret = -1;
    654     BIO *b, *r;
    655 
    656     b = SSL_get_rbio(s);
    657     r = BIO_find_type(b, BIO_TYPE_DESCRIPTOR);
    658     if (r != NULL)
    659         BIO_get_fd(r, &ret);
    660     return (ret);
    661 }
    662 
    663 int SSL_get_wfd(const SSL *s)
    664 {
    665     int ret = -1;
    666     BIO *b, *r;
    667 
    668     b = SSL_get_wbio(s);
    669     r = BIO_find_type(b, BIO_TYPE_DESCRIPTOR);
    670     if (r != NULL)
    671         BIO_get_fd(r, &ret);
    672     return (ret);
    673 }
    674 
    675 #ifndef OPENSSL_NO_SOCK
    676 int SSL_set_fd(SSL *s, int fd)
    677 {
    678     int ret = 0;
    679     BIO *bio = NULL;
    680 
    681     bio = BIO_new(BIO_s_socket());
    682 
    683     if (bio == NULL) {
    684         SSLerr(SSL_F_SSL_SET_FD, ERR_R_BUF_LIB);
    685         goto err;
    686     }
    687     BIO_set_fd(bio, fd, BIO_NOCLOSE);
    688     SSL_set_bio(s, bio, bio);
    689     ret = 1;
    690  err:
    691     return (ret);
    692 }
    693 
    694 int SSL_set_wfd(SSL *s, int fd)
    695 {
    696     int ret = 0;
    697     BIO *bio = NULL;
    698 
    699     if ((s->rbio == NULL) || (BIO_method_type(s->rbio) != BIO_TYPE_SOCKET)
    700         || ((int)BIO_get_fd(s->rbio, NULL) != fd)) {
    701         bio = BIO_new(BIO_s_socket());
    702 
    703         if (bio == NULL) {
    704             SSLerr(SSL_F_SSL_SET_WFD, ERR_R_BUF_LIB);
    705             goto err;
    706         }
    707         BIO_set_fd(bio, fd, BIO_NOCLOSE);
    708         SSL_set_bio(s, SSL_get_rbio(s), bio);
    709     } else
    710         SSL_set_bio(s, SSL_get_rbio(s), SSL_get_rbio(s));
    711     ret = 1;
    712  err:
    713     return (ret);
    714 }
    715 
    716 int SSL_set_rfd(SSL *s, int fd)
    717 {
    718     int ret = 0;
    719     BIO *bio = NULL;
    720 
    721     if ((s->wbio == NULL) || (BIO_method_type(s->wbio) != BIO_TYPE_SOCKET)
    722         || ((int)BIO_get_fd(s->wbio, NULL) != fd)) {
    723         bio = BIO_new(BIO_s_socket());
    724 
    725         if (bio == NULL) {
    726             SSLerr(SSL_F_SSL_SET_RFD, ERR_R_BUF_LIB);
    727             goto err;
    728         }
    729         BIO_set_fd(bio, fd, BIO_NOCLOSE);
    730         SSL_set_bio(s, bio, SSL_get_wbio(s));
    731     } else
    732         SSL_set_bio(s, SSL_get_wbio(s), SSL_get_wbio(s));
    733     ret = 1;
    734  err:
    735     return (ret);
    736 }
    737 #endif
    738 
    739 /* return length of latest Finished message we sent, copy to 'buf' */
    740 size_t SSL_get_finished(const SSL *s, void *buf, size_t count)
    741 {
    742     size_t ret = 0;
    743 
    744     if (s->s3 != NULL) {
    745         ret = s->s3->tmp.finish_md_len;
    746         if (count > ret)
    747             count = ret;
    748         memcpy(buf, s->s3->tmp.finish_md, count);
    749     }
    750     return ret;
    751 }
    752 
    753 /* return length of latest Finished message we expected, copy to 'buf' */
    754 size_t SSL_get_peer_finished(const SSL *s, void *buf, size_t count)
    755 {
    756     size_t ret = 0;
    757 
    758     if (s->s3 != NULL) {
    759         ret = s->s3->tmp.peer_finish_md_len;
    760         if (count > ret)
    761             count = ret;
    762         memcpy(buf, s->s3->tmp.peer_finish_md, count);
    763     }
    764     return ret;
    765 }
    766 
    767 int SSL_get_verify_mode(const SSL *s)
    768 {
    769     return (s->verify_mode);
    770 }
    771 
    772 int SSL_get_verify_depth(const SSL *s)
    773 {
    774     return X509_VERIFY_PARAM_get_depth(s->param);
    775 }
    776 
    777 int (*SSL_get_verify_callback(const SSL *s)) (int, X509_STORE_CTX *) {
    778     return (s->verify_callback);
    779 }
    780 
    781 int SSL_CTX_get_verify_mode(const SSL_CTX *ctx)
    782 {
    783     return (ctx->verify_mode);
    784 }
    785 
    786 int SSL_CTX_get_verify_depth(const SSL_CTX *ctx)
    787 {
    788     return X509_VERIFY_PARAM_get_depth(ctx->param);
    789 }
    790 
    791 int (*SSL_CTX_get_verify_callback(const SSL_CTX *ctx)) (int, X509_STORE_CTX *) {
    792     return (ctx->default_verify_callback);
    793 }
    794 
    795 void SSL_set_verify(SSL *s, int mode,
    796                     int (*callback) (int ok, X509_STORE_CTX *ctx))
    797 {
    798     s->verify_mode = mode;
    799     if (callback != NULL)
    800         s->verify_callback = callback;
    801 }
    802 
    803 void SSL_set_verify_depth(SSL *s, int depth)
    804 {
    805     X509_VERIFY_PARAM_set_depth(s->param, depth);
    806 }
    807 
    808 void SSL_set_read_ahead(SSL *s, int yes)
    809 {
    810     s->read_ahead = yes;
    811 }
    812 
    813 int SSL_get_read_ahead(const SSL *s)
    814 {
    815     return (s->read_ahead);
    816 }
    817 
    818 int SSL_pending(const SSL *s)
    819 {
    820     /*
    821      * SSL_pending cannot work properly if read-ahead is enabled
    822      * (SSL_[CTX_]ctrl(..., SSL_CTRL_SET_READ_AHEAD, 1, NULL)), and it is
    823      * impossible to fix since SSL_pending cannot report errors that may be
    824      * observed while scanning the new data. (Note that SSL_pending() is
    825      * often used as a boolean value, so we'd better not return -1.)
    826      */
    827     return (s->method->ssl_pending(s));
    828 }
    829 
    830 X509 *SSL_get_peer_certificate(const SSL *s)
    831 {
    832     X509 *r;
    833 
    834     if ((s == NULL) || (s->session == NULL))
    835         r = NULL;
    836     else
    837         r = s->session->peer;
    838 
    839     if (r == NULL)
    840         return (r);
    841 
    842     CRYPTO_add(&r->references, 1, CRYPTO_LOCK_X509);
    843 
    844     return (r);
    845 }
    846 
    847 STACK_OF(X509) *SSL_get_peer_cert_chain(const SSL *s)
    848 {
    849     STACK_OF(X509) *r;
    850 
    851     if ((s == NULL) || (s->session == NULL)
    852         || (s->session->sess_cert == NULL))
    853         r = NULL;
    854     else
    855         r = s->session->sess_cert->cert_chain;
    856 
    857     /*
    858      * If we are a client, cert_chain includes the peer's own certificate; if
    859      * we are a server, it does not.
    860      */
    861 
    862     return (r);
    863 }
    864 
    865 /*
    866  * Now in theory, since the calling process own 't' it should be safe to
    867  * modify.  We need to be able to read f without being hassled
    868  */
    869 void SSL_copy_session_id(SSL *t, const SSL *f)
    870 {
    871     CERT *tmp;
    872 
    873     /* Do we need to to SSL locking? */
    874     SSL_set_session(t, SSL_get_session(f));
    875 
    876     /*
    877      * what if we are setup as SSLv2 but want to talk SSLv3 or vice-versa
    878      */
    879     if (t->method != f->method) {
    880         t->method->ssl_free(t); /* cleanup current */
    881         t->method = f->method;  /* change method */
    882         t->method->ssl_new(t);  /* setup new */
    883     }
    884 
    885     tmp = t->cert;
    886     if (f->cert != NULL) {
    887         CRYPTO_add(&f->cert->references, 1, CRYPTO_LOCK_SSL_CERT);
    888         t->cert = f->cert;
    889     } else
    890         t->cert = NULL;
    891     if (tmp != NULL)
    892         ssl_cert_free(tmp);
    893     SSL_set_session_id_context(t, f->sid_ctx, f->sid_ctx_length);
    894 }
    895 
    896 /* Fix this so it checks all the valid key/cert options */
    897 int SSL_CTX_check_private_key(const SSL_CTX *ctx)
    898 {
    899     if ((ctx == NULL) ||
    900         (ctx->cert == NULL) || (ctx->cert->key->x509 == NULL)) {
    901         SSLerr(SSL_F_SSL_CTX_CHECK_PRIVATE_KEY,
    902                SSL_R_NO_CERTIFICATE_ASSIGNED);
    903         return (0);
    904     }
    905     if (ctx->cert->key->privatekey == NULL) {
    906         SSLerr(SSL_F_SSL_CTX_CHECK_PRIVATE_KEY,
    907                SSL_R_NO_PRIVATE_KEY_ASSIGNED);
    908         return (0);
    909     }
    910     return (X509_check_private_key
    911             (ctx->cert->key->x509, ctx->cert->key->privatekey));
    912 }
    913 
    914 /* Fix this function so that it takes an optional type parameter */
    915 int SSL_check_private_key(const SSL *ssl)
    916 {
    917     if (ssl == NULL) {
    918         SSLerr(SSL_F_SSL_CHECK_PRIVATE_KEY, ERR_R_PASSED_NULL_PARAMETER);
    919         return (0);
    920     }
    921     if (ssl->cert == NULL) {
    922         SSLerr(SSL_F_SSL_CHECK_PRIVATE_KEY, SSL_R_NO_CERTIFICATE_ASSIGNED);
    923         return 0;
    924     }
    925     if (ssl->cert->key->x509 == NULL) {
    926         SSLerr(SSL_F_SSL_CHECK_PRIVATE_KEY, SSL_R_NO_CERTIFICATE_ASSIGNED);
    927         return (0);
    928     }
    929     if (ssl->cert->key->privatekey == NULL) {
    930         SSLerr(SSL_F_SSL_CHECK_PRIVATE_KEY, SSL_R_NO_PRIVATE_KEY_ASSIGNED);
    931         return (0);
    932     }
    933     return (X509_check_private_key(ssl->cert->key->x509,
    934                                    ssl->cert->key->privatekey));
    935 }
    936 
    937 int SSL_accept(SSL *s)
    938 {
    939     if (s->handshake_func == 0)
    940         /* Not properly initialized yet */
    941         SSL_set_accept_state(s);
    942 
    943     return (s->method->ssl_accept(s));
    944 }
    945 
    946 int SSL_connect(SSL *s)
    947 {
    948     if (s->handshake_func == 0)
    949         /* Not properly initialized yet */
    950         SSL_set_connect_state(s);
    951 
    952     return (s->method->ssl_connect(s));
    953 }
    954 
    955 long SSL_get_default_timeout(const SSL *s)
    956 {
    957     return (s->method->get_timeout());
    958 }
    959 
    960 int SSL_read(SSL *s, void *buf, int num)
    961 {
    962     if (s->handshake_func == 0) {
    963         SSLerr(SSL_F_SSL_READ, SSL_R_UNINITIALIZED);
    964         return -1;
    965     }
    966 
    967     if (s->shutdown & SSL_RECEIVED_SHUTDOWN) {
    968         s->rwstate = SSL_NOTHING;
    969         return (0);
    970     }
    971     return (s->method->ssl_read(s, buf, num));
    972 }
    973 
    974 int SSL_peek(SSL *s, void *buf, int num)
    975 {
    976     if (s->handshake_func == 0) {
    977         SSLerr(SSL_F_SSL_PEEK, SSL_R_UNINITIALIZED);
    978         return -1;
    979     }
    980 
    981     if (s->shutdown & SSL_RECEIVED_SHUTDOWN) {
    982         return (0);
    983     }
    984     return (s->method->ssl_peek(s, buf, num));
    985 }
    986 
    987 int SSL_write(SSL *s, const void *buf, int num)
    988 {
    989     if (s->handshake_func == 0) {
    990         SSLerr(SSL_F_SSL_WRITE, SSL_R_UNINITIALIZED);
    991         return -1;
    992     }
    993 
    994     if (s->shutdown & SSL_SENT_SHUTDOWN) {
    995         s->rwstate = SSL_NOTHING;
    996         SSLerr(SSL_F_SSL_WRITE, SSL_R_PROTOCOL_IS_SHUTDOWN);
    997         return (-1);
    998     }
    999     return (s->method->ssl_write(s, buf, num));
   1000 }
   1001 
   1002 int SSL_shutdown(SSL *s)
   1003 {
   1004     /*
   1005      * Note that this function behaves differently from what one might
   1006      * expect.  Return values are 0 for no success (yet), 1 for success; but
   1007      * calling it once is usually not enough, even if blocking I/O is used
   1008      * (see ssl3_shutdown).
   1009      */
   1010 
   1011     if (s->handshake_func == 0) {
   1012         SSLerr(SSL_F_SSL_SHUTDOWN, SSL_R_UNINITIALIZED);
   1013         return -1;
   1014     }
   1015 
   1016     if ((s != NULL) && !SSL_in_init(s))
   1017         return (s->method->ssl_shutdown(s));
   1018     else
   1019         return (1);
   1020 }
   1021 
   1022 int SSL_renegotiate(SSL *s)
   1023 {
   1024     if (s->renegotiate == 0)
   1025         s->renegotiate = 1;
   1026 
   1027     s->new_session = 1;
   1028 
   1029     return (s->method->ssl_renegotiate(s));
   1030 }
   1031 
   1032 int SSL_renegotiate_abbreviated(SSL *s)
   1033 {
   1034     if (s->renegotiate == 0)
   1035         s->renegotiate = 1;
   1036 
   1037     s->new_session = 0;
   1038 
   1039     return (s->method->ssl_renegotiate(s));
   1040 }
   1041 
   1042 int SSL_renegotiate_pending(SSL *s)
   1043 {
   1044     /*
   1045      * becomes true when negotiation is requested; false again once a
   1046      * handshake has finished
   1047      */
   1048     return (s->renegotiate != 0);
   1049 }
   1050 
   1051 long SSL_ctrl(SSL *s, int cmd, long larg, void *parg)
   1052 {
   1053     long l;
   1054 
   1055     switch (cmd) {
   1056     case SSL_CTRL_GET_READ_AHEAD:
   1057         return (s->read_ahead);
   1058     case SSL_CTRL_SET_READ_AHEAD:
   1059         l = s->read_ahead;
   1060         s->read_ahead = larg;
   1061         return (l);
   1062 
   1063     case SSL_CTRL_SET_MSG_CALLBACK_ARG:
   1064         s->msg_callback_arg = parg;
   1065         return 1;
   1066 
   1067     case SSL_CTRL_OPTIONS:
   1068         return (s->options |= larg);
   1069     case SSL_CTRL_CLEAR_OPTIONS:
   1070         return (s->options &= ~larg);
   1071     case SSL_CTRL_MODE:
   1072         return (s->mode |= larg);
   1073     case SSL_CTRL_CLEAR_MODE:
   1074         return (s->mode &= ~larg);
   1075     case SSL_CTRL_GET_MAX_CERT_LIST:
   1076         return (s->max_cert_list);
   1077     case SSL_CTRL_SET_MAX_CERT_LIST:
   1078         l = s->max_cert_list;
   1079         s->max_cert_list = larg;
   1080         return (l);
   1081     case SSL_CTRL_SET_MAX_SEND_FRAGMENT:
   1082         if (larg < 512 || larg > SSL3_RT_MAX_PLAIN_LENGTH)
   1083             return 0;
   1084         s->max_send_fragment = larg;
   1085         return 1;
   1086     case SSL_CTRL_GET_RI_SUPPORT:
   1087         if (s->s3)
   1088             return s->s3->send_connection_binding;
   1089         else
   1090             return 0;
   1091     default:
   1092         return (s->method->ssl_ctrl(s, cmd, larg, parg));
   1093     }
   1094 }
   1095 
   1096 long SSL_callback_ctrl(SSL *s, int cmd, void (*fp) (void))
   1097 {
   1098     switch (cmd) {
   1099     case SSL_CTRL_SET_MSG_CALLBACK:
   1100         s->msg_callback = (void (*)
   1101                            (int write_p, int version, int content_type,
   1102                             const void *buf, size_t len, SSL *ssl,
   1103                             void *arg))(fp);
   1104         return 1;
   1105 
   1106     default:
   1107         return (s->method->ssl_callback_ctrl(s, cmd, fp));
   1108     }
   1109 }
   1110 
   1111 LHASH_OF(SSL_SESSION) *SSL_CTX_sessions(SSL_CTX *ctx)
   1112 {
   1113     return ctx->sessions;
   1114 }
   1115 
   1116 long SSL_CTX_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg)
   1117 {
   1118     long l;
   1119 
   1120     switch (cmd) {
   1121     case SSL_CTRL_GET_READ_AHEAD:
   1122         return (ctx->read_ahead);
   1123     case SSL_CTRL_SET_READ_AHEAD:
   1124         l = ctx->read_ahead;
   1125         ctx->read_ahead = larg;
   1126         return (l);
   1127 
   1128     case SSL_CTRL_SET_MSG_CALLBACK_ARG:
   1129         ctx->msg_callback_arg = parg;
   1130         return 1;
   1131 
   1132     case SSL_CTRL_GET_MAX_CERT_LIST:
   1133         return (ctx->max_cert_list);
   1134     case SSL_CTRL_SET_MAX_CERT_LIST:
   1135         l = ctx->max_cert_list;
   1136         ctx->max_cert_list = larg;
   1137         return (l);
   1138 
   1139     case SSL_CTRL_SET_SESS_CACHE_SIZE:
   1140         l = ctx->session_cache_size;
   1141         ctx->session_cache_size = larg;
   1142         return (l);
   1143     case SSL_CTRL_GET_SESS_CACHE_SIZE:
   1144         return (ctx->session_cache_size);
   1145     case SSL_CTRL_SET_SESS_CACHE_MODE:
   1146         l = ctx->session_cache_mode;
   1147         ctx->session_cache_mode = larg;
   1148         return (l);
   1149     case SSL_CTRL_GET_SESS_CACHE_MODE:
   1150         return (ctx->session_cache_mode);
   1151 
   1152     case SSL_CTRL_SESS_NUMBER:
   1153         return (lh_SSL_SESSION_num_items(ctx->sessions));
   1154     case SSL_CTRL_SESS_CONNECT:
   1155         return (ctx->stats.sess_connect);
   1156     case SSL_CTRL_SESS_CONNECT_GOOD:
   1157         return (ctx->stats.sess_connect_good);
   1158     case SSL_CTRL_SESS_CONNECT_RENEGOTIATE:
   1159         return (ctx->stats.sess_connect_renegotiate);
   1160     case SSL_CTRL_SESS_ACCEPT:
   1161         return (ctx->stats.sess_accept);
   1162     case SSL_CTRL_SESS_ACCEPT_GOOD:
   1163         return (ctx->stats.sess_accept_good);
   1164     case SSL_CTRL_SESS_ACCEPT_RENEGOTIATE:
   1165         return (ctx->stats.sess_accept_renegotiate);
   1166     case SSL_CTRL_SESS_HIT:
   1167         return (ctx->stats.sess_hit);
   1168     case SSL_CTRL_SESS_CB_HIT:
   1169         return (ctx->stats.sess_cb_hit);
   1170     case SSL_CTRL_SESS_MISSES:
   1171         return (ctx->stats.sess_miss);
   1172     case SSL_CTRL_SESS_TIMEOUTS:
   1173         return (ctx->stats.sess_timeout);
   1174     case SSL_CTRL_SESS_CACHE_FULL:
   1175         return (ctx->stats.sess_cache_full);
   1176     case SSL_CTRL_OPTIONS:
   1177         return (ctx->options |= larg);
   1178     case SSL_CTRL_CLEAR_OPTIONS:
   1179         return (ctx->options &= ~larg);
   1180     case SSL_CTRL_MODE:
   1181         return (ctx->mode |= larg);
   1182     case SSL_CTRL_CLEAR_MODE:
   1183         return (ctx->mode &= ~larg);
   1184     case SSL_CTRL_SET_MAX_SEND_FRAGMENT:
   1185         if (larg < 512 || larg > SSL3_RT_MAX_PLAIN_LENGTH)
   1186             return 0;
   1187         ctx->max_send_fragment = larg;
   1188         return 1;
   1189     default:
   1190         return (ctx->method->ssl_ctx_ctrl(ctx, cmd, larg, parg));
   1191     }
   1192 }
   1193 
   1194 long SSL_CTX_callback_ctrl(SSL_CTX *ctx, int cmd, void (*fp) (void))
   1195 {
   1196     switch (cmd) {
   1197     case SSL_CTRL_SET_MSG_CALLBACK:
   1198         ctx->msg_callback = (void (*)
   1199                              (int write_p, int version, int content_type,
   1200                               const void *buf, size_t len, SSL *ssl,
   1201                               void *arg))(fp);
   1202         return 1;
   1203 
   1204     default:
   1205         return (ctx->method->ssl_ctx_callback_ctrl(ctx, cmd, fp));
   1206     }
   1207 }
   1208 
   1209 int ssl_cipher_id_cmp(const SSL_CIPHER *a, const SSL_CIPHER *b)
   1210 {
   1211     long l;
   1212 
   1213     l = a->id - b->id;
   1214     if (l == 0L)
   1215         return (0);
   1216     else
   1217         return ((l > 0) ? 1 : -1);
   1218 }
   1219 
   1220 int ssl_cipher_ptr_id_cmp(const SSL_CIPHER *const *ap,
   1221                           const SSL_CIPHER *const *bp)
   1222 {
   1223     long l;
   1224 
   1225     l = (*ap)->id - (*bp)->id;
   1226     if (l == 0L)
   1227         return (0);
   1228     else
   1229         return ((l > 0) ? 1 : -1);
   1230 }
   1231 
   1232 /** return a STACK of the ciphers available for the SSL and in order of
   1233  * preference */
   1234 STACK_OF(SSL_CIPHER) *SSL_get_ciphers(const SSL *s)
   1235 {
   1236     if (s != NULL) {
   1237         if (s->cipher_list != NULL) {
   1238             return (s->cipher_list);
   1239         } else if ((s->ctx != NULL) && (s->ctx->cipher_list != NULL)) {
   1240             return (s->ctx->cipher_list);
   1241         }
   1242     }
   1243     return (NULL);
   1244 }
   1245 
   1246 /** return a STACK of the ciphers available for the SSL and in order of
   1247  * algorithm id */
   1248 STACK_OF(SSL_CIPHER) *ssl_get_ciphers_by_id(SSL *s)
   1249 {
   1250     if (s != NULL) {
   1251         if (s->cipher_list_by_id != NULL) {
   1252             return (s->cipher_list_by_id);
   1253         } else if ((s->ctx != NULL) && (s->ctx->cipher_list_by_id != NULL)) {
   1254             return (s->ctx->cipher_list_by_id);
   1255         }
   1256     }
   1257     return (NULL);
   1258 }
   1259 
   1260 /** The old interface to get the same thing as SSL_get_ciphers() */
   1261 const char *SSL_get_cipher_list(const SSL *s, int n)
   1262 {
   1263     SSL_CIPHER *c;
   1264     STACK_OF(SSL_CIPHER) *sk;
   1265 
   1266     if (s == NULL)
   1267         return (NULL);
   1268     sk = SSL_get_ciphers(s);
   1269     if ((sk == NULL) || (sk_SSL_CIPHER_num(sk) <= n))
   1270         return (NULL);
   1271     c = sk_SSL_CIPHER_value(sk, n);
   1272     if (c == NULL)
   1273         return (NULL);
   1274     return (c->name);
   1275 }
   1276 
   1277 /** specify the ciphers to be used by default by the SSL_CTX */
   1278 int SSL_CTX_set_cipher_list(SSL_CTX *ctx, const char *str)
   1279 {
   1280     STACK_OF(SSL_CIPHER) *sk;
   1281 
   1282     sk = ssl_create_cipher_list(ctx->method, &ctx->cipher_list,
   1283                                 &ctx->cipher_list_by_id, str);
   1284     /*
   1285      * ssl_create_cipher_list may return an empty stack if it was unable to
   1286      * find a cipher matching the given rule string (for example if the rule
   1287      * string specifies a cipher which has been disabled). This is not an
   1288      * error as far as ssl_create_cipher_list is concerned, and hence
   1289      * ctx->cipher_list and ctx->cipher_list_by_id has been updated.
   1290      */
   1291     if (sk == NULL)
   1292         return 0;
   1293     else if (sk_SSL_CIPHER_num(sk) == 0) {
   1294         SSLerr(SSL_F_SSL_CTX_SET_CIPHER_LIST, SSL_R_NO_CIPHER_MATCH);
   1295         return 0;
   1296     }
   1297     return 1;
   1298 }
   1299 
   1300 /** specify the ciphers to be used by the SSL */
   1301 int SSL_set_cipher_list(SSL *s, const char *str)
   1302 {
   1303     STACK_OF(SSL_CIPHER) *sk;
   1304 
   1305     sk = ssl_create_cipher_list(s->ctx->method, &s->cipher_list,
   1306                                 &s->cipher_list_by_id, str);
   1307     /* see comment in SSL_CTX_set_cipher_list */
   1308     if (sk == NULL)
   1309         return 0;
   1310     else if (sk_SSL_CIPHER_num(sk) == 0) {
   1311         SSLerr(SSL_F_SSL_SET_CIPHER_LIST, SSL_R_NO_CIPHER_MATCH);
   1312         return 0;
   1313     }
   1314     return 1;
   1315 }
   1316 
   1317 /* works well for SSLv2, not so good for SSLv3 */
   1318 char *SSL_get_shared_ciphers(const SSL *s, char *buf, int len)
   1319 {
   1320     char *p;
   1321     STACK_OF(SSL_CIPHER) *sk;
   1322     SSL_CIPHER *c;
   1323     int i;
   1324 
   1325     if ((s->session == NULL) || (s->session->ciphers == NULL) || (len < 2))
   1326         return (NULL);
   1327 
   1328     p = buf;
   1329     sk = s->session->ciphers;
   1330 
   1331     if (sk_SSL_CIPHER_num(sk) == 0)
   1332         return NULL;
   1333 
   1334     for (i = 0; i < sk_SSL_CIPHER_num(sk); i++) {
   1335         int n;
   1336 
   1337         c = sk_SSL_CIPHER_value(sk, i);
   1338         n = strlen(c->name);
   1339         if (n + 1 > len) {
   1340             if (p != buf)
   1341                 --p;
   1342             *p = '\0';
   1343             return buf;
   1344         }
   1345         strcpy(p, c->name);
   1346         p += n;
   1347         *(p++) = ':';
   1348         len -= n + 1;
   1349     }
   1350     p[-1] = '\0';
   1351     return (buf);
   1352 }
   1353 
   1354 int ssl_cipher_list_to_bytes(SSL *s, STACK_OF(SSL_CIPHER) *sk,
   1355                              unsigned char *p,
   1356                              int (*put_cb) (const SSL_CIPHER *,
   1357                                             unsigned char *))
   1358 {
   1359     int i, j = 0;
   1360     SSL_CIPHER *c;
   1361     unsigned char *q;
   1362 #ifndef OPENSSL_NO_KRB5
   1363     int nokrb5 = !kssl_tgt_is_available(s->kssl_ctx);
   1364 #endif                          /* OPENSSL_NO_KRB5 */
   1365 
   1366     if (sk == NULL)
   1367         return (0);
   1368     q = p;
   1369     if (put_cb == NULL)
   1370         put_cb = s->method->put_cipher_by_char;
   1371 
   1372     for (i = 0; i < sk_SSL_CIPHER_num(sk); i++) {
   1373         c = sk_SSL_CIPHER_value(sk, i);
   1374         /* Skip TLS v1.2 only ciphersuites if lower than v1.2 */
   1375         if ((c->algorithm_ssl & SSL_TLSV1_2) &&
   1376             (TLS1_get_client_version(s) < TLS1_2_VERSION))
   1377             continue;
   1378 #ifndef OPENSSL_NO_KRB5
   1379         if (((c->algorithm_mkey & SSL_kKRB5)
   1380              || (c->algorithm_auth & SSL_aKRB5)) && nokrb5)
   1381             continue;
   1382 #endif                          /* OPENSSL_NO_KRB5 */
   1383 #ifndef OPENSSL_NO_PSK
   1384         /* with PSK there must be client callback set */
   1385         if (((c->algorithm_mkey & SSL_kPSK) || (c->algorithm_auth & SSL_aPSK))
   1386             && s->psk_client_callback == NULL)
   1387             continue;
   1388 #endif                          /* OPENSSL_NO_PSK */
   1389 #ifndef OPENSSL_NO_SRP
   1390         if (((c->algorithm_mkey & SSL_kSRP) || (c->algorithm_auth & SSL_aSRP))
   1391             && !(s->srp_ctx.srp_Mask & SSL_kSRP))
   1392             continue;
   1393 #endif                          /* OPENSSL_NO_SRP */
   1394         j = put_cb(c, p);
   1395         p += j;
   1396     }
   1397     /*
   1398      * If p == q, no ciphers; caller indicates an error. Otherwise, add
   1399      * applicable SCSVs.
   1400      */
   1401     if (p != q) {
   1402         if (!s->renegotiate) {
   1403             static SSL_CIPHER scsv = {
   1404                 0, NULL, SSL3_CK_SCSV, 0, 0, 0, 0, 0, 0, 0, 0, 0
   1405             };
   1406             j = put_cb(&scsv, p);
   1407             p += j;
   1408 #ifdef OPENSSL_RI_DEBUG
   1409             fprintf(stderr,
   1410                     "TLS_EMPTY_RENEGOTIATION_INFO_SCSV sent by client\n");
   1411 #endif
   1412         }
   1413 
   1414         if (s->mode & SSL_MODE_SEND_FALLBACK_SCSV) {
   1415             static SSL_CIPHER scsv = {
   1416                 0, NULL, SSL3_CK_FALLBACK_SCSV, 0, 0, 0, 0, 0, 0, 0, 0, 0
   1417             };
   1418             j = put_cb(&scsv, p);
   1419             p += j;
   1420         }
   1421     }
   1422 
   1423     return (p - q);
   1424 }
   1425 
   1426 STACK_OF(SSL_CIPHER) *ssl_bytes_to_cipher_list(SSL *s, unsigned char *p,
   1427                                                int num,
   1428                                                STACK_OF(SSL_CIPHER) **skp)
   1429 {
   1430     const SSL_CIPHER *c;
   1431     STACK_OF(SSL_CIPHER) *sk;
   1432     int i, n;
   1433 
   1434     if (s->s3)
   1435         s->s3->send_connection_binding = 0;
   1436 
   1437     n = ssl_put_cipher_by_char(s, NULL, NULL);
   1438     if (n == 0 || (num % n) != 0) {
   1439         SSLerr(SSL_F_SSL_BYTES_TO_CIPHER_LIST,
   1440                SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST);
   1441         return (NULL);
   1442     }
   1443     if ((skp == NULL) || (*skp == NULL)) {
   1444         sk = sk_SSL_CIPHER_new_null(); /* change perhaps later */
   1445         if(sk == NULL) {
   1446             SSLerr(SSL_F_SSL_BYTES_TO_CIPHER_LIST, ERR_R_MALLOC_FAILURE);
   1447             return NULL;
   1448         }
   1449     } else {
   1450         sk = *skp;
   1451         sk_SSL_CIPHER_zero(sk);
   1452     }
   1453 
   1454     for (i = 0; i < num; i += n) {
   1455         /* Check for TLS_EMPTY_RENEGOTIATION_INFO_SCSV */
   1456         if (s->s3 && (n != 3 || !p[0]) &&
   1457             (p[n - 2] == ((SSL3_CK_SCSV >> 8) & 0xff)) &&
   1458             (p[n - 1] == (SSL3_CK_SCSV & 0xff))) {
   1459             /* SCSV fatal if renegotiating */
   1460             if (s->renegotiate) {
   1461                 SSLerr(SSL_F_SSL_BYTES_TO_CIPHER_LIST,
   1462                        SSL_R_SCSV_RECEIVED_WHEN_RENEGOTIATING);
   1463                 ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_HANDSHAKE_FAILURE);
   1464                 goto err;
   1465             }
   1466             s->s3->send_connection_binding = 1;
   1467             p += n;
   1468 #ifdef OPENSSL_RI_DEBUG
   1469             fprintf(stderr, "SCSV received by server\n");
   1470 #endif
   1471             continue;
   1472         }
   1473 
   1474         /* Check for TLS_FALLBACK_SCSV */
   1475         if ((n != 3 || !p[0]) &&
   1476             (p[n - 2] == ((SSL3_CK_FALLBACK_SCSV >> 8) & 0xff)) &&
   1477             (p[n - 1] == (SSL3_CK_FALLBACK_SCSV & 0xff))) {
   1478             /*
   1479              * The SCSV indicates that the client previously tried a higher
   1480              * version. Fail if the current version is an unexpected
   1481              * downgrade.
   1482              */
   1483             if (!SSL_ctrl(s, SSL_CTRL_CHECK_PROTO_VERSION, 0, NULL)) {
   1484                 SSLerr(SSL_F_SSL_BYTES_TO_CIPHER_LIST,
   1485                        SSL_R_INAPPROPRIATE_FALLBACK);
   1486                 if (s->s3)
   1487                     ssl3_send_alert(s, SSL3_AL_FATAL,
   1488                                     SSL_AD_INAPPROPRIATE_FALLBACK);
   1489                 goto err;
   1490             }
   1491             p += n;
   1492             continue;
   1493         }
   1494 
   1495         c = ssl_get_cipher_by_char(s, p);
   1496         p += n;
   1497         if (c != NULL) {
   1498             if (!sk_SSL_CIPHER_push(sk, c)) {
   1499                 SSLerr(SSL_F_SSL_BYTES_TO_CIPHER_LIST, ERR_R_MALLOC_FAILURE);
   1500                 goto err;
   1501             }
   1502         }
   1503     }
   1504 
   1505     if (skp != NULL)
   1506         *skp = sk;
   1507     return (sk);
   1508  err:
   1509     if ((skp == NULL) || (*skp == NULL))
   1510         sk_SSL_CIPHER_free(sk);
   1511     return (NULL);
   1512 }
   1513 
   1514 #ifndef OPENSSL_NO_TLSEXT
   1515 /** return a servername extension value if provided in Client Hello, or NULL.
   1516  * So far, only host_name types are defined (RFC 3546).
   1517  */
   1518 
   1519 const char *SSL_get_servername(const SSL *s, const int type)
   1520 {
   1521     if (type != TLSEXT_NAMETYPE_host_name)
   1522         return NULL;
   1523 
   1524     return s->session && !s->tlsext_hostname ?
   1525         s->session->tlsext_hostname : s->tlsext_hostname;
   1526 }
   1527 
   1528 int SSL_get_servername_type(const SSL *s)
   1529 {
   1530     if (s->session
   1531         && (!s->tlsext_hostname ? s->session->
   1532             tlsext_hostname : s->tlsext_hostname))
   1533         return TLSEXT_NAMETYPE_host_name;
   1534     return -1;
   1535 }
   1536 
   1537 # ifndef OPENSSL_NO_NEXTPROTONEG
   1538 /*
   1539  * SSL_select_next_proto implements the standard protocol selection. It is
   1540  * expected that this function is called from the callback set by
   1541  * SSL_CTX_set_next_proto_select_cb. The protocol data is assumed to be a
   1542  * vector of 8-bit, length prefixed byte strings. The length byte itself is
   1543  * not included in the length. A byte string of length 0 is invalid. No byte
   1544  * string may be truncated. The current, but experimental algorithm for
   1545  * selecting the protocol is: 1) If the server doesn't support NPN then this
   1546  * is indicated to the callback. In this case, the client application has to
   1547  * abort the connection or have a default application level protocol. 2) If
   1548  * the server supports NPN, but advertises an empty list then the client
   1549  * selects the first protcol in its list, but indicates via the API that this
   1550  * fallback case was enacted. 3) Otherwise, the client finds the first
   1551  * protocol in the server's list that it supports and selects this protocol.
   1552  * This is because it's assumed that the server has better information about
   1553  * which protocol a client should use. 4) If the client doesn't support any
   1554  * of the server's advertised protocols, then this is treated the same as
   1555  * case 2. It returns either OPENSSL_NPN_NEGOTIATED if a common protocol was
   1556  * found, or OPENSSL_NPN_NO_OVERLAP if the fallback case was reached.
   1557  */
   1558 int SSL_select_next_proto(unsigned char **out, unsigned char *outlen,
   1559                           const unsigned char *server,
   1560                           unsigned int server_len,
   1561                           const unsigned char *client,
   1562                           unsigned int client_len)
   1563 {
   1564     unsigned int i, j;
   1565     const unsigned char *result;
   1566     int status = OPENSSL_NPN_UNSUPPORTED;
   1567 
   1568     /*
   1569      * For each protocol in server preference order, see if we support it.
   1570      */
   1571     for (i = 0; i < server_len;) {
   1572         for (j = 0; j < client_len;) {
   1573             if (server[i] == client[j] &&
   1574                 memcmp(&server[i + 1], &client[j + 1], server[i]) == 0) {
   1575                 /* We found a match */
   1576                 result = &server[i];
   1577                 status = OPENSSL_NPN_NEGOTIATED;
   1578                 goto found;
   1579             }
   1580             j += client[j];
   1581             j++;
   1582         }
   1583         i += server[i];
   1584         i++;
   1585     }
   1586 
   1587     /* There's no overlap between our protocols and the server's list. */
   1588     result = client;
   1589     status = OPENSSL_NPN_NO_OVERLAP;
   1590 
   1591  found:
   1592     *out = (unsigned char *)result + 1;
   1593     *outlen = result[0];
   1594     return status;
   1595 }
   1596 
   1597 /*
   1598  * SSL_get0_next_proto_negotiated sets *data and *len to point to the
   1599  * client's requested protocol for this connection and returns 0. If the
   1600  * client didn't request any protocol, then *data is set to NULL. Note that
   1601  * the client can request any protocol it chooses. The value returned from
   1602  * this function need not be a member of the list of supported protocols
   1603  * provided by the callback.
   1604  */
   1605 void SSL_get0_next_proto_negotiated(const SSL *s, const unsigned char **data,
   1606                                     unsigned *len)
   1607 {
   1608     *data = s->next_proto_negotiated;
   1609     if (!*data) {
   1610         *len = 0;
   1611     } else {
   1612         *len = s->next_proto_negotiated_len;
   1613     }
   1614 }
   1615 
   1616 /*
   1617  * SSL_CTX_set_next_protos_advertised_cb sets a callback that is called when
   1618  * a TLS server needs a list of supported protocols for Next Protocol
   1619  * Negotiation. The returned list must be in wire format.  The list is
   1620  * returned by setting |out| to point to it and |outlen| to its length. This
   1621  * memory will not be modified, but one should assume that the SSL* keeps a
   1622  * reference to it. The callback should return SSL_TLSEXT_ERR_OK if it
   1623  * wishes to advertise. Otherwise, no such extension will be included in the
   1624  * ServerHello.
   1625  */
   1626 void SSL_CTX_set_next_protos_advertised_cb(SSL_CTX *ctx,
   1627                                            int (*cb) (SSL *ssl,
   1628                                                       const unsigned char
   1629                                                       **out,
   1630                                                       unsigned int *outlen,
   1631                                                       void *arg), void *arg)
   1632 {
   1633     ctx->next_protos_advertised_cb = cb;
   1634     ctx->next_protos_advertised_cb_arg = arg;
   1635 }
   1636 
   1637 /*
   1638  * SSL_CTX_set_next_proto_select_cb sets a callback that is called when a
   1639  * client needs to select a protocol from the server's provided list. |out|
   1640  * must be set to point to the selected protocol (which may be within |in|).
   1641  * The length of the protocol name must be written into |outlen|. The
   1642  * server's advertised protocols are provided in |in| and |inlen|. The
   1643  * callback can assume that |in| is syntactically valid. The client must
   1644  * select a protocol. It is fatal to the connection if this callback returns
   1645  * a value other than SSL_TLSEXT_ERR_OK.
   1646  */
   1647 void SSL_CTX_set_next_proto_select_cb(SSL_CTX *ctx,
   1648                                       int (*cb) (SSL *s, unsigned char **out,
   1649                                                  unsigned char *outlen,
   1650                                                  const unsigned char *in,
   1651                                                  unsigned int inlen,
   1652                                                  void *arg), void *arg)
   1653 {
   1654     ctx->next_proto_select_cb = cb;
   1655     ctx->next_proto_select_cb_arg = arg;
   1656 }
   1657 # endif
   1658 #endif
   1659 
   1660 int SSL_export_keying_material(SSL *s, unsigned char *out, size_t olen,
   1661                                const char *label, size_t llen,
   1662                                const unsigned char *p, size_t plen,
   1663                                int use_context)
   1664 {
   1665     if (s->version < TLS1_VERSION)
   1666         return -1;
   1667 
   1668     return s->method->ssl3_enc->export_keying_material(s, out, olen, label,
   1669                                                        llen, p, plen,
   1670                                                        use_context);
   1671 }
   1672 
   1673 static unsigned long ssl_session_hash(const SSL_SESSION *a)
   1674 {
   1675     unsigned long l;
   1676 
   1677     l = (unsigned long)
   1678         ((unsigned int)a->session_id[0]) |
   1679         ((unsigned int)a->session_id[1] << 8L) |
   1680         ((unsigned long)a->session_id[2] << 16L) |
   1681         ((unsigned long)a->session_id[3] << 24L);
   1682     return (l);
   1683 }
   1684 
   1685 /*
   1686  * NB: If this function (or indeed the hash function which uses a sort of
   1687  * coarser function than this one) is changed, ensure
   1688  * SSL_CTX_has_matching_session_id() is checked accordingly. It relies on
   1689  * being able to construct an SSL_SESSION that will collide with any existing
   1690  * session with a matching session ID.
   1691  */
   1692 static int ssl_session_cmp(const SSL_SESSION *a, const SSL_SESSION *b)
   1693 {
   1694     if (a->ssl_version != b->ssl_version)
   1695         return (1);
   1696     if (a->session_id_length != b->session_id_length)
   1697         return (1);
   1698     return (memcmp(a->session_id, b->session_id, a->session_id_length));
   1699 }
   1700 
   1701 /*
   1702  * These wrapper functions should remain rather than redeclaring
   1703  * SSL_SESSION_hash and SSL_SESSION_cmp for void* types and casting each
   1704  * variable. The reason is that the functions aren't static, they're exposed
   1705  * via ssl.h.
   1706  */
   1707 static IMPLEMENT_LHASH_HASH_FN(ssl_session, SSL_SESSION)
   1708 static IMPLEMENT_LHASH_COMP_FN(ssl_session, SSL_SESSION)
   1709 
   1710 SSL_CTX *SSL_CTX_new(const SSL_METHOD *meth)
   1711 {
   1712     SSL_CTX *ret = NULL;
   1713 
   1714     if (meth == NULL) {
   1715         SSLerr(SSL_F_SSL_CTX_NEW, SSL_R_NULL_SSL_METHOD_PASSED);
   1716         return (NULL);
   1717     }
   1718 #ifdef OPENSSL_FIPS
   1719     if (FIPS_mode() && (meth->version < TLS1_VERSION)) {
   1720         SSLerr(SSL_F_SSL_CTX_NEW, SSL_R_ONLY_TLS_ALLOWED_IN_FIPS_MODE);
   1721         return NULL;
   1722     }
   1723 #endif
   1724 
   1725     if (SSL_get_ex_data_X509_STORE_CTX_idx() < 0) {
   1726         SSLerr(SSL_F_SSL_CTX_NEW, SSL_R_X509_VERIFICATION_SETUP_PROBLEMS);
   1727         goto err;
   1728     }
   1729     ret = (SSL_CTX *)OPENSSL_malloc(sizeof(SSL_CTX));
   1730     if (ret == NULL)
   1731         goto err;
   1732 
   1733     memset(ret, 0, sizeof(SSL_CTX));
   1734 
   1735     ret->method = meth;
   1736 
   1737     ret->cert_store = NULL;
   1738     ret->session_cache_mode = SSL_SESS_CACHE_SERVER;
   1739     ret->session_cache_size = SSL_SESSION_CACHE_MAX_SIZE_DEFAULT;
   1740     ret->session_cache_head = NULL;
   1741     ret->session_cache_tail = NULL;
   1742 
   1743     /* We take the system default */
   1744     ret->session_timeout = meth->get_timeout();
   1745 
   1746     ret->new_session_cb = 0;
   1747     ret->remove_session_cb = 0;
   1748     ret->get_session_cb = 0;
   1749     ret->generate_session_id = 0;
   1750 
   1751     memset((char *)&ret->stats, 0, sizeof(ret->stats));
   1752 
   1753     ret->references = 1;
   1754     ret->quiet_shutdown = 0;
   1755 
   1756 /*  ret->cipher=NULL;*/
   1757 /*-
   1758     ret->s2->challenge=NULL;
   1759     ret->master_key=NULL;
   1760     ret->key_arg=NULL;
   1761     ret->s2->conn_id=NULL; */
   1762 
   1763     ret->info_callback = NULL;
   1764 
   1765     ret->app_verify_callback = 0;
   1766     ret->app_verify_arg = NULL;
   1767 
   1768     ret->max_cert_list = SSL_MAX_CERT_LIST_DEFAULT;
   1769     ret->read_ahead = 0;
   1770     ret->msg_callback = 0;
   1771     ret->msg_callback_arg = NULL;
   1772     ret->verify_mode = SSL_VERIFY_NONE;
   1773 #if 0
   1774     ret->verify_depth = -1;     /* Don't impose a limit (but x509_lu.c does) */
   1775 #endif
   1776     ret->sid_ctx_length = 0;
   1777     ret->default_verify_callback = NULL;
   1778     if ((ret->cert = ssl_cert_new()) == NULL)
   1779         goto err;
   1780 
   1781     ret->default_passwd_callback = 0;
   1782     ret->default_passwd_callback_userdata = NULL;
   1783     ret->client_cert_cb = 0;
   1784     ret->app_gen_cookie_cb = 0;
   1785     ret->app_verify_cookie_cb = 0;
   1786 
   1787     ret->sessions = lh_SSL_SESSION_new();
   1788     if (ret->sessions == NULL)
   1789         goto err;
   1790     ret->cert_store = X509_STORE_new();
   1791     if (ret->cert_store == NULL)
   1792         goto err;
   1793 
   1794     ssl_create_cipher_list(ret->method,
   1795                            &ret->cipher_list, &ret->cipher_list_by_id,
   1796                            meth->version ==
   1797                            SSL2_VERSION ? "SSLv2" : SSL_DEFAULT_CIPHER_LIST);
   1798     if (ret->cipher_list == NULL || sk_SSL_CIPHER_num(ret->cipher_list) <= 0) {
   1799         SSLerr(SSL_F_SSL_CTX_NEW, SSL_R_LIBRARY_HAS_NO_CIPHERS);
   1800         goto err2;
   1801     }
   1802 
   1803     ret->param = X509_VERIFY_PARAM_new();
   1804     if (!ret->param)
   1805         goto err;
   1806 
   1807     if ((ret->rsa_md5 = EVP_get_digestbyname("ssl2-md5")) == NULL) {
   1808         SSLerr(SSL_F_SSL_CTX_NEW, SSL_R_UNABLE_TO_LOAD_SSL2_MD5_ROUTINES);
   1809         goto err2;
   1810     }
   1811     if ((ret->md5 = EVP_get_digestbyname("ssl3-md5")) == NULL) {
   1812         SSLerr(SSL_F_SSL_CTX_NEW, SSL_R_UNABLE_TO_LOAD_SSL3_MD5_ROUTINES);
   1813         goto err2;
   1814     }
   1815     if ((ret->sha1 = EVP_get_digestbyname("ssl3-sha1")) == NULL) {
   1816         SSLerr(SSL_F_SSL_CTX_NEW, SSL_R_UNABLE_TO_LOAD_SSL3_SHA1_ROUTINES);
   1817         goto err2;
   1818     }
   1819 
   1820     if ((ret->client_CA = sk_X509_NAME_new_null()) == NULL)
   1821         goto err;
   1822 
   1823     CRYPTO_new_ex_data(CRYPTO_EX_INDEX_SSL_CTX, ret, &ret->ex_data);
   1824 
   1825     ret->extra_certs = NULL;
   1826     /* No compression for DTLS */
   1827     if (meth->version != DTLS1_VERSION)
   1828         ret->comp_methods = SSL_COMP_get_compression_methods();
   1829 
   1830     ret->max_send_fragment = SSL3_RT_MAX_PLAIN_LENGTH;
   1831 
   1832 #ifndef OPENSSL_NO_TLSEXT
   1833     ret->tlsext_servername_callback = 0;
   1834     ret->tlsext_servername_arg = NULL;
   1835     /* Setup RFC4507 ticket keys */
   1836     if ((RAND_pseudo_bytes(ret->tlsext_tick_key_name, 16) <= 0)
   1837         || (RAND_bytes(ret->tlsext_tick_hmac_key, 16) <= 0)
   1838         || (RAND_bytes(ret->tlsext_tick_aes_key, 16) <= 0))
   1839         ret->options |= SSL_OP_NO_TICKET;
   1840 
   1841     ret->tlsext_status_cb = 0;
   1842     ret->tlsext_status_arg = NULL;
   1843 
   1844 # ifndef OPENSSL_NO_NEXTPROTONEG
   1845     ret->next_protos_advertised_cb = 0;
   1846     ret->next_proto_select_cb = 0;
   1847 # endif
   1848 #endif
   1849 #ifndef OPENSSL_NO_PSK
   1850     ret->psk_identity_hint = NULL;
   1851     ret->psk_client_callback = NULL;
   1852     ret->psk_server_callback = NULL;
   1853 #endif
   1854 #ifndef OPENSSL_NO_SRP
   1855     SSL_CTX_SRP_CTX_init(ret);
   1856 #endif
   1857 #ifndef OPENSSL_NO_BUF_FREELISTS
   1858     ret->freelist_max_len = SSL_MAX_BUF_FREELIST_LEN_DEFAULT;
   1859     ret->rbuf_freelist = OPENSSL_malloc(sizeof(SSL3_BUF_FREELIST));
   1860     if (!ret->rbuf_freelist)
   1861         goto err;
   1862     ret->rbuf_freelist->chunklen = 0;
   1863     ret->rbuf_freelist->len = 0;
   1864     ret->rbuf_freelist->head = NULL;
   1865     ret->wbuf_freelist = OPENSSL_malloc(sizeof(SSL3_BUF_FREELIST));
   1866     if (!ret->wbuf_freelist) {
   1867         OPENSSL_free(ret->rbuf_freelist);
   1868         goto err;
   1869     }
   1870     ret->wbuf_freelist->chunklen = 0;
   1871     ret->wbuf_freelist->len = 0;
   1872     ret->wbuf_freelist->head = NULL;
   1873 #endif
   1874 #ifndef OPENSSL_NO_ENGINE
   1875     ret->client_cert_engine = NULL;
   1876 # ifdef OPENSSL_SSL_CLIENT_ENGINE_AUTO
   1877 #  define eng_strx(x)     #x
   1878 #  define eng_str(x)      eng_strx(x)
   1879     /* Use specific client engine automatically... ignore errors */
   1880     {
   1881         ENGINE *eng;
   1882         eng = ENGINE_by_id(eng_str(OPENSSL_SSL_CLIENT_ENGINE_AUTO));
   1883         if (!eng) {
   1884             ERR_clear_error();
   1885             ENGINE_load_builtin_engines();
   1886             eng = ENGINE_by_id(eng_str(OPENSSL_SSL_CLIENT_ENGINE_AUTO));
   1887         }
   1888         if (!eng || !SSL_CTX_set_client_cert_engine(ret, eng))
   1889             ERR_clear_error();
   1890     }
   1891 # endif
   1892 #endif
   1893     /*
   1894      * Default is to connect to non-RI servers. When RI is more widely
   1895      * deployed might change this.
   1896      */
   1897     ret->options |= SSL_OP_LEGACY_SERVER_CONNECT;
   1898 
   1899     /*
   1900      * Disable SSLv2 by default, callers that want to enable SSLv2 will have to
   1901      * explicitly clear this option via either of SSL_CTX_clear_options() or
   1902      * SSL_clear_options().
   1903      */
   1904     ret->options |= SSL_OP_NO_SSLv2;
   1905 
   1906     return (ret);
   1907  err:
   1908     SSLerr(SSL_F_SSL_CTX_NEW, ERR_R_MALLOC_FAILURE);
   1909  err2:
   1910     if (ret != NULL)
   1911         SSL_CTX_free(ret);
   1912     return (NULL);
   1913 }
   1914 
   1915 #if 0
   1916 static void SSL_COMP_free(SSL_COMP *comp)
   1917 {
   1918     OPENSSL_free(comp);
   1919 }
   1920 #endif
   1921 
   1922 #ifndef OPENSSL_NO_BUF_FREELISTS
   1923 static void ssl_buf_freelist_free(SSL3_BUF_FREELIST *list)
   1924 {
   1925     SSL3_BUF_FREELIST_ENTRY *ent, *next;
   1926     for (ent = list->head; ent; ent = next) {
   1927         next = ent->next;
   1928         OPENSSL_free(ent);
   1929     }
   1930     OPENSSL_free(list);
   1931 }
   1932 #endif
   1933 
   1934 void SSL_CTX_free(SSL_CTX *a)
   1935 {
   1936     int i;
   1937 
   1938     if (a == NULL)
   1939         return;
   1940 
   1941     i = CRYPTO_add(&a->references, -1, CRYPTO_LOCK_SSL_CTX);
   1942 #ifdef REF_PRINT
   1943     REF_PRINT("SSL_CTX", a);
   1944 #endif
   1945     if (i > 0)
   1946         return;
   1947 #ifdef REF_CHECK
   1948     if (i < 0) {
   1949         fprintf(stderr, "SSL_CTX_free, bad reference count\n");
   1950         abort();                /* ok */
   1951     }
   1952 #endif
   1953 
   1954     if (a->param)
   1955         X509_VERIFY_PARAM_free(a->param);
   1956 
   1957     /*
   1958      * Free internal session cache. However: the remove_cb() may reference
   1959      * the ex_data of SSL_CTX, thus the ex_data store can only be removed
   1960      * after the sessions were flushed.
   1961      * As the ex_data handling routines might also touch the session cache,
   1962      * the most secure solution seems to be: empty (flush) the cache, then
   1963      * free ex_data, then finally free the cache.
   1964      * (See ticket [openssl.org #212].)
   1965      */
   1966     if (a->sessions != NULL)
   1967         SSL_CTX_flush_sessions(a, 0);
   1968 
   1969     CRYPTO_free_ex_data(CRYPTO_EX_INDEX_SSL_CTX, a, &a->ex_data);
   1970 
   1971     if (a->sessions != NULL)
   1972         lh_SSL_SESSION_free(a->sessions);
   1973 
   1974     if (a->cert_store != NULL)
   1975         X509_STORE_free(a->cert_store);
   1976     if (a->cipher_list != NULL)
   1977         sk_SSL_CIPHER_free(a->cipher_list);
   1978     if (a->cipher_list_by_id != NULL)
   1979         sk_SSL_CIPHER_free(a->cipher_list_by_id);
   1980     if (a->cert != NULL)
   1981         ssl_cert_free(a->cert);
   1982     if (a->client_CA != NULL)
   1983         sk_X509_NAME_pop_free(a->client_CA, X509_NAME_free);
   1984     if (a->extra_certs != NULL)
   1985         sk_X509_pop_free(a->extra_certs, X509_free);
   1986 #if 0                           /* This should never be done, since it
   1987                                  * removes a global database */
   1988     if (a->comp_methods != NULL)
   1989         sk_SSL_COMP_pop_free(a->comp_methods, SSL_COMP_free);
   1990 #else
   1991     a->comp_methods = NULL;
   1992 #endif
   1993 
   1994 #ifndef OPENSSL_NO_SRTP
   1995     if (a->srtp_profiles)
   1996         sk_SRTP_PROTECTION_PROFILE_free(a->srtp_profiles);
   1997 #endif
   1998 
   1999 #ifndef OPENSSL_NO_PSK
   2000     if (a->psk_identity_hint)
   2001         OPENSSL_free(a->psk_identity_hint);
   2002 #endif
   2003 #ifndef OPENSSL_NO_SRP
   2004     SSL_CTX_SRP_CTX_free(a);
   2005 #endif
   2006 #ifndef OPENSSL_NO_ENGINE
   2007     if (a->client_cert_engine)
   2008         ENGINE_finish(a->client_cert_engine);
   2009 #endif
   2010 
   2011 #ifndef OPENSSL_NO_BUF_FREELISTS
   2012     if (a->wbuf_freelist)
   2013         ssl_buf_freelist_free(a->wbuf_freelist);
   2014     if (a->rbuf_freelist)
   2015         ssl_buf_freelist_free(a->rbuf_freelist);
   2016 #endif
   2017 
   2018     OPENSSL_free(a);
   2019 }
   2020 
   2021 void SSL_CTX_set_default_passwd_cb(SSL_CTX *ctx, pem_password_cb *cb)
   2022 {
   2023     ctx->default_passwd_callback = cb;
   2024 }
   2025 
   2026 void SSL_CTX_set_default_passwd_cb_userdata(SSL_CTX *ctx, void *u)
   2027 {
   2028     ctx->default_passwd_callback_userdata = u;
   2029 }
   2030 
   2031 void SSL_CTX_set_cert_verify_callback(SSL_CTX *ctx,
   2032                                       int (*cb) (X509_STORE_CTX *, void *),
   2033                                       void *arg)
   2034 {
   2035     ctx->app_verify_callback = cb;
   2036     ctx->app_verify_arg = arg;
   2037 }
   2038 
   2039 void SSL_CTX_set_verify(SSL_CTX *ctx, int mode,
   2040                         int (*cb) (int, X509_STORE_CTX *))
   2041 {
   2042     ctx->verify_mode = mode;
   2043     ctx->default_verify_callback = cb;
   2044 }
   2045 
   2046 void SSL_CTX_set_verify_depth(SSL_CTX *ctx, int depth)
   2047 {
   2048     X509_VERIFY_PARAM_set_depth(ctx->param, depth);
   2049 }
   2050 
   2051 void ssl_set_cert_masks(CERT *c, const SSL_CIPHER *cipher)
   2052 {
   2053     CERT_PKEY *cpk;
   2054     int rsa_enc, rsa_tmp, rsa_sign, dh_tmp, dh_rsa, dh_dsa, dsa_sign;
   2055     int rsa_enc_export, dh_rsa_export, dh_dsa_export;
   2056     int rsa_tmp_export, dh_tmp_export, kl;
   2057     unsigned long mask_k, mask_a, emask_k, emask_a;
   2058 #ifndef OPENSSL_NO_ECDSA
   2059     int have_ecc_cert, ecdsa_ok, ecc_pkey_size;
   2060 #endif
   2061 #ifndef OPENSSL_NO_ECDH
   2062     int have_ecdh_tmp, ecdh_ok;
   2063 #endif
   2064 #ifndef OPENSSL_NO_EC
   2065     X509 *x = NULL;
   2066     EVP_PKEY *ecc_pkey = NULL;
   2067     int signature_nid = 0, pk_nid = 0, md_nid = 0;
   2068 #endif
   2069     if (c == NULL)
   2070         return;
   2071 
   2072     kl = SSL_C_EXPORT_PKEYLENGTH(cipher);
   2073 
   2074 #ifndef OPENSSL_NO_RSA
   2075     rsa_tmp = (c->rsa_tmp != NULL || c->rsa_tmp_cb != NULL);
   2076     rsa_tmp_export = (c->rsa_tmp_cb != NULL ||
   2077                       (rsa_tmp && RSA_size(c->rsa_tmp) * 8 <= kl));
   2078 #else
   2079     rsa_tmp = rsa_tmp_export = 0;
   2080 #endif
   2081 #ifndef OPENSSL_NO_DH
   2082     dh_tmp = (c->dh_tmp != NULL || c->dh_tmp_cb != NULL);
   2083     dh_tmp_export = (c->dh_tmp_cb != NULL ||
   2084                      (dh_tmp && DH_size(c->dh_tmp) * 8 <= kl));
   2085 #else
   2086     dh_tmp = dh_tmp_export = 0;
   2087 #endif
   2088 
   2089 #ifndef OPENSSL_NO_ECDH
   2090     have_ecdh_tmp = (c->ecdh_tmp != NULL || c->ecdh_tmp_cb != NULL);
   2091 #endif
   2092     cpk = &(c->pkeys[SSL_PKEY_RSA_ENC]);
   2093     rsa_enc = (cpk->x509 != NULL && cpk->privatekey != NULL);
   2094     rsa_enc_export = (rsa_enc && EVP_PKEY_size(cpk->privatekey) * 8 <= kl);
   2095     cpk = &(c->pkeys[SSL_PKEY_RSA_SIGN]);
   2096     rsa_sign = (cpk->x509 != NULL && cpk->privatekey != NULL);
   2097     cpk = &(c->pkeys[SSL_PKEY_DSA_SIGN]);
   2098     dsa_sign = (cpk->x509 != NULL && cpk->privatekey != NULL);
   2099     cpk = &(c->pkeys[SSL_PKEY_DH_RSA]);
   2100     dh_rsa = (cpk->x509 != NULL && cpk->privatekey != NULL);
   2101     dh_rsa_export = (dh_rsa && EVP_PKEY_size(cpk->privatekey) * 8 <= kl);
   2102     cpk = &(c->pkeys[SSL_PKEY_DH_DSA]);
   2103 /* FIX THIS EAY EAY EAY */
   2104     dh_dsa = (cpk->x509 != NULL && cpk->privatekey != NULL);
   2105     dh_dsa_export = (dh_dsa && EVP_PKEY_size(cpk->privatekey) * 8 <= kl);
   2106     cpk = &(c->pkeys[SSL_PKEY_ECC]);
   2107 #ifndef OPENSSL_NO_EC
   2108     have_ecc_cert = (cpk->x509 != NULL && cpk->privatekey != NULL);
   2109 #endif
   2110     mask_k = 0;
   2111     mask_a = 0;
   2112     emask_k = 0;
   2113     emask_a = 0;
   2114 
   2115 #ifdef CIPHER_DEBUG
   2116     fprintf(stderr,
   2117             "rt=%d rte=%d dht=%d ecdht=%d re=%d ree=%d rs=%d ds=%d dhr=%d dhd=%d\n",
   2118             rsa_tmp, rsa_tmp_export, dh_tmp, have_ecdh_tmp, rsa_enc,
   2119             rsa_enc_export, rsa_sign, dsa_sign, dh_rsa, dh_dsa);
   2120 #endif
   2121 
   2122     cpk = &(c->pkeys[SSL_PKEY_GOST01]);
   2123     if (cpk->x509 != NULL && cpk->privatekey != NULL) {
   2124         mask_k |= SSL_kGOST;
   2125         mask_a |= SSL_aGOST01;
   2126     }
   2127     cpk = &(c->pkeys[SSL_PKEY_GOST94]);
   2128     if (cpk->x509 != NULL && cpk->privatekey != NULL) {
   2129         mask_k |= SSL_kGOST;
   2130         mask_a |= SSL_aGOST94;
   2131     }
   2132 
   2133     if (rsa_enc || (rsa_tmp && rsa_sign))
   2134         mask_k |= SSL_kRSA;
   2135     if (rsa_enc_export || (rsa_tmp_export && (rsa_sign || rsa_enc)))
   2136         emask_k |= SSL_kRSA;
   2137 
   2138 #if 0
   2139     /* The match needs to be both kEDH and aRSA or aDSA, so don't worry */
   2140     if ((dh_tmp || dh_rsa || dh_dsa) && (rsa_enc || rsa_sign || dsa_sign))
   2141         mask_k |= SSL_kEDH;
   2142     if ((dh_tmp_export || dh_rsa_export || dh_dsa_export) &&
   2143         (rsa_enc || rsa_sign || dsa_sign))
   2144         emask_k |= SSL_kEDH;
   2145 #endif
   2146 
   2147     if (dh_tmp_export)
   2148         emask_k |= SSL_kEDH;
   2149 
   2150     if (dh_tmp)
   2151         mask_k |= SSL_kEDH;
   2152 
   2153     if (dh_rsa)
   2154         mask_k |= SSL_kDHr;
   2155     if (dh_rsa_export)
   2156         emask_k |= SSL_kDHr;
   2157 
   2158     if (dh_dsa)
   2159         mask_k |= SSL_kDHd;
   2160     if (dh_dsa_export)
   2161         emask_k |= SSL_kDHd;
   2162 
   2163     if (rsa_enc || rsa_sign) {
   2164         mask_a |= SSL_aRSA;
   2165         emask_a |= SSL_aRSA;
   2166     }
   2167 
   2168     if (dsa_sign) {
   2169         mask_a |= SSL_aDSS;
   2170         emask_a |= SSL_aDSS;
   2171     }
   2172 
   2173     mask_a |= SSL_aNULL;
   2174     emask_a |= SSL_aNULL;
   2175 
   2176 #ifndef OPENSSL_NO_KRB5
   2177     mask_k |= SSL_kKRB5;
   2178     mask_a |= SSL_aKRB5;
   2179     emask_k |= SSL_kKRB5;
   2180     emask_a |= SSL_aKRB5;
   2181 #endif
   2182 
   2183     /*
   2184      * An ECC certificate may be usable for ECDH and/or ECDSA cipher suites
   2185      * depending on the key usage extension.
   2186      */
   2187 #ifndef OPENSSL_NO_EC
   2188     if (have_ecc_cert) {
   2189         /* This call populates extension flags (ex_flags) */
   2190         x = (c->pkeys[SSL_PKEY_ECC]).x509;
   2191         X509_check_purpose(x, -1, 0);
   2192         ecdh_ok = (x->ex_flags & EXFLAG_KUSAGE) ?
   2193             (x->ex_kusage & X509v3_KU_KEY_AGREEMENT) : 1;
   2194         ecdsa_ok = (x->ex_flags & EXFLAG_KUSAGE) ?
   2195             (x->ex_kusage & X509v3_KU_DIGITAL_SIGNATURE) : 1;
   2196         ecc_pkey = X509_get_pubkey(x);
   2197         ecc_pkey_size = (ecc_pkey != NULL) ? EVP_PKEY_bits(ecc_pkey) : 0;
   2198         EVP_PKEY_free(ecc_pkey);
   2199         if ((x->sig_alg) && (x->sig_alg->algorithm)) {
   2200             signature_nid = OBJ_obj2nid(x->sig_alg->algorithm);
   2201             OBJ_find_sigid_algs(signature_nid, &md_nid, &pk_nid);
   2202         }
   2203 #ifndef OPENSSL_NO_ECDH
   2204         if (ecdh_ok) {
   2205 
   2206             if (pk_nid == NID_rsaEncryption || pk_nid == NID_rsa) {
   2207                 mask_k |= SSL_kECDHr;
   2208                 mask_a |= SSL_aECDH;
   2209                 if (ecc_pkey_size <= 163) {
   2210                     emask_k |= SSL_kECDHr;
   2211                     emask_a |= SSL_aECDH;
   2212                 }
   2213             }
   2214 
   2215             if (pk_nid == NID_X9_62_id_ecPublicKey) {
   2216                 mask_k |= SSL_kECDHe;
   2217                 mask_a |= SSL_aECDH;
   2218                 if (ecc_pkey_size <= 163) {
   2219                     emask_k |= SSL_kECDHe;
   2220                     emask_a |= SSL_aECDH;
   2221                 }
   2222             }
   2223         }
   2224 #endif
   2225 #ifndef OPENSSL_NO_ECDSA
   2226         if (ecdsa_ok) {
   2227             mask_a |= SSL_aECDSA;
   2228             emask_a |= SSL_aECDSA;
   2229         }
   2230 #endif
   2231     }
   2232 #endif
   2233 #ifndef OPENSSL_NO_ECDH
   2234     if (have_ecdh_tmp) {
   2235         mask_k |= SSL_kEECDH;
   2236         emask_k |= SSL_kEECDH;
   2237     }
   2238 #endif
   2239 
   2240 #ifndef OPENSSL_NO_PSK
   2241     mask_k |= SSL_kPSK;
   2242     mask_a |= SSL_aPSK;
   2243     emask_k |= SSL_kPSK;
   2244     emask_a |= SSL_aPSK;
   2245 #endif
   2246 
   2247     c->mask_k = mask_k;
   2248     c->mask_a = mask_a;
   2249     c->export_mask_k = emask_k;
   2250     c->export_mask_a = emask_a;
   2251     c->valid = 1;
   2252 }
   2253 
   2254 /* This handy macro borrowed from crypto/x509v3/v3_purp.c */
   2255 #define ku_reject(x, usage) \
   2256         (((x)->ex_flags & EXFLAG_KUSAGE) && !((x)->ex_kusage & (usage)))
   2257 
   2258 #ifndef OPENSSL_NO_EC
   2259 
   2260 int ssl_check_srvr_ecc_cert_and_alg(X509 *x, SSL *s)
   2261 {
   2262     unsigned long alg_k, alg_a;
   2263     EVP_PKEY *pkey = NULL;
   2264     int keysize = 0;
   2265     int signature_nid = 0, md_nid = 0, pk_nid = 0;
   2266     const SSL_CIPHER *cs = s->s3->tmp.new_cipher;
   2267 
   2268     alg_k = cs->algorithm_mkey;
   2269     alg_a = cs->algorithm_auth;
   2270 
   2271     if (SSL_C_IS_EXPORT(cs)) {
   2272         /* ECDH key length in export ciphers must be <= 163 bits */
   2273         pkey = X509_get_pubkey(x);
   2274         if (pkey == NULL)
   2275             return 0;
   2276         keysize = EVP_PKEY_bits(pkey);
   2277         EVP_PKEY_free(pkey);
   2278         if (keysize > 163)
   2279             return 0;
   2280     }
   2281 
   2282     /* This call populates the ex_flags field correctly */
   2283     X509_check_purpose(x, -1, 0);
   2284     if ((x->sig_alg) && (x->sig_alg->algorithm)) {
   2285         signature_nid = OBJ_obj2nid(x->sig_alg->algorithm);
   2286         OBJ_find_sigid_algs(signature_nid, &md_nid, &pk_nid);
   2287     }
   2288     if (alg_k & SSL_kECDHe || alg_k & SSL_kECDHr) {
   2289         /* key usage, if present, must allow key agreement */
   2290         if (ku_reject(x, X509v3_KU_KEY_AGREEMENT)) {
   2291             SSLerr(SSL_F_SSL_CHECK_SRVR_ECC_CERT_AND_ALG,
   2292                    SSL_R_ECC_CERT_NOT_FOR_KEY_AGREEMENT);
   2293             return 0;
   2294         }
   2295         if ((alg_k & SSL_kECDHe) && TLS1_get_version(s) < TLS1_2_VERSION) {
   2296             /* signature alg must be ECDSA */
   2297             if (pk_nid != NID_X9_62_id_ecPublicKey) {
   2298                 SSLerr(SSL_F_SSL_CHECK_SRVR_ECC_CERT_AND_ALG,
   2299                        SSL_R_ECC_CERT_SHOULD_HAVE_SHA1_SIGNATURE);
   2300                 return 0;
   2301             }
   2302         }
   2303         if ((alg_k & SSL_kECDHr) && TLS1_get_version(s) < TLS1_2_VERSION) {
   2304             /* signature alg must be RSA */
   2305 
   2306             if (pk_nid != NID_rsaEncryption && pk_nid != NID_rsa) {
   2307                 SSLerr(SSL_F_SSL_CHECK_SRVR_ECC_CERT_AND_ALG,
   2308                        SSL_R_ECC_CERT_SHOULD_HAVE_RSA_SIGNATURE);
   2309                 return 0;
   2310             }
   2311         }
   2312     }
   2313     if (alg_a & SSL_aECDSA) {
   2314         /* key usage, if present, must allow signing */
   2315         if (ku_reject(x, X509v3_KU_DIGITAL_SIGNATURE)) {
   2316             SSLerr(SSL_F_SSL_CHECK_SRVR_ECC_CERT_AND_ALG,
   2317                    SSL_R_ECC_CERT_NOT_FOR_SIGNING);
   2318             return 0;
   2319         }
   2320     }
   2321 
   2322     return 1;                   /* all checks are ok */
   2323 }
   2324 
   2325 #endif
   2326 
   2327 /* THIS NEEDS CLEANING UP */
   2328 CERT_PKEY *ssl_get_server_send_pkey(const SSL *s)
   2329 {
   2330     unsigned long alg_k, alg_a;
   2331     CERT *c;
   2332     int i;
   2333 
   2334     c = s->cert;
   2335     ssl_set_cert_masks(c, s->s3->tmp.new_cipher);
   2336 
   2337     alg_k = s->s3->tmp.new_cipher->algorithm_mkey;
   2338     alg_a = s->s3->tmp.new_cipher->algorithm_auth;
   2339 
   2340     if (alg_k & (SSL_kECDHr | SSL_kECDHe)) {
   2341         /*
   2342          * we don't need to look at SSL_kEECDH since no certificate is needed
   2343          * for anon ECDH and for authenticated EECDH, the check for the auth
   2344          * algorithm will set i correctly NOTE: For ECDH-RSA, we need an ECC
   2345          * not an RSA cert but for EECDH-RSA we need an RSA cert. Placing the
   2346          * checks for SSL_kECDH before RSA checks ensures the correct cert is
   2347          * chosen.
   2348          */
   2349         i = SSL_PKEY_ECC;
   2350     } else if (alg_a & SSL_aECDSA) {
   2351         i = SSL_PKEY_ECC;
   2352     } else if (alg_k & SSL_kDHr)
   2353         i = SSL_PKEY_DH_RSA;
   2354     else if (alg_k & SSL_kDHd)
   2355         i = SSL_PKEY_DH_DSA;
   2356     else if (alg_a & SSL_aDSS)
   2357         i = SSL_PKEY_DSA_SIGN;
   2358     else if (alg_a & SSL_aRSA) {
   2359         if (c->pkeys[SSL_PKEY_RSA_ENC].x509 == NULL)
   2360             i = SSL_PKEY_RSA_SIGN;
   2361         else
   2362             i = SSL_PKEY_RSA_ENC;
   2363     } else if (alg_a & SSL_aKRB5) {
   2364         /* VRS something else here? */
   2365         return (NULL);
   2366     } else if (alg_a & SSL_aGOST94)
   2367         i = SSL_PKEY_GOST94;
   2368     else if (alg_a & SSL_aGOST01)
   2369         i = SSL_PKEY_GOST01;
   2370     else {                      /* if (alg_a & SSL_aNULL) */
   2371 
   2372         SSLerr(SSL_F_SSL_GET_SERVER_SEND_PKEY, ERR_R_INTERNAL_ERROR);
   2373         return (NULL);
   2374     }
   2375 
   2376     return c->pkeys + i;
   2377 }
   2378 
   2379 X509 *ssl_get_server_send_cert(const SSL *s)
   2380 {
   2381     CERT_PKEY *cpk;
   2382     cpk = ssl_get_server_send_pkey(s);
   2383     if (!cpk)
   2384         return NULL;
   2385     return cpk->x509;
   2386 }
   2387 
   2388 EVP_PKEY *ssl_get_sign_pkey(SSL *s, const SSL_CIPHER *cipher,
   2389                             const EVP_MD **pmd)
   2390 {
   2391     unsigned long alg_a;
   2392     CERT *c;
   2393     int idx = -1;
   2394 
   2395     alg_a = cipher->algorithm_auth;
   2396     c = s->cert;
   2397 
   2398     if ((alg_a & SSL_aDSS) &&
   2399         (c->pkeys[SSL_PKEY_DSA_SIGN].privatekey != NULL))
   2400         idx = SSL_PKEY_DSA_SIGN;
   2401     else if (alg_a & SSL_aRSA) {
   2402         if (c->pkeys[SSL_PKEY_RSA_SIGN].privatekey != NULL)
   2403             idx = SSL_PKEY_RSA_SIGN;
   2404         else if (c->pkeys[SSL_PKEY_RSA_ENC].privatekey != NULL)
   2405             idx = SSL_PKEY_RSA_ENC;
   2406     } else if ((alg_a & SSL_aECDSA) &&
   2407                (c->pkeys[SSL_PKEY_ECC].privatekey != NULL))
   2408         idx = SSL_PKEY_ECC;
   2409     if (idx == -1) {
   2410         SSLerr(SSL_F_SSL_GET_SIGN_PKEY, ERR_R_INTERNAL_ERROR);
   2411         return (NULL);
   2412     }
   2413     if (pmd)
   2414         *pmd = c->pkeys[idx].digest;
   2415     return c->pkeys[idx].privatekey;
   2416 }
   2417 
   2418 void ssl_update_cache(SSL *s, int mode)
   2419 {
   2420     int i;
   2421 
   2422     /*
   2423      * If the session_id_length is 0, we are not supposed to cache it, and it
   2424      * would be rather hard to do anyway :-)
   2425      */
   2426     if (s->session->session_id_length == 0)
   2427         return;
   2428 
   2429     i = s->session_ctx->session_cache_mode;
   2430     if ((i & mode) && (!s->hit)
   2431         && ((i & SSL_SESS_CACHE_NO_INTERNAL_STORE)
   2432             || SSL_CTX_add_session(s->session_ctx, s->session))
   2433         && (s->session_ctx->new_session_cb != NULL)) {
   2434         CRYPTO_add(&s->session->references, 1, CRYPTO_LOCK_SSL_SESSION);
   2435         if (!s->session_ctx->new_session_cb(s, s->session))
   2436             SSL_SESSION_free(s->session);
   2437     }
   2438 
   2439     /* auto flush every 255 connections */
   2440     if ((!(i & SSL_SESS_CACHE_NO_AUTO_CLEAR)) && ((i & mode) == mode)) {
   2441         if ((((mode & SSL_SESS_CACHE_CLIENT)
   2442               ? s->session_ctx->stats.sess_connect_good
   2443               : s->session_ctx->stats.sess_accept_good) & 0xff) == 0xff) {
   2444             SSL_CTX_flush_sessions(s->session_ctx, (unsigned long)time(NULL));
   2445         }
   2446     }
   2447 }
   2448 
   2449 const SSL_METHOD *SSL_get_ssl_method(SSL *s)
   2450 {
   2451     return (s->method);
   2452 }
   2453 
   2454 int SSL_set_ssl_method(SSL *s, const SSL_METHOD *meth)
   2455 {
   2456     int conn = -1;
   2457     int ret = 1;
   2458 
   2459     if (s->method != meth) {
   2460         if (s->handshake_func != NULL)
   2461             conn = (s->handshake_func == s->method->ssl_connect);
   2462 
   2463         if (s->method->version == meth->version)
   2464             s->method = meth;
   2465         else {
   2466             s->method->ssl_free(s);
   2467             s->method = meth;
   2468             ret = s->method->ssl_new(s);
   2469         }
   2470 
   2471         if (conn == 1)
   2472             s->handshake_func = meth->ssl_connect;
   2473         else if (conn == 0)
   2474             s->handshake_func = meth->ssl_accept;
   2475     }
   2476     return (ret);
   2477 }
   2478 
   2479 int SSL_get_error(const SSL *s, int i)
   2480 {
   2481     int reason;
   2482     unsigned long l;
   2483     BIO *bio;
   2484 
   2485     if (i > 0)
   2486         return (SSL_ERROR_NONE);
   2487 
   2488     /*
   2489      * Make things return SSL_ERROR_SYSCALL when doing SSL_do_handshake etc,
   2490      * where we do encode the error
   2491      */
   2492     if ((l = ERR_peek_error()) != 0) {
   2493         if (ERR_GET_LIB(l) == ERR_LIB_SYS)
   2494             return (SSL_ERROR_SYSCALL);
   2495         else
   2496             return (SSL_ERROR_SSL);
   2497     }
   2498 
   2499     if ((i < 0) && SSL_want_read(s)) {
   2500         bio = SSL_get_rbio(s);
   2501         if (BIO_should_read(bio))
   2502             return (SSL_ERROR_WANT_READ);
   2503         else if (BIO_should_write(bio))
   2504             /*
   2505              * This one doesn't make too much sense ... We never try to write
   2506              * to the rbio, and an application program where rbio and wbio
   2507              * are separate couldn't even know what it should wait for.
   2508              * However if we ever set s->rwstate incorrectly (so that we have
   2509              * SSL_want_read(s) instead of SSL_want_write(s)) and rbio and
   2510              * wbio *are* the same, this test works around that bug; so it
   2511              * might be safer to keep it.
   2512              */
   2513             return (SSL_ERROR_WANT_WRITE);
   2514         else if (BIO_should_io_special(bio)) {
   2515             reason = BIO_get_retry_reason(bio);
   2516             if (reason == BIO_RR_CONNECT)
   2517                 return (SSL_ERROR_WANT_CONNECT);
   2518             else if (reason == BIO_RR_ACCEPT)
   2519                 return (SSL_ERROR_WANT_ACCEPT);
   2520             else
   2521                 return (SSL_ERROR_SYSCALL); /* unknown */
   2522         }
   2523     }
   2524 
   2525     if ((i < 0) && SSL_want_write(s)) {
   2526         bio = SSL_get_wbio(s);
   2527         if (BIO_should_write(bio))
   2528             return (SSL_ERROR_WANT_WRITE);
   2529         else if (BIO_should_read(bio))
   2530             /*
   2531              * See above (SSL_want_read(s) with BIO_should_write(bio))
   2532              */
   2533             return (SSL_ERROR_WANT_READ);
   2534         else if (BIO_should_io_special(bio)) {
   2535             reason = BIO_get_retry_reason(bio);
   2536             if (reason == BIO_RR_CONNECT)
   2537                 return (SSL_ERROR_WANT_CONNECT);
   2538             else if (reason == BIO_RR_ACCEPT)
   2539                 return (SSL_ERROR_WANT_ACCEPT);
   2540             else
   2541                 return (SSL_ERROR_SYSCALL);
   2542         }
   2543     }
   2544     if ((i < 0) && SSL_want_x509_lookup(s)) {
   2545         return (SSL_ERROR_WANT_X509_LOOKUP);
   2546     }
   2547 
   2548     if (i == 0) {
   2549         if (s->version == SSL2_VERSION) {
   2550             /* assume it is the socket being closed */
   2551             return (SSL_ERROR_ZERO_RETURN);
   2552         } else {
   2553             if ((s->shutdown & SSL_RECEIVED_SHUTDOWN) &&
   2554                 (s->s3->warn_alert == SSL_AD_CLOSE_NOTIFY))
   2555                 return (SSL_ERROR_ZERO_RETURN);
   2556         }
   2557     }
   2558     return (SSL_ERROR_SYSCALL);
   2559 }
   2560 
   2561 int SSL_do_handshake(SSL *s)
   2562 {
   2563     int ret = 1;
   2564 
   2565     if (s->handshake_func == NULL) {
   2566         SSLerr(SSL_F_SSL_DO_HANDSHAKE, SSL_R_CONNECTION_TYPE_NOT_SET);
   2567         return (-1);
   2568     }
   2569 
   2570     s->method->ssl_renegotiate_check(s);
   2571 
   2572     if (SSL_in_init(s) || SSL_in_before(s)) {
   2573         ret = s->handshake_func(s);
   2574     }
   2575     return (ret);
   2576 }
   2577 
   2578 /*
   2579  * For the next 2 functions, SSL_clear() sets shutdown and so one of these
   2580  * calls will reset it
   2581  */
   2582 void SSL_set_accept_state(SSL *s)
   2583 {
   2584     s->server = 1;
   2585     s->shutdown = 0;
   2586     s->state = SSL_ST_ACCEPT | SSL_ST_BEFORE;
   2587     s->handshake_func = s->method->ssl_accept;
   2588     /* clear the current cipher */
   2589     ssl_clear_cipher_ctx(s);
   2590     ssl_clear_hash_ctx(&s->read_hash);
   2591     ssl_clear_hash_ctx(&s->write_hash);
   2592 }
   2593 
   2594 void SSL_set_connect_state(SSL *s)
   2595 {
   2596     s->server = 0;
   2597     s->shutdown = 0;
   2598     s->state = SSL_ST_CONNECT | SSL_ST_BEFORE;
   2599     s->handshake_func = s->method->ssl_connect;
   2600     /* clear the current cipher */
   2601     ssl_clear_cipher_ctx(s);
   2602     ssl_clear_hash_ctx(&s->read_hash);
   2603     ssl_clear_hash_ctx(&s->write_hash);
   2604 }
   2605 
   2606 int ssl_undefined_function(SSL *s)
   2607 {
   2608     SSLerr(SSL_F_SSL_UNDEFINED_FUNCTION, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
   2609     return (0);
   2610 }
   2611 
   2612 int ssl_undefined_void_function(void)
   2613 {
   2614     SSLerr(SSL_F_SSL_UNDEFINED_VOID_FUNCTION,
   2615            ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
   2616     return (0);
   2617 }
   2618 
   2619 int ssl_undefined_const_function(const SSL *s)
   2620 {
   2621     SSLerr(SSL_F_SSL_UNDEFINED_CONST_FUNCTION,
   2622            ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
   2623     return (0);
   2624 }
   2625 
   2626 SSL_METHOD *ssl_bad_method(int ver)
   2627 {
   2628     SSLerr(SSL_F_SSL_BAD_METHOD, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
   2629     return (NULL);
   2630 }
   2631 
   2632 const char *SSL_get_version(const SSL *s)
   2633 {
   2634     if (s->version == TLS1_2_VERSION)
   2635         return ("TLSv1.2");
   2636     else if (s->version == TLS1_1_VERSION)
   2637         return ("TLSv1.1");
   2638     else if (s->version == TLS1_VERSION)
   2639         return ("TLSv1");
   2640     else if (s->version == SSL3_VERSION)
   2641         return ("SSLv3");
   2642     else if (s->version == SSL2_VERSION)
   2643         return ("SSLv2");
   2644     else
   2645         return ("unknown");
   2646 }
   2647 
   2648 SSL *SSL_dup(SSL *s)
   2649 {
   2650     STACK_OF(X509_NAME) *sk;
   2651     X509_NAME *xn;
   2652     SSL *ret;
   2653     int i;
   2654 
   2655     if ((ret = SSL_new(SSL_get_SSL_CTX(s))) == NULL)
   2656         return (NULL);
   2657 
   2658     ret->version = s->version;
   2659     ret->type = s->type;
   2660     ret->method = s->method;
   2661 
   2662     if (s->session != NULL) {
   2663         /* This copies session-id, SSL_METHOD, sid_ctx, and 'cert' */
   2664         SSL_copy_session_id(ret, s);
   2665     } else {
   2666         /*
   2667          * No session has been established yet, so we have to expect that
   2668          * s->cert or ret->cert will be changed later -- they should not both
   2669          * point to the same object, and thus we can't use
   2670          * SSL_copy_session_id.
   2671          */
   2672 
   2673         ret->method->ssl_free(ret);
   2674         ret->method = s->method;
   2675         ret->method->ssl_new(ret);
   2676 
   2677         if (s->cert != NULL) {
   2678             if (ret->cert != NULL) {
   2679                 ssl_cert_free(ret->cert);
   2680             }
   2681             ret->cert = ssl_cert_dup(s->cert);
   2682             if (ret->cert == NULL)
   2683                 goto err;
   2684         }
   2685 
   2686         SSL_set_session_id_context(ret, s->sid_ctx, s->sid_ctx_length);
   2687     }
   2688 
   2689     ret->options = s->options;
   2690     ret->mode = s->mode;
   2691     SSL_set_max_cert_list(ret, SSL_get_max_cert_list(s));
   2692     SSL_set_read_ahead(ret, SSL_get_read_ahead(s));
   2693     ret->msg_callback = s->msg_callback;
   2694     ret->msg_callback_arg = s->msg_callback_arg;
   2695     SSL_set_verify(ret, SSL_get_verify_mode(s), SSL_get_verify_callback(s));
   2696     SSL_set_verify_depth(ret, SSL_get_verify_depth(s));
   2697     ret->generate_session_id = s->generate_session_id;
   2698 
   2699     SSL_set_info_callback(ret, SSL_get_info_callback(s));
   2700 
   2701     ret->debug = s->debug;
   2702 
   2703     /* copy app data, a little dangerous perhaps */
   2704     if (!CRYPTO_dup_ex_data(CRYPTO_EX_INDEX_SSL, &ret->ex_data, &s->ex_data))
   2705         goto err;
   2706 
   2707     /* setup rbio, and wbio */
   2708     if (s->rbio != NULL) {
   2709         if (!BIO_dup_state(s->rbio, (char *)&ret->rbio))
   2710             goto err;
   2711     }
   2712     if (s->wbio != NULL) {
   2713         if (s->wbio != s->rbio) {
   2714             if (!BIO_dup_state(s->wbio, (char *)&ret->wbio))
   2715                 goto err;
   2716         } else
   2717             ret->wbio = ret->rbio;
   2718     }
   2719     ret->rwstate = s->rwstate;
   2720     ret->in_handshake = s->in_handshake;
   2721     ret->handshake_func = s->handshake_func;
   2722     ret->server = s->server;
   2723     ret->renegotiate = s->renegotiate;
   2724     ret->new_session = s->new_session;
   2725     ret->quiet_shutdown = s->quiet_shutdown;
   2726     ret->shutdown = s->shutdown;
   2727     ret->state = s->state;      /* SSL_dup does not really work at any state,
   2728                                  * though */
   2729     ret->rstate = s->rstate;
   2730     ret->init_num = 0;          /* would have to copy ret->init_buf,
   2731                                  * ret->init_msg, ret->init_num,
   2732                                  * ret->init_off */
   2733     ret->hit = s->hit;
   2734 
   2735     X509_VERIFY_PARAM_inherit(ret->param, s->param);
   2736 
   2737     /* dup the cipher_list and cipher_list_by_id stacks */
   2738     if (s->cipher_list != NULL) {
   2739         if ((ret->cipher_list = sk_SSL_CIPHER_dup(s->cipher_list)) == NULL)
   2740             goto err;
   2741     }
   2742     if (s->cipher_list_by_id != NULL)
   2743         if ((ret->cipher_list_by_id = sk_SSL_CIPHER_dup(s->cipher_list_by_id))
   2744             == NULL)
   2745             goto err;
   2746 
   2747     /* Dup the client_CA list */
   2748     if (s->client_CA != NULL) {
   2749         if ((sk = sk_X509_NAME_dup(s->client_CA)) == NULL)
   2750             goto err;
   2751         ret->client_CA = sk;
   2752         for (i = 0; i < sk_X509_NAME_num(sk); i++) {
   2753             xn = sk_X509_NAME_value(sk, i);
   2754             if (sk_X509_NAME_set(sk, i, X509_NAME_dup(xn)) == NULL) {
   2755                 X509_NAME_free(xn);
   2756                 goto err;
   2757             }
   2758         }
   2759     }
   2760 
   2761     if (0) {
   2762  err:
   2763         if (ret != NULL)
   2764             SSL_free(ret);
   2765         ret = NULL;
   2766     }
   2767     return (ret);
   2768 }
   2769 
   2770 void ssl_clear_cipher_ctx(SSL *s)
   2771 {
   2772     if (s->enc_read_ctx != NULL) {
   2773         EVP_CIPHER_CTX_cleanup(s->enc_read_ctx);
   2774         OPENSSL_free(s->enc_read_ctx);
   2775         s->enc_read_ctx = NULL;
   2776     }
   2777     if (s->enc_write_ctx != NULL) {
   2778         EVP_CIPHER_CTX_cleanup(s->enc_write_ctx);
   2779         OPENSSL_free(s->enc_write_ctx);
   2780         s->enc_write_ctx = NULL;
   2781     }
   2782 #ifndef OPENSSL_NO_COMP
   2783     if (s->expand != NULL) {
   2784         COMP_CTX_free(s->expand);
   2785         s->expand = NULL;
   2786     }
   2787     if (s->compress != NULL) {
   2788         COMP_CTX_free(s->compress);
   2789         s->compress = NULL;
   2790     }
   2791 #endif
   2792 }
   2793 
   2794 /* Fix this function so that it takes an optional type parameter */
   2795 X509 *SSL_get_certificate(const SSL *s)
   2796 {
   2797     if (s->cert != NULL)
   2798         return (s->cert->key->x509);
   2799     else
   2800         return (NULL);
   2801 }
   2802 
   2803 /* Fix this function so that it takes an optional type parameter */
   2804 EVP_PKEY *SSL_get_privatekey(SSL *s)
   2805 {
   2806     if (s->cert != NULL)
   2807         return (s->cert->key->privatekey);
   2808     else
   2809         return (NULL);
   2810 }
   2811 
   2812 const SSL_CIPHER *SSL_get_current_cipher(const SSL *s)
   2813 {
   2814     if ((s->session != NULL) && (s->session->cipher != NULL))
   2815         return (s->session->cipher);
   2816     return (NULL);
   2817 }
   2818 
   2819 #ifdef OPENSSL_NO_COMP
   2820 const void *SSL_get_current_compression(SSL *s)
   2821 {
   2822     return NULL;
   2823 }
   2824 
   2825 const void *SSL_get_current_expansion(SSL *s)
   2826 {
   2827     return NULL;
   2828 }
   2829 #else
   2830 
   2831 const COMP_METHOD *SSL_get_current_compression(SSL *s)
   2832 {
   2833     if (s->compress != NULL)
   2834         return (s->compress->meth);
   2835     return (NULL);
   2836 }
   2837 
   2838 const COMP_METHOD *SSL_get_current_expansion(SSL *s)
   2839 {
   2840     if (s->expand != NULL)
   2841         return (s->expand->meth);
   2842     return (NULL);
   2843 }
   2844 #endif
   2845 
   2846 int ssl_init_wbio_buffer(SSL *s, int push)
   2847 {
   2848     BIO *bbio;
   2849 
   2850     if (s->bbio == NULL) {
   2851         bbio = BIO_new(BIO_f_buffer());
   2852         if (bbio == NULL)
   2853             return (0);
   2854         s->bbio = bbio;
   2855     } else {
   2856         bbio = s->bbio;
   2857         if (s->bbio == s->wbio)
   2858             s->wbio = BIO_pop(s->wbio);
   2859     }
   2860     (void)BIO_reset(bbio);
   2861 /*      if (!BIO_set_write_buffer_size(bbio,16*1024)) */
   2862     if (!BIO_set_read_buffer_size(bbio, 1)) {
   2863         SSLerr(SSL_F_SSL_INIT_WBIO_BUFFER, ERR_R_BUF_LIB);
   2864         return (0);
   2865     }
   2866     if (push) {
   2867         if (s->wbio != bbio)
   2868             s->wbio = BIO_push(bbio, s->wbio);
   2869     } else {
   2870         if (s->wbio == bbio)
   2871             s->wbio = BIO_pop(bbio);
   2872     }
   2873     return (1);
   2874 }
   2875 
   2876 void ssl_free_wbio_buffer(SSL *s)
   2877 {
   2878     if (s->bbio == NULL)
   2879         return;
   2880 
   2881     if (s->bbio == s->wbio) {
   2882         /* remove buffering */
   2883         s->wbio = BIO_pop(s->wbio);
   2884 #ifdef REF_CHECK                /* not the usual REF_CHECK, but this avoids
   2885                                  * adding one more preprocessor symbol */
   2886         assert(s->wbio != NULL);
   2887 #endif
   2888     }
   2889     BIO_free(s->bbio);
   2890     s->bbio = NULL;
   2891 }
   2892 
   2893 void SSL_CTX_set_quiet_shutdown(SSL_CTX *ctx, int mode)
   2894 {
   2895     ctx->quiet_shutdown = mode;
   2896 }
   2897 
   2898 int SSL_CTX_get_quiet_shutdown(const SSL_CTX *ctx)
   2899 {
   2900     return (ctx->quiet_shutdown);
   2901 }
   2902 
   2903 void SSL_set_quiet_shutdown(SSL *s, int mode)
   2904 {
   2905     s->quiet_shutdown = mode;
   2906 }
   2907 
   2908 int SSL_get_quiet_shutdown(const SSL *s)
   2909 {
   2910     return (s->quiet_shutdown);
   2911 }
   2912 
   2913 void SSL_set_shutdown(SSL *s, int mode)
   2914 {
   2915     s->shutdown = mode;
   2916 }
   2917 
   2918 int SSL_get_shutdown(const SSL *s)
   2919 {
   2920     return (s->shutdown);
   2921 }
   2922 
   2923 int SSL_version(const SSL *s)
   2924 {
   2925     return (s->version);
   2926 }
   2927 
   2928 SSL_CTX *SSL_get_SSL_CTX(const SSL *ssl)
   2929 {
   2930     return (ssl->ctx);
   2931 }
   2932 
   2933 SSL_CTX *SSL_set_SSL_CTX(SSL *ssl, SSL_CTX *ctx)
   2934 {
   2935     CERT *ocert = ssl->cert;
   2936     if (ssl->ctx == ctx)
   2937         return ssl->ctx;
   2938 #ifndef OPENSSL_NO_TLSEXT
   2939     if (ctx == NULL)
   2940         ctx = ssl->initial_ctx;
   2941 #endif
   2942     ssl->cert = ssl_cert_dup(ctx->cert);
   2943     if (ocert != NULL) {
   2944         int i;
   2945         /* Copy negotiated digests from original */
   2946         for (i = 0; i < SSL_PKEY_NUM; i++) {
   2947             CERT_PKEY *cpk = ocert->pkeys + i;
   2948             CERT_PKEY *rpk = ssl->cert->pkeys + i;
   2949             rpk->digest = cpk->digest;
   2950         }
   2951         ssl_cert_free(ocert);
   2952     }
   2953 
   2954     /*
   2955      * Program invariant: |sid_ctx| has fixed size (SSL_MAX_SID_CTX_LENGTH),
   2956      * so setter APIs must prevent invalid lengths from entering the system.
   2957      */
   2958     OPENSSL_assert(ssl->sid_ctx_length <= sizeof(ssl->sid_ctx));
   2959 
   2960     /*
   2961      * If the session ID context matches that of the parent SSL_CTX,
   2962      * inherit it from the new SSL_CTX as well. If however the context does
   2963      * not match (i.e., it was set per-ssl with SSL_set_session_id_context),
   2964      * leave it unchanged.
   2965      */
   2966     if ((ssl->ctx != NULL) &&
   2967         (ssl->sid_ctx_length == ssl->ctx->sid_ctx_length) &&
   2968         (memcmp(ssl->sid_ctx, ssl->ctx->sid_ctx, ssl->sid_ctx_length) == 0)) {
   2969         ssl->sid_ctx_length = ctx->sid_ctx_length;
   2970         memcpy(&ssl->sid_ctx, &ctx->sid_ctx, sizeof(ssl->sid_ctx));
   2971     }
   2972 
   2973     CRYPTO_add(&ctx->references, 1, CRYPTO_LOCK_SSL_CTX);
   2974     if (ssl->ctx != NULL)
   2975         SSL_CTX_free(ssl->ctx); /* decrement reference count */
   2976     ssl->ctx = ctx;
   2977 
   2978     return (ssl->ctx);
   2979 }
   2980 
   2981 #ifndef OPENSSL_NO_STDIO
   2982 int SSL_CTX_set_default_verify_paths(SSL_CTX *ctx)
   2983 {
   2984     return (X509_STORE_set_default_paths(ctx->cert_store));
   2985 }
   2986 
   2987 int SSL_CTX_load_verify_locations(SSL_CTX *ctx, const char *CAfile,
   2988                                   const char *CApath)
   2989 {
   2990     return (X509_STORE_load_locations(ctx->cert_store, CAfile, CApath));
   2991 }
   2992 #endif
   2993 
   2994 void SSL_set_info_callback(SSL *ssl,
   2995                            void (*cb) (const SSL *ssl, int type, int val))
   2996 {
   2997     ssl->info_callback = cb;
   2998 }
   2999 
   3000 /*
   3001  * One compiler (Diab DCC) doesn't like argument names in returned function
   3002  * pointer.
   3003  */
   3004 void (*SSL_get_info_callback(const SSL *ssl)) (const SSL * /* ssl */ ,
   3005                                                int /* type */ ,
   3006                                                int /* val */ ) {
   3007     return ssl->info_callback;
   3008 }
   3009 
   3010 int SSL_state(const SSL *ssl)
   3011 {
   3012     return (ssl->state);
   3013 }
   3014 
   3015 void SSL_set_state(SSL *ssl, int state)
   3016 {
   3017     ssl->state = state;
   3018 }
   3019 
   3020 void SSL_set_verify_result(SSL *ssl, long arg)
   3021 {
   3022     ssl->verify_result = arg;
   3023 }
   3024 
   3025 long SSL_get_verify_result(const SSL *ssl)
   3026 {
   3027     return (ssl->verify_result);
   3028 }
   3029 
   3030 int SSL_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,
   3031                          CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func)
   3032 {
   3033     return CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_SSL, argl, argp,
   3034                                    new_func, dup_func, free_func);
   3035 }
   3036 
   3037 int SSL_set_ex_data(SSL *s, int idx, void *arg)
   3038 {
   3039     return (CRYPTO_set_ex_data(&s->ex_data, idx, arg));
   3040 }
   3041 
   3042 void *SSL_get_ex_data(const SSL *s, int idx)
   3043 {
   3044     return (CRYPTO_get_ex_data(&s->ex_data, idx));
   3045 }
   3046 
   3047 int SSL_CTX_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,
   3048                              CRYPTO_EX_dup *dup_func,
   3049                              CRYPTO_EX_free *free_func)
   3050 {
   3051     return CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_SSL_CTX, argl, argp,
   3052                                    new_func, dup_func, free_func);
   3053 }
   3054 
   3055 int SSL_CTX_set_ex_data(SSL_CTX *s, int idx, void *arg)
   3056 {
   3057     return (CRYPTO_set_ex_data(&s->ex_data, idx, arg));
   3058 }
   3059 
   3060 void *SSL_CTX_get_ex_data(const SSL_CTX *s, int idx)
   3061 {
   3062     return (CRYPTO_get_ex_data(&s->ex_data, idx));
   3063 }
   3064 
   3065 int ssl_ok(SSL *s)
   3066 {
   3067     return (1);
   3068 }
   3069 
   3070 X509_STORE *SSL_CTX_get_cert_store(const SSL_CTX *ctx)
   3071 {
   3072     return (ctx->cert_store);
   3073 }
   3074 
   3075 void SSL_CTX_set_cert_store(SSL_CTX *ctx, X509_STORE *store)
   3076 {
   3077     if (ctx->cert_store != NULL)
   3078         X509_STORE_free(ctx->cert_store);
   3079     ctx->cert_store = store;
   3080 }
   3081 
   3082 int SSL_want(const SSL *s)
   3083 {
   3084     return (s->rwstate);
   3085 }
   3086 
   3087 /**
   3088  * \brief Set the callback for generating temporary RSA keys.
   3089  * \param ctx the SSL context.
   3090  * \param cb the callback
   3091  */
   3092 
   3093 #ifndef OPENSSL_NO_RSA
   3094 void SSL_CTX_set_tmp_rsa_callback(SSL_CTX *ctx, RSA *(*cb) (SSL *ssl,
   3095                                                             int is_export,
   3096                                                             int keylength))
   3097 {
   3098     SSL_CTX_callback_ctrl(ctx, SSL_CTRL_SET_TMP_RSA_CB, (void (*)(void))cb);
   3099 }
   3100 
   3101 void SSL_set_tmp_rsa_callback(SSL *ssl, RSA *(*cb) (SSL *ssl,
   3102                                                     int is_export,
   3103                                                     int keylength))
   3104 {
   3105     SSL_callback_ctrl(ssl, SSL_CTRL_SET_TMP_RSA_CB, (void (*)(void))cb);
   3106 }
   3107 #endif
   3108 
   3109 #ifdef DOXYGEN
   3110 /**
   3111  * \brief The RSA temporary key callback function.
   3112  * \param ssl the SSL session.
   3113  * \param is_export \c TRUE if the temp RSA key is for an export ciphersuite.
   3114  * \param keylength if \c is_export is \c TRUE, then \c keylength is the size
   3115  * of the required key in bits.
   3116  * \return the temporary RSA key.
   3117  * \sa SSL_CTX_set_tmp_rsa_callback, SSL_set_tmp_rsa_callback
   3118  */
   3119 
   3120 RSA *cb(SSL *ssl, int is_export, int keylength)
   3121 {
   3122 }
   3123 #endif
   3124 
   3125 /**
   3126  * \brief Set the callback for generating temporary DH keys.
   3127  * \param ctx the SSL context.
   3128  * \param dh the callback
   3129  */
   3130 
   3131 #ifndef OPENSSL_NO_DH
   3132 void SSL_CTX_set_tmp_dh_callback(SSL_CTX *ctx,
   3133                                  DH *(*dh) (SSL *ssl, int is_export,
   3134                                             int keylength))
   3135 {
   3136     SSL_CTX_callback_ctrl(ctx, SSL_CTRL_SET_TMP_DH_CB, (void (*)(void))dh);
   3137 }
   3138 
   3139 void SSL_set_tmp_dh_callback(SSL *ssl, DH *(*dh) (SSL *ssl, int is_export,
   3140                                                   int keylength))
   3141 {
   3142     SSL_callback_ctrl(ssl, SSL_CTRL_SET_TMP_DH_CB, (void (*)(void))dh);
   3143 }
   3144 #endif
   3145 
   3146 #ifndef OPENSSL_NO_ECDH
   3147 void SSL_CTX_set_tmp_ecdh_callback(SSL_CTX *ctx,
   3148                                    EC_KEY *(*ecdh) (SSL *ssl, int is_export,
   3149                                                     int keylength))
   3150 {
   3151     SSL_CTX_callback_ctrl(ctx, SSL_CTRL_SET_TMP_ECDH_CB,
   3152                           (void (*)(void))ecdh);
   3153 }
   3154 
   3155 void SSL_set_tmp_ecdh_callback(SSL *ssl,
   3156                                EC_KEY *(*ecdh) (SSL *ssl, int is_export,
   3157                                                 int keylength))
   3158 {
   3159     SSL_callback_ctrl(ssl, SSL_CTRL_SET_TMP_ECDH_CB, (void (*)(void))ecdh);
   3160 }
   3161 #endif
   3162 
   3163 #ifndef OPENSSL_NO_PSK
   3164 int SSL_CTX_use_psk_identity_hint(SSL_CTX *ctx, const char *identity_hint)
   3165 {
   3166     if (identity_hint != NULL && strlen(identity_hint) > PSK_MAX_IDENTITY_LEN) {
   3167         SSLerr(SSL_F_SSL_CTX_USE_PSK_IDENTITY_HINT,
   3168                SSL_R_DATA_LENGTH_TOO_LONG);
   3169         return 0;
   3170     }
   3171     if (ctx->psk_identity_hint != NULL)
   3172         OPENSSL_free(ctx->psk_identity_hint);
   3173     if (identity_hint != NULL) {
   3174         ctx->psk_identity_hint = BUF_strdup(identity_hint);
   3175         if (ctx->psk_identity_hint == NULL)
   3176             return 0;
   3177     } else
   3178         ctx->psk_identity_hint = NULL;
   3179     return 1;
   3180 }
   3181 
   3182 int SSL_use_psk_identity_hint(SSL *s, const char *identity_hint)
   3183 {
   3184     if (s == NULL)
   3185         return 0;
   3186 
   3187     if (s->session == NULL)
   3188         return 1;               /* session not created yet, ignored */
   3189 
   3190     if (identity_hint != NULL && strlen(identity_hint) > PSK_MAX_IDENTITY_LEN) {
   3191         SSLerr(SSL_F_SSL_USE_PSK_IDENTITY_HINT, SSL_R_DATA_LENGTH_TOO_LONG);
   3192         return 0;
   3193     }
   3194     if (s->session->psk_identity_hint != NULL)
   3195         OPENSSL_free(s->session->psk_identity_hint);
   3196     if (identity_hint != NULL) {
   3197         s->session->psk_identity_hint = BUF_strdup(identity_hint);
   3198         if (s->session->psk_identity_hint == NULL)
   3199             return 0;
   3200     } else
   3201         s->session->psk_identity_hint = NULL;
   3202     return 1;
   3203 }
   3204 
   3205 const char *SSL_get_psk_identity_hint(const SSL *s)
   3206 {
   3207     if (s == NULL || s->session == NULL)
   3208         return NULL;
   3209     return (s->session->psk_identity_hint);
   3210 }
   3211 
   3212 const char *SSL_get_psk_identity(const SSL *s)
   3213 {
   3214     if (s == NULL || s->session == NULL)
   3215         return NULL;
   3216     return (s->session->psk_identity);
   3217 }
   3218 
   3219 void SSL_set_psk_client_callback(SSL *s,
   3220                                  unsigned int (*cb) (SSL *ssl,
   3221                                                      const char *hint,
   3222                                                      char *identity,
   3223                                                      unsigned int
   3224                                                      max_identity_len,
   3225                                                      unsigned char *psk,
   3226                                                      unsigned int
   3227                                                      max_psk_len))
   3228 {
   3229     s->psk_client_callback = cb;
   3230 }
   3231 
   3232 void SSL_CTX_set_psk_client_callback(SSL_CTX *ctx,
   3233                                      unsigned int (*cb) (SSL *ssl,
   3234                                                          const char *hint,
   3235                                                          char *identity,
   3236                                                          unsigned int
   3237                                                          max_identity_len,
   3238                                                          unsigned char *psk,
   3239                                                          unsigned int
   3240                                                          max_psk_len))
   3241 {
   3242     ctx->psk_client_callback = cb;
   3243 }
   3244 
   3245 void SSL_set_psk_server_callback(SSL *s,
   3246                                  unsigned int (*cb) (SSL *ssl,
   3247                                                      const char *identity,
   3248                                                      unsigned char *psk,
   3249                                                      unsigned int
   3250                                                      max_psk_len))
   3251 {
   3252     s->psk_server_callback = cb;
   3253 }
   3254 
   3255 void SSL_CTX_set_psk_server_callback(SSL_CTX *ctx,
   3256                                      unsigned int (*cb) (SSL *ssl,
   3257                                                          const char *identity,
   3258                                                          unsigned char *psk,
   3259                                                          unsigned int
   3260                                                          max_psk_len))
   3261 {
   3262     ctx->psk_server_callback = cb;
   3263 }
   3264 #endif
   3265 
   3266 void SSL_CTX_set_msg_callback(SSL_CTX *ctx,
   3267                               void (*cb) (int write_p, int version,
   3268                                           int content_type, const void *buf,
   3269                                           size_t len, SSL *ssl, void *arg))
   3270 {
   3271     SSL_CTX_callback_ctrl(ctx, SSL_CTRL_SET_MSG_CALLBACK, (void (*)(void))cb);
   3272 }
   3273 
   3274 void SSL_set_msg_callback(SSL *ssl,
   3275                           void (*cb) (int write_p, int version,
   3276                                       int content_type, const void *buf,
   3277                                       size_t len, SSL *ssl, void *arg))
   3278 {
   3279     SSL_callback_ctrl(ssl, SSL_CTRL_SET_MSG_CALLBACK, (void (*)(void))cb);
   3280 }
   3281 
   3282 /*
   3283  * Allocates new EVP_MD_CTX and sets pointer to it into given pointer
   3284  * vairable, freeing EVP_MD_CTX previously stored in that variable, if any.
   3285  * If EVP_MD pointer is passed, initializes ctx with this md Returns newly
   3286  * allocated ctx;
   3287  */
   3288 
   3289 EVP_MD_CTX *ssl_replace_hash(EVP_MD_CTX **hash, const EVP_MD *md)
   3290 {
   3291     ssl_clear_hash_ctx(hash);
   3292     *hash = EVP_MD_CTX_create();
   3293     if (*hash == NULL || (md && EVP_DigestInit_ex(*hash, md, NULL) <= 0)) {
   3294         EVP_MD_CTX_destroy(*hash);
   3295         *hash = NULL;
   3296         return NULL;
   3297     }
   3298     return *hash;
   3299 }
   3300 
   3301 void ssl_clear_hash_ctx(EVP_MD_CTX **hash)
   3302 {
   3303 
   3304     if (*hash)
   3305         EVP_MD_CTX_destroy(*hash);
   3306     *hash = NULL;
   3307 }
   3308 
   3309 void SSL_set_debug(SSL *s, int debug)
   3310 {
   3311     s->debug = debug;
   3312 }
   3313 
   3314 int SSL_cache_hit(SSL *s)
   3315 {
   3316     return s->hit;
   3317 }
   3318 
   3319 #if defined(_WINDLL) && defined(OPENSSL_SYS_WIN16)
   3320 # include "../crypto/bio/bss_file.c"
   3321 #endif
   3322 
   3323 IMPLEMENT_STACK_OF(SSL_CIPHER)
   3324 IMPLEMENT_STACK_OF(SSL_COMP)
   3325 IMPLEMENT_OBJ_BSEARCH_GLOBAL_CMP_FN(SSL_CIPHER, SSL_CIPHER, ssl_cipher_id);
   3326