1 /* 2 * Copyright 1995-2026 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 (size < 2 || buf == NULL) 3416 return NULL; 3417 3418 buf[0] = '\0'; 3419 3420 if (sc == NULL || !sc->server) 3421 return NULL; 3422 3423 p = buf; 3424 clntsk = sc->peer_ciphers; 3425 srvrsk = SSL_get_ciphers(s); 3426 3427 if (clntsk == NULL || sk_SSL_CIPHER_num(clntsk) == 0 3428 || srvrsk == NULL || sk_SSL_CIPHER_num(srvrsk) == 0) 3429 return buf; 3430 3431 for (i = 0; i < sk_SSL_CIPHER_num(clntsk); i++) { 3432 int n; 3433 3434 c = sk_SSL_CIPHER_value(clntsk, i); 3435 if (sk_SSL_CIPHER_find(srvrsk, c) < 0) 3436 continue; 3437 3438 n = (int)OPENSSL_strnlen(c->name, size); 3439 if (n >= size) 3440 break; 3441 3442 memcpy(p, c->name, n); 3443 p += n; 3444 *(p++) = ':'; 3445 size -= n + 1; 3446 } 3447 3448 /* No overlap */ 3449 if (p != buf) 3450 p[-1] = '\0'; 3451 3452 return buf; 3453 } 3454 3455 /** 3456 * Return the requested servername (SNI) value. Note that the behaviour varies 3457 * depending on: 3458 * - whether this is called by the client or the server, 3459 * - if we are before or during/after the handshake, 3460 * - if a resumption or normal handshake is being attempted/has occurred 3461 * - whether we have negotiated TLSv1.2 (or below) or TLSv1.3 3462 * 3463 * Note that only the host_name type is defined (RFC 3546). 3464 */ 3465 const char *SSL_get_servername(const SSL *s, const int type) 3466 { 3467 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s); 3468 int server; 3469 3470 if (sc == NULL) 3471 return NULL; 3472 3473 /* 3474 * If we don't know if we are the client or the server yet then we assume 3475 * client. 3476 */ 3477 server = sc->handshake_func == NULL ? 0 : sc->server; 3478 3479 if (type != TLSEXT_NAMETYPE_host_name) 3480 return NULL; 3481 3482 if (server) { 3483 /** 3484 * Server side 3485 * In TLSv1.3 on the server SNI is not associated with the session 3486 * but in TLSv1.2 or below it is. 3487 * 3488 * Before the handshake: 3489 * - return NULL 3490 * 3491 * During/after the handshake (TLSv1.2 or below resumption occurred): 3492 * - If a servername was accepted by the server in the original 3493 * handshake then it will return that servername, or NULL otherwise. 3494 * 3495 * During/after the handshake (TLSv1.2 or below resumption did not occur): 3496 * - The function will return the servername requested by the client in 3497 * this handshake or NULL if none was requested. 3498 */ 3499 if (sc->hit && !SSL_CONNECTION_IS_TLS13(sc)) 3500 return sc->session->ext.hostname; 3501 } else { 3502 /** 3503 * Client side 3504 * 3505 * Before the handshake: 3506 * - If a servername has been set via a call to 3507 * SSL_set_tlsext_host_name() then it will return that servername 3508 * - If one has not been set, but a TLSv1.2 resumption is being 3509 * attempted and the session from the original handshake had a 3510 * servername accepted by the server then it will return that 3511 * servername 3512 * - Otherwise it returns NULL 3513 * 3514 * During/after the handshake (TLSv1.2 or below resumption occurred): 3515 * - If the session from the original handshake had a servername accepted 3516 * by the server then it will return that servername. 3517 * - Otherwise it returns the servername set via 3518 * SSL_set_tlsext_host_name() (or NULL if it was not called). 3519 * 3520 * During/after the handshake (TLSv1.2 or below resumption did not occur): 3521 * - It will return the servername set via SSL_set_tlsext_host_name() 3522 * (or NULL if it was not called). 3523 */ 3524 if (SSL_in_before(s)) { 3525 if (sc->ext.hostname == NULL 3526 && sc->session != NULL 3527 && sc->session->ssl_version != TLS1_3_VERSION) 3528 return sc->session->ext.hostname; 3529 } else { 3530 if (!SSL_CONNECTION_IS_TLS13(sc) && sc->hit 3531 && sc->session->ext.hostname != NULL) 3532 return sc->session->ext.hostname; 3533 } 3534 } 3535 3536 return sc->ext.hostname; 3537 } 3538 3539 int SSL_get_servername_type(const SSL *s) 3540 { 3541 if (SSL_get_servername(s, TLSEXT_NAMETYPE_host_name) != NULL) 3542 return TLSEXT_NAMETYPE_host_name; 3543 return -1; 3544 } 3545 3546 /* 3547 * SSL_select_next_proto implements the standard protocol selection. It is 3548 * expected that this function is called from the callback set by 3549 * SSL_CTX_set_next_proto_select_cb. The protocol data is assumed to be a 3550 * vector of 8-bit, length prefixed byte strings. The length byte itself is 3551 * not included in the length. A byte string of length 0 is invalid. No byte 3552 * string may be truncated. The current, but experimental algorithm for 3553 * selecting the protocol is: 1) If the server doesn't support NPN then this 3554 * is indicated to the callback. In this case, the client application has to 3555 * abort the connection or have a default application level protocol. 2) If 3556 * the server supports NPN, but advertises an empty list then the client 3557 * selects the first protocol in its list, but indicates via the API that this 3558 * fallback case was enacted. 3) Otherwise, the client finds the first 3559 * protocol in the server's list that it supports and selects this protocol. 3560 * This is because it's assumed that the server has better information about 3561 * which protocol a client should use. 4) If the client doesn't support any 3562 * of the server's advertised protocols, then this is treated the same as 3563 * case 2. It returns either OPENSSL_NPN_NEGOTIATED if a common protocol was 3564 * found, or OPENSSL_NPN_NO_OVERLAP if the fallback case was reached. 3565 */ 3566 int SSL_select_next_proto(unsigned char **out, unsigned char *outlen, 3567 const unsigned char *server, 3568 unsigned int server_len, 3569 const unsigned char *client, unsigned int client_len) 3570 { 3571 PACKET cpkt, csubpkt, spkt, ssubpkt; 3572 3573 if (!PACKET_buf_init(&cpkt, client, client_len) 3574 || !PACKET_get_length_prefixed_1(&cpkt, &csubpkt) 3575 || PACKET_remaining(&csubpkt) == 0) { 3576 *out = NULL; 3577 *outlen = 0; 3578 return OPENSSL_NPN_NO_OVERLAP; 3579 } 3580 3581 /* 3582 * Set the default opportunistic protocol. Will be overwritten if we find 3583 * a match. 3584 */ 3585 *out = (unsigned char *)PACKET_data(&csubpkt); 3586 *outlen = (unsigned char)PACKET_remaining(&csubpkt); 3587 3588 /* 3589 * For each protocol in server preference order, see if we support it. 3590 */ 3591 if (PACKET_buf_init(&spkt, server, server_len)) { 3592 while (PACKET_get_length_prefixed_1(&spkt, &ssubpkt)) { 3593 if (PACKET_remaining(&ssubpkt) == 0) 3594 continue; /* Invalid - ignore it */ 3595 if (PACKET_buf_init(&cpkt, client, client_len)) { 3596 while (PACKET_get_length_prefixed_1(&cpkt, &csubpkt)) { 3597 if (PACKET_equal(&csubpkt, PACKET_data(&ssubpkt), 3598 PACKET_remaining(&ssubpkt))) { 3599 /* We found a match */ 3600 *out = (unsigned char *)PACKET_data(&ssubpkt); 3601 *outlen = (unsigned char)PACKET_remaining(&ssubpkt); 3602 return OPENSSL_NPN_NEGOTIATED; 3603 } 3604 } 3605 /* Ignore spurious trailing bytes in the client list */ 3606 } else { 3607 /* This should never happen */ 3608 return OPENSSL_NPN_NO_OVERLAP; 3609 } 3610 } 3611 /* Ignore spurious trailing bytes in the server list */ 3612 } 3613 3614 /* 3615 * There's no overlap between our protocols and the server's list. We use 3616 * the default opportunistic protocol selected earlier 3617 */ 3618 return OPENSSL_NPN_NO_OVERLAP; 3619 } 3620 3621 #ifndef OPENSSL_NO_NEXTPROTONEG 3622 /* 3623 * SSL_get0_next_proto_negotiated sets *data and *len to point to the 3624 * client's requested protocol for this connection and returns 0. If the 3625 * client didn't request any protocol, then *data is set to NULL. Note that 3626 * the client can request any protocol it chooses. The value returned from 3627 * this function need not be a member of the list of supported protocols 3628 * provided by the callback. 3629 */ 3630 void SSL_get0_next_proto_negotiated(const SSL *s, const unsigned char **data, 3631 unsigned *len) 3632 { 3633 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s); 3634 3635 if (sc == NULL) { 3636 /* We have no other way to indicate error */ 3637 *data = NULL; 3638 *len = 0; 3639 return; 3640 } 3641 3642 *data = sc->ext.npn; 3643 if (*data == NULL) { 3644 *len = 0; 3645 } else { 3646 *len = (unsigned int)sc->ext.npn_len; 3647 } 3648 } 3649 3650 /* 3651 * SSL_CTX_set_npn_advertised_cb sets a callback that is called when 3652 * a TLS server needs a list of supported protocols for Next Protocol 3653 * Negotiation. The returned list must be in wire format. The list is 3654 * returned by setting |out| to point to it and |outlen| to its length. This 3655 * memory will not be modified, but one should assume that the SSL* keeps a 3656 * reference to it. The callback should return SSL_TLSEXT_ERR_OK if it 3657 * wishes to advertise. Otherwise, no such extension will be included in the 3658 * ServerHello. 3659 */ 3660 void SSL_CTX_set_npn_advertised_cb(SSL_CTX *ctx, 3661 SSL_CTX_npn_advertised_cb_func cb, 3662 void *arg) 3663 { 3664 if (IS_QUIC_CTX(ctx)) 3665 /* NPN not allowed for QUIC */ 3666 return; 3667 3668 ctx->ext.npn_advertised_cb = cb; 3669 ctx->ext.npn_advertised_cb_arg = arg; 3670 } 3671 3672 /* 3673 * SSL_CTX_set_next_proto_select_cb sets a callback that is called when a 3674 * client needs to select a protocol from the server's provided list. |out| 3675 * must be set to point to the selected protocol (which may be within |in|). 3676 * The length of the protocol name must be written into |outlen|. The 3677 * server's advertised protocols are provided in |in| and |inlen|. The 3678 * callback can assume that |in| is syntactically valid. The client must 3679 * select a protocol. It is fatal to the connection if this callback returns 3680 * a value other than SSL_TLSEXT_ERR_OK. 3681 */ 3682 void SSL_CTX_set_npn_select_cb(SSL_CTX *ctx, 3683 SSL_CTX_npn_select_cb_func cb, 3684 void *arg) 3685 { 3686 if (IS_QUIC_CTX(ctx)) 3687 /* NPN not allowed for QUIC */ 3688 return; 3689 3690 ctx->ext.npn_select_cb = cb; 3691 ctx->ext.npn_select_cb_arg = arg; 3692 } 3693 #endif 3694 3695 static int alpn_value_ok(const unsigned char *protos, unsigned int protos_len) 3696 { 3697 unsigned int idx; 3698 3699 if (protos_len < 2 || protos == NULL) 3700 return 0; 3701 3702 for (idx = 0; idx < protos_len; idx += protos[idx] + 1) { 3703 if (protos[idx] == 0) 3704 return 0; 3705 } 3706 return idx == protos_len; 3707 } 3708 /* 3709 * SSL_CTX_set_alpn_protos sets the ALPN protocol list on |ctx| to |protos|. 3710 * |protos| must be in wire-format (i.e. a series of non-empty, 8-bit 3711 * length-prefixed strings). Returns 0 on success. 3712 */ 3713 int SSL_CTX_set_alpn_protos(SSL_CTX *ctx, const unsigned char *protos, 3714 unsigned int protos_len) 3715 { 3716 unsigned char *alpn; 3717 3718 if (protos_len == 0 || protos == NULL) { 3719 OPENSSL_free(ctx->ext.alpn); 3720 ctx->ext.alpn = NULL; 3721 ctx->ext.alpn_len = 0; 3722 return 0; 3723 } 3724 /* Not valid per RFC */ 3725 if (!alpn_value_ok(protos, protos_len)) 3726 return 1; 3727 3728 alpn = OPENSSL_memdup(protos, protos_len); 3729 if (alpn == NULL) 3730 return 1; 3731 OPENSSL_free(ctx->ext.alpn); 3732 ctx->ext.alpn = alpn; 3733 ctx->ext.alpn_len = protos_len; 3734 3735 return 0; 3736 } 3737 3738 /* 3739 * SSL_set_alpn_protos sets the ALPN protocol list on |ssl| to |protos|. 3740 * |protos| must be in wire-format (i.e. a series of non-empty, 8-bit 3741 * length-prefixed strings). Returns 0 on success. 3742 */ 3743 int SSL_set_alpn_protos(SSL *ssl, const unsigned char *protos, 3744 unsigned int protos_len) 3745 { 3746 unsigned char *alpn; 3747 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(ssl); 3748 3749 if (sc == NULL) 3750 return 1; 3751 3752 if (protos_len == 0 || protos == NULL) { 3753 OPENSSL_free(sc->ext.alpn); 3754 sc->ext.alpn = NULL; 3755 sc->ext.alpn_len = 0; 3756 return 0; 3757 } 3758 /* Not valid per RFC */ 3759 if (!alpn_value_ok(protos, protos_len)) 3760 return 1; 3761 3762 alpn = OPENSSL_memdup(protos, protos_len); 3763 if (alpn == NULL) 3764 return 1; 3765 OPENSSL_free(sc->ext.alpn); 3766 sc->ext.alpn = alpn; 3767 sc->ext.alpn_len = protos_len; 3768 3769 return 0; 3770 } 3771 3772 /* 3773 * SSL_CTX_set_alpn_select_cb sets a callback function on |ctx| that is 3774 * called during ClientHello processing in order to select an ALPN protocol 3775 * from the client's list of offered protocols. 3776 */ 3777 void SSL_CTX_set_alpn_select_cb(SSL_CTX *ctx, 3778 SSL_CTX_alpn_select_cb_func cb, 3779 void *arg) 3780 { 3781 ctx->ext.alpn_select_cb = cb; 3782 ctx->ext.alpn_select_cb_arg = arg; 3783 } 3784 3785 /* 3786 * SSL_get0_alpn_selected gets the selected ALPN protocol (if any) from |ssl|. 3787 * On return it sets |*data| to point to |*len| bytes of protocol name 3788 * (not including the leading length-prefix byte). If the server didn't 3789 * respond with a negotiated protocol then |*len| will be zero. 3790 */ 3791 void SSL_get0_alpn_selected(const SSL *ssl, const unsigned char **data, 3792 unsigned int *len) 3793 { 3794 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(ssl); 3795 3796 if (sc == NULL) { 3797 /* We have no other way to indicate error */ 3798 *data = NULL; 3799 *len = 0; 3800 return; 3801 } 3802 3803 *data = sc->s3.alpn_selected; 3804 if (*data == NULL) 3805 *len = 0; 3806 else 3807 *len = (unsigned int)sc->s3.alpn_selected_len; 3808 } 3809 3810 int SSL_export_keying_material(SSL *s, unsigned char *out, size_t olen, 3811 const char *label, size_t llen, 3812 const unsigned char *context, size_t contextlen, 3813 int use_context) 3814 { 3815 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s); 3816 3817 if (sc == NULL) 3818 return -1; 3819 3820 if (sc->session == NULL 3821 || (sc->version < TLS1_VERSION && sc->version != DTLS1_BAD_VER)) 3822 return -1; 3823 3824 return sc->ssl.method->ssl3_enc->export_keying_material(sc, out, olen, label, 3825 llen, context, 3826 contextlen, 3827 use_context); 3828 } 3829 3830 int SSL_export_keying_material_early(SSL *s, unsigned char *out, size_t olen, 3831 const char *label, size_t llen, 3832 const unsigned char *context, 3833 size_t contextlen) 3834 { 3835 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s); 3836 3837 if (sc == NULL) 3838 return -1; 3839 3840 if (sc->version != TLS1_3_VERSION) 3841 return 0; 3842 3843 return tls13_export_keying_material_early(sc, out, olen, label, llen, 3844 context, contextlen); 3845 } 3846 3847 static unsigned long ssl_session_hash(const SSL_SESSION *a) 3848 { 3849 const unsigned char *session_id = a->session_id; 3850 unsigned long l; 3851 unsigned char tmp_storage[4]; 3852 3853 if (a->session_id_length < sizeof(tmp_storage)) { 3854 memset(tmp_storage, 0, sizeof(tmp_storage)); 3855 memcpy(tmp_storage, a->session_id, a->session_id_length); 3856 session_id = tmp_storage; 3857 } 3858 3859 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); 3860 return l; 3861 } 3862 3863 /* 3864 * NB: If this function (or indeed the hash function which uses a sort of 3865 * coarser function than this one) is changed, ensure 3866 * SSL_CTX_has_matching_session_id() is checked accordingly. It relies on 3867 * being able to construct an SSL_SESSION that will collide with any existing 3868 * session with a matching session ID. 3869 */ 3870 static int ssl_session_cmp(const SSL_SESSION *a, const SSL_SESSION *b) 3871 { 3872 if (a->ssl_version != b->ssl_version) 3873 return 1; 3874 if (a->session_id_length != b->session_id_length) 3875 return 1; 3876 return memcmp(a->session_id, b->session_id, a->session_id_length); 3877 } 3878 3879 #ifndef OPENSSL_NO_SSLKEYLOG 3880 /** 3881 * @brief Static initialization for a one-time action to initialize the SSL key log. 3882 */ 3883 static CRYPTO_ONCE ssl_keylog_once = CRYPTO_ONCE_STATIC_INIT; 3884 3885 /** 3886 * @brief Pointer to a read-write lock used to protect access to the key log. 3887 */ 3888 static CRYPTO_RWLOCK *keylog_lock = NULL; 3889 3890 /** 3891 * @brief Pointer to a BIO structure used for writing the key log information. 3892 */ 3893 static BIO *keylog_bio = NULL; 3894 3895 /** 3896 * @brief Initializes the SSLKEYLOGFILE lock. 3897 * 3898 * @return 1 on success, 0 on failure. 3899 */ 3900 DEFINE_RUN_ONCE_STATIC(ssl_keylog_init) 3901 { 3902 keylog_lock = CRYPTO_THREAD_lock_new(); 3903 if (keylog_lock == NULL) 3904 return 0; 3905 return 1; 3906 } 3907 3908 /** 3909 * @brief checks when a BIO refcount has reached zero, and sets 3910 * keylog_cb to NULL if it has 3911 * 3912 * @returns 1 always 3913 */ 3914 static long check_keylog_bio_free(BIO *b, int oper, const char *argp, 3915 size_t len, int argi, long argl, int ret, 3916 size_t *processed) 3917 { 3918 3919 /* 3920 * Note we _dont_ take the keylog_lock here 3921 * This is intentional, because we only free the keylog lock 3922 * During SSL_CTX_free, in which we already possess the lock, so 3923 * There's no need to grab it again here 3924 */ 3925 if (oper == BIO_CB_FREE) 3926 keylog_bio = NULL; 3927 return ret; 3928 } 3929 3930 /** 3931 * @brief records ssl secrets to a file 3932 */ 3933 static void do_sslkeylogfile(const SSL *ssl, const char *line) 3934 { 3935 if (keylog_lock == NULL) 3936 return; 3937 3938 if (!CRYPTO_THREAD_write_lock(keylog_lock)) 3939 return; 3940 if (keylog_bio != NULL) { 3941 BIO_printf(keylog_bio, "%s\n", line); 3942 (void)BIO_flush(keylog_bio); 3943 } 3944 CRYPTO_THREAD_unlock(keylog_lock); 3945 } 3946 #endif 3947 3948 /* 3949 * These wrapper functions should remain rather than redeclaring 3950 * SSL_SESSION_hash and SSL_SESSION_cmp for void* types and casting each 3951 * variable. The reason is that the functions aren't static, they're exposed 3952 * via ssl.h. 3953 */ 3954 3955 #ifndef OPENSSL_NO_SSLKEYLOG 3956 static BIO *get_sslkeylog_bio(const char *keylogfile) 3957 { 3958 #ifdef _POSIX_C_SOURCE 3959 BIO *b; 3960 int fdno = -1; 3961 FILE *fp = NULL; 3962 3963 fdno = open(keylogfile, O_WRONLY | O_CREAT | O_APPEND, 0600); 3964 if (fdno < 0) 3965 return NULL; 3966 3967 fp = fdopen(fdno, "a"); 3968 if (fp == NULL) { 3969 close(fdno); 3970 return NULL; 3971 } 3972 3973 if ((b = BIO_new_fp(fp, BIO_CLOSE)) == NULL) 3974 fclose(fp); 3975 return b; 3976 #else 3977 return BIO_new_file(keylogfile, "a"); 3978 #endif 3979 } 3980 #endif 3981 3982 SSL_CTX *SSL_CTX_new_ex(OSSL_LIB_CTX *libctx, const char *propq, 3983 const SSL_METHOD *meth) 3984 { 3985 SSL_CTX *ret = NULL; 3986 #ifndef OPENSSL_NO_SSLKEYLOG 3987 const char *keylogfile = ossl_safe_getenv("SSLKEYLOGFILE"); 3988 #endif 3989 #ifndef OPENSSL_NO_COMP_ALG 3990 int i; 3991 #endif 3992 3993 if (meth == NULL) { 3994 ERR_raise(ERR_LIB_SSL, SSL_R_NULL_SSL_METHOD_PASSED); 3995 return NULL; 3996 } 3997 3998 if (!OPENSSL_init_ssl(OPENSSL_INIT_LOAD_SSL_STRINGS, NULL)) 3999 return NULL; 4000 4001 /* Doing this for the run once effect */ 4002 if (SSL_get_ex_data_X509_STORE_CTX_idx() < 0) { 4003 ERR_raise(ERR_LIB_SSL, SSL_R_X509_VERIFICATION_SETUP_PROBLEMS); 4004 goto err; 4005 } 4006 4007 ret = OPENSSL_zalloc(sizeof(*ret)); 4008 if (ret == NULL) 4009 return NULL; 4010 4011 /* Init the reference counting before any call to SSL_CTX_free */ 4012 if (!CRYPTO_NEW_REF(&ret->references, 1)) { 4013 OPENSSL_free(ret); 4014 return NULL; 4015 } 4016 4017 ret->lock = CRYPTO_THREAD_lock_new(); 4018 if (ret->lock == NULL) { 4019 ERR_raise(ERR_LIB_SSL, ERR_R_CRYPTO_LIB); 4020 goto err; 4021 } 4022 4023 #ifdef TSAN_REQUIRES_LOCKING 4024 ret->tsan_lock = CRYPTO_THREAD_lock_new(); 4025 if (ret->tsan_lock == NULL) { 4026 ERR_raise(ERR_LIB_SSL, ERR_R_CRYPTO_LIB); 4027 goto err; 4028 } 4029 #endif 4030 4031 ret->libctx = libctx; 4032 if (propq != NULL) { 4033 ret->propq = OPENSSL_strdup(propq); 4034 if (ret->propq == NULL) 4035 goto err; 4036 } 4037 4038 ret->method = meth; 4039 ret->min_proto_version = 0; 4040 ret->max_proto_version = 0; 4041 ret->mode = SSL_MODE_AUTO_RETRY; 4042 ret->session_cache_mode = SSL_SESS_CACHE_SERVER; 4043 ret->session_cache_size = SSL_SESSION_CACHE_MAX_SIZE_DEFAULT; 4044 /* We take the system default. */ 4045 ret->session_timeout = meth->get_timeout(); 4046 ret->max_cert_list = SSL_MAX_CERT_LIST_DEFAULT; 4047 ret->verify_mode = SSL_VERIFY_NONE; 4048 4049 ret->sessions = lh_SSL_SESSION_new(ssl_session_hash, ssl_session_cmp); 4050 if (ret->sessions == NULL) { 4051 ERR_raise(ERR_LIB_SSL, ERR_R_CRYPTO_LIB); 4052 goto err; 4053 } 4054 ret->cert_store = X509_STORE_new(); 4055 if (ret->cert_store == NULL) { 4056 ERR_raise(ERR_LIB_SSL, ERR_R_X509_LIB); 4057 goto err; 4058 } 4059 #ifndef OPENSSL_NO_CT 4060 ret->ctlog_store = CTLOG_STORE_new_ex(libctx, propq); 4061 if (ret->ctlog_store == NULL) { 4062 ERR_raise(ERR_LIB_SSL, ERR_R_CT_LIB); 4063 goto err; 4064 } 4065 #endif 4066 4067 /* initialize cipher/digest methods table */ 4068 if (!ssl_load_ciphers(ret)) { 4069 ERR_raise(ERR_LIB_SSL, ERR_R_SSL_LIB); 4070 goto err; 4071 } 4072 4073 if (!ssl_load_groups(ret)) { 4074 ERR_raise(ERR_LIB_SSL, ERR_R_SSL_LIB); 4075 goto err; 4076 } 4077 4078 /* load provider sigalgs */ 4079 if (!ssl_load_sigalgs(ret)) { 4080 ERR_raise(ERR_LIB_SSL, ERR_R_SSL_LIB); 4081 goto err; 4082 } 4083 4084 /* initialise sig algs */ 4085 if (!ssl_setup_sigalgs(ret)) { 4086 ERR_raise(ERR_LIB_SSL, ERR_R_SSL_LIB); 4087 goto err; 4088 } 4089 4090 if (!SSL_CTX_set_ciphersuites(ret, OSSL_default_ciphersuites())) { 4091 ERR_raise(ERR_LIB_SSL, ERR_R_SSL_LIB); 4092 goto err; 4093 } 4094 4095 if ((ret->cert = ssl_cert_new(SSL_PKEY_NUM + ret->sigalg_list_len)) == NULL) { 4096 ERR_raise(ERR_LIB_SSL, ERR_R_SSL_LIB); 4097 goto err; 4098 } 4099 4100 if (!ssl_create_cipher_list(ret, 4101 ret->tls13_ciphersuites, 4102 &ret->cipher_list, &ret->cipher_list_by_id, 4103 OSSL_default_cipher_list(), ret->cert) 4104 || sk_SSL_CIPHER_num(ret->cipher_list) <= 0) { 4105 ERR_raise(ERR_LIB_SSL, SSL_R_LIBRARY_HAS_NO_CIPHERS); 4106 goto err; 4107 } 4108 4109 ret->param = X509_VERIFY_PARAM_new(); 4110 if (ret->param == NULL) { 4111 ERR_raise(ERR_LIB_SSL, ERR_R_X509_LIB); 4112 goto err; 4113 } 4114 4115 /* 4116 * If these aren't available from the provider we'll get NULL returns. 4117 * That's fine but will cause errors later if SSLv3 is negotiated 4118 */ 4119 ret->md5 = ssl_evp_md_fetch(libctx, NID_md5, propq); 4120 ret->sha1 = ssl_evp_md_fetch(libctx, NID_sha1, propq); 4121 4122 if ((ret->ca_names = sk_X509_NAME_new_null()) == NULL) { 4123 ERR_raise(ERR_LIB_SSL, ERR_R_CRYPTO_LIB); 4124 goto err; 4125 } 4126 4127 if ((ret->client_ca_names = sk_X509_NAME_new_null()) == NULL) { 4128 ERR_raise(ERR_LIB_SSL, ERR_R_CRYPTO_LIB); 4129 goto err; 4130 } 4131 4132 if (!CRYPTO_new_ex_data(CRYPTO_EX_INDEX_SSL_CTX, ret, &ret->ex_data)) { 4133 ERR_raise(ERR_LIB_SSL, ERR_R_CRYPTO_LIB); 4134 goto err; 4135 } 4136 4137 if ((ret->ext.secure = OPENSSL_secure_zalloc(sizeof(*ret->ext.secure))) == NULL) 4138 goto err; 4139 4140 /* No compression for DTLS */ 4141 if (!(meth->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS)) 4142 ret->comp_methods = SSL_COMP_get_compression_methods(); 4143 4144 ret->max_send_fragment = SSL3_RT_MAX_PLAIN_LENGTH; 4145 ret->split_send_fragment = SSL3_RT_MAX_PLAIN_LENGTH; 4146 4147 /* Setup RFC5077 ticket keys */ 4148 if ((RAND_bytes_ex(libctx, ret->ext.tick_key_name, 4149 sizeof(ret->ext.tick_key_name), 0) 4150 <= 0) 4151 || (RAND_priv_bytes_ex(libctx, ret->ext.secure->tick_hmac_key, 4152 sizeof(ret->ext.secure->tick_hmac_key), 0) 4153 <= 0) 4154 || (RAND_priv_bytes_ex(libctx, ret->ext.secure->tick_aes_key, 4155 sizeof(ret->ext.secure->tick_aes_key), 0) 4156 <= 0)) 4157 ret->options |= SSL_OP_NO_TICKET; 4158 4159 if (RAND_priv_bytes_ex(libctx, ret->ext.cookie_hmac_key, 4160 sizeof(ret->ext.cookie_hmac_key), 0) 4161 <= 0) { 4162 ERR_raise(ERR_LIB_SSL, ERR_R_RAND_LIB); 4163 goto err; 4164 } 4165 4166 #ifndef OPENSSL_NO_SRP 4167 if (!ssl_ctx_srp_ctx_init_intern(ret)) { 4168 ERR_raise(ERR_LIB_SSL, ERR_R_SSL_LIB); 4169 goto err; 4170 } 4171 #endif 4172 #ifndef OPENSSL_NO_ENGINE 4173 #ifdef OPENSSL_SSL_CLIENT_ENGINE_AUTO 4174 #define eng_strx(x) #x 4175 #define eng_str(x) eng_strx(x) 4176 /* Use specific client engine automatically... ignore errors */ 4177 { 4178 ENGINE *eng; 4179 eng = ENGINE_by_id(eng_str(OPENSSL_SSL_CLIENT_ENGINE_AUTO)); 4180 if (!eng) { 4181 ERR_clear_error(); 4182 ENGINE_load_builtin_engines(); 4183 eng = ENGINE_by_id(eng_str(OPENSSL_SSL_CLIENT_ENGINE_AUTO)); 4184 } 4185 if (!eng || !SSL_CTX_set_client_cert_engine(ret, eng)) 4186 ERR_clear_error(); 4187 } 4188 #endif 4189 #endif 4190 4191 #ifndef OPENSSL_NO_COMP_ALG 4192 /* 4193 * Set the default order: brotli, zlib, zstd 4194 * Including only those enabled algorithms 4195 */ 4196 memset(ret->cert_comp_prefs, 0, sizeof(ret->cert_comp_prefs)); 4197 i = 0; 4198 if (ossl_comp_has_alg(TLSEXT_comp_cert_brotli)) 4199 ret->cert_comp_prefs[i++] = TLSEXT_comp_cert_brotli; 4200 if (ossl_comp_has_alg(TLSEXT_comp_cert_zlib)) 4201 ret->cert_comp_prefs[i++] = TLSEXT_comp_cert_zlib; 4202 if (ossl_comp_has_alg(TLSEXT_comp_cert_zstd)) 4203 ret->cert_comp_prefs[i++] = TLSEXT_comp_cert_zstd; 4204 #endif 4205 /* 4206 * Disable compression by default to prevent CRIME. Applications can 4207 * re-enable compression by configuring 4208 * SSL_CTX_clear_options(ctx, SSL_OP_NO_COMPRESSION); 4209 * or by using the SSL_CONF library. Similarly we also enable TLSv1.3 4210 * middlebox compatibility by default. This may be disabled by default in 4211 * a later OpenSSL version. 4212 */ 4213 ret->options |= SSL_OP_NO_COMPRESSION | SSL_OP_ENABLE_MIDDLEBOX_COMPAT; 4214 4215 ret->ext.status_type = TLSEXT_STATUSTYPE_nothing; 4216 4217 /* 4218 * We cannot usefully set a default max_early_data here (which gets 4219 * propagated in SSL_new(), for the following reason: setting the 4220 * SSL field causes tls_construct_stoc_early_data() to tell the 4221 * client that early data will be accepted when constructing a TLS 1.3 4222 * session ticket, and the client will accordingly send us early data 4223 * when using that ticket (if the client has early data to send). 4224 * However, in order for the early data to actually be consumed by 4225 * the application, the application must also have calls to 4226 * SSL_read_early_data(); otherwise we'll just skip past the early data 4227 * and ignore it. So, since the application must add calls to 4228 * SSL_read_early_data(), we also require them to add 4229 * calls to SSL_CTX_set_max_early_data() in order to use early data, 4230 * eliminating the bandwidth-wasting early data in the case described 4231 * above. 4232 */ 4233 ret->max_early_data = 0; 4234 4235 /* 4236 * Default recv_max_early_data is a fully loaded single record. Could be 4237 * split across multiple records in practice. We set this differently to 4238 * max_early_data so that, in the default case, we do not advertise any 4239 * support for early_data, but if a client were to send us some (e.g. 4240 * because of an old, stale ticket) then we will tolerate it and skip over 4241 * it. 4242 */ 4243 ret->recv_max_early_data = SSL3_RT_MAX_PLAIN_LENGTH; 4244 4245 /* By default we send two session tickets automatically in TLSv1.3 */ 4246 ret->num_tickets = 2; 4247 4248 #ifndef OPENSSL_NO_QUIC 4249 /* only create a cache for client CTX-es */ 4250 if (meth == OSSL_QUIC_client_method()) 4251 if ((ret->tokencache = ossl_quic_new_token_store()) == NULL) 4252 goto err; 4253 ret->domain_flags = 0; 4254 if (IS_QUIC_METHOD(meth)) { 4255 #if defined(OPENSSL_THREADS) 4256 if (meth == OSSL_QUIC_client_thread_method()) 4257 ret->domain_flags 4258 = SSL_DOMAIN_FLAG_MULTI_THREAD 4259 | SSL_DOMAIN_FLAG_THREAD_ASSISTED 4260 | SSL_DOMAIN_FLAG_BLOCKING; 4261 else 4262 ret->domain_flags 4263 = SSL_DOMAIN_FLAG_MULTI_THREAD 4264 | SSL_DOMAIN_FLAG_LEGACY_BLOCKING; 4265 #else 4266 ret->domain_flags 4267 = SSL_DOMAIN_FLAG_SINGLE_THREAD 4268 | SSL_DOMAIN_FLAG_LEGACY_BLOCKING; 4269 #endif 4270 } 4271 #endif 4272 4273 if (!ssl_ctx_system_config(ret)) { 4274 ERR_raise(ERR_LIB_SSL, SSL_R_ERROR_IN_SYSTEM_DEFAULT_CONFIG); 4275 goto err; 4276 } 4277 4278 #ifndef OPENSSL_NO_SSLKEYLOG 4279 if (keylogfile != NULL && strlen(keylogfile) != 0) { 4280 /* Make sure we have a global lock allocated */ 4281 if (!RUN_ONCE(&ssl_keylog_once, ssl_keylog_init)) { 4282 /* use a trace message as a warning */ 4283 OSSL_TRACE(TLS, "Unable to initialize keylog data\n"); 4284 goto out; 4285 } 4286 4287 /* Grab our global lock */ 4288 if (!CRYPTO_THREAD_write_lock(keylog_lock)) { 4289 OSSL_TRACE(TLS, "Unable to acquire keylog write lock\n"); 4290 goto out; 4291 } else { 4292 /* 4293 * If the bio for the requested keylog file hasn't been 4294 * created yet, go ahead and create it, and set it to append 4295 * if its already there. 4296 */ 4297 if (keylog_bio == NULL) { 4298 keylog_bio = get_sslkeylog_bio(keylogfile); 4299 if (keylog_bio == NULL) { 4300 OSSL_TRACE(TLS, "Unable to create keylog bio\n"); 4301 goto out; 4302 } 4303 BIO_set_callback_ex(keylog_bio, check_keylog_bio_free); 4304 } else { 4305 /* up our refcount for the already-created case */ 4306 BIO_up_ref(keylog_bio); 4307 } 4308 /* If we have a bio now, assign the callback handler */ 4309 if (keylog_bio != NULL) 4310 ret->do_sslkeylog = 1; 4311 /* unlock, and we're done */ 4312 CRYPTO_THREAD_unlock(keylog_lock); 4313 } 4314 } 4315 out: 4316 #endif 4317 return ret; 4318 err: 4319 SSL_CTX_free(ret); 4320 #ifndef OPENSSL_NO_SSLKEYLOG 4321 BIO_free(keylog_bio); 4322 #endif 4323 return NULL; 4324 } 4325 4326 SSL_CTX *SSL_CTX_new(const SSL_METHOD *meth) 4327 { 4328 return SSL_CTX_new_ex(NULL, NULL, meth); 4329 } 4330 4331 int SSL_CTX_up_ref(SSL_CTX *ctx) 4332 { 4333 int i; 4334 4335 if (CRYPTO_UP_REF(&ctx->references, &i) <= 0) 4336 return 0; 4337 4338 REF_PRINT_COUNT("SSL_CTX", i, ctx); 4339 REF_ASSERT_ISNT(i < 2); 4340 return ((i > 1) ? 1 : 0); 4341 } 4342 4343 void SSL_CTX_free(SSL_CTX *a) 4344 { 4345 int i; 4346 size_t j; 4347 4348 if (a == NULL) 4349 return; 4350 4351 CRYPTO_DOWN_REF(&a->references, &i); 4352 REF_PRINT_COUNT("SSL_CTX", i, a); 4353 if (i > 0) 4354 return; 4355 REF_ASSERT_ISNT(i < 0); 4356 4357 #ifndef OPENSSL_NO_SSLKEYLOG 4358 if (keylog_lock != NULL && CRYPTO_THREAD_write_lock(keylog_lock)) { 4359 if (a->do_sslkeylog == 1) 4360 BIO_free(keylog_bio); 4361 a->do_sslkeylog = 0; 4362 CRYPTO_THREAD_unlock(keylog_lock); 4363 } 4364 #endif 4365 4366 X509_VERIFY_PARAM_free(a->param); 4367 dane_ctx_final(&a->dane); 4368 4369 /* 4370 * Free internal session cache. However: the remove_cb() may reference 4371 * the ex_data of SSL_CTX, thus the ex_data store can only be removed 4372 * after the sessions were flushed. 4373 * As the ex_data handling routines might also touch the session cache, 4374 * the most secure solution seems to be: empty (flush) the cache, then 4375 * free ex_data, then finally free the cache. 4376 * (See ticket [openssl.org #212].) 4377 */ 4378 if (a->sessions != NULL) 4379 SSL_CTX_flush_sessions_ex(a, 0); 4380 4381 CRYPTO_free_ex_data(CRYPTO_EX_INDEX_SSL_CTX, a, &a->ex_data); 4382 lh_SSL_SESSION_free(a->sessions); 4383 X509_STORE_free(a->cert_store); 4384 #ifndef OPENSSL_NO_CT 4385 CTLOG_STORE_free(a->ctlog_store); 4386 #endif 4387 sk_SSL_CIPHER_free(a->cipher_list); 4388 sk_SSL_CIPHER_free(a->cipher_list_by_id); 4389 sk_SSL_CIPHER_free(a->tls13_ciphersuites); 4390 ssl_cert_free(a->cert); 4391 sk_X509_NAME_pop_free(a->ca_names, X509_NAME_free); 4392 sk_X509_NAME_pop_free(a->client_ca_names, X509_NAME_free); 4393 OSSL_STACK_OF_X509_free(a->extra_certs); 4394 a->comp_methods = NULL; 4395 #ifndef OPENSSL_NO_SRTP 4396 sk_SRTP_PROTECTION_PROFILE_free(a->srtp_profiles); 4397 #endif 4398 #ifndef OPENSSL_NO_SRP 4399 ssl_ctx_srp_ctx_free_intern(a); 4400 #endif 4401 #ifndef OPENSSL_NO_ENGINE 4402 tls_engine_finish(a->client_cert_engine); 4403 #endif 4404 4405 OPENSSL_free(a->ext.ecpointformats); 4406 OPENSSL_free(a->ext.supportedgroups); 4407 OPENSSL_free(a->ext.keyshares); 4408 OPENSSL_free(a->ext.tuples); 4409 OPENSSL_free(a->ext.alpn); 4410 OPENSSL_secure_free(a->ext.secure); 4411 4412 ssl_evp_md_free(a->md5); 4413 ssl_evp_md_free(a->sha1); 4414 4415 for (j = 0; j < SSL_ENC_NUM_IDX; j++) 4416 ssl_evp_cipher_free(a->ssl_cipher_methods[j]); 4417 for (j = 0; j < SSL_MD_NUM_IDX; j++) 4418 ssl_evp_md_free(a->ssl_digest_methods[j]); 4419 for (j = 0; j < a->group_list_len; j++) { 4420 OPENSSL_free(a->group_list[j].tlsname); 4421 OPENSSL_free(a->group_list[j].realname); 4422 OPENSSL_free(a->group_list[j].algorithm); 4423 } 4424 OPENSSL_free(a->group_list); 4425 for (j = 0; j < a->sigalg_list_len; j++) { 4426 OPENSSL_free(a->sigalg_list[j].name); 4427 OPENSSL_free(a->sigalg_list[j].sigalg_name); 4428 OPENSSL_free(a->sigalg_list[j].sigalg_oid); 4429 OPENSSL_free(a->sigalg_list[j].sig_name); 4430 OPENSSL_free(a->sigalg_list[j].sig_oid); 4431 OPENSSL_free(a->sigalg_list[j].hash_name); 4432 OPENSSL_free(a->sigalg_list[j].hash_oid); 4433 OPENSSL_free(a->sigalg_list[j].keytype); 4434 OPENSSL_free(a->sigalg_list[j].keytype_oid); 4435 } 4436 OPENSSL_free(a->sigalg_list); 4437 OPENSSL_free(a->ssl_cert_info); 4438 4439 OPENSSL_free(a->sigalg_lookup_cache); 4440 OPENSSL_free(a->tls12_sigalgs); 4441 4442 OPENSSL_free(a->client_cert_type); 4443 OPENSSL_free(a->server_cert_type); 4444 4445 CRYPTO_THREAD_lock_free(a->lock); 4446 CRYPTO_FREE_REF(&a->references); 4447 #ifdef TSAN_REQUIRES_LOCKING 4448 CRYPTO_THREAD_lock_free(a->tsan_lock); 4449 #endif 4450 4451 OPENSSL_free(a->propq); 4452 #ifndef OPENSSL_NO_QLOG 4453 OPENSSL_free(a->qlog_title); 4454 #endif 4455 4456 #ifndef OPENSSL_NO_QUIC 4457 ossl_quic_free_token_store(a->tokencache); 4458 #endif 4459 4460 OPENSSL_free(a); 4461 } 4462 4463 void SSL_CTX_set_default_passwd_cb(SSL_CTX *ctx, pem_password_cb *cb) 4464 { 4465 ctx->default_passwd_callback = cb; 4466 } 4467 4468 void SSL_CTX_set_default_passwd_cb_userdata(SSL_CTX *ctx, void *u) 4469 { 4470 ctx->default_passwd_callback_userdata = u; 4471 } 4472 4473 pem_password_cb *SSL_CTX_get_default_passwd_cb(SSL_CTX *ctx) 4474 { 4475 return ctx->default_passwd_callback; 4476 } 4477 4478 void *SSL_CTX_get_default_passwd_cb_userdata(SSL_CTX *ctx) 4479 { 4480 return ctx->default_passwd_callback_userdata; 4481 } 4482 4483 void SSL_set_default_passwd_cb(SSL *s, pem_password_cb *cb) 4484 { 4485 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s); 4486 4487 if (sc == NULL) 4488 return; 4489 4490 sc->default_passwd_callback = cb; 4491 } 4492 4493 void SSL_set_default_passwd_cb_userdata(SSL *s, void *u) 4494 { 4495 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s); 4496 4497 if (sc == NULL) 4498 return; 4499 4500 sc->default_passwd_callback_userdata = u; 4501 } 4502 4503 pem_password_cb *SSL_get_default_passwd_cb(SSL *s) 4504 { 4505 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s); 4506 4507 if (sc == NULL) 4508 return NULL; 4509 4510 return sc->default_passwd_callback; 4511 } 4512 4513 void *SSL_get_default_passwd_cb_userdata(SSL *s) 4514 { 4515 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s); 4516 4517 if (sc == NULL) 4518 return NULL; 4519 4520 return sc->default_passwd_callback_userdata; 4521 } 4522 4523 void SSL_CTX_set_cert_verify_callback(SSL_CTX *ctx, 4524 int (*cb)(X509_STORE_CTX *, void *), 4525 void *arg) 4526 { 4527 ctx->app_verify_callback = cb; 4528 ctx->app_verify_arg = arg; 4529 } 4530 4531 void SSL_CTX_set_verify(SSL_CTX *ctx, int mode, 4532 int (*cb)(int, X509_STORE_CTX *)) 4533 { 4534 ctx->verify_mode = mode; 4535 ctx->default_verify_callback = cb; 4536 } 4537 4538 void SSL_CTX_set_verify_depth(SSL_CTX *ctx, int depth) 4539 { 4540 X509_VERIFY_PARAM_set_depth(ctx->param, depth); 4541 } 4542 4543 void SSL_CTX_set_cert_cb(SSL_CTX *c, int (*cb)(SSL *ssl, void *arg), void *arg) 4544 { 4545 ssl_cert_set_cert_cb(c->cert, cb, arg); 4546 } 4547 4548 void SSL_set_cert_cb(SSL *s, int (*cb)(SSL *ssl, void *arg), void *arg) 4549 { 4550 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s); 4551 4552 if (sc == NULL) 4553 return; 4554 4555 ssl_cert_set_cert_cb(sc->cert, cb, arg); 4556 } 4557 4558 void ssl_set_masks(SSL_CONNECTION *s) 4559 { 4560 CERT *c = s->cert; 4561 uint32_t *pvalid = s->s3.tmp.valid_flags; 4562 int rsa_enc, rsa_sign, dh_tmp, dsa_sign; 4563 unsigned long mask_k, mask_a; 4564 int have_ecc_cert, ecdsa_ok; 4565 4566 if (c == NULL) 4567 return; 4568 4569 dh_tmp = (c->dh_tmp != NULL 4570 || c->dh_tmp_cb != NULL 4571 || c->dh_tmp_auto); 4572 4573 rsa_enc = pvalid[SSL_PKEY_RSA] & CERT_PKEY_VALID; 4574 rsa_sign = pvalid[SSL_PKEY_RSA] & CERT_PKEY_VALID; 4575 dsa_sign = pvalid[SSL_PKEY_DSA_SIGN] & CERT_PKEY_VALID; 4576 have_ecc_cert = pvalid[SSL_PKEY_ECC] & CERT_PKEY_VALID; 4577 mask_k = 0; 4578 mask_a = 0; 4579 4580 OSSL_TRACE4(TLS_CIPHER, "dh_tmp=%d rsa_enc=%d rsa_sign=%d dsa_sign=%d\n", 4581 dh_tmp, rsa_enc, rsa_sign, dsa_sign); 4582 4583 #ifndef OPENSSL_NO_GOST 4584 if (ssl_has_cert(s, SSL_PKEY_GOST12_512)) { 4585 mask_k |= SSL_kGOST | SSL_kGOST18; 4586 mask_a |= SSL_aGOST12; 4587 } 4588 if (ssl_has_cert(s, SSL_PKEY_GOST12_256)) { 4589 mask_k |= SSL_kGOST | SSL_kGOST18; 4590 mask_a |= SSL_aGOST12; 4591 } 4592 if (ssl_has_cert(s, SSL_PKEY_GOST01)) { 4593 mask_k |= SSL_kGOST; 4594 mask_a |= SSL_aGOST01; 4595 } 4596 #endif 4597 4598 if (rsa_enc) 4599 mask_k |= SSL_kRSA; 4600 4601 if (dh_tmp) 4602 mask_k |= SSL_kDHE; 4603 4604 /* 4605 * If we only have an RSA-PSS certificate allow RSA authentication 4606 * if TLS 1.2 and peer supports it. 4607 */ 4608 4609 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)) 4610 mask_a |= SSL_aRSA; 4611 4612 if (dsa_sign) { 4613 mask_a |= SSL_aDSS; 4614 } 4615 4616 mask_a |= SSL_aNULL; 4617 4618 /* 4619 * You can do anything with an RPK key, since there's no cert to restrict it 4620 * But we need to check for private keys 4621 */ 4622 if (pvalid[SSL_PKEY_RSA] & CERT_PKEY_RPK) { 4623 mask_a |= SSL_aRSA; 4624 mask_k |= SSL_kRSA; 4625 } 4626 if (pvalid[SSL_PKEY_ECC] & CERT_PKEY_RPK) 4627 mask_a |= SSL_aECDSA; 4628 if (TLS1_get_version(&s->ssl) == TLS1_2_VERSION) { 4629 if (pvalid[SSL_PKEY_RSA_PSS_SIGN] & CERT_PKEY_RPK) 4630 mask_a |= SSL_aRSA; 4631 if (pvalid[SSL_PKEY_ED25519] & CERT_PKEY_RPK 4632 || pvalid[SSL_PKEY_ED448] & CERT_PKEY_RPK) 4633 mask_a |= SSL_aECDSA; 4634 } 4635 4636 /* 4637 * An ECC certificate may be usable for ECDH and/or ECDSA cipher suites 4638 * depending on the key usage extension. 4639 */ 4640 if (have_ecc_cert) { 4641 uint32_t ex_kusage; 4642 ex_kusage = X509_get_key_usage(c->pkeys[SSL_PKEY_ECC].x509); 4643 ecdsa_ok = ex_kusage & X509v3_KU_DIGITAL_SIGNATURE; 4644 if (!(pvalid[SSL_PKEY_ECC] & CERT_PKEY_SIGN)) 4645 ecdsa_ok = 0; 4646 if (ecdsa_ok) 4647 mask_a |= SSL_aECDSA; 4648 } 4649 /* Allow Ed25519 for TLS 1.2 if peer supports it */ 4650 if (!(mask_a & SSL_aECDSA) && ssl_has_cert(s, SSL_PKEY_ED25519) 4651 && pvalid[SSL_PKEY_ED25519] & CERT_PKEY_EXPLICIT_SIGN 4652 && TLS1_get_version(&s->ssl) == TLS1_2_VERSION) 4653 mask_a |= SSL_aECDSA; 4654 4655 /* Allow Ed448 for TLS 1.2 if peer supports it */ 4656 if (!(mask_a & SSL_aECDSA) && ssl_has_cert(s, SSL_PKEY_ED448) 4657 && pvalid[SSL_PKEY_ED448] & CERT_PKEY_EXPLICIT_SIGN 4658 && TLS1_get_version(&s->ssl) == TLS1_2_VERSION) 4659 mask_a |= SSL_aECDSA; 4660 4661 mask_k |= SSL_kECDHE; 4662 4663 #ifndef OPENSSL_NO_PSK 4664 mask_k |= SSL_kPSK; 4665 mask_a |= SSL_aPSK; 4666 if (mask_k & SSL_kRSA) 4667 mask_k |= SSL_kRSAPSK; 4668 if (mask_k & SSL_kDHE) 4669 mask_k |= SSL_kDHEPSK; 4670 if (mask_k & SSL_kECDHE) 4671 mask_k |= SSL_kECDHEPSK; 4672 #endif 4673 4674 s->s3.tmp.mask_k = mask_k; 4675 s->s3.tmp.mask_a = mask_a; 4676 } 4677 4678 int ssl_check_srvr_ecc_cert_and_alg(X509 *x, SSL_CONNECTION *s) 4679 { 4680 if (s->s3.tmp.new_cipher->algorithm_auth & SSL_aECDSA) { 4681 /* key usage, if present, must allow signing */ 4682 if (!(X509_get_key_usage(x) & X509v3_KU_DIGITAL_SIGNATURE)) { 4683 ERR_raise(ERR_LIB_SSL, SSL_R_ECC_CERT_NOT_FOR_SIGNING); 4684 return 0; 4685 } 4686 } 4687 return 1; /* all checks are ok */ 4688 } 4689 4690 int ssl_get_server_cert_serverinfo(SSL_CONNECTION *s, 4691 const unsigned char **serverinfo, 4692 size_t *serverinfo_length) 4693 { 4694 CERT_PKEY *cpk = s->s3.tmp.cert; 4695 *serverinfo_length = 0; 4696 4697 if (cpk == NULL || cpk->serverinfo == NULL) 4698 return 0; 4699 4700 *serverinfo = cpk->serverinfo; 4701 *serverinfo_length = cpk->serverinfo_length; 4702 return 1; 4703 } 4704 4705 void ssl_update_cache(SSL_CONNECTION *s, int mode) 4706 { 4707 int i; 4708 4709 /* 4710 * If the session_id_length is 0, we are not supposed to cache it, and it 4711 * would be rather hard to do anyway :-). Also if the session has already 4712 * been marked as not_resumable we should not cache it for later reuse. 4713 */ 4714 if (s->session->session_id_length == 0 || s->session->not_resumable) 4715 return; 4716 4717 /* 4718 * If sid_ctx_length is 0 there is no specific application context 4719 * associated with this session, so when we try to resume it and 4720 * SSL_VERIFY_PEER is requested to verify the client identity, we have no 4721 * indication that this is actually a session for the proper application 4722 * context, and the *handshake* will fail, not just the resumption attempt. 4723 * Do not cache (on the server) these sessions that are not resumable 4724 * (clients can set SSL_VERIFY_PEER without needing a sid_ctx set). 4725 */ 4726 if (s->server && s->session->sid_ctx_length == 0 4727 && (s->verify_mode & SSL_VERIFY_PEER) != 0) 4728 return; 4729 4730 i = s->session_ctx->session_cache_mode; 4731 if ((i & mode) != 0 4732 && (!s->hit || SSL_CONNECTION_IS_TLS13(s))) { 4733 /* 4734 * Add the session to the internal cache. In server side TLSv1.3 we 4735 * normally don't do this because by default it's a full stateless ticket 4736 * with only a dummy session id so there is no reason to cache it, 4737 * unless: 4738 * - we are doing early_data, in which case we cache so that we can 4739 * detect replays 4740 * - the application has set a remove_session_cb so needs to know about 4741 * session timeout events 4742 * - SSL_OP_NO_TICKET is set in which case it is a stateful ticket 4743 */ 4744 if ((i & SSL_SESS_CACHE_NO_INTERNAL_STORE) == 0 4745 && (!SSL_CONNECTION_IS_TLS13(s) 4746 || !s->server 4747 || (s->max_early_data > 0 4748 && (s->options & SSL_OP_NO_ANTI_REPLAY) == 0) 4749 || s->session_ctx->remove_session_cb != NULL 4750 || (s->options & SSL_OP_NO_TICKET) != 0)) 4751 SSL_CTX_add_session(s->session_ctx, s->session); 4752 4753 /* 4754 * Add the session to the external cache. We do this even in server side 4755 * TLSv1.3 without early data because some applications just want to 4756 * know about the creation of a session and aren't doing a full cache. 4757 */ 4758 if (s->session_ctx->new_session_cb != NULL && SSL_SESSION_up_ref(s->session)) { 4759 if (!s->session_ctx->new_session_cb(SSL_CONNECTION_GET_USER_SSL(s), 4760 s->session)) 4761 SSL_SESSION_free(s->session); 4762 } 4763 } 4764 4765 /* auto flush every 255 connections */ 4766 if ((!(i & SSL_SESS_CACHE_NO_AUTO_CLEAR)) && ((i & mode) == mode)) { 4767 TSAN_QUALIFIER int *stat; 4768 4769 if (mode & SSL_SESS_CACHE_CLIENT) 4770 stat = &s->session_ctx->stats.sess_connect_good; 4771 else 4772 stat = &s->session_ctx->stats.sess_accept_good; 4773 if ((ssl_tsan_load(s->session_ctx, stat) & 0xff) == 0xff) 4774 SSL_CTX_flush_sessions_ex(s->session_ctx, time(NULL)); 4775 } 4776 } 4777 4778 const SSL_METHOD *SSL_CTX_get_ssl_method(const SSL_CTX *ctx) 4779 { 4780 return ctx->method; 4781 } 4782 4783 const SSL_METHOD *SSL_get_ssl_method(const SSL *s) 4784 { 4785 return s->method; 4786 } 4787 4788 int SSL_set_ssl_method(SSL *s, const SSL_METHOD *meth) 4789 { 4790 int ret = 1; 4791 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s); 4792 4793 /* Not allowed for QUIC */ 4794 if (sc == NULL 4795 || (s->type != SSL_TYPE_SSL_CONNECTION && s->method != meth) 4796 || (s->type == SSL_TYPE_SSL_CONNECTION && IS_QUIC_METHOD(meth))) 4797 return 0; 4798 4799 if (s->method != meth) { 4800 const SSL_METHOD *sm = s->method; 4801 int (*hf)(SSL *) = sc->handshake_func; 4802 4803 if (sm->version == meth->version) 4804 s->method = meth; 4805 else { 4806 sm->ssl_deinit(s); 4807 s->method = meth; 4808 ret = s->method->ssl_init(s); 4809 } 4810 4811 if (hf == sm->ssl_connect) 4812 sc->handshake_func = meth->ssl_connect; 4813 else if (hf == sm->ssl_accept) 4814 sc->handshake_func = meth->ssl_accept; 4815 } 4816 return ret; 4817 } 4818 4819 int SSL_get_error(const SSL *s, int i) 4820 { 4821 return ossl_ssl_get_error(s, i, /*check_err=*/1); 4822 } 4823 4824 int ossl_ssl_get_error(const SSL *s, int i, int check_err) 4825 { 4826 int reason; 4827 unsigned long l; 4828 BIO *bio; 4829 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s); 4830 4831 if (i > 0) 4832 return SSL_ERROR_NONE; 4833 4834 #ifndef OPENSSL_NO_QUIC 4835 if (IS_QUIC(s)) { 4836 reason = ossl_quic_get_error(s, i); 4837 if (reason != SSL_ERROR_NONE) 4838 return reason; 4839 } 4840 #endif 4841 4842 if (sc == NULL) 4843 return SSL_ERROR_SSL; 4844 4845 /* 4846 * Make things return SSL_ERROR_SYSCALL when doing SSL_do_handshake etc, 4847 * where we do encode the error 4848 */ 4849 if (check_err && (l = ERR_peek_error()) != 0) { 4850 if (ERR_GET_LIB(l) == ERR_LIB_SYS) 4851 return SSL_ERROR_SYSCALL; 4852 else 4853 return SSL_ERROR_SSL; 4854 } 4855 4856 #ifndef OPENSSL_NO_QUIC 4857 if (!IS_QUIC(s)) 4858 #endif 4859 { 4860 if (SSL_want_read(s)) { 4861 bio = SSL_get_rbio(s); 4862 if (BIO_should_read(bio)) 4863 return SSL_ERROR_WANT_READ; 4864 else if (BIO_should_write(bio)) 4865 /* 4866 * This one doesn't make too much sense ... We never try to 4867 * write to the rbio, and an application program where rbio and 4868 * wbio are separate couldn't even know what it should wait for. 4869 * However if we ever set s->rwstate incorrectly (so that we 4870 * have SSL_want_read(s) instead of SSL_want_write(s)) and rbio 4871 * and wbio *are* the same, this test works around that bug; so 4872 * it might be safer to keep it. 4873 */ 4874 return SSL_ERROR_WANT_WRITE; 4875 else if (BIO_should_io_special(bio)) { 4876 reason = BIO_get_retry_reason(bio); 4877 if (reason == BIO_RR_CONNECT) 4878 return SSL_ERROR_WANT_CONNECT; 4879 else if (reason == BIO_RR_ACCEPT) 4880 return SSL_ERROR_WANT_ACCEPT; 4881 else 4882 return SSL_ERROR_SYSCALL; /* unknown */ 4883 } 4884 } 4885 4886 if (SSL_want_write(s)) { 4887 /* 4888 * Access wbio directly - in order to use the buffered bio if 4889 * present 4890 */ 4891 bio = sc->wbio; 4892 if (BIO_should_write(bio)) 4893 return SSL_ERROR_WANT_WRITE; 4894 else if (BIO_should_read(bio)) 4895 /* 4896 * See above (SSL_want_read(s) with BIO_should_write(bio)) 4897 */ 4898 return SSL_ERROR_WANT_READ; 4899 else if (BIO_should_io_special(bio)) { 4900 reason = BIO_get_retry_reason(bio); 4901 if (reason == BIO_RR_CONNECT) 4902 return SSL_ERROR_WANT_CONNECT; 4903 else if (reason == BIO_RR_ACCEPT) 4904 return SSL_ERROR_WANT_ACCEPT; 4905 else 4906 return SSL_ERROR_SYSCALL; 4907 } 4908 } 4909 } 4910 4911 if (SSL_want_x509_lookup(s)) 4912 return SSL_ERROR_WANT_X509_LOOKUP; 4913 if (SSL_want_retry_verify(s)) 4914 return SSL_ERROR_WANT_RETRY_VERIFY; 4915 if (SSL_want_async(s)) 4916 return SSL_ERROR_WANT_ASYNC; 4917 if (SSL_want_async_job(s)) 4918 return SSL_ERROR_WANT_ASYNC_JOB; 4919 if (SSL_want_client_hello_cb(s)) 4920 return SSL_ERROR_WANT_CLIENT_HELLO_CB; 4921 4922 if ((sc->shutdown & SSL_RECEIVED_SHUTDOWN) && (sc->s3.warn_alert == SSL_AD_CLOSE_NOTIFY)) 4923 return SSL_ERROR_ZERO_RETURN; 4924 4925 return SSL_ERROR_SYSCALL; 4926 } 4927 4928 static int ssl_do_handshake_intern(void *vargs) 4929 { 4930 struct ssl_async_args *args = (struct ssl_async_args *)vargs; 4931 SSL *s = args->s; 4932 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s); 4933 4934 if (sc == NULL) 4935 return -1; 4936 4937 return sc->handshake_func(s); 4938 } 4939 4940 int SSL_do_handshake(SSL *s) 4941 { 4942 int ret = 1; 4943 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s); 4944 4945 #ifndef OPENSSL_NO_QUIC 4946 if (IS_QUIC(s)) 4947 return ossl_quic_do_handshake(s); 4948 #endif 4949 4950 if (sc == NULL) 4951 return -1; 4952 4953 if (sc->handshake_func == NULL) { 4954 ERR_raise(ERR_LIB_SSL, SSL_R_CONNECTION_TYPE_NOT_SET); 4955 return -1; 4956 } 4957 4958 if (!ossl_statem_check_finish_init(sc, -1)) 4959 return -1; 4960 4961 s->method->ssl_renegotiate_check(s, 0); 4962 4963 if (SSL_in_init(s) || SSL_in_before(s)) { 4964 if ((sc->mode & SSL_MODE_ASYNC) && ASYNC_get_current_job() == NULL) { 4965 struct ssl_async_args args; 4966 4967 memset(&args, 0, sizeof(args)); 4968 args.s = s; 4969 4970 ret = ssl_start_async_job(s, &args, ssl_do_handshake_intern); 4971 } else { 4972 ret = sc->handshake_func(s); 4973 } 4974 } 4975 4976 return ret; 4977 } 4978 4979 void SSL_set_accept_state(SSL *s) 4980 { 4981 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL_ONLY(s); 4982 4983 #ifndef OPENSSL_NO_QUIC 4984 if (IS_QUIC(s)) { 4985 /* We suppress errors because this is a void function */ 4986 (void)ossl_quic_set_accept_state(s, 0 /* suppress errors */); 4987 return; 4988 } 4989 #endif 4990 4991 sc->server = 1; 4992 sc->shutdown = 0; 4993 ossl_statem_clear(sc); 4994 sc->handshake_func = s->method->ssl_accept; 4995 /* Ignore return value. Its a void public API function */ 4996 RECORD_LAYER_reset(&sc->rlayer); 4997 } 4998 4999 void SSL_set_connect_state(SSL *s) 5000 { 5001 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL_ONLY(s); 5002 5003 #ifndef OPENSSL_NO_QUIC 5004 if (IS_QUIC(s)) { 5005 /* We suppress errors because this is a void function */ 5006 (void)ossl_quic_set_connect_state(s, 0 /* suppress errors */); 5007 return; 5008 } 5009 #endif 5010 5011 sc->server = 0; 5012 sc->shutdown = 0; 5013 ossl_statem_clear(sc); 5014 sc->handshake_func = s->method->ssl_connect; 5015 /* Ignore return value. Its a void public API function */ 5016 RECORD_LAYER_reset(&sc->rlayer); 5017 } 5018 5019 int ssl_undefined_function(SSL *s) 5020 { 5021 ERR_raise(ERR_LIB_SSL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); 5022 return 0; 5023 } 5024 5025 int ssl_undefined_void_function(void) 5026 { 5027 ERR_raise(ERR_LIB_SSL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); 5028 return 0; 5029 } 5030 5031 const char *ssl_protocol_to_string(int version) 5032 { 5033 switch (version) { 5034 case TLS1_3_VERSION: 5035 return "TLSv1.3"; 5036 5037 case TLS1_2_VERSION: 5038 return "TLSv1.2"; 5039 5040 case TLS1_1_VERSION: 5041 return "TLSv1.1"; 5042 5043 case TLS1_VERSION: 5044 return "TLSv1"; 5045 5046 case SSL3_VERSION: 5047 return "SSLv3"; 5048 5049 case DTLS1_BAD_VER: 5050 return "DTLSv0.9"; 5051 5052 case DTLS1_VERSION: 5053 return "DTLSv1"; 5054 5055 case DTLS1_2_VERSION: 5056 return "DTLSv1.2"; 5057 5058 default: 5059 return "unknown"; 5060 } 5061 } 5062 5063 const char *SSL_get_version(const SSL *s) 5064 { 5065 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s); 5066 5067 #ifndef OPENSSL_NO_QUIC 5068 /* We only support QUICv1 - so if its QUIC its QUICv1 */ 5069 if (s->type == SSL_TYPE_QUIC_CONNECTION || s->type == SSL_TYPE_QUIC_XSO) 5070 return "QUICv1"; 5071 #endif 5072 5073 if (sc == NULL) 5074 return NULL; 5075 5076 return ssl_protocol_to_string(sc->version); 5077 } 5078 5079 __owur int SSL_get_handshake_rtt(const SSL *s, uint64_t *rtt) 5080 { 5081 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s); 5082 5083 if (sc == NULL) 5084 return -1; 5085 if (sc->ts_msg_write.t <= 0 || sc->ts_msg_read.t <= 0) 5086 return 0; /* data not (yet) available */ 5087 if (sc->ts_msg_read.t < sc->ts_msg_write.t) 5088 return -1; 5089 5090 *rtt = ossl_time2us(ossl_time_subtract(sc->ts_msg_read, sc->ts_msg_write)); 5091 return 1; 5092 } 5093 5094 static int dup_ca_names(STACK_OF(X509_NAME) **dst, STACK_OF(X509_NAME) *src) 5095 { 5096 STACK_OF(X509_NAME) *sk; 5097 X509_NAME *xn; 5098 int i; 5099 5100 if (src == NULL) { 5101 *dst = NULL; 5102 return 1; 5103 } 5104 5105 if ((sk = sk_X509_NAME_new_null()) == NULL) 5106 return 0; 5107 for (i = 0; i < sk_X509_NAME_num(src); i++) { 5108 xn = X509_NAME_dup(sk_X509_NAME_value(src, i)); 5109 if (xn == NULL) { 5110 sk_X509_NAME_pop_free(sk, X509_NAME_free); 5111 return 0; 5112 } 5113 if (sk_X509_NAME_insert(sk, xn, i) == 0) { 5114 X509_NAME_free(xn); 5115 sk_X509_NAME_pop_free(sk, X509_NAME_free); 5116 return 0; 5117 } 5118 } 5119 *dst = sk; 5120 5121 return 1; 5122 } 5123 5124 SSL *SSL_dup(SSL *s) 5125 { 5126 SSL *ret; 5127 int i; 5128 /* TODO(QUIC FUTURE): Add an SSL_METHOD function for duplication */ 5129 SSL_CONNECTION *retsc; 5130 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL_ONLY(s); 5131 5132 if (sc == NULL) 5133 return NULL; 5134 5135 /* If we're not quiescent, just up_ref! */ 5136 if (!SSL_in_init(s) || !SSL_in_before(s)) { 5137 CRYPTO_UP_REF(&s->references, &i); 5138 return s; 5139 } 5140 5141 /* 5142 * Otherwise, copy configuration state, and session if set. 5143 */ 5144 if ((ret = SSL_new(SSL_get_SSL_CTX(s))) == NULL) 5145 return NULL; 5146 if ((retsc = SSL_CONNECTION_FROM_SSL_ONLY(ret)) == NULL) 5147 goto err; 5148 5149 if (sc->session != NULL) { 5150 /* 5151 * Arranges to share the same session via up_ref. This "copies" 5152 * session-id, SSL_METHOD, sid_ctx, and 'cert' 5153 */ 5154 if (!SSL_copy_session_id(ret, s)) 5155 goto err; 5156 } else { 5157 /* 5158 * No session has been established yet, so we have to expect that 5159 * s->cert or ret->cert will be changed later -- they should not both 5160 * point to the same object, and thus we can't use 5161 * SSL_copy_session_id. 5162 */ 5163 if (!SSL_set_ssl_method(ret, s->method)) 5164 goto err; 5165 5166 if (sc->cert != NULL) { 5167 ssl_cert_free(retsc->cert); 5168 retsc->cert = ssl_cert_dup(sc->cert); 5169 if (retsc->cert == NULL) 5170 goto err; 5171 } 5172 5173 if (!SSL_set_session_id_context(ret, sc->sid_ctx, 5174 (int)sc->sid_ctx_length)) 5175 goto err; 5176 } 5177 5178 if (!ssl_dane_dup(retsc, sc)) 5179 goto err; 5180 retsc->version = sc->version; 5181 retsc->options = sc->options; 5182 retsc->min_proto_version = sc->min_proto_version; 5183 retsc->max_proto_version = sc->max_proto_version; 5184 retsc->mode = sc->mode; 5185 SSL_set_max_cert_list(ret, SSL_get_max_cert_list(s)); 5186 SSL_set_read_ahead(ret, SSL_get_read_ahead(s)); 5187 retsc->msg_callback = sc->msg_callback; 5188 retsc->msg_callback_arg = sc->msg_callback_arg; 5189 SSL_set_verify(ret, SSL_get_verify_mode(s), SSL_get_verify_callback(s)); 5190 SSL_set_verify_depth(ret, SSL_get_verify_depth(s)); 5191 retsc->generate_session_id = sc->generate_session_id; 5192 5193 SSL_set_info_callback(ret, SSL_get_info_callback(s)); 5194 5195 /* copy app data, a little dangerous perhaps */ 5196 if (!CRYPTO_dup_ex_data(CRYPTO_EX_INDEX_SSL, &ret->ex_data, &s->ex_data)) 5197 goto err; 5198 5199 retsc->server = sc->server; 5200 if (sc->handshake_func) { 5201 if (sc->server) 5202 SSL_set_accept_state(ret); 5203 else 5204 SSL_set_connect_state(ret); 5205 } 5206 retsc->shutdown = sc->shutdown; 5207 retsc->hit = sc->hit; 5208 5209 retsc->default_passwd_callback = sc->default_passwd_callback; 5210 retsc->default_passwd_callback_userdata = sc->default_passwd_callback_userdata; 5211 5212 X509_VERIFY_PARAM_inherit(retsc->param, sc->param); 5213 5214 /* dup the cipher_list and cipher_list_by_id stacks */ 5215 if (sc->cipher_list != NULL) { 5216 if ((retsc->cipher_list = sk_SSL_CIPHER_dup(sc->cipher_list)) == NULL) 5217 goto err; 5218 } 5219 if (sc->cipher_list_by_id != NULL) 5220 if ((retsc->cipher_list_by_id = sk_SSL_CIPHER_dup(sc->cipher_list_by_id)) 5221 == NULL) 5222 goto err; 5223 5224 /* Dup the client_CA list */ 5225 if (!dup_ca_names(&retsc->ca_names, sc->ca_names) 5226 || !dup_ca_names(&retsc->client_ca_names, sc->client_ca_names)) 5227 goto err; 5228 5229 return ret; 5230 5231 err: 5232 SSL_free(ret); 5233 return NULL; 5234 } 5235 5236 X509 *SSL_get_certificate(const SSL *s) 5237 { 5238 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s); 5239 5240 if (sc == NULL) 5241 return NULL; 5242 5243 if (sc->cert != NULL) 5244 return sc->cert->key->x509; 5245 else 5246 return NULL; 5247 } 5248 5249 EVP_PKEY *SSL_get_privatekey(const SSL *s) 5250 { 5251 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s); 5252 5253 if (sc == NULL) 5254 return NULL; 5255 5256 if (sc->cert != NULL) 5257 return sc->cert->key->privatekey; 5258 else 5259 return NULL; 5260 } 5261 5262 X509 *SSL_CTX_get0_certificate(const SSL_CTX *ctx) 5263 { 5264 if (ctx->cert != NULL) 5265 return ctx->cert->key->x509; 5266 else 5267 return NULL; 5268 } 5269 5270 EVP_PKEY *SSL_CTX_get0_privatekey(const SSL_CTX *ctx) 5271 { 5272 if (ctx->cert != NULL) 5273 return ctx->cert->key->privatekey; 5274 else 5275 return NULL; 5276 } 5277 5278 const SSL_CIPHER *SSL_get_current_cipher(const SSL *s) 5279 { 5280 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s); 5281 5282 if (sc == NULL) 5283 return NULL; 5284 5285 if ((sc->session != NULL) && (sc->session->cipher != NULL)) 5286 return sc->session->cipher; 5287 return NULL; 5288 } 5289 5290 const SSL_CIPHER *SSL_get_pending_cipher(const SSL *s) 5291 { 5292 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s); 5293 5294 if (sc == NULL) 5295 return NULL; 5296 5297 return sc->s3.tmp.new_cipher; 5298 } 5299 5300 const COMP_METHOD *SSL_get_current_compression(const SSL *s) 5301 { 5302 #ifndef OPENSSL_NO_COMP 5303 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL_ONLY(s); 5304 5305 if (sc == NULL) 5306 return NULL; 5307 5308 return sc->rlayer.wrlmethod->get_compression(sc->rlayer.wrl); 5309 #else 5310 return NULL; 5311 #endif 5312 } 5313 5314 const COMP_METHOD *SSL_get_current_expansion(const SSL *s) 5315 { 5316 #ifndef OPENSSL_NO_COMP 5317 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL_ONLY(s); 5318 5319 if (sc == NULL) 5320 return NULL; 5321 5322 return sc->rlayer.rrlmethod->get_compression(sc->rlayer.rrl); 5323 #else 5324 return NULL; 5325 #endif 5326 } 5327 5328 int ssl_init_wbio_buffer(SSL_CONNECTION *s) 5329 { 5330 BIO *bbio; 5331 5332 if (s->bbio != NULL) { 5333 /* Already buffered. */ 5334 return 1; 5335 } 5336 5337 bbio = BIO_new(BIO_f_buffer()); 5338 if (bbio == NULL || BIO_set_read_buffer_size(bbio, 1) <= 0) { 5339 BIO_free(bbio); 5340 ERR_raise(ERR_LIB_SSL, ERR_R_BUF_LIB); 5341 return 0; 5342 } 5343 s->bbio = bbio; 5344 s->wbio = BIO_push(bbio, s->wbio); 5345 5346 s->rlayer.wrlmethod->set1_bio(s->rlayer.wrl, s->wbio); 5347 5348 return 1; 5349 } 5350 5351 int ssl_free_wbio_buffer(SSL_CONNECTION *s) 5352 { 5353 /* callers ensure s is never null */ 5354 if (s->bbio == NULL) 5355 return 1; 5356 5357 s->wbio = BIO_pop(s->wbio); 5358 s->rlayer.wrlmethod->set1_bio(s->rlayer.wrl, s->wbio); 5359 5360 BIO_free(s->bbio); 5361 s->bbio = NULL; 5362 5363 return 1; 5364 } 5365 5366 void SSL_CTX_set_quiet_shutdown(SSL_CTX *ctx, int mode) 5367 { 5368 ctx->quiet_shutdown = mode; 5369 } 5370 5371 int SSL_CTX_get_quiet_shutdown(const SSL_CTX *ctx) 5372 { 5373 return ctx->quiet_shutdown; 5374 } 5375 5376 void SSL_set_quiet_shutdown(SSL *s, int mode) 5377 { 5378 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL_ONLY(s); 5379 5380 /* Not supported with QUIC */ 5381 if (sc == NULL) 5382 return; 5383 5384 sc->quiet_shutdown = mode; 5385 } 5386 5387 int SSL_get_quiet_shutdown(const SSL *s) 5388 { 5389 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL_ONLY(s); 5390 5391 /* Not supported with QUIC */ 5392 if (sc == NULL) 5393 return 0; 5394 5395 return sc->quiet_shutdown; 5396 } 5397 5398 void SSL_set_shutdown(SSL *s, int mode) 5399 { 5400 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL_ONLY(s); 5401 5402 /* Not supported with QUIC */ 5403 if (sc == NULL) 5404 return; 5405 5406 sc->shutdown = mode; 5407 } 5408 5409 int SSL_get_shutdown(const SSL *s) 5410 { 5411 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL_ONLY(s); 5412 5413 #ifndef OPENSSL_NO_QUIC 5414 /* QUIC: Just indicate whether the connection was shutdown cleanly. */ 5415 if (IS_QUIC(s)) 5416 return ossl_quic_get_shutdown(s); 5417 #endif 5418 5419 if (sc == NULL) 5420 return 0; 5421 5422 return sc->shutdown; 5423 } 5424 5425 int SSL_version(const SSL *s) 5426 { 5427 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s); 5428 5429 #ifndef OPENSSL_NO_QUIC 5430 /* We only support QUICv1 - so if its QUIC its QUICv1 */ 5431 if (s->type == SSL_TYPE_QUIC_CONNECTION || s->type == SSL_TYPE_QUIC_XSO) 5432 return OSSL_QUIC1_VERSION; 5433 #endif 5434 if (sc == NULL) 5435 return 0; 5436 5437 return sc->version; 5438 } 5439 5440 int SSL_client_version(const SSL *s) 5441 { 5442 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s); 5443 5444 #ifndef OPENSSL_NO_QUIC 5445 /* We only support QUICv1 - so if its QUIC its QUICv1 */ 5446 if (s->type == SSL_TYPE_QUIC_CONNECTION || s->type == SSL_TYPE_QUIC_XSO) 5447 return OSSL_QUIC1_VERSION; 5448 #endif 5449 if (sc == NULL) 5450 return 0; 5451 5452 return sc->client_version; 5453 } 5454 5455 SSL_CTX *SSL_get_SSL_CTX(const SSL *ssl) 5456 { 5457 return ssl->ctx; 5458 } 5459 5460 SSL_CTX *SSL_set_SSL_CTX(SSL *ssl, SSL_CTX *ctx) 5461 { 5462 CERT *new_cert; 5463 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL_ONLY(ssl); 5464 5465 /* TODO(QUIC FUTURE): Add support for QUIC */ 5466 if (sc == NULL) 5467 return NULL; 5468 5469 if (ssl->ctx == ctx) 5470 return ssl->ctx; 5471 if (ctx == NULL) 5472 ctx = sc->session_ctx; 5473 new_cert = ssl_cert_dup(ctx->cert); 5474 if (new_cert == NULL) 5475 goto err; 5476 if (!custom_exts_copy_conn(&new_cert->custext, &sc->cert->custext)) 5477 goto err; 5478 if (!custom_exts_copy_flags(&new_cert->custext, &sc->cert->custext)) 5479 goto err; 5480 5481 /* 5482 * Program invariant: |sid_ctx| has fixed size (SSL_MAX_SID_CTX_LENGTH), 5483 * so setter APIs must prevent invalid lengths from entering the system. 5484 */ 5485 if (!ossl_assert(sc->sid_ctx_length <= sizeof(sc->sid_ctx))) 5486 goto err; 5487 if (!SSL_CTX_up_ref(ctx)) 5488 goto err; 5489 5490 /* 5491 * If the session ID context matches that of the parent SSL_CTX, 5492 * inherit it from the new SSL_CTX as well. If however the context does 5493 * not match (i.e., it was set per-ssl with SSL_set_session_id_context), 5494 * leave it unchanged. 5495 */ 5496 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)) { 5497 sc->sid_ctx_length = ctx->sid_ctx_length; 5498 memcpy(&sc->sid_ctx, &ctx->sid_ctx, sizeof(sc->sid_ctx)); 5499 } 5500 5501 ssl_cert_free(sc->cert); 5502 sc->cert = new_cert; 5503 SSL_CTX_free(ssl->ctx); /* decrement reference count */ 5504 ssl->ctx = ctx; 5505 5506 return ssl->ctx; 5507 5508 err: 5509 ssl_cert_free(new_cert); 5510 return NULL; 5511 } 5512 5513 int SSL_CTX_set_default_verify_paths(SSL_CTX *ctx) 5514 { 5515 return X509_STORE_set_default_paths_ex(ctx->cert_store, ctx->libctx, 5516 ctx->propq); 5517 } 5518 5519 int SSL_CTX_set_default_verify_dir(SSL_CTX *ctx) 5520 { 5521 X509_LOOKUP *lookup; 5522 5523 lookup = X509_STORE_add_lookup(ctx->cert_store, X509_LOOKUP_hash_dir()); 5524 if (lookup == NULL) 5525 return 0; 5526 5527 /* We ignore errors, in case the directory doesn't exist */ 5528 ERR_set_mark(); 5529 5530 X509_LOOKUP_add_dir(lookup, NULL, X509_FILETYPE_DEFAULT); 5531 5532 ERR_pop_to_mark(); 5533 5534 return 1; 5535 } 5536 5537 int SSL_CTX_set_default_verify_file(SSL_CTX *ctx) 5538 { 5539 X509_LOOKUP *lookup; 5540 5541 lookup = X509_STORE_add_lookup(ctx->cert_store, X509_LOOKUP_file()); 5542 if (lookup == NULL) 5543 return 0; 5544 5545 /* We ignore errors, in case the file doesn't exist */ 5546 ERR_set_mark(); 5547 5548 X509_LOOKUP_load_file_ex(lookup, NULL, X509_FILETYPE_DEFAULT, ctx->libctx, 5549 ctx->propq); 5550 5551 ERR_pop_to_mark(); 5552 5553 return 1; 5554 } 5555 5556 int SSL_CTX_set_default_verify_store(SSL_CTX *ctx) 5557 { 5558 X509_LOOKUP *lookup; 5559 5560 lookup = X509_STORE_add_lookup(ctx->cert_store, X509_LOOKUP_store()); 5561 if (lookup == NULL) 5562 return 0; 5563 5564 /* We ignore errors, in case the directory doesn't exist */ 5565 ERR_set_mark(); 5566 5567 X509_LOOKUP_add_store_ex(lookup, NULL, ctx->libctx, ctx->propq); 5568 5569 ERR_pop_to_mark(); 5570 5571 return 1; 5572 } 5573 5574 int SSL_CTX_load_verify_file(SSL_CTX *ctx, const char *CAfile) 5575 { 5576 return X509_STORE_load_file_ex(ctx->cert_store, CAfile, ctx->libctx, 5577 ctx->propq); 5578 } 5579 5580 int SSL_CTX_load_verify_dir(SSL_CTX *ctx, const char *CApath) 5581 { 5582 return X509_STORE_load_path(ctx->cert_store, CApath); 5583 } 5584 5585 int SSL_CTX_load_verify_store(SSL_CTX *ctx, const char *CAstore) 5586 { 5587 return X509_STORE_load_store_ex(ctx->cert_store, CAstore, ctx->libctx, 5588 ctx->propq); 5589 } 5590 5591 int SSL_CTX_load_verify_locations(SSL_CTX *ctx, const char *CAfile, 5592 const char *CApath) 5593 { 5594 if (CAfile == NULL && CApath == NULL) 5595 return 0; 5596 if (CAfile != NULL && !SSL_CTX_load_verify_file(ctx, CAfile)) 5597 return 0; 5598 if (CApath != NULL && !SSL_CTX_load_verify_dir(ctx, CApath)) 5599 return 0; 5600 return 1; 5601 } 5602 5603 void SSL_set_info_callback(SSL *ssl, 5604 void (*cb)(const SSL *ssl, int type, int val)) 5605 { 5606 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(ssl); 5607 5608 if (sc == NULL) 5609 return; 5610 5611 sc->info_callback = cb; 5612 } 5613 5614 /* 5615 * One compiler (Diab DCC) doesn't like argument names in returned function 5616 * pointer. 5617 */ 5618 void (*SSL_get_info_callback(const SSL *ssl))(const SSL * /* ssl */, 5619 int /* type */, 5620 int /* val */) 5621 { 5622 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(ssl); 5623 5624 if (sc == NULL) 5625 return NULL; 5626 5627 return sc->info_callback; 5628 } 5629 5630 void SSL_set_verify_result(SSL *ssl, long arg) 5631 { 5632 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(ssl); 5633 5634 if (sc == NULL) 5635 return; 5636 5637 sc->verify_result = arg; 5638 } 5639 5640 long SSL_get_verify_result(const SSL *ssl) 5641 { 5642 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(ssl); 5643 5644 if (sc == NULL) 5645 return 0; 5646 5647 return sc->verify_result; 5648 } 5649 5650 size_t SSL_get_client_random(const SSL *ssl, unsigned char *out, size_t outlen) 5651 { 5652 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(ssl); 5653 5654 if (sc == NULL) 5655 return 0; 5656 5657 if (outlen == 0) 5658 return sizeof(sc->s3.client_random); 5659 if (outlen > sizeof(sc->s3.client_random)) 5660 outlen = sizeof(sc->s3.client_random); 5661 memcpy(out, sc->s3.client_random, outlen); 5662 return outlen; 5663 } 5664 5665 size_t SSL_get_server_random(const SSL *ssl, unsigned char *out, size_t outlen) 5666 { 5667 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(ssl); 5668 5669 if (sc == NULL) 5670 return 0; 5671 5672 if (outlen == 0) 5673 return sizeof(sc->s3.server_random); 5674 if (outlen > sizeof(sc->s3.server_random)) 5675 outlen = sizeof(sc->s3.server_random); 5676 memcpy(out, sc->s3.server_random, outlen); 5677 return outlen; 5678 } 5679 5680 size_t SSL_SESSION_get_master_key(const SSL_SESSION *session, 5681 unsigned char *out, size_t outlen) 5682 { 5683 if (outlen == 0) 5684 return session->master_key_length; 5685 if (outlen > session->master_key_length) 5686 outlen = session->master_key_length; 5687 memcpy(out, session->master_key, outlen); 5688 return outlen; 5689 } 5690 5691 int SSL_SESSION_set1_master_key(SSL_SESSION *sess, const unsigned char *in, 5692 size_t len) 5693 { 5694 if (len > sizeof(sess->master_key)) 5695 return 0; 5696 5697 memcpy(sess->master_key, in, len); 5698 sess->master_key_length = len; 5699 return 1; 5700 } 5701 5702 int SSL_set_ex_data(SSL *s, int idx, void *arg) 5703 { 5704 return CRYPTO_set_ex_data(&s->ex_data, idx, arg); 5705 } 5706 5707 void *SSL_get_ex_data(const SSL *s, int idx) 5708 { 5709 return CRYPTO_get_ex_data(&s->ex_data, idx); 5710 } 5711 5712 int SSL_CTX_set_ex_data(SSL_CTX *s, int idx, void *arg) 5713 { 5714 return CRYPTO_set_ex_data(&s->ex_data, idx, arg); 5715 } 5716 5717 void *SSL_CTX_get_ex_data(const SSL_CTX *s, int idx) 5718 { 5719 return CRYPTO_get_ex_data(&s->ex_data, idx); 5720 } 5721 5722 X509_STORE *SSL_CTX_get_cert_store(const SSL_CTX *ctx) 5723 { 5724 return ctx->cert_store; 5725 } 5726 5727 void SSL_CTX_set_cert_store(SSL_CTX *ctx, X509_STORE *store) 5728 { 5729 X509_STORE_free(ctx->cert_store); 5730 ctx->cert_store = store; 5731 } 5732 5733 void SSL_CTX_set1_cert_store(SSL_CTX *ctx, X509_STORE *store) 5734 { 5735 if (store != NULL && !X509_STORE_up_ref(store)) 5736 return; 5737 5738 SSL_CTX_set_cert_store(ctx, store); 5739 } 5740 5741 int SSL_want(const SSL *s) 5742 { 5743 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s); 5744 5745 #ifndef OPENSSL_NO_QUIC 5746 if (IS_QUIC(s)) 5747 return ossl_quic_want(s); 5748 #endif 5749 5750 if (sc == NULL) 5751 return SSL_NOTHING; 5752 5753 return sc->rwstate; 5754 } 5755 5756 #ifndef OPENSSL_NO_PSK 5757 int SSL_CTX_use_psk_identity_hint(SSL_CTX *ctx, const char *identity_hint) 5758 { 5759 if (identity_hint != NULL && strlen(identity_hint) > PSK_MAX_IDENTITY_LEN) { 5760 ERR_raise(ERR_LIB_SSL, SSL_R_DATA_LENGTH_TOO_LONG); 5761 return 0; 5762 } 5763 OPENSSL_free(ctx->cert->psk_identity_hint); 5764 if (identity_hint != NULL) { 5765 ctx->cert->psk_identity_hint = OPENSSL_strdup(identity_hint); 5766 if (ctx->cert->psk_identity_hint == NULL) 5767 return 0; 5768 } else 5769 ctx->cert->psk_identity_hint = NULL; 5770 return 1; 5771 } 5772 5773 int SSL_use_psk_identity_hint(SSL *s, const char *identity_hint) 5774 { 5775 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s); 5776 5777 if (sc == NULL) 5778 return 0; 5779 5780 if (identity_hint != NULL && strlen(identity_hint) > PSK_MAX_IDENTITY_LEN) { 5781 ERR_raise(ERR_LIB_SSL, SSL_R_DATA_LENGTH_TOO_LONG); 5782 return 0; 5783 } 5784 OPENSSL_free(sc->cert->psk_identity_hint); 5785 if (identity_hint != NULL) { 5786 sc->cert->psk_identity_hint = OPENSSL_strdup(identity_hint); 5787 if (sc->cert->psk_identity_hint == NULL) 5788 return 0; 5789 } else 5790 sc->cert->psk_identity_hint = NULL; 5791 return 1; 5792 } 5793 5794 const char *SSL_get_psk_identity_hint(const SSL *s) 5795 { 5796 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s); 5797 5798 if (sc == NULL || sc->session == NULL) 5799 return NULL; 5800 5801 return sc->session->psk_identity_hint; 5802 } 5803 5804 const char *SSL_get_psk_identity(const SSL *s) 5805 { 5806 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s); 5807 5808 if (sc == NULL || sc->session == NULL) 5809 return NULL; 5810 5811 return sc->session->psk_identity; 5812 } 5813 5814 void SSL_set_psk_client_callback(SSL *s, SSL_psk_client_cb_func cb) 5815 { 5816 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s); 5817 5818 if (sc == NULL) 5819 return; 5820 5821 sc->psk_client_callback = cb; 5822 } 5823 5824 void SSL_CTX_set_psk_client_callback(SSL_CTX *ctx, SSL_psk_client_cb_func cb) 5825 { 5826 ctx->psk_client_callback = cb; 5827 } 5828 5829 void SSL_set_psk_server_callback(SSL *s, SSL_psk_server_cb_func cb) 5830 { 5831 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s); 5832 5833 if (sc == NULL) 5834 return; 5835 5836 sc->psk_server_callback = cb; 5837 } 5838 5839 void SSL_CTX_set_psk_server_callback(SSL_CTX *ctx, SSL_psk_server_cb_func cb) 5840 { 5841 ctx->psk_server_callback = cb; 5842 } 5843 #endif 5844 5845 void SSL_set_psk_find_session_callback(SSL *s, SSL_psk_find_session_cb_func cb) 5846 { 5847 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s); 5848 5849 if (sc == NULL) 5850 return; 5851 5852 sc->psk_find_session_cb = cb; 5853 } 5854 5855 void SSL_CTX_set_psk_find_session_callback(SSL_CTX *ctx, 5856 SSL_psk_find_session_cb_func cb) 5857 { 5858 ctx->psk_find_session_cb = cb; 5859 } 5860 5861 void SSL_set_psk_use_session_callback(SSL *s, SSL_psk_use_session_cb_func cb) 5862 { 5863 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s); 5864 5865 if (sc == NULL) 5866 return; 5867 5868 sc->psk_use_session_cb = cb; 5869 } 5870 5871 void SSL_CTX_set_psk_use_session_callback(SSL_CTX *ctx, 5872 SSL_psk_use_session_cb_func cb) 5873 { 5874 ctx->psk_use_session_cb = cb; 5875 } 5876 5877 void SSL_CTX_set_msg_callback(SSL_CTX *ctx, 5878 void (*cb)(int write_p, int version, 5879 int content_type, const void *buf, 5880 size_t len, SSL *ssl, void *arg)) 5881 { 5882 SSL_CTX_callback_ctrl(ctx, SSL_CTRL_SET_MSG_CALLBACK, (void (*)(void))cb); 5883 } 5884 5885 void SSL_set_msg_callback(SSL *ssl, 5886 void (*cb)(int write_p, int version, 5887 int content_type, const void *buf, 5888 size_t len, SSL *ssl, void *arg)) 5889 { 5890 SSL_callback_ctrl(ssl, SSL_CTRL_SET_MSG_CALLBACK, (void (*)(void))cb); 5891 } 5892 5893 void SSL_CTX_set_not_resumable_session_callback(SSL_CTX *ctx, 5894 int (*cb)(SSL *ssl, 5895 int 5896 is_forward_secure)) 5897 { 5898 SSL_CTX_callback_ctrl(ctx, SSL_CTRL_SET_NOT_RESUMABLE_SESS_CB, 5899 (void (*)(void))cb); 5900 } 5901 5902 void SSL_set_not_resumable_session_callback(SSL *ssl, 5903 int (*cb)(SSL *ssl, 5904 int is_forward_secure)) 5905 { 5906 SSL_callback_ctrl(ssl, SSL_CTRL_SET_NOT_RESUMABLE_SESS_CB, 5907 (void (*)(void))cb); 5908 } 5909 5910 void SSL_CTX_set_record_padding_callback(SSL_CTX *ctx, 5911 size_t (*cb)(SSL *ssl, int type, 5912 size_t len, void *arg)) 5913 { 5914 ctx->record_padding_cb = cb; 5915 } 5916 5917 void SSL_CTX_set_record_padding_callback_arg(SSL_CTX *ctx, void *arg) 5918 { 5919 ctx->record_padding_arg = arg; 5920 } 5921 5922 void *SSL_CTX_get_record_padding_callback_arg(const SSL_CTX *ctx) 5923 { 5924 return ctx->record_padding_arg; 5925 } 5926 5927 int SSL_CTX_set_block_padding_ex(SSL_CTX *ctx, size_t app_block_size, 5928 size_t hs_block_size) 5929 { 5930 if (IS_QUIC_CTX(ctx) && (app_block_size > 1 || hs_block_size > 1)) 5931 return 0; 5932 5933 /* block size of 0 or 1 is basically no padding */ 5934 if (app_block_size == 1) { 5935 ctx->block_padding = 0; 5936 } else if (app_block_size <= SSL3_RT_MAX_PLAIN_LENGTH) { 5937 ctx->block_padding = app_block_size; 5938 } else { 5939 return 0; 5940 } 5941 if (hs_block_size == 1) { 5942 ctx->hs_padding = 0; 5943 } else if (hs_block_size <= SSL3_RT_MAX_PLAIN_LENGTH) { 5944 ctx->hs_padding = hs_block_size; 5945 } else { 5946 return 0; 5947 } 5948 return 1; 5949 } 5950 5951 int SSL_CTX_set_block_padding(SSL_CTX *ctx, size_t block_size) 5952 { 5953 return SSL_CTX_set_block_padding_ex(ctx, block_size, block_size); 5954 } 5955 5956 int SSL_set_record_padding_callback(SSL *ssl, 5957 size_t (*cb)(SSL *ssl, int type, 5958 size_t len, void *arg)) 5959 { 5960 BIO *b; 5961 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL_ONLY(ssl); 5962 5963 if (sc == NULL) 5964 return 0; 5965 5966 b = SSL_get_wbio(ssl); 5967 if (b == NULL || !BIO_get_ktls_send(b)) { 5968 sc->rlayer.record_padding_cb = cb; 5969 return 1; 5970 } 5971 return 0; 5972 } 5973 5974 void SSL_set_record_padding_callback_arg(SSL *ssl, void *arg) 5975 { 5976 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(ssl); 5977 5978 if (sc == NULL) 5979 return; 5980 5981 sc->rlayer.record_padding_arg = arg; 5982 } 5983 5984 void *SSL_get_record_padding_callback_arg(const SSL *ssl) 5985 { 5986 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(ssl); 5987 5988 if (sc == NULL) 5989 return NULL; 5990 5991 return sc->rlayer.record_padding_arg; 5992 } 5993 5994 int SSL_set_block_padding_ex(SSL *ssl, size_t app_block_size, 5995 size_t hs_block_size) 5996 { 5997 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(ssl); 5998 5999 if (sc == NULL 6000 || (IS_QUIC(ssl) 6001 && (app_block_size > 1 || hs_block_size > 1))) 6002 return 0; 6003 6004 /* block size of 0 or 1 is basically no padding */ 6005 if (app_block_size == 1) { 6006 sc->rlayer.block_padding = 0; 6007 } else if (app_block_size <= SSL3_RT_MAX_PLAIN_LENGTH) { 6008 sc->rlayer.block_padding = app_block_size; 6009 } else { 6010 return 0; 6011 } 6012 if (hs_block_size == 1) { 6013 sc->rlayer.hs_padding = 0; 6014 } else if (hs_block_size <= SSL3_RT_MAX_PLAIN_LENGTH) { 6015 sc->rlayer.hs_padding = hs_block_size; 6016 } else { 6017 return 0; 6018 } 6019 return 1; 6020 } 6021 6022 int SSL_set_block_padding(SSL *ssl, size_t block_size) 6023 { 6024 return SSL_set_block_padding_ex(ssl, block_size, block_size); 6025 } 6026 6027 int SSL_set_num_tickets(SSL *s, size_t num_tickets) 6028 { 6029 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s); 6030 6031 if (sc == NULL) 6032 return 0; 6033 6034 sc->num_tickets = num_tickets; 6035 6036 return 1; 6037 } 6038 6039 size_t SSL_get_num_tickets(const SSL *s) 6040 { 6041 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s); 6042 6043 if (sc == NULL) 6044 return 0; 6045 6046 return sc->num_tickets; 6047 } 6048 6049 int SSL_CTX_set_num_tickets(SSL_CTX *ctx, size_t num_tickets) 6050 { 6051 ctx->num_tickets = num_tickets; 6052 6053 return 1; 6054 } 6055 6056 size_t SSL_CTX_get_num_tickets(const SSL_CTX *ctx) 6057 { 6058 return ctx->num_tickets; 6059 } 6060 6061 /* Retrieve handshake hashes */ 6062 int ssl_handshake_hash(SSL_CONNECTION *s, 6063 unsigned char *out, size_t outlen, 6064 size_t *hashlen) 6065 { 6066 EVP_MD_CTX *ctx = NULL; 6067 EVP_MD_CTX *hdgst = s->s3.handshake_dgst; 6068 int hashleni = EVP_MD_CTX_get_size(hdgst); 6069 int ret = 0; 6070 6071 if (hashleni < 0 || (size_t)hashleni > outlen) { 6072 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); 6073 goto err; 6074 } 6075 6076 ctx = EVP_MD_CTX_new(); 6077 if (ctx == NULL) { 6078 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); 6079 goto err; 6080 } 6081 6082 if (!EVP_MD_CTX_copy_ex(ctx, hdgst) 6083 || EVP_DigestFinal_ex(ctx, out, NULL) <= 0) { 6084 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); 6085 goto err; 6086 } 6087 6088 *hashlen = hashleni; 6089 6090 ret = 1; 6091 err: 6092 EVP_MD_CTX_free(ctx); 6093 return ret; 6094 } 6095 6096 int SSL_session_reused(const SSL *s) 6097 { 6098 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s); 6099 6100 if (sc == NULL) 6101 return 0; 6102 6103 return sc->hit; 6104 } 6105 6106 int SSL_is_server(const SSL *s) 6107 { 6108 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s); 6109 6110 if (sc == NULL) 6111 return 0; 6112 6113 return sc->server; 6114 } 6115 6116 #ifndef OPENSSL_NO_DEPRECATED_1_1_0 6117 void SSL_set_debug(SSL *s, int debug) 6118 { 6119 /* Old function was do-nothing anyway... */ 6120 (void)s; 6121 (void)debug; 6122 } 6123 #endif 6124 6125 void SSL_set_security_level(SSL *s, int level) 6126 { 6127 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s); 6128 6129 if (sc == NULL) 6130 return; 6131 6132 sc->cert->sec_level = level; 6133 } 6134 6135 int SSL_get_security_level(const SSL *s) 6136 { 6137 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s); 6138 6139 if (sc == NULL) 6140 return 0; 6141 6142 return sc->cert->sec_level; 6143 } 6144 6145 void SSL_set_security_callback(SSL *s, 6146 int (*cb)(const SSL *s, const SSL_CTX *ctx, 6147 int op, int bits, int nid, 6148 void *other, void *ex)) 6149 { 6150 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s); 6151 6152 if (sc == NULL) 6153 return; 6154 6155 sc->cert->sec_cb = cb; 6156 } 6157 6158 int (*SSL_get_security_callback(const SSL *s))(const SSL *s, 6159 const SSL_CTX *ctx, int op, 6160 int bits, int nid, void *other, 6161 void *ex) 6162 { 6163 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s); 6164 6165 if (sc == NULL) 6166 return NULL; 6167 6168 return sc->cert->sec_cb; 6169 } 6170 6171 void SSL_set0_security_ex_data(SSL *s, void *ex) 6172 { 6173 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s); 6174 6175 if (sc == NULL) 6176 return; 6177 6178 sc->cert->sec_ex = ex; 6179 } 6180 6181 void *SSL_get0_security_ex_data(const SSL *s) 6182 { 6183 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s); 6184 6185 if (sc == NULL) 6186 return NULL; 6187 6188 return sc->cert->sec_ex; 6189 } 6190 6191 void SSL_CTX_set_security_level(SSL_CTX *ctx, int level) 6192 { 6193 ctx->cert->sec_level = level; 6194 } 6195 6196 int SSL_CTX_get_security_level(const SSL_CTX *ctx) 6197 { 6198 return ctx->cert->sec_level; 6199 } 6200 6201 void SSL_CTX_set_security_callback(SSL_CTX *ctx, 6202 int (*cb)(const SSL *s, const SSL_CTX *ctx, 6203 int op, int bits, int nid, 6204 void *other, void *ex)) 6205 { 6206 ctx->cert->sec_cb = cb; 6207 } 6208 6209 int (*SSL_CTX_get_security_callback(const SSL_CTX *ctx))(const SSL *s, 6210 const SSL_CTX *ctx, 6211 int op, int bits, 6212 int nid, 6213 void *other, 6214 void *ex) 6215 { 6216 return ctx->cert->sec_cb; 6217 } 6218 6219 void SSL_CTX_set0_security_ex_data(SSL_CTX *ctx, void *ex) 6220 { 6221 ctx->cert->sec_ex = ex; 6222 } 6223 6224 void *SSL_CTX_get0_security_ex_data(const SSL_CTX *ctx) 6225 { 6226 return ctx->cert->sec_ex; 6227 } 6228 6229 uint64_t SSL_CTX_get_options(const SSL_CTX *ctx) 6230 { 6231 return ctx->options; 6232 } 6233 6234 uint64_t SSL_get_options(const SSL *s) 6235 { 6236 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s); 6237 6238 #ifndef OPENSSL_NO_QUIC 6239 if (IS_QUIC(s)) 6240 return ossl_quic_get_options(s); 6241 #endif 6242 6243 if (sc == NULL) 6244 return 0; 6245 6246 return sc->options; 6247 } 6248 6249 uint64_t SSL_CTX_set_options(SSL_CTX *ctx, uint64_t op) 6250 { 6251 return ctx->options |= op; 6252 } 6253 6254 uint64_t SSL_set_options(SSL *s, uint64_t op) 6255 { 6256 SSL_CONNECTION *sc; 6257 OSSL_PARAM options[2], *opts = options; 6258 6259 #ifndef OPENSSL_NO_QUIC 6260 if (IS_QUIC(s)) 6261 return ossl_quic_set_options(s, op); 6262 #endif 6263 6264 sc = SSL_CONNECTION_FROM_SSL(s); 6265 if (sc == NULL) 6266 return 0; 6267 6268 sc->options |= op; 6269 6270 *opts++ = OSSL_PARAM_construct_uint64(OSSL_LIBSSL_RECORD_LAYER_PARAM_OPTIONS, 6271 &sc->options); 6272 *opts = OSSL_PARAM_construct_end(); 6273 6274 /* Ignore return value */ 6275 sc->rlayer.rrlmethod->set_options(sc->rlayer.rrl, options); 6276 sc->rlayer.wrlmethod->set_options(sc->rlayer.wrl, options); 6277 6278 return sc->options; 6279 } 6280 6281 uint64_t SSL_CTX_clear_options(SSL_CTX *ctx, uint64_t op) 6282 { 6283 return ctx->options &= ~op; 6284 } 6285 6286 uint64_t SSL_clear_options(SSL *s, uint64_t op) 6287 { 6288 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s); 6289 OSSL_PARAM options[2], *opts = options; 6290 6291 #ifndef OPENSSL_NO_QUIC 6292 if (IS_QUIC(s)) 6293 return ossl_quic_clear_options(s, op); 6294 #endif 6295 6296 if (sc == NULL) 6297 return 0; 6298 6299 sc->options &= ~op; 6300 6301 *opts++ = OSSL_PARAM_construct_uint64(OSSL_LIBSSL_RECORD_LAYER_PARAM_OPTIONS, 6302 &sc->options); 6303 *opts = OSSL_PARAM_construct_end(); 6304 6305 /* Ignore return value */ 6306 sc->rlayer.rrlmethod->set_options(sc->rlayer.rrl, options); 6307 sc->rlayer.wrlmethod->set_options(sc->rlayer.wrl, options); 6308 6309 return sc->options; 6310 } 6311 6312 STACK_OF(X509) *SSL_get0_verified_chain(const SSL *s) 6313 { 6314 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s); 6315 6316 if (sc == NULL) 6317 return NULL; 6318 6319 return sc->verified_chain; 6320 } 6321 6322 IMPLEMENT_OBJ_BSEARCH_GLOBAL_CMP_FN(SSL_CIPHER, SSL_CIPHER, ssl_cipher_id); 6323 6324 #ifndef OPENSSL_NO_CT 6325 6326 /* 6327 * Moves SCTs from the |src| stack to the |dst| stack. 6328 * The source of each SCT will be set to |origin|. 6329 * If |dst| points to a NULL pointer, a new stack will be created and owned by 6330 * the caller. 6331 * Returns the number of SCTs moved, or a negative integer if an error occurs. 6332 * The |dst| stack is created and possibly partially populated even in case 6333 * of error, likewise the |src| stack may be left in an intermediate state. 6334 */ 6335 static int ct_move_scts(STACK_OF(SCT) **dst, STACK_OF(SCT) *src, 6336 sct_source_t origin) 6337 { 6338 int scts_moved = 0; 6339 SCT *sct = NULL; 6340 6341 if (*dst == NULL) { 6342 *dst = sk_SCT_new_null(); 6343 if (*dst == NULL) { 6344 ERR_raise(ERR_LIB_SSL, ERR_R_CRYPTO_LIB); 6345 goto err; 6346 } 6347 } 6348 6349 while ((sct = sk_SCT_pop(src)) != NULL) { 6350 if (SCT_set_source(sct, origin) != 1) 6351 goto err; 6352 6353 if (!sk_SCT_push(*dst, sct)) 6354 goto err; 6355 scts_moved += 1; 6356 } 6357 6358 return scts_moved; 6359 err: 6360 SCT_free(sct); 6361 return -1; 6362 } 6363 6364 /* 6365 * Look for data collected during ServerHello and parse if found. 6366 * Returns the number of SCTs extracted. 6367 */ 6368 static int ct_extract_tls_extension_scts(SSL_CONNECTION *s) 6369 { 6370 int scts_extracted = 0; 6371 6372 if (s->ext.scts != NULL) { 6373 const unsigned char *p = s->ext.scts; 6374 STACK_OF(SCT) *scts = o2i_SCT_LIST(NULL, &p, s->ext.scts_len); 6375 6376 scts_extracted = ct_move_scts(&s->scts, scts, SCT_SOURCE_TLS_EXTENSION); 6377 6378 SCT_LIST_free(scts); 6379 } 6380 6381 return scts_extracted; 6382 } 6383 6384 /* 6385 * Checks for an OCSP response and then attempts to extract any SCTs found if it 6386 * contains an SCT X509 extension. They will be stored in |s->scts|. 6387 * Returns: 6388 * - The number of SCTs extracted, assuming an OCSP response exists. 6389 * - 0 if no OCSP response exists or it contains no SCTs. 6390 * - A negative integer if an error occurs. 6391 */ 6392 static int ct_extract_ocsp_response_scts(SSL_CONNECTION *s) 6393 { 6394 #ifndef OPENSSL_NO_OCSP 6395 int scts_extracted = 0; 6396 const unsigned char *p; 6397 OCSP_BASICRESP *br = NULL; 6398 OCSP_RESPONSE *rsp = NULL; 6399 STACK_OF(SCT) *scts = NULL; 6400 int i; 6401 6402 if (s->ext.ocsp.resp == NULL || s->ext.ocsp.resp_len == 0) 6403 goto err; 6404 6405 p = s->ext.ocsp.resp; 6406 rsp = d2i_OCSP_RESPONSE(NULL, &p, (int)s->ext.ocsp.resp_len); 6407 if (rsp == NULL) 6408 goto err; 6409 6410 br = OCSP_response_get1_basic(rsp); 6411 if (br == NULL) 6412 goto err; 6413 6414 for (i = 0; i < OCSP_resp_count(br); ++i) { 6415 OCSP_SINGLERESP *single = OCSP_resp_get0(br, i); 6416 6417 if (single == NULL) 6418 continue; 6419 6420 scts = OCSP_SINGLERESP_get1_ext_d2i(single, NID_ct_cert_scts, NULL, NULL); 6421 scts_extracted = ct_move_scts(&s->scts, scts, SCT_SOURCE_OCSP_STAPLED_RESPONSE); 6422 if (scts_extracted < 0) 6423 goto err; 6424 } 6425 err: 6426 SCT_LIST_free(scts); 6427 OCSP_BASICRESP_free(br); 6428 OCSP_RESPONSE_free(rsp); 6429 return scts_extracted; 6430 #else 6431 /* Behave as if no OCSP response exists */ 6432 return 0; 6433 #endif 6434 } 6435 6436 /* 6437 * Attempts to extract SCTs from the peer certificate. 6438 * Return the number of SCTs extracted, or a negative integer if an error 6439 * occurs. 6440 */ 6441 static int ct_extract_x509v3_extension_scts(SSL_CONNECTION *s) 6442 { 6443 int scts_extracted = 0; 6444 X509 *cert = s->session != NULL ? s->session->peer : NULL; 6445 6446 if (cert != NULL) { 6447 STACK_OF(SCT) *scts = X509_get_ext_d2i(cert, NID_ct_precert_scts, NULL, NULL); 6448 6449 scts_extracted = ct_move_scts(&s->scts, scts, SCT_SOURCE_X509V3_EXTENSION); 6450 6451 SCT_LIST_free(scts); 6452 } 6453 6454 return scts_extracted; 6455 } 6456 6457 /* 6458 * Attempts to find all received SCTs by checking TLS extensions, the OCSP 6459 * response (if it exists) and X509v3 extensions in the certificate. 6460 * Returns NULL if an error occurs. 6461 */ 6462 const STACK_OF(SCT) *SSL_get0_peer_scts(SSL *s) 6463 { 6464 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s); 6465 6466 if (sc == NULL) 6467 return NULL; 6468 6469 if (!sc->scts_parsed) { 6470 if (ct_extract_tls_extension_scts(sc) < 0 || ct_extract_ocsp_response_scts(sc) < 0 || ct_extract_x509v3_extension_scts(sc) < 0) 6471 goto err; 6472 6473 sc->scts_parsed = 1; 6474 } 6475 return sc->scts; 6476 err: 6477 return NULL; 6478 } 6479 6480 static int ct_permissive(const CT_POLICY_EVAL_CTX *ctx, 6481 const STACK_OF(SCT) *scts, void *unused_arg) 6482 { 6483 return 1; 6484 } 6485 6486 static int ct_strict(const CT_POLICY_EVAL_CTX *ctx, 6487 const STACK_OF(SCT) *scts, void *unused_arg) 6488 { 6489 int count = scts != NULL ? sk_SCT_num(scts) : 0; 6490 int i; 6491 6492 for (i = 0; i < count; ++i) { 6493 SCT *sct = sk_SCT_value(scts, i); 6494 int status = SCT_get_validation_status(sct); 6495 6496 if (status == SCT_VALIDATION_STATUS_VALID) 6497 return 1; 6498 } 6499 ERR_raise(ERR_LIB_SSL, SSL_R_NO_VALID_SCTS); 6500 return 0; 6501 } 6502 6503 int SSL_set_ct_validation_callback(SSL *s, ssl_ct_validation_cb callback, 6504 void *arg) 6505 { 6506 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s); 6507 6508 if (sc == NULL) 6509 return 0; 6510 6511 /* 6512 * Since code exists that uses the custom extension handler for CT, look 6513 * for this and throw an error if they have already registered to use CT. 6514 */ 6515 if (callback != NULL && SSL_CTX_has_client_custom_ext(s->ctx, TLSEXT_TYPE_signed_certificate_timestamp)) { 6516 ERR_raise(ERR_LIB_SSL, SSL_R_CUSTOM_EXT_HANDLER_ALREADY_INSTALLED); 6517 return 0; 6518 } 6519 6520 if (callback != NULL) { 6521 /* 6522 * If we are validating CT, then we MUST accept SCTs served via OCSP 6523 */ 6524 if (!SSL_set_tlsext_status_type(s, TLSEXT_STATUSTYPE_ocsp)) 6525 return 0; 6526 } 6527 6528 sc->ct_validation_callback = callback; 6529 sc->ct_validation_callback_arg = arg; 6530 6531 return 1; 6532 } 6533 6534 int SSL_CTX_set_ct_validation_callback(SSL_CTX *ctx, 6535 ssl_ct_validation_cb callback, void *arg) 6536 { 6537 /* 6538 * Since code exists that uses the custom extension handler for CT, look for 6539 * this and throw an error if they have already registered to use CT. 6540 */ 6541 if (callback != NULL && SSL_CTX_has_client_custom_ext(ctx, TLSEXT_TYPE_signed_certificate_timestamp)) { 6542 ERR_raise(ERR_LIB_SSL, SSL_R_CUSTOM_EXT_HANDLER_ALREADY_INSTALLED); 6543 return 0; 6544 } 6545 6546 ctx->ct_validation_callback = callback; 6547 ctx->ct_validation_callback_arg = arg; 6548 return 1; 6549 } 6550 6551 int SSL_ct_is_enabled(const SSL *s) 6552 { 6553 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s); 6554 6555 if (sc == NULL) 6556 return 0; 6557 6558 return sc->ct_validation_callback != NULL; 6559 } 6560 6561 int SSL_CTX_ct_is_enabled(const SSL_CTX *ctx) 6562 { 6563 return ctx->ct_validation_callback != NULL; 6564 } 6565 6566 int ssl_validate_ct(SSL_CONNECTION *s) 6567 { 6568 int ret = 0; 6569 X509 *cert = s->session != NULL ? s->session->peer : NULL; 6570 X509 *issuer; 6571 SSL_DANE *dane = &s->dane; 6572 CT_POLICY_EVAL_CTX *ctx = NULL; 6573 const STACK_OF(SCT) *scts; 6574 6575 /* 6576 * If no callback is set, the peer is anonymous, or its chain is invalid, 6577 * skip SCT validation - just return success. Applications that continue 6578 * handshakes without certificates, with unverified chains, or pinned leaf 6579 * certificates are outside the scope of the WebPKI and CT. 6580 * 6581 * The above exclusions notwithstanding the vast majority of peers will 6582 * have rather ordinary certificate chains validated by typical 6583 * applications that perform certificate verification and therefore will 6584 * process SCTs when enabled. 6585 */ 6586 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) 6587 return 1; 6588 6589 /* 6590 * CT not applicable for chains validated via DANE-TA(2) or DANE-EE(3) 6591 * trust-anchors. See https://tools.ietf.org/html/rfc7671#section-4.2 6592 */ 6593 if (DANETLS_ENABLED(dane) && dane->mtlsa != NULL) { 6594 switch (dane->mtlsa->usage) { 6595 case DANETLS_USAGE_DANE_TA: 6596 case DANETLS_USAGE_DANE_EE: 6597 return 1; 6598 } 6599 } 6600 6601 ctx = CT_POLICY_EVAL_CTX_new_ex(SSL_CONNECTION_GET_CTX(s)->libctx, 6602 SSL_CONNECTION_GET_CTX(s)->propq); 6603 if (ctx == NULL) { 6604 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_CT_LIB); 6605 goto end; 6606 } 6607 6608 issuer = sk_X509_value(s->verified_chain, 1); 6609 CT_POLICY_EVAL_CTX_set1_cert(ctx, cert); 6610 CT_POLICY_EVAL_CTX_set1_issuer(ctx, issuer); 6611 CT_POLICY_EVAL_CTX_set_shared_CTLOG_STORE(ctx, 6612 SSL_CONNECTION_GET_CTX(s)->ctlog_store); 6613 CT_POLICY_EVAL_CTX_set_time( 6614 ctx, (uint64_t)SSL_SESSION_get_time_ex(s->session) * 1000); 6615 6616 scts = SSL_get0_peer_scts(SSL_CONNECTION_GET_SSL(s)); 6617 6618 /* 6619 * This function returns success (> 0) only when all the SCTs are valid, 0 6620 * when some are invalid, and < 0 on various internal errors (out of 6621 * memory, etc.). Having some, or even all, invalid SCTs is not sufficient 6622 * reason to abort the handshake, that decision is up to the callback. 6623 * Therefore, we error out only in the unexpected case that the return 6624 * value is negative. 6625 * 6626 * XXX: One might well argue that the return value of this function is an 6627 * unfortunate design choice. Its job is only to determine the validation 6628 * status of each of the provided SCTs. So long as it correctly separates 6629 * the wheat from the chaff it should return success. Failure in this case 6630 * ought to correspond to an inability to carry out its duties. 6631 */ 6632 if (SCT_LIST_validate(scts, ctx) < 0) { 6633 SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_R_SCT_VERIFICATION_FAILED); 6634 goto end; 6635 } 6636 6637 ret = s->ct_validation_callback(ctx, scts, s->ct_validation_callback_arg); 6638 if (ret < 0) 6639 ret = 0; /* This function returns 0 on failure */ 6640 if (!ret) 6641 SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_R_CALLBACK_FAILED); 6642 6643 end: 6644 CT_POLICY_EVAL_CTX_free(ctx); 6645 /* 6646 * With SSL_VERIFY_NONE the session may be cached and reused despite a 6647 * failure return code here. Also the application may wish the complete 6648 * the handshake, and then disconnect cleanly at a higher layer, after 6649 * checking the verification status of the completed connection. 6650 * 6651 * We therefore force a certificate verification failure which will be 6652 * visible via SSL_get_verify_result() and cached as part of any resumed 6653 * session. 6654 * 6655 * Note: the permissive callback is for information gathering only, always 6656 * returns success, and does not affect verification status. Only the 6657 * strict callback or a custom application-specified callback can trigger 6658 * connection failure or record a verification error. 6659 */ 6660 if (ret <= 0) 6661 s->verify_result = X509_V_ERR_NO_VALID_SCTS; 6662 return ret; 6663 } 6664 6665 int SSL_CTX_enable_ct(SSL_CTX *ctx, int validation_mode) 6666 { 6667 switch (validation_mode) { 6668 default: 6669 ERR_raise(ERR_LIB_SSL, SSL_R_INVALID_CT_VALIDATION_TYPE); 6670 return 0; 6671 case SSL_CT_VALIDATION_PERMISSIVE: 6672 return SSL_CTX_set_ct_validation_callback(ctx, ct_permissive, NULL); 6673 case SSL_CT_VALIDATION_STRICT: 6674 return SSL_CTX_set_ct_validation_callback(ctx, ct_strict, NULL); 6675 } 6676 } 6677 6678 int SSL_enable_ct(SSL *s, int validation_mode) 6679 { 6680 switch (validation_mode) { 6681 default: 6682 ERR_raise(ERR_LIB_SSL, SSL_R_INVALID_CT_VALIDATION_TYPE); 6683 return 0; 6684 case SSL_CT_VALIDATION_PERMISSIVE: 6685 return SSL_set_ct_validation_callback(s, ct_permissive, NULL); 6686 case SSL_CT_VALIDATION_STRICT: 6687 return SSL_set_ct_validation_callback(s, ct_strict, NULL); 6688 } 6689 } 6690 6691 int SSL_CTX_set_default_ctlog_list_file(SSL_CTX *ctx) 6692 { 6693 return CTLOG_STORE_load_default_file(ctx->ctlog_store); 6694 } 6695 6696 int SSL_CTX_set_ctlog_list_file(SSL_CTX *ctx, const char *path) 6697 { 6698 return CTLOG_STORE_load_file(ctx->ctlog_store, path); 6699 } 6700 6701 void SSL_CTX_set0_ctlog_store(SSL_CTX *ctx, CTLOG_STORE *logs) 6702 { 6703 CTLOG_STORE_free(ctx->ctlog_store); 6704 ctx->ctlog_store = logs; 6705 } 6706 6707 const CTLOG_STORE *SSL_CTX_get0_ctlog_store(const SSL_CTX *ctx) 6708 { 6709 return ctx->ctlog_store; 6710 } 6711 6712 #endif /* OPENSSL_NO_CT */ 6713 6714 void SSL_CTX_set_client_hello_cb(SSL_CTX *c, SSL_client_hello_cb_fn cb, 6715 void *arg) 6716 { 6717 c->client_hello_cb = cb; 6718 c->client_hello_cb_arg = arg; 6719 } 6720 6721 void SSL_CTX_set_new_pending_conn_cb(SSL_CTX *c, SSL_new_pending_conn_cb_fn cb, 6722 void *arg) 6723 { 6724 c->new_pending_conn_cb = cb; 6725 c->new_pending_conn_arg = arg; 6726 } 6727 6728 int SSL_client_hello_isv2(SSL *s) 6729 { 6730 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s); 6731 6732 if (sc == NULL) 6733 return 0; 6734 6735 if (sc->clienthello == NULL) 6736 return 0; 6737 return sc->clienthello->isv2; 6738 } 6739 6740 unsigned int SSL_client_hello_get0_legacy_version(SSL *s) 6741 { 6742 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s); 6743 6744 if (sc == NULL) 6745 return 0; 6746 6747 if (sc->clienthello == NULL) 6748 return 0; 6749 return sc->clienthello->legacy_version; 6750 } 6751 6752 size_t SSL_client_hello_get0_random(SSL *s, const unsigned char **out) 6753 { 6754 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s); 6755 6756 if (sc == NULL) 6757 return 0; 6758 6759 if (sc->clienthello == NULL) 6760 return 0; 6761 if (out != NULL) 6762 *out = sc->clienthello->random; 6763 return SSL3_RANDOM_SIZE; 6764 } 6765 6766 size_t SSL_client_hello_get0_session_id(SSL *s, const unsigned char **out) 6767 { 6768 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s); 6769 6770 if (sc == NULL) 6771 return 0; 6772 6773 if (sc->clienthello == NULL) 6774 return 0; 6775 if (out != NULL) 6776 *out = sc->clienthello->session_id; 6777 return sc->clienthello->session_id_len; 6778 } 6779 6780 size_t SSL_client_hello_get0_ciphers(SSL *s, const unsigned char **out) 6781 { 6782 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s); 6783 6784 if (sc == NULL) 6785 return 0; 6786 6787 if (sc->clienthello == NULL) 6788 return 0; 6789 if (out != NULL) 6790 *out = PACKET_data(&sc->clienthello->ciphersuites); 6791 return PACKET_remaining(&sc->clienthello->ciphersuites); 6792 } 6793 6794 size_t SSL_client_hello_get0_compression_methods(SSL *s, const unsigned char **out) 6795 { 6796 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s); 6797 6798 if (sc == NULL) 6799 return 0; 6800 6801 if (sc->clienthello == NULL) 6802 return 0; 6803 if (out != NULL) 6804 *out = sc->clienthello->compressions; 6805 return sc->clienthello->compressions_len; 6806 } 6807 6808 int SSL_client_hello_get1_extensions_present(SSL *s, int **out, size_t *outlen) 6809 { 6810 RAW_EXTENSION *ext; 6811 int *present; 6812 size_t num = 0, i; 6813 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s); 6814 6815 if (sc == NULL) 6816 return 0; 6817 6818 if (sc->clienthello == NULL || out == NULL || outlen == NULL) 6819 return 0; 6820 for (i = 0; i < sc->clienthello->pre_proc_exts_len; i++) { 6821 ext = sc->clienthello->pre_proc_exts + i; 6822 if (ext->present) 6823 num++; 6824 } 6825 if (num == 0) { 6826 *out = NULL; 6827 *outlen = 0; 6828 return 1; 6829 } 6830 if ((present = OPENSSL_malloc(sizeof(*present) * num)) == NULL) 6831 return 0; 6832 for (i = 0; i < sc->clienthello->pre_proc_exts_len; i++) { 6833 ext = sc->clienthello->pre_proc_exts + i; 6834 if (ext->present) { 6835 if (ext->received_order >= num) 6836 goto err; 6837 present[ext->received_order] = ext->type; 6838 } 6839 } 6840 *out = present; 6841 *outlen = num; 6842 return 1; 6843 err: 6844 OPENSSL_free(present); 6845 return 0; 6846 } 6847 6848 int SSL_client_hello_get_extension_order(SSL *s, uint16_t *exts, size_t *num_exts) 6849 { 6850 RAW_EXTENSION *ext; 6851 size_t num = 0, i; 6852 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s); 6853 6854 if (sc == NULL) 6855 return 0; 6856 6857 if (sc->clienthello == NULL || num_exts == NULL) 6858 return 0; 6859 for (i = 0; i < sc->clienthello->pre_proc_exts_len; i++) { 6860 ext = sc->clienthello->pre_proc_exts + i; 6861 if (ext->present) 6862 num++; 6863 } 6864 if (num == 0) { 6865 *num_exts = 0; 6866 return 1; 6867 } 6868 if (exts == NULL) { 6869 *num_exts = num; 6870 return 1; 6871 } 6872 if (*num_exts < num) 6873 return 0; 6874 for (i = 0; i < sc->clienthello->pre_proc_exts_len; i++) { 6875 ext = sc->clienthello->pre_proc_exts + i; 6876 if (ext->present) { 6877 if (ext->received_order >= num) 6878 return 0; 6879 exts[ext->received_order] = ext->type; 6880 } 6881 } 6882 *num_exts = num; 6883 return 1; 6884 } 6885 6886 int SSL_client_hello_get0_ext(SSL *s, unsigned int type, const unsigned char **out, 6887 size_t *outlen) 6888 { 6889 size_t i; 6890 RAW_EXTENSION *r; 6891 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s); 6892 6893 if (sc == NULL) 6894 return 0; 6895 6896 if (sc->clienthello == NULL) 6897 return 0; 6898 for (i = 0; i < sc->clienthello->pre_proc_exts_len; ++i) { 6899 r = sc->clienthello->pre_proc_exts + i; 6900 if (r->present && r->type == type) { 6901 if (out != NULL) 6902 *out = PACKET_data(&r->data); 6903 if (outlen != NULL) 6904 *outlen = PACKET_remaining(&r->data); 6905 return 1; 6906 } 6907 } 6908 return 0; 6909 } 6910 6911 int SSL_free_buffers(SSL *ssl) 6912 { 6913 RECORD_LAYER *rl; 6914 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL_ONLY(ssl); 6915 6916 if (sc == NULL) 6917 return 0; 6918 6919 rl = &sc->rlayer; 6920 6921 return rl->rrlmethod->free_buffers(rl->rrl) 6922 && rl->wrlmethod->free_buffers(rl->wrl); 6923 } 6924 6925 int SSL_alloc_buffers(SSL *ssl) 6926 { 6927 RECORD_LAYER *rl; 6928 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(ssl); 6929 6930 if (sc == NULL) 6931 return 0; 6932 6933 /* QUIC always has buffers allocated. */ 6934 if (IS_QUIC(ssl)) 6935 return 1; 6936 6937 rl = &sc->rlayer; 6938 6939 return rl->rrlmethod->alloc_buffers(rl->rrl) 6940 && rl->wrlmethod->alloc_buffers(rl->wrl); 6941 } 6942 6943 void SSL_CTX_set_keylog_callback(SSL_CTX *ctx, SSL_CTX_keylog_cb_func cb) 6944 { 6945 ctx->keylog_callback = cb; 6946 } 6947 6948 SSL_CTX_keylog_cb_func SSL_CTX_get_keylog_callback(const SSL_CTX *ctx) 6949 { 6950 return ctx->keylog_callback; 6951 } 6952 6953 static int nss_keylog_int(const char *prefix, 6954 SSL_CONNECTION *sc, 6955 const uint8_t *parameter_1, 6956 size_t parameter_1_len, 6957 const uint8_t *parameter_2, 6958 size_t parameter_2_len) 6959 { 6960 char *out = NULL; 6961 char *cursor = NULL; 6962 size_t out_len = 0, i, prefix_len; 6963 SSL_CTX *sctx = SSL_CONNECTION_GET_CTX(sc); 6964 6965 #ifndef OPENSSL_NO_SSLKEYLOG 6966 if (sctx->keylog_callback == NULL && sctx->do_sslkeylog == 0) 6967 return 1; 6968 #else 6969 if (sctx->keylog_callback == NULL) 6970 return 1; 6971 #endif 6972 6973 /* 6974 * Our output buffer will contain the following strings, rendered with 6975 * space characters in between, terminated by a NULL character: first the 6976 * prefix, then the first parameter, then the second parameter. The 6977 * meaning of each parameter depends on the specific key material being 6978 * logged. Note that the first and second parameters are encoded in 6979 * hexadecimal, so we need a buffer that is twice their lengths. 6980 */ 6981 prefix_len = strlen(prefix); 6982 out_len = prefix_len + (2 * parameter_1_len) + (2 * parameter_2_len) + 3; 6983 if ((out = cursor = OPENSSL_malloc(out_len)) == NULL) 6984 return 0; 6985 6986 memcpy(cursor, prefix, prefix_len); 6987 cursor += prefix_len; 6988 *cursor++ = ' '; 6989 6990 for (i = 0; i < parameter_1_len; ++i) 6991 cursor += ossl_to_lowerhex(cursor, parameter_1[i]); 6992 *cursor++ = ' '; 6993 6994 for (i = 0; i < parameter_2_len; ++i) 6995 cursor += ossl_to_lowerhex(cursor, parameter_2[i]); 6996 *cursor = '\0'; 6997 6998 #ifndef OPENSSL_NO_SSLKEYLOG 6999 if (sctx->do_sslkeylog == 1) 7000 do_sslkeylogfile(SSL_CONNECTION_GET_SSL(sc), (const char *)out); 7001 #endif 7002 if (sctx->keylog_callback != NULL) 7003 sctx->keylog_callback(SSL_CONNECTION_GET_USER_SSL(sc), (const char *)out); 7004 OPENSSL_clear_free(out, out_len); 7005 return 1; 7006 } 7007 7008 int ssl_log_rsa_client_key_exchange(SSL_CONNECTION *sc, 7009 const uint8_t *encrypted_premaster, 7010 size_t encrypted_premaster_len, 7011 const uint8_t *premaster, 7012 size_t premaster_len) 7013 { 7014 if (encrypted_premaster_len < 8) { 7015 SSLfatal(sc, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); 7016 return 0; 7017 } 7018 7019 /* We only want the first 8 bytes of the encrypted premaster as a tag. */ 7020 return nss_keylog_int("RSA", 7021 sc, 7022 encrypted_premaster, 7023 8, 7024 premaster, 7025 premaster_len); 7026 } 7027 7028 int ssl_log_secret(SSL_CONNECTION *sc, 7029 const char *label, 7030 const uint8_t *secret, 7031 size_t secret_len) 7032 { 7033 return nss_keylog_int(label, 7034 sc, 7035 sc->s3.client_random, 7036 SSL3_RANDOM_SIZE, 7037 secret, 7038 secret_len); 7039 } 7040 7041 #define SSLV2_CIPHER_LEN 3 7042 7043 int ssl_cache_cipherlist(SSL_CONNECTION *s, PACKET *cipher_suites, int sslv2format) 7044 { 7045 int n; 7046 7047 n = sslv2format ? SSLV2_CIPHER_LEN : TLS_CIPHER_LEN; 7048 7049 if (PACKET_remaining(cipher_suites) == 0) { 7050 SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_NO_CIPHERS_SPECIFIED); 7051 return 0; 7052 } 7053 7054 if (PACKET_remaining(cipher_suites) % n != 0) { 7055 SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST); 7056 return 0; 7057 } 7058 7059 OPENSSL_free(s->s3.tmp.ciphers_raw); 7060 s->s3.tmp.ciphers_raw = NULL; 7061 s->s3.tmp.ciphers_rawlen = 0; 7062 7063 if (sslv2format) { 7064 size_t numciphers = PACKET_remaining(cipher_suites) / n; 7065 PACKET sslv2ciphers = *cipher_suites; 7066 unsigned int leadbyte; 7067 unsigned char *raw; 7068 7069 /* 7070 * We store the raw ciphers list in SSLv3+ format so we need to do some 7071 * preprocessing to convert the list first. If there are any SSLv2 only 7072 * ciphersuites with a non-zero leading byte then we are going to 7073 * slightly over allocate because we won't store those. But that isn't a 7074 * problem. 7075 */ 7076 raw = OPENSSL_malloc(numciphers * TLS_CIPHER_LEN); 7077 s->s3.tmp.ciphers_raw = raw; 7078 if (raw == NULL) { 7079 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_CRYPTO_LIB); 7080 return 0; 7081 } 7082 for (s->s3.tmp.ciphers_rawlen = 0; 7083 PACKET_remaining(&sslv2ciphers) > 0; 7084 raw += TLS_CIPHER_LEN) { 7085 if (!PACKET_get_1(&sslv2ciphers, &leadbyte) 7086 || (leadbyte == 0 7087 && !PACKET_copy_bytes(&sslv2ciphers, raw, 7088 TLS_CIPHER_LEN)) 7089 || (leadbyte != 0 7090 && !PACKET_forward(&sslv2ciphers, TLS_CIPHER_LEN))) { 7091 SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_PACKET); 7092 OPENSSL_free(s->s3.tmp.ciphers_raw); 7093 s->s3.tmp.ciphers_raw = NULL; 7094 s->s3.tmp.ciphers_rawlen = 0; 7095 return 0; 7096 } 7097 if (leadbyte == 0) 7098 s->s3.tmp.ciphers_rawlen += TLS_CIPHER_LEN; 7099 } 7100 } else if (!PACKET_memdup(cipher_suites, &s->s3.tmp.ciphers_raw, 7101 &s->s3.tmp.ciphers_rawlen)) { 7102 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); 7103 return 0; 7104 } 7105 return 1; 7106 } 7107 7108 int SSL_bytes_to_cipher_list(SSL *s, const unsigned char *bytes, size_t len, 7109 int isv2format, STACK_OF(SSL_CIPHER) **sk, 7110 STACK_OF(SSL_CIPHER) **scsvs) 7111 { 7112 PACKET pkt; 7113 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s); 7114 7115 if (sc == NULL) 7116 return 0; 7117 7118 if (!PACKET_buf_init(&pkt, bytes, len)) 7119 return 0; 7120 return ossl_bytes_to_cipher_list(sc, &pkt, sk, scsvs, isv2format, 0); 7121 } 7122 7123 int ossl_bytes_to_cipher_list(SSL_CONNECTION *s, PACKET *cipher_suites, 7124 STACK_OF(SSL_CIPHER) **skp, 7125 STACK_OF(SSL_CIPHER) **scsvs_out, 7126 int sslv2format, int fatal) 7127 { 7128 const SSL_CIPHER *c; 7129 STACK_OF(SSL_CIPHER) *sk = NULL; 7130 STACK_OF(SSL_CIPHER) *scsvs = NULL; 7131 int n; 7132 /* 3 = SSLV2_CIPHER_LEN > TLS_CIPHER_LEN = 2. */ 7133 unsigned char cipher[SSLV2_CIPHER_LEN]; 7134 7135 n = sslv2format ? SSLV2_CIPHER_LEN : TLS_CIPHER_LEN; 7136 7137 if (PACKET_remaining(cipher_suites) == 0) { 7138 if (fatal) 7139 SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_NO_CIPHERS_SPECIFIED); 7140 else 7141 ERR_raise(ERR_LIB_SSL, SSL_R_NO_CIPHERS_SPECIFIED); 7142 return 0; 7143 } 7144 7145 if (PACKET_remaining(cipher_suites) % n != 0) { 7146 if (fatal) 7147 SSLfatal(s, SSL_AD_DECODE_ERROR, 7148 SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST); 7149 else 7150 ERR_raise(ERR_LIB_SSL, SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST); 7151 return 0; 7152 } 7153 7154 sk = sk_SSL_CIPHER_new_null(); 7155 scsvs = sk_SSL_CIPHER_new_null(); 7156 if (sk == NULL || scsvs == NULL) { 7157 if (fatal) 7158 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_CRYPTO_LIB); 7159 else 7160 ERR_raise(ERR_LIB_SSL, ERR_R_CRYPTO_LIB); 7161 goto err; 7162 } 7163 7164 while (PACKET_copy_bytes(cipher_suites, cipher, n)) { 7165 /* 7166 * SSLv3 ciphers wrapped in an SSLv2-compatible ClientHello have the 7167 * first byte set to zero, while true SSLv2 ciphers have a non-zero 7168 * first byte. We don't support any true SSLv2 ciphers, so skip them. 7169 */ 7170 if (sslv2format && cipher[0] != '\0') 7171 continue; 7172 7173 /* For SSLv2-compat, ignore leading 0-byte. */ 7174 c = ssl_get_cipher_by_char(s, sslv2format ? &cipher[1] : cipher, 1); 7175 if (c != NULL) { 7176 if ((c->valid && !sk_SSL_CIPHER_push(sk, c)) || (!c->valid && !sk_SSL_CIPHER_push(scsvs, c))) { 7177 if (fatal) 7178 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_CRYPTO_LIB); 7179 else 7180 ERR_raise(ERR_LIB_SSL, ERR_R_CRYPTO_LIB); 7181 goto err; 7182 } 7183 } 7184 } 7185 if (PACKET_remaining(cipher_suites) > 0) { 7186 if (fatal) 7187 SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_LENGTH); 7188 else 7189 ERR_raise(ERR_LIB_SSL, SSL_R_BAD_LENGTH); 7190 goto err; 7191 } 7192 7193 if (skp != NULL) 7194 *skp = sk; 7195 else 7196 sk_SSL_CIPHER_free(sk); 7197 if (scsvs_out != NULL) 7198 *scsvs_out = scsvs; 7199 else 7200 sk_SSL_CIPHER_free(scsvs); 7201 return 1; 7202 err: 7203 sk_SSL_CIPHER_free(sk); 7204 sk_SSL_CIPHER_free(scsvs); 7205 return 0; 7206 } 7207 7208 int SSL_CTX_set_max_early_data(SSL_CTX *ctx, uint32_t max_early_data) 7209 { 7210 ctx->max_early_data = max_early_data; 7211 7212 return 1; 7213 } 7214 7215 uint32_t SSL_CTX_get_max_early_data(const SSL_CTX *ctx) 7216 { 7217 return ctx->max_early_data; 7218 } 7219 7220 int SSL_set_max_early_data(SSL *s, uint32_t max_early_data) 7221 { 7222 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL_ONLY(s); 7223 7224 if (sc == NULL) 7225 return 0; 7226 7227 sc->max_early_data = max_early_data; 7228 7229 return 1; 7230 } 7231 7232 uint32_t SSL_get_max_early_data(const SSL *s) 7233 { 7234 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s); 7235 7236 if (sc == NULL) 7237 return 0; 7238 7239 return sc->max_early_data; 7240 } 7241 7242 int SSL_CTX_set_recv_max_early_data(SSL_CTX *ctx, uint32_t recv_max_early_data) 7243 { 7244 ctx->recv_max_early_data = recv_max_early_data; 7245 7246 return 1; 7247 } 7248 7249 uint32_t SSL_CTX_get_recv_max_early_data(const SSL_CTX *ctx) 7250 { 7251 return ctx->recv_max_early_data; 7252 } 7253 7254 int SSL_set_recv_max_early_data(SSL *s, uint32_t recv_max_early_data) 7255 { 7256 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL_ONLY(s); 7257 7258 if (sc == NULL) 7259 return 0; 7260 7261 sc->recv_max_early_data = recv_max_early_data; 7262 7263 return 1; 7264 } 7265 7266 uint32_t SSL_get_recv_max_early_data(const SSL *s) 7267 { 7268 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s); 7269 7270 if (sc == NULL) 7271 return 0; 7272 7273 return sc->recv_max_early_data; 7274 } 7275 7276 __owur unsigned int ssl_get_max_send_fragment(const SSL_CONNECTION *sc) 7277 { 7278 /* Return any active Max Fragment Len extension */ 7279 if (sc->session != NULL && USE_MAX_FRAGMENT_LENGTH_EXT(sc->session)) 7280 return GET_MAX_FRAGMENT_LENGTH(sc->session); 7281 7282 /* return current SSL connection setting */ 7283 return sc->max_send_fragment; 7284 } 7285 7286 __owur unsigned int ssl_get_split_send_fragment(const SSL_CONNECTION *sc) 7287 { 7288 /* Return a value regarding an active Max Fragment Len extension */ 7289 if (sc->session != NULL && USE_MAX_FRAGMENT_LENGTH_EXT(sc->session) 7290 && sc->split_send_fragment > GET_MAX_FRAGMENT_LENGTH(sc->session)) 7291 return GET_MAX_FRAGMENT_LENGTH(sc->session); 7292 7293 /* else limit |split_send_fragment| to current |max_send_fragment| */ 7294 if (sc->split_send_fragment > sc->max_send_fragment) 7295 return sc->max_send_fragment; 7296 7297 /* return current SSL connection setting */ 7298 return sc->split_send_fragment; 7299 } 7300 7301 int SSL_stateless(SSL *s) 7302 { 7303 int ret; 7304 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL_ONLY(s); 7305 7306 if (sc == NULL) 7307 return 0; 7308 7309 /* Ensure there is no state left over from a previous invocation */ 7310 if (!SSL_clear(s)) 7311 return 0; 7312 7313 ERR_clear_error(); 7314 7315 sc->s3.flags |= TLS1_FLAGS_STATELESS; 7316 ret = SSL_accept(s); 7317 sc->s3.flags &= ~TLS1_FLAGS_STATELESS; 7318 7319 if (ret > 0 && sc->ext.cookieok) 7320 return 1; 7321 7322 if (sc->hello_retry_request == SSL_HRR_PENDING && !ossl_statem_in_error(sc)) 7323 return 0; 7324 7325 return -1; 7326 } 7327 7328 void SSL_CTX_set_post_handshake_auth(SSL_CTX *ctx, int val) 7329 { 7330 ctx->pha_enabled = val; 7331 } 7332 7333 void SSL_set_post_handshake_auth(SSL *ssl, int val) 7334 { 7335 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL_ONLY(ssl); 7336 7337 if (sc == NULL) 7338 return; 7339 7340 sc->pha_enabled = val; 7341 } 7342 7343 int SSL_verify_client_post_handshake(SSL *ssl) 7344 { 7345 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(ssl); 7346 7347 #ifndef OPENSSL_NO_QUIC 7348 if (IS_QUIC(ssl)) { 7349 ERR_raise(ERR_LIB_SSL, SSL_R_WRONG_SSL_VERSION); 7350 return 0; 7351 } 7352 #endif 7353 7354 if (sc == NULL) 7355 return 0; 7356 7357 if (!SSL_CONNECTION_IS_TLS13(sc)) { 7358 ERR_raise(ERR_LIB_SSL, SSL_R_WRONG_SSL_VERSION); 7359 return 0; 7360 } 7361 if (!sc->server) { 7362 ERR_raise(ERR_LIB_SSL, SSL_R_NOT_SERVER); 7363 return 0; 7364 } 7365 7366 if (!SSL_is_init_finished(ssl)) { 7367 ERR_raise(ERR_LIB_SSL, SSL_R_STILL_IN_INIT); 7368 return 0; 7369 } 7370 7371 switch (sc->post_handshake_auth) { 7372 case SSL_PHA_NONE: 7373 ERR_raise(ERR_LIB_SSL, SSL_R_EXTENSION_NOT_RECEIVED); 7374 return 0; 7375 default: 7376 case SSL_PHA_EXT_SENT: 7377 ERR_raise(ERR_LIB_SSL, ERR_R_INTERNAL_ERROR); 7378 return 0; 7379 case SSL_PHA_EXT_RECEIVED: 7380 break; 7381 case SSL_PHA_REQUEST_PENDING: 7382 ERR_raise(ERR_LIB_SSL, SSL_R_REQUEST_PENDING); 7383 return 0; 7384 case SSL_PHA_REQUESTED: 7385 ERR_raise(ERR_LIB_SSL, SSL_R_REQUEST_SENT); 7386 return 0; 7387 } 7388 7389 sc->post_handshake_auth = SSL_PHA_REQUEST_PENDING; 7390 7391 /* checks verify_mode and algorithm_auth */ 7392 if (!send_certificate_request(sc)) { 7393 sc->post_handshake_auth = SSL_PHA_EXT_RECEIVED; /* restore on error */ 7394 ERR_raise(ERR_LIB_SSL, SSL_R_INVALID_CONFIG); 7395 return 0; 7396 } 7397 7398 ossl_statem_set_in_init(sc, 1); 7399 return 1; 7400 } 7401 7402 int SSL_CTX_set_session_ticket_cb(SSL_CTX *ctx, 7403 SSL_CTX_generate_session_ticket_fn gen_cb, 7404 SSL_CTX_decrypt_session_ticket_fn dec_cb, 7405 void *arg) 7406 { 7407 ctx->generate_ticket_cb = gen_cb; 7408 ctx->decrypt_ticket_cb = dec_cb; 7409 ctx->ticket_cb_data = arg; 7410 return 1; 7411 } 7412 7413 void SSL_CTX_set_allow_early_data_cb(SSL_CTX *ctx, 7414 SSL_allow_early_data_cb_fn cb, 7415 void *arg) 7416 { 7417 ctx->allow_early_data_cb = cb; 7418 ctx->allow_early_data_cb_data = arg; 7419 } 7420 7421 void SSL_set_allow_early_data_cb(SSL *s, 7422 SSL_allow_early_data_cb_fn cb, 7423 void *arg) 7424 { 7425 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL_ONLY(s); 7426 7427 if (sc == NULL) 7428 return; 7429 7430 sc->allow_early_data_cb = cb; 7431 sc->allow_early_data_cb_data = arg; 7432 } 7433 7434 const EVP_CIPHER *ssl_evp_cipher_fetch(OSSL_LIB_CTX *libctx, 7435 int nid, 7436 const char *properties) 7437 { 7438 const EVP_CIPHER *ciph; 7439 7440 ciph = tls_get_cipher_from_engine(nid); 7441 if (ciph != NULL) 7442 return ciph; 7443 7444 /* 7445 * If there is no engine cipher then we do an explicit fetch. This may fail 7446 * and that could be ok 7447 */ 7448 ERR_set_mark(); 7449 ciph = EVP_CIPHER_fetch(libctx, OBJ_nid2sn(nid), properties); 7450 if (ciph != NULL) { 7451 OSSL_PARAM params[2]; 7452 int decrypt_only = 0; 7453 7454 params[0] = OSSL_PARAM_construct_int(OSSL_CIPHER_PARAM_DECRYPT_ONLY, 7455 &decrypt_only); 7456 params[1] = OSSL_PARAM_construct_end(); 7457 if (EVP_CIPHER_get_params((EVP_CIPHER *)ciph, params) 7458 && decrypt_only) { 7459 /* If a cipher is decrypt-only, it is unusable */ 7460 EVP_CIPHER_free((EVP_CIPHER *)ciph); 7461 ciph = NULL; 7462 } 7463 } 7464 ERR_pop_to_mark(); 7465 return ciph; 7466 } 7467 7468 int ssl_evp_cipher_up_ref(const EVP_CIPHER *cipher) 7469 { 7470 /* Don't up-ref an implicit EVP_CIPHER */ 7471 if (EVP_CIPHER_get0_provider(cipher) == NULL) 7472 return 1; 7473 7474 /* 7475 * The cipher was explicitly fetched and therefore it is safe to cast 7476 * away the const 7477 */ 7478 return EVP_CIPHER_up_ref((EVP_CIPHER *)cipher); 7479 } 7480 7481 void ssl_evp_cipher_free(const EVP_CIPHER *cipher) 7482 { 7483 if (cipher == NULL) 7484 return; 7485 7486 if (EVP_CIPHER_get0_provider(cipher) != NULL) { 7487 /* 7488 * The cipher was explicitly fetched and therefore it is safe to cast 7489 * away the const 7490 */ 7491 EVP_CIPHER_free((EVP_CIPHER *)cipher); 7492 } 7493 } 7494 7495 const EVP_MD *ssl_evp_md_fetch(OSSL_LIB_CTX *libctx, 7496 int nid, 7497 const char *properties) 7498 { 7499 const EVP_MD *md; 7500 7501 md = tls_get_digest_from_engine(nid); 7502 if (md != NULL) 7503 return md; 7504 7505 /* Otherwise we do an explicit fetch */ 7506 ERR_set_mark(); 7507 md = EVP_MD_fetch(libctx, OBJ_nid2sn(nid), properties); 7508 ERR_pop_to_mark(); 7509 return md; 7510 } 7511 7512 int ssl_evp_md_up_ref(const EVP_MD *md) 7513 { 7514 /* Don't up-ref an implicit EVP_MD */ 7515 if (EVP_MD_get0_provider(md) == NULL) 7516 return 1; 7517 7518 /* 7519 * The digest was explicitly fetched and therefore it is safe to cast 7520 * away the const 7521 */ 7522 return EVP_MD_up_ref((EVP_MD *)md); 7523 } 7524 7525 void ssl_evp_md_free(const EVP_MD *md) 7526 { 7527 if (md == NULL) 7528 return; 7529 7530 if (EVP_MD_get0_provider(md) != NULL) { 7531 /* 7532 * The digest was explicitly fetched and therefore it is safe to cast 7533 * away the const 7534 */ 7535 EVP_MD_free((EVP_MD *)md); 7536 } 7537 } 7538 7539 int SSL_set0_tmp_dh_pkey(SSL *s, EVP_PKEY *dhpkey) 7540 { 7541 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s); 7542 7543 if (sc == NULL) 7544 return 0; 7545 7546 if (!ssl_security(sc, SSL_SECOP_TMP_DH, 7547 EVP_PKEY_get_security_bits(dhpkey), 0, dhpkey)) { 7548 ERR_raise(ERR_LIB_SSL, SSL_R_DH_KEY_TOO_SMALL); 7549 return 0; 7550 } 7551 EVP_PKEY_free(sc->cert->dh_tmp); 7552 sc->cert->dh_tmp = dhpkey; 7553 return 1; 7554 } 7555 7556 int SSL_CTX_set0_tmp_dh_pkey(SSL_CTX *ctx, EVP_PKEY *dhpkey) 7557 { 7558 if (!ssl_ctx_security(ctx, SSL_SECOP_TMP_DH, 7559 EVP_PKEY_get_security_bits(dhpkey), 0, dhpkey)) { 7560 ERR_raise(ERR_LIB_SSL, SSL_R_DH_KEY_TOO_SMALL); 7561 return 0; 7562 } 7563 EVP_PKEY_free(ctx->cert->dh_tmp); 7564 ctx->cert->dh_tmp = dhpkey; 7565 return 1; 7566 } 7567 7568 /* QUIC-specific methods which are supported on QUIC connections only. */ 7569 int SSL_handle_events(SSL *s) 7570 { 7571 SSL_CONNECTION *sc; 7572 7573 #ifndef OPENSSL_NO_QUIC 7574 if (IS_QUIC(s)) 7575 return ossl_quic_handle_events(s); 7576 #endif 7577 7578 sc = SSL_CONNECTION_FROM_SSL_ONLY(s); 7579 if (sc != NULL && SSL_CONNECTION_IS_DTLS(sc)) 7580 /* 7581 * DTLSv1_handle_timeout returns 0 if the timer wasn't expired yet, 7582 * which we consider a success case. Theoretically DTLSv1_handle_timeout 7583 * can also return 0 if s is NULL or not a DTLS object, but we've 7584 * already ruled out those possibilities above, so this is not possible 7585 * here. Thus the only failure cases are where DTLSv1_handle_timeout 7586 * returns -1. 7587 */ 7588 return DTLSv1_handle_timeout(s) >= 0; 7589 7590 return 1; 7591 } 7592 7593 int SSL_get_event_timeout(SSL *s, struct timeval *tv, int *is_infinite) 7594 { 7595 SSL_CONNECTION *sc; 7596 7597 #ifndef OPENSSL_NO_QUIC 7598 if (IS_QUIC(s)) 7599 return ossl_quic_get_event_timeout(s, tv, is_infinite); 7600 #endif 7601 7602 sc = SSL_CONNECTION_FROM_SSL_ONLY(s); 7603 if (sc != NULL && SSL_CONNECTION_IS_DTLS(sc) 7604 && DTLSv1_get_timeout(s, tv)) { 7605 *is_infinite = 0; 7606 return 1; 7607 } 7608 7609 tv->tv_sec = 1000000; 7610 tv->tv_usec = 0; 7611 *is_infinite = 1; 7612 return 1; 7613 } 7614 7615 int SSL_get_rpoll_descriptor(SSL *s, BIO_POLL_DESCRIPTOR *desc) 7616 { 7617 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s); 7618 7619 #ifndef OPENSSL_NO_QUIC 7620 if (IS_QUIC(s)) 7621 return ossl_quic_get_rpoll_descriptor(s, desc); 7622 #endif 7623 7624 if (sc == NULL || sc->rbio == NULL) 7625 return 0; 7626 7627 return BIO_get_rpoll_descriptor(sc->rbio, desc); 7628 } 7629 7630 int SSL_get_wpoll_descriptor(SSL *s, BIO_POLL_DESCRIPTOR *desc) 7631 { 7632 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s); 7633 7634 #ifndef OPENSSL_NO_QUIC 7635 if (IS_QUIC(s)) 7636 return ossl_quic_get_wpoll_descriptor(s, desc); 7637 #endif 7638 7639 if (sc == NULL || sc->wbio == NULL) 7640 return 0; 7641 7642 return BIO_get_wpoll_descriptor(sc->wbio, desc); 7643 } 7644 7645 int SSL_net_read_desired(SSL *s) 7646 { 7647 #ifndef OPENSSL_NO_QUIC 7648 if (!IS_QUIC(s)) 7649 return SSL_want_read(s); 7650 7651 return ossl_quic_get_net_read_desired(s); 7652 #else 7653 return SSL_want_read(s); 7654 #endif 7655 } 7656 7657 int SSL_net_write_desired(SSL *s) 7658 { 7659 #ifndef OPENSSL_NO_QUIC 7660 if (!IS_QUIC(s)) 7661 return SSL_want_write(s); 7662 7663 return ossl_quic_get_net_write_desired(s); 7664 #else 7665 return SSL_want_write(s); 7666 #endif 7667 } 7668 7669 int SSL_set_blocking_mode(SSL *s, int blocking) 7670 { 7671 #ifndef OPENSSL_NO_QUIC 7672 if (!IS_QUIC(s)) 7673 return 0; 7674 7675 return ossl_quic_conn_set_blocking_mode(s, blocking); 7676 #else 7677 return 0; 7678 #endif 7679 } 7680 7681 int SSL_get_blocking_mode(SSL *s) 7682 { 7683 #ifndef OPENSSL_NO_QUIC 7684 if (!IS_QUIC(s)) 7685 return -1; 7686 7687 return ossl_quic_conn_get_blocking_mode(s); 7688 #else 7689 return -1; 7690 #endif 7691 } 7692 7693 int SSL_set1_initial_peer_addr(SSL *s, const BIO_ADDR *peer_addr) 7694 { 7695 #ifndef OPENSSL_NO_QUIC 7696 if (!IS_QUIC(s)) 7697 return 0; 7698 7699 return ossl_quic_conn_set_initial_peer_addr(s, peer_addr); 7700 #else 7701 return 0; 7702 #endif 7703 } 7704 7705 int SSL_shutdown_ex(SSL *ssl, uint64_t flags, 7706 const SSL_SHUTDOWN_EX_ARGS *args, 7707 size_t args_len) 7708 { 7709 #ifndef OPENSSL_NO_QUIC 7710 if (!IS_QUIC(ssl)) 7711 return SSL_shutdown(ssl); 7712 7713 return ossl_quic_conn_shutdown(ssl, flags, args, args_len); 7714 #else 7715 return SSL_shutdown(ssl); 7716 #endif 7717 } 7718 7719 int SSL_stream_conclude(SSL *ssl, uint64_t flags) 7720 { 7721 #ifndef OPENSSL_NO_QUIC 7722 if (!IS_QUIC(ssl)) 7723 return 0; 7724 7725 return ossl_quic_conn_stream_conclude(ssl); 7726 #else 7727 return 0; 7728 #endif 7729 } 7730 7731 SSL *SSL_new_stream(SSL *s, uint64_t flags) 7732 { 7733 #ifndef OPENSSL_NO_QUIC 7734 if (!IS_QUIC(s)) 7735 return NULL; 7736 7737 return ossl_quic_conn_stream_new(s, flags); 7738 #else 7739 return NULL; 7740 #endif 7741 } 7742 7743 SSL *SSL_get0_connection(SSL *s) 7744 { 7745 #ifndef OPENSSL_NO_QUIC 7746 if (!IS_QUIC(s)) 7747 return s; 7748 7749 return ossl_quic_get0_connection(s); 7750 #else 7751 return s; 7752 #endif 7753 } 7754 7755 int SSL_is_connection(SSL *s) 7756 { 7757 return SSL_get0_connection(s) == s; 7758 } 7759 7760 SSL *SSL_get0_listener(SSL *s) 7761 { 7762 #ifndef OPENSSL_NO_QUIC 7763 if (!IS_QUIC(s)) 7764 return NULL; 7765 7766 return ossl_quic_get0_listener(s); 7767 #else 7768 return NULL; 7769 #endif 7770 } 7771 7772 SSL *SSL_get0_domain(SSL *s) 7773 { 7774 #ifndef OPENSSL_NO_QUIC 7775 if (!IS_QUIC(s)) 7776 return NULL; 7777 7778 return ossl_quic_get0_domain(s); 7779 #else 7780 return NULL; 7781 #endif 7782 } 7783 7784 int SSL_is_listener(SSL *s) 7785 { 7786 return SSL_get0_listener(s) == s; 7787 } 7788 7789 int SSL_is_domain(SSL *s) 7790 { 7791 return SSL_get0_domain(s) == s; 7792 } 7793 7794 int SSL_get_stream_type(SSL *s) 7795 { 7796 #ifndef OPENSSL_NO_QUIC 7797 if (!IS_QUIC(s)) 7798 return SSL_STREAM_TYPE_BIDI; 7799 7800 return ossl_quic_get_stream_type(s); 7801 #else 7802 return SSL_STREAM_TYPE_BIDI; 7803 #endif 7804 } 7805 7806 uint64_t SSL_get_stream_id(SSL *s) 7807 { 7808 #ifndef OPENSSL_NO_QUIC 7809 if (!IS_QUIC(s)) 7810 return UINT64_MAX; 7811 7812 return ossl_quic_get_stream_id(s); 7813 #else 7814 return UINT64_MAX; 7815 #endif 7816 } 7817 7818 int SSL_is_stream_local(SSL *s) 7819 { 7820 #ifndef OPENSSL_NO_QUIC 7821 if (!IS_QUIC(s)) 7822 return -1; 7823 7824 return ossl_quic_is_stream_local(s); 7825 #else 7826 return -1; 7827 #endif 7828 } 7829 7830 int SSL_set_default_stream_mode(SSL *s, uint32_t mode) 7831 { 7832 #ifndef OPENSSL_NO_QUIC 7833 if (!IS_QUIC(s)) 7834 return 0; 7835 7836 return ossl_quic_set_default_stream_mode(s, mode); 7837 #else 7838 return 0; 7839 #endif 7840 } 7841 7842 int SSL_set_incoming_stream_policy(SSL *s, int policy, uint64_t aec) 7843 { 7844 #ifndef OPENSSL_NO_QUIC 7845 if (!IS_QUIC(s)) 7846 return 0; 7847 7848 return ossl_quic_set_incoming_stream_policy(s, policy, aec); 7849 #else 7850 return 0; 7851 #endif 7852 } 7853 7854 SSL *SSL_accept_stream(SSL *s, uint64_t flags) 7855 { 7856 #ifndef OPENSSL_NO_QUIC 7857 if (!IS_QUIC(s)) 7858 return NULL; 7859 7860 return ossl_quic_accept_stream(s, flags); 7861 #else 7862 return NULL; 7863 #endif 7864 } 7865 7866 size_t SSL_get_accept_stream_queue_len(SSL *s) 7867 { 7868 #ifndef OPENSSL_NO_QUIC 7869 if (!IS_QUIC(s)) 7870 return 0; 7871 7872 return ossl_quic_get_accept_stream_queue_len(s); 7873 #else 7874 return 0; 7875 #endif 7876 } 7877 7878 int SSL_stream_reset(SSL *s, 7879 const SSL_STREAM_RESET_ARGS *args, 7880 size_t args_len) 7881 { 7882 #ifndef OPENSSL_NO_QUIC 7883 if (!IS_QUIC(s)) 7884 return 0; 7885 7886 return ossl_quic_stream_reset(s, args, args_len); 7887 #else 7888 return 0; 7889 #endif 7890 } 7891 7892 int SSL_get_stream_read_state(SSL *s) 7893 { 7894 #ifndef OPENSSL_NO_QUIC 7895 if (!IS_QUIC(s)) 7896 return SSL_STREAM_STATE_NONE; 7897 7898 return ossl_quic_get_stream_read_state(s); 7899 #else 7900 return SSL_STREAM_STATE_NONE; 7901 #endif 7902 } 7903 7904 int SSL_get_stream_write_state(SSL *s) 7905 { 7906 #ifndef OPENSSL_NO_QUIC 7907 if (!IS_QUIC(s)) 7908 return SSL_STREAM_STATE_NONE; 7909 7910 return ossl_quic_get_stream_write_state(s); 7911 #else 7912 return SSL_STREAM_STATE_NONE; 7913 #endif 7914 } 7915 7916 int SSL_get_stream_read_error_code(SSL *s, uint64_t *app_error_code) 7917 { 7918 #ifndef OPENSSL_NO_QUIC 7919 if (!IS_QUIC(s)) 7920 return -1; 7921 7922 return ossl_quic_get_stream_read_error_code(s, app_error_code); 7923 #else 7924 return -1; 7925 #endif 7926 } 7927 7928 int SSL_get_stream_write_error_code(SSL *s, uint64_t *app_error_code) 7929 { 7930 #ifndef OPENSSL_NO_QUIC 7931 if (!IS_QUIC(s)) 7932 return -1; 7933 7934 return ossl_quic_get_stream_write_error_code(s, app_error_code); 7935 #else 7936 return -1; 7937 #endif 7938 } 7939 7940 int SSL_get_conn_close_info(SSL *s, SSL_CONN_CLOSE_INFO *info, 7941 size_t info_len) 7942 { 7943 #ifndef OPENSSL_NO_QUIC 7944 if (!IS_QUIC(s)) 7945 return -1; 7946 7947 return ossl_quic_get_conn_close_info(s, info, info_len); 7948 #else 7949 return -1; 7950 #endif 7951 } 7952 7953 int SSL_get_value_uint(SSL *s, uint32_t class_, uint32_t id, 7954 uint64_t *value) 7955 { 7956 #ifndef OPENSSL_NO_QUIC 7957 if (IS_QUIC(s)) 7958 return ossl_quic_get_value_uint(s, class_, id, value); 7959 #endif 7960 7961 ERR_raise(ERR_LIB_SSL, SSL_R_UNSUPPORTED_PROTOCOL); 7962 return 0; 7963 } 7964 7965 int SSL_set_value_uint(SSL *s, uint32_t class_, uint32_t id, 7966 uint64_t value) 7967 { 7968 #ifndef OPENSSL_NO_QUIC 7969 if (IS_QUIC(s)) 7970 return ossl_quic_set_value_uint(s, class_, id, value); 7971 #endif 7972 7973 ERR_raise(ERR_LIB_SSL, SSL_R_UNSUPPORTED_PROTOCOL); 7974 return 0; 7975 } 7976 7977 SSL *SSL_new_listener(SSL_CTX *ctx, uint64_t flags) 7978 { 7979 #ifndef OPENSSL_NO_QUIC 7980 if (!IS_QUIC_CTX(ctx)) 7981 return NULL; 7982 7983 return ossl_quic_new_listener(ctx, flags); 7984 #else 7985 return NULL; 7986 #endif 7987 } 7988 7989 SSL *SSL_new_listener_from(SSL *ssl, uint64_t flags) 7990 { 7991 #ifndef OPENSSL_NO_QUIC 7992 if (!IS_QUIC(ssl)) 7993 return NULL; 7994 7995 return ossl_quic_new_listener_from(ssl, flags); 7996 #else 7997 return NULL; 7998 #endif 7999 } 8000 8001 SSL *SSL_new_from_listener(SSL *ssl, uint64_t flags) 8002 { 8003 #ifndef OPENSSL_NO_QUIC 8004 if (!IS_QUIC(ssl)) 8005 return NULL; 8006 8007 return ossl_quic_new_from_listener(ssl, flags); 8008 #else 8009 return NULL; 8010 #endif 8011 } 8012 8013 SSL *SSL_accept_connection(SSL *ssl, uint64_t flags) 8014 { 8015 #ifndef OPENSSL_NO_QUIC 8016 if (!IS_QUIC(ssl)) 8017 return NULL; 8018 8019 return ossl_quic_accept_connection(ssl, flags); 8020 #else 8021 return NULL; 8022 #endif 8023 } 8024 8025 size_t SSL_get_accept_connection_queue_len(SSL *ssl) 8026 { 8027 #ifndef OPENSSL_NO_QUIC 8028 if (!IS_QUIC(ssl)) 8029 return 0; 8030 8031 return ossl_quic_get_accept_connection_queue_len(ssl); 8032 #else 8033 return 0; 8034 #endif 8035 } 8036 8037 int SSL_listen(SSL *ssl) 8038 { 8039 #ifndef OPENSSL_NO_QUIC 8040 if (!IS_QUIC(ssl)) 8041 return 0; 8042 8043 return ossl_quic_listen(ssl); 8044 #else 8045 return 0; 8046 #endif 8047 } 8048 8049 SSL *SSL_new_domain(SSL_CTX *ctx, uint64_t flags) 8050 { 8051 #ifndef OPENSSL_NO_QUIC 8052 if (!IS_QUIC_CTX(ctx)) 8053 return NULL; 8054 8055 return ossl_quic_new_domain(ctx, flags); 8056 #else 8057 return NULL; 8058 #endif 8059 } 8060 8061 int ossl_adjust_domain_flags(uint64_t domain_flags, uint64_t *p_domain_flags) 8062 { 8063 if ((domain_flags & ~OSSL_QUIC_SUPPORTED_DOMAIN_FLAGS) != 0) { 8064 ERR_raise_data(ERR_LIB_SSL, ERR_R_UNSUPPORTED, 8065 "unsupported domain flag requested"); 8066 return 0; 8067 } 8068 8069 if ((domain_flags & SSL_DOMAIN_FLAG_THREAD_ASSISTED) != 0) 8070 domain_flags |= SSL_DOMAIN_FLAG_MULTI_THREAD; 8071 8072 if ((domain_flags & (SSL_DOMAIN_FLAG_MULTI_THREAD | SSL_DOMAIN_FLAG_SINGLE_THREAD)) == 0) 8073 domain_flags |= SSL_DOMAIN_FLAG_MULTI_THREAD; 8074 8075 if ((domain_flags & SSL_DOMAIN_FLAG_SINGLE_THREAD) != 0 8076 && (domain_flags & SSL_DOMAIN_FLAG_MULTI_THREAD) != 0) { 8077 ERR_raise_data(ERR_LIB_SSL, ERR_R_PASSED_INVALID_ARGUMENT, 8078 "mutually exclusive domain flags specified"); 8079 return 0; 8080 } 8081 8082 /* 8083 * Note: We treat MULTI_THREAD as a no-op in non-threaded builds, but 8084 * not THREAD_ASSISTED. 8085 */ 8086 #ifndef OPENSSL_THREADS 8087 if ((domain_flags & SSL_DOMAIN_FLAG_THREAD_ASSISTED) != 0) { 8088 ERR_raise_data(ERR_LIB_SSL, ERR_R_UNSUPPORTED, 8089 "thread assisted mode not available in this build"); 8090 return 0; 8091 } 8092 #endif 8093 8094 *p_domain_flags = domain_flags; 8095 return 1; 8096 } 8097 8098 int SSL_CTX_set_domain_flags(SSL_CTX *ctx, uint64_t domain_flags) 8099 { 8100 #ifndef OPENSSL_NO_QUIC 8101 if (IS_QUIC_CTX(ctx)) { 8102 if (!ossl_adjust_domain_flags(domain_flags, &domain_flags)) 8103 return 0; 8104 8105 ctx->domain_flags = domain_flags; 8106 return 1; 8107 } 8108 #endif 8109 8110 ERR_raise_data(ERR_LIB_SSL, ERR_R_UNSUPPORTED, 8111 "domain flags unsupported on this kind of SSL_CTX"); 8112 return 0; 8113 } 8114 8115 int SSL_CTX_get_domain_flags(const SSL_CTX *ctx, uint64_t *domain_flags) 8116 { 8117 #ifndef OPENSSL_NO_QUIC 8118 if (IS_QUIC_CTX(ctx)) { 8119 if (domain_flags != NULL) 8120 *domain_flags = ctx->domain_flags; 8121 8122 return 1; 8123 } 8124 #endif 8125 8126 ERR_raise_data(ERR_LIB_SSL, ERR_R_UNSUPPORTED, 8127 "domain flags unsupported on this kind of SSL_CTX"); 8128 return 0; 8129 } 8130 8131 int SSL_get_domain_flags(const SSL *ssl, uint64_t *domain_flags) 8132 { 8133 #ifndef OPENSSL_NO_QUIC 8134 if (IS_QUIC(ssl)) 8135 return ossl_quic_get_domain_flags(ssl, domain_flags); 8136 #endif 8137 8138 return 0; 8139 } 8140 8141 int SSL_add_expected_rpk(SSL *s, EVP_PKEY *rpk) 8142 { 8143 unsigned char *data = NULL; 8144 SSL_DANE *dane = SSL_get0_dane(s); 8145 int ret; 8146 8147 if (dane == NULL || dane->dctx == NULL) 8148 return 0; 8149 if ((ret = i2d_PUBKEY(rpk, &data)) <= 0) 8150 return 0; 8151 8152 ret = SSL_dane_tlsa_add(s, DANETLS_USAGE_DANE_EE, 8153 DANETLS_SELECTOR_SPKI, 8154 DANETLS_MATCHING_FULL, 8155 data, (size_t)ret) 8156 > 0; 8157 OPENSSL_free(data); 8158 return ret; 8159 } 8160 8161 EVP_PKEY *SSL_get0_peer_rpk(const SSL *s) 8162 { 8163 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s); 8164 8165 if (sc == NULL || sc->session == NULL) 8166 return NULL; 8167 return sc->session->peer_rpk; 8168 } 8169 8170 int SSL_get_negotiated_client_cert_type(const SSL *s) 8171 { 8172 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s); 8173 8174 if (sc == NULL) 8175 return 0; 8176 8177 return sc->ext.client_cert_type; 8178 } 8179 8180 int SSL_get_negotiated_server_cert_type(const SSL *s) 8181 { 8182 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s); 8183 8184 if (sc == NULL) 8185 return 0; 8186 8187 return sc->ext.server_cert_type; 8188 } 8189 8190 static int validate_cert_type(const unsigned char *val, size_t len) 8191 { 8192 size_t i; 8193 int saw_rpk = 0; 8194 int saw_x509 = 0; 8195 8196 if (val == NULL && len == 0) 8197 return 1; 8198 8199 if (val == NULL || len == 0) 8200 return 0; 8201 8202 for (i = 0; i < len; i++) { 8203 switch (val[i]) { 8204 case TLSEXT_cert_type_rpk: 8205 if (saw_rpk) 8206 return 0; 8207 saw_rpk = 1; 8208 break; 8209 case TLSEXT_cert_type_x509: 8210 if (saw_x509) 8211 return 0; 8212 saw_x509 = 1; 8213 break; 8214 case TLSEXT_cert_type_pgp: 8215 case TLSEXT_cert_type_1609dot2: 8216 default: 8217 return 0; 8218 } 8219 } 8220 return 1; 8221 } 8222 8223 static int set_cert_type(unsigned char **cert_type, 8224 size_t *cert_type_len, 8225 const unsigned char *val, 8226 size_t len) 8227 { 8228 unsigned char *tmp = NULL; 8229 8230 if (!validate_cert_type(val, len)) 8231 return 0; 8232 8233 if (val != NULL && (tmp = OPENSSL_memdup(val, len)) == NULL) 8234 return 0; 8235 8236 OPENSSL_free(*cert_type); 8237 *cert_type = tmp; 8238 *cert_type_len = len; 8239 return 1; 8240 } 8241 8242 int SSL_set1_client_cert_type(SSL *s, const unsigned char *val, size_t len) 8243 { 8244 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s); 8245 8246 if (sc == NULL) 8247 return 0; 8248 8249 return set_cert_type(&sc->client_cert_type, &sc->client_cert_type_len, 8250 val, len); 8251 } 8252 8253 int SSL_set1_server_cert_type(SSL *s, const unsigned char *val, size_t len) 8254 { 8255 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s); 8256 8257 if (sc == NULL) 8258 return 0; 8259 8260 return set_cert_type(&sc->server_cert_type, &sc->server_cert_type_len, 8261 val, len); 8262 } 8263 8264 int SSL_CTX_set1_client_cert_type(SSL_CTX *ctx, const unsigned char *val, size_t len) 8265 { 8266 return set_cert_type(&ctx->client_cert_type, &ctx->client_cert_type_len, 8267 val, len); 8268 } 8269 8270 int SSL_CTX_set1_server_cert_type(SSL_CTX *ctx, const unsigned char *val, size_t len) 8271 { 8272 return set_cert_type(&ctx->server_cert_type, &ctx->server_cert_type_len, 8273 val, len); 8274 } 8275 8276 int SSL_get0_client_cert_type(const SSL *s, unsigned char **t, size_t *len) 8277 { 8278 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s); 8279 8280 if (t == NULL || len == NULL || sc == NULL) 8281 return 0; 8282 8283 *t = sc->client_cert_type; 8284 *len = sc->client_cert_type_len; 8285 return 1; 8286 } 8287 8288 int SSL_get0_server_cert_type(const SSL *s, unsigned char **t, size_t *len) 8289 { 8290 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s); 8291 8292 if (t == NULL || len == NULL || sc == NULL) 8293 return 0; 8294 8295 *t = sc->server_cert_type; 8296 *len = sc->server_cert_type_len; 8297 return 1; 8298 } 8299 8300 int SSL_CTX_get0_client_cert_type(const SSL_CTX *ctx, unsigned char **t, size_t *len) 8301 { 8302 if (t == NULL || len == NULL) 8303 return 0; 8304 8305 *t = ctx->client_cert_type; 8306 *len = ctx->client_cert_type_len; 8307 return 1; 8308 } 8309 8310 int SSL_CTX_get0_server_cert_type(const SSL_CTX *ctx, unsigned char **t, size_t *len) 8311 { 8312 if (t == NULL || len == NULL) 8313 return 0; 8314 8315 *t = ctx->server_cert_type; 8316 *len = ctx->server_cert_type_len; 8317 return 1; 8318 } 8319