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