1/*
2 * Copyright 1995-2021 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     * unprocessed data available or 0 otherwise (as opposed to the number of
1514     * bytes available). Unlike SSL_pending() this will take into account
1515     * read_ahead data. A 1 return simply indicates that we have unprocessed
1516     * data. That data may not result in any application data, or we may fail
1517     * to parse the records for some reason.
1518     */
1519    if (RECORD_LAYER_processed_read_pending(&s->rlayer))
1520        return 1;
1521
1522    return RECORD_LAYER_read_pending(&s->rlayer);
1523}
1524
1525X509 *SSL_get_peer_certificate(const SSL *s)
1526{
1527    X509 *r;
1528
1529    if ((s == NULL) || (s->session == NULL))
1530        r = NULL;
1531    else
1532        r = s->session->peer;
1533
1534    if (r == NULL)
1535        return r;
1536
1537    X509_up_ref(r);
1538
1539    return r;
1540}
1541
1542STACK_OF(X509) *SSL_get_peer_cert_chain(const SSL *s)
1543{
1544    STACK_OF(X509) *r;
1545
1546    if ((s == NULL) || (s->session == NULL))
1547        r = NULL;
1548    else
1549        r = s->session->peer_chain;
1550
1551    /*
1552     * If we are a client, cert_chain includes the peer's own certificate; if
1553     * we are a server, it does not.
1554     */
1555
1556    return r;
1557}
1558
1559/*
1560 * Now in theory, since the calling process own 't' it should be safe to
1561 * modify.  We need to be able to read f without being hassled
1562 */
1563int SSL_copy_session_id(SSL *t, const SSL *f)
1564{
1565    int i;
1566    /* Do we need to to SSL locking? */
1567    if (!SSL_set_session(t, SSL_get_session(f))) {
1568        return 0;
1569    }
1570
1571    /*
1572     * what if we are setup for one protocol version but want to talk another
1573     */
1574    if (t->method != f->method) {
1575        t->method->ssl_free(t);
1576        t->method = f->method;
1577        if (t->method->ssl_new(t) == 0)
1578            return 0;
1579    }
1580
1581    CRYPTO_UP_REF(&f->cert->references, &i, f->cert->lock);
1582    ssl_cert_free(t->cert);
1583    t->cert = f->cert;
1584    if (!SSL_set_session_id_context(t, f->sid_ctx, (int)f->sid_ctx_length)) {
1585        return 0;
1586    }
1587
1588    return 1;
1589}
1590
1591/* Fix this so it checks all the valid key/cert options */
1592int SSL_CTX_check_private_key(const SSL_CTX *ctx)
1593{
1594    if ((ctx == NULL) || (ctx->cert->key->x509 == NULL)) {
1595        SSLerr(SSL_F_SSL_CTX_CHECK_PRIVATE_KEY, SSL_R_NO_CERTIFICATE_ASSIGNED);
1596        return 0;
1597    }
1598    if (ctx->cert->key->privatekey == NULL) {
1599        SSLerr(SSL_F_SSL_CTX_CHECK_PRIVATE_KEY, SSL_R_NO_PRIVATE_KEY_ASSIGNED);
1600        return 0;
1601    }
1602    return X509_check_private_key
1603            (ctx->cert->key->x509, ctx->cert->key->privatekey);
1604}
1605
1606/* Fix this function so that it takes an optional type parameter */
1607int SSL_check_private_key(const SSL *ssl)
1608{
1609    if (ssl == NULL) {
1610        SSLerr(SSL_F_SSL_CHECK_PRIVATE_KEY, ERR_R_PASSED_NULL_PARAMETER);
1611        return 0;
1612    }
1613    if (ssl->cert->key->x509 == NULL) {
1614        SSLerr(SSL_F_SSL_CHECK_PRIVATE_KEY, SSL_R_NO_CERTIFICATE_ASSIGNED);
1615        return 0;
1616    }
1617    if (ssl->cert->key->privatekey == NULL) {
1618        SSLerr(SSL_F_SSL_CHECK_PRIVATE_KEY, SSL_R_NO_PRIVATE_KEY_ASSIGNED);
1619        return 0;
1620    }
1621    return X509_check_private_key(ssl->cert->key->x509,
1622                                   ssl->cert->key->privatekey);
1623}
1624
1625int SSL_waiting_for_async(SSL *s)
1626{
1627    if (s->job)
1628        return 1;
1629
1630    return 0;
1631}
1632
1633int SSL_get_all_async_fds(SSL *s, OSSL_ASYNC_FD *fds, size_t *numfds)
1634{
1635    ASYNC_WAIT_CTX *ctx = s->waitctx;
1636
1637    if (ctx == NULL)
1638        return 0;
1639    return ASYNC_WAIT_CTX_get_all_fds(ctx, fds, numfds);
1640}
1641
1642int SSL_get_changed_async_fds(SSL *s, OSSL_ASYNC_FD *addfd, size_t *numaddfds,
1643                              OSSL_ASYNC_FD *delfd, size_t *numdelfds)
1644{
1645    ASYNC_WAIT_CTX *ctx = s->waitctx;
1646
1647    if (ctx == NULL)
1648        return 0;
1649    return ASYNC_WAIT_CTX_get_changed_fds(ctx, addfd, numaddfds, delfd,
1650                                          numdelfds);
1651}
1652
1653int SSL_accept(SSL *s)
1654{
1655    if (s->handshake_func == NULL) {
1656        /* Not properly initialized yet */
1657        SSL_set_accept_state(s);
1658    }
1659
1660    return SSL_do_handshake(s);
1661}
1662
1663int SSL_connect(SSL *s)
1664{
1665    if (s->handshake_func == NULL) {
1666        /* Not properly initialized yet */
1667        SSL_set_connect_state(s);
1668    }
1669
1670    return SSL_do_handshake(s);
1671}
1672
1673long SSL_get_default_timeout(const SSL *s)
1674{
1675    return s->method->get_timeout();
1676}
1677
1678static int ssl_start_async_job(SSL *s, struct ssl_async_args *args,
1679                               int (*func) (void *))
1680{
1681    int ret;
1682    if (s->waitctx == NULL) {
1683        s->waitctx = ASYNC_WAIT_CTX_new();
1684        if (s->waitctx == NULL)
1685            return -1;
1686    }
1687    switch (ASYNC_start_job(&s->job, s->waitctx, &ret, func, args,
1688                            sizeof(struct ssl_async_args))) {
1689    case ASYNC_ERR:
1690        s->rwstate = SSL_NOTHING;
1691        SSLerr(SSL_F_SSL_START_ASYNC_JOB, SSL_R_FAILED_TO_INIT_ASYNC);
1692        return -1;
1693    case ASYNC_PAUSE:
1694        s->rwstate = SSL_ASYNC_PAUSED;
1695        return -1;
1696    case ASYNC_NO_JOBS:
1697        s->rwstate = SSL_ASYNC_NO_JOBS;
1698        return -1;
1699    case ASYNC_FINISH:
1700        s->job = NULL;
1701        return ret;
1702    default:
1703        s->rwstate = SSL_NOTHING;
1704        SSLerr(SSL_F_SSL_START_ASYNC_JOB, ERR_R_INTERNAL_ERROR);
1705        /* Shouldn't happen */
1706        return -1;
1707    }
1708}
1709
1710static int ssl_io_intern(void *vargs)
1711{
1712    struct ssl_async_args *args;
1713    SSL *s;
1714    void *buf;
1715    size_t num;
1716
1717    args = (struct ssl_async_args *)vargs;
1718    s = args->s;
1719    buf = args->buf;
1720    num = args->num;
1721    switch (args->type) {
1722    case READFUNC:
1723        return args->f.func_read(s, buf, num, &s->asyncrw);
1724    case WRITEFUNC:
1725        return args->f.func_write(s, buf, num, &s->asyncrw);
1726    case OTHERFUNC:
1727        return args->f.func_other(s);
1728    }
1729    return -1;
1730}
1731
1732int ssl_read_internal(SSL *s, void *buf, size_t num, size_t *readbytes)
1733{
1734    if (s->handshake_func == NULL) {
1735        SSLerr(SSL_F_SSL_READ_INTERNAL, SSL_R_UNINITIALIZED);
1736        return -1;
1737    }
1738
1739    if (s->shutdown & SSL_RECEIVED_SHUTDOWN) {
1740        s->rwstate = SSL_NOTHING;
1741        return 0;
1742    }
1743
1744    if (s->early_data_state == SSL_EARLY_DATA_CONNECT_RETRY
1745                || s->early_data_state == SSL_EARLY_DATA_ACCEPT_RETRY) {
1746        SSLerr(SSL_F_SSL_READ_INTERNAL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
1747        return 0;
1748    }
1749    /*
1750     * If we are a client and haven't received the ServerHello etc then we
1751     * better do that
1752     */
1753    ossl_statem_check_finish_init(s, 0);
1754
1755    if ((s->mode & SSL_MODE_ASYNC) && ASYNC_get_current_job() == NULL) {
1756        struct ssl_async_args args;
1757        int ret;
1758
1759        args.s = s;
1760        args.buf = buf;
1761        args.num = num;
1762        args.type = READFUNC;
1763        args.f.func_read = s->method->ssl_read;
1764
1765        ret = ssl_start_async_job(s, &args, ssl_io_intern);
1766        *readbytes = s->asyncrw;
1767        return ret;
1768    } else {
1769        return s->method->ssl_read(s, buf, num, readbytes);
1770    }
1771}
1772
1773int SSL_read(SSL *s, void *buf, int num)
1774{
1775    int ret;
1776    size_t readbytes;
1777
1778    if (num < 0) {
1779        SSLerr(SSL_F_SSL_READ, SSL_R_BAD_LENGTH);
1780        return -1;
1781    }
1782
1783    ret = ssl_read_internal(s, buf, (size_t)num, &readbytes);
1784
1785    /*
1786     * The cast is safe here because ret should be <= INT_MAX because num is
1787     * <= INT_MAX
1788     */
1789    if (ret > 0)
1790        ret = (int)readbytes;
1791
1792    return ret;
1793}
1794
1795int SSL_read_ex(SSL *s, void *buf, size_t num, size_t *readbytes)
1796{
1797    int ret = ssl_read_internal(s, buf, num, readbytes);
1798
1799    if (ret < 0)
1800        ret = 0;
1801    return ret;
1802}
1803
1804int SSL_read_early_data(SSL *s, void *buf, size_t num, size_t *readbytes)
1805{
1806    int ret;
1807
1808    if (!s->server) {
1809        SSLerr(SSL_F_SSL_READ_EARLY_DATA, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
1810        return SSL_READ_EARLY_DATA_ERROR;
1811    }
1812
1813    switch (s->early_data_state) {
1814    case SSL_EARLY_DATA_NONE:
1815        if (!SSL_in_before(s)) {
1816            SSLerr(SSL_F_SSL_READ_EARLY_DATA,
1817                   ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
1818            return SSL_READ_EARLY_DATA_ERROR;
1819        }
1820        /* fall through */
1821
1822    case SSL_EARLY_DATA_ACCEPT_RETRY:
1823        s->early_data_state = SSL_EARLY_DATA_ACCEPTING;
1824        ret = SSL_accept(s);
1825        if (ret <= 0) {
1826            /* NBIO or error */
1827            s->early_data_state = SSL_EARLY_DATA_ACCEPT_RETRY;
1828            return SSL_READ_EARLY_DATA_ERROR;
1829        }
1830        /* fall through */
1831
1832    case SSL_EARLY_DATA_READ_RETRY:
1833        if (s->ext.early_data == SSL_EARLY_DATA_ACCEPTED) {
1834            s->early_data_state = SSL_EARLY_DATA_READING;
1835            ret = SSL_read_ex(s, buf, num, readbytes);
1836            /*
1837             * State machine will update early_data_state to
1838             * SSL_EARLY_DATA_FINISHED_READING if we get an EndOfEarlyData
1839             * message
1840             */
1841            if (ret > 0 || (ret <= 0 && s->early_data_state
1842                                        != SSL_EARLY_DATA_FINISHED_READING)) {
1843                s->early_data_state = SSL_EARLY_DATA_READ_RETRY;
1844                return ret > 0 ? SSL_READ_EARLY_DATA_SUCCESS
1845                               : SSL_READ_EARLY_DATA_ERROR;
1846            }
1847        } else {
1848            s->early_data_state = SSL_EARLY_DATA_FINISHED_READING;
1849        }
1850        *readbytes = 0;
1851        return SSL_READ_EARLY_DATA_FINISH;
1852
1853    default:
1854        SSLerr(SSL_F_SSL_READ_EARLY_DATA, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
1855        return SSL_READ_EARLY_DATA_ERROR;
1856    }
1857}
1858
1859int SSL_get_early_data_status(const SSL *s)
1860{
1861    return s->ext.early_data;
1862}
1863
1864static int ssl_peek_internal(SSL *s, void *buf, size_t num, size_t *readbytes)
1865{
1866    if (s->handshake_func == NULL) {
1867        SSLerr(SSL_F_SSL_PEEK_INTERNAL, SSL_R_UNINITIALIZED);
1868        return -1;
1869    }
1870
1871    if (s->shutdown & SSL_RECEIVED_SHUTDOWN) {
1872        return 0;
1873    }
1874    if ((s->mode & SSL_MODE_ASYNC) && ASYNC_get_current_job() == NULL) {
1875        struct ssl_async_args args;
1876        int ret;
1877
1878        args.s = s;
1879        args.buf = buf;
1880        args.num = num;
1881        args.type = READFUNC;
1882        args.f.func_read = s->method->ssl_peek;
1883
1884        ret = ssl_start_async_job(s, &args, ssl_io_intern);
1885        *readbytes = s->asyncrw;
1886        return ret;
1887    } else {
1888        return s->method->ssl_peek(s, buf, num, readbytes);
1889    }
1890}
1891
1892int SSL_peek(SSL *s, void *buf, int num)
1893{
1894    int ret;
1895    size_t readbytes;
1896
1897    if (num < 0) {
1898        SSLerr(SSL_F_SSL_PEEK, SSL_R_BAD_LENGTH);
1899        return -1;
1900    }
1901
1902    ret = ssl_peek_internal(s, buf, (size_t)num, &readbytes);
1903
1904    /*
1905     * The cast is safe here because ret should be <= INT_MAX because num is
1906     * <= INT_MAX
1907     */
1908    if (ret > 0)
1909        ret = (int)readbytes;
1910
1911    return ret;
1912}
1913
1914
1915int SSL_peek_ex(SSL *s, void *buf, size_t num, size_t *readbytes)
1916{
1917    int ret = ssl_peek_internal(s, buf, num, readbytes);
1918
1919    if (ret < 0)
1920        ret = 0;
1921    return ret;
1922}
1923
1924int ssl_write_internal(SSL *s, const void *buf, size_t num, size_t *written)
1925{
1926    if (s->handshake_func == NULL) {
1927        SSLerr(SSL_F_SSL_WRITE_INTERNAL, SSL_R_UNINITIALIZED);
1928        return -1;
1929    }
1930
1931    if (s->shutdown & SSL_SENT_SHUTDOWN) {
1932        s->rwstate = SSL_NOTHING;
1933        SSLerr(SSL_F_SSL_WRITE_INTERNAL, SSL_R_PROTOCOL_IS_SHUTDOWN);
1934        return -1;
1935    }
1936
1937    if (s->early_data_state == SSL_EARLY_DATA_CONNECT_RETRY
1938                || s->early_data_state == SSL_EARLY_DATA_ACCEPT_RETRY
1939                || s->early_data_state == SSL_EARLY_DATA_READ_RETRY) {
1940        SSLerr(SSL_F_SSL_WRITE_INTERNAL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
1941        return 0;
1942    }
1943    /* If we are a client and haven't sent the Finished we better do that */
1944    ossl_statem_check_finish_init(s, 1);
1945
1946    if ((s->mode & SSL_MODE_ASYNC) && ASYNC_get_current_job() == NULL) {
1947        int ret;
1948        struct ssl_async_args args;
1949
1950        args.s = s;
1951        args.buf = (void *)buf;
1952        args.num = num;
1953        args.type = WRITEFUNC;
1954        args.f.func_write = s->method->ssl_write;
1955
1956        ret = ssl_start_async_job(s, &args, ssl_io_intern);
1957        *written = s->asyncrw;
1958        return ret;
1959    } else {
1960        return s->method->ssl_write(s, buf, num, written);
1961    }
1962}
1963
1964int SSL_write(SSL *s, const void *buf, int num)
1965{
1966    int ret;
1967    size_t written;
1968
1969    if (num < 0) {
1970        SSLerr(SSL_F_SSL_WRITE, SSL_R_BAD_LENGTH);
1971        return -1;
1972    }
1973
1974    ret = ssl_write_internal(s, buf, (size_t)num, &written);
1975
1976    /*
1977     * The cast is safe here because ret should be <= INT_MAX because num is
1978     * <= INT_MAX
1979     */
1980    if (ret > 0)
1981        ret = (int)written;
1982
1983    return ret;
1984}
1985
1986int SSL_write_ex(SSL *s, const void *buf, size_t num, size_t *written)
1987{
1988    int ret = ssl_write_internal(s, buf, num, written);
1989
1990    if (ret < 0)
1991        ret = 0;
1992    return ret;
1993}
1994
1995int SSL_write_early_data(SSL *s, const void *buf, size_t num, size_t *written)
1996{
1997    int ret, early_data_state;
1998    size_t writtmp;
1999    uint32_t partialwrite;
2000
2001    switch (s->early_data_state) {
2002    case SSL_EARLY_DATA_NONE:
2003        if (s->server
2004                || !SSL_in_before(s)
2005                || ((s->session == NULL || s->session->ext.max_early_data == 0)
2006                     && (s->psk_use_session_cb == NULL))) {
2007            SSLerr(SSL_F_SSL_WRITE_EARLY_DATA,
2008                   ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
2009            return 0;
2010        }
2011        /* fall through */
2012
2013    case SSL_EARLY_DATA_CONNECT_RETRY:
2014        s->early_data_state = SSL_EARLY_DATA_CONNECTING;
2015        ret = SSL_connect(s);
2016        if (ret <= 0) {
2017            /* NBIO or error */
2018            s->early_data_state = SSL_EARLY_DATA_CONNECT_RETRY;
2019            return 0;
2020        }
2021        /* fall through */
2022
2023    case SSL_EARLY_DATA_WRITE_RETRY:
2024        s->early_data_state = SSL_EARLY_DATA_WRITING;
2025        /*
2026         * We disable partial write for early data because we don't keep track
2027         * of how many bytes we've written between the SSL_write_ex() call and
2028         * the flush if the flush needs to be retried)
2029         */
2030        partialwrite = s->mode & SSL_MODE_ENABLE_PARTIAL_WRITE;
2031        s->mode &= ~SSL_MODE_ENABLE_PARTIAL_WRITE;
2032        ret = SSL_write_ex(s, buf, num, &writtmp);
2033        s->mode |= partialwrite;
2034        if (!ret) {
2035            s->early_data_state = SSL_EARLY_DATA_WRITE_RETRY;
2036            return ret;
2037        }
2038        s->early_data_state = SSL_EARLY_DATA_WRITE_FLUSH;
2039        /* fall through */
2040
2041    case SSL_EARLY_DATA_WRITE_FLUSH:
2042        /* The buffering BIO is still in place so we need to flush it */
2043        if (statem_flush(s) != 1)
2044            return 0;
2045        *written = num;
2046        s->early_data_state = SSL_EARLY_DATA_WRITE_RETRY;
2047        return 1;
2048
2049    case SSL_EARLY_DATA_FINISHED_READING:
2050    case SSL_EARLY_DATA_READ_RETRY:
2051        early_data_state = s->early_data_state;
2052        /* We are a server writing to an unauthenticated client */
2053        s->early_data_state = SSL_EARLY_DATA_UNAUTH_WRITING;
2054        ret = SSL_write_ex(s, buf, num, written);
2055        /* The buffering BIO is still in place */
2056        if (ret)
2057            (void)BIO_flush(s->wbio);
2058        s->early_data_state = early_data_state;
2059        return ret;
2060
2061    default:
2062        SSLerr(SSL_F_SSL_WRITE_EARLY_DATA, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
2063        return 0;
2064    }
2065}
2066
2067int SSL_shutdown(SSL *s)
2068{
2069    /*
2070     * Note that this function behaves differently from what one might
2071     * expect.  Return values are 0 for no success (yet), 1 for success; but
2072     * calling it once is usually not enough, even if blocking I/O is used
2073     * (see ssl3_shutdown).
2074     */
2075
2076    if (s->handshake_func == NULL) {
2077        SSLerr(SSL_F_SSL_SHUTDOWN, SSL_R_UNINITIALIZED);
2078        return -1;
2079    }
2080
2081    if (!SSL_in_init(s)) {
2082        if ((s->mode & SSL_MODE_ASYNC) && ASYNC_get_current_job() == NULL) {
2083            struct ssl_async_args args;
2084
2085            args.s = s;
2086            args.type = OTHERFUNC;
2087            args.f.func_other = s->method->ssl_shutdown;
2088
2089            return ssl_start_async_job(s, &args, ssl_io_intern);
2090        } else {
2091            return s->method->ssl_shutdown(s);
2092        }
2093    } else {
2094        SSLerr(SSL_F_SSL_SHUTDOWN, SSL_R_SHUTDOWN_WHILE_IN_INIT);
2095        return -1;
2096    }
2097}
2098
2099int SSL_key_update(SSL *s, int updatetype)
2100{
2101    /*
2102     * TODO(TLS1.3): How will applications know whether TLSv1.3 has been
2103     * negotiated, and that it is appropriate to call SSL_key_update() instead
2104     * of SSL_renegotiate().
2105     */
2106    if (!SSL_IS_TLS13(s)) {
2107        SSLerr(SSL_F_SSL_KEY_UPDATE, SSL_R_WRONG_SSL_VERSION);
2108        return 0;
2109    }
2110
2111    if (updatetype != SSL_KEY_UPDATE_NOT_REQUESTED
2112            && updatetype != SSL_KEY_UPDATE_REQUESTED) {
2113        SSLerr(SSL_F_SSL_KEY_UPDATE, SSL_R_INVALID_KEY_UPDATE_TYPE);
2114        return 0;
2115    }
2116
2117    if (!SSL_is_init_finished(s)) {
2118        SSLerr(SSL_F_SSL_KEY_UPDATE, SSL_R_STILL_IN_INIT);
2119        return 0;
2120    }
2121
2122    ossl_statem_set_in_init(s, 1);
2123    s->key_update = updatetype;
2124    return 1;
2125}
2126
2127int SSL_get_key_update_type(const SSL *s)
2128{
2129    return s->key_update;
2130}
2131
2132int SSL_renegotiate(SSL *s)
2133{
2134    if (SSL_IS_TLS13(s)) {
2135        SSLerr(SSL_F_SSL_RENEGOTIATE, SSL_R_WRONG_SSL_VERSION);
2136        return 0;
2137    }
2138
2139    if ((s->options & SSL_OP_NO_RENEGOTIATION)) {
2140        SSLerr(SSL_F_SSL_RENEGOTIATE, SSL_R_NO_RENEGOTIATION);
2141        return 0;
2142    }
2143
2144    s->renegotiate = 1;
2145    s->new_session = 1;
2146
2147    return s->method->ssl_renegotiate(s);
2148}
2149
2150int SSL_renegotiate_abbreviated(SSL *s)
2151{
2152    if (SSL_IS_TLS13(s)) {
2153        SSLerr(SSL_F_SSL_RENEGOTIATE_ABBREVIATED, SSL_R_WRONG_SSL_VERSION);
2154        return 0;
2155    }
2156
2157    if ((s->options & SSL_OP_NO_RENEGOTIATION)) {
2158        SSLerr(SSL_F_SSL_RENEGOTIATE_ABBREVIATED, SSL_R_NO_RENEGOTIATION);
2159        return 0;
2160    }
2161
2162    s->renegotiate = 1;
2163    s->new_session = 0;
2164
2165    return s->method->ssl_renegotiate(s);
2166}
2167
2168int SSL_renegotiate_pending(const SSL *s)
2169{
2170    /*
2171     * becomes true when negotiation is requested; false again once a
2172     * handshake has finished
2173     */
2174    return (s->renegotiate != 0);
2175}
2176
2177long SSL_ctrl(SSL *s, int cmd, long larg, void *parg)
2178{
2179    long l;
2180
2181    switch (cmd) {
2182    case SSL_CTRL_GET_READ_AHEAD:
2183        return RECORD_LAYER_get_read_ahead(&s->rlayer);
2184    case SSL_CTRL_SET_READ_AHEAD:
2185        l = RECORD_LAYER_get_read_ahead(&s->rlayer);
2186        RECORD_LAYER_set_read_ahead(&s->rlayer, larg);
2187        return l;
2188
2189    case SSL_CTRL_SET_MSG_CALLBACK_ARG:
2190        s->msg_callback_arg = parg;
2191        return 1;
2192
2193    case SSL_CTRL_MODE:
2194        return (s->mode |= larg);
2195    case SSL_CTRL_CLEAR_MODE:
2196        return (s->mode &= ~larg);
2197    case SSL_CTRL_GET_MAX_CERT_LIST:
2198        return (long)s->max_cert_list;
2199    case SSL_CTRL_SET_MAX_CERT_LIST:
2200        if (larg < 0)
2201            return 0;
2202        l = (long)s->max_cert_list;
2203        s->max_cert_list = (size_t)larg;
2204        return l;
2205    case SSL_CTRL_SET_MAX_SEND_FRAGMENT:
2206        if (larg < 512 || larg > SSL3_RT_MAX_PLAIN_LENGTH)
2207            return 0;
2208        s->max_send_fragment = larg;
2209        if (s->max_send_fragment < s->split_send_fragment)
2210            s->split_send_fragment = s->max_send_fragment;
2211        return 1;
2212    case SSL_CTRL_SET_SPLIT_SEND_FRAGMENT:
2213        if ((size_t)larg > s->max_send_fragment || larg == 0)
2214            return 0;
2215        s->split_send_fragment = larg;
2216        return 1;
2217    case SSL_CTRL_SET_MAX_PIPELINES:
2218        if (larg < 1 || larg > SSL_MAX_PIPELINES)
2219            return 0;
2220        s->max_pipelines = larg;
2221        if (larg > 1)
2222            RECORD_LAYER_set_read_ahead(&s->rlayer, 1);
2223        return 1;
2224    case SSL_CTRL_GET_RI_SUPPORT:
2225        if (s->s3)
2226            return s->s3->send_connection_binding;
2227        else
2228            return 0;
2229    case SSL_CTRL_CERT_FLAGS:
2230        return (s->cert->cert_flags |= larg);
2231    case SSL_CTRL_CLEAR_CERT_FLAGS:
2232        return (s->cert->cert_flags &= ~larg);
2233
2234    case SSL_CTRL_GET_RAW_CIPHERLIST:
2235        if (parg) {
2236            if (s->s3->tmp.ciphers_raw == NULL)
2237                return 0;
2238            *(unsigned char **)parg = s->s3->tmp.ciphers_raw;
2239            return (int)s->s3->tmp.ciphers_rawlen;
2240        } else {
2241            return TLS_CIPHER_LEN;
2242        }
2243    case SSL_CTRL_GET_EXTMS_SUPPORT:
2244        if (!s->session || SSL_in_init(s) || ossl_statem_get_in_handshake(s))
2245            return -1;
2246        if (s->session->flags & SSL_SESS_FLAG_EXTMS)
2247            return 1;
2248        else
2249            return 0;
2250    case SSL_CTRL_SET_MIN_PROTO_VERSION:
2251        return ssl_check_allowed_versions(larg, s->max_proto_version)
2252               && ssl_set_version_bound(s->ctx->method->version, (int)larg,
2253                                        &s->min_proto_version);
2254    case SSL_CTRL_GET_MIN_PROTO_VERSION:
2255        return s->min_proto_version;
2256    case SSL_CTRL_SET_MAX_PROTO_VERSION:
2257        return ssl_check_allowed_versions(s->min_proto_version, larg)
2258               && ssl_set_version_bound(s->ctx->method->version, (int)larg,
2259                                        &s->max_proto_version);
2260    case SSL_CTRL_GET_MAX_PROTO_VERSION:
2261        return s->max_proto_version;
2262    default:
2263        return s->method->ssl_ctrl(s, cmd, larg, parg);
2264    }
2265}
2266
2267long SSL_callback_ctrl(SSL *s, int cmd, void (*fp) (void))
2268{
2269    switch (cmd) {
2270    case SSL_CTRL_SET_MSG_CALLBACK:
2271        s->msg_callback = (void (*)
2272                           (int write_p, int version, int content_type,
2273                            const void *buf, size_t len, SSL *ssl,
2274                            void *arg))(fp);
2275        return 1;
2276
2277    default:
2278        return s->method->ssl_callback_ctrl(s, cmd, fp);
2279    }
2280}
2281
2282LHASH_OF(SSL_SESSION) *SSL_CTX_sessions(SSL_CTX *ctx)
2283{
2284    return ctx->sessions;
2285}
2286
2287long SSL_CTX_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg)
2288{
2289    long l;
2290    /* For some cases with ctx == NULL perform syntax checks */
2291    if (ctx == NULL) {
2292        switch (cmd) {
2293#ifndef OPENSSL_NO_EC
2294        case SSL_CTRL_SET_GROUPS_LIST:
2295            return tls1_set_groups_list(NULL, NULL, parg);
2296#endif
2297        case SSL_CTRL_SET_SIGALGS_LIST:
2298        case SSL_CTRL_SET_CLIENT_SIGALGS_LIST:
2299            return tls1_set_sigalgs_list(NULL, parg, 0);
2300        default:
2301            return 0;
2302        }
2303    }
2304
2305    switch (cmd) {
2306    case SSL_CTRL_GET_READ_AHEAD:
2307        return ctx->read_ahead;
2308    case SSL_CTRL_SET_READ_AHEAD:
2309        l = ctx->read_ahead;
2310        ctx->read_ahead = larg;
2311        return l;
2312
2313    case SSL_CTRL_SET_MSG_CALLBACK_ARG:
2314        ctx->msg_callback_arg = parg;
2315        return 1;
2316
2317    case SSL_CTRL_GET_MAX_CERT_LIST:
2318        return (long)ctx->max_cert_list;
2319    case SSL_CTRL_SET_MAX_CERT_LIST:
2320        if (larg < 0)
2321            return 0;
2322        l = (long)ctx->max_cert_list;
2323        ctx->max_cert_list = (size_t)larg;
2324        return l;
2325
2326    case SSL_CTRL_SET_SESS_CACHE_SIZE:
2327        if (larg < 0)
2328            return 0;
2329        l = (long)ctx->session_cache_size;
2330        ctx->session_cache_size = (size_t)larg;
2331        return l;
2332    case SSL_CTRL_GET_SESS_CACHE_SIZE:
2333        return (long)ctx->session_cache_size;
2334    case SSL_CTRL_SET_SESS_CACHE_MODE:
2335        l = ctx->session_cache_mode;
2336        ctx->session_cache_mode = larg;
2337        return l;
2338    case SSL_CTRL_GET_SESS_CACHE_MODE:
2339        return ctx->session_cache_mode;
2340
2341    case SSL_CTRL_SESS_NUMBER:
2342        return lh_SSL_SESSION_num_items(ctx->sessions);
2343    case SSL_CTRL_SESS_CONNECT:
2344        return tsan_load(&ctx->stats.sess_connect);
2345    case SSL_CTRL_SESS_CONNECT_GOOD:
2346        return tsan_load(&ctx->stats.sess_connect_good);
2347    case SSL_CTRL_SESS_CONNECT_RENEGOTIATE:
2348        return tsan_load(&ctx->stats.sess_connect_renegotiate);
2349    case SSL_CTRL_SESS_ACCEPT:
2350        return tsan_load(&ctx->stats.sess_accept);
2351    case SSL_CTRL_SESS_ACCEPT_GOOD:
2352        return tsan_load(&ctx->stats.sess_accept_good);
2353    case SSL_CTRL_SESS_ACCEPT_RENEGOTIATE:
2354        return tsan_load(&ctx->stats.sess_accept_renegotiate);
2355    case SSL_CTRL_SESS_HIT:
2356        return tsan_load(&ctx->stats.sess_hit);
2357    case SSL_CTRL_SESS_CB_HIT:
2358        return tsan_load(&ctx->stats.sess_cb_hit);
2359    case SSL_CTRL_SESS_MISSES:
2360        return tsan_load(&ctx->stats.sess_miss);
2361    case SSL_CTRL_SESS_TIMEOUTS:
2362        return tsan_load(&ctx->stats.sess_timeout);
2363    case SSL_CTRL_SESS_CACHE_FULL:
2364        return tsan_load(&ctx->stats.sess_cache_full);
2365    case SSL_CTRL_MODE:
2366        return (ctx->mode |= larg);
2367    case SSL_CTRL_CLEAR_MODE:
2368        return (ctx->mode &= ~larg);
2369    case SSL_CTRL_SET_MAX_SEND_FRAGMENT:
2370        if (larg < 512 || larg > SSL3_RT_MAX_PLAIN_LENGTH)
2371            return 0;
2372        ctx->max_send_fragment = larg;
2373        if (ctx->max_send_fragment < ctx->split_send_fragment)
2374            ctx->split_send_fragment = ctx->max_send_fragment;
2375        return 1;
2376    case SSL_CTRL_SET_SPLIT_SEND_FRAGMENT:
2377        if ((size_t)larg > ctx->max_send_fragment || larg == 0)
2378            return 0;
2379        ctx->split_send_fragment = larg;
2380        return 1;
2381    case SSL_CTRL_SET_MAX_PIPELINES:
2382        if (larg < 1 || larg > SSL_MAX_PIPELINES)
2383            return 0;
2384        ctx->max_pipelines = larg;
2385        return 1;
2386    case SSL_CTRL_CERT_FLAGS:
2387        return (ctx->cert->cert_flags |= larg);
2388    case SSL_CTRL_CLEAR_CERT_FLAGS:
2389        return (ctx->cert->cert_flags &= ~larg);
2390    case SSL_CTRL_SET_MIN_PROTO_VERSION:
2391        return ssl_check_allowed_versions(larg, ctx->max_proto_version)
2392               && ssl_set_version_bound(ctx->method->version, (int)larg,
2393                                        &ctx->min_proto_version);
2394    case SSL_CTRL_GET_MIN_PROTO_VERSION:
2395        return ctx->min_proto_version;
2396    case SSL_CTRL_SET_MAX_PROTO_VERSION:
2397        return ssl_check_allowed_versions(ctx->min_proto_version, larg)
2398               && ssl_set_version_bound(ctx->method->version, (int)larg,
2399                                        &ctx->max_proto_version);
2400    case SSL_CTRL_GET_MAX_PROTO_VERSION:
2401        return ctx->max_proto_version;
2402    default:
2403        return ctx->method->ssl_ctx_ctrl(ctx, cmd, larg, parg);
2404    }
2405}
2406
2407long SSL_CTX_callback_ctrl(SSL_CTX *ctx, int cmd, void (*fp) (void))
2408{
2409    switch (cmd) {
2410    case SSL_CTRL_SET_MSG_CALLBACK:
2411        ctx->msg_callback = (void (*)
2412                             (int write_p, int version, int content_type,
2413                              const void *buf, size_t len, SSL *ssl,
2414                              void *arg))(fp);
2415        return 1;
2416
2417    default:
2418        return ctx->method->ssl_ctx_callback_ctrl(ctx, cmd, fp);
2419    }
2420}
2421
2422int ssl_cipher_id_cmp(const SSL_CIPHER *a, const SSL_CIPHER *b)
2423{
2424    if (a->id > b->id)
2425        return 1;
2426    if (a->id < b->id)
2427        return -1;
2428    return 0;
2429}
2430
2431int ssl_cipher_ptr_id_cmp(const SSL_CIPHER *const *ap,
2432                          const SSL_CIPHER *const *bp)
2433{
2434    if ((*ap)->id > (*bp)->id)
2435        return 1;
2436    if ((*ap)->id < (*bp)->id)
2437        return -1;
2438    return 0;
2439}
2440
2441/** return a STACK of the ciphers available for the SSL and in order of
2442 * preference */
2443STACK_OF(SSL_CIPHER) *SSL_get_ciphers(const SSL *s)
2444{
2445    if (s != NULL) {
2446        if (s->cipher_list != NULL) {
2447            return s->cipher_list;
2448        } else if ((s->ctx != NULL) && (s->ctx->cipher_list != NULL)) {
2449            return s->ctx->cipher_list;
2450        }
2451    }
2452    return NULL;
2453}
2454
2455STACK_OF(SSL_CIPHER) *SSL_get_client_ciphers(const SSL *s)
2456{
2457    if ((s == NULL) || !s->server)
2458        return NULL;
2459    return s->peer_ciphers;
2460}
2461
2462STACK_OF(SSL_CIPHER) *SSL_get1_supported_ciphers(SSL *s)
2463{
2464    STACK_OF(SSL_CIPHER) *sk = NULL, *ciphers;
2465    int i;
2466
2467    ciphers = SSL_get_ciphers(s);
2468    if (!ciphers)
2469        return NULL;
2470    if (!ssl_set_client_disabled(s))
2471        return NULL;
2472    for (i = 0; i < sk_SSL_CIPHER_num(ciphers); i++) {
2473        const SSL_CIPHER *c = sk_SSL_CIPHER_value(ciphers, i);
2474        if (!ssl_cipher_disabled(s, c, SSL_SECOP_CIPHER_SUPPORTED, 0)) {
2475            if (!sk)
2476                sk = sk_SSL_CIPHER_new_null();
2477            if (!sk)
2478                return NULL;
2479            if (!sk_SSL_CIPHER_push(sk, c)) {
2480                sk_SSL_CIPHER_free(sk);
2481                return NULL;
2482            }
2483        }
2484    }
2485    return sk;
2486}
2487
2488/** return a STACK of the ciphers available for the SSL and in order of
2489 * algorithm id */
2490STACK_OF(SSL_CIPHER) *ssl_get_ciphers_by_id(SSL *s)
2491{
2492    if (s != NULL) {
2493        if (s->cipher_list_by_id != NULL) {
2494            return s->cipher_list_by_id;
2495        } else if ((s->ctx != NULL) && (s->ctx->cipher_list_by_id != NULL)) {
2496            return s->ctx->cipher_list_by_id;
2497        }
2498    }
2499    return NULL;
2500}
2501
2502/** The old interface to get the same thing as SSL_get_ciphers() */
2503const char *SSL_get_cipher_list(const SSL *s, int n)
2504{
2505    const SSL_CIPHER *c;
2506    STACK_OF(SSL_CIPHER) *sk;
2507
2508    if (s == NULL)
2509        return NULL;
2510    sk = SSL_get_ciphers(s);
2511    if ((sk == NULL) || (sk_SSL_CIPHER_num(sk) <= n))
2512        return NULL;
2513    c = sk_SSL_CIPHER_value(sk, n);
2514    if (c == NULL)
2515        return NULL;
2516    return c->name;
2517}
2518
2519/** return a STACK of the ciphers available for the SSL_CTX and in order of
2520 * preference */
2521STACK_OF(SSL_CIPHER) *SSL_CTX_get_ciphers(const SSL_CTX *ctx)
2522{
2523    if (ctx != NULL)
2524        return ctx->cipher_list;
2525    return NULL;
2526}
2527
2528/*
2529 * Distinguish between ciphers controlled by set_ciphersuite() and
2530 * set_cipher_list() when counting.
2531 */
2532static int cipher_list_tls12_num(STACK_OF(SSL_CIPHER) *sk)
2533{
2534    int i, num = 0;
2535    const SSL_CIPHER *c;
2536
2537    if (sk == NULL)
2538        return 0;
2539    for (i = 0; i < sk_SSL_CIPHER_num(sk); ++i) {
2540        c = sk_SSL_CIPHER_value(sk, i);
2541        if (c->min_tls >= TLS1_3_VERSION)
2542            continue;
2543        num++;
2544    }
2545    return num;
2546}
2547
2548/** specify the ciphers to be used by default by the SSL_CTX */
2549int SSL_CTX_set_cipher_list(SSL_CTX *ctx, const char *str)
2550{
2551    STACK_OF(SSL_CIPHER) *sk;
2552
2553    sk = ssl_create_cipher_list(ctx->method, ctx->tls13_ciphersuites,
2554                                &ctx->cipher_list, &ctx->cipher_list_by_id, str,
2555                                ctx->cert);
2556    /*
2557     * ssl_create_cipher_list may return an empty stack if it was unable to
2558     * find a cipher matching the given rule string (for example if the rule
2559     * string specifies a cipher which has been disabled). This is not an
2560     * error as far as ssl_create_cipher_list is concerned, and hence
2561     * ctx->cipher_list and ctx->cipher_list_by_id has been updated.
2562     */
2563    if (sk == NULL)
2564        return 0;
2565    else if (cipher_list_tls12_num(sk) == 0) {
2566        SSLerr(SSL_F_SSL_CTX_SET_CIPHER_LIST, SSL_R_NO_CIPHER_MATCH);
2567        return 0;
2568    }
2569    return 1;
2570}
2571
2572/** specify the ciphers to be used by the SSL */
2573int SSL_set_cipher_list(SSL *s, const char *str)
2574{
2575    STACK_OF(SSL_CIPHER) *sk;
2576
2577    sk = ssl_create_cipher_list(s->ctx->method, s->tls13_ciphersuites,
2578                                &s->cipher_list, &s->cipher_list_by_id, str,
2579                                s->cert);
2580    /* see comment in SSL_CTX_set_cipher_list */
2581    if (sk == NULL)
2582        return 0;
2583    else if (cipher_list_tls12_num(sk) == 0) {
2584        SSLerr(SSL_F_SSL_SET_CIPHER_LIST, SSL_R_NO_CIPHER_MATCH);
2585        return 0;
2586    }
2587    return 1;
2588}
2589
2590char *SSL_get_shared_ciphers(const SSL *s, char *buf, int size)
2591{
2592    char *p;
2593    STACK_OF(SSL_CIPHER) *clntsk, *srvrsk;
2594    const SSL_CIPHER *c;
2595    int i;
2596
2597    if (!s->server
2598            || s->peer_ciphers == NULL
2599            || size < 2)
2600        return NULL;
2601
2602    p = buf;
2603    clntsk = s->peer_ciphers;
2604    srvrsk = SSL_get_ciphers(s);
2605    if (clntsk == NULL || srvrsk == NULL)
2606        return NULL;
2607
2608    if (sk_SSL_CIPHER_num(clntsk) == 0 || sk_SSL_CIPHER_num(srvrsk) == 0)
2609        return NULL;
2610
2611    for (i = 0; i < sk_SSL_CIPHER_num(clntsk); i++) {
2612        int n;
2613
2614        c = sk_SSL_CIPHER_value(clntsk, i);
2615        if (sk_SSL_CIPHER_find(srvrsk, c) < 0)
2616            continue;
2617
2618        n = strlen(c->name);
2619        if (n + 1 > size) {
2620            if (p != buf)
2621                --p;
2622            *p = '\0';
2623            return buf;
2624        }
2625        strcpy(p, c->name);
2626        p += n;
2627        *(p++) = ':';
2628        size -= n + 1;
2629    }
2630    p[-1] = '\0';
2631    return buf;
2632}
2633
2634/**
2635 * Return the requested servername (SNI) value. Note that the behaviour varies
2636 * depending on:
2637 * - whether this is called by the client or the server,
2638 * - if we are before or during/after the handshake,
2639 * - if a resumption or normal handshake is being attempted/has occurred
2640 * - whether we have negotiated TLSv1.2 (or below) or TLSv1.3
2641 *
2642 * Note that only the host_name type is defined (RFC 3546).
2643 */
2644const char *SSL_get_servername(const SSL *s, const int type)
2645{
2646    /*
2647     * If we don't know if we are the client or the server yet then we assume
2648     * client.
2649     */
2650    int server = s->handshake_func == NULL ? 0 : s->server;
2651    if (type != TLSEXT_NAMETYPE_host_name)
2652        return NULL;
2653
2654    if (server) {
2655        /**
2656         * Server side
2657         * In TLSv1.3 on the server SNI is not associated with the session
2658         * but in TLSv1.2 or below it is.
2659         *
2660         * Before the handshake:
2661         *  - return NULL
2662         *
2663         * During/after the handshake (TLSv1.2 or below resumption occurred):
2664         * - If a servername was accepted by the server in the original
2665         *   handshake then it will return that servername, or NULL otherwise.
2666         *
2667         * During/after the handshake (TLSv1.2 or below resumption did not occur):
2668         * - The function will return the servername requested by the client in
2669         *   this handshake or NULL if none was requested.
2670         */
2671         if (s->hit && !SSL_IS_TLS13(s))
2672            return s->session->ext.hostname;
2673    } else {
2674        /**
2675         * Client side
2676         *
2677         * Before the handshake:
2678         *  - If a servername has been set via a call to
2679         *    SSL_set_tlsext_host_name() then it will return that servername
2680         *  - If one has not been set, but a TLSv1.2 resumption is being
2681         *    attempted and the session from the original handshake had a
2682         *    servername accepted by the server then it will return that
2683         *    servername
2684         *  - Otherwise it returns NULL
2685         *
2686         * During/after the handshake (TLSv1.2 or below resumption occurred):
2687         * - If the session from the original handshake had a servername accepted
2688         *   by the server then it will return that servername.
2689         * - Otherwise it returns the servername set via
2690         *   SSL_set_tlsext_host_name() (or NULL if it was not called).
2691         *
2692         * During/after the handshake (TLSv1.2 or below resumption did not occur):
2693         * - It will return the servername set via SSL_set_tlsext_host_name()
2694         *   (or NULL if it was not called).
2695         */
2696        if (SSL_in_before(s)) {
2697            if (s->ext.hostname == NULL
2698                    && s->session != NULL
2699                    && s->session->ssl_version != TLS1_3_VERSION)
2700                return s->session->ext.hostname;
2701        } else {
2702            if (!SSL_IS_TLS13(s) && s->hit && s->session->ext.hostname != NULL)
2703                return s->session->ext.hostname;
2704        }
2705    }
2706
2707    return s->ext.hostname;
2708}
2709
2710int SSL_get_servername_type(const SSL *s)
2711{
2712    if (SSL_get_servername(s, TLSEXT_NAMETYPE_host_name) != NULL)
2713        return TLSEXT_NAMETYPE_host_name;
2714    return -1;
2715}
2716
2717/*
2718 * SSL_select_next_proto implements the standard protocol selection. It is
2719 * expected that this function is called from the callback set by
2720 * SSL_CTX_set_next_proto_select_cb. The protocol data is assumed to be a
2721 * vector of 8-bit, length prefixed byte strings. The length byte itself is
2722 * not included in the length. A byte string of length 0 is invalid. No byte
2723 * string may be truncated. The current, but experimental algorithm for
2724 * selecting the protocol is: 1) If the server doesn't support NPN then this
2725 * is indicated to the callback. In this case, the client application has to
2726 * abort the connection or have a default application level protocol. 2) If
2727 * the server supports NPN, but advertises an empty list then the client
2728 * selects the first protocol in its list, but indicates via the API that this
2729 * fallback case was enacted. 3) Otherwise, the client finds the first
2730 * protocol in the server's list that it supports and selects this protocol.
2731 * This is because it's assumed that the server has better information about
2732 * which protocol a client should use. 4) If the client doesn't support any
2733 * of the server's advertised protocols, then this is treated the same as
2734 * case 2. It returns either OPENSSL_NPN_NEGOTIATED if a common protocol was
2735 * found, or OPENSSL_NPN_NO_OVERLAP if the fallback case was reached.
2736 */
2737int SSL_select_next_proto(unsigned char **out, unsigned char *outlen,
2738                          const unsigned char *server,
2739                          unsigned int server_len,
2740                          const unsigned char *client, unsigned int client_len)
2741{
2742    unsigned int i, j;
2743    const unsigned char *result;
2744    int status = OPENSSL_NPN_UNSUPPORTED;
2745
2746    /*
2747     * For each protocol in server preference order, see if we support it.
2748     */
2749    for (i = 0; i < server_len;) {
2750        for (j = 0; j < client_len;) {
2751            if (server[i] == client[j] &&
2752                memcmp(&server[i + 1], &client[j + 1], server[i]) == 0) {
2753                /* We found a match */
2754                result = &server[i];
2755                status = OPENSSL_NPN_NEGOTIATED;
2756                goto found;
2757            }
2758            j += client[j];
2759            j++;
2760        }
2761        i += server[i];
2762        i++;
2763    }
2764
2765    /* There's no overlap between our protocols and the server's list. */
2766    result = client;
2767    status = OPENSSL_NPN_NO_OVERLAP;
2768
2769 found:
2770    *out = (unsigned char *)result + 1;
2771    *outlen = result[0];
2772    return status;
2773}
2774
2775#ifndef OPENSSL_NO_NEXTPROTONEG
2776/*
2777 * SSL_get0_next_proto_negotiated sets *data and *len to point to the
2778 * client's requested protocol for this connection and returns 0. If the
2779 * client didn't request any protocol, then *data is set to NULL. Note that
2780 * the client can request any protocol it chooses. The value returned from
2781 * this function need not be a member of the list of supported protocols
2782 * provided by the callback.
2783 */
2784void SSL_get0_next_proto_negotiated(const SSL *s, const unsigned char **data,
2785                                    unsigned *len)
2786{
2787    *data = s->ext.npn;
2788    if (!*data) {
2789        *len = 0;
2790    } else {
2791        *len = (unsigned int)s->ext.npn_len;
2792    }
2793}
2794
2795/*
2796 * SSL_CTX_set_npn_advertised_cb sets a callback that is called when
2797 * a TLS server needs a list of supported protocols for Next Protocol
2798 * Negotiation. The returned list must be in wire format.  The list is
2799 * returned by setting |out| to point to it and |outlen| to its length. This
2800 * memory will not be modified, but one should assume that the SSL* keeps a
2801 * reference to it. The callback should return SSL_TLSEXT_ERR_OK if it
2802 * wishes to advertise. Otherwise, no such extension will be included in the
2803 * ServerHello.
2804 */
2805void SSL_CTX_set_npn_advertised_cb(SSL_CTX *ctx,
2806                                   SSL_CTX_npn_advertised_cb_func cb,
2807                                   void *arg)
2808{
2809    ctx->ext.npn_advertised_cb = cb;
2810    ctx->ext.npn_advertised_cb_arg = arg;
2811}
2812
2813/*
2814 * SSL_CTX_set_next_proto_select_cb sets a callback that is called when a
2815 * client needs to select a protocol from the server's provided list. |out|
2816 * must be set to point to the selected protocol (which may be within |in|).
2817 * The length of the protocol name must be written into |outlen|. The
2818 * server's advertised protocols are provided in |in| and |inlen|. The
2819 * callback can assume that |in| is syntactically valid. The client must
2820 * select a protocol. It is fatal to the connection if this callback returns
2821 * a value other than SSL_TLSEXT_ERR_OK.
2822 */
2823void SSL_CTX_set_npn_select_cb(SSL_CTX *ctx,
2824                               SSL_CTX_npn_select_cb_func cb,
2825                               void *arg)
2826{
2827    ctx->ext.npn_select_cb = cb;
2828    ctx->ext.npn_select_cb_arg = arg;
2829}
2830#endif
2831
2832/*
2833 * SSL_CTX_set_alpn_protos sets the ALPN protocol list on |ctx| to |protos|.
2834 * |protos| must be in wire-format (i.e. a series of non-empty, 8-bit
2835 * length-prefixed strings). Returns 0 on success.
2836 */
2837int SSL_CTX_set_alpn_protos(SSL_CTX *ctx, const unsigned char *protos,
2838                            unsigned int protos_len)
2839{
2840    OPENSSL_free(ctx->ext.alpn);
2841    ctx->ext.alpn = OPENSSL_memdup(protos, protos_len);
2842    if (ctx->ext.alpn == NULL) {
2843        ctx->ext.alpn_len = 0;
2844        SSLerr(SSL_F_SSL_CTX_SET_ALPN_PROTOS, ERR_R_MALLOC_FAILURE);
2845        return 1;
2846    }
2847    ctx->ext.alpn_len = protos_len;
2848
2849    return 0;
2850}
2851
2852/*
2853 * SSL_set_alpn_protos sets the ALPN protocol list on |ssl| to |protos|.
2854 * |protos| must be in wire-format (i.e. a series of non-empty, 8-bit
2855 * length-prefixed strings). Returns 0 on success.
2856 */
2857int SSL_set_alpn_protos(SSL *ssl, const unsigned char *protos,
2858                        unsigned int protos_len)
2859{
2860    OPENSSL_free(ssl->ext.alpn);
2861    ssl->ext.alpn = OPENSSL_memdup(protos, protos_len);
2862    if (ssl->ext.alpn == NULL) {
2863        ssl->ext.alpn_len = 0;
2864        SSLerr(SSL_F_SSL_SET_ALPN_PROTOS, ERR_R_MALLOC_FAILURE);
2865        return 1;
2866    }
2867    ssl->ext.alpn_len = protos_len;
2868
2869    return 0;
2870}
2871
2872/*
2873 * SSL_CTX_set_alpn_select_cb sets a callback function on |ctx| that is
2874 * called during ClientHello processing in order to select an ALPN protocol
2875 * from the client's list of offered protocols.
2876 */
2877void SSL_CTX_set_alpn_select_cb(SSL_CTX *ctx,
2878                                SSL_CTX_alpn_select_cb_func cb,
2879                                void *arg)
2880{
2881    ctx->ext.alpn_select_cb = cb;
2882    ctx->ext.alpn_select_cb_arg = arg;
2883}
2884
2885/*
2886 * SSL_get0_alpn_selected gets the selected ALPN protocol (if any) from |ssl|.
2887 * On return it sets |*data| to point to |*len| bytes of protocol name
2888 * (not including the leading length-prefix byte). If the server didn't
2889 * respond with a negotiated protocol then |*len| will be zero.
2890 */
2891void SSL_get0_alpn_selected(const SSL *ssl, const unsigned char **data,
2892                            unsigned int *len)
2893{
2894    *data = NULL;
2895    if (ssl->s3)
2896        *data = ssl->s3->alpn_selected;
2897    if (*data == NULL)
2898        *len = 0;
2899    else
2900        *len = (unsigned int)ssl->s3->alpn_selected_len;
2901}
2902
2903int SSL_export_keying_material(SSL *s, unsigned char *out, size_t olen,
2904                               const char *label, size_t llen,
2905                               const unsigned char *context, size_t contextlen,
2906                               int use_context)
2907{
2908    if (s->session == NULL
2909        || (s->version < TLS1_VERSION && s->version != DTLS1_BAD_VER))
2910        return -1;
2911
2912    return s->method->ssl3_enc->export_keying_material(s, out, olen, label,
2913                                                       llen, context,
2914                                                       contextlen, use_context);
2915}
2916
2917int SSL_export_keying_material_early(SSL *s, unsigned char *out, size_t olen,
2918                                     const char *label, size_t llen,
2919                                     const unsigned char *context,
2920                                     size_t contextlen)
2921{
2922    if (s->version != TLS1_3_VERSION)
2923        return 0;
2924
2925    return tls13_export_keying_material_early(s, out, olen, label, llen,
2926                                              context, contextlen);
2927}
2928
2929static unsigned long ssl_session_hash(const SSL_SESSION *a)
2930{
2931    const unsigned char *session_id = a->session_id;
2932    unsigned long l;
2933    unsigned char tmp_storage[4];
2934
2935    if (a->session_id_length < sizeof(tmp_storage)) {
2936        memset(tmp_storage, 0, sizeof(tmp_storage));
2937        memcpy(tmp_storage, a->session_id, a->session_id_length);
2938        session_id = tmp_storage;
2939    }
2940
2941    l = (unsigned long)
2942        ((unsigned long)session_id[0]) |
2943        ((unsigned long)session_id[1] << 8L) |
2944        ((unsigned long)session_id[2] << 16L) |
2945        ((unsigned long)session_id[3] << 24L);
2946    return l;
2947}
2948
2949/*
2950 * NB: If this function (or indeed the hash function which uses a sort of
2951 * coarser function than this one) is changed, ensure
2952 * SSL_CTX_has_matching_session_id() is checked accordingly. It relies on
2953 * being able to construct an SSL_SESSION that will collide with any existing
2954 * session with a matching session ID.
2955 */
2956static int ssl_session_cmp(const SSL_SESSION *a, const SSL_SESSION *b)
2957{
2958    if (a->ssl_version != b->ssl_version)
2959        return 1;
2960    if (a->session_id_length != b->session_id_length)
2961        return 1;
2962    return memcmp(a->session_id, b->session_id, a->session_id_length);
2963}
2964
2965/*
2966 * These wrapper functions should remain rather than redeclaring
2967 * SSL_SESSION_hash and SSL_SESSION_cmp for void* types and casting each
2968 * variable. The reason is that the functions aren't static, they're exposed
2969 * via ssl.h.
2970 */
2971
2972SSL_CTX *SSL_CTX_new(const SSL_METHOD *meth)
2973{
2974    SSL_CTX *ret = NULL;
2975
2976    if (meth == NULL) {
2977        SSLerr(SSL_F_SSL_CTX_NEW, SSL_R_NULL_SSL_METHOD_PASSED);
2978        return NULL;
2979    }
2980
2981    if (!OPENSSL_init_ssl(OPENSSL_INIT_LOAD_SSL_STRINGS, NULL))
2982        return NULL;
2983
2984    if (SSL_get_ex_data_X509_STORE_CTX_idx() < 0) {
2985        SSLerr(SSL_F_SSL_CTX_NEW, SSL_R_X509_VERIFICATION_SETUP_PROBLEMS);
2986        goto err;
2987    }
2988    ret = OPENSSL_zalloc(sizeof(*ret));
2989    if (ret == NULL)
2990        goto err;
2991
2992    ret->method = meth;
2993    ret->min_proto_version = 0;
2994    ret->max_proto_version = 0;
2995    ret->mode = SSL_MODE_AUTO_RETRY;
2996    ret->session_cache_mode = SSL_SESS_CACHE_SERVER;
2997    ret->session_cache_size = SSL_SESSION_CACHE_MAX_SIZE_DEFAULT;
2998    /* We take the system default. */
2999    ret->session_timeout = meth->get_timeout();
3000    ret->references = 1;
3001    ret->lock = CRYPTO_THREAD_lock_new();
3002    if (ret->lock == NULL) {
3003        SSLerr(SSL_F_SSL_CTX_NEW, ERR_R_MALLOC_FAILURE);
3004        OPENSSL_free(ret);
3005        return NULL;
3006    }
3007    ret->max_cert_list = SSL_MAX_CERT_LIST_DEFAULT;
3008    ret->verify_mode = SSL_VERIFY_NONE;
3009    if ((ret->cert = ssl_cert_new()) == NULL)
3010        goto err;
3011
3012    ret->sessions = lh_SSL_SESSION_new(ssl_session_hash, ssl_session_cmp);
3013    if (ret->sessions == NULL)
3014        goto err;
3015    ret->cert_store = X509_STORE_new();
3016    if (ret->cert_store == NULL)
3017        goto err;
3018#ifndef OPENSSL_NO_CT
3019    ret->ctlog_store = CTLOG_STORE_new();
3020    if (ret->ctlog_store == NULL)
3021        goto err;
3022#endif
3023
3024    if (!SSL_CTX_set_ciphersuites(ret, TLS_DEFAULT_CIPHERSUITES))
3025        goto err;
3026
3027    if (!ssl_create_cipher_list(ret->method,
3028                                ret->tls13_ciphersuites,
3029                                &ret->cipher_list, &ret->cipher_list_by_id,
3030                                SSL_DEFAULT_CIPHER_LIST, ret->cert)
3031        || sk_SSL_CIPHER_num(ret->cipher_list) <= 0) {
3032        SSLerr(SSL_F_SSL_CTX_NEW, SSL_R_LIBRARY_HAS_NO_CIPHERS);
3033        goto err2;
3034    }
3035
3036    ret->param = X509_VERIFY_PARAM_new();
3037    if (ret->param == NULL)
3038        goto err;
3039
3040    if ((ret->md5 = EVP_get_digestbyname("ssl3-md5")) == NULL) {
3041        SSLerr(SSL_F_SSL_CTX_NEW, SSL_R_UNABLE_TO_LOAD_SSL3_MD5_ROUTINES);
3042        goto err2;
3043    }
3044    if ((ret->sha1 = EVP_get_digestbyname("ssl3-sha1")) == NULL) {
3045        SSLerr(SSL_F_SSL_CTX_NEW, SSL_R_UNABLE_TO_LOAD_SSL3_SHA1_ROUTINES);
3046        goto err2;
3047    }
3048
3049    if ((ret->ca_names = sk_X509_NAME_new_null()) == NULL)
3050        goto err;
3051
3052    if ((ret->client_ca_names = sk_X509_NAME_new_null()) == NULL)
3053        goto err;
3054
3055    if (!CRYPTO_new_ex_data(CRYPTO_EX_INDEX_SSL_CTX, ret, &ret->ex_data))
3056        goto err;
3057
3058    if ((ret->ext.secure = OPENSSL_secure_zalloc(sizeof(*ret->ext.secure))) == NULL)
3059        goto err;
3060
3061    /* No compression for DTLS */
3062    if (!(meth->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS))
3063        ret->comp_methods = SSL_COMP_get_compression_methods();
3064
3065    ret->max_send_fragment = SSL3_RT_MAX_PLAIN_LENGTH;
3066    ret->split_send_fragment = SSL3_RT_MAX_PLAIN_LENGTH;
3067
3068    /* Setup RFC5077 ticket keys */
3069    if ((RAND_bytes(ret->ext.tick_key_name,
3070                    sizeof(ret->ext.tick_key_name)) <= 0)
3071        || (RAND_priv_bytes(ret->ext.secure->tick_hmac_key,
3072                       sizeof(ret->ext.secure->tick_hmac_key)) <= 0)
3073        || (RAND_priv_bytes(ret->ext.secure->tick_aes_key,
3074                       sizeof(ret->ext.secure->tick_aes_key)) <= 0))
3075        ret->options |= SSL_OP_NO_TICKET;
3076
3077    if (RAND_priv_bytes(ret->ext.cookie_hmac_key,
3078                   sizeof(ret->ext.cookie_hmac_key)) <= 0)
3079        goto err;
3080
3081#ifndef OPENSSL_NO_SRP
3082    if (!SSL_CTX_SRP_CTX_init(ret))
3083        goto err;
3084#endif
3085#ifndef OPENSSL_NO_ENGINE
3086# ifdef OPENSSL_SSL_CLIENT_ENGINE_AUTO
3087#  define eng_strx(x)     #x
3088#  define eng_str(x)      eng_strx(x)
3089    /* Use specific client engine automatically... ignore errors */
3090    {
3091        ENGINE *eng;
3092        eng = ENGINE_by_id(eng_str(OPENSSL_SSL_CLIENT_ENGINE_AUTO));
3093        if (!eng) {
3094            ERR_clear_error();
3095            ENGINE_load_builtin_engines();
3096            eng = ENGINE_by_id(eng_str(OPENSSL_SSL_CLIENT_ENGINE_AUTO));
3097        }
3098        if (!eng || !SSL_CTX_set_client_cert_engine(ret, eng))
3099            ERR_clear_error();
3100    }
3101# endif
3102#endif
3103    /*
3104     * Default is to connect to non-RI servers. When RI is more widely
3105     * deployed might change this.
3106     */
3107    ret->options |= SSL_OP_LEGACY_SERVER_CONNECT;
3108    /*
3109     * Disable compression by default to prevent CRIME. Applications can
3110     * re-enable compression by configuring
3111     * SSL_CTX_clear_options(ctx, SSL_OP_NO_COMPRESSION);
3112     * or by using the SSL_CONF library. Similarly we also enable TLSv1.3
3113     * middlebox compatibility by default. This may be disabled by default in
3114     * a later OpenSSL version.
3115     */
3116    ret->options |= SSL_OP_NO_COMPRESSION | SSL_OP_ENABLE_MIDDLEBOX_COMPAT;
3117
3118    ret->ext.status_type = TLSEXT_STATUSTYPE_nothing;
3119
3120    /*
3121     * We cannot usefully set a default max_early_data here (which gets
3122     * propagated in SSL_new(), for the following reason: setting the
3123     * SSL field causes tls_construct_stoc_early_data() to tell the
3124     * client that early data will be accepted when constructing a TLS 1.3
3125     * session ticket, and the client will accordingly send us early data
3126     * when using that ticket (if the client has early data to send).
3127     * However, in order for the early data to actually be consumed by
3128     * the application, the application must also have calls to
3129     * SSL_read_early_data(); otherwise we'll just skip past the early data
3130     * and ignore it.  So, since the application must add calls to
3131     * SSL_read_early_data(), we also require them to add
3132     * calls to SSL_CTX_set_max_early_data() in order to use early data,
3133     * eliminating the bandwidth-wasting early data in the case described
3134     * above.
3135     */
3136    ret->max_early_data = 0;
3137
3138    /*
3139     * Default recv_max_early_data is a fully loaded single record. Could be
3140     * split across multiple records in practice. We set this differently to
3141     * max_early_data so that, in the default case, we do not advertise any
3142     * support for early_data, but if a client were to send us some (e.g.
3143     * because of an old, stale ticket) then we will tolerate it and skip over
3144     * it.
3145     */
3146    ret->recv_max_early_data = SSL3_RT_MAX_PLAIN_LENGTH;
3147
3148    /* By default we send two session tickets automatically in TLSv1.3 */
3149    ret->num_tickets = 2;
3150
3151    ssl_ctx_system_config(ret);
3152
3153    return ret;
3154 err:
3155    SSLerr(SSL_F_SSL_CTX_NEW, ERR_R_MALLOC_FAILURE);
3156 err2:
3157    SSL_CTX_free(ret);
3158    return NULL;
3159}
3160
3161int SSL_CTX_up_ref(SSL_CTX *ctx)
3162{
3163    int i;
3164
3165    if (CRYPTO_UP_REF(&ctx->references, &i, ctx->lock) <= 0)
3166        return 0;
3167
3168    REF_PRINT_COUNT("SSL_CTX", ctx);
3169    REF_ASSERT_ISNT(i < 2);
3170    return ((i > 1) ? 1 : 0);
3171}
3172
3173void SSL_CTX_free(SSL_CTX *a)
3174{
3175    int i;
3176
3177    if (a == NULL)
3178        return;
3179
3180    CRYPTO_DOWN_REF(&a->references, &i, a->lock);
3181    REF_PRINT_COUNT("SSL_CTX", a);
3182    if (i > 0)
3183        return;
3184    REF_ASSERT_ISNT(i < 0);
3185
3186    X509_VERIFY_PARAM_free(a->param);
3187    dane_ctx_final(&a->dane);
3188
3189    /*
3190     * Free internal session cache. However: the remove_cb() may reference
3191     * the ex_data of SSL_CTX, thus the ex_data store can only be removed
3192     * after the sessions were flushed.
3193     * As the ex_data handling routines might also touch the session cache,
3194     * the most secure solution seems to be: empty (flush) the cache, then
3195     * free ex_data, then finally free the cache.
3196     * (See ticket [openssl.org #212].)
3197     */
3198    if (a->sessions != NULL)
3199        SSL_CTX_flush_sessions(a, 0);
3200
3201    CRYPTO_free_ex_data(CRYPTO_EX_INDEX_SSL_CTX, a, &a->ex_data);
3202    lh_SSL_SESSION_free(a->sessions);
3203    X509_STORE_free(a->cert_store);
3204#ifndef OPENSSL_NO_CT
3205    CTLOG_STORE_free(a->ctlog_store);
3206#endif
3207    sk_SSL_CIPHER_free(a->cipher_list);
3208    sk_SSL_CIPHER_free(a->cipher_list_by_id);
3209    sk_SSL_CIPHER_free(a->tls13_ciphersuites);
3210    ssl_cert_free(a->cert);
3211    sk_X509_NAME_pop_free(a->ca_names, X509_NAME_free);
3212    sk_X509_NAME_pop_free(a->client_ca_names, X509_NAME_free);
3213    sk_X509_pop_free(a->extra_certs, X509_free);
3214    a->comp_methods = NULL;
3215#ifndef OPENSSL_NO_SRTP
3216    sk_SRTP_PROTECTION_PROFILE_free(a->srtp_profiles);
3217#endif
3218#ifndef OPENSSL_NO_SRP
3219    SSL_CTX_SRP_CTX_free(a);
3220#endif
3221#ifndef OPENSSL_NO_ENGINE
3222    ENGINE_finish(a->client_cert_engine);
3223#endif
3224
3225#ifndef OPENSSL_NO_EC
3226    OPENSSL_free(a->ext.ecpointformats);
3227    OPENSSL_free(a->ext.supportedgroups);
3228#endif
3229    OPENSSL_free(a->ext.alpn);
3230    OPENSSL_secure_free(a->ext.secure);
3231
3232    CRYPTO_THREAD_lock_free(a->lock);
3233
3234    OPENSSL_free(a);
3235}
3236
3237void SSL_CTX_set_default_passwd_cb(SSL_CTX *ctx, pem_password_cb *cb)
3238{
3239    ctx->default_passwd_callback = cb;
3240}
3241
3242void SSL_CTX_set_default_passwd_cb_userdata(SSL_CTX *ctx, void *u)
3243{
3244    ctx->default_passwd_callback_userdata = u;
3245}
3246
3247pem_password_cb *SSL_CTX_get_default_passwd_cb(SSL_CTX *ctx)
3248{
3249    return ctx->default_passwd_callback;
3250}
3251
3252void *SSL_CTX_get_default_passwd_cb_userdata(SSL_CTX *ctx)
3253{
3254    return ctx->default_passwd_callback_userdata;
3255}
3256
3257void SSL_set_default_passwd_cb(SSL *s, pem_password_cb *cb)
3258{
3259    s->default_passwd_callback = cb;
3260}
3261
3262void SSL_set_default_passwd_cb_userdata(SSL *s, void *u)
3263{
3264    s->default_passwd_callback_userdata = u;
3265}
3266
3267pem_password_cb *SSL_get_default_passwd_cb(SSL *s)
3268{
3269    return s->default_passwd_callback;
3270}
3271
3272void *SSL_get_default_passwd_cb_userdata(SSL *s)
3273{
3274    return s->default_passwd_callback_userdata;
3275}
3276
3277void SSL_CTX_set_cert_verify_callback(SSL_CTX *ctx,
3278                                      int (*cb) (X509_STORE_CTX *, void *),
3279                                      void *arg)
3280{
3281    ctx->app_verify_callback = cb;
3282    ctx->app_verify_arg = arg;
3283}
3284
3285void SSL_CTX_set_verify(SSL_CTX *ctx, int mode,
3286                        int (*cb) (int, X509_STORE_CTX *))
3287{
3288    ctx->verify_mode = mode;
3289    ctx->default_verify_callback = cb;
3290}
3291
3292void SSL_CTX_set_verify_depth(SSL_CTX *ctx, int depth)
3293{
3294    X509_VERIFY_PARAM_set_depth(ctx->param, depth);
3295}
3296
3297void SSL_CTX_set_cert_cb(SSL_CTX *c, int (*cb) (SSL *ssl, void *arg), void *arg)
3298{
3299    ssl_cert_set_cert_cb(c->cert, cb, arg);
3300}
3301
3302void SSL_set_cert_cb(SSL *s, int (*cb) (SSL *ssl, void *arg), void *arg)
3303{
3304    ssl_cert_set_cert_cb(s->cert, cb, arg);
3305}
3306
3307void ssl_set_masks(SSL *s)
3308{
3309    CERT *c = s->cert;
3310    uint32_t *pvalid = s->s3->tmp.valid_flags;
3311    int rsa_enc, rsa_sign, dh_tmp, dsa_sign;
3312    unsigned long mask_k, mask_a;
3313#ifndef OPENSSL_NO_EC
3314    int have_ecc_cert, ecdsa_ok;
3315#endif
3316    if (c == NULL)
3317        return;
3318
3319#ifndef OPENSSL_NO_DH
3320    dh_tmp = (c->dh_tmp != NULL || c->dh_tmp_cb != NULL || c->dh_tmp_auto);
3321#else
3322    dh_tmp = 0;
3323#endif
3324
3325    rsa_enc = pvalid[SSL_PKEY_RSA] & CERT_PKEY_VALID;
3326    rsa_sign = pvalid[SSL_PKEY_RSA] & CERT_PKEY_VALID;
3327    dsa_sign = pvalid[SSL_PKEY_DSA_SIGN] & CERT_PKEY_VALID;
3328#ifndef OPENSSL_NO_EC
3329    have_ecc_cert = pvalid[SSL_PKEY_ECC] & CERT_PKEY_VALID;
3330#endif
3331    mask_k = 0;
3332    mask_a = 0;
3333
3334#ifdef CIPHER_DEBUG
3335    fprintf(stderr, "dht=%d re=%d rs=%d ds=%d\n",
3336            dh_tmp, rsa_enc, rsa_sign, dsa_sign);
3337#endif
3338
3339#ifndef OPENSSL_NO_GOST
3340    if (ssl_has_cert(s, SSL_PKEY_GOST12_512)) {
3341        mask_k |= SSL_kGOST;
3342        mask_a |= SSL_aGOST12;
3343    }
3344    if (ssl_has_cert(s, SSL_PKEY_GOST12_256)) {
3345        mask_k |= SSL_kGOST;
3346        mask_a |= SSL_aGOST12;
3347    }
3348    if (ssl_has_cert(s, SSL_PKEY_GOST01)) {
3349        mask_k |= SSL_kGOST;
3350        mask_a |= SSL_aGOST01;
3351    }
3352#endif
3353
3354    if (rsa_enc)
3355        mask_k |= SSL_kRSA;
3356
3357    if (dh_tmp)
3358        mask_k |= SSL_kDHE;
3359
3360    /*
3361     * If we only have an RSA-PSS certificate allow RSA authentication
3362     * if TLS 1.2 and peer supports it.
3363     */
3364
3365    if (rsa_enc || rsa_sign || (ssl_has_cert(s, SSL_PKEY_RSA_PSS_SIGN)
3366                && pvalid[SSL_PKEY_RSA_PSS_SIGN] & CERT_PKEY_EXPLICIT_SIGN
3367                && TLS1_get_version(s) == TLS1_2_VERSION))
3368        mask_a |= SSL_aRSA;
3369
3370    if (dsa_sign) {
3371        mask_a |= SSL_aDSS;
3372    }
3373
3374    mask_a |= SSL_aNULL;
3375
3376    /*
3377     * An ECC certificate may be usable for ECDH and/or ECDSA cipher suites
3378     * depending on the key usage extension.
3379     */
3380#ifndef OPENSSL_NO_EC
3381    if (have_ecc_cert) {
3382        uint32_t ex_kusage;
3383        ex_kusage = X509_get_key_usage(c->pkeys[SSL_PKEY_ECC].x509);
3384        ecdsa_ok = ex_kusage & X509v3_KU_DIGITAL_SIGNATURE;
3385        if (!(pvalid[SSL_PKEY_ECC] & CERT_PKEY_SIGN))
3386            ecdsa_ok = 0;
3387        if (ecdsa_ok)
3388            mask_a |= SSL_aECDSA;
3389    }
3390    /* Allow Ed25519 for TLS 1.2 if peer supports it */
3391    if (!(mask_a & SSL_aECDSA) && ssl_has_cert(s, SSL_PKEY_ED25519)
3392            && pvalid[SSL_PKEY_ED25519] & CERT_PKEY_EXPLICIT_SIGN
3393            && TLS1_get_version(s) == TLS1_2_VERSION)
3394            mask_a |= SSL_aECDSA;
3395
3396    /* Allow Ed448 for TLS 1.2 if peer supports it */
3397    if (!(mask_a & SSL_aECDSA) && ssl_has_cert(s, SSL_PKEY_ED448)
3398            && pvalid[SSL_PKEY_ED448] & CERT_PKEY_EXPLICIT_SIGN
3399            && TLS1_get_version(s) == TLS1_2_VERSION)
3400            mask_a |= SSL_aECDSA;
3401#endif
3402
3403#ifndef OPENSSL_NO_EC
3404    mask_k |= SSL_kECDHE;
3405#endif
3406
3407#ifndef OPENSSL_NO_PSK
3408    mask_k |= SSL_kPSK;
3409    mask_a |= SSL_aPSK;
3410    if (mask_k & SSL_kRSA)
3411        mask_k |= SSL_kRSAPSK;
3412    if (mask_k & SSL_kDHE)
3413        mask_k |= SSL_kDHEPSK;
3414    if (mask_k & SSL_kECDHE)
3415        mask_k |= SSL_kECDHEPSK;
3416#endif
3417
3418    s->s3->tmp.mask_k = mask_k;
3419    s->s3->tmp.mask_a = mask_a;
3420}
3421
3422#ifndef OPENSSL_NO_EC
3423
3424int ssl_check_srvr_ecc_cert_and_alg(X509 *x, SSL *s)
3425{
3426    if (s->s3->tmp.new_cipher->algorithm_auth & SSL_aECDSA) {
3427        /* key usage, if present, must allow signing */
3428        if (!(X509_get_key_usage(x) & X509v3_KU_DIGITAL_SIGNATURE)) {
3429            SSLerr(SSL_F_SSL_CHECK_SRVR_ECC_CERT_AND_ALG,
3430                   SSL_R_ECC_CERT_NOT_FOR_SIGNING);
3431            return 0;
3432        }
3433    }
3434    return 1;                   /* all checks are ok */
3435}
3436
3437#endif
3438
3439int ssl_get_server_cert_serverinfo(SSL *s, const unsigned char **serverinfo,
3440                                   size_t *serverinfo_length)
3441{
3442    CERT_PKEY *cpk = s->s3->tmp.cert;
3443    *serverinfo_length = 0;
3444
3445    if (cpk == NULL || cpk->serverinfo == NULL)
3446        return 0;
3447
3448    *serverinfo = cpk->serverinfo;
3449    *serverinfo_length = cpk->serverinfo_length;
3450    return 1;
3451}
3452
3453void ssl_update_cache(SSL *s, int mode)
3454{
3455    int i;
3456
3457    /*
3458     * If the session_id_length is 0, we are not supposed to cache it, and it
3459     * would be rather hard to do anyway :-)
3460     */
3461    if (s->session->session_id_length == 0)
3462        return;
3463
3464    /*
3465     * If sid_ctx_length is 0 there is no specific application context
3466     * associated with this session, so when we try to resume it and
3467     * SSL_VERIFY_PEER is requested to verify the client identity, we have no
3468     * indication that this is actually a session for the proper application
3469     * context, and the *handshake* will fail, not just the resumption attempt.
3470     * Do not cache (on the server) these sessions that are not resumable
3471     * (clients can set SSL_VERIFY_PEER without needing a sid_ctx set).
3472     */
3473    if (s->server && s->session->sid_ctx_length == 0
3474            && (s->verify_mode & SSL_VERIFY_PEER) != 0)
3475        return;
3476
3477    i = s->session_ctx->session_cache_mode;
3478    if ((i & mode) != 0
3479        && (!s->hit || SSL_IS_TLS13(s))) {
3480        /*
3481         * Add the session to the internal cache. In server side TLSv1.3 we
3482         * normally don't do this because by default it's a full stateless ticket
3483         * with only a dummy session id so there is no reason to cache it,
3484         * unless:
3485         * - we are doing early_data, in which case we cache so that we can
3486         *   detect replays
3487         * - the application has set a remove_session_cb so needs to know about
3488         *   session timeout events
3489         * - SSL_OP_NO_TICKET is set in which case it is a stateful ticket
3490         */
3491        if ((i & SSL_SESS_CACHE_NO_INTERNAL_STORE) == 0
3492                && (!SSL_IS_TLS13(s)
3493                    || !s->server
3494                    || (s->max_early_data > 0
3495                        && (s->options & SSL_OP_NO_ANTI_REPLAY) == 0)
3496                    || s->session_ctx->remove_session_cb != NULL
3497                    || (s->options & SSL_OP_NO_TICKET) != 0))
3498            SSL_CTX_add_session(s->session_ctx, s->session);
3499
3500        /*
3501         * Add the session to the external cache. We do this even in server side
3502         * TLSv1.3 without early data because some applications just want to
3503         * know about the creation of a session and aren't doing a full cache.
3504         */
3505        if (s->session_ctx->new_session_cb != NULL) {
3506            SSL_SESSION_up_ref(s->session);
3507            if (!s->session_ctx->new_session_cb(s, s->session))
3508                SSL_SESSION_free(s->session);
3509        }
3510    }
3511
3512    /* auto flush every 255 connections */
3513    if ((!(i & SSL_SESS_CACHE_NO_AUTO_CLEAR)) && ((i & mode) == mode)) {
3514        TSAN_QUALIFIER int *stat;
3515        if (mode & SSL_SESS_CACHE_CLIENT)
3516            stat = &s->session_ctx->stats.sess_connect_good;
3517        else
3518            stat = &s->session_ctx->stats.sess_accept_good;
3519        if ((tsan_load(stat) & 0xff) == 0xff)
3520            SSL_CTX_flush_sessions(s->session_ctx, (unsigned long)time(NULL));
3521    }
3522}
3523
3524const SSL_METHOD *SSL_CTX_get_ssl_method(const SSL_CTX *ctx)
3525{
3526    return ctx->method;
3527}
3528
3529const SSL_METHOD *SSL_get_ssl_method(const SSL *s)
3530{
3531    return s->method;
3532}
3533
3534int SSL_set_ssl_method(SSL *s, const SSL_METHOD *meth)
3535{
3536    int ret = 1;
3537
3538    if (s->method != meth) {
3539        const SSL_METHOD *sm = s->method;
3540        int (*hf) (SSL *) = s->handshake_func;
3541
3542        if (sm->version == meth->version)
3543            s->method = meth;
3544        else {
3545            sm->ssl_free(s);
3546            s->method = meth;
3547            ret = s->method->ssl_new(s);
3548        }
3549
3550        if (hf == sm->ssl_connect)
3551            s->handshake_func = meth->ssl_connect;
3552        else if (hf == sm->ssl_accept)
3553            s->handshake_func = meth->ssl_accept;
3554    }
3555    return ret;
3556}
3557
3558int SSL_get_error(const SSL *s, int i)
3559{
3560    int reason;
3561    unsigned long l;
3562    BIO *bio;
3563
3564    if (i > 0)
3565        return SSL_ERROR_NONE;
3566
3567    /*
3568     * Make things return SSL_ERROR_SYSCALL when doing SSL_do_handshake etc,
3569     * where we do encode the error
3570     */
3571    if ((l = ERR_peek_error()) != 0) {
3572        if (ERR_GET_LIB(l) == ERR_LIB_SYS)
3573            return SSL_ERROR_SYSCALL;
3574        else
3575            return SSL_ERROR_SSL;
3576    }
3577
3578    if (SSL_want_read(s)) {
3579        bio = SSL_get_rbio(s);
3580        if (BIO_should_read(bio))
3581            return SSL_ERROR_WANT_READ;
3582        else if (BIO_should_write(bio))
3583            /*
3584             * This one doesn't make too much sense ... We never try to write
3585             * to the rbio, and an application program where rbio and wbio
3586             * are separate couldn't even know what it should wait for.
3587             * However if we ever set s->rwstate incorrectly (so that we have
3588             * SSL_want_read(s) instead of SSL_want_write(s)) and rbio and
3589             * wbio *are* the same, this test works around that bug; so it
3590             * might be safer to keep it.
3591             */
3592            return SSL_ERROR_WANT_WRITE;
3593        else if (BIO_should_io_special(bio)) {
3594            reason = BIO_get_retry_reason(bio);
3595            if (reason == BIO_RR_CONNECT)
3596                return SSL_ERROR_WANT_CONNECT;
3597            else if (reason == BIO_RR_ACCEPT)
3598                return SSL_ERROR_WANT_ACCEPT;
3599            else
3600                return SSL_ERROR_SYSCALL; /* unknown */
3601        }
3602    }
3603
3604    if (SSL_want_write(s)) {
3605        /* Access wbio directly - in order to use the buffered bio if present */
3606        bio = s->wbio;
3607        if (BIO_should_write(bio))
3608            return SSL_ERROR_WANT_WRITE;
3609        else if (BIO_should_read(bio))
3610            /*
3611             * See above (SSL_want_read(s) with BIO_should_write(bio))
3612             */
3613            return SSL_ERROR_WANT_READ;
3614        else if (BIO_should_io_special(bio)) {
3615            reason = BIO_get_retry_reason(bio);
3616            if (reason == BIO_RR_CONNECT)
3617                return SSL_ERROR_WANT_CONNECT;
3618            else if (reason == BIO_RR_ACCEPT)
3619                return SSL_ERROR_WANT_ACCEPT;
3620            else
3621                return SSL_ERROR_SYSCALL;
3622        }
3623    }
3624    if (SSL_want_x509_lookup(s))
3625        return SSL_ERROR_WANT_X509_LOOKUP;
3626    if (SSL_want_async(s))
3627        return SSL_ERROR_WANT_ASYNC;
3628    if (SSL_want_async_job(s))
3629        return SSL_ERROR_WANT_ASYNC_JOB;
3630    if (SSL_want_client_hello_cb(s))
3631        return SSL_ERROR_WANT_CLIENT_HELLO_CB;
3632
3633    if ((s->shutdown & SSL_RECEIVED_SHUTDOWN) &&
3634        (s->s3->warn_alert == SSL_AD_CLOSE_NOTIFY))
3635        return SSL_ERROR_ZERO_RETURN;
3636
3637    return SSL_ERROR_SYSCALL;
3638}
3639
3640static int ssl_do_handshake_intern(void *vargs)
3641{
3642    struct ssl_async_args *args;
3643    SSL *s;
3644
3645    args = (struct ssl_async_args *)vargs;
3646    s = args->s;
3647
3648    return s->handshake_func(s);
3649}
3650
3651int SSL_do_handshake(SSL *s)
3652{
3653    int ret = 1;
3654
3655    if (s->handshake_func == NULL) {
3656        SSLerr(SSL_F_SSL_DO_HANDSHAKE, SSL_R_CONNECTION_TYPE_NOT_SET);
3657        return -1;
3658    }
3659
3660    ossl_statem_check_finish_init(s, -1);
3661
3662    s->method->ssl_renegotiate_check(s, 0);
3663
3664    if (SSL_in_init(s) || SSL_in_before(s)) {
3665        if ((s->mode & SSL_MODE_ASYNC) && ASYNC_get_current_job() == NULL) {
3666            struct ssl_async_args args;
3667
3668            args.s = s;
3669
3670            ret = ssl_start_async_job(s, &args, ssl_do_handshake_intern);
3671        } else {
3672            ret = s->handshake_func(s);
3673        }
3674    }
3675    return ret;
3676}
3677
3678void SSL_set_accept_state(SSL *s)
3679{
3680    s->server = 1;
3681    s->shutdown = 0;
3682    ossl_statem_clear(s);
3683    s->handshake_func = s->method->ssl_accept;
3684    clear_ciphers(s);
3685}
3686
3687void SSL_set_connect_state(SSL *s)
3688{
3689    s->server = 0;
3690    s->shutdown = 0;
3691    ossl_statem_clear(s);
3692    s->handshake_func = s->method->ssl_connect;
3693    clear_ciphers(s);
3694}
3695
3696int ssl_undefined_function(SSL *s)
3697{
3698    SSLerr(SSL_F_SSL_UNDEFINED_FUNCTION, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
3699    return 0;
3700}
3701
3702int ssl_undefined_void_function(void)
3703{
3704    SSLerr(SSL_F_SSL_UNDEFINED_VOID_FUNCTION,
3705           ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
3706    return 0;
3707}
3708
3709int ssl_undefined_const_function(const SSL *s)
3710{
3711    return 0;
3712}
3713
3714const SSL_METHOD *ssl_bad_method(int ver)
3715{
3716    SSLerr(SSL_F_SSL_BAD_METHOD, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
3717    return NULL;
3718}
3719
3720const char *ssl_protocol_to_string(int version)
3721{
3722    switch(version)
3723    {
3724    case TLS1_3_VERSION:
3725        return "TLSv1.3";
3726
3727    case TLS1_2_VERSION:
3728        return "TLSv1.2";
3729
3730    case TLS1_1_VERSION:
3731        return "TLSv1.1";
3732
3733    case TLS1_VERSION:
3734        return "TLSv1";
3735
3736    case SSL3_VERSION:
3737        return "SSLv3";
3738
3739    case DTLS1_BAD_VER:
3740        return "DTLSv0.9";
3741
3742    case DTLS1_VERSION:
3743        return "DTLSv1";
3744
3745    case DTLS1_2_VERSION:
3746        return "DTLSv1.2";
3747
3748    default:
3749        return "unknown";
3750    }
3751}
3752
3753const char *SSL_get_version(const SSL *s)
3754{
3755    return ssl_protocol_to_string(s->version);
3756}
3757
3758static int dup_ca_names(STACK_OF(X509_NAME) **dst, STACK_OF(X509_NAME) *src)
3759{
3760    STACK_OF(X509_NAME) *sk;
3761    X509_NAME *xn;
3762    int i;
3763
3764    if (src == NULL) {
3765        *dst = NULL;
3766        return 1;
3767    }
3768
3769    if ((sk = sk_X509_NAME_new_null()) == NULL)
3770        return 0;
3771    for (i = 0; i < sk_X509_NAME_num(src); i++) {
3772        xn = X509_NAME_dup(sk_X509_NAME_value(src, i));
3773        if (xn == NULL) {
3774            sk_X509_NAME_pop_free(sk, X509_NAME_free);
3775            return 0;
3776        }
3777        if (sk_X509_NAME_insert(sk, xn, i) == 0) {
3778            X509_NAME_free(xn);
3779            sk_X509_NAME_pop_free(sk, X509_NAME_free);
3780            return 0;
3781        }
3782    }
3783    *dst = sk;
3784
3785    return 1;
3786}
3787
3788SSL *SSL_dup(SSL *s)
3789{
3790    SSL *ret;
3791    int i;
3792
3793    /* If we're not quiescent, just up_ref! */
3794    if (!SSL_in_init(s) || !SSL_in_before(s)) {
3795        CRYPTO_UP_REF(&s->references, &i, s->lock);
3796        return s;
3797    }
3798
3799    /*
3800     * Otherwise, copy configuration state, and session if set.
3801     */
3802    if ((ret = SSL_new(SSL_get_SSL_CTX(s))) == NULL)
3803        return NULL;
3804
3805    if (s->session != NULL) {
3806        /*
3807         * Arranges to share the same session via up_ref.  This "copies"
3808         * session-id, SSL_METHOD, sid_ctx, and 'cert'
3809         */
3810        if (!SSL_copy_session_id(ret, s))
3811            goto err;
3812    } else {
3813        /*
3814         * No session has been established yet, so we have to expect that
3815         * s->cert or ret->cert will be changed later -- they should not both
3816         * point to the same object, and thus we can't use
3817         * SSL_copy_session_id.
3818         */
3819        if (!SSL_set_ssl_method(ret, s->method))
3820            goto err;
3821
3822        if (s->cert != NULL) {
3823            ssl_cert_free(ret->cert);
3824            ret->cert = ssl_cert_dup(s->cert);
3825            if (ret->cert == NULL)
3826                goto err;
3827        }
3828
3829        if (!SSL_set_session_id_context(ret, s->sid_ctx,
3830                                        (int)s->sid_ctx_length))
3831            goto err;
3832    }
3833
3834    if (!ssl_dane_dup(ret, s))
3835        goto err;
3836    ret->version = s->version;
3837    ret->options = s->options;
3838    ret->min_proto_version = s->min_proto_version;
3839    ret->max_proto_version = s->max_proto_version;
3840    ret->mode = s->mode;
3841    SSL_set_max_cert_list(ret, SSL_get_max_cert_list(s));
3842    SSL_set_read_ahead(ret, SSL_get_read_ahead(s));
3843    ret->msg_callback = s->msg_callback;
3844    ret->msg_callback_arg = s->msg_callback_arg;
3845    SSL_set_verify(ret, SSL_get_verify_mode(s), SSL_get_verify_callback(s));
3846    SSL_set_verify_depth(ret, SSL_get_verify_depth(s));
3847    ret->generate_session_id = s->generate_session_id;
3848
3849    SSL_set_info_callback(ret, SSL_get_info_callback(s));
3850
3851    /* copy app data, a little dangerous perhaps */
3852    if (!CRYPTO_dup_ex_data(CRYPTO_EX_INDEX_SSL, &ret->ex_data, &s->ex_data))
3853        goto err;
3854
3855    ret->server = s->server;
3856    if (s->handshake_func) {
3857        if (s->server)
3858            SSL_set_accept_state(ret);
3859        else
3860            SSL_set_connect_state(ret);
3861    }
3862    ret->shutdown = s->shutdown;
3863    ret->hit = s->hit;
3864
3865    ret->default_passwd_callback = s->default_passwd_callback;
3866    ret->default_passwd_callback_userdata = s->default_passwd_callback_userdata;
3867
3868    X509_VERIFY_PARAM_inherit(ret->param, s->param);
3869
3870    /* dup the cipher_list and cipher_list_by_id stacks */
3871    if (s->cipher_list != NULL) {
3872        if ((ret->cipher_list = sk_SSL_CIPHER_dup(s->cipher_list)) == NULL)
3873            goto err;
3874    }
3875    if (s->cipher_list_by_id != NULL)
3876        if ((ret->cipher_list_by_id = sk_SSL_CIPHER_dup(s->cipher_list_by_id))
3877            == NULL)
3878            goto err;
3879
3880    /* Dup the client_CA list */
3881    if (!dup_ca_names(&ret->ca_names, s->ca_names)
3882            || !dup_ca_names(&ret->client_ca_names, s->client_ca_names))
3883        goto err;
3884
3885    return ret;
3886
3887 err:
3888    SSL_free(ret);
3889    return NULL;
3890}
3891
3892void ssl_clear_cipher_ctx(SSL *s)
3893{
3894    if (s->enc_read_ctx != NULL) {
3895        EVP_CIPHER_CTX_free(s->enc_read_ctx);
3896        s->enc_read_ctx = NULL;
3897    }
3898    if (s->enc_write_ctx != NULL) {
3899        EVP_CIPHER_CTX_free(s->enc_write_ctx);
3900        s->enc_write_ctx = NULL;
3901    }
3902#ifndef OPENSSL_NO_COMP
3903    COMP_CTX_free(s->expand);
3904    s->expand = NULL;
3905    COMP_CTX_free(s->compress);
3906    s->compress = NULL;
3907#endif
3908}
3909
3910X509 *SSL_get_certificate(const SSL *s)
3911{
3912    if (s->cert != NULL)
3913        return s->cert->key->x509;
3914    else
3915        return NULL;
3916}
3917
3918EVP_PKEY *SSL_get_privatekey(const SSL *s)
3919{
3920    if (s->cert != NULL)
3921        return s->cert->key->privatekey;
3922    else
3923        return NULL;
3924}
3925
3926X509 *SSL_CTX_get0_certificate(const SSL_CTX *ctx)
3927{
3928    if (ctx->cert != NULL)
3929        return ctx->cert->key->x509;
3930    else
3931        return NULL;
3932}
3933
3934EVP_PKEY *SSL_CTX_get0_privatekey(const SSL_CTX *ctx)
3935{
3936    if (ctx->cert != NULL)
3937        return ctx->cert->key->privatekey;
3938    else
3939        return NULL;
3940}
3941
3942const SSL_CIPHER *SSL_get_current_cipher(const SSL *s)
3943{
3944    if ((s->session != NULL) && (s->session->cipher != NULL))
3945        return s->session->cipher;
3946    return NULL;
3947}
3948
3949const SSL_CIPHER *SSL_get_pending_cipher(const SSL *s)
3950{
3951    return s->s3->tmp.new_cipher;
3952}
3953
3954const COMP_METHOD *SSL_get_current_compression(const SSL *s)
3955{
3956#ifndef OPENSSL_NO_COMP
3957    return s->compress ? COMP_CTX_get_method(s->compress) : NULL;
3958#else
3959    return NULL;
3960#endif
3961}
3962
3963const COMP_METHOD *SSL_get_current_expansion(const SSL *s)
3964{
3965#ifndef OPENSSL_NO_COMP
3966    return s->expand ? COMP_CTX_get_method(s->expand) : NULL;
3967#else
3968    return NULL;
3969#endif
3970}
3971
3972int ssl_init_wbio_buffer(SSL *s)
3973{
3974    BIO *bbio;
3975
3976    if (s->bbio != NULL) {
3977        /* Already buffered. */
3978        return 1;
3979    }
3980
3981    bbio = BIO_new(BIO_f_buffer());
3982    if (bbio == NULL || !BIO_set_read_buffer_size(bbio, 1)) {
3983        BIO_free(bbio);
3984        SSLerr(SSL_F_SSL_INIT_WBIO_BUFFER, ERR_R_BUF_LIB);
3985        return 0;
3986    }
3987    s->bbio = bbio;
3988    s->wbio = BIO_push(bbio, s->wbio);
3989
3990    return 1;
3991}
3992
3993int ssl_free_wbio_buffer(SSL *s)
3994{
3995    /* callers ensure s is never null */
3996    if (s->bbio == NULL)
3997        return 1;
3998
3999    s->wbio = BIO_pop(s->wbio);
4000    BIO_free(s->bbio);
4001    s->bbio = NULL;
4002
4003    return 1;
4004}
4005
4006void SSL_CTX_set_quiet_shutdown(SSL_CTX *ctx, int mode)
4007{
4008    ctx->quiet_shutdown = mode;
4009}
4010
4011int SSL_CTX_get_quiet_shutdown(const SSL_CTX *ctx)
4012{
4013    return ctx->quiet_shutdown;
4014}
4015
4016void SSL_set_quiet_shutdown(SSL *s, int mode)
4017{
4018    s->quiet_shutdown = mode;
4019}
4020
4021int SSL_get_quiet_shutdown(const SSL *s)
4022{
4023    return s->quiet_shutdown;
4024}
4025
4026void SSL_set_shutdown(SSL *s, int mode)
4027{
4028    s->shutdown = mode;
4029}
4030
4031int SSL_get_shutdown(const SSL *s)
4032{
4033    return s->shutdown;
4034}
4035
4036int SSL_version(const SSL *s)
4037{
4038    return s->version;
4039}
4040
4041int SSL_client_version(const SSL *s)
4042{
4043    return s->client_version;
4044}
4045
4046SSL_CTX *SSL_get_SSL_CTX(const SSL *ssl)
4047{
4048    return ssl->ctx;
4049}
4050
4051SSL_CTX *SSL_set_SSL_CTX(SSL *ssl, SSL_CTX *ctx)
4052{
4053    CERT *new_cert;
4054    if (ssl->ctx == ctx)
4055        return ssl->ctx;
4056    if (ctx == NULL)
4057        ctx = ssl->session_ctx;
4058    new_cert = ssl_cert_dup(ctx->cert);
4059    if (new_cert == NULL) {
4060        return NULL;
4061    }
4062
4063    if (!custom_exts_copy_flags(&new_cert->custext, &ssl->cert->custext)) {
4064        ssl_cert_free(new_cert);
4065        return NULL;
4066    }
4067
4068    ssl_cert_free(ssl->cert);
4069    ssl->cert = new_cert;
4070
4071    /*
4072     * Program invariant: |sid_ctx| has fixed size (SSL_MAX_SID_CTX_LENGTH),
4073     * so setter APIs must prevent invalid lengths from entering the system.
4074     */
4075    if (!ossl_assert(ssl->sid_ctx_length <= sizeof(ssl->sid_ctx)))
4076        return NULL;
4077
4078    /*
4079     * If the session ID context matches that of the parent SSL_CTX,
4080     * inherit it from the new SSL_CTX as well. If however the context does
4081     * not match (i.e., it was set per-ssl with SSL_set_session_id_context),
4082     * leave it unchanged.
4083     */
4084    if ((ssl->ctx != NULL) &&
4085        (ssl->sid_ctx_length == ssl->ctx->sid_ctx_length) &&
4086        (memcmp(ssl->sid_ctx, ssl->ctx->sid_ctx, ssl->sid_ctx_length) == 0)) {
4087        ssl->sid_ctx_length = ctx->sid_ctx_length;
4088        memcpy(&ssl->sid_ctx, &ctx->sid_ctx, sizeof(ssl->sid_ctx));
4089    }
4090
4091    SSL_CTX_up_ref(ctx);
4092    SSL_CTX_free(ssl->ctx);     /* decrement reference count */
4093    ssl->ctx = ctx;
4094
4095    return ssl->ctx;
4096}
4097
4098int SSL_CTX_set_default_verify_paths(SSL_CTX *ctx)
4099{
4100    return X509_STORE_set_default_paths(ctx->cert_store);
4101}
4102
4103int SSL_CTX_set_default_verify_dir(SSL_CTX *ctx)
4104{
4105    X509_LOOKUP *lookup;
4106
4107    lookup = X509_STORE_add_lookup(ctx->cert_store, X509_LOOKUP_hash_dir());
4108    if (lookup == NULL)
4109        return 0;
4110    X509_LOOKUP_add_dir(lookup, NULL, X509_FILETYPE_DEFAULT);
4111
4112    /* Clear any errors if the default directory does not exist */
4113    ERR_clear_error();
4114
4115    return 1;
4116}
4117
4118int SSL_CTX_set_default_verify_file(SSL_CTX *ctx)
4119{
4120    X509_LOOKUP *lookup;
4121
4122    lookup = X509_STORE_add_lookup(ctx->cert_store, X509_LOOKUP_file());
4123    if (lookup == NULL)
4124        return 0;
4125
4126    X509_LOOKUP_load_file(lookup, NULL, X509_FILETYPE_DEFAULT);
4127
4128    /* Clear any errors if the default file does not exist */
4129    ERR_clear_error();
4130
4131    return 1;
4132}
4133
4134int SSL_CTX_load_verify_locations(SSL_CTX *ctx, const char *CAfile,
4135                                  const char *CApath)
4136{
4137    return X509_STORE_load_locations(ctx->cert_store, CAfile, CApath);
4138}
4139
4140void SSL_set_info_callback(SSL *ssl,
4141                           void (*cb) (const SSL *ssl, int type, int val))
4142{
4143    ssl->info_callback = cb;
4144}
4145
4146/*
4147 * One compiler (Diab DCC) doesn't like argument names in returned function
4148 * pointer.
4149 */
4150void (*SSL_get_info_callback(const SSL *ssl)) (const SSL * /* ssl */ ,
4151                                               int /* type */ ,
4152                                               int /* val */ ) {
4153    return ssl->info_callback;
4154}
4155
4156void SSL_set_verify_result(SSL *ssl, long arg)
4157{
4158    ssl->verify_result = arg;
4159}
4160
4161long SSL_get_verify_result(const SSL *ssl)
4162{
4163    return ssl->verify_result;
4164}
4165
4166size_t SSL_get_client_random(const SSL *ssl, unsigned char *out, size_t outlen)
4167{
4168    if (outlen == 0)
4169        return sizeof(ssl->s3->client_random);
4170    if (outlen > sizeof(ssl->s3->client_random))
4171        outlen = sizeof(ssl->s3->client_random);
4172    memcpy(out, ssl->s3->client_random, outlen);
4173    return outlen;
4174}
4175
4176size_t SSL_get_server_random(const SSL *ssl, unsigned char *out, size_t outlen)
4177{
4178    if (outlen == 0)
4179        return sizeof(ssl->s3->server_random);
4180    if (outlen > sizeof(ssl->s3->server_random))
4181        outlen = sizeof(ssl->s3->server_random);
4182    memcpy(out, ssl->s3->server_random, outlen);
4183    return outlen;
4184}
4185
4186size_t SSL_SESSION_get_master_key(const SSL_SESSION *session,
4187                                  unsigned char *out, size_t outlen)
4188{
4189    if (outlen == 0)
4190        return session->master_key_length;
4191    if (outlen > session->master_key_length)
4192        outlen = session->master_key_length;
4193    memcpy(out, session->master_key, outlen);
4194    return outlen;
4195}
4196
4197int SSL_SESSION_set1_master_key(SSL_SESSION *sess, const unsigned char *in,
4198                                size_t len)
4199{
4200    if (len > sizeof(sess->master_key))
4201        return 0;
4202
4203    memcpy(sess->master_key, in, len);
4204    sess->master_key_length = len;
4205    return 1;
4206}
4207
4208
4209int SSL_set_ex_data(SSL *s, int idx, void *arg)
4210{
4211    return CRYPTO_set_ex_data(&s->ex_data, idx, arg);
4212}
4213
4214void *SSL_get_ex_data(const SSL *s, int idx)
4215{
4216    return CRYPTO_get_ex_data(&s->ex_data, idx);
4217}
4218
4219int SSL_CTX_set_ex_data(SSL_CTX *s, int idx, void *arg)
4220{
4221    return CRYPTO_set_ex_data(&s->ex_data, idx, arg);
4222}
4223
4224void *SSL_CTX_get_ex_data(const SSL_CTX *s, int idx)
4225{
4226    return CRYPTO_get_ex_data(&s->ex_data, idx);
4227}
4228
4229X509_STORE *SSL_CTX_get_cert_store(const SSL_CTX *ctx)
4230{
4231    return ctx->cert_store;
4232}
4233
4234void SSL_CTX_set_cert_store(SSL_CTX *ctx, X509_STORE *store)
4235{
4236    X509_STORE_free(ctx->cert_store);
4237    ctx->cert_store = store;
4238}
4239
4240void SSL_CTX_set1_cert_store(SSL_CTX *ctx, X509_STORE *store)
4241{
4242    if (store != NULL)
4243        X509_STORE_up_ref(store);
4244    SSL_CTX_set_cert_store(ctx, store);
4245}
4246
4247int SSL_want(const SSL *s)
4248{
4249    return s->rwstate;
4250}
4251
4252/**
4253 * \brief Set the callback for generating temporary DH keys.
4254 * \param ctx the SSL context.
4255 * \param dh the callback
4256 */
4257
4258#ifndef OPENSSL_NO_DH
4259void SSL_CTX_set_tmp_dh_callback(SSL_CTX *ctx,
4260                                 DH *(*dh) (SSL *ssl, int is_export,
4261                                            int keylength))
4262{
4263    SSL_CTX_callback_ctrl(ctx, SSL_CTRL_SET_TMP_DH_CB, (void (*)(void))dh);
4264}
4265
4266void SSL_set_tmp_dh_callback(SSL *ssl, DH *(*dh) (SSL *ssl, int is_export,
4267                                                  int keylength))
4268{
4269    SSL_callback_ctrl(ssl, SSL_CTRL_SET_TMP_DH_CB, (void (*)(void))dh);
4270}
4271#endif
4272
4273#ifndef OPENSSL_NO_PSK
4274int SSL_CTX_use_psk_identity_hint(SSL_CTX *ctx, const char *identity_hint)
4275{
4276    if (identity_hint != NULL && strlen(identity_hint) > PSK_MAX_IDENTITY_LEN) {
4277        SSLerr(SSL_F_SSL_CTX_USE_PSK_IDENTITY_HINT, SSL_R_DATA_LENGTH_TOO_LONG);
4278        return 0;
4279    }
4280    OPENSSL_free(ctx->cert->psk_identity_hint);
4281    if (identity_hint != NULL) {
4282        ctx->cert->psk_identity_hint = OPENSSL_strdup(identity_hint);
4283        if (ctx->cert->psk_identity_hint == NULL)
4284            return 0;
4285    } else
4286        ctx->cert->psk_identity_hint = NULL;
4287    return 1;
4288}
4289
4290int SSL_use_psk_identity_hint(SSL *s, const char *identity_hint)
4291{
4292    if (s == NULL)
4293        return 0;
4294
4295    if (identity_hint != NULL && strlen(identity_hint) > PSK_MAX_IDENTITY_LEN) {
4296        SSLerr(SSL_F_SSL_USE_PSK_IDENTITY_HINT, SSL_R_DATA_LENGTH_TOO_LONG);
4297        return 0;
4298    }
4299    OPENSSL_free(s->cert->psk_identity_hint);
4300    if (identity_hint != NULL) {
4301        s->cert->psk_identity_hint = OPENSSL_strdup(identity_hint);
4302        if (s->cert->psk_identity_hint == NULL)
4303            return 0;
4304    } else
4305        s->cert->psk_identity_hint = NULL;
4306    return 1;
4307}
4308
4309const char *SSL_get_psk_identity_hint(const SSL *s)
4310{
4311    if (s == NULL || s->session == NULL)
4312        return NULL;
4313    return s->session->psk_identity_hint;
4314}
4315
4316const char *SSL_get_psk_identity(const SSL *s)
4317{
4318    if (s == NULL || s->session == NULL)
4319        return NULL;
4320    return s->session->psk_identity;
4321}
4322
4323void SSL_set_psk_client_callback(SSL *s, SSL_psk_client_cb_func cb)
4324{
4325    s->psk_client_callback = cb;
4326}
4327
4328void SSL_CTX_set_psk_client_callback(SSL_CTX *ctx, SSL_psk_client_cb_func cb)
4329{
4330    ctx->psk_client_callback = cb;
4331}
4332
4333void SSL_set_psk_server_callback(SSL *s, SSL_psk_server_cb_func cb)
4334{
4335    s->psk_server_callback = cb;
4336}
4337
4338void SSL_CTX_set_psk_server_callback(SSL_CTX *ctx, SSL_psk_server_cb_func cb)
4339{
4340    ctx->psk_server_callback = cb;
4341}
4342#endif
4343
4344void SSL_set_psk_find_session_callback(SSL *s, SSL_psk_find_session_cb_func cb)
4345{
4346    s->psk_find_session_cb = cb;
4347}
4348
4349void SSL_CTX_set_psk_find_session_callback(SSL_CTX *ctx,
4350                                           SSL_psk_find_session_cb_func cb)
4351{
4352    ctx->psk_find_session_cb = cb;
4353}
4354
4355void SSL_set_psk_use_session_callback(SSL *s, SSL_psk_use_session_cb_func cb)
4356{
4357    s->psk_use_session_cb = cb;
4358}
4359
4360void SSL_CTX_set_psk_use_session_callback(SSL_CTX *ctx,
4361                                           SSL_psk_use_session_cb_func cb)
4362{
4363    ctx->psk_use_session_cb = cb;
4364}
4365
4366void SSL_CTX_set_msg_callback(SSL_CTX *ctx,
4367                              void (*cb) (int write_p, int version,
4368                                          int content_type, const void *buf,
4369                                          size_t len, SSL *ssl, void *arg))
4370{
4371    SSL_CTX_callback_ctrl(ctx, SSL_CTRL_SET_MSG_CALLBACK, (void (*)(void))cb);
4372}
4373
4374void SSL_set_msg_callback(SSL *ssl,
4375                          void (*cb) (int write_p, int version,
4376                                      int content_type, const void *buf,
4377                                      size_t len, SSL *ssl, void *arg))
4378{
4379    SSL_callback_ctrl(ssl, SSL_CTRL_SET_MSG_CALLBACK, (void (*)(void))cb);
4380}
4381
4382void SSL_CTX_set_not_resumable_session_callback(SSL_CTX *ctx,
4383                                                int (*cb) (SSL *ssl,
4384                                                           int
4385                                                           is_forward_secure))
4386{
4387    SSL_CTX_callback_ctrl(ctx, SSL_CTRL_SET_NOT_RESUMABLE_SESS_CB,
4388                          (void (*)(void))cb);
4389}
4390
4391void SSL_set_not_resumable_session_callback(SSL *ssl,
4392                                            int (*cb) (SSL *ssl,
4393                                                       int is_forward_secure))
4394{
4395    SSL_callback_ctrl(ssl, SSL_CTRL_SET_NOT_RESUMABLE_SESS_CB,
4396                      (void (*)(void))cb);
4397}
4398
4399void SSL_CTX_set_record_padding_callback(SSL_CTX *ctx,
4400                                         size_t (*cb) (SSL *ssl, int type,
4401                                                       size_t len, void *arg))
4402{
4403    ctx->record_padding_cb = cb;
4404}
4405
4406void SSL_CTX_set_record_padding_callback_arg(SSL_CTX *ctx, void *arg)
4407{
4408    ctx->record_padding_arg = arg;
4409}
4410
4411void *SSL_CTX_get_record_padding_callback_arg(const SSL_CTX *ctx)
4412{
4413    return ctx->record_padding_arg;
4414}
4415
4416int SSL_CTX_set_block_padding(SSL_CTX *ctx, size_t block_size)
4417{
4418    /* block size of 0 or 1 is basically no padding */
4419    if (block_size == 1)
4420        ctx->block_padding = 0;
4421    else if (block_size <= SSL3_RT_MAX_PLAIN_LENGTH)
4422        ctx->block_padding = block_size;
4423    else
4424        return 0;
4425    return 1;
4426}
4427
4428void SSL_set_record_padding_callback(SSL *ssl,
4429                                     size_t (*cb) (SSL *ssl, int type,
4430                                                   size_t len, void *arg))
4431{
4432    ssl->record_padding_cb = cb;
4433}
4434
4435void SSL_set_record_padding_callback_arg(SSL *ssl, void *arg)
4436{
4437    ssl->record_padding_arg = arg;
4438}
4439
4440void *SSL_get_record_padding_callback_arg(const SSL *ssl)
4441{
4442    return ssl->record_padding_arg;
4443}
4444
4445int SSL_set_block_padding(SSL *ssl, size_t block_size)
4446{
4447    /* block size of 0 or 1 is basically no padding */
4448    if (block_size == 1)
4449        ssl->block_padding = 0;
4450    else if (block_size <= SSL3_RT_MAX_PLAIN_LENGTH)
4451        ssl->block_padding = block_size;
4452    else
4453        return 0;
4454    return 1;
4455}
4456
4457int SSL_set_num_tickets(SSL *s, size_t num_tickets)
4458{
4459    s->num_tickets = num_tickets;
4460
4461    return 1;
4462}
4463
4464size_t SSL_get_num_tickets(const SSL *s)
4465{
4466    return s->num_tickets;
4467}
4468
4469int SSL_CTX_set_num_tickets(SSL_CTX *ctx, size_t num_tickets)
4470{
4471    ctx->num_tickets = num_tickets;
4472
4473    return 1;
4474}
4475
4476size_t SSL_CTX_get_num_tickets(const SSL_CTX *ctx)
4477{
4478    return ctx->num_tickets;
4479}
4480
4481/*
4482 * Allocates new EVP_MD_CTX and sets pointer to it into given pointer
4483 * variable, freeing EVP_MD_CTX previously stored in that variable, if any.
4484 * If EVP_MD pointer is passed, initializes ctx with this |md|.
4485 * Returns the newly allocated ctx;
4486 */
4487
4488EVP_MD_CTX *ssl_replace_hash(EVP_MD_CTX **hash, const EVP_MD *md)
4489{
4490    ssl_clear_hash_ctx(hash);
4491    *hash = EVP_MD_CTX_new();
4492    if (*hash == NULL || (md && EVP_DigestInit_ex(*hash, md, NULL) <= 0)) {
4493        EVP_MD_CTX_free(*hash);
4494        *hash = NULL;
4495        return NULL;
4496    }
4497    return *hash;
4498}
4499
4500void ssl_clear_hash_ctx(EVP_MD_CTX **hash)
4501{
4502
4503    EVP_MD_CTX_free(*hash);
4504    *hash = NULL;
4505}
4506
4507/* Retrieve handshake hashes */
4508int ssl_handshake_hash(SSL *s, unsigned char *out, size_t outlen,
4509                       size_t *hashlen)
4510{
4511    EVP_MD_CTX *ctx = NULL;
4512    EVP_MD_CTX *hdgst = s->s3->handshake_dgst;
4513    int hashleni = EVP_MD_CTX_size(hdgst);
4514    int ret = 0;
4515
4516    if (hashleni < 0 || (size_t)hashleni > outlen) {
4517        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_HANDSHAKE_HASH,
4518                 ERR_R_INTERNAL_ERROR);
4519        goto err;
4520    }
4521
4522    ctx = EVP_MD_CTX_new();
4523    if (ctx == NULL)
4524        goto err;
4525
4526    if (!EVP_MD_CTX_copy_ex(ctx, hdgst)
4527        || EVP_DigestFinal_ex(ctx, out, NULL) <= 0) {
4528        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_HANDSHAKE_HASH,
4529                 ERR_R_INTERNAL_ERROR);
4530        goto err;
4531    }
4532
4533    *hashlen = hashleni;
4534
4535    ret = 1;
4536 err:
4537    EVP_MD_CTX_free(ctx);
4538    return ret;
4539}
4540
4541int SSL_session_reused(const SSL *s)
4542{
4543    return s->hit;
4544}
4545
4546int SSL_is_server(const SSL *s)
4547{
4548    return s->server;
4549}
4550
4551#if OPENSSL_API_COMPAT < 0x10100000L
4552void SSL_set_debug(SSL *s, int debug)
4553{
4554    /* Old function was do-nothing anyway... */
4555    (void)s;
4556    (void)debug;
4557}
4558#endif
4559
4560void SSL_set_security_level(SSL *s, int level)
4561{
4562    s->cert->sec_level = level;
4563}
4564
4565int SSL_get_security_level(const SSL *s)
4566{
4567    return s->cert->sec_level;
4568}
4569
4570void SSL_set_security_callback(SSL *s,
4571                               int (*cb) (const SSL *s, const SSL_CTX *ctx,
4572                                          int op, int bits, int nid,
4573                                          void *other, void *ex))
4574{
4575    s->cert->sec_cb = cb;
4576}
4577
4578int (*SSL_get_security_callback(const SSL *s)) (const SSL *s,
4579                                                const SSL_CTX *ctx, int op,
4580                                                int bits, int nid, void *other,
4581                                                void *ex) {
4582    return s->cert->sec_cb;
4583}
4584
4585void SSL_set0_security_ex_data(SSL *s, void *ex)
4586{
4587    s->cert->sec_ex = ex;
4588}
4589
4590void *SSL_get0_security_ex_data(const SSL *s)
4591{
4592    return s->cert->sec_ex;
4593}
4594
4595void SSL_CTX_set_security_level(SSL_CTX *ctx, int level)
4596{
4597    ctx->cert->sec_level = level;
4598}
4599
4600int SSL_CTX_get_security_level(const SSL_CTX *ctx)
4601{
4602    return ctx->cert->sec_level;
4603}
4604
4605void SSL_CTX_set_security_callback(SSL_CTX *ctx,
4606                                   int (*cb) (const SSL *s, const SSL_CTX *ctx,
4607                                              int op, int bits, int nid,
4608                                              void *other, void *ex))
4609{
4610    ctx->cert->sec_cb = cb;
4611}
4612
4613int (*SSL_CTX_get_security_callback(const SSL_CTX *ctx)) (const SSL *s,
4614                                                          const SSL_CTX *ctx,
4615                                                          int op, int bits,
4616                                                          int nid,
4617                                                          void *other,
4618                                                          void *ex) {
4619    return ctx->cert->sec_cb;
4620}
4621
4622void SSL_CTX_set0_security_ex_data(SSL_CTX *ctx, void *ex)
4623{
4624    ctx->cert->sec_ex = ex;
4625}
4626
4627void *SSL_CTX_get0_security_ex_data(const SSL_CTX *ctx)
4628{
4629    return ctx->cert->sec_ex;
4630}
4631
4632/*
4633 * Get/Set/Clear options in SSL_CTX or SSL, formerly macros, now functions that
4634 * can return unsigned long, instead of the generic long return value from the
4635 * control interface.
4636 */
4637unsigned long SSL_CTX_get_options(const SSL_CTX *ctx)
4638{
4639    return ctx->options;
4640}
4641
4642unsigned long SSL_get_options(const SSL *s)
4643{
4644    return s->options;
4645}
4646
4647unsigned long SSL_CTX_set_options(SSL_CTX *ctx, unsigned long op)
4648{
4649    return ctx->options |= op;
4650}
4651
4652unsigned long SSL_set_options(SSL *s, unsigned long op)
4653{
4654    return s->options |= op;
4655}
4656
4657unsigned long SSL_CTX_clear_options(SSL_CTX *ctx, unsigned long op)
4658{
4659    return ctx->options &= ~op;
4660}
4661
4662unsigned long SSL_clear_options(SSL *s, unsigned long op)
4663{
4664    return s->options &= ~op;
4665}
4666
4667STACK_OF(X509) *SSL_get0_verified_chain(const SSL *s)
4668{
4669    return s->verified_chain;
4670}
4671
4672IMPLEMENT_OBJ_BSEARCH_GLOBAL_CMP_FN(SSL_CIPHER, SSL_CIPHER, ssl_cipher_id);
4673
4674#ifndef OPENSSL_NO_CT
4675
4676/*
4677 * Moves SCTs from the |src| stack to the |dst| stack.
4678 * The source of each SCT will be set to |origin|.
4679 * If |dst| points to a NULL pointer, a new stack will be created and owned by
4680 * the caller.
4681 * Returns the number of SCTs moved, or a negative integer if an error occurs.
4682 */
4683static int ct_move_scts(STACK_OF(SCT) **dst, STACK_OF(SCT) *src,
4684                        sct_source_t origin)
4685{
4686    int scts_moved = 0;
4687    SCT *sct = NULL;
4688
4689    if (*dst == NULL) {
4690        *dst = sk_SCT_new_null();
4691        if (*dst == NULL) {
4692            SSLerr(SSL_F_CT_MOVE_SCTS, ERR_R_MALLOC_FAILURE);
4693            goto err;
4694        }
4695    }
4696
4697    while ((sct = sk_SCT_pop(src)) != NULL) {
4698        if (SCT_set_source(sct, origin) != 1)
4699            goto err;
4700
4701        if (sk_SCT_push(*dst, sct) <= 0)
4702            goto err;
4703        scts_moved += 1;
4704    }
4705
4706    return scts_moved;
4707 err:
4708    if (sct != NULL)
4709        sk_SCT_push(src, sct);  /* Put the SCT back */
4710    return -1;
4711}
4712
4713/*
4714 * Look for data collected during ServerHello and parse if found.
4715 * Returns the number of SCTs extracted.
4716 */
4717static int ct_extract_tls_extension_scts(SSL *s)
4718{
4719    int scts_extracted = 0;
4720
4721    if (s->ext.scts != NULL) {
4722        const unsigned char *p = s->ext.scts;
4723        STACK_OF(SCT) *scts = o2i_SCT_LIST(NULL, &p, s->ext.scts_len);
4724
4725        scts_extracted = ct_move_scts(&s->scts, scts, SCT_SOURCE_TLS_EXTENSION);
4726
4727        SCT_LIST_free(scts);
4728    }
4729
4730    return scts_extracted;
4731}
4732
4733/*
4734 * Checks for an OCSP response and then attempts to extract any SCTs found if it
4735 * contains an SCT X509 extension. They will be stored in |s->scts|.
4736 * Returns:
4737 * - The number of SCTs extracted, assuming an OCSP response exists.
4738 * - 0 if no OCSP response exists or it contains no SCTs.
4739 * - A negative integer if an error occurs.
4740 */
4741static int ct_extract_ocsp_response_scts(SSL *s)
4742{
4743# ifndef OPENSSL_NO_OCSP
4744    int scts_extracted = 0;
4745    const unsigned char *p;
4746    OCSP_BASICRESP *br = NULL;
4747    OCSP_RESPONSE *rsp = NULL;
4748    STACK_OF(SCT) *scts = NULL;
4749    int i;
4750
4751    if (s->ext.ocsp.resp == NULL || s->ext.ocsp.resp_len == 0)
4752        goto err;
4753
4754    p = s->ext.ocsp.resp;
4755    rsp = d2i_OCSP_RESPONSE(NULL, &p, (int)s->ext.ocsp.resp_len);
4756    if (rsp == NULL)
4757        goto err;
4758
4759    br = OCSP_response_get1_basic(rsp);
4760    if (br == NULL)
4761        goto err;
4762
4763    for (i = 0; i < OCSP_resp_count(br); ++i) {
4764        OCSP_SINGLERESP *single = OCSP_resp_get0(br, i);
4765
4766        if (single == NULL)
4767            continue;
4768
4769        scts =
4770            OCSP_SINGLERESP_get1_ext_d2i(single, NID_ct_cert_scts, NULL, NULL);
4771        scts_extracted =
4772            ct_move_scts(&s->scts, scts, SCT_SOURCE_OCSP_STAPLED_RESPONSE);
4773        if (scts_extracted < 0)
4774            goto err;
4775    }
4776 err:
4777    SCT_LIST_free(scts);
4778    OCSP_BASICRESP_free(br);
4779    OCSP_RESPONSE_free(rsp);
4780    return scts_extracted;
4781# else
4782    /* Behave as if no OCSP response exists */
4783    return 0;
4784# endif
4785}
4786
4787/*
4788 * Attempts to extract SCTs from the peer certificate.
4789 * Return the number of SCTs extracted, or a negative integer if an error
4790 * occurs.
4791 */
4792static int ct_extract_x509v3_extension_scts(SSL *s)
4793{
4794    int scts_extracted = 0;
4795    X509 *cert = s->session != NULL ? s->session->peer : NULL;
4796
4797    if (cert != NULL) {
4798        STACK_OF(SCT) *scts =
4799            X509_get_ext_d2i(cert, NID_ct_precert_scts, NULL, NULL);
4800
4801        scts_extracted =
4802            ct_move_scts(&s->scts, scts, SCT_SOURCE_X509V3_EXTENSION);
4803
4804        SCT_LIST_free(scts);
4805    }
4806
4807    return scts_extracted;
4808}
4809
4810/*
4811 * Attempts to find all received SCTs by checking TLS extensions, the OCSP
4812 * response (if it exists) and X509v3 extensions in the certificate.
4813 * Returns NULL if an error occurs.
4814 */
4815const STACK_OF(SCT) *SSL_get0_peer_scts(SSL *s)
4816{
4817    if (!s->scts_parsed) {
4818        if (ct_extract_tls_extension_scts(s) < 0 ||
4819            ct_extract_ocsp_response_scts(s) < 0 ||
4820            ct_extract_x509v3_extension_scts(s) < 0)
4821            goto err;
4822
4823        s->scts_parsed = 1;
4824    }
4825    return s->scts;
4826 err:
4827    return NULL;
4828}
4829
4830static int ct_permissive(const CT_POLICY_EVAL_CTX * ctx,
4831                         const STACK_OF(SCT) *scts, void *unused_arg)
4832{
4833    return 1;
4834}
4835
4836static int ct_strict(const CT_POLICY_EVAL_CTX * ctx,
4837                     const STACK_OF(SCT) *scts, void *unused_arg)
4838{
4839    int count = scts != NULL ? sk_SCT_num(scts) : 0;
4840    int i;
4841
4842    for (i = 0; i < count; ++i) {
4843        SCT *sct = sk_SCT_value(scts, i);
4844        int status = SCT_get_validation_status(sct);
4845
4846        if (status == SCT_VALIDATION_STATUS_VALID)
4847            return 1;
4848    }
4849    SSLerr(SSL_F_CT_STRICT, SSL_R_NO_VALID_SCTS);
4850    return 0;
4851}
4852
4853int SSL_set_ct_validation_callback(SSL *s, ssl_ct_validation_cb callback,
4854                                   void *arg)
4855{
4856    /*
4857     * Since code exists that uses the custom extension handler for CT, look
4858     * for this and throw an error if they have already registered to use CT.
4859     */
4860    if (callback != NULL && SSL_CTX_has_client_custom_ext(s->ctx,
4861                                                          TLSEXT_TYPE_signed_certificate_timestamp))
4862    {
4863        SSLerr(SSL_F_SSL_SET_CT_VALIDATION_CALLBACK,
4864               SSL_R_CUSTOM_EXT_HANDLER_ALREADY_INSTALLED);
4865        return 0;
4866    }
4867
4868    if (callback != NULL) {
4869        /*
4870         * If we are validating CT, then we MUST accept SCTs served via OCSP
4871         */
4872        if (!SSL_set_tlsext_status_type(s, TLSEXT_STATUSTYPE_ocsp))
4873            return 0;
4874    }
4875
4876    s->ct_validation_callback = callback;
4877    s->ct_validation_callback_arg = arg;
4878
4879    return 1;
4880}
4881
4882int SSL_CTX_set_ct_validation_callback(SSL_CTX *ctx,
4883                                       ssl_ct_validation_cb callback, void *arg)
4884{
4885    /*
4886     * Since code exists that uses the custom extension handler for CT, look for
4887     * this and throw an error if they have already registered to use CT.
4888     */
4889    if (callback != NULL && SSL_CTX_has_client_custom_ext(ctx,
4890                                                          TLSEXT_TYPE_signed_certificate_timestamp))
4891    {
4892        SSLerr(SSL_F_SSL_CTX_SET_CT_VALIDATION_CALLBACK,
4893               SSL_R_CUSTOM_EXT_HANDLER_ALREADY_INSTALLED);
4894        return 0;
4895    }
4896
4897    ctx->ct_validation_callback = callback;
4898    ctx->ct_validation_callback_arg = arg;
4899    return 1;
4900}
4901
4902int SSL_ct_is_enabled(const SSL *s)
4903{
4904    return s->ct_validation_callback != NULL;
4905}
4906
4907int SSL_CTX_ct_is_enabled(const SSL_CTX *ctx)
4908{
4909    return ctx->ct_validation_callback != NULL;
4910}
4911
4912int ssl_validate_ct(SSL *s)
4913{
4914    int ret = 0;
4915    X509 *cert = s->session != NULL ? s->session->peer : NULL;
4916    X509 *issuer;
4917    SSL_DANE *dane = &s->dane;
4918    CT_POLICY_EVAL_CTX *ctx = NULL;
4919    const STACK_OF(SCT) *scts;
4920
4921    /*
4922     * If no callback is set, the peer is anonymous, or its chain is invalid,
4923     * skip SCT validation - just return success.  Applications that continue
4924     * handshakes without certificates, with unverified chains, or pinned leaf
4925     * certificates are outside the scope of the WebPKI and CT.
4926     *
4927     * The above exclusions notwithstanding the vast majority of peers will
4928     * have rather ordinary certificate chains validated by typical
4929     * applications that perform certificate verification and therefore will
4930     * process SCTs when enabled.
4931     */
4932    if (s->ct_validation_callback == NULL || cert == NULL ||
4933        s->verify_result != X509_V_OK ||
4934        s->verified_chain == NULL || sk_X509_num(s->verified_chain) <= 1)
4935        return 1;
4936
4937    /*
4938     * CT not applicable for chains validated via DANE-TA(2) or DANE-EE(3)
4939     * trust-anchors.  See https://tools.ietf.org/html/rfc7671#section-4.2
4940     */
4941    if (DANETLS_ENABLED(dane) && dane->mtlsa != NULL) {
4942        switch (dane->mtlsa->usage) {
4943        case DANETLS_USAGE_DANE_TA:
4944        case DANETLS_USAGE_DANE_EE:
4945            return 1;
4946        }
4947    }
4948
4949    ctx = CT_POLICY_EVAL_CTX_new();
4950    if (ctx == NULL) {
4951        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_VALIDATE_CT,
4952                 ERR_R_MALLOC_FAILURE);
4953        goto end;
4954    }
4955
4956    issuer = sk_X509_value(s->verified_chain, 1);
4957    CT_POLICY_EVAL_CTX_set1_cert(ctx, cert);
4958    CT_POLICY_EVAL_CTX_set1_issuer(ctx, issuer);
4959    CT_POLICY_EVAL_CTX_set_shared_CTLOG_STORE(ctx, s->ctx->ctlog_store);
4960    CT_POLICY_EVAL_CTX_set_time(
4961            ctx, (uint64_t)SSL_SESSION_get_time(SSL_get0_session(s)) * 1000);
4962
4963    scts = SSL_get0_peer_scts(s);
4964
4965    /*
4966     * This function returns success (> 0) only when all the SCTs are valid, 0
4967     * when some are invalid, and < 0 on various internal errors (out of
4968     * memory, etc.).  Having some, or even all, invalid SCTs is not sufficient
4969     * reason to abort the handshake, that decision is up to the callback.
4970     * Therefore, we error out only in the unexpected case that the return
4971     * value is negative.
4972     *
4973     * XXX: One might well argue that the return value of this function is an
4974     * unfortunate design choice.  Its job is only to determine the validation
4975     * status of each of the provided SCTs.  So long as it correctly separates
4976     * the wheat from the chaff it should return success.  Failure in this case
4977     * ought to correspond to an inability to carry out its duties.
4978     */
4979    if (SCT_LIST_validate(scts, ctx) < 0) {
4980        SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_F_SSL_VALIDATE_CT,
4981                 SSL_R_SCT_VERIFICATION_FAILED);
4982        goto end;
4983    }
4984
4985    ret = s->ct_validation_callback(ctx, scts, s->ct_validation_callback_arg);
4986    if (ret < 0)
4987        ret = 0;                /* This function returns 0 on failure */
4988    if (!ret)
4989        SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_F_SSL_VALIDATE_CT,
4990                 SSL_R_CALLBACK_FAILED);
4991
4992 end:
4993    CT_POLICY_EVAL_CTX_free(ctx);
4994    /*
4995     * With SSL_VERIFY_NONE the session may be cached and re-used despite a
4996     * failure return code here.  Also the application may wish the complete
4997     * the handshake, and then disconnect cleanly at a higher layer, after
4998     * checking the verification status of the completed connection.
4999     *
5000     * We therefore force a certificate verification failure which will be
5001     * visible via SSL_get_verify_result() and cached as part of any resumed
5002     * session.
5003     *
5004     * Note: the permissive callback is for information gathering only, always
5005     * returns success, and does not affect verification status.  Only the
5006     * strict callback or a custom application-specified callback can trigger
5007     * connection failure or record a verification error.
5008     */
5009    if (ret <= 0)
5010        s->verify_result = X509_V_ERR_NO_VALID_SCTS;
5011    return ret;
5012}
5013
5014int SSL_CTX_enable_ct(SSL_CTX *ctx, int validation_mode)
5015{
5016    switch (validation_mode) {
5017    default:
5018        SSLerr(SSL_F_SSL_CTX_ENABLE_CT, SSL_R_INVALID_CT_VALIDATION_TYPE);
5019        return 0;
5020    case SSL_CT_VALIDATION_PERMISSIVE:
5021        return SSL_CTX_set_ct_validation_callback(ctx, ct_permissive, NULL);
5022    case SSL_CT_VALIDATION_STRICT:
5023        return SSL_CTX_set_ct_validation_callback(ctx, ct_strict, NULL);
5024    }
5025}
5026
5027int SSL_enable_ct(SSL *s, int validation_mode)
5028{
5029    switch (validation_mode) {
5030    default:
5031        SSLerr(SSL_F_SSL_ENABLE_CT, SSL_R_INVALID_CT_VALIDATION_TYPE);
5032        return 0;
5033    case SSL_CT_VALIDATION_PERMISSIVE:
5034        return SSL_set_ct_validation_callback(s, ct_permissive, NULL);
5035    case SSL_CT_VALIDATION_STRICT:
5036        return SSL_set_ct_validation_callback(s, ct_strict, NULL);
5037    }
5038}
5039
5040int SSL_CTX_set_default_ctlog_list_file(SSL_CTX *ctx)
5041{
5042    return CTLOG_STORE_load_default_file(ctx->ctlog_store);
5043}
5044
5045int SSL_CTX_set_ctlog_list_file(SSL_CTX *ctx, const char *path)
5046{
5047    return CTLOG_STORE_load_file(ctx->ctlog_store, path);
5048}
5049
5050void SSL_CTX_set0_ctlog_store(SSL_CTX *ctx, CTLOG_STORE * logs)
5051{
5052    CTLOG_STORE_free(ctx->ctlog_store);
5053    ctx->ctlog_store = logs;
5054}
5055
5056const CTLOG_STORE *SSL_CTX_get0_ctlog_store(const SSL_CTX *ctx)
5057{
5058    return ctx->ctlog_store;
5059}
5060
5061#endif  /* OPENSSL_NO_CT */
5062
5063void SSL_CTX_set_client_hello_cb(SSL_CTX *c, SSL_client_hello_cb_fn cb,
5064                                 void *arg)
5065{
5066    c->client_hello_cb = cb;
5067    c->client_hello_cb_arg = arg;
5068}
5069
5070int SSL_client_hello_isv2(SSL *s)
5071{
5072    if (s->clienthello == NULL)
5073        return 0;
5074    return s->clienthello->isv2;
5075}
5076
5077unsigned int SSL_client_hello_get0_legacy_version(SSL *s)
5078{
5079    if (s->clienthello == NULL)
5080        return 0;
5081    return s->clienthello->legacy_version;
5082}
5083
5084size_t SSL_client_hello_get0_random(SSL *s, const unsigned char **out)
5085{
5086    if (s->clienthello == NULL)
5087        return 0;
5088    if (out != NULL)
5089        *out = s->clienthello->random;
5090    return SSL3_RANDOM_SIZE;
5091}
5092
5093size_t SSL_client_hello_get0_session_id(SSL *s, const unsigned char **out)
5094{
5095    if (s->clienthello == NULL)
5096        return 0;
5097    if (out != NULL)
5098        *out = s->clienthello->session_id;
5099    return s->clienthello->session_id_len;
5100}
5101
5102size_t SSL_client_hello_get0_ciphers(SSL *s, const unsigned char **out)
5103{
5104    if (s->clienthello == NULL)
5105        return 0;
5106    if (out != NULL)
5107        *out = PACKET_data(&s->clienthello->ciphersuites);
5108    return PACKET_remaining(&s->clienthello->ciphersuites);
5109}
5110
5111size_t SSL_client_hello_get0_compression_methods(SSL *s, const unsigned char **out)
5112{
5113    if (s->clienthello == NULL)
5114        return 0;
5115    if (out != NULL)
5116        *out = s->clienthello->compressions;
5117    return s->clienthello->compressions_len;
5118}
5119
5120int SSL_client_hello_get1_extensions_present(SSL *s, int **out, size_t *outlen)
5121{
5122    RAW_EXTENSION *ext;
5123    int *present;
5124    size_t num = 0, i;
5125
5126    if (s->clienthello == NULL || out == NULL || outlen == NULL)
5127        return 0;
5128    for (i = 0; i < s->clienthello->pre_proc_exts_len; i++) {
5129        ext = s->clienthello->pre_proc_exts + i;
5130        if (ext->present)
5131            num++;
5132    }
5133    if (num == 0) {
5134        *out = NULL;
5135        *outlen = 0;
5136        return 1;
5137    }
5138    if ((present = OPENSSL_malloc(sizeof(*present) * num)) == NULL) {
5139        SSLerr(SSL_F_SSL_CLIENT_HELLO_GET1_EXTENSIONS_PRESENT,
5140               ERR_R_MALLOC_FAILURE);
5141        return 0;
5142    }
5143    for (i = 0; i < s->clienthello->pre_proc_exts_len; i++) {
5144        ext = s->clienthello->pre_proc_exts + i;
5145        if (ext->present) {
5146            if (ext->received_order >= num)
5147                goto err;
5148            present[ext->received_order] = ext->type;
5149        }
5150    }
5151    *out = present;
5152    *outlen = num;
5153    return 1;
5154 err:
5155    OPENSSL_free(present);
5156    return 0;
5157}
5158
5159int SSL_client_hello_get0_ext(SSL *s, unsigned int type, const unsigned char **out,
5160                       size_t *outlen)
5161{
5162    size_t i;
5163    RAW_EXTENSION *r;
5164
5165    if (s->clienthello == NULL)
5166        return 0;
5167    for (i = 0; i < s->clienthello->pre_proc_exts_len; ++i) {
5168        r = s->clienthello->pre_proc_exts + i;
5169        if (r->present && r->type == type) {
5170            if (out != NULL)
5171                *out = PACKET_data(&r->data);
5172            if (outlen != NULL)
5173                *outlen = PACKET_remaining(&r->data);
5174            return 1;
5175        }
5176    }
5177    return 0;
5178}
5179
5180int SSL_free_buffers(SSL *ssl)
5181{
5182    RECORD_LAYER *rl = &ssl->rlayer;
5183
5184    if (RECORD_LAYER_read_pending(rl) || RECORD_LAYER_write_pending(rl))
5185        return 0;
5186
5187    RECORD_LAYER_release(rl);
5188    return 1;
5189}
5190
5191int SSL_alloc_buffers(SSL *ssl)
5192{
5193    return ssl3_setup_buffers(ssl);
5194}
5195
5196void SSL_CTX_set_keylog_callback(SSL_CTX *ctx, SSL_CTX_keylog_cb_func cb)
5197{
5198    ctx->keylog_callback = cb;
5199}
5200
5201SSL_CTX_keylog_cb_func SSL_CTX_get_keylog_callback(const SSL_CTX *ctx)
5202{
5203    return ctx->keylog_callback;
5204}
5205
5206static int nss_keylog_int(const char *prefix,
5207                          SSL *ssl,
5208                          const uint8_t *parameter_1,
5209                          size_t parameter_1_len,
5210                          const uint8_t *parameter_2,
5211                          size_t parameter_2_len)
5212{
5213    char *out = NULL;
5214    char *cursor = NULL;
5215    size_t out_len = 0;
5216    size_t i;
5217    size_t prefix_len;
5218
5219    if (ssl->ctx->keylog_callback == NULL)
5220        return 1;
5221
5222    /*
5223     * Our output buffer will contain the following strings, rendered with
5224     * space characters in between, terminated by a NULL character: first the
5225     * prefix, then the first parameter, then the second parameter. The
5226     * meaning of each parameter depends on the specific key material being
5227     * logged. Note that the first and second parameters are encoded in
5228     * hexadecimal, so we need a buffer that is twice their lengths.
5229     */
5230    prefix_len = strlen(prefix);
5231    out_len = prefix_len + (2 * parameter_1_len) + (2 * parameter_2_len) + 3;
5232    if ((out = cursor = OPENSSL_malloc(out_len)) == NULL) {
5233        SSLfatal(ssl, SSL_AD_INTERNAL_ERROR, SSL_F_NSS_KEYLOG_INT,
5234                 ERR_R_MALLOC_FAILURE);
5235        return 0;
5236    }
5237
5238    strcpy(cursor, prefix);
5239    cursor += prefix_len;
5240    *cursor++ = ' ';
5241
5242    for (i = 0; i < parameter_1_len; i++) {
5243        sprintf(cursor, "%02x", parameter_1[i]);
5244        cursor += 2;
5245    }
5246    *cursor++ = ' ';
5247
5248    for (i = 0; i < parameter_2_len; i++) {
5249        sprintf(cursor, "%02x", parameter_2[i]);
5250        cursor += 2;
5251    }
5252    *cursor = '\0';
5253
5254    ssl->ctx->keylog_callback(ssl, (const char *)out);
5255    OPENSSL_clear_free(out, out_len);
5256    return 1;
5257
5258}
5259
5260int ssl_log_rsa_client_key_exchange(SSL *ssl,
5261                                    const uint8_t *encrypted_premaster,
5262                                    size_t encrypted_premaster_len,
5263                                    const uint8_t *premaster,
5264                                    size_t premaster_len)
5265{
5266    if (encrypted_premaster_len < 8) {
5267        SSLfatal(ssl, SSL_AD_INTERNAL_ERROR,
5268                 SSL_F_SSL_LOG_RSA_CLIENT_KEY_EXCHANGE, ERR_R_INTERNAL_ERROR);
5269        return 0;
5270    }
5271
5272    /* We only want the first 8 bytes of the encrypted premaster as a tag. */
5273    return nss_keylog_int("RSA",
5274                          ssl,
5275                          encrypted_premaster,
5276                          8,
5277                          premaster,
5278                          premaster_len);
5279}
5280
5281int ssl_log_secret(SSL *ssl,
5282                   const char *label,
5283                   const uint8_t *secret,
5284                   size_t secret_len)
5285{
5286    return nss_keylog_int(label,
5287                          ssl,
5288                          ssl->s3->client_random,
5289                          SSL3_RANDOM_SIZE,
5290                          secret,
5291                          secret_len);
5292}
5293
5294#define SSLV2_CIPHER_LEN    3
5295
5296int ssl_cache_cipherlist(SSL *s, PACKET *cipher_suites, int sslv2format)
5297{
5298    int n;
5299
5300    n = sslv2format ? SSLV2_CIPHER_LEN : TLS_CIPHER_LEN;
5301
5302    if (PACKET_remaining(cipher_suites) == 0) {
5303        SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_F_SSL_CACHE_CIPHERLIST,
5304                 SSL_R_NO_CIPHERS_SPECIFIED);
5305        return 0;
5306    }
5307
5308    if (PACKET_remaining(cipher_suites) % n != 0) {
5309        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_SSL_CACHE_CIPHERLIST,
5310                 SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST);
5311        return 0;
5312    }
5313
5314    OPENSSL_free(s->s3->tmp.ciphers_raw);
5315    s->s3->tmp.ciphers_raw = NULL;
5316    s->s3->tmp.ciphers_rawlen = 0;
5317
5318    if (sslv2format) {
5319        size_t numciphers = PACKET_remaining(cipher_suites) / n;
5320        PACKET sslv2ciphers = *cipher_suites;
5321        unsigned int leadbyte;
5322        unsigned char *raw;
5323
5324        /*
5325         * We store the raw ciphers list in SSLv3+ format so we need to do some
5326         * preprocessing to convert the list first. If there are any SSLv2 only
5327         * ciphersuites with a non-zero leading byte then we are going to
5328         * slightly over allocate because we won't store those. But that isn't a
5329         * problem.
5330         */
5331        raw = OPENSSL_malloc(numciphers * TLS_CIPHER_LEN);
5332        s->s3->tmp.ciphers_raw = raw;
5333        if (raw == NULL) {
5334            SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_CACHE_CIPHERLIST,
5335                     ERR_R_MALLOC_FAILURE);
5336            return 0;
5337        }
5338        for (s->s3->tmp.ciphers_rawlen = 0;
5339             PACKET_remaining(&sslv2ciphers) > 0;
5340             raw += TLS_CIPHER_LEN) {
5341            if (!PACKET_get_1(&sslv2ciphers, &leadbyte)
5342                    || (leadbyte == 0
5343                        && !PACKET_copy_bytes(&sslv2ciphers, raw,
5344                                              TLS_CIPHER_LEN))
5345                    || (leadbyte != 0
5346                        && !PACKET_forward(&sslv2ciphers, TLS_CIPHER_LEN))) {
5347                SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_SSL_CACHE_CIPHERLIST,
5348                         SSL_R_BAD_PACKET);
5349                OPENSSL_free(s->s3->tmp.ciphers_raw);
5350                s->s3->tmp.ciphers_raw = NULL;
5351                s->s3->tmp.ciphers_rawlen = 0;
5352                return 0;
5353            }
5354            if (leadbyte == 0)
5355                s->s3->tmp.ciphers_rawlen += TLS_CIPHER_LEN;
5356        }
5357    } else if (!PACKET_memdup(cipher_suites, &s->s3->tmp.ciphers_raw,
5358                           &s->s3->tmp.ciphers_rawlen)) {
5359        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_CACHE_CIPHERLIST,
5360                 ERR_R_INTERNAL_ERROR);
5361        return 0;
5362    }
5363    return 1;
5364}
5365
5366int SSL_bytes_to_cipher_list(SSL *s, const unsigned char *bytes, size_t len,
5367                             int isv2format, STACK_OF(SSL_CIPHER) **sk,
5368                             STACK_OF(SSL_CIPHER) **scsvs)
5369{
5370    PACKET pkt;
5371
5372    if (!PACKET_buf_init(&pkt, bytes, len))
5373        return 0;
5374    return bytes_to_cipher_list(s, &pkt, sk, scsvs, isv2format, 0);
5375}
5376
5377int bytes_to_cipher_list(SSL *s, PACKET *cipher_suites,
5378                         STACK_OF(SSL_CIPHER) **skp,
5379                         STACK_OF(SSL_CIPHER) **scsvs_out,
5380                         int sslv2format, int fatal)
5381{
5382    const SSL_CIPHER *c;
5383    STACK_OF(SSL_CIPHER) *sk = NULL;
5384    STACK_OF(SSL_CIPHER) *scsvs = NULL;
5385    int n;
5386    /* 3 = SSLV2_CIPHER_LEN > TLS_CIPHER_LEN = 2. */
5387    unsigned char cipher[SSLV2_CIPHER_LEN];
5388
5389    n = sslv2format ? SSLV2_CIPHER_LEN : TLS_CIPHER_LEN;
5390
5391    if (PACKET_remaining(cipher_suites) == 0) {
5392        if (fatal)
5393            SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_F_BYTES_TO_CIPHER_LIST,
5394                     SSL_R_NO_CIPHERS_SPECIFIED);
5395        else
5396            SSLerr(SSL_F_BYTES_TO_CIPHER_LIST, SSL_R_NO_CIPHERS_SPECIFIED);
5397        return 0;
5398    }
5399
5400    if (PACKET_remaining(cipher_suites) % n != 0) {
5401        if (fatal)
5402            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_BYTES_TO_CIPHER_LIST,
5403                     SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST);
5404        else
5405            SSLerr(SSL_F_BYTES_TO_CIPHER_LIST,
5406                   SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST);
5407        return 0;
5408    }
5409
5410    sk = sk_SSL_CIPHER_new_null();
5411    scsvs = sk_SSL_CIPHER_new_null();
5412    if (sk == NULL || scsvs == NULL) {
5413        if (fatal)
5414            SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_BYTES_TO_CIPHER_LIST,
5415                     ERR_R_MALLOC_FAILURE);
5416        else
5417            SSLerr(SSL_F_BYTES_TO_CIPHER_LIST, ERR_R_MALLOC_FAILURE);
5418        goto err;
5419    }
5420
5421    while (PACKET_copy_bytes(cipher_suites, cipher, n)) {
5422        /*
5423         * SSLv3 ciphers wrapped in an SSLv2-compatible ClientHello have the
5424         * first byte set to zero, while true SSLv2 ciphers have a non-zero
5425         * first byte. We don't support any true SSLv2 ciphers, so skip them.
5426         */
5427        if (sslv2format && cipher[0] != '\0')
5428            continue;
5429
5430        /* For SSLv2-compat, ignore leading 0-byte. */
5431        c = ssl_get_cipher_by_char(s, sslv2format ? &cipher[1] : cipher, 1);
5432        if (c != NULL) {
5433            if ((c->valid && !sk_SSL_CIPHER_push(sk, c)) ||
5434                (!c->valid && !sk_SSL_CIPHER_push(scsvs, c))) {
5435                if (fatal)
5436                    SSLfatal(s, SSL_AD_INTERNAL_ERROR,
5437                             SSL_F_BYTES_TO_CIPHER_LIST, ERR_R_MALLOC_FAILURE);
5438                else
5439                    SSLerr(SSL_F_BYTES_TO_CIPHER_LIST, ERR_R_MALLOC_FAILURE);
5440                goto err;
5441            }
5442        }
5443    }
5444    if (PACKET_remaining(cipher_suites) > 0) {
5445        if (fatal)
5446            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_BYTES_TO_CIPHER_LIST,
5447                     SSL_R_BAD_LENGTH);
5448        else
5449            SSLerr(SSL_F_BYTES_TO_CIPHER_LIST, SSL_R_BAD_LENGTH);
5450        goto err;
5451    }
5452
5453    if (skp != NULL)
5454        *skp = sk;
5455    else
5456        sk_SSL_CIPHER_free(sk);
5457    if (scsvs_out != NULL)
5458        *scsvs_out = scsvs;
5459    else
5460        sk_SSL_CIPHER_free(scsvs);
5461    return 1;
5462 err:
5463    sk_SSL_CIPHER_free(sk);
5464    sk_SSL_CIPHER_free(scsvs);
5465    return 0;
5466}
5467
5468int SSL_CTX_set_max_early_data(SSL_CTX *ctx, uint32_t max_early_data)
5469{
5470    ctx->max_early_data = max_early_data;
5471
5472    return 1;
5473}
5474
5475uint32_t SSL_CTX_get_max_early_data(const SSL_CTX *ctx)
5476{
5477    return ctx->max_early_data;
5478}
5479
5480int SSL_set_max_early_data(SSL *s, uint32_t max_early_data)
5481{
5482    s->max_early_data = max_early_data;
5483
5484    return 1;
5485}
5486
5487uint32_t SSL_get_max_early_data(const SSL *s)
5488{
5489    return s->max_early_data;
5490}
5491
5492int SSL_CTX_set_recv_max_early_data(SSL_CTX *ctx, uint32_t recv_max_early_data)
5493{
5494    ctx->recv_max_early_data = recv_max_early_data;
5495
5496    return 1;
5497}
5498
5499uint32_t SSL_CTX_get_recv_max_early_data(const SSL_CTX *ctx)
5500{
5501    return ctx->recv_max_early_data;
5502}
5503
5504int SSL_set_recv_max_early_data(SSL *s, uint32_t recv_max_early_data)
5505{
5506    s->recv_max_early_data = recv_max_early_data;
5507
5508    return 1;
5509}
5510
5511uint32_t SSL_get_recv_max_early_data(const SSL *s)
5512{
5513    return s->recv_max_early_data;
5514}
5515
5516__owur unsigned int ssl_get_max_send_fragment(const SSL *ssl)
5517{
5518    /* Return any active Max Fragment Len extension */
5519    if (ssl->session != NULL && USE_MAX_FRAGMENT_LENGTH_EXT(ssl->session))
5520        return GET_MAX_FRAGMENT_LENGTH(ssl->session);
5521
5522    /* return current SSL connection setting */
5523    return ssl->max_send_fragment;
5524}
5525
5526__owur unsigned int ssl_get_split_send_fragment(const SSL *ssl)
5527{
5528    /* Return a value regarding an active Max Fragment Len extension */
5529    if (ssl->session != NULL && USE_MAX_FRAGMENT_LENGTH_EXT(ssl->session)
5530        && ssl->split_send_fragment > GET_MAX_FRAGMENT_LENGTH(ssl->session))
5531        return GET_MAX_FRAGMENT_LENGTH(ssl->session);
5532
5533    /* else limit |split_send_fragment| to current |max_send_fragment| */
5534    if (ssl->split_send_fragment > ssl->max_send_fragment)
5535        return ssl->max_send_fragment;
5536
5537    /* return current SSL connection setting */
5538    return ssl->split_send_fragment;
5539}
5540
5541int SSL_stateless(SSL *s)
5542{
5543    int ret;
5544
5545    /* Ensure there is no state left over from a previous invocation */
5546    if (!SSL_clear(s))
5547        return 0;
5548
5549    ERR_clear_error();
5550
5551    s->s3->flags |= TLS1_FLAGS_STATELESS;
5552    ret = SSL_accept(s);
5553    s->s3->flags &= ~TLS1_FLAGS_STATELESS;
5554
5555    if (ret > 0 && s->ext.cookieok)
5556        return 1;
5557
5558    if (s->hello_retry_request == SSL_HRR_PENDING && !ossl_statem_in_error(s))
5559        return 0;
5560
5561    return -1;
5562}
5563
5564void SSL_CTX_set_post_handshake_auth(SSL_CTX *ctx, int val)
5565{
5566    ctx->pha_enabled = val;
5567}
5568
5569void SSL_set_post_handshake_auth(SSL *ssl, int val)
5570{
5571    ssl->pha_enabled = val;
5572}
5573
5574int SSL_verify_client_post_handshake(SSL *ssl)
5575{
5576    if (!SSL_IS_TLS13(ssl)) {
5577        SSLerr(SSL_F_SSL_VERIFY_CLIENT_POST_HANDSHAKE, SSL_R_WRONG_SSL_VERSION);
5578        return 0;
5579    }
5580    if (!ssl->server) {
5581        SSLerr(SSL_F_SSL_VERIFY_CLIENT_POST_HANDSHAKE, SSL_R_NOT_SERVER);
5582        return 0;
5583    }
5584
5585    if (!SSL_is_init_finished(ssl)) {
5586        SSLerr(SSL_F_SSL_VERIFY_CLIENT_POST_HANDSHAKE, SSL_R_STILL_IN_INIT);
5587        return 0;
5588    }
5589
5590    switch (ssl->post_handshake_auth) {
5591    case SSL_PHA_NONE:
5592        SSLerr(SSL_F_SSL_VERIFY_CLIENT_POST_HANDSHAKE, SSL_R_EXTENSION_NOT_RECEIVED);
5593        return 0;
5594    default:
5595    case SSL_PHA_EXT_SENT:
5596        SSLerr(SSL_F_SSL_VERIFY_CLIENT_POST_HANDSHAKE, ERR_R_INTERNAL_ERROR);
5597        return 0;
5598    case SSL_PHA_EXT_RECEIVED:
5599        break;
5600    case SSL_PHA_REQUEST_PENDING:
5601        SSLerr(SSL_F_SSL_VERIFY_CLIENT_POST_HANDSHAKE, SSL_R_REQUEST_PENDING);
5602        return 0;
5603    case SSL_PHA_REQUESTED:
5604        SSLerr(SSL_F_SSL_VERIFY_CLIENT_POST_HANDSHAKE, SSL_R_REQUEST_SENT);
5605        return 0;
5606    }
5607
5608    ssl->post_handshake_auth = SSL_PHA_REQUEST_PENDING;
5609
5610    /* checks verify_mode and algorithm_auth */
5611    if (!send_certificate_request(ssl)) {
5612        ssl->post_handshake_auth = SSL_PHA_EXT_RECEIVED; /* restore on error */
5613        SSLerr(SSL_F_SSL_VERIFY_CLIENT_POST_HANDSHAKE, SSL_R_INVALID_CONFIG);
5614        return 0;
5615    }
5616
5617    ossl_statem_set_in_init(ssl, 1);
5618    return 1;
5619}
5620
5621int SSL_CTX_set_session_ticket_cb(SSL_CTX *ctx,
5622                                  SSL_CTX_generate_session_ticket_fn gen_cb,
5623                                  SSL_CTX_decrypt_session_ticket_fn dec_cb,
5624                                  void *arg)
5625{
5626    ctx->generate_ticket_cb = gen_cb;
5627    ctx->decrypt_ticket_cb = dec_cb;
5628    ctx->ticket_cb_data = arg;
5629    return 1;
5630}
5631
5632void SSL_CTX_set_allow_early_data_cb(SSL_CTX *ctx,
5633                                     SSL_allow_early_data_cb_fn cb,
5634                                     void *arg)
5635{
5636    ctx->allow_early_data_cb = cb;
5637    ctx->allow_early_data_cb_data = arg;
5638}
5639
5640void SSL_set_allow_early_data_cb(SSL *s,
5641                                 SSL_allow_early_data_cb_fn cb,
5642                                 void *arg)
5643{
5644    s->allow_early_data_cb = cb;
5645    s->allow_early_data_cb_data = arg;
5646}
5647