Home | History | Annotate | Line # | Download | only in ssl
ssl_lib.c revision 1.4
      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 
    311     if (ctx->cert != NULL) {
    312         /*
    313          * Earlier library versions used to copy the pointer to the CERT, not
    314          * its contents; only when setting new parameters for the per-SSL
    315          * copy, ssl_cert_new would be called (and the direct reference to
    316          * the per-SSL_CTX settings would be lost, but those still were
    317          * indirectly accessed for various purposes, and for that reason they
    318          * used to be known as s->ctx->default_cert). Now we don't look at the
    319          * SSL_CTX's CERT after having duplicated it once.
    320          */
    321 
    322         s->cert = ssl_cert_dup(ctx->cert);
    323         if (s->cert == NULL)
    324             goto err;
    325     } else
    326         s->cert = NULL;         /* Cannot really happen (see SSL_CTX_new) */
    327 
    328     s->read_ahead = ctx->read_ahead;
    329     s->msg_callback = ctx->msg_callback;
    330     s->msg_callback_arg = ctx->msg_callback_arg;
    331     s->verify_mode = ctx->verify_mode;
    332 #if 0
    333     s->verify_depth = ctx->verify_depth;
    334 #endif
    335     s->sid_ctx_length = ctx->sid_ctx_length;
    336     OPENSSL_assert(s->sid_ctx_length <= sizeof s->sid_ctx);
    337     memcpy(&s->sid_ctx, &ctx->sid_ctx, sizeof(s->sid_ctx));
    338     s->verify_callback = ctx->default_verify_callback;
    339     s->generate_session_id = ctx->generate_session_id;
    340 
    341     s->param = X509_VERIFY_PARAM_new();
    342     if (!s->param)
    343         goto err;
    344     X509_VERIFY_PARAM_inherit(s->param, ctx->param);
    345 #if 0
    346     s->purpose = ctx->purpose;
    347     s->trust = ctx->trust;
    348 #endif
    349     s->quiet_shutdown = ctx->quiet_shutdown;
    350     s->max_send_fragment = ctx->max_send_fragment;
    351 
    352     CRYPTO_add(&ctx->references, 1, CRYPTO_LOCK_SSL_CTX);
    353     s->ctx = ctx;
    354 #ifndef OPENSSL_NO_TLSEXT
    355     s->tlsext_debug_cb = 0;
    356     s->tlsext_debug_arg = NULL;
    357     s->tlsext_ticket_expected = 0;
    358     s->tlsext_status_type = -1;
    359     s->tlsext_status_expected = 0;
    360     s->tlsext_ocsp_ids = NULL;
    361     s->tlsext_ocsp_exts = NULL;
    362     s->tlsext_ocsp_resp = NULL;
    363     s->tlsext_ocsp_resplen = -1;
    364     CRYPTO_add(&ctx->references, 1, CRYPTO_LOCK_SSL_CTX);
    365     s->initial_ctx = ctx;
    366 # ifndef OPENSSL_NO_NEXTPROTONEG
    367     s->next_proto_negotiated = NULL;
    368 # endif
    369 #endif
    370 
    371     s->verify_result = X509_V_OK;
    372 
    373     s->method = ctx->method;
    374 
    375     if (!s->method->ssl_new(s))
    376         goto err;
    377 
    378     s->references = 1;
    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     else {
   1446         sk = *skp;
   1447         sk_SSL_CIPHER_zero(sk);
   1448     }
   1449 
   1450     for (i = 0; i < num; i += n) {
   1451         /* Check for TLS_EMPTY_RENEGOTIATION_INFO_SCSV */
   1452         if (s->s3 && (n != 3 || !p[0]) &&
   1453             (p[n - 2] == ((SSL3_CK_SCSV >> 8) & 0xff)) &&
   1454             (p[n - 1] == (SSL3_CK_SCSV & 0xff))) {
   1455             /* SCSV fatal if renegotiating */
   1456             if (s->renegotiate) {
   1457                 SSLerr(SSL_F_SSL_BYTES_TO_CIPHER_LIST,
   1458                        SSL_R_SCSV_RECEIVED_WHEN_RENEGOTIATING);
   1459                 ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_HANDSHAKE_FAILURE);
   1460                 goto err;
   1461             }
   1462             s->s3->send_connection_binding = 1;
   1463             p += n;
   1464 #ifdef OPENSSL_RI_DEBUG
   1465             fprintf(stderr, "SCSV received by server\n");
   1466 #endif
   1467             continue;
   1468         }
   1469 
   1470         /* Check for TLS_FALLBACK_SCSV */
   1471         if ((n != 3 || !p[0]) &&
   1472             (p[n - 2] == ((SSL3_CK_FALLBACK_SCSV >> 8) & 0xff)) &&
   1473             (p[n - 1] == (SSL3_CK_FALLBACK_SCSV & 0xff))) {
   1474             /*
   1475              * The SCSV indicates that the client previously tried a higher
   1476              * version. Fail if the current version is an unexpected
   1477              * downgrade.
   1478              */
   1479             if (!SSL_ctrl(s, SSL_CTRL_CHECK_PROTO_VERSION, 0, NULL)) {
   1480                 SSLerr(SSL_F_SSL_BYTES_TO_CIPHER_LIST,
   1481                        SSL_R_INAPPROPRIATE_FALLBACK);
   1482                 if (s->s3)
   1483                     ssl3_send_alert(s, SSL3_AL_FATAL,
   1484                                     SSL_AD_INAPPROPRIATE_FALLBACK);
   1485                 goto err;
   1486             }
   1487             p += n;
   1488             continue;
   1489         }
   1490 
   1491         c = ssl_get_cipher_by_char(s, p);
   1492         p += n;
   1493         if (c != NULL) {
   1494             if (!sk_SSL_CIPHER_push(sk, c)) {
   1495                 SSLerr(SSL_F_SSL_BYTES_TO_CIPHER_LIST, ERR_R_MALLOC_FAILURE);
   1496                 goto err;
   1497             }
   1498         }
   1499     }
   1500 
   1501     if (skp != NULL)
   1502         *skp = sk;
   1503     return (sk);
   1504  err:
   1505     if ((skp == NULL) || (*skp == NULL))
   1506         sk_SSL_CIPHER_free(sk);
   1507     return (NULL);
   1508 }
   1509 
   1510 #ifndef OPENSSL_NO_TLSEXT
   1511 /** return a servername extension value if provided in Client Hello, or NULL.
   1512  * So far, only host_name types are defined (RFC 3546).
   1513  */
   1514 
   1515 const char *SSL_get_servername(const SSL *s, const int type)
   1516 {
   1517     if (type != TLSEXT_NAMETYPE_host_name)
   1518         return NULL;
   1519 
   1520     return s->session && !s->tlsext_hostname ?
   1521         s->session->tlsext_hostname : s->tlsext_hostname;
   1522 }
   1523 
   1524 int SSL_get_servername_type(const SSL *s)
   1525 {
   1526     if (s->session
   1527         && (!s->tlsext_hostname ? s->session->
   1528             tlsext_hostname : s->tlsext_hostname))
   1529         return TLSEXT_NAMETYPE_host_name;
   1530     return -1;
   1531 }
   1532 
   1533 # ifndef OPENSSL_NO_NEXTPROTONEG
   1534 /*
   1535  * SSL_select_next_proto implements the standard protocol selection. It is
   1536  * expected that this function is called from the callback set by
   1537  * SSL_CTX_set_next_proto_select_cb. The protocol data is assumed to be a
   1538  * vector of 8-bit, length prefixed byte strings. The length byte itself is
   1539  * not included in the length. A byte string of length 0 is invalid. No byte
   1540  * string may be truncated. The current, but experimental algorithm for
   1541  * selecting the protocol is: 1) If the server doesn't support NPN then this
   1542  * is indicated to the callback. In this case, the client application has to
   1543  * abort the connection or have a default application level protocol. 2) If
   1544  * the server supports NPN, but advertises an empty list then the client
   1545  * selects the first protcol in its list, but indicates via the API that this
   1546  * fallback case was enacted. 3) Otherwise, the client finds the first
   1547  * protocol in the server's list that it supports and selects this protocol.
   1548  * This is because it's assumed that the server has better information about
   1549  * which protocol a client should use. 4) If the client doesn't support any
   1550  * of the server's advertised protocols, then this is treated the same as
   1551  * case 2. It returns either OPENSSL_NPN_NEGOTIATED if a common protocol was
   1552  * found, or OPENSSL_NPN_NO_OVERLAP if the fallback case was reached.
   1553  */
   1554 int SSL_select_next_proto(unsigned char **out, unsigned char *outlen,
   1555                           const unsigned char *server,
   1556                           unsigned int server_len,
   1557                           const unsigned char *client,
   1558                           unsigned int client_len)
   1559 {
   1560     unsigned int i, j;
   1561     const unsigned char *result;
   1562     int status = OPENSSL_NPN_UNSUPPORTED;
   1563 
   1564     /*
   1565      * For each protocol in server preference order, see if we support it.
   1566      */
   1567     for (i = 0; i < server_len;) {
   1568         for (j = 0; j < client_len;) {
   1569             if (server[i] == client[j] &&
   1570                 memcmp(&server[i + 1], &client[j + 1], server[i]) == 0) {
   1571                 /* We found a match */
   1572                 result = &server[i];
   1573                 status = OPENSSL_NPN_NEGOTIATED;
   1574                 goto found;
   1575             }
   1576             j += client[j];
   1577             j++;
   1578         }
   1579         i += server[i];
   1580         i++;
   1581     }
   1582 
   1583     /* There's no overlap between our protocols and the server's list. */
   1584     result = client;
   1585     status = OPENSSL_NPN_NO_OVERLAP;
   1586 
   1587  found:
   1588     *out = (unsigned char *)result + 1;
   1589     *outlen = result[0];
   1590     return status;
   1591 }
   1592 
   1593 /*
   1594  * SSL_get0_next_proto_negotiated sets *data and *len to point to the
   1595  * client's requested protocol for this connection and returns 0. If the
   1596  * client didn't request any protocol, then *data is set to NULL. Note that
   1597  * the client can request any protocol it chooses. The value returned from
   1598  * this function need not be a member of the list of supported protocols
   1599  * provided by the callback.
   1600  */
   1601 void SSL_get0_next_proto_negotiated(const SSL *s, const unsigned char **data,
   1602                                     unsigned *len)
   1603 {
   1604     *data = s->next_proto_negotiated;
   1605     if (!*data) {
   1606         *len = 0;
   1607     } else {
   1608         *len = s->next_proto_negotiated_len;
   1609     }
   1610 }
   1611 
   1612 /*
   1613  * SSL_CTX_set_next_protos_advertised_cb sets a callback that is called when
   1614  * a TLS server needs a list of supported protocols for Next Protocol
   1615  * Negotiation. The returned list must be in wire format.  The list is
   1616  * returned by setting |out| to point to it and |outlen| to its length. This
   1617  * memory will not be modified, but one should assume that the SSL* keeps a
   1618  * reference to it. The callback should return SSL_TLSEXT_ERR_OK if it
   1619  * wishes to advertise. Otherwise, no such extension will be included in the
   1620  * ServerHello.
   1621  */
   1622 void SSL_CTX_set_next_protos_advertised_cb(SSL_CTX *ctx,
   1623                                            int (*cb) (SSL *ssl,
   1624                                                       const unsigned char
   1625                                                       **out,
   1626                                                       unsigned int *outlen,
   1627                                                       void *arg), void *arg)
   1628 {
   1629     ctx->next_protos_advertised_cb = cb;
   1630     ctx->next_protos_advertised_cb_arg = arg;
   1631 }
   1632 
   1633 /*
   1634  * SSL_CTX_set_next_proto_select_cb sets a callback that is called when a
   1635  * client needs to select a protocol from the server's provided list. |out|
   1636  * must be set to point to the selected protocol (which may be within |in|).
   1637  * The length of the protocol name must be written into |outlen|. The
   1638  * server's advertised protocols are provided in |in| and |inlen|. The
   1639  * callback can assume that |in| is syntactically valid. The client must
   1640  * select a protocol. It is fatal to the connection if this callback returns
   1641  * a value other than SSL_TLSEXT_ERR_OK.
   1642  */
   1643 void SSL_CTX_set_next_proto_select_cb(SSL_CTX *ctx,
   1644                                       int (*cb) (SSL *s, unsigned char **out,
   1645                                                  unsigned char *outlen,
   1646                                                  const unsigned char *in,
   1647                                                  unsigned int inlen,
   1648                                                  void *arg), void *arg)
   1649 {
   1650     ctx->next_proto_select_cb = cb;
   1651     ctx->next_proto_select_cb_arg = arg;
   1652 }
   1653 # endif
   1654 #endif
   1655 
   1656 int SSL_export_keying_material(SSL *s, unsigned char *out, size_t olen,
   1657                                const char *label, size_t llen,
   1658                                const unsigned char *p, size_t plen,
   1659                                int use_context)
   1660 {
   1661     if (s->version < TLS1_VERSION)
   1662         return -1;
   1663 
   1664     return s->method->ssl3_enc->export_keying_material(s, out, olen, label,
   1665                                                        llen, p, plen,
   1666                                                        use_context);
   1667 }
   1668 
   1669 static unsigned long ssl_session_hash(const SSL_SESSION *a)
   1670 {
   1671     unsigned long l;
   1672 
   1673     l = (unsigned long)
   1674         ((unsigned int)a->session_id[0]) |
   1675         ((unsigned int)a->session_id[1] << 8L) |
   1676         ((unsigned long)a->session_id[2] << 16L) |
   1677         ((unsigned long)a->session_id[3] << 24L);
   1678     return (l);
   1679 }
   1680 
   1681 /*
   1682  * NB: If this function (or indeed the hash function which uses a sort of
   1683  * coarser function than this one) is changed, ensure
   1684  * SSL_CTX_has_matching_session_id() is checked accordingly. It relies on
   1685  * being able to construct an SSL_SESSION that will collide with any existing
   1686  * session with a matching session ID.
   1687  */
   1688 static int ssl_session_cmp(const SSL_SESSION *a, const SSL_SESSION *b)
   1689 {
   1690     if (a->ssl_version != b->ssl_version)
   1691         return (1);
   1692     if (a->session_id_length != b->session_id_length)
   1693         return (1);
   1694     return (memcmp(a->session_id, b->session_id, a->session_id_length));
   1695 }
   1696 
   1697 /*
   1698  * These wrapper functions should remain rather than redeclaring
   1699  * SSL_SESSION_hash and SSL_SESSION_cmp for void* types and casting each
   1700  * variable. The reason is that the functions aren't static, they're exposed
   1701  * via ssl.h.
   1702  */
   1703 static IMPLEMENT_LHASH_HASH_FN(ssl_session, SSL_SESSION)
   1704 static IMPLEMENT_LHASH_COMP_FN(ssl_session, SSL_SESSION)
   1705 
   1706 SSL_CTX *SSL_CTX_new(const SSL_METHOD *meth)
   1707 {
   1708     SSL_CTX *ret = NULL;
   1709 
   1710     if (meth == NULL) {
   1711         SSLerr(SSL_F_SSL_CTX_NEW, SSL_R_NULL_SSL_METHOD_PASSED);
   1712         return (NULL);
   1713     }
   1714 #ifdef OPENSSL_FIPS
   1715     if (FIPS_mode() && (meth->version < TLS1_VERSION)) {
   1716         SSLerr(SSL_F_SSL_CTX_NEW, SSL_R_ONLY_TLS_ALLOWED_IN_FIPS_MODE);
   1717         return NULL;
   1718     }
   1719 #endif
   1720 
   1721     if (SSL_get_ex_data_X509_STORE_CTX_idx() < 0) {
   1722         SSLerr(SSL_F_SSL_CTX_NEW, SSL_R_X509_VERIFICATION_SETUP_PROBLEMS);
   1723         goto err;
   1724     }
   1725     ret = (SSL_CTX *)OPENSSL_malloc(sizeof(SSL_CTX));
   1726     if (ret == NULL)
   1727         goto err;
   1728 
   1729     memset(ret, 0, sizeof(SSL_CTX));
   1730 
   1731     ret->method = meth;
   1732 
   1733     ret->cert_store = NULL;
   1734     ret->session_cache_mode = SSL_SESS_CACHE_SERVER;
   1735     ret->session_cache_size = SSL_SESSION_CACHE_MAX_SIZE_DEFAULT;
   1736     ret->session_cache_head = NULL;
   1737     ret->session_cache_tail = NULL;
   1738 
   1739     /* We take the system default */
   1740     ret->session_timeout = meth->get_timeout();
   1741 
   1742     ret->new_session_cb = 0;
   1743     ret->remove_session_cb = 0;
   1744     ret->get_session_cb = 0;
   1745     ret->generate_session_id = 0;
   1746 
   1747     memset((char *)&ret->stats, 0, sizeof(ret->stats));
   1748 
   1749     ret->references = 1;
   1750     ret->quiet_shutdown = 0;
   1751 
   1752 /*  ret->cipher=NULL;*/
   1753 /*-
   1754     ret->s2->challenge=NULL;
   1755     ret->master_key=NULL;
   1756     ret->key_arg=NULL;
   1757     ret->s2->conn_id=NULL; */
   1758 
   1759     ret->info_callback = NULL;
   1760 
   1761     ret->app_verify_callback = 0;
   1762     ret->app_verify_arg = NULL;
   1763 
   1764     ret->max_cert_list = SSL_MAX_CERT_LIST_DEFAULT;
   1765     ret->read_ahead = 0;
   1766     ret->msg_callback = 0;
   1767     ret->msg_callback_arg = NULL;
   1768     ret->verify_mode = SSL_VERIFY_NONE;
   1769 #if 0
   1770     ret->verify_depth = -1;     /* Don't impose a limit (but x509_lu.c does) */
   1771 #endif
   1772     ret->sid_ctx_length = 0;
   1773     ret->default_verify_callback = NULL;
   1774     if ((ret->cert = ssl_cert_new()) == NULL)
   1775         goto err;
   1776 
   1777     ret->default_passwd_callback = 0;
   1778     ret->default_passwd_callback_userdata = NULL;
   1779     ret->client_cert_cb = 0;
   1780     ret->app_gen_cookie_cb = 0;
   1781     ret->app_verify_cookie_cb = 0;
   1782 
   1783     ret->sessions = lh_SSL_SESSION_new();
   1784     if (ret->sessions == NULL)
   1785         goto err;
   1786     ret->cert_store = X509_STORE_new();
   1787     if (ret->cert_store == NULL)
   1788         goto err;
   1789 
   1790     ssl_create_cipher_list(ret->method,
   1791                            &ret->cipher_list, &ret->cipher_list_by_id,
   1792                            meth->version ==
   1793                            SSL2_VERSION ? "SSLv2" : SSL_DEFAULT_CIPHER_LIST);
   1794     if (ret->cipher_list == NULL || sk_SSL_CIPHER_num(ret->cipher_list) <= 0) {
   1795         SSLerr(SSL_F_SSL_CTX_NEW, SSL_R_LIBRARY_HAS_NO_CIPHERS);
   1796         goto err2;
   1797     }
   1798 
   1799     ret->param = X509_VERIFY_PARAM_new();
   1800     if (!ret->param)
   1801         goto err;
   1802 
   1803     if ((ret->rsa_md5 = EVP_get_digestbyname("ssl2-md5")) == NULL) {
   1804         SSLerr(SSL_F_SSL_CTX_NEW, SSL_R_UNABLE_TO_LOAD_SSL2_MD5_ROUTINES);
   1805         goto err2;
   1806     }
   1807     if ((ret->md5 = EVP_get_digestbyname("ssl3-md5")) == NULL) {
   1808         SSLerr(SSL_F_SSL_CTX_NEW, SSL_R_UNABLE_TO_LOAD_SSL3_MD5_ROUTINES);
   1809         goto err2;
   1810     }
   1811     if ((ret->sha1 = EVP_get_digestbyname("ssl3-sha1")) == NULL) {
   1812         SSLerr(SSL_F_SSL_CTX_NEW, SSL_R_UNABLE_TO_LOAD_SSL3_SHA1_ROUTINES);
   1813         goto err2;
   1814     }
   1815 
   1816     if ((ret->client_CA = sk_X509_NAME_new_null()) == NULL)
   1817         goto err;
   1818 
   1819     CRYPTO_new_ex_data(CRYPTO_EX_INDEX_SSL_CTX, ret, &ret->ex_data);
   1820 
   1821     ret->extra_certs = NULL;
   1822     /* No compression for DTLS */
   1823     if (meth->version != DTLS1_VERSION)
   1824         ret->comp_methods = SSL_COMP_get_compression_methods();
   1825 
   1826     ret->max_send_fragment = SSL3_RT_MAX_PLAIN_LENGTH;
   1827 
   1828 #ifndef OPENSSL_NO_TLSEXT
   1829     ret->tlsext_servername_callback = 0;
   1830     ret->tlsext_servername_arg = NULL;
   1831     /* Setup RFC4507 ticket keys */
   1832     if ((RAND_pseudo_bytes(ret->tlsext_tick_key_name, 16) <= 0)
   1833         || (RAND_bytes(ret->tlsext_tick_hmac_key, 16) <= 0)
   1834         || (RAND_bytes(ret->tlsext_tick_aes_key, 16) <= 0))
   1835         ret->options |= SSL_OP_NO_TICKET;
   1836 
   1837     ret->tlsext_status_cb = 0;
   1838     ret->tlsext_status_arg = NULL;
   1839 
   1840 # ifndef OPENSSL_NO_NEXTPROTONEG
   1841     ret->next_protos_advertised_cb = 0;
   1842     ret->next_proto_select_cb = 0;
   1843 # endif
   1844 #endif
   1845 #ifndef OPENSSL_NO_PSK
   1846     ret->psk_identity_hint = NULL;
   1847     ret->psk_client_callback = NULL;
   1848     ret->psk_server_callback = NULL;
   1849 #endif
   1850 #ifndef OPENSSL_NO_SRP
   1851     SSL_CTX_SRP_CTX_init(ret);
   1852 #endif
   1853 #ifndef OPENSSL_NO_BUF_FREELISTS
   1854     ret->freelist_max_len = SSL_MAX_BUF_FREELIST_LEN_DEFAULT;
   1855     ret->rbuf_freelist = OPENSSL_malloc(sizeof(SSL3_BUF_FREELIST));
   1856     if (!ret->rbuf_freelist)
   1857         goto err;
   1858     ret->rbuf_freelist->chunklen = 0;
   1859     ret->rbuf_freelist->len = 0;
   1860     ret->rbuf_freelist->head = NULL;
   1861     ret->wbuf_freelist = OPENSSL_malloc(sizeof(SSL3_BUF_FREELIST));
   1862     if (!ret->wbuf_freelist) {
   1863         OPENSSL_free(ret->rbuf_freelist);
   1864         goto err;
   1865     }
   1866     ret->wbuf_freelist->chunklen = 0;
   1867     ret->wbuf_freelist->len = 0;
   1868     ret->wbuf_freelist->head = NULL;
   1869 #endif
   1870 #ifndef OPENSSL_NO_ENGINE
   1871     ret->client_cert_engine = NULL;
   1872 # ifdef OPENSSL_SSL_CLIENT_ENGINE_AUTO
   1873 #  define eng_strx(x)     #x
   1874 #  define eng_str(x)      eng_strx(x)
   1875     /* Use specific client engine automatically... ignore errors */
   1876     {
   1877         ENGINE *eng;
   1878         eng = ENGINE_by_id(eng_str(OPENSSL_SSL_CLIENT_ENGINE_AUTO));
   1879         if (!eng) {
   1880             ERR_clear_error();
   1881             ENGINE_load_builtin_engines();
   1882             eng = ENGINE_by_id(eng_str(OPENSSL_SSL_CLIENT_ENGINE_AUTO));
   1883         }
   1884         if (!eng || !SSL_CTX_set_client_cert_engine(ret, eng))
   1885             ERR_clear_error();
   1886     }
   1887 # endif
   1888 #endif
   1889     /*
   1890      * Default is to connect to non-RI servers. When RI is more widely
   1891      * deployed might change this.
   1892      */
   1893     ret->options |= SSL_OP_LEGACY_SERVER_CONNECT;
   1894 
   1895     return (ret);
   1896  err:
   1897     SSLerr(SSL_F_SSL_CTX_NEW, ERR_R_MALLOC_FAILURE);
   1898  err2:
   1899     if (ret != NULL)
   1900         SSL_CTX_free(ret);
   1901     return (NULL);
   1902 }
   1903 
   1904 #if 0
   1905 static void SSL_COMP_free(SSL_COMP *comp)
   1906 {
   1907     OPENSSL_free(comp);
   1908 }
   1909 #endif
   1910 
   1911 #ifndef OPENSSL_NO_BUF_FREELISTS
   1912 static void ssl_buf_freelist_free(SSL3_BUF_FREELIST *list)
   1913 {
   1914     SSL3_BUF_FREELIST_ENTRY *ent, *next;
   1915     for (ent = list->head; ent; ent = next) {
   1916         next = ent->next;
   1917         OPENSSL_free(ent);
   1918     }
   1919     OPENSSL_free(list);
   1920 }
   1921 #endif
   1922 
   1923 void SSL_CTX_free(SSL_CTX *a)
   1924 {
   1925     int i;
   1926 
   1927     if (a == NULL)
   1928         return;
   1929 
   1930     i = CRYPTO_add(&a->references, -1, CRYPTO_LOCK_SSL_CTX);
   1931 #ifdef REF_PRINT
   1932     REF_PRINT("SSL_CTX", a);
   1933 #endif
   1934     if (i > 0)
   1935         return;
   1936 #ifdef REF_CHECK
   1937     if (i < 0) {
   1938         fprintf(stderr, "SSL_CTX_free, bad reference count\n");
   1939         abort();                /* ok */
   1940     }
   1941 #endif
   1942 
   1943     if (a->param)
   1944         X509_VERIFY_PARAM_free(a->param);
   1945 
   1946     /*
   1947      * Free internal session cache. However: the remove_cb() may reference
   1948      * the ex_data of SSL_CTX, thus the ex_data store can only be removed
   1949      * after the sessions were flushed.
   1950      * As the ex_data handling routines might also touch the session cache,
   1951      * the most secure solution seems to be: empty (flush) the cache, then
   1952      * free ex_data, then finally free the cache.
   1953      * (See ticket [openssl.org #212].)
   1954      */
   1955     if (a->sessions != NULL)
   1956         SSL_CTX_flush_sessions(a, 0);
   1957 
   1958     CRYPTO_free_ex_data(CRYPTO_EX_INDEX_SSL_CTX, a, &a->ex_data);
   1959 
   1960     if (a->sessions != NULL)
   1961         lh_SSL_SESSION_free(a->sessions);
   1962 
   1963     if (a->cert_store != NULL)
   1964         X509_STORE_free(a->cert_store);
   1965     if (a->cipher_list != NULL)
   1966         sk_SSL_CIPHER_free(a->cipher_list);
   1967     if (a->cipher_list_by_id != NULL)
   1968         sk_SSL_CIPHER_free(a->cipher_list_by_id);
   1969     if (a->cert != NULL)
   1970         ssl_cert_free(a->cert);
   1971     if (a->client_CA != NULL)
   1972         sk_X509_NAME_pop_free(a->client_CA, X509_NAME_free);
   1973     if (a->extra_certs != NULL)
   1974         sk_X509_pop_free(a->extra_certs, X509_free);
   1975 #if 0                           /* This should never be done, since it
   1976                                  * removes a global database */
   1977     if (a->comp_methods != NULL)
   1978         sk_SSL_COMP_pop_free(a->comp_methods, SSL_COMP_free);
   1979 #else
   1980     a->comp_methods = NULL;
   1981 #endif
   1982 
   1983 #ifndef OPENSSL_NO_SRTP
   1984     if (a->srtp_profiles)
   1985         sk_SRTP_PROTECTION_PROFILE_free(a->srtp_profiles);
   1986 #endif
   1987 
   1988 #ifndef OPENSSL_NO_PSK
   1989     if (a->psk_identity_hint)
   1990         OPENSSL_free(a->psk_identity_hint);
   1991 #endif
   1992 #ifndef OPENSSL_NO_SRP
   1993     SSL_CTX_SRP_CTX_free(a);
   1994 #endif
   1995 #ifndef OPENSSL_NO_ENGINE
   1996     if (a->client_cert_engine)
   1997         ENGINE_finish(a->client_cert_engine);
   1998 #endif
   1999 
   2000 #ifndef OPENSSL_NO_BUF_FREELISTS
   2001     if (a->wbuf_freelist)
   2002         ssl_buf_freelist_free(a->wbuf_freelist);
   2003     if (a->rbuf_freelist)
   2004         ssl_buf_freelist_free(a->rbuf_freelist);
   2005 #endif
   2006 
   2007     OPENSSL_free(a);
   2008 }
   2009 
   2010 void SSL_CTX_set_default_passwd_cb(SSL_CTX *ctx, pem_password_cb *cb)
   2011 {
   2012     ctx->default_passwd_callback = cb;
   2013 }
   2014 
   2015 void SSL_CTX_set_default_passwd_cb_userdata(SSL_CTX *ctx, void *u)
   2016 {
   2017     ctx->default_passwd_callback_userdata = u;
   2018 }
   2019 
   2020 void SSL_CTX_set_cert_verify_callback(SSL_CTX *ctx,
   2021                                       int (*cb) (X509_STORE_CTX *, void *),
   2022                                       void *arg)
   2023 {
   2024     ctx->app_verify_callback = cb;
   2025     ctx->app_verify_arg = arg;
   2026 }
   2027 
   2028 void SSL_CTX_set_verify(SSL_CTX *ctx, int mode,
   2029                         int (*cb) (int, X509_STORE_CTX *))
   2030 {
   2031     ctx->verify_mode = mode;
   2032     ctx->default_verify_callback = cb;
   2033 }
   2034 
   2035 void SSL_CTX_set_verify_depth(SSL_CTX *ctx, int depth)
   2036 {
   2037     X509_VERIFY_PARAM_set_depth(ctx->param, depth);
   2038 }
   2039 
   2040 void ssl_set_cert_masks(CERT *c, const SSL_CIPHER *cipher)
   2041 {
   2042     CERT_PKEY *cpk;
   2043     int rsa_enc, rsa_tmp, rsa_sign, dh_tmp, dh_rsa, dh_dsa, dsa_sign;
   2044     int rsa_enc_export, dh_rsa_export, dh_dsa_export;
   2045     int rsa_tmp_export, dh_tmp_export, kl;
   2046     unsigned long mask_k, mask_a, emask_k, emask_a;
   2047 #ifndef OPENSSL_NO_ECDSA
   2048     int have_ecc_cert, ecdsa_ok, ecc_pkey_size;
   2049 #endif
   2050 #ifndef OPENSSL_NO_ECDH
   2051     int have_ecdh_tmp, ecdh_ok;
   2052 #endif
   2053 #ifndef OPENSSL_NO_EC
   2054     X509 *x = NULL;
   2055     EVP_PKEY *ecc_pkey = NULL;
   2056     int signature_nid = 0, pk_nid = 0, md_nid = 0;
   2057 #endif
   2058     if (c == NULL)
   2059         return;
   2060 
   2061     kl = SSL_C_EXPORT_PKEYLENGTH(cipher);
   2062 
   2063 #ifndef OPENSSL_NO_RSA
   2064     rsa_tmp = (c->rsa_tmp != NULL || c->rsa_tmp_cb != NULL);
   2065     rsa_tmp_export = (c->rsa_tmp_cb != NULL ||
   2066                       (rsa_tmp && RSA_size(c->rsa_tmp) * 8 <= kl));
   2067 #else
   2068     rsa_tmp = rsa_tmp_export = 0;
   2069 #endif
   2070 #ifndef OPENSSL_NO_DH
   2071     dh_tmp = (c->dh_tmp != NULL || c->dh_tmp_cb != NULL);
   2072     dh_tmp_export = (c->dh_tmp_cb != NULL ||
   2073                      (dh_tmp && DH_size(c->dh_tmp) * 8 <= kl));
   2074 #else
   2075     dh_tmp = dh_tmp_export = 0;
   2076 #endif
   2077 
   2078 #ifndef OPENSSL_NO_ECDH
   2079     have_ecdh_tmp = (c->ecdh_tmp != NULL || c->ecdh_tmp_cb != NULL);
   2080 #endif
   2081     cpk = &(c->pkeys[SSL_PKEY_RSA_ENC]);
   2082     rsa_enc = (cpk->x509 != NULL && cpk->privatekey != NULL);
   2083     rsa_enc_export = (rsa_enc && EVP_PKEY_size(cpk->privatekey) * 8 <= kl);
   2084     cpk = &(c->pkeys[SSL_PKEY_RSA_SIGN]);
   2085     rsa_sign = (cpk->x509 != NULL && cpk->privatekey != NULL);
   2086     cpk = &(c->pkeys[SSL_PKEY_DSA_SIGN]);
   2087     dsa_sign = (cpk->x509 != NULL && cpk->privatekey != NULL);
   2088     cpk = &(c->pkeys[SSL_PKEY_DH_RSA]);
   2089     dh_rsa = (cpk->x509 != NULL && cpk->privatekey != NULL);
   2090     dh_rsa_export = (dh_rsa && EVP_PKEY_size(cpk->privatekey) * 8 <= kl);
   2091     cpk = &(c->pkeys[SSL_PKEY_DH_DSA]);
   2092 /* FIX THIS EAY EAY EAY */
   2093     dh_dsa = (cpk->x509 != NULL && cpk->privatekey != NULL);
   2094     dh_dsa_export = (dh_dsa && EVP_PKEY_size(cpk->privatekey) * 8 <= kl);
   2095     cpk = &(c->pkeys[SSL_PKEY_ECC]);
   2096 #ifndef OPENSSL_NO_EC
   2097     have_ecc_cert = (cpk->x509 != NULL && cpk->privatekey != NULL);
   2098 #endif
   2099     mask_k = 0;
   2100     mask_a = 0;
   2101     emask_k = 0;
   2102     emask_a = 0;
   2103 
   2104 #ifdef CIPHER_DEBUG
   2105     fprintf(stderr,
   2106             "rt=%d rte=%d dht=%d ecdht=%d re=%d ree=%d rs=%d ds=%d dhr=%d dhd=%d\n",
   2107             rsa_tmp, rsa_tmp_export, dh_tmp, have_ecdh_tmp, rsa_enc,
   2108             rsa_enc_export, rsa_sign, dsa_sign, dh_rsa, dh_dsa);
   2109 #endif
   2110 
   2111     cpk = &(c->pkeys[SSL_PKEY_GOST01]);
   2112     if (cpk->x509 != NULL && cpk->privatekey != NULL) {
   2113         mask_k |= SSL_kGOST;
   2114         mask_a |= SSL_aGOST01;
   2115     }
   2116     cpk = &(c->pkeys[SSL_PKEY_GOST94]);
   2117     if (cpk->x509 != NULL && cpk->privatekey != NULL) {
   2118         mask_k |= SSL_kGOST;
   2119         mask_a |= SSL_aGOST94;
   2120     }
   2121 
   2122     if (rsa_enc || (rsa_tmp && rsa_sign))
   2123         mask_k |= SSL_kRSA;
   2124     if (rsa_enc_export || (rsa_tmp_export && (rsa_sign || rsa_enc)))
   2125         emask_k |= SSL_kRSA;
   2126 
   2127 #if 0
   2128     /* The match needs to be both kEDH and aRSA or aDSA, so don't worry */
   2129     if ((dh_tmp || dh_rsa || dh_dsa) && (rsa_enc || rsa_sign || dsa_sign))
   2130         mask_k |= SSL_kEDH;
   2131     if ((dh_tmp_export || dh_rsa_export || dh_dsa_export) &&
   2132         (rsa_enc || rsa_sign || dsa_sign))
   2133         emask_k |= SSL_kEDH;
   2134 #endif
   2135 
   2136     if (dh_tmp_export)
   2137         emask_k |= SSL_kEDH;
   2138 
   2139     if (dh_tmp)
   2140         mask_k |= SSL_kEDH;
   2141 
   2142     if (dh_rsa)
   2143         mask_k |= SSL_kDHr;
   2144     if (dh_rsa_export)
   2145         emask_k |= SSL_kDHr;
   2146 
   2147     if (dh_dsa)
   2148         mask_k |= SSL_kDHd;
   2149     if (dh_dsa_export)
   2150         emask_k |= SSL_kDHd;
   2151 
   2152     if (rsa_enc || rsa_sign) {
   2153         mask_a |= SSL_aRSA;
   2154         emask_a |= SSL_aRSA;
   2155     }
   2156 
   2157     if (dsa_sign) {
   2158         mask_a |= SSL_aDSS;
   2159         emask_a |= SSL_aDSS;
   2160     }
   2161 
   2162     mask_a |= SSL_aNULL;
   2163     emask_a |= SSL_aNULL;
   2164 
   2165 #ifndef OPENSSL_NO_KRB5
   2166     mask_k |= SSL_kKRB5;
   2167     mask_a |= SSL_aKRB5;
   2168     emask_k |= SSL_kKRB5;
   2169     emask_a |= SSL_aKRB5;
   2170 #endif
   2171 
   2172     /*
   2173      * An ECC certificate may be usable for ECDH and/or ECDSA cipher suites
   2174      * depending on the key usage extension.
   2175      */
   2176 #ifndef OPENSSL_NO_EC
   2177     if (have_ecc_cert) {
   2178         /* This call populates extension flags (ex_flags) */
   2179         x = (c->pkeys[SSL_PKEY_ECC]).x509;
   2180         X509_check_purpose(x, -1, 0);
   2181         ecdh_ok = (x->ex_flags & EXFLAG_KUSAGE) ?
   2182             (x->ex_kusage & X509v3_KU_KEY_AGREEMENT) : 1;
   2183         ecdsa_ok = (x->ex_flags & EXFLAG_KUSAGE) ?
   2184             (x->ex_kusage & X509v3_KU_DIGITAL_SIGNATURE) : 1;
   2185         ecc_pkey = X509_get_pubkey(x);
   2186         ecc_pkey_size = (ecc_pkey != NULL) ? EVP_PKEY_bits(ecc_pkey) : 0;
   2187         EVP_PKEY_free(ecc_pkey);
   2188         if ((x->sig_alg) && (x->sig_alg->algorithm)) {
   2189             signature_nid = OBJ_obj2nid(x->sig_alg->algorithm);
   2190             OBJ_find_sigid_algs(signature_nid, &md_nid, &pk_nid);
   2191         }
   2192 #ifndef OPENSSL_NO_ECDH
   2193         if (ecdh_ok) {
   2194 
   2195             if (pk_nid == NID_rsaEncryption || pk_nid == NID_rsa) {
   2196                 mask_k |= SSL_kECDHr;
   2197                 mask_a |= SSL_aECDH;
   2198                 if (ecc_pkey_size <= 163) {
   2199                     emask_k |= SSL_kECDHr;
   2200                     emask_a |= SSL_aECDH;
   2201                 }
   2202             }
   2203 
   2204             if (pk_nid == NID_X9_62_id_ecPublicKey) {
   2205                 mask_k |= SSL_kECDHe;
   2206                 mask_a |= SSL_aECDH;
   2207                 if (ecc_pkey_size <= 163) {
   2208                     emask_k |= SSL_kECDHe;
   2209                     emask_a |= SSL_aECDH;
   2210                 }
   2211             }
   2212         }
   2213 #endif
   2214 #ifndef OPENSSL_NO_ECDSA
   2215         if (ecdsa_ok) {
   2216             mask_a |= SSL_aECDSA;
   2217             emask_a |= SSL_aECDSA;
   2218         }
   2219 #endif
   2220     }
   2221 #endif
   2222 #ifndef OPENSSL_NO_ECDH
   2223     if (have_ecdh_tmp) {
   2224         mask_k |= SSL_kEECDH;
   2225         emask_k |= SSL_kEECDH;
   2226     }
   2227 #endif
   2228 
   2229 #ifndef OPENSSL_NO_PSK
   2230     mask_k |= SSL_kPSK;
   2231     mask_a |= SSL_aPSK;
   2232     emask_k |= SSL_kPSK;
   2233     emask_a |= SSL_aPSK;
   2234 #endif
   2235 
   2236     c->mask_k = mask_k;
   2237     c->mask_a = mask_a;
   2238     c->export_mask_k = emask_k;
   2239     c->export_mask_a = emask_a;
   2240     c->valid = 1;
   2241 }
   2242 
   2243 /* This handy macro borrowed from crypto/x509v3/v3_purp.c */
   2244 #define ku_reject(x, usage) \
   2245         (((x)->ex_flags & EXFLAG_KUSAGE) && !((x)->ex_kusage & (usage)))
   2246 
   2247 #ifndef OPENSSL_NO_EC
   2248 
   2249 int ssl_check_srvr_ecc_cert_and_alg(X509 *x, SSL *s)
   2250 {
   2251     unsigned long alg_k, alg_a;
   2252     EVP_PKEY *pkey = NULL;
   2253     int keysize = 0;
   2254     int signature_nid = 0, md_nid = 0, pk_nid = 0;
   2255     const SSL_CIPHER *cs = s->s3->tmp.new_cipher;
   2256 
   2257     alg_k = cs->algorithm_mkey;
   2258     alg_a = cs->algorithm_auth;
   2259 
   2260     if (SSL_C_IS_EXPORT(cs)) {
   2261         /* ECDH key length in export ciphers must be <= 163 bits */
   2262         pkey = X509_get_pubkey(x);
   2263         if (pkey == NULL)
   2264             return 0;
   2265         keysize = EVP_PKEY_bits(pkey);
   2266         EVP_PKEY_free(pkey);
   2267         if (keysize > 163)
   2268             return 0;
   2269     }
   2270 
   2271     /* This call populates the ex_flags field correctly */
   2272     X509_check_purpose(x, -1, 0);
   2273     if ((x->sig_alg) && (x->sig_alg->algorithm)) {
   2274         signature_nid = OBJ_obj2nid(x->sig_alg->algorithm);
   2275         OBJ_find_sigid_algs(signature_nid, &md_nid, &pk_nid);
   2276     }
   2277     if (alg_k & SSL_kECDHe || alg_k & SSL_kECDHr) {
   2278         /* key usage, if present, must allow key agreement */
   2279         if (ku_reject(x, X509v3_KU_KEY_AGREEMENT)) {
   2280             SSLerr(SSL_F_SSL_CHECK_SRVR_ECC_CERT_AND_ALG,
   2281                    SSL_R_ECC_CERT_NOT_FOR_KEY_AGREEMENT);
   2282             return 0;
   2283         }
   2284         if ((alg_k & SSL_kECDHe) && TLS1_get_version(s) < TLS1_2_VERSION) {
   2285             /* signature alg must be ECDSA */
   2286             if (pk_nid != NID_X9_62_id_ecPublicKey) {
   2287                 SSLerr(SSL_F_SSL_CHECK_SRVR_ECC_CERT_AND_ALG,
   2288                        SSL_R_ECC_CERT_SHOULD_HAVE_SHA1_SIGNATURE);
   2289                 return 0;
   2290             }
   2291         }
   2292         if ((alg_k & SSL_kECDHr) && TLS1_get_version(s) < TLS1_2_VERSION) {
   2293             /* signature alg must be RSA */
   2294 
   2295             if (pk_nid != NID_rsaEncryption && pk_nid != NID_rsa) {
   2296                 SSLerr(SSL_F_SSL_CHECK_SRVR_ECC_CERT_AND_ALG,
   2297                        SSL_R_ECC_CERT_SHOULD_HAVE_RSA_SIGNATURE);
   2298                 return 0;
   2299             }
   2300         }
   2301     }
   2302     if (alg_a & SSL_aECDSA) {
   2303         /* key usage, if present, must allow signing */
   2304         if (ku_reject(x, X509v3_KU_DIGITAL_SIGNATURE)) {
   2305             SSLerr(SSL_F_SSL_CHECK_SRVR_ECC_CERT_AND_ALG,
   2306                    SSL_R_ECC_CERT_NOT_FOR_SIGNING);
   2307             return 0;
   2308         }
   2309     }
   2310 
   2311     return 1;                   /* all checks are ok */
   2312 }
   2313 
   2314 #endif
   2315 
   2316 /* THIS NEEDS CLEANING UP */
   2317 CERT_PKEY *ssl_get_server_send_pkey(const SSL *s)
   2318 {
   2319     unsigned long alg_k, alg_a;
   2320     CERT *c;
   2321     int i;
   2322 
   2323     c = s->cert;
   2324     ssl_set_cert_masks(c, s->s3->tmp.new_cipher);
   2325 
   2326     alg_k = s->s3->tmp.new_cipher->algorithm_mkey;
   2327     alg_a = s->s3->tmp.new_cipher->algorithm_auth;
   2328 
   2329     if (alg_k & (SSL_kECDHr | SSL_kECDHe)) {
   2330         /*
   2331          * we don't need to look at SSL_kEECDH since no certificate is needed
   2332          * for anon ECDH and for authenticated EECDH, the check for the auth
   2333          * algorithm will set i correctly NOTE: For ECDH-RSA, we need an ECC
   2334          * not an RSA cert but for EECDH-RSA we need an RSA cert. Placing the
   2335          * checks for SSL_kECDH before RSA checks ensures the correct cert is
   2336          * chosen.
   2337          */
   2338         i = SSL_PKEY_ECC;
   2339     } else if (alg_a & SSL_aECDSA) {
   2340         i = SSL_PKEY_ECC;
   2341     } else if (alg_k & SSL_kDHr)
   2342         i = SSL_PKEY_DH_RSA;
   2343     else if (alg_k & SSL_kDHd)
   2344         i = SSL_PKEY_DH_DSA;
   2345     else if (alg_a & SSL_aDSS)
   2346         i = SSL_PKEY_DSA_SIGN;
   2347     else if (alg_a & SSL_aRSA) {
   2348         if (c->pkeys[SSL_PKEY_RSA_ENC].x509 == NULL)
   2349             i = SSL_PKEY_RSA_SIGN;
   2350         else
   2351             i = SSL_PKEY_RSA_ENC;
   2352     } else if (alg_a & SSL_aKRB5) {
   2353         /* VRS something else here? */
   2354         return (NULL);
   2355     } else if (alg_a & SSL_aGOST94)
   2356         i = SSL_PKEY_GOST94;
   2357     else if (alg_a & SSL_aGOST01)
   2358         i = SSL_PKEY_GOST01;
   2359     else {                      /* if (alg_a & SSL_aNULL) */
   2360 
   2361         SSLerr(SSL_F_SSL_GET_SERVER_SEND_PKEY, ERR_R_INTERNAL_ERROR);
   2362         return (NULL);
   2363     }
   2364 
   2365     return c->pkeys + i;
   2366 }
   2367 
   2368 X509 *ssl_get_server_send_cert(const SSL *s)
   2369 {
   2370     CERT_PKEY *cpk;
   2371     cpk = ssl_get_server_send_pkey(s);
   2372     if (!cpk)
   2373         return NULL;
   2374     return cpk->x509;
   2375 }
   2376 
   2377 EVP_PKEY *ssl_get_sign_pkey(SSL *s, const SSL_CIPHER *cipher,
   2378                             const EVP_MD **pmd)
   2379 {
   2380     unsigned long alg_a;
   2381     CERT *c;
   2382     int idx = -1;
   2383 
   2384     alg_a = cipher->algorithm_auth;
   2385     c = s->cert;
   2386 
   2387     if ((alg_a & SSL_aDSS) &&
   2388         (c->pkeys[SSL_PKEY_DSA_SIGN].privatekey != NULL))
   2389         idx = SSL_PKEY_DSA_SIGN;
   2390     else if (alg_a & SSL_aRSA) {
   2391         if (c->pkeys[SSL_PKEY_RSA_SIGN].privatekey != NULL)
   2392             idx = SSL_PKEY_RSA_SIGN;
   2393         else if (c->pkeys[SSL_PKEY_RSA_ENC].privatekey != NULL)
   2394             idx = SSL_PKEY_RSA_ENC;
   2395     } else if ((alg_a & SSL_aECDSA) &&
   2396                (c->pkeys[SSL_PKEY_ECC].privatekey != NULL))
   2397         idx = SSL_PKEY_ECC;
   2398     if (idx == -1) {
   2399         SSLerr(SSL_F_SSL_GET_SIGN_PKEY, ERR_R_INTERNAL_ERROR);
   2400         return (NULL);
   2401     }
   2402     if (pmd)
   2403         *pmd = c->pkeys[idx].digest;
   2404     return c->pkeys[idx].privatekey;
   2405 }
   2406 
   2407 void ssl_update_cache(SSL *s, int mode)
   2408 {
   2409     int i;
   2410 
   2411     /*
   2412      * If the session_id_length is 0, we are not supposed to cache it, and it
   2413      * would be rather hard to do anyway :-)
   2414      */
   2415     if (s->session->session_id_length == 0)
   2416         return;
   2417 
   2418     i = s->session_ctx->session_cache_mode;
   2419     if ((i & mode) && (!s->hit)
   2420         && ((i & SSL_SESS_CACHE_NO_INTERNAL_STORE)
   2421             || SSL_CTX_add_session(s->session_ctx, s->session))
   2422         && (s->session_ctx->new_session_cb != NULL)) {
   2423         CRYPTO_add(&s->session->references, 1, CRYPTO_LOCK_SSL_SESSION);
   2424         if (!s->session_ctx->new_session_cb(s, s->session))
   2425             SSL_SESSION_free(s->session);
   2426     }
   2427 
   2428     /* auto flush every 255 connections */
   2429     if ((!(i & SSL_SESS_CACHE_NO_AUTO_CLEAR)) && ((i & mode) == mode)) {
   2430         if ((((mode & SSL_SESS_CACHE_CLIENT)
   2431               ? s->session_ctx->stats.sess_connect_good
   2432               : s->session_ctx->stats.sess_accept_good) & 0xff) == 0xff) {
   2433             SSL_CTX_flush_sessions(s->session_ctx, (unsigned long)time(NULL));
   2434         }
   2435     }
   2436 }
   2437 
   2438 const SSL_METHOD *SSL_get_ssl_method(SSL *s)
   2439 {
   2440     return (s->method);
   2441 }
   2442 
   2443 int SSL_set_ssl_method(SSL *s, const SSL_METHOD *meth)
   2444 {
   2445     int conn = -1;
   2446     int ret = 1;
   2447 
   2448     if (s->method != meth) {
   2449         if (s->handshake_func != NULL)
   2450             conn = (s->handshake_func == s->method->ssl_connect);
   2451 
   2452         if (s->method->version == meth->version)
   2453             s->method = meth;
   2454         else {
   2455             s->method->ssl_free(s);
   2456             s->method = meth;
   2457             ret = s->method->ssl_new(s);
   2458         }
   2459 
   2460         if (conn == 1)
   2461             s->handshake_func = meth->ssl_connect;
   2462         else if (conn == 0)
   2463             s->handshake_func = meth->ssl_accept;
   2464     }
   2465     return (ret);
   2466 }
   2467 
   2468 int SSL_get_error(const SSL *s, int i)
   2469 {
   2470     int reason;
   2471     unsigned long l;
   2472     BIO *bio;
   2473 
   2474     if (i > 0)
   2475         return (SSL_ERROR_NONE);
   2476 
   2477     /*
   2478      * Make things return SSL_ERROR_SYSCALL when doing SSL_do_handshake etc,
   2479      * where we do encode the error
   2480      */
   2481     if ((l = ERR_peek_error()) != 0) {
   2482         if (ERR_GET_LIB(l) == ERR_LIB_SYS)
   2483             return (SSL_ERROR_SYSCALL);
   2484         else
   2485             return (SSL_ERROR_SSL);
   2486     }
   2487 
   2488     if ((i < 0) && SSL_want_read(s)) {
   2489         bio = SSL_get_rbio(s);
   2490         if (BIO_should_read(bio))
   2491             return (SSL_ERROR_WANT_READ);
   2492         else if (BIO_should_write(bio))
   2493             /*
   2494              * This one doesn't make too much sense ... We never try to write
   2495              * to the rbio, and an application program where rbio and wbio
   2496              * are separate couldn't even know what it should wait for.
   2497              * However if we ever set s->rwstate incorrectly (so that we have
   2498              * SSL_want_read(s) instead of SSL_want_write(s)) and rbio and
   2499              * wbio *are* the same, this test works around that bug; so it
   2500              * might be safer to keep it.
   2501              */
   2502             return (SSL_ERROR_WANT_WRITE);
   2503         else if (BIO_should_io_special(bio)) {
   2504             reason = BIO_get_retry_reason(bio);
   2505             if (reason == BIO_RR_CONNECT)
   2506                 return (SSL_ERROR_WANT_CONNECT);
   2507             else if (reason == BIO_RR_ACCEPT)
   2508                 return (SSL_ERROR_WANT_ACCEPT);
   2509             else
   2510                 return (SSL_ERROR_SYSCALL); /* unknown */
   2511         }
   2512     }
   2513 
   2514     if ((i < 0) && SSL_want_write(s)) {
   2515         bio = SSL_get_wbio(s);
   2516         if (BIO_should_write(bio))
   2517             return (SSL_ERROR_WANT_WRITE);
   2518         else if (BIO_should_read(bio))
   2519             /*
   2520              * See above (SSL_want_read(s) with BIO_should_write(bio))
   2521              */
   2522             return (SSL_ERROR_WANT_READ);
   2523         else if (BIO_should_io_special(bio)) {
   2524             reason = BIO_get_retry_reason(bio);
   2525             if (reason == BIO_RR_CONNECT)
   2526                 return (SSL_ERROR_WANT_CONNECT);
   2527             else if (reason == BIO_RR_ACCEPT)
   2528                 return (SSL_ERROR_WANT_ACCEPT);
   2529             else
   2530                 return (SSL_ERROR_SYSCALL);
   2531         }
   2532     }
   2533     if ((i < 0) && SSL_want_x509_lookup(s)) {
   2534         return (SSL_ERROR_WANT_X509_LOOKUP);
   2535     }
   2536 
   2537     if (i == 0) {
   2538         if (s->version == SSL2_VERSION) {
   2539             /* assume it is the socket being closed */
   2540             return (SSL_ERROR_ZERO_RETURN);
   2541         } else {
   2542             if ((s->shutdown & SSL_RECEIVED_SHUTDOWN) &&
   2543                 (s->s3->warn_alert == SSL_AD_CLOSE_NOTIFY))
   2544                 return (SSL_ERROR_ZERO_RETURN);
   2545         }
   2546     }
   2547     return (SSL_ERROR_SYSCALL);
   2548 }
   2549 
   2550 int SSL_do_handshake(SSL *s)
   2551 {
   2552     int ret = 1;
   2553 
   2554     if (s->handshake_func == NULL) {
   2555         SSLerr(SSL_F_SSL_DO_HANDSHAKE, SSL_R_CONNECTION_TYPE_NOT_SET);
   2556         return (-1);
   2557     }
   2558 
   2559     s->method->ssl_renegotiate_check(s);
   2560 
   2561     if (SSL_in_init(s) || SSL_in_before(s)) {
   2562         ret = s->handshake_func(s);
   2563     }
   2564     return (ret);
   2565 }
   2566 
   2567 /*
   2568  * For the next 2 functions, SSL_clear() sets shutdown and so one of these
   2569  * calls will reset it
   2570  */
   2571 void SSL_set_accept_state(SSL *s)
   2572 {
   2573     s->server = 1;
   2574     s->shutdown = 0;
   2575     s->state = SSL_ST_ACCEPT | SSL_ST_BEFORE;
   2576     s->handshake_func = s->method->ssl_accept;
   2577     /* clear the current cipher */
   2578     ssl_clear_cipher_ctx(s);
   2579     ssl_clear_hash_ctx(&s->read_hash);
   2580     ssl_clear_hash_ctx(&s->write_hash);
   2581 }
   2582 
   2583 void SSL_set_connect_state(SSL *s)
   2584 {
   2585     s->server = 0;
   2586     s->shutdown = 0;
   2587     s->state = SSL_ST_CONNECT | SSL_ST_BEFORE;
   2588     s->handshake_func = s->method->ssl_connect;
   2589     /* clear the current cipher */
   2590     ssl_clear_cipher_ctx(s);
   2591     ssl_clear_hash_ctx(&s->read_hash);
   2592     ssl_clear_hash_ctx(&s->write_hash);
   2593 }
   2594 
   2595 int ssl_undefined_function(SSL *s)
   2596 {
   2597     SSLerr(SSL_F_SSL_UNDEFINED_FUNCTION, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
   2598     return (0);
   2599 }
   2600 
   2601 int ssl_undefined_void_function(void)
   2602 {
   2603     SSLerr(SSL_F_SSL_UNDEFINED_VOID_FUNCTION,
   2604            ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
   2605     return (0);
   2606 }
   2607 
   2608 int ssl_undefined_const_function(const SSL *s)
   2609 {
   2610     SSLerr(SSL_F_SSL_UNDEFINED_CONST_FUNCTION,
   2611            ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
   2612     return (0);
   2613 }
   2614 
   2615 SSL_METHOD *ssl_bad_method(int ver)
   2616 {
   2617     SSLerr(SSL_F_SSL_BAD_METHOD, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
   2618     return (NULL);
   2619 }
   2620 
   2621 const char *SSL_get_version(const SSL *s)
   2622 {
   2623     if (s->version == TLS1_2_VERSION)
   2624         return ("TLSv1.2");
   2625     else if (s->version == TLS1_1_VERSION)
   2626         return ("TLSv1.1");
   2627     else if (s->version == TLS1_VERSION)
   2628         return ("TLSv1");
   2629     else if (s->version == SSL3_VERSION)
   2630         return ("SSLv3");
   2631     else if (s->version == SSL2_VERSION)
   2632         return ("SSLv2");
   2633     else
   2634         return ("unknown");
   2635 }
   2636 
   2637 SSL *SSL_dup(SSL *s)
   2638 {
   2639     STACK_OF(X509_NAME) *sk;
   2640     X509_NAME *xn;
   2641     SSL *ret;
   2642     int i;
   2643 
   2644     if ((ret = SSL_new(SSL_get_SSL_CTX(s))) == NULL)
   2645         return (NULL);
   2646 
   2647     ret->version = s->version;
   2648     ret->type = s->type;
   2649     ret->method = s->method;
   2650 
   2651     if (s->session != NULL) {
   2652         /* This copies session-id, SSL_METHOD, sid_ctx, and 'cert' */
   2653         SSL_copy_session_id(ret, s);
   2654     } else {
   2655         /*
   2656          * No session has been established yet, so we have to expect that
   2657          * s->cert or ret->cert will be changed later -- they should not both
   2658          * point to the same object, and thus we can't use
   2659          * SSL_copy_session_id.
   2660          */
   2661 
   2662         ret->method->ssl_free(ret);
   2663         ret->method = s->method;
   2664         ret->method->ssl_new(ret);
   2665 
   2666         if (s->cert != NULL) {
   2667             if (ret->cert != NULL) {
   2668                 ssl_cert_free(ret->cert);
   2669             }
   2670             ret->cert = ssl_cert_dup(s->cert);
   2671             if (ret->cert == NULL)
   2672                 goto err;
   2673         }
   2674 
   2675         SSL_set_session_id_context(ret, s->sid_ctx, s->sid_ctx_length);
   2676     }
   2677 
   2678     ret->options = s->options;
   2679     ret->mode = s->mode;
   2680     SSL_set_max_cert_list(ret, SSL_get_max_cert_list(s));
   2681     SSL_set_read_ahead(ret, SSL_get_read_ahead(s));
   2682     ret->msg_callback = s->msg_callback;
   2683     ret->msg_callback_arg = s->msg_callback_arg;
   2684     SSL_set_verify(ret, SSL_get_verify_mode(s), SSL_get_verify_callback(s));
   2685     SSL_set_verify_depth(ret, SSL_get_verify_depth(s));
   2686     ret->generate_session_id = s->generate_session_id;
   2687 
   2688     SSL_set_info_callback(ret, SSL_get_info_callback(s));
   2689 
   2690     ret->debug = s->debug;
   2691 
   2692     /* copy app data, a little dangerous perhaps */
   2693     if (!CRYPTO_dup_ex_data(CRYPTO_EX_INDEX_SSL, &ret->ex_data, &s->ex_data))
   2694         goto err;
   2695 
   2696     /* setup rbio, and wbio */
   2697     if (s->rbio != NULL) {
   2698         if (!BIO_dup_state(s->rbio, (char *)&ret->rbio))
   2699             goto err;
   2700     }
   2701     if (s->wbio != NULL) {
   2702         if (s->wbio != s->rbio) {
   2703             if (!BIO_dup_state(s->wbio, (char *)&ret->wbio))
   2704                 goto err;
   2705         } else
   2706             ret->wbio = ret->rbio;
   2707     }
   2708     ret->rwstate = s->rwstate;
   2709     ret->in_handshake = s->in_handshake;
   2710     ret->handshake_func = s->handshake_func;
   2711     ret->server = s->server;
   2712     ret->renegotiate = s->renegotiate;
   2713     ret->new_session = s->new_session;
   2714     ret->quiet_shutdown = s->quiet_shutdown;
   2715     ret->shutdown = s->shutdown;
   2716     ret->state = s->state;      /* SSL_dup does not really work at any state,
   2717                                  * though */
   2718     ret->rstate = s->rstate;
   2719     ret->init_num = 0;          /* would have to copy ret->init_buf,
   2720                                  * ret->init_msg, ret->init_num,
   2721                                  * ret->init_off */
   2722     ret->hit = s->hit;
   2723 
   2724     X509_VERIFY_PARAM_inherit(ret->param, s->param);
   2725 
   2726     /* dup the cipher_list and cipher_list_by_id stacks */
   2727     if (s->cipher_list != NULL) {
   2728         if ((ret->cipher_list = sk_SSL_CIPHER_dup(s->cipher_list)) == NULL)
   2729             goto err;
   2730     }
   2731     if (s->cipher_list_by_id != NULL)
   2732         if ((ret->cipher_list_by_id = sk_SSL_CIPHER_dup(s->cipher_list_by_id))
   2733             == NULL)
   2734             goto err;
   2735 
   2736     /* Dup the client_CA list */
   2737     if (s->client_CA != NULL) {
   2738         if ((sk = sk_X509_NAME_dup(s->client_CA)) == NULL)
   2739             goto err;
   2740         ret->client_CA = sk;
   2741         for (i = 0; i < sk_X509_NAME_num(sk); i++) {
   2742             xn = sk_X509_NAME_value(sk, i);
   2743             if (sk_X509_NAME_set(sk, i, X509_NAME_dup(xn)) == NULL) {
   2744                 X509_NAME_free(xn);
   2745                 goto err;
   2746             }
   2747         }
   2748     }
   2749 
   2750     if (0) {
   2751  err:
   2752         if (ret != NULL)
   2753             SSL_free(ret);
   2754         ret = NULL;
   2755     }
   2756     return (ret);
   2757 }
   2758 
   2759 void ssl_clear_cipher_ctx(SSL *s)
   2760 {
   2761     if (s->enc_read_ctx != NULL) {
   2762         EVP_CIPHER_CTX_cleanup(s->enc_read_ctx);
   2763         OPENSSL_free(s->enc_read_ctx);
   2764         s->enc_read_ctx = NULL;
   2765     }
   2766     if (s->enc_write_ctx != NULL) {
   2767         EVP_CIPHER_CTX_cleanup(s->enc_write_ctx);
   2768         OPENSSL_free(s->enc_write_ctx);
   2769         s->enc_write_ctx = NULL;
   2770     }
   2771 #ifndef OPENSSL_NO_COMP
   2772     if (s->expand != NULL) {
   2773         COMP_CTX_free(s->expand);
   2774         s->expand = NULL;
   2775     }
   2776     if (s->compress != NULL) {
   2777         COMP_CTX_free(s->compress);
   2778         s->compress = NULL;
   2779     }
   2780 #endif
   2781 }
   2782 
   2783 /* Fix this function so that it takes an optional type parameter */
   2784 X509 *SSL_get_certificate(const SSL *s)
   2785 {
   2786     if (s->cert != NULL)
   2787         return (s->cert->key->x509);
   2788     else
   2789         return (NULL);
   2790 }
   2791 
   2792 /* Fix this function so that it takes an optional type parameter */
   2793 EVP_PKEY *SSL_get_privatekey(SSL *s)
   2794 {
   2795     if (s->cert != NULL)
   2796         return (s->cert->key->privatekey);
   2797     else
   2798         return (NULL);
   2799 }
   2800 
   2801 const SSL_CIPHER *SSL_get_current_cipher(const SSL *s)
   2802 {
   2803     if ((s->session != NULL) && (s->session->cipher != NULL))
   2804         return (s->session->cipher);
   2805     return (NULL);
   2806 }
   2807 
   2808 #ifdef OPENSSL_NO_COMP
   2809 const void *SSL_get_current_compression(SSL *s)
   2810 {
   2811     return NULL;
   2812 }
   2813 
   2814 const void *SSL_get_current_expansion(SSL *s)
   2815 {
   2816     return NULL;
   2817 }
   2818 #else
   2819 
   2820 const COMP_METHOD *SSL_get_current_compression(SSL *s)
   2821 {
   2822     if (s->compress != NULL)
   2823         return (s->compress->meth);
   2824     return (NULL);
   2825 }
   2826 
   2827 const COMP_METHOD *SSL_get_current_expansion(SSL *s)
   2828 {
   2829     if (s->expand != NULL)
   2830         return (s->expand->meth);
   2831     return (NULL);
   2832 }
   2833 #endif
   2834 
   2835 int ssl_init_wbio_buffer(SSL *s, int push)
   2836 {
   2837     BIO *bbio;
   2838 
   2839     if (s->bbio == NULL) {
   2840         bbio = BIO_new(BIO_f_buffer());
   2841         if (bbio == NULL)
   2842             return (0);
   2843         s->bbio = bbio;
   2844     } else {
   2845         bbio = s->bbio;
   2846         if (s->bbio == s->wbio)
   2847             s->wbio = BIO_pop(s->wbio);
   2848     }
   2849     (void)BIO_reset(bbio);
   2850 /*      if (!BIO_set_write_buffer_size(bbio,16*1024)) */
   2851     if (!BIO_set_read_buffer_size(bbio, 1)) {
   2852         SSLerr(SSL_F_SSL_INIT_WBIO_BUFFER, ERR_R_BUF_LIB);
   2853         return (0);
   2854     }
   2855     if (push) {
   2856         if (s->wbio != bbio)
   2857             s->wbio = BIO_push(bbio, s->wbio);
   2858     } else {
   2859         if (s->wbio == bbio)
   2860             s->wbio = BIO_pop(bbio);
   2861     }
   2862     return (1);
   2863 }
   2864 
   2865 void ssl_free_wbio_buffer(SSL *s)
   2866 {
   2867     if (s->bbio == NULL)
   2868         return;
   2869 
   2870     if (s->bbio == s->wbio) {
   2871         /* remove buffering */
   2872         s->wbio = BIO_pop(s->wbio);
   2873 #ifdef REF_CHECK                /* not the usual REF_CHECK, but this avoids
   2874                                  * adding one more preprocessor symbol */
   2875         assert(s->wbio != NULL);
   2876 #endif
   2877     }
   2878     BIO_free(s->bbio);
   2879     s->bbio = NULL;
   2880 }
   2881 
   2882 void SSL_CTX_set_quiet_shutdown(SSL_CTX *ctx, int mode)
   2883 {
   2884     ctx->quiet_shutdown = mode;
   2885 }
   2886 
   2887 int SSL_CTX_get_quiet_shutdown(const SSL_CTX *ctx)
   2888 {
   2889     return (ctx->quiet_shutdown);
   2890 }
   2891 
   2892 void SSL_set_quiet_shutdown(SSL *s, int mode)
   2893 {
   2894     s->quiet_shutdown = mode;
   2895 }
   2896 
   2897 int SSL_get_quiet_shutdown(const SSL *s)
   2898 {
   2899     return (s->quiet_shutdown);
   2900 }
   2901 
   2902 void SSL_set_shutdown(SSL *s, int mode)
   2903 {
   2904     s->shutdown = mode;
   2905 }
   2906 
   2907 int SSL_get_shutdown(const SSL *s)
   2908 {
   2909     return (s->shutdown);
   2910 }
   2911 
   2912 int SSL_version(const SSL *s)
   2913 {
   2914     return (s->version);
   2915 }
   2916 
   2917 SSL_CTX *SSL_get_SSL_CTX(const SSL *ssl)
   2918 {
   2919     return (ssl->ctx);
   2920 }
   2921 
   2922 SSL_CTX *SSL_set_SSL_CTX(SSL *ssl, SSL_CTX *ctx)
   2923 {
   2924     CERT *ocert = ssl->cert;
   2925     if (ssl->ctx == ctx)
   2926         return ssl->ctx;
   2927 #ifndef OPENSSL_NO_TLSEXT
   2928     if (ctx == NULL)
   2929         ctx = ssl->initial_ctx;
   2930 #endif
   2931     ssl->cert = ssl_cert_dup(ctx->cert);
   2932     if (ocert != NULL) {
   2933         int i;
   2934         /* Copy negotiated digests from original */
   2935         for (i = 0; i < SSL_PKEY_NUM; i++) {
   2936             CERT_PKEY *cpk = ocert->pkeys + i;
   2937             CERT_PKEY *rpk = ssl->cert->pkeys + i;
   2938             rpk->digest = cpk->digest;
   2939         }
   2940         ssl_cert_free(ocert);
   2941     }
   2942 
   2943     /*
   2944      * Program invariant: |sid_ctx| has fixed size (SSL_MAX_SID_CTX_LENGTH),
   2945      * so setter APIs must prevent invalid lengths from entering the system.
   2946      */
   2947     OPENSSL_assert(ssl->sid_ctx_length <= sizeof(ssl->sid_ctx));
   2948 
   2949     /*
   2950      * If the session ID context matches that of the parent SSL_CTX,
   2951      * inherit it from the new SSL_CTX as well. If however the context does
   2952      * not match (i.e., it was set per-ssl with SSL_set_session_id_context),
   2953      * leave it unchanged.
   2954      */
   2955     if ((ssl->ctx != NULL) &&
   2956         (ssl->sid_ctx_length == ssl->ctx->sid_ctx_length) &&
   2957         (memcmp(ssl->sid_ctx, ssl->ctx->sid_ctx, ssl->sid_ctx_length) == 0)) {
   2958         ssl->sid_ctx_length = ctx->sid_ctx_length;
   2959         memcpy(&ssl->sid_ctx, &ctx->sid_ctx, sizeof(ssl->sid_ctx));
   2960     }
   2961 
   2962     CRYPTO_add(&ctx->references, 1, CRYPTO_LOCK_SSL_CTX);
   2963     if (ssl->ctx != NULL)
   2964         SSL_CTX_free(ssl->ctx); /* decrement reference count */
   2965     ssl->ctx = ctx;
   2966 
   2967     return (ssl->ctx);
   2968 }
   2969 
   2970 #ifndef OPENSSL_NO_STDIO
   2971 int SSL_CTX_set_default_verify_paths(SSL_CTX *ctx)
   2972 {
   2973     return (X509_STORE_set_default_paths(ctx->cert_store));
   2974 }
   2975 
   2976 int SSL_CTX_load_verify_locations(SSL_CTX *ctx, const char *CAfile,
   2977                                   const char *CApath)
   2978 {
   2979     return (X509_STORE_load_locations(ctx->cert_store, CAfile, CApath));
   2980 }
   2981 #endif
   2982 
   2983 void SSL_set_info_callback(SSL *ssl,
   2984                            void (*cb) (const SSL *ssl, int type, int val))
   2985 {
   2986     ssl->info_callback = cb;
   2987 }
   2988 
   2989 /*
   2990  * One compiler (Diab DCC) doesn't like argument names in returned function
   2991  * pointer.
   2992  */
   2993 void (*SSL_get_info_callback(const SSL *ssl)) (const SSL * /* ssl */ ,
   2994                                                int /* type */ ,
   2995                                                int /* val */ ) {
   2996     return ssl->info_callback;
   2997 }
   2998 
   2999 int SSL_state(const SSL *ssl)
   3000 {
   3001     return (ssl->state);
   3002 }
   3003 
   3004 void SSL_set_state(SSL *ssl, int state)
   3005 {
   3006     ssl->state = state;
   3007 }
   3008 
   3009 void SSL_set_verify_result(SSL *ssl, long arg)
   3010 {
   3011     ssl->verify_result = arg;
   3012 }
   3013 
   3014 long SSL_get_verify_result(const SSL *ssl)
   3015 {
   3016     return (ssl->verify_result);
   3017 }
   3018 
   3019 int SSL_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,
   3020                          CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func)
   3021 {
   3022     return CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_SSL, argl, argp,
   3023                                    new_func, dup_func, free_func);
   3024 }
   3025 
   3026 int SSL_set_ex_data(SSL *s, int idx, void *arg)
   3027 {
   3028     return (CRYPTO_set_ex_data(&s->ex_data, idx, arg));
   3029 }
   3030 
   3031 void *SSL_get_ex_data(const SSL *s, int idx)
   3032 {
   3033     return (CRYPTO_get_ex_data(&s->ex_data, idx));
   3034 }
   3035 
   3036 int SSL_CTX_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,
   3037                              CRYPTO_EX_dup *dup_func,
   3038                              CRYPTO_EX_free *free_func)
   3039 {
   3040     return CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_SSL_CTX, argl, argp,
   3041                                    new_func, dup_func, free_func);
   3042 }
   3043 
   3044 int SSL_CTX_set_ex_data(SSL_CTX *s, int idx, void *arg)
   3045 {
   3046     return (CRYPTO_set_ex_data(&s->ex_data, idx, arg));
   3047 }
   3048 
   3049 void *SSL_CTX_get_ex_data(const SSL_CTX *s, int idx)
   3050 {
   3051     return (CRYPTO_get_ex_data(&s->ex_data, idx));
   3052 }
   3053 
   3054 int ssl_ok(SSL *s)
   3055 {
   3056     return (1);
   3057 }
   3058 
   3059 X509_STORE *SSL_CTX_get_cert_store(const SSL_CTX *ctx)
   3060 {
   3061     return (ctx->cert_store);
   3062 }
   3063 
   3064 void SSL_CTX_set_cert_store(SSL_CTX *ctx, X509_STORE *store)
   3065 {
   3066     if (ctx->cert_store != NULL)
   3067         X509_STORE_free(ctx->cert_store);
   3068     ctx->cert_store = store;
   3069 }
   3070 
   3071 int SSL_want(const SSL *s)
   3072 {
   3073     return (s->rwstate);
   3074 }
   3075 
   3076 /**
   3077  * \brief Set the callback for generating temporary RSA keys.
   3078  * \param ctx the SSL context.
   3079  * \param cb the callback
   3080  */
   3081 
   3082 #ifndef OPENSSL_NO_RSA
   3083 void SSL_CTX_set_tmp_rsa_callback(SSL_CTX *ctx, RSA *(*cb) (SSL *ssl,
   3084                                                             int is_export,
   3085                                                             int keylength))
   3086 {
   3087     SSL_CTX_callback_ctrl(ctx, SSL_CTRL_SET_TMP_RSA_CB, (void (*)(void))cb);
   3088 }
   3089 
   3090 void SSL_set_tmp_rsa_callback(SSL *ssl, RSA *(*cb) (SSL *ssl,
   3091                                                     int is_export,
   3092                                                     int keylength))
   3093 {
   3094     SSL_callback_ctrl(ssl, SSL_CTRL_SET_TMP_RSA_CB, (void (*)(void))cb);
   3095 }
   3096 #endif
   3097 
   3098 #ifdef DOXYGEN
   3099 /**
   3100  * \brief The RSA temporary key callback function.
   3101  * \param ssl the SSL session.
   3102  * \param is_export \c TRUE if the temp RSA key is for an export ciphersuite.
   3103  * \param keylength if \c is_export is \c TRUE, then \c keylength is the size
   3104  * of the required key in bits.
   3105  * \return the temporary RSA key.
   3106  * \sa SSL_CTX_set_tmp_rsa_callback, SSL_set_tmp_rsa_callback
   3107  */
   3108 
   3109 RSA *cb(SSL *ssl, int is_export, int keylength)
   3110 {
   3111 }
   3112 #endif
   3113 
   3114 /**
   3115  * \brief Set the callback for generating temporary DH keys.
   3116  * \param ctx the SSL context.
   3117  * \param dh the callback
   3118  */
   3119 
   3120 #ifndef OPENSSL_NO_DH
   3121 void SSL_CTX_set_tmp_dh_callback(SSL_CTX *ctx,
   3122                                  DH *(*dh) (SSL *ssl, int is_export,
   3123                                             int keylength))
   3124 {
   3125     SSL_CTX_callback_ctrl(ctx, SSL_CTRL_SET_TMP_DH_CB, (void (*)(void))dh);
   3126 }
   3127 
   3128 void SSL_set_tmp_dh_callback(SSL *ssl, DH *(*dh) (SSL *ssl, int is_export,
   3129                                                   int keylength))
   3130 {
   3131     SSL_callback_ctrl(ssl, SSL_CTRL_SET_TMP_DH_CB, (void (*)(void))dh);
   3132 }
   3133 #endif
   3134 
   3135 #ifndef OPENSSL_NO_ECDH
   3136 void SSL_CTX_set_tmp_ecdh_callback(SSL_CTX *ctx,
   3137                                    EC_KEY *(*ecdh) (SSL *ssl, int is_export,
   3138                                                     int keylength))
   3139 {
   3140     SSL_CTX_callback_ctrl(ctx, SSL_CTRL_SET_TMP_ECDH_CB,
   3141                           (void (*)(void))ecdh);
   3142 }
   3143 
   3144 void SSL_set_tmp_ecdh_callback(SSL *ssl,
   3145                                EC_KEY *(*ecdh) (SSL *ssl, int is_export,
   3146                                                 int keylength))
   3147 {
   3148     SSL_callback_ctrl(ssl, SSL_CTRL_SET_TMP_ECDH_CB, (void (*)(void))ecdh);
   3149 }
   3150 #endif
   3151 
   3152 #ifndef OPENSSL_NO_PSK
   3153 int SSL_CTX_use_psk_identity_hint(SSL_CTX *ctx, const char *identity_hint)
   3154 {
   3155     if (identity_hint != NULL && strlen(identity_hint) > PSK_MAX_IDENTITY_LEN) {
   3156         SSLerr(SSL_F_SSL_CTX_USE_PSK_IDENTITY_HINT,
   3157                SSL_R_DATA_LENGTH_TOO_LONG);
   3158         return 0;
   3159     }
   3160     if (ctx->psk_identity_hint != NULL)
   3161         OPENSSL_free(ctx->psk_identity_hint);
   3162     if (identity_hint != NULL) {
   3163         ctx->psk_identity_hint = BUF_strdup(identity_hint);
   3164         if (ctx->psk_identity_hint == NULL)
   3165             return 0;
   3166     } else
   3167         ctx->psk_identity_hint = NULL;
   3168     return 1;
   3169 }
   3170 
   3171 int SSL_use_psk_identity_hint(SSL *s, const char *identity_hint)
   3172 {
   3173     if (s == NULL)
   3174         return 0;
   3175 
   3176     if (s->session == NULL)
   3177         return 1;               /* session not created yet, ignored */
   3178 
   3179     if (identity_hint != NULL && strlen(identity_hint) > PSK_MAX_IDENTITY_LEN) {
   3180         SSLerr(SSL_F_SSL_USE_PSK_IDENTITY_HINT, SSL_R_DATA_LENGTH_TOO_LONG);
   3181         return 0;
   3182     }
   3183     if (s->session->psk_identity_hint != NULL)
   3184         OPENSSL_free(s->session->psk_identity_hint);
   3185     if (identity_hint != NULL) {
   3186         s->session->psk_identity_hint = BUF_strdup(identity_hint);
   3187         if (s->session->psk_identity_hint == NULL)
   3188             return 0;
   3189     } else
   3190         s->session->psk_identity_hint = NULL;
   3191     return 1;
   3192 }
   3193 
   3194 const char *SSL_get_psk_identity_hint(const SSL *s)
   3195 {
   3196     if (s == NULL || s->session == NULL)
   3197         return NULL;
   3198     return (s->session->psk_identity_hint);
   3199 }
   3200 
   3201 const char *SSL_get_psk_identity(const SSL *s)
   3202 {
   3203     if (s == NULL || s->session == NULL)
   3204         return NULL;
   3205     return (s->session->psk_identity);
   3206 }
   3207 
   3208 void SSL_set_psk_client_callback(SSL *s,
   3209                                  unsigned int (*cb) (SSL *ssl,
   3210                                                      const char *hint,
   3211                                                      char *identity,
   3212                                                      unsigned int
   3213                                                      max_identity_len,
   3214                                                      unsigned char *psk,
   3215                                                      unsigned int
   3216                                                      max_psk_len))
   3217 {
   3218     s->psk_client_callback = cb;
   3219 }
   3220 
   3221 void SSL_CTX_set_psk_client_callback(SSL_CTX *ctx,
   3222                                      unsigned int (*cb) (SSL *ssl,
   3223                                                          const char *hint,
   3224                                                          char *identity,
   3225                                                          unsigned int
   3226                                                          max_identity_len,
   3227                                                          unsigned char *psk,
   3228                                                          unsigned int
   3229                                                          max_psk_len))
   3230 {
   3231     ctx->psk_client_callback = cb;
   3232 }
   3233 
   3234 void SSL_set_psk_server_callback(SSL *s,
   3235                                  unsigned int (*cb) (SSL *ssl,
   3236                                                      const char *identity,
   3237                                                      unsigned char *psk,
   3238                                                      unsigned int
   3239                                                      max_psk_len))
   3240 {
   3241     s->psk_server_callback = cb;
   3242 }
   3243 
   3244 void SSL_CTX_set_psk_server_callback(SSL_CTX *ctx,
   3245                                      unsigned int (*cb) (SSL *ssl,
   3246                                                          const char *identity,
   3247                                                          unsigned char *psk,
   3248                                                          unsigned int
   3249                                                          max_psk_len))
   3250 {
   3251     ctx->psk_server_callback = cb;
   3252 }
   3253 #endif
   3254 
   3255 void SSL_CTX_set_msg_callback(SSL_CTX *ctx,
   3256                               void (*cb) (int write_p, int version,
   3257                                           int content_type, const void *buf,
   3258                                           size_t len, SSL *ssl, void *arg))
   3259 {
   3260     SSL_CTX_callback_ctrl(ctx, SSL_CTRL_SET_MSG_CALLBACK, (void (*)(void))cb);
   3261 }
   3262 
   3263 void SSL_set_msg_callback(SSL *ssl,
   3264                           void (*cb) (int write_p, int version,
   3265                                       int content_type, const void *buf,
   3266                                       size_t len, SSL *ssl, void *arg))
   3267 {
   3268     SSL_callback_ctrl(ssl, SSL_CTRL_SET_MSG_CALLBACK, (void (*)(void))cb);
   3269 }
   3270 
   3271 /*
   3272  * Allocates new EVP_MD_CTX and sets pointer to it into given pointer
   3273  * vairable, freeing EVP_MD_CTX previously stored in that variable, if any.
   3274  * If EVP_MD pointer is passed, initializes ctx with this md Returns newly
   3275  * allocated ctx;
   3276  */
   3277 
   3278 EVP_MD_CTX *ssl_replace_hash(EVP_MD_CTX **hash, const EVP_MD *md)
   3279 {
   3280     ssl_clear_hash_ctx(hash);
   3281     *hash = EVP_MD_CTX_create();
   3282     if (md)
   3283         EVP_DigestInit_ex(*hash, md, NULL);
   3284     return *hash;
   3285 }
   3286 
   3287 void ssl_clear_hash_ctx(EVP_MD_CTX **hash)
   3288 {
   3289 
   3290     if (*hash)
   3291         EVP_MD_CTX_destroy(*hash);
   3292     *hash = NULL;
   3293 }
   3294 
   3295 void SSL_set_debug(SSL *s, int debug)
   3296 {
   3297     s->debug = debug;
   3298 }
   3299 
   3300 int SSL_cache_hit(SSL *s)
   3301 {
   3302     return s->hit;
   3303 }
   3304 
   3305 #if defined(_WINDLL) && defined(OPENSSL_SYS_WIN16)
   3306 # include "../crypto/bio/bss_file.c"
   3307 #endif
   3308 
   3309 IMPLEMENT_STACK_OF(SSL_CIPHER)
   3310 IMPLEMENT_STACK_OF(SSL_COMP)
   3311 IMPLEMENT_OBJ_BSEARCH_GLOBAL_CMP_FN(SSL_CIPHER, SSL_CIPHER, ssl_cipher_id);
   3312