Home | History | Annotate | Line # | Download | only in ssl
ssl_lib.c revision 1.1.1.1
      1 /*
      2  * Copyright 1995-2025 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 Apache License 2.0 (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 "internal/e_os.h"
     13 #include "internal/e_winsock.h"
     14 #include "ssl_local.h"
     15 
     16 #include <openssl/objects.h>
     17 #include <openssl/x509v3.h>
     18 #include <openssl/rand.h>
     19 #include <openssl/ocsp.h>
     20 #include <openssl/dh.h>
     21 #include <openssl/engine.h>
     22 #include <openssl/async.h>
     23 #include <openssl/ct.h>
     24 #include <openssl/trace.h>
     25 #include <openssl/core_names.h>
     26 #include <openssl/provider.h>
     27 #include "internal/cryptlib.h"
     28 #include "internal/nelem.h"
     29 #include "internal/refcount.h"
     30 #include "internal/thread_once.h"
     31 #include "internal/ktls.h"
     32 #include "internal/to_hex.h"
     33 #include "internal/ssl_unwrap.h"
     34 #include "quic/quic_local.h"
     35 
     36 #ifndef OPENSSL_NO_SSLKEYLOG
     37 # include <sys/stat.h>
     38 # include <fcntl.h>
     39 #endif
     40 
     41 static int ssl_undefined_function_3(SSL_CONNECTION *sc, unsigned char *r,
     42                                     unsigned char *s, size_t t, size_t *u)
     43 {
     44     return ssl_undefined_function(SSL_CONNECTION_GET_SSL(sc));
     45 }
     46 
     47 static int ssl_undefined_function_4(SSL_CONNECTION *sc, int r)
     48 {
     49     return ssl_undefined_function(SSL_CONNECTION_GET_SSL(sc));
     50 }
     51 
     52 static size_t ssl_undefined_function_5(SSL_CONNECTION *sc, const char *r,
     53                                        size_t s, unsigned char *t)
     54 {
     55     return ssl_undefined_function(SSL_CONNECTION_GET_SSL(sc));
     56 }
     57 
     58 static int ssl_undefined_function_6(int r)
     59 {
     60     return ssl_undefined_function(NULL);
     61 }
     62 
     63 static int ssl_undefined_function_7(SSL_CONNECTION *sc, unsigned char *r,
     64                                     size_t s, const char *t, size_t u,
     65                                     const unsigned char *v, size_t w, int x)
     66 {
     67     return ssl_undefined_function(SSL_CONNECTION_GET_SSL(sc));
     68 }
     69 
     70 static int ssl_undefined_function_8(SSL_CONNECTION *sc)
     71 {
     72     return ssl_undefined_function(SSL_CONNECTION_GET_SSL(sc));
     73 }
     74 
     75 const SSL3_ENC_METHOD ssl3_undef_enc_method = {
     76     ssl_undefined_function_8,
     77     ssl_undefined_function_3,
     78     ssl_undefined_function_4,
     79     ssl_undefined_function_5,
     80     NULL,                       /* client_finished_label */
     81     0,                          /* client_finished_label_len */
     82     NULL,                       /* server_finished_label */
     83     0,                          /* server_finished_label_len */
     84     ssl_undefined_function_6,
     85     ssl_undefined_function_7,
     86 };
     87 
     88 struct ssl_async_args {
     89     SSL *s;
     90     void *buf;
     91     size_t num;
     92     enum { READFUNC, WRITEFUNC, OTHERFUNC } type;
     93     union {
     94         int (*func_read) (SSL *, void *, size_t, size_t *);
     95         int (*func_write) (SSL *, const void *, size_t, size_t *);
     96         int (*func_other) (SSL *);
     97     } f;
     98 };
     99 
    100 static const struct {
    101     uint8_t mtype;
    102     uint8_t ord;
    103     int nid;
    104 } dane_mds[] = {
    105     {
    106         DANETLS_MATCHING_FULL, 0, NID_undef
    107     },
    108     {
    109         DANETLS_MATCHING_2256, 1, NID_sha256
    110     },
    111     {
    112         DANETLS_MATCHING_2512, 2, NID_sha512
    113     },
    114 };
    115 
    116 static int dane_ctx_enable(struct dane_ctx_st *dctx)
    117 {
    118     const EVP_MD **mdevp;
    119     uint8_t *mdord;
    120     uint8_t mdmax = DANETLS_MATCHING_LAST;
    121     int n = ((int)mdmax) + 1;   /* int to handle PrivMatch(255) */
    122     size_t i;
    123 
    124     if (dctx->mdevp != NULL)
    125         return 1;
    126 
    127     mdevp = OPENSSL_zalloc(n * sizeof(*mdevp));
    128     mdord = OPENSSL_zalloc(n * sizeof(*mdord));
    129 
    130     if (mdord == NULL || mdevp == NULL) {
    131         OPENSSL_free(mdord);
    132         OPENSSL_free(mdevp);
    133         return 0;
    134     }
    135 
    136     /* Install default entries */
    137     for (i = 0; i < OSSL_NELEM(dane_mds); ++i) {
    138         const EVP_MD *md;
    139 
    140         if (dane_mds[i].nid == NID_undef ||
    141             (md = EVP_get_digestbynid(dane_mds[i].nid)) == NULL)
    142             continue;
    143         mdevp[dane_mds[i].mtype] = md;
    144         mdord[dane_mds[i].mtype] = dane_mds[i].ord;
    145     }
    146 
    147     dctx->mdevp = mdevp;
    148     dctx->mdord = mdord;
    149     dctx->mdmax = mdmax;
    150 
    151     return 1;
    152 }
    153 
    154 static void dane_ctx_final(struct dane_ctx_st *dctx)
    155 {
    156     OPENSSL_free(dctx->mdevp);
    157     dctx->mdevp = NULL;
    158 
    159     OPENSSL_free(dctx->mdord);
    160     dctx->mdord = NULL;
    161     dctx->mdmax = 0;
    162 }
    163 
    164 static void tlsa_free(danetls_record *t)
    165 {
    166     if (t == NULL)
    167         return;
    168     OPENSSL_free(t->data);
    169     EVP_PKEY_free(t->spki);
    170     OPENSSL_free(t);
    171 }
    172 
    173 static void dane_final(SSL_DANE *dane)
    174 {
    175     sk_danetls_record_pop_free(dane->trecs, tlsa_free);
    176     dane->trecs = NULL;
    177 
    178     OSSL_STACK_OF_X509_free(dane->certs);
    179     dane->certs = NULL;
    180 
    181     X509_free(dane->mcert);
    182     dane->mcert = NULL;
    183     dane->mtlsa = NULL;
    184     dane->mdpth = -1;
    185     dane->pdpth = -1;
    186 }
    187 
    188 /*
    189  * dane_copy - Copy dane configuration, sans verification state.
    190  */
    191 static int ssl_dane_dup(SSL_CONNECTION *to, SSL_CONNECTION *from)
    192 {
    193     int num;
    194     int i;
    195 
    196     if (!DANETLS_ENABLED(&from->dane))
    197         return 1;
    198 
    199     num = sk_danetls_record_num(from->dane.trecs);
    200     dane_final(&to->dane);
    201     to->dane.flags = from->dane.flags;
    202     to->dane.dctx = &SSL_CONNECTION_GET_CTX(to)->dane;
    203     to->dane.trecs = sk_danetls_record_new_reserve(NULL, num);
    204 
    205     if (to->dane.trecs == NULL) {
    206         ERR_raise(ERR_LIB_SSL, ERR_R_CRYPTO_LIB);
    207         return 0;
    208     }
    209 
    210     for (i = 0; i < num; ++i) {
    211         danetls_record *t = sk_danetls_record_value(from->dane.trecs, i);
    212 
    213         if (SSL_dane_tlsa_add(SSL_CONNECTION_GET_SSL(to), t->usage,
    214                               t->selector, t->mtype, t->data, t->dlen) <= 0)
    215             return 0;
    216     }
    217     return 1;
    218 }
    219 
    220 static int dane_mtype_set(struct dane_ctx_st *dctx,
    221                           const EVP_MD *md, uint8_t mtype, uint8_t ord)
    222 {
    223     int i;
    224 
    225     if (mtype == DANETLS_MATCHING_FULL && md != NULL) {
    226         ERR_raise(ERR_LIB_SSL, SSL_R_DANE_CANNOT_OVERRIDE_MTYPE_FULL);
    227         return 0;
    228     }
    229 
    230     if (mtype > dctx->mdmax) {
    231         const EVP_MD **mdevp;
    232         uint8_t *mdord;
    233         int n = ((int)mtype) + 1;
    234 
    235         mdevp = OPENSSL_realloc(dctx->mdevp, n * sizeof(*mdevp));
    236         if (mdevp == NULL)
    237             return -1;
    238         dctx->mdevp = mdevp;
    239 
    240         mdord = OPENSSL_realloc(dctx->mdord, n * sizeof(*mdord));
    241         if (mdord == NULL)
    242             return -1;
    243         dctx->mdord = mdord;
    244 
    245         /* Zero-fill any gaps */
    246         for (i = dctx->mdmax + 1; i < mtype; ++i) {
    247             mdevp[i] = NULL;
    248             mdord[i] = 0;
    249         }
    250 
    251         dctx->mdmax = mtype;
    252     }
    253 
    254     dctx->mdevp[mtype] = md;
    255     /* Coerce ordinal of disabled matching types to 0 */
    256     dctx->mdord[mtype] = (md == NULL) ? 0 : ord;
    257 
    258     return 1;
    259 }
    260 
    261 static const EVP_MD *tlsa_md_get(SSL_DANE *dane, uint8_t mtype)
    262 {
    263     if (mtype > dane->dctx->mdmax)
    264         return NULL;
    265     return dane->dctx->mdevp[mtype];
    266 }
    267 
    268 static int dane_tlsa_add(SSL_DANE *dane,
    269                          uint8_t usage,
    270                          uint8_t selector,
    271                          uint8_t mtype, const unsigned char *data, size_t dlen)
    272 {
    273     danetls_record *t;
    274     const EVP_MD *md = NULL;
    275     int ilen = (int)dlen;
    276     int i;
    277     int num;
    278     int mdsize;
    279 
    280     if (dane->trecs == NULL) {
    281         ERR_raise(ERR_LIB_SSL, SSL_R_DANE_NOT_ENABLED);
    282         return -1;
    283     }
    284 
    285     if (ilen < 0 || dlen != (size_t)ilen) {
    286         ERR_raise(ERR_LIB_SSL, SSL_R_DANE_TLSA_BAD_DATA_LENGTH);
    287         return 0;
    288     }
    289 
    290     if (usage > DANETLS_USAGE_LAST) {
    291         ERR_raise(ERR_LIB_SSL, SSL_R_DANE_TLSA_BAD_CERTIFICATE_USAGE);
    292         return 0;
    293     }
    294 
    295     if (selector > DANETLS_SELECTOR_LAST) {
    296         ERR_raise(ERR_LIB_SSL, SSL_R_DANE_TLSA_BAD_SELECTOR);
    297         return 0;
    298     }
    299 
    300     if (mtype != DANETLS_MATCHING_FULL) {
    301         md = tlsa_md_get(dane, mtype);
    302         if (md == NULL) {
    303             ERR_raise(ERR_LIB_SSL, SSL_R_DANE_TLSA_BAD_MATCHING_TYPE);
    304             return 0;
    305         }
    306     }
    307 
    308     if (md != NULL) {
    309         mdsize = EVP_MD_get_size(md);
    310         if (mdsize <= 0 || dlen != (size_t)mdsize) {
    311             ERR_raise(ERR_LIB_SSL, SSL_R_DANE_TLSA_BAD_DIGEST_LENGTH);
    312             return 0;
    313         }
    314     }
    315     if (!data) {
    316         ERR_raise(ERR_LIB_SSL, SSL_R_DANE_TLSA_NULL_DATA);
    317         return 0;
    318     }
    319 
    320     if ((t = OPENSSL_zalloc(sizeof(*t))) == NULL)
    321         return -1;
    322 
    323     t->usage = usage;
    324     t->selector = selector;
    325     t->mtype = mtype;
    326     t->data = OPENSSL_malloc(dlen);
    327     if (t->data == NULL) {
    328         tlsa_free(t);
    329         return -1;
    330     }
    331     memcpy(t->data, data, dlen);
    332     t->dlen = dlen;
    333 
    334     /* Validate and cache full certificate or public key */
    335     if (mtype == DANETLS_MATCHING_FULL) {
    336         const unsigned char *p = data;
    337         X509 *cert = NULL;
    338         EVP_PKEY *pkey = NULL;
    339 
    340         switch (selector) {
    341         case DANETLS_SELECTOR_CERT:
    342             if (!d2i_X509(&cert, &p, ilen) || p < data ||
    343                 dlen != (size_t)(p - data)) {
    344                 X509_free(cert);
    345                 tlsa_free(t);
    346                 ERR_raise(ERR_LIB_SSL, SSL_R_DANE_TLSA_BAD_CERTIFICATE);
    347                 return 0;
    348             }
    349             if (X509_get0_pubkey(cert) == NULL) {
    350                 X509_free(cert);
    351                 tlsa_free(t);
    352                 ERR_raise(ERR_LIB_SSL, SSL_R_DANE_TLSA_BAD_CERTIFICATE);
    353                 return 0;
    354             }
    355 
    356             if ((DANETLS_USAGE_BIT(usage) & DANETLS_TA_MASK) == 0) {
    357                 /*
    358                  * The Full(0) certificate decodes to a seemingly valid X.509
    359                  * object with a plausible key, so the TLSA record is well
    360                  * formed.  However, we don't actually need the certificate for
    361                  * usages PKIX-EE(1) or DANE-EE(3), because at least the EE
    362                  * certificate is always presented by the peer.  We discard the
    363                  * certificate, and just use the TLSA data as an opaque blob
    364                  * for matching the raw presented DER octets.
    365                  *
    366                  * DO NOT FREE `t` here, it will be added to the TLSA record
    367                  * list below!
    368                  */
    369                 X509_free(cert);
    370                 break;
    371             }
    372 
    373             /*
    374              * For usage DANE-TA(2), we support authentication via "2 0 0" TLSA
    375              * records that contain full certificates of trust-anchors that are
    376              * not present in the wire chain.  For usage PKIX-TA(0), we augment
    377              * the chain with untrusted Full(0) certificates from DNS, in case
    378              * they are missing from the chain.
    379              */
    380             if ((dane->certs == NULL &&
    381                  (dane->certs = sk_X509_new_null()) == NULL) ||
    382                 !sk_X509_push(dane->certs, cert)) {
    383                 ERR_raise(ERR_LIB_SSL, ERR_R_CRYPTO_LIB);
    384                 X509_free(cert);
    385                 tlsa_free(t);
    386                 return -1;
    387             }
    388             break;
    389 
    390         case DANETLS_SELECTOR_SPKI:
    391             if (!d2i_PUBKEY(&pkey, &p, ilen) || p < data ||
    392                 dlen != (size_t)(p - data)) {
    393                 EVP_PKEY_free(pkey);
    394                 tlsa_free(t);
    395                 ERR_raise(ERR_LIB_SSL, SSL_R_DANE_TLSA_BAD_PUBLIC_KEY);
    396                 return 0;
    397             }
    398 
    399             /*
    400              * For usage DANE-TA(2), we support authentication via "2 1 0" TLSA
    401              * records that contain full bare keys of trust-anchors that are
    402              * not present in the wire chain.
    403              */
    404             if (usage == DANETLS_USAGE_DANE_TA)
    405                 t->spki = pkey;
    406             else
    407                 EVP_PKEY_free(pkey);
    408             break;
    409         }
    410     }
    411 
    412     /*-
    413      * Find the right insertion point for the new record.
    414      *
    415      * See crypto/x509/x509_vfy.c.  We sort DANE-EE(3) records first, so that
    416      * they can be processed first, as they require no chain building, and no
    417      * expiration or hostname checks.  Because DANE-EE(3) is numerically
    418      * largest, this is accomplished via descending sort by "usage".
    419      *
    420      * We also sort in descending order by matching ordinal to simplify
    421      * the implementation of digest agility in the verification code.
    422      *
    423      * The choice of order for the selector is not significant, so we
    424      * use the same descending order for consistency.
    425      */
    426     num = sk_danetls_record_num(dane->trecs);
    427     for (i = 0; i < num; ++i) {
    428         danetls_record *rec = sk_danetls_record_value(dane->trecs, i);
    429 
    430         if (rec->usage > usage)
    431             continue;
    432         if (rec->usage < usage)
    433             break;
    434         if (rec->selector > selector)
    435             continue;
    436         if (rec->selector < selector)
    437             break;
    438         if (dane->dctx->mdord[rec->mtype] > dane->dctx->mdord[mtype])
    439             continue;
    440         break;
    441     }
    442 
    443     if (!sk_danetls_record_insert(dane->trecs, t, i)) {
    444         tlsa_free(t);
    445         ERR_raise(ERR_LIB_SSL, ERR_R_CRYPTO_LIB);
    446         return -1;
    447     }
    448     dane->umask |= DANETLS_USAGE_BIT(usage);
    449 
    450     return 1;
    451 }
    452 
    453 /*
    454  * Return 0 if there is only one version configured and it was disabled
    455  * at configure time.  Return 1 otherwise.
    456  */
    457 static int ssl_check_allowed_versions(int min_version, int max_version)
    458 {
    459     int minisdtls = 0, maxisdtls = 0;
    460 
    461     /* Figure out if we're doing DTLS versions or TLS versions */
    462     if (min_version == DTLS1_BAD_VER
    463         || min_version >> 8 == DTLS1_VERSION_MAJOR)
    464         minisdtls = 1;
    465     if (max_version == DTLS1_BAD_VER
    466         || max_version >> 8 == DTLS1_VERSION_MAJOR)
    467         maxisdtls = 1;
    468     /* A wildcard version of 0 could be DTLS or TLS. */
    469     if ((minisdtls && !maxisdtls && max_version != 0)
    470         || (maxisdtls && !minisdtls && min_version != 0)) {
    471         /* Mixing DTLS and TLS versions will lead to sadness; deny it. */
    472         return 0;
    473     }
    474 
    475     if (minisdtls || maxisdtls) {
    476         /* Do DTLS version checks. */
    477         if (min_version == 0)
    478             /* Ignore DTLS1_BAD_VER */
    479             min_version = DTLS1_VERSION;
    480         if (max_version == 0)
    481             max_version = DTLS1_2_VERSION;
    482 #ifdef OPENSSL_NO_DTLS1_2
    483         if (max_version == DTLS1_2_VERSION)
    484             max_version = DTLS1_VERSION;
    485 #endif
    486 #ifdef OPENSSL_NO_DTLS1
    487         if (min_version == DTLS1_VERSION)
    488             min_version = DTLS1_2_VERSION;
    489 #endif
    490         /* Done massaging versions; do the check. */
    491         if (0
    492 #ifdef OPENSSL_NO_DTLS1
    493             || (DTLS_VERSION_GE(min_version, DTLS1_VERSION)
    494                 && DTLS_VERSION_GE(DTLS1_VERSION, max_version))
    495 #endif
    496 #ifdef OPENSSL_NO_DTLS1_2
    497             || (DTLS_VERSION_GE(min_version, DTLS1_2_VERSION)
    498                 && DTLS_VERSION_GE(DTLS1_2_VERSION, max_version))
    499 #endif
    500             )
    501             return 0;
    502     } else {
    503         /* Regular TLS version checks. */
    504         if (min_version == 0)
    505             min_version = SSL3_VERSION;
    506         if (max_version == 0)
    507             max_version = TLS1_3_VERSION;
    508 #ifdef OPENSSL_NO_TLS1_3
    509         if (max_version == TLS1_3_VERSION)
    510             max_version = TLS1_2_VERSION;
    511 #endif
    512 #ifdef OPENSSL_NO_TLS1_2
    513         if (max_version == TLS1_2_VERSION)
    514             max_version = TLS1_1_VERSION;
    515 #endif
    516 #ifdef OPENSSL_NO_TLS1_1
    517         if (max_version == TLS1_1_VERSION)
    518             max_version = TLS1_VERSION;
    519 #endif
    520 #ifdef OPENSSL_NO_TLS1
    521         if (max_version == TLS1_VERSION)
    522             max_version = SSL3_VERSION;
    523 #endif
    524 #ifdef OPENSSL_NO_SSL3
    525         if (min_version == SSL3_VERSION)
    526             min_version = TLS1_VERSION;
    527 #endif
    528 #ifdef OPENSSL_NO_TLS1
    529         if (min_version == TLS1_VERSION)
    530             min_version = TLS1_1_VERSION;
    531 #endif
    532 #ifdef OPENSSL_NO_TLS1_1
    533         if (min_version == TLS1_1_VERSION)
    534             min_version = TLS1_2_VERSION;
    535 #endif
    536 #ifdef OPENSSL_NO_TLS1_2
    537         if (min_version == TLS1_2_VERSION)
    538             min_version = TLS1_3_VERSION;
    539 #endif
    540         /* Done massaging versions; do the check. */
    541         if (0
    542 #ifdef OPENSSL_NO_SSL3
    543             || (min_version <= SSL3_VERSION && SSL3_VERSION <= max_version)
    544 #endif
    545 #ifdef OPENSSL_NO_TLS1
    546             || (min_version <= TLS1_VERSION && TLS1_VERSION <= max_version)
    547 #endif
    548 #ifdef OPENSSL_NO_TLS1_1
    549             || (min_version <= TLS1_1_VERSION && TLS1_1_VERSION <= max_version)
    550 #endif
    551 #ifdef OPENSSL_NO_TLS1_2
    552             || (min_version <= TLS1_2_VERSION && TLS1_2_VERSION <= max_version)
    553 #endif
    554 #ifdef OPENSSL_NO_TLS1_3
    555             || (min_version <= TLS1_3_VERSION && TLS1_3_VERSION <= max_version)
    556 #endif
    557             )
    558             return 0;
    559     }
    560     return 1;
    561 }
    562 
    563 #if defined(__TANDEM) && defined(OPENSSL_VPROC)
    564 /*
    565  * Define a VPROC function for HP NonStop build ssl library.
    566  * This is used by platform version identification tools.
    567  * Do not inline this procedure or make it static.
    568  */
    569 # define OPENSSL_VPROC_STRING_(x)    x##_SSL
    570 # define OPENSSL_VPROC_STRING(x)     OPENSSL_VPROC_STRING_(x)
    571 # define OPENSSL_VPROC_FUNC          OPENSSL_VPROC_STRING(OPENSSL_VPROC)
    572 void OPENSSL_VPROC_FUNC(void) {}
    573 #endif
    574 
    575 int SSL_clear(SSL *s)
    576 {
    577     if (s->method == NULL) {
    578         ERR_raise(ERR_LIB_SSL, SSL_R_NO_METHOD_SPECIFIED);
    579         return 0;
    580     }
    581 
    582     return s->method->ssl_reset(s);
    583 }
    584 
    585 int ossl_ssl_connection_reset(SSL *s)
    586 {
    587     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
    588 
    589     if (sc == NULL)
    590         return 0;
    591 
    592     if (ssl_clear_bad_session(sc)) {
    593         SSL_SESSION_free(sc->session);
    594         sc->session = NULL;
    595     }
    596     SSL_SESSION_free(sc->psksession);
    597     sc->psksession = NULL;
    598     OPENSSL_free(sc->psksession_id);
    599     sc->psksession_id = NULL;
    600     sc->psksession_id_len = 0;
    601     sc->hello_retry_request = SSL_HRR_NONE;
    602     sc->sent_tickets = 0;
    603 
    604     sc->error = 0;
    605     sc->hit = 0;
    606     sc->shutdown = 0;
    607 
    608     if (sc->renegotiate) {
    609         ERR_raise(ERR_LIB_SSL, ERR_R_INTERNAL_ERROR);
    610         return 0;
    611     }
    612 
    613     ossl_statem_clear(sc);
    614 
    615     sc->version = s->method->version;
    616     sc->client_version = sc->version;
    617     sc->rwstate = SSL_NOTHING;
    618 
    619     BUF_MEM_free(sc->init_buf);
    620     sc->init_buf = NULL;
    621     sc->first_packet = 0;
    622 
    623     sc->key_update = SSL_KEY_UPDATE_NONE;
    624     memset(sc->ext.compress_certificate_from_peer, 0,
    625            sizeof(sc->ext.compress_certificate_from_peer));
    626     sc->ext.compress_certificate_sent = 0;
    627 
    628     EVP_MD_CTX_free(sc->pha_dgst);
    629     sc->pha_dgst = NULL;
    630 
    631     /* Reset DANE verification result state */
    632     sc->dane.mdpth = -1;
    633     sc->dane.pdpth = -1;
    634     X509_free(sc->dane.mcert);
    635     sc->dane.mcert = NULL;
    636     sc->dane.mtlsa = NULL;
    637 
    638     /* Clear the verification result peername */
    639     X509_VERIFY_PARAM_move_peername(sc->param, NULL);
    640 
    641     /* Clear any shared connection state */
    642     OPENSSL_free(sc->shared_sigalgs);
    643     sc->shared_sigalgs = NULL;
    644     sc->shared_sigalgslen = 0;
    645 
    646     /*
    647      * Check to see if we were changed into a different method, if so, revert
    648      * back.
    649      */
    650     if (s->method != s->defltmeth) {
    651         s->method->ssl_deinit(s);
    652         s->method = s->defltmeth;
    653         if (!s->method->ssl_init(s))
    654             return 0;
    655     } else {
    656         if (!s->method->ssl_clear(s))
    657             return 0;
    658     }
    659 
    660     ossl_quic_tls_clear(sc->qtls);
    661 
    662     if (!RECORD_LAYER_reset(&sc->rlayer))
    663         return 0;
    664 
    665     return 1;
    666 }
    667 
    668 #ifndef OPENSSL_NO_DEPRECATED_3_0
    669 /** Used to change an SSL_CTXs default SSL method type */
    670 int SSL_CTX_set_ssl_version(SSL_CTX *ctx, const SSL_METHOD *meth)
    671 {
    672     STACK_OF(SSL_CIPHER) *sk;
    673 
    674     if (IS_QUIC_CTX(ctx)) {
    675         ERR_raise(ERR_LIB_SSL, SSL_R_WRONG_SSL_VERSION);
    676         return 0;
    677     }
    678 
    679     ctx->method = meth;
    680 
    681     if (!SSL_CTX_set_ciphersuites(ctx, OSSL_default_ciphersuites())) {
    682         ERR_raise(ERR_LIB_SSL, SSL_R_SSL_LIBRARY_HAS_NO_CIPHERS);
    683         return 0;
    684     }
    685     sk = ssl_create_cipher_list(ctx,
    686                                 ctx->tls13_ciphersuites,
    687                                 &(ctx->cipher_list),
    688                                 &(ctx->cipher_list_by_id),
    689                                 OSSL_default_cipher_list(), ctx->cert);
    690     if ((sk == NULL) || (sk_SSL_CIPHER_num(sk) <= 0)) {
    691         ERR_raise(ERR_LIB_SSL, SSL_R_SSL_LIBRARY_HAS_NO_CIPHERS);
    692         return 0;
    693     }
    694     return 1;
    695 }
    696 #endif
    697 
    698 SSL *SSL_new(SSL_CTX *ctx)
    699 {
    700     if (ctx == NULL) {
    701         ERR_raise(ERR_LIB_SSL, SSL_R_NULL_SSL_CTX);
    702         return NULL;
    703     }
    704     if (ctx->method == NULL) {
    705         ERR_raise(ERR_LIB_SSL, SSL_R_SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION);
    706         return NULL;
    707     }
    708     return ctx->method->ssl_new(ctx);
    709 }
    710 
    711 int ossl_ssl_init(SSL *ssl, SSL_CTX *ctx, const SSL_METHOD *method, int type)
    712 {
    713     if (!SSL_CTX_up_ref(ctx))
    714         return 0;
    715 
    716     ssl->lock = CRYPTO_THREAD_lock_new();
    717 
    718     if (ssl->lock == NULL || !CRYPTO_NEW_REF(&ssl->references, 1))
    719         goto err;
    720 
    721     if (!CRYPTO_new_ex_data(CRYPTO_EX_INDEX_SSL, ssl, &ssl->ex_data)) {
    722         CRYPTO_FREE_REF(&ssl->references);
    723         goto err;
    724     }
    725 
    726     ssl->ctx = ctx;
    727     ssl->type = type;
    728     ssl->defltmeth = ssl->method = method;
    729 
    730     return 1;
    731 
    732 err:
    733     CRYPTO_THREAD_lock_free(ssl->lock);
    734     ssl->lock = NULL;
    735     SSL_CTX_free(ctx);
    736     return 0;
    737 }
    738 
    739 SSL *ossl_ssl_connection_new_int(SSL_CTX *ctx, SSL *user_ssl,
    740                                  const SSL_METHOD *method)
    741 {
    742     SSL_CONNECTION *s;
    743     SSL *ssl;
    744 
    745     s = OPENSSL_zalloc(sizeof(*s));
    746     if (s == NULL)
    747         return NULL;
    748 
    749     ssl = &s->ssl;
    750     s->user_ssl = (user_ssl == NULL) ? ssl : user_ssl;
    751 
    752     if (!ossl_ssl_init(ssl, ctx, method, SSL_TYPE_SSL_CONNECTION)) {
    753         OPENSSL_free(s);
    754         s = NULL;
    755         ssl = NULL;
    756         goto sslerr;
    757     }
    758 
    759     RECORD_LAYER_init(&s->rlayer, s);
    760 
    761     s->options = ctx->options;
    762 
    763     s->dane.flags = ctx->dane.flags;
    764     if (method->version == ctx->method->version) {
    765         s->min_proto_version = ctx->min_proto_version;
    766         s->max_proto_version = ctx->max_proto_version;
    767     }
    768 
    769     s->mode = ctx->mode;
    770     s->max_cert_list = ctx->max_cert_list;
    771     s->max_early_data = ctx->max_early_data;
    772     s->recv_max_early_data = ctx->recv_max_early_data;
    773 
    774     s->num_tickets = ctx->num_tickets;
    775     s->pha_enabled = ctx->pha_enabled;
    776 
    777     /* Shallow copy of the ciphersuites stack */
    778     s->tls13_ciphersuites = sk_SSL_CIPHER_dup(ctx->tls13_ciphersuites);
    779     if (s->tls13_ciphersuites == NULL)
    780         goto cerr;
    781 
    782     /*
    783      * Earlier library versions used to copy the pointer to the CERT, not
    784      * its contents; only when setting new parameters for the per-SSL
    785      * copy, ssl_cert_new would be called (and the direct reference to
    786      * the per-SSL_CTX settings would be lost, but those still were
    787      * indirectly accessed for various purposes, and for that reason they
    788      * used to be known as s->ctx->default_cert). Now we don't look at the
    789      * SSL_CTX's CERT after having duplicated it once.
    790      */
    791     s->cert = ssl_cert_dup(ctx->cert);
    792     if (s->cert == NULL)
    793         goto sslerr;
    794 
    795     RECORD_LAYER_set_read_ahead(&s->rlayer, ctx->read_ahead);
    796     s->msg_callback = ctx->msg_callback;
    797     s->msg_callback_arg = ctx->msg_callback_arg;
    798     s->verify_mode = ctx->verify_mode;
    799     s->not_resumable_session_cb = ctx->not_resumable_session_cb;
    800     s->rlayer.record_padding_cb = ctx->record_padding_cb;
    801     s->rlayer.record_padding_arg = ctx->record_padding_arg;
    802     s->rlayer.block_padding = ctx->block_padding;
    803     s->rlayer.hs_padding = ctx->hs_padding;
    804     s->sid_ctx_length = ctx->sid_ctx_length;
    805     if (!ossl_assert(s->sid_ctx_length <= sizeof(s->sid_ctx)))
    806         goto err;
    807     memcpy(&s->sid_ctx, &ctx->sid_ctx, sizeof(s->sid_ctx));
    808     s->verify_callback = ctx->default_verify_callback;
    809     s->generate_session_id = ctx->generate_session_id;
    810 
    811     s->param = X509_VERIFY_PARAM_new();
    812     if (s->param == NULL)
    813         goto asn1err;
    814     X509_VERIFY_PARAM_inherit(s->param, ctx->param);
    815     s->quiet_shutdown = IS_QUIC_CTX(ctx) ? 0 : ctx->quiet_shutdown;
    816 
    817     if (!IS_QUIC_CTX(ctx))
    818         s->ext.max_fragment_len_mode = ctx->ext.max_fragment_len_mode;
    819 
    820     s->max_send_fragment = ctx->max_send_fragment;
    821     s->split_send_fragment = ctx->split_send_fragment;
    822     s->max_pipelines = ctx->max_pipelines;
    823     s->rlayer.default_read_buf_len = ctx->default_read_buf_len;
    824 
    825     s->ext.debug_cb = 0;
    826     s->ext.debug_arg = NULL;
    827     s->ext.ticket_expected = 0;
    828     s->ext.status_type = ctx->ext.status_type;
    829     s->ext.status_expected = 0;
    830     s->ext.ocsp.ids = NULL;
    831     s->ext.ocsp.exts = NULL;
    832     s->ext.ocsp.resp = NULL;
    833     s->ext.ocsp.resp_len = 0;
    834 
    835     if (!SSL_CTX_up_ref(ctx))
    836         goto err;
    837 
    838     s->session_ctx = ctx;
    839     if (ctx->ext.ecpointformats != NULL) {
    840         s->ext.ecpointformats =
    841             OPENSSL_memdup(ctx->ext.ecpointformats,
    842                            ctx->ext.ecpointformats_len);
    843         if (s->ext.ecpointformats == NULL) {
    844             s->ext.ecpointformats_len = 0;
    845             goto err;
    846         }
    847         s->ext.ecpointformats_len =
    848             ctx->ext.ecpointformats_len;
    849     }
    850     if (ctx->ext.supportedgroups != NULL) {
    851         size_t add = 0;
    852 
    853         if (ctx->ext.supportedgroups_len == 0)
    854             /* Add 1 so allocation won't fail */
    855             add = 1;
    856         s->ext.supportedgroups =
    857             OPENSSL_memdup(ctx->ext.supportedgroups,
    858                            (ctx->ext.supportedgroups_len + add)
    859                            * sizeof(*ctx->ext.supportedgroups));
    860         if (s->ext.supportedgroups == NULL) {
    861             s->ext.supportedgroups_len = 0;
    862             goto err;
    863         }
    864         s->ext.supportedgroups_len = ctx->ext.supportedgroups_len;
    865     }
    866     if (ctx->ext.keyshares != NULL) {
    867         size_t add = 0;
    868 
    869         if (ctx->ext.keyshares_len == 0)
    870             /* Add 1 so allocation won't fail */
    871             add = 1;
    872         s->ext.keyshares =
    873             OPENSSL_memdup(ctx->ext.keyshares,
    874                            (ctx->ext.keyshares_len + add)
    875                            * sizeof(*ctx->ext.keyshares));
    876         if (s->ext.keyshares == NULL) {
    877             s->ext.keyshares_len = 0;
    878             goto err;
    879         }
    880         s->ext.keyshares_len = ctx->ext.keyshares_len;
    881     }
    882     if (ctx->ext.tuples != NULL) {
    883         size_t add = 0;
    884 
    885         if (ctx->ext.tuples_len == 0)
    886             /* Add 1 so allocation won't fail */
    887             add = 1;
    888         s->ext.tuples =
    889             OPENSSL_memdup(ctx->ext.tuples,
    890                            (ctx->ext.tuples_len + add)
    891                            * sizeof(*ctx->ext.tuples));
    892         if (s->ext.tuples == NULL) {
    893             s->ext.tuples_len = 0;
    894             goto err;
    895         }
    896         s->ext.tuples_len = ctx->ext.tuples_len;
    897     }
    898 
    899 #ifndef OPENSSL_NO_NEXTPROTONEG
    900     s->ext.npn = NULL;
    901 #endif
    902 
    903     if (ctx->ext.alpn != NULL) {
    904         s->ext.alpn = OPENSSL_malloc(ctx->ext.alpn_len);
    905         if (s->ext.alpn == NULL) {
    906             s->ext.alpn_len = 0;
    907             goto err;
    908         }
    909         memcpy(s->ext.alpn, ctx->ext.alpn, ctx->ext.alpn_len);
    910         s->ext.alpn_len = ctx->ext.alpn_len;
    911     }
    912 
    913     s->verified_chain = NULL;
    914     s->verify_result = X509_V_OK;
    915 
    916     s->default_passwd_callback = ctx->default_passwd_callback;
    917     s->default_passwd_callback_userdata = ctx->default_passwd_callback_userdata;
    918 
    919     s->key_update = SSL_KEY_UPDATE_NONE;
    920 
    921     if (!IS_QUIC_CTX(ctx)) {
    922         s->allow_early_data_cb = ctx->allow_early_data_cb;
    923         s->allow_early_data_cb_data = ctx->allow_early_data_cb_data;
    924     }
    925 
    926     if (!method->ssl_init(ssl))
    927         goto sslerr;
    928 
    929     s->server = (method->ssl_accept == ssl_undefined_function) ? 0 : 1;
    930 
    931     if (!method->ssl_reset(ssl))
    932         goto sslerr;
    933 
    934 #ifndef OPENSSL_NO_PSK
    935     s->psk_client_callback = ctx->psk_client_callback;
    936     s->psk_server_callback = ctx->psk_server_callback;
    937 #endif
    938     s->psk_find_session_cb = ctx->psk_find_session_cb;
    939     s->psk_use_session_cb = ctx->psk_use_session_cb;
    940 
    941     s->async_cb = ctx->async_cb;
    942     s->async_cb_arg = ctx->async_cb_arg;
    943 
    944     s->job = NULL;
    945 
    946 #ifndef OPENSSL_NO_COMP_ALG
    947     memcpy(s->cert_comp_prefs, ctx->cert_comp_prefs, sizeof(s->cert_comp_prefs));
    948 #endif
    949     if (ctx->client_cert_type != NULL) {
    950         s->client_cert_type = OPENSSL_memdup(ctx->client_cert_type,
    951                                              ctx->client_cert_type_len);
    952         if (s->client_cert_type == NULL)
    953             goto sslerr;
    954         s->client_cert_type_len = ctx->client_cert_type_len;
    955     }
    956     if (ctx->server_cert_type != NULL) {
    957         s->server_cert_type = OPENSSL_memdup(ctx->server_cert_type,
    958                                              ctx->server_cert_type_len);
    959         if (s->server_cert_type == NULL)
    960             goto sslerr;
    961         s->server_cert_type_len = ctx->server_cert_type_len;
    962     }
    963 
    964 #ifndef OPENSSL_NO_CT
    965     if (!SSL_set_ct_validation_callback(ssl, ctx->ct_validation_callback,
    966                                         ctx->ct_validation_callback_arg))
    967         goto sslerr;
    968 #endif
    969 
    970     s->ssl_pkey_num = SSL_PKEY_NUM + ctx->sigalg_list_len;
    971     return ssl;
    972  cerr:
    973     ERR_raise(ERR_LIB_SSL, ERR_R_CRYPTO_LIB);
    974     goto err;
    975  asn1err:
    976     ERR_raise(ERR_LIB_SSL, ERR_R_ASN1_LIB);
    977     goto err;
    978  sslerr:
    979     ERR_raise(ERR_LIB_SSL, ERR_R_SSL_LIB);
    980  err:
    981     SSL_free(ssl);
    982     return NULL;
    983 }
    984 
    985 SSL *ossl_ssl_connection_new(SSL_CTX *ctx)
    986 {
    987     return ossl_ssl_connection_new_int(ctx, NULL, ctx->method);
    988 }
    989 
    990 int SSL_is_dtls(const SSL *s)
    991 {
    992     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
    993 
    994 #ifndef OPENSSL_NO_QUIC
    995     if (s->type == SSL_TYPE_QUIC_CONNECTION || s->type == SSL_TYPE_QUIC_XSO)
    996         return 0;
    997 #endif
    998 
    999     if (sc == NULL)
   1000         return 0;
   1001 
   1002     return SSL_CONNECTION_IS_DTLS(sc) ? 1 : 0;
   1003 }
   1004 
   1005 int SSL_is_tls(const SSL *s)
   1006 {
   1007     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   1008 
   1009 #ifndef OPENSSL_NO_QUIC
   1010     if (s->type == SSL_TYPE_QUIC_CONNECTION || s->type == SSL_TYPE_QUIC_XSO)
   1011         return 0;
   1012 #endif
   1013 
   1014     if (sc == NULL)
   1015         return 0;
   1016 
   1017     return SSL_CONNECTION_IS_DTLS(sc) ? 0 : 1;
   1018 }
   1019 
   1020 int SSL_is_quic(const SSL *s)
   1021 {
   1022     return IS_QUIC(s);
   1023 }
   1024 
   1025 int SSL_up_ref(SSL *s)
   1026 {
   1027     int i;
   1028 
   1029     if (CRYPTO_UP_REF(&s->references, &i) <= 0)
   1030         return 0;
   1031 
   1032     REF_PRINT_COUNT("SSL", i, s);
   1033     REF_ASSERT_ISNT(i < 2);
   1034     return ((i > 1) ? 1 : 0);
   1035 }
   1036 
   1037 int SSL_CTX_set_session_id_context(SSL_CTX *ctx, const unsigned char *sid_ctx,
   1038                                    unsigned int sid_ctx_len)
   1039 {
   1040     if (sid_ctx_len > SSL_MAX_SID_CTX_LENGTH) {
   1041         ERR_raise(ERR_LIB_SSL, SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG);
   1042         return 0;
   1043     }
   1044     ctx->sid_ctx_length = sid_ctx_len;
   1045     memcpy(ctx->sid_ctx, sid_ctx, sid_ctx_len);
   1046 
   1047     return 1;
   1048 }
   1049 
   1050 int SSL_set_session_id_context(SSL *ssl, const unsigned char *sid_ctx,
   1051                                unsigned int sid_ctx_len)
   1052 {
   1053     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(ssl);
   1054 
   1055     if (sc == NULL)
   1056         return 0;
   1057 
   1058     if (sid_ctx_len > SSL_MAX_SID_CTX_LENGTH) {
   1059         ERR_raise(ERR_LIB_SSL, SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG);
   1060         return 0;
   1061     }
   1062     sc->sid_ctx_length = sid_ctx_len;
   1063     memcpy(sc->sid_ctx, sid_ctx, sid_ctx_len);
   1064 
   1065     return 1;
   1066 }
   1067 
   1068 int SSL_CTX_set_generate_session_id(SSL_CTX *ctx, GEN_SESSION_CB cb)
   1069 {
   1070     if (!CRYPTO_THREAD_write_lock(ctx->lock))
   1071         return 0;
   1072     ctx->generate_session_id = cb;
   1073     CRYPTO_THREAD_unlock(ctx->lock);
   1074     return 1;
   1075 }
   1076 
   1077 int SSL_set_generate_session_id(SSL *ssl, GEN_SESSION_CB cb)
   1078 {
   1079     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(ssl);
   1080 
   1081     if (sc == NULL || !CRYPTO_THREAD_write_lock(ssl->lock))
   1082         return 0;
   1083     sc->generate_session_id = cb;
   1084     CRYPTO_THREAD_unlock(ssl->lock);
   1085     return 1;
   1086 }
   1087 
   1088 int SSL_has_matching_session_id(const SSL *ssl, const unsigned char *id,
   1089                                 unsigned int id_len)
   1090 {
   1091     /*
   1092      * A quick examination of SSL_SESSION_hash and SSL_SESSION_cmp shows how
   1093      * we can "construct" a session to give us the desired check - i.e. to
   1094      * find if there's a session in the hash table that would conflict with
   1095      * any new session built out of this id/id_len and the ssl_version in use
   1096      * by this SSL.
   1097      */
   1098     SSL_SESSION r, *p;
   1099     const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(ssl);
   1100 
   1101     if (sc == NULL || id_len > sizeof(r.session_id))
   1102         return 0;
   1103 
   1104     r.ssl_version = sc->version;
   1105     r.session_id_length = id_len;
   1106     memcpy(r.session_id, id, id_len);
   1107 
   1108     if (!CRYPTO_THREAD_read_lock(sc->session_ctx->lock))
   1109         return 0;
   1110     p = lh_SSL_SESSION_retrieve(sc->session_ctx->sessions, &r);
   1111     CRYPTO_THREAD_unlock(sc->session_ctx->lock);
   1112     return (p != NULL);
   1113 }
   1114 
   1115 int SSL_CTX_set_purpose(SSL_CTX *s, int purpose)
   1116 {
   1117     return X509_VERIFY_PARAM_set_purpose(s->param, purpose);
   1118 }
   1119 
   1120 int SSL_set_purpose(SSL *s, int purpose)
   1121 {
   1122     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   1123 
   1124     if (sc == NULL)
   1125         return 0;
   1126 
   1127     return X509_VERIFY_PARAM_set_purpose(sc->param, purpose);
   1128 }
   1129 
   1130 int SSL_CTX_set_trust(SSL_CTX *s, int trust)
   1131 {
   1132     return X509_VERIFY_PARAM_set_trust(s->param, trust);
   1133 }
   1134 
   1135 int SSL_set_trust(SSL *s, int trust)
   1136 {
   1137     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   1138 
   1139     if (sc == NULL)
   1140         return 0;
   1141 
   1142     return X509_VERIFY_PARAM_set_trust(sc->param, trust);
   1143 }
   1144 
   1145 int SSL_set1_host(SSL *s, const char *host)
   1146 {
   1147     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   1148 
   1149     if (sc == NULL)
   1150         return 0;
   1151 
   1152     /* clear hostname(s) and IP address in any case, also if host parses as an IP address */
   1153     (void)X509_VERIFY_PARAM_set1_host(sc->param, NULL, 0);
   1154     (void)X509_VERIFY_PARAM_set1_ip(sc->param, NULL, 0);
   1155     if (host == NULL)
   1156         return 1;
   1157 
   1158     /* If a host is provided and parses as an IP address, treat it as such. */
   1159     return X509_VERIFY_PARAM_set1_ip_asc(sc->param, host)
   1160         || X509_VERIFY_PARAM_set1_host(sc->param, host, 0);
   1161 }
   1162 
   1163 int SSL_add1_host(SSL *s, const char *host)
   1164 {
   1165     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   1166 
   1167     if (sc == NULL)
   1168         return 0;
   1169 
   1170     /* If a host is provided and parses as an IP address, treat it as such. */
   1171     if (host != NULL) {
   1172         ASN1_OCTET_STRING *ip;
   1173         char *old_ip;
   1174 
   1175         ip = a2i_IPADDRESS(host);
   1176         if (ip != NULL) {
   1177             /* We didn't want it; only to check if it *is* an IP address */
   1178             ASN1_OCTET_STRING_free(ip);
   1179 
   1180             old_ip = X509_VERIFY_PARAM_get1_ip_asc(sc->param);
   1181             if (old_ip != NULL) {
   1182                 OPENSSL_free(old_ip);
   1183                 /* There can be only one IP address */
   1184                 ERR_raise_data(ERR_LIB_SSL, ERR_R_PASSED_INVALID_ARGUMENT,
   1185                                "IP address was already set");
   1186                 return 0;
   1187             }
   1188 
   1189             return X509_VERIFY_PARAM_set1_ip_asc(sc->param, host);
   1190         }
   1191     }
   1192 
   1193     return X509_VERIFY_PARAM_add1_host(sc->param, host, 0);
   1194 }
   1195 
   1196 void SSL_set_hostflags(SSL *s, unsigned int flags)
   1197 {
   1198     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   1199 
   1200     if (sc == NULL)
   1201         return;
   1202 
   1203     X509_VERIFY_PARAM_set_hostflags(sc->param, flags);
   1204 }
   1205 
   1206 const char *SSL_get0_peername(SSL *s)
   1207 {
   1208     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   1209 
   1210     if (sc == NULL)
   1211         return NULL;
   1212 
   1213     return X509_VERIFY_PARAM_get0_peername(sc->param);
   1214 }
   1215 
   1216 int SSL_CTX_dane_enable(SSL_CTX *ctx)
   1217 {
   1218     return dane_ctx_enable(&ctx->dane);
   1219 }
   1220 
   1221 unsigned long SSL_CTX_dane_set_flags(SSL_CTX *ctx, unsigned long flags)
   1222 {
   1223     unsigned long orig = ctx->dane.flags;
   1224 
   1225     ctx->dane.flags |= flags;
   1226     return orig;
   1227 }
   1228 
   1229 unsigned long SSL_CTX_dane_clear_flags(SSL_CTX *ctx, unsigned long flags)
   1230 {
   1231     unsigned long orig = ctx->dane.flags;
   1232 
   1233     ctx->dane.flags &= ~flags;
   1234     return orig;
   1235 }
   1236 
   1237 int SSL_dane_enable(SSL *s, const char *basedomain)
   1238 {
   1239     SSL_DANE *dane;
   1240     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   1241 
   1242     if (sc == NULL)
   1243         return 0;
   1244 
   1245     dane = &sc->dane;
   1246     if (s->ctx->dane.mdmax == 0) {
   1247         ERR_raise(ERR_LIB_SSL, SSL_R_CONTEXT_NOT_DANE_ENABLED);
   1248         return 0;
   1249     }
   1250     if (dane->trecs != NULL) {
   1251         ERR_raise(ERR_LIB_SSL, SSL_R_DANE_ALREADY_ENABLED);
   1252         return 0;
   1253     }
   1254 
   1255     /*
   1256      * Default SNI name.  This rejects empty names, while set1_host below
   1257      * accepts them and disables hostname checks.  To avoid side-effects with
   1258      * invalid input, set the SNI name first.
   1259      */
   1260     if (sc->ext.hostname == NULL) {
   1261         if (!SSL_set_tlsext_host_name(s, basedomain)) {
   1262             ERR_raise(ERR_LIB_SSL, SSL_R_ERROR_SETTING_TLSA_BASE_DOMAIN);
   1263             return -1;
   1264         }
   1265     }
   1266 
   1267     /* Primary RFC6125 reference identifier */
   1268     if (!X509_VERIFY_PARAM_set1_host(sc->param, basedomain, 0)) {
   1269         ERR_raise(ERR_LIB_SSL, SSL_R_ERROR_SETTING_TLSA_BASE_DOMAIN);
   1270         return -1;
   1271     }
   1272 
   1273     dane->mdpth = -1;
   1274     dane->pdpth = -1;
   1275     dane->dctx = &s->ctx->dane;
   1276     dane->trecs = sk_danetls_record_new_null();
   1277 
   1278     if (dane->trecs == NULL) {
   1279         ERR_raise(ERR_LIB_SSL, ERR_R_CRYPTO_LIB);
   1280         return -1;
   1281     }
   1282     return 1;
   1283 }
   1284 
   1285 unsigned long SSL_dane_set_flags(SSL *ssl, unsigned long flags)
   1286 {
   1287     unsigned long orig;
   1288     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(ssl);
   1289 
   1290     if (sc == NULL)
   1291         return 0;
   1292 
   1293     orig = sc->dane.flags;
   1294 
   1295     sc->dane.flags |= flags;
   1296     return orig;
   1297 }
   1298 
   1299 unsigned long SSL_dane_clear_flags(SSL *ssl, unsigned long flags)
   1300 {
   1301     unsigned long orig;
   1302     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(ssl);
   1303 
   1304     if (sc == NULL)
   1305         return 0;
   1306 
   1307     orig = sc->dane.flags;
   1308 
   1309     sc->dane.flags &= ~flags;
   1310     return orig;
   1311 }
   1312 
   1313 int SSL_get0_dane_authority(SSL *s, X509 **mcert, EVP_PKEY **mspki)
   1314 {
   1315     SSL_DANE *dane;
   1316     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   1317 
   1318     if (sc == NULL)
   1319         return -1;
   1320 
   1321     dane = &sc->dane;
   1322 
   1323     if (!DANETLS_ENABLED(dane) || sc->verify_result != X509_V_OK)
   1324         return -1;
   1325     if (dane->mtlsa) {
   1326         if (mcert)
   1327             *mcert = dane->mcert;
   1328         if (mspki)
   1329             *mspki = (dane->mcert == NULL) ? dane->mtlsa->spki : NULL;
   1330     }
   1331     return dane->mdpth;
   1332 }
   1333 
   1334 int SSL_get0_dane_tlsa(SSL *s, uint8_t *usage, uint8_t *selector,
   1335                        uint8_t *mtype, const unsigned char **data, size_t *dlen)
   1336 {
   1337     SSL_DANE *dane;
   1338     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   1339 
   1340     if (sc == NULL)
   1341         return -1;
   1342 
   1343     dane = &sc->dane;
   1344 
   1345     if (!DANETLS_ENABLED(dane) || sc->verify_result != X509_V_OK)
   1346         return -1;
   1347     if (dane->mtlsa) {
   1348         if (usage)
   1349             *usage = dane->mtlsa->usage;
   1350         if (selector)
   1351             *selector = dane->mtlsa->selector;
   1352         if (mtype)
   1353             *mtype = dane->mtlsa->mtype;
   1354         if (data)
   1355             *data = dane->mtlsa->data;
   1356         if (dlen)
   1357             *dlen = dane->mtlsa->dlen;
   1358     }
   1359     return dane->mdpth;
   1360 }
   1361 
   1362 SSL_DANE *SSL_get0_dane(SSL *s)
   1363 {
   1364     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   1365 
   1366     if (sc == NULL)
   1367         return NULL;
   1368 
   1369     return &sc->dane;
   1370 }
   1371 
   1372 int SSL_dane_tlsa_add(SSL *s, uint8_t usage, uint8_t selector,
   1373                       uint8_t mtype, const unsigned char *data, size_t dlen)
   1374 {
   1375     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   1376 
   1377     if (sc == NULL)
   1378         return 0;
   1379 
   1380     return dane_tlsa_add(&sc->dane, usage, selector, mtype, data, dlen);
   1381 }
   1382 
   1383 int SSL_CTX_dane_mtype_set(SSL_CTX *ctx, const EVP_MD *md, uint8_t mtype,
   1384                            uint8_t ord)
   1385 {
   1386     return dane_mtype_set(&ctx->dane, md, mtype, ord);
   1387 }
   1388 
   1389 int SSL_CTX_set1_param(SSL_CTX *ctx, X509_VERIFY_PARAM *vpm)
   1390 {
   1391     return X509_VERIFY_PARAM_set1(ctx->param, vpm);
   1392 }
   1393 
   1394 int SSL_set1_param(SSL *ssl, X509_VERIFY_PARAM *vpm)
   1395 {
   1396     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(ssl);
   1397 
   1398     if (sc == NULL)
   1399         return 0;
   1400 
   1401     return X509_VERIFY_PARAM_set1(sc->param, vpm);
   1402 }
   1403 
   1404 X509_VERIFY_PARAM *SSL_CTX_get0_param(SSL_CTX *ctx)
   1405 {
   1406     return ctx->param;
   1407 }
   1408 
   1409 X509_VERIFY_PARAM *SSL_get0_param(SSL *ssl)
   1410 {
   1411     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(ssl);
   1412 
   1413     if (sc == NULL)
   1414         return NULL;
   1415 
   1416     return sc->param;
   1417 }
   1418 
   1419 void SSL_certs_clear(SSL *s)
   1420 {
   1421     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   1422 
   1423     if (sc == NULL)
   1424         return;
   1425 
   1426     ssl_cert_clear_certs(sc->cert);
   1427 }
   1428 
   1429 void SSL_free(SSL *s)
   1430 {
   1431     int i;
   1432 
   1433     if (s == NULL)
   1434         return;
   1435     CRYPTO_DOWN_REF(&s->references, &i);
   1436     REF_PRINT_COUNT("SSL", i, s);
   1437     if (i > 0)
   1438         return;
   1439     REF_ASSERT_ISNT(i < 0);
   1440 
   1441     if (s->method != NULL)
   1442         s->method->ssl_free(s);
   1443 
   1444     CRYPTO_free_ex_data(CRYPTO_EX_INDEX_SSL, s, &s->ex_data);
   1445     SSL_CTX_free(s->ctx);
   1446     CRYPTO_THREAD_lock_free(s->lock);
   1447     CRYPTO_FREE_REF(&s->references);
   1448 
   1449     OPENSSL_free(s);
   1450 }
   1451 
   1452 void ossl_ssl_connection_free(SSL *ssl)
   1453 {
   1454     SSL_CONNECTION *s;
   1455 
   1456     s = SSL_CONNECTION_FROM_SSL_ONLY(ssl);
   1457     if (s == NULL)
   1458         return;
   1459 
   1460     /*
   1461      * Ignore return values. This could result in user callbacks being called
   1462      * e.g. for the QUIC TLS record layer. So we do this early before we have
   1463      * freed other things.
   1464      */
   1465     ssl_free_wbio_buffer(s);
   1466     RECORD_LAYER_clear(&s->rlayer);
   1467 
   1468     X509_VERIFY_PARAM_free(s->param);
   1469     dane_final(&s->dane);
   1470 
   1471     BUF_MEM_free(s->init_buf);
   1472 
   1473     /* add extra stuff */
   1474     sk_SSL_CIPHER_free(s->cipher_list);
   1475     sk_SSL_CIPHER_free(s->cipher_list_by_id);
   1476     sk_SSL_CIPHER_free(s->tls13_ciphersuites);
   1477     sk_SSL_CIPHER_free(s->peer_ciphers);
   1478 
   1479     /* Make the next call work :-) */
   1480     if (s->session != NULL) {
   1481         ssl_clear_bad_session(s);
   1482         SSL_SESSION_free(s->session);
   1483     }
   1484     SSL_SESSION_free(s->psksession);
   1485     OPENSSL_free(s->psksession_id);
   1486 
   1487     ssl_cert_free(s->cert);
   1488     OPENSSL_free(s->shared_sigalgs);
   1489     /* Free up if allocated */
   1490 
   1491     OPENSSL_free(s->ext.hostname);
   1492     SSL_CTX_free(s->session_ctx);
   1493     OPENSSL_free(s->ext.ecpointformats);
   1494     OPENSSL_free(s->ext.peer_ecpointformats);
   1495     OPENSSL_free(s->ext.supportedgroups);
   1496     OPENSSL_free(s->ext.keyshares);
   1497     OPENSSL_free(s->ext.tuples);
   1498     OPENSSL_free(s->ext.peer_supportedgroups);
   1499     sk_X509_EXTENSION_pop_free(s->ext.ocsp.exts, X509_EXTENSION_free);
   1500 #ifndef OPENSSL_NO_OCSP
   1501     sk_OCSP_RESPID_pop_free(s->ext.ocsp.ids, OCSP_RESPID_free);
   1502 #endif
   1503 #ifndef OPENSSL_NO_CT
   1504     SCT_LIST_free(s->scts);
   1505     OPENSSL_free(s->ext.scts);
   1506 #endif
   1507     OPENSSL_free(s->ext.ocsp.resp);
   1508     OPENSSL_free(s->ext.alpn);
   1509     OPENSSL_free(s->ext.tls13_cookie);
   1510     if (s->clienthello != NULL)
   1511         OPENSSL_free(s->clienthello->pre_proc_exts);
   1512     OPENSSL_free(s->clienthello);
   1513     OPENSSL_free(s->pha_context);
   1514     EVP_MD_CTX_free(s->pha_dgst);
   1515 
   1516     sk_X509_NAME_pop_free(s->ca_names, X509_NAME_free);
   1517     sk_X509_NAME_pop_free(s->client_ca_names, X509_NAME_free);
   1518 
   1519     OPENSSL_free(s->client_cert_type);
   1520     OPENSSL_free(s->server_cert_type);
   1521 
   1522     OSSL_STACK_OF_X509_free(s->verified_chain);
   1523 
   1524     if (ssl->method != NULL)
   1525         ssl->method->ssl_deinit(ssl);
   1526 
   1527     ASYNC_WAIT_CTX_free(s->waitctx);
   1528 
   1529 #if !defined(OPENSSL_NO_NEXTPROTONEG)
   1530     OPENSSL_free(s->ext.npn);
   1531 #endif
   1532 
   1533 #ifndef OPENSSL_NO_SRTP
   1534     sk_SRTP_PROTECTION_PROFILE_free(s->srtp_profiles);
   1535 #endif
   1536 
   1537     /*
   1538      * We do this late. We want to ensure that any other references we held to
   1539      * these BIOs are freed first *before* we call BIO_free_all(), because
   1540      * BIO_free_all() will only free each BIO in the chain if the number of
   1541      * references to the first BIO have dropped to 0
   1542      */
   1543     BIO_free_all(s->wbio);
   1544     s->wbio = NULL;
   1545     BIO_free_all(s->rbio);
   1546     s->rbio = NULL;
   1547     OPENSSL_free(s->s3.tmp.valid_flags);
   1548 }
   1549 
   1550 void SSL_set0_rbio(SSL *s, BIO *rbio)
   1551 {
   1552     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   1553 
   1554 #ifndef OPENSSL_NO_QUIC
   1555     if (IS_QUIC(s)) {
   1556         ossl_quic_conn_set0_net_rbio(s, rbio);
   1557         return;
   1558     }
   1559 #endif
   1560 
   1561     if (sc == NULL)
   1562         return;
   1563 
   1564     BIO_free_all(sc->rbio);
   1565     sc->rbio = rbio;
   1566     sc->rlayer.rrlmethod->set1_bio(sc->rlayer.rrl, sc->rbio);
   1567 }
   1568 
   1569 void SSL_set0_wbio(SSL *s, BIO *wbio)
   1570 {
   1571     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   1572 
   1573 #ifndef OPENSSL_NO_QUIC
   1574     if (IS_QUIC(s)) {
   1575         ossl_quic_conn_set0_net_wbio(s, wbio);
   1576         return;
   1577     }
   1578 #endif
   1579 
   1580     if (sc == NULL)
   1581         return;
   1582 
   1583     /*
   1584      * If the output buffering BIO is still in place, remove it
   1585      */
   1586     if (sc->bbio != NULL)
   1587         sc->wbio = BIO_pop(sc->wbio);
   1588 
   1589     BIO_free_all(sc->wbio);
   1590     sc->wbio = wbio;
   1591 
   1592     /* Re-attach |bbio| to the new |wbio|. */
   1593     if (sc->bbio != NULL)
   1594         sc->wbio = BIO_push(sc->bbio, sc->wbio);
   1595 
   1596     sc->rlayer.wrlmethod->set1_bio(sc->rlayer.wrl, sc->wbio);
   1597 }
   1598 
   1599 void SSL_set_bio(SSL *s, BIO *rbio, BIO *wbio)
   1600 {
   1601     /*
   1602      * For historical reasons, this function has many different cases in
   1603      * ownership handling.
   1604      */
   1605 
   1606     /* If nothing has changed, do nothing */
   1607     if (rbio == SSL_get_rbio(s) && wbio == SSL_get_wbio(s))
   1608         return;
   1609 
   1610     /*
   1611      * If the two arguments are equal then one fewer reference is granted by the
   1612      * caller than we want to take
   1613      */
   1614     if (rbio != NULL && rbio == wbio) {
   1615         if (!BIO_up_ref(rbio))
   1616             return;
   1617     }
   1618 
   1619     /*
   1620      * If only the wbio is changed only adopt one reference.
   1621      */
   1622     if (rbio == SSL_get_rbio(s)) {
   1623         SSL_set0_wbio(s, wbio);
   1624         return;
   1625     }
   1626     /*
   1627      * There is an asymmetry here for historical reasons. If only the rbio is
   1628      * changed AND the rbio and wbio were originally different, then we only
   1629      * adopt one reference.
   1630      */
   1631     if (wbio == SSL_get_wbio(s) && SSL_get_rbio(s) != SSL_get_wbio(s)) {
   1632         SSL_set0_rbio(s, rbio);
   1633         return;
   1634     }
   1635 
   1636     /* Otherwise, adopt both references. */
   1637     SSL_set0_rbio(s, rbio);
   1638     SSL_set0_wbio(s, wbio);
   1639 }
   1640 
   1641 BIO *SSL_get_rbio(const SSL *s)
   1642 {
   1643     const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
   1644 
   1645 #ifndef OPENSSL_NO_QUIC
   1646     if (IS_QUIC(s))
   1647         return ossl_quic_conn_get_net_rbio(s);
   1648 #endif
   1649 
   1650     if (sc == NULL)
   1651         return NULL;
   1652 
   1653     return sc->rbio;
   1654 }
   1655 
   1656 BIO *SSL_get_wbio(const SSL *s)
   1657 {
   1658     const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
   1659 
   1660 #ifndef OPENSSL_NO_QUIC
   1661     if (IS_QUIC(s))
   1662         return ossl_quic_conn_get_net_wbio(s);
   1663 #endif
   1664 
   1665     if (sc == NULL)
   1666         return NULL;
   1667 
   1668     if (sc->bbio != NULL) {
   1669         /*
   1670          * If |bbio| is active, the true caller-configured BIO is its
   1671          * |next_bio|.
   1672          */
   1673         return BIO_next(sc->bbio);
   1674     }
   1675     return sc->wbio;
   1676 }
   1677 
   1678 int SSL_get_fd(const SSL *s)
   1679 {
   1680     return SSL_get_rfd(s);
   1681 }
   1682 
   1683 int SSL_get_rfd(const SSL *s)
   1684 {
   1685     int ret = -1;
   1686     BIO *b, *r;
   1687 
   1688     b = SSL_get_rbio(s);
   1689     r = BIO_find_type(b, BIO_TYPE_DESCRIPTOR);
   1690     if (r != NULL)
   1691         BIO_get_fd(r, &ret);
   1692     return ret;
   1693 }
   1694 
   1695 int SSL_get_wfd(const SSL *s)
   1696 {
   1697     int ret = -1;
   1698     BIO *b, *r;
   1699 
   1700     b = SSL_get_wbio(s);
   1701     r = BIO_find_type(b, BIO_TYPE_DESCRIPTOR);
   1702     if (r != NULL)
   1703         BIO_get_fd(r, &ret);
   1704     return ret;
   1705 }
   1706 
   1707 #ifndef OPENSSL_NO_SOCK
   1708 static const BIO_METHOD *fd_method(SSL *s)
   1709 {
   1710 #ifndef OPENSSL_NO_DGRAM
   1711     if (IS_QUIC(s))
   1712         return BIO_s_datagram();
   1713 #endif
   1714 
   1715     return BIO_s_socket();
   1716 }
   1717 
   1718 int SSL_set_fd(SSL *s, int fd)
   1719 {
   1720     int ret = 0;
   1721     BIO *bio = NULL;
   1722 
   1723     if (s->type == SSL_TYPE_QUIC_XSO) {
   1724         ERR_raise(ERR_LIB_SSL, SSL_R_CONN_USE_ONLY);
   1725         goto err;
   1726     }
   1727 
   1728     bio = BIO_new(fd_method(s));
   1729 
   1730     if (bio == NULL) {
   1731         ERR_raise(ERR_LIB_SSL, ERR_R_BUF_LIB);
   1732         goto err;
   1733     }
   1734     BIO_set_fd(bio, fd, BIO_NOCLOSE);
   1735     SSL_set_bio(s, bio, bio);
   1736 #ifndef OPENSSL_NO_KTLS
   1737     /*
   1738      * The new socket is created successfully regardless of ktls_enable.
   1739      * ktls_enable doesn't change any functionality of the socket, except
   1740      * changing the setsockopt to enable the processing of ktls_start.
   1741      * Thus, it is not a problem to call it for non-TLS sockets.
   1742      */
   1743     ktls_enable(fd);
   1744 #endif /* OPENSSL_NO_KTLS */
   1745     ret = 1;
   1746  err:
   1747     return ret;
   1748 }
   1749 
   1750 int SSL_set_wfd(SSL *s, int fd)
   1751 {
   1752     BIO *rbio = SSL_get_rbio(s);
   1753     int desired_type = IS_QUIC(s) ? BIO_TYPE_DGRAM : BIO_TYPE_SOCKET;
   1754 
   1755     if (s->type == SSL_TYPE_QUIC_XSO) {
   1756         ERR_raise(ERR_LIB_SSL, SSL_R_CONN_USE_ONLY);
   1757         return 0;
   1758     }
   1759 
   1760     if (rbio == NULL || BIO_method_type(rbio) != desired_type
   1761         || (int)BIO_get_fd(rbio, NULL) != fd) {
   1762         BIO *bio = BIO_new(fd_method(s));
   1763 
   1764         if (bio == NULL) {
   1765             ERR_raise(ERR_LIB_SSL, ERR_R_BUF_LIB);
   1766             return 0;
   1767         }
   1768         BIO_set_fd(bio, fd, BIO_NOCLOSE);
   1769         SSL_set0_wbio(s, bio);
   1770 #ifndef OPENSSL_NO_KTLS
   1771         /*
   1772          * The new socket is created successfully regardless of ktls_enable.
   1773          * ktls_enable doesn't change any functionality of the socket, except
   1774          * changing the setsockopt to enable the processing of ktls_start.
   1775          * Thus, it is not a problem to call it for non-TLS sockets.
   1776          */
   1777         ktls_enable(fd);
   1778 #endif /* OPENSSL_NO_KTLS */
   1779     } else {
   1780         if (!BIO_up_ref(rbio))
   1781             return 0;
   1782         SSL_set0_wbio(s, rbio);
   1783     }
   1784     return 1;
   1785 }
   1786 
   1787 int SSL_set_rfd(SSL *s, int fd)
   1788 {
   1789     BIO *wbio = SSL_get_wbio(s);
   1790     int desired_type = IS_QUIC(s) ? BIO_TYPE_DGRAM : BIO_TYPE_SOCKET;
   1791 
   1792     if (s->type == SSL_TYPE_QUIC_XSO) {
   1793         ERR_raise(ERR_LIB_SSL, SSL_R_CONN_USE_ONLY);
   1794         return 0;
   1795     }
   1796 
   1797     if (wbio == NULL || BIO_method_type(wbio) != desired_type
   1798         || ((int)BIO_get_fd(wbio, NULL) != fd)) {
   1799         BIO *bio = BIO_new(fd_method(s));
   1800 
   1801         if (bio == NULL) {
   1802             ERR_raise(ERR_LIB_SSL, ERR_R_BUF_LIB);
   1803             return 0;
   1804         }
   1805         BIO_set_fd(bio, fd, BIO_NOCLOSE);
   1806         SSL_set0_rbio(s, bio);
   1807     } else {
   1808         if (!BIO_up_ref(wbio))
   1809             return 0;
   1810         SSL_set0_rbio(s, wbio);
   1811     }
   1812 
   1813     return 1;
   1814 }
   1815 #endif
   1816 
   1817 /* return length of latest Finished message we sent, copy to 'buf' */
   1818 size_t SSL_get_finished(const SSL *s, void *buf, size_t count)
   1819 {
   1820     size_t ret = 0;
   1821     const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
   1822 
   1823     if (sc == NULL)
   1824         return 0;
   1825 
   1826     ret = sc->s3.tmp.finish_md_len;
   1827     if (count > ret)
   1828         count = ret;
   1829     memcpy(buf, sc->s3.tmp.finish_md, count);
   1830     return ret;
   1831 }
   1832 
   1833 /* return length of latest Finished message we expected, copy to 'buf' */
   1834 size_t SSL_get_peer_finished(const SSL *s, void *buf, size_t count)
   1835 {
   1836     size_t ret = 0;
   1837     const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
   1838 
   1839     if (sc == NULL)
   1840         return 0;
   1841 
   1842     ret = sc->s3.tmp.peer_finish_md_len;
   1843     if (count > ret)
   1844         count = ret;
   1845     memcpy(buf, sc->s3.tmp.peer_finish_md, count);
   1846     return ret;
   1847 }
   1848 
   1849 int SSL_get_verify_mode(const SSL *s)
   1850 {
   1851     const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
   1852 
   1853     if (sc == NULL)
   1854         return 0;
   1855 
   1856     return sc->verify_mode;
   1857 }
   1858 
   1859 int SSL_get_verify_depth(const SSL *s)
   1860 {
   1861     const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
   1862 
   1863     if (sc == NULL)
   1864         return 0;
   1865 
   1866     return X509_VERIFY_PARAM_get_depth(sc->param);
   1867 }
   1868 
   1869 int (*SSL_get_verify_callback(const SSL *s)) (int, X509_STORE_CTX *) {
   1870     const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
   1871 
   1872     if (sc == NULL)
   1873         return NULL;
   1874 
   1875     return sc->verify_callback;
   1876 }
   1877 
   1878 int SSL_CTX_get_verify_mode(const SSL_CTX *ctx)
   1879 {
   1880     return ctx->verify_mode;
   1881 }
   1882 
   1883 int SSL_CTX_get_verify_depth(const SSL_CTX *ctx)
   1884 {
   1885     return X509_VERIFY_PARAM_get_depth(ctx->param);
   1886 }
   1887 
   1888 int (*SSL_CTX_get_verify_callback(const SSL_CTX *ctx)) (int, X509_STORE_CTX *) {
   1889     return ctx->default_verify_callback;
   1890 }
   1891 
   1892 void SSL_set_verify(SSL *s, int mode,
   1893                     int (*callback) (int ok, X509_STORE_CTX *ctx))
   1894 {
   1895     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   1896 
   1897     if (sc == NULL)
   1898         return;
   1899 
   1900     sc->verify_mode = mode;
   1901     if (callback != NULL)
   1902         sc->verify_callback = callback;
   1903 }
   1904 
   1905 void SSL_set_verify_depth(SSL *s, int depth)
   1906 {
   1907     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   1908 
   1909     if (sc == NULL)
   1910         return;
   1911 
   1912     X509_VERIFY_PARAM_set_depth(sc->param, depth);
   1913 }
   1914 
   1915 void SSL_set_read_ahead(SSL *s, int yes)
   1916 {
   1917     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL_ONLY(s);
   1918     OSSL_PARAM options[2], *opts = options;
   1919 
   1920     if (sc == NULL)
   1921         return;
   1922 
   1923     RECORD_LAYER_set_read_ahead(&sc->rlayer, yes);
   1924 
   1925     *opts++ = OSSL_PARAM_construct_int(OSSL_LIBSSL_RECORD_LAYER_PARAM_READ_AHEAD,
   1926                                        &sc->rlayer.read_ahead);
   1927     *opts = OSSL_PARAM_construct_end();
   1928 
   1929     /* Ignore return value */
   1930     sc->rlayer.rrlmethod->set_options(sc->rlayer.rrl, options);
   1931 }
   1932 
   1933 int SSL_get_read_ahead(const SSL *s)
   1934 {
   1935     const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL_ONLY(s);
   1936 
   1937     if (sc == NULL)
   1938         return 0;
   1939 
   1940     return RECORD_LAYER_get_read_ahead(&sc->rlayer);
   1941 }
   1942 
   1943 int SSL_pending(const SSL *s)
   1944 {
   1945     size_t pending = s->method->ssl_pending(s);
   1946 
   1947     /*
   1948      * SSL_pending cannot work properly if read-ahead is enabled
   1949      * (SSL_[CTX_]ctrl(..., SSL_CTRL_SET_READ_AHEAD, 1, NULL)), and it is
   1950      * impossible to fix since SSL_pending cannot report errors that may be
   1951      * observed while scanning the new data. (Note that SSL_pending() is
   1952      * often used as a boolean value, so we'd better not return -1.)
   1953      *
   1954      * SSL_pending also cannot work properly if the value >INT_MAX. In that case
   1955      * we just return INT_MAX.
   1956      */
   1957     return pending < INT_MAX ? (int)pending : INT_MAX;
   1958 }
   1959 
   1960 int SSL_has_pending(const SSL *s)
   1961 {
   1962     /*
   1963      * Similar to SSL_pending() but returns a 1 to indicate that we have
   1964      * processed or unprocessed data available or 0 otherwise (as opposed to the
   1965      * number of bytes available). Unlike SSL_pending() this will take into
   1966      * account read_ahead data. A 1 return simply indicates that we have data.
   1967      * That data may not result in any application data, or we may fail to parse
   1968      * the records for some reason.
   1969      */
   1970     const SSL_CONNECTION *sc;
   1971 
   1972 #ifndef OPENSSL_NO_QUIC
   1973     if (IS_QUIC(s))
   1974         return ossl_quic_has_pending(s);
   1975 #endif
   1976 
   1977     sc = SSL_CONNECTION_FROM_CONST_SSL(s);
   1978 
   1979     /* Check buffered app data if any first */
   1980     if (SSL_CONNECTION_IS_DTLS(sc)) {
   1981         TLS_RECORD *rdata;
   1982         pitem *item, *iter;
   1983 
   1984         iter = pqueue_iterator(sc->rlayer.d->buffered_app_data);
   1985         while ((item = pqueue_next(&iter)) != NULL) {
   1986             rdata = item->data;
   1987             if (rdata->length > 0)
   1988                 return 1;
   1989         }
   1990     }
   1991 
   1992     if (RECORD_LAYER_processed_read_pending(&sc->rlayer))
   1993         return 1;
   1994 
   1995     return RECORD_LAYER_read_pending(&sc->rlayer);
   1996 }
   1997 
   1998 X509 *SSL_get1_peer_certificate(const SSL *s)
   1999 {
   2000     X509 *r = SSL_get0_peer_certificate(s);
   2001 
   2002     if (r != NULL && !X509_up_ref(r))
   2003         return NULL;
   2004 
   2005     return r;
   2006 }
   2007 
   2008 X509 *SSL_get0_peer_certificate(const SSL *s)
   2009 {
   2010     const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
   2011 
   2012     if (sc == NULL)
   2013         return NULL;
   2014 
   2015     if (sc->session == NULL)
   2016         return NULL;
   2017     else
   2018         return sc->session->peer;
   2019 }
   2020 
   2021 STACK_OF(X509) *SSL_get_peer_cert_chain(const SSL *s)
   2022 {
   2023     STACK_OF(X509) *r;
   2024     const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
   2025 
   2026     if (sc == NULL)
   2027         return NULL;
   2028 
   2029     if (sc->session == NULL)
   2030         r = NULL;
   2031     else
   2032         r = sc->session->peer_chain;
   2033 
   2034     /*
   2035      * If we are a client, cert_chain includes the peer's own certificate; if
   2036      * we are a server, it does not.
   2037      */
   2038 
   2039     return r;
   2040 }
   2041 
   2042 /*
   2043  * Now in theory, since the calling process own 't' it should be safe to
   2044  * modify.  We need to be able to read f without being hassled
   2045  */
   2046 int SSL_copy_session_id(SSL *t, const SSL *f)
   2047 {
   2048     int i;
   2049     /* TODO(QUIC FUTURE): Not allowed for QUIC currently. */
   2050     SSL_CONNECTION *tsc = SSL_CONNECTION_FROM_SSL_ONLY(t);
   2051     const SSL_CONNECTION *fsc = SSL_CONNECTION_FROM_CONST_SSL_ONLY(f);
   2052 
   2053     if (tsc == NULL || fsc == NULL)
   2054         return 0;
   2055 
   2056     /* Do we need to do SSL locking? */
   2057     if (!SSL_set_session(t, SSL_get_session(f))) {
   2058         return 0;
   2059     }
   2060 
   2061     /*
   2062      * what if we are setup for one protocol version but want to talk another
   2063      */
   2064     if (t->method != f->method) {
   2065         t->method->ssl_deinit(t);
   2066         t->method = f->method;
   2067         if (t->method->ssl_init(t) == 0)
   2068             return 0;
   2069     }
   2070 
   2071     CRYPTO_UP_REF(&fsc->cert->references, &i);
   2072     ssl_cert_free(tsc->cert);
   2073     tsc->cert = fsc->cert;
   2074     if (!SSL_set_session_id_context(t, fsc->sid_ctx, (int)fsc->sid_ctx_length)) {
   2075         return 0;
   2076     }
   2077 
   2078     return 1;
   2079 }
   2080 
   2081 /* Fix this so it checks all the valid key/cert options */
   2082 int SSL_CTX_check_private_key(const SSL_CTX *ctx)
   2083 {
   2084     if ((ctx == NULL) || (ctx->cert->key->x509 == NULL)) {
   2085         ERR_raise(ERR_LIB_SSL, SSL_R_NO_CERTIFICATE_ASSIGNED);
   2086         return 0;
   2087     }
   2088     if (ctx->cert->key->privatekey == NULL) {
   2089         ERR_raise(ERR_LIB_SSL, SSL_R_NO_PRIVATE_KEY_ASSIGNED);
   2090         return 0;
   2091     }
   2092     return X509_check_private_key
   2093             (ctx->cert->key->x509, ctx->cert->key->privatekey);
   2094 }
   2095 
   2096 /* Fix this function so that it takes an optional type parameter */
   2097 int SSL_check_private_key(const SSL *ssl)
   2098 {
   2099     const SSL_CONNECTION *sc;
   2100 
   2101     if ((sc = SSL_CONNECTION_FROM_CONST_SSL(ssl)) == NULL) {
   2102         ERR_raise(ERR_LIB_SSL, ERR_R_PASSED_NULL_PARAMETER);
   2103         return 0;
   2104     }
   2105     if (sc->cert->key->x509 == NULL) {
   2106         ERR_raise(ERR_LIB_SSL, SSL_R_NO_CERTIFICATE_ASSIGNED);
   2107         return 0;
   2108     }
   2109     if (sc->cert->key->privatekey == NULL) {
   2110         ERR_raise(ERR_LIB_SSL, SSL_R_NO_PRIVATE_KEY_ASSIGNED);
   2111         return 0;
   2112     }
   2113     return X509_check_private_key(sc->cert->key->x509,
   2114                                    sc->cert->key->privatekey);
   2115 }
   2116 
   2117 int SSL_waiting_for_async(SSL *s)
   2118 {
   2119     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   2120 
   2121     if (sc == NULL)
   2122         return 0;
   2123 
   2124     if (sc->job)
   2125         return 1;
   2126 
   2127     return 0;
   2128 }
   2129 
   2130 int SSL_get_all_async_fds(SSL *s, OSSL_ASYNC_FD *fds, size_t *numfds)
   2131 {
   2132     ASYNC_WAIT_CTX *ctx;
   2133     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   2134 
   2135     if (sc == NULL)
   2136         return 0;
   2137 
   2138     if ((ctx = sc->waitctx) == NULL)
   2139         return 0;
   2140     return ASYNC_WAIT_CTX_get_all_fds(ctx, fds, numfds);
   2141 }
   2142 
   2143 int SSL_get_changed_async_fds(SSL *s, OSSL_ASYNC_FD *addfd, size_t *numaddfds,
   2144                               OSSL_ASYNC_FD *delfd, size_t *numdelfds)
   2145 {
   2146     ASYNC_WAIT_CTX *ctx;
   2147     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   2148 
   2149     if (sc == NULL)
   2150         return 0;
   2151 
   2152     if ((ctx = sc->waitctx) == NULL)
   2153         return 0;
   2154     return ASYNC_WAIT_CTX_get_changed_fds(ctx, addfd, numaddfds, delfd,
   2155                                           numdelfds);
   2156 }
   2157 
   2158 int SSL_CTX_set_async_callback(SSL_CTX *ctx, SSL_async_callback_fn callback)
   2159 {
   2160     ctx->async_cb = callback;
   2161     return 1;
   2162 }
   2163 
   2164 int SSL_CTX_set_async_callback_arg(SSL_CTX *ctx, void *arg)
   2165 {
   2166     ctx->async_cb_arg = arg;
   2167     return 1;
   2168 }
   2169 
   2170 int SSL_set_async_callback(SSL *s, SSL_async_callback_fn callback)
   2171 {
   2172     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   2173 
   2174     if (sc == NULL)
   2175         return 0;
   2176 
   2177     sc->async_cb = callback;
   2178     return 1;
   2179 }
   2180 
   2181 int SSL_set_async_callback_arg(SSL *s, void *arg)
   2182 {
   2183     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   2184 
   2185     if (sc == NULL)
   2186         return 0;
   2187 
   2188     sc->async_cb_arg = arg;
   2189     return 1;
   2190 }
   2191 
   2192 int SSL_get_async_status(SSL *s, int *status)
   2193 {
   2194     ASYNC_WAIT_CTX *ctx;
   2195     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   2196 
   2197     if (sc == NULL)
   2198         return 0;
   2199 
   2200     if ((ctx = sc->waitctx) == NULL)
   2201         return 0;
   2202     *status = ASYNC_WAIT_CTX_get_status(ctx);
   2203     return 1;
   2204 }
   2205 
   2206 int SSL_accept(SSL *s)
   2207 {
   2208     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   2209 
   2210 #ifndef OPENSSL_NO_QUIC
   2211     if (IS_QUIC(s))
   2212         return s->method->ssl_accept(s);
   2213 #endif
   2214 
   2215     if (sc == NULL)
   2216         return 0;
   2217 
   2218     if (sc->handshake_func == NULL) {
   2219         /* Not properly initialized yet */
   2220         SSL_set_accept_state(s);
   2221     }
   2222 
   2223     return SSL_do_handshake(s);
   2224 }
   2225 
   2226 int SSL_connect(SSL *s)
   2227 {
   2228     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   2229 
   2230 #ifndef OPENSSL_NO_QUIC
   2231     if (IS_QUIC(s))
   2232         return s->method->ssl_connect(s);
   2233 #endif
   2234 
   2235     if (sc == NULL)
   2236         return 0;
   2237 
   2238     if (sc->handshake_func == NULL) {
   2239         /* Not properly initialized yet */
   2240         SSL_set_connect_state(s);
   2241     }
   2242 
   2243     return SSL_do_handshake(s);
   2244 }
   2245 
   2246 long SSL_get_default_timeout(const SSL *s)
   2247 {
   2248     return (long int)ossl_time2seconds(s->method->get_timeout());
   2249 }
   2250 
   2251 static int ssl_async_wait_ctx_cb(void *arg)
   2252 {
   2253     SSL *s = (SSL *)arg;
   2254     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   2255 
   2256     if (sc == NULL)
   2257         return 0;
   2258 
   2259     return sc->async_cb(s, sc->async_cb_arg);
   2260 }
   2261 
   2262 static int ssl_start_async_job(SSL *s, struct ssl_async_args *args,
   2263                                int (*func) (void *))
   2264 {
   2265     int ret;
   2266     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   2267 
   2268     if (sc == NULL)
   2269         return 0;
   2270 
   2271     if (sc->waitctx == NULL) {
   2272         sc->waitctx = ASYNC_WAIT_CTX_new();
   2273         if (sc->waitctx == NULL)
   2274             return -1;
   2275         if (sc->async_cb != NULL
   2276             && !ASYNC_WAIT_CTX_set_callback
   2277                  (sc->waitctx, ssl_async_wait_ctx_cb, s))
   2278             return -1;
   2279     }
   2280 
   2281     sc->rwstate = SSL_NOTHING;
   2282     switch (ASYNC_start_job(&sc->job, sc->waitctx, &ret, func, args,
   2283                             sizeof(struct ssl_async_args))) {
   2284     case ASYNC_ERR:
   2285         sc->rwstate = SSL_NOTHING;
   2286         ERR_raise(ERR_LIB_SSL, SSL_R_FAILED_TO_INIT_ASYNC);
   2287         return -1;
   2288     case ASYNC_PAUSE:
   2289         sc->rwstate = SSL_ASYNC_PAUSED;
   2290         return -1;
   2291     case ASYNC_NO_JOBS:
   2292         sc->rwstate = SSL_ASYNC_NO_JOBS;
   2293         return -1;
   2294     case ASYNC_FINISH:
   2295         sc->job = NULL;
   2296         return ret;
   2297     default:
   2298         sc->rwstate = SSL_NOTHING;
   2299         ERR_raise(ERR_LIB_SSL, ERR_R_INTERNAL_ERROR);
   2300         /* Shouldn't happen */
   2301         return -1;
   2302     }
   2303 }
   2304 
   2305 static int ssl_io_intern(void *vargs)
   2306 {
   2307     struct ssl_async_args *args;
   2308     SSL *s;
   2309     void *buf;
   2310     size_t num;
   2311     SSL_CONNECTION *sc;
   2312 
   2313     args = (struct ssl_async_args *)vargs;
   2314     s = args->s;
   2315     buf = args->buf;
   2316     num = args->num;
   2317     if ((sc = SSL_CONNECTION_FROM_SSL(s)) == NULL)
   2318         return -1;
   2319 
   2320     switch (args->type) {
   2321     case READFUNC:
   2322         return args->f.func_read(s, buf, num, &sc->asyncrw);
   2323     case WRITEFUNC:
   2324         return args->f.func_write(s, buf, num, &sc->asyncrw);
   2325     case OTHERFUNC:
   2326         return args->f.func_other(s);
   2327     }
   2328     return -1;
   2329 }
   2330 
   2331 int ssl_read_internal(SSL *s, void *buf, size_t num, size_t *readbytes)
   2332 {
   2333     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   2334 
   2335 #ifndef OPENSSL_NO_QUIC
   2336     if (IS_QUIC(s))
   2337         return s->method->ssl_read(s, buf, num, readbytes);
   2338 #endif
   2339 
   2340     if (sc == NULL)
   2341         return -1;
   2342 
   2343     if (sc->handshake_func == NULL) {
   2344         ERR_raise(ERR_LIB_SSL, SSL_R_UNINITIALIZED);
   2345         return -1;
   2346     }
   2347 
   2348     if (sc->shutdown & SSL_RECEIVED_SHUTDOWN) {
   2349         sc->rwstate = SSL_NOTHING;
   2350         return 0;
   2351     }
   2352 
   2353     if (sc->early_data_state == SSL_EARLY_DATA_CONNECT_RETRY
   2354                 || sc->early_data_state == SSL_EARLY_DATA_ACCEPT_RETRY) {
   2355         ERR_raise(ERR_LIB_SSL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
   2356         return 0;
   2357     }
   2358     /*
   2359      * If we are a client and haven't received the ServerHello etc then we
   2360      * better do that
   2361      */
   2362     if (!ossl_statem_check_finish_init(sc, 0))
   2363         return -1;
   2364 
   2365     if ((sc->mode & SSL_MODE_ASYNC) && ASYNC_get_current_job() == NULL) {
   2366         struct ssl_async_args args;
   2367         int ret;
   2368 
   2369         args.s = s;
   2370         args.buf = buf;
   2371         args.num = num;
   2372         args.type = READFUNC;
   2373         args.f.func_read = s->method->ssl_read;
   2374 
   2375         ret = ssl_start_async_job(s, &args, ssl_io_intern);
   2376         *readbytes = sc->asyncrw;
   2377         return ret;
   2378     } else {
   2379         return s->method->ssl_read(s, buf, num, readbytes);
   2380     }
   2381 }
   2382 
   2383 int SSL_read(SSL *s, void *buf, int num)
   2384 {
   2385     int ret;
   2386     size_t readbytes;
   2387 
   2388     if (num < 0) {
   2389         ERR_raise(ERR_LIB_SSL, SSL_R_BAD_LENGTH);
   2390         return -1;
   2391     }
   2392 
   2393     ret = ssl_read_internal(s, buf, (size_t)num, &readbytes);
   2394 
   2395     /*
   2396      * The cast is safe here because ret should be <= INT_MAX because num is
   2397      * <= INT_MAX
   2398      */
   2399     if (ret > 0)
   2400         ret = (int)readbytes;
   2401 
   2402     return ret;
   2403 }
   2404 
   2405 int SSL_read_ex(SSL *s, void *buf, size_t num, size_t *readbytes)
   2406 {
   2407     int ret = ssl_read_internal(s, buf, num, readbytes);
   2408 
   2409     if (ret < 0)
   2410         ret = 0;
   2411     return ret;
   2412 }
   2413 
   2414 int SSL_read_early_data(SSL *s, void *buf, size_t num, size_t *readbytes)
   2415 {
   2416     int ret;
   2417     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL_ONLY(s);
   2418 
   2419     /* TODO(QUIC 0RTT): 0-RTT support */
   2420     if (sc == NULL || !sc->server) {
   2421         ERR_raise(ERR_LIB_SSL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
   2422         return SSL_READ_EARLY_DATA_ERROR;
   2423     }
   2424 
   2425     switch (sc->early_data_state) {
   2426     case SSL_EARLY_DATA_NONE:
   2427         if (!SSL_in_before(s)) {
   2428             ERR_raise(ERR_LIB_SSL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
   2429             return SSL_READ_EARLY_DATA_ERROR;
   2430         }
   2431         /* fall through */
   2432 
   2433     case SSL_EARLY_DATA_ACCEPT_RETRY:
   2434         sc->early_data_state = SSL_EARLY_DATA_ACCEPTING;
   2435         ret = SSL_accept(s);
   2436         if (ret <= 0) {
   2437             /* NBIO or error */
   2438             sc->early_data_state = SSL_EARLY_DATA_ACCEPT_RETRY;
   2439             return SSL_READ_EARLY_DATA_ERROR;
   2440         }
   2441         /* fall through */
   2442 
   2443     case SSL_EARLY_DATA_READ_RETRY:
   2444         if (sc->ext.early_data == SSL_EARLY_DATA_ACCEPTED) {
   2445             sc->early_data_state = SSL_EARLY_DATA_READING;
   2446             ret = SSL_read_ex(s, buf, num, readbytes);
   2447             /*
   2448              * State machine will update early_data_state to
   2449              * SSL_EARLY_DATA_FINISHED_READING if we get an EndOfEarlyData
   2450              * message
   2451              */
   2452             if (ret > 0 || (ret <= 0 && sc->early_data_state
   2453                                         != SSL_EARLY_DATA_FINISHED_READING)) {
   2454                 sc->early_data_state = SSL_EARLY_DATA_READ_RETRY;
   2455                 return ret > 0 ? SSL_READ_EARLY_DATA_SUCCESS
   2456                                : SSL_READ_EARLY_DATA_ERROR;
   2457             }
   2458         } else {
   2459             sc->early_data_state = SSL_EARLY_DATA_FINISHED_READING;
   2460         }
   2461         *readbytes = 0;
   2462         return SSL_READ_EARLY_DATA_FINISH;
   2463 
   2464     default:
   2465         ERR_raise(ERR_LIB_SSL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
   2466         return SSL_READ_EARLY_DATA_ERROR;
   2467     }
   2468 }
   2469 
   2470 int SSL_get_early_data_status(const SSL *s)
   2471 {
   2472     const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL_ONLY(s);
   2473 
   2474     /* TODO(QUIC 0RTT): 0-RTT support */
   2475     if (sc == NULL)
   2476         return 0;
   2477 
   2478     return sc->ext.early_data;
   2479 }
   2480 
   2481 static int ssl_peek_internal(SSL *s, void *buf, size_t num, size_t *readbytes)
   2482 {
   2483     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   2484 
   2485 #ifndef OPENSSL_NO_QUIC
   2486     if (IS_QUIC(s))
   2487         return s->method->ssl_peek(s, buf, num, readbytes);
   2488 #endif
   2489 
   2490     if (sc == NULL)
   2491         return 0;
   2492 
   2493     if (sc->handshake_func == NULL) {
   2494         ERR_raise(ERR_LIB_SSL, SSL_R_UNINITIALIZED);
   2495         return -1;
   2496     }
   2497 
   2498     if (sc->shutdown & SSL_RECEIVED_SHUTDOWN) {
   2499         return 0;
   2500     }
   2501     if ((sc->mode & SSL_MODE_ASYNC) && ASYNC_get_current_job() == NULL) {
   2502         struct ssl_async_args args;
   2503         int ret;
   2504 
   2505         args.s = s;
   2506         args.buf = buf;
   2507         args.num = num;
   2508         args.type = READFUNC;
   2509         args.f.func_read = s->method->ssl_peek;
   2510 
   2511         ret = ssl_start_async_job(s, &args, ssl_io_intern);
   2512         *readbytes = sc->asyncrw;
   2513         return ret;
   2514     } else {
   2515         return s->method->ssl_peek(s, buf, num, readbytes);
   2516     }
   2517 }
   2518 
   2519 int SSL_peek(SSL *s, void *buf, int num)
   2520 {
   2521     int ret;
   2522     size_t readbytes;
   2523 
   2524     if (num < 0) {
   2525         ERR_raise(ERR_LIB_SSL, SSL_R_BAD_LENGTH);
   2526         return -1;
   2527     }
   2528 
   2529     ret = ssl_peek_internal(s, buf, (size_t)num, &readbytes);
   2530 
   2531     /*
   2532      * The cast is safe here because ret should be <= INT_MAX because num is
   2533      * <= INT_MAX
   2534      */
   2535     if (ret > 0)
   2536         ret = (int)readbytes;
   2537 
   2538     return ret;
   2539 }
   2540 
   2541 
   2542 int SSL_peek_ex(SSL *s, void *buf, size_t num, size_t *readbytes)
   2543 {
   2544     int ret = ssl_peek_internal(s, buf, num, readbytes);
   2545 
   2546     if (ret < 0)
   2547         ret = 0;
   2548     return ret;
   2549 }
   2550 
   2551 int ssl_write_internal(SSL *s, const void *buf, size_t num,
   2552                        uint64_t flags, size_t *written)
   2553 {
   2554     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   2555 
   2556 #ifndef OPENSSL_NO_QUIC
   2557     if (IS_QUIC(s))
   2558         return ossl_quic_write_flags(s, buf, num, flags, written);
   2559 #endif
   2560 
   2561     if (sc == NULL)
   2562         return 0;
   2563 
   2564     if (sc->handshake_func == NULL) {
   2565         ERR_raise(ERR_LIB_SSL, SSL_R_UNINITIALIZED);
   2566         return -1;
   2567     }
   2568 
   2569     if (sc->shutdown & SSL_SENT_SHUTDOWN) {
   2570         sc->rwstate = SSL_NOTHING;
   2571         ERR_raise(ERR_LIB_SSL, SSL_R_PROTOCOL_IS_SHUTDOWN);
   2572         return -1;
   2573     }
   2574 
   2575     if (flags != 0) {
   2576         ERR_raise(ERR_LIB_SSL, SSL_R_UNSUPPORTED_WRITE_FLAG);
   2577         return -1;
   2578     }
   2579 
   2580     if (sc->early_data_state == SSL_EARLY_DATA_CONNECT_RETRY
   2581                 || sc->early_data_state == SSL_EARLY_DATA_ACCEPT_RETRY
   2582                 || sc->early_data_state == SSL_EARLY_DATA_READ_RETRY) {
   2583         ERR_raise(ERR_LIB_SSL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
   2584         return 0;
   2585     }
   2586     /* If we are a client and haven't sent the Finished we better do that */
   2587     if (!ossl_statem_check_finish_init(sc, 1))
   2588         return -1;
   2589 
   2590     if ((sc->mode & SSL_MODE_ASYNC) && ASYNC_get_current_job() == NULL) {
   2591         int ret;
   2592         struct ssl_async_args args;
   2593 
   2594         args.s = s;
   2595         args.buf = (void *)buf;
   2596         args.num = num;
   2597         args.type = WRITEFUNC;
   2598         args.f.func_write = s->method->ssl_write;
   2599 
   2600         ret = ssl_start_async_job(s, &args, ssl_io_intern);
   2601         *written = sc->asyncrw;
   2602         return ret;
   2603     } else {
   2604         return s->method->ssl_write(s, buf, num, written);
   2605     }
   2606 }
   2607 
   2608 ossl_ssize_t SSL_sendfile(SSL *s, int fd, off_t offset, size_t size, int flags)
   2609 {
   2610     ossl_ssize_t ret;
   2611     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL_ONLY(s);
   2612 
   2613     if (sc == NULL)
   2614         return 0;
   2615 
   2616     if (sc->handshake_func == NULL) {
   2617         ERR_raise(ERR_LIB_SSL, SSL_R_UNINITIALIZED);
   2618         return -1;
   2619     }
   2620 
   2621     if (sc->shutdown & SSL_SENT_SHUTDOWN) {
   2622         sc->rwstate = SSL_NOTHING;
   2623         ERR_raise(ERR_LIB_SSL, SSL_R_PROTOCOL_IS_SHUTDOWN);
   2624         return -1;
   2625     }
   2626 
   2627     if (!BIO_get_ktls_send(sc->wbio)) {
   2628         ERR_raise(ERR_LIB_SSL, SSL_R_UNINITIALIZED);
   2629         return -1;
   2630     }
   2631 
   2632     /* If we have an alert to send, lets send it */
   2633     if (sc->s3.alert_dispatch > 0) {
   2634         ret = (ossl_ssize_t)s->method->ssl_dispatch_alert(s);
   2635         if (ret <= 0) {
   2636             /* SSLfatal() already called if appropriate */
   2637             return ret;
   2638         }
   2639         /* if it went, fall through and send more stuff */
   2640     }
   2641 
   2642     sc->rwstate = SSL_WRITING;
   2643     if (BIO_flush(sc->wbio) <= 0) {
   2644         if (!BIO_should_retry(sc->wbio)) {
   2645             sc->rwstate = SSL_NOTHING;
   2646         } else {
   2647 #ifdef EAGAIN
   2648             set_sys_error(EAGAIN);
   2649 #endif
   2650         }
   2651         return -1;
   2652     }
   2653 
   2654 #ifdef OPENSSL_NO_KTLS
   2655     ERR_raise_data(ERR_LIB_SSL, ERR_R_INTERNAL_ERROR,
   2656                    "can't call ktls_sendfile(), ktls disabled");
   2657     return -1;
   2658 #else
   2659     ret = ktls_sendfile(SSL_get_wfd(s), fd, offset, size, flags);
   2660     if (ret < 0) {
   2661 #if defined(EAGAIN) && defined(EINTR) && defined(EBUSY)
   2662         if ((get_last_sys_error() == EAGAIN) ||
   2663             (get_last_sys_error() == EINTR) ||
   2664             (get_last_sys_error() == EBUSY))
   2665             BIO_set_retry_write(sc->wbio);
   2666         else
   2667 #endif
   2668             ERR_raise_data(ERR_LIB_SYS, get_last_sys_error(),
   2669                            "ktls_sendfile failure");
   2670         return ret;
   2671     }
   2672     sc->rwstate = SSL_NOTHING;
   2673     return ret;
   2674 #endif
   2675 }
   2676 
   2677 int SSL_write(SSL *s, const void *buf, int num)
   2678 {
   2679     int ret;
   2680     size_t written;
   2681 
   2682     if (num < 0) {
   2683         ERR_raise(ERR_LIB_SSL, SSL_R_BAD_LENGTH);
   2684         return -1;
   2685     }
   2686 
   2687     ret = ssl_write_internal(s, buf, (size_t)num, 0, &written);
   2688 
   2689     /*
   2690      * The cast is safe here because ret should be <= INT_MAX because num is
   2691      * <= INT_MAX
   2692      */
   2693     if (ret > 0)
   2694         ret = (int)written;
   2695 
   2696     return ret;
   2697 }
   2698 
   2699 int SSL_write_ex(SSL *s, const void *buf, size_t num, size_t *written)
   2700 {
   2701     return SSL_write_ex2(s, buf, num, 0, written);
   2702 }
   2703 
   2704 int SSL_write_ex2(SSL *s, const void *buf, size_t num, uint64_t flags,
   2705                   size_t *written)
   2706 {
   2707     int ret = ssl_write_internal(s, buf, num, flags, written);
   2708 
   2709     if (ret < 0)
   2710         ret = 0;
   2711     return ret;
   2712 }
   2713 
   2714 int SSL_write_early_data(SSL *s, const void *buf, size_t num, size_t *written)
   2715 {
   2716     int ret, early_data_state;
   2717     size_t writtmp;
   2718     uint32_t partialwrite;
   2719     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL_ONLY(s);
   2720 
   2721     /* TODO(QUIC 0RTT): This will need special handling for QUIC */
   2722     if (sc == NULL)
   2723         return 0;
   2724 
   2725     switch (sc->early_data_state) {
   2726     case SSL_EARLY_DATA_NONE:
   2727         if (sc->server
   2728                 || !SSL_in_before(s)
   2729                 || ((sc->session == NULL || sc->session->ext.max_early_data == 0)
   2730                      && (sc->psk_use_session_cb == NULL))) {
   2731             ERR_raise(ERR_LIB_SSL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
   2732             return 0;
   2733         }
   2734         /* fall through */
   2735 
   2736     case SSL_EARLY_DATA_CONNECT_RETRY:
   2737         sc->early_data_state = SSL_EARLY_DATA_CONNECTING;
   2738         ret = SSL_connect(s);
   2739         if (ret <= 0) {
   2740             /* NBIO or error */
   2741             sc->early_data_state = SSL_EARLY_DATA_CONNECT_RETRY;
   2742             return 0;
   2743         }
   2744         /* fall through */
   2745 
   2746     case SSL_EARLY_DATA_WRITE_RETRY:
   2747         sc->early_data_state = SSL_EARLY_DATA_WRITING;
   2748         /*
   2749          * We disable partial write for early data because we don't keep track
   2750          * of how many bytes we've written between the SSL_write_ex() call and
   2751          * the flush if the flush needs to be retried)
   2752          */
   2753         partialwrite = sc->mode & SSL_MODE_ENABLE_PARTIAL_WRITE;
   2754         sc->mode &= ~SSL_MODE_ENABLE_PARTIAL_WRITE;
   2755         ret = SSL_write_ex(s, buf, num, &writtmp);
   2756         sc->mode |= partialwrite;
   2757         if (!ret) {
   2758             sc->early_data_state = SSL_EARLY_DATA_WRITE_RETRY;
   2759             return ret;
   2760         }
   2761         sc->early_data_state = SSL_EARLY_DATA_WRITE_FLUSH;
   2762         /* fall through */
   2763 
   2764     case SSL_EARLY_DATA_WRITE_FLUSH:
   2765         /* The buffering BIO is still in place so we need to flush it */
   2766         if (statem_flush(sc) != 1)
   2767             return 0;
   2768         *written = num;
   2769         sc->early_data_state = SSL_EARLY_DATA_WRITE_RETRY;
   2770         return 1;
   2771 
   2772     case SSL_EARLY_DATA_FINISHED_READING:
   2773     case SSL_EARLY_DATA_READ_RETRY:
   2774         early_data_state = sc->early_data_state;
   2775         /* We are a server writing to an unauthenticated client */
   2776         sc->early_data_state = SSL_EARLY_DATA_UNAUTH_WRITING;
   2777         ret = SSL_write_ex(s, buf, num, written);
   2778         /* The buffering BIO is still in place */
   2779         if (ret)
   2780             (void)BIO_flush(sc->wbio);
   2781         sc->early_data_state = early_data_state;
   2782         return ret;
   2783 
   2784     default:
   2785         ERR_raise(ERR_LIB_SSL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
   2786         return 0;
   2787     }
   2788 }
   2789 
   2790 int SSL_shutdown(SSL *s)
   2791 {
   2792     /*
   2793      * Note that this function behaves differently from what one might
   2794      * expect.  Return values are 0 for no success (yet), 1 for success; but
   2795      * calling it once is usually not enough, even if blocking I/O is used
   2796      * (see ssl3_shutdown).
   2797      */
   2798     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   2799 
   2800 #ifndef OPENSSL_NO_QUIC
   2801     if (IS_QUIC(s))
   2802         return ossl_quic_conn_shutdown(s, 0, NULL, 0);
   2803 #endif
   2804 
   2805     if (sc == NULL)
   2806         return -1;
   2807 
   2808     if (sc->handshake_func == NULL) {
   2809         ERR_raise(ERR_LIB_SSL, SSL_R_UNINITIALIZED);
   2810         return -1;
   2811     }
   2812 
   2813     if (!SSL_in_init(s)) {
   2814         if ((sc->mode & SSL_MODE_ASYNC) && ASYNC_get_current_job() == NULL) {
   2815             struct ssl_async_args args;
   2816 
   2817             memset(&args, 0, sizeof(args));
   2818             args.s = s;
   2819             args.type = OTHERFUNC;
   2820             args.f.func_other = s->method->ssl_shutdown;
   2821 
   2822             return ssl_start_async_job(s, &args, ssl_io_intern);
   2823         } else {
   2824             return s->method->ssl_shutdown(s);
   2825         }
   2826     } else {
   2827         ERR_raise(ERR_LIB_SSL, SSL_R_SHUTDOWN_WHILE_IN_INIT);
   2828         return -1;
   2829     }
   2830 }
   2831 
   2832 int SSL_key_update(SSL *s, int updatetype)
   2833 {
   2834     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   2835 
   2836 #ifndef OPENSSL_NO_QUIC
   2837     if (IS_QUIC(s))
   2838         return ossl_quic_key_update(s, updatetype);
   2839 #endif
   2840 
   2841     if (sc == NULL)
   2842         return 0;
   2843 
   2844     if (!SSL_CONNECTION_IS_TLS13(sc)) {
   2845         ERR_raise(ERR_LIB_SSL, SSL_R_WRONG_SSL_VERSION);
   2846         return 0;
   2847     }
   2848 
   2849     if (updatetype != SSL_KEY_UPDATE_NOT_REQUESTED
   2850             && updatetype != SSL_KEY_UPDATE_REQUESTED) {
   2851         ERR_raise(ERR_LIB_SSL, SSL_R_INVALID_KEY_UPDATE_TYPE);
   2852         return 0;
   2853     }
   2854 
   2855     if (!SSL_is_init_finished(s)) {
   2856         ERR_raise(ERR_LIB_SSL, SSL_R_STILL_IN_INIT);
   2857         return 0;
   2858     }
   2859 
   2860     if (RECORD_LAYER_write_pending(&sc->rlayer)) {
   2861         ERR_raise(ERR_LIB_SSL, SSL_R_BAD_WRITE_RETRY);
   2862         return 0;
   2863     }
   2864 
   2865     ossl_statem_set_in_init(sc, 1);
   2866     sc->key_update = updatetype;
   2867     return 1;
   2868 }
   2869 
   2870 int SSL_get_key_update_type(const SSL *s)
   2871 {
   2872     const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
   2873 
   2874 #ifndef OPENSSL_NO_QUIC
   2875     if (IS_QUIC(s))
   2876         return ossl_quic_get_key_update_type(s);
   2877 #endif
   2878 
   2879     if (sc == NULL)
   2880         return 0;
   2881 
   2882     return sc->key_update;
   2883 }
   2884 
   2885 /*
   2886  * Can we accept a renegotiation request?  If yes, set the flag and
   2887  * return 1 if yes. If not, raise error and return 0.
   2888  */
   2889 static int can_renegotiate(const SSL_CONNECTION *sc)
   2890 {
   2891     if (SSL_CONNECTION_IS_TLS13(sc)) {
   2892         ERR_raise(ERR_LIB_SSL, SSL_R_WRONG_SSL_VERSION);
   2893         return 0;
   2894     }
   2895 
   2896     if ((sc->options & SSL_OP_NO_RENEGOTIATION) != 0) {
   2897         ERR_raise(ERR_LIB_SSL, SSL_R_NO_RENEGOTIATION);
   2898         return 0;
   2899     }
   2900 
   2901     return 1;
   2902 }
   2903 
   2904 int SSL_renegotiate(SSL *s)
   2905 {
   2906     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL_ONLY(s);
   2907 
   2908     if (sc == NULL)
   2909         return 0;
   2910 
   2911     if (!can_renegotiate(sc))
   2912         return 0;
   2913 
   2914     sc->renegotiate = 1;
   2915     sc->new_session = 1;
   2916     return s->method->ssl_renegotiate(s);
   2917 }
   2918 
   2919 int SSL_renegotiate_abbreviated(SSL *s)
   2920 {
   2921     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL_ONLY(s);
   2922 
   2923     if (sc == NULL)
   2924         return 0;
   2925 
   2926     if (!can_renegotiate(sc))
   2927         return 0;
   2928 
   2929     sc->renegotiate = 1;
   2930     sc->new_session = 0;
   2931     return s->method->ssl_renegotiate(s);
   2932 }
   2933 
   2934 int SSL_renegotiate_pending(const SSL *s)
   2935 {
   2936     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL_ONLY(s);
   2937 
   2938     if (sc == NULL)
   2939         return 0;
   2940 
   2941     /*
   2942      * becomes true when negotiation is requested; false again once a
   2943      * handshake has finished
   2944      */
   2945     return (sc->renegotiate != 0);
   2946 }
   2947 
   2948 int SSL_new_session_ticket(SSL *s)
   2949 {
   2950     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   2951 
   2952     if (sc == NULL)
   2953         return 0;
   2954 
   2955     /* If we are in init because we're sending tickets, okay to send more. */
   2956     if ((SSL_in_init(s) && sc->ext.extra_tickets_expected == 0)
   2957             || SSL_IS_FIRST_HANDSHAKE(sc) || !sc->server
   2958             || !SSL_CONNECTION_IS_TLS13(sc))
   2959         return 0;
   2960     sc->ext.extra_tickets_expected++;
   2961     if (!RECORD_LAYER_write_pending(&sc->rlayer) && !SSL_in_init(s))
   2962         ossl_statem_set_in_init(sc, 1);
   2963     return 1;
   2964 }
   2965 
   2966 long SSL_ctrl(SSL *s, int cmd, long larg, void *parg)
   2967 {
   2968     return ossl_ctrl_internal(s, cmd, larg, parg, /*no_quic=*/0);
   2969 }
   2970 
   2971 long ossl_ctrl_internal(SSL *s, int cmd, long larg, void *parg, int no_quic)
   2972 {
   2973     long l;
   2974     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   2975 
   2976     /*
   2977      * Routing of ctrl calls for QUIC is a little counterintuitive:
   2978      *
   2979      *   - Firstly (no_quic=0), we pass the ctrl directly to our QUIC
   2980      *     implementation in case it wants to handle the ctrl specially.
   2981      *
   2982      *   - If our QUIC implementation does not care about the ctrl, it
   2983      *     will reenter this function with no_quic=1 and we will try to handle
   2984      *     it directly using the QCSO SSL object stub (not the handshake layer
   2985      *     SSL object). This is important for e.g. the version configuration
   2986      *     ctrls below, which must use s->defltmeth (and not sc->defltmeth).
   2987      *
   2988      *   - If we don't handle a ctrl here specially, then processing is
   2989      *     redirected to the handshake layer SSL object.
   2990      */
   2991     if (!no_quic && IS_QUIC(s))
   2992         return s->method->ssl_ctrl(s, cmd, larg, parg);
   2993 
   2994     if (sc == NULL)
   2995         return 0;
   2996 
   2997     switch (cmd) {
   2998     case SSL_CTRL_GET_READ_AHEAD:
   2999         return RECORD_LAYER_get_read_ahead(&sc->rlayer);
   3000     case SSL_CTRL_SET_READ_AHEAD:
   3001         l = RECORD_LAYER_get_read_ahead(&sc->rlayer);
   3002         RECORD_LAYER_set_read_ahead(&sc->rlayer, larg);
   3003         return l;
   3004 
   3005     case SSL_CTRL_MODE:
   3006     {
   3007         OSSL_PARAM options[2], *opts = options;
   3008 
   3009         sc->mode |= larg;
   3010 
   3011         *opts++ = OSSL_PARAM_construct_uint32(OSSL_LIBSSL_RECORD_LAYER_PARAM_MODE,
   3012                                               &sc->mode);
   3013         *opts = OSSL_PARAM_construct_end();
   3014 
   3015         /* Ignore return value */
   3016         sc->rlayer.rrlmethod->set_options(sc->rlayer.rrl, options);
   3017 
   3018         return sc->mode;
   3019     }
   3020     case SSL_CTRL_CLEAR_MODE:
   3021         return (sc->mode &= ~larg);
   3022     case SSL_CTRL_GET_MAX_CERT_LIST:
   3023         return (long)sc->max_cert_list;
   3024     case SSL_CTRL_SET_MAX_CERT_LIST:
   3025         if (larg < 0)
   3026             return 0;
   3027         l = (long)sc->max_cert_list;
   3028         sc->max_cert_list = (size_t)larg;
   3029         return l;
   3030     case SSL_CTRL_SET_MAX_SEND_FRAGMENT:
   3031         if (larg < 512 || larg > SSL3_RT_MAX_PLAIN_LENGTH)
   3032             return 0;
   3033 #ifndef OPENSSL_NO_KTLS
   3034         if (sc->wbio != NULL && BIO_get_ktls_send(sc->wbio))
   3035             return 0;
   3036 #endif /* OPENSSL_NO_KTLS */
   3037         sc->max_send_fragment = larg;
   3038         if (sc->max_send_fragment < sc->split_send_fragment)
   3039             sc->split_send_fragment = sc->max_send_fragment;
   3040         sc->rlayer.wrlmethod->set_max_frag_len(sc->rlayer.wrl, larg);
   3041         return 1;
   3042     case SSL_CTRL_SET_SPLIT_SEND_FRAGMENT:
   3043         if ((size_t)larg > sc->max_send_fragment || larg == 0)
   3044             return 0;
   3045         sc->split_send_fragment = larg;
   3046         return 1;
   3047     case SSL_CTRL_SET_MAX_PIPELINES:
   3048         if (larg < 1 || larg > SSL_MAX_PIPELINES)
   3049             return 0;
   3050         sc->max_pipelines = larg;
   3051         if (sc->rlayer.rrlmethod->set_max_pipelines != NULL)
   3052             sc->rlayer.rrlmethod->set_max_pipelines(sc->rlayer.rrl, (size_t)larg);
   3053         return 1;
   3054     case SSL_CTRL_GET_RI_SUPPORT:
   3055         return sc->s3.send_connection_binding;
   3056     case SSL_CTRL_SET_RETRY_VERIFY:
   3057         sc->rwstate = SSL_RETRY_VERIFY;
   3058         return 1;
   3059     case SSL_CTRL_CERT_FLAGS:
   3060         return (sc->cert->cert_flags |= larg);
   3061     case SSL_CTRL_CLEAR_CERT_FLAGS:
   3062         return (sc->cert->cert_flags &= ~larg);
   3063 
   3064     case SSL_CTRL_GET_RAW_CIPHERLIST:
   3065         if (parg) {
   3066             if (sc->s3.tmp.ciphers_raw == NULL)
   3067                 return 0;
   3068             *(unsigned char **)parg = sc->s3.tmp.ciphers_raw;
   3069             return (int)sc->s3.tmp.ciphers_rawlen;
   3070         } else {
   3071             return TLS_CIPHER_LEN;
   3072         }
   3073     case SSL_CTRL_GET_EXTMS_SUPPORT:
   3074         if (!sc->session || SSL_in_init(s) || ossl_statem_get_in_handshake(sc))
   3075             return -1;
   3076         if (sc->session->flags & SSL_SESS_FLAG_EXTMS)
   3077             return 1;
   3078         else
   3079             return 0;
   3080     case SSL_CTRL_SET_MIN_PROTO_VERSION:
   3081         return ssl_check_allowed_versions(larg, sc->max_proto_version)
   3082                && ssl_set_version_bound(s->defltmeth->version, (int)larg,
   3083                                         &sc->min_proto_version);
   3084     case SSL_CTRL_GET_MIN_PROTO_VERSION:
   3085         return sc->min_proto_version;
   3086     case SSL_CTRL_SET_MAX_PROTO_VERSION:
   3087         return ssl_check_allowed_versions(sc->min_proto_version, larg)
   3088                && ssl_set_version_bound(s->defltmeth->version, (int)larg,
   3089                                         &sc->max_proto_version);
   3090     case SSL_CTRL_GET_MAX_PROTO_VERSION:
   3091         return sc->max_proto_version;
   3092     default:
   3093         if (IS_QUIC(s))
   3094             return SSL_ctrl((SSL *)sc, cmd, larg, parg);
   3095         else
   3096             return s->method->ssl_ctrl(s, cmd, larg, parg);
   3097     }
   3098 }
   3099 
   3100 long SSL_callback_ctrl(SSL *s, int cmd, void (*fp) (void))
   3101 {
   3102     return s->method->ssl_callback_ctrl(s, cmd, fp);
   3103 }
   3104 
   3105 LHASH_OF(SSL_SESSION) *SSL_CTX_sessions(SSL_CTX *ctx)
   3106 {
   3107     return ctx->sessions;
   3108 }
   3109 
   3110 static int ssl_tsan_load(SSL_CTX *ctx, TSAN_QUALIFIER int *stat)
   3111 {
   3112     int res = 0;
   3113 
   3114     if (ssl_tsan_lock(ctx)) {
   3115         res = tsan_load(stat);
   3116         ssl_tsan_unlock(ctx);
   3117     }
   3118     return res;
   3119 }
   3120 
   3121 long SSL_CTX_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg)
   3122 {
   3123     long l;
   3124 
   3125     /* For some cases with ctx == NULL or larg == 1 perform syntax checks */
   3126     if (cmd == SSL_CTRL_SET_GROUPS_LIST && larg == 1)
   3127         return tls1_set_groups_list(ctx, NULL, NULL, NULL, NULL, NULL, NULL, parg);
   3128     if (ctx == NULL) {
   3129         switch (cmd) {
   3130         case SSL_CTRL_SET_SIGALGS_LIST:
   3131         case SSL_CTRL_SET_CLIENT_SIGALGS_LIST:
   3132             return tls1_set_sigalgs_list(ctx, NULL, parg, 0);
   3133         default:
   3134             return 0;
   3135         }
   3136     }
   3137 
   3138     switch (cmd) {
   3139     case SSL_CTRL_GET_READ_AHEAD:
   3140         return ctx->read_ahead;
   3141     case SSL_CTRL_SET_READ_AHEAD:
   3142         l = ctx->read_ahead;
   3143         ctx->read_ahead = larg;
   3144         return l;
   3145 
   3146     case SSL_CTRL_SET_MSG_CALLBACK_ARG:
   3147         ctx->msg_callback_arg = parg;
   3148         return 1;
   3149 
   3150     case SSL_CTRL_GET_MAX_CERT_LIST:
   3151         return (long)ctx->max_cert_list;
   3152     case SSL_CTRL_SET_MAX_CERT_LIST:
   3153         if (larg < 0)
   3154             return 0;
   3155         l = (long)ctx->max_cert_list;
   3156         ctx->max_cert_list = (size_t)larg;
   3157         return l;
   3158 
   3159     case SSL_CTRL_SET_SESS_CACHE_SIZE:
   3160         if (larg < 0)
   3161             return 0;
   3162         l = (long)ctx->session_cache_size;
   3163         ctx->session_cache_size = (size_t)larg;
   3164         return l;
   3165     case SSL_CTRL_GET_SESS_CACHE_SIZE:
   3166         return (long)ctx->session_cache_size;
   3167     case SSL_CTRL_SET_SESS_CACHE_MODE:
   3168         l = ctx->session_cache_mode;
   3169         ctx->session_cache_mode = larg;
   3170         return l;
   3171     case SSL_CTRL_GET_SESS_CACHE_MODE:
   3172         return ctx->session_cache_mode;
   3173 
   3174     case SSL_CTRL_SESS_NUMBER:
   3175         return lh_SSL_SESSION_num_items(ctx->sessions);
   3176     case SSL_CTRL_SESS_CONNECT:
   3177         return ssl_tsan_load(ctx, &ctx->stats.sess_connect);
   3178     case SSL_CTRL_SESS_CONNECT_GOOD:
   3179         return ssl_tsan_load(ctx, &ctx->stats.sess_connect_good);
   3180     case SSL_CTRL_SESS_CONNECT_RENEGOTIATE:
   3181         return ssl_tsan_load(ctx, &ctx->stats.sess_connect_renegotiate);
   3182     case SSL_CTRL_SESS_ACCEPT:
   3183         return ssl_tsan_load(ctx, &ctx->stats.sess_accept);
   3184     case SSL_CTRL_SESS_ACCEPT_GOOD:
   3185         return ssl_tsan_load(ctx, &ctx->stats.sess_accept_good);
   3186     case SSL_CTRL_SESS_ACCEPT_RENEGOTIATE:
   3187         return ssl_tsan_load(ctx, &ctx->stats.sess_accept_renegotiate);
   3188     case SSL_CTRL_SESS_HIT:
   3189         return ssl_tsan_load(ctx, &ctx->stats.sess_hit);
   3190     case SSL_CTRL_SESS_CB_HIT:
   3191         return ssl_tsan_load(ctx, &ctx->stats.sess_cb_hit);
   3192     case SSL_CTRL_SESS_MISSES:
   3193         return ssl_tsan_load(ctx, &ctx->stats.sess_miss);
   3194     case SSL_CTRL_SESS_TIMEOUTS:
   3195         return ssl_tsan_load(ctx, &ctx->stats.sess_timeout);
   3196     case SSL_CTRL_SESS_CACHE_FULL:
   3197         return ssl_tsan_load(ctx, &ctx->stats.sess_cache_full);
   3198     case SSL_CTRL_MODE:
   3199         return (ctx->mode |= larg);
   3200     case SSL_CTRL_CLEAR_MODE:
   3201         return (ctx->mode &= ~larg);
   3202     case SSL_CTRL_SET_MAX_SEND_FRAGMENT:
   3203         if (larg < 512 || larg > SSL3_RT_MAX_PLAIN_LENGTH)
   3204             return 0;
   3205         ctx->max_send_fragment = larg;
   3206         if (ctx->max_send_fragment < ctx->split_send_fragment)
   3207             ctx->split_send_fragment = ctx->max_send_fragment;
   3208         return 1;
   3209     case SSL_CTRL_SET_SPLIT_SEND_FRAGMENT:
   3210         if ((size_t)larg > ctx->max_send_fragment || larg == 0)
   3211             return 0;
   3212         ctx->split_send_fragment = larg;
   3213         return 1;
   3214     case SSL_CTRL_SET_MAX_PIPELINES:
   3215         if (larg < 1 || larg > SSL_MAX_PIPELINES)
   3216             return 0;
   3217         ctx->max_pipelines = larg;
   3218         return 1;
   3219     case SSL_CTRL_CERT_FLAGS:
   3220         return (ctx->cert->cert_flags |= larg);
   3221     case SSL_CTRL_CLEAR_CERT_FLAGS:
   3222         return (ctx->cert->cert_flags &= ~larg);
   3223     case SSL_CTRL_SET_MIN_PROTO_VERSION:
   3224         return ssl_check_allowed_versions(larg, ctx->max_proto_version)
   3225                && ssl_set_version_bound(ctx->method->version, (int)larg,
   3226                                         &ctx->min_proto_version);
   3227     case SSL_CTRL_GET_MIN_PROTO_VERSION:
   3228         return ctx->min_proto_version;
   3229     case SSL_CTRL_SET_MAX_PROTO_VERSION:
   3230         return ssl_check_allowed_versions(ctx->min_proto_version, larg)
   3231                && ssl_set_version_bound(ctx->method->version, (int)larg,
   3232                                         &ctx->max_proto_version);
   3233     case SSL_CTRL_GET_MAX_PROTO_VERSION:
   3234         return ctx->max_proto_version;
   3235     default:
   3236         return ctx->method->ssl_ctx_ctrl(ctx, cmd, larg, parg);
   3237     }
   3238 }
   3239 
   3240 long SSL_CTX_callback_ctrl(SSL_CTX *ctx, int cmd, void (*fp) (void))
   3241 {
   3242     switch (cmd) {
   3243     case SSL_CTRL_SET_MSG_CALLBACK:
   3244         ctx->msg_callback = (void (*)
   3245                              (int write_p, int version, int content_type,
   3246                               const void *buf, size_t len, SSL *ssl,
   3247                               void *arg))(fp);
   3248         return 1;
   3249 
   3250     default:
   3251         return ctx->method->ssl_ctx_callback_ctrl(ctx, cmd, fp);
   3252     }
   3253 }
   3254 
   3255 int ssl_cipher_id_cmp(const SSL_CIPHER *a, const SSL_CIPHER *b)
   3256 {
   3257     if (a->id > b->id)
   3258         return 1;
   3259     if (a->id < b->id)
   3260         return -1;
   3261     return 0;
   3262 }
   3263 
   3264 int ssl_cipher_ptr_id_cmp(const SSL_CIPHER *const *ap,
   3265                           const SSL_CIPHER *const *bp)
   3266 {
   3267     if ((*ap)->id > (*bp)->id)
   3268         return 1;
   3269     if ((*ap)->id < (*bp)->id)
   3270         return -1;
   3271     return 0;
   3272 }
   3273 
   3274 /*
   3275  * return a STACK of the ciphers available for the SSL and in order of
   3276  * preference
   3277  */
   3278 STACK_OF(SSL_CIPHER) *SSL_get_ciphers(const SSL *s)
   3279 {
   3280     const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
   3281 
   3282     if (sc != NULL) {
   3283         if (sc->cipher_list != NULL) {
   3284             return sc->cipher_list;
   3285         } else if ((s->ctx != NULL) && (s->ctx->cipher_list != NULL)) {
   3286             return s->ctx->cipher_list;
   3287         }
   3288     }
   3289     return NULL;
   3290 }
   3291 
   3292 STACK_OF(SSL_CIPHER) *SSL_get_client_ciphers(const SSL *s)
   3293 {
   3294     const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
   3295 
   3296     if (sc == NULL || !sc->server)
   3297         return NULL;
   3298     return sc->peer_ciphers;
   3299 }
   3300 
   3301 STACK_OF(SSL_CIPHER) *SSL_get1_supported_ciphers(SSL *s)
   3302 {
   3303     STACK_OF(SSL_CIPHER) *sk = NULL, *ciphers;
   3304     int i;
   3305     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   3306 
   3307     if (sc == NULL)
   3308         return NULL;
   3309 
   3310     ciphers = SSL_get_ciphers(s);
   3311     if (!ciphers)
   3312         return NULL;
   3313     if (!ssl_set_client_disabled(sc))
   3314         return NULL;
   3315     for (i = 0; i < sk_SSL_CIPHER_num(ciphers); i++) {
   3316         const SSL_CIPHER *c = sk_SSL_CIPHER_value(ciphers, i);
   3317         if (!ssl_cipher_disabled(sc, c, SSL_SECOP_CIPHER_SUPPORTED, 0)) {
   3318             if (!sk)
   3319                 sk = sk_SSL_CIPHER_new_null();
   3320             if (!sk)
   3321                 return NULL;
   3322             if (!sk_SSL_CIPHER_push(sk, c)) {
   3323                 sk_SSL_CIPHER_free(sk);
   3324                 return NULL;
   3325             }
   3326         }
   3327     }
   3328     return sk;
   3329 }
   3330 
   3331 /** return a STACK of the ciphers available for the SSL and in order of
   3332  * algorithm id */
   3333 STACK_OF(SSL_CIPHER) *ssl_get_ciphers_by_id(SSL_CONNECTION *s)
   3334 {
   3335     if (s != NULL) {
   3336         if (s->cipher_list_by_id != NULL)
   3337             return s->cipher_list_by_id;
   3338         else if (s->ssl.ctx != NULL
   3339                  && s->ssl.ctx->cipher_list_by_id != NULL)
   3340             return s->ssl.ctx->cipher_list_by_id;
   3341     }
   3342     return NULL;
   3343 }
   3344 
   3345 /** The old interface to get the same thing as SSL_get_ciphers() */
   3346 const char *SSL_get_cipher_list(const SSL *s, int n)
   3347 {
   3348     const SSL_CIPHER *c;
   3349     STACK_OF(SSL_CIPHER) *sk;
   3350 
   3351     if (s == NULL)
   3352         return NULL;
   3353     sk = SSL_get_ciphers(s);
   3354     if ((sk == NULL) || (sk_SSL_CIPHER_num(sk) <= n))
   3355         return NULL;
   3356     c = sk_SSL_CIPHER_value(sk, n);
   3357     if (c == NULL)
   3358         return NULL;
   3359     return c->name;
   3360 }
   3361 
   3362 /** return a STACK of the ciphers available for the SSL_CTX and in order of
   3363  * preference */
   3364 STACK_OF(SSL_CIPHER) *SSL_CTX_get_ciphers(const SSL_CTX *ctx)
   3365 {
   3366     if (ctx != NULL)
   3367         return ctx->cipher_list;
   3368     return NULL;
   3369 }
   3370 
   3371 /*
   3372  * Distinguish between ciphers controlled by set_ciphersuite() and
   3373  * set_cipher_list() when counting.
   3374  */
   3375 static int cipher_list_tls12_num(STACK_OF(SSL_CIPHER) *sk)
   3376 {
   3377     int i, num = 0;
   3378     const SSL_CIPHER *c;
   3379 
   3380     if (sk == NULL)
   3381         return 0;
   3382     for (i = 0; i < sk_SSL_CIPHER_num(sk); ++i) {
   3383         c = sk_SSL_CIPHER_value(sk, i);
   3384         if (c->min_tls >= TLS1_3_VERSION)
   3385             continue;
   3386         num++;
   3387     }
   3388     return num;
   3389 }
   3390 
   3391 /** specify the ciphers to be used by default by the SSL_CTX */
   3392 int SSL_CTX_set_cipher_list(SSL_CTX *ctx, const char *str)
   3393 {
   3394     STACK_OF(SSL_CIPHER) *sk;
   3395 
   3396     sk = ssl_create_cipher_list(ctx, ctx->tls13_ciphersuites,
   3397                                 &ctx->cipher_list, &ctx->cipher_list_by_id, str,
   3398                                 ctx->cert);
   3399     /*
   3400      * ssl_create_cipher_list may return an empty stack if it was unable to
   3401      * find a cipher matching the given rule string (for example if the rule
   3402      * string specifies a cipher which has been disabled). This is not an
   3403      * error as far as ssl_create_cipher_list is concerned, and hence
   3404      * ctx->cipher_list and ctx->cipher_list_by_id has been updated.
   3405      */
   3406     if (sk == NULL)
   3407         return 0;
   3408     if (ctx->method->num_ciphers() > 0 && cipher_list_tls12_num(sk) == 0) {
   3409         ERR_raise(ERR_LIB_SSL, SSL_R_NO_CIPHER_MATCH);
   3410         return 0;
   3411     }
   3412     return 1;
   3413 }
   3414 
   3415 /** specify the ciphers to be used by the SSL */
   3416 int SSL_set_cipher_list(SSL *s, const char *str)
   3417 {
   3418     STACK_OF(SSL_CIPHER) *sk;
   3419     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   3420     SSL_CTX *ctx;
   3421 
   3422     if (sc == NULL)
   3423         return 0;
   3424 
   3425     ctx = s->ctx;
   3426     sk = ssl_create_cipher_list(ctx, sc->tls13_ciphersuites,
   3427                                 &sc->cipher_list, &sc->cipher_list_by_id, str,
   3428                                 sc->cert);
   3429     /* see comment in SSL_CTX_set_cipher_list */
   3430     if (sk == NULL)
   3431         return 0;
   3432     if (ctx->method->num_ciphers() > 0 && cipher_list_tls12_num(sk) == 0) {
   3433         ERR_raise(ERR_LIB_SSL, SSL_R_NO_CIPHER_MATCH);
   3434         return 0;
   3435     }
   3436     return 1;
   3437 }
   3438 
   3439 char *SSL_get_shared_ciphers(const SSL *s, char *buf, int size)
   3440 {
   3441     char *p;
   3442     STACK_OF(SSL_CIPHER) *clntsk, *srvrsk;
   3443     const SSL_CIPHER *c;
   3444     int i;
   3445     const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
   3446 
   3447     if (sc == NULL)
   3448         return NULL;
   3449 
   3450     if (!sc->server
   3451             || sc->peer_ciphers == NULL
   3452             || size < 2)
   3453         return NULL;
   3454 
   3455     p = buf;
   3456     clntsk = sc->peer_ciphers;
   3457     srvrsk = SSL_get_ciphers(s);
   3458     if (clntsk == NULL || srvrsk == NULL)
   3459         return NULL;
   3460 
   3461     if (sk_SSL_CIPHER_num(clntsk) == 0 || sk_SSL_CIPHER_num(srvrsk) == 0)
   3462         return NULL;
   3463 
   3464     for (i = 0; i < sk_SSL_CIPHER_num(clntsk); i++) {
   3465         int n;
   3466 
   3467         c = sk_SSL_CIPHER_value(clntsk, i);
   3468         if (sk_SSL_CIPHER_find(srvrsk, c) < 0)
   3469             continue;
   3470 
   3471         n = OPENSSL_strnlen(c->name, size);
   3472         if (n >= size) {
   3473             if (p != buf)
   3474                 --p;
   3475             *p = '\0';
   3476             return buf;
   3477         }
   3478         memcpy(p, c->name, n);
   3479         p += n;
   3480         *(p++) = ':';
   3481         size -= n + 1;
   3482     }
   3483     p[-1] = '\0';
   3484     return buf;
   3485 }
   3486 
   3487 /**
   3488  * Return the requested servername (SNI) value. Note that the behaviour varies
   3489  * depending on:
   3490  * - whether this is called by the client or the server,
   3491  * - if we are before or during/after the handshake,
   3492  * - if a resumption or normal handshake is being attempted/has occurred
   3493  * - whether we have negotiated TLSv1.2 (or below) or TLSv1.3
   3494  *
   3495  * Note that only the host_name type is defined (RFC 3546).
   3496  */
   3497 const char *SSL_get_servername(const SSL *s, const int type)
   3498 {
   3499     const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
   3500     int server;
   3501 
   3502     if (sc == NULL)
   3503         return NULL;
   3504 
   3505     /*
   3506      * If we don't know if we are the client or the server yet then we assume
   3507      * client.
   3508      */
   3509     server = sc->handshake_func == NULL ? 0 : sc->server;
   3510 
   3511     if (type != TLSEXT_NAMETYPE_host_name)
   3512         return NULL;
   3513 
   3514     if (server) {
   3515         /**
   3516          * Server side
   3517          * In TLSv1.3 on the server SNI is not associated with the session
   3518          * but in TLSv1.2 or below it is.
   3519          *
   3520          * Before the handshake:
   3521          *  - return NULL
   3522          *
   3523          * During/after the handshake (TLSv1.2 or below resumption occurred):
   3524          * - If a servername was accepted by the server in the original
   3525          *   handshake then it will return that servername, or NULL otherwise.
   3526          *
   3527          * During/after the handshake (TLSv1.2 or below resumption did not occur):
   3528          * - The function will return the servername requested by the client in
   3529          *   this handshake or NULL if none was requested.
   3530          */
   3531          if (sc->hit && !SSL_CONNECTION_IS_TLS13(sc))
   3532             return sc->session->ext.hostname;
   3533     } else {
   3534         /**
   3535          * Client side
   3536          *
   3537          * Before the handshake:
   3538          *  - If a servername has been set via a call to
   3539          *    SSL_set_tlsext_host_name() then it will return that servername
   3540          *  - If one has not been set, but a TLSv1.2 resumption is being
   3541          *    attempted and the session from the original handshake had a
   3542          *    servername accepted by the server then it will return that
   3543          *    servername
   3544          *  - Otherwise it returns NULL
   3545          *
   3546          * During/after the handshake (TLSv1.2 or below resumption occurred):
   3547          * - If the session from the original handshake had a servername accepted
   3548          *   by the server then it will return that servername.
   3549          * - Otherwise it returns the servername set via
   3550          *   SSL_set_tlsext_host_name() (or NULL if it was not called).
   3551          *
   3552          * During/after the handshake (TLSv1.2 or below resumption did not occur):
   3553          * - It will return the servername set via SSL_set_tlsext_host_name()
   3554          *   (or NULL if it was not called).
   3555          */
   3556         if (SSL_in_before(s)) {
   3557             if (sc->ext.hostname == NULL
   3558                     && sc->session != NULL
   3559                     && sc->session->ssl_version != TLS1_3_VERSION)
   3560                 return sc->session->ext.hostname;
   3561         } else {
   3562             if (!SSL_CONNECTION_IS_TLS13(sc) && sc->hit
   3563                 && sc->session->ext.hostname != NULL)
   3564                 return sc->session->ext.hostname;
   3565         }
   3566     }
   3567 
   3568     return sc->ext.hostname;
   3569 }
   3570 
   3571 int SSL_get_servername_type(const SSL *s)
   3572 {
   3573     if (SSL_get_servername(s, TLSEXT_NAMETYPE_host_name) != NULL)
   3574         return TLSEXT_NAMETYPE_host_name;
   3575     return -1;
   3576 }
   3577 
   3578 /*
   3579  * SSL_select_next_proto implements the standard protocol selection. It is
   3580  * expected that this function is called from the callback set by
   3581  * SSL_CTX_set_next_proto_select_cb. The protocol data is assumed to be a
   3582  * vector of 8-bit, length prefixed byte strings. The length byte itself is
   3583  * not included in the length. A byte string of length 0 is invalid. No byte
   3584  * string may be truncated. The current, but experimental algorithm for
   3585  * selecting the protocol is: 1) If the server doesn't support NPN then this
   3586  * is indicated to the callback. In this case, the client application has to
   3587  * abort the connection or have a default application level protocol. 2) If
   3588  * the server supports NPN, but advertises an empty list then the client
   3589  * selects the first protocol in its list, but indicates via the API that this
   3590  * fallback case was enacted. 3) Otherwise, the client finds the first
   3591  * protocol in the server's list that it supports and selects this protocol.
   3592  * This is because it's assumed that the server has better information about
   3593  * which protocol a client should use. 4) If the client doesn't support any
   3594  * of the server's advertised protocols, then this is treated the same as
   3595  * case 2. It returns either OPENSSL_NPN_NEGOTIATED if a common protocol was
   3596  * found, or OPENSSL_NPN_NO_OVERLAP if the fallback case was reached.
   3597  */
   3598 int SSL_select_next_proto(unsigned char **out, unsigned char *outlen,
   3599                           const unsigned char *server,
   3600                           unsigned int server_len,
   3601                           const unsigned char *client, unsigned int client_len)
   3602 {
   3603     PACKET cpkt, csubpkt, spkt, ssubpkt;
   3604 
   3605     if (!PACKET_buf_init(&cpkt, client, client_len)
   3606             || !PACKET_get_length_prefixed_1(&cpkt, &csubpkt)
   3607             || PACKET_remaining(&csubpkt) == 0) {
   3608         *out = NULL;
   3609         *outlen = 0;
   3610         return OPENSSL_NPN_NO_OVERLAP;
   3611     }
   3612 
   3613     /*
   3614      * Set the default opportunistic protocol. Will be overwritten if we find
   3615      * a match.
   3616      */
   3617     *out = (unsigned char *)PACKET_data(&csubpkt);
   3618     *outlen = (unsigned char)PACKET_remaining(&csubpkt);
   3619 
   3620     /*
   3621      * For each protocol in server preference order, see if we support it.
   3622      */
   3623     if (PACKET_buf_init(&spkt, server, server_len)) {
   3624         while (PACKET_get_length_prefixed_1(&spkt, &ssubpkt)) {
   3625             if (PACKET_remaining(&ssubpkt) == 0)
   3626                 continue; /* Invalid - ignore it */
   3627             if (PACKET_buf_init(&cpkt, client, client_len)) {
   3628                 while (PACKET_get_length_prefixed_1(&cpkt, &csubpkt)) {
   3629                     if (PACKET_equal(&csubpkt, PACKET_data(&ssubpkt),
   3630                                      PACKET_remaining(&ssubpkt))) {
   3631                         /* We found a match */
   3632                         *out = (unsigned char *)PACKET_data(&ssubpkt);
   3633                         *outlen = (unsigned char)PACKET_remaining(&ssubpkt);
   3634                         return OPENSSL_NPN_NEGOTIATED;
   3635                     }
   3636                 }
   3637                 /* Ignore spurious trailing bytes in the client list */
   3638             } else {
   3639                 /* This should never happen */
   3640                 return OPENSSL_NPN_NO_OVERLAP;
   3641             }
   3642         }
   3643         /* Ignore spurious trailing bytes in the server list */
   3644     }
   3645 
   3646     /*
   3647      * There's no overlap between our protocols and the server's list. We use
   3648      * the default opportunistic protocol selected earlier
   3649      */
   3650     return OPENSSL_NPN_NO_OVERLAP;
   3651 }
   3652 
   3653 #ifndef OPENSSL_NO_NEXTPROTONEG
   3654 /*
   3655  * SSL_get0_next_proto_negotiated sets *data and *len to point to the
   3656  * client's requested protocol for this connection and returns 0. If the
   3657  * client didn't request any protocol, then *data is set to NULL. Note that
   3658  * the client can request any protocol it chooses. The value returned from
   3659  * this function need not be a member of the list of supported protocols
   3660  * provided by the callback.
   3661  */
   3662 void SSL_get0_next_proto_negotiated(const SSL *s, const unsigned char **data,
   3663                                     unsigned *len)
   3664 {
   3665     const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
   3666 
   3667     if (sc == NULL) {
   3668         /* We have no other way to indicate error */
   3669         *data = NULL;
   3670         *len = 0;
   3671         return;
   3672     }
   3673 
   3674     *data = sc->ext.npn;
   3675     if (*data == NULL) {
   3676         *len = 0;
   3677     } else {
   3678         *len = (unsigned int)sc->ext.npn_len;
   3679     }
   3680 }
   3681 
   3682 /*
   3683  * SSL_CTX_set_npn_advertised_cb sets a callback that is called when
   3684  * a TLS server needs a list of supported protocols for Next Protocol
   3685  * Negotiation. The returned list must be in wire format.  The list is
   3686  * returned by setting |out| to point to it and |outlen| to its length. This
   3687  * memory will not be modified, but one should assume that the SSL* keeps a
   3688  * reference to it. The callback should return SSL_TLSEXT_ERR_OK if it
   3689  * wishes to advertise. Otherwise, no such extension will be included in the
   3690  * ServerHello.
   3691  */
   3692 void SSL_CTX_set_npn_advertised_cb(SSL_CTX *ctx,
   3693                                    SSL_CTX_npn_advertised_cb_func cb,
   3694                                    void *arg)
   3695 {
   3696     if (IS_QUIC_CTX(ctx))
   3697         /* NPN not allowed for QUIC */
   3698         return;
   3699 
   3700     ctx->ext.npn_advertised_cb = cb;
   3701     ctx->ext.npn_advertised_cb_arg = arg;
   3702 }
   3703 
   3704 /*
   3705  * SSL_CTX_set_next_proto_select_cb sets a callback that is called when a
   3706  * client needs to select a protocol from the server's provided list. |out|
   3707  * must be set to point to the selected protocol (which may be within |in|).
   3708  * The length of the protocol name must be written into |outlen|. The
   3709  * server's advertised protocols are provided in |in| and |inlen|. The
   3710  * callback can assume that |in| is syntactically valid. The client must
   3711  * select a protocol. It is fatal to the connection if this callback returns
   3712  * a value other than SSL_TLSEXT_ERR_OK.
   3713  */
   3714 void SSL_CTX_set_npn_select_cb(SSL_CTX *ctx,
   3715                                SSL_CTX_npn_select_cb_func cb,
   3716                                void *arg)
   3717 {
   3718     if (IS_QUIC_CTX(ctx))
   3719         /* NPN not allowed for QUIC */
   3720         return;
   3721 
   3722     ctx->ext.npn_select_cb = cb;
   3723     ctx->ext.npn_select_cb_arg = arg;
   3724 }
   3725 #endif
   3726 
   3727 static int alpn_value_ok(const unsigned char *protos, unsigned int protos_len)
   3728 {
   3729     unsigned int idx;
   3730 
   3731     if (protos_len < 2 || protos == NULL)
   3732         return 0;
   3733 
   3734     for (idx = 0; idx < protos_len; idx += protos[idx] + 1) {
   3735         if (protos[idx] == 0)
   3736             return 0;
   3737     }
   3738     return idx == protos_len;
   3739 }
   3740 /*
   3741  * SSL_CTX_set_alpn_protos sets the ALPN protocol list on |ctx| to |protos|.
   3742  * |protos| must be in wire-format (i.e. a series of non-empty, 8-bit
   3743  * length-prefixed strings). Returns 0 on success.
   3744  */
   3745 int SSL_CTX_set_alpn_protos(SSL_CTX *ctx, const unsigned char *protos,
   3746                             unsigned int protos_len)
   3747 {
   3748     unsigned char *alpn;
   3749 
   3750     if (protos_len == 0 || protos == NULL) {
   3751         OPENSSL_free(ctx->ext.alpn);
   3752         ctx->ext.alpn = NULL;
   3753         ctx->ext.alpn_len = 0;
   3754         return 0;
   3755     }
   3756     /* Not valid per RFC */
   3757     if (!alpn_value_ok(protos, protos_len))
   3758         return 1;
   3759 
   3760     alpn = OPENSSL_memdup(protos, protos_len);
   3761     if (alpn == NULL)
   3762         return 1;
   3763     OPENSSL_free(ctx->ext.alpn);
   3764     ctx->ext.alpn = alpn;
   3765     ctx->ext.alpn_len = protos_len;
   3766 
   3767     return 0;
   3768 }
   3769 
   3770 /*
   3771  * SSL_set_alpn_protos sets the ALPN protocol list on |ssl| to |protos|.
   3772  * |protos| must be in wire-format (i.e. a series of non-empty, 8-bit
   3773  * length-prefixed strings). Returns 0 on success.
   3774  */
   3775 int SSL_set_alpn_protos(SSL *ssl, const unsigned char *protos,
   3776                         unsigned int protos_len)
   3777 {
   3778     unsigned char *alpn;
   3779     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(ssl);
   3780 
   3781     if (sc == NULL)
   3782         return 1;
   3783 
   3784     if (protos_len == 0 || protos == NULL) {
   3785         OPENSSL_free(sc->ext.alpn);
   3786         sc->ext.alpn = NULL;
   3787         sc->ext.alpn_len = 0;
   3788         return 0;
   3789     }
   3790     /* Not valid per RFC */
   3791     if (!alpn_value_ok(protos, protos_len))
   3792         return 1;
   3793 
   3794     alpn = OPENSSL_memdup(protos, protos_len);
   3795     if (alpn == NULL)
   3796         return 1;
   3797     OPENSSL_free(sc->ext.alpn);
   3798     sc->ext.alpn = alpn;
   3799     sc->ext.alpn_len = protos_len;
   3800 
   3801     return 0;
   3802 }
   3803 
   3804 /*
   3805  * SSL_CTX_set_alpn_select_cb sets a callback function on |ctx| that is
   3806  * called during ClientHello processing in order to select an ALPN protocol
   3807  * from the client's list of offered protocols.
   3808  */
   3809 void SSL_CTX_set_alpn_select_cb(SSL_CTX *ctx,
   3810                                 SSL_CTX_alpn_select_cb_func cb,
   3811                                 void *arg)
   3812 {
   3813     ctx->ext.alpn_select_cb = cb;
   3814     ctx->ext.alpn_select_cb_arg = arg;
   3815 }
   3816 
   3817 /*
   3818  * SSL_get0_alpn_selected gets the selected ALPN protocol (if any) from |ssl|.
   3819  * On return it sets |*data| to point to |*len| bytes of protocol name
   3820  * (not including the leading length-prefix byte). If the server didn't
   3821  * respond with a negotiated protocol then |*len| will be zero.
   3822  */
   3823 void SSL_get0_alpn_selected(const SSL *ssl, const unsigned char **data,
   3824                             unsigned int *len)
   3825 {
   3826     const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(ssl);
   3827 
   3828     if (sc == NULL) {
   3829         /* We have no other way to indicate error */
   3830         *data = NULL;
   3831         *len = 0;
   3832         return;
   3833     }
   3834 
   3835     *data = sc->s3.alpn_selected;
   3836     if (*data == NULL)
   3837         *len = 0;
   3838     else
   3839         *len = (unsigned int)sc->s3.alpn_selected_len;
   3840 }
   3841 
   3842 int SSL_export_keying_material(SSL *s, unsigned char *out, size_t olen,
   3843                                const char *label, size_t llen,
   3844                                const unsigned char *context, size_t contextlen,
   3845                                int use_context)
   3846 {
   3847     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   3848 
   3849     if (sc == NULL)
   3850         return -1;
   3851 
   3852     if (sc->session == NULL
   3853         || (sc->version < TLS1_VERSION && sc->version != DTLS1_BAD_VER))
   3854         return -1;
   3855 
   3856     return sc->ssl.method->ssl3_enc->export_keying_material(sc, out, olen, label,
   3857                                                             llen, context,
   3858                                                             contextlen,
   3859                                                             use_context);
   3860 }
   3861 
   3862 int SSL_export_keying_material_early(SSL *s, unsigned char *out, size_t olen,
   3863                                      const char *label, size_t llen,
   3864                                      const unsigned char *context,
   3865                                      size_t contextlen)
   3866 {
   3867     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   3868 
   3869     if (sc == NULL)
   3870         return -1;
   3871 
   3872     if (sc->version != TLS1_3_VERSION)
   3873         return 0;
   3874 
   3875     return tls13_export_keying_material_early(sc, out, olen, label, llen,
   3876                                               context, contextlen);
   3877 }
   3878 
   3879 static unsigned long ssl_session_hash(const SSL_SESSION *a)
   3880 {
   3881     const unsigned char *session_id = a->session_id;
   3882     unsigned long l;
   3883     unsigned char tmp_storage[4];
   3884 
   3885     if (a->session_id_length < sizeof(tmp_storage)) {
   3886         memset(tmp_storage, 0, sizeof(tmp_storage));
   3887         memcpy(tmp_storage, a->session_id, a->session_id_length);
   3888         session_id = tmp_storage;
   3889     }
   3890 
   3891     l = (unsigned long)
   3892         ((unsigned long)session_id[0]) |
   3893         ((unsigned long)session_id[1] << 8L) |
   3894         ((unsigned long)session_id[2] << 16L) |
   3895         ((unsigned long)session_id[3] << 24L);
   3896     return l;
   3897 }
   3898 
   3899 /*
   3900  * NB: If this function (or indeed the hash function which uses a sort of
   3901  * coarser function than this one) is changed, ensure
   3902  * SSL_CTX_has_matching_session_id() is checked accordingly. It relies on
   3903  * being able to construct an SSL_SESSION that will collide with any existing
   3904  * session with a matching session ID.
   3905  */
   3906 static int ssl_session_cmp(const SSL_SESSION *a, const SSL_SESSION *b)
   3907 {
   3908     if (a->ssl_version != b->ssl_version)
   3909         return 1;
   3910     if (a->session_id_length != b->session_id_length)
   3911         return 1;
   3912     return memcmp(a->session_id, b->session_id, a->session_id_length);
   3913 }
   3914 
   3915 #ifndef OPENSSL_NO_SSLKEYLOG
   3916 /**
   3917  * @brief Static initialization for a one-time action to initialize the SSL key log.
   3918  */
   3919 static CRYPTO_ONCE ssl_keylog_once = CRYPTO_ONCE_STATIC_INIT;
   3920 
   3921 /**
   3922  * @brief Pointer to a read-write lock used to protect access to the key log.
   3923  */
   3924 static CRYPTO_RWLOCK *keylog_lock = NULL;
   3925 
   3926 /**
   3927  * @brief Pointer to a BIO structure used for writing the key log information.
   3928  */
   3929 static BIO *keylog_bio = NULL;
   3930 
   3931 /**
   3932  * @brief Initializes the SSLKEYLOGFILE lock.
   3933  *
   3934  * @return 1 on success, 0 on failure.
   3935  */
   3936 DEFINE_RUN_ONCE_STATIC(ssl_keylog_init)
   3937 {
   3938     keylog_lock = CRYPTO_THREAD_lock_new();
   3939     if (keylog_lock == NULL)
   3940         return 0;
   3941     return 1;
   3942 }
   3943 
   3944 /**
   3945  * @brief checks when a BIO refcount has reached zero, and sets
   3946  * keylog_cb to NULL if it has
   3947  *
   3948  * @returns 1 always
   3949  */
   3950 static long check_keylog_bio_free(BIO *b, int oper, const char *argp,
   3951                                   size_t len, int argi, long argl, int ret,
   3952                                   size_t *processed)
   3953 {
   3954 
   3955     /*
   3956      * Note we _dont_ take the keylog_lock here
   3957      * This is intentional, because we only free the keylog lock
   3958      * During SSL_CTX_free, in which we already posess the lock, so
   3959      * Theres no need to grab it again here
   3960      */
   3961     if (oper == BIO_CB_FREE)
   3962         keylog_bio = NULL;
   3963     return ret;
   3964 }
   3965 
   3966 /**
   3967  * @brief records ssl secrets to a file
   3968  */
   3969 static void do_sslkeylogfile(const SSL *ssl, const char *line)
   3970 {
   3971     if (keylog_lock == NULL)
   3972         return;
   3973 
   3974     if (!CRYPTO_THREAD_write_lock(keylog_lock))
   3975         return;
   3976     if (keylog_bio != NULL) {
   3977         BIO_printf(keylog_bio, "%s\n", line);
   3978         (void)BIO_flush(keylog_bio);
   3979     }
   3980     CRYPTO_THREAD_unlock(keylog_lock);
   3981 }
   3982 #endif
   3983 
   3984 /*
   3985  * These wrapper functions should remain rather than redeclaring
   3986  * SSL_SESSION_hash and SSL_SESSION_cmp for void* types and casting each
   3987  * variable. The reason is that the functions aren't static, they're exposed
   3988  * via ssl.h.
   3989  */
   3990 
   3991 #ifndef OPENSSL_NO_SSLKEYLOG
   3992 static BIO *get_sslkeylog_bio(const char *keylogfile)
   3993 {
   3994 # ifdef _POSIX_C_SOURCE
   3995     BIO *b;
   3996     int fdno = -1;
   3997     FILE *fp = NULL;
   3998 
   3999     fdno = open(keylogfile, O_WRONLY | O_CREAT | O_APPEND,  0600);
   4000     if (fdno < 0)
   4001         return NULL;
   4002 
   4003     fp = fdopen(fdno, "a");
   4004     if (fp == NULL) {
   4005         close(fdno);
   4006         return NULL;
   4007     }
   4008 
   4009     if ((b = BIO_new_fp(fp, BIO_CLOSE)) == NULL)
   4010         fclose(fp);
   4011     return b;
   4012 # else
   4013     return BIO_new_file(keylogfile, "a");
   4014 # endif
   4015 }
   4016 #endif
   4017 
   4018 SSL_CTX *SSL_CTX_new_ex(OSSL_LIB_CTX *libctx, const char *propq,
   4019                         const SSL_METHOD *meth)
   4020 {
   4021     SSL_CTX *ret = NULL;
   4022 #ifndef OPENSSL_NO_SSLKEYLOG
   4023     const char *keylogfile = ossl_safe_getenv("SSLKEYLOGFILE");
   4024 #endif
   4025 #ifndef OPENSSL_NO_COMP_ALG
   4026     int i;
   4027 #endif
   4028 
   4029     if (meth == NULL) {
   4030         ERR_raise(ERR_LIB_SSL, SSL_R_NULL_SSL_METHOD_PASSED);
   4031         return NULL;
   4032     }
   4033 
   4034     if (!OPENSSL_init_ssl(OPENSSL_INIT_LOAD_SSL_STRINGS, NULL))
   4035         return NULL;
   4036 
   4037     /* Doing this for the run once effect */
   4038     if (SSL_get_ex_data_X509_STORE_CTX_idx() < 0) {
   4039         ERR_raise(ERR_LIB_SSL, SSL_R_X509_VERIFICATION_SETUP_PROBLEMS);
   4040         goto err;
   4041     }
   4042 
   4043     ret = OPENSSL_zalloc(sizeof(*ret));
   4044     if (ret == NULL)
   4045         return NULL;
   4046 
   4047     /* Init the reference counting before any call to SSL_CTX_free */
   4048     if (!CRYPTO_NEW_REF(&ret->references, 1)) {
   4049         OPENSSL_free(ret);
   4050         return NULL;
   4051     }
   4052 
   4053     ret->lock = CRYPTO_THREAD_lock_new();
   4054     if (ret->lock == NULL) {
   4055         ERR_raise(ERR_LIB_SSL, ERR_R_CRYPTO_LIB);
   4056         goto err;
   4057     }
   4058 
   4059 #ifdef TSAN_REQUIRES_LOCKING
   4060     ret->tsan_lock = CRYPTO_THREAD_lock_new();
   4061     if (ret->tsan_lock == NULL) {
   4062         ERR_raise(ERR_LIB_SSL, ERR_R_CRYPTO_LIB);
   4063         goto err;
   4064     }
   4065 #endif
   4066 
   4067     ret->libctx = libctx;
   4068     if (propq != NULL) {
   4069         ret->propq = OPENSSL_strdup(propq);
   4070         if (ret->propq == NULL)
   4071             goto err;
   4072     }
   4073 
   4074     ret->method = meth;
   4075     ret->min_proto_version = 0;
   4076     ret->max_proto_version = 0;
   4077     ret->mode = SSL_MODE_AUTO_RETRY;
   4078     ret->session_cache_mode = SSL_SESS_CACHE_SERVER;
   4079     ret->session_cache_size = SSL_SESSION_CACHE_MAX_SIZE_DEFAULT;
   4080     /* We take the system default. */
   4081     ret->session_timeout = meth->get_timeout();
   4082     ret->max_cert_list = SSL_MAX_CERT_LIST_DEFAULT;
   4083     ret->verify_mode = SSL_VERIFY_NONE;
   4084 
   4085     ret->sessions = lh_SSL_SESSION_new(ssl_session_hash, ssl_session_cmp);
   4086     if (ret->sessions == NULL) {
   4087         ERR_raise(ERR_LIB_SSL, ERR_R_CRYPTO_LIB);
   4088         goto err;
   4089     }
   4090     ret->cert_store = X509_STORE_new();
   4091     if (ret->cert_store == NULL) {
   4092         ERR_raise(ERR_LIB_SSL, ERR_R_X509_LIB);
   4093         goto err;
   4094     }
   4095 #ifndef OPENSSL_NO_CT
   4096     ret->ctlog_store = CTLOG_STORE_new_ex(libctx, propq);
   4097     if (ret->ctlog_store == NULL) {
   4098         ERR_raise(ERR_LIB_SSL, ERR_R_CT_LIB);
   4099         goto err;
   4100     }
   4101 #endif
   4102 
   4103     /* initialize cipher/digest methods table */
   4104     if (!ssl_load_ciphers(ret)) {
   4105         ERR_raise(ERR_LIB_SSL, ERR_R_SSL_LIB);
   4106         goto err;
   4107     }
   4108 
   4109     if (!ssl_load_groups(ret)) {
   4110         ERR_raise(ERR_LIB_SSL, ERR_R_SSL_LIB);
   4111         goto err;
   4112     }
   4113 
   4114     /* load provider sigalgs */
   4115     if (!ssl_load_sigalgs(ret)) {
   4116         ERR_raise(ERR_LIB_SSL, ERR_R_SSL_LIB);
   4117         goto err;
   4118     }
   4119 
   4120     /* initialise sig algs */
   4121     if (!ssl_setup_sigalgs(ret)) {
   4122         ERR_raise(ERR_LIB_SSL, ERR_R_SSL_LIB);
   4123         goto err;
   4124     }
   4125 
   4126     if (!SSL_CTX_set_ciphersuites(ret, OSSL_default_ciphersuites())) {
   4127         ERR_raise(ERR_LIB_SSL, ERR_R_SSL_LIB);
   4128         goto err;
   4129     }
   4130 
   4131     if ((ret->cert = ssl_cert_new(SSL_PKEY_NUM + ret->sigalg_list_len)) == NULL) {
   4132         ERR_raise(ERR_LIB_SSL, ERR_R_SSL_LIB);
   4133         goto err;
   4134     }
   4135 
   4136     if (!ssl_create_cipher_list(ret,
   4137                                 ret->tls13_ciphersuites,
   4138                                 &ret->cipher_list, &ret->cipher_list_by_id,
   4139                                 OSSL_default_cipher_list(), ret->cert)
   4140         || sk_SSL_CIPHER_num(ret->cipher_list) <= 0) {
   4141         ERR_raise(ERR_LIB_SSL, SSL_R_LIBRARY_HAS_NO_CIPHERS);
   4142         goto err;
   4143     }
   4144 
   4145     ret->param = X509_VERIFY_PARAM_new();
   4146     if (ret->param == NULL) {
   4147         ERR_raise(ERR_LIB_SSL, ERR_R_X509_LIB);
   4148         goto err;
   4149     }
   4150 
   4151     /*
   4152      * If these aren't available from the provider we'll get NULL returns.
   4153      * That's fine but will cause errors later if SSLv3 is negotiated
   4154      */
   4155     ret->md5 = ssl_evp_md_fetch(libctx, NID_md5, propq);
   4156     ret->sha1 = ssl_evp_md_fetch(libctx, NID_sha1, propq);
   4157 
   4158     if ((ret->ca_names = sk_X509_NAME_new_null()) == NULL) {
   4159         ERR_raise(ERR_LIB_SSL, ERR_R_CRYPTO_LIB);
   4160         goto err;
   4161     }
   4162 
   4163     if ((ret->client_ca_names = sk_X509_NAME_new_null()) == NULL) {
   4164         ERR_raise(ERR_LIB_SSL, ERR_R_CRYPTO_LIB);
   4165         goto err;
   4166     }
   4167 
   4168     if (!CRYPTO_new_ex_data(CRYPTO_EX_INDEX_SSL_CTX, ret, &ret->ex_data)) {
   4169         ERR_raise(ERR_LIB_SSL, ERR_R_CRYPTO_LIB);
   4170         goto err;
   4171     }
   4172 
   4173     if ((ret->ext.secure = OPENSSL_secure_zalloc(sizeof(*ret->ext.secure))) == NULL)
   4174         goto err;
   4175 
   4176     /* No compression for DTLS */
   4177     if (!(meth->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS))
   4178         ret->comp_methods = SSL_COMP_get_compression_methods();
   4179 
   4180     ret->max_send_fragment = SSL3_RT_MAX_PLAIN_LENGTH;
   4181     ret->split_send_fragment = SSL3_RT_MAX_PLAIN_LENGTH;
   4182 
   4183     /* Setup RFC5077 ticket keys */
   4184     if ((RAND_bytes_ex(libctx, ret->ext.tick_key_name,
   4185                        sizeof(ret->ext.tick_key_name), 0) <= 0)
   4186         || (RAND_priv_bytes_ex(libctx, ret->ext.secure->tick_hmac_key,
   4187                                sizeof(ret->ext.secure->tick_hmac_key), 0) <= 0)
   4188         || (RAND_priv_bytes_ex(libctx, ret->ext.secure->tick_aes_key,
   4189                                sizeof(ret->ext.secure->tick_aes_key), 0) <= 0))
   4190         ret->options |= SSL_OP_NO_TICKET;
   4191 
   4192     if (RAND_priv_bytes_ex(libctx, ret->ext.cookie_hmac_key,
   4193                            sizeof(ret->ext.cookie_hmac_key), 0) <= 0) {
   4194         ERR_raise(ERR_LIB_SSL, ERR_R_RAND_LIB);
   4195         goto err;
   4196     }
   4197 
   4198 #ifndef OPENSSL_NO_SRP
   4199     if (!ssl_ctx_srp_ctx_init_intern(ret)) {
   4200         ERR_raise(ERR_LIB_SSL, ERR_R_SSL_LIB);
   4201         goto err;
   4202     }
   4203 #endif
   4204 #ifndef OPENSSL_NO_ENGINE
   4205 # ifdef OPENSSL_SSL_CLIENT_ENGINE_AUTO
   4206 #  define eng_strx(x)     #x
   4207 #  define eng_str(x)      eng_strx(x)
   4208     /* Use specific client engine automatically... ignore errors */
   4209     {
   4210         ENGINE *eng;
   4211         eng = ENGINE_by_id(eng_str(OPENSSL_SSL_CLIENT_ENGINE_AUTO));
   4212         if (!eng) {
   4213             ERR_clear_error();
   4214             ENGINE_load_builtin_engines();
   4215             eng = ENGINE_by_id(eng_str(OPENSSL_SSL_CLIENT_ENGINE_AUTO));
   4216         }
   4217         if (!eng || !SSL_CTX_set_client_cert_engine(ret, eng))
   4218             ERR_clear_error();
   4219     }
   4220 # endif
   4221 #endif
   4222 
   4223 #ifndef OPENSSL_NO_COMP_ALG
   4224     /*
   4225      * Set the default order: brotli, zlib, zstd
   4226      * Including only those enabled algorithms
   4227      */
   4228     memset(ret->cert_comp_prefs, 0, sizeof(ret->cert_comp_prefs));
   4229     i = 0;
   4230     if (ossl_comp_has_alg(TLSEXT_comp_cert_brotli))
   4231         ret->cert_comp_prefs[i++] = TLSEXT_comp_cert_brotli;
   4232     if (ossl_comp_has_alg(TLSEXT_comp_cert_zlib))
   4233         ret->cert_comp_prefs[i++] = TLSEXT_comp_cert_zlib;
   4234     if (ossl_comp_has_alg(TLSEXT_comp_cert_zstd))
   4235         ret->cert_comp_prefs[i++] = TLSEXT_comp_cert_zstd;
   4236 #endif
   4237     /*
   4238      * Disable compression by default to prevent CRIME. Applications can
   4239      * re-enable compression by configuring
   4240      * SSL_CTX_clear_options(ctx, SSL_OP_NO_COMPRESSION);
   4241      * or by using the SSL_CONF library. Similarly we also enable TLSv1.3
   4242      * middlebox compatibility by default. This may be disabled by default in
   4243      * a later OpenSSL version.
   4244      */
   4245     ret->options |= SSL_OP_NO_COMPRESSION | SSL_OP_ENABLE_MIDDLEBOX_COMPAT;
   4246 
   4247     ret->ext.status_type = TLSEXT_STATUSTYPE_nothing;
   4248 
   4249     /*
   4250      * We cannot usefully set a default max_early_data here (which gets
   4251      * propagated in SSL_new(), for the following reason: setting the
   4252      * SSL field causes tls_construct_stoc_early_data() to tell the
   4253      * client that early data will be accepted when constructing a TLS 1.3
   4254      * session ticket, and the client will accordingly send us early data
   4255      * when using that ticket (if the client has early data to send).
   4256      * However, in order for the early data to actually be consumed by
   4257      * the application, the application must also have calls to
   4258      * SSL_read_early_data(); otherwise we'll just skip past the early data
   4259      * and ignore it.  So, since the application must add calls to
   4260      * SSL_read_early_data(), we also require them to add
   4261      * calls to SSL_CTX_set_max_early_data() in order to use early data,
   4262      * eliminating the bandwidth-wasting early data in the case described
   4263      * above.
   4264      */
   4265     ret->max_early_data = 0;
   4266 
   4267     /*
   4268      * Default recv_max_early_data is a fully loaded single record. Could be
   4269      * split across multiple records in practice. We set this differently to
   4270      * max_early_data so that, in the default case, we do not advertise any
   4271      * support for early_data, but if a client were to send us some (e.g.
   4272      * because of an old, stale ticket) then we will tolerate it and skip over
   4273      * it.
   4274      */
   4275     ret->recv_max_early_data = SSL3_RT_MAX_PLAIN_LENGTH;
   4276 
   4277     /* By default we send two session tickets automatically in TLSv1.3 */
   4278     ret->num_tickets = 2;
   4279 
   4280 # ifndef OPENSSL_NO_QUIC
   4281     /* only create a cache for client CTX-es */
   4282     if (meth == OSSL_QUIC_client_method())
   4283         if ((ret->tokencache = ossl_quic_new_token_store()) == NULL)
   4284             goto err;
   4285     ret->domain_flags = 0;
   4286     if (IS_QUIC_METHOD(meth)) {
   4287 #  if defined(OPENSSL_THREADS)
   4288         if (meth == OSSL_QUIC_client_thread_method())
   4289             ret->domain_flags
   4290                 = SSL_DOMAIN_FLAG_MULTI_THREAD
   4291                 | SSL_DOMAIN_FLAG_THREAD_ASSISTED
   4292                 | SSL_DOMAIN_FLAG_BLOCKING;
   4293         else
   4294             ret->domain_flags
   4295                 = SSL_DOMAIN_FLAG_MULTI_THREAD
   4296                 | SSL_DOMAIN_FLAG_LEGACY_BLOCKING;
   4297 #  else
   4298         ret->domain_flags
   4299             = SSL_DOMAIN_FLAG_SINGLE_THREAD
   4300             | SSL_DOMAIN_FLAG_LEGACY_BLOCKING;
   4301 #  endif
   4302     }
   4303 # endif
   4304 
   4305     if (!ssl_ctx_system_config(ret)) {
   4306         ERR_raise(ERR_LIB_SSL, SSL_R_ERROR_IN_SYSTEM_DEFAULT_CONFIG);
   4307         goto err;
   4308     }
   4309 
   4310 #ifndef OPENSSL_NO_SSLKEYLOG
   4311     if (keylogfile != NULL && strlen(keylogfile) != 0) {
   4312         /* Make sure we have a global lock allocated */
   4313         if (!RUN_ONCE(&ssl_keylog_once, ssl_keylog_init)) {
   4314             /* use a trace message as a warning */
   4315             OSSL_TRACE(TLS, "Unable to initalize keylog data\n");
   4316             goto out;
   4317         }
   4318 
   4319         /* Grab our global lock */
   4320         if (!CRYPTO_THREAD_write_lock(keylog_lock)) {
   4321             OSSL_TRACE(TLS, "Unable to acquire keylog write lock\n");
   4322             goto out;
   4323         } else {
   4324             /*
   4325              * If the bio for the requested keylog file hasn't been
   4326              * created yet, go ahead and create it, and set it to append
   4327              * if its already there.
   4328              */
   4329             if (keylog_bio == NULL) {
   4330                 keylog_bio = get_sslkeylog_bio(keylogfile);
   4331                 if (keylog_bio == NULL) {
   4332                     OSSL_TRACE(TLS, "Unable to create keylog bio\n");
   4333                     goto out;
   4334                 }
   4335                 BIO_set_callback_ex(keylog_bio, check_keylog_bio_free);
   4336             } else {
   4337                 /* up our refcount for the already-created case */
   4338                 BIO_up_ref(keylog_bio);
   4339             }
   4340             /* If we have a bio now, assign the callback handler */
   4341             if (keylog_bio != NULL)
   4342                 ret->do_sslkeylog = 1;
   4343             /* unlock, and we're done */
   4344             CRYPTO_THREAD_unlock(keylog_lock);
   4345         }
   4346     }
   4347 out:
   4348 #endif
   4349     return ret;
   4350  err:
   4351     SSL_CTX_free(ret);
   4352 #ifndef OPENSSL_NO_SSLKEYLOG
   4353     BIO_free(keylog_bio);
   4354 #endif
   4355     return NULL;
   4356 }
   4357 
   4358 SSL_CTX *SSL_CTX_new(const SSL_METHOD *meth)
   4359 {
   4360     return SSL_CTX_new_ex(NULL, NULL, meth);
   4361 }
   4362 
   4363 int SSL_CTX_up_ref(SSL_CTX *ctx)
   4364 {
   4365     int i;
   4366 
   4367     if (CRYPTO_UP_REF(&ctx->references, &i) <= 0)
   4368         return 0;
   4369 
   4370     REF_PRINT_COUNT("SSL_CTX", i, ctx);
   4371     REF_ASSERT_ISNT(i < 2);
   4372     return ((i > 1) ? 1 : 0);
   4373 }
   4374 
   4375 void SSL_CTX_free(SSL_CTX *a)
   4376 {
   4377     int i;
   4378     size_t j;
   4379 
   4380     if (a == NULL)
   4381         return;
   4382 
   4383     CRYPTO_DOWN_REF(&a->references, &i);
   4384     REF_PRINT_COUNT("SSL_CTX", i, a);
   4385     if (i > 0)
   4386         return;
   4387     REF_ASSERT_ISNT(i < 0);
   4388 
   4389 #ifndef OPENSSL_NO_SSLKEYLOG
   4390     if (keylog_lock != NULL && CRYPTO_THREAD_write_lock(keylog_lock)) {
   4391         if (a->do_sslkeylog == 1)
   4392             BIO_free(keylog_bio);
   4393         a->do_sslkeylog = 0;
   4394         CRYPTO_THREAD_unlock(keylog_lock);
   4395     }
   4396 #endif
   4397 
   4398     X509_VERIFY_PARAM_free(a->param);
   4399     dane_ctx_final(&a->dane);
   4400 
   4401     /*
   4402      * Free internal session cache. However: the remove_cb() may reference
   4403      * the ex_data of SSL_CTX, thus the ex_data store can only be removed
   4404      * after the sessions were flushed.
   4405      * As the ex_data handling routines might also touch the session cache,
   4406      * the most secure solution seems to be: empty (flush) the cache, then
   4407      * free ex_data, then finally free the cache.
   4408      * (See ticket [openssl.org #212].)
   4409      */
   4410     if (a->sessions != NULL)
   4411         SSL_CTX_flush_sessions_ex(a, 0);
   4412 
   4413     CRYPTO_free_ex_data(CRYPTO_EX_INDEX_SSL_CTX, a, &a->ex_data);
   4414     lh_SSL_SESSION_free(a->sessions);
   4415     X509_STORE_free(a->cert_store);
   4416 #ifndef OPENSSL_NO_CT
   4417     CTLOG_STORE_free(a->ctlog_store);
   4418 #endif
   4419     sk_SSL_CIPHER_free(a->cipher_list);
   4420     sk_SSL_CIPHER_free(a->cipher_list_by_id);
   4421     sk_SSL_CIPHER_free(a->tls13_ciphersuites);
   4422     ssl_cert_free(a->cert);
   4423     sk_X509_NAME_pop_free(a->ca_names, X509_NAME_free);
   4424     sk_X509_NAME_pop_free(a->client_ca_names, X509_NAME_free);
   4425     OSSL_STACK_OF_X509_free(a->extra_certs);
   4426     a->comp_methods = NULL;
   4427 #ifndef OPENSSL_NO_SRTP
   4428     sk_SRTP_PROTECTION_PROFILE_free(a->srtp_profiles);
   4429 #endif
   4430 #ifndef OPENSSL_NO_SRP
   4431     ssl_ctx_srp_ctx_free_intern(a);
   4432 #endif
   4433 #ifndef OPENSSL_NO_ENGINE
   4434     tls_engine_finish(a->client_cert_engine);
   4435 #endif
   4436 
   4437     OPENSSL_free(a->ext.ecpointformats);
   4438     OPENSSL_free(a->ext.supportedgroups);
   4439     OPENSSL_free(a->ext.keyshares);
   4440     OPENSSL_free(a->ext.tuples);
   4441     OPENSSL_free(a->ext.alpn);
   4442     OPENSSL_secure_free(a->ext.secure);
   4443 
   4444     ssl_evp_md_free(a->md5);
   4445     ssl_evp_md_free(a->sha1);
   4446 
   4447     for (j = 0; j < SSL_ENC_NUM_IDX; j++)
   4448         ssl_evp_cipher_free(a->ssl_cipher_methods[j]);
   4449     for (j = 0; j < SSL_MD_NUM_IDX; j++)
   4450         ssl_evp_md_free(a->ssl_digest_methods[j]);
   4451     for (j = 0; j < a->group_list_len; j++) {
   4452         OPENSSL_free(a->group_list[j].tlsname);
   4453         OPENSSL_free(a->group_list[j].realname);
   4454         OPENSSL_free(a->group_list[j].algorithm);
   4455     }
   4456     OPENSSL_free(a->group_list);
   4457     for (j = 0; j < a->sigalg_list_len; j++) {
   4458         OPENSSL_free(a->sigalg_list[j].name);
   4459         OPENSSL_free(a->sigalg_list[j].sigalg_name);
   4460         OPENSSL_free(a->sigalg_list[j].sigalg_oid);
   4461         OPENSSL_free(a->sigalg_list[j].sig_name);
   4462         OPENSSL_free(a->sigalg_list[j].sig_oid);
   4463         OPENSSL_free(a->sigalg_list[j].hash_name);
   4464         OPENSSL_free(a->sigalg_list[j].hash_oid);
   4465         OPENSSL_free(a->sigalg_list[j].keytype);
   4466         OPENSSL_free(a->sigalg_list[j].keytype_oid);
   4467     }
   4468     OPENSSL_free(a->sigalg_list);
   4469     OPENSSL_free(a->ssl_cert_info);
   4470 
   4471     OPENSSL_free(a->sigalg_lookup_cache);
   4472     OPENSSL_free(a->tls12_sigalgs);
   4473 
   4474     OPENSSL_free(a->client_cert_type);
   4475     OPENSSL_free(a->server_cert_type);
   4476 
   4477     CRYPTO_THREAD_lock_free(a->lock);
   4478     CRYPTO_FREE_REF(&a->references);
   4479 #ifdef TSAN_REQUIRES_LOCKING
   4480     CRYPTO_THREAD_lock_free(a->tsan_lock);
   4481 #endif
   4482 
   4483     OPENSSL_free(a->propq);
   4484 #ifndef OPENSSL_NO_QLOG
   4485     OPENSSL_free(a->qlog_title);
   4486 #endif
   4487 
   4488 #ifndef OPENSSL_NO_QUIC
   4489     ossl_quic_free_token_store(a->tokencache);
   4490 #endif
   4491 
   4492     OPENSSL_free(a);
   4493 }
   4494 
   4495 void SSL_CTX_set_default_passwd_cb(SSL_CTX *ctx, pem_password_cb *cb)
   4496 {
   4497     ctx->default_passwd_callback = cb;
   4498 }
   4499 
   4500 void SSL_CTX_set_default_passwd_cb_userdata(SSL_CTX *ctx, void *u)
   4501 {
   4502     ctx->default_passwd_callback_userdata = u;
   4503 }
   4504 
   4505 pem_password_cb *SSL_CTX_get_default_passwd_cb(SSL_CTX *ctx)
   4506 {
   4507     return ctx->default_passwd_callback;
   4508 }
   4509 
   4510 void *SSL_CTX_get_default_passwd_cb_userdata(SSL_CTX *ctx)
   4511 {
   4512     return ctx->default_passwd_callback_userdata;
   4513 }
   4514 
   4515 void SSL_set_default_passwd_cb(SSL *s, pem_password_cb *cb)
   4516 {
   4517     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   4518 
   4519     if (sc == NULL)
   4520         return;
   4521 
   4522     sc->default_passwd_callback = cb;
   4523 }
   4524 
   4525 void SSL_set_default_passwd_cb_userdata(SSL *s, void *u)
   4526 {
   4527     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   4528 
   4529     if (sc == NULL)
   4530         return;
   4531 
   4532     sc->default_passwd_callback_userdata = u;
   4533 }
   4534 
   4535 pem_password_cb *SSL_get_default_passwd_cb(SSL *s)
   4536 {
   4537     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   4538 
   4539     if (sc == NULL)
   4540         return NULL;
   4541 
   4542     return sc->default_passwd_callback;
   4543 }
   4544 
   4545 void *SSL_get_default_passwd_cb_userdata(SSL *s)
   4546 {
   4547     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   4548 
   4549     if (sc == NULL)
   4550         return NULL;
   4551 
   4552     return sc->default_passwd_callback_userdata;
   4553 }
   4554 
   4555 void SSL_CTX_set_cert_verify_callback(SSL_CTX *ctx,
   4556                                       int (*cb) (X509_STORE_CTX *, void *),
   4557                                       void *arg)
   4558 {
   4559     ctx->app_verify_callback = cb;
   4560     ctx->app_verify_arg = arg;
   4561 }
   4562 
   4563 void SSL_CTX_set_verify(SSL_CTX *ctx, int mode,
   4564                         int (*cb) (int, X509_STORE_CTX *))
   4565 {
   4566     ctx->verify_mode = mode;
   4567     ctx->default_verify_callback = cb;
   4568 }
   4569 
   4570 void SSL_CTX_set_verify_depth(SSL_CTX *ctx, int depth)
   4571 {
   4572     X509_VERIFY_PARAM_set_depth(ctx->param, depth);
   4573 }
   4574 
   4575 void SSL_CTX_set_cert_cb(SSL_CTX *c, int (*cb) (SSL *ssl, void *arg), void *arg)
   4576 {
   4577     ssl_cert_set_cert_cb(c->cert, cb, arg);
   4578 }
   4579 
   4580 void SSL_set_cert_cb(SSL *s, int (*cb) (SSL *ssl, void *arg), void *arg)
   4581 {
   4582     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   4583 
   4584     if (sc == NULL)
   4585         return;
   4586 
   4587     ssl_cert_set_cert_cb(sc->cert, cb, arg);
   4588 }
   4589 
   4590 void ssl_set_masks(SSL_CONNECTION *s)
   4591 {
   4592     CERT *c = s->cert;
   4593     uint32_t *pvalid = s->s3.tmp.valid_flags;
   4594     int rsa_enc, rsa_sign, dh_tmp, dsa_sign;
   4595     unsigned long mask_k, mask_a;
   4596     int have_ecc_cert, ecdsa_ok;
   4597 
   4598     if (c == NULL)
   4599         return;
   4600 
   4601     dh_tmp = (c->dh_tmp != NULL
   4602               || c->dh_tmp_cb != NULL
   4603               || c->dh_tmp_auto);
   4604 
   4605     rsa_enc = pvalid[SSL_PKEY_RSA] & CERT_PKEY_VALID;
   4606     rsa_sign = pvalid[SSL_PKEY_RSA] & CERT_PKEY_VALID;
   4607     dsa_sign = pvalid[SSL_PKEY_DSA_SIGN] & CERT_PKEY_VALID;
   4608     have_ecc_cert = pvalid[SSL_PKEY_ECC] & CERT_PKEY_VALID;
   4609     mask_k = 0;
   4610     mask_a = 0;
   4611 
   4612     OSSL_TRACE4(TLS_CIPHER, "dh_tmp=%d rsa_enc=%d rsa_sign=%d dsa_sign=%d\n",
   4613                dh_tmp, rsa_enc, rsa_sign, dsa_sign);
   4614 
   4615 #ifndef OPENSSL_NO_GOST
   4616     if (ssl_has_cert(s, SSL_PKEY_GOST12_512)) {
   4617         mask_k |= SSL_kGOST | SSL_kGOST18;
   4618         mask_a |= SSL_aGOST12;
   4619     }
   4620     if (ssl_has_cert(s, SSL_PKEY_GOST12_256)) {
   4621         mask_k |= SSL_kGOST | SSL_kGOST18;
   4622         mask_a |= SSL_aGOST12;
   4623     }
   4624     if (ssl_has_cert(s, SSL_PKEY_GOST01)) {
   4625         mask_k |= SSL_kGOST;
   4626         mask_a |= SSL_aGOST01;
   4627     }
   4628 #endif
   4629 
   4630     if (rsa_enc)
   4631         mask_k |= SSL_kRSA;
   4632 
   4633     if (dh_tmp)
   4634         mask_k |= SSL_kDHE;
   4635 
   4636     /*
   4637      * If we only have an RSA-PSS certificate allow RSA authentication
   4638      * if TLS 1.2 and peer supports it.
   4639      */
   4640 
   4641     if (rsa_enc || rsa_sign || (ssl_has_cert(s, SSL_PKEY_RSA_PSS_SIGN)
   4642                 && pvalid[SSL_PKEY_RSA_PSS_SIGN] & CERT_PKEY_EXPLICIT_SIGN
   4643                 && TLS1_get_version(&s->ssl) == TLS1_2_VERSION))
   4644         mask_a |= SSL_aRSA;
   4645 
   4646     if (dsa_sign) {
   4647         mask_a |= SSL_aDSS;
   4648     }
   4649 
   4650     mask_a |= SSL_aNULL;
   4651 
   4652     /*
   4653      * You can do anything with an RPK key, since there's no cert to restrict it
   4654      * But we need to check for private keys
   4655      */
   4656     if (pvalid[SSL_PKEY_RSA] & CERT_PKEY_RPK) {
   4657         mask_a |= SSL_aRSA;
   4658         mask_k |= SSL_kRSA;
   4659     }
   4660     if (pvalid[SSL_PKEY_ECC] & CERT_PKEY_RPK)
   4661         mask_a |= SSL_aECDSA;
   4662     if (TLS1_get_version(&s->ssl) == TLS1_2_VERSION) {
   4663         if (pvalid[SSL_PKEY_RSA_PSS_SIGN] & CERT_PKEY_RPK)
   4664             mask_a |= SSL_aRSA;
   4665         if (pvalid[SSL_PKEY_ED25519] & CERT_PKEY_RPK
   4666                 || pvalid[SSL_PKEY_ED448] & CERT_PKEY_RPK)
   4667             mask_a |= SSL_aECDSA;
   4668     }
   4669 
   4670     /*
   4671      * An ECC certificate may be usable for ECDH and/or ECDSA cipher suites
   4672      * depending on the key usage extension.
   4673      */
   4674     if (have_ecc_cert) {
   4675         uint32_t ex_kusage;
   4676         ex_kusage = X509_get_key_usage(c->pkeys[SSL_PKEY_ECC].x509);
   4677         ecdsa_ok = ex_kusage & X509v3_KU_DIGITAL_SIGNATURE;
   4678         if (!(pvalid[SSL_PKEY_ECC] & CERT_PKEY_SIGN))
   4679             ecdsa_ok = 0;
   4680         if (ecdsa_ok)
   4681             mask_a |= SSL_aECDSA;
   4682     }
   4683     /* Allow Ed25519 for TLS 1.2 if peer supports it */
   4684     if (!(mask_a & SSL_aECDSA) && ssl_has_cert(s, SSL_PKEY_ED25519)
   4685             && pvalid[SSL_PKEY_ED25519] & CERT_PKEY_EXPLICIT_SIGN
   4686             && TLS1_get_version(&s->ssl) == TLS1_2_VERSION)
   4687             mask_a |= SSL_aECDSA;
   4688 
   4689     /* Allow Ed448 for TLS 1.2 if peer supports it */
   4690     if (!(mask_a & SSL_aECDSA) && ssl_has_cert(s, SSL_PKEY_ED448)
   4691             && pvalid[SSL_PKEY_ED448] & CERT_PKEY_EXPLICIT_SIGN
   4692             && TLS1_get_version(&s->ssl) == TLS1_2_VERSION)
   4693             mask_a |= SSL_aECDSA;
   4694 
   4695     mask_k |= SSL_kECDHE;
   4696 
   4697 #ifndef OPENSSL_NO_PSK
   4698     mask_k |= SSL_kPSK;
   4699     mask_a |= SSL_aPSK;
   4700     if (mask_k & SSL_kRSA)
   4701         mask_k |= SSL_kRSAPSK;
   4702     if (mask_k & SSL_kDHE)
   4703         mask_k |= SSL_kDHEPSK;
   4704     if (mask_k & SSL_kECDHE)
   4705         mask_k |= SSL_kECDHEPSK;
   4706 #endif
   4707 
   4708     s->s3.tmp.mask_k = mask_k;
   4709     s->s3.tmp.mask_a = mask_a;
   4710 }
   4711 
   4712 int ssl_check_srvr_ecc_cert_and_alg(X509 *x, SSL_CONNECTION *s)
   4713 {
   4714     if (s->s3.tmp.new_cipher->algorithm_auth & SSL_aECDSA) {
   4715         /* key usage, if present, must allow signing */
   4716         if (!(X509_get_key_usage(x) & X509v3_KU_DIGITAL_SIGNATURE)) {
   4717             ERR_raise(ERR_LIB_SSL, SSL_R_ECC_CERT_NOT_FOR_SIGNING);
   4718             return 0;
   4719         }
   4720     }
   4721     return 1;                   /* all checks are ok */
   4722 }
   4723 
   4724 int ssl_get_server_cert_serverinfo(SSL_CONNECTION *s,
   4725                                    const unsigned char **serverinfo,
   4726                                    size_t *serverinfo_length)
   4727 {
   4728     CERT_PKEY *cpk = s->s3.tmp.cert;
   4729     *serverinfo_length = 0;
   4730 
   4731     if (cpk == NULL || cpk->serverinfo == NULL)
   4732         return 0;
   4733 
   4734     *serverinfo = cpk->serverinfo;
   4735     *serverinfo_length = cpk->serverinfo_length;
   4736     return 1;
   4737 }
   4738 
   4739 void ssl_update_cache(SSL_CONNECTION *s, int mode)
   4740 {
   4741     int i;
   4742 
   4743     /*
   4744      * If the session_id_length is 0, we are not supposed to cache it, and it
   4745      * would be rather hard to do anyway :-). Also if the session has already
   4746      * been marked as not_resumable we should not cache it for later reuse.
   4747      */
   4748     if (s->session->session_id_length == 0 || s->session->not_resumable)
   4749         return;
   4750 
   4751     /*
   4752      * If sid_ctx_length is 0 there is no specific application context
   4753      * associated with this session, so when we try to resume it and
   4754      * SSL_VERIFY_PEER is requested to verify the client identity, we have no
   4755      * indication that this is actually a session for the proper application
   4756      * context, and the *handshake* will fail, not just the resumption attempt.
   4757      * Do not cache (on the server) these sessions that are not resumable
   4758      * (clients can set SSL_VERIFY_PEER without needing a sid_ctx set).
   4759      */
   4760     if (s->server && s->session->sid_ctx_length == 0
   4761             && (s->verify_mode & SSL_VERIFY_PEER) != 0)
   4762         return;
   4763 
   4764     i = s->session_ctx->session_cache_mode;
   4765     if ((i & mode) != 0
   4766         && (!s->hit || SSL_CONNECTION_IS_TLS13(s))) {
   4767         /*
   4768          * Add the session to the internal cache. In server side TLSv1.3 we
   4769          * normally don't do this because by default it's a full stateless ticket
   4770          * with only a dummy session id so there is no reason to cache it,
   4771          * unless:
   4772          * - we are doing early_data, in which case we cache so that we can
   4773          *   detect replays
   4774          * - the application has set a remove_session_cb so needs to know about
   4775          *   session timeout events
   4776          * - SSL_OP_NO_TICKET is set in which case it is a stateful ticket
   4777          */
   4778         if ((i & SSL_SESS_CACHE_NO_INTERNAL_STORE) == 0
   4779                 && (!SSL_CONNECTION_IS_TLS13(s)
   4780                     || !s->server
   4781                     || (s->max_early_data > 0
   4782                         && (s->options & SSL_OP_NO_ANTI_REPLAY) == 0)
   4783                     || s->session_ctx->remove_session_cb != NULL
   4784                     || (s->options & SSL_OP_NO_TICKET) != 0))
   4785             SSL_CTX_add_session(s->session_ctx, s->session);
   4786 
   4787         /*
   4788          * Add the session to the external cache. We do this even in server side
   4789          * TLSv1.3 without early data because some applications just want to
   4790          * know about the creation of a session and aren't doing a full cache.
   4791          */
   4792         if (s->session_ctx->new_session_cb != NULL && SSL_SESSION_up_ref(s->session)) {
   4793             if (!s->session_ctx->new_session_cb(SSL_CONNECTION_GET_USER_SSL(s),
   4794                                                 s->session))
   4795                 SSL_SESSION_free(s->session);
   4796         }
   4797     }
   4798 
   4799     /* auto flush every 255 connections */
   4800     if ((!(i & SSL_SESS_CACHE_NO_AUTO_CLEAR)) && ((i & mode) == mode)) {
   4801         TSAN_QUALIFIER int *stat;
   4802 
   4803         if (mode & SSL_SESS_CACHE_CLIENT)
   4804             stat = &s->session_ctx->stats.sess_connect_good;
   4805         else
   4806             stat = &s->session_ctx->stats.sess_accept_good;
   4807         if ((ssl_tsan_load(s->session_ctx, stat) & 0xff) == 0xff)
   4808             SSL_CTX_flush_sessions_ex(s->session_ctx, time(NULL));
   4809     }
   4810 }
   4811 
   4812 const SSL_METHOD *SSL_CTX_get_ssl_method(const SSL_CTX *ctx)
   4813 {
   4814     return ctx->method;
   4815 }
   4816 
   4817 const SSL_METHOD *SSL_get_ssl_method(const SSL *s)
   4818 {
   4819     return s->method;
   4820 }
   4821 
   4822 int SSL_set_ssl_method(SSL *s, const SSL_METHOD *meth)
   4823 {
   4824     int ret = 1;
   4825     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   4826 
   4827     /* Not allowed for QUIC */
   4828     if (sc == NULL
   4829         || (s->type != SSL_TYPE_SSL_CONNECTION && s->method != meth)
   4830         || (s->type == SSL_TYPE_SSL_CONNECTION && IS_QUIC_METHOD(meth)))
   4831         return 0;
   4832 
   4833     if (s->method != meth) {
   4834         const SSL_METHOD *sm = s->method;
   4835         int (*hf) (SSL *) = sc->handshake_func;
   4836 
   4837         if (sm->version == meth->version)
   4838             s->method = meth;
   4839         else {
   4840             sm->ssl_deinit(s);
   4841             s->method = meth;
   4842             ret = s->method->ssl_init(s);
   4843         }
   4844 
   4845         if (hf == sm->ssl_connect)
   4846             sc->handshake_func = meth->ssl_connect;
   4847         else if (hf == sm->ssl_accept)
   4848             sc->handshake_func = meth->ssl_accept;
   4849     }
   4850     return ret;
   4851 }
   4852 
   4853 int SSL_get_error(const SSL *s, int i)
   4854 {
   4855     return ossl_ssl_get_error(s, i, /*check_err=*/1);
   4856 }
   4857 
   4858 int ossl_ssl_get_error(const SSL *s, int i, int check_err)
   4859 {
   4860     int reason;
   4861     unsigned long l;
   4862     BIO *bio;
   4863     const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
   4864 
   4865     if (i > 0)
   4866         return SSL_ERROR_NONE;
   4867 
   4868 #ifndef OPENSSL_NO_QUIC
   4869     if (IS_QUIC(s)) {
   4870         reason = ossl_quic_get_error(s, i);
   4871         if (reason != SSL_ERROR_NONE)
   4872             return reason;
   4873     }
   4874 #endif
   4875 
   4876     if (sc == NULL)
   4877         return SSL_ERROR_SSL;
   4878 
   4879     /*
   4880      * Make things return SSL_ERROR_SYSCALL when doing SSL_do_handshake etc,
   4881      * where we do encode the error
   4882      */
   4883     if (check_err && (l = ERR_peek_error()) != 0) {
   4884         if (ERR_GET_LIB(l) == ERR_LIB_SYS)
   4885             return SSL_ERROR_SYSCALL;
   4886         else
   4887             return SSL_ERROR_SSL;
   4888     }
   4889 
   4890 #ifndef OPENSSL_NO_QUIC
   4891     if (!IS_QUIC(s))
   4892 #endif
   4893     {
   4894         if (SSL_want_read(s)) {
   4895             bio = SSL_get_rbio(s);
   4896             if (BIO_should_read(bio))
   4897                 return SSL_ERROR_WANT_READ;
   4898             else if (BIO_should_write(bio))
   4899                 /*
   4900                  * This one doesn't make too much sense ... We never try to
   4901                  * write to the rbio, and an application program where rbio and
   4902                  * wbio are separate couldn't even know what it should wait for.
   4903                  * However if we ever set s->rwstate incorrectly (so that we
   4904                  * have SSL_want_read(s) instead of SSL_want_write(s)) and rbio
   4905                  * and wbio *are* the same, this test works around that bug; so
   4906                  * it might be safer to keep it.
   4907                  */
   4908                 return SSL_ERROR_WANT_WRITE;
   4909             else if (BIO_should_io_special(bio)) {
   4910                 reason = BIO_get_retry_reason(bio);
   4911                 if (reason == BIO_RR_CONNECT)
   4912                     return SSL_ERROR_WANT_CONNECT;
   4913                 else if (reason == BIO_RR_ACCEPT)
   4914                     return SSL_ERROR_WANT_ACCEPT;
   4915                 else
   4916                     return SSL_ERROR_SYSCALL; /* unknown */
   4917             }
   4918         }
   4919 
   4920         if (SSL_want_write(s)) {
   4921             /*
   4922              * Access wbio directly - in order to use the buffered bio if
   4923              * present
   4924              */
   4925             bio = sc->wbio;
   4926             if (BIO_should_write(bio))
   4927                 return SSL_ERROR_WANT_WRITE;
   4928             else if (BIO_should_read(bio))
   4929                 /*
   4930                  * See above (SSL_want_read(s) with BIO_should_write(bio))
   4931                  */
   4932                 return SSL_ERROR_WANT_READ;
   4933             else if (BIO_should_io_special(bio)) {
   4934                 reason = BIO_get_retry_reason(bio);
   4935                 if (reason == BIO_RR_CONNECT)
   4936                     return SSL_ERROR_WANT_CONNECT;
   4937                 else if (reason == BIO_RR_ACCEPT)
   4938                     return SSL_ERROR_WANT_ACCEPT;
   4939                 else
   4940                     return SSL_ERROR_SYSCALL;
   4941             }
   4942         }
   4943     }
   4944 
   4945     if (SSL_want_x509_lookup(s))
   4946         return SSL_ERROR_WANT_X509_LOOKUP;
   4947     if (SSL_want_retry_verify(s))
   4948         return SSL_ERROR_WANT_RETRY_VERIFY;
   4949     if (SSL_want_async(s))
   4950         return SSL_ERROR_WANT_ASYNC;
   4951     if (SSL_want_async_job(s))
   4952         return SSL_ERROR_WANT_ASYNC_JOB;
   4953     if (SSL_want_client_hello_cb(s))
   4954         return SSL_ERROR_WANT_CLIENT_HELLO_CB;
   4955 
   4956     if ((sc->shutdown & SSL_RECEIVED_SHUTDOWN) &&
   4957         (sc->s3.warn_alert == SSL_AD_CLOSE_NOTIFY))
   4958         return SSL_ERROR_ZERO_RETURN;
   4959 
   4960     return SSL_ERROR_SYSCALL;
   4961 }
   4962 
   4963 static int ssl_do_handshake_intern(void *vargs)
   4964 {
   4965     struct ssl_async_args *args = (struct ssl_async_args *)vargs;
   4966     SSL *s = args->s;
   4967     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   4968 
   4969     if (sc == NULL)
   4970         return -1;
   4971 
   4972     return sc->handshake_func(s);
   4973 }
   4974 
   4975 int SSL_do_handshake(SSL *s)
   4976 {
   4977     int ret = 1;
   4978     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   4979 
   4980 #ifndef OPENSSL_NO_QUIC
   4981     if (IS_QUIC(s))
   4982         return ossl_quic_do_handshake(s);
   4983 #endif
   4984 
   4985     if (sc == NULL)
   4986         return -1;
   4987 
   4988     if (sc->handshake_func == NULL) {
   4989         ERR_raise(ERR_LIB_SSL, SSL_R_CONNECTION_TYPE_NOT_SET);
   4990         return -1;
   4991     }
   4992 
   4993     if (!ossl_statem_check_finish_init(sc, -1))
   4994         return -1;
   4995 
   4996     s->method->ssl_renegotiate_check(s, 0);
   4997 
   4998     if (SSL_in_init(s) || SSL_in_before(s)) {
   4999         if ((sc->mode & SSL_MODE_ASYNC) && ASYNC_get_current_job() == NULL) {
   5000             struct ssl_async_args args;
   5001 
   5002             memset(&args, 0, sizeof(args));
   5003             args.s = s;
   5004 
   5005             ret = ssl_start_async_job(s, &args, ssl_do_handshake_intern);
   5006         } else {
   5007             ret = sc->handshake_func(s);
   5008         }
   5009     }
   5010 
   5011     return ret;
   5012 }
   5013 
   5014 void SSL_set_accept_state(SSL *s)
   5015 {
   5016     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL_ONLY(s);
   5017 
   5018 #ifndef OPENSSL_NO_QUIC
   5019     if (IS_QUIC(s)) {
   5020         /* We suppress errors because this is a void function */
   5021         (void)ossl_quic_set_accept_state(s, 0 /* suppress errors */);
   5022         return;
   5023     }
   5024 #endif
   5025 
   5026     sc->server = 1;
   5027     sc->shutdown = 0;
   5028     ossl_statem_clear(sc);
   5029     sc->handshake_func = s->method->ssl_accept;
   5030     /* Ignore return value. Its a void public API function */
   5031     RECORD_LAYER_reset(&sc->rlayer);
   5032 }
   5033 
   5034 void SSL_set_connect_state(SSL *s)
   5035 {
   5036     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL_ONLY(s);
   5037 
   5038 #ifndef OPENSSL_NO_QUIC
   5039     if (IS_QUIC(s)) {
   5040         /* We suppress errors because this is a void function */
   5041         (void)ossl_quic_set_connect_state(s, 0 /* suppress errors */);
   5042         return;
   5043     }
   5044 #endif
   5045 
   5046     sc->server = 0;
   5047     sc->shutdown = 0;
   5048     ossl_statem_clear(sc);
   5049     sc->handshake_func = s->method->ssl_connect;
   5050     /* Ignore return value. Its a void public API function */
   5051     RECORD_LAYER_reset(&sc->rlayer);
   5052 }
   5053 
   5054 int ssl_undefined_function(SSL *s)
   5055 {
   5056     ERR_raise(ERR_LIB_SSL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
   5057     return 0;
   5058 }
   5059 
   5060 int ssl_undefined_void_function(void)
   5061 {
   5062     ERR_raise(ERR_LIB_SSL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
   5063     return 0;
   5064 }
   5065 
   5066 const char *ssl_protocol_to_string(int version)
   5067 {
   5068     switch (version) {
   5069     case TLS1_3_VERSION:
   5070         return "TLSv1.3";
   5071 
   5072     case TLS1_2_VERSION:
   5073         return "TLSv1.2";
   5074 
   5075     case TLS1_1_VERSION:
   5076         return "TLSv1.1";
   5077 
   5078     case TLS1_VERSION:
   5079         return "TLSv1";
   5080 
   5081     case SSL3_VERSION:
   5082         return "SSLv3";
   5083 
   5084     case DTLS1_BAD_VER:
   5085         return "DTLSv0.9";
   5086 
   5087     case DTLS1_VERSION:
   5088         return "DTLSv1";
   5089 
   5090     case DTLS1_2_VERSION:
   5091         return "DTLSv1.2";
   5092 
   5093     default:
   5094         return "unknown";
   5095     }
   5096 }
   5097 
   5098 const char *SSL_get_version(const SSL *s)
   5099 {
   5100     const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
   5101 
   5102 #ifndef OPENSSL_NO_QUIC
   5103     /* We only support QUICv1 - so if its QUIC its QUICv1 */
   5104     if (s->type == SSL_TYPE_QUIC_CONNECTION || s->type == SSL_TYPE_QUIC_XSO)
   5105         return "QUICv1";
   5106 #endif
   5107 
   5108     if (sc == NULL)
   5109         return NULL;
   5110 
   5111     return ssl_protocol_to_string(sc->version);
   5112 }
   5113 
   5114 __owur int SSL_get_handshake_rtt(const SSL *s, uint64_t *rtt)
   5115 {
   5116     const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
   5117 
   5118     if (sc == NULL)
   5119         return -1;
   5120     if (sc->ts_msg_write.t <= 0 || sc->ts_msg_read.t <= 0)
   5121         return 0; /* data not (yet) available */
   5122     if (sc->ts_msg_read.t < sc->ts_msg_write.t)
   5123         return -1;
   5124 
   5125     *rtt = ossl_time2us(ossl_time_subtract(sc->ts_msg_read, sc->ts_msg_write));
   5126     return 1;
   5127 }
   5128 
   5129 static int dup_ca_names(STACK_OF(X509_NAME) **dst, STACK_OF(X509_NAME) *src)
   5130 {
   5131     STACK_OF(X509_NAME) *sk;
   5132     X509_NAME *xn;
   5133     int i;
   5134 
   5135     if (src == NULL) {
   5136         *dst = NULL;
   5137         return 1;
   5138     }
   5139 
   5140     if ((sk = sk_X509_NAME_new_null()) == NULL)
   5141         return 0;
   5142     for (i = 0; i < sk_X509_NAME_num(src); i++) {
   5143         xn = X509_NAME_dup(sk_X509_NAME_value(src, i));
   5144         if (xn == NULL) {
   5145             sk_X509_NAME_pop_free(sk, X509_NAME_free);
   5146             return 0;
   5147         }
   5148         if (sk_X509_NAME_insert(sk, xn, i) == 0) {
   5149             X509_NAME_free(xn);
   5150             sk_X509_NAME_pop_free(sk, X509_NAME_free);
   5151             return 0;
   5152         }
   5153     }
   5154     *dst = sk;
   5155 
   5156     return 1;
   5157 }
   5158 
   5159 SSL *SSL_dup(SSL *s)
   5160 {
   5161     SSL *ret;
   5162     int i;
   5163     /* TODO(QUIC FUTURE): Add an SSL_METHOD function for duplication */
   5164     SSL_CONNECTION *retsc;
   5165     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL_ONLY(s);
   5166 
   5167     if (sc == NULL)
   5168         return NULL;
   5169 
   5170     /* If we're not quiescent, just up_ref! */
   5171     if (!SSL_in_init(s) || !SSL_in_before(s)) {
   5172         CRYPTO_UP_REF(&s->references, &i);
   5173         return s;
   5174     }
   5175 
   5176     /*
   5177      * Otherwise, copy configuration state, and session if set.
   5178      */
   5179     if ((ret = SSL_new(SSL_get_SSL_CTX(s))) == NULL)
   5180         return NULL;
   5181     if ((retsc = SSL_CONNECTION_FROM_SSL_ONLY(ret)) == NULL)
   5182         goto err;
   5183 
   5184     if (sc->session != NULL) {
   5185         /*
   5186          * Arranges to share the same session via up_ref.  This "copies"
   5187          * session-id, SSL_METHOD, sid_ctx, and 'cert'
   5188          */
   5189         if (!SSL_copy_session_id(ret, s))
   5190             goto err;
   5191     } else {
   5192         /*
   5193          * No session has been established yet, so we have to expect that
   5194          * s->cert or ret->cert will be changed later -- they should not both
   5195          * point to the same object, and thus we can't use
   5196          * SSL_copy_session_id.
   5197          */
   5198         if (!SSL_set_ssl_method(ret, s->method))
   5199             goto err;
   5200 
   5201         if (sc->cert != NULL) {
   5202             ssl_cert_free(retsc->cert);
   5203             retsc->cert = ssl_cert_dup(sc->cert);
   5204             if (retsc->cert == NULL)
   5205                 goto err;
   5206         }
   5207 
   5208         if (!SSL_set_session_id_context(ret, sc->sid_ctx,
   5209                                         (int)sc->sid_ctx_length))
   5210             goto err;
   5211     }
   5212 
   5213     if (!ssl_dane_dup(retsc, sc))
   5214         goto err;
   5215     retsc->version = sc->version;
   5216     retsc->options = sc->options;
   5217     retsc->min_proto_version = sc->min_proto_version;
   5218     retsc->max_proto_version = sc->max_proto_version;
   5219     retsc->mode = sc->mode;
   5220     SSL_set_max_cert_list(ret, SSL_get_max_cert_list(s));
   5221     SSL_set_read_ahead(ret, SSL_get_read_ahead(s));
   5222     retsc->msg_callback = sc->msg_callback;
   5223     retsc->msg_callback_arg = sc->msg_callback_arg;
   5224     SSL_set_verify(ret, SSL_get_verify_mode(s), SSL_get_verify_callback(s));
   5225     SSL_set_verify_depth(ret, SSL_get_verify_depth(s));
   5226     retsc->generate_session_id = sc->generate_session_id;
   5227 
   5228     SSL_set_info_callback(ret, SSL_get_info_callback(s));
   5229 
   5230     /* copy app data, a little dangerous perhaps */
   5231     if (!CRYPTO_dup_ex_data(CRYPTO_EX_INDEX_SSL, &ret->ex_data, &s->ex_data))
   5232         goto err;
   5233 
   5234     retsc->server = sc->server;
   5235     if (sc->handshake_func) {
   5236         if (sc->server)
   5237             SSL_set_accept_state(ret);
   5238         else
   5239             SSL_set_connect_state(ret);
   5240     }
   5241     retsc->shutdown = sc->shutdown;
   5242     retsc->hit = sc->hit;
   5243 
   5244     retsc->default_passwd_callback = sc->default_passwd_callback;
   5245     retsc->default_passwd_callback_userdata = sc->default_passwd_callback_userdata;
   5246 
   5247     X509_VERIFY_PARAM_inherit(retsc->param, sc->param);
   5248 
   5249     /* dup the cipher_list and cipher_list_by_id stacks */
   5250     if (sc->cipher_list != NULL) {
   5251         if ((retsc->cipher_list = sk_SSL_CIPHER_dup(sc->cipher_list)) == NULL)
   5252             goto err;
   5253     }
   5254     if (sc->cipher_list_by_id != NULL)
   5255         if ((retsc->cipher_list_by_id = sk_SSL_CIPHER_dup(sc->cipher_list_by_id))
   5256             == NULL)
   5257             goto err;
   5258 
   5259     /* Dup the client_CA list */
   5260     if (!dup_ca_names(&retsc->ca_names, sc->ca_names)
   5261             || !dup_ca_names(&retsc->client_ca_names, sc->client_ca_names))
   5262         goto err;
   5263 
   5264     return ret;
   5265 
   5266  err:
   5267     SSL_free(ret);
   5268     return NULL;
   5269 }
   5270 
   5271 X509 *SSL_get_certificate(const SSL *s)
   5272 {
   5273     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   5274 
   5275     if (sc == NULL)
   5276         return NULL;
   5277 
   5278     if (sc->cert != NULL)
   5279         return sc->cert->key->x509;
   5280     else
   5281         return NULL;
   5282 }
   5283 
   5284 EVP_PKEY *SSL_get_privatekey(const SSL *s)
   5285 {
   5286     const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
   5287 
   5288     if (sc == NULL)
   5289         return NULL;
   5290 
   5291     if (sc->cert != NULL)
   5292         return sc->cert->key->privatekey;
   5293     else
   5294         return NULL;
   5295 }
   5296 
   5297 X509 *SSL_CTX_get0_certificate(const SSL_CTX *ctx)
   5298 {
   5299     if (ctx->cert != NULL)
   5300         return ctx->cert->key->x509;
   5301     else
   5302         return NULL;
   5303 }
   5304 
   5305 EVP_PKEY *SSL_CTX_get0_privatekey(const SSL_CTX *ctx)
   5306 {
   5307     if (ctx->cert != NULL)
   5308         return ctx->cert->key->privatekey;
   5309     else
   5310         return NULL;
   5311 }
   5312 
   5313 const SSL_CIPHER *SSL_get_current_cipher(const SSL *s)
   5314 {
   5315     const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
   5316 
   5317     if (sc == NULL)
   5318         return NULL;
   5319 
   5320     if ((sc->session != NULL) && (sc->session->cipher != NULL))
   5321         return sc->session->cipher;
   5322     return NULL;
   5323 }
   5324 
   5325 const SSL_CIPHER *SSL_get_pending_cipher(const SSL *s)
   5326 {
   5327     const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
   5328 
   5329     if (sc == NULL)
   5330         return NULL;
   5331 
   5332     return sc->s3.tmp.new_cipher;
   5333 }
   5334 
   5335 const COMP_METHOD *SSL_get_current_compression(const SSL *s)
   5336 {
   5337 #ifndef OPENSSL_NO_COMP
   5338     const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL_ONLY(s);
   5339 
   5340     if (sc == NULL)
   5341         return NULL;
   5342 
   5343     return sc->rlayer.wrlmethod->get_compression(sc->rlayer.wrl);
   5344 #else
   5345     return NULL;
   5346 #endif
   5347 }
   5348 
   5349 const COMP_METHOD *SSL_get_current_expansion(const SSL *s)
   5350 {
   5351 #ifndef OPENSSL_NO_COMP
   5352     const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL_ONLY(s);
   5353 
   5354     if (sc == NULL)
   5355         return NULL;
   5356 
   5357     return sc->rlayer.rrlmethod->get_compression(sc->rlayer.rrl);
   5358 #else
   5359     return NULL;
   5360 #endif
   5361 }
   5362 
   5363 int ssl_init_wbio_buffer(SSL_CONNECTION *s)
   5364 {
   5365     BIO *bbio;
   5366 
   5367     if (s->bbio != NULL) {
   5368         /* Already buffered. */
   5369         return 1;
   5370     }
   5371 
   5372     bbio = BIO_new(BIO_f_buffer());
   5373     if (bbio == NULL || BIO_set_read_buffer_size(bbio, 1) <= 0) {
   5374         BIO_free(bbio);
   5375         ERR_raise(ERR_LIB_SSL, ERR_R_BUF_LIB);
   5376         return 0;
   5377     }
   5378     s->bbio = bbio;
   5379     s->wbio = BIO_push(bbio, s->wbio);
   5380 
   5381     s->rlayer.wrlmethod->set1_bio(s->rlayer.wrl, s->wbio);
   5382 
   5383     return 1;
   5384 }
   5385 
   5386 int ssl_free_wbio_buffer(SSL_CONNECTION *s)
   5387 {
   5388     /* callers ensure s is never null */
   5389     if (s->bbio == NULL)
   5390         return 1;
   5391 
   5392     s->wbio = BIO_pop(s->wbio);
   5393     s->rlayer.wrlmethod->set1_bio(s->rlayer.wrl, s->wbio);
   5394 
   5395     BIO_free(s->bbio);
   5396     s->bbio = NULL;
   5397 
   5398     return 1;
   5399 }
   5400 
   5401 void SSL_CTX_set_quiet_shutdown(SSL_CTX *ctx, int mode)
   5402 {
   5403     ctx->quiet_shutdown = mode;
   5404 }
   5405 
   5406 int SSL_CTX_get_quiet_shutdown(const SSL_CTX *ctx)
   5407 {
   5408     return ctx->quiet_shutdown;
   5409 }
   5410 
   5411 void SSL_set_quiet_shutdown(SSL *s, int mode)
   5412 {
   5413     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL_ONLY(s);
   5414 
   5415     /* Not supported with QUIC */
   5416     if (sc == NULL)
   5417         return;
   5418 
   5419     sc->quiet_shutdown = mode;
   5420 }
   5421 
   5422 int SSL_get_quiet_shutdown(const SSL *s)
   5423 {
   5424     const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL_ONLY(s);
   5425 
   5426     /* Not supported with QUIC */
   5427     if (sc == NULL)
   5428         return 0;
   5429 
   5430     return sc->quiet_shutdown;
   5431 }
   5432 
   5433 void SSL_set_shutdown(SSL *s, int mode)
   5434 {
   5435     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL_ONLY(s);
   5436 
   5437     /* Not supported with QUIC */
   5438     if (sc == NULL)
   5439         return;
   5440 
   5441     sc->shutdown = mode;
   5442 }
   5443 
   5444 int SSL_get_shutdown(const SSL *s)
   5445 {
   5446     const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL_ONLY(s);
   5447 
   5448 #ifndef OPENSSL_NO_QUIC
   5449     /* QUIC: Just indicate whether the connection was shutdown cleanly. */
   5450     if (IS_QUIC(s))
   5451         return ossl_quic_get_shutdown(s);
   5452 #endif
   5453 
   5454     if (sc == NULL)
   5455         return 0;
   5456 
   5457     return sc->shutdown;
   5458 }
   5459 
   5460 int SSL_version(const SSL *s)
   5461 {
   5462     const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
   5463 
   5464 #ifndef OPENSSL_NO_QUIC
   5465     /* We only support QUICv1 - so if its QUIC its QUICv1 */
   5466     if (s->type == SSL_TYPE_QUIC_CONNECTION || s->type == SSL_TYPE_QUIC_XSO)
   5467         return OSSL_QUIC1_VERSION;
   5468 #endif
   5469     if (sc == NULL)
   5470         return 0;
   5471 
   5472     return sc->version;
   5473 }
   5474 
   5475 int SSL_client_version(const SSL *s)
   5476 {
   5477     const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
   5478 
   5479 #ifndef OPENSSL_NO_QUIC
   5480     /* We only support QUICv1 - so if its QUIC its QUICv1 */
   5481     if (s->type == SSL_TYPE_QUIC_CONNECTION || s->type == SSL_TYPE_QUIC_XSO)
   5482         return OSSL_QUIC1_VERSION;
   5483 #endif
   5484     if (sc == NULL)
   5485         return 0;
   5486 
   5487     return sc->client_version;
   5488 }
   5489 
   5490 SSL_CTX *SSL_get_SSL_CTX(const SSL *ssl)
   5491 {
   5492     return ssl->ctx;
   5493 }
   5494 
   5495 SSL_CTX *SSL_set_SSL_CTX(SSL *ssl, SSL_CTX *ctx)
   5496 {
   5497     CERT *new_cert;
   5498     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL_ONLY(ssl);
   5499 
   5500     /* TODO(QUIC FUTURE): Add support for QUIC */
   5501     if (sc == NULL)
   5502         return NULL;
   5503 
   5504     if (ssl->ctx == ctx)
   5505         return ssl->ctx;
   5506     if (ctx == NULL)
   5507         ctx = sc->session_ctx;
   5508     new_cert = ssl_cert_dup(ctx->cert);
   5509     if (new_cert == NULL)
   5510         goto err;
   5511     if (!custom_exts_copy_conn(&new_cert->custext, &sc->cert->custext))
   5512         goto err;
   5513     if (!custom_exts_copy_flags(&new_cert->custext, &sc->cert->custext))
   5514         goto err;
   5515 
   5516     /*
   5517      * Program invariant: |sid_ctx| has fixed size (SSL_MAX_SID_CTX_LENGTH),
   5518      * so setter APIs must prevent invalid lengths from entering the system.
   5519      */
   5520     if (!ossl_assert(sc->sid_ctx_length <= sizeof(sc->sid_ctx)))
   5521         goto err;
   5522     if (!SSL_CTX_up_ref(ctx))
   5523         goto err;
   5524 
   5525     /*
   5526      * If the session ID context matches that of the parent SSL_CTX,
   5527      * inherit it from the new SSL_CTX as well. If however the context does
   5528      * not match (i.e., it was set per-ssl with SSL_set_session_id_context),
   5529      * leave it unchanged.
   5530      */
   5531     if ((ssl->ctx != NULL) &&
   5532         (sc->sid_ctx_length == ssl->ctx->sid_ctx_length) &&
   5533         (memcmp(sc->sid_ctx, ssl->ctx->sid_ctx, sc->sid_ctx_length) == 0)) {
   5534         sc->sid_ctx_length = ctx->sid_ctx_length;
   5535         memcpy(&sc->sid_ctx, &ctx->sid_ctx, sizeof(sc->sid_ctx));
   5536     }
   5537 
   5538     ssl_cert_free(sc->cert);
   5539     sc->cert = new_cert;
   5540     SSL_CTX_free(ssl->ctx);     /* decrement reference count */
   5541     ssl->ctx = ctx;
   5542 
   5543     return ssl->ctx;
   5544 
   5545 err:
   5546     ssl_cert_free(new_cert);
   5547     return NULL;
   5548 }
   5549 
   5550 int SSL_CTX_set_default_verify_paths(SSL_CTX *ctx)
   5551 {
   5552     return X509_STORE_set_default_paths_ex(ctx->cert_store, ctx->libctx,
   5553                                            ctx->propq);
   5554 }
   5555 
   5556 int SSL_CTX_set_default_verify_dir(SSL_CTX *ctx)
   5557 {
   5558     X509_LOOKUP *lookup;
   5559 
   5560     lookup = X509_STORE_add_lookup(ctx->cert_store, X509_LOOKUP_hash_dir());
   5561     if (lookup == NULL)
   5562         return 0;
   5563 
   5564     /* We ignore errors, in case the directory doesn't exist */
   5565     ERR_set_mark();
   5566 
   5567     X509_LOOKUP_add_dir(lookup, NULL, X509_FILETYPE_DEFAULT);
   5568 
   5569     ERR_pop_to_mark();
   5570 
   5571     return 1;
   5572 }
   5573 
   5574 int SSL_CTX_set_default_verify_file(SSL_CTX *ctx)
   5575 {
   5576     X509_LOOKUP *lookup;
   5577 
   5578     lookup = X509_STORE_add_lookup(ctx->cert_store, X509_LOOKUP_file());
   5579     if (lookup == NULL)
   5580         return 0;
   5581 
   5582     /* We ignore errors, in case the file doesn't exist */
   5583     ERR_set_mark();
   5584 
   5585     X509_LOOKUP_load_file_ex(lookup, NULL, X509_FILETYPE_DEFAULT, ctx->libctx,
   5586                              ctx->propq);
   5587 
   5588     ERR_pop_to_mark();
   5589 
   5590     return 1;
   5591 }
   5592 
   5593 int SSL_CTX_set_default_verify_store(SSL_CTX *ctx)
   5594 {
   5595     X509_LOOKUP *lookup;
   5596 
   5597     lookup = X509_STORE_add_lookup(ctx->cert_store, X509_LOOKUP_store());
   5598     if (lookup == NULL)
   5599         return 0;
   5600 
   5601     /* We ignore errors, in case the directory doesn't exist */
   5602     ERR_set_mark();
   5603 
   5604     X509_LOOKUP_add_store_ex(lookup, NULL, ctx->libctx, ctx->propq);
   5605 
   5606     ERR_pop_to_mark();
   5607 
   5608     return 1;
   5609 }
   5610 
   5611 int SSL_CTX_load_verify_file(SSL_CTX *ctx, const char *CAfile)
   5612 {
   5613     return X509_STORE_load_file_ex(ctx->cert_store, CAfile, ctx->libctx,
   5614                                    ctx->propq);
   5615 }
   5616 
   5617 int SSL_CTX_load_verify_dir(SSL_CTX *ctx, const char *CApath)
   5618 {
   5619     return X509_STORE_load_path(ctx->cert_store, CApath);
   5620 }
   5621 
   5622 int SSL_CTX_load_verify_store(SSL_CTX *ctx, const char *CAstore)
   5623 {
   5624     return X509_STORE_load_store_ex(ctx->cert_store, CAstore, ctx->libctx,
   5625                                     ctx->propq);
   5626 }
   5627 
   5628 int SSL_CTX_load_verify_locations(SSL_CTX *ctx, const char *CAfile,
   5629                                   const char *CApath)
   5630 {
   5631     if (CAfile == NULL && CApath == NULL)
   5632         return 0;
   5633     if (CAfile != NULL && !SSL_CTX_load_verify_file(ctx, CAfile))
   5634         return 0;
   5635     if (CApath != NULL && !SSL_CTX_load_verify_dir(ctx, CApath))
   5636         return 0;
   5637     return 1;
   5638 }
   5639 
   5640 void SSL_set_info_callback(SSL *ssl,
   5641                            void (*cb) (const SSL *ssl, int type, int val))
   5642 {
   5643     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(ssl);
   5644 
   5645     if (sc == NULL)
   5646         return;
   5647 
   5648     sc->info_callback = cb;
   5649 }
   5650 
   5651 /*
   5652  * One compiler (Diab DCC) doesn't like argument names in returned function
   5653  * pointer.
   5654  */
   5655 void (*SSL_get_info_callback(const SSL *ssl)) (const SSL * /* ssl */ ,
   5656                                                int /* type */ ,
   5657                                                int /* val */ ) {
   5658     const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(ssl);
   5659 
   5660     if (sc == NULL)
   5661         return NULL;
   5662 
   5663     return sc->info_callback;
   5664 }
   5665 
   5666 void SSL_set_verify_result(SSL *ssl, long arg)
   5667 {
   5668     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(ssl);
   5669 
   5670     if (sc == NULL)
   5671         return;
   5672 
   5673     sc->verify_result = arg;
   5674 }
   5675 
   5676 long SSL_get_verify_result(const SSL *ssl)
   5677 {
   5678     const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(ssl);
   5679 
   5680     if (sc == NULL)
   5681         return 0;
   5682 
   5683     return sc->verify_result;
   5684 }
   5685 
   5686 size_t SSL_get_client_random(const SSL *ssl, unsigned char *out, size_t outlen)
   5687 {
   5688     const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(ssl);
   5689 
   5690     if (sc == NULL)
   5691         return 0;
   5692 
   5693     if (outlen == 0)
   5694         return sizeof(sc->s3.client_random);
   5695     if (outlen > sizeof(sc->s3.client_random))
   5696         outlen = sizeof(sc->s3.client_random);
   5697     memcpy(out, sc->s3.client_random, outlen);
   5698     return outlen;
   5699 }
   5700 
   5701 size_t SSL_get_server_random(const SSL *ssl, unsigned char *out, size_t outlen)
   5702 {
   5703     const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(ssl);
   5704 
   5705     if (sc == NULL)
   5706         return 0;
   5707 
   5708     if (outlen == 0)
   5709         return sizeof(sc->s3.server_random);
   5710     if (outlen > sizeof(sc->s3.server_random))
   5711         outlen = sizeof(sc->s3.server_random);
   5712     memcpy(out, sc->s3.server_random, outlen);
   5713     return outlen;
   5714 }
   5715 
   5716 size_t SSL_SESSION_get_master_key(const SSL_SESSION *session,
   5717                                   unsigned char *out, size_t outlen)
   5718 {
   5719     if (outlen == 0)
   5720         return session->master_key_length;
   5721     if (outlen > session->master_key_length)
   5722         outlen = session->master_key_length;
   5723     memcpy(out, session->master_key, outlen);
   5724     return outlen;
   5725 }
   5726 
   5727 int SSL_SESSION_set1_master_key(SSL_SESSION *sess, const unsigned char *in,
   5728                                 size_t len)
   5729 {
   5730     if (len > sizeof(sess->master_key))
   5731         return 0;
   5732 
   5733     memcpy(sess->master_key, in, len);
   5734     sess->master_key_length = len;
   5735     return 1;
   5736 }
   5737 
   5738 
   5739 int SSL_set_ex_data(SSL *s, int idx, void *arg)
   5740 {
   5741     return CRYPTO_set_ex_data(&s->ex_data, idx, arg);
   5742 }
   5743 
   5744 void *SSL_get_ex_data(const SSL *s, int idx)
   5745 {
   5746     return CRYPTO_get_ex_data(&s->ex_data, idx);
   5747 }
   5748 
   5749 int SSL_CTX_set_ex_data(SSL_CTX *s, int idx, void *arg)
   5750 {
   5751     return CRYPTO_set_ex_data(&s->ex_data, idx, arg);
   5752 }
   5753 
   5754 void *SSL_CTX_get_ex_data(const SSL_CTX *s, int idx)
   5755 {
   5756     return CRYPTO_get_ex_data(&s->ex_data, idx);
   5757 }
   5758 
   5759 X509_STORE *SSL_CTX_get_cert_store(const SSL_CTX *ctx)
   5760 {
   5761     return ctx->cert_store;
   5762 }
   5763 
   5764 void SSL_CTX_set_cert_store(SSL_CTX *ctx, X509_STORE *store)
   5765 {
   5766     X509_STORE_free(ctx->cert_store);
   5767     ctx->cert_store = store;
   5768 }
   5769 
   5770 void SSL_CTX_set1_cert_store(SSL_CTX *ctx, X509_STORE *store)
   5771 {
   5772     if (store != NULL && !X509_STORE_up_ref(store))
   5773         return;
   5774 
   5775     SSL_CTX_set_cert_store(ctx, store);
   5776 }
   5777 
   5778 int SSL_want(const SSL *s)
   5779 {
   5780     const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
   5781 
   5782 #ifndef OPENSSL_NO_QUIC
   5783     if (IS_QUIC(s))
   5784         return ossl_quic_want(s);
   5785 #endif
   5786 
   5787     if (sc == NULL)
   5788         return SSL_NOTHING;
   5789 
   5790     return sc->rwstate;
   5791 }
   5792 
   5793 #ifndef OPENSSL_NO_PSK
   5794 int SSL_CTX_use_psk_identity_hint(SSL_CTX *ctx, const char *identity_hint)
   5795 {
   5796     if (identity_hint != NULL && strlen(identity_hint) > PSK_MAX_IDENTITY_LEN) {
   5797         ERR_raise(ERR_LIB_SSL, SSL_R_DATA_LENGTH_TOO_LONG);
   5798         return 0;
   5799     }
   5800     OPENSSL_free(ctx->cert->psk_identity_hint);
   5801     if (identity_hint != NULL) {
   5802         ctx->cert->psk_identity_hint = OPENSSL_strdup(identity_hint);
   5803         if (ctx->cert->psk_identity_hint == NULL)
   5804             return 0;
   5805     } else
   5806         ctx->cert->psk_identity_hint = NULL;
   5807     return 1;
   5808 }
   5809 
   5810 int SSL_use_psk_identity_hint(SSL *s, const char *identity_hint)
   5811 {
   5812     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   5813 
   5814     if (sc == NULL)
   5815         return 0;
   5816 
   5817     if (identity_hint != NULL && strlen(identity_hint) > PSK_MAX_IDENTITY_LEN) {
   5818         ERR_raise(ERR_LIB_SSL, SSL_R_DATA_LENGTH_TOO_LONG);
   5819         return 0;
   5820     }
   5821     OPENSSL_free(sc->cert->psk_identity_hint);
   5822     if (identity_hint != NULL) {
   5823         sc->cert->psk_identity_hint = OPENSSL_strdup(identity_hint);
   5824         if (sc->cert->psk_identity_hint == NULL)
   5825             return 0;
   5826     } else
   5827         sc->cert->psk_identity_hint = NULL;
   5828     return 1;
   5829 }
   5830 
   5831 const char *SSL_get_psk_identity_hint(const SSL *s)
   5832 {
   5833     const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
   5834 
   5835     if (sc == NULL || sc->session == NULL)
   5836         return NULL;
   5837 
   5838     return sc->session->psk_identity_hint;
   5839 }
   5840 
   5841 const char *SSL_get_psk_identity(const SSL *s)
   5842 {
   5843     const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
   5844 
   5845     if (sc == NULL || sc->session == NULL)
   5846         return NULL;
   5847 
   5848     return sc->session->psk_identity;
   5849 }
   5850 
   5851 void SSL_set_psk_client_callback(SSL *s, SSL_psk_client_cb_func cb)
   5852 {
   5853     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   5854 
   5855     if (sc == NULL)
   5856         return;
   5857 
   5858     sc->psk_client_callback = cb;
   5859 }
   5860 
   5861 void SSL_CTX_set_psk_client_callback(SSL_CTX *ctx, SSL_psk_client_cb_func cb)
   5862 {
   5863     ctx->psk_client_callback = cb;
   5864 }
   5865 
   5866 void SSL_set_psk_server_callback(SSL *s, SSL_psk_server_cb_func cb)
   5867 {
   5868     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   5869 
   5870     if (sc == NULL)
   5871         return;
   5872 
   5873     sc->psk_server_callback = cb;
   5874 }
   5875 
   5876 void SSL_CTX_set_psk_server_callback(SSL_CTX *ctx, SSL_psk_server_cb_func cb)
   5877 {
   5878     ctx->psk_server_callback = cb;
   5879 }
   5880 #endif
   5881 
   5882 void SSL_set_psk_find_session_callback(SSL *s, SSL_psk_find_session_cb_func cb)
   5883 {
   5884     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   5885 
   5886     if (sc == NULL)
   5887         return;
   5888 
   5889     sc->psk_find_session_cb = cb;
   5890 }
   5891 
   5892 void SSL_CTX_set_psk_find_session_callback(SSL_CTX *ctx,
   5893                                            SSL_psk_find_session_cb_func cb)
   5894 {
   5895     ctx->psk_find_session_cb = cb;
   5896 }
   5897 
   5898 void SSL_set_psk_use_session_callback(SSL *s, SSL_psk_use_session_cb_func cb)
   5899 {
   5900     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   5901 
   5902     if (sc == NULL)
   5903         return;
   5904 
   5905     sc->psk_use_session_cb = cb;
   5906 }
   5907 
   5908 void SSL_CTX_set_psk_use_session_callback(SSL_CTX *ctx,
   5909                                            SSL_psk_use_session_cb_func cb)
   5910 {
   5911     ctx->psk_use_session_cb = cb;
   5912 }
   5913 
   5914 void SSL_CTX_set_msg_callback(SSL_CTX *ctx,
   5915                               void (*cb) (int write_p, int version,
   5916                                           int content_type, const void *buf,
   5917                                           size_t len, SSL *ssl, void *arg))
   5918 {
   5919     SSL_CTX_callback_ctrl(ctx, SSL_CTRL_SET_MSG_CALLBACK, (void (*)(void))cb);
   5920 }
   5921 
   5922 void SSL_set_msg_callback(SSL *ssl,
   5923                           void (*cb) (int write_p, int version,
   5924                                       int content_type, const void *buf,
   5925                                       size_t len, SSL *ssl, void *arg))
   5926 {
   5927     SSL_callback_ctrl(ssl, SSL_CTRL_SET_MSG_CALLBACK, (void (*)(void))cb);
   5928 }
   5929 
   5930 void SSL_CTX_set_not_resumable_session_callback(SSL_CTX *ctx,
   5931                                                 int (*cb) (SSL *ssl,
   5932                                                            int
   5933                                                            is_forward_secure))
   5934 {
   5935     SSL_CTX_callback_ctrl(ctx, SSL_CTRL_SET_NOT_RESUMABLE_SESS_CB,
   5936                           (void (*)(void))cb);
   5937 }
   5938 
   5939 void SSL_set_not_resumable_session_callback(SSL *ssl,
   5940                                             int (*cb) (SSL *ssl,
   5941                                                        int is_forward_secure))
   5942 {
   5943     SSL_callback_ctrl(ssl, SSL_CTRL_SET_NOT_RESUMABLE_SESS_CB,
   5944                       (void (*)(void))cb);
   5945 }
   5946 
   5947 void SSL_CTX_set_record_padding_callback(SSL_CTX *ctx,
   5948                                          size_t (*cb) (SSL *ssl, int type,
   5949                                                        size_t len, void *arg))
   5950 {
   5951     ctx->record_padding_cb = cb;
   5952 }
   5953 
   5954 void SSL_CTX_set_record_padding_callback_arg(SSL_CTX *ctx, void *arg)
   5955 {
   5956     ctx->record_padding_arg = arg;
   5957 }
   5958 
   5959 void *SSL_CTX_get_record_padding_callback_arg(const SSL_CTX *ctx)
   5960 {
   5961     return ctx->record_padding_arg;
   5962 }
   5963 
   5964 int SSL_CTX_set_block_padding_ex(SSL_CTX *ctx, size_t app_block_size,
   5965                                  size_t hs_block_size)
   5966 {
   5967     if (IS_QUIC_CTX(ctx) && (app_block_size > 1 || hs_block_size > 1))
   5968         return 0;
   5969 
   5970     /* block size of 0 or 1 is basically no padding */
   5971     if (app_block_size == 1) {
   5972         ctx->block_padding = 0;
   5973     } else if (app_block_size <= SSL3_RT_MAX_PLAIN_LENGTH) {
   5974         ctx->block_padding = app_block_size;
   5975     } else {
   5976         return 0;
   5977     }
   5978     if (hs_block_size == 1) {
   5979         ctx->hs_padding = 0;
   5980     } else if (hs_block_size <= SSL3_RT_MAX_PLAIN_LENGTH) {
   5981         ctx->hs_padding = hs_block_size;
   5982     } else {
   5983         return 0;
   5984     }
   5985     return 1;
   5986 }
   5987 
   5988 int SSL_CTX_set_block_padding(SSL_CTX *ctx, size_t block_size)
   5989 {
   5990     return SSL_CTX_set_block_padding_ex(ctx, block_size, block_size);
   5991 }
   5992 
   5993 int SSL_set_record_padding_callback(SSL *ssl,
   5994                                      size_t (*cb) (SSL *ssl, int type,
   5995                                                    size_t len, void *arg))
   5996 {
   5997     BIO *b;
   5998     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL_ONLY(ssl);
   5999 
   6000     if (sc == NULL)
   6001         return 0;
   6002 
   6003     b = SSL_get_wbio(ssl);
   6004     if (b == NULL || !BIO_get_ktls_send(b)) {
   6005         sc->rlayer.record_padding_cb = cb;
   6006         return 1;
   6007     }
   6008     return 0;
   6009 }
   6010 
   6011 void SSL_set_record_padding_callback_arg(SSL *ssl, void *arg)
   6012 {
   6013     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(ssl);
   6014 
   6015     if (sc == NULL)
   6016         return;
   6017 
   6018     sc->rlayer.record_padding_arg = arg;
   6019 }
   6020 
   6021 void *SSL_get_record_padding_callback_arg(const SSL *ssl)
   6022 {
   6023     const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(ssl);
   6024 
   6025     if (sc == NULL)
   6026         return NULL;
   6027 
   6028     return sc->rlayer.record_padding_arg;
   6029 }
   6030 
   6031 int SSL_set_block_padding_ex(SSL *ssl, size_t app_block_size,
   6032                              size_t hs_block_size)
   6033 {
   6034     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(ssl);
   6035 
   6036     if (sc == NULL
   6037         || (IS_QUIC(ssl)
   6038             && (app_block_size > 1 || hs_block_size > 1)))
   6039         return 0;
   6040 
   6041     /* block size of 0 or 1 is basically no padding */
   6042     if (app_block_size == 1) {
   6043         sc->rlayer.block_padding = 0;
   6044     } else if (app_block_size <= SSL3_RT_MAX_PLAIN_LENGTH) {
   6045         sc->rlayer.block_padding = app_block_size;
   6046     } else {
   6047         return 0;
   6048     }
   6049     if (hs_block_size == 1) {
   6050         sc->rlayer.hs_padding = 0;
   6051     } else if (hs_block_size <= SSL3_RT_MAX_PLAIN_LENGTH) {
   6052         sc->rlayer.hs_padding = hs_block_size;
   6053     } else {
   6054         return 0;
   6055     }
   6056     return 1;
   6057 }
   6058 
   6059 int SSL_set_block_padding(SSL *ssl, size_t block_size)
   6060 {
   6061     return SSL_set_block_padding_ex(ssl, block_size, block_size);
   6062 }
   6063 
   6064 int SSL_set_num_tickets(SSL *s, size_t num_tickets)
   6065 {
   6066     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   6067 
   6068     if (sc == NULL)
   6069         return 0;
   6070 
   6071     sc->num_tickets = num_tickets;
   6072 
   6073     return 1;
   6074 }
   6075 
   6076 size_t SSL_get_num_tickets(const SSL *s)
   6077 {
   6078     const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
   6079 
   6080     if (sc == NULL)
   6081         return 0;
   6082 
   6083     return sc->num_tickets;
   6084 }
   6085 
   6086 int SSL_CTX_set_num_tickets(SSL_CTX *ctx, size_t num_tickets)
   6087 {
   6088     ctx->num_tickets = num_tickets;
   6089 
   6090     return 1;
   6091 }
   6092 
   6093 size_t SSL_CTX_get_num_tickets(const SSL_CTX *ctx)
   6094 {
   6095     return ctx->num_tickets;
   6096 }
   6097 
   6098 /* Retrieve handshake hashes */
   6099 int ssl_handshake_hash(SSL_CONNECTION *s,
   6100                        unsigned char *out, size_t outlen,
   6101                        size_t *hashlen)
   6102 {
   6103     EVP_MD_CTX *ctx = NULL;
   6104     EVP_MD_CTX *hdgst = s->s3.handshake_dgst;
   6105     int hashleni = EVP_MD_CTX_get_size(hdgst);
   6106     int ret = 0;
   6107 
   6108     if (hashleni < 0 || (size_t)hashleni > outlen) {
   6109         SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
   6110         goto err;
   6111     }
   6112 
   6113     ctx = EVP_MD_CTX_new();
   6114     if (ctx == NULL) {
   6115         SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
   6116         goto err;
   6117     }
   6118 
   6119     if (!EVP_MD_CTX_copy_ex(ctx, hdgst)
   6120         || EVP_DigestFinal_ex(ctx, out, NULL) <= 0) {
   6121         SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
   6122         goto err;
   6123     }
   6124 
   6125     *hashlen = hashleni;
   6126 
   6127     ret = 1;
   6128  err:
   6129     EVP_MD_CTX_free(ctx);
   6130     return ret;
   6131 }
   6132 
   6133 int SSL_session_reused(const SSL *s)
   6134 {
   6135     const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
   6136 
   6137     if (sc == NULL)
   6138         return 0;
   6139 
   6140     return sc->hit;
   6141 }
   6142 
   6143 int SSL_is_server(const SSL *s)
   6144 {
   6145     const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
   6146 
   6147     if (sc == NULL)
   6148         return 0;
   6149 
   6150     return sc->server;
   6151 }
   6152 
   6153 #ifndef OPENSSL_NO_DEPRECATED_1_1_0
   6154 void SSL_set_debug(SSL *s, int debug)
   6155 {
   6156     /* Old function was do-nothing anyway... */
   6157     (void)s;
   6158     (void)debug;
   6159 }
   6160 #endif
   6161 
   6162 void SSL_set_security_level(SSL *s, int level)
   6163 {
   6164     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   6165 
   6166     if (sc == NULL)
   6167         return;
   6168 
   6169     sc->cert->sec_level = level;
   6170 }
   6171 
   6172 int SSL_get_security_level(const SSL *s)
   6173 {
   6174     const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
   6175 
   6176     if (sc == NULL)
   6177         return 0;
   6178 
   6179     return sc->cert->sec_level;
   6180 }
   6181 
   6182 void SSL_set_security_callback(SSL *s,
   6183                                int (*cb) (const SSL *s, const SSL_CTX *ctx,
   6184                                           int op, int bits, int nid,
   6185                                           void *other, void *ex))
   6186 {
   6187     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   6188 
   6189     if (sc == NULL)
   6190         return;
   6191 
   6192     sc->cert->sec_cb = cb;
   6193 }
   6194 
   6195 int (*SSL_get_security_callback(const SSL *s)) (const SSL *s,
   6196                                                 const SSL_CTX *ctx, int op,
   6197                                                 int bits, int nid, void *other,
   6198                                                 void *ex) {
   6199     const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
   6200 
   6201     if (sc == NULL)
   6202         return NULL;
   6203 
   6204     return sc->cert->sec_cb;
   6205 }
   6206 
   6207 void SSL_set0_security_ex_data(SSL *s, void *ex)
   6208 {
   6209     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   6210 
   6211     if (sc == NULL)
   6212         return;
   6213 
   6214     sc->cert->sec_ex = ex;
   6215 }
   6216 
   6217 void *SSL_get0_security_ex_data(const SSL *s)
   6218 {
   6219     const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
   6220 
   6221     if (sc == NULL)
   6222         return NULL;
   6223 
   6224     return sc->cert->sec_ex;
   6225 }
   6226 
   6227 void SSL_CTX_set_security_level(SSL_CTX *ctx, int level)
   6228 {
   6229     ctx->cert->sec_level = level;
   6230 }
   6231 
   6232 int SSL_CTX_get_security_level(const SSL_CTX *ctx)
   6233 {
   6234     return ctx->cert->sec_level;
   6235 }
   6236 
   6237 void SSL_CTX_set_security_callback(SSL_CTX *ctx,
   6238                                    int (*cb) (const SSL *s, const SSL_CTX *ctx,
   6239                                               int op, int bits, int nid,
   6240                                               void *other, void *ex))
   6241 {
   6242     ctx->cert->sec_cb = cb;
   6243 }
   6244 
   6245 int (*SSL_CTX_get_security_callback(const SSL_CTX *ctx)) (const SSL *s,
   6246                                                           const SSL_CTX *ctx,
   6247                                                           int op, int bits,
   6248                                                           int nid,
   6249                                                           void *other,
   6250                                                           void *ex) {
   6251     return ctx->cert->sec_cb;
   6252 }
   6253 
   6254 void SSL_CTX_set0_security_ex_data(SSL_CTX *ctx, void *ex)
   6255 {
   6256     ctx->cert->sec_ex = ex;
   6257 }
   6258 
   6259 void *SSL_CTX_get0_security_ex_data(const SSL_CTX *ctx)
   6260 {
   6261     return ctx->cert->sec_ex;
   6262 }
   6263 
   6264 uint64_t SSL_CTX_get_options(const SSL_CTX *ctx)
   6265 {
   6266     return ctx->options;
   6267 }
   6268 
   6269 uint64_t SSL_get_options(const SSL *s)
   6270 {
   6271     const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
   6272 
   6273 #ifndef OPENSSL_NO_QUIC
   6274     if (IS_QUIC(s))
   6275         return ossl_quic_get_options(s);
   6276 #endif
   6277 
   6278     if (sc == NULL)
   6279         return 0;
   6280 
   6281     return sc->options;
   6282 }
   6283 
   6284 uint64_t SSL_CTX_set_options(SSL_CTX *ctx, uint64_t op)
   6285 {
   6286     return ctx->options |= op;
   6287 }
   6288 
   6289 uint64_t SSL_set_options(SSL *s, uint64_t op)
   6290 {
   6291     SSL_CONNECTION *sc;
   6292     OSSL_PARAM options[2], *opts = options;
   6293 
   6294 #ifndef OPENSSL_NO_QUIC
   6295     if (IS_QUIC(s))
   6296         return ossl_quic_set_options(s, op);
   6297 #endif
   6298 
   6299     sc = SSL_CONNECTION_FROM_SSL(s);
   6300     if (sc == NULL)
   6301         return 0;
   6302 
   6303     sc->options |= op;
   6304 
   6305     *opts++ = OSSL_PARAM_construct_uint64(OSSL_LIBSSL_RECORD_LAYER_PARAM_OPTIONS,
   6306                                           &sc->options);
   6307     *opts = OSSL_PARAM_construct_end();
   6308 
   6309     /* Ignore return value */
   6310     sc->rlayer.rrlmethod->set_options(sc->rlayer.rrl, options);
   6311     sc->rlayer.wrlmethod->set_options(sc->rlayer.wrl, options);
   6312 
   6313     return sc->options;
   6314 }
   6315 
   6316 uint64_t SSL_CTX_clear_options(SSL_CTX *ctx, uint64_t op)
   6317 {
   6318     return ctx->options &= ~op;
   6319 }
   6320 
   6321 uint64_t SSL_clear_options(SSL *s, uint64_t op)
   6322 {
   6323     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   6324     OSSL_PARAM options[2], *opts = options;
   6325 
   6326 #ifndef OPENSSL_NO_QUIC
   6327     if (IS_QUIC(s))
   6328         return ossl_quic_clear_options(s, op);
   6329 #endif
   6330 
   6331     if (sc == NULL)
   6332         return 0;
   6333 
   6334     sc->options &= ~op;
   6335 
   6336     *opts++ = OSSL_PARAM_construct_uint64(OSSL_LIBSSL_RECORD_LAYER_PARAM_OPTIONS,
   6337                                           &sc->options);
   6338     *opts = OSSL_PARAM_construct_end();
   6339 
   6340     /* Ignore return value */
   6341     sc->rlayer.rrlmethod->set_options(sc->rlayer.rrl, options);
   6342     sc->rlayer.wrlmethod->set_options(sc->rlayer.wrl, options);
   6343 
   6344     return sc->options;
   6345 }
   6346 
   6347 STACK_OF(X509) *SSL_get0_verified_chain(const SSL *s)
   6348 {
   6349     const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
   6350 
   6351     if (sc == NULL)
   6352         return NULL;
   6353 
   6354     return sc->verified_chain;
   6355 }
   6356 
   6357 IMPLEMENT_OBJ_BSEARCH_GLOBAL_CMP_FN(SSL_CIPHER, SSL_CIPHER, ssl_cipher_id);
   6358 
   6359 #ifndef OPENSSL_NO_CT
   6360 
   6361 /*
   6362  * Moves SCTs from the |src| stack to the |dst| stack.
   6363  * The source of each SCT will be set to |origin|.
   6364  * If |dst| points to a NULL pointer, a new stack will be created and owned by
   6365  * the caller.
   6366  * Returns the number of SCTs moved, or a negative integer if an error occurs.
   6367  * The |dst| stack is created and possibly partially populated even in case
   6368  * of error, likewise the |src| stack may be left in an intermediate state.
   6369  */
   6370 static int ct_move_scts(STACK_OF(SCT) **dst, STACK_OF(SCT) *src,
   6371                         sct_source_t origin)
   6372 {
   6373     int scts_moved = 0;
   6374     SCT *sct = NULL;
   6375 
   6376     if (*dst == NULL) {
   6377         *dst = sk_SCT_new_null();
   6378         if (*dst == NULL) {
   6379             ERR_raise(ERR_LIB_SSL, ERR_R_CRYPTO_LIB);
   6380             goto err;
   6381         }
   6382     }
   6383 
   6384     while ((sct = sk_SCT_pop(src)) != NULL) {
   6385         if (SCT_set_source(sct, origin) != 1)
   6386             goto err;
   6387 
   6388         if (!sk_SCT_push(*dst, sct))
   6389             goto err;
   6390         scts_moved += 1;
   6391     }
   6392 
   6393     return scts_moved;
   6394  err:
   6395     SCT_free(sct);
   6396     return -1;
   6397 }
   6398 
   6399 /*
   6400  * Look for data collected during ServerHello and parse if found.
   6401  * Returns the number of SCTs extracted.
   6402  */
   6403 static int ct_extract_tls_extension_scts(SSL_CONNECTION *s)
   6404 {
   6405     int scts_extracted = 0;
   6406 
   6407     if (s->ext.scts != NULL) {
   6408         const unsigned char *p = s->ext.scts;
   6409         STACK_OF(SCT) *scts = o2i_SCT_LIST(NULL, &p, s->ext.scts_len);
   6410 
   6411         scts_extracted = ct_move_scts(&s->scts, scts, SCT_SOURCE_TLS_EXTENSION);
   6412 
   6413         SCT_LIST_free(scts);
   6414     }
   6415 
   6416     return scts_extracted;
   6417 }
   6418 
   6419 /*
   6420  * Checks for an OCSP response and then attempts to extract any SCTs found if it
   6421  * contains an SCT X509 extension. They will be stored in |s->scts|.
   6422  * Returns:
   6423  * - The number of SCTs extracted, assuming an OCSP response exists.
   6424  * - 0 if no OCSP response exists or it contains no SCTs.
   6425  * - A negative integer if an error occurs.
   6426  */
   6427 static int ct_extract_ocsp_response_scts(SSL_CONNECTION *s)
   6428 {
   6429 # ifndef OPENSSL_NO_OCSP
   6430     int scts_extracted = 0;
   6431     const unsigned char *p;
   6432     OCSP_BASICRESP *br = NULL;
   6433     OCSP_RESPONSE *rsp = NULL;
   6434     STACK_OF(SCT) *scts = NULL;
   6435     int i;
   6436 
   6437     if (s->ext.ocsp.resp == NULL || s->ext.ocsp.resp_len == 0)
   6438         goto err;
   6439 
   6440     p = s->ext.ocsp.resp;
   6441     rsp = d2i_OCSP_RESPONSE(NULL, &p, (int)s->ext.ocsp.resp_len);
   6442     if (rsp == NULL)
   6443         goto err;
   6444 
   6445     br = OCSP_response_get1_basic(rsp);
   6446     if (br == NULL)
   6447         goto err;
   6448 
   6449     for (i = 0; i < OCSP_resp_count(br); ++i) {
   6450         OCSP_SINGLERESP *single = OCSP_resp_get0(br, i);
   6451 
   6452         if (single == NULL)
   6453             continue;
   6454 
   6455         scts =
   6456             OCSP_SINGLERESP_get1_ext_d2i(single, NID_ct_cert_scts, NULL, NULL);
   6457         scts_extracted =
   6458             ct_move_scts(&s->scts, scts, SCT_SOURCE_OCSP_STAPLED_RESPONSE);
   6459         if (scts_extracted < 0)
   6460             goto err;
   6461     }
   6462  err:
   6463     SCT_LIST_free(scts);
   6464     OCSP_BASICRESP_free(br);
   6465     OCSP_RESPONSE_free(rsp);
   6466     return scts_extracted;
   6467 # else
   6468     /* Behave as if no OCSP response exists */
   6469     return 0;
   6470 # endif
   6471 }
   6472 
   6473 /*
   6474  * Attempts to extract SCTs from the peer certificate.
   6475  * Return the number of SCTs extracted, or a negative integer if an error
   6476  * occurs.
   6477  */
   6478 static int ct_extract_x509v3_extension_scts(SSL_CONNECTION *s)
   6479 {
   6480     int scts_extracted = 0;
   6481     X509 *cert = s->session != NULL ? s->session->peer : NULL;
   6482 
   6483     if (cert != NULL) {
   6484         STACK_OF(SCT) *scts =
   6485             X509_get_ext_d2i(cert, NID_ct_precert_scts, NULL, NULL);
   6486 
   6487         scts_extracted =
   6488             ct_move_scts(&s->scts, scts, SCT_SOURCE_X509V3_EXTENSION);
   6489 
   6490         SCT_LIST_free(scts);
   6491     }
   6492 
   6493     return scts_extracted;
   6494 }
   6495 
   6496 /*
   6497  * Attempts to find all received SCTs by checking TLS extensions, the OCSP
   6498  * response (if it exists) and X509v3 extensions in the certificate.
   6499  * Returns NULL if an error occurs.
   6500  */
   6501 const STACK_OF(SCT) *SSL_get0_peer_scts(SSL *s)
   6502 {
   6503     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   6504 
   6505     if (sc == NULL)
   6506         return NULL;
   6507 
   6508     if (!sc->scts_parsed) {
   6509         if (ct_extract_tls_extension_scts(sc) < 0 ||
   6510             ct_extract_ocsp_response_scts(sc) < 0 ||
   6511             ct_extract_x509v3_extension_scts(sc) < 0)
   6512             goto err;
   6513 
   6514         sc->scts_parsed = 1;
   6515     }
   6516     return sc->scts;
   6517  err:
   6518     return NULL;
   6519 }
   6520 
   6521 static int ct_permissive(const CT_POLICY_EVAL_CTX *ctx,
   6522                          const STACK_OF(SCT) *scts, void *unused_arg)
   6523 {
   6524     return 1;
   6525 }
   6526 
   6527 static int ct_strict(const CT_POLICY_EVAL_CTX *ctx,
   6528                      const STACK_OF(SCT) *scts, void *unused_arg)
   6529 {
   6530     int count = scts != NULL ? sk_SCT_num(scts) : 0;
   6531     int i;
   6532 
   6533     for (i = 0; i < count; ++i) {
   6534         SCT *sct = sk_SCT_value(scts, i);
   6535         int status = SCT_get_validation_status(sct);
   6536 
   6537         if (status == SCT_VALIDATION_STATUS_VALID)
   6538             return 1;
   6539     }
   6540     ERR_raise(ERR_LIB_SSL, SSL_R_NO_VALID_SCTS);
   6541     return 0;
   6542 }
   6543 
   6544 int SSL_set_ct_validation_callback(SSL *s, ssl_ct_validation_cb callback,
   6545                                    void *arg)
   6546 {
   6547     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   6548 
   6549     if (sc == NULL)
   6550         return 0;
   6551 
   6552     /*
   6553      * Since code exists that uses the custom extension handler for CT, look
   6554      * for this and throw an error if they have already registered to use CT.
   6555      */
   6556     if (callback != NULL && SSL_CTX_has_client_custom_ext(s->ctx,
   6557                                                           TLSEXT_TYPE_signed_certificate_timestamp))
   6558     {
   6559         ERR_raise(ERR_LIB_SSL, SSL_R_CUSTOM_EXT_HANDLER_ALREADY_INSTALLED);
   6560         return 0;
   6561     }
   6562 
   6563     if (callback != NULL) {
   6564         /*
   6565          * If we are validating CT, then we MUST accept SCTs served via OCSP
   6566          */
   6567         if (!SSL_set_tlsext_status_type(s, TLSEXT_STATUSTYPE_ocsp))
   6568             return 0;
   6569     }
   6570 
   6571     sc->ct_validation_callback = callback;
   6572     sc->ct_validation_callback_arg = arg;
   6573 
   6574     return 1;
   6575 }
   6576 
   6577 int SSL_CTX_set_ct_validation_callback(SSL_CTX *ctx,
   6578                                        ssl_ct_validation_cb callback, void *arg)
   6579 {
   6580     /*
   6581      * Since code exists that uses the custom extension handler for CT, look for
   6582      * this and throw an error if they have already registered to use CT.
   6583      */
   6584     if (callback != NULL && SSL_CTX_has_client_custom_ext(ctx,
   6585                                                           TLSEXT_TYPE_signed_certificate_timestamp))
   6586     {
   6587         ERR_raise(ERR_LIB_SSL, SSL_R_CUSTOM_EXT_HANDLER_ALREADY_INSTALLED);
   6588         return 0;
   6589     }
   6590 
   6591     ctx->ct_validation_callback = callback;
   6592     ctx->ct_validation_callback_arg = arg;
   6593     return 1;
   6594 }
   6595 
   6596 int SSL_ct_is_enabled(const SSL *s)
   6597 {
   6598     const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
   6599 
   6600     if (sc == NULL)
   6601         return 0;
   6602 
   6603     return sc->ct_validation_callback != NULL;
   6604 }
   6605 
   6606 int SSL_CTX_ct_is_enabled(const SSL_CTX *ctx)
   6607 {
   6608     return ctx->ct_validation_callback != NULL;
   6609 }
   6610 
   6611 int ssl_validate_ct(SSL_CONNECTION *s)
   6612 {
   6613     int ret = 0;
   6614     X509 *cert = s->session != NULL ? s->session->peer : NULL;
   6615     X509 *issuer;
   6616     SSL_DANE *dane = &s->dane;
   6617     CT_POLICY_EVAL_CTX *ctx = NULL;
   6618     const STACK_OF(SCT) *scts;
   6619 
   6620     /*
   6621      * If no callback is set, the peer is anonymous, or its chain is invalid,
   6622      * skip SCT validation - just return success.  Applications that continue
   6623      * handshakes without certificates, with unverified chains, or pinned leaf
   6624      * certificates are outside the scope of the WebPKI and CT.
   6625      *
   6626      * The above exclusions notwithstanding the vast majority of peers will
   6627      * have rather ordinary certificate chains validated by typical
   6628      * applications that perform certificate verification and therefore will
   6629      * process SCTs when enabled.
   6630      */
   6631     if (s->ct_validation_callback == NULL || cert == NULL ||
   6632         s->verify_result != X509_V_OK ||
   6633         s->verified_chain == NULL || sk_X509_num(s->verified_chain) <= 1)
   6634         return 1;
   6635 
   6636     /*
   6637      * CT not applicable for chains validated via DANE-TA(2) or DANE-EE(3)
   6638      * trust-anchors.  See https://tools.ietf.org/html/rfc7671#section-4.2
   6639      */
   6640     if (DANETLS_ENABLED(dane) && dane->mtlsa != NULL) {
   6641         switch (dane->mtlsa->usage) {
   6642         case DANETLS_USAGE_DANE_TA:
   6643         case DANETLS_USAGE_DANE_EE:
   6644             return 1;
   6645         }
   6646     }
   6647 
   6648     ctx = CT_POLICY_EVAL_CTX_new_ex(SSL_CONNECTION_GET_CTX(s)->libctx,
   6649                                     SSL_CONNECTION_GET_CTX(s)->propq);
   6650     if (ctx == NULL) {
   6651         SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_CT_LIB);
   6652         goto end;
   6653     }
   6654 
   6655     issuer = sk_X509_value(s->verified_chain, 1);
   6656     CT_POLICY_EVAL_CTX_set1_cert(ctx, cert);
   6657     CT_POLICY_EVAL_CTX_set1_issuer(ctx, issuer);
   6658     CT_POLICY_EVAL_CTX_set_shared_CTLOG_STORE(ctx,
   6659             SSL_CONNECTION_GET_CTX(s)->ctlog_store);
   6660     CT_POLICY_EVAL_CTX_set_time(
   6661             ctx, (uint64_t)SSL_SESSION_get_time_ex(s->session) * 1000);
   6662 
   6663     scts = SSL_get0_peer_scts(SSL_CONNECTION_GET_SSL(s));
   6664 
   6665     /*
   6666      * This function returns success (> 0) only when all the SCTs are valid, 0
   6667      * when some are invalid, and < 0 on various internal errors (out of
   6668      * memory, etc.).  Having some, or even all, invalid SCTs is not sufficient
   6669      * reason to abort the handshake, that decision is up to the callback.
   6670      * Therefore, we error out only in the unexpected case that the return
   6671      * value is negative.
   6672      *
   6673      * XXX: One might well argue that the return value of this function is an
   6674      * unfortunate design choice.  Its job is only to determine the validation
   6675      * status of each of the provided SCTs.  So long as it correctly separates
   6676      * the wheat from the chaff it should return success.  Failure in this case
   6677      * ought to correspond to an inability to carry out its duties.
   6678      */
   6679     if (SCT_LIST_validate(scts, ctx) < 0) {
   6680         SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_R_SCT_VERIFICATION_FAILED);
   6681         goto end;
   6682     }
   6683 
   6684     ret = s->ct_validation_callback(ctx, scts, s->ct_validation_callback_arg);
   6685     if (ret < 0)
   6686         ret = 0;                /* This function returns 0 on failure */
   6687     if (!ret)
   6688         SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_R_CALLBACK_FAILED);
   6689 
   6690  end:
   6691     CT_POLICY_EVAL_CTX_free(ctx);
   6692     /*
   6693      * With SSL_VERIFY_NONE the session may be cached and reused despite a
   6694      * failure return code here.  Also the application may wish the complete
   6695      * the handshake, and then disconnect cleanly at a higher layer, after
   6696      * checking the verification status of the completed connection.
   6697      *
   6698      * We therefore force a certificate verification failure which will be
   6699      * visible via SSL_get_verify_result() and cached as part of any resumed
   6700      * session.
   6701      *
   6702      * Note: the permissive callback is for information gathering only, always
   6703      * returns success, and does not affect verification status.  Only the
   6704      * strict callback or a custom application-specified callback can trigger
   6705      * connection failure or record a verification error.
   6706      */
   6707     if (ret <= 0)
   6708         s->verify_result = X509_V_ERR_NO_VALID_SCTS;
   6709     return ret;
   6710 }
   6711 
   6712 int SSL_CTX_enable_ct(SSL_CTX *ctx, int validation_mode)
   6713 {
   6714     switch (validation_mode) {
   6715     default:
   6716         ERR_raise(ERR_LIB_SSL, SSL_R_INVALID_CT_VALIDATION_TYPE);
   6717         return 0;
   6718     case SSL_CT_VALIDATION_PERMISSIVE:
   6719         return SSL_CTX_set_ct_validation_callback(ctx, ct_permissive, NULL);
   6720     case SSL_CT_VALIDATION_STRICT:
   6721         return SSL_CTX_set_ct_validation_callback(ctx, ct_strict, NULL);
   6722     }
   6723 }
   6724 
   6725 int SSL_enable_ct(SSL *s, int validation_mode)
   6726 {
   6727     switch (validation_mode) {
   6728     default:
   6729         ERR_raise(ERR_LIB_SSL, SSL_R_INVALID_CT_VALIDATION_TYPE);
   6730         return 0;
   6731     case SSL_CT_VALIDATION_PERMISSIVE:
   6732         return SSL_set_ct_validation_callback(s, ct_permissive, NULL);
   6733     case SSL_CT_VALIDATION_STRICT:
   6734         return SSL_set_ct_validation_callback(s, ct_strict, NULL);
   6735     }
   6736 }
   6737 
   6738 int SSL_CTX_set_default_ctlog_list_file(SSL_CTX *ctx)
   6739 {
   6740     return CTLOG_STORE_load_default_file(ctx->ctlog_store);
   6741 }
   6742 
   6743 int SSL_CTX_set_ctlog_list_file(SSL_CTX *ctx, const char *path)
   6744 {
   6745     return CTLOG_STORE_load_file(ctx->ctlog_store, path);
   6746 }
   6747 
   6748 void SSL_CTX_set0_ctlog_store(SSL_CTX *ctx, CTLOG_STORE *logs)
   6749 {
   6750     CTLOG_STORE_free(ctx->ctlog_store);
   6751     ctx->ctlog_store = logs;
   6752 }
   6753 
   6754 const CTLOG_STORE *SSL_CTX_get0_ctlog_store(const SSL_CTX *ctx)
   6755 {
   6756     return ctx->ctlog_store;
   6757 }
   6758 
   6759 #endif  /* OPENSSL_NO_CT */
   6760 
   6761 void SSL_CTX_set_client_hello_cb(SSL_CTX *c, SSL_client_hello_cb_fn cb,
   6762                                  void *arg)
   6763 {
   6764     c->client_hello_cb = cb;
   6765     c->client_hello_cb_arg = arg;
   6766 }
   6767 
   6768 void SSL_CTX_set_new_pending_conn_cb(SSL_CTX *c, SSL_new_pending_conn_cb_fn cb,
   6769                                      void *arg)
   6770 {
   6771     c->new_pending_conn_cb = cb;
   6772     c->new_pending_conn_arg = arg;
   6773 }
   6774 
   6775 int SSL_client_hello_isv2(SSL *s)
   6776 {
   6777     const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   6778 
   6779     if (sc == NULL)
   6780         return 0;
   6781 
   6782     if (sc->clienthello == NULL)
   6783         return 0;
   6784     return sc->clienthello->isv2;
   6785 }
   6786 
   6787 unsigned int SSL_client_hello_get0_legacy_version(SSL *s)
   6788 {
   6789     const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   6790 
   6791     if (sc == NULL)
   6792         return 0;
   6793 
   6794     if (sc->clienthello == NULL)
   6795         return 0;
   6796     return sc->clienthello->legacy_version;
   6797 }
   6798 
   6799 size_t SSL_client_hello_get0_random(SSL *s, const unsigned char **out)
   6800 {
   6801     const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   6802 
   6803     if (sc == NULL)
   6804         return 0;
   6805 
   6806     if (sc->clienthello == NULL)
   6807         return 0;
   6808     if (out != NULL)
   6809         *out = sc->clienthello->random;
   6810     return SSL3_RANDOM_SIZE;
   6811 }
   6812 
   6813 size_t SSL_client_hello_get0_session_id(SSL *s, const unsigned char **out)
   6814 {
   6815     const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   6816 
   6817     if (sc == NULL)
   6818         return 0;
   6819 
   6820     if (sc->clienthello == NULL)
   6821         return 0;
   6822     if (out != NULL)
   6823         *out = sc->clienthello->session_id;
   6824     return sc->clienthello->session_id_len;
   6825 }
   6826 
   6827 size_t SSL_client_hello_get0_ciphers(SSL *s, const unsigned char **out)
   6828 {
   6829     const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   6830 
   6831     if (sc == NULL)
   6832         return 0;
   6833 
   6834     if (sc->clienthello == NULL)
   6835         return 0;
   6836     if (out != NULL)
   6837         *out = PACKET_data(&sc->clienthello->ciphersuites);
   6838     return PACKET_remaining(&sc->clienthello->ciphersuites);
   6839 }
   6840 
   6841 size_t SSL_client_hello_get0_compression_methods(SSL *s, const unsigned char **out)
   6842 {
   6843     const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   6844 
   6845     if (sc == NULL)
   6846         return 0;
   6847 
   6848     if (sc->clienthello == NULL)
   6849         return 0;
   6850     if (out != NULL)
   6851         *out = sc->clienthello->compressions;
   6852     return sc->clienthello->compressions_len;
   6853 }
   6854 
   6855 int SSL_client_hello_get1_extensions_present(SSL *s, int **out, size_t *outlen)
   6856 {
   6857     RAW_EXTENSION *ext;
   6858     int *present;
   6859     size_t num = 0, i;
   6860     const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   6861 
   6862     if (sc == NULL)
   6863         return 0;
   6864 
   6865     if (sc->clienthello == NULL || out == NULL || outlen == NULL)
   6866         return 0;
   6867     for (i = 0; i < sc->clienthello->pre_proc_exts_len; i++) {
   6868         ext = sc->clienthello->pre_proc_exts + i;
   6869         if (ext->present)
   6870             num++;
   6871     }
   6872     if (num == 0) {
   6873         *out = NULL;
   6874         *outlen = 0;
   6875         return 1;
   6876     }
   6877     if ((present = OPENSSL_malloc(sizeof(*present) * num)) == NULL)
   6878         return 0;
   6879     for (i = 0; i < sc->clienthello->pre_proc_exts_len; i++) {
   6880         ext = sc->clienthello->pre_proc_exts + i;
   6881         if (ext->present) {
   6882             if (ext->received_order >= num)
   6883                 goto err;
   6884             present[ext->received_order] = ext->type;
   6885         }
   6886     }
   6887     *out = present;
   6888     *outlen = num;
   6889     return 1;
   6890  err:
   6891     OPENSSL_free(present);
   6892     return 0;
   6893 }
   6894 
   6895 int SSL_client_hello_get_extension_order(SSL *s, uint16_t *exts, size_t *num_exts)
   6896 {
   6897     RAW_EXTENSION *ext;
   6898     size_t num = 0, i;
   6899     const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   6900 
   6901     if (sc == NULL)
   6902         return 0;
   6903 
   6904     if (sc->clienthello == NULL || num_exts == NULL)
   6905         return 0;
   6906     for (i = 0; i < sc->clienthello->pre_proc_exts_len; i++) {
   6907         ext = sc->clienthello->pre_proc_exts + i;
   6908         if (ext->present)
   6909             num++;
   6910     }
   6911     if (num == 0) {
   6912         *num_exts = 0;
   6913         return 1;
   6914     }
   6915     if (exts == NULL) {
   6916         *num_exts = num;
   6917         return 1;
   6918     }
   6919     if (*num_exts < num)
   6920         return 0;
   6921     for (i = 0; i < sc->clienthello->pre_proc_exts_len; i++) {
   6922         ext = sc->clienthello->pre_proc_exts + i;
   6923         if (ext->present) {
   6924             if (ext->received_order >= num)
   6925                 return 0;
   6926             exts[ext->received_order] = ext->type;
   6927         }
   6928     }
   6929     *num_exts = num;
   6930     return 1;
   6931 }
   6932 
   6933 int SSL_client_hello_get0_ext(SSL *s, unsigned int type, const unsigned char **out,
   6934                        size_t *outlen)
   6935 {
   6936     size_t i;
   6937     RAW_EXTENSION *r;
   6938     const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   6939 
   6940     if (sc == NULL)
   6941         return 0;
   6942 
   6943     if (sc->clienthello == NULL)
   6944         return 0;
   6945     for (i = 0; i < sc->clienthello->pre_proc_exts_len; ++i) {
   6946         r = sc->clienthello->pre_proc_exts + i;
   6947         if (r->present && r->type == type) {
   6948             if (out != NULL)
   6949                 *out = PACKET_data(&r->data);
   6950             if (outlen != NULL)
   6951                 *outlen = PACKET_remaining(&r->data);
   6952             return 1;
   6953         }
   6954     }
   6955     return 0;
   6956 }
   6957 
   6958 int SSL_free_buffers(SSL *ssl)
   6959 {
   6960     RECORD_LAYER *rl;
   6961     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL_ONLY(ssl);
   6962 
   6963     if (sc == NULL)
   6964         return 0;
   6965 
   6966     rl = &sc->rlayer;
   6967 
   6968     return rl->rrlmethod->free_buffers(rl->rrl)
   6969            && rl->wrlmethod->free_buffers(rl->wrl);
   6970 }
   6971 
   6972 int SSL_alloc_buffers(SSL *ssl)
   6973 {
   6974     RECORD_LAYER *rl;
   6975     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(ssl);
   6976 
   6977     if (sc == NULL)
   6978         return 0;
   6979 
   6980     /* QUIC always has buffers allocated. */
   6981     if (IS_QUIC(ssl))
   6982         return 1;
   6983 
   6984     rl = &sc->rlayer;
   6985 
   6986     return rl->rrlmethod->alloc_buffers(rl->rrl)
   6987            && rl->wrlmethod->alloc_buffers(rl->wrl);
   6988 }
   6989 
   6990 void SSL_CTX_set_keylog_callback(SSL_CTX *ctx, SSL_CTX_keylog_cb_func cb)
   6991 {
   6992     ctx->keylog_callback = cb;
   6993 }
   6994 
   6995 SSL_CTX_keylog_cb_func SSL_CTX_get_keylog_callback(const SSL_CTX *ctx)
   6996 {
   6997     return ctx->keylog_callback;
   6998 }
   6999 
   7000 static int nss_keylog_int(const char *prefix,
   7001                           SSL_CONNECTION *sc,
   7002                           const uint8_t *parameter_1,
   7003                           size_t parameter_1_len,
   7004                           const uint8_t *parameter_2,
   7005                           size_t parameter_2_len)
   7006 {
   7007     char *out = NULL;
   7008     char *cursor = NULL;
   7009     size_t out_len = 0, i, prefix_len;
   7010     SSL_CTX *sctx = SSL_CONNECTION_GET_CTX(sc);
   7011 
   7012 #ifndef OPENSSL_NO_SSLKEYLOG
   7013     if (sctx->keylog_callback == NULL && sctx->do_sslkeylog == 0)
   7014         return 1;
   7015 #else
   7016     if (sctx->keylog_callback == NULL)
   7017         return 1;
   7018 #endif
   7019 
   7020     /*
   7021      * Our output buffer will contain the following strings, rendered with
   7022      * space characters in between, terminated by a NULL character: first the
   7023      * prefix, then the first parameter, then the second parameter. The
   7024      * meaning of each parameter depends on the specific key material being
   7025      * logged. Note that the first and second parameters are encoded in
   7026      * hexadecimal, so we need a buffer that is twice their lengths.
   7027      */
   7028     prefix_len = strlen(prefix);
   7029     out_len = prefix_len + (2 * parameter_1_len) + (2 * parameter_2_len) + 3;
   7030     if ((out = cursor = OPENSSL_malloc(out_len)) == NULL)
   7031         return 0;
   7032 
   7033     memcpy(cursor, prefix, prefix_len);
   7034     cursor += prefix_len;
   7035     *cursor++ = ' ';
   7036 
   7037     for (i = 0; i < parameter_1_len; ++i)
   7038         cursor += ossl_to_lowerhex(cursor, parameter_1[i]);
   7039     *cursor++ = ' ';
   7040 
   7041     for (i = 0; i < parameter_2_len; ++i)
   7042         cursor += ossl_to_lowerhex(cursor, parameter_2[i]);
   7043     *cursor = '\0';
   7044 
   7045 #ifndef OPENSSL_NO_SSLKEYLOG
   7046     if (sctx->do_sslkeylog == 1)
   7047         do_sslkeylogfile(SSL_CONNECTION_GET_SSL(sc), (const char *)out);
   7048 #endif
   7049     if (sctx->keylog_callback != NULL)
   7050         sctx->keylog_callback(SSL_CONNECTION_GET_USER_SSL(sc), (const char *)out);
   7051     OPENSSL_clear_free(out, out_len);
   7052     return 1;
   7053 }
   7054 
   7055 int ssl_log_rsa_client_key_exchange(SSL_CONNECTION *sc,
   7056                                     const uint8_t *encrypted_premaster,
   7057                                     size_t encrypted_premaster_len,
   7058                                     const uint8_t *premaster,
   7059                                     size_t premaster_len)
   7060 {
   7061     if (encrypted_premaster_len < 8) {
   7062         SSLfatal(sc, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
   7063         return 0;
   7064     }
   7065 
   7066     /* We only want the first 8 bytes of the encrypted premaster as a tag. */
   7067     return nss_keylog_int("RSA",
   7068                           sc,
   7069                           encrypted_premaster,
   7070                           8,
   7071                           premaster,
   7072                           premaster_len);
   7073 }
   7074 
   7075 int ssl_log_secret(SSL_CONNECTION *sc,
   7076                    const char *label,
   7077                    const uint8_t *secret,
   7078                    size_t secret_len)
   7079 {
   7080     return nss_keylog_int(label,
   7081                           sc,
   7082                           sc->s3.client_random,
   7083                           SSL3_RANDOM_SIZE,
   7084                           secret,
   7085                           secret_len);
   7086 }
   7087 
   7088 #define SSLV2_CIPHER_LEN    3
   7089 
   7090 int ssl_cache_cipherlist(SSL_CONNECTION *s, PACKET *cipher_suites, int sslv2format)
   7091 {
   7092     int n;
   7093 
   7094     n = sslv2format ? SSLV2_CIPHER_LEN : TLS_CIPHER_LEN;
   7095 
   7096     if (PACKET_remaining(cipher_suites) == 0) {
   7097         SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_NO_CIPHERS_SPECIFIED);
   7098         return 0;
   7099     }
   7100 
   7101     if (PACKET_remaining(cipher_suites) % n != 0) {
   7102         SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST);
   7103         return 0;
   7104     }
   7105 
   7106     OPENSSL_free(s->s3.tmp.ciphers_raw);
   7107     s->s3.tmp.ciphers_raw = NULL;
   7108     s->s3.tmp.ciphers_rawlen = 0;
   7109 
   7110     if (sslv2format) {
   7111         size_t numciphers = PACKET_remaining(cipher_suites) / n;
   7112         PACKET sslv2ciphers = *cipher_suites;
   7113         unsigned int leadbyte;
   7114         unsigned char *raw;
   7115 
   7116         /*
   7117          * We store the raw ciphers list in SSLv3+ format so we need to do some
   7118          * preprocessing to convert the list first. If there are any SSLv2 only
   7119          * ciphersuites with a non-zero leading byte then we are going to
   7120          * slightly over allocate because we won't store those. But that isn't a
   7121          * problem.
   7122          */
   7123         raw = OPENSSL_malloc(numciphers * TLS_CIPHER_LEN);
   7124         s->s3.tmp.ciphers_raw = raw;
   7125         if (raw == NULL) {
   7126             SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_CRYPTO_LIB);
   7127             return 0;
   7128         }
   7129         for (s->s3.tmp.ciphers_rawlen = 0;
   7130              PACKET_remaining(&sslv2ciphers) > 0;
   7131              raw += TLS_CIPHER_LEN) {
   7132             if (!PACKET_get_1(&sslv2ciphers, &leadbyte)
   7133                     || (leadbyte == 0
   7134                         && !PACKET_copy_bytes(&sslv2ciphers, raw,
   7135                                               TLS_CIPHER_LEN))
   7136                     || (leadbyte != 0
   7137                         && !PACKET_forward(&sslv2ciphers, TLS_CIPHER_LEN))) {
   7138                 SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_PACKET);
   7139                 OPENSSL_free(s->s3.tmp.ciphers_raw);
   7140                 s->s3.tmp.ciphers_raw = NULL;
   7141                 s->s3.tmp.ciphers_rawlen = 0;
   7142                 return 0;
   7143             }
   7144             if (leadbyte == 0)
   7145                 s->s3.tmp.ciphers_rawlen += TLS_CIPHER_LEN;
   7146         }
   7147     } else if (!PACKET_memdup(cipher_suites, &s->s3.tmp.ciphers_raw,
   7148                            &s->s3.tmp.ciphers_rawlen)) {
   7149         SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
   7150         return 0;
   7151     }
   7152     return 1;
   7153 }
   7154 
   7155 int SSL_bytes_to_cipher_list(SSL *s, const unsigned char *bytes, size_t len,
   7156                              int isv2format, STACK_OF(SSL_CIPHER) **sk,
   7157                              STACK_OF(SSL_CIPHER) **scsvs)
   7158 {
   7159     PACKET pkt;
   7160     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   7161 
   7162     if (sc == NULL)
   7163         return 0;
   7164 
   7165     if (!PACKET_buf_init(&pkt, bytes, len))
   7166         return 0;
   7167     return ossl_bytes_to_cipher_list(sc, &pkt, sk, scsvs, isv2format, 0);
   7168 }
   7169 
   7170 int ossl_bytes_to_cipher_list(SSL_CONNECTION *s, PACKET *cipher_suites,
   7171                               STACK_OF(SSL_CIPHER) **skp,
   7172                               STACK_OF(SSL_CIPHER) **scsvs_out,
   7173                               int sslv2format, int fatal)
   7174 {
   7175     const SSL_CIPHER *c;
   7176     STACK_OF(SSL_CIPHER) *sk = NULL;
   7177     STACK_OF(SSL_CIPHER) *scsvs = NULL;
   7178     int n;
   7179     /* 3 = SSLV2_CIPHER_LEN > TLS_CIPHER_LEN = 2. */
   7180     unsigned char cipher[SSLV2_CIPHER_LEN];
   7181 
   7182     n = sslv2format ? SSLV2_CIPHER_LEN : TLS_CIPHER_LEN;
   7183 
   7184     if (PACKET_remaining(cipher_suites) == 0) {
   7185         if (fatal)
   7186             SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_NO_CIPHERS_SPECIFIED);
   7187         else
   7188             ERR_raise(ERR_LIB_SSL, SSL_R_NO_CIPHERS_SPECIFIED);
   7189         return 0;
   7190     }
   7191 
   7192     if (PACKET_remaining(cipher_suites) % n != 0) {
   7193         if (fatal)
   7194             SSLfatal(s, SSL_AD_DECODE_ERROR,
   7195                      SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST);
   7196         else
   7197             ERR_raise(ERR_LIB_SSL, SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST);
   7198         return 0;
   7199     }
   7200 
   7201     sk = sk_SSL_CIPHER_new_null();
   7202     scsvs = sk_SSL_CIPHER_new_null();
   7203     if (sk == NULL || scsvs == NULL) {
   7204         if (fatal)
   7205             SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_CRYPTO_LIB);
   7206         else
   7207             ERR_raise(ERR_LIB_SSL, ERR_R_CRYPTO_LIB);
   7208         goto err;
   7209     }
   7210 
   7211     while (PACKET_copy_bytes(cipher_suites, cipher, n)) {
   7212         /*
   7213          * SSLv3 ciphers wrapped in an SSLv2-compatible ClientHello have the
   7214          * first byte set to zero, while true SSLv2 ciphers have a non-zero
   7215          * first byte. We don't support any true SSLv2 ciphers, so skip them.
   7216          */
   7217         if (sslv2format && cipher[0] != '\0')
   7218             continue;
   7219 
   7220         /* For SSLv2-compat, ignore leading 0-byte. */
   7221         c = ssl_get_cipher_by_char(s, sslv2format ? &cipher[1] : cipher, 1);
   7222         if (c != NULL) {
   7223             if ((c->valid && !sk_SSL_CIPHER_push(sk, c)) ||
   7224                 (!c->valid && !sk_SSL_CIPHER_push(scsvs, c))) {
   7225                 if (fatal)
   7226                     SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_CRYPTO_LIB);
   7227                 else
   7228                     ERR_raise(ERR_LIB_SSL, ERR_R_CRYPTO_LIB);
   7229                 goto err;
   7230             }
   7231         }
   7232     }
   7233     if (PACKET_remaining(cipher_suites) > 0) {
   7234         if (fatal)
   7235             SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_LENGTH);
   7236         else
   7237             ERR_raise(ERR_LIB_SSL, SSL_R_BAD_LENGTH);
   7238         goto err;
   7239     }
   7240 
   7241     if (skp != NULL)
   7242         *skp = sk;
   7243     else
   7244         sk_SSL_CIPHER_free(sk);
   7245     if (scsvs_out != NULL)
   7246         *scsvs_out = scsvs;
   7247     else
   7248         sk_SSL_CIPHER_free(scsvs);
   7249     return 1;
   7250  err:
   7251     sk_SSL_CIPHER_free(sk);
   7252     sk_SSL_CIPHER_free(scsvs);
   7253     return 0;
   7254 }
   7255 
   7256 int SSL_CTX_set_max_early_data(SSL_CTX *ctx, uint32_t max_early_data)
   7257 {
   7258     ctx->max_early_data = max_early_data;
   7259 
   7260     return 1;
   7261 }
   7262 
   7263 uint32_t SSL_CTX_get_max_early_data(const SSL_CTX *ctx)
   7264 {
   7265     return ctx->max_early_data;
   7266 }
   7267 
   7268 int SSL_set_max_early_data(SSL *s, uint32_t max_early_data)
   7269 {
   7270     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL_ONLY(s);
   7271 
   7272     if (sc == NULL)
   7273         return 0;
   7274 
   7275     sc->max_early_data = max_early_data;
   7276 
   7277     return 1;
   7278 }
   7279 
   7280 uint32_t SSL_get_max_early_data(const SSL *s)
   7281 {
   7282     const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
   7283 
   7284     if (sc == NULL)
   7285         return 0;
   7286 
   7287     return sc->max_early_data;
   7288 }
   7289 
   7290 int SSL_CTX_set_recv_max_early_data(SSL_CTX *ctx, uint32_t recv_max_early_data)
   7291 {
   7292     ctx->recv_max_early_data = recv_max_early_data;
   7293 
   7294     return 1;
   7295 }
   7296 
   7297 uint32_t SSL_CTX_get_recv_max_early_data(const SSL_CTX *ctx)
   7298 {
   7299     return ctx->recv_max_early_data;
   7300 }
   7301 
   7302 int SSL_set_recv_max_early_data(SSL *s, uint32_t recv_max_early_data)
   7303 {
   7304     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL_ONLY(s);
   7305 
   7306     if (sc == NULL)
   7307         return 0;
   7308 
   7309     sc->recv_max_early_data = recv_max_early_data;
   7310 
   7311     return 1;
   7312 }
   7313 
   7314 uint32_t SSL_get_recv_max_early_data(const SSL *s)
   7315 {
   7316     const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
   7317 
   7318     if (sc == NULL)
   7319         return 0;
   7320 
   7321     return sc->recv_max_early_data;
   7322 }
   7323 
   7324 __owur unsigned int ssl_get_max_send_fragment(const SSL_CONNECTION *sc)
   7325 {
   7326     /* Return any active Max Fragment Len extension */
   7327     if (sc->session != NULL && USE_MAX_FRAGMENT_LENGTH_EXT(sc->session))
   7328         return GET_MAX_FRAGMENT_LENGTH(sc->session);
   7329 
   7330     /* return current SSL connection setting */
   7331     return sc->max_send_fragment;
   7332 }
   7333 
   7334 __owur unsigned int ssl_get_split_send_fragment(const SSL_CONNECTION *sc)
   7335 {
   7336     /* Return a value regarding an active Max Fragment Len extension */
   7337     if (sc->session != NULL && USE_MAX_FRAGMENT_LENGTH_EXT(sc->session)
   7338         && sc->split_send_fragment > GET_MAX_FRAGMENT_LENGTH(sc->session))
   7339         return GET_MAX_FRAGMENT_LENGTH(sc->session);
   7340 
   7341     /* else limit |split_send_fragment| to current |max_send_fragment| */
   7342     if (sc->split_send_fragment > sc->max_send_fragment)
   7343         return sc->max_send_fragment;
   7344 
   7345     /* return current SSL connection setting */
   7346     return sc->split_send_fragment;
   7347 }
   7348 
   7349 int SSL_stateless(SSL *s)
   7350 {
   7351     int ret;
   7352     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL_ONLY(s);
   7353 
   7354     if (sc == NULL)
   7355         return 0;
   7356 
   7357     /* Ensure there is no state left over from a previous invocation */
   7358     if (!SSL_clear(s))
   7359         return 0;
   7360 
   7361     ERR_clear_error();
   7362 
   7363     sc->s3.flags |= TLS1_FLAGS_STATELESS;
   7364     ret = SSL_accept(s);
   7365     sc->s3.flags &= ~TLS1_FLAGS_STATELESS;
   7366 
   7367     if (ret > 0 && sc->ext.cookieok)
   7368         return 1;
   7369 
   7370     if (sc->hello_retry_request == SSL_HRR_PENDING && !ossl_statem_in_error(sc))
   7371         return 0;
   7372 
   7373     return -1;
   7374 }
   7375 
   7376 void SSL_CTX_set_post_handshake_auth(SSL_CTX *ctx, int val)
   7377 {
   7378     ctx->pha_enabled = val;
   7379 }
   7380 
   7381 void SSL_set_post_handshake_auth(SSL *ssl, int val)
   7382 {
   7383     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL_ONLY(ssl);
   7384 
   7385     if (sc == NULL)
   7386         return;
   7387 
   7388     sc->pha_enabled = val;
   7389 }
   7390 
   7391 int SSL_verify_client_post_handshake(SSL *ssl)
   7392 {
   7393     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(ssl);
   7394 
   7395 #ifndef OPENSSL_NO_QUIC
   7396     if (IS_QUIC(ssl)) {
   7397         ERR_raise(ERR_LIB_SSL, SSL_R_WRONG_SSL_VERSION);
   7398         return 0;
   7399     }
   7400 #endif
   7401 
   7402     if (sc == NULL)
   7403         return 0;
   7404 
   7405     if (!SSL_CONNECTION_IS_TLS13(sc)) {
   7406         ERR_raise(ERR_LIB_SSL, SSL_R_WRONG_SSL_VERSION);
   7407         return 0;
   7408     }
   7409     if (!sc->server) {
   7410         ERR_raise(ERR_LIB_SSL, SSL_R_NOT_SERVER);
   7411         return 0;
   7412     }
   7413 
   7414     if (!SSL_is_init_finished(ssl)) {
   7415         ERR_raise(ERR_LIB_SSL, SSL_R_STILL_IN_INIT);
   7416         return 0;
   7417     }
   7418 
   7419     switch (sc->post_handshake_auth) {
   7420     case SSL_PHA_NONE:
   7421         ERR_raise(ERR_LIB_SSL, SSL_R_EXTENSION_NOT_RECEIVED);
   7422         return 0;
   7423     default:
   7424     case SSL_PHA_EXT_SENT:
   7425         ERR_raise(ERR_LIB_SSL, ERR_R_INTERNAL_ERROR);
   7426         return 0;
   7427     case SSL_PHA_EXT_RECEIVED:
   7428         break;
   7429     case SSL_PHA_REQUEST_PENDING:
   7430         ERR_raise(ERR_LIB_SSL, SSL_R_REQUEST_PENDING);
   7431         return 0;
   7432     case SSL_PHA_REQUESTED:
   7433         ERR_raise(ERR_LIB_SSL, SSL_R_REQUEST_SENT);
   7434         return 0;
   7435     }
   7436 
   7437     sc->post_handshake_auth = SSL_PHA_REQUEST_PENDING;
   7438 
   7439     /* checks verify_mode and algorithm_auth */
   7440     if (!send_certificate_request(sc)) {
   7441         sc->post_handshake_auth = SSL_PHA_EXT_RECEIVED; /* restore on error */
   7442         ERR_raise(ERR_LIB_SSL, SSL_R_INVALID_CONFIG);
   7443         return 0;
   7444     }
   7445 
   7446     ossl_statem_set_in_init(sc, 1);
   7447     return 1;
   7448 }
   7449 
   7450 int SSL_CTX_set_session_ticket_cb(SSL_CTX *ctx,
   7451                                   SSL_CTX_generate_session_ticket_fn gen_cb,
   7452                                   SSL_CTX_decrypt_session_ticket_fn dec_cb,
   7453                                   void *arg)
   7454 {
   7455     ctx->generate_ticket_cb = gen_cb;
   7456     ctx->decrypt_ticket_cb = dec_cb;
   7457     ctx->ticket_cb_data = arg;
   7458     return 1;
   7459 }
   7460 
   7461 void SSL_CTX_set_allow_early_data_cb(SSL_CTX *ctx,
   7462                                      SSL_allow_early_data_cb_fn cb,
   7463                                      void *arg)
   7464 {
   7465     ctx->allow_early_data_cb = cb;
   7466     ctx->allow_early_data_cb_data = arg;
   7467 }
   7468 
   7469 void SSL_set_allow_early_data_cb(SSL *s,
   7470                                  SSL_allow_early_data_cb_fn cb,
   7471                                  void *arg)
   7472 {
   7473     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL_ONLY(s);
   7474 
   7475     if (sc == NULL)
   7476         return;
   7477 
   7478     sc->allow_early_data_cb = cb;
   7479     sc->allow_early_data_cb_data = arg;
   7480 }
   7481 
   7482 const EVP_CIPHER *ssl_evp_cipher_fetch(OSSL_LIB_CTX *libctx,
   7483                                        int nid,
   7484                                        const char *properties)
   7485 {
   7486     const EVP_CIPHER *ciph;
   7487 
   7488     ciph = tls_get_cipher_from_engine(nid);
   7489     if (ciph != NULL)
   7490         return ciph;
   7491 
   7492     /*
   7493      * If there is no engine cipher then we do an explicit fetch. This may fail
   7494      * and that could be ok
   7495      */
   7496     ERR_set_mark();
   7497     ciph = EVP_CIPHER_fetch(libctx, OBJ_nid2sn(nid), properties);
   7498     if (ciph != NULL) {
   7499         OSSL_PARAM params[2];
   7500         int decrypt_only = 0;
   7501 
   7502         params[0] = OSSL_PARAM_construct_int(OSSL_CIPHER_PARAM_DECRYPT_ONLY,
   7503                                              &decrypt_only);
   7504         params[1] = OSSL_PARAM_construct_end();
   7505         if (EVP_CIPHER_get_params((EVP_CIPHER *)ciph, params)
   7506             && decrypt_only) {
   7507             /* If a cipher is decrypt-only, it is unusable */
   7508             EVP_CIPHER_free((EVP_CIPHER *)ciph);
   7509             ciph = NULL;
   7510         }
   7511     }
   7512     ERR_pop_to_mark();
   7513     return ciph;
   7514 }
   7515 
   7516 
   7517 int ssl_evp_cipher_up_ref(const EVP_CIPHER *cipher)
   7518 {
   7519     /* Don't up-ref an implicit EVP_CIPHER */
   7520     if (EVP_CIPHER_get0_provider(cipher) == NULL)
   7521         return 1;
   7522 
   7523     /*
   7524      * The cipher was explicitly fetched and therefore it is safe to cast
   7525      * away the const
   7526      */
   7527     return EVP_CIPHER_up_ref((EVP_CIPHER *)cipher);
   7528 }
   7529 
   7530 void ssl_evp_cipher_free(const EVP_CIPHER *cipher)
   7531 {
   7532     if (cipher == NULL)
   7533         return;
   7534 
   7535     if (EVP_CIPHER_get0_provider(cipher) != NULL) {
   7536         /*
   7537          * The cipher was explicitly fetched and therefore it is safe to cast
   7538          * away the const
   7539          */
   7540         EVP_CIPHER_free((EVP_CIPHER *)cipher);
   7541     }
   7542 }
   7543 
   7544 const EVP_MD *ssl_evp_md_fetch(OSSL_LIB_CTX *libctx,
   7545                                int nid,
   7546                                const char *properties)
   7547 {
   7548     const EVP_MD *md;
   7549 
   7550     md = tls_get_digest_from_engine(nid);
   7551     if (md != NULL)
   7552         return md;
   7553 
   7554     /* Otherwise we do an explicit fetch */
   7555     ERR_set_mark();
   7556     md = EVP_MD_fetch(libctx, OBJ_nid2sn(nid), properties);
   7557     ERR_pop_to_mark();
   7558     return md;
   7559 }
   7560 
   7561 int ssl_evp_md_up_ref(const EVP_MD *md)
   7562 {
   7563     /* Don't up-ref an implicit EVP_MD */
   7564     if (EVP_MD_get0_provider(md) == NULL)
   7565         return 1;
   7566 
   7567     /*
   7568      * The digest was explicitly fetched and therefore it is safe to cast
   7569      * away the const
   7570      */
   7571     return EVP_MD_up_ref((EVP_MD *)md);
   7572 }
   7573 
   7574 void ssl_evp_md_free(const EVP_MD *md)
   7575 {
   7576     if (md == NULL)
   7577         return;
   7578 
   7579     if (EVP_MD_get0_provider(md) != NULL) {
   7580         /*
   7581          * The digest was explicitly fetched and therefore it is safe to cast
   7582          * away the const
   7583          */
   7584         EVP_MD_free((EVP_MD *)md);
   7585     }
   7586 }
   7587 
   7588 int SSL_set0_tmp_dh_pkey(SSL *s, EVP_PKEY *dhpkey)
   7589 {
   7590     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   7591 
   7592     if (sc == NULL)
   7593         return 0;
   7594 
   7595     if (!ssl_security(sc, SSL_SECOP_TMP_DH,
   7596                       EVP_PKEY_get_security_bits(dhpkey), 0, dhpkey)) {
   7597         ERR_raise(ERR_LIB_SSL, SSL_R_DH_KEY_TOO_SMALL);
   7598         return 0;
   7599     }
   7600     EVP_PKEY_free(sc->cert->dh_tmp);
   7601     sc->cert->dh_tmp = dhpkey;
   7602     return 1;
   7603 }
   7604 
   7605 int SSL_CTX_set0_tmp_dh_pkey(SSL_CTX *ctx, EVP_PKEY *dhpkey)
   7606 {
   7607     if (!ssl_ctx_security(ctx, SSL_SECOP_TMP_DH,
   7608                           EVP_PKEY_get_security_bits(dhpkey), 0, dhpkey)) {
   7609         ERR_raise(ERR_LIB_SSL, SSL_R_DH_KEY_TOO_SMALL);
   7610         return 0;
   7611     }
   7612     EVP_PKEY_free(ctx->cert->dh_tmp);
   7613     ctx->cert->dh_tmp = dhpkey;
   7614     return 1;
   7615 }
   7616 
   7617 /* QUIC-specific methods which are supported on QUIC connections only. */
   7618 int SSL_handle_events(SSL *s)
   7619 {
   7620     SSL_CONNECTION *sc;
   7621 
   7622 #ifndef OPENSSL_NO_QUIC
   7623     if (IS_QUIC(s))
   7624         return ossl_quic_handle_events(s);
   7625 #endif
   7626 
   7627     sc = SSL_CONNECTION_FROM_SSL_ONLY(s);
   7628     if (sc != NULL && SSL_CONNECTION_IS_DTLS(sc))
   7629         /*
   7630          * DTLSv1_handle_timeout returns 0 if the timer wasn't expired yet,
   7631          * which we consider a success case. Theoretically DTLSv1_handle_timeout
   7632          * can also return 0 if s is NULL or not a DTLS object, but we've
   7633          * already ruled out those possibilities above, so this is not possible
   7634          * here. Thus the only failure cases are where DTLSv1_handle_timeout
   7635          * returns -1.
   7636          */
   7637         return DTLSv1_handle_timeout(s) >= 0;
   7638 
   7639     return 1;
   7640 }
   7641 
   7642 int SSL_get_event_timeout(SSL *s, struct timeval *tv, int *is_infinite)
   7643 {
   7644     SSL_CONNECTION *sc;
   7645 
   7646 #ifndef OPENSSL_NO_QUIC
   7647     if (IS_QUIC(s))
   7648         return ossl_quic_get_event_timeout(s, tv, is_infinite);
   7649 #endif
   7650 
   7651     sc = SSL_CONNECTION_FROM_SSL_ONLY(s);
   7652     if (sc != NULL && SSL_CONNECTION_IS_DTLS(sc)
   7653         && DTLSv1_get_timeout(s, tv)) {
   7654         *is_infinite = 0;
   7655         return 1;
   7656     }
   7657 
   7658     tv->tv_sec  = 1000000;
   7659     tv->tv_usec = 0;
   7660     *is_infinite = 1;
   7661     return 1;
   7662 }
   7663 
   7664 int SSL_get_rpoll_descriptor(SSL *s, BIO_POLL_DESCRIPTOR *desc)
   7665 {
   7666     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   7667 
   7668 #ifndef OPENSSL_NO_QUIC
   7669     if (IS_QUIC(s))
   7670         return ossl_quic_get_rpoll_descriptor(s, desc);
   7671 #endif
   7672 
   7673     if (sc == NULL || sc->rbio == NULL)
   7674         return 0;
   7675 
   7676     return BIO_get_rpoll_descriptor(sc->rbio, desc);
   7677 }
   7678 
   7679 int SSL_get_wpoll_descriptor(SSL *s, BIO_POLL_DESCRIPTOR *desc)
   7680 {
   7681     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   7682 
   7683 #ifndef OPENSSL_NO_QUIC
   7684     if (IS_QUIC(s))
   7685         return ossl_quic_get_wpoll_descriptor(s, desc);
   7686 #endif
   7687 
   7688     if (sc == NULL || sc->wbio == NULL)
   7689         return 0;
   7690 
   7691     return BIO_get_wpoll_descriptor(sc->wbio, desc);
   7692 }
   7693 
   7694 int SSL_net_read_desired(SSL *s)
   7695 {
   7696 #ifndef OPENSSL_NO_QUIC
   7697     if (!IS_QUIC(s))
   7698         return SSL_want_read(s);
   7699 
   7700     return ossl_quic_get_net_read_desired(s);
   7701 #else
   7702     return SSL_want_read(s);
   7703 #endif
   7704 }
   7705 
   7706 int SSL_net_write_desired(SSL *s)
   7707 {
   7708 #ifndef OPENSSL_NO_QUIC
   7709     if (!IS_QUIC(s))
   7710         return SSL_want_write(s);
   7711 
   7712     return ossl_quic_get_net_write_desired(s);
   7713 #else
   7714     return SSL_want_write(s);
   7715 #endif
   7716 }
   7717 
   7718 int SSL_set_blocking_mode(SSL *s, int blocking)
   7719 {
   7720 #ifndef OPENSSL_NO_QUIC
   7721     if (!IS_QUIC(s))
   7722         return 0;
   7723 
   7724     return ossl_quic_conn_set_blocking_mode(s, blocking);
   7725 #else
   7726     return 0;
   7727 #endif
   7728 }
   7729 
   7730 int SSL_get_blocking_mode(SSL *s)
   7731 {
   7732 #ifndef OPENSSL_NO_QUIC
   7733     if (!IS_QUIC(s))
   7734         return -1;
   7735 
   7736     return ossl_quic_conn_get_blocking_mode(s);
   7737 #else
   7738     return -1;
   7739 #endif
   7740 }
   7741 
   7742 int SSL_set1_initial_peer_addr(SSL *s, const BIO_ADDR *peer_addr)
   7743 {
   7744 #ifndef OPENSSL_NO_QUIC
   7745     if (!IS_QUIC(s))
   7746         return 0;
   7747 
   7748     return ossl_quic_conn_set_initial_peer_addr(s, peer_addr);
   7749 #else
   7750     return 0;
   7751 #endif
   7752 }
   7753 
   7754 int SSL_shutdown_ex(SSL *ssl, uint64_t flags,
   7755                     const SSL_SHUTDOWN_EX_ARGS *args,
   7756                     size_t args_len)
   7757 {
   7758 #ifndef OPENSSL_NO_QUIC
   7759     if (!IS_QUIC(ssl))
   7760         return SSL_shutdown(ssl);
   7761 
   7762     return ossl_quic_conn_shutdown(ssl, flags, args, args_len);
   7763 #else
   7764     return SSL_shutdown(ssl);
   7765 #endif
   7766 }
   7767 
   7768 int SSL_stream_conclude(SSL *ssl, uint64_t flags)
   7769 {
   7770 #ifndef OPENSSL_NO_QUIC
   7771     if (!IS_QUIC(ssl))
   7772         return 0;
   7773 
   7774     return ossl_quic_conn_stream_conclude(ssl);
   7775 #else
   7776     return 0;
   7777 #endif
   7778 }
   7779 
   7780 SSL *SSL_new_stream(SSL *s, uint64_t flags)
   7781 {
   7782 #ifndef OPENSSL_NO_QUIC
   7783     if (!IS_QUIC(s))
   7784         return NULL;
   7785 
   7786     return ossl_quic_conn_stream_new(s, flags);
   7787 #else
   7788     return NULL;
   7789 #endif
   7790 }
   7791 
   7792 SSL *SSL_get0_connection(SSL *s)
   7793 {
   7794 #ifndef OPENSSL_NO_QUIC
   7795     if (!IS_QUIC(s))
   7796         return s;
   7797 
   7798     return ossl_quic_get0_connection(s);
   7799 #else
   7800     return s;
   7801 #endif
   7802 }
   7803 
   7804 int SSL_is_connection(SSL *s)
   7805 {
   7806     return SSL_get0_connection(s) == s;
   7807 }
   7808 
   7809 SSL *SSL_get0_listener(SSL *s)
   7810 {
   7811 #ifndef OPENSSL_NO_QUIC
   7812     if (!IS_QUIC(s))
   7813         return NULL;
   7814 
   7815     return ossl_quic_get0_listener(s);
   7816 #else
   7817     return NULL;
   7818 #endif
   7819 }
   7820 
   7821 SSL *SSL_get0_domain(SSL *s)
   7822 {
   7823 #ifndef OPENSSL_NO_QUIC
   7824     if (!IS_QUIC(s))
   7825         return NULL;
   7826 
   7827     return ossl_quic_get0_domain(s);
   7828 #else
   7829     return NULL;
   7830 #endif
   7831 }
   7832 
   7833 int SSL_is_listener(SSL *s)
   7834 {
   7835     return SSL_get0_listener(s) == s;
   7836 }
   7837 
   7838 int SSL_is_domain(SSL *s)
   7839 {
   7840     return SSL_get0_domain(s) == s;
   7841 }
   7842 
   7843 int SSL_get_stream_type(SSL *s)
   7844 {
   7845 #ifndef OPENSSL_NO_QUIC
   7846     if (!IS_QUIC(s))
   7847         return SSL_STREAM_TYPE_BIDI;
   7848 
   7849     return ossl_quic_get_stream_type(s);
   7850 #else
   7851     return SSL_STREAM_TYPE_BIDI;
   7852 #endif
   7853 }
   7854 
   7855 uint64_t SSL_get_stream_id(SSL *s)
   7856 {
   7857 #ifndef OPENSSL_NO_QUIC
   7858     if (!IS_QUIC(s))
   7859         return UINT64_MAX;
   7860 
   7861     return ossl_quic_get_stream_id(s);
   7862 #else
   7863     return UINT64_MAX;
   7864 #endif
   7865 }
   7866 
   7867 int SSL_is_stream_local(SSL *s)
   7868 {
   7869 #ifndef OPENSSL_NO_QUIC
   7870     if (!IS_QUIC(s))
   7871         return -1;
   7872 
   7873     return ossl_quic_is_stream_local(s);
   7874 #else
   7875     return -1;
   7876 #endif
   7877 }
   7878 
   7879 int SSL_set_default_stream_mode(SSL *s, uint32_t mode)
   7880 {
   7881 #ifndef OPENSSL_NO_QUIC
   7882     if (!IS_QUIC(s))
   7883         return 0;
   7884 
   7885     return ossl_quic_set_default_stream_mode(s, mode);
   7886 #else
   7887     return 0;
   7888 #endif
   7889 }
   7890 
   7891 int SSL_set_incoming_stream_policy(SSL *s, int policy, uint64_t aec)
   7892 {
   7893 #ifndef OPENSSL_NO_QUIC
   7894     if (!IS_QUIC(s))
   7895         return 0;
   7896 
   7897     return ossl_quic_set_incoming_stream_policy(s, policy, aec);
   7898 #else
   7899     return 0;
   7900 #endif
   7901 }
   7902 
   7903 SSL *SSL_accept_stream(SSL *s, uint64_t flags)
   7904 {
   7905 #ifndef OPENSSL_NO_QUIC
   7906     if (!IS_QUIC(s))
   7907         return NULL;
   7908 
   7909     return ossl_quic_accept_stream(s, flags);
   7910 #else
   7911     return NULL;
   7912 #endif
   7913 }
   7914 
   7915 size_t SSL_get_accept_stream_queue_len(SSL *s)
   7916 {
   7917 #ifndef OPENSSL_NO_QUIC
   7918     if (!IS_QUIC(s))
   7919         return 0;
   7920 
   7921     return ossl_quic_get_accept_stream_queue_len(s);
   7922 #else
   7923     return 0;
   7924 #endif
   7925 }
   7926 
   7927 int SSL_stream_reset(SSL *s,
   7928                      const SSL_STREAM_RESET_ARGS *args,
   7929                      size_t args_len)
   7930 {
   7931 #ifndef OPENSSL_NO_QUIC
   7932     if (!IS_QUIC(s))
   7933         return 0;
   7934 
   7935     return ossl_quic_stream_reset(s, args, args_len);
   7936 #else
   7937     return 0;
   7938 #endif
   7939 }
   7940 
   7941 int SSL_get_stream_read_state(SSL *s)
   7942 {
   7943 #ifndef OPENSSL_NO_QUIC
   7944     if (!IS_QUIC(s))
   7945         return SSL_STREAM_STATE_NONE;
   7946 
   7947     return ossl_quic_get_stream_read_state(s);
   7948 #else
   7949     return SSL_STREAM_STATE_NONE;
   7950 #endif
   7951 }
   7952 
   7953 int SSL_get_stream_write_state(SSL *s)
   7954 {
   7955 #ifndef OPENSSL_NO_QUIC
   7956     if (!IS_QUIC(s))
   7957         return SSL_STREAM_STATE_NONE;
   7958 
   7959     return ossl_quic_get_stream_write_state(s);
   7960 #else
   7961     return SSL_STREAM_STATE_NONE;
   7962 #endif
   7963 }
   7964 
   7965 int SSL_get_stream_read_error_code(SSL *s, uint64_t *app_error_code)
   7966 {
   7967 #ifndef OPENSSL_NO_QUIC
   7968     if (!IS_QUIC(s))
   7969         return -1;
   7970 
   7971     return ossl_quic_get_stream_read_error_code(s, app_error_code);
   7972 #else
   7973     return -1;
   7974 #endif
   7975 }
   7976 
   7977 int SSL_get_stream_write_error_code(SSL *s, uint64_t *app_error_code)
   7978 {
   7979 #ifndef OPENSSL_NO_QUIC
   7980     if (!IS_QUIC(s))
   7981         return -1;
   7982 
   7983     return ossl_quic_get_stream_write_error_code(s, app_error_code);
   7984 #else
   7985     return -1;
   7986 #endif
   7987 }
   7988 
   7989 int SSL_get_conn_close_info(SSL *s, SSL_CONN_CLOSE_INFO *info,
   7990                             size_t info_len)
   7991 {
   7992 #ifndef OPENSSL_NO_QUIC
   7993     if (!IS_QUIC(s))
   7994         return -1;
   7995 
   7996     return ossl_quic_get_conn_close_info(s, info, info_len);
   7997 #else
   7998     return -1;
   7999 #endif
   8000 }
   8001 
   8002 int SSL_get_value_uint(SSL *s, uint32_t class_, uint32_t id,
   8003                        uint64_t *value)
   8004 {
   8005 #ifndef OPENSSL_NO_QUIC
   8006     if (IS_QUIC(s))
   8007         return ossl_quic_get_value_uint(s, class_, id, value);
   8008 #endif
   8009 
   8010     ERR_raise(ERR_LIB_SSL, SSL_R_UNSUPPORTED_PROTOCOL);
   8011     return 0;
   8012 }
   8013 
   8014 int SSL_set_value_uint(SSL *s, uint32_t class_, uint32_t id,
   8015                        uint64_t value)
   8016 {
   8017 #ifndef OPENSSL_NO_QUIC
   8018     if (IS_QUIC(s))
   8019         return ossl_quic_set_value_uint(s, class_, id, value);
   8020 #endif
   8021 
   8022     ERR_raise(ERR_LIB_SSL, SSL_R_UNSUPPORTED_PROTOCOL);
   8023     return 0;
   8024 }
   8025 
   8026 SSL *SSL_new_listener(SSL_CTX *ctx, uint64_t flags)
   8027 {
   8028 #ifndef OPENSSL_NO_QUIC
   8029     if (!IS_QUIC_CTX(ctx))
   8030         return NULL;
   8031 
   8032     return ossl_quic_new_listener(ctx, flags);
   8033 #else
   8034     return NULL;
   8035 #endif
   8036 }
   8037 
   8038 SSL *SSL_new_listener_from(SSL *ssl, uint64_t flags)
   8039 {
   8040 #ifndef OPENSSL_NO_QUIC
   8041     if (!IS_QUIC(ssl))
   8042         return NULL;
   8043 
   8044     return ossl_quic_new_listener_from(ssl, flags);
   8045 #else
   8046     return NULL;
   8047 #endif
   8048 }
   8049 
   8050 SSL *SSL_new_from_listener(SSL *ssl, uint64_t flags)
   8051 {
   8052 #ifndef OPENSSL_NO_QUIC
   8053     if (!IS_QUIC(ssl))
   8054         return NULL;
   8055 
   8056     return ossl_quic_new_from_listener(ssl, flags);
   8057 #else
   8058     return NULL;
   8059 #endif
   8060 }
   8061 
   8062 SSL *SSL_accept_connection(SSL *ssl, uint64_t flags)
   8063 {
   8064 #ifndef OPENSSL_NO_QUIC
   8065     if (!IS_QUIC(ssl))
   8066         return NULL;
   8067 
   8068     return ossl_quic_accept_connection(ssl, flags);
   8069 #else
   8070     return NULL;
   8071 #endif
   8072 }
   8073 
   8074 size_t SSL_get_accept_connection_queue_len(SSL *ssl)
   8075 {
   8076 #ifndef OPENSSL_NO_QUIC
   8077     if (!IS_QUIC(ssl))
   8078         return 0;
   8079 
   8080     return ossl_quic_get_accept_connection_queue_len(ssl);
   8081 #else
   8082     return 0;
   8083 #endif
   8084 }
   8085 
   8086 int SSL_listen(SSL *ssl)
   8087 {
   8088 #ifndef OPENSSL_NO_QUIC
   8089     if (!IS_QUIC(ssl))
   8090         return 0;
   8091 
   8092     return ossl_quic_listen(ssl);
   8093 #else
   8094     return 0;
   8095 #endif
   8096 }
   8097 
   8098 SSL *SSL_new_domain(SSL_CTX *ctx, uint64_t flags)
   8099 {
   8100 #ifndef OPENSSL_NO_QUIC
   8101     if (!IS_QUIC_CTX(ctx))
   8102         return NULL;
   8103 
   8104     return ossl_quic_new_domain(ctx, flags);
   8105 #else
   8106     return NULL;
   8107 #endif
   8108 }
   8109 
   8110 int ossl_adjust_domain_flags(uint64_t domain_flags, uint64_t *p_domain_flags)
   8111 {
   8112     if ((domain_flags & ~OSSL_QUIC_SUPPORTED_DOMAIN_FLAGS) != 0) {
   8113         ERR_raise_data(ERR_LIB_SSL, ERR_R_UNSUPPORTED,
   8114                        "unsupported domain flag requested");
   8115         return 0;
   8116     }
   8117 
   8118     if ((domain_flags & SSL_DOMAIN_FLAG_THREAD_ASSISTED) != 0)
   8119         domain_flags |= SSL_DOMAIN_FLAG_MULTI_THREAD;
   8120 
   8121     if ((domain_flags & (SSL_DOMAIN_FLAG_MULTI_THREAD
   8122                          | SSL_DOMAIN_FLAG_SINGLE_THREAD)) == 0)
   8123         domain_flags |= SSL_DOMAIN_FLAG_MULTI_THREAD;
   8124 
   8125     if ((domain_flags & SSL_DOMAIN_FLAG_SINGLE_THREAD) != 0
   8126         && (domain_flags & SSL_DOMAIN_FLAG_MULTI_THREAD) != 0) {
   8127         ERR_raise_data(ERR_LIB_SSL, ERR_R_PASSED_INVALID_ARGUMENT,
   8128                        "mutually exclusive domain flags specified");
   8129         return 0;
   8130     }
   8131 
   8132     /*
   8133      * Note: We treat MULTI_THREAD as a no-op in non-threaded builds, but
   8134      * not THREAD_ASSISTED.
   8135      */
   8136 # ifndef OPENSSL_THREADS
   8137     if ((domain_flags & SSL_DOMAIN_FLAG_THREAD_ASSISTED) != 0) {
   8138         ERR_raise_data(ERR_LIB_SSL, ERR_R_UNSUPPORTED,
   8139                        "thread assisted mode not available in this build");
   8140         return 0;
   8141     }
   8142 # endif
   8143 
   8144     *p_domain_flags = domain_flags;
   8145     return 1;
   8146 }
   8147 
   8148 int SSL_CTX_set_domain_flags(SSL_CTX *ctx, uint64_t domain_flags)
   8149 {
   8150 #ifndef OPENSSL_NO_QUIC
   8151     if (IS_QUIC_CTX(ctx)) {
   8152         if (!ossl_adjust_domain_flags(domain_flags, &domain_flags))
   8153             return 0;
   8154 
   8155         ctx->domain_flags = domain_flags;
   8156         return 1;
   8157     }
   8158 #endif
   8159 
   8160     ERR_raise_data(ERR_LIB_SSL, ERR_R_UNSUPPORTED,
   8161                    "domain flags unsupported on this kind of SSL_CTX");
   8162     return 0;
   8163 }
   8164 
   8165 int SSL_CTX_get_domain_flags(const SSL_CTX *ctx, uint64_t *domain_flags)
   8166 {
   8167 #ifndef OPENSSL_NO_QUIC
   8168     if (IS_QUIC_CTX(ctx)) {
   8169         if (domain_flags != NULL)
   8170             *domain_flags = ctx->domain_flags;
   8171 
   8172         return 1;
   8173     }
   8174 #endif
   8175 
   8176     ERR_raise_data(ERR_LIB_SSL, ERR_R_UNSUPPORTED,
   8177                    "domain flags unsupported on this kind of SSL_CTX");
   8178     return 0;
   8179 }
   8180 
   8181 int SSL_get_domain_flags(const SSL *ssl, uint64_t *domain_flags)
   8182 {
   8183 #ifndef OPENSSL_NO_QUIC
   8184     if (IS_QUIC(ssl))
   8185         return ossl_quic_get_domain_flags(ssl, domain_flags);
   8186 #endif
   8187 
   8188     return 0;
   8189 }
   8190 
   8191 int SSL_add_expected_rpk(SSL *s, EVP_PKEY *rpk)
   8192 {
   8193     unsigned char *data = NULL;
   8194     SSL_DANE *dane = SSL_get0_dane(s);
   8195     int ret;
   8196 
   8197     if (dane == NULL || dane->dctx == NULL)
   8198         return 0;
   8199     if ((ret = i2d_PUBKEY(rpk, &data)) <= 0)
   8200         return 0;
   8201 
   8202     ret = SSL_dane_tlsa_add(s, DANETLS_USAGE_DANE_EE,
   8203                             DANETLS_SELECTOR_SPKI,
   8204                             DANETLS_MATCHING_FULL,
   8205                             data, (size_t)ret) > 0;
   8206     OPENSSL_free(data);
   8207     return ret;
   8208 }
   8209 
   8210 EVP_PKEY *SSL_get0_peer_rpk(const SSL *s)
   8211 {
   8212     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   8213 
   8214     if (sc == NULL || sc->session == NULL)
   8215         return NULL;
   8216     return sc->session->peer_rpk;
   8217 }
   8218 
   8219 int SSL_get_negotiated_client_cert_type(const SSL *s)
   8220 {
   8221     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   8222 
   8223     if (sc == NULL)
   8224         return 0;
   8225 
   8226     return sc->ext.client_cert_type;
   8227 }
   8228 
   8229 int SSL_get_negotiated_server_cert_type(const SSL *s)
   8230 {
   8231     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   8232 
   8233     if (sc == NULL)
   8234         return 0;
   8235 
   8236     return sc->ext.server_cert_type;
   8237 }
   8238 
   8239 static int validate_cert_type(const unsigned char *val, size_t len)
   8240 {
   8241     size_t i;
   8242     int saw_rpk = 0;
   8243     int saw_x509 = 0;
   8244 
   8245     if (val == NULL && len == 0)
   8246         return 1;
   8247 
   8248     if (val == NULL || len == 0)
   8249         return 0;
   8250 
   8251     for (i = 0; i < len; i++) {
   8252         switch (val[i]) {
   8253         case TLSEXT_cert_type_rpk:
   8254             if (saw_rpk)
   8255                 return 0;
   8256             saw_rpk = 1;
   8257             break;
   8258         case TLSEXT_cert_type_x509:
   8259             if (saw_x509)
   8260                 return 0;
   8261             saw_x509 = 1;
   8262             break;
   8263         case TLSEXT_cert_type_pgp:
   8264         case TLSEXT_cert_type_1609dot2:
   8265         default:
   8266             return 0;
   8267         }
   8268     }
   8269     return 1;
   8270 }
   8271 
   8272 static int set_cert_type(unsigned char **cert_type,
   8273                          size_t *cert_type_len,
   8274                          const unsigned char *val,
   8275                          size_t len)
   8276 {
   8277     unsigned char *tmp = NULL;
   8278 
   8279     if (!validate_cert_type(val, len))
   8280         return 0;
   8281 
   8282     if (val != NULL && (tmp = OPENSSL_memdup(val, len)) == NULL)
   8283         return 0;
   8284 
   8285     OPENSSL_free(*cert_type);
   8286     *cert_type = tmp;
   8287     *cert_type_len = len;
   8288     return 1;
   8289 }
   8290 
   8291 int SSL_set1_client_cert_type(SSL *s, const unsigned char *val, size_t len)
   8292 {
   8293     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   8294 
   8295     if (sc == NULL)
   8296         return 0;
   8297 
   8298     return set_cert_type(&sc->client_cert_type, &sc->client_cert_type_len,
   8299                          val, len);
   8300 }
   8301 
   8302 int SSL_set1_server_cert_type(SSL *s, const unsigned char *val, size_t len)
   8303 {
   8304     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
   8305 
   8306     if (sc == NULL)
   8307         return 0;
   8308 
   8309     return set_cert_type(&sc->server_cert_type, &sc->server_cert_type_len,
   8310                          val, len);
   8311 }
   8312 
   8313 int SSL_CTX_set1_client_cert_type(SSL_CTX *ctx, const unsigned char *val, size_t len)
   8314 {
   8315     return set_cert_type(&ctx->client_cert_type, &ctx->client_cert_type_len,
   8316                          val, len);
   8317 }
   8318 
   8319 int SSL_CTX_set1_server_cert_type(SSL_CTX *ctx, const unsigned char *val, size_t len)
   8320 {
   8321     return set_cert_type(&ctx->server_cert_type, &ctx->server_cert_type_len,
   8322                          val, len);
   8323 }
   8324 
   8325 int SSL_get0_client_cert_type(const SSL *s, unsigned char **t, size_t *len)
   8326 {
   8327     const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
   8328 
   8329     if (t == NULL || len == NULL || sc == NULL)
   8330         return 0;
   8331 
   8332     *t = sc->client_cert_type;
   8333     *len = sc->client_cert_type_len;
   8334     return 1;
   8335 }
   8336 
   8337 int SSL_get0_server_cert_type(const SSL *s, unsigned char **t, size_t *len)
   8338 {
   8339     const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
   8340 
   8341     if (t == NULL || len == NULL || sc == NULL)
   8342         return 0;
   8343 
   8344     *t = sc->server_cert_type;
   8345     *len = sc->server_cert_type_len;
   8346     return 1;
   8347 }
   8348 
   8349 int SSL_CTX_get0_client_cert_type(const SSL_CTX *ctx, unsigned char **t, size_t *len)
   8350 {
   8351     if (t == NULL || len == NULL)
   8352         return 0;
   8353 
   8354     *t = ctx->client_cert_type;
   8355     *len = ctx->client_cert_type_len;
   8356     return 1;
   8357 }
   8358 
   8359 int SSL_CTX_get0_server_cert_type(const SSL_CTX *ctx, unsigned char **t, size_t *len)
   8360 {
   8361     if (t == NULL || len == NULL)
   8362         return 0;
   8363 
   8364     *t = ctx->server_cert_type;
   8365     *len = ctx->server_cert_type_len;
   8366     return 1;
   8367 }
   8368