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