Home | History | Annotate | Line # | Download | only in ssl
      1 /*
      2  * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved.
      3  * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved
      4  * Copyright 2005 Nokia. All rights reserved.
      5  *
      6  * Licensed under the OpenSSL license (the "License").  You may not use
      7  * this file except in compliance with the License.  You can obtain a copy
      8  * in the file LICENSE in the source distribution or at
      9  * https://www.openssl.org/source/license.html
     10  */
     11 
     12 #include <stdio.h>
     13 #include "ssl_local.h"
     14 #include <openssl/objects.h>
     15 #include <openssl/x509v3.h>
     16 #include <openssl/rand.h>
     17 #include <openssl/rand_drbg.h>
     18 #include <openssl/ocsp.h>
     19 #include <openssl/dh.h>
     20 #include <openssl/engine.h>
     21 #include <openssl/async.h>
     22 #include <openssl/ct.h>
     23 #include "internal/cryptlib.h"
     24 #include "internal/refcount.h"
     25 
     26 const char SSL_version_str[] = OPENSSL_VERSION_TEXT;
     27 
     28 static int ssl_undefined_function_1(SSL *ssl, SSL3_RECORD *r, size_t s, int t)
     29 {
     30     (void)r;
     31     (void)s;
     32     (void)t;
     33     return ssl_undefined_function(ssl);
     34 }
     35 
     36 static int ssl_undefined_function_2(SSL *ssl, SSL3_RECORD *r, unsigned char *s,
     37                                     int t)
     38 {
     39     (void)r;
     40     (void)s;
     41     (void)t;
     42     return ssl_undefined_function(ssl);
     43 }
     44 
     45 static int ssl_undefined_function_3(SSL *ssl, unsigned char *r,
     46                                     unsigned char *s, size_t t, size_t *u)
     47 {
     48     (void)r;
     49     (void)s;
     50     (void)t;
     51     (void)u;
     52     return ssl_undefined_function(ssl);
     53 }
     54 
     55 static int ssl_undefined_function_4(SSL *ssl, int r)
     56 {
     57     (void)r;
     58     return ssl_undefined_function(ssl);
     59 }
     60 
     61 static size_t ssl_undefined_function_5(SSL *ssl, const char *r, size_t s,
     62                                        unsigned char *t)
     63 {
     64     (void)r;
     65     (void)s;
     66     (void)t;
     67     return ssl_undefined_function(ssl);
     68 }
     69 
     70 static int ssl_undefined_function_6(int r)
     71 {
     72     (void)r;
     73     return ssl_undefined_function(NULL);
     74 }
     75 
     76 static int ssl_undefined_function_7(SSL *ssl, unsigned char *r, size_t s,
     77                                     const char *t, size_t u,
     78                                     const unsigned char *v, size_t w, int x)
     79 {
     80     (void)r;
     81     (void)s;
     82     (void)t;
     83     (void)u;
     84     (void)v;
     85     (void)w;
     86     (void)x;
     87     return ssl_undefined_function(ssl);
     88 }
     89 
     90 SSL3_ENC_METHOD ssl3_undef_enc_method = {
     91     ssl_undefined_function_1,
     92     ssl_undefined_function_2,
     93     ssl_undefined_function,
     94     ssl_undefined_function_3,
     95     ssl_undefined_function_4,
     96     ssl_undefined_function_5,
     97     NULL,                       /* client_finished_label */
     98     0,                          /* client_finished_label_len */
     99     NULL,                       /* server_finished_label */
    100     0,                          /* server_finished_label_len */
    101     ssl_undefined_function_6,
    102     ssl_undefined_function_7,
    103 };
    104 
    105 struct ssl_async_args {
    106     SSL *s;
    107     void *buf;
    108     size_t num;
    109     enum { READFUNC, WRITEFUNC, OTHERFUNC } type;
    110     union {
    111         int (*func_read) (SSL *, void *, size_t, size_t *);
    112         int (*func_write) (SSL *, const void *, size_t, size_t *);
    113         int (*func_other) (SSL *);
    114     } f;
    115 };
    116 
    117 static const struct {
    118     uint8_t mtype;
    119     uint8_t ord;
    120     int nid;
    121 } dane_mds[] = {
    122     {
    123         DANETLS_MATCHING_FULL, 0, NID_undef
    124     },
    125     {
    126         DANETLS_MATCHING_2256, 1, NID_sha256
    127     },
    128     {
    129         DANETLS_MATCHING_2512, 2, NID_sha512
    130     },
    131 };
    132 
    133 static int dane_ctx_enable(struct dane_ctx_st *dctx)
    134 {
    135     const EVP_MD **mdevp;
    136     uint8_t *mdord;
    137     uint8_t mdmax = DANETLS_MATCHING_LAST;
    138     int n = ((int)mdmax) + 1;   /* int to handle PrivMatch(255) */
    139     size_t i;
    140 
    141     if (dctx->mdevp != NULL)
    142         return 1;
    143 
    144     mdevp = OPENSSL_zalloc(n * sizeof(*mdevp));
    145     mdord = OPENSSL_zalloc(n * sizeof(*mdord));
    146 
    147     if (mdord == NULL || mdevp == NULL) {
    148         OPENSSL_free(mdord);
    149         OPENSSL_free(mdevp);
    150         SSLerr(SSL_F_DANE_CTX_ENABLE, ERR_R_MALLOC_FAILURE);
    151         return 0;
    152     }
    153 
    154     /* Install default entries */
    155     for (i = 0; i < OSSL_NELEM(dane_mds); ++i) {
    156         const EVP_MD *md;
    157 
    158         if (dane_mds[i].nid == NID_undef ||
    159             (md = EVP_get_digestbynid(dane_mds[i].nid)) == NULL)
    160             continue;
    161         mdevp[dane_mds[i].mtype] = md;
    162         mdord[dane_mds[i].mtype] = dane_mds[i].ord;
    163     }
    164 
    165     dctx->mdevp = mdevp;
    166     dctx->mdord = mdord;
    167     dctx->mdmax = mdmax;
    168 
    169     return 1;
    170 }
    171 
    172 static void dane_ctx_final(struct dane_ctx_st *dctx)
    173 {
    174     OPENSSL_free(dctx->mdevp);
    175     dctx->mdevp = NULL;
    176 
    177     OPENSSL_free(dctx->mdord);
    178     dctx->mdord = NULL;
    179     dctx->mdmax = 0;
    180 }
    181 
    182 static void tlsa_free(danetls_record *t)
    183 {
    184     if (t == NULL)
    185         return;
    186     OPENSSL_free(t->data);
    187     EVP_PKEY_free(t->spki);
    188     OPENSSL_free(t);
    189 }
    190 
    191 static void dane_final(SSL_DANE *dane)
    192 {
    193     sk_danetls_record_pop_free(dane->trecs, tlsa_free);
    194     dane->trecs = NULL;
    195 
    196     sk_X509_pop_free(dane->certs, X509_free);
    197     dane->certs = NULL;
    198 
    199     X509_free(dane->mcert);
    200     dane->mcert = NULL;
    201     dane->mtlsa = NULL;
    202     dane->mdpth = -1;
    203     dane->pdpth = -1;
    204 }
    205 
    206 /*
    207  * dane_copy - Copy dane configuration, sans verification state.
    208  */
    209 static int ssl_dane_dup(SSL *to, SSL *from)
    210 {
    211     int num;
    212     int i;
    213 
    214     if (!DANETLS_ENABLED(&from->dane))
    215         return 1;
    216 
    217     num = sk_danetls_record_num(from->dane.trecs);
    218     dane_final(&to->dane);
    219     to->dane.flags = from->dane.flags;
    220     to->dane.dctx = &to->ctx->dane;
    221     to->dane.trecs = sk_danetls_record_new_reserve(NULL, num);
    222 
    223     if (to->dane.trecs == NULL) {
    224         SSLerr(SSL_F_SSL_DANE_DUP, ERR_R_MALLOC_FAILURE);
    225         return 0;
    226     }
    227 
    228     for (i = 0; i < num; ++i) {
    229         danetls_record *t = sk_danetls_record_value(from->dane.trecs, i);
    230 
    231         if (SSL_dane_tlsa_add(to, t->usage, t->selector, t->mtype,
    232                               t->data, t->dlen) <= 0)
    233             return 0;
    234     }
    235     return 1;
    236 }
    237 
    238 static int dane_mtype_set(struct dane_ctx_st *dctx,
    239                           const EVP_MD *md, uint8_t mtype, uint8_t ord)
    240 {
    241     int i;
    242 
    243     if (mtype == DANETLS_MATCHING_FULL && md != NULL) {
    244         SSLerr(SSL_F_DANE_MTYPE_SET, SSL_R_DANE_CANNOT_OVERRIDE_MTYPE_FULL);
    245         return 0;
    246     }
    247 
    248     if (mtype > dctx->mdmax) {
    249         const EVP_MD **mdevp;
    250         uint8_t *mdord;
    251         int n = ((int)mtype) + 1;
    252 
    253         mdevp = OPENSSL_realloc(dctx->mdevp, n * sizeof(*mdevp));
    254         if (mdevp == NULL) {
    255             SSLerr(SSL_F_DANE_MTYPE_SET, ERR_R_MALLOC_FAILURE);
    256             return -1;
    257         }
    258         dctx->mdevp = mdevp;
    259 
    260         mdord = OPENSSL_realloc(dctx->mdord, n * sizeof(*mdord));
    261         if (mdord == NULL) {
    262             SSLerr(SSL_F_DANE_MTYPE_SET, ERR_R_MALLOC_FAILURE);
    263             return -1;
    264         }
    265         dctx->mdord = mdord;
    266 
    267         /* Zero-fill any gaps */
    268         for (i = dctx->mdmax + 1; i < mtype; ++i) {
    269             mdevp[i] = NULL;
    270             mdord[i] = 0;
    271         }
    272 
    273         dctx->mdmax = mtype;
    274     }
    275 
    276     dctx->mdevp[mtype] = md;
    277     /* Coerce ordinal of disabled matching types to 0 */
    278     dctx->mdord[mtype] = (md == NULL) ? 0 : ord;
    279 
    280     return 1;
    281 }
    282 
    283 static const EVP_MD *tlsa_md_get(SSL_DANE *dane, uint8_t mtype)
    284 {
    285     if (mtype > dane->dctx->mdmax)
    286         return NULL;
    287     return dane->dctx->mdevp[mtype];
    288 }
    289 
    290 static int dane_tlsa_add(SSL_DANE *dane,
    291                          uint8_t usage,
    292                          uint8_t selector,
    293                          uint8_t mtype, unsigned const char *data, size_t dlen)
    294 {
    295     danetls_record *t;
    296     const EVP_MD *md = NULL;
    297     int ilen = (int)dlen;
    298     int i;
    299     int num;
    300 
    301     if (dane->trecs == NULL) {
    302         SSLerr(SSL_F_DANE_TLSA_ADD, SSL_R_DANE_NOT_ENABLED);
    303         return -1;
    304     }
    305 
    306     if (ilen < 0 || dlen != (size_t)ilen) {
    307         SSLerr(SSL_F_DANE_TLSA_ADD, SSL_R_DANE_TLSA_BAD_DATA_LENGTH);
    308         return 0;
    309     }
    310 
    311     if (usage > DANETLS_USAGE_LAST) {
    312         SSLerr(SSL_F_DANE_TLSA_ADD, SSL_R_DANE_TLSA_BAD_CERTIFICATE_USAGE);
    313         return 0;
    314     }
    315 
    316     if (selector > DANETLS_SELECTOR_LAST) {
    317         SSLerr(SSL_F_DANE_TLSA_ADD, SSL_R_DANE_TLSA_BAD_SELECTOR);
    318         return 0;
    319     }
    320 
    321     if (mtype != DANETLS_MATCHING_FULL) {
    322         md = tlsa_md_get(dane, mtype);
    323         if (md == NULL) {
    324             SSLerr(SSL_F_DANE_TLSA_ADD, SSL_R_DANE_TLSA_BAD_MATCHING_TYPE);
    325             return 0;
    326         }
    327     }
    328 
    329     if (md != NULL && dlen != (size_t)EVP_MD_size(md)) {
    330         SSLerr(SSL_F_DANE_TLSA_ADD, SSL_R_DANE_TLSA_BAD_DIGEST_LENGTH);
    331         return 0;
    332     }
    333     if (!data) {
    334         SSLerr(SSL_F_DANE_TLSA_ADD, SSL_R_DANE_TLSA_NULL_DATA);
    335         return 0;
    336     }
    337 
    338     if ((t = OPENSSL_zalloc(sizeof(*t))) == NULL) {
    339         SSLerr(SSL_F_DANE_TLSA_ADD, ERR_R_MALLOC_FAILURE);
    340         return -1;
    341     }
    342 
    343     t->usage = usage;
    344     t->selector = selector;
    345     t->mtype = mtype;
    346     t->data = OPENSSL_malloc(dlen);
    347     if (t->data == NULL) {
    348         tlsa_free(t);
    349         SSLerr(SSL_F_DANE_TLSA_ADD, ERR_R_MALLOC_FAILURE);
    350         return -1;
    351     }
    352     memcpy(t->data, data, dlen);
    353     t->dlen = dlen;
    354 
    355     /* Validate and cache full certificate or public key */
    356     if (mtype == DANETLS_MATCHING_FULL) {
    357         const unsigned char *p = data;
    358         X509 *cert = NULL;
    359         EVP_PKEY *pkey = NULL;
    360 
    361         switch (selector) {
    362         case DANETLS_SELECTOR_CERT:
    363             if (!d2i_X509(&cert, &p, ilen) || p < data ||
    364                 dlen != (size_t)(p - data)) {
    365                 tlsa_free(t);
    366                 SSLerr(SSL_F_DANE_TLSA_ADD, SSL_R_DANE_TLSA_BAD_CERTIFICATE);
    367                 return 0;
    368             }
    369             if (X509_get0_pubkey(cert) == NULL) {
    370                 tlsa_free(t);
    371                 SSLerr(SSL_F_DANE_TLSA_ADD, SSL_R_DANE_TLSA_BAD_CERTIFICATE);
    372                 return 0;
    373             }
    374 
    375             if ((DANETLS_USAGE_BIT(usage) & DANETLS_TA_MASK) == 0) {
    376                 X509_free(cert);
    377                 break;
    378             }
    379 
    380             /*
    381              * For usage DANE-TA(2), we support authentication via "2 0 0" TLSA
    382              * records that contain full certificates of trust-anchors that are
    383              * not present in the wire chain.  For usage PKIX-TA(0), we augment
    384              * the chain with untrusted Full(0) certificates from DNS, in case
    385              * they are missing from the chain.
    386              */
    387             if ((dane->certs == NULL &&
    388                  (dane->certs = sk_X509_new_null()) == NULL) ||
    389                 !sk_X509_push(dane->certs, cert)) {
    390                 SSLerr(SSL_F_DANE_TLSA_ADD, ERR_R_MALLOC_FAILURE);
    391                 X509_free(cert);
    392                 tlsa_free(t);
    393                 return -1;
    394             }
    395             break;
    396 
    397         case DANETLS_SELECTOR_SPKI:
    398             if (!d2i_PUBKEY(&pkey, &p, ilen) || p < data ||
    399                 dlen != (size_t)(p - data)) {
    400                 tlsa_free(t);
    401                 SSLerr(SSL_F_DANE_TLSA_ADD, SSL_R_DANE_TLSA_BAD_PUBLIC_KEY);
    402                 return 0;
    403             }
    404 
    405             /*
    406              * For usage DANE-TA(2), we support authentication via "2 1 0" TLSA
    407              * records that contain full bare keys of trust-anchors that are
    408              * not present in the wire chain.
    409              */
    410             if (usage == DANETLS_USAGE_DANE_TA)
    411                 t->spki = pkey;
    412             else
    413                 EVP_PKEY_free(pkey);
    414             break;
    415         }
    416     }
    417 
    418     /*-
    419      * Find the right insertion point for the new record.
    420      *
    421      * See crypto/x509/x509_vfy.c.  We sort DANE-EE(3) records first, so that
    422      * they can be processed first, as they require no chain building, and no
    423      * expiration or hostname checks.  Because DANE-EE(3) is numerically
    424      * largest, this is accomplished via descending sort by "usage".
    425      *
    426      * We also sort in descending order by matching ordinal to simplify
    427      * the implementation of digest agility in the verification code.
    428      *
    429      * The choice of order for the selector is not significant, so we
    430      * use the same descending order for consistency.
    431      */
    432     num = sk_danetls_record_num(dane->trecs);
    433     for (i = 0; i < num; ++i) {
    434         danetls_record *rec = sk_danetls_record_value(dane->trecs, i);
    435 
    436         if (rec->usage > usage)
    437             continue;
    438         if (rec->usage < usage)
    439             break;
    440         if (rec->selector > selector)
    441             continue;
    442         if (rec->selector < selector)
    443             break;
    444         if (dane->dctx->mdord[rec->mtype] > dane->dctx->mdord[mtype])
    445             continue;
    446         break;
    447     }
    448 
    449     if (!sk_danetls_record_insert(dane->trecs, t, i)) {
    450         tlsa_free(t);
    451         SSLerr(SSL_F_DANE_TLSA_ADD, ERR_R_MALLOC_FAILURE);
    452         return -1;
    453     }
    454     dane->umask |= DANETLS_USAGE_BIT(usage);
    455 
    456     return 1;
    457 }
    458 
    459 /*
    460  * Return 0 if there is only one version configured and it was disabled
    461  * at configure time.  Return 1 otherwise.
    462  */
    463 static int ssl_check_allowed_versions(int min_version, int max_version)
    464 {
    465     int minisdtls = 0, maxisdtls = 0;
    466 
    467     /* Figure out if we're doing DTLS versions or TLS versions */
    468     if (min_version == DTLS1_BAD_VER
    469         || min_version >> 8 == DTLS1_VERSION_MAJOR)
    470         minisdtls = 1;
    471     if (max_version == DTLS1_BAD_VER
    472         || max_version >> 8 == DTLS1_VERSION_MAJOR)
    473         maxisdtls = 1;
    474     /* A wildcard version of 0 could be DTLS or TLS. */
    475     if ((minisdtls && !maxisdtls && max_version != 0)
    476         || (maxisdtls && !minisdtls && min_version != 0)) {
    477         /* Mixing DTLS and TLS versions will lead to sadness; deny it. */
    478         return 0;
    479     }
    480 
    481     if (minisdtls || maxisdtls) {
    482         /* Do DTLS version checks. */
    483         if (min_version == 0)
    484             /* Ignore DTLS1_BAD_VER */
    485             min_version = DTLS1_VERSION;
    486         if (max_version == 0)
    487             max_version = DTLS1_2_VERSION;
    488 #ifdef OPENSSL_NO_DTLS1_2
    489         if (max_version == DTLS1_2_VERSION)
    490             max_version = DTLS1_VERSION;
    491 #endif
    492 #ifdef OPENSSL_NO_DTLS1
    493         if (min_version == DTLS1_VERSION)
    494             min_version = DTLS1_2_VERSION;
    495 #endif
    496         /* Done massaging versions; do the check. */
    497         if (0
    498 #ifdef OPENSSL_NO_DTLS1
    499             || (DTLS_VERSION_GE(min_version, DTLS1_VERSION)
    500                 && DTLS_VERSION_GE(DTLS1_VERSION, max_version))
    501 #endif
    502 #ifdef OPENSSL_NO_DTLS1_2
    503             || (DTLS_VERSION_GE(min_version, DTLS1_2_VERSION)
    504                 && DTLS_VERSION_GE(DTLS1_2_VERSION, max_version))
    505 #endif
    506             )
    507             return 0;
    508     } else {
    509         /* Regular TLS version checks. */
    510         if (min_version == 0)
    511             min_version = SSL3_VERSION;
    512         if (max_version == 0)
    513             max_version = TLS1_3_VERSION;
    514 #ifdef OPENSSL_NO_TLS1_3
    515         if (max_version == TLS1_3_VERSION)
    516             max_version = TLS1_2_VERSION;
    517 #endif
    518 #ifdef OPENSSL_NO_TLS1_2
    519         if (max_version == TLS1_2_VERSION)
    520             max_version = TLS1_1_VERSION;
    521 #endif
    522 #ifdef OPENSSL_NO_TLS1_1
    523         if (max_version == TLS1_1_VERSION)
    524             max_version = TLS1_VERSION;
    525 #endif
    526 #ifdef OPENSSL_NO_TLS1
    527         if (max_version == TLS1_VERSION)
    528             max_version = SSL3_VERSION;
    529 #endif
    530 #ifdef OPENSSL_NO_SSL3
    531         if (min_version == SSL3_VERSION)
    532             min_version = TLS1_VERSION;
    533 #endif
    534 #ifdef OPENSSL_NO_TLS1
    535         if (min_version == TLS1_VERSION)
    536             min_version = TLS1_1_VERSION;
    537 #endif
    538 #ifdef OPENSSL_NO_TLS1_1
    539         if (min_version == TLS1_1_VERSION)
    540             min_version = TLS1_2_VERSION;
    541 #endif
    542 #ifdef OPENSSL_NO_TLS1_2
    543         if (min_version == TLS1_2_VERSION)
    544             min_version = TLS1_3_VERSION;
    545 #endif
    546         /* Done massaging versions; do the check. */
    547         if (0
    548 #ifdef OPENSSL_NO_SSL3
    549             || (min_version <= SSL3_VERSION && SSL3_VERSION <= max_version)
    550 #endif
    551 #ifdef OPENSSL_NO_TLS1
    552             || (min_version <= TLS1_VERSION && TLS1_VERSION <= max_version)
    553 #endif
    554 #ifdef OPENSSL_NO_TLS1_1
    555             || (min_version <= TLS1_1_VERSION && TLS1_1_VERSION <= max_version)
    556 #endif
    557 #ifdef OPENSSL_NO_TLS1_2
    558             || (min_version <= TLS1_2_VERSION && TLS1_2_VERSION <= max_version)
    559 #endif
    560 #ifdef OPENSSL_NO_TLS1_3
    561             || (min_version <= TLS1_3_VERSION && TLS1_3_VERSION <= max_version)
    562 #endif
    563             )
    564             return 0;
    565     }
    566     return 1;
    567 }
    568 
    569 static void clear_ciphers(SSL *s)
    570 {
    571     /* clear the current cipher */
    572     ssl_clear_cipher_ctx(s);
    573     ssl_clear_hash_ctx(&s->read_hash);
    574     ssl_clear_hash_ctx(&s->write_hash);
    575 }
    576 
    577 int SSL_clear(SSL *s)
    578 {
    579     if (s->method == NULL) {
    580         SSLerr(SSL_F_SSL_CLEAR, SSL_R_NO_METHOD_SPECIFIED);
    581         return 0;
    582     }
    583 
    584     if (ssl_clear_bad_session(s)) {
    585         SSL_SESSION_free(s->session);
    586         s->session = NULL;
    587     }
    588     SSL_SESSION_free(s->psksession);
    589     s->psksession = NULL;
    590     OPENSSL_free(s->psksession_id);
    591     s->psksession_id = NULL;
    592     s->psksession_id_len = 0;
    593     s->hello_retry_request = 0;
    594     s->sent_tickets = 0;
    595 
    596     s->error = 0;
    597     s->hit = 0;
    598     s->shutdown = 0;
    599 
    600     if (s->renegotiate) {
    601         SSLerr(SSL_F_SSL_CLEAR, ERR_R_INTERNAL_ERROR);
    602         return 0;
    603     }
    604 
    605     ossl_statem_clear(s);
    606 
    607     s->version = s->method->version;
    608     s->client_version = s->version;
    609     s->rwstate = SSL_NOTHING;
    610 
    611     BUF_MEM_free(s->init_buf);
    612     s->init_buf = NULL;
    613     clear_ciphers(s);
    614     s->first_packet = 0;
    615 
    616     s->key_update = SSL_KEY_UPDATE_NONE;
    617 
    618     EVP_MD_CTX_free(s->pha_dgst);
    619     s->pha_dgst = NULL;
    620 
    621     /* Reset DANE verification result state */
    622     s->dane.mdpth = -1;
    623     s->dane.pdpth = -1;
    624     X509_free(s->dane.mcert);
    625     s->dane.mcert = NULL;
    626     s->dane.mtlsa = NULL;
    627 
    628     /* Clear the verification result peername */
    629     X509_VERIFY_PARAM_move_peername(s->param, NULL);
    630 
    631     /* Clear any shared connection state */
    632     OPENSSL_free(s->shared_sigalgs);
    633     s->shared_sigalgs = NULL;
    634     s->shared_sigalgslen = 0;
    635 
    636     /*
    637      * Check to see if we were changed into a different method, if so, revert
    638      * back.
    639      */
    640     if (s->method != s->ctx->method) {
    641         s->method->ssl_free(s);
    642         s->method = s->ctx->method;
    643         if (!s->method->ssl_new(s))
    644             return 0;
    645     } else {
    646         if (!s->method->ssl_clear(s))
    647             return 0;
    648     }
    649 
    650     RECORD_LAYER_clear(&s->rlayer);
    651 
    652     return 1;
    653 }
    654 
    655 /** Used to change an SSL_CTXs default SSL method type */
    656 int SSL_CTX_set_ssl_version(SSL_CTX *ctx, const SSL_METHOD *meth)
    657 {
    658     STACK_OF(SSL_CIPHER) *sk;
    659 
    660     ctx->method = meth;
    661 
    662     if (!SSL_CTX_set_ciphersuites(ctx, TLS_DEFAULT_CIPHERSUITES)) {
    663         SSLerr(SSL_F_SSL_CTX_SET_SSL_VERSION, SSL_R_SSL_LIBRARY_HAS_NO_CIPHERS);
    664         return 0;
    665     }
    666     sk = ssl_create_cipher_list(ctx->method,
    667                                 ctx->tls13_ciphersuites,
    668                                 &(ctx->cipher_list),
    669                                 &(ctx->cipher_list_by_id),
    670                                 SSL_DEFAULT_CIPHER_LIST, ctx->cert);
    671     if ((sk == NULL) || (sk_SSL_CIPHER_num(sk) <= 0)) {
    672         SSLerr(SSL_F_SSL_CTX_SET_SSL_VERSION, SSL_R_SSL_LIBRARY_HAS_NO_CIPHERS);
    673         return 0;
    674     }
    675     return 1;
    676 }
    677 
    678 SSL *SSL_new(SSL_CTX *ctx)
    679 {
    680     SSL *s;
    681 
    682     if (ctx == NULL) {
    683         SSLerr(SSL_F_SSL_NEW, SSL_R_NULL_SSL_CTX);
    684         return NULL;
    685     }
    686     if (ctx->method == NULL) {
    687         SSLerr(SSL_F_SSL_NEW, SSL_R_SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION);
    688         return NULL;
    689     }
    690 
    691     s = OPENSSL_zalloc(sizeof(*s));
    692     if (s == NULL)
    693         goto err;
    694 
    695     s->references = 1;
    696     s->lock = CRYPTO_THREAD_lock_new();
    697     if (s->lock == NULL) {
    698         OPENSSL_free(s);
    699         s = NULL;
    700         goto err;
    701     }
    702 
    703     RECORD_LAYER_init(&s->rlayer, s);
    704 
    705     s->options = ctx->options;
    706     s->dane.flags = ctx->dane.flags;
    707     s->min_proto_version = ctx->min_proto_version;
    708     s->max_proto_version = ctx->max_proto_version;
    709     s->mode = ctx->mode;
    710     s->max_cert_list = ctx->max_cert_list;
    711     s->max_early_data = ctx->max_early_data;
    712     s->recv_max_early_data = ctx->recv_max_early_data;
    713     s->num_tickets = ctx->num_tickets;
    714     s->pha_enabled = ctx->pha_enabled;
    715 
    716     /* Shallow copy of the ciphersuites stack */
    717     s->tls13_ciphersuites = sk_SSL_CIPHER_dup(ctx->tls13_ciphersuites);
    718     if (s->tls13_ciphersuites == NULL)
    719         goto err;
    720 
    721     /*
    722      * Earlier library versions used to copy the pointer to the CERT, not
    723      * its contents; only when setting new parameters for the per-SSL
    724      * copy, ssl_cert_new would be called (and the direct reference to
    725      * the per-SSL_CTX settings would be lost, but those still were
    726      * indirectly accessed for various purposes, and for that reason they
    727      * used to be known as s->ctx->default_cert). Now we don't look at the
    728      * SSL_CTX's CERT after having duplicated it once.
    729      */
    730     s->cert = ssl_cert_dup(ctx->cert);
    731     if (s->cert == NULL)
    732         goto err;
    733 
    734     RECORD_LAYER_set_read_ahead(&s->rlayer, ctx->read_ahead);
    735     s->msg_callback = ctx->msg_callback;
    736     s->msg_callback_arg = ctx->msg_callback_arg;
    737     s->verify_mode = ctx->verify_mode;
    738     s->not_resumable_session_cb = ctx->not_resumable_session_cb;
    739     s->record_padding_cb = ctx->record_padding_cb;
    740     s->record_padding_arg = ctx->record_padding_arg;
    741     s->block_padding = ctx->block_padding;
    742     s->sid_ctx_length = ctx->sid_ctx_length;
    743     if (!ossl_assert(s->sid_ctx_length <= sizeof(s->sid_ctx)))
    744         goto err;
    745     memcpy(&s->sid_ctx, &ctx->sid_ctx, sizeof(s->sid_ctx));
    746     s->verify_callback = ctx->default_verify_callback;
    747     s->generate_session_id = ctx->generate_session_id;
    748 
    749     s->param = X509_VERIFY_PARAM_new();
    750     if (s->param == NULL)
    751         goto err;
    752     X509_VERIFY_PARAM_inherit(s->param, ctx->param);
    753     s->quiet_shutdown = ctx->quiet_shutdown;
    754 
    755     s->ext.max_fragment_len_mode = ctx->ext.max_fragment_len_mode;
    756     s->max_send_fragment = ctx->max_send_fragment;
    757     s->split_send_fragment = ctx->split_send_fragment;
    758     s->max_pipelines = ctx->max_pipelines;
    759     if (s->max_pipelines > 1)
    760         RECORD_LAYER_set_read_ahead(&s->rlayer, 1);
    761     if (ctx->default_read_buf_len > 0)
    762         SSL_set_default_read_buffer_len(s, ctx->default_read_buf_len);
    763 
    764     SSL_CTX_up_ref(ctx);
    765     s->ctx = ctx;
    766     s->ext.debug_cb = 0;
    767     s->ext.debug_arg = NULL;
    768     s->ext.ticket_expected = 0;
    769     s->ext.status_type = ctx->ext.status_type;
    770     s->ext.status_expected = 0;
    771     s->ext.ocsp.ids = NULL;
    772     s->ext.ocsp.exts = NULL;
    773     s->ext.ocsp.resp = NULL;
    774     s->ext.ocsp.resp_len = 0;
    775     SSL_CTX_up_ref(ctx);
    776     s->session_ctx = ctx;
    777 #ifndef OPENSSL_NO_EC
    778     if (ctx->ext.ecpointformats) {
    779         s->ext.ecpointformats =
    780             OPENSSL_memdup(ctx->ext.ecpointformats,
    781                            ctx->ext.ecpointformats_len);
    782         if (!s->ext.ecpointformats) {
    783             s->ext.ecpointformats_len = 0;
    784             goto err;
    785         }
    786         s->ext.ecpointformats_len =
    787             ctx->ext.ecpointformats_len;
    788     }
    789     if (ctx->ext.supportedgroups) {
    790         s->ext.supportedgroups =
    791             OPENSSL_memdup(ctx->ext.supportedgroups,
    792                            ctx->ext.supportedgroups_len
    793                                 * sizeof(*ctx->ext.supportedgroups));
    794         if (!s->ext.supportedgroups) {
    795             s->ext.supportedgroups_len = 0;
    796             goto err;
    797         }
    798         s->ext.supportedgroups_len = ctx->ext.supportedgroups_len;
    799     }
    800 #endif
    801 #ifndef OPENSSL_NO_NEXTPROTONEG
    802     s->ext.npn = NULL;
    803 #endif
    804 
    805     if (s->ctx->ext.alpn) {
    806         s->ext.alpn = OPENSSL_malloc(s->ctx->ext.alpn_len);
    807         if (s->ext.alpn == NULL) {
    808             s->ext.alpn_len = 0;
    809             goto err;
    810         }
    811         memcpy(s->ext.alpn, s->ctx->ext.alpn, s->ctx->ext.alpn_len);
    812         s->ext.alpn_len = s->ctx->ext.alpn_len;
    813     }
    814 
    815     s->verified_chain = NULL;
    816     s->verify_result = X509_V_OK;
    817 
    818     s->default_passwd_callback = ctx->default_passwd_callback;
    819     s->default_passwd_callback_userdata = ctx->default_passwd_callback_userdata;
    820 
    821     s->method = ctx->method;
    822 
    823     s->key_update = SSL_KEY_UPDATE_NONE;
    824 
    825     s->allow_early_data_cb = ctx->allow_early_data_cb;
    826     s->allow_early_data_cb_data = ctx->allow_early_data_cb_data;
    827 
    828     if (!s->method->ssl_new(s))
    829         goto err;
    830 
    831     s->server = (ctx->method->ssl_accept == ssl_undefined_function) ? 0 : 1;
    832 
    833     if (!SSL_clear(s))
    834         goto err;
    835 
    836     if (!CRYPTO_new_ex_data(CRYPTO_EX_INDEX_SSL, s, &s->ex_data))
    837         goto err;
    838 
    839 #ifndef OPENSSL_NO_PSK
    840     s->psk_client_callback = ctx->psk_client_callback;
    841     s->psk_server_callback = ctx->psk_server_callback;
    842 #endif
    843     s->psk_find_session_cb = ctx->psk_find_session_cb;
    844     s->psk_use_session_cb = ctx->psk_use_session_cb;
    845 
    846     s->job = NULL;
    847 
    848 #ifndef OPENSSL_NO_CT
    849     if (!SSL_set_ct_validation_callback(s, ctx->ct_validation_callback,
    850                                         ctx->ct_validation_callback_arg))
    851         goto err;
    852 #endif
    853 
    854     return s;
    855  err:
    856     SSL_free(s);
    857     SSLerr(SSL_F_SSL_NEW, ERR_R_MALLOC_FAILURE);
    858     return NULL;
    859 }
    860 
    861 int SSL_is_dtls(const SSL *s)
    862 {
    863     return SSL_IS_DTLS(s) ? 1 : 0;
    864 }
    865 
    866 int SSL_up_ref(SSL *s)
    867 {
    868     int i;
    869 
    870     if (CRYPTO_UP_REF(&s->references, &i, s->lock) <= 0)
    871         return 0;
    872 
    873     REF_PRINT_COUNT("SSL", s);
    874     REF_ASSERT_ISNT(i < 2);
    875     return ((i > 1) ? 1 : 0);
    876 }
    877 
    878 int SSL_CTX_set_session_id_context(SSL_CTX *ctx, const unsigned char *sid_ctx,
    879                                    unsigned int sid_ctx_len)
    880 {
    881     if (sid_ctx_len > SSL_MAX_SID_CTX_LENGTH) {
    882         SSLerr(SSL_F_SSL_CTX_SET_SESSION_ID_CONTEXT,
    883                SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG);
    884         return 0;
    885     }
    886     ctx->sid_ctx_length = sid_ctx_len;
    887     memcpy(ctx->sid_ctx, sid_ctx, sid_ctx_len);
    888 
    889     return 1;
    890 }
    891 
    892 int SSL_set_session_id_context(SSL *ssl, const unsigned char *sid_ctx,
    893                                unsigned int sid_ctx_len)
    894 {
    895     if (sid_ctx_len > SSL_MAX_SID_CTX_LENGTH) {
    896         SSLerr(SSL_F_SSL_SET_SESSION_ID_CONTEXT,
    897                SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG);
    898         return 0;
    899     }
    900     ssl->sid_ctx_length = sid_ctx_len;
    901     memcpy(ssl->sid_ctx, sid_ctx, sid_ctx_len);
    902 
    903     return 1;
    904 }
    905 
    906 int SSL_CTX_set_generate_session_id(SSL_CTX *ctx, GEN_SESSION_CB cb)
    907 {
    908     CRYPTO_THREAD_write_lock(ctx->lock);
    909     ctx->generate_session_id = cb;
    910     CRYPTO_THREAD_unlock(ctx->lock);
    911     return 1;
    912 }
    913 
    914 int SSL_set_generate_session_id(SSL *ssl, GEN_SESSION_CB cb)
    915 {
    916     CRYPTO_THREAD_write_lock(ssl->lock);
    917     ssl->generate_session_id = cb;
    918     CRYPTO_THREAD_unlock(ssl->lock);
    919     return 1;
    920 }
    921 
    922 int SSL_has_matching_session_id(const SSL *ssl, const unsigned char *id,
    923                                 unsigned int id_len)
    924 {
    925     /*
    926      * A quick examination of SSL_SESSION_hash and SSL_SESSION_cmp shows how
    927      * we can "construct" a session to give us the desired check - i.e. to
    928      * find if there's a session in the hash table that would conflict with
    929      * any new session built out of this id/id_len and the ssl_version in use
    930      * by this SSL.
    931      */
    932     SSL_SESSION r, *p;
    933 
    934     if (id_len > sizeof(r.session_id))
    935         return 0;
    936 
    937     r.ssl_version = ssl->version;
    938     r.session_id_length = id_len;
    939     memcpy(r.session_id, id, id_len);
    940 
    941     CRYPTO_THREAD_read_lock(ssl->session_ctx->lock);
    942     p = lh_SSL_SESSION_retrieve(ssl->session_ctx->sessions, &r);
    943     CRYPTO_THREAD_unlock(ssl->session_ctx->lock);
    944     return (p != NULL);
    945 }
    946 
    947 int SSL_CTX_set_purpose(SSL_CTX *s, int purpose)
    948 {
    949     return X509_VERIFY_PARAM_set_purpose(s->param, purpose);
    950 }
    951 
    952 int SSL_set_purpose(SSL *s, int purpose)
    953 {
    954     return X509_VERIFY_PARAM_set_purpose(s->param, purpose);
    955 }
    956 
    957 int SSL_CTX_set_trust(SSL_CTX *s, int trust)
    958 {
    959     return X509_VERIFY_PARAM_set_trust(s->param, trust);
    960 }
    961 
    962 int SSL_set_trust(SSL *s, int trust)
    963 {
    964     return X509_VERIFY_PARAM_set_trust(s->param, trust);
    965 }
    966 
    967 int SSL_set1_host(SSL *s, const char *hostname)
    968 {
    969     return X509_VERIFY_PARAM_set1_host(s->param, hostname, 0);
    970 }
    971 
    972 int SSL_add1_host(SSL *s, const char *hostname)
    973 {
    974     return X509_VERIFY_PARAM_add1_host(s->param, hostname, 0);
    975 }
    976 
    977 void SSL_set_hostflags(SSL *s, unsigned int flags)
    978 {
    979     X509_VERIFY_PARAM_set_hostflags(s->param, flags);
    980 }
    981 
    982 const char *SSL_get0_peername(SSL *s)
    983 {
    984     return X509_VERIFY_PARAM_get0_peername(s->param);
    985 }
    986 
    987 int SSL_CTX_dane_enable(SSL_CTX *ctx)
    988 {
    989     return dane_ctx_enable(&ctx->dane);
    990 }
    991 
    992 unsigned long SSL_CTX_dane_set_flags(SSL_CTX *ctx, unsigned long flags)
    993 {
    994     unsigned long orig = ctx->dane.flags;
    995 
    996     ctx->dane.flags |= flags;
    997     return orig;
    998 }
    999 
   1000 unsigned long SSL_CTX_dane_clear_flags(SSL_CTX *ctx, unsigned long flags)
   1001 {
   1002     unsigned long orig = ctx->dane.flags;
   1003 
   1004     ctx->dane.flags &= ~flags;
   1005     return orig;
   1006 }
   1007 
   1008 int SSL_dane_enable(SSL *s, const char *basedomain)
   1009 {
   1010     SSL_DANE *dane = &s->dane;
   1011 
   1012     if (s->ctx->dane.mdmax == 0) {
   1013         SSLerr(SSL_F_SSL_DANE_ENABLE, SSL_R_CONTEXT_NOT_DANE_ENABLED);
   1014         return 0;
   1015     }
   1016     if (dane->trecs != NULL) {
   1017         SSLerr(SSL_F_SSL_DANE_ENABLE, SSL_R_DANE_ALREADY_ENABLED);
   1018         return 0;
   1019     }
   1020 
   1021     /*
   1022      * Default SNI name.  This rejects empty names, while set1_host below
   1023      * accepts them and disables host name checks.  To avoid side-effects with
   1024      * invalid input, set the SNI name first.
   1025      */
   1026     if (s->ext.hostname == NULL) {
   1027         if (!SSL_set_tlsext_host_name(s, basedomain)) {
   1028             SSLerr(SSL_F_SSL_DANE_ENABLE, SSL_R_ERROR_SETTING_TLSA_BASE_DOMAIN);
   1029             return -1;
   1030         }
   1031     }
   1032 
   1033     /* Primary RFC6125 reference identifier */
   1034     if (!X509_VERIFY_PARAM_set1_host(s->param, basedomain, 0)) {
   1035         SSLerr(SSL_F_SSL_DANE_ENABLE, SSL_R_ERROR_SETTING_TLSA_BASE_DOMAIN);
   1036         return -1;
   1037     }
   1038 
   1039     dane->mdpth = -1;
   1040     dane->pdpth = -1;
   1041     dane->dctx = &s->ctx->dane;
   1042     dane->trecs = sk_danetls_record_new_null();
   1043 
   1044     if (dane->trecs == NULL) {
   1045         SSLerr(SSL_F_SSL_DANE_ENABLE, ERR_R_MALLOC_FAILURE);
   1046         return -1;
   1047     }
   1048     return 1;
   1049 }
   1050 
   1051 unsigned long SSL_dane_set_flags(SSL *ssl, unsigned long flags)
   1052 {
   1053     unsigned long orig = ssl->dane.flags;
   1054 
   1055     ssl->dane.flags |= flags;
   1056     return orig;
   1057 }
   1058 
   1059 unsigned long SSL_dane_clear_flags(SSL *ssl, unsigned long flags)
   1060 {
   1061     unsigned long orig = ssl->dane.flags;
   1062 
   1063     ssl->dane.flags &= ~flags;
   1064     return orig;
   1065 }
   1066 
   1067 int SSL_get0_dane_authority(SSL *s, X509 **mcert, EVP_PKEY **mspki)
   1068 {
   1069     SSL_DANE *dane = &s->dane;
   1070 
   1071     if (!DANETLS_ENABLED(dane) || s->verify_result != X509_V_OK)
   1072         return -1;
   1073     if (dane->mtlsa) {
   1074         if (mcert)
   1075             *mcert = dane->mcert;
   1076         if (mspki)
   1077             *mspki = (dane->mcert == NULL) ? dane->mtlsa->spki : NULL;
   1078     }
   1079     return dane->mdpth;
   1080 }
   1081 
   1082 int SSL_get0_dane_tlsa(SSL *s, uint8_t *usage, uint8_t *selector,
   1083                        uint8_t *mtype, unsigned const char **data, size_t *dlen)
   1084 {
   1085     SSL_DANE *dane = &s->dane;
   1086 
   1087     if (!DANETLS_ENABLED(dane) || s->verify_result != X509_V_OK)
   1088         return -1;
   1089     if (dane->mtlsa) {
   1090         if (usage)
   1091             *usage = dane->mtlsa->usage;
   1092         if (selector)
   1093             *selector = dane->mtlsa->selector;
   1094         if (mtype)
   1095             *mtype = dane->mtlsa->mtype;
   1096         if (data)
   1097             *data = dane->mtlsa->data;
   1098         if (dlen)
   1099             *dlen = dane->mtlsa->dlen;
   1100     }
   1101     return dane->mdpth;
   1102 }
   1103 
   1104 SSL_DANE *SSL_get0_dane(SSL *s)
   1105 {
   1106     return &s->dane;
   1107 }
   1108 
   1109 int SSL_dane_tlsa_add(SSL *s, uint8_t usage, uint8_t selector,
   1110                       uint8_t mtype, unsigned const char *data, size_t dlen)
   1111 {
   1112     return dane_tlsa_add(&s->dane, usage, selector, mtype, data, dlen);
   1113 }
   1114 
   1115 int SSL_CTX_dane_mtype_set(SSL_CTX *ctx, const EVP_MD *md, uint8_t mtype,
   1116                            uint8_t ord)
   1117 {
   1118     return dane_mtype_set(&ctx->dane, md, mtype, ord);
   1119 }
   1120 
   1121 int SSL_CTX_set1_param(SSL_CTX *ctx, X509_VERIFY_PARAM *vpm)
   1122 {
   1123     return X509_VERIFY_PARAM_set1(ctx->param, vpm);
   1124 }
   1125 
   1126 int SSL_set1_param(SSL *ssl, X509_VERIFY_PARAM *vpm)
   1127 {
   1128     return X509_VERIFY_PARAM_set1(ssl->param, vpm);
   1129 }
   1130 
   1131 X509_VERIFY_PARAM *SSL_CTX_get0_param(SSL_CTX *ctx)
   1132 {
   1133     return ctx->param;
   1134 }
   1135 
   1136 X509_VERIFY_PARAM *SSL_get0_param(SSL *ssl)
   1137 {
   1138     return ssl->param;
   1139 }
   1140 
   1141 void SSL_certs_clear(SSL *s)
   1142 {
   1143     ssl_cert_clear_certs(s->cert);
   1144 }
   1145 
   1146 void SSL_free(SSL *s)
   1147 {
   1148     int i;
   1149 
   1150     if (s == NULL)
   1151         return;
   1152     CRYPTO_DOWN_REF(&s->references, &i, s->lock);
   1153     REF_PRINT_COUNT("SSL", s);
   1154     if (i > 0)
   1155         return;
   1156     REF_ASSERT_ISNT(i < 0);
   1157 
   1158     X509_VERIFY_PARAM_free(s->param);
   1159     dane_final(&s->dane);
   1160     CRYPTO_free_ex_data(CRYPTO_EX_INDEX_SSL, s, &s->ex_data);
   1161 
   1162     /* Ignore return value */
   1163     ssl_free_wbio_buffer(s);
   1164 
   1165     BIO_free_all(s->wbio);
   1166     BIO_free_all(s->rbio);
   1167 
   1168     BUF_MEM_free(s->init_buf);
   1169 
   1170     /* add extra stuff */
   1171     sk_SSL_CIPHER_free(s->cipher_list);
   1172     sk_SSL_CIPHER_free(s->cipher_list_by_id);
   1173     sk_SSL_CIPHER_free(s->tls13_ciphersuites);
   1174     sk_SSL_CIPHER_free(s->peer_ciphers);
   1175 
   1176     /* Make the next call work :-) */
   1177     if (s->session != NULL) {
   1178         ssl_clear_bad_session(s);
   1179         SSL_SESSION_free(s->session);
   1180     }
   1181     SSL_SESSION_free(s->psksession);
   1182     OPENSSL_free(s->psksession_id);
   1183 
   1184     clear_ciphers(s);
   1185 
   1186     ssl_cert_free(s->cert);
   1187     OPENSSL_free(s->shared_sigalgs);
   1188     /* Free up if allocated */
   1189 
   1190     OPENSSL_free(s->ext.hostname);
   1191     SSL_CTX_free(s->session_ctx);
   1192 #ifndef OPENSSL_NO_EC
   1193     OPENSSL_free(s->ext.ecpointformats);
   1194     OPENSSL_free(s->ext.peer_ecpointformats);
   1195     OPENSSL_free(s->ext.supportedgroups);
   1196     OPENSSL_free(s->ext.peer_supportedgroups);
   1197 #endif                          /* OPENSSL_NO_EC */
   1198     sk_X509_EXTENSION_pop_free(s->ext.ocsp.exts, X509_EXTENSION_free);
   1199 #ifndef OPENSSL_NO_OCSP
   1200     sk_OCSP_RESPID_pop_free(s->ext.ocsp.ids, OCSP_RESPID_free);
   1201 #endif
   1202 #ifndef OPENSSL_NO_CT
   1203     SCT_LIST_free(s->scts);
   1204     OPENSSL_free(s->ext.scts);
   1205 #endif
   1206     OPENSSL_free(s->ext.ocsp.resp);
   1207     OPENSSL_free(s->ext.alpn);
   1208     OPENSSL_free(s->ext.tls13_cookie);
   1209     if (s->clienthello != NULL)
   1210         OPENSSL_free(s->clienthello->pre_proc_exts);
   1211     OPENSSL_free(s->clienthello);
   1212     OPENSSL_free(s->pha_context);
   1213     EVP_MD_CTX_free(s->pha_dgst);
   1214 
   1215     sk_X509_NAME_pop_free(s->ca_names, X509_NAME_free);
   1216     sk_X509_NAME_pop_free(s->client_ca_names, X509_NAME_free);
   1217 
   1218     sk_X509_pop_free(s->verified_chain, X509_free);
   1219 
   1220     if (s->method != NULL)
   1221         s->method->ssl_free(s);
   1222 
   1223     RECORD_LAYER_release(&s->rlayer);
   1224 
   1225     SSL_CTX_free(s->ctx);
   1226 
   1227     ASYNC_WAIT_CTX_free(s->waitctx);
   1228 
   1229 #if !defined(OPENSSL_NO_NEXTPROTONEG)
   1230     OPENSSL_free(s->ext.npn);
   1231 #endif
   1232 
   1233 #ifndef OPENSSL_NO_SRTP
   1234     sk_SRTP_PROTECTION_PROFILE_free(s->srtp_profiles);
   1235 #endif
   1236 
   1237     CRYPTO_THREAD_lock_free(s->lock);
   1238 
   1239     OPENSSL_free(s);
   1240 }
   1241 
   1242 void SSL_set0_rbio(SSL *s, BIO *rbio)
   1243 {
   1244     BIO_free_all(s->rbio);
   1245     s->rbio = rbio;
   1246 }
   1247 
   1248 void SSL_set0_wbio(SSL *s, BIO *wbio)
   1249 {
   1250     /*
   1251      * If the output buffering BIO is still in place, remove it
   1252      */
   1253     if (s->bbio != NULL)
   1254         s->wbio = BIO_pop(s->wbio);
   1255 
   1256     BIO_free_all(s->wbio);
   1257     s->wbio = wbio;
   1258 
   1259     /* Re-attach |bbio| to the new |wbio|. */
   1260     if (s->bbio != NULL)
   1261         s->wbio = BIO_push(s->bbio, s->wbio);
   1262 }
   1263 
   1264 void SSL_set_bio(SSL *s, BIO *rbio, BIO *wbio)
   1265 {
   1266     /*
   1267      * For historical reasons, this function has many different cases in
   1268      * ownership handling.
   1269      */
   1270 
   1271     /* If nothing has changed, do nothing */
   1272     if (rbio == SSL_get_rbio(s) && wbio == SSL_get_wbio(s))
   1273         return;
   1274 
   1275     /*
   1276      * If the two arguments are equal then one fewer reference is granted by the
   1277      * caller than we want to take
   1278      */
   1279     if (rbio != NULL && rbio == wbio)
   1280         BIO_up_ref(rbio);
   1281 
   1282     /*
   1283      * If only the wbio is changed only adopt one reference.
   1284      */
   1285     if (rbio == SSL_get_rbio(s)) {
   1286         SSL_set0_wbio(s, wbio);
   1287         return;
   1288     }
   1289     /*
   1290      * There is an asymmetry here for historical reasons. If only the rbio is
   1291      * changed AND the rbio and wbio were originally different, then we only
   1292      * adopt one reference.
   1293      */
   1294     if (wbio == SSL_get_wbio(s) && SSL_get_rbio(s) != SSL_get_wbio(s)) {
   1295         SSL_set0_rbio(s, rbio);
   1296         return;
   1297     }
   1298 
   1299     /* Otherwise, adopt both references. */
   1300     SSL_set0_rbio(s, rbio);
   1301     SSL_set0_wbio(s, wbio);
   1302 }
   1303 
   1304 BIO *SSL_get_rbio(const SSL *s)
   1305 {
   1306     return s->rbio;
   1307 }
   1308 
   1309 BIO *SSL_get_wbio(const SSL *s)
   1310 {
   1311     if (s->bbio != NULL) {
   1312         /*
   1313          * If |bbio| is active, the true caller-configured BIO is its
   1314          * |next_bio|.
   1315          */
   1316         return BIO_next(s->bbio);
   1317     }
   1318     return s->wbio;
   1319 }
   1320 
   1321 int SSL_get_fd(const SSL *s)
   1322 {
   1323     return SSL_get_rfd(s);
   1324 }
   1325 
   1326 int SSL_get_rfd(const SSL *s)
   1327 {
   1328     int ret = -1;
   1329     BIO *b, *r;
   1330 
   1331     b = SSL_get_rbio(s);
   1332     r = BIO_find_type(b, BIO_TYPE_DESCRIPTOR);
   1333     if (r != NULL)
   1334         BIO_get_fd(r, &ret);
   1335     return ret;
   1336 }
   1337 
   1338 int SSL_get_wfd(const SSL *s)
   1339 {
   1340     int ret = -1;
   1341     BIO *b, *r;
   1342 
   1343     b = SSL_get_wbio(s);
   1344     r = BIO_find_type(b, BIO_TYPE_DESCRIPTOR);
   1345     if (r != NULL)
   1346         BIO_get_fd(r, &ret);
   1347     return ret;
   1348 }
   1349 
   1350 #ifndef OPENSSL_NO_SOCK
   1351 int SSL_set_fd(SSL *s, int fd)
   1352 {
   1353     int ret = 0;
   1354     BIO *bio = NULL;
   1355 
   1356     bio = BIO_new(BIO_s_socket());
   1357 
   1358     if (bio == NULL) {
   1359         SSLerr(SSL_F_SSL_SET_FD, ERR_R_BUF_LIB);
   1360         goto err;
   1361     }
   1362     BIO_set_fd(bio, fd, BIO_NOCLOSE);
   1363     SSL_set_bio(s, bio, bio);
   1364     ret = 1;
   1365  err:
   1366     return ret;
   1367 }
   1368 
   1369 int SSL_set_wfd(SSL *s, int fd)
   1370 {
   1371     BIO *rbio = SSL_get_rbio(s);
   1372 
   1373     if (rbio == NULL || BIO_method_type(rbio) != BIO_TYPE_SOCKET
   1374         || (int)BIO_get_fd(rbio, NULL) != fd) {
   1375         BIO *bio = BIO_new(BIO_s_socket());
   1376 
   1377         if (bio == NULL) {
   1378             SSLerr(SSL_F_SSL_SET_WFD, ERR_R_BUF_LIB);
   1379             return 0;
   1380         }
   1381         BIO_set_fd(bio, fd, BIO_NOCLOSE);
   1382         SSL_set0_wbio(s, bio);
   1383     } else {
   1384         BIO_up_ref(rbio);
   1385         SSL_set0_wbio(s, rbio);
   1386     }
   1387     return 1;
   1388 }
   1389 
   1390 int SSL_set_rfd(SSL *s, int fd)
   1391 {
   1392     BIO *wbio = SSL_get_wbio(s);
   1393 
   1394     if (wbio == NULL || BIO_method_type(wbio) != BIO_TYPE_SOCKET
   1395         || ((int)BIO_get_fd(wbio, NULL) != fd)) {
   1396         BIO *bio = BIO_new(BIO_s_socket());
   1397 
   1398         if (bio == NULL) {
   1399             SSLerr(SSL_F_SSL_SET_RFD, ERR_R_BUF_LIB);
   1400             return 0;
   1401         }
   1402         BIO_set_fd(bio, fd, BIO_NOCLOSE);
   1403         SSL_set0_rbio(s, bio);
   1404     } else {
   1405         BIO_up_ref(wbio);
   1406         SSL_set0_rbio(s, wbio);
   1407     }
   1408 
   1409     return 1;
   1410 }
   1411 #endif
   1412 
   1413 /* return length of latest Finished message we sent, copy to 'buf' */
   1414 size_t SSL_get_finished(const SSL *s, void *buf, size_t count)
   1415 {
   1416     size_t ret = 0;
   1417 
   1418     if (s->s3 != NULL) {
   1419         ret = s->s3->tmp.finish_md_len;
   1420         if (count > ret)
   1421             count = ret;
   1422         memcpy(buf, s->s3->tmp.finish_md, count);
   1423     }
   1424     return ret;
   1425 }
   1426 
   1427 /* return length of latest Finished message we expected, copy to 'buf' */
   1428 size_t SSL_get_peer_finished(const SSL *s, void *buf, size_t count)
   1429 {
   1430     size_t ret = 0;
   1431 
   1432     if (s->s3 != NULL) {
   1433         ret = s->s3->tmp.peer_finish_md_len;
   1434         if (count > ret)
   1435             count = ret;
   1436         memcpy(buf, s->s3->tmp.peer_finish_md, count);
   1437     }
   1438     return ret;
   1439 }
   1440 
   1441 int SSL_get_verify_mode(const SSL *s)
   1442 {
   1443     return s->verify_mode;
   1444 }
   1445 
   1446 int SSL_get_verify_depth(const SSL *s)
   1447 {
   1448     return X509_VERIFY_PARAM_get_depth(s->param);
   1449 }
   1450 
   1451 int (*SSL_get_verify_callback(const SSL *s)) (int, X509_STORE_CTX *) {
   1452     return s->verify_callback;
   1453 }
   1454 
   1455 int SSL_CTX_get_verify_mode(const SSL_CTX *ctx)
   1456 {
   1457     return ctx->verify_mode;
   1458 }
   1459 
   1460 int SSL_CTX_get_verify_depth(const SSL_CTX *ctx)
   1461 {
   1462     return X509_VERIFY_PARAM_get_depth(ctx->param);
   1463 }
   1464 
   1465 int (*SSL_CTX_get_verify_callback(const SSL_CTX *ctx)) (int, X509_STORE_CTX *) {
   1466     return ctx->default_verify_callback;
   1467 }
   1468 
   1469 void SSL_set_verify(SSL *s, int mode,
   1470                     int (*callback) (int ok, X509_STORE_CTX *ctx))
   1471 {
   1472     s->verify_mode = mode;
   1473     if (callback != NULL)
   1474         s->verify_callback = callback;
   1475 }
   1476 
   1477 void SSL_set_verify_depth(SSL *s, int depth)
   1478 {
   1479     X509_VERIFY_PARAM_set_depth(s->param, depth);
   1480 }
   1481 
   1482 void SSL_set_read_ahead(SSL *s, int yes)
   1483 {
   1484     RECORD_LAYER_set_read_ahead(&s->rlayer, yes);
   1485 }
   1486 
   1487 int SSL_get_read_ahead(const SSL *s)
   1488 {
   1489     return RECORD_LAYER_get_read_ahead(&s->rlayer);
   1490 }
   1491 
   1492 int SSL_pending(const SSL *s)
   1493 {
   1494     size_t pending = s->method->ssl_pending(s);
   1495 
   1496     /*
   1497      * SSL_pending cannot work properly if read-ahead is enabled
   1498      * (SSL_[CTX_]ctrl(..., SSL_CTRL_SET_READ_AHEAD, 1, NULL)), and it is
   1499      * impossible to fix since SSL_pending cannot report errors that may be
   1500      * observed while scanning the new data. (Note that SSL_pending() is
   1501      * often used as a boolean value, so we'd better not return -1.)
   1502      *
   1503      * SSL_pending also cannot work properly if the value >INT_MAX. In that case
   1504      * we just return INT_MAX.
   1505      */
   1506     return pending < INT_MAX ? (int)pending : INT_MAX;
   1507 }
   1508 
   1509 int SSL_has_pending(const SSL *s)
   1510 {
   1511     /*
   1512      * Similar to SSL_pending() but returns a 1 to indicate that we have
   1513      * processed or unprocessed data available or 0 otherwise (as opposed to the
   1514      * number of bytes available). Unlike SSL_pending() this will take into
   1515      * account read_ahead data. A 1 return simply indicates that we have data.
   1516      * That data may not result in any application data, or we may fail to parse
   1517      * the records for some reason.
   1518      */
   1519 
   1520     /* Check buffered app data if any first */
   1521     if (SSL_IS_DTLS(s)) {
   1522         DTLS1_RECORD_DATA *rdata;
   1523         pitem *item, *iter;
   1524 
   1525         iter = pqueue_iterator(s->rlayer.d->buffered_app_data.q);
   1526         while ((item = pqueue_next(&iter)) != NULL) {
   1527             rdata = item->data;
   1528             if (rdata->rrec.length > 0)
   1529                 return 1;
   1530         }
   1531     }
   1532 
   1533     if (RECORD_LAYER_processed_read_pending(&s->rlayer))
   1534         return 1;
   1535 
   1536     return RECORD_LAYER_read_pending(&s->rlayer);
   1537 }
   1538 
   1539 X509 *SSL_get_peer_certificate(const SSL *s)
   1540 {
   1541     X509 *r;
   1542 
   1543     if ((s == NULL) || (s->session == NULL))
   1544         r = NULL;
   1545     else
   1546         r = s->session->peer;
   1547 
   1548     if (r == NULL)
   1549         return r;
   1550 
   1551     X509_up_ref(r);
   1552 
   1553     return r;
   1554 }
   1555 
   1556 STACK_OF(X509) *SSL_get_peer_cert_chain(const SSL *s)
   1557 {
   1558     STACK_OF(X509) *r;
   1559 
   1560     if ((s == NULL) || (s->session == NULL))
   1561         r = NULL;
   1562     else
   1563         r = s->session->peer_chain;
   1564 
   1565     /*
   1566      * If we are a client, cert_chain includes the peer's own certificate; if
   1567      * we are a server, it does not.
   1568      */
   1569 
   1570     return r;
   1571 }
   1572 
   1573 /*
   1574  * Now in theory, since the calling process own 't' it should be safe to
   1575  * modify.  We need to be able to read f without being hassled
   1576  */
   1577 int SSL_copy_session_id(SSL *t, const SSL *f)
   1578 {
   1579     int i;
   1580     /* Do we need to to SSL locking? */
   1581     if (!SSL_set_session(t, SSL_get_session(f))) {
   1582         return 0;
   1583     }
   1584 
   1585     /*
   1586      * what if we are setup for one protocol version but want to talk another
   1587      */
   1588     if (t->method != f->method) {
   1589         t->method->ssl_free(t);
   1590         t->method = f->method;
   1591         if (t->method->ssl_new(t) == 0)
   1592             return 0;
   1593     }
   1594 
   1595     CRYPTO_UP_REF(&f->cert->references, &i, f->cert->lock);
   1596     ssl_cert_free(t->cert);
   1597     t->cert = f->cert;
   1598     if (!SSL_set_session_id_context(t, f->sid_ctx, (int)f->sid_ctx_length)) {
   1599         return 0;
   1600     }
   1601 
   1602     return 1;
   1603 }
   1604 
   1605 /* Fix this so it checks all the valid key/cert options */
   1606 int SSL_CTX_check_private_key(const SSL_CTX *ctx)
   1607 {
   1608     if ((ctx == NULL) || (ctx->cert->key->x509 == NULL)) {
   1609         SSLerr(SSL_F_SSL_CTX_CHECK_PRIVATE_KEY, SSL_R_NO_CERTIFICATE_ASSIGNED);
   1610         return 0;
   1611     }
   1612     if (ctx->cert->key->privatekey == NULL) {
   1613         SSLerr(SSL_F_SSL_CTX_CHECK_PRIVATE_KEY, SSL_R_NO_PRIVATE_KEY_ASSIGNED);
   1614         return 0;
   1615     }
   1616     return X509_check_private_key
   1617             (ctx->cert->key->x509, ctx->cert->key->privatekey);
   1618 }
   1619 
   1620 /* Fix this function so that it takes an optional type parameter */
   1621 int SSL_check_private_key(const SSL *ssl)
   1622 {
   1623     if (ssl == NULL) {
   1624         SSLerr(SSL_F_SSL_CHECK_PRIVATE_KEY, ERR_R_PASSED_NULL_PARAMETER);
   1625         return 0;
   1626     }
   1627     if (ssl->cert->key->x509 == NULL) {
   1628         SSLerr(SSL_F_SSL_CHECK_PRIVATE_KEY, SSL_R_NO_CERTIFICATE_ASSIGNED);
   1629         return 0;
   1630     }
   1631     if (ssl->cert->key->privatekey == NULL) {
   1632         SSLerr(SSL_F_SSL_CHECK_PRIVATE_KEY, SSL_R_NO_PRIVATE_KEY_ASSIGNED);
   1633         return 0;
   1634     }
   1635     return X509_check_private_key(ssl->cert->key->x509,
   1636                                    ssl->cert->key->privatekey);
   1637 }
   1638 
   1639 int SSL_waiting_for_async(SSL *s)
   1640 {
   1641     if (s->job)
   1642         return 1;
   1643 
   1644     return 0;
   1645 }
   1646 
   1647 int SSL_get_all_async_fds(SSL *s, OSSL_ASYNC_FD *fds, size_t *numfds)
   1648 {
   1649     ASYNC_WAIT_CTX *ctx = s->waitctx;
   1650 
   1651     if (ctx == NULL)
   1652         return 0;
   1653     return ASYNC_WAIT_CTX_get_all_fds(ctx, fds, numfds);
   1654 }
   1655 
   1656 int SSL_get_changed_async_fds(SSL *s, OSSL_ASYNC_FD *addfd, size_t *numaddfds,
   1657                               OSSL_ASYNC_FD *delfd, size_t *numdelfds)
   1658 {
   1659     ASYNC_WAIT_CTX *ctx = s->waitctx;
   1660 
   1661     if (ctx == NULL)
   1662         return 0;
   1663     return ASYNC_WAIT_CTX_get_changed_fds(ctx, addfd, numaddfds, delfd,
   1664                                           numdelfds);
   1665 }
   1666 
   1667 int SSL_accept(SSL *s)
   1668 {
   1669     if (s->handshake_func == NULL) {
   1670         /* Not properly initialized yet */
   1671         SSL_set_accept_state(s);
   1672     }
   1673 
   1674     return SSL_do_handshake(s);
   1675 }
   1676 
   1677 int SSL_connect(SSL *s)
   1678 {
   1679     if (s->handshake_func == NULL) {
   1680         /* Not properly initialized yet */
   1681         SSL_set_connect_state(s);
   1682     }
   1683 
   1684     return SSL_do_handshake(s);
   1685 }
   1686 
   1687 long SSL_get_default_timeout(const SSL *s)
   1688 {
   1689     return s->method->get_timeout();
   1690 }
   1691 
   1692 static int ssl_start_async_job(SSL *s, struct ssl_async_args *args,
   1693                                int (*func) (void *))
   1694 {
   1695     int ret;
   1696     if (s->waitctx == NULL) {
   1697         s->waitctx = ASYNC_WAIT_CTX_new();
   1698         if (s->waitctx == NULL)
   1699             return -1;
   1700     }
   1701 
   1702     s->rwstate = SSL_NOTHING;
   1703     switch (ASYNC_start_job(&s->job, s->waitctx, &ret, func, args,
   1704                             sizeof(struct ssl_async_args))) {
   1705     case ASYNC_ERR:
   1706         s->rwstate = SSL_NOTHING;
   1707         SSLerr(SSL_F_SSL_START_ASYNC_JOB, SSL_R_FAILED_TO_INIT_ASYNC);
   1708         return -1;
   1709     case ASYNC_PAUSE:
   1710         s->rwstate = SSL_ASYNC_PAUSED;
   1711         return -1;
   1712     case ASYNC_NO_JOBS:
   1713         s->rwstate = SSL_ASYNC_NO_JOBS;
   1714         return -1;
   1715     case ASYNC_FINISH:
   1716         s->job = NULL;
   1717         return ret;
   1718     default:
   1719         s->rwstate = SSL_NOTHING;
   1720         SSLerr(SSL_F_SSL_START_ASYNC_JOB, ERR_R_INTERNAL_ERROR);
   1721         /* Shouldn't happen */
   1722         return -1;
   1723     }
   1724 }
   1725 
   1726 static int ssl_io_intern(void *vargs)
   1727 {
   1728     struct ssl_async_args *args;
   1729     SSL *s;
   1730     void *buf;
   1731     size_t num;
   1732 
   1733     args = (struct ssl_async_args *)vargs;
   1734     s = args->s;
   1735     buf = args->buf;
   1736     num = args->num;
   1737     switch (args->type) {
   1738     case READFUNC:
   1739         return args->f.func_read(s, buf, num, &s->asyncrw);
   1740     case WRITEFUNC:
   1741         return args->f.func_write(s, buf, num, &s->asyncrw);
   1742     case OTHERFUNC:
   1743         return args->f.func_other(s);
   1744     }
   1745     return -1;
   1746 }
   1747 
   1748 int ssl_read_internal(SSL *s, void *buf, size_t num, size_t *readbytes)
   1749 {
   1750     if (s->handshake_func == NULL) {
   1751         SSLerr(SSL_F_SSL_READ_INTERNAL, SSL_R_UNINITIALIZED);
   1752         return -1;
   1753     }
   1754 
   1755     if (s->shutdown & SSL_RECEIVED_SHUTDOWN) {
   1756         s->rwstate = SSL_NOTHING;
   1757         return 0;
   1758     }
   1759 
   1760     if (s->early_data_state == SSL_EARLY_DATA_CONNECT_RETRY
   1761                 || s->early_data_state == SSL_EARLY_DATA_ACCEPT_RETRY) {
   1762         SSLerr(SSL_F_SSL_READ_INTERNAL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
   1763         return 0;
   1764     }
   1765     /*
   1766      * If we are a client and haven't received the ServerHello etc then we
   1767      * better do that
   1768      */
   1769     ossl_statem_check_finish_init(s, 0);
   1770 
   1771     if ((s->mode & SSL_MODE_ASYNC) && ASYNC_get_current_job() == NULL) {
   1772         struct ssl_async_args args;
   1773         int ret;
   1774 
   1775         args.s = s;
   1776         args.buf = buf;
   1777         args.num = num;
   1778         args.type = READFUNC;
   1779         args.f.func_read = s->method->ssl_read;
   1780 
   1781         ret = ssl_start_async_job(s, &args, ssl_io_intern);
   1782         *readbytes = s->asyncrw;
   1783         return ret;
   1784     } else {
   1785         return s->method->ssl_read(s, buf, num, readbytes);
   1786     }
   1787 }
   1788 
   1789 int SSL_read(SSL *s, void *buf, int num)
   1790 {
   1791     int ret;
   1792     size_t readbytes;
   1793 
   1794     if (num < 0) {
   1795         SSLerr(SSL_F_SSL_READ, SSL_R_BAD_LENGTH);
   1796         return -1;
   1797     }
   1798 
   1799     ret = ssl_read_internal(s, buf, (size_t)num, &readbytes);
   1800 
   1801     /*
   1802      * The cast is safe here because ret should be <= INT_MAX because num is
   1803      * <= INT_MAX
   1804      */
   1805     if (ret > 0)
   1806         ret = (int)readbytes;
   1807 
   1808     return ret;
   1809 }
   1810 
   1811 int SSL_read_ex(SSL *s, void *buf, size_t num, size_t *readbytes)
   1812 {
   1813     int ret = ssl_read_internal(s, buf, num, readbytes);
   1814 
   1815     if (ret < 0)
   1816         ret = 0;
   1817     return ret;
   1818 }
   1819 
   1820 int SSL_read_early_data(SSL *s, void *buf, size_t num, size_t *readbytes)
   1821 {
   1822     int ret;
   1823 
   1824     if (!s->server) {
   1825         SSLerr(SSL_F_SSL_READ_EARLY_DATA, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
   1826         return SSL_READ_EARLY_DATA_ERROR;
   1827     }
   1828 
   1829     switch (s->early_data_state) {
   1830     case SSL_EARLY_DATA_NONE:
   1831         if (!SSL_in_before(s)) {
   1832             SSLerr(SSL_F_SSL_READ_EARLY_DATA,
   1833                    ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
   1834             return SSL_READ_EARLY_DATA_ERROR;
   1835         }
   1836         /* fall through */
   1837 
   1838     case SSL_EARLY_DATA_ACCEPT_RETRY:
   1839         s->early_data_state = SSL_EARLY_DATA_ACCEPTING;
   1840         ret = SSL_accept(s);
   1841         if (ret <= 0) {
   1842             /* NBIO or error */
   1843             s->early_data_state = SSL_EARLY_DATA_ACCEPT_RETRY;
   1844             return SSL_READ_EARLY_DATA_ERROR;
   1845         }
   1846         /* fall through */
   1847 
   1848     case SSL_EARLY_DATA_READ_RETRY:
   1849         if (s->ext.early_data == SSL_EARLY_DATA_ACCEPTED) {
   1850             s->early_data_state = SSL_EARLY_DATA_READING;
   1851             ret = SSL_read_ex(s, buf, num, readbytes);
   1852             /*
   1853              * State machine will update early_data_state to
   1854              * SSL_EARLY_DATA_FINISHED_READING if we get an EndOfEarlyData
   1855              * message
   1856              */
   1857             if (ret > 0 || (ret <= 0 && s->early_data_state
   1858                                         != SSL_EARLY_DATA_FINISHED_READING)) {
   1859                 s->early_data_state = SSL_EARLY_DATA_READ_RETRY;
   1860                 return ret > 0 ? SSL_READ_EARLY_DATA_SUCCESS
   1861                                : SSL_READ_EARLY_DATA_ERROR;
   1862             }
   1863         } else {
   1864             s->early_data_state = SSL_EARLY_DATA_FINISHED_READING;
   1865         }
   1866         *readbytes = 0;
   1867         return SSL_READ_EARLY_DATA_FINISH;
   1868 
   1869     default:
   1870         SSLerr(SSL_F_SSL_READ_EARLY_DATA, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
   1871         return SSL_READ_EARLY_DATA_ERROR;
   1872     }
   1873 }
   1874 
   1875 int SSL_get_early_data_status(const SSL *s)
   1876 {
   1877     return s->ext.early_data;
   1878 }
   1879 
   1880 static int ssl_peek_internal(SSL *s, void *buf, size_t num, size_t *readbytes)
   1881 {
   1882     if (s->handshake_func == NULL) {
   1883         SSLerr(SSL_F_SSL_PEEK_INTERNAL, SSL_R_UNINITIALIZED);
   1884         return -1;
   1885     }
   1886 
   1887     if (s->shutdown & SSL_RECEIVED_SHUTDOWN) {
   1888         return 0;
   1889     }
   1890     if ((s->mode & SSL_MODE_ASYNC) && ASYNC_get_current_job() == NULL) {
   1891         struct ssl_async_args args;
   1892         int ret;
   1893 
   1894         args.s = s;
   1895         args.buf = buf;
   1896         args.num = num;
   1897         args.type = READFUNC;
   1898         args.f.func_read = s->method->ssl_peek;
   1899 
   1900         ret = ssl_start_async_job(s, &args, ssl_io_intern);
   1901         *readbytes = s->asyncrw;
   1902         return ret;
   1903     } else {
   1904         return s->method->ssl_peek(s, buf, num, readbytes);
   1905     }
   1906 }
   1907 
   1908 int SSL_peek(SSL *s, void *buf, int num)
   1909 {
   1910     int ret;
   1911     size_t readbytes;
   1912 
   1913     if (num < 0) {
   1914         SSLerr(SSL_F_SSL_PEEK, SSL_R_BAD_LENGTH);
   1915         return -1;
   1916     }
   1917 
   1918     ret = ssl_peek_internal(s, buf, (size_t)num, &readbytes);
   1919 
   1920     /*
   1921      * The cast is safe here because ret should be <= INT_MAX because num is
   1922      * <= INT_MAX
   1923      */
   1924     if (ret > 0)
   1925         ret = (int)readbytes;
   1926 
   1927     return ret;
   1928 }
   1929 
   1930 
   1931 int SSL_peek_ex(SSL *s, void *buf, size_t num, size_t *readbytes)
   1932 {
   1933     int ret = ssl_peek_internal(s, buf, num, readbytes);
   1934 
   1935     if (ret < 0)
   1936         ret = 0;
   1937     return ret;
   1938 }
   1939 
   1940 int ssl_write_internal(SSL *s, const void *buf, size_t num, size_t *written)
   1941 {
   1942     if (s->handshake_func == NULL) {
   1943         SSLerr(SSL_F_SSL_WRITE_INTERNAL, SSL_R_UNINITIALIZED);
   1944         return -1;
   1945     }
   1946 
   1947     if (s->shutdown & SSL_SENT_SHUTDOWN) {
   1948         s->rwstate = SSL_NOTHING;
   1949         SSLerr(SSL_F_SSL_WRITE_INTERNAL, SSL_R_PROTOCOL_IS_SHUTDOWN);
   1950         return -1;
   1951     }
   1952 
   1953     if (s->early_data_state == SSL_EARLY_DATA_CONNECT_RETRY
   1954                 || s->early_data_state == SSL_EARLY_DATA_ACCEPT_RETRY
   1955                 || s->early_data_state == SSL_EARLY_DATA_READ_RETRY) {
   1956         SSLerr(SSL_F_SSL_WRITE_INTERNAL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
   1957         return 0;
   1958     }
   1959     /* If we are a client and haven't sent the Finished we better do that */
   1960     ossl_statem_check_finish_init(s, 1);
   1961 
   1962     if ((s->mode & SSL_MODE_ASYNC) && ASYNC_get_current_job() == NULL) {
   1963         int ret;
   1964         struct ssl_async_args args;
   1965 
   1966         args.s = s;
   1967         args.buf = (void *)buf;
   1968         args.num = num;
   1969         args.type = WRITEFUNC;
   1970         args.f.func_write = s->method->ssl_write;
   1971 
   1972         ret = ssl_start_async_job(s, &args, ssl_io_intern);
   1973         *written = s->asyncrw;
   1974         return ret;
   1975     } else {
   1976         return s->method->ssl_write(s, buf, num, written);
   1977     }
   1978 }
   1979 
   1980 int SSL_write(SSL *s, const void *buf, int num)
   1981 {
   1982     int ret;
   1983     size_t written;
   1984 
   1985     if (num < 0) {
   1986         SSLerr(SSL_F_SSL_WRITE, SSL_R_BAD_LENGTH);
   1987         return -1;
   1988     }
   1989 
   1990     ret = ssl_write_internal(s, buf, (size_t)num, &written);
   1991 
   1992     /*
   1993      * The cast is safe here because ret should be <= INT_MAX because num is
   1994      * <= INT_MAX
   1995      */
   1996     if (ret > 0)
   1997         ret = (int)written;
   1998 
   1999     return ret;
   2000 }
   2001 
   2002 int SSL_write_ex(SSL *s, const void *buf, size_t num, size_t *written)
   2003 {
   2004     int ret = ssl_write_internal(s, buf, num, written);
   2005 
   2006     if (ret < 0)
   2007         ret = 0;
   2008     return ret;
   2009 }
   2010 
   2011 int SSL_write_early_data(SSL *s, const void *buf, size_t num, size_t *written)
   2012 {
   2013     int ret, early_data_state;
   2014     size_t writtmp;
   2015     uint32_t partialwrite;
   2016 
   2017     switch (s->early_data_state) {
   2018     case SSL_EARLY_DATA_NONE:
   2019         if (s->server
   2020                 || !SSL_in_before(s)
   2021                 || ((s->session == NULL || s->session->ext.max_early_data == 0)
   2022                      && (s->psk_use_session_cb == NULL))) {
   2023             SSLerr(SSL_F_SSL_WRITE_EARLY_DATA,
   2024                    ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
   2025             return 0;
   2026         }
   2027         /* fall through */
   2028 
   2029     case SSL_EARLY_DATA_CONNECT_RETRY:
   2030         s->early_data_state = SSL_EARLY_DATA_CONNECTING;
   2031         ret = SSL_connect(s);
   2032         if (ret <= 0) {
   2033             /* NBIO or error */
   2034             s->early_data_state = SSL_EARLY_DATA_CONNECT_RETRY;
   2035             return 0;
   2036         }
   2037         /* fall through */
   2038 
   2039     case SSL_EARLY_DATA_WRITE_RETRY:
   2040         s->early_data_state = SSL_EARLY_DATA_WRITING;
   2041         /*
   2042          * We disable partial write for early data because we don't keep track
   2043          * of how many bytes we've written between the SSL_write_ex() call and
   2044          * the flush if the flush needs to be retried)
   2045          */
   2046         partialwrite = s->mode & SSL_MODE_ENABLE_PARTIAL_WRITE;
   2047         s->mode &= ~SSL_MODE_ENABLE_PARTIAL_WRITE;
   2048         ret = SSL_write_ex(s, buf, num, &writtmp);
   2049         s->mode |= partialwrite;
   2050         if (!ret) {
   2051             s->early_data_state = SSL_EARLY_DATA_WRITE_RETRY;
   2052             return ret;
   2053         }
   2054         s->early_data_state = SSL_EARLY_DATA_WRITE_FLUSH;
   2055         /* fall through */
   2056 
   2057     case SSL_EARLY_DATA_WRITE_FLUSH:
   2058         /* The buffering BIO is still in place so we need to flush it */
   2059         if (statem_flush(s) != 1)
   2060             return 0;
   2061         *written = num;
   2062         s->early_data_state = SSL_EARLY_DATA_WRITE_RETRY;
   2063         return 1;
   2064 
   2065     case SSL_EARLY_DATA_FINISHED_READING:
   2066     case SSL_EARLY_DATA_READ_RETRY:
   2067         early_data_state = s->early_data_state;
   2068         /* We are a server writing to an unauthenticated client */
   2069         s->early_data_state = SSL_EARLY_DATA_UNAUTH_WRITING;
   2070         ret = SSL_write_ex(s, buf, num, written);
   2071         /* The buffering BIO is still in place */
   2072         if (ret)
   2073             (void)BIO_flush(s->wbio);
   2074         s->early_data_state = early_data_state;
   2075         return ret;
   2076 
   2077     default:
   2078         SSLerr(SSL_F_SSL_WRITE_EARLY_DATA, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
   2079         return 0;
   2080     }
   2081 }
   2082 
   2083 int SSL_shutdown(SSL *s)
   2084 {
   2085     /*
   2086      * Note that this function behaves differently from what one might
   2087      * expect.  Return values are 0 for no success (yet), 1 for success; but
   2088      * calling it once is usually not enough, even if blocking I/O is used
   2089      * (see ssl3_shutdown).
   2090      */
   2091 
   2092     if (s->handshake_func == NULL) {
   2093         SSLerr(SSL_F_SSL_SHUTDOWN, SSL_R_UNINITIALIZED);
   2094         return -1;
   2095     }
   2096 
   2097     if (!SSL_in_init(s)) {
   2098         if ((s->mode & SSL_MODE_ASYNC) && ASYNC_get_current_job() == NULL) {
   2099             struct ssl_async_args args;
   2100 
   2101             memset(&args, 0, sizeof(args));
   2102             args.s = s;
   2103             args.type = OTHERFUNC;
   2104             args.f.func_other = s->method->ssl_shutdown;
   2105 
   2106             return ssl_start_async_job(s, &args, ssl_io_intern);
   2107         } else {
   2108             return s->method->ssl_shutdown(s);
   2109         }
   2110     } else {
   2111         SSLerr(SSL_F_SSL_SHUTDOWN, SSL_R_SHUTDOWN_WHILE_IN_INIT);
   2112         return -1;
   2113     }
   2114 }
   2115 
   2116 int SSL_key_update(SSL *s, int updatetype)
   2117 {
   2118     /*
   2119      * TODO(TLS1.3): How will applications know whether TLSv1.3 has been
   2120      * negotiated, and that it is appropriate to call SSL_key_update() instead
   2121      * of SSL_renegotiate().
   2122      */
   2123     if (!SSL_IS_TLS13(s)) {
   2124         SSLerr(SSL_F_SSL_KEY_UPDATE, SSL_R_WRONG_SSL_VERSION);
   2125         return 0;
   2126     }
   2127 
   2128     if (updatetype != SSL_KEY_UPDATE_NOT_REQUESTED
   2129             && updatetype != SSL_KEY_UPDATE_REQUESTED) {
   2130         SSLerr(SSL_F_SSL_KEY_UPDATE, SSL_R_INVALID_KEY_UPDATE_TYPE);
   2131         return 0;
   2132     }
   2133 
   2134     if (!SSL_is_init_finished(s)) {
   2135         SSLerr(SSL_F_SSL_KEY_UPDATE, SSL_R_STILL_IN_INIT);
   2136         return 0;
   2137     }
   2138 
   2139     if (RECORD_LAYER_write_pending(&s->rlayer)) {
   2140         SSLerr(SSL_F_SSL_KEY_UPDATE, SSL_R_BAD_WRITE_RETRY);
   2141         return 0;
   2142     }
   2143 
   2144     ossl_statem_set_in_init(s, 1);
   2145     s->key_update = updatetype;
   2146     return 1;
   2147 }
   2148 
   2149 int SSL_get_key_update_type(const SSL *s)
   2150 {
   2151     return s->key_update;
   2152 }
   2153 
   2154 int SSL_renegotiate(SSL *s)
   2155 {
   2156     if (SSL_IS_TLS13(s)) {
   2157         SSLerr(SSL_F_SSL_RENEGOTIATE, SSL_R_WRONG_SSL_VERSION);
   2158         return 0;
   2159     }
   2160 
   2161     if ((s->options & SSL_OP_NO_RENEGOTIATION)) {
   2162         SSLerr(SSL_F_SSL_RENEGOTIATE, SSL_R_NO_RENEGOTIATION);
   2163         return 0;
   2164     }
   2165 
   2166     s->renegotiate = 1;
   2167     s->new_session = 1;
   2168 
   2169     return s->method->ssl_renegotiate(s);
   2170 }
   2171 
   2172 int SSL_renegotiate_abbreviated(SSL *s)
   2173 {
   2174     if (SSL_IS_TLS13(s)) {
   2175         SSLerr(SSL_F_SSL_RENEGOTIATE_ABBREVIATED, SSL_R_WRONG_SSL_VERSION);
   2176         return 0;
   2177     }
   2178 
   2179     if ((s->options & SSL_OP_NO_RENEGOTIATION)) {
   2180         SSLerr(SSL_F_SSL_RENEGOTIATE_ABBREVIATED, SSL_R_NO_RENEGOTIATION);
   2181         return 0;
   2182     }
   2183 
   2184     s->renegotiate = 1;
   2185     s->new_session = 0;
   2186 
   2187     return s->method->ssl_renegotiate(s);
   2188 }
   2189 
   2190 int SSL_renegotiate_pending(const SSL *s)
   2191 {
   2192     /*
   2193      * becomes true when negotiation is requested; false again once a
   2194      * handshake has finished
   2195      */
   2196     return (s->renegotiate != 0);
   2197 }
   2198 
   2199 long SSL_ctrl(SSL *s, int cmd, long larg, void *parg)
   2200 {
   2201     long l;
   2202 
   2203     switch (cmd) {
   2204     case SSL_CTRL_GET_READ_AHEAD:
   2205         return RECORD_LAYER_get_read_ahead(&s->rlayer);
   2206     case SSL_CTRL_SET_READ_AHEAD:
   2207         l = RECORD_LAYER_get_read_ahead(&s->rlayer);
   2208         RECORD_LAYER_set_read_ahead(&s->rlayer, larg);
   2209         return l;
   2210 
   2211     case SSL_CTRL_SET_MSG_CALLBACK_ARG:
   2212         s->msg_callback_arg = parg;
   2213         return 1;
   2214 
   2215     case SSL_CTRL_MODE:
   2216         return (s->mode |= larg);
   2217     case SSL_CTRL_CLEAR_MODE:
   2218         return (s->mode &= ~larg);
   2219     case SSL_CTRL_GET_MAX_CERT_LIST:
   2220         return (long)s->max_cert_list;
   2221     case SSL_CTRL_SET_MAX_CERT_LIST:
   2222         if (larg < 0)
   2223             return 0;
   2224         l = (long)s->max_cert_list;
   2225         s->max_cert_list = (size_t)larg;
   2226         return l;
   2227     case SSL_CTRL_SET_MAX_SEND_FRAGMENT:
   2228         if (larg < 512 || larg > SSL3_RT_MAX_PLAIN_LENGTH)
   2229             return 0;
   2230         s->max_send_fragment = larg;
   2231         if (s->max_send_fragment < s->split_send_fragment)
   2232             s->split_send_fragment = s->max_send_fragment;
   2233         return 1;
   2234     case SSL_CTRL_SET_SPLIT_SEND_FRAGMENT:
   2235         if ((size_t)larg > s->max_send_fragment || larg == 0)
   2236             return 0;
   2237         s->split_send_fragment = larg;
   2238         return 1;
   2239     case SSL_CTRL_SET_MAX_PIPELINES:
   2240         if (larg < 1 || larg > SSL_MAX_PIPELINES)
   2241             return 0;
   2242         s->max_pipelines = larg;
   2243         if (larg > 1)
   2244             RECORD_LAYER_set_read_ahead(&s->rlayer, 1);
   2245         return 1;
   2246     case SSL_CTRL_GET_RI_SUPPORT:
   2247         if (s->s3)
   2248             return s->s3->send_connection_binding;
   2249         else
   2250             return 0;
   2251     case SSL_CTRL_CERT_FLAGS:
   2252         return (s->cert->cert_flags |= larg);
   2253     case SSL_CTRL_CLEAR_CERT_FLAGS:
   2254         return (s->cert->cert_flags &= ~larg);
   2255 
   2256     case SSL_CTRL_GET_RAW_CIPHERLIST:
   2257         if (parg) {
   2258             if (s->s3->tmp.ciphers_raw == NULL)
   2259                 return 0;
   2260             *(unsigned char **)parg = s->s3->tmp.ciphers_raw;
   2261             return (int)s->s3->tmp.ciphers_rawlen;
   2262         } else {
   2263             return TLS_CIPHER_LEN;
   2264         }
   2265     case SSL_CTRL_GET_EXTMS_SUPPORT:
   2266         if (!s->session || SSL_in_init(s) || ossl_statem_get_in_handshake(s))
   2267             return -1;
   2268         if (s->session->flags & SSL_SESS_FLAG_EXTMS)
   2269             return 1;
   2270         else
   2271             return 0;
   2272     case SSL_CTRL_SET_MIN_PROTO_VERSION:
   2273         return ssl_check_allowed_versions(larg, s->max_proto_version)
   2274                && ssl_set_version_bound(s->ctx->method->version, (int)larg,
   2275                                         &s->min_proto_version);
   2276     case SSL_CTRL_GET_MIN_PROTO_VERSION:
   2277         return s->min_proto_version;
   2278     case SSL_CTRL_SET_MAX_PROTO_VERSION:
   2279         return ssl_check_allowed_versions(s->min_proto_version, larg)
   2280                && ssl_set_version_bound(s->ctx->method->version, (int)larg,
   2281                                         &s->max_proto_version);
   2282     case SSL_CTRL_GET_MAX_PROTO_VERSION:
   2283         return s->max_proto_version;
   2284     default:
   2285         return s->method->ssl_ctrl(s, cmd, larg, parg);
   2286     }
   2287 }
   2288 
   2289 long SSL_callback_ctrl(SSL *s, int cmd, void (*fp) (void))
   2290 {
   2291     switch (cmd) {
   2292     case SSL_CTRL_SET_MSG_CALLBACK:
   2293         s->msg_callback = (void (*)
   2294                            (int write_p, int version, int content_type,
   2295                             const void *buf, size_t len, SSL *ssl,
   2296                             void *arg))(fp);
   2297         return 1;
   2298 
   2299     default:
   2300         return s->method->ssl_callback_ctrl(s, cmd, fp);
   2301     }
   2302 }
   2303 
   2304 LHASH_OF(SSL_SESSION) *SSL_CTX_sessions(SSL_CTX *ctx)
   2305 {
   2306     return ctx->sessions;
   2307 }
   2308 
   2309 long SSL_CTX_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg)
   2310 {
   2311     long l;
   2312     /* For some cases with ctx == NULL perform syntax checks */
   2313     if (ctx == NULL) {
   2314         switch (cmd) {
   2315 #ifndef OPENSSL_NO_EC
   2316         case SSL_CTRL_SET_GROUPS_LIST:
   2317             return tls1_set_groups_list(NULL, NULL, parg);
   2318 #endif
   2319         case SSL_CTRL_SET_SIGALGS_LIST:
   2320         case SSL_CTRL_SET_CLIENT_SIGALGS_LIST:
   2321             return tls1_set_sigalgs_list(NULL, parg, 0);
   2322         default:
   2323             return 0;
   2324         }
   2325     }
   2326 
   2327     switch (cmd) {
   2328     case SSL_CTRL_GET_READ_AHEAD:
   2329         return ctx->read_ahead;
   2330     case SSL_CTRL_SET_READ_AHEAD:
   2331         l = ctx->read_ahead;
   2332         ctx->read_ahead = larg;
   2333         return l;
   2334 
   2335     case SSL_CTRL_SET_MSG_CALLBACK_ARG:
   2336         ctx->msg_callback_arg = parg;
   2337         return 1;
   2338 
   2339     case SSL_CTRL_GET_MAX_CERT_LIST:
   2340         return (long)ctx->max_cert_list;
   2341     case SSL_CTRL_SET_MAX_CERT_LIST:
   2342         if (larg < 0)
   2343             return 0;
   2344         l = (long)ctx->max_cert_list;
   2345         ctx->max_cert_list = (size_t)larg;
   2346         return l;
   2347 
   2348     case SSL_CTRL_SET_SESS_CACHE_SIZE:
   2349         if (larg < 0)
   2350             return 0;
   2351         l = (long)ctx->session_cache_size;
   2352         ctx->session_cache_size = (size_t)larg;
   2353         return l;
   2354     case SSL_CTRL_GET_SESS_CACHE_SIZE:
   2355         return (long)ctx->session_cache_size;
   2356     case SSL_CTRL_SET_SESS_CACHE_MODE:
   2357         l = ctx->session_cache_mode;
   2358         ctx->session_cache_mode = larg;
   2359         return l;
   2360     case SSL_CTRL_GET_SESS_CACHE_MODE:
   2361         return ctx->session_cache_mode;
   2362 
   2363     case SSL_CTRL_SESS_NUMBER:
   2364         return lh_SSL_SESSION_num_items(ctx->sessions);
   2365     case SSL_CTRL_SESS_CONNECT:
   2366         return tsan_load(&ctx->stats.sess_connect);
   2367     case SSL_CTRL_SESS_CONNECT_GOOD:
   2368         return tsan_load(&ctx->stats.sess_connect_good);
   2369     case SSL_CTRL_SESS_CONNECT_RENEGOTIATE:
   2370         return tsan_load(&ctx->stats.sess_connect_renegotiate);
   2371     case SSL_CTRL_SESS_ACCEPT:
   2372         return tsan_load(&ctx->stats.sess_accept);
   2373     case SSL_CTRL_SESS_ACCEPT_GOOD:
   2374         return tsan_load(&ctx->stats.sess_accept_good);
   2375     case SSL_CTRL_SESS_ACCEPT_RENEGOTIATE:
   2376         return tsan_load(&ctx->stats.sess_accept_renegotiate);
   2377     case SSL_CTRL_SESS_HIT:
   2378         return tsan_load(&ctx->stats.sess_hit);
   2379     case SSL_CTRL_SESS_CB_HIT:
   2380         return tsan_load(&ctx->stats.sess_cb_hit);
   2381     case SSL_CTRL_SESS_MISSES:
   2382         return tsan_load(&ctx->stats.sess_miss);
   2383     case SSL_CTRL_SESS_TIMEOUTS:
   2384         return tsan_load(&ctx->stats.sess_timeout);
   2385     case SSL_CTRL_SESS_CACHE_FULL:
   2386         return tsan_load(&ctx->stats.sess_cache_full);
   2387     case SSL_CTRL_MODE:
   2388         return (ctx->mode |= larg);
   2389     case SSL_CTRL_CLEAR_MODE:
   2390         return (ctx->mode &= ~larg);
   2391     case SSL_CTRL_SET_MAX_SEND_FRAGMENT:
   2392         if (larg < 512 || larg > SSL3_RT_MAX_PLAIN_LENGTH)
   2393             return 0;
   2394         ctx->max_send_fragment = larg;
   2395         if (ctx->max_send_fragment < ctx->split_send_fragment)
   2396             ctx->split_send_fragment = ctx->max_send_fragment;
   2397         return 1;
   2398     case SSL_CTRL_SET_SPLIT_SEND_FRAGMENT:
   2399         if ((size_t)larg > ctx->max_send_fragment || larg == 0)
   2400             return 0;
   2401         ctx->split_send_fragment = larg;
   2402         return 1;
   2403     case SSL_CTRL_SET_MAX_PIPELINES:
   2404         if (larg < 1 || larg > SSL_MAX_PIPELINES)
   2405             return 0;
   2406         ctx->max_pipelines = larg;
   2407         return 1;
   2408     case SSL_CTRL_CERT_FLAGS:
   2409         return (ctx->cert->cert_flags |= larg);
   2410     case SSL_CTRL_CLEAR_CERT_FLAGS:
   2411         return (ctx->cert->cert_flags &= ~larg);
   2412     case SSL_CTRL_SET_MIN_PROTO_VERSION:
   2413         return ssl_check_allowed_versions(larg, ctx->max_proto_version)
   2414                && ssl_set_version_bound(ctx->method->version, (int)larg,
   2415                                         &ctx->min_proto_version);
   2416     case SSL_CTRL_GET_MIN_PROTO_VERSION:
   2417         return ctx->min_proto_version;
   2418     case SSL_CTRL_SET_MAX_PROTO_VERSION:
   2419         return ssl_check_allowed_versions(ctx->min_proto_version, larg)
   2420                && ssl_set_version_bound(ctx->method->version, (int)larg,
   2421                                         &ctx->max_proto_version);
   2422     case SSL_CTRL_GET_MAX_PROTO_VERSION:
   2423         return ctx->max_proto_version;
   2424     default:
   2425         return ctx->method->ssl_ctx_ctrl(ctx, cmd, larg, parg);
   2426     }
   2427 }
   2428 
   2429 long SSL_CTX_callback_ctrl(SSL_CTX *ctx, int cmd, void (*fp) (void))
   2430 {
   2431     switch (cmd) {
   2432     case SSL_CTRL_SET_MSG_CALLBACK:
   2433         ctx->msg_callback = (void (*)
   2434                              (int write_p, int version, int content_type,
   2435                               const void *buf, size_t len, SSL *ssl,
   2436                               void *arg))(fp);
   2437         return 1;
   2438 
   2439     default:
   2440         return ctx->method->ssl_ctx_callback_ctrl(ctx, cmd, fp);
   2441     }
   2442 }
   2443 
   2444 int ssl_cipher_id_cmp(const SSL_CIPHER *a, const SSL_CIPHER *b)
   2445 {
   2446     if (a->id > b->id)
   2447         return 1;
   2448     if (a->id < b->id)
   2449         return -1;
   2450     return 0;
   2451 }
   2452 
   2453 int ssl_cipher_ptr_id_cmp(const SSL_CIPHER *const *ap,
   2454                           const SSL_CIPHER *const *bp)
   2455 {
   2456     if ((*ap)->id > (*bp)->id)
   2457         return 1;
   2458     if ((*ap)->id < (*bp)->id)
   2459         return -1;
   2460     return 0;
   2461 }
   2462 
   2463 /** return a STACK of the ciphers available for the SSL and in order of
   2464  * preference */
   2465 STACK_OF(SSL_CIPHER) *SSL_get_ciphers(const SSL *s)
   2466 {
   2467     if (s != NULL) {
   2468         if (s->cipher_list != NULL) {
   2469             return s->cipher_list;
   2470         } else if ((s->ctx != NULL) && (s->ctx->cipher_list != NULL)) {
   2471             return s->ctx->cipher_list;
   2472         }
   2473     }
   2474     return NULL;
   2475 }
   2476 
   2477 STACK_OF(SSL_CIPHER) *SSL_get_client_ciphers(const SSL *s)
   2478 {
   2479     if ((s == NULL) || !s->server)
   2480         return NULL;
   2481     return s->peer_ciphers;
   2482 }
   2483 
   2484 STACK_OF(SSL_CIPHER) *SSL_get1_supported_ciphers(SSL *s)
   2485 {
   2486     STACK_OF(SSL_CIPHER) *sk = NULL, *ciphers;
   2487     int i;
   2488 
   2489     ciphers = SSL_get_ciphers(s);
   2490     if (!ciphers)
   2491         return NULL;
   2492     if (!ssl_set_client_disabled(s))
   2493         return NULL;
   2494     for (i = 0; i < sk_SSL_CIPHER_num(ciphers); i++) {
   2495         const SSL_CIPHER *c = sk_SSL_CIPHER_value(ciphers, i);
   2496         if (!ssl_cipher_disabled(s, c, SSL_SECOP_CIPHER_SUPPORTED, 0)) {
   2497             if (!sk)
   2498                 sk = sk_SSL_CIPHER_new_null();
   2499             if (!sk)
   2500                 return NULL;
   2501             if (!sk_SSL_CIPHER_push(sk, c)) {
   2502                 sk_SSL_CIPHER_free(sk);
   2503                 return NULL;
   2504             }
   2505         }
   2506     }
   2507     return sk;
   2508 }
   2509 
   2510 /** return a STACK of the ciphers available for the SSL and in order of
   2511  * algorithm id */
   2512 STACK_OF(SSL_CIPHER) *ssl_get_ciphers_by_id(SSL *s)
   2513 {
   2514     if (s != NULL) {
   2515         if (s->cipher_list_by_id != NULL) {
   2516             return s->cipher_list_by_id;
   2517         } else if ((s->ctx != NULL) && (s->ctx->cipher_list_by_id != NULL)) {
   2518             return s->ctx->cipher_list_by_id;
   2519         }
   2520     }
   2521     return NULL;
   2522 }
   2523 
   2524 /** The old interface to get the same thing as SSL_get_ciphers() */
   2525 const char *SSL_get_cipher_list(const SSL *s, int n)
   2526 {
   2527     const SSL_CIPHER *c;
   2528     STACK_OF(SSL_CIPHER) *sk;
   2529 
   2530     if (s == NULL)
   2531         return NULL;
   2532     sk = SSL_get_ciphers(s);
   2533     if ((sk == NULL) || (sk_SSL_CIPHER_num(sk) <= n))
   2534         return NULL;
   2535     c = sk_SSL_CIPHER_value(sk, n);
   2536     if (c == NULL)
   2537         return NULL;
   2538     return c->name;
   2539 }
   2540 
   2541 /** return a STACK of the ciphers available for the SSL_CTX and in order of
   2542  * preference */
   2543 STACK_OF(SSL_CIPHER) *SSL_CTX_get_ciphers(const SSL_CTX *ctx)
   2544 {
   2545     if (ctx != NULL)
   2546         return ctx->cipher_list;
   2547     return NULL;
   2548 }
   2549 
   2550 /*
   2551  * Distinguish between ciphers controlled by set_ciphersuite() and
   2552  * set_cipher_list() when counting.
   2553  */
   2554 static int cipher_list_tls12_num(STACK_OF(SSL_CIPHER) *sk)
   2555 {
   2556     int i, num = 0;
   2557     const SSL_CIPHER *c;
   2558 
   2559     if (sk == NULL)
   2560         return 0;
   2561     for (i = 0; i < sk_SSL_CIPHER_num(sk); ++i) {
   2562         c = sk_SSL_CIPHER_value(sk, i);
   2563         if (c->min_tls >= TLS1_3_VERSION)
   2564             continue;
   2565         num++;
   2566     }
   2567     return num;
   2568 }
   2569 
   2570 /** specify the ciphers to be used by default by the SSL_CTX */
   2571 int SSL_CTX_set_cipher_list(SSL_CTX *ctx, const char *str)
   2572 {
   2573     STACK_OF(SSL_CIPHER) *sk;
   2574 
   2575     sk = ssl_create_cipher_list(ctx->method, ctx->tls13_ciphersuites,
   2576                                 &ctx->cipher_list, &ctx->cipher_list_by_id, str,
   2577                                 ctx->cert);
   2578     /*
   2579      * ssl_create_cipher_list may return an empty stack if it was unable to
   2580      * find a cipher matching the given rule string (for example if the rule
   2581      * string specifies a cipher which has been disabled). This is not an
   2582      * error as far as ssl_create_cipher_list is concerned, and hence
   2583      * ctx->cipher_list and ctx->cipher_list_by_id has been updated.
   2584      */
   2585     if (sk == NULL)
   2586         return 0;
   2587     else if (cipher_list_tls12_num(sk) == 0) {
   2588         SSLerr(SSL_F_SSL_CTX_SET_CIPHER_LIST, SSL_R_NO_CIPHER_MATCH);
   2589         return 0;
   2590     }
   2591     return 1;
   2592 }
   2593 
   2594 /** specify the ciphers to be used by the SSL */
   2595 int SSL_set_cipher_list(SSL *s, const char *str)
   2596 {
   2597     STACK_OF(SSL_CIPHER) *sk;
   2598 
   2599     sk = ssl_create_cipher_list(s->ctx->method, s->tls13_ciphersuites,
   2600                                 &s->cipher_list, &s->cipher_list_by_id, str,
   2601                                 s->cert);
   2602     /* see comment in SSL_CTX_set_cipher_list */
   2603     if (sk == NULL)
   2604         return 0;
   2605     else if (cipher_list_tls12_num(sk) == 0) {
   2606         SSLerr(SSL_F_SSL_SET_CIPHER_LIST, SSL_R_NO_CIPHER_MATCH);
   2607         return 0;
   2608     }
   2609     return 1;
   2610 }
   2611 
   2612 char *SSL_get_shared_ciphers(const SSL *s, char *buf, int size)
   2613 {
   2614     char *p;
   2615     STACK_OF(SSL_CIPHER) *clntsk, *srvrsk;
   2616     const SSL_CIPHER *c;
   2617     int i;
   2618 
   2619     if (!s->server
   2620             || s->peer_ciphers == NULL
   2621             || size < 2)
   2622         return NULL;
   2623 
   2624     p = buf;
   2625     clntsk = s->peer_ciphers;
   2626     srvrsk = SSL_get_ciphers(s);
   2627     if (clntsk == NULL || srvrsk == NULL)
   2628         return NULL;
   2629 
   2630     if (sk_SSL_CIPHER_num(clntsk) == 0 || sk_SSL_CIPHER_num(srvrsk) == 0)
   2631         return NULL;
   2632 
   2633     for (i = 0; i < sk_SSL_CIPHER_num(clntsk); i++) {
   2634         int n;
   2635 
   2636         c = sk_SSL_CIPHER_value(clntsk, i);
   2637         if (sk_SSL_CIPHER_find(srvrsk, c) < 0)
   2638             continue;
   2639 
   2640         n = strlen(c->name);
   2641         if (n + 1 > size) {
   2642             if (p != buf)
   2643                 --p;
   2644             *p = '\0';
   2645             return buf;
   2646         }
   2647         strcpy(p, c->name);
   2648         p += n;
   2649         *(p++) = ':';
   2650         size -= n + 1;
   2651     }
   2652     p[-1] = '\0';
   2653     return buf;
   2654 }
   2655 
   2656 /**
   2657  * Return the requested servername (SNI) value. Note that the behaviour varies
   2658  * depending on:
   2659  * - whether this is called by the client or the server,
   2660  * - if we are before or during/after the handshake,
   2661  * - if a resumption or normal handshake is being attempted/has occurred
   2662  * - whether we have negotiated TLSv1.2 (or below) or TLSv1.3
   2663  *
   2664  * Note that only the host_name type is defined (RFC 3546).
   2665  */
   2666 const char *SSL_get_servername(const SSL *s, const int type)
   2667 {
   2668     /*
   2669      * If we don't know if we are the client or the server yet then we assume
   2670      * client.
   2671      */
   2672     int server = s->handshake_func == NULL ? 0 : s->server;
   2673     if (type != TLSEXT_NAMETYPE_host_name)
   2674         return NULL;
   2675 
   2676     if (server) {
   2677         /**
   2678          * Server side
   2679          * In TLSv1.3 on the server SNI is not associated with the session
   2680          * but in TLSv1.2 or below it is.
   2681          *
   2682          * Before the handshake:
   2683          *  - return NULL
   2684          *
   2685          * During/after the handshake (TLSv1.2 or below resumption occurred):
   2686          * - If a servername was accepted by the server in the original
   2687          *   handshake then it will return that servername, or NULL otherwise.
   2688          *
   2689          * During/after the handshake (TLSv1.2 or below resumption did not occur):
   2690          * - The function will return the servername requested by the client in
   2691          *   this handshake or NULL if none was requested.
   2692          */
   2693          if (s->hit && !SSL_IS_TLS13(s))
   2694             return s->session->ext.hostname;
   2695     } else {
   2696         /**
   2697          * Client side
   2698          *
   2699          * Before the handshake:
   2700          *  - If a servername has been set via a call to
   2701          *    SSL_set_tlsext_host_name() then it will return that servername
   2702          *  - If one has not been set, but a TLSv1.2 resumption is being
   2703          *    attempted and the session from the original handshake had a
   2704          *    servername accepted by the server then it will return that
   2705          *    servername
   2706          *  - Otherwise it returns NULL
   2707          *
   2708          * During/after the handshake (TLSv1.2 or below resumption occurred):
   2709          * - If the session from the original handshake had a servername accepted
   2710          *   by the server then it will return that servername.
   2711          * - Otherwise it returns the servername set via
   2712          *   SSL_set_tlsext_host_name() (or NULL if it was not called).
   2713          *
   2714          * During/after the handshake (TLSv1.2 or below resumption did not occur):
   2715          * - It will return the servername set via SSL_set_tlsext_host_name()
   2716          *   (or NULL if it was not called).
   2717          */
   2718         if (SSL_in_before(s)) {
   2719             if (s->ext.hostname == NULL
   2720                     && s->session != NULL
   2721                     && s->session->ssl_version != TLS1_3_VERSION)
   2722                 return s->session->ext.hostname;
   2723         } else {
   2724             if (!SSL_IS_TLS13(s) && s->hit && s->session->ext.hostname != NULL)
   2725                 return s->session->ext.hostname;
   2726         }
   2727     }
   2728 
   2729     return s->ext.hostname;
   2730 }
   2731 
   2732 int SSL_get_servername_type(const SSL *s)
   2733 {
   2734     if (SSL_get_servername(s, TLSEXT_NAMETYPE_host_name) != NULL)
   2735         return TLSEXT_NAMETYPE_host_name;
   2736     return -1;
   2737 }
   2738 
   2739 /*
   2740  * SSL_select_next_proto implements the standard protocol selection. It is
   2741  * expected that this function is called from the callback set by
   2742  * SSL_CTX_set_next_proto_select_cb. The protocol data is assumed to be a
   2743  * vector of 8-bit, length prefixed byte strings. The length byte itself is
   2744  * not included in the length. A byte string of length 0 is invalid. No byte
   2745  * string may be truncated. The current, but experimental algorithm for
   2746  * selecting the protocol is: 1) If the server doesn't support NPN then this
   2747  * is indicated to the callback. In this case, the client application has to
   2748  * abort the connection or have a default application level protocol. 2) If
   2749  * the server supports NPN, but advertises an empty list then the client
   2750  * selects the first protocol in its list, but indicates via the API that this
   2751  * fallback case was enacted. 3) Otherwise, the client finds the first
   2752  * protocol in the server's list that it supports and selects this protocol.
   2753  * This is because it's assumed that the server has better information about
   2754  * which protocol a client should use. 4) If the client doesn't support any
   2755  * of the server's advertised protocols, then this is treated the same as
   2756  * case 2. It returns either OPENSSL_NPN_NEGOTIATED if a common protocol was
   2757  * found, or OPENSSL_NPN_NO_OVERLAP if the fallback case was reached.
   2758  */
   2759 int SSL_select_next_proto(unsigned char **out, unsigned char *outlen,
   2760                           const unsigned char *server,
   2761                           unsigned int server_len,
   2762                           const unsigned char *client, unsigned int client_len)
   2763 {
   2764     unsigned int i, j;
   2765     const unsigned char *result;
   2766     int status = OPENSSL_NPN_UNSUPPORTED;
   2767 
   2768     /*
   2769      * For each protocol in server preference order, see if we support it.
   2770      */
   2771     for (i = 0; i < server_len;) {
   2772         for (j = 0; j < client_len;) {
   2773             if (server[i] == client[j] &&
   2774                 memcmp(&server[i + 1], &client[j + 1], server[i]) == 0) {
   2775                 /* We found a match */
   2776                 result = &server[i];
   2777                 status = OPENSSL_NPN_NEGOTIATED;
   2778                 goto found;
   2779             }
   2780             j += client[j];
   2781             j++;
   2782         }
   2783         i += server[i];
   2784         i++;
   2785     }
   2786 
   2787     /* There's no overlap between our protocols and the server's list. */
   2788     result = client;
   2789     status = OPENSSL_NPN_NO_OVERLAP;
   2790 
   2791  found:
   2792     *out = (unsigned char *)result + 1;
   2793     *outlen = result[0];
   2794     return status;
   2795 }
   2796 
   2797 #ifndef OPENSSL_NO_NEXTPROTONEG
   2798 /*
   2799  * SSL_get0_next_proto_negotiated sets *data and *len to point to the
   2800  * client's requested protocol for this connection and returns 0. If the
   2801  * client didn't request any protocol, then *data is set to NULL. Note that
   2802  * the client can request any protocol it chooses. The value returned from
   2803  * this function need not be a member of the list of supported protocols
   2804  * provided by the callback.
   2805  */
   2806 void SSL_get0_next_proto_negotiated(const SSL *s, const unsigned char **data,
   2807                                     unsigned *len)
   2808 {
   2809     *data = s->ext.npn;
   2810     if (!*data) {
   2811         *len = 0;
   2812     } else {
   2813         *len = (unsigned int)s->ext.npn_len;
   2814     }
   2815 }
   2816 
   2817 /*
   2818  * SSL_CTX_set_npn_advertised_cb sets a callback that is called when
   2819  * a TLS server needs a list of supported protocols for Next Protocol
   2820  * Negotiation. The returned list must be in wire format.  The list is
   2821  * returned by setting |out| to point to it and |outlen| to its length. This
   2822  * memory will not be modified, but one should assume that the SSL* keeps a
   2823  * reference to it. The callback should return SSL_TLSEXT_ERR_OK if it
   2824  * wishes to advertise. Otherwise, no such extension will be included in the
   2825  * ServerHello.
   2826  */
   2827 void SSL_CTX_set_npn_advertised_cb(SSL_CTX *ctx,
   2828                                    SSL_CTX_npn_advertised_cb_func cb,
   2829                                    void *arg)
   2830 {
   2831     ctx->ext.npn_advertised_cb = cb;
   2832     ctx->ext.npn_advertised_cb_arg = arg;
   2833 }
   2834 
   2835 /*
   2836  * SSL_CTX_set_next_proto_select_cb sets a callback that is called when a
   2837  * client needs to select a protocol from the server's provided list. |out|
   2838  * must be set to point to the selected protocol (which may be within |in|).
   2839  * The length of the protocol name must be written into |outlen|. The
   2840  * server's advertised protocols are provided in |in| and |inlen|. The
   2841  * callback can assume that |in| is syntactically valid. The client must
   2842  * select a protocol. It is fatal to the connection if this callback returns
   2843  * a value other than SSL_TLSEXT_ERR_OK.
   2844  */
   2845 void SSL_CTX_set_npn_select_cb(SSL_CTX *ctx,
   2846                                SSL_CTX_npn_select_cb_func cb,
   2847                                void *arg)
   2848 {
   2849     ctx->ext.npn_select_cb = cb;
   2850     ctx->ext.npn_select_cb_arg = arg;
   2851 }
   2852 #endif
   2853 
   2854 static int alpn_value_ok(const unsigned char *protos, unsigned int protos_len)
   2855 {
   2856     unsigned int idx;
   2857 
   2858     if (protos_len < 2 || protos == NULL)
   2859         return 0;
   2860 
   2861     for (idx = 0; idx < protos_len; idx += protos[idx] + 1) {
   2862         if (protos[idx] == 0)
   2863             return 0;
   2864     }
   2865     return idx == protos_len;
   2866 }
   2867 /*
   2868  * SSL_CTX_set_alpn_protos sets the ALPN protocol list on |ctx| to |protos|.
   2869  * |protos| must be in wire-format (i.e. a series of non-empty, 8-bit
   2870  * length-prefixed strings). Returns 0 on success.
   2871  */
   2872 int SSL_CTX_set_alpn_protos(SSL_CTX *ctx, const unsigned char *protos,
   2873                             unsigned int protos_len)
   2874 {
   2875     unsigned char *alpn;
   2876 
   2877     if (protos_len == 0 || protos == NULL) {
   2878         OPENSSL_free(ctx->ext.alpn);
   2879         ctx->ext.alpn = NULL;
   2880         ctx->ext.alpn_len = 0;
   2881         return 0;
   2882     }
   2883     /* Not valid per RFC */
   2884     if (!alpn_value_ok(protos, protos_len))
   2885         return 1;
   2886 
   2887     alpn = OPENSSL_memdup(protos, protos_len);
   2888     if (alpn == NULL) {
   2889         SSLerr(SSL_F_SSL_CTX_SET_ALPN_PROTOS, ERR_R_MALLOC_FAILURE);
   2890         return 1;
   2891     }
   2892     OPENSSL_free(ctx->ext.alpn);
   2893     ctx->ext.alpn = alpn;
   2894     ctx->ext.alpn_len = protos_len;
   2895 
   2896     return 0;
   2897 }
   2898 
   2899 /*
   2900  * SSL_set_alpn_protos sets the ALPN protocol list on |ssl| to |protos|.
   2901  * |protos| must be in wire-format (i.e. a series of non-empty, 8-bit
   2902  * length-prefixed strings). Returns 0 on success.
   2903  */
   2904 int SSL_set_alpn_protos(SSL *ssl, const unsigned char *protos,
   2905                         unsigned int protos_len)
   2906 {
   2907     unsigned char *alpn;
   2908 
   2909     if (protos_len == 0 || protos == NULL) {
   2910         OPENSSL_free(ssl->ext.alpn);
   2911         ssl->ext.alpn = NULL;
   2912         ssl->ext.alpn_len = 0;
   2913         return 0;
   2914     }
   2915     /* Not valid per RFC */
   2916     if (!alpn_value_ok(protos, protos_len))
   2917         return 1;
   2918 
   2919     alpn = OPENSSL_memdup(protos, protos_len);
   2920     if (alpn == NULL) {
   2921         SSLerr(SSL_F_SSL_SET_ALPN_PROTOS, ERR_R_MALLOC_FAILURE);
   2922         return 1;
   2923     }
   2924     OPENSSL_free(ssl->ext.alpn);
   2925     ssl->ext.alpn = alpn;
   2926     ssl->ext.alpn_len = protos_len;
   2927 
   2928     return 0;
   2929 }
   2930 
   2931 /*
   2932  * SSL_CTX_set_alpn_select_cb sets a callback function on |ctx| that is
   2933  * called during ClientHello processing in order to select an ALPN protocol
   2934  * from the client's list of offered protocols.
   2935  */
   2936 void SSL_CTX_set_alpn_select_cb(SSL_CTX *ctx,
   2937                                 SSL_CTX_alpn_select_cb_func cb,
   2938                                 void *arg)
   2939 {
   2940     ctx->ext.alpn_select_cb = cb;
   2941     ctx->ext.alpn_select_cb_arg = arg;
   2942 }
   2943 
   2944 /*
   2945  * SSL_get0_alpn_selected gets the selected ALPN protocol (if any) from |ssl|.
   2946  * On return it sets |*data| to point to |*len| bytes of protocol name
   2947  * (not including the leading length-prefix byte). If the server didn't
   2948  * respond with a negotiated protocol then |*len| will be zero.
   2949  */
   2950 void SSL_get0_alpn_selected(const SSL *ssl, const unsigned char **data,
   2951                             unsigned int *len)
   2952 {
   2953     *data = NULL;
   2954     if (ssl->s3)
   2955         *data = ssl->s3->alpn_selected;
   2956     if (*data == NULL)
   2957         *len = 0;
   2958     else
   2959         *len = (unsigned int)ssl->s3->alpn_selected_len;
   2960 }
   2961 
   2962 int SSL_export_keying_material(SSL *s, unsigned char *out, size_t olen,
   2963                                const char *label, size_t llen,
   2964                                const unsigned char *context, size_t contextlen,
   2965                                int use_context)
   2966 {
   2967     if (s->session == NULL
   2968         || (s->version < TLS1_VERSION && s->version != DTLS1_BAD_VER))
   2969         return -1;
   2970 
   2971     return s->method->ssl3_enc->export_keying_material(s, out, olen, label,
   2972                                                        llen, context,
   2973                                                        contextlen, use_context);
   2974 }
   2975 
   2976 int SSL_export_keying_material_early(SSL *s, unsigned char *out, size_t olen,
   2977                                      const char *label, size_t llen,
   2978                                      const unsigned char *context,
   2979                                      size_t contextlen)
   2980 {
   2981     if (s->version != TLS1_3_VERSION)
   2982         return 0;
   2983 
   2984     return tls13_export_keying_material_early(s, out, olen, label, llen,
   2985                                               context, contextlen);
   2986 }
   2987 
   2988 static unsigned long ssl_session_hash(const SSL_SESSION *a)
   2989 {
   2990     const unsigned char *session_id = a->session_id;
   2991     unsigned long l;
   2992     unsigned char tmp_storage[4];
   2993 
   2994     if (a->session_id_length < sizeof(tmp_storage)) {
   2995         memset(tmp_storage, 0, sizeof(tmp_storage));
   2996         memcpy(tmp_storage, a->session_id, a->session_id_length);
   2997         session_id = tmp_storage;
   2998     }
   2999 
   3000     l = (unsigned long)
   3001         ((unsigned long)session_id[0]) |
   3002         ((unsigned long)session_id[1] << 8L) |
   3003         ((unsigned long)session_id[2] << 16L) |
   3004         ((unsigned long)session_id[3] << 24L);
   3005     return l;
   3006 }
   3007 
   3008 /*
   3009  * NB: If this function (or indeed the hash function which uses a sort of
   3010  * coarser function than this one) is changed, ensure
   3011  * SSL_CTX_has_matching_session_id() is checked accordingly. It relies on
   3012  * being able to construct an SSL_SESSION that will collide with any existing
   3013  * session with a matching session ID.
   3014  */
   3015 static int ssl_session_cmp(const SSL_SESSION *a, const SSL_SESSION *b)
   3016 {
   3017     if (a->ssl_version != b->ssl_version)
   3018         return 1;
   3019     if (a->session_id_length != b->session_id_length)
   3020         return 1;
   3021     return memcmp(a->session_id, b->session_id, a->session_id_length);
   3022 }
   3023 
   3024 /*
   3025  * These wrapper functions should remain rather than redeclaring
   3026  * SSL_SESSION_hash and SSL_SESSION_cmp for void* types and casting each
   3027  * variable. The reason is that the functions aren't static, they're exposed
   3028  * via ssl.h.
   3029  */
   3030 
   3031 SSL_CTX *SSL_CTX_new(const SSL_METHOD *meth)
   3032 {
   3033     SSL_CTX *ret = NULL;
   3034 
   3035     if (meth == NULL) {
   3036         SSLerr(SSL_F_SSL_CTX_NEW, SSL_R_NULL_SSL_METHOD_PASSED);
   3037         return NULL;
   3038     }
   3039 
   3040     if (!OPENSSL_init_ssl(OPENSSL_INIT_LOAD_SSL_STRINGS, NULL))
   3041         return NULL;
   3042 
   3043     if (SSL_get_ex_data_X509_STORE_CTX_idx() < 0) {
   3044         SSLerr(SSL_F_SSL_CTX_NEW, SSL_R_X509_VERIFICATION_SETUP_PROBLEMS);
   3045         goto err;
   3046     }
   3047     ret = OPENSSL_zalloc(sizeof(*ret));
   3048     if (ret == NULL)
   3049         goto err;
   3050 
   3051     ret->method = meth;
   3052     ret->min_proto_version = 0;
   3053     ret->max_proto_version = 0;
   3054     ret->mode = SSL_MODE_AUTO_RETRY;
   3055     ret->session_cache_mode = SSL_SESS_CACHE_SERVER;
   3056     ret->session_cache_size = SSL_SESSION_CACHE_MAX_SIZE_DEFAULT;
   3057     /* We take the system default. */
   3058     ret->session_timeout = meth->get_timeout();
   3059     ret->references = 1;
   3060     ret->lock = CRYPTO_THREAD_lock_new();
   3061     if (ret->lock == NULL) {
   3062         SSLerr(SSL_F_SSL_CTX_NEW, ERR_R_MALLOC_FAILURE);
   3063         OPENSSL_free(ret);
   3064         return NULL;
   3065     }
   3066     ret->max_cert_list = SSL_MAX_CERT_LIST_DEFAULT;
   3067     ret->verify_mode = SSL_VERIFY_NONE;
   3068     if ((ret->cert = ssl_cert_new()) == NULL)
   3069         goto err;
   3070 
   3071     ret->sessions = lh_SSL_SESSION_new(ssl_session_hash, ssl_session_cmp);
   3072     if (ret->sessions == NULL)
   3073         goto err;
   3074     ret->cert_store = X509_STORE_new();
   3075     if (ret->cert_store == NULL)
   3076         goto err;
   3077 #ifndef OPENSSL_NO_CT
   3078     ret->ctlog_store = CTLOG_STORE_new();
   3079     if (ret->ctlog_store == NULL)
   3080         goto err;
   3081 #endif
   3082 
   3083     if (!SSL_CTX_set_ciphersuites(ret, TLS_DEFAULT_CIPHERSUITES))
   3084         goto err;
   3085 
   3086     if (!ssl_create_cipher_list(ret->method,
   3087                                 ret->tls13_ciphersuites,
   3088                                 &ret->cipher_list, &ret->cipher_list_by_id,
   3089                                 SSL_DEFAULT_CIPHER_LIST, ret->cert)
   3090         || sk_SSL_CIPHER_num(ret->cipher_list) <= 0) {
   3091         SSLerr(SSL_F_SSL_CTX_NEW, SSL_R_LIBRARY_HAS_NO_CIPHERS);
   3092         goto err2;
   3093     }
   3094 
   3095     ret->param = X509_VERIFY_PARAM_new();
   3096     if (ret->param == NULL)
   3097         goto err;
   3098 
   3099     if ((ret->md5 = EVP_get_digestbyname("ssl3-md5")) == NULL) {
   3100         SSLerr(SSL_F_SSL_CTX_NEW, SSL_R_UNABLE_TO_LOAD_SSL3_MD5_ROUTINES);
   3101         goto err2;
   3102     }
   3103     if ((ret->sha1 = EVP_get_digestbyname("ssl3-sha1")) == NULL) {
   3104         SSLerr(SSL_F_SSL_CTX_NEW, SSL_R_UNABLE_TO_LOAD_SSL3_SHA1_ROUTINES);
   3105         goto err2;
   3106     }
   3107 
   3108     if ((ret->ca_names = sk_X509_NAME_new_null()) == NULL)
   3109         goto err;
   3110 
   3111     if ((ret->client_ca_names = sk_X509_NAME_new_null()) == NULL)
   3112         goto err;
   3113 
   3114     if (!CRYPTO_new_ex_data(CRYPTO_EX_INDEX_SSL_CTX, ret, &ret->ex_data))
   3115         goto err;
   3116 
   3117     if ((ret->ext.secure = OPENSSL_secure_zalloc(sizeof(*ret->ext.secure))) == NULL)
   3118         goto err;
   3119 
   3120     /* No compression for DTLS */
   3121     if (!(meth->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS))
   3122         ret->comp_methods = SSL_COMP_get_compression_methods();
   3123 
   3124     ret->max_send_fragment = SSL3_RT_MAX_PLAIN_LENGTH;
   3125     ret->split_send_fragment = SSL3_RT_MAX_PLAIN_LENGTH;
   3126 
   3127     /* Setup RFC5077 ticket keys */
   3128     if ((RAND_bytes(ret->ext.tick_key_name,
   3129                     sizeof(ret->ext.tick_key_name)) <= 0)
   3130         || (RAND_priv_bytes(ret->ext.secure->tick_hmac_key,
   3131                        sizeof(ret->ext.secure->tick_hmac_key)) <= 0)
   3132         || (RAND_priv_bytes(ret->ext.secure->tick_aes_key,
   3133                        sizeof(ret->ext.secure->tick_aes_key)) <= 0))
   3134         ret->options |= SSL_OP_NO_TICKET;
   3135 
   3136     if (RAND_priv_bytes(ret->ext.cookie_hmac_key,
   3137                    sizeof(ret->ext.cookie_hmac_key)) <= 0)
   3138         goto err;
   3139 
   3140 #ifndef OPENSSL_NO_SRP
   3141     if (!SSL_CTX_SRP_CTX_init(ret))
   3142         goto err;
   3143 #endif
   3144 #ifndef OPENSSL_NO_ENGINE
   3145 # ifdef OPENSSL_SSL_CLIENT_ENGINE_AUTO
   3146 #  define eng_strx(x)     #x
   3147 #  define eng_str(x)      eng_strx(x)
   3148     /* Use specific client engine automatically... ignore errors */
   3149     {
   3150         ENGINE *eng;
   3151         eng = ENGINE_by_id(eng_str(OPENSSL_SSL_CLIENT_ENGINE_AUTO));
   3152         if (!eng) {
   3153             ERR_clear_error();
   3154             ENGINE_load_builtin_engines();
   3155             eng = ENGINE_by_id(eng_str(OPENSSL_SSL_CLIENT_ENGINE_AUTO));
   3156         }
   3157         if (!eng || !SSL_CTX_set_client_cert_engine(ret, eng))
   3158             ERR_clear_error();
   3159     }
   3160 # endif
   3161 #endif
   3162     /*
   3163      * Default is to connect to non-RI servers. When RI is more widely
   3164      * deployed might change this.
   3165      */
   3166     ret->options |= SSL_OP_LEGACY_SERVER_CONNECT;
   3167     /*
   3168      * Disable compression by default to prevent CRIME. Applications can
   3169      * re-enable compression by configuring
   3170      * SSL_CTX_clear_options(ctx, SSL_OP_NO_COMPRESSION);
   3171      * or by using the SSL_CONF library. Similarly we also enable TLSv1.3
   3172      * middlebox compatibility by default. This may be disabled by default in
   3173      * a later OpenSSL version.
   3174      */
   3175     ret->options |= SSL_OP_NO_COMPRESSION | SSL_OP_ENABLE_MIDDLEBOX_COMPAT;
   3176 
   3177     ret->ext.status_type = TLSEXT_STATUSTYPE_nothing;
   3178 
   3179     /*
   3180      * We cannot usefully set a default max_early_data here (which gets
   3181      * propagated in SSL_new(), for the following reason: setting the
   3182      * SSL field causes tls_construct_stoc_early_data() to tell the
   3183      * client that early data will be accepted when constructing a TLS 1.3
   3184      * session ticket, and the client will accordingly send us early data
   3185      * when using that ticket (if the client has early data to send).
   3186      * However, in order for the early data to actually be consumed by
   3187      * the application, the application must also have calls to
   3188      * SSL_read_early_data(); otherwise we'll just skip past the early data
   3189      * and ignore it.  So, since the application must add calls to
   3190      * SSL_read_early_data(), we also require them to add
   3191      * calls to SSL_CTX_set_max_early_data() in order to use early data,
   3192      * eliminating the bandwidth-wasting early data in the case described
   3193      * above.
   3194      */
   3195     ret->max_early_data = 0;
   3196 
   3197     /*
   3198      * Default recv_max_early_data is a fully loaded single record. Could be
   3199      * split across multiple records in practice. We set this differently to
   3200      * max_early_data so that, in the default case, we do not advertise any
   3201      * support for early_data, but if a client were to send us some (e.g.
   3202      * because of an old, stale ticket) then we will tolerate it and skip over
   3203      * it.
   3204      */
   3205     ret->recv_max_early_data = SSL3_RT_MAX_PLAIN_LENGTH;
   3206 
   3207     /* By default we send two session tickets automatically in TLSv1.3 */
   3208     ret->num_tickets = 2;
   3209 
   3210     ssl_ctx_system_config(ret);
   3211 
   3212     return ret;
   3213  err:
   3214     SSLerr(SSL_F_SSL_CTX_NEW, ERR_R_MALLOC_FAILURE);
   3215  err2:
   3216     SSL_CTX_free(ret);
   3217     return NULL;
   3218 }
   3219 
   3220 int SSL_CTX_up_ref(SSL_CTX *ctx)
   3221 {
   3222     int i;
   3223 
   3224     if (CRYPTO_UP_REF(&ctx->references, &i, ctx->lock) <= 0)
   3225         return 0;
   3226 
   3227     REF_PRINT_COUNT("SSL_CTX", ctx);
   3228     REF_ASSERT_ISNT(i < 2);
   3229     return ((i > 1) ? 1 : 0);
   3230 }
   3231 
   3232 void SSL_CTX_free(SSL_CTX *a)
   3233 {
   3234     int i;
   3235 
   3236     if (a == NULL)
   3237         return;
   3238 
   3239     CRYPTO_DOWN_REF(&a->references, &i, a->lock);
   3240     REF_PRINT_COUNT("SSL_CTX", a);
   3241     if (i > 0)
   3242         return;
   3243     REF_ASSERT_ISNT(i < 0);
   3244 
   3245     X509_VERIFY_PARAM_free(a->param);
   3246     dane_ctx_final(&a->dane);
   3247 
   3248     /*
   3249      * Free internal session cache. However: the remove_cb() may reference
   3250      * the ex_data of SSL_CTX, thus the ex_data store can only be removed
   3251      * after the sessions were flushed.
   3252      * As the ex_data handling routines might also touch the session cache,
   3253      * the most secure solution seems to be: empty (flush) the cache, then
   3254      * free ex_data, then finally free the cache.
   3255      * (See ticket [openssl.org #212].)
   3256      */
   3257     if (a->sessions != NULL)
   3258         SSL_CTX_flush_sessions(a, 0);
   3259 
   3260     CRYPTO_free_ex_data(CRYPTO_EX_INDEX_SSL_CTX, a, &a->ex_data);
   3261     lh_SSL_SESSION_free(a->sessions);
   3262     X509_STORE_free(a->cert_store);
   3263 #ifndef OPENSSL_NO_CT
   3264     CTLOG_STORE_free(a->ctlog_store);
   3265 #endif
   3266     sk_SSL_CIPHER_free(a->cipher_list);
   3267     sk_SSL_CIPHER_free(a->cipher_list_by_id);
   3268     sk_SSL_CIPHER_free(a->tls13_ciphersuites);
   3269     ssl_cert_free(a->cert);
   3270     sk_X509_NAME_pop_free(a->ca_names, X509_NAME_free);
   3271     sk_X509_NAME_pop_free(a->client_ca_names, X509_NAME_free);
   3272     sk_X509_pop_free(a->extra_certs, X509_free);
   3273     a->comp_methods = NULL;
   3274 #ifndef OPENSSL_NO_SRTP
   3275     sk_SRTP_PROTECTION_PROFILE_free(a->srtp_profiles);
   3276 #endif
   3277 #ifndef OPENSSL_NO_SRP
   3278     SSL_CTX_SRP_CTX_free(a);
   3279 #endif
   3280 #ifndef OPENSSL_NO_ENGINE
   3281     ENGINE_finish(a->client_cert_engine);
   3282 #endif
   3283 
   3284 #ifndef OPENSSL_NO_EC
   3285     OPENSSL_free(a->ext.ecpointformats);
   3286     OPENSSL_free(a->ext.supportedgroups);
   3287 #endif
   3288     OPENSSL_free(a->ext.alpn);
   3289     OPENSSL_secure_free(a->ext.secure);
   3290 
   3291     CRYPTO_THREAD_lock_free(a->lock);
   3292 
   3293     OPENSSL_free(a);
   3294 }
   3295 
   3296 void SSL_CTX_set_default_passwd_cb(SSL_CTX *ctx, pem_password_cb *cb)
   3297 {
   3298     ctx->default_passwd_callback = cb;
   3299 }
   3300 
   3301 void SSL_CTX_set_default_passwd_cb_userdata(SSL_CTX *ctx, void *u)
   3302 {
   3303     ctx->default_passwd_callback_userdata = u;
   3304 }
   3305 
   3306 pem_password_cb *SSL_CTX_get_default_passwd_cb(SSL_CTX *ctx)
   3307 {
   3308     return ctx->default_passwd_callback;
   3309 }
   3310 
   3311 void *SSL_CTX_get_default_passwd_cb_userdata(SSL_CTX *ctx)
   3312 {
   3313     return ctx->default_passwd_callback_userdata;
   3314 }
   3315 
   3316 void SSL_set_default_passwd_cb(SSL *s, pem_password_cb *cb)
   3317 {
   3318     s->default_passwd_callback = cb;
   3319 }
   3320 
   3321 void SSL_set_default_passwd_cb_userdata(SSL *s, void *u)
   3322 {
   3323     s->default_passwd_callback_userdata = u;
   3324 }
   3325 
   3326 pem_password_cb *SSL_get_default_passwd_cb(SSL *s)
   3327 {
   3328     return s->default_passwd_callback;
   3329 }
   3330 
   3331 void *SSL_get_default_passwd_cb_userdata(SSL *s)
   3332 {
   3333     return s->default_passwd_callback_userdata;
   3334 }
   3335 
   3336 void SSL_CTX_set_cert_verify_callback(SSL_CTX *ctx,
   3337                                       int (*cb) (X509_STORE_CTX *, void *),
   3338                                       void *arg)
   3339 {
   3340     ctx->app_verify_callback = cb;
   3341     ctx->app_verify_arg = arg;
   3342 }
   3343 
   3344 void SSL_CTX_set_verify(SSL_CTX *ctx, int mode,
   3345                         int (*cb) (int, X509_STORE_CTX *))
   3346 {
   3347     ctx->verify_mode = mode;
   3348     ctx->default_verify_callback = cb;
   3349 }
   3350 
   3351 void SSL_CTX_set_verify_depth(SSL_CTX *ctx, int depth)
   3352 {
   3353     X509_VERIFY_PARAM_set_depth(ctx->param, depth);
   3354 }
   3355 
   3356 void SSL_CTX_set_cert_cb(SSL_CTX *c, int (*cb) (SSL *ssl, void *arg), void *arg)
   3357 {
   3358     ssl_cert_set_cert_cb(c->cert, cb, arg);
   3359 }
   3360 
   3361 void SSL_set_cert_cb(SSL *s, int (*cb) (SSL *ssl, void *arg), void *arg)
   3362 {
   3363     ssl_cert_set_cert_cb(s->cert, cb, arg);
   3364 }
   3365 
   3366 void ssl_set_masks(SSL *s)
   3367 {
   3368     CERT *c = s->cert;
   3369     uint32_t *pvalid = s->s3->tmp.valid_flags;
   3370     int rsa_enc, rsa_sign, dh_tmp, dsa_sign;
   3371     unsigned long mask_k, mask_a;
   3372 #ifndef OPENSSL_NO_EC
   3373     int have_ecc_cert, ecdsa_ok;
   3374 #endif
   3375     if (c == NULL)
   3376         return;
   3377 
   3378 #ifndef OPENSSL_NO_DH
   3379     dh_tmp = (c->dh_tmp != NULL || c->dh_tmp_cb != NULL || c->dh_tmp_auto);
   3380 #else
   3381     dh_tmp = 0;
   3382 #endif
   3383 
   3384     rsa_enc = pvalid[SSL_PKEY_RSA] & CERT_PKEY_VALID;
   3385     rsa_sign = pvalid[SSL_PKEY_RSA] & CERT_PKEY_VALID;
   3386     dsa_sign = pvalid[SSL_PKEY_DSA_SIGN] & CERT_PKEY_VALID;
   3387 #ifndef OPENSSL_NO_EC
   3388     have_ecc_cert = pvalid[SSL_PKEY_ECC] & CERT_PKEY_VALID;
   3389 #endif
   3390     mask_k = 0;
   3391     mask_a = 0;
   3392 
   3393 #ifdef CIPHER_DEBUG
   3394     fprintf(stderr, "dht=%d re=%d rs=%d ds=%d\n",
   3395             dh_tmp, rsa_enc, rsa_sign, dsa_sign);
   3396 #endif
   3397 
   3398 #ifndef OPENSSL_NO_GOST
   3399     if (ssl_has_cert(s, SSL_PKEY_GOST12_512)) {
   3400         mask_k |= SSL_kGOST;
   3401         mask_a |= SSL_aGOST12;
   3402     }
   3403     if (ssl_has_cert(s, SSL_PKEY_GOST12_256)) {
   3404         mask_k |= SSL_kGOST;
   3405         mask_a |= SSL_aGOST12;
   3406     }
   3407     if (ssl_has_cert(s, SSL_PKEY_GOST01)) {
   3408         mask_k |= SSL_kGOST;
   3409         mask_a |= SSL_aGOST01;
   3410     }
   3411 #endif
   3412 
   3413     if (rsa_enc)
   3414         mask_k |= SSL_kRSA;
   3415 
   3416     if (dh_tmp)
   3417         mask_k |= SSL_kDHE;
   3418 
   3419     /*
   3420      * If we only have an RSA-PSS certificate allow RSA authentication
   3421      * if TLS 1.2 and peer supports it.
   3422      */
   3423 
   3424     if (rsa_enc || rsa_sign || (ssl_has_cert(s, SSL_PKEY_RSA_PSS_SIGN)
   3425                 && pvalid[SSL_PKEY_RSA_PSS_SIGN] & CERT_PKEY_EXPLICIT_SIGN
   3426                 && TLS1_get_version(s) == TLS1_2_VERSION))
   3427         mask_a |= SSL_aRSA;
   3428 
   3429     if (dsa_sign) {
   3430         mask_a |= SSL_aDSS;
   3431     }
   3432 
   3433     mask_a |= SSL_aNULL;
   3434 
   3435     /*
   3436      * An ECC certificate may be usable for ECDH and/or ECDSA cipher suites
   3437      * depending on the key usage extension.
   3438      */
   3439 #ifndef OPENSSL_NO_EC
   3440     if (have_ecc_cert) {
   3441         uint32_t ex_kusage;
   3442         ex_kusage = X509_get_key_usage(c->pkeys[SSL_PKEY_ECC].x509);
   3443         ecdsa_ok = ex_kusage & X509v3_KU_DIGITAL_SIGNATURE;
   3444         if (!(pvalid[SSL_PKEY_ECC] & CERT_PKEY_SIGN))
   3445             ecdsa_ok = 0;
   3446         if (ecdsa_ok)
   3447             mask_a |= SSL_aECDSA;
   3448     }
   3449     /* Allow Ed25519 for TLS 1.2 if peer supports it */
   3450     if (!(mask_a & SSL_aECDSA) && ssl_has_cert(s, SSL_PKEY_ED25519)
   3451             && pvalid[SSL_PKEY_ED25519] & CERT_PKEY_EXPLICIT_SIGN
   3452             && TLS1_get_version(s) == TLS1_2_VERSION)
   3453             mask_a |= SSL_aECDSA;
   3454 
   3455     /* Allow Ed448 for TLS 1.2 if peer supports it */
   3456     if (!(mask_a & SSL_aECDSA) && ssl_has_cert(s, SSL_PKEY_ED448)
   3457             && pvalid[SSL_PKEY_ED448] & CERT_PKEY_EXPLICIT_SIGN
   3458             && TLS1_get_version(s) == TLS1_2_VERSION)
   3459             mask_a |= SSL_aECDSA;
   3460 #endif
   3461 
   3462 #ifndef OPENSSL_NO_EC
   3463     mask_k |= SSL_kECDHE;
   3464 #endif
   3465 
   3466 #ifndef OPENSSL_NO_PSK
   3467     mask_k |= SSL_kPSK;
   3468     mask_a |= SSL_aPSK;
   3469     if (mask_k & SSL_kRSA)
   3470         mask_k |= SSL_kRSAPSK;
   3471     if (mask_k & SSL_kDHE)
   3472         mask_k |= SSL_kDHEPSK;
   3473     if (mask_k & SSL_kECDHE)
   3474         mask_k |= SSL_kECDHEPSK;
   3475 #endif
   3476 
   3477     s->s3->tmp.mask_k = mask_k;
   3478     s->s3->tmp.mask_a = mask_a;
   3479 }
   3480 
   3481 #ifndef OPENSSL_NO_EC
   3482 
   3483 int ssl_check_srvr_ecc_cert_and_alg(X509 *x, SSL *s)
   3484 {
   3485     if (s->s3->tmp.new_cipher->algorithm_auth & SSL_aECDSA) {
   3486         /* key usage, if present, must allow signing */
   3487         if (!(X509_get_key_usage(x) & X509v3_KU_DIGITAL_SIGNATURE)) {
   3488             SSLerr(SSL_F_SSL_CHECK_SRVR_ECC_CERT_AND_ALG,
   3489                    SSL_R_ECC_CERT_NOT_FOR_SIGNING);
   3490             return 0;
   3491         }
   3492     }
   3493     return 1;                   /* all checks are ok */
   3494 }
   3495 
   3496 #endif
   3497 
   3498 int ssl_get_server_cert_serverinfo(SSL *s, const unsigned char **serverinfo,
   3499                                    size_t *serverinfo_length)
   3500 {
   3501     CERT_PKEY *cpk = s->s3->tmp.cert;
   3502     *serverinfo_length = 0;
   3503 
   3504     if (cpk == NULL || cpk->serverinfo == NULL)
   3505         return 0;
   3506 
   3507     *serverinfo = cpk->serverinfo;
   3508     *serverinfo_length = cpk->serverinfo_length;
   3509     return 1;
   3510 }
   3511 
   3512 void ssl_update_cache(SSL *s, int mode)
   3513 {
   3514     int i;
   3515 
   3516     /*
   3517      * If the session_id_length is 0, we are not supposed to cache it, and it
   3518      * would be rather hard to do anyway :-)
   3519      */
   3520     if (s->session->session_id_length == 0)
   3521         return;
   3522 
   3523     /*
   3524      * If sid_ctx_length is 0 there is no specific application context
   3525      * associated with this session, so when we try to resume it and
   3526      * SSL_VERIFY_PEER is requested to verify the client identity, we have no
   3527      * indication that this is actually a session for the proper application
   3528      * context, and the *handshake* will fail, not just the resumption attempt.
   3529      * Do not cache (on the server) these sessions that are not resumable
   3530      * (clients can set SSL_VERIFY_PEER without needing a sid_ctx set).
   3531      */
   3532     if (s->server && s->session->sid_ctx_length == 0
   3533             && (s->verify_mode & SSL_VERIFY_PEER) != 0)
   3534         return;
   3535 
   3536     i = s->session_ctx->session_cache_mode;
   3537     if ((i & mode) != 0
   3538         && (!s->hit || SSL_IS_TLS13(s))) {
   3539         /*
   3540          * Add the session to the internal cache. In server side TLSv1.3 we
   3541          * normally don't do this because by default it's a full stateless ticket
   3542          * with only a dummy session id so there is no reason to cache it,
   3543          * unless:
   3544          * - we are doing early_data, in which case we cache so that we can
   3545          *   detect replays
   3546          * - the application has set a remove_session_cb so needs to know about
   3547          *   session timeout events
   3548          * - SSL_OP_NO_TICKET is set in which case it is a stateful ticket
   3549          */
   3550         if ((i & SSL_SESS_CACHE_NO_INTERNAL_STORE) == 0
   3551                 && (!SSL_IS_TLS13(s)
   3552                     || !s->server
   3553                     || (s->max_early_data > 0
   3554                         && (s->options & SSL_OP_NO_ANTI_REPLAY) == 0)
   3555                     || s->session_ctx->remove_session_cb != NULL
   3556                     || (s->options & SSL_OP_NO_TICKET) != 0))
   3557             SSL_CTX_add_session(s->session_ctx, s->session);
   3558 
   3559         /*
   3560          * Add the session to the external cache. We do this even in server side
   3561          * TLSv1.3 without early data because some applications just want to
   3562          * know about the creation of a session and aren't doing a full cache.
   3563          */
   3564         if (s->session_ctx->new_session_cb != NULL) {
   3565             SSL_SESSION_up_ref(s->session);
   3566             if (!s->session_ctx->new_session_cb(s, s->session))
   3567                 SSL_SESSION_free(s->session);
   3568         }
   3569     }
   3570 
   3571     /* auto flush every 255 connections */
   3572     if ((!(i & SSL_SESS_CACHE_NO_AUTO_CLEAR)) && ((i & mode) == mode)) {
   3573         TSAN_QUALIFIER int *stat;
   3574         if (mode & SSL_SESS_CACHE_CLIENT)
   3575             stat = &s->session_ctx->stats.sess_connect_good;
   3576         else
   3577             stat = &s->session_ctx->stats.sess_accept_good;
   3578         if ((tsan_load(stat) & 0xff) == 0xff)
   3579             SSL_CTX_flush_sessions(s->session_ctx, (unsigned long)time(NULL));
   3580     }
   3581 }
   3582 
   3583 const SSL_METHOD *SSL_CTX_get_ssl_method(const SSL_CTX *ctx)
   3584 {
   3585     return ctx->method;
   3586 }
   3587 
   3588 const SSL_METHOD *SSL_get_ssl_method(const SSL *s)
   3589 {
   3590     return s->method;
   3591 }
   3592 
   3593 int SSL_set_ssl_method(SSL *s, const SSL_METHOD *meth)
   3594 {
   3595     int ret = 1;
   3596 
   3597     if (s->method != meth) {
   3598         const SSL_METHOD *sm = s->method;
   3599         int (*hf) (SSL *) = s->handshake_func;
   3600 
   3601         if (sm->version == meth->version)
   3602             s->method = meth;
   3603         else {
   3604             sm->ssl_free(s);
   3605             s->method = meth;
   3606             ret = s->method->ssl_new(s);
   3607         }
   3608 
   3609         if (hf == sm->ssl_connect)
   3610             s->handshake_func = meth->ssl_connect;
   3611         else if (hf == sm->ssl_accept)
   3612             s->handshake_func = meth->ssl_accept;
   3613     }
   3614     return ret;
   3615 }
   3616 
   3617 int SSL_get_error(const SSL *s, int i)
   3618 {
   3619     int reason;
   3620     unsigned long l;
   3621     BIO *bio;
   3622 
   3623     if (i > 0)
   3624         return SSL_ERROR_NONE;
   3625 
   3626     /*
   3627      * Make things return SSL_ERROR_SYSCALL when doing SSL_do_handshake etc,
   3628      * where we do encode the error
   3629      */
   3630     if ((l = ERR_peek_error()) != 0) {
   3631         if (ERR_GET_LIB(l) == ERR_LIB_SYS)
   3632             return SSL_ERROR_SYSCALL;
   3633         else
   3634             return SSL_ERROR_SSL;
   3635     }
   3636 
   3637     if (SSL_want_read(s)) {
   3638         bio = SSL_get_rbio(s);
   3639         if (BIO_should_read(bio))
   3640             return SSL_ERROR_WANT_READ;
   3641         else if (BIO_should_write(bio))
   3642             /*
   3643              * This one doesn't make too much sense ... We never try to write
   3644              * to the rbio, and an application program where rbio and wbio
   3645              * are separate couldn't even know what it should wait for.
   3646              * However if we ever set s->rwstate incorrectly (so that we have
   3647              * SSL_want_read(s) instead of SSL_want_write(s)) and rbio and
   3648              * wbio *are* the same, this test works around that bug; so it
   3649              * might be safer to keep it.
   3650              */
   3651             return SSL_ERROR_WANT_WRITE;
   3652         else if (BIO_should_io_special(bio)) {
   3653             reason = BIO_get_retry_reason(bio);
   3654             if (reason == BIO_RR_CONNECT)
   3655                 return SSL_ERROR_WANT_CONNECT;
   3656             else if (reason == BIO_RR_ACCEPT)
   3657                 return SSL_ERROR_WANT_ACCEPT;
   3658             else
   3659                 return SSL_ERROR_SYSCALL; /* unknown */
   3660         }
   3661     }
   3662 
   3663     if (SSL_want_write(s)) {
   3664         /* Access wbio directly - in order to use the buffered bio if present */
   3665         bio = s->wbio;
   3666         if (BIO_should_write(bio))
   3667             return SSL_ERROR_WANT_WRITE;
   3668         else if (BIO_should_read(bio))
   3669             /*
   3670              * See above (SSL_want_read(s) with BIO_should_write(bio))
   3671              */
   3672             return SSL_ERROR_WANT_READ;
   3673         else if (BIO_should_io_special(bio)) {
   3674             reason = BIO_get_retry_reason(bio);
   3675             if (reason == BIO_RR_CONNECT)
   3676                 return SSL_ERROR_WANT_CONNECT;
   3677             else if (reason == BIO_RR_ACCEPT)
   3678                 return SSL_ERROR_WANT_ACCEPT;
   3679             else
   3680                 return SSL_ERROR_SYSCALL;
   3681         }
   3682     }
   3683     if (SSL_want_x509_lookup(s))
   3684         return SSL_ERROR_WANT_X509_LOOKUP;
   3685     if (SSL_want_async(s))
   3686         return SSL_ERROR_WANT_ASYNC;
   3687     if (SSL_want_async_job(s))
   3688         return SSL_ERROR_WANT_ASYNC_JOB;
   3689     if (SSL_want_client_hello_cb(s))
   3690         return SSL_ERROR_WANT_CLIENT_HELLO_CB;
   3691 
   3692     if ((s->shutdown & SSL_RECEIVED_SHUTDOWN) &&
   3693         (s->s3->warn_alert == SSL_AD_CLOSE_NOTIFY))
   3694         return SSL_ERROR_ZERO_RETURN;
   3695 
   3696     return SSL_ERROR_SYSCALL;
   3697 }
   3698 
   3699 static int ssl_do_handshake_intern(void *vargs)
   3700 {
   3701     struct ssl_async_args *args;
   3702     SSL *s;
   3703 
   3704     args = (struct ssl_async_args *)vargs;
   3705     s = args->s;
   3706 
   3707     return s->handshake_func(s);
   3708 }
   3709 
   3710 int SSL_do_handshake(SSL *s)
   3711 {
   3712     int ret = 1;
   3713 
   3714     if (s->handshake_func == NULL) {
   3715         SSLerr(SSL_F_SSL_DO_HANDSHAKE, SSL_R_CONNECTION_TYPE_NOT_SET);
   3716         return -1;
   3717     }
   3718 
   3719     ossl_statem_check_finish_init(s, -1);
   3720 
   3721     s->method->ssl_renegotiate_check(s, 0);
   3722 
   3723     if (SSL_in_init(s) || SSL_in_before(s)) {
   3724         if ((s->mode & SSL_MODE_ASYNC) && ASYNC_get_current_job() == NULL) {
   3725             struct ssl_async_args args;
   3726 
   3727             memset(&args, 0, sizeof(args));
   3728             args.s = s;
   3729 
   3730             ret = ssl_start_async_job(s, &args, ssl_do_handshake_intern);
   3731         } else {
   3732             ret = s->handshake_func(s);
   3733         }
   3734     }
   3735     return ret;
   3736 }
   3737 
   3738 void SSL_set_accept_state(SSL *s)
   3739 {
   3740     s->server = 1;
   3741     s->shutdown = 0;
   3742     ossl_statem_clear(s);
   3743     s->handshake_func = s->method->ssl_accept;
   3744     clear_ciphers(s);
   3745 }
   3746 
   3747 void SSL_set_connect_state(SSL *s)
   3748 {
   3749     s->server = 0;
   3750     s->shutdown = 0;
   3751     ossl_statem_clear(s);
   3752     s->handshake_func = s->method->ssl_connect;
   3753     clear_ciphers(s);
   3754 }
   3755 
   3756 int ssl_undefined_function(SSL *s)
   3757 {
   3758     SSLerr(SSL_F_SSL_UNDEFINED_FUNCTION, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
   3759     return 0;
   3760 }
   3761 
   3762 int ssl_undefined_void_function(void)
   3763 {
   3764     SSLerr(SSL_F_SSL_UNDEFINED_VOID_FUNCTION,
   3765            ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
   3766     return 0;
   3767 }
   3768 
   3769 int ssl_undefined_const_function(const SSL *s)
   3770 {
   3771     return 0;
   3772 }
   3773 
   3774 const SSL_METHOD *ssl_bad_method(int ver)
   3775 {
   3776     SSLerr(SSL_F_SSL_BAD_METHOD, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
   3777     return NULL;
   3778 }
   3779 
   3780 const char *ssl_protocol_to_string(int version)
   3781 {
   3782     switch(version)
   3783     {
   3784     case TLS1_3_VERSION:
   3785         return "TLSv1.3";
   3786 
   3787     case TLS1_2_VERSION:
   3788         return "TLSv1.2";
   3789 
   3790     case TLS1_1_VERSION:
   3791         return "TLSv1.1";
   3792 
   3793     case TLS1_VERSION:
   3794         return "TLSv1";
   3795 
   3796     case SSL3_VERSION:
   3797         return "SSLv3";
   3798 
   3799     case DTLS1_BAD_VER:
   3800         return "DTLSv0.9";
   3801 
   3802     case DTLS1_VERSION:
   3803         return "DTLSv1";
   3804 
   3805     case DTLS1_2_VERSION:
   3806         return "DTLSv1.2";
   3807 
   3808     default:
   3809         return "unknown";
   3810     }
   3811 }
   3812 
   3813 const char *SSL_get_version(const SSL *s)
   3814 {
   3815     return ssl_protocol_to_string(s->version);
   3816 }
   3817 
   3818 static int dup_ca_names(STACK_OF(X509_NAME) **dst, STACK_OF(X509_NAME) *src)
   3819 {
   3820     STACK_OF(X509_NAME) *sk;
   3821     X509_NAME *xn;
   3822     int i;
   3823 
   3824     if (src == NULL) {
   3825         *dst = NULL;
   3826         return 1;
   3827     }
   3828 
   3829     if ((sk = sk_X509_NAME_new_null()) == NULL)
   3830         return 0;
   3831     for (i = 0; i < sk_X509_NAME_num(src); i++) {
   3832         xn = X509_NAME_dup(sk_X509_NAME_value(src, i));
   3833         if (xn == NULL) {
   3834             sk_X509_NAME_pop_free(sk, X509_NAME_free);
   3835             return 0;
   3836         }
   3837         if (sk_X509_NAME_insert(sk, xn, i) == 0) {
   3838             X509_NAME_free(xn);
   3839             sk_X509_NAME_pop_free(sk, X509_NAME_free);
   3840             return 0;
   3841         }
   3842     }
   3843     *dst = sk;
   3844 
   3845     return 1;
   3846 }
   3847 
   3848 SSL *SSL_dup(SSL *s)
   3849 {
   3850     SSL *ret;
   3851     int i;
   3852 
   3853     /* If we're not quiescent, just up_ref! */
   3854     if (!SSL_in_init(s) || !SSL_in_before(s)) {
   3855         CRYPTO_UP_REF(&s->references, &i, s->lock);
   3856         return s;
   3857     }
   3858 
   3859     /*
   3860      * Otherwise, copy configuration state, and session if set.
   3861      */
   3862     if ((ret = SSL_new(SSL_get_SSL_CTX(s))) == NULL)
   3863         return NULL;
   3864 
   3865     if (s->session != NULL) {
   3866         /*
   3867          * Arranges to share the same session via up_ref.  This "copies"
   3868          * session-id, SSL_METHOD, sid_ctx, and 'cert'
   3869          */
   3870         if (!SSL_copy_session_id(ret, s))
   3871             goto err;
   3872     } else {
   3873         /*
   3874          * No session has been established yet, so we have to expect that
   3875          * s->cert or ret->cert will be changed later -- they should not both
   3876          * point to the same object, and thus we can't use
   3877          * SSL_copy_session_id.
   3878          */
   3879         if (!SSL_set_ssl_method(ret, s->method))
   3880             goto err;
   3881 
   3882         if (s->cert != NULL) {
   3883             ssl_cert_free(ret->cert);
   3884             ret->cert = ssl_cert_dup(s->cert);
   3885             if (ret->cert == NULL)
   3886                 goto err;
   3887         }
   3888 
   3889         if (!SSL_set_session_id_context(ret, s->sid_ctx,
   3890                                         (int)s->sid_ctx_length))
   3891             goto err;
   3892     }
   3893 
   3894     if (!ssl_dane_dup(ret, s))
   3895         goto err;
   3896     ret->version = s->version;
   3897     ret->options = s->options;
   3898     ret->min_proto_version = s->min_proto_version;
   3899     ret->max_proto_version = s->max_proto_version;
   3900     ret->mode = s->mode;
   3901     SSL_set_max_cert_list(ret, SSL_get_max_cert_list(s));
   3902     SSL_set_read_ahead(ret, SSL_get_read_ahead(s));
   3903     ret->msg_callback = s->msg_callback;
   3904     ret->msg_callback_arg = s->msg_callback_arg;
   3905     SSL_set_verify(ret, SSL_get_verify_mode(s), SSL_get_verify_callback(s));
   3906     SSL_set_verify_depth(ret, SSL_get_verify_depth(s));
   3907     ret->generate_session_id = s->generate_session_id;
   3908 
   3909     SSL_set_info_callback(ret, SSL_get_info_callback(s));
   3910 
   3911     /* copy app data, a little dangerous perhaps */
   3912     if (!CRYPTO_dup_ex_data(CRYPTO_EX_INDEX_SSL, &ret->ex_data, &s->ex_data))
   3913         goto err;
   3914 
   3915     ret->server = s->server;
   3916     if (s->handshake_func) {
   3917         if (s->server)
   3918             SSL_set_accept_state(ret);
   3919         else
   3920             SSL_set_connect_state(ret);
   3921     }
   3922     ret->shutdown = s->shutdown;
   3923     ret->hit = s->hit;
   3924 
   3925     ret->default_passwd_callback = s->default_passwd_callback;
   3926     ret->default_passwd_callback_userdata = s->default_passwd_callback_userdata;
   3927 
   3928     X509_VERIFY_PARAM_inherit(ret->param, s->param);
   3929 
   3930     /* dup the cipher_list and cipher_list_by_id stacks */
   3931     if (s->cipher_list != NULL) {
   3932         if ((ret->cipher_list = sk_SSL_CIPHER_dup(s->cipher_list)) == NULL)
   3933             goto err;
   3934     }
   3935     if (s->cipher_list_by_id != NULL)
   3936         if ((ret->cipher_list_by_id = sk_SSL_CIPHER_dup(s->cipher_list_by_id))
   3937             == NULL)
   3938             goto err;
   3939 
   3940     /* Dup the client_CA list */
   3941     if (!dup_ca_names(&ret->ca_names, s->ca_names)
   3942             || !dup_ca_names(&ret->client_ca_names, s->client_ca_names))
   3943         goto err;
   3944 
   3945     return ret;
   3946 
   3947  err:
   3948     SSL_free(ret);
   3949     return NULL;
   3950 }
   3951 
   3952 void ssl_clear_cipher_ctx(SSL *s)
   3953 {
   3954     if (s->enc_read_ctx != NULL) {
   3955         EVP_CIPHER_CTX_free(s->enc_read_ctx);
   3956         s->enc_read_ctx = NULL;
   3957     }
   3958     if (s->enc_write_ctx != NULL) {
   3959         EVP_CIPHER_CTX_free(s->enc_write_ctx);
   3960         s->enc_write_ctx = NULL;
   3961     }
   3962 #ifndef OPENSSL_NO_COMP
   3963     COMP_CTX_free(s->expand);
   3964     s->expand = NULL;
   3965     COMP_CTX_free(s->compress);
   3966     s->compress = NULL;
   3967 #endif
   3968 }
   3969 
   3970 X509 *SSL_get_certificate(const SSL *s)
   3971 {
   3972     if (s->cert != NULL)
   3973         return s->cert->key->x509;
   3974     else
   3975         return NULL;
   3976 }
   3977 
   3978 EVP_PKEY *SSL_get_privatekey(const SSL *s)
   3979 {
   3980     if (s->cert != NULL)
   3981         return s->cert->key->privatekey;
   3982     else
   3983         return NULL;
   3984 }
   3985 
   3986 X509 *SSL_CTX_get0_certificate(const SSL_CTX *ctx)
   3987 {
   3988     if (ctx->cert != NULL)
   3989         return ctx->cert->key->x509;
   3990     else
   3991         return NULL;
   3992 }
   3993 
   3994 EVP_PKEY *SSL_CTX_get0_privatekey(const SSL_CTX *ctx)
   3995 {
   3996     if (ctx->cert != NULL)
   3997         return ctx->cert->key->privatekey;
   3998     else
   3999         return NULL;
   4000 }
   4001 
   4002 const SSL_CIPHER *SSL_get_current_cipher(const SSL *s)
   4003 {
   4004     if ((s->session != NULL) && (s->session->cipher != NULL))
   4005         return s->session->cipher;
   4006     return NULL;
   4007 }
   4008 
   4009 const SSL_CIPHER *SSL_get_pending_cipher(const SSL *s)
   4010 {
   4011     return s->s3->tmp.new_cipher;
   4012 }
   4013 
   4014 const COMP_METHOD *SSL_get_current_compression(const SSL *s)
   4015 {
   4016 #ifndef OPENSSL_NO_COMP
   4017     return s->compress ? COMP_CTX_get_method(s->compress) : NULL;
   4018 #else
   4019     return NULL;
   4020 #endif
   4021 }
   4022 
   4023 const COMP_METHOD *SSL_get_current_expansion(const SSL *s)
   4024 {
   4025 #ifndef OPENSSL_NO_COMP
   4026     return s->expand ? COMP_CTX_get_method(s->expand) : NULL;
   4027 #else
   4028     return NULL;
   4029 #endif
   4030 }
   4031 
   4032 int ssl_init_wbio_buffer(SSL *s)
   4033 {
   4034     BIO *bbio;
   4035 
   4036     if (s->bbio != NULL) {
   4037         /* Already buffered. */
   4038         return 1;
   4039     }
   4040 
   4041     bbio = BIO_new(BIO_f_buffer());
   4042     if (bbio == NULL || !BIO_set_read_buffer_size(bbio, 1)) {
   4043         BIO_free(bbio);
   4044         SSLerr(SSL_F_SSL_INIT_WBIO_BUFFER, ERR_R_BUF_LIB);
   4045         return 0;
   4046     }
   4047     s->bbio = bbio;
   4048     s->wbio = BIO_push(bbio, s->wbio);
   4049 
   4050     return 1;
   4051 }
   4052 
   4053 int ssl_free_wbio_buffer(SSL *s)
   4054 {
   4055     /* callers ensure s is never null */
   4056     if (s->bbio == NULL)
   4057         return 1;
   4058 
   4059     s->wbio = BIO_pop(s->wbio);
   4060     BIO_free(s->bbio);
   4061     s->bbio = NULL;
   4062 
   4063     return 1;
   4064 }
   4065 
   4066 void SSL_CTX_set_quiet_shutdown(SSL_CTX *ctx, int mode)
   4067 {
   4068     ctx->quiet_shutdown = mode;
   4069 }
   4070 
   4071 int SSL_CTX_get_quiet_shutdown(const SSL_CTX *ctx)
   4072 {
   4073     return ctx->quiet_shutdown;
   4074 }
   4075 
   4076 void SSL_set_quiet_shutdown(SSL *s, int mode)
   4077 {
   4078     s->quiet_shutdown = mode;
   4079 }
   4080 
   4081 int SSL_get_quiet_shutdown(const SSL *s)
   4082 {
   4083     return s->quiet_shutdown;
   4084 }
   4085 
   4086 void SSL_set_shutdown(SSL *s, int mode)
   4087 {
   4088     s->shutdown = mode;
   4089 }
   4090 
   4091 int SSL_get_shutdown(const SSL *s)
   4092 {
   4093     return s->shutdown;
   4094 }
   4095 
   4096 int SSL_version(const SSL *s)
   4097 {
   4098     return s->version;
   4099 }
   4100 
   4101 int SSL_client_version(const SSL *s)
   4102 {
   4103     return s->client_version;
   4104 }
   4105 
   4106 SSL_CTX *SSL_get_SSL_CTX(const SSL *ssl)
   4107 {
   4108     return ssl->ctx;
   4109 }
   4110 
   4111 SSL_CTX *SSL_set_SSL_CTX(SSL *ssl, SSL_CTX *ctx)
   4112 {
   4113     CERT *new_cert;
   4114     if (ssl->ctx == ctx)
   4115         return ssl->ctx;
   4116     if (ctx == NULL)
   4117         ctx = ssl->session_ctx;
   4118     new_cert = ssl_cert_dup(ctx->cert);
   4119     if (new_cert == NULL) {
   4120         return NULL;
   4121     }
   4122 
   4123     if (!custom_exts_copy_flags(&new_cert->custext, &ssl->cert->custext)) {
   4124         ssl_cert_free(new_cert);
   4125         return NULL;
   4126     }
   4127 
   4128     ssl_cert_free(ssl->cert);
   4129     ssl->cert = new_cert;
   4130 
   4131     /*
   4132      * Program invariant: |sid_ctx| has fixed size (SSL_MAX_SID_CTX_LENGTH),
   4133      * so setter APIs must prevent invalid lengths from entering the system.
   4134      */
   4135     if (!ossl_assert(ssl->sid_ctx_length <= sizeof(ssl->sid_ctx)))
   4136         return NULL;
   4137 
   4138     /*
   4139      * If the session ID context matches that of the parent SSL_CTX,
   4140      * inherit it from the new SSL_CTX as well. If however the context does
   4141      * not match (i.e., it was set per-ssl with SSL_set_session_id_context),
   4142      * leave it unchanged.
   4143      */
   4144     if ((ssl->ctx != NULL) &&
   4145         (ssl->sid_ctx_length == ssl->ctx->sid_ctx_length) &&
   4146         (memcmp(ssl->sid_ctx, ssl->ctx->sid_ctx, ssl->sid_ctx_length) == 0)) {
   4147         ssl->sid_ctx_length = ctx->sid_ctx_length;
   4148         memcpy(&ssl->sid_ctx, &ctx->sid_ctx, sizeof(ssl->sid_ctx));
   4149     }
   4150 
   4151     SSL_CTX_up_ref(ctx);
   4152     SSL_CTX_free(ssl->ctx);     /* decrement reference count */
   4153     ssl->ctx = ctx;
   4154 
   4155     return ssl->ctx;
   4156 }
   4157 
   4158 int SSL_CTX_set_default_verify_paths(SSL_CTX *ctx)
   4159 {
   4160     return X509_STORE_set_default_paths(ctx->cert_store);
   4161 }
   4162 
   4163 int SSL_CTX_set_default_verify_dir(SSL_CTX *ctx)
   4164 {
   4165     X509_LOOKUP *lookup;
   4166 
   4167     lookup = X509_STORE_add_lookup(ctx->cert_store, X509_LOOKUP_hash_dir());
   4168     if (lookup == NULL)
   4169         return 0;
   4170     X509_LOOKUP_add_dir(lookup, NULL, X509_FILETYPE_DEFAULT);
   4171 
   4172     /* Clear any errors if the default directory does not exist */
   4173     ERR_clear_error();
   4174 
   4175     return 1;
   4176 }
   4177 
   4178 int SSL_CTX_set_default_verify_file(SSL_CTX *ctx)
   4179 {
   4180     X509_LOOKUP *lookup;
   4181 
   4182     lookup = X509_STORE_add_lookup(ctx->cert_store, X509_LOOKUP_file());
   4183     if (lookup == NULL)
   4184         return 0;
   4185 
   4186     X509_LOOKUP_load_file(lookup, NULL, X509_FILETYPE_DEFAULT);
   4187 
   4188     /* Clear any errors if the default file does not exist */
   4189     ERR_clear_error();
   4190 
   4191     return 1;
   4192 }
   4193 
   4194 int SSL_CTX_load_verify_locations(SSL_CTX *ctx, const char *CAfile,
   4195                                   const char *CApath)
   4196 {
   4197     return X509_STORE_load_locations(ctx->cert_store, CAfile, CApath);
   4198 }
   4199 
   4200 void SSL_set_info_callback(SSL *ssl,
   4201                            void (*cb) (const SSL *ssl, int type, int val))
   4202 {
   4203     ssl->info_callback = cb;
   4204 }
   4205 
   4206 /*
   4207  * One compiler (Diab DCC) doesn't like argument names in returned function
   4208  * pointer.
   4209  */
   4210 void (*SSL_get_info_callback(const SSL *ssl)) (const SSL * /* ssl */ ,
   4211                                                int /* type */ ,
   4212                                                int /* val */ ) {
   4213     return ssl->info_callback;
   4214 }
   4215 
   4216 void SSL_set_verify_result(SSL *ssl, long arg)
   4217 {
   4218     ssl->verify_result = arg;
   4219 }
   4220 
   4221 long SSL_get_verify_result(const SSL *ssl)
   4222 {
   4223     return ssl->verify_result;
   4224 }
   4225 
   4226 size_t SSL_get_client_random(const SSL *ssl, unsigned char *out, size_t outlen)
   4227 {
   4228     if (outlen == 0)
   4229         return sizeof(ssl->s3->client_random);
   4230     if (outlen > sizeof(ssl->s3->client_random))
   4231         outlen = sizeof(ssl->s3->client_random);
   4232     memcpy(out, ssl->s3->client_random, outlen);
   4233     return outlen;
   4234 }
   4235 
   4236 size_t SSL_get_server_random(const SSL *ssl, unsigned char *out, size_t outlen)
   4237 {
   4238     if (outlen == 0)
   4239         return sizeof(ssl->s3->server_random);
   4240     if (outlen > sizeof(ssl->s3->server_random))
   4241         outlen = sizeof(ssl->s3->server_random);
   4242     memcpy(out, ssl->s3->server_random, outlen);
   4243     return outlen;
   4244 }
   4245 
   4246 size_t SSL_SESSION_get_master_key(const SSL_SESSION *session,
   4247                                   unsigned char *out, size_t outlen)
   4248 {
   4249     if (outlen == 0)
   4250         return session->master_key_length;
   4251     if (outlen > session->master_key_length)
   4252         outlen = session->master_key_length;
   4253     memcpy(out, session->master_key, outlen);
   4254     return outlen;
   4255 }
   4256 
   4257 int SSL_SESSION_set1_master_key(SSL_SESSION *sess, const unsigned char *in,
   4258                                 size_t len)
   4259 {
   4260     if (len > sizeof(sess->master_key))
   4261         return 0;
   4262 
   4263     memcpy(sess->master_key, in, len);
   4264     sess->master_key_length = len;
   4265     return 1;
   4266 }
   4267 
   4268 
   4269 int SSL_set_ex_data(SSL *s, int idx, void *arg)
   4270 {
   4271     return CRYPTO_set_ex_data(&s->ex_data, idx, arg);
   4272 }
   4273 
   4274 void *SSL_get_ex_data(const SSL *s, int idx)
   4275 {
   4276     return CRYPTO_get_ex_data(&s->ex_data, idx);
   4277 }
   4278 
   4279 int SSL_CTX_set_ex_data(SSL_CTX *s, int idx, void *arg)
   4280 {
   4281     return CRYPTO_set_ex_data(&s->ex_data, idx, arg);
   4282 }
   4283 
   4284 void *SSL_CTX_get_ex_data(const SSL_CTX *s, int idx)
   4285 {
   4286     return CRYPTO_get_ex_data(&s->ex_data, idx);
   4287 }
   4288 
   4289 X509_STORE *SSL_CTX_get_cert_store(const SSL_CTX *ctx)
   4290 {
   4291     return ctx->cert_store;
   4292 }
   4293 
   4294 void SSL_CTX_set_cert_store(SSL_CTX *ctx, X509_STORE *store)
   4295 {
   4296     X509_STORE_free(ctx->cert_store);
   4297     ctx->cert_store = store;
   4298 }
   4299 
   4300 void SSL_CTX_set1_cert_store(SSL_CTX *ctx, X509_STORE *store)
   4301 {
   4302     if (store != NULL)
   4303         X509_STORE_up_ref(store);
   4304     SSL_CTX_set_cert_store(ctx, store);
   4305 }
   4306 
   4307 int SSL_want(const SSL *s)
   4308 {
   4309     return s->rwstate;
   4310 }
   4311 
   4312 /**
   4313  * \brief Set the callback for generating temporary DH keys.
   4314  * \param ctx the SSL context.
   4315  * \param dh the callback
   4316  */
   4317 
   4318 #ifndef OPENSSL_NO_DH
   4319 void SSL_CTX_set_tmp_dh_callback(SSL_CTX *ctx,
   4320                                  DH *(*dh) (SSL *ssl, int is_export,
   4321                                             int keylength))
   4322 {
   4323     SSL_CTX_callback_ctrl(ctx, SSL_CTRL_SET_TMP_DH_CB, (void (*)(void))dh);
   4324 }
   4325 
   4326 void SSL_set_tmp_dh_callback(SSL *ssl, DH *(*dh) (SSL *ssl, int is_export,
   4327                                                   int keylength))
   4328 {
   4329     SSL_callback_ctrl(ssl, SSL_CTRL_SET_TMP_DH_CB, (void (*)(void))dh);
   4330 }
   4331 #endif
   4332 
   4333 #ifndef OPENSSL_NO_PSK
   4334 int SSL_CTX_use_psk_identity_hint(SSL_CTX *ctx, const char *identity_hint)
   4335 {
   4336     if (identity_hint != NULL && strlen(identity_hint) > PSK_MAX_IDENTITY_LEN) {
   4337         SSLerr(SSL_F_SSL_CTX_USE_PSK_IDENTITY_HINT, SSL_R_DATA_LENGTH_TOO_LONG);
   4338         return 0;
   4339     }
   4340     OPENSSL_free(ctx->cert->psk_identity_hint);
   4341     if (identity_hint != NULL) {
   4342         ctx->cert->psk_identity_hint = OPENSSL_strdup(identity_hint);
   4343         if (ctx->cert->psk_identity_hint == NULL)
   4344             return 0;
   4345     } else
   4346         ctx->cert->psk_identity_hint = NULL;
   4347     return 1;
   4348 }
   4349 
   4350 int SSL_use_psk_identity_hint(SSL *s, const char *identity_hint)
   4351 {
   4352     if (s == NULL)
   4353         return 0;
   4354 
   4355     if (identity_hint != NULL && strlen(identity_hint) > PSK_MAX_IDENTITY_LEN) {
   4356         SSLerr(SSL_F_SSL_USE_PSK_IDENTITY_HINT, SSL_R_DATA_LENGTH_TOO_LONG);
   4357         return 0;
   4358     }
   4359     OPENSSL_free(s->cert->psk_identity_hint);
   4360     if (identity_hint != NULL) {
   4361         s->cert->psk_identity_hint = OPENSSL_strdup(identity_hint);
   4362         if (s->cert->psk_identity_hint == NULL)
   4363             return 0;
   4364     } else
   4365         s->cert->psk_identity_hint = NULL;
   4366     return 1;
   4367 }
   4368 
   4369 const char *SSL_get_psk_identity_hint(const SSL *s)
   4370 {
   4371     if (s == NULL || s->session == NULL)
   4372         return NULL;
   4373     return s->session->psk_identity_hint;
   4374 }
   4375 
   4376 const char *SSL_get_psk_identity(const SSL *s)
   4377 {
   4378     if (s == NULL || s->session == NULL)
   4379         return NULL;
   4380     return s->session->psk_identity;
   4381 }
   4382 
   4383 void SSL_set_psk_client_callback(SSL *s, SSL_psk_client_cb_func cb)
   4384 {
   4385     s->psk_client_callback = cb;
   4386 }
   4387 
   4388 void SSL_CTX_set_psk_client_callback(SSL_CTX *ctx, SSL_psk_client_cb_func cb)
   4389 {
   4390     ctx->psk_client_callback = cb;
   4391 }
   4392 
   4393 void SSL_set_psk_server_callback(SSL *s, SSL_psk_server_cb_func cb)
   4394 {
   4395     s->psk_server_callback = cb;
   4396 }
   4397 
   4398 void SSL_CTX_set_psk_server_callback(SSL_CTX *ctx, SSL_psk_server_cb_func cb)
   4399 {
   4400     ctx->psk_server_callback = cb;
   4401 }
   4402 #endif
   4403 
   4404 void SSL_set_psk_find_session_callback(SSL *s, SSL_psk_find_session_cb_func cb)
   4405 {
   4406     s->psk_find_session_cb = cb;
   4407 }
   4408 
   4409 void SSL_CTX_set_psk_find_session_callback(SSL_CTX *ctx,
   4410                                            SSL_psk_find_session_cb_func cb)
   4411 {
   4412     ctx->psk_find_session_cb = cb;
   4413 }
   4414 
   4415 void SSL_set_psk_use_session_callback(SSL *s, SSL_psk_use_session_cb_func cb)
   4416 {
   4417     s->psk_use_session_cb = cb;
   4418 }
   4419 
   4420 void SSL_CTX_set_psk_use_session_callback(SSL_CTX *ctx,
   4421                                            SSL_psk_use_session_cb_func cb)
   4422 {
   4423     ctx->psk_use_session_cb = cb;
   4424 }
   4425 
   4426 void SSL_CTX_set_msg_callback(SSL_CTX *ctx,
   4427                               void (*cb) (int write_p, int version,
   4428                                           int content_type, const void *buf,
   4429                                           size_t len, SSL *ssl, void *arg))
   4430 {
   4431     SSL_CTX_callback_ctrl(ctx, SSL_CTRL_SET_MSG_CALLBACK, (void (*)(void))cb);
   4432 }
   4433 
   4434 void SSL_set_msg_callback(SSL *ssl,
   4435                           void (*cb) (int write_p, int version,
   4436                                       int content_type, const void *buf,
   4437                                       size_t len, SSL *ssl, void *arg))
   4438 {
   4439     SSL_callback_ctrl(ssl, SSL_CTRL_SET_MSG_CALLBACK, (void (*)(void))cb);
   4440 }
   4441 
   4442 void SSL_CTX_set_not_resumable_session_callback(SSL_CTX *ctx,
   4443                                                 int (*cb) (SSL *ssl,
   4444                                                            int
   4445                                                            is_forward_secure))
   4446 {
   4447     SSL_CTX_callback_ctrl(ctx, SSL_CTRL_SET_NOT_RESUMABLE_SESS_CB,
   4448                           (void (*)(void))cb);
   4449 }
   4450 
   4451 void SSL_set_not_resumable_session_callback(SSL *ssl,
   4452                                             int (*cb) (SSL *ssl,
   4453                                                        int is_forward_secure))
   4454 {
   4455     SSL_callback_ctrl(ssl, SSL_CTRL_SET_NOT_RESUMABLE_SESS_CB,
   4456                       (void (*)(void))cb);
   4457 }
   4458 
   4459 void SSL_CTX_set_record_padding_callback(SSL_CTX *ctx,
   4460                                          size_t (*cb) (SSL *ssl, int type,
   4461                                                        size_t len, void *arg))
   4462 {
   4463     ctx->record_padding_cb = cb;
   4464 }
   4465 
   4466 void SSL_CTX_set_record_padding_callback_arg(SSL_CTX *ctx, void *arg)
   4467 {
   4468     ctx->record_padding_arg = arg;
   4469 }
   4470 
   4471 void *SSL_CTX_get_record_padding_callback_arg(const SSL_CTX *ctx)
   4472 {
   4473     return ctx->record_padding_arg;
   4474 }
   4475 
   4476 int SSL_CTX_set_block_padding(SSL_CTX *ctx, size_t block_size)
   4477 {
   4478     /* block size of 0 or 1 is basically no padding */
   4479     if (block_size == 1)
   4480         ctx->block_padding = 0;
   4481     else if (block_size <= SSL3_RT_MAX_PLAIN_LENGTH)
   4482         ctx->block_padding = block_size;
   4483     else
   4484         return 0;
   4485     return 1;
   4486 }
   4487 
   4488 void SSL_set_record_padding_callback(SSL *ssl,
   4489                                      size_t (*cb) (SSL *ssl, int type,
   4490                                                    size_t len, void *arg))
   4491 {
   4492     ssl->record_padding_cb = cb;
   4493 }
   4494 
   4495 void SSL_set_record_padding_callback_arg(SSL *ssl, void *arg)
   4496 {
   4497     ssl->record_padding_arg = arg;
   4498 }
   4499 
   4500 void *SSL_get_record_padding_callback_arg(const SSL *ssl)
   4501 {
   4502     return ssl->record_padding_arg;
   4503 }
   4504 
   4505 int SSL_set_block_padding(SSL *ssl, size_t block_size)
   4506 {
   4507     /* block size of 0 or 1 is basically no padding */
   4508     if (block_size == 1)
   4509         ssl->block_padding = 0;
   4510     else if (block_size <= SSL3_RT_MAX_PLAIN_LENGTH)
   4511         ssl->block_padding = block_size;
   4512     else
   4513         return 0;
   4514     return 1;
   4515 }
   4516 
   4517 int SSL_set_num_tickets(SSL *s, size_t num_tickets)
   4518 {
   4519     s->num_tickets = num_tickets;
   4520 
   4521     return 1;
   4522 }
   4523 
   4524 size_t SSL_get_num_tickets(const SSL *s)
   4525 {
   4526     return s->num_tickets;
   4527 }
   4528 
   4529 int SSL_CTX_set_num_tickets(SSL_CTX *ctx, size_t num_tickets)
   4530 {
   4531     ctx->num_tickets = num_tickets;
   4532 
   4533     return 1;
   4534 }
   4535 
   4536 size_t SSL_CTX_get_num_tickets(const SSL_CTX *ctx)
   4537 {
   4538     return ctx->num_tickets;
   4539 }
   4540 
   4541 /*
   4542  * Allocates new EVP_MD_CTX and sets pointer to it into given pointer
   4543  * variable, freeing EVP_MD_CTX previously stored in that variable, if any.
   4544  * If EVP_MD pointer is passed, initializes ctx with this |md|.
   4545  * Returns the newly allocated ctx;
   4546  */
   4547 
   4548 EVP_MD_CTX *ssl_replace_hash(EVP_MD_CTX **hash, const EVP_MD *md)
   4549 {
   4550     ssl_clear_hash_ctx(hash);
   4551     *hash = EVP_MD_CTX_new();
   4552     if (*hash == NULL || (md && EVP_DigestInit_ex(*hash, md, NULL) <= 0)) {
   4553         EVP_MD_CTX_free(*hash);
   4554         *hash = NULL;
   4555         return NULL;
   4556     }
   4557     return *hash;
   4558 }
   4559 
   4560 void ssl_clear_hash_ctx(EVP_MD_CTX **hash)
   4561 {
   4562 
   4563     EVP_MD_CTX_free(*hash);
   4564     *hash = NULL;
   4565 }
   4566 
   4567 /* Retrieve handshake hashes */
   4568 int ssl_handshake_hash(SSL *s, unsigned char *out, size_t outlen,
   4569                        size_t *hashlen)
   4570 {
   4571     EVP_MD_CTX *ctx = NULL;
   4572     EVP_MD_CTX *hdgst = s->s3->handshake_dgst;
   4573     int hashleni = EVP_MD_CTX_size(hdgst);
   4574     int ret = 0;
   4575 
   4576     if (hashleni < 0 || (size_t)hashleni > outlen) {
   4577         SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_HANDSHAKE_HASH,
   4578                  ERR_R_INTERNAL_ERROR);
   4579         goto err;
   4580     }
   4581 
   4582     ctx = EVP_MD_CTX_new();
   4583     if (ctx == NULL) {
   4584         SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_HANDSHAKE_HASH,
   4585                  ERR_R_INTERNAL_ERROR);
   4586         goto err;
   4587     }
   4588 
   4589     if (!EVP_MD_CTX_copy_ex(ctx, hdgst)
   4590         || EVP_DigestFinal_ex(ctx, out, NULL) <= 0) {
   4591         SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_HANDSHAKE_HASH,
   4592                  ERR_R_INTERNAL_ERROR);
   4593         goto err;
   4594     }
   4595 
   4596     *hashlen = hashleni;
   4597 
   4598     ret = 1;
   4599  err:
   4600     EVP_MD_CTX_free(ctx);
   4601     return ret;
   4602 }
   4603 
   4604 int SSL_session_reused(const SSL *s)
   4605 {
   4606     return s->hit;
   4607 }
   4608 
   4609 int SSL_is_server(const SSL *s)
   4610 {
   4611     return s->server;
   4612 }
   4613 
   4614 #if OPENSSL_API_COMPAT < 0x10100000L
   4615 void SSL_set_debug(SSL *s, int debug)
   4616 {
   4617     /* Old function was do-nothing anyway... */
   4618     (void)s;
   4619     (void)debug;
   4620 }
   4621 #endif
   4622 
   4623 void SSL_set_security_level(SSL *s, int level)
   4624 {
   4625     s->cert->sec_level = level;
   4626 }
   4627 
   4628 int SSL_get_security_level(const SSL *s)
   4629 {
   4630     return s->cert->sec_level;
   4631 }
   4632 
   4633 void SSL_set_security_callback(SSL *s,
   4634                                int (*cb) (const SSL *s, const SSL_CTX *ctx,
   4635                                           int op, int bits, int nid,
   4636                                           void *other, void *ex))
   4637 {
   4638     s->cert->sec_cb = cb;
   4639 }
   4640 
   4641 int (*SSL_get_security_callback(const SSL *s)) (const SSL *s,
   4642                                                 const SSL_CTX *ctx, int op,
   4643                                                 int bits, int nid, void *other,
   4644                                                 void *ex) {
   4645     return s->cert->sec_cb;
   4646 }
   4647 
   4648 void SSL_set0_security_ex_data(SSL *s, void *ex)
   4649 {
   4650     s->cert->sec_ex = ex;
   4651 }
   4652 
   4653 void *SSL_get0_security_ex_data(const SSL *s)
   4654 {
   4655     return s->cert->sec_ex;
   4656 }
   4657 
   4658 void SSL_CTX_set_security_level(SSL_CTX *ctx, int level)
   4659 {
   4660     ctx->cert->sec_level = level;
   4661 }
   4662 
   4663 int SSL_CTX_get_security_level(const SSL_CTX *ctx)
   4664 {
   4665     return ctx->cert->sec_level;
   4666 }
   4667 
   4668 void SSL_CTX_set_security_callback(SSL_CTX *ctx,
   4669                                    int (*cb) (const SSL *s, const SSL_CTX *ctx,
   4670                                               int op, int bits, int nid,
   4671                                               void *other, void *ex))
   4672 {
   4673     ctx->cert->sec_cb = cb;
   4674 }
   4675 
   4676 int (*SSL_CTX_get_security_callback(const SSL_CTX *ctx)) (const SSL *s,
   4677                                                           const SSL_CTX *ctx,
   4678                                                           int op, int bits,
   4679                                                           int nid,
   4680                                                           void *other,
   4681                                                           void *ex) {
   4682     return ctx->cert->sec_cb;
   4683 }
   4684 
   4685 void SSL_CTX_set0_security_ex_data(SSL_CTX *ctx, void *ex)
   4686 {
   4687     ctx->cert->sec_ex = ex;
   4688 }
   4689 
   4690 void *SSL_CTX_get0_security_ex_data(const SSL_CTX *ctx)
   4691 {
   4692     return ctx->cert->sec_ex;
   4693 }
   4694 
   4695 /*
   4696  * Get/Set/Clear options in SSL_CTX or SSL, formerly macros, now functions that
   4697  * can return unsigned long, instead of the generic long return value from the
   4698  * control interface.
   4699  */
   4700 unsigned long SSL_CTX_get_options(const SSL_CTX *ctx)
   4701 {
   4702     return ctx->options;
   4703 }
   4704 
   4705 unsigned long SSL_get_options(const SSL *s)
   4706 {
   4707     return s->options;
   4708 }
   4709 
   4710 unsigned long SSL_CTX_set_options(SSL_CTX *ctx, unsigned long op)
   4711 {
   4712     return ctx->options |= op;
   4713 }
   4714 
   4715 unsigned long SSL_set_options(SSL *s, unsigned long op)
   4716 {
   4717     return s->options |= op;
   4718 }
   4719 
   4720 unsigned long SSL_CTX_clear_options(SSL_CTX *ctx, unsigned long op)
   4721 {
   4722     return ctx->options &= ~op;
   4723 }
   4724 
   4725 unsigned long SSL_clear_options(SSL *s, unsigned long op)
   4726 {
   4727     return s->options &= ~op;
   4728 }
   4729 
   4730 STACK_OF(X509) *SSL_get0_verified_chain(const SSL *s)
   4731 {
   4732     return s->verified_chain;
   4733 }
   4734 
   4735 IMPLEMENT_OBJ_BSEARCH_GLOBAL_CMP_FN(SSL_CIPHER, SSL_CIPHER, ssl_cipher_id);
   4736 
   4737 #ifndef OPENSSL_NO_CT
   4738 
   4739 /*
   4740  * Moves SCTs from the |src| stack to the |dst| stack.
   4741  * The source of each SCT will be set to |origin|.
   4742  * If |dst| points to a NULL pointer, a new stack will be created and owned by
   4743  * the caller.
   4744  * Returns the number of SCTs moved, or a negative integer if an error occurs.
   4745  */
   4746 static int ct_move_scts(STACK_OF(SCT) **dst, STACK_OF(SCT) *src,
   4747                         sct_source_t origin)
   4748 {
   4749     int scts_moved = 0;
   4750     SCT *sct = NULL;
   4751 
   4752     if (*dst == NULL) {
   4753         *dst = sk_SCT_new_null();
   4754         if (*dst == NULL) {
   4755             SSLerr(SSL_F_CT_MOVE_SCTS, ERR_R_MALLOC_FAILURE);
   4756             goto err;
   4757         }
   4758     }
   4759 
   4760     while ((sct = sk_SCT_pop(src)) != NULL) {
   4761         if (SCT_set_source(sct, origin) != 1)
   4762             goto err;
   4763 
   4764         if (sk_SCT_push(*dst, sct) <= 0)
   4765             goto err;
   4766         scts_moved += 1;
   4767     }
   4768 
   4769     return scts_moved;
   4770  err:
   4771     if (sct != NULL)
   4772         sk_SCT_push(src, sct);  /* Put the SCT back */
   4773     return -1;
   4774 }
   4775 
   4776 /*
   4777  * Look for data collected during ServerHello and parse if found.
   4778  * Returns the number of SCTs extracted.
   4779  */
   4780 static int ct_extract_tls_extension_scts(SSL *s)
   4781 {
   4782     int scts_extracted = 0;
   4783 
   4784     if (s->ext.scts != NULL) {
   4785         const unsigned char *p = s->ext.scts;
   4786         STACK_OF(SCT) *scts = o2i_SCT_LIST(NULL, &p, s->ext.scts_len);
   4787 
   4788         scts_extracted = ct_move_scts(&s->scts, scts, SCT_SOURCE_TLS_EXTENSION);
   4789 
   4790         SCT_LIST_free(scts);
   4791     }
   4792 
   4793     return scts_extracted;
   4794 }
   4795 
   4796 /*
   4797  * Checks for an OCSP response and then attempts to extract any SCTs found if it
   4798  * contains an SCT X509 extension. They will be stored in |s->scts|.
   4799  * Returns:
   4800  * - The number of SCTs extracted, assuming an OCSP response exists.
   4801  * - 0 if no OCSP response exists or it contains no SCTs.
   4802  * - A negative integer if an error occurs.
   4803  */
   4804 static int ct_extract_ocsp_response_scts(SSL *s)
   4805 {
   4806 # ifndef OPENSSL_NO_OCSP
   4807     int scts_extracted = 0;
   4808     const unsigned char *p;
   4809     OCSP_BASICRESP *br = NULL;
   4810     OCSP_RESPONSE *rsp = NULL;
   4811     STACK_OF(SCT) *scts = NULL;
   4812     int i;
   4813 
   4814     if (s->ext.ocsp.resp == NULL || s->ext.ocsp.resp_len == 0)
   4815         goto err;
   4816 
   4817     p = s->ext.ocsp.resp;
   4818     rsp = d2i_OCSP_RESPONSE(NULL, &p, (int)s->ext.ocsp.resp_len);
   4819     if (rsp == NULL)
   4820         goto err;
   4821 
   4822     br = OCSP_response_get1_basic(rsp);
   4823     if (br == NULL)
   4824         goto err;
   4825 
   4826     for (i = 0; i < OCSP_resp_count(br); ++i) {
   4827         OCSP_SINGLERESP *single = OCSP_resp_get0(br, i);
   4828 
   4829         if (single == NULL)
   4830             continue;
   4831 
   4832         scts =
   4833             OCSP_SINGLERESP_get1_ext_d2i(single, NID_ct_cert_scts, NULL, NULL);
   4834         scts_extracted =
   4835             ct_move_scts(&s->scts, scts, SCT_SOURCE_OCSP_STAPLED_RESPONSE);
   4836         if (scts_extracted < 0)
   4837             goto err;
   4838     }
   4839  err:
   4840     SCT_LIST_free(scts);
   4841     OCSP_BASICRESP_free(br);
   4842     OCSP_RESPONSE_free(rsp);
   4843     return scts_extracted;
   4844 # else
   4845     /* Behave as if no OCSP response exists */
   4846     return 0;
   4847 # endif
   4848 }
   4849 
   4850 /*
   4851  * Attempts to extract SCTs from the peer certificate.
   4852  * Return the number of SCTs extracted, or a negative integer if an error
   4853  * occurs.
   4854  */
   4855 static int ct_extract_x509v3_extension_scts(SSL *s)
   4856 {
   4857     int scts_extracted = 0;
   4858     X509 *cert = s->session != NULL ? s->session->peer : NULL;
   4859 
   4860     if (cert != NULL) {
   4861         STACK_OF(SCT) *scts =
   4862             X509_get_ext_d2i(cert, NID_ct_precert_scts, NULL, NULL);
   4863 
   4864         scts_extracted =
   4865             ct_move_scts(&s->scts, scts, SCT_SOURCE_X509V3_EXTENSION);
   4866 
   4867         SCT_LIST_free(scts);
   4868     }
   4869 
   4870     return scts_extracted;
   4871 }
   4872 
   4873 /*
   4874  * Attempts to find all received SCTs by checking TLS extensions, the OCSP
   4875  * response (if it exists) and X509v3 extensions in the certificate.
   4876  * Returns NULL if an error occurs.
   4877  */
   4878 const STACK_OF(SCT) *SSL_get0_peer_scts(SSL *s)
   4879 {
   4880     if (!s->scts_parsed) {
   4881         if (ct_extract_tls_extension_scts(s) < 0 ||
   4882             ct_extract_ocsp_response_scts(s) < 0 ||
   4883             ct_extract_x509v3_extension_scts(s) < 0)
   4884             goto err;
   4885 
   4886         s->scts_parsed = 1;
   4887     }
   4888     return s->scts;
   4889  err:
   4890     return NULL;
   4891 }
   4892 
   4893 static int ct_permissive(const CT_POLICY_EVAL_CTX * ctx,
   4894                          const STACK_OF(SCT) *scts, void *unused_arg)
   4895 {
   4896     return 1;
   4897 }
   4898 
   4899 static int ct_strict(const CT_POLICY_EVAL_CTX * ctx,
   4900                      const STACK_OF(SCT) *scts, void *unused_arg)
   4901 {
   4902     int count = scts != NULL ? sk_SCT_num(scts) : 0;
   4903     int i;
   4904 
   4905     for (i = 0; i < count; ++i) {
   4906         SCT *sct = sk_SCT_value(scts, i);
   4907         int status = SCT_get_validation_status(sct);
   4908 
   4909         if (status == SCT_VALIDATION_STATUS_VALID)
   4910             return 1;
   4911     }
   4912     SSLerr(SSL_F_CT_STRICT, SSL_R_NO_VALID_SCTS);
   4913     return 0;
   4914 }
   4915 
   4916 int SSL_set_ct_validation_callback(SSL *s, ssl_ct_validation_cb callback,
   4917                                    void *arg)
   4918 {
   4919     /*
   4920      * Since code exists that uses the custom extension handler for CT, look
   4921      * for this and throw an error if they have already registered to use CT.
   4922      */
   4923     if (callback != NULL && SSL_CTX_has_client_custom_ext(s->ctx,
   4924                                                           TLSEXT_TYPE_signed_certificate_timestamp))
   4925     {
   4926         SSLerr(SSL_F_SSL_SET_CT_VALIDATION_CALLBACK,
   4927                SSL_R_CUSTOM_EXT_HANDLER_ALREADY_INSTALLED);
   4928         return 0;
   4929     }
   4930 
   4931     if (callback != NULL) {
   4932         /*
   4933          * If we are validating CT, then we MUST accept SCTs served via OCSP
   4934          */
   4935         if (!SSL_set_tlsext_status_type(s, TLSEXT_STATUSTYPE_ocsp))
   4936             return 0;
   4937     }
   4938 
   4939     s->ct_validation_callback = callback;
   4940     s->ct_validation_callback_arg = arg;
   4941 
   4942     return 1;
   4943 }
   4944 
   4945 int SSL_CTX_set_ct_validation_callback(SSL_CTX *ctx,
   4946                                        ssl_ct_validation_cb callback, void *arg)
   4947 {
   4948     /*
   4949      * Since code exists that uses the custom extension handler for CT, look for
   4950      * this and throw an error if they have already registered to use CT.
   4951      */
   4952     if (callback != NULL && SSL_CTX_has_client_custom_ext(ctx,
   4953                                                           TLSEXT_TYPE_signed_certificate_timestamp))
   4954     {
   4955         SSLerr(SSL_F_SSL_CTX_SET_CT_VALIDATION_CALLBACK,
   4956                SSL_R_CUSTOM_EXT_HANDLER_ALREADY_INSTALLED);
   4957         return 0;
   4958     }
   4959 
   4960     ctx->ct_validation_callback = callback;
   4961     ctx->ct_validation_callback_arg = arg;
   4962     return 1;
   4963 }
   4964 
   4965 int SSL_ct_is_enabled(const SSL *s)
   4966 {
   4967     return s->ct_validation_callback != NULL;
   4968 }
   4969 
   4970 int SSL_CTX_ct_is_enabled(const SSL_CTX *ctx)
   4971 {
   4972     return ctx->ct_validation_callback != NULL;
   4973 }
   4974 
   4975 int ssl_validate_ct(SSL *s)
   4976 {
   4977     int ret = 0;
   4978     X509 *cert = s->session != NULL ? s->session->peer : NULL;
   4979     X509 *issuer;
   4980     SSL_DANE *dane = &s->dane;
   4981     CT_POLICY_EVAL_CTX *ctx = NULL;
   4982     const STACK_OF(SCT) *scts;
   4983 
   4984     /*
   4985      * If no callback is set, the peer is anonymous, or its chain is invalid,
   4986      * skip SCT validation - just return success.  Applications that continue
   4987      * handshakes without certificates, with unverified chains, or pinned leaf
   4988      * certificates are outside the scope of the WebPKI and CT.
   4989      *
   4990      * The above exclusions notwithstanding the vast majority of peers will
   4991      * have rather ordinary certificate chains validated by typical
   4992      * applications that perform certificate verification and therefore will
   4993      * process SCTs when enabled.
   4994      */
   4995     if (s->ct_validation_callback == NULL || cert == NULL ||
   4996         s->verify_result != X509_V_OK ||
   4997         s->verified_chain == NULL || sk_X509_num(s->verified_chain) <= 1)
   4998         return 1;
   4999 
   5000     /*
   5001      * CT not applicable for chains validated via DANE-TA(2) or DANE-EE(3)
   5002      * trust-anchors.  See https://tools.ietf.org/html/rfc7671#section-4.2
   5003      */
   5004     if (DANETLS_ENABLED(dane) && dane->mtlsa != NULL) {
   5005         switch (dane->mtlsa->usage) {
   5006         case DANETLS_USAGE_DANE_TA:
   5007         case DANETLS_USAGE_DANE_EE:
   5008             return 1;
   5009         }
   5010     }
   5011 
   5012     ctx = CT_POLICY_EVAL_CTX_new();
   5013     if (ctx == NULL) {
   5014         SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_VALIDATE_CT,
   5015                  ERR_R_MALLOC_FAILURE);
   5016         goto end;
   5017     }
   5018 
   5019     issuer = sk_X509_value(s->verified_chain, 1);
   5020     CT_POLICY_EVAL_CTX_set1_cert(ctx, cert);
   5021     CT_POLICY_EVAL_CTX_set1_issuer(ctx, issuer);
   5022     CT_POLICY_EVAL_CTX_set_shared_CTLOG_STORE(ctx, s->ctx->ctlog_store);
   5023     CT_POLICY_EVAL_CTX_set_time(
   5024             ctx, (uint64_t)SSL_SESSION_get_time(SSL_get0_session(s)) * 1000);
   5025 
   5026     scts = SSL_get0_peer_scts(s);
   5027 
   5028     /*
   5029      * This function returns success (> 0) only when all the SCTs are valid, 0
   5030      * when some are invalid, and < 0 on various internal errors (out of
   5031      * memory, etc.).  Having some, or even all, invalid SCTs is not sufficient
   5032      * reason to abort the handshake, that decision is up to the callback.
   5033      * Therefore, we error out only in the unexpected case that the return
   5034      * value is negative.
   5035      *
   5036      * XXX: One might well argue that the return value of this function is an
   5037      * unfortunate design choice.  Its job is only to determine the validation
   5038      * status of each of the provided SCTs.  So long as it correctly separates
   5039      * the wheat from the chaff it should return success.  Failure in this case
   5040      * ought to correspond to an inability to carry out its duties.
   5041      */
   5042     if (SCT_LIST_validate(scts, ctx) < 0) {
   5043         SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_F_SSL_VALIDATE_CT,
   5044                  SSL_R_SCT_VERIFICATION_FAILED);
   5045         goto end;
   5046     }
   5047 
   5048     ret = s->ct_validation_callback(ctx, scts, s->ct_validation_callback_arg);
   5049     if (ret < 0)
   5050         ret = 0;                /* This function returns 0 on failure */
   5051     if (!ret)
   5052         SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_F_SSL_VALIDATE_CT,
   5053                  SSL_R_CALLBACK_FAILED);
   5054 
   5055  end:
   5056     CT_POLICY_EVAL_CTX_free(ctx);
   5057     /*
   5058      * With SSL_VERIFY_NONE the session may be cached and re-used despite a
   5059      * failure return code here.  Also the application may wish the complete
   5060      * the handshake, and then disconnect cleanly at a higher layer, after
   5061      * checking the verification status of the completed connection.
   5062      *
   5063      * We therefore force a certificate verification failure which will be
   5064      * visible via SSL_get_verify_result() and cached as part of any resumed
   5065      * session.
   5066      *
   5067      * Note: the permissive callback is for information gathering only, always
   5068      * returns success, and does not affect verification status.  Only the
   5069      * strict callback or a custom application-specified callback can trigger
   5070      * connection failure or record a verification error.
   5071      */
   5072     if (ret <= 0)
   5073         s->verify_result = X509_V_ERR_NO_VALID_SCTS;
   5074     return ret;
   5075 }
   5076 
   5077 int SSL_CTX_enable_ct(SSL_CTX *ctx, int validation_mode)
   5078 {
   5079     switch (validation_mode) {
   5080     default:
   5081         SSLerr(SSL_F_SSL_CTX_ENABLE_CT, SSL_R_INVALID_CT_VALIDATION_TYPE);
   5082         return 0;
   5083     case SSL_CT_VALIDATION_PERMISSIVE:
   5084         return SSL_CTX_set_ct_validation_callback(ctx, ct_permissive, NULL);
   5085     case SSL_CT_VALIDATION_STRICT:
   5086         return SSL_CTX_set_ct_validation_callback(ctx, ct_strict, NULL);
   5087     }
   5088 }
   5089 
   5090 int SSL_enable_ct(SSL *s, int validation_mode)
   5091 {
   5092     switch (validation_mode) {
   5093     default:
   5094         SSLerr(SSL_F_SSL_ENABLE_CT, SSL_R_INVALID_CT_VALIDATION_TYPE);
   5095         return 0;
   5096     case SSL_CT_VALIDATION_PERMISSIVE:
   5097         return SSL_set_ct_validation_callback(s, ct_permissive, NULL);
   5098     case SSL_CT_VALIDATION_STRICT:
   5099         return SSL_set_ct_validation_callback(s, ct_strict, NULL);
   5100     }
   5101 }
   5102 
   5103 int SSL_CTX_set_default_ctlog_list_file(SSL_CTX *ctx)
   5104 {
   5105     return CTLOG_STORE_load_default_file(ctx->ctlog_store);
   5106 }
   5107 
   5108 int SSL_CTX_set_ctlog_list_file(SSL_CTX *ctx, const char *path)
   5109 {
   5110     return CTLOG_STORE_load_file(ctx->ctlog_store, path);
   5111 }
   5112 
   5113 void SSL_CTX_set0_ctlog_store(SSL_CTX *ctx, CTLOG_STORE * logs)
   5114 {
   5115     CTLOG_STORE_free(ctx->ctlog_store);
   5116     ctx->ctlog_store = logs;
   5117 }
   5118 
   5119 const CTLOG_STORE *SSL_CTX_get0_ctlog_store(const SSL_CTX *ctx)
   5120 {
   5121     return ctx->ctlog_store;
   5122 }
   5123 
   5124 #endif  /* OPENSSL_NO_CT */
   5125 
   5126 void SSL_CTX_set_client_hello_cb(SSL_CTX *c, SSL_client_hello_cb_fn cb,
   5127                                  void *arg)
   5128 {
   5129     c->client_hello_cb = cb;
   5130     c->client_hello_cb_arg = arg;
   5131 }
   5132 
   5133 int SSL_client_hello_isv2(SSL *s)
   5134 {
   5135     if (s->clienthello == NULL)
   5136         return 0;
   5137     return s->clienthello->isv2;
   5138 }
   5139 
   5140 unsigned int SSL_client_hello_get0_legacy_version(SSL *s)
   5141 {
   5142     if (s->clienthello == NULL)
   5143         return 0;
   5144     return s->clienthello->legacy_version;
   5145 }
   5146 
   5147 size_t SSL_client_hello_get0_random(SSL *s, const unsigned char **out)
   5148 {
   5149     if (s->clienthello == NULL)
   5150         return 0;
   5151     if (out != NULL)
   5152         *out = s->clienthello->random;
   5153     return SSL3_RANDOM_SIZE;
   5154 }
   5155 
   5156 size_t SSL_client_hello_get0_session_id(SSL *s, const unsigned char **out)
   5157 {
   5158     if (s->clienthello == NULL)
   5159         return 0;
   5160     if (out != NULL)
   5161         *out = s->clienthello->session_id;
   5162     return s->clienthello->session_id_len;
   5163 }
   5164 
   5165 size_t SSL_client_hello_get0_ciphers(SSL *s, const unsigned char **out)
   5166 {
   5167     if (s->clienthello == NULL)
   5168         return 0;
   5169     if (out != NULL)
   5170         *out = PACKET_data(&s->clienthello->ciphersuites);
   5171     return PACKET_remaining(&s->clienthello->ciphersuites);
   5172 }
   5173 
   5174 size_t SSL_client_hello_get0_compression_methods(SSL *s, const unsigned char **out)
   5175 {
   5176     if (s->clienthello == NULL)
   5177         return 0;
   5178     if (out != NULL)
   5179         *out = s->clienthello->compressions;
   5180     return s->clienthello->compressions_len;
   5181 }
   5182 
   5183 int SSL_client_hello_get1_extensions_present(SSL *s, int **out, size_t *outlen)
   5184 {
   5185     RAW_EXTENSION *ext;
   5186     int *present;
   5187     size_t num = 0, i;
   5188 
   5189     if (s->clienthello == NULL || out == NULL || outlen == NULL)
   5190         return 0;
   5191     for (i = 0; i < s->clienthello->pre_proc_exts_len; i++) {
   5192         ext = s->clienthello->pre_proc_exts + i;
   5193         if (ext->present)
   5194             num++;
   5195     }
   5196     if (num == 0) {
   5197         *out = NULL;
   5198         *outlen = 0;
   5199         return 1;
   5200     }
   5201     if ((present = OPENSSL_malloc(sizeof(*present) * num)) == NULL) {
   5202         SSLerr(SSL_F_SSL_CLIENT_HELLO_GET1_EXTENSIONS_PRESENT,
   5203                ERR_R_MALLOC_FAILURE);
   5204         return 0;
   5205     }
   5206     for (i = 0; i < s->clienthello->pre_proc_exts_len; i++) {
   5207         ext = s->clienthello->pre_proc_exts + i;
   5208         if (ext->present) {
   5209             if (ext->received_order >= num)
   5210                 goto err;
   5211             present[ext->received_order] = ext->type;
   5212         }
   5213     }
   5214     *out = present;
   5215     *outlen = num;
   5216     return 1;
   5217  err:
   5218     OPENSSL_free(present);
   5219     return 0;
   5220 }
   5221 
   5222 int SSL_client_hello_get0_ext(SSL *s, unsigned int type, const unsigned char **out,
   5223                        size_t *outlen)
   5224 {
   5225     size_t i;
   5226     RAW_EXTENSION *r;
   5227 
   5228     if (s->clienthello == NULL)
   5229         return 0;
   5230     for (i = 0; i < s->clienthello->pre_proc_exts_len; ++i) {
   5231         r = s->clienthello->pre_proc_exts + i;
   5232         if (r->present && r->type == type) {
   5233             if (out != NULL)
   5234                 *out = PACKET_data(&r->data);
   5235             if (outlen != NULL)
   5236                 *outlen = PACKET_remaining(&r->data);
   5237             return 1;
   5238         }
   5239     }
   5240     return 0;
   5241 }
   5242 
   5243 int SSL_free_buffers(SSL *ssl)
   5244 {
   5245     RECORD_LAYER *rl = &ssl->rlayer;
   5246 
   5247     if (RECORD_LAYER_read_pending(rl) || RECORD_LAYER_write_pending(rl))
   5248         return 0;
   5249 
   5250     RECORD_LAYER_release(rl);
   5251     return 1;
   5252 }
   5253 
   5254 int SSL_alloc_buffers(SSL *ssl)
   5255 {
   5256     return ssl3_setup_buffers(ssl);
   5257 }
   5258 
   5259 void SSL_CTX_set_keylog_callback(SSL_CTX *ctx, SSL_CTX_keylog_cb_func cb)
   5260 {
   5261     ctx->keylog_callback = cb;
   5262 }
   5263 
   5264 SSL_CTX_keylog_cb_func SSL_CTX_get_keylog_callback(const SSL_CTX *ctx)
   5265 {
   5266     return ctx->keylog_callback;
   5267 }
   5268 
   5269 static int nss_keylog_int(const char *prefix,
   5270                           SSL *ssl,
   5271                           const uint8_t *parameter_1,
   5272                           size_t parameter_1_len,
   5273                           const uint8_t *parameter_2,
   5274                           size_t parameter_2_len)
   5275 {
   5276     char *out = NULL;
   5277     char *cursor = NULL;
   5278     size_t out_len = 0;
   5279     size_t i;
   5280     size_t prefix_len;
   5281 
   5282     if (ssl->ctx->keylog_callback == NULL)
   5283         return 1;
   5284 
   5285     /*
   5286      * Our output buffer will contain the following strings, rendered with
   5287      * space characters in between, terminated by a NULL character: first the
   5288      * prefix, then the first parameter, then the second parameter. The
   5289      * meaning of each parameter depends on the specific key material being
   5290      * logged. Note that the first and second parameters are encoded in
   5291      * hexadecimal, so we need a buffer that is twice their lengths.
   5292      */
   5293     prefix_len = strlen(prefix);
   5294     out_len = prefix_len + (2 * parameter_1_len) + (2 * parameter_2_len) + 3;
   5295     if ((out = cursor = OPENSSL_malloc(out_len)) == NULL) {
   5296         SSLfatal(ssl, SSL_AD_INTERNAL_ERROR, SSL_F_NSS_KEYLOG_INT,
   5297                  ERR_R_MALLOC_FAILURE);
   5298         return 0;
   5299     }
   5300 
   5301     strcpy(cursor, prefix);
   5302     cursor += prefix_len;
   5303     *cursor++ = ' ';
   5304 
   5305     for (i = 0; i < parameter_1_len; i++) {
   5306         sprintf(cursor, "%02x", parameter_1[i]);
   5307         cursor += 2;
   5308     }
   5309     *cursor++ = ' ';
   5310 
   5311     for (i = 0; i < parameter_2_len; i++) {
   5312         sprintf(cursor, "%02x", parameter_2[i]);
   5313         cursor += 2;
   5314     }
   5315     *cursor = '\0';
   5316 
   5317     ssl->ctx->keylog_callback(ssl, (const char *)out);
   5318     OPENSSL_clear_free(out, out_len);
   5319     return 1;
   5320 
   5321 }
   5322 
   5323 int ssl_log_rsa_client_key_exchange(SSL *ssl,
   5324                                     const uint8_t *encrypted_premaster,
   5325                                     size_t encrypted_premaster_len,
   5326                                     const uint8_t *premaster,
   5327                                     size_t premaster_len)
   5328 {
   5329     if (encrypted_premaster_len < 8) {
   5330         SSLfatal(ssl, SSL_AD_INTERNAL_ERROR,
   5331                  SSL_F_SSL_LOG_RSA_CLIENT_KEY_EXCHANGE, ERR_R_INTERNAL_ERROR);
   5332         return 0;
   5333     }
   5334 
   5335     /* We only want the first 8 bytes of the encrypted premaster as a tag. */
   5336     return nss_keylog_int("RSA",
   5337                           ssl,
   5338                           encrypted_premaster,
   5339                           8,
   5340                           premaster,
   5341                           premaster_len);
   5342 }
   5343 
   5344 int ssl_log_secret(SSL *ssl,
   5345                    const char *label,
   5346                    const uint8_t *secret,
   5347                    size_t secret_len)
   5348 {
   5349     return nss_keylog_int(label,
   5350                           ssl,
   5351                           ssl->s3->client_random,
   5352                           SSL3_RANDOM_SIZE,
   5353                           secret,
   5354                           secret_len);
   5355 }
   5356 
   5357 #define SSLV2_CIPHER_LEN    3
   5358 
   5359 int ssl_cache_cipherlist(SSL *s, PACKET *cipher_suites, int sslv2format)
   5360 {
   5361     int n;
   5362 
   5363     n = sslv2format ? SSLV2_CIPHER_LEN : TLS_CIPHER_LEN;
   5364 
   5365     if (PACKET_remaining(cipher_suites) == 0) {
   5366         SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_F_SSL_CACHE_CIPHERLIST,
   5367                  SSL_R_NO_CIPHERS_SPECIFIED);
   5368         return 0;
   5369     }
   5370 
   5371     if (PACKET_remaining(cipher_suites) % n != 0) {
   5372         SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_SSL_CACHE_CIPHERLIST,
   5373                  SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST);
   5374         return 0;
   5375     }
   5376 
   5377     OPENSSL_free(s->s3->tmp.ciphers_raw);
   5378     s->s3->tmp.ciphers_raw = NULL;
   5379     s->s3->tmp.ciphers_rawlen = 0;
   5380 
   5381     if (sslv2format) {
   5382         size_t numciphers = PACKET_remaining(cipher_suites) / n;
   5383         PACKET sslv2ciphers = *cipher_suites;
   5384         unsigned int leadbyte;
   5385         unsigned char *raw;
   5386 
   5387         /*
   5388          * We store the raw ciphers list in SSLv3+ format so we need to do some
   5389          * preprocessing to convert the list first. If there are any SSLv2 only
   5390          * ciphersuites with a non-zero leading byte then we are going to
   5391          * slightly over allocate because we won't store those. But that isn't a
   5392          * problem.
   5393          */
   5394         raw = OPENSSL_malloc(numciphers * TLS_CIPHER_LEN);
   5395         s->s3->tmp.ciphers_raw = raw;
   5396         if (raw == NULL) {
   5397             SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_CACHE_CIPHERLIST,
   5398                      ERR_R_MALLOC_FAILURE);
   5399             return 0;
   5400         }
   5401         for (s->s3->tmp.ciphers_rawlen = 0;
   5402              PACKET_remaining(&sslv2ciphers) > 0;
   5403              raw += TLS_CIPHER_LEN) {
   5404             if (!PACKET_get_1(&sslv2ciphers, &leadbyte)
   5405                     || (leadbyte == 0
   5406                         && !PACKET_copy_bytes(&sslv2ciphers, raw,
   5407                                               TLS_CIPHER_LEN))
   5408                     || (leadbyte != 0
   5409                         && !PACKET_forward(&sslv2ciphers, TLS_CIPHER_LEN))) {
   5410                 SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_SSL_CACHE_CIPHERLIST,
   5411                          SSL_R_BAD_PACKET);
   5412                 OPENSSL_free(s->s3->tmp.ciphers_raw);
   5413                 s->s3->tmp.ciphers_raw = NULL;
   5414                 s->s3->tmp.ciphers_rawlen = 0;
   5415                 return 0;
   5416             }
   5417             if (leadbyte == 0)
   5418                 s->s3->tmp.ciphers_rawlen += TLS_CIPHER_LEN;
   5419         }
   5420     } else if (!PACKET_memdup(cipher_suites, &s->s3->tmp.ciphers_raw,
   5421                            &s->s3->tmp.ciphers_rawlen)) {
   5422         SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_CACHE_CIPHERLIST,
   5423                  ERR_R_INTERNAL_ERROR);
   5424         return 0;
   5425     }
   5426     return 1;
   5427 }
   5428 
   5429 int SSL_bytes_to_cipher_list(SSL *s, const unsigned char *bytes, size_t len,
   5430                              int isv2format, STACK_OF(SSL_CIPHER) **sk,
   5431                              STACK_OF(SSL_CIPHER) **scsvs)
   5432 {
   5433     PACKET pkt;
   5434 
   5435     if (!PACKET_buf_init(&pkt, bytes, len))
   5436         return 0;
   5437     return bytes_to_cipher_list(s, &pkt, sk, scsvs, isv2format, 0);
   5438 }
   5439 
   5440 int bytes_to_cipher_list(SSL *s, PACKET *cipher_suites,
   5441                          STACK_OF(SSL_CIPHER) **skp,
   5442                          STACK_OF(SSL_CIPHER) **scsvs_out,
   5443                          int sslv2format, int fatal)
   5444 {
   5445     const SSL_CIPHER *c;
   5446     STACK_OF(SSL_CIPHER) *sk = NULL;
   5447     STACK_OF(SSL_CIPHER) *scsvs = NULL;
   5448     int n;
   5449     /* 3 = SSLV2_CIPHER_LEN > TLS_CIPHER_LEN = 2. */
   5450     unsigned char cipher[SSLV2_CIPHER_LEN];
   5451 
   5452     n = sslv2format ? SSLV2_CIPHER_LEN : TLS_CIPHER_LEN;
   5453 
   5454     if (PACKET_remaining(cipher_suites) == 0) {
   5455         if (fatal)
   5456             SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_F_BYTES_TO_CIPHER_LIST,
   5457                      SSL_R_NO_CIPHERS_SPECIFIED);
   5458         else
   5459             SSLerr(SSL_F_BYTES_TO_CIPHER_LIST, SSL_R_NO_CIPHERS_SPECIFIED);
   5460         return 0;
   5461     }
   5462 
   5463     if (PACKET_remaining(cipher_suites) % n != 0) {
   5464         if (fatal)
   5465             SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_BYTES_TO_CIPHER_LIST,
   5466                      SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST);
   5467         else
   5468             SSLerr(SSL_F_BYTES_TO_CIPHER_LIST,
   5469                    SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST);
   5470         return 0;
   5471     }
   5472 
   5473     sk = sk_SSL_CIPHER_new_null();
   5474     scsvs = sk_SSL_CIPHER_new_null();
   5475     if (sk == NULL || scsvs == NULL) {
   5476         if (fatal)
   5477             SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_BYTES_TO_CIPHER_LIST,
   5478                      ERR_R_MALLOC_FAILURE);
   5479         else
   5480             SSLerr(SSL_F_BYTES_TO_CIPHER_LIST, ERR_R_MALLOC_FAILURE);
   5481         goto err;
   5482     }
   5483 
   5484     while (PACKET_copy_bytes(cipher_suites, cipher, n)) {
   5485         /*
   5486          * SSLv3 ciphers wrapped in an SSLv2-compatible ClientHello have the
   5487          * first byte set to zero, while true SSLv2 ciphers have a non-zero
   5488          * first byte. We don't support any true SSLv2 ciphers, so skip them.
   5489          */
   5490         if (sslv2format && cipher[0] != '\0')
   5491             continue;
   5492 
   5493         /* For SSLv2-compat, ignore leading 0-byte. */
   5494         c = ssl_get_cipher_by_char(s, sslv2format ? &cipher[1] : cipher, 1);
   5495         if (c != NULL) {
   5496             if ((c->valid && !sk_SSL_CIPHER_push(sk, c)) ||
   5497                 (!c->valid && !sk_SSL_CIPHER_push(scsvs, c))) {
   5498                 if (fatal)
   5499                     SSLfatal(s, SSL_AD_INTERNAL_ERROR,
   5500                              SSL_F_BYTES_TO_CIPHER_LIST, ERR_R_MALLOC_FAILURE);
   5501                 else
   5502                     SSLerr(SSL_F_BYTES_TO_CIPHER_LIST, ERR_R_MALLOC_FAILURE);
   5503                 goto err;
   5504             }
   5505         }
   5506     }
   5507     if (PACKET_remaining(cipher_suites) > 0) {
   5508         if (fatal)
   5509             SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_BYTES_TO_CIPHER_LIST,
   5510                      SSL_R_BAD_LENGTH);
   5511         else
   5512             SSLerr(SSL_F_BYTES_TO_CIPHER_LIST, SSL_R_BAD_LENGTH);
   5513         goto err;
   5514     }
   5515 
   5516     if (skp != NULL)
   5517         *skp = sk;
   5518     else
   5519         sk_SSL_CIPHER_free(sk);
   5520     if (scsvs_out != NULL)
   5521         *scsvs_out = scsvs;
   5522     else
   5523         sk_SSL_CIPHER_free(scsvs);
   5524     return 1;
   5525  err:
   5526     sk_SSL_CIPHER_free(sk);
   5527     sk_SSL_CIPHER_free(scsvs);
   5528     return 0;
   5529 }
   5530 
   5531 int SSL_CTX_set_max_early_data(SSL_CTX *ctx, uint32_t max_early_data)
   5532 {
   5533     ctx->max_early_data = max_early_data;
   5534 
   5535     return 1;
   5536 }
   5537 
   5538 uint32_t SSL_CTX_get_max_early_data(const SSL_CTX *ctx)
   5539 {
   5540     return ctx->max_early_data;
   5541 }
   5542 
   5543 int SSL_set_max_early_data(SSL *s, uint32_t max_early_data)
   5544 {
   5545     s->max_early_data = max_early_data;
   5546 
   5547     return 1;
   5548 }
   5549 
   5550 uint32_t SSL_get_max_early_data(const SSL *s)
   5551 {
   5552     return s->max_early_data;
   5553 }
   5554 
   5555 int SSL_CTX_set_recv_max_early_data(SSL_CTX *ctx, uint32_t recv_max_early_data)
   5556 {
   5557     ctx->recv_max_early_data = recv_max_early_data;
   5558 
   5559     return 1;
   5560 }
   5561 
   5562 uint32_t SSL_CTX_get_recv_max_early_data(const SSL_CTX *ctx)
   5563 {
   5564     return ctx->recv_max_early_data;
   5565 }
   5566 
   5567 int SSL_set_recv_max_early_data(SSL *s, uint32_t recv_max_early_data)
   5568 {
   5569     s->recv_max_early_data = recv_max_early_data;
   5570 
   5571     return 1;
   5572 }
   5573 
   5574 uint32_t SSL_get_recv_max_early_data(const SSL *s)
   5575 {
   5576     return s->recv_max_early_data;
   5577 }
   5578 
   5579 __owur unsigned int ssl_get_max_send_fragment(const SSL *ssl)
   5580 {
   5581     /* Return any active Max Fragment Len extension */
   5582     if (ssl->session != NULL && USE_MAX_FRAGMENT_LENGTH_EXT(ssl->session))
   5583         return GET_MAX_FRAGMENT_LENGTH(ssl->session);
   5584 
   5585     /* return current SSL connection setting */
   5586     return ssl->max_send_fragment;
   5587 }
   5588 
   5589 __owur unsigned int ssl_get_split_send_fragment(const SSL *ssl)
   5590 {
   5591     /* Return a value regarding an active Max Fragment Len extension */
   5592     if (ssl->session != NULL && USE_MAX_FRAGMENT_LENGTH_EXT(ssl->session)
   5593         && ssl->split_send_fragment > GET_MAX_FRAGMENT_LENGTH(ssl->session))
   5594         return GET_MAX_FRAGMENT_LENGTH(ssl->session);
   5595 
   5596     /* else limit |split_send_fragment| to current |max_send_fragment| */
   5597     if (ssl->split_send_fragment > ssl->max_send_fragment)
   5598         return ssl->max_send_fragment;
   5599 
   5600     /* return current SSL connection setting */
   5601     return ssl->split_send_fragment;
   5602 }
   5603 
   5604 int SSL_stateless(SSL *s)
   5605 {
   5606     int ret;
   5607 
   5608     /* Ensure there is no state left over from a previous invocation */
   5609     if (!SSL_clear(s))
   5610         return 0;
   5611 
   5612     ERR_clear_error();
   5613 
   5614     s->s3->flags |= TLS1_FLAGS_STATELESS;
   5615     ret = SSL_accept(s);
   5616     s->s3->flags &= ~TLS1_FLAGS_STATELESS;
   5617 
   5618     if (ret > 0 && s->ext.cookieok)
   5619         return 1;
   5620 
   5621     if (s->hello_retry_request == SSL_HRR_PENDING && !ossl_statem_in_error(s))
   5622         return 0;
   5623 
   5624     return -1;
   5625 }
   5626 
   5627 void SSL_CTX_set_post_handshake_auth(SSL_CTX *ctx, int val)
   5628 {
   5629     ctx->pha_enabled = val;
   5630 }
   5631 
   5632 void SSL_set_post_handshake_auth(SSL *ssl, int val)
   5633 {
   5634     ssl->pha_enabled = val;
   5635 }
   5636 
   5637 int SSL_verify_client_post_handshake(SSL *ssl)
   5638 {
   5639     if (!SSL_IS_TLS13(ssl)) {
   5640         SSLerr(SSL_F_SSL_VERIFY_CLIENT_POST_HANDSHAKE, SSL_R_WRONG_SSL_VERSION);
   5641         return 0;
   5642     }
   5643     if (!ssl->server) {
   5644         SSLerr(SSL_F_SSL_VERIFY_CLIENT_POST_HANDSHAKE, SSL_R_NOT_SERVER);
   5645         return 0;
   5646     }
   5647 
   5648     if (!SSL_is_init_finished(ssl)) {
   5649         SSLerr(SSL_F_SSL_VERIFY_CLIENT_POST_HANDSHAKE, SSL_R_STILL_IN_INIT);
   5650         return 0;
   5651     }
   5652 
   5653     switch (ssl->post_handshake_auth) {
   5654     case SSL_PHA_NONE:
   5655         SSLerr(SSL_F_SSL_VERIFY_CLIENT_POST_HANDSHAKE, SSL_R_EXTENSION_NOT_RECEIVED);
   5656         return 0;
   5657     default:
   5658     case SSL_PHA_EXT_SENT:
   5659         SSLerr(SSL_F_SSL_VERIFY_CLIENT_POST_HANDSHAKE, ERR_R_INTERNAL_ERROR);
   5660         return 0;
   5661     case SSL_PHA_EXT_RECEIVED:
   5662         break;
   5663     case SSL_PHA_REQUEST_PENDING:
   5664         SSLerr(SSL_F_SSL_VERIFY_CLIENT_POST_HANDSHAKE, SSL_R_REQUEST_PENDING);
   5665         return 0;
   5666     case SSL_PHA_REQUESTED:
   5667         SSLerr(SSL_F_SSL_VERIFY_CLIENT_POST_HANDSHAKE, SSL_R_REQUEST_SENT);
   5668         return 0;
   5669     }
   5670 
   5671     ssl->post_handshake_auth = SSL_PHA_REQUEST_PENDING;
   5672 
   5673     /* checks verify_mode and algorithm_auth */
   5674     if (!send_certificate_request(ssl)) {
   5675         ssl->post_handshake_auth = SSL_PHA_EXT_RECEIVED; /* restore on error */
   5676         SSLerr(SSL_F_SSL_VERIFY_CLIENT_POST_HANDSHAKE, SSL_R_INVALID_CONFIG);
   5677         return 0;
   5678     }
   5679 
   5680     ossl_statem_set_in_init(ssl, 1);
   5681     return 1;
   5682 }
   5683 
   5684 int SSL_CTX_set_session_ticket_cb(SSL_CTX *ctx,
   5685                                   SSL_CTX_generate_session_ticket_fn gen_cb,
   5686                                   SSL_CTX_decrypt_session_ticket_fn dec_cb,
   5687                                   void *arg)
   5688 {
   5689     ctx->generate_ticket_cb = gen_cb;
   5690     ctx->decrypt_ticket_cb = dec_cb;
   5691     ctx->ticket_cb_data = arg;
   5692     return 1;
   5693 }
   5694 
   5695 void SSL_CTX_set_allow_early_data_cb(SSL_CTX *ctx,
   5696                                      SSL_allow_early_data_cb_fn cb,
   5697                                      void *arg)
   5698 {
   5699     ctx->allow_early_data_cb = cb;
   5700     ctx->allow_early_data_cb_data = arg;
   5701 }
   5702 
   5703 void SSL_set_allow_early_data_cb(SSL *s,
   5704                                  SSL_allow_early_data_cb_fn cb,
   5705                                  void *arg)
   5706 {
   5707     s->allow_early_data_cb = cb;
   5708     s->allow_early_data_cb_data = arg;
   5709 }
   5710