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