LCOV - code coverage report
Current view: top level - third_party/openssl/ssl - ssl_lib.c (source / functions) Hit Total Coverage
Test: tmp.zDYK9MVh93 Lines: 548 1429 38.3 %
Date: 2015-10-10 Functions: 48 174 27.6 %

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

Generated by: LCOV version 1.10