1 /* 2 * Copyright 2016-2025 The OpenSSL Project Authors. All Rights Reserved. 3 * 4 * Licensed under the Apache License 2.0 (the "License"). You may not use 5 * this file except in compliance with the License. You can obtain a copy 6 * in the file LICENSE in the source distribution or at 7 * https://www.openssl.org/source/license.html 8 */ 9 10 #include <openssl/ocsp.h> 11 #include "../ssl_local.h" 12 #include "internal/cryptlib.h" 13 #include "internal/ssl_unwrap.h" 14 #include "statem_local.h" 15 16 EXT_RETURN tls_construct_ctos_renegotiate(SSL_CONNECTION *s, WPACKET *pkt, 17 unsigned int context, X509 *x, 18 size_t chainidx) 19 { 20 if (!s->renegotiate) { 21 /* If not renegotiating, send an empty RI extension to indicate support */ 22 23 #if DTLS_MAX_VERSION_INTERNAL != DTLS1_2_VERSION 24 #error Internal DTLS version error 25 #endif 26 27 if (!SSL_CONNECTION_IS_DTLS(s) 28 && (s->min_proto_version >= TLS1_3_VERSION 29 || (ssl_security(s, SSL_SECOP_VERSION, 0, TLS1_VERSION, NULL) 30 && s->min_proto_version <= TLS1_VERSION))) { 31 /* 32 * For TLS <= 1.0 SCSV is used instead, and for TLS 1.3 this 33 * extension isn't used at all. 34 */ 35 return EXT_RETURN_NOT_SENT; 36 } 37 38 if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_renegotiate) 39 || !WPACKET_start_sub_packet_u16(pkt) 40 || !WPACKET_put_bytes_u8(pkt, 0) 41 || !WPACKET_close(pkt)) { 42 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); 43 return EXT_RETURN_FAIL; 44 } 45 46 return EXT_RETURN_SENT; 47 } 48 49 /* Add a complete RI extension if renegotiating */ 50 if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_renegotiate) 51 || !WPACKET_start_sub_packet_u16(pkt) 52 || !WPACKET_sub_memcpy_u8(pkt, s->s3.previous_client_finished, 53 s->s3.previous_client_finished_len) 54 || !WPACKET_close(pkt)) { 55 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); 56 return EXT_RETURN_FAIL; 57 } 58 59 return EXT_RETURN_SENT; 60 } 61 62 EXT_RETURN tls_construct_ctos_server_name(SSL_CONNECTION *s, WPACKET *pkt, 63 unsigned int context, X509 *x, 64 size_t chainidx) 65 { 66 if (s->ext.hostname == NULL) 67 return EXT_RETURN_NOT_SENT; 68 69 /* Add TLS extension servername to the Client Hello message */ 70 if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_server_name) 71 /* Sub-packet for server_name extension */ 72 || !WPACKET_start_sub_packet_u16(pkt) 73 /* Sub-packet for servername list (always 1 hostname)*/ 74 || !WPACKET_start_sub_packet_u16(pkt) 75 || !WPACKET_put_bytes_u8(pkt, TLSEXT_NAMETYPE_host_name) 76 || !WPACKET_sub_memcpy_u16(pkt, s->ext.hostname, 77 strlen(s->ext.hostname)) 78 || !WPACKET_close(pkt) 79 || !WPACKET_close(pkt)) { 80 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); 81 return EXT_RETURN_FAIL; 82 } 83 84 return EXT_RETURN_SENT; 85 } 86 87 /* Push a Max Fragment Len extension into ClientHello */ 88 EXT_RETURN tls_construct_ctos_maxfragmentlen(SSL_CONNECTION *s, WPACKET *pkt, 89 unsigned int context, X509 *x, 90 size_t chainidx) 91 { 92 if (s->ext.max_fragment_len_mode == TLSEXT_max_fragment_length_DISABLED) 93 return EXT_RETURN_NOT_SENT; 94 95 /* Add Max Fragment Length extension if client enabled it. */ 96 /*- 97 * 4 bytes for this extension type and extension length 98 * 1 byte for the Max Fragment Length code value. 99 */ 100 if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_max_fragment_length) 101 /* Sub-packet for Max Fragment Length extension (1 byte) */ 102 || !WPACKET_start_sub_packet_u16(pkt) 103 || !WPACKET_put_bytes_u8(pkt, s->ext.max_fragment_len_mode) 104 || !WPACKET_close(pkt)) { 105 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); 106 return EXT_RETURN_FAIL; 107 } 108 109 return EXT_RETURN_SENT; 110 } 111 112 #ifndef OPENSSL_NO_SRP 113 EXT_RETURN tls_construct_ctos_srp(SSL_CONNECTION *s, WPACKET *pkt, 114 unsigned int context, 115 X509 *x, size_t chainidx) 116 { 117 /* Add SRP username if there is one */ 118 if (s->srp_ctx.login == NULL) 119 return EXT_RETURN_NOT_SENT; 120 121 if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_srp) 122 /* Sub-packet for SRP extension */ 123 || !WPACKET_start_sub_packet_u16(pkt) 124 || !WPACKET_start_sub_packet_u8(pkt) 125 /* login must not be zero...internal error if so */ 126 || !WPACKET_set_flags(pkt, WPACKET_FLAGS_NON_ZERO_LENGTH) 127 || !WPACKET_memcpy(pkt, s->srp_ctx.login, 128 strlen(s->srp_ctx.login)) 129 || !WPACKET_close(pkt) 130 || !WPACKET_close(pkt)) { 131 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); 132 return EXT_RETURN_FAIL; 133 } 134 135 return EXT_RETURN_SENT; 136 } 137 #endif 138 139 static int use_ecc(SSL_CONNECTION *s, int min_version, int max_version) 140 { 141 int i, end, ret = 0; 142 unsigned long alg_k, alg_a; 143 STACK_OF(SSL_CIPHER) *cipher_stack = NULL; 144 const uint16_t *pgroups = NULL; 145 size_t num_groups, j; 146 SSL *ssl = SSL_CONNECTION_GET_SSL(s); 147 148 /* See if we support any ECC ciphersuites */ 149 if (s->version == SSL3_VERSION) 150 return 0; 151 152 cipher_stack = SSL_get1_supported_ciphers(ssl); 153 end = sk_SSL_CIPHER_num(cipher_stack); 154 for (i = 0; i < end; i++) { 155 const SSL_CIPHER *c = sk_SSL_CIPHER_value(cipher_stack, i); 156 157 alg_k = c->algorithm_mkey; 158 alg_a = c->algorithm_auth; 159 if ((alg_k & (SSL_kECDHE | SSL_kECDHEPSK)) 160 || (alg_a & SSL_aECDSA) 161 || c->min_tls >= TLS1_3_VERSION) { 162 ret = 1; 163 break; 164 } 165 } 166 sk_SSL_CIPHER_free(cipher_stack); 167 if (!ret) 168 return 0; 169 170 /* Check we have at least one EC supported group */ 171 tls1_get_supported_groups(s, &pgroups, &num_groups); 172 for (j = 0; j < num_groups; j++) { 173 uint16_t ctmp = pgroups[j]; 174 175 if (tls_valid_group(s, ctmp, min_version, max_version, 1, NULL) 176 && tls_group_allowed(s, ctmp, SSL_SECOP_CURVE_SUPPORTED)) 177 return 1; 178 } 179 180 return 0; 181 } 182 183 EXT_RETURN tls_construct_ctos_ec_pt_formats(SSL_CONNECTION *s, WPACKET *pkt, 184 unsigned int context, X509 *x, 185 size_t chainidx) 186 { 187 const unsigned char *pformats; 188 size_t num_formats; 189 int reason, min_version, max_version; 190 191 reason = ssl_get_min_max_version(s, &min_version, &max_version, NULL); 192 if (reason != 0) { 193 SSLfatal(s, SSL_AD_INTERNAL_ERROR, reason); 194 return EXT_RETURN_FAIL; 195 } 196 if (!use_ecc(s, min_version, max_version)) 197 return EXT_RETURN_NOT_SENT; 198 199 /* Add TLS extension ECPointFormats to the ClientHello message */ 200 tls1_get_formatlist(s, &pformats, &num_formats); 201 202 if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_ec_point_formats) 203 /* Sub-packet for formats extension */ 204 || !WPACKET_start_sub_packet_u16(pkt) 205 || !WPACKET_sub_memcpy_u8(pkt, pformats, num_formats) 206 || !WPACKET_close(pkt)) { 207 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); 208 return EXT_RETURN_FAIL; 209 } 210 211 return EXT_RETURN_SENT; 212 } 213 214 EXT_RETURN tls_construct_ctos_supported_groups(SSL_CONNECTION *s, WPACKET *pkt, 215 unsigned int context, X509 *x, 216 size_t chainidx) 217 { 218 const uint16_t *pgroups = NULL; 219 size_t num_groups = 0, i, tls13added = 0, added = 0; 220 int min_version, max_version, reason; 221 222 reason = ssl_get_min_max_version(s, &min_version, &max_version, NULL); 223 if (reason != 0) { 224 SSLfatal(s, SSL_AD_INTERNAL_ERROR, reason); 225 return EXT_RETURN_FAIL; 226 } 227 228 /* 229 * We only support EC groups in TLSv1.2 or below, and in DTLS. Therefore 230 * if we don't have EC support then we don't send this extension. 231 */ 232 if (!use_ecc(s, min_version, max_version) 233 && (SSL_CONNECTION_IS_DTLS(s) || max_version < TLS1_3_VERSION)) 234 return EXT_RETURN_NOT_SENT; 235 236 /* 237 * Add TLS extension supported_groups to the ClientHello message 238 */ 239 tls1_get_supported_groups(s, &pgroups, &num_groups); 240 241 if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_supported_groups) 242 /* Sub-packet for supported_groups extension */ 243 || !WPACKET_start_sub_packet_u16(pkt) 244 || !WPACKET_start_sub_packet_u16(pkt) 245 || !WPACKET_set_flags(pkt, WPACKET_FLAGS_NON_ZERO_LENGTH)) { 246 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); 247 return EXT_RETURN_FAIL; 248 } 249 /* Copy group ID if supported */ 250 for (i = 0; i < num_groups; i++) { 251 uint16_t ctmp = pgroups[i]; 252 int okfortls13; 253 254 if (tls_valid_group(s, ctmp, min_version, max_version, 0, &okfortls13) 255 && tls_group_allowed(s, ctmp, SSL_SECOP_CURVE_SUPPORTED)) { 256 if (!WPACKET_put_bytes_u16(pkt, ctmp)) { 257 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); 258 return EXT_RETURN_FAIL; 259 } 260 if (okfortls13 && max_version == TLS1_3_VERSION) 261 tls13added++; 262 added++; 263 } 264 } 265 if (!WPACKET_close(pkt) || !WPACKET_close(pkt)) { 266 if (added == 0) 267 SSLfatal_data(s, SSL_AD_INTERNAL_ERROR, SSL_R_NO_SUITABLE_GROUPS, 268 "No groups enabled for max supported SSL/TLS version"); 269 else 270 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); 271 return EXT_RETURN_FAIL; 272 } 273 274 if (tls13added == 0 && max_version == TLS1_3_VERSION) { 275 SSLfatal_data(s, SSL_AD_INTERNAL_ERROR, SSL_R_NO_SUITABLE_GROUPS, 276 "No groups enabled for max supported SSL/TLS version"); 277 return EXT_RETURN_FAIL; 278 } 279 280 return EXT_RETURN_SENT; 281 } 282 283 EXT_RETURN tls_construct_ctos_session_ticket(SSL_CONNECTION *s, WPACKET *pkt, 284 unsigned int context, X509 *x, 285 size_t chainidx) 286 { 287 size_t ticklen; 288 289 if (!tls_use_ticket(s)) 290 return EXT_RETURN_NOT_SENT; 291 292 if (!s->new_session && s->session != NULL 293 && s->session->ext.tick != NULL 294 && s->session->ssl_version != TLS1_3_VERSION) { 295 ticklen = s->session->ext.ticklen; 296 } else if (s->session && s->ext.session_ticket != NULL 297 && s->ext.session_ticket->data != NULL) { 298 ticklen = s->ext.session_ticket->length; 299 s->session->ext.tick = OPENSSL_malloc(ticklen); 300 if (s->session->ext.tick == NULL) { 301 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); 302 return EXT_RETURN_FAIL; 303 } 304 memcpy(s->session->ext.tick, 305 s->ext.session_ticket->data, ticklen); 306 s->session->ext.ticklen = ticklen; 307 } else { 308 ticklen = 0; 309 } 310 311 if (ticklen == 0 && s->ext.session_ticket != NULL && s->ext.session_ticket->data == NULL) 312 return EXT_RETURN_NOT_SENT; 313 314 if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_session_ticket) 315 || !WPACKET_sub_memcpy_u16(pkt, s->session->ext.tick, ticklen)) { 316 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); 317 return EXT_RETURN_FAIL; 318 } 319 320 return EXT_RETURN_SENT; 321 } 322 323 EXT_RETURN tls_construct_ctos_sig_algs(SSL_CONNECTION *s, WPACKET *pkt, 324 unsigned int context, X509 *x, 325 size_t chainidx) 326 { 327 size_t salglen; 328 const uint16_t *salg; 329 330 /* 331 * This used both in the initial hello and as part of renegotiation, 332 * in the latter case, the client version may be already set and may 333 * be lower than that initially offered in `client_version`. 334 */ 335 if (!SSL_CONNECTION_IS_DTLS(s)) { 336 if (s->client_version < TLS1_2_VERSION 337 || (s->ssl.method->version != TLS_ANY_VERSION 338 && s->version < TLS1_2_VERSION)) 339 return EXT_RETURN_NOT_SENT; 340 } else { 341 if (DTLS_VERSION_LT(s->client_version, DTLS1_2_VERSION) 342 || (s->ssl.method->version != DTLS_ANY_VERSION 343 && DTLS_VERSION_LT(s->version, DTLS1_2_VERSION))) 344 return EXT_RETURN_NOT_SENT; 345 } 346 347 salglen = tls12_get_psigalgs(s, 1, &salg); 348 if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_signature_algorithms) 349 /* Sub-packet for sig-algs extension */ 350 || !WPACKET_start_sub_packet_u16(pkt) 351 /* Sub-packet for the actual list */ 352 || !WPACKET_start_sub_packet_u16(pkt) 353 || !tls12_copy_sigalgs(s, pkt, salg, salglen) 354 || !WPACKET_close(pkt) 355 || !WPACKET_close(pkt)) { 356 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); 357 return EXT_RETURN_FAIL; 358 } 359 360 return EXT_RETURN_SENT; 361 } 362 363 #ifndef OPENSSL_NO_OCSP 364 EXT_RETURN tls_construct_ctos_status_request(SSL_CONNECTION *s, WPACKET *pkt, 365 unsigned int context, X509 *x, 366 size_t chainidx) 367 { 368 int i; 369 370 /* This extension isn't defined for client Certificates */ 371 if (x != NULL) 372 return EXT_RETURN_NOT_SENT; 373 374 if (s->ext.status_type != TLSEXT_STATUSTYPE_ocsp) 375 return EXT_RETURN_NOT_SENT; 376 377 if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_status_request) 378 /* Sub-packet for status request extension */ 379 || !WPACKET_start_sub_packet_u16(pkt) 380 || !WPACKET_put_bytes_u8(pkt, TLSEXT_STATUSTYPE_ocsp) 381 /* Sub-packet for the ids */ 382 || !WPACKET_start_sub_packet_u16(pkt)) { 383 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); 384 return EXT_RETURN_FAIL; 385 } 386 for (i = 0; i < sk_OCSP_RESPID_num(s->ext.ocsp.ids); i++) { 387 unsigned char *idbytes; 388 OCSP_RESPID *id = sk_OCSP_RESPID_value(s->ext.ocsp.ids, i); 389 int idlen = i2d_OCSP_RESPID(id, NULL); 390 391 if (idlen <= 0 392 /* Sub-packet for an individual id */ 393 || !WPACKET_sub_allocate_bytes_u16(pkt, idlen, &idbytes) 394 || i2d_OCSP_RESPID(id, &idbytes) != idlen) { 395 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); 396 return EXT_RETURN_FAIL; 397 } 398 } 399 if (!WPACKET_close(pkt) 400 || !WPACKET_start_sub_packet_u16(pkt)) { 401 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); 402 return EXT_RETURN_FAIL; 403 } 404 if (s->ext.ocsp.exts) { 405 unsigned char *extbytes; 406 int extlen = i2d_X509_EXTENSIONS(s->ext.ocsp.exts, NULL); 407 408 if (extlen < 0) { 409 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); 410 return EXT_RETURN_FAIL; 411 } 412 if (!WPACKET_allocate_bytes(pkt, extlen, &extbytes) 413 || i2d_X509_EXTENSIONS(s->ext.ocsp.exts, &extbytes) 414 != extlen) { 415 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); 416 return EXT_RETURN_FAIL; 417 } 418 } 419 if (!WPACKET_close(pkt) || !WPACKET_close(pkt)) { 420 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); 421 return EXT_RETURN_FAIL; 422 } 423 424 return EXT_RETURN_SENT; 425 } 426 #endif 427 428 #ifndef OPENSSL_NO_NEXTPROTONEG 429 EXT_RETURN tls_construct_ctos_npn(SSL_CONNECTION *s, WPACKET *pkt, 430 unsigned int context, 431 X509 *x, size_t chainidx) 432 { 433 if (SSL_CONNECTION_GET_CTX(s)->ext.npn_select_cb == NULL 434 || !SSL_IS_FIRST_HANDSHAKE(s)) 435 return EXT_RETURN_NOT_SENT; 436 437 /* 438 * The client advertises an empty extension to indicate its support 439 * for Next Protocol Negotiation 440 */ 441 if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_next_proto_neg) 442 || !WPACKET_put_bytes_u16(pkt, 0)) { 443 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); 444 return EXT_RETURN_FAIL; 445 } 446 447 return EXT_RETURN_SENT; 448 } 449 #endif 450 451 EXT_RETURN tls_construct_ctos_alpn(SSL_CONNECTION *s, WPACKET *pkt, 452 unsigned int context, 453 X509 *x, size_t chainidx) 454 { 455 s->s3.alpn_sent = 0; 456 457 if (s->ext.alpn == NULL || !SSL_IS_FIRST_HANDSHAKE(s)) 458 return EXT_RETURN_NOT_SENT; 459 460 if (!WPACKET_put_bytes_u16(pkt, 461 TLSEXT_TYPE_application_layer_protocol_negotiation) 462 /* Sub-packet ALPN extension */ 463 || !WPACKET_start_sub_packet_u16(pkt) 464 || !WPACKET_sub_memcpy_u16(pkt, s->ext.alpn, s->ext.alpn_len) 465 || !WPACKET_close(pkt)) { 466 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); 467 return EXT_RETURN_FAIL; 468 } 469 s->s3.alpn_sent = 1; 470 471 return EXT_RETURN_SENT; 472 } 473 474 #ifndef OPENSSL_NO_SRTP 475 EXT_RETURN tls_construct_ctos_use_srtp(SSL_CONNECTION *s, WPACKET *pkt, 476 unsigned int context, X509 *x, 477 size_t chainidx) 478 { 479 SSL *ssl = SSL_CONNECTION_GET_SSL(s); 480 STACK_OF(SRTP_PROTECTION_PROFILE) *clnt = SSL_get_srtp_profiles(ssl); 481 int i, end; 482 483 if (clnt == NULL) 484 return EXT_RETURN_NOT_SENT; 485 486 if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_use_srtp) 487 /* Sub-packet for SRTP extension */ 488 || !WPACKET_start_sub_packet_u16(pkt) 489 /* Sub-packet for the protection profile list */ 490 || !WPACKET_start_sub_packet_u16(pkt)) { 491 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); 492 return EXT_RETURN_FAIL; 493 } 494 495 end = sk_SRTP_PROTECTION_PROFILE_num(clnt); 496 for (i = 0; i < end; i++) { 497 const SRTP_PROTECTION_PROFILE *prof = sk_SRTP_PROTECTION_PROFILE_value(clnt, i); 498 499 if (prof == NULL || !WPACKET_put_bytes_u16(pkt, prof->id)) { 500 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); 501 return EXT_RETURN_FAIL; 502 } 503 } 504 if (!WPACKET_close(pkt) 505 /* Add an empty use_mki value */ 506 || !WPACKET_put_bytes_u8(pkt, 0) 507 || !WPACKET_close(pkt)) { 508 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); 509 return EXT_RETURN_FAIL; 510 } 511 512 return EXT_RETURN_SENT; 513 } 514 #endif 515 516 EXT_RETURN tls_construct_ctos_etm(SSL_CONNECTION *s, WPACKET *pkt, 517 unsigned int context, 518 X509 *x, size_t chainidx) 519 { 520 if (s->options & SSL_OP_NO_ENCRYPT_THEN_MAC) 521 return EXT_RETURN_NOT_SENT; 522 523 if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_encrypt_then_mac) 524 || !WPACKET_put_bytes_u16(pkt, 0)) { 525 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); 526 return EXT_RETURN_FAIL; 527 } 528 529 return EXT_RETURN_SENT; 530 } 531 532 #ifndef OPENSSL_NO_CT 533 EXT_RETURN tls_construct_ctos_sct(SSL_CONNECTION *s, WPACKET *pkt, 534 unsigned int context, 535 X509 *x, size_t chainidx) 536 { 537 if (s->ct_validation_callback == NULL) 538 return EXT_RETURN_NOT_SENT; 539 540 /* Not defined for client Certificates */ 541 if (x != NULL) 542 return EXT_RETURN_NOT_SENT; 543 544 if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_signed_certificate_timestamp) 545 || !WPACKET_put_bytes_u16(pkt, 0)) { 546 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); 547 return EXT_RETURN_FAIL; 548 } 549 550 return EXT_RETURN_SENT; 551 } 552 #endif 553 554 EXT_RETURN tls_construct_ctos_ems(SSL_CONNECTION *s, WPACKET *pkt, 555 unsigned int context, 556 X509 *x, size_t chainidx) 557 { 558 if (s->options & SSL_OP_NO_EXTENDED_MASTER_SECRET) 559 return EXT_RETURN_NOT_SENT; 560 561 if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_extended_master_secret) 562 || !WPACKET_put_bytes_u16(pkt, 0)) { 563 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); 564 return EXT_RETURN_FAIL; 565 } 566 567 return EXT_RETURN_SENT; 568 } 569 570 EXT_RETURN tls_construct_ctos_supported_versions(SSL_CONNECTION *s, WPACKET *pkt, 571 unsigned int context, X509 *x, 572 size_t chainidx) 573 { 574 int currv, min_version, max_version, reason; 575 576 reason = ssl_get_min_max_version(s, &min_version, &max_version, NULL); 577 if (reason != 0) { 578 SSLfatal(s, SSL_AD_INTERNAL_ERROR, reason); 579 return EXT_RETURN_FAIL; 580 } 581 582 /* 583 * Don't include this if we can't negotiate TLSv1.3. We can do a straight 584 * comparison here because we will never be called in DTLS. 585 */ 586 if (max_version < TLS1_3_VERSION) 587 return EXT_RETURN_NOT_SENT; 588 589 if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_supported_versions) 590 || !WPACKET_start_sub_packet_u16(pkt) 591 || !WPACKET_start_sub_packet_u8(pkt)) { 592 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); 593 return EXT_RETURN_FAIL; 594 } 595 596 for (currv = max_version; currv >= min_version; currv--) { 597 if (!WPACKET_put_bytes_u16(pkt, currv)) { 598 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); 599 return EXT_RETURN_FAIL; 600 } 601 } 602 if (!WPACKET_close(pkt) || !WPACKET_close(pkt)) { 603 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); 604 return EXT_RETURN_FAIL; 605 } 606 607 return EXT_RETURN_SENT; 608 } 609 610 /* 611 * Construct a psk_kex_modes extension. 612 */ 613 EXT_RETURN tls_construct_ctos_psk_kex_modes(SSL_CONNECTION *s, WPACKET *pkt, 614 unsigned int context, X509 *x, 615 size_t chainidx) 616 { 617 #ifndef OPENSSL_NO_TLS1_3 618 int nodhe = s->options & SSL_OP_ALLOW_NO_DHE_KEX; 619 620 if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_psk_kex_modes) 621 || !WPACKET_start_sub_packet_u16(pkt) 622 || !WPACKET_start_sub_packet_u8(pkt) 623 || !WPACKET_put_bytes_u8(pkt, TLSEXT_KEX_MODE_KE_DHE) 624 || (nodhe && !WPACKET_put_bytes_u8(pkt, TLSEXT_KEX_MODE_KE)) 625 || !WPACKET_close(pkt) 626 || !WPACKET_close(pkt)) { 627 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); 628 return EXT_RETURN_FAIL; 629 } 630 631 s->ext.psk_kex_mode = TLSEXT_KEX_MODE_FLAG_KE_DHE; 632 if (nodhe) 633 s->ext.psk_kex_mode |= TLSEXT_KEX_MODE_FLAG_KE; 634 #endif 635 636 return EXT_RETURN_SENT; 637 } 638 639 #ifndef OPENSSL_NO_TLS1_3 640 static int add_key_share(SSL_CONNECTION *s, WPACKET *pkt, unsigned int group_id, size_t loop_num) 641 { 642 unsigned char *encoded_pubkey = NULL; 643 EVP_PKEY *key_share_key = NULL; 644 size_t encodedlen; 645 646 if (loop_num < s->s3.tmp.num_ks_pkey) { 647 if (!ossl_assert(s->hello_retry_request == SSL_HRR_PENDING) 648 || !ossl_assert(s->s3.tmp.ks_pkey[loop_num] != NULL)) { 649 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); 650 return 0; 651 } 652 /* 653 * Could happen if we got an HRR that wasn't requesting a new key_share 654 */ 655 key_share_key = s->s3.tmp.ks_pkey[loop_num]; 656 } else { 657 key_share_key = ssl_generate_pkey_group(s, group_id); 658 if (key_share_key == NULL) { 659 /* SSLfatal() already called */ 660 return 0; 661 } 662 } 663 664 /* Encode the public key. */ 665 encodedlen = EVP_PKEY_get1_encoded_public_key(key_share_key, 666 &encoded_pubkey); 667 if (encodedlen == 0) { 668 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_EC_LIB); 669 goto err; 670 } 671 672 /* Create KeyShareEntry */ 673 if (!WPACKET_put_bytes_u16(pkt, group_id) 674 || !WPACKET_sub_memcpy_u16(pkt, encoded_pubkey, encodedlen)) { 675 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); 676 goto err; 677 } 678 679 /* For backward compatibility, we use the first valid group to add a key share */ 680 if (loop_num == 0) { 681 s->s3.tmp.pkey = key_share_key; 682 s->s3.group_id = group_id; 683 } 684 /* We ensure in t1_lib.c that the loop number does not exceed OPENSSL_CLIENT_MAX_KEY_SHARES */ 685 s->s3.tmp.ks_pkey[loop_num] = key_share_key; 686 s->s3.tmp.ks_group_id[loop_num] = group_id; 687 if (loop_num >= s->s3.tmp.num_ks_pkey) 688 s->s3.tmp.num_ks_pkey++; 689 690 OPENSSL_free(encoded_pubkey); 691 692 return 1; 693 err: 694 if (key_share_key != s->s3.tmp.ks_pkey[loop_num]) 695 EVP_PKEY_free(key_share_key); 696 OPENSSL_free(encoded_pubkey); 697 return 0; 698 } 699 #endif 700 701 EXT_RETURN tls_construct_ctos_key_share(SSL_CONNECTION *s, WPACKET *pkt, 702 unsigned int context, X509 *x, 703 size_t chainidx) 704 { 705 #ifndef OPENSSL_NO_TLS1_3 706 size_t i, num_groups = 0; 707 const uint16_t *pgroups = NULL; 708 uint16_t group_id = 0; 709 int add_only_one = 0; 710 size_t valid_keyshare = 0; 711 712 /* key_share extension */ 713 if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_key_share) 714 /* Extension data sub-packet */ 715 || !WPACKET_start_sub_packet_u16(pkt) 716 /* KeyShare list sub-packet */ 717 || !WPACKET_start_sub_packet_u16(pkt)) { 718 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); 719 return EXT_RETURN_FAIL; 720 } 721 722 tls1_get_requested_keyshare_groups(s, &pgroups, &num_groups); 723 if (num_groups == 1 && pgroups[0] == 0) { /* Indication that no * prefix was used */ 724 tls1_get_supported_groups(s, &pgroups, &num_groups); 725 add_only_one = 1; 726 } 727 728 /* If neither the default nor the keyshares have any entry --> fatal */ 729 if (num_groups == 0) { 730 SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_R_NO_SUITABLE_KEY_SHARE); 731 return EXT_RETURN_FAIL; 732 } 733 734 /* Add key shares */ 735 736 if (s->s3.group_id != 0 && s->s3.tmp.pkey == NULL) { 737 /* new, single key share */ 738 group_id = s->s3.group_id; 739 s->s3.tmp.num_ks_pkey = 0; 740 if (!add_key_share(s, pkt, group_id, 0)) { 741 /* SSLfatal() already called */ 742 return EXT_RETURN_FAIL; 743 } 744 valid_keyshare++; 745 } else { 746 if (s->ext.supportedgroups == NULL) /* use default */ 747 add_only_one = 1; 748 749 for (i = 0; i < num_groups; i++) { 750 if (!tls_group_allowed(s, pgroups[i], SSL_SECOP_CURVE_SUPPORTED)) 751 continue; 752 if (!tls_valid_group(s, pgroups[i], TLS1_3_VERSION, TLS1_3_VERSION, 753 0, NULL)) 754 continue; 755 756 group_id = pgroups[i]; 757 758 if (group_id == 0) { 759 SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_R_NO_SUITABLE_KEY_SHARE); 760 return EXT_RETURN_FAIL; 761 } 762 if (!add_key_share(s, pkt, group_id, valid_keyshare)) { 763 /* SSLfatal() already called */ 764 return EXT_RETURN_FAIL; 765 } 766 valid_keyshare++; 767 if (add_only_one) 768 break; 769 } 770 } 771 772 if (valid_keyshare == 0) { 773 /* No key shares were allowed */ 774 SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_R_NO_SUITABLE_KEY_SHARE); 775 return EXT_RETURN_FAIL; 776 } 777 778 if (!WPACKET_close(pkt) || !WPACKET_close(pkt)) { 779 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); 780 return EXT_RETURN_FAIL; 781 } 782 return EXT_RETURN_SENT; 783 #else 784 return EXT_RETURN_NOT_SENT; 785 #endif 786 } 787 788 EXT_RETURN tls_construct_ctos_cookie(SSL_CONNECTION *s, WPACKET *pkt, 789 unsigned int context, 790 X509 *x, size_t chainidx) 791 { 792 EXT_RETURN ret = EXT_RETURN_FAIL; 793 794 /* Should only be set if we've had an HRR */ 795 if (s->ext.tls13_cookie_len == 0) 796 return EXT_RETURN_NOT_SENT; 797 798 if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_cookie) 799 /* Extension data sub-packet */ 800 || !WPACKET_start_sub_packet_u16(pkt) 801 || !WPACKET_sub_memcpy_u16(pkt, s->ext.tls13_cookie, 802 s->ext.tls13_cookie_len) 803 || !WPACKET_close(pkt)) { 804 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); 805 goto end; 806 } 807 808 ret = EXT_RETURN_SENT; 809 end: 810 OPENSSL_free(s->ext.tls13_cookie); 811 s->ext.tls13_cookie = NULL; 812 s->ext.tls13_cookie_len = 0; 813 814 return ret; 815 } 816 817 EXT_RETURN tls_construct_ctos_early_data(SSL_CONNECTION *s, WPACKET *pkt, 818 unsigned int context, X509 *x, 819 size_t chainidx) 820 { 821 #ifndef OPENSSL_NO_PSK 822 char identity[PSK_MAX_IDENTITY_LEN + 1]; 823 #endif /* OPENSSL_NO_PSK */ 824 const unsigned char *id = NULL; 825 size_t idlen = 0; 826 SSL_SESSION *psksess = NULL; 827 SSL_SESSION *edsess = NULL; 828 const EVP_MD *handmd = NULL; 829 SSL *ussl = SSL_CONNECTION_GET_USER_SSL(s); 830 831 if (s->hello_retry_request == SSL_HRR_PENDING) 832 handmd = ssl_handshake_md(s); 833 834 if (s->psk_use_session_cb != NULL 835 && (!s->psk_use_session_cb(ussl, handmd, &id, &idlen, &psksess) 836 || (psksess != NULL 837 && psksess->ssl_version != TLS1_3_VERSION))) { 838 SSL_SESSION_free(psksess); 839 SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_R_BAD_PSK); 840 return EXT_RETURN_FAIL; 841 } 842 843 #ifndef OPENSSL_NO_PSK 844 if (psksess == NULL && s->psk_client_callback != NULL) { 845 unsigned char psk[PSK_MAX_PSK_LEN]; 846 size_t psklen = 0; 847 848 memset(identity, 0, sizeof(identity)); 849 psklen = s->psk_client_callback(ussl, NULL, 850 identity, sizeof(identity) - 1, 851 psk, sizeof(psk)); 852 853 if (psklen > PSK_MAX_PSK_LEN) { 854 SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, ERR_R_INTERNAL_ERROR); 855 return EXT_RETURN_FAIL; 856 } else if (psklen > 0) { 857 const unsigned char tls13_aes128gcmsha256_id[] = { 0x13, 0x01 }; 858 const SSL_CIPHER *cipher; 859 860 idlen = strlen(identity); 861 if (idlen > PSK_MAX_IDENTITY_LEN) { 862 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); 863 return EXT_RETURN_FAIL; 864 } 865 id = (unsigned char *)identity; 866 867 /* 868 * We found a PSK using an old style callback. We don't know 869 * the digest so we default to SHA256 as per the TLSv1.3 spec 870 */ 871 cipher = SSL_CIPHER_find(SSL_CONNECTION_GET_SSL(s), 872 tls13_aes128gcmsha256_id); 873 if (cipher == NULL) { 874 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); 875 return EXT_RETURN_FAIL; 876 } 877 878 psksess = SSL_SESSION_new(); 879 if (psksess == NULL 880 || !SSL_SESSION_set1_master_key(psksess, psk, psklen) 881 || !SSL_SESSION_set_cipher(psksess, cipher) 882 || !SSL_SESSION_set_protocol_version(psksess, TLS1_3_VERSION)) { 883 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); 884 OPENSSL_cleanse(psk, psklen); 885 return EXT_RETURN_FAIL; 886 } 887 OPENSSL_cleanse(psk, psklen); 888 } 889 } 890 #endif /* OPENSSL_NO_PSK */ 891 892 SSL_SESSION_free(s->psksession); 893 s->psksession = psksess; 894 if (psksess != NULL) { 895 OPENSSL_free(s->psksession_id); 896 s->psksession_id = OPENSSL_memdup(id, idlen); 897 if (s->psksession_id == NULL) { 898 s->psksession_id_len = 0; 899 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); 900 return EXT_RETURN_FAIL; 901 } 902 s->psksession_id_len = idlen; 903 } 904 905 if (s->early_data_state != SSL_EARLY_DATA_CONNECTING 906 || (s->session->ext.max_early_data == 0 907 && (psksess == NULL || psksess->ext.max_early_data == 0))) { 908 s->max_early_data = 0; 909 return EXT_RETURN_NOT_SENT; 910 } 911 edsess = s->session->ext.max_early_data != 0 ? s->session : psksess; 912 s->max_early_data = edsess->ext.max_early_data; 913 914 if (edsess->ext.hostname != NULL) { 915 if (s->ext.hostname == NULL 916 || (s->ext.hostname != NULL 917 && strcmp(s->ext.hostname, edsess->ext.hostname) != 0)) { 918 SSLfatal(s, SSL_AD_INTERNAL_ERROR, 919 SSL_R_INCONSISTENT_EARLY_DATA_SNI); 920 return EXT_RETURN_FAIL; 921 } 922 } 923 924 if ((s->ext.alpn == NULL && edsess->ext.alpn_selected != NULL)) { 925 SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_R_INCONSISTENT_EARLY_DATA_ALPN); 926 return EXT_RETURN_FAIL; 927 } 928 929 /* 930 * Verify that we are offering an ALPN protocol consistent with the early 931 * data. 932 */ 933 if (edsess->ext.alpn_selected != NULL) { 934 PACKET prots, alpnpkt; 935 int found = 0; 936 937 if (!PACKET_buf_init(&prots, s->ext.alpn, s->ext.alpn_len)) { 938 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); 939 return EXT_RETURN_FAIL; 940 } 941 while (PACKET_get_length_prefixed_1(&prots, &alpnpkt)) { 942 if (PACKET_equal(&alpnpkt, edsess->ext.alpn_selected, 943 edsess->ext.alpn_selected_len)) { 944 found = 1; 945 break; 946 } 947 } 948 if (!found) { 949 SSLfatal(s, SSL_AD_INTERNAL_ERROR, 950 SSL_R_INCONSISTENT_EARLY_DATA_ALPN); 951 return EXT_RETURN_FAIL; 952 } 953 } 954 955 if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_early_data) 956 || !WPACKET_start_sub_packet_u16(pkt) 957 || !WPACKET_close(pkt)) { 958 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); 959 return EXT_RETURN_FAIL; 960 } 961 962 /* 963 * We set this to rejected here. Later, if the server acknowledges the 964 * extension, we set it to accepted. 965 */ 966 s->ext.early_data = SSL_EARLY_DATA_REJECTED; 967 s->ext.early_data_ok = 1; 968 969 return EXT_RETURN_SENT; 970 } 971 972 #define F5_WORKAROUND_MIN_MSG_LEN 0xff 973 #define F5_WORKAROUND_MAX_MSG_LEN 0x200 974 975 /* 976 * PSK pre binder overhead = 977 * 2 bytes for TLSEXT_TYPE_psk 978 * 2 bytes for extension length 979 * 2 bytes for identities list length 980 * 2 bytes for identity length 981 * 4 bytes for obfuscated_ticket_age 982 * 2 bytes for binder list length 983 * 1 byte for binder length 984 * The above excludes the number of bytes for the identity itself and the 985 * subsequent binder bytes 986 */ 987 #define PSK_PRE_BINDER_OVERHEAD (2 + 2 + 2 + 2 + 4 + 2 + 1) 988 989 EXT_RETURN tls_construct_ctos_padding(SSL_CONNECTION *s, WPACKET *pkt, 990 unsigned int context, X509 *x, 991 size_t chainidx) 992 { 993 unsigned char *padbytes; 994 size_t hlen; 995 996 if ((s->options & SSL_OP_TLSEXT_PADDING) == 0) 997 return EXT_RETURN_NOT_SENT; 998 999 /* 1000 * Add padding to workaround bugs in F5 terminators. See RFC7685. 1001 * This code calculates the length of all extensions added so far but 1002 * excludes the PSK extension (because that MUST be written last). Therefore 1003 * this extension MUST always appear second to last. 1004 */ 1005 if (!WPACKET_get_total_written(pkt, &hlen)) { 1006 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); 1007 return EXT_RETURN_FAIL; 1008 } 1009 1010 /* 1011 * If we're going to send a PSK then that will be written out after this 1012 * extension, so we need to calculate how long it is going to be. 1013 */ 1014 if (s->session->ssl_version == TLS1_3_VERSION 1015 && s->session->ext.ticklen != 0 1016 && s->session->cipher != NULL) { 1017 const EVP_MD *md = ssl_md(SSL_CONNECTION_GET_CTX(s), 1018 s->session->cipher->algorithm2); 1019 1020 if (md != NULL) { 1021 /* 1022 * Add the fixed PSK overhead, the identity length and the binder 1023 * length. 1024 */ 1025 int md_size = EVP_MD_get_size(md); 1026 1027 if (md_size <= 0) 1028 return EXT_RETURN_FAIL; 1029 hlen += PSK_PRE_BINDER_OVERHEAD + s->session->ext.ticklen 1030 + md_size; 1031 } 1032 } 1033 1034 if (hlen > F5_WORKAROUND_MIN_MSG_LEN && hlen < F5_WORKAROUND_MAX_MSG_LEN) { 1035 /* Calculate the amount of padding we need to add */ 1036 hlen = F5_WORKAROUND_MAX_MSG_LEN - hlen; 1037 1038 /* 1039 * Take off the size of extension header itself (2 bytes for type and 1040 * 2 bytes for length bytes), but ensure that the extension is at least 1041 * 1 byte long so as not to have an empty extension last (WebSphere 7.x, 1042 * 8.x are intolerant of that condition) 1043 */ 1044 if (hlen > 4) 1045 hlen -= 4; 1046 else 1047 hlen = 1; 1048 1049 if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_padding) 1050 || !WPACKET_sub_allocate_bytes_u16(pkt, hlen, &padbytes)) { 1051 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); 1052 return EXT_RETURN_FAIL; 1053 } 1054 memset(padbytes, 0, hlen); 1055 } 1056 1057 return EXT_RETURN_SENT; 1058 } 1059 1060 /* 1061 * Construct the pre_shared_key extension 1062 */ 1063 EXT_RETURN tls_construct_ctos_psk(SSL_CONNECTION *s, WPACKET *pkt, 1064 unsigned int context, 1065 X509 *x, size_t chainidx) 1066 { 1067 #ifndef OPENSSL_NO_TLS1_3 1068 uint32_t agesec, agems = 0; 1069 size_t binderoffset, msglen; 1070 int reshashsize = 0, pskhashsize = 0; 1071 unsigned char *resbinder = NULL, *pskbinder = NULL, *msgstart = NULL; 1072 const EVP_MD *handmd = NULL, *mdres = NULL, *mdpsk = NULL; 1073 int dores = 0; 1074 SSL_CTX *sctx = SSL_CONNECTION_GET_CTX(s); 1075 OSSL_TIME t; 1076 1077 s->ext.tick_identity = 0; 1078 1079 /* 1080 * Note: At this stage of the code we only support adding a single 1081 * resumption PSK. If we add support for multiple PSKs then the length 1082 * calculations in the padding extension will need to be adjusted. 1083 */ 1084 1085 /* 1086 * If this is an incompatible or new session then we have nothing to resume 1087 * so don't add this extension. 1088 */ 1089 if (s->session->ssl_version != TLS1_3_VERSION 1090 || (s->session->ext.ticklen == 0 && s->psksession == NULL)) 1091 return EXT_RETURN_NOT_SENT; 1092 1093 if (s->hello_retry_request == SSL_HRR_PENDING) 1094 handmd = ssl_handshake_md(s); 1095 1096 if (s->session->ext.ticklen != 0) { 1097 /* Get the digest associated with the ciphersuite in the session */ 1098 if (s->session->cipher == NULL) { 1099 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); 1100 return EXT_RETURN_FAIL; 1101 } 1102 mdres = ssl_md(sctx, s->session->cipher->algorithm2); 1103 if (mdres == NULL) { 1104 /* 1105 * Don't recognize this cipher so we can't use the session. 1106 * Ignore it 1107 */ 1108 goto dopsksess; 1109 } 1110 1111 if (s->hello_retry_request == SSL_HRR_PENDING && mdres != handmd) { 1112 /* 1113 * Selected ciphersuite hash does not match the hash for the session 1114 * so we can't use it. 1115 */ 1116 goto dopsksess; 1117 } 1118 1119 /* 1120 * Technically the C standard just says time() returns a time_t and says 1121 * nothing about the encoding of that type. In practice most 1122 * implementations follow POSIX which holds it as an integral type in 1123 * seconds since epoch. We've already made the assumption that we can do 1124 * this in multiple places in the code, so portability shouldn't be an 1125 * issue. 1126 */ 1127 t = ossl_time_subtract(ossl_time_now(), s->session->time); 1128 agesec = (uint32_t)ossl_time2seconds(t); 1129 /* 1130 * We calculate the age in seconds but the server may work in ms. Due to 1131 * rounding errors we could overestimate the age by up to 1s. It is 1132 * better to underestimate it. Otherwise, if the RTT is very short, when 1133 * the server calculates the age reported by the client it could be 1134 * bigger than the age calculated on the server - which should never 1135 * happen. 1136 */ 1137 if (agesec > 0) 1138 agesec--; 1139 1140 if (s->session->ext.tick_lifetime_hint < agesec) { 1141 /* Ticket is too old. Ignore it. */ 1142 goto dopsksess; 1143 } 1144 1145 /* 1146 * Calculate age in ms. We're just doing it to nearest second. Should be 1147 * good enough. 1148 */ 1149 agems = agesec * (uint32_t)1000; 1150 1151 if (agesec != 0 && agems / (uint32_t)1000 != agesec) { 1152 /* 1153 * Overflow. Shouldn't happen unless this is a *really* old session. 1154 * If so we just ignore it. 1155 */ 1156 goto dopsksess; 1157 } 1158 1159 /* 1160 * Obfuscate the age. Overflow here is fine, this addition is supposed 1161 * to be mod 2^32. 1162 */ 1163 agems += s->session->ext.tick_age_add; 1164 1165 reshashsize = EVP_MD_get_size(mdres); 1166 if (reshashsize <= 0) 1167 goto dopsksess; 1168 s->ext.tick_identity++; 1169 dores = 1; 1170 } 1171 1172 dopsksess: 1173 if (!dores && s->psksession == NULL) 1174 return EXT_RETURN_NOT_SENT; 1175 1176 if (s->psksession != NULL) { 1177 mdpsk = ssl_md(sctx, s->psksession->cipher->algorithm2); 1178 if (mdpsk == NULL) { 1179 /* 1180 * Don't recognize this cipher so we can't use the session. 1181 * If this happens it's an application bug. 1182 */ 1183 SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_R_BAD_PSK); 1184 return EXT_RETURN_FAIL; 1185 } 1186 1187 if (s->hello_retry_request == SSL_HRR_PENDING && mdpsk != handmd) { 1188 /* 1189 * Selected ciphersuite hash does not match the hash for the PSK 1190 * session. This is an application bug. 1191 */ 1192 SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_R_BAD_PSK); 1193 return EXT_RETURN_FAIL; 1194 } 1195 1196 pskhashsize = EVP_MD_get_size(mdpsk); 1197 if (pskhashsize <= 0) { 1198 SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_R_BAD_PSK); 1199 return EXT_RETURN_FAIL; 1200 } 1201 } 1202 1203 /* Create the extension, but skip over the binder for now */ 1204 if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_psk) 1205 || !WPACKET_start_sub_packet_u16(pkt) 1206 || !WPACKET_start_sub_packet_u16(pkt)) { 1207 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); 1208 return EXT_RETURN_FAIL; 1209 } 1210 1211 if (dores) { 1212 if (!WPACKET_sub_memcpy_u16(pkt, s->session->ext.tick, 1213 s->session->ext.ticklen) 1214 || !WPACKET_put_bytes_u32(pkt, agems)) { 1215 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); 1216 return EXT_RETURN_FAIL; 1217 } 1218 } 1219 1220 if (s->psksession != NULL) { 1221 if (!WPACKET_sub_memcpy_u16(pkt, s->psksession_id, 1222 s->psksession_id_len) 1223 || !WPACKET_put_bytes_u32(pkt, 0)) { 1224 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); 1225 return EXT_RETURN_FAIL; 1226 } 1227 s->ext.tick_identity++; 1228 } 1229 1230 if (!WPACKET_close(pkt) 1231 || !WPACKET_get_total_written(pkt, &binderoffset) 1232 || !WPACKET_start_sub_packet_u16(pkt) 1233 || (dores 1234 && !WPACKET_sub_allocate_bytes_u8(pkt, reshashsize, &resbinder)) 1235 || (s->psksession != NULL 1236 && !WPACKET_sub_allocate_bytes_u8(pkt, pskhashsize, &pskbinder)) 1237 || !WPACKET_close(pkt) 1238 || !WPACKET_close(pkt) 1239 || !WPACKET_get_total_written(pkt, &msglen) 1240 /* 1241 * We need to fill in all the sub-packet lengths now so we can 1242 * calculate the HMAC of the message up to the binders 1243 */ 1244 || !WPACKET_fill_lengths(pkt)) { 1245 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); 1246 return EXT_RETURN_FAIL; 1247 } 1248 1249 msgstart = WPACKET_get_curr(pkt) - msglen; 1250 1251 if (dores 1252 && tls_psk_do_binder(s, mdres, msgstart, binderoffset, NULL, 1253 resbinder, s->session, 1, 0) 1254 != 1) { 1255 /* SSLfatal() already called */ 1256 return EXT_RETURN_FAIL; 1257 } 1258 1259 if (s->psksession != NULL 1260 && tls_psk_do_binder(s, mdpsk, msgstart, binderoffset, NULL, 1261 pskbinder, s->psksession, 1, 1) 1262 != 1) { 1263 /* SSLfatal() already called */ 1264 return EXT_RETURN_FAIL; 1265 } 1266 1267 return EXT_RETURN_SENT; 1268 #else 1269 return EXT_RETURN_NOT_SENT; 1270 #endif 1271 } 1272 1273 EXT_RETURN tls_construct_ctos_post_handshake_auth(SSL_CONNECTION *s, WPACKET *pkt, 1274 ossl_unused unsigned int context, 1275 ossl_unused X509 *x, 1276 ossl_unused size_t chainidx) 1277 { 1278 #ifndef OPENSSL_NO_TLS1_3 1279 if (!s->pha_enabled) 1280 return EXT_RETURN_NOT_SENT; 1281 1282 /* construct extension - 0 length, no contents */ 1283 if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_post_handshake_auth) 1284 || !WPACKET_start_sub_packet_u16(pkt) 1285 || !WPACKET_close(pkt)) { 1286 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); 1287 return EXT_RETURN_FAIL; 1288 } 1289 1290 s->post_handshake_auth = SSL_PHA_EXT_SENT; 1291 1292 return EXT_RETURN_SENT; 1293 #else 1294 return EXT_RETURN_NOT_SENT; 1295 #endif 1296 } 1297 1298 /* 1299 * Parse the server's renegotiation binding and abort if it's not right 1300 */ 1301 int tls_parse_stoc_renegotiate(SSL_CONNECTION *s, PACKET *pkt, 1302 unsigned int context, 1303 X509 *x, size_t chainidx) 1304 { 1305 size_t expected_len = s->s3.previous_client_finished_len 1306 + s->s3.previous_server_finished_len; 1307 size_t ilen; 1308 const unsigned char *data; 1309 1310 /* Check for logic errors */ 1311 if (!ossl_assert(expected_len == 0 1312 || s->s3.previous_client_finished_len != 0) 1313 || !ossl_assert(expected_len == 0 1314 || s->s3.previous_server_finished_len != 0)) { 1315 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); 1316 return 0; 1317 } 1318 1319 /* Parse the length byte */ 1320 if (!PACKET_get_1_len(pkt, &ilen)) { 1321 SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_RENEGOTIATION_ENCODING_ERR); 1322 return 0; 1323 } 1324 1325 /* Consistency check */ 1326 if (PACKET_remaining(pkt) != ilen) { 1327 SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_RENEGOTIATION_ENCODING_ERR); 1328 return 0; 1329 } 1330 1331 /* Check that the extension matches */ 1332 if (ilen != expected_len) { 1333 SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_RENEGOTIATION_MISMATCH); 1334 return 0; 1335 } 1336 1337 if (!PACKET_get_bytes(pkt, &data, s->s3.previous_client_finished_len) 1338 || memcmp(data, s->s3.previous_client_finished, 1339 s->s3.previous_client_finished_len) 1340 != 0) { 1341 SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_RENEGOTIATION_MISMATCH); 1342 return 0; 1343 } 1344 1345 if (!PACKET_get_bytes(pkt, &data, s->s3.previous_server_finished_len) 1346 || memcmp(data, s->s3.previous_server_finished, 1347 s->s3.previous_server_finished_len) 1348 != 0) { 1349 SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_RENEGOTIATION_MISMATCH); 1350 return 0; 1351 } 1352 s->s3.send_connection_binding = 1; 1353 1354 return 1; 1355 } 1356 1357 /* Parse the server's max fragment len extension packet */ 1358 int tls_parse_stoc_maxfragmentlen(SSL_CONNECTION *s, PACKET *pkt, 1359 unsigned int context, 1360 X509 *x, size_t chainidx) 1361 { 1362 unsigned int value; 1363 1364 if (PACKET_remaining(pkt) != 1 || !PACKET_get_1(pkt, &value)) { 1365 SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION); 1366 return 0; 1367 } 1368 1369 /* |value| should contains a valid max-fragment-length code. */ 1370 if (!IS_MAX_FRAGMENT_LENGTH_EXT_VALID(value)) { 1371 SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, 1372 SSL_R_SSL3_EXT_INVALID_MAX_FRAGMENT_LENGTH); 1373 return 0; 1374 } 1375 1376 /* Must be the same value as client-configured one who was sent to server */ 1377 /*- 1378 * RFC 6066: if a client receives a maximum fragment length negotiation 1379 * response that differs from the length it requested, ... 1380 * It must abort with SSL_AD_ILLEGAL_PARAMETER alert 1381 */ 1382 if (value != s->ext.max_fragment_len_mode) { 1383 SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, 1384 SSL_R_SSL3_EXT_INVALID_MAX_FRAGMENT_LENGTH); 1385 return 0; 1386 } 1387 1388 /* 1389 * Maximum Fragment Length Negotiation succeeded. 1390 * The negotiated Maximum Fragment Length is binding now. 1391 */ 1392 s->session->ext.max_fragment_len_mode = value; 1393 1394 return 1; 1395 } 1396 1397 int tls_parse_stoc_server_name(SSL_CONNECTION *s, PACKET *pkt, 1398 unsigned int context, 1399 X509 *x, size_t chainidx) 1400 { 1401 if (s->ext.hostname == NULL) { 1402 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); 1403 return 0; 1404 } 1405 1406 if (PACKET_remaining(pkt) > 0) { 1407 SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION); 1408 return 0; 1409 } 1410 1411 if (!s->hit) { 1412 if (s->session->ext.hostname != NULL) { 1413 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); 1414 return 0; 1415 } 1416 s->session->ext.hostname = OPENSSL_strdup(s->ext.hostname); 1417 if (s->session->ext.hostname == NULL) { 1418 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); 1419 return 0; 1420 } 1421 } 1422 1423 return 1; 1424 } 1425 1426 int tls_parse_stoc_ec_pt_formats(SSL_CONNECTION *s, PACKET *pkt, 1427 unsigned int context, 1428 X509 *x, size_t chainidx) 1429 { 1430 size_t ecpointformats_len; 1431 PACKET ecptformatlist; 1432 1433 if (!PACKET_as_length_prefixed_1(pkt, &ecptformatlist)) { 1434 SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION); 1435 return 0; 1436 } 1437 if (!s->hit) { 1438 ecpointformats_len = PACKET_remaining(&ecptformatlist); 1439 if (ecpointformats_len == 0) { 1440 SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_LENGTH); 1441 return 0; 1442 } 1443 1444 s->ext.peer_ecpointformats_len = 0; 1445 OPENSSL_free(s->ext.peer_ecpointformats); 1446 s->ext.peer_ecpointformats = OPENSSL_malloc(ecpointformats_len); 1447 if (s->ext.peer_ecpointformats == NULL) { 1448 s->ext.peer_ecpointformats_len = 0; 1449 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); 1450 return 0; 1451 } 1452 1453 s->ext.peer_ecpointformats_len = ecpointformats_len; 1454 1455 if (!PACKET_copy_bytes(&ecptformatlist, 1456 s->ext.peer_ecpointformats, 1457 ecpointformats_len)) { 1458 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); 1459 return 0; 1460 } 1461 } 1462 1463 return 1; 1464 } 1465 1466 int tls_parse_stoc_session_ticket(SSL_CONNECTION *s, PACKET *pkt, 1467 unsigned int context, 1468 X509 *x, size_t chainidx) 1469 { 1470 SSL *ssl = SSL_CONNECTION_GET_USER_SSL(s); 1471 1472 if (s->ext.session_ticket_cb != NULL && !s->ext.session_ticket_cb(ssl, PACKET_data(pkt), PACKET_remaining(pkt), s->ext.session_ticket_cb_arg)) { 1473 SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_R_BAD_EXTENSION); 1474 return 0; 1475 } 1476 1477 if (!tls_use_ticket(s)) { 1478 SSLfatal(s, SSL_AD_UNSUPPORTED_EXTENSION, SSL_R_BAD_EXTENSION); 1479 return 0; 1480 } 1481 if (PACKET_remaining(pkt) > 0) { 1482 SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION); 1483 return 0; 1484 } 1485 1486 s->ext.ticket_expected = 1; 1487 1488 return 1; 1489 } 1490 1491 #ifndef OPENSSL_NO_OCSP 1492 int tls_parse_stoc_status_request(SSL_CONNECTION *s, PACKET *pkt, 1493 unsigned int context, 1494 X509 *x, size_t chainidx) 1495 { 1496 if (context == SSL_EXT_TLS1_3_CERTIFICATE_REQUEST) { 1497 /* We ignore this if the server sends a CertificateRequest */ 1498 return 1; 1499 } 1500 1501 /* 1502 * MUST only be sent if we've requested a status 1503 * request message. In TLS <= 1.2 it must also be empty. 1504 */ 1505 if (s->ext.status_type != TLSEXT_STATUSTYPE_ocsp) { 1506 SSLfatal(s, SSL_AD_UNSUPPORTED_EXTENSION, SSL_R_BAD_EXTENSION); 1507 return 0; 1508 } 1509 if (!SSL_CONNECTION_IS_TLS13(s) && PACKET_remaining(pkt) > 0) { 1510 SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION); 1511 return 0; 1512 } 1513 1514 if (SSL_CONNECTION_IS_TLS13(s)) { 1515 /* We only know how to handle this if it's for the first Certificate in 1516 * the chain. We ignore any other responses. 1517 */ 1518 if (chainidx != 0) 1519 return 1; 1520 1521 /* SSLfatal() already called */ 1522 return tls_process_cert_status_body(s, pkt); 1523 } 1524 1525 /* Set flag to expect CertificateStatus message */ 1526 s->ext.status_expected = 1; 1527 1528 return 1; 1529 } 1530 #endif 1531 1532 #ifndef OPENSSL_NO_CT 1533 int tls_parse_stoc_sct(SSL_CONNECTION *s, PACKET *pkt, unsigned int context, 1534 X509 *x, size_t chainidx) 1535 { 1536 if (context == SSL_EXT_TLS1_3_CERTIFICATE_REQUEST) { 1537 /* We ignore this if the server sends it in a CertificateRequest */ 1538 return 1; 1539 } 1540 1541 /* 1542 * Only take it if we asked for it - i.e if there is no CT validation 1543 * callback set, then a custom extension MAY be processing it, so we 1544 * need to let control continue to flow to that. 1545 */ 1546 if (s->ct_validation_callback != NULL) { 1547 size_t size = PACKET_remaining(pkt); 1548 1549 /* Simply copy it off for later processing */ 1550 OPENSSL_free(s->ext.scts); 1551 s->ext.scts = NULL; 1552 1553 s->ext.scts_len = (uint16_t)size; 1554 if (size > 0) { 1555 s->ext.scts = OPENSSL_malloc(size); 1556 if (s->ext.scts == NULL) { 1557 s->ext.scts_len = 0; 1558 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_CRYPTO_LIB); 1559 return 0; 1560 } 1561 if (!PACKET_copy_bytes(pkt, s->ext.scts, size)) { 1562 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); 1563 return 0; 1564 } 1565 } 1566 } else { 1567 ENDPOINT role = (context & SSL_EXT_TLS1_2_SERVER_HELLO) != 0 1568 ? ENDPOINT_CLIENT 1569 : ENDPOINT_BOTH; 1570 1571 /* 1572 * If we didn't ask for it then there must be a custom extension, 1573 * otherwise this is unsolicited. 1574 */ 1575 if (custom_ext_find(&s->cert->custext, role, 1576 TLSEXT_TYPE_signed_certificate_timestamp, 1577 NULL) 1578 == NULL) { 1579 SSLfatal(s, TLS1_AD_UNSUPPORTED_EXTENSION, SSL_R_BAD_EXTENSION); 1580 return 0; 1581 } 1582 1583 if (!custom_ext_parse(s, context, 1584 TLSEXT_TYPE_signed_certificate_timestamp, 1585 PACKET_data(pkt), PACKET_remaining(pkt), 1586 x, chainidx)) { 1587 /* SSLfatal already called */ 1588 return 0; 1589 } 1590 } 1591 1592 return 1; 1593 } 1594 #endif 1595 1596 #ifndef OPENSSL_NO_NEXTPROTONEG 1597 /* 1598 * ssl_next_proto_validate validates a Next Protocol Negotiation block. No 1599 * elements of zero length are allowed and the set of elements must exactly 1600 * fill the length of the block. Returns 1 on success or 0 on failure. 1601 */ 1602 static int ssl_next_proto_validate(SSL_CONNECTION *s, PACKET *pkt) 1603 { 1604 PACKET tmp_protocol; 1605 1606 while (PACKET_remaining(pkt)) { 1607 if (!PACKET_get_length_prefixed_1(pkt, &tmp_protocol) 1608 || PACKET_remaining(&tmp_protocol) == 0) { 1609 SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION); 1610 return 0; 1611 } 1612 } 1613 1614 return 1; 1615 } 1616 1617 int tls_parse_stoc_npn(SSL_CONNECTION *s, PACKET *pkt, unsigned int context, 1618 X509 *x, size_t chainidx) 1619 { 1620 unsigned char *selected; 1621 unsigned char selected_len; 1622 PACKET tmppkt; 1623 SSL_CTX *sctx = SSL_CONNECTION_GET_CTX(s); 1624 1625 /* Check if we are in a renegotiation. If so ignore this extension */ 1626 if (!SSL_IS_FIRST_HANDSHAKE(s)) 1627 return 1; 1628 1629 /* We must have requested it. */ 1630 if (sctx->ext.npn_select_cb == NULL) { 1631 SSLfatal(s, SSL_AD_UNSUPPORTED_EXTENSION, SSL_R_BAD_EXTENSION); 1632 return 0; 1633 } 1634 1635 /* The data must be valid */ 1636 tmppkt = *pkt; 1637 if (!ssl_next_proto_validate(s, &tmppkt)) { 1638 /* SSLfatal() already called */ 1639 return 0; 1640 } 1641 if (sctx->ext.npn_select_cb(SSL_CONNECTION_GET_USER_SSL(s), 1642 &selected, &selected_len, 1643 PACKET_data(pkt), PACKET_remaining(pkt), 1644 sctx->ext.npn_select_cb_arg) 1645 != SSL_TLSEXT_ERR_OK 1646 || selected_len == 0) { 1647 SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_R_BAD_EXTENSION); 1648 return 0; 1649 } 1650 1651 /* 1652 * Could be non-NULL if server has sent multiple NPN extensions in 1653 * a single Serverhello 1654 */ 1655 OPENSSL_free(s->ext.npn); 1656 s->ext.npn = OPENSSL_malloc(selected_len); 1657 if (s->ext.npn == NULL) { 1658 s->ext.npn_len = 0; 1659 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); 1660 return 0; 1661 } 1662 1663 memcpy(s->ext.npn, selected, selected_len); 1664 s->ext.npn_len = selected_len; 1665 s->s3.npn_seen = 1; 1666 1667 return 1; 1668 } 1669 #endif 1670 1671 int tls_parse_stoc_alpn(SSL_CONNECTION *s, PACKET *pkt, unsigned int context, 1672 X509 *x, size_t chainidx) 1673 { 1674 size_t len; 1675 PACKET confpkt, protpkt; 1676 int valid = 0; 1677 1678 /* We must have requested it. */ 1679 if (!s->s3.alpn_sent) { 1680 SSLfatal(s, SSL_AD_UNSUPPORTED_EXTENSION, SSL_R_BAD_EXTENSION); 1681 return 0; 1682 } 1683 /*- 1684 * The extension data consists of: 1685 * uint16 list_length 1686 * uint8 proto_length; 1687 * uint8 proto[proto_length]; 1688 */ 1689 if (!PACKET_get_net_2_len(pkt, &len) 1690 || PACKET_remaining(pkt) != len || !PACKET_get_1_len(pkt, &len) 1691 || PACKET_remaining(pkt) != len) { 1692 SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION); 1693 return 0; 1694 } 1695 1696 /* It must be a protocol that we sent */ 1697 if (!PACKET_buf_init(&confpkt, s->ext.alpn, s->ext.alpn_len)) { 1698 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); 1699 return 0; 1700 } 1701 while (PACKET_get_length_prefixed_1(&confpkt, &protpkt)) { 1702 if (PACKET_remaining(&protpkt) != len) 1703 continue; 1704 if (memcmp(PACKET_data(pkt), PACKET_data(&protpkt), len) == 0) { 1705 /* Valid protocol found */ 1706 valid = 1; 1707 break; 1708 } 1709 } 1710 1711 if (!valid) { 1712 /* The protocol sent from the server does not match one we advertised */ 1713 SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION); 1714 return 0; 1715 } 1716 1717 OPENSSL_free(s->s3.alpn_selected); 1718 s->s3.alpn_selected = OPENSSL_malloc(len); 1719 if (s->s3.alpn_selected == NULL) { 1720 s->s3.alpn_selected_len = 0; 1721 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); 1722 return 0; 1723 } 1724 if (!PACKET_copy_bytes(pkt, s->s3.alpn_selected, len)) { 1725 SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION); 1726 return 0; 1727 } 1728 s->s3.alpn_selected_len = len; 1729 1730 if (s->session->ext.alpn_selected == NULL 1731 || s->session->ext.alpn_selected_len != len 1732 || memcmp(s->session->ext.alpn_selected, s->s3.alpn_selected, len) 1733 != 0) { 1734 /* ALPN not consistent with the old session so cannot use early_data */ 1735 s->ext.early_data_ok = 0; 1736 } 1737 if (!s->hit) { 1738 /* 1739 * This is a new session and so alpn_selected should have been 1740 * initialised to NULL. We should update it with the selected ALPN. 1741 */ 1742 if (!ossl_assert(s->session->ext.alpn_selected == NULL)) { 1743 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); 1744 return 0; 1745 } 1746 s->session->ext.alpn_selected = OPENSSL_memdup(s->s3.alpn_selected, s->s3.alpn_selected_len); 1747 if (s->session->ext.alpn_selected == NULL) { 1748 s->session->ext.alpn_selected_len = 0; 1749 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); 1750 return 0; 1751 } 1752 s->session->ext.alpn_selected_len = s->s3.alpn_selected_len; 1753 } 1754 1755 return 1; 1756 } 1757 1758 #ifndef OPENSSL_NO_SRTP 1759 int tls_parse_stoc_use_srtp(SSL_CONNECTION *s, PACKET *pkt, 1760 unsigned int context, X509 *x, size_t chainidx) 1761 { 1762 unsigned int id, ct, mki; 1763 int i; 1764 STACK_OF(SRTP_PROTECTION_PROFILE) *clnt; 1765 SRTP_PROTECTION_PROFILE *prof; 1766 1767 if (!PACKET_get_net_2(pkt, &ct) || ct != 2 1768 || !PACKET_get_net_2(pkt, &id) 1769 || !PACKET_get_1(pkt, &mki) 1770 || PACKET_remaining(pkt) != 0) { 1771 SSLfatal(s, SSL_AD_DECODE_ERROR, 1772 SSL_R_BAD_SRTP_PROTECTION_PROFILE_LIST); 1773 return 0; 1774 } 1775 1776 if (mki != 0) { 1777 /* Must be no MKI, since we never offer one */ 1778 SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_BAD_SRTP_MKI_VALUE); 1779 return 0; 1780 } 1781 1782 /* Throw an error if the server gave us an unsolicited extension */ 1783 clnt = SSL_get_srtp_profiles(SSL_CONNECTION_GET_SSL(s)); 1784 if (clnt == NULL) { 1785 SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_NO_SRTP_PROFILES); 1786 return 0; 1787 } 1788 1789 /* 1790 * Check to see if the server gave us something we support (and 1791 * presumably offered) 1792 */ 1793 for (i = 0; i < sk_SRTP_PROTECTION_PROFILE_num(clnt); i++) { 1794 prof = sk_SRTP_PROTECTION_PROFILE_value(clnt, i); 1795 1796 if (prof->id == id) { 1797 s->srtp_profile = prof; 1798 return 1; 1799 } 1800 } 1801 1802 SSLfatal(s, SSL_AD_DECODE_ERROR, 1803 SSL_R_BAD_SRTP_PROTECTION_PROFILE_LIST); 1804 return 0; 1805 } 1806 #endif 1807 1808 int tls_parse_stoc_etm(SSL_CONNECTION *s, PACKET *pkt, unsigned int context, 1809 X509 *x, size_t chainidx) 1810 { 1811 /* Ignore if inappropriate ciphersuite */ 1812 if (!(s->options & SSL_OP_NO_ENCRYPT_THEN_MAC) 1813 && s->s3.tmp.new_cipher->algorithm_mac != SSL_AEAD 1814 && s->s3.tmp.new_cipher->algorithm_enc != SSL_RC4 1815 && s->s3.tmp.new_cipher->algorithm_enc != SSL_eGOST2814789CNT 1816 && s->s3.tmp.new_cipher->algorithm_enc != SSL_eGOST2814789CNT12 1817 && s->s3.tmp.new_cipher->algorithm_enc != SSL_MAGMA 1818 && s->s3.tmp.new_cipher->algorithm_enc != SSL_KUZNYECHIK) 1819 s->ext.use_etm = 1; 1820 1821 return 1; 1822 } 1823 1824 int tls_parse_stoc_ems(SSL_CONNECTION *s, PACKET *pkt, unsigned int context, 1825 X509 *x, size_t chainidx) 1826 { 1827 if (s->options & SSL_OP_NO_EXTENDED_MASTER_SECRET) 1828 return 1; 1829 s->s3.flags |= TLS1_FLAGS_RECEIVED_EXTMS; 1830 if (!s->hit) 1831 s->session->flags |= SSL_SESS_FLAG_EXTMS; 1832 1833 return 1; 1834 } 1835 1836 int tls_parse_stoc_supported_versions(SSL_CONNECTION *s, PACKET *pkt, 1837 unsigned int context, 1838 X509 *x, size_t chainidx) 1839 { 1840 unsigned int version; 1841 1842 if (!PACKET_get_net_2(pkt, &version) 1843 || PACKET_remaining(pkt) != 0) { 1844 SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_LENGTH_MISMATCH); 1845 return 0; 1846 } 1847 1848 /* 1849 * The only protocol version we support which is valid in this extension in 1850 * a ServerHello is TLSv1.3 therefore we shouldn't be getting anything else. 1851 */ 1852 if (version != TLS1_3_VERSION) { 1853 SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, 1854 SSL_R_BAD_PROTOCOL_VERSION_NUMBER); 1855 return 0; 1856 } 1857 1858 /* We ignore this extension for HRRs except to sanity check it */ 1859 if (context == SSL_EXT_TLS1_3_HELLO_RETRY_REQUEST) 1860 return 1; 1861 1862 /* We just set it here. We validate it in ssl_choose_client_version */ 1863 s->version = version; 1864 if (!ssl_set_record_protocol_version(s, version)) { 1865 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); 1866 return 0; 1867 } 1868 1869 return 1; 1870 } 1871 1872 int tls_parse_stoc_key_share(SSL_CONNECTION *s, PACKET *pkt, 1873 unsigned int context, X509 *x, 1874 size_t chainidx) 1875 { 1876 #ifndef OPENSSL_NO_TLS1_3 1877 unsigned int group_id; 1878 PACKET encoded_pt; 1879 EVP_PKEY *ckey = s->s3.tmp.pkey, *skey = NULL; 1880 const TLS_GROUP_INFO *ginf = NULL; 1881 uint16_t valid_ks_id = 0; 1882 size_t i; 1883 1884 /* Sanity check */ 1885 if (ckey == NULL || s->s3.peer_tmp != NULL) { 1886 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); 1887 return 0; 1888 } 1889 1890 /* Which group ID does the server want -> group_id */ 1891 if (!PACKET_get_net_2(pkt, &group_id)) { 1892 SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_LENGTH_MISMATCH); 1893 return 0; 1894 } 1895 1896 if ((context & SSL_EXT_TLS1_3_HELLO_RETRY_REQUEST) != 0) { 1897 const uint16_t *pgroups = NULL; 1898 size_t num_groups; 1899 1900 if (PACKET_remaining(pkt) != 0) { 1901 SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_LENGTH_MISMATCH); 1902 return 0; 1903 } 1904 1905 /* 1906 * It is an error if the HelloRetryRequest wants a key_share that we 1907 * already sent in the first ClientHello 1908 */ 1909 for (i = 0; i < s->s3.tmp.num_ks_pkey; i++) { 1910 if (s->s3.tmp.ks_group_id[i] == group_id) { 1911 SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_BAD_KEY_SHARE); 1912 return 0; 1913 } 1914 } 1915 1916 /* Validate the selected group is one we support */ 1917 tls1_get_supported_groups(s, &pgroups, &num_groups); 1918 for (i = 0; i < num_groups; i++) { 1919 if (group_id == pgroups[i]) 1920 break; 1921 } 1922 if (i >= num_groups 1923 || !tls_group_allowed(s, group_id, SSL_SECOP_CURVE_SUPPORTED) 1924 || !tls_valid_group(s, group_id, TLS1_3_VERSION, TLS1_3_VERSION, 1925 0, NULL)) { 1926 SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_BAD_KEY_SHARE); 1927 return 0; 1928 } 1929 1930 /* Memorize which groupID the server wants */ 1931 s->s3.group_id = group_id; 1932 1933 /* The initial keyshares are obsolete now, hence free memory */ 1934 for (i = 0; i < s->s3.tmp.num_ks_pkey; i++) { 1935 if (s->s3.tmp.ks_pkey[i] != NULL) { 1936 EVP_PKEY_free(s->s3.tmp.ks_pkey[i]); 1937 s->s3.tmp.ks_pkey[i] = NULL; 1938 } 1939 } 1940 s->s3.tmp.num_ks_pkey = 0; 1941 s->s3.tmp.pkey = NULL; 1942 1943 return 1; 1944 } 1945 1946 /* 1947 * check that the group requested by the server is one we've 1948 * sent a key share for, and if so: memorize which one 1949 */ 1950 for (i = 0; i < s->s3.tmp.num_ks_pkey; i++) { 1951 if (s->s3.tmp.ks_group_id[i] == group_id) { 1952 valid_ks_id = group_id; 1953 ckey = s->s3.tmp.ks_pkey[i]; 1954 s->s3.group_id = group_id; 1955 s->s3.tmp.pkey = ckey; 1956 break; 1957 } 1958 } 1959 if (valid_ks_id == 0) { 1960 /* 1961 * This isn't for the group that we sent in the original 1962 * key_share! 1963 */ 1964 SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_BAD_KEY_SHARE); 1965 return 0; 1966 } 1967 /* Retain this group in the SSL_SESSION */ 1968 if (!s->hit) { 1969 s->session->kex_group = group_id; 1970 } else if (group_id != s->session->kex_group) { 1971 /* 1972 * If this is a resumption but changed what group was used, we need 1973 * to record the new group in the session, but the session is not 1974 * a new session and could be in use by other threads. So, make 1975 * a copy of the session to record the new information so that it's 1976 * useful for any sessions resumed from tickets issued on this 1977 * connection. 1978 */ 1979 SSL_SESSION *new_sess; 1980 1981 if ((new_sess = ssl_session_dup(s->session, 0)) == NULL) { 1982 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_SSL_LIB); 1983 return 0; 1984 } 1985 SSL_SESSION_free(s->session); 1986 s->session = new_sess; 1987 s->session->kex_group = group_id; 1988 } 1989 1990 if ((ginf = tls1_group_id_lookup(SSL_CONNECTION_GET_CTX(s), 1991 group_id)) 1992 == NULL) { 1993 SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_BAD_KEY_SHARE); 1994 return 0; 1995 } 1996 1997 if (!PACKET_as_length_prefixed_2(pkt, &encoded_pt) 1998 || PACKET_remaining(&encoded_pt) == 0) { 1999 SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_LENGTH_MISMATCH); 2000 return 0; 2001 } 2002 2003 if (!ginf->is_kem) { 2004 /* Regular KEX */ 2005 skey = EVP_PKEY_new(); 2006 if (skey == NULL || EVP_PKEY_copy_parameters(skey, ckey) <= 0) { 2007 SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_R_COPY_PARAMETERS_FAILED); 2008 EVP_PKEY_free(skey); 2009 return 0; 2010 } 2011 2012 if (tls13_set_encoded_pub_key(skey, PACKET_data(&encoded_pt), 2013 PACKET_remaining(&encoded_pt)) 2014 <= 0) { 2015 SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_BAD_ECPOINT); 2016 EVP_PKEY_free(skey); 2017 return 0; 2018 } 2019 2020 if (ssl_derive(s, ckey, skey, 1) == 0) { 2021 /* SSLfatal() already called */ 2022 EVP_PKEY_free(skey); 2023 return 0; 2024 } 2025 s->s3.peer_tmp = skey; 2026 } else { 2027 /* KEM Mode */ 2028 const unsigned char *ct = PACKET_data(&encoded_pt); 2029 size_t ctlen = PACKET_remaining(&encoded_pt); 2030 2031 if (ssl_decapsulate(s, ckey, ct, ctlen, 1) == 0) { 2032 /* SSLfatal() already called */ 2033 return 0; 2034 } 2035 } 2036 s->s3.did_kex = 1; 2037 #endif 2038 2039 return 1; 2040 } 2041 2042 int tls_parse_stoc_cookie(SSL_CONNECTION *s, PACKET *pkt, unsigned int context, 2043 X509 *x, size_t chainidx) 2044 { 2045 PACKET cookie; 2046 2047 if (!PACKET_as_length_prefixed_2(pkt, &cookie) 2048 || !PACKET_memdup(&cookie, &s->ext.tls13_cookie, 2049 &s->ext.tls13_cookie_len)) { 2050 SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_LENGTH_MISMATCH); 2051 return 0; 2052 } 2053 2054 return 1; 2055 } 2056 2057 int tls_parse_stoc_early_data(SSL_CONNECTION *s, PACKET *pkt, 2058 unsigned int context, 2059 X509 *x, size_t chainidx) 2060 { 2061 if (context == SSL_EXT_TLS1_3_NEW_SESSION_TICKET) { 2062 unsigned long max_early_data; 2063 2064 if (!PACKET_get_net_4(pkt, &max_early_data) 2065 || PACKET_remaining(pkt) != 0) { 2066 SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_INVALID_MAX_EARLY_DATA); 2067 return 0; 2068 } 2069 2070 s->session->ext.max_early_data = max_early_data; 2071 2072 if (SSL_IS_QUIC_HANDSHAKE(s) && max_early_data != 0xffffffff) { 2073 /* 2074 * QUIC allows missing max_early_data, or a max_early_data value 2075 * of 0xffffffff. Missing max_early_data is stored in the session 2076 * as 0. This is indistinguishable in OpenSSL from a present 2077 * max_early_data value that was 0. In order that later checks for 2078 * invalid max_early_data correctly treat as an error the case where 2079 * max_early_data is present and it is 0, we store any invalid 2080 * value in the same (non-zero) way. Otherwise we would have to 2081 * introduce a new flag just for this. 2082 */ 2083 s->session->ext.max_early_data = 1; 2084 SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_INVALID_MAX_EARLY_DATA); 2085 return 0; 2086 } 2087 2088 return 1; 2089 } 2090 2091 if (PACKET_remaining(pkt) != 0) { 2092 SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION); 2093 return 0; 2094 } 2095 2096 if (!s->ext.early_data_ok 2097 || !s->hit) { 2098 /* 2099 * If we get here then we didn't send early data, or we didn't resume 2100 * using the first identity, or the SNI/ALPN is not consistent so the 2101 * server should not be accepting it. 2102 */ 2103 SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_BAD_EXTENSION); 2104 return 0; 2105 } 2106 2107 s->ext.early_data = SSL_EARLY_DATA_ACCEPTED; 2108 2109 return 1; 2110 } 2111 2112 int tls_parse_stoc_psk(SSL_CONNECTION *s, PACKET *pkt, 2113 unsigned int context, X509 *x, 2114 size_t chainidx) 2115 { 2116 #ifndef OPENSSL_NO_TLS1_3 2117 unsigned int identity; 2118 2119 if (!PACKET_get_net_2(pkt, &identity) || PACKET_remaining(pkt) != 0) { 2120 SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_LENGTH_MISMATCH); 2121 return 0; 2122 } 2123 2124 if (identity >= (unsigned int)s->ext.tick_identity) { 2125 SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_BAD_PSK_IDENTITY); 2126 return 0; 2127 } 2128 2129 /* 2130 * Session resumption tickets are always sent before PSK tickets. If the 2131 * ticket index is 0 then it must be for a session resumption ticket if we 2132 * sent two tickets, or if we didn't send a PSK ticket. 2133 */ 2134 if (identity == 0 && (s->psksession == NULL || s->ext.tick_identity == 2)) { 2135 s->hit = 1; 2136 SSL_SESSION_free(s->psksession); 2137 s->psksession = NULL; 2138 return 1; 2139 } 2140 2141 if (s->psksession == NULL) { 2142 /* Should never happen */ 2143 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); 2144 return 0; 2145 } 2146 2147 /* 2148 * If we used the external PSK for sending early_data then s->early_secret 2149 * is already set up, so don't overwrite it. Otherwise we copy the 2150 * early_secret across that we generated earlier. 2151 */ 2152 if ((s->early_data_state != SSL_EARLY_DATA_WRITE_RETRY 2153 && s->early_data_state != SSL_EARLY_DATA_FINISHED_WRITING) 2154 || s->session->ext.max_early_data > 0 2155 || s->psksession->ext.max_early_data == 0) 2156 memcpy(s->early_secret, s->psksession->early_secret, EVP_MAX_MD_SIZE); 2157 2158 SSL_SESSION_free(s->session); 2159 s->session = s->psksession; 2160 s->psksession = NULL; 2161 s->hit = 1; 2162 /* Early data is only allowed if we used the first ticket */ 2163 if (identity != 0) 2164 s->ext.early_data_ok = 0; 2165 #endif 2166 2167 return 1; 2168 } 2169 2170 EXT_RETURN tls_construct_ctos_client_cert_type(SSL_CONNECTION *sc, WPACKET *pkt, 2171 unsigned int context, 2172 X509 *x, size_t chainidx) 2173 { 2174 sc->ext.client_cert_type_ctos = OSSL_CERT_TYPE_CTOS_NONE; 2175 if (sc->client_cert_type == NULL) 2176 return EXT_RETURN_NOT_SENT; 2177 2178 if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_client_cert_type) 2179 || !WPACKET_start_sub_packet_u16(pkt) 2180 || !WPACKET_sub_memcpy_u8(pkt, sc->client_cert_type, sc->client_cert_type_len) 2181 || !WPACKET_close(pkt)) { 2182 SSLfatal(sc, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); 2183 return EXT_RETURN_FAIL; 2184 } 2185 sc->ext.client_cert_type_ctos = OSSL_CERT_TYPE_CTOS_GOOD; 2186 return EXT_RETURN_SENT; 2187 } 2188 2189 int tls_parse_stoc_client_cert_type(SSL_CONNECTION *sc, PACKET *pkt, 2190 unsigned int context, 2191 X509 *x, size_t chainidx) 2192 { 2193 unsigned int type; 2194 2195 if (PACKET_remaining(pkt) != 1) { 2196 SSLfatal(sc, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION); 2197 return 0; 2198 } 2199 if (!PACKET_get_1(pkt, &type)) { 2200 SSLfatal(sc, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION); 2201 return 0; 2202 } 2203 /* We did not send/ask for this */ 2204 if (!ossl_assert(sc->ext.client_cert_type_ctos == OSSL_CERT_TYPE_CTOS_GOOD)) { 2205 SSLfatal(sc, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION); 2206 return 0; 2207 } 2208 /* We don't have this enabled */ 2209 if (sc->client_cert_type == NULL) { 2210 SSLfatal(sc, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION); 2211 return 0; 2212 } 2213 /* Given back a value we didn't configure */ 2214 if (memchr(sc->client_cert_type, type, sc->client_cert_type_len) == NULL) { 2215 SSLfatal(sc, SSL_AD_DECODE_ERROR, SSL_R_BAD_VALUE); 2216 return 0; 2217 } 2218 sc->ext.client_cert_type = type; 2219 return 1; 2220 } 2221 2222 EXT_RETURN tls_construct_ctos_server_cert_type(SSL_CONNECTION *sc, WPACKET *pkt, 2223 unsigned int context, 2224 X509 *x, size_t chainidx) 2225 { 2226 sc->ext.server_cert_type_ctos = OSSL_CERT_TYPE_CTOS_NONE; 2227 if (sc->server_cert_type == NULL) 2228 return EXT_RETURN_NOT_SENT; 2229 2230 if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_server_cert_type) 2231 || !WPACKET_start_sub_packet_u16(pkt) 2232 || !WPACKET_sub_memcpy_u8(pkt, sc->server_cert_type, sc->server_cert_type_len) 2233 || !WPACKET_close(pkt)) { 2234 SSLfatal(sc, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); 2235 return EXT_RETURN_FAIL; 2236 } 2237 sc->ext.server_cert_type_ctos = OSSL_CERT_TYPE_CTOS_GOOD; 2238 return EXT_RETURN_SENT; 2239 } 2240 2241 int tls_parse_stoc_server_cert_type(SSL_CONNECTION *sc, PACKET *pkt, 2242 unsigned int context, 2243 X509 *x, size_t chainidx) 2244 { 2245 unsigned int type; 2246 2247 if (PACKET_remaining(pkt) != 1) { 2248 SSLfatal(sc, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION); 2249 return 0; 2250 } 2251 if (!PACKET_get_1(pkt, &type)) { 2252 SSLfatal(sc, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION); 2253 return 0; 2254 } 2255 /* We did not send/ask for this */ 2256 if (!ossl_assert(sc->ext.server_cert_type_ctos == OSSL_CERT_TYPE_CTOS_GOOD)) { 2257 SSLfatal(sc, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION); 2258 return 0; 2259 } 2260 /* We don't have this enabled */ 2261 if (sc->server_cert_type == NULL) { 2262 SSLfatal(sc, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION); 2263 return 0; 2264 } 2265 /* Given back a value we didn't configure */ 2266 if (memchr(sc->server_cert_type, type, sc->server_cert_type_len) == NULL) { 2267 SSLfatal(sc, SSL_AD_DECODE_ERROR, SSL_R_BAD_VALUE); 2268 return 0; 2269 } 2270 sc->ext.server_cert_type = type; 2271 return 1; 2272 } 2273