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