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