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