t1_lib.c revision 312826
1/* ssl/t1_lib.c */ 2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 3 * All rights reserved. 4 * 5 * This package is an SSL implementation written 6 * by Eric Young (eay@cryptsoft.com). 7 * The implementation was written so as to conform with Netscapes SSL. 8 * 9 * This library is free for commercial and non-commercial use as long as 10 * the following conditions are aheared to. The following conditions 11 * apply to all code found in this distribution, be it the RC4, RSA, 12 * lhash, DES, etc., code; not just the SSL code. The SSL documentation 13 * included with this distribution is covered by the same copyright terms 14 * except that the holder is Tim Hudson (tjh@cryptsoft.com). 15 * 16 * Copyright remains Eric Young's, and as such any Copyright notices in 17 * the code are not to be removed. 18 * If this package is used in a product, Eric Young should be given attribution 19 * as the author of the parts of the library used. 20 * This can be in the form of a textual message at program startup or 21 * in documentation (online or textual) provided with the package. 22 * 23 * Redistribution and use in source and binary forms, with or without 24 * modification, are permitted provided that the following conditions 25 * are met: 26 * 1. Redistributions of source code must retain the copyright 27 * notice, this list of conditions and the following disclaimer. 28 * 2. Redistributions in binary form must reproduce the above copyright 29 * notice, this list of conditions and the following disclaimer in the 30 * documentation and/or other materials provided with the distribution. 31 * 3. All advertising materials mentioning features or use of this software 32 * must display the following acknowledgement: 33 * "This product includes cryptographic software written by 34 * Eric Young (eay@cryptsoft.com)" 35 * The word 'cryptographic' can be left out if the rouines from the library 36 * being used are not cryptographic related :-). 37 * 4. If you include any Windows specific code (or a derivative thereof) from 38 * the apps directory (application code) you must include an acknowledgement: 39 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" 40 * 41 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND 42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 44 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 45 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 46 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 47 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 48 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 49 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 50 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 51 * SUCH DAMAGE. 52 * 53 * The licence and distribution terms for any publically available version or 54 * derivative of this code cannot be changed. i.e. this code cannot simply be 55 * copied and put under another distribution licence 56 * [including the GNU Public Licence.] 57 */ 58/* ==================================================================== 59 * Copyright (c) 1998-2007 The OpenSSL Project. All rights reserved. 60 * 61 * Redistribution and use in source and binary forms, with or without 62 * modification, are permitted provided that the following conditions 63 * are met: 64 * 65 * 1. Redistributions of source code must retain the above copyright 66 * notice, this list of conditions and the following disclaimer. 67 * 68 * 2. Redistributions in binary form must reproduce the above copyright 69 * notice, this list of conditions and the following disclaimer in 70 * the documentation and/or other materials provided with the 71 * distribution. 72 * 73 * 3. All advertising materials mentioning features or use of this 74 * software must display the following acknowledgment: 75 * "This product includes software developed by the OpenSSL Project 76 * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" 77 * 78 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to 79 * endorse or promote products derived from this software without 80 * prior written permission. For written permission, please contact 81 * openssl-core@openssl.org. 82 * 83 * 5. Products derived from this software may not be called "OpenSSL" 84 * nor may "OpenSSL" appear in their names without prior written 85 * permission of the OpenSSL Project. 86 * 87 * 6. Redistributions of any form whatsoever must retain the following 88 * acknowledgment: 89 * "This product includes software developed by the OpenSSL Project 90 * for use in the OpenSSL Toolkit (http://www.openssl.org/)" 91 * 92 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY 93 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 94 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 95 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR 96 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 97 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 98 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 99 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 100 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 101 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 102 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 103 * OF THE POSSIBILITY OF SUCH DAMAGE. 104 * ==================================================================== 105 * 106 * This product includes cryptographic software written by Eric Young 107 * (eay@cryptsoft.com). This product includes software written by Tim 108 * Hudson (tjh@cryptsoft.com). 109 * 110 */ 111 112#include <stdio.h> 113#include <openssl/objects.h> 114#include <openssl/evp.h> 115#include <openssl/hmac.h> 116#ifndef OPENSSL_NO_EC 117#ifdef OPENSSL_NO_EC2M 118# include <openssl/ec.h> 119#endif 120#endif 121#include <openssl/ocsp.h> 122#include <openssl/rand.h> 123#include "ssl_locl.h" 124 125const char tls1_version_str[] = "TLSv1" OPENSSL_VERSION_PTEXT; 126 127#ifndef OPENSSL_NO_TLSEXT 128static int tls_decrypt_ticket(SSL *s, const unsigned char *tick, int ticklen, 129 const unsigned char *sess_id, int sesslen, 130 SSL_SESSION **psess); 131static int ssl_check_clienthello_tlsext_early(SSL *s); 132int ssl_check_serverhello_tlsext(SSL *s); 133#endif 134 135#define CHECKLEN(curr, val, limit) \ 136 (((curr) >= (limit)) || (size_t)((limit) - (curr)) < (size_t)(val)) 137 138SSL3_ENC_METHOD TLSv1_enc_data = { 139 tls1_enc, 140 tls1_mac, 141 tls1_setup_key_block, 142 tls1_generate_master_secret, 143 tls1_change_cipher_state, 144 tls1_final_finish_mac, 145 TLS1_FINISH_MAC_LENGTH, 146 tls1_cert_verify_mac, 147 TLS_MD_CLIENT_FINISH_CONST, TLS_MD_CLIENT_FINISH_CONST_SIZE, 148 TLS_MD_SERVER_FINISH_CONST, TLS_MD_SERVER_FINISH_CONST_SIZE, 149 tls1_alert_code, 150 tls1_export_keying_material, 151 0, 152 SSL3_HM_HEADER_LENGTH, 153 ssl3_set_handshake_header, 154 ssl3_handshake_write 155}; 156 157SSL3_ENC_METHOD TLSv1_1_enc_data = { 158 tls1_enc, 159 tls1_mac, 160 tls1_setup_key_block, 161 tls1_generate_master_secret, 162 tls1_change_cipher_state, 163 tls1_final_finish_mac, 164 TLS1_FINISH_MAC_LENGTH, 165 tls1_cert_verify_mac, 166 TLS_MD_CLIENT_FINISH_CONST, TLS_MD_CLIENT_FINISH_CONST_SIZE, 167 TLS_MD_SERVER_FINISH_CONST, TLS_MD_SERVER_FINISH_CONST_SIZE, 168 tls1_alert_code, 169 tls1_export_keying_material, 170 SSL_ENC_FLAG_EXPLICIT_IV, 171 SSL3_HM_HEADER_LENGTH, 172 ssl3_set_handshake_header, 173 ssl3_handshake_write 174}; 175 176SSL3_ENC_METHOD TLSv1_2_enc_data = { 177 tls1_enc, 178 tls1_mac, 179 tls1_setup_key_block, 180 tls1_generate_master_secret, 181 tls1_change_cipher_state, 182 tls1_final_finish_mac, 183 TLS1_FINISH_MAC_LENGTH, 184 tls1_cert_verify_mac, 185 TLS_MD_CLIENT_FINISH_CONST, TLS_MD_CLIENT_FINISH_CONST_SIZE, 186 TLS_MD_SERVER_FINISH_CONST, TLS_MD_SERVER_FINISH_CONST_SIZE, 187 tls1_alert_code, 188 tls1_export_keying_material, 189 SSL_ENC_FLAG_EXPLICIT_IV | SSL_ENC_FLAG_SIGALGS | SSL_ENC_FLAG_SHA256_PRF 190 | SSL_ENC_FLAG_TLS1_2_CIPHERS, 191 SSL3_HM_HEADER_LENGTH, 192 ssl3_set_handshake_header, 193 ssl3_handshake_write 194}; 195 196long tls1_default_timeout(void) 197{ 198 /* 199 * 2 hours, the 24 hours mentioned in the TLSv1 spec is way too long for 200 * http, the cache would over fill 201 */ 202 return (60 * 60 * 2); 203} 204 205int tls1_new(SSL *s) 206{ 207 if (!ssl3_new(s)) 208 return (0); 209 s->method->ssl_clear(s); 210 return (1); 211} 212 213void tls1_free(SSL *s) 214{ 215#ifndef OPENSSL_NO_TLSEXT 216 if (s->tlsext_session_ticket) { 217 OPENSSL_free(s->tlsext_session_ticket); 218 } 219#endif /* OPENSSL_NO_TLSEXT */ 220 ssl3_free(s); 221} 222 223void tls1_clear(SSL *s) 224{ 225 ssl3_clear(s); 226 s->version = s->method->version; 227} 228 229#ifndef OPENSSL_NO_EC 230 231static int nid_list[] = { 232 NID_sect163k1, /* sect163k1 (1) */ 233 NID_sect163r1, /* sect163r1 (2) */ 234 NID_sect163r2, /* sect163r2 (3) */ 235 NID_sect193r1, /* sect193r1 (4) */ 236 NID_sect193r2, /* sect193r2 (5) */ 237 NID_sect233k1, /* sect233k1 (6) */ 238 NID_sect233r1, /* sect233r1 (7) */ 239 NID_sect239k1, /* sect239k1 (8) */ 240 NID_sect283k1, /* sect283k1 (9) */ 241 NID_sect283r1, /* sect283r1 (10) */ 242 NID_sect409k1, /* sect409k1 (11) */ 243 NID_sect409r1, /* sect409r1 (12) */ 244 NID_sect571k1, /* sect571k1 (13) */ 245 NID_sect571r1, /* sect571r1 (14) */ 246 NID_secp160k1, /* secp160k1 (15) */ 247 NID_secp160r1, /* secp160r1 (16) */ 248 NID_secp160r2, /* secp160r2 (17) */ 249 NID_secp192k1, /* secp192k1 (18) */ 250 NID_X9_62_prime192v1, /* secp192r1 (19) */ 251 NID_secp224k1, /* secp224k1 (20) */ 252 NID_secp224r1, /* secp224r1 (21) */ 253 NID_secp256k1, /* secp256k1 (22) */ 254 NID_X9_62_prime256v1, /* secp256r1 (23) */ 255 NID_secp384r1, /* secp384r1 (24) */ 256 NID_secp521r1, /* secp521r1 (25) */ 257 NID_brainpoolP256r1, /* brainpoolP256r1 (26) */ 258 NID_brainpoolP384r1, /* brainpoolP384r1 (27) */ 259 NID_brainpoolP512r1 /* brainpool512r1 (28) */ 260}; 261 262static const unsigned char ecformats_default[] = { 263 TLSEXT_ECPOINTFORMAT_uncompressed, 264 TLSEXT_ECPOINTFORMAT_ansiX962_compressed_prime, 265 TLSEXT_ECPOINTFORMAT_ansiX962_compressed_char2 266}; 267 268/* The client's default curves / the server's 'auto' curves. */ 269static const unsigned char eccurves_auto[] = { 270 /* Prefer P-256 which has the fastest and most secure implementations. */ 271 0, 23, /* secp256r1 (23) */ 272 /* Other >= 256-bit prime curves. */ 273 0, 25, /* secp521r1 (25) */ 274 0, 28, /* brainpool512r1 (28) */ 275 0, 27, /* brainpoolP384r1 (27) */ 276 0, 24, /* secp384r1 (24) */ 277 0, 26, /* brainpoolP256r1 (26) */ 278 0, 22, /* secp256k1 (22) */ 279# ifndef OPENSSL_NO_EC2M 280 /* >= 256-bit binary curves. */ 281 0, 14, /* sect571r1 (14) */ 282 0, 13, /* sect571k1 (13) */ 283 0, 11, /* sect409k1 (11) */ 284 0, 12, /* sect409r1 (12) */ 285 0, 9, /* sect283k1 (9) */ 286 0, 10, /* sect283r1 (10) */ 287# endif 288}; 289 290static const unsigned char eccurves_all[] = { 291 /* Prefer P-256 which has the fastest and most secure implementations. */ 292 0, 23, /* secp256r1 (23) */ 293 /* Other >= 256-bit prime curves. */ 294 0, 25, /* secp521r1 (25) */ 295 0, 28, /* brainpool512r1 (28) */ 296 0, 27, /* brainpoolP384r1 (27) */ 297 0, 24, /* secp384r1 (24) */ 298 0, 26, /* brainpoolP256r1 (26) */ 299 0, 22, /* secp256k1 (22) */ 300# ifndef OPENSSL_NO_EC2M 301 /* >= 256-bit binary curves. */ 302 0, 14, /* sect571r1 (14) */ 303 0, 13, /* sect571k1 (13) */ 304 0, 11, /* sect409k1 (11) */ 305 0, 12, /* sect409r1 (12) */ 306 0, 9, /* sect283k1 (9) */ 307 0, 10, /* sect283r1 (10) */ 308# endif 309 /* 310 * Remaining curves disabled by default but still permitted if set 311 * via an explicit callback or parameters. 312 */ 313 0, 20, /* secp224k1 (20) */ 314 0, 21, /* secp224r1 (21) */ 315 0, 18, /* secp192k1 (18) */ 316 0, 19, /* secp192r1 (19) */ 317 0, 15, /* secp160k1 (15) */ 318 0, 16, /* secp160r1 (16) */ 319 0, 17, /* secp160r2 (17) */ 320# ifndef OPENSSL_NO_EC2M 321 0, 8, /* sect239k1 (8) */ 322 0, 6, /* sect233k1 (6) */ 323 0, 7, /* sect233r1 (7) */ 324 0, 4, /* sect193r1 (4) */ 325 0, 5, /* sect193r2 (5) */ 326 0, 1, /* sect163k1 (1) */ 327 0, 2, /* sect163r1 (2) */ 328 0, 3, /* sect163r2 (3) */ 329# endif 330}; 331 332static const unsigned char suiteb_curves[] = { 333 0, TLSEXT_curve_P_256, 334 0, TLSEXT_curve_P_384 335}; 336 337# ifdef OPENSSL_FIPS 338/* Brainpool not allowed in FIPS mode */ 339static const unsigned char fips_curves_default[] = { 340# ifndef OPENSSL_NO_EC2M 341 0, 14, /* sect571r1 (14) */ 342 0, 13, /* sect571k1 (13) */ 343# endif 344 0, 25, /* secp521r1 (25) */ 345# ifndef OPENSSL_NO_EC2M 346 0, 11, /* sect409k1 (11) */ 347 0, 12, /* sect409r1 (12) */ 348# endif 349 0, 24, /* secp384r1 (24) */ 350# ifndef OPENSSL_NO_EC2M 351 0, 9, /* sect283k1 (9) */ 352 0, 10, /* sect283r1 (10) */ 353# endif 354 0, 22, /* secp256k1 (22) */ 355 0, 23, /* secp256r1 (23) */ 356# ifndef OPENSSL_NO_EC2M 357 0, 8, /* sect239k1 (8) */ 358 0, 6, /* sect233k1 (6) */ 359 0, 7, /* sect233r1 (7) */ 360# endif 361 0, 20, /* secp224k1 (20) */ 362 0, 21, /* secp224r1 (21) */ 363# ifndef OPENSSL_NO_EC2M 364 0, 4, /* sect193r1 (4) */ 365 0, 5, /* sect193r2 (5) */ 366# endif 367 0, 18, /* secp192k1 (18) */ 368 0, 19, /* secp192r1 (19) */ 369# ifndef OPENSSL_NO_EC2M 370 0, 1, /* sect163k1 (1) */ 371 0, 2, /* sect163r1 (2) */ 372 0, 3, /* sect163r2 (3) */ 373# endif 374 0, 15, /* secp160k1 (15) */ 375 0, 16, /* secp160r1 (16) */ 376 0, 17, /* secp160r2 (17) */ 377}; 378# endif 379 380int tls1_ec_curve_id2nid(int curve_id) 381{ 382 /* ECC curves from RFC 4492 and RFC 7027 */ 383 if ((curve_id < 1) || ((unsigned int)curve_id > 384 sizeof(nid_list) / sizeof(nid_list[0]))) 385 return 0; 386 return nid_list[curve_id - 1]; 387} 388 389int tls1_ec_nid2curve_id(int nid) 390{ 391 /* ECC curves from RFC 4492 and RFC 7027 */ 392 switch (nid) { 393 case NID_sect163k1: /* sect163k1 (1) */ 394 return 1; 395 case NID_sect163r1: /* sect163r1 (2) */ 396 return 2; 397 case NID_sect163r2: /* sect163r2 (3) */ 398 return 3; 399 case NID_sect193r1: /* sect193r1 (4) */ 400 return 4; 401 case NID_sect193r2: /* sect193r2 (5) */ 402 return 5; 403 case NID_sect233k1: /* sect233k1 (6) */ 404 return 6; 405 case NID_sect233r1: /* sect233r1 (7) */ 406 return 7; 407 case NID_sect239k1: /* sect239k1 (8) */ 408 return 8; 409 case NID_sect283k1: /* sect283k1 (9) */ 410 return 9; 411 case NID_sect283r1: /* sect283r1 (10) */ 412 return 10; 413 case NID_sect409k1: /* sect409k1 (11) */ 414 return 11; 415 case NID_sect409r1: /* sect409r1 (12) */ 416 return 12; 417 case NID_sect571k1: /* sect571k1 (13) */ 418 return 13; 419 case NID_sect571r1: /* sect571r1 (14) */ 420 return 14; 421 case NID_secp160k1: /* secp160k1 (15) */ 422 return 15; 423 case NID_secp160r1: /* secp160r1 (16) */ 424 return 16; 425 case NID_secp160r2: /* secp160r2 (17) */ 426 return 17; 427 case NID_secp192k1: /* secp192k1 (18) */ 428 return 18; 429 case NID_X9_62_prime192v1: /* secp192r1 (19) */ 430 return 19; 431 case NID_secp224k1: /* secp224k1 (20) */ 432 return 20; 433 case NID_secp224r1: /* secp224r1 (21) */ 434 return 21; 435 case NID_secp256k1: /* secp256k1 (22) */ 436 return 22; 437 case NID_X9_62_prime256v1: /* secp256r1 (23) */ 438 return 23; 439 case NID_secp384r1: /* secp384r1 (24) */ 440 return 24; 441 case NID_secp521r1: /* secp521r1 (25) */ 442 return 25; 443 case NID_brainpoolP256r1: /* brainpoolP256r1 (26) */ 444 return 26; 445 case NID_brainpoolP384r1: /* brainpoolP384r1 (27) */ 446 return 27; 447 case NID_brainpoolP512r1: /* brainpool512r1 (28) */ 448 return 28; 449 default: 450 return 0; 451 } 452} 453 454/* 455 * Get curves list, if "sess" is set return client curves otherwise 456 * preferred list. 457 * Sets |num_curves| to the number of curves in the list, i.e., 458 * the length of |pcurves| is 2 * num_curves. 459 * Returns 1 on success and 0 if the client curves list has invalid format. 460 * The latter indicates an internal error: we should not be accepting such 461 * lists in the first place. 462 * TODO(emilia): we should really be storing the curves list in explicitly 463 * parsed form instead. (However, this would affect binary compatibility 464 * so cannot happen in the 1.0.x series.) 465 */ 466static int tls1_get_curvelist(SSL *s, int sess, 467 const unsigned char **pcurves, 468 size_t *num_curves) 469{ 470 size_t pcurveslen = 0; 471 if (sess) { 472 *pcurves = s->session->tlsext_ellipticcurvelist; 473 pcurveslen = s->session->tlsext_ellipticcurvelist_length; 474 } else { 475 /* For Suite B mode only include P-256, P-384 */ 476 switch (tls1_suiteb(s)) { 477 case SSL_CERT_FLAG_SUITEB_128_LOS: 478 *pcurves = suiteb_curves; 479 pcurveslen = sizeof(suiteb_curves); 480 break; 481 482 case SSL_CERT_FLAG_SUITEB_128_LOS_ONLY: 483 *pcurves = suiteb_curves; 484 pcurveslen = 2; 485 break; 486 487 case SSL_CERT_FLAG_SUITEB_192_LOS: 488 *pcurves = suiteb_curves + 2; 489 pcurveslen = 2; 490 break; 491 default: 492 *pcurves = s->tlsext_ellipticcurvelist; 493 pcurveslen = s->tlsext_ellipticcurvelist_length; 494 } 495 if (!*pcurves) { 496# ifdef OPENSSL_FIPS 497 if (FIPS_mode()) { 498 *pcurves = fips_curves_default; 499 pcurveslen = sizeof(fips_curves_default); 500 } else 501# endif 502 { 503 if (!s->server || s->cert->ecdh_tmp_auto) { 504 *pcurves = eccurves_auto; 505 pcurveslen = sizeof(eccurves_auto); 506 } else { 507 *pcurves = eccurves_all; 508 pcurveslen = sizeof(eccurves_all); 509 } 510 } 511 } 512 } 513 /* We do not allow odd length arrays to enter the system. */ 514 if (pcurveslen & 1) { 515 SSLerr(SSL_F_TLS1_GET_CURVELIST, ERR_R_INTERNAL_ERROR); 516 *num_curves = 0; 517 return 0; 518 } else { 519 *num_curves = pcurveslen / 2; 520 return 1; 521 } 522} 523 524/* Check a curve is one of our preferences */ 525int tls1_check_curve(SSL *s, const unsigned char *p, size_t len) 526{ 527 const unsigned char *curves; 528 size_t num_curves, i; 529 unsigned int suiteb_flags = tls1_suiteb(s); 530 if (len != 3 || p[0] != NAMED_CURVE_TYPE) 531 return 0; 532 /* Check curve matches Suite B preferences */ 533 if (suiteb_flags) { 534 unsigned long cid = s->s3->tmp.new_cipher->id; 535 if (p[1]) 536 return 0; 537 if (cid == TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256) { 538 if (p[2] != TLSEXT_curve_P_256) 539 return 0; 540 } else if (cid == TLS1_CK_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384) { 541 if (p[2] != TLSEXT_curve_P_384) 542 return 0; 543 } else /* Should never happen */ 544 return 0; 545 } 546 if (!tls1_get_curvelist(s, 0, &curves, &num_curves)) 547 return 0; 548 for (i = 0; i < num_curves; i++, curves += 2) { 549 if (p[1] == curves[0] && p[2] == curves[1]) 550 return 1; 551 } 552 return 0; 553} 554 555/*- 556 * Return |nmatch|th shared curve or NID_undef if there is no match. 557 * For nmatch == -1, return number of matches 558 * For nmatch == -2, return the NID of the curve to use for 559 * an EC tmp key, or NID_undef if there is no match. 560 */ 561int tls1_shared_curve(SSL *s, int nmatch) 562{ 563 const unsigned char *pref, *supp; 564 size_t num_pref, num_supp, i, j; 565 int k; 566 /* Can't do anything on client side */ 567 if (s->server == 0) 568 return -1; 569 if (nmatch == -2) { 570 if (tls1_suiteb(s)) { 571 /* 572 * For Suite B ciphersuite determines curve: we already know 573 * these are acceptable due to previous checks. 574 */ 575 unsigned long cid = s->s3->tmp.new_cipher->id; 576 if (cid == TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256) 577 return NID_X9_62_prime256v1; /* P-256 */ 578 if (cid == TLS1_CK_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384) 579 return NID_secp384r1; /* P-384 */ 580 /* Should never happen */ 581 return NID_undef; 582 } 583 /* If not Suite B just return first preference shared curve */ 584 nmatch = 0; 585 } 586 /* 587 * Avoid truncation. tls1_get_curvelist takes an int 588 * but s->options is a long... 589 */ 590 if (!tls1_get_curvelist 591 (s, (s->options & SSL_OP_CIPHER_SERVER_PREFERENCE) != 0, &supp, 592 &num_supp)) 593 /* In practice, NID_undef == 0 but let's be precise. */ 594 return nmatch == -1 ? 0 : NID_undef; 595 if (!tls1_get_curvelist 596 (s, !(s->options & SSL_OP_CIPHER_SERVER_PREFERENCE), &pref, 597 &num_pref)) 598 return nmatch == -1 ? 0 : NID_undef; 599 600 /* 601 * If the client didn't send the elliptic_curves extension all of them 602 * are allowed. 603 */ 604 if (num_supp == 0 && (s->options & SSL_OP_CIPHER_SERVER_PREFERENCE) != 0) { 605 supp = eccurves_all; 606 num_supp = sizeof(eccurves_all) / 2; 607 } else if (num_pref == 0 && 608 (s->options & SSL_OP_CIPHER_SERVER_PREFERENCE) == 0) { 609 pref = eccurves_all; 610 num_pref = sizeof(eccurves_all) / 2; 611 } 612 613 k = 0; 614 for (i = 0; i < num_pref; i++, pref += 2) { 615 const unsigned char *tsupp = supp; 616 for (j = 0; j < num_supp; j++, tsupp += 2) { 617 if (pref[0] == tsupp[0] && pref[1] == tsupp[1]) { 618 if (nmatch == k) { 619 int id = (pref[0] << 8) | pref[1]; 620 return tls1_ec_curve_id2nid(id); 621 } 622 k++; 623 } 624 } 625 } 626 if (nmatch == -1) 627 return k; 628 /* Out of range (nmatch > k). */ 629 return NID_undef; 630} 631 632int tls1_set_curves(unsigned char **pext, size_t *pextlen, 633 int *curves, size_t ncurves) 634{ 635 unsigned char *clist, *p; 636 size_t i; 637 /* 638 * Bitmap of curves included to detect duplicates: only works while curve 639 * ids < 32 640 */ 641 unsigned long dup_list = 0; 642# ifdef OPENSSL_NO_EC2M 643 EC_GROUP *curve; 644# endif 645 646 clist = OPENSSL_malloc(ncurves * 2); 647 if (!clist) 648 return 0; 649 for (i = 0, p = clist; i < ncurves; i++) { 650 unsigned long idmask; 651 int id; 652 id = tls1_ec_nid2curve_id(curves[i]); 653# ifdef OPENSSL_FIPS 654 /* NB: 25 is last curve ID supported by FIPS module */ 655 if (FIPS_mode() && id > 25) { 656 OPENSSL_free(clist); 657 return 0; 658 } 659# endif 660# ifdef OPENSSL_NO_EC2M 661 curve = EC_GROUP_new_by_curve_name(curves[i]); 662 if (!curve || EC_METHOD_get_field_type(EC_GROUP_method_of(curve)) 663 == NID_X9_62_characteristic_two_field) { 664 if (curve) 665 EC_GROUP_free(curve); 666 OPENSSL_free(clist); 667 return 0; 668 } else 669 EC_GROUP_free(curve); 670# endif 671 idmask = 1L << id; 672 if (!id || (dup_list & idmask)) { 673 OPENSSL_free(clist); 674 return 0; 675 } 676 dup_list |= idmask; 677 s2n(id, p); 678 } 679 if (*pext) 680 OPENSSL_free(*pext); 681 *pext = clist; 682 *pextlen = ncurves * 2; 683 return 1; 684} 685 686# define MAX_CURVELIST 28 687 688typedef struct { 689 size_t nidcnt; 690 int nid_arr[MAX_CURVELIST]; 691} nid_cb_st; 692 693static int nid_cb(const char *elem, int len, void *arg) 694{ 695 nid_cb_st *narg = arg; 696 size_t i; 697 int nid; 698 char etmp[20]; 699 if (elem == NULL) 700 return 0; 701 if (narg->nidcnt == MAX_CURVELIST) 702 return 0; 703 if (len > (int)(sizeof(etmp) - 1)) 704 return 0; 705 memcpy(etmp, elem, len); 706 etmp[len] = 0; 707 nid = EC_curve_nist2nid(etmp); 708 if (nid == NID_undef) 709 nid = OBJ_sn2nid(etmp); 710 if (nid == NID_undef) 711 nid = OBJ_ln2nid(etmp); 712 if (nid == NID_undef) 713 return 0; 714 for (i = 0; i < narg->nidcnt; i++) 715 if (narg->nid_arr[i] == nid) 716 return 0; 717 narg->nid_arr[narg->nidcnt++] = nid; 718 return 1; 719} 720 721/* Set curves based on a colon separate list */ 722int tls1_set_curves_list(unsigned char **pext, size_t *pextlen, 723 const char *str) 724{ 725 nid_cb_st ncb; 726 ncb.nidcnt = 0; 727 if (!CONF_parse_list(str, ':', 1, nid_cb, &ncb)) 728 return 0; 729 if (pext == NULL) 730 return 1; 731 return tls1_set_curves(pext, pextlen, ncb.nid_arr, ncb.nidcnt); 732} 733 734/* For an EC key set TLS id and required compression based on parameters */ 735static int tls1_set_ec_id(unsigned char *curve_id, unsigned char *comp_id, 736 EC_KEY *ec) 737{ 738 int is_prime, id; 739 const EC_GROUP *grp; 740 const EC_METHOD *meth; 741 if (!ec) 742 return 0; 743 /* Determine if it is a prime field */ 744 grp = EC_KEY_get0_group(ec); 745 if (!grp) 746 return 0; 747 meth = EC_GROUP_method_of(grp); 748 if (!meth) 749 return 0; 750 if (EC_METHOD_get_field_type(meth) == NID_X9_62_prime_field) 751 is_prime = 1; 752 else 753 is_prime = 0; 754 /* Determine curve ID */ 755 id = EC_GROUP_get_curve_name(grp); 756 id = tls1_ec_nid2curve_id(id); 757 /* If we have an ID set it, otherwise set arbitrary explicit curve */ 758 if (id) { 759 curve_id[0] = 0; 760 curve_id[1] = (unsigned char)id; 761 } else { 762 curve_id[0] = 0xff; 763 if (is_prime) 764 curve_id[1] = 0x01; 765 else 766 curve_id[1] = 0x02; 767 } 768 if (comp_id) { 769 if (EC_KEY_get0_public_key(ec) == NULL) 770 return 0; 771 if (EC_KEY_get_conv_form(ec) == POINT_CONVERSION_COMPRESSED) { 772 if (is_prime) 773 *comp_id = TLSEXT_ECPOINTFORMAT_ansiX962_compressed_prime; 774 else 775 *comp_id = TLSEXT_ECPOINTFORMAT_ansiX962_compressed_char2; 776 } else 777 *comp_id = TLSEXT_ECPOINTFORMAT_uncompressed; 778 } 779 return 1; 780} 781 782/* Check an EC key is compatible with extensions */ 783static int tls1_check_ec_key(SSL *s, 784 unsigned char *curve_id, unsigned char *comp_id) 785{ 786 const unsigned char *pformats, *pcurves; 787 size_t num_formats, num_curves, i; 788 int j; 789 /* 790 * If point formats extension present check it, otherwise everything is 791 * supported (see RFC4492). 792 */ 793 if (comp_id && s->session->tlsext_ecpointformatlist) { 794 pformats = s->session->tlsext_ecpointformatlist; 795 num_formats = s->session->tlsext_ecpointformatlist_length; 796 for (i = 0; i < num_formats; i++, pformats++) { 797 if (*comp_id == *pformats) 798 break; 799 } 800 if (i == num_formats) 801 return 0; 802 } 803 if (!curve_id) 804 return 1; 805 /* Check curve is consistent with client and server preferences */ 806 for (j = 0; j <= 1; j++) { 807 if (!tls1_get_curvelist(s, j, &pcurves, &num_curves)) 808 return 0; 809 if (j == 1 && num_curves == 0) { 810 /* 811 * If we've not received any curves then skip this check. 812 * RFC 4492 does not require the supported elliptic curves extension 813 * so if it is not sent we can just choose any curve. 814 * It is invalid to send an empty list in the elliptic curves 815 * extension, so num_curves == 0 always means no extension. 816 */ 817 break; 818 } 819 for (i = 0; i < num_curves; i++, pcurves += 2) { 820 if (pcurves[0] == curve_id[0] && pcurves[1] == curve_id[1]) 821 break; 822 } 823 if (i == num_curves) 824 return 0; 825 /* For clients can only check sent curve list */ 826 if (!s->server) 827 return 1; 828 } 829 return 1; 830} 831 832static void tls1_get_formatlist(SSL *s, const unsigned char **pformats, 833 size_t *num_formats) 834{ 835 /* 836 * If we have a custom point format list use it otherwise use default 837 */ 838 if (s->tlsext_ecpointformatlist) { 839 *pformats = s->tlsext_ecpointformatlist; 840 *num_formats = s->tlsext_ecpointformatlist_length; 841 } else { 842 *pformats = ecformats_default; 843 /* For Suite B we don't support char2 fields */ 844 if (tls1_suiteb(s)) 845 *num_formats = sizeof(ecformats_default) - 1; 846 else 847 *num_formats = sizeof(ecformats_default); 848 } 849} 850 851/* 852 * Check cert parameters compatible with extensions: currently just checks EC 853 * certificates have compatible curves and compression. 854 */ 855static int tls1_check_cert_param(SSL *s, X509 *x, int set_ee_md) 856{ 857 unsigned char comp_id, curve_id[2]; 858 EVP_PKEY *pkey; 859 int rv; 860 pkey = X509_get_pubkey(x); 861 if (!pkey) 862 return 0; 863 /* If not EC nothing to do */ 864 if (pkey->type != EVP_PKEY_EC) { 865 EVP_PKEY_free(pkey); 866 return 1; 867 } 868 rv = tls1_set_ec_id(curve_id, &comp_id, pkey->pkey.ec); 869 EVP_PKEY_free(pkey); 870 if (!rv) 871 return 0; 872 /* 873 * Can't check curve_id for client certs as we don't have a supported 874 * curves extension. 875 */ 876 rv = tls1_check_ec_key(s, s->server ? curve_id : NULL, &comp_id); 877 if (!rv) 878 return 0; 879 /* 880 * Special case for suite B. We *MUST* sign using SHA256+P-256 or 881 * SHA384+P-384, adjust digest if necessary. 882 */ 883 if (set_ee_md && tls1_suiteb(s)) { 884 int check_md; 885 size_t i; 886 CERT *c = s->cert; 887 if (curve_id[0]) 888 return 0; 889 /* Check to see we have necessary signing algorithm */ 890 if (curve_id[1] == TLSEXT_curve_P_256) 891 check_md = NID_ecdsa_with_SHA256; 892 else if (curve_id[1] == TLSEXT_curve_P_384) 893 check_md = NID_ecdsa_with_SHA384; 894 else 895 return 0; /* Should never happen */ 896 for (i = 0; i < c->shared_sigalgslen; i++) 897 if (check_md == c->shared_sigalgs[i].signandhash_nid) 898 break; 899 if (i == c->shared_sigalgslen) 900 return 0; 901 if (set_ee_md == 2) { 902 if (check_md == NID_ecdsa_with_SHA256) 903 c->pkeys[SSL_PKEY_ECC].digest = EVP_sha256(); 904 else 905 c->pkeys[SSL_PKEY_ECC].digest = EVP_sha384(); 906 } 907 } 908 return rv; 909} 910 911# ifndef OPENSSL_NO_ECDH 912/* Check EC temporary key is compatible with client extensions */ 913int tls1_check_ec_tmp_key(SSL *s, unsigned long cid) 914{ 915 unsigned char curve_id[2]; 916 EC_KEY *ec = s->cert->ecdh_tmp; 917# ifdef OPENSSL_SSL_DEBUG_BROKEN_PROTOCOL 918 /* Allow any curve: not just those peer supports */ 919 if (s->cert->cert_flags & SSL_CERT_FLAG_BROKEN_PROTOCOL) 920 return 1; 921# endif 922 /* 923 * If Suite B, AES128 MUST use P-256 and AES256 MUST use P-384, no other 924 * curves permitted. 925 */ 926 if (tls1_suiteb(s)) { 927 /* Curve to check determined by ciphersuite */ 928 if (cid == TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256) 929 curve_id[1] = TLSEXT_curve_P_256; 930 else if (cid == TLS1_CK_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384) 931 curve_id[1] = TLSEXT_curve_P_384; 932 else 933 return 0; 934 curve_id[0] = 0; 935 /* Check this curve is acceptable */ 936 if (!tls1_check_ec_key(s, curve_id, NULL)) 937 return 0; 938 /* If auto or setting curve from callback assume OK */ 939 if (s->cert->ecdh_tmp_auto || s->cert->ecdh_tmp_cb) 940 return 1; 941 /* Otherwise check curve is acceptable */ 942 else { 943 unsigned char curve_tmp[2]; 944 if (!ec) 945 return 0; 946 if (!tls1_set_ec_id(curve_tmp, NULL, ec)) 947 return 0; 948 if (!curve_tmp[0] || curve_tmp[1] == curve_id[1]) 949 return 1; 950 return 0; 951 } 952 953 } 954 if (s->cert->ecdh_tmp_auto) { 955 /* Need a shared curve */ 956 if (tls1_shared_curve(s, 0)) 957 return 1; 958 else 959 return 0; 960 } 961 if (!ec) { 962 if (s->cert->ecdh_tmp_cb) 963 return 1; 964 else 965 return 0; 966 } 967 if (!tls1_set_ec_id(curve_id, NULL, ec)) 968 return 0; 969/* Set this to allow use of invalid curves for testing */ 970# if 0 971 return 1; 972# else 973 return tls1_check_ec_key(s, curve_id, NULL); 974# endif 975} 976# endif /* OPENSSL_NO_ECDH */ 977 978#else 979 980static int tls1_check_cert_param(SSL *s, X509 *x, int set_ee_md) 981{ 982 return 1; 983} 984 985#endif /* OPENSSL_NO_EC */ 986 987#ifndef OPENSSL_NO_TLSEXT 988 989/* 990 * List of supported signature algorithms and hashes. Should make this 991 * customisable at some point, for now include everything we support. 992 */ 993 994# ifdef OPENSSL_NO_RSA 995# define tlsext_sigalg_rsa(md) /* */ 996# else 997# define tlsext_sigalg_rsa(md) md, TLSEXT_signature_rsa, 998# endif 999 1000# ifdef OPENSSL_NO_DSA 1001# define tlsext_sigalg_dsa(md) /* */ 1002# else 1003# define tlsext_sigalg_dsa(md) md, TLSEXT_signature_dsa, 1004# endif 1005 1006# ifdef OPENSSL_NO_ECDSA 1007# define tlsext_sigalg_ecdsa(md) 1008 /* */ 1009# else 1010# define tlsext_sigalg_ecdsa(md) md, TLSEXT_signature_ecdsa, 1011# endif 1012 1013# define tlsext_sigalg(md) \ 1014 tlsext_sigalg_rsa(md) \ 1015 tlsext_sigalg_dsa(md) \ 1016 tlsext_sigalg_ecdsa(md) 1017 1018static unsigned char tls12_sigalgs[] = { 1019# ifndef OPENSSL_NO_SHA512 1020 tlsext_sigalg(TLSEXT_hash_sha512) 1021 tlsext_sigalg(TLSEXT_hash_sha384) 1022# endif 1023# ifndef OPENSSL_NO_SHA256 1024 tlsext_sigalg(TLSEXT_hash_sha256) 1025 tlsext_sigalg(TLSEXT_hash_sha224) 1026# endif 1027# ifndef OPENSSL_NO_SHA 1028 tlsext_sigalg(TLSEXT_hash_sha1) 1029# endif 1030}; 1031 1032# ifndef OPENSSL_NO_ECDSA 1033static unsigned char suiteb_sigalgs[] = { 1034 tlsext_sigalg_ecdsa(TLSEXT_hash_sha256) 1035 tlsext_sigalg_ecdsa(TLSEXT_hash_sha384) 1036}; 1037# endif 1038size_t tls12_get_psigalgs(SSL *s, const unsigned char **psigs) 1039{ 1040 /* 1041 * If Suite B mode use Suite B sigalgs only, ignore any other 1042 * preferences. 1043 */ 1044# ifndef OPENSSL_NO_EC 1045 switch (tls1_suiteb(s)) { 1046 case SSL_CERT_FLAG_SUITEB_128_LOS: 1047 *psigs = suiteb_sigalgs; 1048 return sizeof(suiteb_sigalgs); 1049 1050 case SSL_CERT_FLAG_SUITEB_128_LOS_ONLY: 1051 *psigs = suiteb_sigalgs; 1052 return 2; 1053 1054 case SSL_CERT_FLAG_SUITEB_192_LOS: 1055 *psigs = suiteb_sigalgs + 2; 1056 return 2; 1057 } 1058# endif 1059 /* If server use client authentication sigalgs if not NULL */ 1060 if (s->server && s->cert->client_sigalgs) { 1061 *psigs = s->cert->client_sigalgs; 1062 return s->cert->client_sigalgslen; 1063 } else if (s->cert->conf_sigalgs) { 1064 *psigs = s->cert->conf_sigalgs; 1065 return s->cert->conf_sigalgslen; 1066 } else { 1067 *psigs = tls12_sigalgs; 1068 return sizeof(tls12_sigalgs); 1069 } 1070} 1071 1072/* 1073 * Check signature algorithm is consistent with sent supported signature 1074 * algorithms and if so return relevant digest. 1075 */ 1076int tls12_check_peer_sigalg(const EVP_MD **pmd, SSL *s, 1077 const unsigned char *sig, EVP_PKEY *pkey) 1078{ 1079 const unsigned char *sent_sigs; 1080 size_t sent_sigslen, i; 1081 int sigalg = tls12_get_sigid(pkey); 1082 /* Should never happen */ 1083 if (sigalg == -1) 1084 return -1; 1085 /* Check key type is consistent with signature */ 1086 if (sigalg != (int)sig[1]) { 1087 SSLerr(SSL_F_TLS12_CHECK_PEER_SIGALG, SSL_R_WRONG_SIGNATURE_TYPE); 1088 return 0; 1089 } 1090# ifndef OPENSSL_NO_EC 1091 if (pkey->type == EVP_PKEY_EC) { 1092 unsigned char curve_id[2], comp_id; 1093 /* Check compression and curve matches extensions */ 1094 if (!tls1_set_ec_id(curve_id, &comp_id, pkey->pkey.ec)) 1095 return 0; 1096 if (!s->server && !tls1_check_ec_key(s, curve_id, &comp_id)) { 1097 SSLerr(SSL_F_TLS12_CHECK_PEER_SIGALG, SSL_R_WRONG_CURVE); 1098 return 0; 1099 } 1100 /* If Suite B only P-384+SHA384 or P-256+SHA-256 allowed */ 1101 if (tls1_suiteb(s)) { 1102 if (curve_id[0]) 1103 return 0; 1104 if (curve_id[1] == TLSEXT_curve_P_256) { 1105 if (sig[0] != TLSEXT_hash_sha256) { 1106 SSLerr(SSL_F_TLS12_CHECK_PEER_SIGALG, 1107 SSL_R_ILLEGAL_SUITEB_DIGEST); 1108 return 0; 1109 } 1110 } else if (curve_id[1] == TLSEXT_curve_P_384) { 1111 if (sig[0] != TLSEXT_hash_sha384) { 1112 SSLerr(SSL_F_TLS12_CHECK_PEER_SIGALG, 1113 SSL_R_ILLEGAL_SUITEB_DIGEST); 1114 return 0; 1115 } 1116 } else 1117 return 0; 1118 } 1119 } else if (tls1_suiteb(s)) 1120 return 0; 1121# endif 1122 1123 /* Check signature matches a type we sent */ 1124 sent_sigslen = tls12_get_psigalgs(s, &sent_sigs); 1125 for (i = 0; i < sent_sigslen; i += 2, sent_sigs += 2) { 1126 if (sig[0] == sent_sigs[0] && sig[1] == sent_sigs[1]) 1127 break; 1128 } 1129 /* Allow fallback to SHA1 if not strict mode */ 1130 if (i == sent_sigslen 1131 && (sig[0] != TLSEXT_hash_sha1 1132 || s->cert->cert_flags & SSL_CERT_FLAGS_CHECK_TLS_STRICT)) { 1133 SSLerr(SSL_F_TLS12_CHECK_PEER_SIGALG, SSL_R_WRONG_SIGNATURE_TYPE); 1134 return 0; 1135 } 1136 *pmd = tls12_get_hash(sig[0]); 1137 if (*pmd == NULL) { 1138 SSLerr(SSL_F_TLS12_CHECK_PEER_SIGALG, SSL_R_UNKNOWN_DIGEST); 1139 return 0; 1140 } 1141 /* 1142 * Store the digest used so applications can retrieve it if they wish. 1143 */ 1144 if (s->session && s->session->sess_cert) 1145 s->session->sess_cert->peer_key->digest = *pmd; 1146 return 1; 1147} 1148 1149/* 1150 * Get a mask of disabled algorithms: an algorithm is disabled if it isn't 1151 * supported or doesn't appear in supported signature algorithms. Unlike 1152 * ssl_cipher_get_disabled this applies to a specific session and not global 1153 * settings. 1154 */ 1155void ssl_set_client_disabled(SSL *s) 1156{ 1157 CERT *c = s->cert; 1158 const unsigned char *sigalgs; 1159 size_t i, sigalgslen; 1160 int have_rsa = 0, have_dsa = 0, have_ecdsa = 0; 1161 c->mask_a = 0; 1162 c->mask_k = 0; 1163 /* Don't allow TLS 1.2 only ciphers if we don't suppport them */ 1164 if (!SSL_CLIENT_USE_TLS1_2_CIPHERS(s)) 1165 c->mask_ssl = SSL_TLSV1_2; 1166 else 1167 c->mask_ssl = 0; 1168 /* 1169 * Now go through all signature algorithms seeing if we support any for 1170 * RSA, DSA, ECDSA. Do this for all versions not just TLS 1.2. 1171 */ 1172 sigalgslen = tls12_get_psigalgs(s, &sigalgs); 1173 for (i = 0; i < sigalgslen; i += 2, sigalgs += 2) { 1174 switch (sigalgs[1]) { 1175# ifndef OPENSSL_NO_RSA 1176 case TLSEXT_signature_rsa: 1177 have_rsa = 1; 1178 break; 1179# endif 1180# ifndef OPENSSL_NO_DSA 1181 case TLSEXT_signature_dsa: 1182 have_dsa = 1; 1183 break; 1184# endif 1185# ifndef OPENSSL_NO_ECDSA 1186 case TLSEXT_signature_ecdsa: 1187 have_ecdsa = 1; 1188 break; 1189# endif 1190 } 1191 } 1192 /* 1193 * Disable auth and static DH if we don't include any appropriate 1194 * signature algorithms. 1195 */ 1196 if (!have_rsa) { 1197 c->mask_a |= SSL_aRSA; 1198 c->mask_k |= SSL_kDHr | SSL_kECDHr; 1199 } 1200 if (!have_dsa) { 1201 c->mask_a |= SSL_aDSS; 1202 c->mask_k |= SSL_kDHd; 1203 } 1204 if (!have_ecdsa) { 1205 c->mask_a |= SSL_aECDSA; 1206 c->mask_k |= SSL_kECDHe; 1207 } 1208# ifndef OPENSSL_NO_KRB5 1209 if (!kssl_tgt_is_available(s->kssl_ctx)) { 1210 c->mask_a |= SSL_aKRB5; 1211 c->mask_k |= SSL_kKRB5; 1212 } 1213# endif 1214# ifndef OPENSSL_NO_PSK 1215 /* with PSK there must be client callback set */ 1216 if (!s->psk_client_callback) { 1217 c->mask_a |= SSL_aPSK; 1218 c->mask_k |= SSL_kPSK; 1219 } 1220# endif /* OPENSSL_NO_PSK */ 1221# ifndef OPENSSL_NO_SRP 1222 if (!(s->srp_ctx.srp_Mask & SSL_kSRP)) { 1223 c->mask_a |= SSL_aSRP; 1224 c->mask_k |= SSL_kSRP; 1225 } 1226# endif 1227 c->valid = 1; 1228} 1229 1230unsigned char *ssl_add_clienthello_tlsext(SSL *s, unsigned char *buf, 1231 unsigned char *limit, int *al) 1232{ 1233 int extdatalen = 0; 1234 unsigned char *orig = buf; 1235 unsigned char *ret = buf; 1236# ifndef OPENSSL_NO_EC 1237 /* See if we support any ECC ciphersuites */ 1238 int using_ecc = 0; 1239 if (s->version >= TLS1_VERSION || SSL_IS_DTLS(s)) { 1240 int i; 1241 unsigned long alg_k, alg_a; 1242 STACK_OF(SSL_CIPHER) *cipher_stack = SSL_get_ciphers(s); 1243 1244 for (i = 0; i < sk_SSL_CIPHER_num(cipher_stack); i++) { 1245 SSL_CIPHER *c = sk_SSL_CIPHER_value(cipher_stack, i); 1246 1247 alg_k = c->algorithm_mkey; 1248 alg_a = c->algorithm_auth; 1249 if ((alg_k & (SSL_kEECDH | SSL_kECDHr | SSL_kECDHe) 1250 || (alg_a & SSL_aECDSA))) { 1251 using_ecc = 1; 1252 break; 1253 } 1254 } 1255 } 1256# endif 1257 1258 /* don't add extensions for SSLv3 unless doing secure renegotiation */ 1259 if (s->client_version == SSL3_VERSION && !s->s3->send_connection_binding) 1260 return orig; 1261 1262 ret += 2; 1263 1264 if (ret >= limit) 1265 return NULL; /* this really never occurs, but ... */ 1266 1267 if (s->tlsext_hostname != NULL) { 1268 /* Add TLS extension servername to the Client Hello message */ 1269 size_t size_str; 1270 1271 /*- 1272 * check for enough space. 1273 * 4 for the servername type and entension length 1274 * 2 for servernamelist length 1275 * 1 for the hostname type 1276 * 2 for hostname length 1277 * + hostname length 1278 */ 1279 size_str = strlen(s->tlsext_hostname); 1280 if (CHECKLEN(ret, 9 + size_str, limit)) 1281 return NULL; 1282 1283 /* extension type and length */ 1284 s2n(TLSEXT_TYPE_server_name, ret); 1285 s2n(size_str + 5, ret); 1286 1287 /* length of servername list */ 1288 s2n(size_str + 3, ret); 1289 1290 /* hostname type, length and hostname */ 1291 *(ret++) = (unsigned char)TLSEXT_NAMETYPE_host_name; 1292 s2n(size_str, ret); 1293 memcpy(ret, s->tlsext_hostname, size_str); 1294 ret += size_str; 1295 } 1296 1297 /* Add RI if renegotiating */ 1298 if (s->renegotiate) { 1299 int el; 1300 1301 if (!ssl_add_clienthello_renegotiate_ext(s, 0, &el, 0)) { 1302 SSLerr(SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT, ERR_R_INTERNAL_ERROR); 1303 return NULL; 1304 } 1305 1306 if ((limit - ret - 4 - el) < 0) 1307 return NULL; 1308 1309 s2n(TLSEXT_TYPE_renegotiate, ret); 1310 s2n(el, ret); 1311 1312 if (!ssl_add_clienthello_renegotiate_ext(s, ret, &el, el)) { 1313 SSLerr(SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT, ERR_R_INTERNAL_ERROR); 1314 return NULL; 1315 } 1316 1317 ret += el; 1318 } 1319# ifndef OPENSSL_NO_SRP 1320 /* Add SRP username if there is one */ 1321 if (s->srp_ctx.login != NULL) { /* Add TLS extension SRP username to the 1322 * Client Hello message */ 1323 1324 size_t login_len = strlen(s->srp_ctx.login); 1325 if (login_len > 255 || login_len == 0) { 1326 SSLerr(SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT, ERR_R_INTERNAL_ERROR); 1327 return NULL; 1328 } 1329 1330 /*- 1331 * check for enough space. 1332 * 4 for the srp type type and entension length 1333 * 1 for the srp user identity 1334 * + srp user identity length 1335 */ 1336 if (CHECKLEN(ret, 5 + login_len, limit)) 1337 return NULL; 1338 1339 /* fill in the extension */ 1340 s2n(TLSEXT_TYPE_srp, ret); 1341 s2n(login_len + 1, ret); 1342 (*ret++) = (unsigned char)login_len; 1343 memcpy(ret, s->srp_ctx.login, login_len); 1344 ret += login_len; 1345 } 1346# endif 1347 1348# ifndef OPENSSL_NO_EC 1349 if (using_ecc) { 1350 /* 1351 * Add TLS extension ECPointFormats to the ClientHello message 1352 */ 1353 const unsigned char *pcurves, *pformats; 1354 size_t num_curves, num_formats, curves_list_len; 1355 1356 tls1_get_formatlist(s, &pformats, &num_formats); 1357 1358 if (num_formats > 255) { 1359 SSLerr(SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT, ERR_R_INTERNAL_ERROR); 1360 return NULL; 1361 } 1362 /*- 1363 * check for enough space. 1364 * 4 bytes for the ec point formats type and extension length 1365 * 1 byte for the length of the formats 1366 * + formats length 1367 */ 1368 if (CHECKLEN(ret, 5 + num_formats, limit)) 1369 return NULL; 1370 1371 s2n(TLSEXT_TYPE_ec_point_formats, ret); 1372 /* The point format list has 1-byte length. */ 1373 s2n(num_formats + 1, ret); 1374 *(ret++) = (unsigned char)num_formats; 1375 memcpy(ret, pformats, num_formats); 1376 ret += num_formats; 1377 1378 /* 1379 * Add TLS extension EllipticCurves to the ClientHello message 1380 */ 1381 pcurves = s->tlsext_ellipticcurvelist; 1382 if (!tls1_get_curvelist(s, 0, &pcurves, &num_curves)) 1383 return NULL; 1384 1385 if (num_curves > 65532 / 2) { 1386 SSLerr(SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT, ERR_R_INTERNAL_ERROR); 1387 return NULL; 1388 } 1389 curves_list_len = 2 * num_curves; 1390 /*- 1391 * check for enough space. 1392 * 4 bytes for the ec curves type and extension length 1393 * 2 bytes for the curve list length 1394 * + curve list length 1395 */ 1396 if (CHECKLEN(ret, 6 + curves_list_len, limit)) 1397 return NULL; 1398 1399 s2n(TLSEXT_TYPE_elliptic_curves, ret); 1400 s2n(curves_list_len + 2, ret); 1401 s2n(curves_list_len, ret); 1402 memcpy(ret, pcurves, curves_list_len); 1403 ret += curves_list_len; 1404 } 1405# endif /* OPENSSL_NO_EC */ 1406 1407 if (!(SSL_get_options(s) & SSL_OP_NO_TICKET)) { 1408 size_t ticklen; 1409 if (!s->new_session && s->session && s->session->tlsext_tick) 1410 ticklen = s->session->tlsext_ticklen; 1411 else if (s->session && s->tlsext_session_ticket && 1412 s->tlsext_session_ticket->data) { 1413 ticklen = s->tlsext_session_ticket->length; 1414 s->session->tlsext_tick = OPENSSL_malloc(ticklen); 1415 if (!s->session->tlsext_tick) 1416 return NULL; 1417 memcpy(s->session->tlsext_tick, 1418 s->tlsext_session_ticket->data, ticklen); 1419 s->session->tlsext_ticklen = ticklen; 1420 } else 1421 ticklen = 0; 1422 if (ticklen == 0 && s->tlsext_session_ticket && 1423 s->tlsext_session_ticket->data == NULL) 1424 goto skip_ext; 1425 /* 1426 * Check for enough room 2 for extension type, 2 for len rest for 1427 * ticket 1428 */ 1429 if (CHECKLEN(ret, 4 + ticklen, limit)) 1430 return NULL; 1431 s2n(TLSEXT_TYPE_session_ticket, ret); 1432 s2n(ticklen, ret); 1433 if (ticklen > 0) { 1434 memcpy(ret, s->session->tlsext_tick, ticklen); 1435 ret += ticklen; 1436 } 1437 } 1438 skip_ext: 1439 1440 if (SSL_CLIENT_USE_SIGALGS(s)) { 1441 size_t salglen; 1442 const unsigned char *salg; 1443 salglen = tls12_get_psigalgs(s, &salg); 1444 1445 /*- 1446 * check for enough space. 1447 * 4 bytes for the sigalgs type and extension length 1448 * 2 bytes for the sigalg list length 1449 * + sigalg list length 1450 */ 1451 if (CHECKLEN(ret, salglen + 6, limit)) 1452 return NULL; 1453 s2n(TLSEXT_TYPE_signature_algorithms, ret); 1454 s2n(salglen + 2, ret); 1455 s2n(salglen, ret); 1456 memcpy(ret, salg, salglen); 1457 ret += salglen; 1458 } 1459# ifdef TLSEXT_TYPE_opaque_prf_input 1460 if (s->s3->client_opaque_prf_input != NULL) { 1461 size_t col = s->s3->client_opaque_prf_input_len; 1462 1463 if ((long)(limit - ret - 6 - col < 0)) 1464 return NULL; 1465 if (col > 0xFFFD) /* can't happen */ 1466 return NULL; 1467 1468 s2n(TLSEXT_TYPE_opaque_prf_input, ret); 1469 s2n(col + 2, ret); 1470 s2n(col, ret); 1471 memcpy(ret, s->s3->client_opaque_prf_input, col); 1472 ret += col; 1473 } 1474# endif 1475 1476 if (s->tlsext_status_type == TLSEXT_STATUSTYPE_ocsp) { 1477 int i; 1478 size_t extlen, idlen; 1479 int lentmp; 1480 OCSP_RESPID *id; 1481 1482 idlen = 0; 1483 for (i = 0; i < sk_OCSP_RESPID_num(s->tlsext_ocsp_ids); i++) { 1484 id = sk_OCSP_RESPID_value(s->tlsext_ocsp_ids, i); 1485 lentmp = i2d_OCSP_RESPID(id, NULL); 1486 if (lentmp <= 0) 1487 return NULL; 1488 idlen += (size_t)lentmp + 2; 1489 } 1490 1491 if (s->tlsext_ocsp_exts) { 1492 lentmp = i2d_X509_EXTENSIONS(s->tlsext_ocsp_exts, NULL); 1493 if (lentmp < 0) 1494 return NULL; 1495 extlen = (size_t)lentmp; 1496 } else 1497 extlen = 0; 1498 1499 if (extlen + idlen > 0xFFF0) 1500 return NULL; 1501 /* 1502 * 2 bytes for status request type 1503 * 2 bytes for status request len 1504 * 1 byte for OCSP request type 1505 * 2 bytes for length of ids 1506 * 2 bytes for length of extensions 1507 * + length of ids 1508 * + length of extensions 1509 */ 1510 if (CHECKLEN(ret, 9 + idlen + extlen, limit)) 1511 return NULL; 1512 1513 s2n(TLSEXT_TYPE_status_request, ret); 1514 s2n(extlen + idlen + 5, ret); 1515 *(ret++) = TLSEXT_STATUSTYPE_ocsp; 1516 s2n(idlen, ret); 1517 for (i = 0; i < sk_OCSP_RESPID_num(s->tlsext_ocsp_ids); i++) { 1518 /* save position of id len */ 1519 unsigned char *q = ret; 1520 id = sk_OCSP_RESPID_value(s->tlsext_ocsp_ids, i); 1521 /* skip over id len */ 1522 ret += 2; 1523 lentmp = i2d_OCSP_RESPID(id, &ret); 1524 /* write id len */ 1525 s2n(lentmp, q); 1526 } 1527 s2n(extlen, ret); 1528 if (extlen > 0) 1529 i2d_X509_EXTENSIONS(s->tlsext_ocsp_exts, &ret); 1530 } 1531# ifndef OPENSSL_NO_HEARTBEATS 1532 /* Add Heartbeat extension */ 1533 1534 /*- 1535 * check for enough space. 1536 * 4 bytes for the heartbeat ext type and extension length 1537 * 1 byte for the mode 1538 */ 1539 if (CHECKLEN(ret, 5, limit)) 1540 return NULL; 1541 1542 s2n(TLSEXT_TYPE_heartbeat, ret); 1543 s2n(1, ret); 1544 /*- 1545 * Set mode: 1546 * 1: peer may send requests 1547 * 2: peer not allowed to send requests 1548 */ 1549 if (s->tlsext_heartbeat & SSL_TLSEXT_HB_DONT_RECV_REQUESTS) 1550 *(ret++) = SSL_TLSEXT_HB_DONT_SEND_REQUESTS; 1551 else 1552 *(ret++) = SSL_TLSEXT_HB_ENABLED; 1553# endif 1554 1555# ifndef OPENSSL_NO_NEXTPROTONEG 1556 if (s->ctx->next_proto_select_cb && !s->s3->tmp.finish_md_len) { 1557 /* 1558 * The client advertises an emtpy extension to indicate its support 1559 * for Next Protocol Negotiation 1560 */ 1561 1562 /*- 1563 * check for enough space. 1564 * 4 bytes for the NPN ext type and extension length 1565 */ 1566 if (CHECKLEN(ret, 4, limit)) 1567 return NULL; 1568 s2n(TLSEXT_TYPE_next_proto_neg, ret); 1569 s2n(0, ret); 1570 } 1571# endif 1572 1573 if (s->alpn_client_proto_list && !s->s3->tmp.finish_md_len) { 1574 /*- 1575 * check for enough space. 1576 * 4 bytes for the ALPN type and extension length 1577 * 2 bytes for the ALPN protocol list length 1578 * + ALPN protocol list length 1579 */ 1580 if (CHECKLEN(ret, 6 + s->alpn_client_proto_list_len, limit)) 1581 return NULL; 1582 s2n(TLSEXT_TYPE_application_layer_protocol_negotiation, ret); 1583 s2n(2 + s->alpn_client_proto_list_len, ret); 1584 s2n(s->alpn_client_proto_list_len, ret); 1585 memcpy(ret, s->alpn_client_proto_list, s->alpn_client_proto_list_len); 1586 ret += s->alpn_client_proto_list_len; 1587 s->cert->alpn_sent = 1; 1588 } 1589# ifndef OPENSSL_NO_SRTP 1590 if (SSL_IS_DTLS(s) && SSL_get_srtp_profiles(s)) { 1591 int el; 1592 1593 ssl_add_clienthello_use_srtp_ext(s, 0, &el, 0); 1594 1595 /*- 1596 * check for enough space. 1597 * 4 bytes for the SRTP type and extension length 1598 * + SRTP profiles length 1599 */ 1600 if (CHECKLEN(ret, 4 + el, limit)) 1601 return NULL; 1602 1603 s2n(TLSEXT_TYPE_use_srtp, ret); 1604 s2n(el, ret); 1605 1606 if (ssl_add_clienthello_use_srtp_ext(s, ret, &el, el)) { 1607 SSLerr(SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT, ERR_R_INTERNAL_ERROR); 1608 return NULL; 1609 } 1610 ret += el; 1611 } 1612# endif 1613 custom_ext_init(&s->cert->cli_ext); 1614 /* Add custom TLS Extensions to ClientHello */ 1615 if (!custom_ext_add(s, 0, &ret, limit, al)) 1616 return NULL; 1617 1618 /* 1619 * Add padding to workaround bugs in F5 terminators. See 1620 * https://tools.ietf.org/html/draft-agl-tls-padding-03 NB: because this 1621 * code works out the length of all existing extensions it MUST always 1622 * appear last. 1623 */ 1624 if (s->options & SSL_OP_TLSEXT_PADDING) { 1625 int hlen = ret - (unsigned char *)s->init_buf->data; 1626 /* 1627 * The code in s23_clnt.c to build ClientHello messages includes the 1628 * 5-byte record header in the buffer, while the code in s3_clnt.c 1629 * does not. 1630 */ 1631 if (s->state == SSL23_ST_CW_CLNT_HELLO_A) 1632 hlen -= 5; 1633 if (hlen > 0xff && hlen < 0x200) { 1634 hlen = 0x200 - hlen; 1635 if (hlen >= 4) 1636 hlen -= 4; 1637 else 1638 hlen = 0; 1639 1640 /*- 1641 * check for enough space. Strictly speaking we know we've already 1642 * got enough space because to get here the message size is < 0x200, 1643 * but we know that we've allocated far more than that in the buffer 1644 * - but for consistency and robustness we're going to check anyway. 1645 * 1646 * 4 bytes for the padding type and extension length 1647 * + padding length 1648 */ 1649 if (CHECKLEN(ret, 4 + hlen, limit)) 1650 return NULL; 1651 s2n(TLSEXT_TYPE_padding, ret); 1652 s2n(hlen, ret); 1653 memset(ret, 0, hlen); 1654 ret += hlen; 1655 } 1656 } 1657 1658 if ((extdatalen = ret - orig - 2) == 0) 1659 return orig; 1660 1661 s2n(extdatalen, orig); 1662 return ret; 1663} 1664 1665unsigned char *ssl_add_serverhello_tlsext(SSL *s, unsigned char *buf, 1666 unsigned char *limit, int *al) 1667{ 1668 int extdatalen = 0; 1669 unsigned char *orig = buf; 1670 unsigned char *ret = buf; 1671# ifndef OPENSSL_NO_NEXTPROTONEG 1672 int next_proto_neg_seen; 1673# endif 1674# ifndef OPENSSL_NO_EC 1675 unsigned long alg_k = s->s3->tmp.new_cipher->algorithm_mkey; 1676 unsigned long alg_a = s->s3->tmp.new_cipher->algorithm_auth; 1677 int using_ecc = (alg_k & (SSL_kEECDH | SSL_kECDHr | SSL_kECDHe)) 1678 || (alg_a & SSL_aECDSA); 1679 using_ecc = using_ecc && (s->session->tlsext_ecpointformatlist != NULL); 1680# endif 1681 /* 1682 * don't add extensions for SSLv3, unless doing secure renegotiation 1683 */ 1684 if (s->version == SSL3_VERSION && !s->s3->send_connection_binding) 1685 return orig; 1686 1687 ret += 2; 1688 if (ret >= limit) 1689 return NULL; /* this really never occurs, but ... */ 1690 1691 if (!s->hit && s->servername_done == 1 1692 && s->session->tlsext_hostname != NULL) { 1693 if ((long)(limit - ret - 4) < 0) 1694 return NULL; 1695 1696 s2n(TLSEXT_TYPE_server_name, ret); 1697 s2n(0, ret); 1698 } 1699 1700 if (s->s3->send_connection_binding) { 1701 int el; 1702 1703 if (!ssl_add_serverhello_renegotiate_ext(s, 0, &el, 0)) { 1704 SSLerr(SSL_F_SSL_ADD_SERVERHELLO_TLSEXT, ERR_R_INTERNAL_ERROR); 1705 return NULL; 1706 } 1707 1708 /*- 1709 * check for enough space. 1710 * 4 bytes for the reneg type and extension length 1711 * + reneg data length 1712 */ 1713 if (CHECKLEN(ret, 4 + el, limit)) 1714 return NULL; 1715 1716 s2n(TLSEXT_TYPE_renegotiate, ret); 1717 s2n(el, ret); 1718 1719 if (!ssl_add_serverhello_renegotiate_ext(s, ret, &el, el)) { 1720 SSLerr(SSL_F_SSL_ADD_SERVERHELLO_TLSEXT, ERR_R_INTERNAL_ERROR); 1721 return NULL; 1722 } 1723 1724 ret += el; 1725 } 1726# ifndef OPENSSL_NO_EC 1727 if (using_ecc) { 1728 const unsigned char *plist; 1729 size_t plistlen; 1730 /* 1731 * Add TLS extension ECPointFormats to the ServerHello message 1732 */ 1733 1734 tls1_get_formatlist(s, &plist, &plistlen); 1735 1736 if (plistlen > 255) { 1737 SSLerr(SSL_F_SSL_ADD_SERVERHELLO_TLSEXT, ERR_R_INTERNAL_ERROR); 1738 return NULL; 1739 } 1740 1741 /*- 1742 * check for enough space. 1743 * 4 bytes for the ec points format type and extension length 1744 * 1 byte for the points format list length 1745 * + length of points format list 1746 */ 1747 if (CHECKLEN(ret, 5 + plistlen, limit)) 1748 return NULL; 1749 1750 s2n(TLSEXT_TYPE_ec_point_formats, ret); 1751 s2n(plistlen + 1, ret); 1752 *(ret++) = (unsigned char)plistlen; 1753 memcpy(ret, plist, plistlen); 1754 ret += plistlen; 1755 1756 } 1757 /* 1758 * Currently the server should not respond with a SupportedCurves 1759 * extension 1760 */ 1761# endif /* OPENSSL_NO_EC */ 1762 1763 if (s->tlsext_ticket_expected && !(SSL_get_options(s) & SSL_OP_NO_TICKET)) { 1764 /*- 1765 * check for enough space. 1766 * 4 bytes for the Ticket type and extension length 1767 */ 1768 if (CHECKLEN(ret, 4, limit)) 1769 return NULL; 1770 s2n(TLSEXT_TYPE_session_ticket, ret); 1771 s2n(0, ret); 1772 } 1773 1774 if (s->tlsext_status_expected) { 1775 /*- 1776 * check for enough space. 1777 * 4 bytes for the Status request type and extension length 1778 */ 1779 if (CHECKLEN(ret, 4, limit)) 1780 return NULL; 1781 s2n(TLSEXT_TYPE_status_request, ret); 1782 s2n(0, ret); 1783 } 1784# ifdef TLSEXT_TYPE_opaque_prf_input 1785 if (s->s3->server_opaque_prf_input != NULL) { 1786 size_t sol = s->s3->server_opaque_prf_input_len; 1787 1788 if ((long)(limit - ret - 6 - sol) < 0) 1789 return NULL; 1790 if (sol > 0xFFFD) /* can't happen */ 1791 return NULL; 1792 1793 s2n(TLSEXT_TYPE_opaque_prf_input, ret); 1794 s2n(sol + 2, ret); 1795 s2n(sol, ret); 1796 memcpy(ret, s->s3->server_opaque_prf_input, sol); 1797 ret += sol; 1798 } 1799# endif 1800 1801# ifndef OPENSSL_NO_SRTP 1802 if (SSL_IS_DTLS(s) && s->srtp_profile) { 1803 int el; 1804 1805 ssl_add_serverhello_use_srtp_ext(s, 0, &el, 0); 1806 1807 /*- 1808 * check for enough space. 1809 * 4 bytes for the SRTP profiles type and extension length 1810 * + length of the SRTP profiles list 1811 */ 1812 if (CHECKLEN(ret, 4 + el, limit)) 1813 return NULL; 1814 1815 s2n(TLSEXT_TYPE_use_srtp, ret); 1816 s2n(el, ret); 1817 1818 if (ssl_add_serverhello_use_srtp_ext(s, ret, &el, el)) { 1819 SSLerr(SSL_F_SSL_ADD_SERVERHELLO_TLSEXT, ERR_R_INTERNAL_ERROR); 1820 return NULL; 1821 } 1822 ret += el; 1823 } 1824# endif 1825 1826 if (((s->s3->tmp.new_cipher->id & 0xFFFF) == 0x80 1827 || (s->s3->tmp.new_cipher->id & 0xFFFF) == 0x81) 1828 && (SSL_get_options(s) & SSL_OP_CRYPTOPRO_TLSEXT_BUG)) { 1829 const unsigned char cryptopro_ext[36] = { 1830 0xfd, 0xe8, /* 65000 */ 1831 0x00, 0x20, /* 32 bytes length */ 1832 0x30, 0x1e, 0x30, 0x08, 0x06, 0x06, 0x2a, 0x85, 1833 0x03, 0x02, 0x02, 0x09, 0x30, 0x08, 0x06, 0x06, 1834 0x2a, 0x85, 0x03, 0x02, 0x02, 0x16, 0x30, 0x08, 1835 0x06, 0x06, 0x2a, 0x85, 0x03, 0x02, 0x02, 0x17 1836 }; 1837 1838 /* check for enough space. */ 1839 if (CHECKLEN(ret, sizeof(cryptopro_ext), limit)) 1840 return NULL; 1841 memcpy(ret, cryptopro_ext, sizeof(cryptopro_ext)); 1842 ret += sizeof(cryptopro_ext); 1843 1844 } 1845# ifndef OPENSSL_NO_HEARTBEATS 1846 /* Add Heartbeat extension if we've received one */ 1847 if (s->tlsext_heartbeat & SSL_TLSEXT_HB_ENABLED) { 1848 /*- 1849 * check for enough space. 1850 * 4 bytes for the Heartbeat type and extension length 1851 * 1 byte for the mode 1852 */ 1853 if (CHECKLEN(ret, 5, limit)) 1854 return NULL; 1855 s2n(TLSEXT_TYPE_heartbeat, ret); 1856 s2n(1, ret); 1857 /*- 1858 * Set mode: 1859 * 1: peer may send requests 1860 * 2: peer not allowed to send requests 1861 */ 1862 if (s->tlsext_heartbeat & SSL_TLSEXT_HB_DONT_RECV_REQUESTS) 1863 *(ret++) = SSL_TLSEXT_HB_DONT_SEND_REQUESTS; 1864 else 1865 *(ret++) = SSL_TLSEXT_HB_ENABLED; 1866 1867 } 1868# endif 1869 1870# ifndef OPENSSL_NO_NEXTPROTONEG 1871 next_proto_neg_seen = s->s3->next_proto_neg_seen; 1872 s->s3->next_proto_neg_seen = 0; 1873 if (next_proto_neg_seen && s->ctx->next_protos_advertised_cb) { 1874 const unsigned char *npa; 1875 unsigned int npalen; 1876 int r; 1877 1878 r = s->ctx->next_protos_advertised_cb(s, &npa, &npalen, 1879 s-> 1880 ctx->next_protos_advertised_cb_arg); 1881 if (r == SSL_TLSEXT_ERR_OK) { 1882 /*- 1883 * check for enough space. 1884 * 4 bytes for the NPN type and extension length 1885 * + length of protocols list 1886 */ 1887 if (CHECKLEN(ret, 4 + npalen, limit)) 1888 return NULL; 1889 s2n(TLSEXT_TYPE_next_proto_neg, ret); 1890 s2n(npalen, ret); 1891 memcpy(ret, npa, npalen); 1892 ret += npalen; 1893 s->s3->next_proto_neg_seen = 1; 1894 } 1895 } 1896# endif 1897 if (!custom_ext_add(s, 1, &ret, limit, al)) 1898 return NULL; 1899 1900 if (s->s3->alpn_selected) { 1901 const unsigned char *selected = s->s3->alpn_selected; 1902 size_t len = s->s3->alpn_selected_len; 1903 1904 /*- 1905 * check for enough space. 1906 * 4 bytes for the ALPN type and extension length 1907 * 2 bytes for ALPN data length 1908 * 1 byte for selected protocol length 1909 * + length of the selected protocol 1910 */ 1911 if (CHECKLEN(ret, 7 + len, limit)) 1912 return NULL; 1913 s2n(TLSEXT_TYPE_application_layer_protocol_negotiation, ret); 1914 s2n(3 + len, ret); 1915 s2n(1 + len, ret); 1916 *ret++ = len; 1917 memcpy(ret, selected, len); 1918 ret += len; 1919 } 1920 1921 if ((extdatalen = ret - orig - 2) == 0) 1922 return orig; 1923 1924 s2n(extdatalen, orig); 1925 return ret; 1926} 1927 1928# ifndef OPENSSL_NO_EC 1929/*- 1930 * ssl_check_for_safari attempts to fingerprint Safari using OS X 1931 * SecureTransport using the TLS extension block in |d|, of length |n|. 1932 * Safari, since 10.6, sends exactly these extensions, in this order: 1933 * SNI, 1934 * elliptic_curves 1935 * ec_point_formats 1936 * 1937 * We wish to fingerprint Safari because they broke ECDHE-ECDSA support in 10.8, 1938 * but they advertise support. So enabling ECDHE-ECDSA ciphers breaks them. 1939 * Sadly we cannot differentiate 10.6, 10.7 and 10.8.4 (which work), from 1940 * 10.8..10.8.3 (which don't work). 1941 */ 1942static void ssl_check_for_safari(SSL *s, const unsigned char *data, 1943 const unsigned char *limit) 1944{ 1945 unsigned short type, size; 1946 static const unsigned char kSafariExtensionsBlock[] = { 1947 0x00, 0x0a, /* elliptic_curves extension */ 1948 0x00, 0x08, /* 8 bytes */ 1949 0x00, 0x06, /* 6 bytes of curve ids */ 1950 0x00, 0x17, /* P-256 */ 1951 0x00, 0x18, /* P-384 */ 1952 0x00, 0x19, /* P-521 */ 1953 1954 0x00, 0x0b, /* ec_point_formats */ 1955 0x00, 0x02, /* 2 bytes */ 1956 0x01, /* 1 point format */ 1957 0x00, /* uncompressed */ 1958 }; 1959 1960 /* The following is only present in TLS 1.2 */ 1961 static const unsigned char kSafariTLS12ExtensionsBlock[] = { 1962 0x00, 0x0d, /* signature_algorithms */ 1963 0x00, 0x0c, /* 12 bytes */ 1964 0x00, 0x0a, /* 10 bytes */ 1965 0x05, 0x01, /* SHA-384/RSA */ 1966 0x04, 0x01, /* SHA-256/RSA */ 1967 0x02, 0x01, /* SHA-1/RSA */ 1968 0x04, 0x03, /* SHA-256/ECDSA */ 1969 0x02, 0x03, /* SHA-1/ECDSA */ 1970 }; 1971 1972 if (limit - data <= 2) 1973 return; 1974 data += 2; 1975 1976 if (limit - data < 4) 1977 return; 1978 n2s(data, type); 1979 n2s(data, size); 1980 1981 if (type != TLSEXT_TYPE_server_name) 1982 return; 1983 1984 if (limit - data < size) 1985 return; 1986 data += size; 1987 1988 if (TLS1_get_client_version(s) >= TLS1_2_VERSION) { 1989 const size_t len1 = sizeof(kSafariExtensionsBlock); 1990 const size_t len2 = sizeof(kSafariTLS12ExtensionsBlock); 1991 1992 if (limit - data != (int)(len1 + len2)) 1993 return; 1994 if (memcmp(data, kSafariExtensionsBlock, len1) != 0) 1995 return; 1996 if (memcmp(data + len1, kSafariTLS12ExtensionsBlock, len2) != 0) 1997 return; 1998 } else { 1999 const size_t len = sizeof(kSafariExtensionsBlock); 2000 2001 if (limit - data != (int)(len)) 2002 return; 2003 if (memcmp(data, kSafariExtensionsBlock, len) != 0) 2004 return; 2005 } 2006 2007 s->s3->is_probably_safari = 1; 2008} 2009# endif /* !OPENSSL_NO_EC */ 2010 2011/* 2012 * tls1_alpn_handle_client_hello is called to save the ALPN extension in a 2013 * ClientHello. data: the contents of the extension, not including the type 2014 * and length. data_len: the number of bytes in |data| al: a pointer to the 2015 * alert value to send in the event of a non-zero return. returns: 0 on 2016 * success. 2017 */ 2018static int tls1_alpn_handle_client_hello(SSL *s, const unsigned char *data, 2019 unsigned data_len, int *al) 2020{ 2021 unsigned i; 2022 unsigned proto_len; 2023 2024 if (data_len < 2) 2025 goto parse_error; 2026 2027 /* 2028 * data should contain a uint16 length followed by a series of 8-bit, 2029 * length-prefixed strings. 2030 */ 2031 i = ((unsigned)data[0]) << 8 | ((unsigned)data[1]); 2032 data_len -= 2; 2033 data += 2; 2034 if (data_len != i) 2035 goto parse_error; 2036 2037 if (data_len < 2) 2038 goto parse_error; 2039 2040 for (i = 0; i < data_len;) { 2041 proto_len = data[i]; 2042 i++; 2043 2044 if (proto_len == 0) 2045 goto parse_error; 2046 2047 if (i + proto_len < i || i + proto_len > data_len) 2048 goto parse_error; 2049 2050 i += proto_len; 2051 } 2052 2053 if (s->cert->alpn_proposed != NULL) 2054 OPENSSL_free(s->cert->alpn_proposed); 2055 s->cert->alpn_proposed = OPENSSL_malloc(data_len); 2056 if (s->cert->alpn_proposed == NULL) { 2057 *al = SSL_AD_INTERNAL_ERROR; 2058 return -1; 2059 } 2060 memcpy(s->cert->alpn_proposed, data, data_len); 2061 s->cert->alpn_proposed_len = data_len; 2062 return 0; 2063 2064 parse_error: 2065 *al = SSL_AD_DECODE_ERROR; 2066 return -1; 2067} 2068 2069/* 2070 * Process the ALPN extension in a ClientHello. 2071 * al: a pointer to the alert value to send in the event of a failure. 2072 * returns 1 on success, 0 on failure: al set only on failure 2073 */ 2074static int tls1_alpn_handle_client_hello_late(SSL *s, int *al) 2075{ 2076 const unsigned char *selected = NULL; 2077 unsigned char selected_len = 0; 2078 2079 if (s->ctx->alpn_select_cb != NULL && s->cert->alpn_proposed != NULL) { 2080 int r = s->ctx->alpn_select_cb(s, &selected, &selected_len, 2081 s->cert->alpn_proposed, 2082 s->cert->alpn_proposed_len, 2083 s->ctx->alpn_select_cb_arg); 2084 2085 if (r == SSL_TLSEXT_ERR_OK) { 2086 OPENSSL_free(s->s3->alpn_selected); 2087 s->s3->alpn_selected = OPENSSL_malloc(selected_len); 2088 if (s->s3->alpn_selected == NULL) { 2089 *al = SSL_AD_INTERNAL_ERROR; 2090 return 0; 2091 } 2092 memcpy(s->s3->alpn_selected, selected, selected_len); 2093 s->s3->alpn_selected_len = selected_len; 2094# ifndef OPENSSL_NO_NEXTPROTONEG 2095 /* ALPN takes precedence over NPN. */ 2096 s->s3->next_proto_neg_seen = 0; 2097# endif 2098 } 2099 } 2100 2101 return 1; 2102} 2103 2104static int ssl_scan_clienthello_tlsext(SSL *s, unsigned char **p, 2105 unsigned char *limit, int *al) 2106{ 2107 unsigned short type; 2108 unsigned short size; 2109 unsigned short len; 2110 unsigned char *data = *p; 2111 int renegotiate_seen = 0; 2112 2113 s->servername_done = 0; 2114 s->tlsext_status_type = -1; 2115# ifndef OPENSSL_NO_NEXTPROTONEG 2116 s->s3->next_proto_neg_seen = 0; 2117# endif 2118 2119 if (s->s3->alpn_selected) { 2120 OPENSSL_free(s->s3->alpn_selected); 2121 s->s3->alpn_selected = NULL; 2122 } 2123 s->s3->alpn_selected_len = 0; 2124 if (s->cert->alpn_proposed) { 2125 OPENSSL_free(s->cert->alpn_proposed); 2126 s->cert->alpn_proposed = NULL; 2127 } 2128 s->cert->alpn_proposed_len = 0; 2129# ifndef OPENSSL_NO_HEARTBEATS 2130 s->tlsext_heartbeat &= ~(SSL_TLSEXT_HB_ENABLED | 2131 SSL_TLSEXT_HB_DONT_SEND_REQUESTS); 2132# endif 2133 2134# ifndef OPENSSL_NO_EC 2135 if (s->options & SSL_OP_SAFARI_ECDHE_ECDSA_BUG) 2136 ssl_check_for_safari(s, data, limit); 2137# endif /* !OPENSSL_NO_EC */ 2138 2139 /* Clear any signature algorithms extension received */ 2140 if (s->cert->peer_sigalgs) { 2141 OPENSSL_free(s->cert->peer_sigalgs); 2142 s->cert->peer_sigalgs = NULL; 2143 } 2144# ifndef OPENSSL_NO_SRP 2145 if (s->srp_ctx.login != NULL) { 2146 OPENSSL_free(s->srp_ctx.login); 2147 s->srp_ctx.login = NULL; 2148 } 2149# endif 2150 2151 s->srtp_profile = NULL; 2152 2153 if (data == limit) 2154 goto ri_check; 2155 2156 if (limit - data < 2) 2157 goto err; 2158 2159 n2s(data, len); 2160 2161 if (limit - data != len) 2162 goto err; 2163 2164 while (limit - data >= 4) { 2165 n2s(data, type); 2166 n2s(data, size); 2167 2168 if (limit - data < size) 2169 goto err; 2170# if 0 2171 fprintf(stderr, "Received extension type %d size %d\n", type, size); 2172# endif 2173 if (s->tlsext_debug_cb) 2174 s->tlsext_debug_cb(s, 0, type, data, size, s->tlsext_debug_arg); 2175/*- 2176 * The servername extension is treated as follows: 2177 * 2178 * - Only the hostname type is supported with a maximum length of 255. 2179 * - The servername is rejected if too long or if it contains zeros, 2180 * in which case an fatal alert is generated. 2181 * - The servername field is maintained together with the session cache. 2182 * - When a session is resumed, the servername call back invoked in order 2183 * to allow the application to position itself to the right context. 2184 * - The servername is acknowledged if it is new for a session or when 2185 * it is identical to a previously used for the same session. 2186 * Applications can control the behaviour. They can at any time 2187 * set a 'desirable' servername for a new SSL object. This can be the 2188 * case for example with HTTPS when a Host: header field is received and 2189 * a renegotiation is requested. In this case, a possible servername 2190 * presented in the new client hello is only acknowledged if it matches 2191 * the value of the Host: field. 2192 * - Applications must use SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION 2193 * if they provide for changing an explicit servername context for the 2194 * session, i.e. when the session has been established with a servername 2195 * extension. 2196 * - On session reconnect, the servername extension may be absent. 2197 * 2198 */ 2199 2200 if (type == TLSEXT_TYPE_server_name) { 2201 unsigned char *sdata; 2202 int servname_type; 2203 int dsize; 2204 2205 if (size < 2) 2206 goto err; 2207 n2s(data, dsize); 2208 size -= 2; 2209 if (dsize > size) 2210 goto err; 2211 2212 sdata = data; 2213 while (dsize > 3) { 2214 servname_type = *(sdata++); 2215 n2s(sdata, len); 2216 dsize -= 3; 2217 2218 if (len > dsize) 2219 goto err; 2220 2221 if (s->servername_done == 0) 2222 switch (servname_type) { 2223 case TLSEXT_NAMETYPE_host_name: 2224 if (!s->hit) { 2225 if (s->session->tlsext_hostname) 2226 goto err; 2227 2228 if (len > TLSEXT_MAXLEN_host_name) { 2229 *al = TLS1_AD_UNRECOGNIZED_NAME; 2230 return 0; 2231 } 2232 if ((s->session->tlsext_hostname = 2233 OPENSSL_malloc(len + 1)) == NULL) { 2234 *al = TLS1_AD_INTERNAL_ERROR; 2235 return 0; 2236 } 2237 memcpy(s->session->tlsext_hostname, sdata, len); 2238 s->session->tlsext_hostname[len] = '\0'; 2239 if (strlen(s->session->tlsext_hostname) != len) { 2240 OPENSSL_free(s->session->tlsext_hostname); 2241 s->session->tlsext_hostname = NULL; 2242 *al = TLS1_AD_UNRECOGNIZED_NAME; 2243 return 0; 2244 } 2245 s->servername_done = 1; 2246 2247 } else 2248 s->servername_done = s->session->tlsext_hostname 2249 && strlen(s->session->tlsext_hostname) == len 2250 && strncmp(s->session->tlsext_hostname, 2251 (char *)sdata, len) == 0; 2252 2253 break; 2254 2255 default: 2256 break; 2257 } 2258 2259 dsize -= len; 2260 } 2261 if (dsize != 0) 2262 goto err; 2263 2264 } 2265# ifndef OPENSSL_NO_SRP 2266 else if (type == TLSEXT_TYPE_srp) { 2267 if (size == 0 || ((len = data[0])) != (size - 1)) 2268 goto err; 2269 if (s->srp_ctx.login != NULL) 2270 goto err; 2271 if ((s->srp_ctx.login = OPENSSL_malloc(len + 1)) == NULL) 2272 return -1; 2273 memcpy(s->srp_ctx.login, &data[1], len); 2274 s->srp_ctx.login[len] = '\0'; 2275 2276 if (strlen(s->srp_ctx.login) != len) 2277 goto err; 2278 } 2279# endif 2280 2281# ifndef OPENSSL_NO_EC 2282 else if (type == TLSEXT_TYPE_ec_point_formats) { 2283 unsigned char *sdata = data; 2284 int ecpointformatlist_length = *(sdata++); 2285 2286 if (ecpointformatlist_length != size - 1 || 2287 ecpointformatlist_length < 1) 2288 goto err; 2289 if (!s->hit) { 2290 if (s->session->tlsext_ecpointformatlist) { 2291 OPENSSL_free(s->session->tlsext_ecpointformatlist); 2292 s->session->tlsext_ecpointformatlist = NULL; 2293 } 2294 s->session->tlsext_ecpointformatlist_length = 0; 2295 if ((s->session->tlsext_ecpointformatlist = 2296 OPENSSL_malloc(ecpointformatlist_length)) == NULL) { 2297 *al = TLS1_AD_INTERNAL_ERROR; 2298 return 0; 2299 } 2300 s->session->tlsext_ecpointformatlist_length = 2301 ecpointformatlist_length; 2302 memcpy(s->session->tlsext_ecpointformatlist, sdata, 2303 ecpointformatlist_length); 2304 } 2305# if 0 2306 fprintf(stderr, 2307 "ssl_parse_clienthello_tlsext s->session->tlsext_ecpointformatlist (length=%i) ", 2308 s->session->tlsext_ecpointformatlist_length); 2309 sdata = s->session->tlsext_ecpointformatlist; 2310 for (i = 0; i < s->session->tlsext_ecpointformatlist_length; i++) 2311 fprintf(stderr, "%i ", *(sdata++)); 2312 fprintf(stderr, "\n"); 2313# endif 2314 } else if (type == TLSEXT_TYPE_elliptic_curves) { 2315 unsigned char *sdata = data; 2316 int ellipticcurvelist_length = (*(sdata++) << 8); 2317 ellipticcurvelist_length += (*(sdata++)); 2318 2319 if (ellipticcurvelist_length != size - 2 || 2320 ellipticcurvelist_length < 1 || 2321 /* Each NamedCurve is 2 bytes. */ 2322 ellipticcurvelist_length & 1) 2323 goto err; 2324 2325 if (!s->hit) { 2326 if (s->session->tlsext_ellipticcurvelist) 2327 goto err; 2328 2329 s->session->tlsext_ellipticcurvelist_length = 0; 2330 if ((s->session->tlsext_ellipticcurvelist = 2331 OPENSSL_malloc(ellipticcurvelist_length)) == NULL) { 2332 *al = TLS1_AD_INTERNAL_ERROR; 2333 return 0; 2334 } 2335 s->session->tlsext_ellipticcurvelist_length = 2336 ellipticcurvelist_length; 2337 memcpy(s->session->tlsext_ellipticcurvelist, sdata, 2338 ellipticcurvelist_length); 2339 } 2340# if 0 2341 fprintf(stderr, 2342 "ssl_parse_clienthello_tlsext s->session->tlsext_ellipticcurvelist (length=%i) ", 2343 s->session->tlsext_ellipticcurvelist_length); 2344 sdata = s->session->tlsext_ellipticcurvelist; 2345 for (i = 0; i < s->session->tlsext_ellipticcurvelist_length; i++) 2346 fprintf(stderr, "%i ", *(sdata++)); 2347 fprintf(stderr, "\n"); 2348# endif 2349 } 2350# endif /* OPENSSL_NO_EC */ 2351# ifdef TLSEXT_TYPE_opaque_prf_input 2352 else if (type == TLSEXT_TYPE_opaque_prf_input) { 2353 unsigned char *sdata = data; 2354 2355 if (size < 2) { 2356 *al = SSL_AD_DECODE_ERROR; 2357 return 0; 2358 } 2359 n2s(sdata, s->s3->client_opaque_prf_input_len); 2360 if (s->s3->client_opaque_prf_input_len != size - 2) { 2361 *al = SSL_AD_DECODE_ERROR; 2362 return 0; 2363 } 2364 2365 if (s->s3->client_opaque_prf_input != NULL) { 2366 /* shouldn't really happen */ 2367 OPENSSL_free(s->s3->client_opaque_prf_input); 2368 } 2369 2370 /* dummy byte just to get non-NULL */ 2371 if (s->s3->client_opaque_prf_input_len == 0) 2372 s->s3->client_opaque_prf_input = OPENSSL_malloc(1); 2373 else 2374 s->s3->client_opaque_prf_input = 2375 BUF_memdup(sdata, s->s3->client_opaque_prf_input_len); 2376 if (s->s3->client_opaque_prf_input == NULL) { 2377 *al = TLS1_AD_INTERNAL_ERROR; 2378 return 0; 2379 } 2380 } 2381# endif 2382 else if (type == TLSEXT_TYPE_session_ticket) { 2383 if (s->tls_session_ticket_ext_cb && 2384 !s->tls_session_ticket_ext_cb(s, data, size, 2385 s->tls_session_ticket_ext_cb_arg)) 2386 { 2387 *al = TLS1_AD_INTERNAL_ERROR; 2388 return 0; 2389 } 2390 } else if (type == TLSEXT_TYPE_renegotiate) { 2391 if (!ssl_parse_clienthello_renegotiate_ext(s, data, size, al)) 2392 return 0; 2393 renegotiate_seen = 1; 2394 } else if (type == TLSEXT_TYPE_signature_algorithms) { 2395 int dsize; 2396 if (s->cert->peer_sigalgs || size < 2) 2397 goto err; 2398 n2s(data, dsize); 2399 size -= 2; 2400 if (dsize != size || dsize & 1 || !dsize) 2401 goto err; 2402 if (!tls1_save_sigalgs(s, data, dsize)) 2403 goto err; 2404 } else if (type == TLSEXT_TYPE_status_request) { 2405 2406 if (size < 5) 2407 goto err; 2408 2409 s->tlsext_status_type = *data++; 2410 size--; 2411 if (s->tlsext_status_type == TLSEXT_STATUSTYPE_ocsp) { 2412 const unsigned char *sdata; 2413 int dsize; 2414 /* Read in responder_id_list */ 2415 n2s(data, dsize); 2416 size -= 2; 2417 if (dsize > size) 2418 goto err; 2419 2420 /* 2421 * We remove any OCSP_RESPIDs from a previous handshake 2422 * to prevent unbounded memory growth - CVE-2016-6304 2423 */ 2424 sk_OCSP_RESPID_pop_free(s->tlsext_ocsp_ids, 2425 OCSP_RESPID_free); 2426 if (dsize > 0) { 2427 s->tlsext_ocsp_ids = sk_OCSP_RESPID_new_null(); 2428 if (s->tlsext_ocsp_ids == NULL) { 2429 *al = SSL_AD_INTERNAL_ERROR; 2430 return 0; 2431 } 2432 } else { 2433 s->tlsext_ocsp_ids = NULL; 2434 } 2435 2436 while (dsize > 0) { 2437 OCSP_RESPID *id; 2438 int idsize; 2439 if (dsize < 4) 2440 goto err; 2441 n2s(data, idsize); 2442 dsize -= 2 + idsize; 2443 size -= 2 + idsize; 2444 if (dsize < 0) 2445 goto err; 2446 sdata = data; 2447 data += idsize; 2448 id = d2i_OCSP_RESPID(NULL, &sdata, idsize); 2449 if (!id) 2450 goto err; 2451 if (data != sdata) { 2452 OCSP_RESPID_free(id); 2453 goto err; 2454 } 2455 if (!sk_OCSP_RESPID_push(s->tlsext_ocsp_ids, id)) { 2456 OCSP_RESPID_free(id); 2457 *al = SSL_AD_INTERNAL_ERROR; 2458 return 0; 2459 } 2460 } 2461 2462 /* Read in request_extensions */ 2463 if (size < 2) 2464 goto err; 2465 n2s(data, dsize); 2466 size -= 2; 2467 if (dsize != size) 2468 goto err; 2469 sdata = data; 2470 if (dsize > 0) { 2471 if (s->tlsext_ocsp_exts) { 2472 sk_X509_EXTENSION_pop_free(s->tlsext_ocsp_exts, 2473 X509_EXTENSION_free); 2474 } 2475 2476 s->tlsext_ocsp_exts = 2477 d2i_X509_EXTENSIONS(NULL, &sdata, dsize); 2478 if (!s->tlsext_ocsp_exts || (data + dsize != sdata)) 2479 goto err; 2480 } 2481 } 2482 /* 2483 * We don't know what to do with any other type * so ignore it. 2484 */ 2485 else 2486 s->tlsext_status_type = -1; 2487 } 2488# ifndef OPENSSL_NO_HEARTBEATS 2489 else if (type == TLSEXT_TYPE_heartbeat) { 2490 switch (data[0]) { 2491 case 0x01: /* Client allows us to send HB requests */ 2492 s->tlsext_heartbeat |= SSL_TLSEXT_HB_ENABLED; 2493 break; 2494 case 0x02: /* Client doesn't accept HB requests */ 2495 s->tlsext_heartbeat |= SSL_TLSEXT_HB_ENABLED; 2496 s->tlsext_heartbeat |= SSL_TLSEXT_HB_DONT_SEND_REQUESTS; 2497 break; 2498 default: 2499 *al = SSL_AD_ILLEGAL_PARAMETER; 2500 return 0; 2501 } 2502 } 2503# endif 2504# ifndef OPENSSL_NO_NEXTPROTONEG 2505 else if (type == TLSEXT_TYPE_next_proto_neg && 2506 s->s3->tmp.finish_md_len == 0) { 2507 /*- 2508 * We shouldn't accept this extension on a 2509 * renegotiation. 2510 * 2511 * s->new_session will be set on renegotiation, but we 2512 * probably shouldn't rely that it couldn't be set on 2513 * the initial renegotation too in certain cases (when 2514 * there's some other reason to disallow resuming an 2515 * earlier session -- the current code won't be doing 2516 * anything like that, but this might change). 2517 * 2518 * A valid sign that there's been a previous handshake 2519 * in this connection is if s->s3->tmp.finish_md_len > 2520 * 0. (We are talking about a check that will happen 2521 * in the Hello protocol round, well before a new 2522 * Finished message could have been computed.) 2523 */ 2524 s->s3->next_proto_neg_seen = 1; 2525 } 2526# endif 2527 2528 else if (type == TLSEXT_TYPE_application_layer_protocol_negotiation && 2529 s->s3->tmp.finish_md_len == 0) { 2530 if (tls1_alpn_handle_client_hello(s, data, size, al) != 0) 2531 return 0; 2532 } 2533 2534 /* session ticket processed earlier */ 2535# ifndef OPENSSL_NO_SRTP 2536 else if (SSL_IS_DTLS(s) && SSL_get_srtp_profiles(s) 2537 && type == TLSEXT_TYPE_use_srtp) { 2538 if (ssl_parse_clienthello_use_srtp_ext(s, data, size, al)) 2539 return 0; 2540 } 2541# endif 2542 2543 data += size; 2544 } 2545 2546 /* Spurious data on the end */ 2547 if (data != limit) 2548 goto err; 2549 2550 *p = data; 2551 2552 ri_check: 2553 2554 /* Need RI if renegotiating */ 2555 2556 if (!renegotiate_seen && s->renegotiate && 2557 !(s->options & SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION)) { 2558 *al = SSL_AD_HANDSHAKE_FAILURE; 2559 SSLerr(SSL_F_SSL_SCAN_CLIENTHELLO_TLSEXT, 2560 SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED); 2561 return 0; 2562 } 2563 2564 return 1; 2565err: 2566 *al = SSL_AD_DECODE_ERROR; 2567 return 0; 2568} 2569 2570/* 2571 * Parse any custom extensions found. "data" is the start of the extension data 2572 * and "limit" is the end of the record. TODO: add strict syntax checking. 2573 */ 2574 2575static int ssl_scan_clienthello_custom_tlsext(SSL *s, 2576 const unsigned char *data, 2577 const unsigned char *limit, 2578 int *al) 2579{ 2580 unsigned short type, size, len; 2581 /* If resumed session or no custom extensions nothing to do */ 2582 if (s->hit || s->cert->srv_ext.meths_count == 0) 2583 return 1; 2584 2585 if (limit - data <= 2) 2586 return 1; 2587 n2s(data, len); 2588 2589 if (limit - data < len) 2590 return 1; 2591 2592 while (limit - data >= 4) { 2593 n2s(data, type); 2594 n2s(data, size); 2595 2596 if (limit - data < size) 2597 return 1; 2598 if (custom_ext_parse(s, 1 /* server */ , type, data, size, al) <= 0) 2599 return 0; 2600 2601 data += size; 2602 } 2603 2604 return 1; 2605} 2606 2607int ssl_parse_clienthello_tlsext(SSL *s, unsigned char **p, 2608 unsigned char *limit) 2609{ 2610 int al = -1; 2611 unsigned char *ptmp = *p; 2612 /* 2613 * Internally supported extensions are parsed first so SNI can be handled 2614 * before custom extensions. An application processing SNI will typically 2615 * switch the parent context using SSL_set_SSL_CTX and custom extensions 2616 * need to be handled by the new SSL_CTX structure. 2617 */ 2618 if (ssl_scan_clienthello_tlsext(s, p, limit, &al) <= 0) { 2619 ssl3_send_alert(s, SSL3_AL_FATAL, al); 2620 return 0; 2621 } 2622 2623 if (ssl_check_clienthello_tlsext_early(s) <= 0) { 2624 SSLerr(SSL_F_SSL_PARSE_CLIENTHELLO_TLSEXT, SSL_R_CLIENTHELLO_TLSEXT); 2625 return 0; 2626 } 2627 2628 custom_ext_init(&s->cert->srv_ext); 2629 if (ssl_scan_clienthello_custom_tlsext(s, ptmp, limit, &al) <= 0) { 2630 ssl3_send_alert(s, SSL3_AL_FATAL, al); 2631 return 0; 2632 } 2633 2634 return 1; 2635} 2636 2637# ifndef OPENSSL_NO_NEXTPROTONEG 2638/* 2639 * ssl_next_proto_validate validates a Next Protocol Negotiation block. No 2640 * elements of zero length are allowed and the set of elements must exactly 2641 * fill the length of the block. 2642 */ 2643static char ssl_next_proto_validate(unsigned char *d, unsigned len) 2644{ 2645 unsigned int off = 0; 2646 2647 while (off < len) { 2648 if (d[off] == 0) 2649 return 0; 2650 off += d[off]; 2651 off++; 2652 } 2653 2654 return off == len; 2655} 2656# endif 2657 2658static int ssl_scan_serverhello_tlsext(SSL *s, unsigned char **p, 2659 unsigned char *d, int n, int *al) 2660{ 2661 unsigned short length; 2662 unsigned short type; 2663 unsigned short size; 2664 unsigned char *data = *p; 2665 int tlsext_servername = 0; 2666 int renegotiate_seen = 0; 2667 2668# ifndef OPENSSL_NO_NEXTPROTONEG 2669 s->s3->next_proto_neg_seen = 0; 2670# endif 2671 s->tlsext_ticket_expected = 0; 2672 2673 if (s->s3->alpn_selected) { 2674 OPENSSL_free(s->s3->alpn_selected); 2675 s->s3->alpn_selected = NULL; 2676 } 2677# ifndef OPENSSL_NO_HEARTBEATS 2678 s->tlsext_heartbeat &= ~(SSL_TLSEXT_HB_ENABLED | 2679 SSL_TLSEXT_HB_DONT_SEND_REQUESTS); 2680# endif 2681 2682 if ((d + n) - data <= 2) 2683 goto ri_check; 2684 2685 n2s(data, length); 2686 if ((d + n) - data != length) { 2687 *al = SSL_AD_DECODE_ERROR; 2688 return 0; 2689 } 2690 2691 while ((d + n) - data >= 4) { 2692 n2s(data, type); 2693 n2s(data, size); 2694 2695 if ((d + n) - data < size) 2696 goto ri_check; 2697 2698 if (s->tlsext_debug_cb) 2699 s->tlsext_debug_cb(s, 1, type, data, size, s->tlsext_debug_arg); 2700 2701 if (type == TLSEXT_TYPE_server_name) { 2702 if (s->tlsext_hostname == NULL || size > 0) { 2703 *al = TLS1_AD_UNRECOGNIZED_NAME; 2704 return 0; 2705 } 2706 tlsext_servername = 1; 2707 } 2708# ifndef OPENSSL_NO_EC 2709 else if (type == TLSEXT_TYPE_ec_point_formats) { 2710 unsigned char *sdata = data; 2711 int ecpointformatlist_length = *(sdata++); 2712 2713 if (ecpointformatlist_length != size - 1) { 2714 *al = TLS1_AD_DECODE_ERROR; 2715 return 0; 2716 } 2717 if (!s->hit) { 2718 s->session->tlsext_ecpointformatlist_length = 0; 2719 if (s->session->tlsext_ecpointformatlist != NULL) 2720 OPENSSL_free(s->session->tlsext_ecpointformatlist); 2721 if ((s->session->tlsext_ecpointformatlist = 2722 OPENSSL_malloc(ecpointformatlist_length)) == NULL) { 2723 *al = TLS1_AD_INTERNAL_ERROR; 2724 return 0; 2725 } 2726 s->session->tlsext_ecpointformatlist_length = 2727 ecpointformatlist_length; 2728 memcpy(s->session->tlsext_ecpointformatlist, sdata, 2729 ecpointformatlist_length); 2730 } 2731# if 0 2732 fprintf(stderr, 2733 "ssl_parse_serverhello_tlsext s->session->tlsext_ecpointformatlist "); 2734 sdata = s->session->tlsext_ecpointformatlist; 2735 for (i = 0; i < s->session->tlsext_ecpointformatlist_length; i++) 2736 fprintf(stderr, "%i ", *(sdata++)); 2737 fprintf(stderr, "\n"); 2738# endif 2739 } 2740# endif /* OPENSSL_NO_EC */ 2741 2742 else if (type == TLSEXT_TYPE_session_ticket) { 2743 if (s->tls_session_ticket_ext_cb && 2744 !s->tls_session_ticket_ext_cb(s, data, size, 2745 s->tls_session_ticket_ext_cb_arg)) 2746 { 2747 *al = TLS1_AD_INTERNAL_ERROR; 2748 return 0; 2749 } 2750 if ((SSL_get_options(s) & SSL_OP_NO_TICKET) 2751 || (size > 0)) { 2752 *al = TLS1_AD_UNSUPPORTED_EXTENSION; 2753 return 0; 2754 } 2755 s->tlsext_ticket_expected = 1; 2756 } 2757# ifdef TLSEXT_TYPE_opaque_prf_input 2758 else if (type == TLSEXT_TYPE_opaque_prf_input) { 2759 unsigned char *sdata = data; 2760 2761 if (size < 2) { 2762 *al = SSL_AD_DECODE_ERROR; 2763 return 0; 2764 } 2765 n2s(sdata, s->s3->server_opaque_prf_input_len); 2766 if (s->s3->server_opaque_prf_input_len != size - 2) { 2767 *al = SSL_AD_DECODE_ERROR; 2768 return 0; 2769 } 2770 2771 if (s->s3->server_opaque_prf_input != NULL) { 2772 /* shouldn't really happen */ 2773 OPENSSL_free(s->s3->server_opaque_prf_input); 2774 } 2775 if (s->s3->server_opaque_prf_input_len == 0) { 2776 /* dummy byte just to get non-NULL */ 2777 s->s3->server_opaque_prf_input = OPENSSL_malloc(1); 2778 } else { 2779 s->s3->server_opaque_prf_input = 2780 BUF_memdup(sdata, s->s3->server_opaque_prf_input_len); 2781 } 2782 2783 if (s->s3->server_opaque_prf_input == NULL) { 2784 *al = TLS1_AD_INTERNAL_ERROR; 2785 return 0; 2786 } 2787 } 2788# endif 2789 else if (type == TLSEXT_TYPE_status_request) { 2790 /* 2791 * MUST be empty and only sent if we've requested a status 2792 * request message. 2793 */ 2794 if ((s->tlsext_status_type == -1) || (size > 0)) { 2795 *al = TLS1_AD_UNSUPPORTED_EXTENSION; 2796 return 0; 2797 } 2798 /* Set flag to expect CertificateStatus message */ 2799 s->tlsext_status_expected = 1; 2800 } 2801# ifndef OPENSSL_NO_NEXTPROTONEG 2802 else if (type == TLSEXT_TYPE_next_proto_neg && 2803 s->s3->tmp.finish_md_len == 0) { 2804 unsigned char *selected; 2805 unsigned char selected_len; 2806 2807 /* We must have requested it. */ 2808 if (s->ctx->next_proto_select_cb == NULL) { 2809 *al = TLS1_AD_UNSUPPORTED_EXTENSION; 2810 return 0; 2811 } 2812 /* The data must be valid */ 2813 if (!ssl_next_proto_validate(data, size)) { 2814 *al = TLS1_AD_DECODE_ERROR; 2815 return 0; 2816 } 2817 if (s-> 2818 ctx->next_proto_select_cb(s, &selected, &selected_len, data, 2819 size, 2820 s->ctx->next_proto_select_cb_arg) != 2821 SSL_TLSEXT_ERR_OK) { 2822 *al = TLS1_AD_INTERNAL_ERROR; 2823 return 0; 2824 } 2825 /* 2826 * Could be non-NULL if server has sent multiple NPN extensions in 2827 * a single Serverhello 2828 */ 2829 OPENSSL_free(s->next_proto_negotiated); 2830 s->next_proto_negotiated = OPENSSL_malloc(selected_len); 2831 if (!s->next_proto_negotiated) { 2832 *al = TLS1_AD_INTERNAL_ERROR; 2833 return 0; 2834 } 2835 memcpy(s->next_proto_negotiated, selected, selected_len); 2836 s->next_proto_negotiated_len = selected_len; 2837 s->s3->next_proto_neg_seen = 1; 2838 } 2839# endif 2840 2841 else if (type == TLSEXT_TYPE_application_layer_protocol_negotiation) { 2842 unsigned len; 2843 2844 /* We must have requested it. */ 2845 if (!s->cert->alpn_sent) { 2846 *al = TLS1_AD_UNSUPPORTED_EXTENSION; 2847 return 0; 2848 } 2849 if (size < 4) { 2850 *al = TLS1_AD_DECODE_ERROR; 2851 return 0; 2852 } 2853 /*- 2854 * The extension data consists of: 2855 * uint16 list_length 2856 * uint8 proto_length; 2857 * uint8 proto[proto_length]; 2858 */ 2859 len = data[0]; 2860 len <<= 8; 2861 len |= data[1]; 2862 if (len != (unsigned)size - 2) { 2863 *al = TLS1_AD_DECODE_ERROR; 2864 return 0; 2865 } 2866 len = data[2]; 2867 if (len != (unsigned)size - 3) { 2868 *al = TLS1_AD_DECODE_ERROR; 2869 return 0; 2870 } 2871 if (s->s3->alpn_selected) 2872 OPENSSL_free(s->s3->alpn_selected); 2873 s->s3->alpn_selected = OPENSSL_malloc(len); 2874 if (!s->s3->alpn_selected) { 2875 *al = TLS1_AD_INTERNAL_ERROR; 2876 return 0; 2877 } 2878 memcpy(s->s3->alpn_selected, data + 3, len); 2879 s->s3->alpn_selected_len = len; 2880 } 2881 2882 else if (type == TLSEXT_TYPE_renegotiate) { 2883 if (!ssl_parse_serverhello_renegotiate_ext(s, data, size, al)) 2884 return 0; 2885 renegotiate_seen = 1; 2886 } 2887# ifndef OPENSSL_NO_HEARTBEATS 2888 else if (type == TLSEXT_TYPE_heartbeat) { 2889 switch (data[0]) { 2890 case 0x01: /* Server allows us to send HB requests */ 2891 s->tlsext_heartbeat |= SSL_TLSEXT_HB_ENABLED; 2892 break; 2893 case 0x02: /* Server doesn't accept HB requests */ 2894 s->tlsext_heartbeat |= SSL_TLSEXT_HB_ENABLED; 2895 s->tlsext_heartbeat |= SSL_TLSEXT_HB_DONT_SEND_REQUESTS; 2896 break; 2897 default: 2898 *al = SSL_AD_ILLEGAL_PARAMETER; 2899 return 0; 2900 } 2901 } 2902# endif 2903# ifndef OPENSSL_NO_SRTP 2904 else if (SSL_IS_DTLS(s) && type == TLSEXT_TYPE_use_srtp) { 2905 if (ssl_parse_serverhello_use_srtp_ext(s, data, size, al)) 2906 return 0; 2907 } 2908# endif 2909 /* 2910 * If this extension type was not otherwise handled, but matches a 2911 * custom_cli_ext_record, then send it to the c callback 2912 */ 2913 else if (custom_ext_parse(s, 0, type, data, size, al) <= 0) 2914 return 0; 2915 2916 data += size; 2917 } 2918 2919 if (data != d + n) { 2920 *al = SSL_AD_DECODE_ERROR; 2921 return 0; 2922 } 2923 2924 if (!s->hit && tlsext_servername == 1) { 2925 if (s->tlsext_hostname) { 2926 if (s->session->tlsext_hostname == NULL) { 2927 s->session->tlsext_hostname = BUF_strdup(s->tlsext_hostname); 2928 if (!s->session->tlsext_hostname) { 2929 *al = SSL_AD_UNRECOGNIZED_NAME; 2930 return 0; 2931 } 2932 } else { 2933 *al = SSL_AD_DECODE_ERROR; 2934 return 0; 2935 } 2936 } 2937 } 2938 2939 *p = data; 2940 2941 ri_check: 2942 2943 /* 2944 * Determine if we need to see RI. Strictly speaking if we want to avoid 2945 * an attack we should *always* see RI even on initial server hello 2946 * because the client doesn't see any renegotiation during an attack. 2947 * However this would mean we could not connect to any server which 2948 * doesn't support RI so for the immediate future tolerate RI absence on 2949 * initial connect only. 2950 */ 2951 if (!renegotiate_seen && !(s->options & SSL_OP_LEGACY_SERVER_CONNECT) 2952 && !(s->options & SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION)) { 2953 *al = SSL_AD_HANDSHAKE_FAILURE; 2954 SSLerr(SSL_F_SSL_SCAN_SERVERHELLO_TLSEXT, 2955 SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED); 2956 return 0; 2957 } 2958 2959 return 1; 2960} 2961 2962int ssl_prepare_clienthello_tlsext(SSL *s) 2963{ 2964 2965# ifdef TLSEXT_TYPE_opaque_prf_input 2966 { 2967 int r = 1; 2968 2969 if (s->ctx->tlsext_opaque_prf_input_callback != 0) { 2970 r = s->ctx->tlsext_opaque_prf_input_callback(s, NULL, 0, 2971 s-> 2972 ctx->tlsext_opaque_prf_input_callback_arg); 2973 if (!r) 2974 return -1; 2975 } 2976 2977 if (s->tlsext_opaque_prf_input != NULL) { 2978 if (s->s3->client_opaque_prf_input != NULL) { 2979 /* shouldn't really happen */ 2980 OPENSSL_free(s->s3->client_opaque_prf_input); 2981 } 2982 2983 if (s->tlsext_opaque_prf_input_len == 0) { 2984 /* dummy byte just to get non-NULL */ 2985 s->s3->client_opaque_prf_input = OPENSSL_malloc(1); 2986 } else { 2987 s->s3->client_opaque_prf_input = 2988 BUF_memdup(s->tlsext_opaque_prf_input, 2989 s->tlsext_opaque_prf_input_len); 2990 } 2991 if (s->s3->client_opaque_prf_input == NULL) { 2992 SSLerr(SSL_F_SSL_PREPARE_CLIENTHELLO_TLSEXT, 2993 ERR_R_MALLOC_FAILURE); 2994 return -1; 2995 } 2996 s->s3->client_opaque_prf_input_len = 2997 s->tlsext_opaque_prf_input_len; 2998 } 2999 3000 if (r == 2) 3001 /* 3002 * at callback's request, insist on receiving an appropriate 3003 * server opaque PRF input 3004 */ 3005 s->s3->server_opaque_prf_input_len = 3006 s->tlsext_opaque_prf_input_len; 3007 } 3008# endif 3009 3010 s->cert->alpn_sent = 0; 3011 return 1; 3012} 3013 3014int ssl_prepare_serverhello_tlsext(SSL *s) 3015{ 3016 return 1; 3017} 3018 3019static int ssl_check_clienthello_tlsext_early(SSL *s) 3020{ 3021 int ret = SSL_TLSEXT_ERR_NOACK; 3022 int al = SSL_AD_UNRECOGNIZED_NAME; 3023 3024# ifndef OPENSSL_NO_EC 3025 /* 3026 * The handling of the ECPointFormats extension is done elsewhere, namely 3027 * in ssl3_choose_cipher in s3_lib.c. 3028 */ 3029 /* 3030 * The handling of the EllipticCurves extension is done elsewhere, namely 3031 * in ssl3_choose_cipher in s3_lib.c. 3032 */ 3033# endif 3034 3035 if (s->ctx != NULL && s->ctx->tlsext_servername_callback != 0) 3036 ret = 3037 s->ctx->tlsext_servername_callback(s, &al, 3038 s->ctx->tlsext_servername_arg); 3039 else if (s->initial_ctx != NULL 3040 && s->initial_ctx->tlsext_servername_callback != 0) 3041 ret = 3042 s->initial_ctx->tlsext_servername_callback(s, &al, 3043 s-> 3044 initial_ctx->tlsext_servername_arg); 3045 3046# ifdef TLSEXT_TYPE_opaque_prf_input 3047 { 3048 /* 3049 * This sort of belongs into ssl_prepare_serverhello_tlsext(), but we 3050 * might be sending an alert in response to the client hello, so this 3051 * has to happen here in ssl_check_clienthello_tlsext_early(). 3052 */ 3053 3054 int r = 1; 3055 3056 if (s->ctx->tlsext_opaque_prf_input_callback != 0) { 3057 r = s->ctx->tlsext_opaque_prf_input_callback(s, NULL, 0, 3058 s-> 3059 ctx->tlsext_opaque_prf_input_callback_arg); 3060 if (!r) { 3061 ret = SSL_TLSEXT_ERR_ALERT_FATAL; 3062 al = SSL_AD_INTERNAL_ERROR; 3063 goto err; 3064 } 3065 } 3066 3067 if (s->s3->server_opaque_prf_input != NULL) { 3068 /* shouldn't really happen */ 3069 OPENSSL_free(s->s3->server_opaque_prf_input); 3070 } 3071 s->s3->server_opaque_prf_input = NULL; 3072 3073 if (s->tlsext_opaque_prf_input != NULL) { 3074 if (s->s3->client_opaque_prf_input != NULL && 3075 s->s3->client_opaque_prf_input_len == 3076 s->tlsext_opaque_prf_input_len) { 3077 /* 3078 * can only use this extension if we have a server opaque PRF 3079 * input of the same length as the client opaque PRF input! 3080 */ 3081 3082 if (s->tlsext_opaque_prf_input_len == 0) { 3083 /* dummy byte just to get non-NULL */ 3084 s->s3->server_opaque_prf_input = OPENSSL_malloc(1); 3085 } else { 3086 s->s3->server_opaque_prf_input = 3087 BUF_memdup(s->tlsext_opaque_prf_input, 3088 s->tlsext_opaque_prf_input_len); 3089 } 3090 if (s->s3->server_opaque_prf_input == NULL) { 3091 ret = SSL_TLSEXT_ERR_ALERT_FATAL; 3092 al = SSL_AD_INTERNAL_ERROR; 3093 goto err; 3094 } 3095 s->s3->server_opaque_prf_input_len = 3096 s->tlsext_opaque_prf_input_len; 3097 } 3098 } 3099 3100 if (r == 2 && s->s3->server_opaque_prf_input == NULL) { 3101 /* 3102 * The callback wants to enforce use of the extension, but we 3103 * can't do that with the client opaque PRF input; abort the 3104 * handshake. 3105 */ 3106 ret = SSL_TLSEXT_ERR_ALERT_FATAL; 3107 al = SSL_AD_HANDSHAKE_FAILURE; 3108 } 3109 } 3110 3111 err: 3112# endif 3113 switch (ret) { 3114 case SSL_TLSEXT_ERR_ALERT_FATAL: 3115 ssl3_send_alert(s, SSL3_AL_FATAL, al); 3116 return -1; 3117 3118 case SSL_TLSEXT_ERR_ALERT_WARNING: 3119 ssl3_send_alert(s, SSL3_AL_WARNING, al); 3120 return 1; 3121 3122 case SSL_TLSEXT_ERR_NOACK: 3123 s->servername_done = 0; 3124 default: 3125 return 1; 3126 } 3127} 3128 3129int tls1_set_server_sigalgs(SSL *s) 3130{ 3131 int al; 3132 size_t i; 3133 /* Clear any shared sigtnature algorithms */ 3134 if (s->cert->shared_sigalgs) { 3135 OPENSSL_free(s->cert->shared_sigalgs); 3136 s->cert->shared_sigalgs = NULL; 3137 s->cert->shared_sigalgslen = 0; 3138 } 3139 /* Clear certificate digests and validity flags */ 3140 for (i = 0; i < SSL_PKEY_NUM; i++) { 3141 s->cert->pkeys[i].digest = NULL; 3142 s->cert->pkeys[i].valid_flags = 0; 3143 } 3144 3145 /* If sigalgs received process it. */ 3146 if (s->cert->peer_sigalgs) { 3147 if (!tls1_process_sigalgs(s)) { 3148 SSLerr(SSL_F_TLS1_SET_SERVER_SIGALGS, ERR_R_MALLOC_FAILURE); 3149 al = SSL_AD_INTERNAL_ERROR; 3150 goto err; 3151 } 3152 /* Fatal error is no shared signature algorithms */ 3153 if (!s->cert->shared_sigalgs) { 3154 SSLerr(SSL_F_TLS1_SET_SERVER_SIGALGS, 3155 SSL_R_NO_SHARED_SIGATURE_ALGORITHMS); 3156 al = SSL_AD_ILLEGAL_PARAMETER; 3157 goto err; 3158 } 3159 } else 3160 ssl_cert_set_default_md(s->cert); 3161 return 1; 3162 err: 3163 ssl3_send_alert(s, SSL3_AL_FATAL, al); 3164 return 0; 3165} 3166 3167/* 3168 * Upon success, returns 1. 3169 * Upon failure, returns 0 and sets |al| to the appropriate fatal alert. 3170 */ 3171int ssl_check_clienthello_tlsext_late(SSL *s, int *al) 3172{ 3173 3174 /* 3175 * If status request then ask callback what to do. Note: this must be 3176 * called after servername callbacks in case the certificate has changed, 3177 * and must be called after the cipher has been chosen because this may 3178 * influence which certificate is sent 3179 */ 3180 if ((s->tlsext_status_type != -1) && s->ctx && s->ctx->tlsext_status_cb) { 3181 int ret; 3182 CERT_PKEY *certpkey; 3183 certpkey = ssl_get_server_send_pkey(s); 3184 /* If no certificate can't return certificate status */ 3185 if (certpkey != NULL) { 3186 /* 3187 * Set current certificate to one we will use so SSL_get_certificate 3188 * et al can pick it up. 3189 */ 3190 s->cert->key = certpkey; 3191 ret = s->ctx->tlsext_status_cb(s, s->ctx->tlsext_status_arg); 3192 switch (ret) { 3193 /* We don't want to send a status request response */ 3194 case SSL_TLSEXT_ERR_NOACK: 3195 s->tlsext_status_expected = 0; 3196 break; 3197 /* status request response should be sent */ 3198 case SSL_TLSEXT_ERR_OK: 3199 if (s->tlsext_ocsp_resp) 3200 s->tlsext_status_expected = 1; 3201 break; 3202 /* something bad happened */ 3203 case SSL_TLSEXT_ERR_ALERT_FATAL: 3204 default: 3205 *al = SSL_AD_INTERNAL_ERROR; 3206 return 0; 3207 } 3208 } 3209 } 3210 3211 if (!tls1_alpn_handle_client_hello_late(s, al)) { 3212 return 0; 3213 } 3214 3215 return 1; 3216} 3217 3218int ssl_check_serverhello_tlsext(SSL *s) 3219{ 3220 int ret = SSL_TLSEXT_ERR_NOACK; 3221 int al = SSL_AD_UNRECOGNIZED_NAME; 3222 3223# ifndef OPENSSL_NO_EC 3224 /* 3225 * If we are client and using an elliptic curve cryptography cipher 3226 * suite, then if server returns an EC point formats lists extension it 3227 * must contain uncompressed. 3228 */ 3229 unsigned long alg_k = s->s3->tmp.new_cipher->algorithm_mkey; 3230 unsigned long alg_a = s->s3->tmp.new_cipher->algorithm_auth; 3231 if ((s->tlsext_ecpointformatlist != NULL) 3232 && (s->tlsext_ecpointformatlist_length > 0) 3233 && (s->session->tlsext_ecpointformatlist != NULL) 3234 && (s->session->tlsext_ecpointformatlist_length > 0) 3235 && ((alg_k & (SSL_kEECDH | SSL_kECDHr | SSL_kECDHe)) 3236 || (alg_a & SSL_aECDSA))) { 3237 /* we are using an ECC cipher */ 3238 size_t i; 3239 unsigned char *list; 3240 int found_uncompressed = 0; 3241 list = s->session->tlsext_ecpointformatlist; 3242 for (i = 0; i < s->session->tlsext_ecpointformatlist_length; i++) { 3243 if (*(list++) == TLSEXT_ECPOINTFORMAT_uncompressed) { 3244 found_uncompressed = 1; 3245 break; 3246 } 3247 } 3248 if (!found_uncompressed) { 3249 SSLerr(SSL_F_SSL_CHECK_SERVERHELLO_TLSEXT, 3250 SSL_R_TLS_INVALID_ECPOINTFORMAT_LIST); 3251 return -1; 3252 } 3253 } 3254 ret = SSL_TLSEXT_ERR_OK; 3255# endif /* OPENSSL_NO_EC */ 3256 3257 if (s->ctx != NULL && s->ctx->tlsext_servername_callback != 0) 3258 ret = 3259 s->ctx->tlsext_servername_callback(s, &al, 3260 s->ctx->tlsext_servername_arg); 3261 else if (s->initial_ctx != NULL 3262 && s->initial_ctx->tlsext_servername_callback != 0) 3263 ret = 3264 s->initial_ctx->tlsext_servername_callback(s, &al, 3265 s-> 3266 initial_ctx->tlsext_servername_arg); 3267 3268# ifdef TLSEXT_TYPE_opaque_prf_input 3269 if (s->s3->server_opaque_prf_input_len > 0) { 3270 /* 3271 * This case may indicate that we, as a client, want to insist on 3272 * using opaque PRF inputs. So first verify that we really have a 3273 * value from the server too. 3274 */ 3275 3276 if (s->s3->server_opaque_prf_input == NULL) { 3277 ret = SSL_TLSEXT_ERR_ALERT_FATAL; 3278 al = SSL_AD_HANDSHAKE_FAILURE; 3279 } 3280 3281 /* 3282 * Anytime the server *has* sent an opaque PRF input, we need to 3283 * check that we have a client opaque PRF input of the same size. 3284 */ 3285 if (s->s3->client_opaque_prf_input == NULL || 3286 s->s3->client_opaque_prf_input_len != 3287 s->s3->server_opaque_prf_input_len) { 3288 ret = SSL_TLSEXT_ERR_ALERT_FATAL; 3289 al = SSL_AD_ILLEGAL_PARAMETER; 3290 } 3291 } 3292# endif 3293 3294 OPENSSL_free(s->tlsext_ocsp_resp); 3295 s->tlsext_ocsp_resp = NULL; 3296 s->tlsext_ocsp_resplen = -1; 3297 /* 3298 * If we've requested certificate status and we wont get one tell the 3299 * callback 3300 */ 3301 if ((s->tlsext_status_type != -1) && !(s->tlsext_status_expected) 3302 && !(s->hit) && s->ctx && s->ctx->tlsext_status_cb) { 3303 int r; 3304 /* 3305 * Call callback with resp == NULL and resplen == -1 so callback 3306 * knows there is no response 3307 */ 3308 r = s->ctx->tlsext_status_cb(s, s->ctx->tlsext_status_arg); 3309 if (r == 0) { 3310 al = SSL_AD_BAD_CERTIFICATE_STATUS_RESPONSE; 3311 ret = SSL_TLSEXT_ERR_ALERT_FATAL; 3312 } 3313 if (r < 0) { 3314 al = SSL_AD_INTERNAL_ERROR; 3315 ret = SSL_TLSEXT_ERR_ALERT_FATAL; 3316 } 3317 } 3318 3319 switch (ret) { 3320 case SSL_TLSEXT_ERR_ALERT_FATAL: 3321 ssl3_send_alert(s, SSL3_AL_FATAL, al); 3322 return -1; 3323 3324 case SSL_TLSEXT_ERR_ALERT_WARNING: 3325 ssl3_send_alert(s, SSL3_AL_WARNING, al); 3326 return 1; 3327 3328 case SSL_TLSEXT_ERR_NOACK: 3329 s->servername_done = 0; 3330 default: 3331 return 1; 3332 } 3333} 3334 3335int ssl_parse_serverhello_tlsext(SSL *s, unsigned char **p, unsigned char *d, 3336 int n) 3337{ 3338 int al = -1; 3339 if (s->version < SSL3_VERSION) 3340 return 1; 3341 if (ssl_scan_serverhello_tlsext(s, p, d, n, &al) <= 0) { 3342 ssl3_send_alert(s, SSL3_AL_FATAL, al); 3343 return 0; 3344 } 3345 3346 if (ssl_check_serverhello_tlsext(s) <= 0) { 3347 SSLerr(SSL_F_SSL_PARSE_SERVERHELLO_TLSEXT, SSL_R_SERVERHELLO_TLSEXT); 3348 return 0; 3349 } 3350 return 1; 3351} 3352 3353/*- 3354 * Since the server cache lookup is done early on in the processing of the 3355 * ClientHello, and other operations depend on the result, we need to handle 3356 * any TLS session ticket extension at the same time. 3357 * 3358 * session_id: points at the session ID in the ClientHello. This code will 3359 * read past the end of this in order to parse out the session ticket 3360 * extension, if any. 3361 * len: the length of the session ID. 3362 * limit: a pointer to the first byte after the ClientHello. 3363 * ret: (output) on return, if a ticket was decrypted, then this is set to 3364 * point to the resulting session. 3365 * 3366 * If s->tls_session_secret_cb is set then we are expecting a pre-shared key 3367 * ciphersuite, in which case we have no use for session tickets and one will 3368 * never be decrypted, nor will s->tlsext_ticket_expected be set to 1. 3369 * 3370 * Returns: 3371 * -1: fatal error, either from parsing or decrypting the ticket. 3372 * 0: no ticket was found (or was ignored, based on settings). 3373 * 1: a zero length extension was found, indicating that the client supports 3374 * session tickets but doesn't currently have one to offer. 3375 * 2: either s->tls_session_secret_cb was set, or a ticket was offered but 3376 * couldn't be decrypted because of a non-fatal error. 3377 * 3: a ticket was successfully decrypted and *ret was set. 3378 * 3379 * Side effects: 3380 * Sets s->tlsext_ticket_expected to 1 if the server will have to issue 3381 * a new session ticket to the client because the client indicated support 3382 * (and s->tls_session_secret_cb is NULL) but the client either doesn't have 3383 * a session ticket or we couldn't use the one it gave us, or if 3384 * s->ctx->tlsext_ticket_key_cb asked to renew the client's ticket. 3385 * Otherwise, s->tlsext_ticket_expected is set to 0. 3386 */ 3387int tls1_process_ticket(SSL *s, unsigned char *session_id, int len, 3388 const unsigned char *limit, SSL_SESSION **ret) 3389{ 3390 /* Point after session ID in client hello */ 3391 const unsigned char *p = session_id + len; 3392 unsigned short i; 3393 3394 *ret = NULL; 3395 s->tlsext_ticket_expected = 0; 3396 3397 /* 3398 * If tickets disabled behave as if no ticket present to permit stateful 3399 * resumption. 3400 */ 3401 if (SSL_get_options(s) & SSL_OP_NO_TICKET) 3402 return 0; 3403 if ((s->version <= SSL3_VERSION) || !limit) 3404 return 0; 3405 if (p >= limit) 3406 return -1; 3407 /* Skip past DTLS cookie */ 3408 if (SSL_IS_DTLS(s)) { 3409 i = *(p++); 3410 3411 if (limit - p <= i) 3412 return -1; 3413 3414 p += i; 3415 } 3416 /* Skip past cipher list */ 3417 n2s(p, i); 3418 if (limit - p <= i) 3419 return -1; 3420 p += i; 3421 3422 /* Skip past compression algorithm list */ 3423 i = *(p++); 3424 if (limit - p < i) 3425 return -1; 3426 p += i; 3427 3428 /* Now at start of extensions */ 3429 if (limit - p <= 2) 3430 return 0; 3431 n2s(p, i); 3432 while (limit - p >= 4) { 3433 unsigned short type, size; 3434 n2s(p, type); 3435 n2s(p, size); 3436 if (limit - p < size) 3437 return 0; 3438 if (type == TLSEXT_TYPE_session_ticket) { 3439 int r; 3440 if (size == 0) { 3441 /* 3442 * The client will accept a ticket but doesn't currently have 3443 * one. 3444 */ 3445 s->tlsext_ticket_expected = 1; 3446 return 1; 3447 } 3448 if (s->tls_session_secret_cb) { 3449 /* 3450 * Indicate that the ticket couldn't be decrypted rather than 3451 * generating the session from ticket now, trigger 3452 * abbreviated handshake based on external mechanism to 3453 * calculate the master secret later. 3454 */ 3455 return 2; 3456 } 3457 r = tls_decrypt_ticket(s, p, size, session_id, len, ret); 3458 switch (r) { 3459 case 2: /* ticket couldn't be decrypted */ 3460 s->tlsext_ticket_expected = 1; 3461 return 2; 3462 case 3: /* ticket was decrypted */ 3463 return r; 3464 case 4: /* ticket decrypted but need to renew */ 3465 s->tlsext_ticket_expected = 1; 3466 return 3; 3467 default: /* fatal error */ 3468 return -1; 3469 } 3470 } 3471 p += size; 3472 } 3473 return 0; 3474} 3475 3476/*- 3477 * tls_decrypt_ticket attempts to decrypt a session ticket. 3478 * 3479 * etick: points to the body of the session ticket extension. 3480 * eticklen: the length of the session tickets extenion. 3481 * sess_id: points at the session ID. 3482 * sesslen: the length of the session ID. 3483 * psess: (output) on return, if a ticket was decrypted, then this is set to 3484 * point to the resulting session. 3485 * 3486 * Returns: 3487 * -1: fatal error, either from parsing or decrypting the ticket. 3488 * 2: the ticket couldn't be decrypted. 3489 * 3: a ticket was successfully decrypted and *psess was set. 3490 * 4: same as 3, but the ticket needs to be renewed. 3491 */ 3492static int tls_decrypt_ticket(SSL *s, const unsigned char *etick, 3493 int eticklen, const unsigned char *sess_id, 3494 int sesslen, SSL_SESSION **psess) 3495{ 3496 SSL_SESSION *sess; 3497 unsigned char *sdec; 3498 const unsigned char *p; 3499 int slen, mlen, renew_ticket = 0; 3500 unsigned char tick_hmac[EVP_MAX_MD_SIZE]; 3501 HMAC_CTX hctx; 3502 EVP_CIPHER_CTX ctx; 3503 SSL_CTX *tctx = s->initial_ctx; 3504 3505 /* Initialize session ticket encryption and HMAC contexts */ 3506 HMAC_CTX_init(&hctx); 3507 EVP_CIPHER_CTX_init(&ctx); 3508 if (tctx->tlsext_ticket_key_cb) { 3509 unsigned char *nctick = (unsigned char *)etick; 3510 int rv = tctx->tlsext_ticket_key_cb(s, nctick, nctick + 16, 3511 &ctx, &hctx, 0); 3512 if (rv < 0) 3513 return -1; 3514 if (rv == 0) 3515 return 2; 3516 if (rv == 2) 3517 renew_ticket = 1; 3518 } else { 3519 /* Check key name matches */ 3520 if (memcmp(etick, tctx->tlsext_tick_key_name, 16)) 3521 return 2; 3522 if (HMAC_Init_ex(&hctx, tctx->tlsext_tick_hmac_key, 16, 3523 tlsext_tick_md(), NULL) <= 0 3524 || EVP_DecryptInit_ex(&ctx, EVP_aes_128_cbc(), NULL, 3525 tctx->tlsext_tick_aes_key, 3526 etick + 16) <= 0) { 3527 goto err; 3528 } 3529 } 3530 /* 3531 * Attempt to process session ticket, first conduct sanity and integrity 3532 * checks on ticket. 3533 */ 3534 mlen = HMAC_size(&hctx); 3535 if (mlen < 0) { 3536 goto err; 3537 } 3538 /* Sanity check ticket length: must exceed keyname + IV + HMAC */ 3539 if (eticklen <= 16 + EVP_CIPHER_CTX_iv_length(&ctx) + mlen) { 3540 HMAC_CTX_cleanup(&hctx); 3541 EVP_CIPHER_CTX_cleanup(&ctx); 3542 return 2; 3543 } 3544 3545 eticklen -= mlen; 3546 /* Check HMAC of encrypted ticket */ 3547 if (HMAC_Update(&hctx, etick, eticklen) <= 0 3548 || HMAC_Final(&hctx, tick_hmac, NULL) <= 0) { 3549 goto err; 3550 } 3551 HMAC_CTX_cleanup(&hctx); 3552 if (CRYPTO_memcmp(tick_hmac, etick + eticklen, mlen)) { 3553 EVP_CIPHER_CTX_cleanup(&ctx); 3554 return 2; 3555 } 3556 /* Attempt to decrypt session data */ 3557 /* Move p after IV to start of encrypted ticket, update length */ 3558 p = etick + 16 + EVP_CIPHER_CTX_iv_length(&ctx); 3559 eticklen -= 16 + EVP_CIPHER_CTX_iv_length(&ctx); 3560 sdec = OPENSSL_malloc(eticklen); 3561 if (sdec == NULL 3562 || EVP_DecryptUpdate(&ctx, sdec, &slen, p, eticklen) <= 0) { 3563 EVP_CIPHER_CTX_cleanup(&ctx); 3564 OPENSSL_free(sdec); 3565 return -1; 3566 } 3567 if (EVP_DecryptFinal(&ctx, sdec + slen, &mlen) <= 0) { 3568 EVP_CIPHER_CTX_cleanup(&ctx); 3569 OPENSSL_free(sdec); 3570 return 2; 3571 } 3572 slen += mlen; 3573 EVP_CIPHER_CTX_cleanup(&ctx); 3574 p = sdec; 3575 3576 sess = d2i_SSL_SESSION(NULL, &p, slen); 3577 OPENSSL_free(sdec); 3578 if (sess) { 3579 /* 3580 * The session ID, if non-empty, is used by some clients to detect 3581 * that the ticket has been accepted. So we copy it to the session 3582 * structure. If it is empty set length to zero as required by 3583 * standard. 3584 */ 3585 if (sesslen) 3586 memcpy(sess->session_id, sess_id, sesslen); 3587 sess->session_id_length = sesslen; 3588 *psess = sess; 3589 if (renew_ticket) 3590 return 4; 3591 else 3592 return 3; 3593 } 3594 ERR_clear_error(); 3595 /* 3596 * For session parse failure, indicate that we need to send a new ticket. 3597 */ 3598 return 2; 3599err: 3600 EVP_CIPHER_CTX_cleanup(&ctx); 3601 HMAC_CTX_cleanup(&hctx); 3602 return -1; 3603} 3604 3605/* Tables to translate from NIDs to TLS v1.2 ids */ 3606 3607typedef struct { 3608 int nid; 3609 int id; 3610} tls12_lookup; 3611 3612static tls12_lookup tls12_md[] = { 3613 {NID_md5, TLSEXT_hash_md5}, 3614 {NID_sha1, TLSEXT_hash_sha1}, 3615 {NID_sha224, TLSEXT_hash_sha224}, 3616 {NID_sha256, TLSEXT_hash_sha256}, 3617 {NID_sha384, TLSEXT_hash_sha384}, 3618 {NID_sha512, TLSEXT_hash_sha512} 3619}; 3620 3621static tls12_lookup tls12_sig[] = { 3622 {EVP_PKEY_RSA, TLSEXT_signature_rsa}, 3623 {EVP_PKEY_DSA, TLSEXT_signature_dsa}, 3624 {EVP_PKEY_EC, TLSEXT_signature_ecdsa} 3625}; 3626 3627static int tls12_find_id(int nid, tls12_lookup *table, size_t tlen) 3628{ 3629 size_t i; 3630 for (i = 0; i < tlen; i++) { 3631 if (table[i].nid == nid) 3632 return table[i].id; 3633 } 3634 return -1; 3635} 3636 3637static int tls12_find_nid(int id, tls12_lookup *table, size_t tlen) 3638{ 3639 size_t i; 3640 for (i = 0; i < tlen; i++) { 3641 if ((table[i].id) == id) 3642 return table[i].nid; 3643 } 3644 return NID_undef; 3645} 3646 3647int tls12_get_sigandhash(unsigned char *p, const EVP_PKEY *pk, 3648 const EVP_MD *md) 3649{ 3650 int sig_id, md_id; 3651 if (!md) 3652 return 0; 3653 md_id = tls12_find_id(EVP_MD_type(md), tls12_md, 3654 sizeof(tls12_md) / sizeof(tls12_lookup)); 3655 if (md_id == -1) 3656 return 0; 3657 sig_id = tls12_get_sigid(pk); 3658 if (sig_id == -1) 3659 return 0; 3660 p[0] = (unsigned char)md_id; 3661 p[1] = (unsigned char)sig_id; 3662 return 1; 3663} 3664 3665int tls12_get_sigid(const EVP_PKEY *pk) 3666{ 3667 return tls12_find_id(pk->type, tls12_sig, 3668 sizeof(tls12_sig) / sizeof(tls12_lookup)); 3669} 3670 3671const EVP_MD *tls12_get_hash(unsigned char hash_alg) 3672{ 3673 switch (hash_alg) { 3674# ifndef OPENSSL_NO_MD5 3675 case TLSEXT_hash_md5: 3676# ifdef OPENSSL_FIPS 3677 if (FIPS_mode()) 3678 return NULL; 3679# endif 3680 return EVP_md5(); 3681# endif 3682# ifndef OPENSSL_NO_SHA 3683 case TLSEXT_hash_sha1: 3684 return EVP_sha1(); 3685# endif 3686# ifndef OPENSSL_NO_SHA256 3687 case TLSEXT_hash_sha224: 3688 return EVP_sha224(); 3689 3690 case TLSEXT_hash_sha256: 3691 return EVP_sha256(); 3692# endif 3693# ifndef OPENSSL_NO_SHA512 3694 case TLSEXT_hash_sha384: 3695 return EVP_sha384(); 3696 3697 case TLSEXT_hash_sha512: 3698 return EVP_sha512(); 3699# endif 3700 default: 3701 return NULL; 3702 3703 } 3704} 3705 3706static int tls12_get_pkey_idx(unsigned char sig_alg) 3707{ 3708 switch (sig_alg) { 3709# ifndef OPENSSL_NO_RSA 3710 case TLSEXT_signature_rsa: 3711 return SSL_PKEY_RSA_SIGN; 3712# endif 3713# ifndef OPENSSL_NO_DSA 3714 case TLSEXT_signature_dsa: 3715 return SSL_PKEY_DSA_SIGN; 3716# endif 3717# ifndef OPENSSL_NO_ECDSA 3718 case TLSEXT_signature_ecdsa: 3719 return SSL_PKEY_ECC; 3720# endif 3721 } 3722 return -1; 3723} 3724 3725/* Convert TLS 1.2 signature algorithm extension values into NIDs */ 3726static void tls1_lookup_sigalg(int *phash_nid, int *psign_nid, 3727 int *psignhash_nid, const unsigned char *data) 3728{ 3729 int sign_nid = NID_undef, hash_nid = NID_undef; 3730 if (!phash_nid && !psign_nid && !psignhash_nid) 3731 return; 3732 if (phash_nid || psignhash_nid) { 3733 hash_nid = tls12_find_nid(data[0], tls12_md, 3734 sizeof(tls12_md) / sizeof(tls12_lookup)); 3735 if (phash_nid) 3736 *phash_nid = hash_nid; 3737 } 3738 if (psign_nid || psignhash_nid) { 3739 sign_nid = tls12_find_nid(data[1], tls12_sig, 3740 sizeof(tls12_sig) / sizeof(tls12_lookup)); 3741 if (psign_nid) 3742 *psign_nid = sign_nid; 3743 } 3744 if (psignhash_nid) { 3745 if (sign_nid == NID_undef || hash_nid == NID_undef 3746 || OBJ_find_sigid_by_algs(psignhash_nid, hash_nid, 3747 sign_nid) <= 0) 3748 *psignhash_nid = NID_undef; 3749 } 3750} 3751 3752/* Given preference and allowed sigalgs set shared sigalgs */ 3753static int tls12_do_shared_sigalgs(TLS_SIGALGS *shsig, 3754 const unsigned char *pref, size_t preflen, 3755 const unsigned char *allow, 3756 size_t allowlen) 3757{ 3758 const unsigned char *ptmp, *atmp; 3759 size_t i, j, nmatch = 0; 3760 for (i = 0, ptmp = pref; i < preflen; i += 2, ptmp += 2) { 3761 /* Skip disabled hashes or signature algorithms */ 3762 if (tls12_get_hash(ptmp[0]) == NULL) 3763 continue; 3764 if (tls12_get_pkey_idx(ptmp[1]) == -1) 3765 continue; 3766 for (j = 0, atmp = allow; j < allowlen; j += 2, atmp += 2) { 3767 if (ptmp[0] == atmp[0] && ptmp[1] == atmp[1]) { 3768 nmatch++; 3769 if (shsig) { 3770 shsig->rhash = ptmp[0]; 3771 shsig->rsign = ptmp[1]; 3772 tls1_lookup_sigalg(&shsig->hash_nid, 3773 &shsig->sign_nid, 3774 &shsig->signandhash_nid, ptmp); 3775 shsig++; 3776 } 3777 break; 3778 } 3779 } 3780 } 3781 return nmatch; 3782} 3783 3784/* Set shared signature algorithms for SSL structures */ 3785static int tls1_set_shared_sigalgs(SSL *s) 3786{ 3787 const unsigned char *pref, *allow, *conf; 3788 size_t preflen, allowlen, conflen; 3789 size_t nmatch; 3790 TLS_SIGALGS *salgs = NULL; 3791 CERT *c = s->cert; 3792 unsigned int is_suiteb = tls1_suiteb(s); 3793 if (c->shared_sigalgs) { 3794 OPENSSL_free(c->shared_sigalgs); 3795 c->shared_sigalgs = NULL; 3796 c->shared_sigalgslen = 0; 3797 } 3798 /* If client use client signature algorithms if not NULL */ 3799 if (!s->server && c->client_sigalgs && !is_suiteb) { 3800 conf = c->client_sigalgs; 3801 conflen = c->client_sigalgslen; 3802 } else if (c->conf_sigalgs && !is_suiteb) { 3803 conf = c->conf_sigalgs; 3804 conflen = c->conf_sigalgslen; 3805 } else 3806 conflen = tls12_get_psigalgs(s, &conf); 3807 if (s->options & SSL_OP_CIPHER_SERVER_PREFERENCE || is_suiteb) { 3808 pref = conf; 3809 preflen = conflen; 3810 allow = c->peer_sigalgs; 3811 allowlen = c->peer_sigalgslen; 3812 } else { 3813 allow = conf; 3814 allowlen = conflen; 3815 pref = c->peer_sigalgs; 3816 preflen = c->peer_sigalgslen; 3817 } 3818 nmatch = tls12_do_shared_sigalgs(NULL, pref, preflen, allow, allowlen); 3819 if (nmatch) { 3820 salgs = OPENSSL_malloc(nmatch * sizeof(TLS_SIGALGS)); 3821 if (!salgs) 3822 return 0; 3823 nmatch = tls12_do_shared_sigalgs(salgs, pref, preflen, allow, allowlen); 3824 } else { 3825 salgs = NULL; 3826 } 3827 c->shared_sigalgs = salgs; 3828 c->shared_sigalgslen = nmatch; 3829 return 1; 3830} 3831 3832/* Set preferred digest for each key type */ 3833 3834int tls1_save_sigalgs(SSL *s, const unsigned char *data, int dsize) 3835{ 3836 CERT *c = s->cert; 3837 /* Extension ignored for inappropriate versions */ 3838 if (!SSL_USE_SIGALGS(s)) 3839 return 1; 3840 /* Should never happen */ 3841 if (!c) 3842 return 0; 3843 3844 if (c->peer_sigalgs) 3845 OPENSSL_free(c->peer_sigalgs); 3846 c->peer_sigalgs = OPENSSL_malloc(dsize); 3847 if (!c->peer_sigalgs) 3848 return 0; 3849 c->peer_sigalgslen = dsize; 3850 memcpy(c->peer_sigalgs, data, dsize); 3851 return 1; 3852} 3853 3854int tls1_process_sigalgs(SSL *s) 3855{ 3856 int idx; 3857 size_t i; 3858 const EVP_MD *md; 3859 CERT *c = s->cert; 3860 TLS_SIGALGS *sigptr; 3861 if (!tls1_set_shared_sigalgs(s)) 3862 return 0; 3863 3864# ifdef OPENSSL_SSL_DEBUG_BROKEN_PROTOCOL 3865 if (s->cert->cert_flags & SSL_CERT_FLAG_BROKEN_PROTOCOL) { 3866 /* 3867 * Use first set signature preference to force message digest, 3868 * ignoring any peer preferences. 3869 */ 3870 const unsigned char *sigs = NULL; 3871 if (s->server) 3872 sigs = c->conf_sigalgs; 3873 else 3874 sigs = c->client_sigalgs; 3875 if (sigs) { 3876 idx = tls12_get_pkey_idx(sigs[1]); 3877 md = tls12_get_hash(sigs[0]); 3878 c->pkeys[idx].digest = md; 3879 c->pkeys[idx].valid_flags = CERT_PKEY_EXPLICIT_SIGN; 3880 if (idx == SSL_PKEY_RSA_SIGN) { 3881 c->pkeys[SSL_PKEY_RSA_ENC].valid_flags = 3882 CERT_PKEY_EXPLICIT_SIGN; 3883 c->pkeys[SSL_PKEY_RSA_ENC].digest = md; 3884 } 3885 } 3886 } 3887# endif 3888 3889 for (i = 0, sigptr = c->shared_sigalgs; 3890 i < c->shared_sigalgslen; i++, sigptr++) { 3891 idx = tls12_get_pkey_idx(sigptr->rsign); 3892 if (idx > 0 && c->pkeys[idx].digest == NULL) { 3893 md = tls12_get_hash(sigptr->rhash); 3894 c->pkeys[idx].digest = md; 3895 c->pkeys[idx].valid_flags = CERT_PKEY_EXPLICIT_SIGN; 3896 if (idx == SSL_PKEY_RSA_SIGN) { 3897 c->pkeys[SSL_PKEY_RSA_ENC].valid_flags = 3898 CERT_PKEY_EXPLICIT_SIGN; 3899 c->pkeys[SSL_PKEY_RSA_ENC].digest = md; 3900 } 3901 } 3902 3903 } 3904 /* 3905 * In strict mode leave unset digests as NULL to indicate we can't use 3906 * the certificate for signing. 3907 */ 3908 if (!(s->cert->cert_flags & SSL_CERT_FLAGS_CHECK_TLS_STRICT)) { 3909 /* 3910 * Set any remaining keys to default values. NOTE: if alg is not 3911 * supported it stays as NULL. 3912 */ 3913# ifndef OPENSSL_NO_DSA 3914 if (!c->pkeys[SSL_PKEY_DSA_SIGN].digest) 3915 c->pkeys[SSL_PKEY_DSA_SIGN].digest = EVP_sha1(); 3916# endif 3917# ifndef OPENSSL_NO_RSA 3918 if (!c->pkeys[SSL_PKEY_RSA_SIGN].digest) { 3919 c->pkeys[SSL_PKEY_RSA_SIGN].digest = EVP_sha1(); 3920 c->pkeys[SSL_PKEY_RSA_ENC].digest = EVP_sha1(); 3921 } 3922# endif 3923# ifndef OPENSSL_NO_ECDSA 3924 if (!c->pkeys[SSL_PKEY_ECC].digest) 3925 c->pkeys[SSL_PKEY_ECC].digest = EVP_sha1(); 3926# endif 3927 } 3928 return 1; 3929} 3930 3931int SSL_get_sigalgs(SSL *s, int idx, 3932 int *psign, int *phash, int *psignhash, 3933 unsigned char *rsig, unsigned char *rhash) 3934{ 3935 const unsigned char *psig = s->cert->peer_sigalgs; 3936 if (psig == NULL) 3937 return 0; 3938 if (idx >= 0) { 3939 idx <<= 1; 3940 if (idx >= (int)s->cert->peer_sigalgslen) 3941 return 0; 3942 psig += idx; 3943 if (rhash) 3944 *rhash = psig[0]; 3945 if (rsig) 3946 *rsig = psig[1]; 3947 tls1_lookup_sigalg(phash, psign, psignhash, psig); 3948 } 3949 return s->cert->peer_sigalgslen / 2; 3950} 3951 3952int SSL_get_shared_sigalgs(SSL *s, int idx, 3953 int *psign, int *phash, int *psignhash, 3954 unsigned char *rsig, unsigned char *rhash) 3955{ 3956 TLS_SIGALGS *shsigalgs = s->cert->shared_sigalgs; 3957 if (!shsigalgs || idx >= (int)s->cert->shared_sigalgslen) 3958 return 0; 3959 shsigalgs += idx; 3960 if (phash) 3961 *phash = shsigalgs->hash_nid; 3962 if (psign) 3963 *psign = shsigalgs->sign_nid; 3964 if (psignhash) 3965 *psignhash = shsigalgs->signandhash_nid; 3966 if (rsig) 3967 *rsig = shsigalgs->rsign; 3968 if (rhash) 3969 *rhash = shsigalgs->rhash; 3970 return s->cert->shared_sigalgslen; 3971} 3972 3973# ifndef OPENSSL_NO_HEARTBEATS 3974int tls1_process_heartbeat(SSL *s) 3975{ 3976 unsigned char *p = &s->s3->rrec.data[0], *pl; 3977 unsigned short hbtype; 3978 unsigned int payload; 3979 unsigned int padding = 16; /* Use minimum padding */ 3980 3981 if (s->msg_callback) 3982 s->msg_callback(0, s->version, TLS1_RT_HEARTBEAT, 3983 &s->s3->rrec.data[0], s->s3->rrec.length, 3984 s, s->msg_callback_arg); 3985 3986 /* Read type and payload length first */ 3987 if (1 + 2 + 16 > s->s3->rrec.length) 3988 return 0; /* silently discard */ 3989 hbtype = *p++; 3990 n2s(p, payload); 3991 if (1 + 2 + payload + 16 > s->s3->rrec.length) 3992 return 0; /* silently discard per RFC 6520 sec. 4 */ 3993 pl = p; 3994 3995 if (hbtype == TLS1_HB_REQUEST) { 3996 unsigned char *buffer, *bp; 3997 int r; 3998 3999 /* 4000 * Allocate memory for the response, size is 1 bytes message type, 4001 * plus 2 bytes payload length, plus payload, plus padding 4002 */ 4003 buffer = OPENSSL_malloc(1 + 2 + payload + padding); 4004 if (buffer == NULL) 4005 return -1; 4006 bp = buffer; 4007 4008 /* Enter response type, length and copy payload */ 4009 *bp++ = TLS1_HB_RESPONSE; 4010 s2n(payload, bp); 4011 memcpy(bp, pl, payload); 4012 bp += payload; 4013 /* Random padding */ 4014 if (RAND_bytes(bp, padding) <= 0) { 4015 OPENSSL_free(buffer); 4016 return -1; 4017 } 4018 4019 r = ssl3_write_bytes(s, TLS1_RT_HEARTBEAT, buffer, 4020 3 + payload + padding); 4021 4022 if (r >= 0 && s->msg_callback) 4023 s->msg_callback(1, s->version, TLS1_RT_HEARTBEAT, 4024 buffer, 3 + payload + padding, 4025 s, s->msg_callback_arg); 4026 4027 OPENSSL_free(buffer); 4028 4029 if (r < 0) 4030 return r; 4031 } else if (hbtype == TLS1_HB_RESPONSE) { 4032 unsigned int seq; 4033 4034 /* 4035 * We only send sequence numbers (2 bytes unsigned int), and 16 4036 * random bytes, so we just try to read the sequence number 4037 */ 4038 n2s(pl, seq); 4039 4040 if (payload == 18 && seq == s->tlsext_hb_seq) { 4041 s->tlsext_hb_seq++; 4042 s->tlsext_hb_pending = 0; 4043 } 4044 } 4045 4046 return 0; 4047} 4048 4049int tls1_heartbeat(SSL *s) 4050{ 4051 unsigned char *buf, *p; 4052 int ret = -1; 4053 unsigned int payload = 18; /* Sequence number + random bytes */ 4054 unsigned int padding = 16; /* Use minimum padding */ 4055 4056 /* Only send if peer supports and accepts HB requests... */ 4057 if (!(s->tlsext_heartbeat & SSL_TLSEXT_HB_ENABLED) || 4058 s->tlsext_heartbeat & SSL_TLSEXT_HB_DONT_SEND_REQUESTS) { 4059 SSLerr(SSL_F_TLS1_HEARTBEAT, SSL_R_TLS_HEARTBEAT_PEER_DOESNT_ACCEPT); 4060 return -1; 4061 } 4062 4063 /* ...and there is none in flight yet... */ 4064 if (s->tlsext_hb_pending) { 4065 SSLerr(SSL_F_TLS1_HEARTBEAT, SSL_R_TLS_HEARTBEAT_PENDING); 4066 return -1; 4067 } 4068 4069 /* ...and no handshake in progress. */ 4070 if (SSL_in_init(s) || s->in_handshake) { 4071 SSLerr(SSL_F_TLS1_HEARTBEAT, SSL_R_UNEXPECTED_MESSAGE); 4072 return -1; 4073 } 4074 4075 /* 4076 * Check if padding is too long, payload and padding must not exceed 2^14 4077 * - 3 = 16381 bytes in total. 4078 */ 4079 OPENSSL_assert(payload + padding <= 16381); 4080 4081 /*- 4082 * Create HeartBeat message, we just use a sequence number 4083 * as payload to distuingish different messages and add 4084 * some random stuff. 4085 * - Message Type, 1 byte 4086 * - Payload Length, 2 bytes (unsigned int) 4087 * - Payload, the sequence number (2 bytes uint) 4088 * - Payload, random bytes (16 bytes uint) 4089 * - Padding 4090 */ 4091 buf = OPENSSL_malloc(1 + 2 + payload + padding); 4092 if (buf == NULL) 4093 return -1; 4094 p = buf; 4095 /* Message Type */ 4096 *p++ = TLS1_HB_REQUEST; 4097 /* Payload length (18 bytes here) */ 4098 s2n(payload, p); 4099 /* Sequence number */ 4100 s2n(s->tlsext_hb_seq, p); 4101 /* 16 random bytes */ 4102 if (RAND_bytes(p, 16) <= 0) { 4103 SSLerr(SSL_F_TLS1_HEARTBEAT, ERR_R_INTERNAL_ERROR); 4104 goto err; 4105 } 4106 p += 16; 4107 /* Random padding */ 4108 if (RAND_bytes(p, padding) <= 0) { 4109 SSLerr(SSL_F_TLS1_HEARTBEAT, ERR_R_INTERNAL_ERROR); 4110 goto err; 4111 } 4112 4113 ret = ssl3_write_bytes(s, TLS1_RT_HEARTBEAT, buf, 3 + payload + padding); 4114 if (ret >= 0) { 4115 if (s->msg_callback) 4116 s->msg_callback(1, s->version, TLS1_RT_HEARTBEAT, 4117 buf, 3 + payload + padding, 4118 s, s->msg_callback_arg); 4119 4120 s->tlsext_hb_pending = 1; 4121 } 4122 4123err: 4124 OPENSSL_free(buf); 4125 4126 return ret; 4127} 4128# endif 4129 4130# define MAX_SIGALGLEN (TLSEXT_hash_num * TLSEXT_signature_num * 2) 4131 4132typedef struct { 4133 size_t sigalgcnt; 4134 int sigalgs[MAX_SIGALGLEN]; 4135} sig_cb_st; 4136 4137static int sig_cb(const char *elem, int len, void *arg) 4138{ 4139 sig_cb_st *sarg = arg; 4140 size_t i; 4141 char etmp[20], *p; 4142 int sig_alg, hash_alg; 4143 if (elem == NULL) 4144 return 0; 4145 if (sarg->sigalgcnt == MAX_SIGALGLEN) 4146 return 0; 4147 if (len > (int)(sizeof(etmp) - 1)) 4148 return 0; 4149 memcpy(etmp, elem, len); 4150 etmp[len] = 0; 4151 p = strchr(etmp, '+'); 4152 if (!p) 4153 return 0; 4154 *p = 0; 4155 p++; 4156 if (!*p) 4157 return 0; 4158 4159 if (!strcmp(etmp, "RSA")) 4160 sig_alg = EVP_PKEY_RSA; 4161 else if (!strcmp(etmp, "DSA")) 4162 sig_alg = EVP_PKEY_DSA; 4163 else if (!strcmp(etmp, "ECDSA")) 4164 sig_alg = EVP_PKEY_EC; 4165 else 4166 return 0; 4167 4168 hash_alg = OBJ_sn2nid(p); 4169 if (hash_alg == NID_undef) 4170 hash_alg = OBJ_ln2nid(p); 4171 if (hash_alg == NID_undef) 4172 return 0; 4173 4174 for (i = 0; i < sarg->sigalgcnt; i += 2) { 4175 if (sarg->sigalgs[i] == sig_alg && sarg->sigalgs[i + 1] == hash_alg) 4176 return 0; 4177 } 4178 sarg->sigalgs[sarg->sigalgcnt++] = hash_alg; 4179 sarg->sigalgs[sarg->sigalgcnt++] = sig_alg; 4180 return 1; 4181} 4182 4183/* 4184 * Set suppored signature algorithms based on a colon separated list of the 4185 * form sig+hash e.g. RSA+SHA512:DSA+SHA512 4186 */ 4187int tls1_set_sigalgs_list(CERT *c, const char *str, int client) 4188{ 4189 sig_cb_st sig; 4190 sig.sigalgcnt = 0; 4191 if (!CONF_parse_list(str, ':', 1, sig_cb, &sig)) 4192 return 0; 4193 if (c == NULL) 4194 return 1; 4195 return tls1_set_sigalgs(c, sig.sigalgs, sig.sigalgcnt, client); 4196} 4197 4198int tls1_set_sigalgs(CERT *c, const int *psig_nids, size_t salglen, 4199 int client) 4200{ 4201 unsigned char *sigalgs, *sptr; 4202 int rhash, rsign; 4203 size_t i; 4204 if (salglen & 1) 4205 return 0; 4206 sigalgs = OPENSSL_malloc(salglen); 4207 if (sigalgs == NULL) 4208 return 0; 4209 for (i = 0, sptr = sigalgs; i < salglen; i += 2) { 4210 rhash = tls12_find_id(*psig_nids++, tls12_md, 4211 sizeof(tls12_md) / sizeof(tls12_lookup)); 4212 rsign = tls12_find_id(*psig_nids++, tls12_sig, 4213 sizeof(tls12_sig) / sizeof(tls12_lookup)); 4214 4215 if (rhash == -1 || rsign == -1) 4216 goto err; 4217 *sptr++ = rhash; 4218 *sptr++ = rsign; 4219 } 4220 4221 if (client) { 4222 if (c->client_sigalgs) 4223 OPENSSL_free(c->client_sigalgs); 4224 c->client_sigalgs = sigalgs; 4225 c->client_sigalgslen = salglen; 4226 } else { 4227 if (c->conf_sigalgs) 4228 OPENSSL_free(c->conf_sigalgs); 4229 c->conf_sigalgs = sigalgs; 4230 c->conf_sigalgslen = salglen; 4231 } 4232 4233 return 1; 4234 4235 err: 4236 OPENSSL_free(sigalgs); 4237 return 0; 4238} 4239 4240static int tls1_check_sig_alg(CERT *c, X509 *x, int default_nid) 4241{ 4242 int sig_nid; 4243 size_t i; 4244 if (default_nid == -1) 4245 return 1; 4246 sig_nid = X509_get_signature_nid(x); 4247 if (default_nid) 4248 return sig_nid == default_nid ? 1 : 0; 4249 for (i = 0; i < c->shared_sigalgslen; i++) 4250 if (sig_nid == c->shared_sigalgs[i].signandhash_nid) 4251 return 1; 4252 return 0; 4253} 4254 4255/* Check to see if a certificate issuer name matches list of CA names */ 4256static int ssl_check_ca_name(STACK_OF(X509_NAME) *names, X509 *x) 4257{ 4258 X509_NAME *nm; 4259 int i; 4260 nm = X509_get_issuer_name(x); 4261 for (i = 0; i < sk_X509_NAME_num(names); i++) { 4262 if (!X509_NAME_cmp(nm, sk_X509_NAME_value(names, i))) 4263 return 1; 4264 } 4265 return 0; 4266} 4267 4268/* 4269 * Check certificate chain is consistent with TLS extensions and is usable by 4270 * server. This servers two purposes: it allows users to check chains before 4271 * passing them to the server and it allows the server to check chains before 4272 * attempting to use them. 4273 */ 4274 4275/* Flags which need to be set for a certificate when stict mode not set */ 4276 4277# define CERT_PKEY_VALID_FLAGS \ 4278 (CERT_PKEY_EE_SIGNATURE|CERT_PKEY_EE_PARAM) 4279/* Strict mode flags */ 4280# define CERT_PKEY_STRICT_FLAGS \ 4281 (CERT_PKEY_VALID_FLAGS|CERT_PKEY_CA_SIGNATURE|CERT_PKEY_CA_PARAM \ 4282 | CERT_PKEY_ISSUER_NAME|CERT_PKEY_CERT_TYPE) 4283 4284int tls1_check_chain(SSL *s, X509 *x, EVP_PKEY *pk, STACK_OF(X509) *chain, 4285 int idx) 4286{ 4287 int i; 4288 int rv = 0; 4289 int check_flags = 0, strict_mode; 4290 CERT_PKEY *cpk = NULL; 4291 CERT *c = s->cert; 4292 unsigned int suiteb_flags = tls1_suiteb(s); 4293 /* idx == -1 means checking server chains */ 4294 if (idx != -1) { 4295 /* idx == -2 means checking client certificate chains */ 4296 if (idx == -2) { 4297 cpk = c->key; 4298 idx = cpk - c->pkeys; 4299 } else 4300 cpk = c->pkeys + idx; 4301 x = cpk->x509; 4302 pk = cpk->privatekey; 4303 chain = cpk->chain; 4304 strict_mode = c->cert_flags & SSL_CERT_FLAGS_CHECK_TLS_STRICT; 4305 /* If no cert or key, forget it */ 4306 if (!x || !pk) 4307 goto end; 4308# ifdef OPENSSL_SSL_DEBUG_BROKEN_PROTOCOL 4309 /* Allow any certificate to pass test */ 4310 if (s->cert->cert_flags & SSL_CERT_FLAG_BROKEN_PROTOCOL) { 4311 rv = CERT_PKEY_STRICT_FLAGS | CERT_PKEY_EXPLICIT_SIGN | 4312 CERT_PKEY_VALID | CERT_PKEY_SIGN; 4313 cpk->valid_flags = rv; 4314 return rv; 4315 } 4316# endif 4317 } else { 4318 if (!x || !pk) 4319 return 0; 4320 idx = ssl_cert_type(x, pk); 4321 if (idx == -1) 4322 return 0; 4323 cpk = c->pkeys + idx; 4324 if (c->cert_flags & SSL_CERT_FLAGS_CHECK_TLS_STRICT) 4325 check_flags = CERT_PKEY_STRICT_FLAGS; 4326 else 4327 check_flags = CERT_PKEY_VALID_FLAGS; 4328 strict_mode = 1; 4329 } 4330 4331 if (suiteb_flags) { 4332 int ok; 4333 if (check_flags) 4334 check_flags |= CERT_PKEY_SUITEB; 4335 ok = X509_chain_check_suiteb(NULL, x, chain, suiteb_flags); 4336 if (ok == X509_V_OK) 4337 rv |= CERT_PKEY_SUITEB; 4338 else if (!check_flags) 4339 goto end; 4340 } 4341 4342 /* 4343 * Check all signature algorithms are consistent with signature 4344 * algorithms extension if TLS 1.2 or later and strict mode. 4345 */ 4346 if (TLS1_get_version(s) >= TLS1_2_VERSION && strict_mode) { 4347 int default_nid; 4348 unsigned char rsign = 0; 4349 if (c->peer_sigalgs) 4350 default_nid = 0; 4351 /* If no sigalgs extension use defaults from RFC5246 */ 4352 else { 4353 switch (idx) { 4354 case SSL_PKEY_RSA_ENC: 4355 case SSL_PKEY_RSA_SIGN: 4356 case SSL_PKEY_DH_RSA: 4357 rsign = TLSEXT_signature_rsa; 4358 default_nid = NID_sha1WithRSAEncryption; 4359 break; 4360 4361 case SSL_PKEY_DSA_SIGN: 4362 case SSL_PKEY_DH_DSA: 4363 rsign = TLSEXT_signature_dsa; 4364 default_nid = NID_dsaWithSHA1; 4365 break; 4366 4367 case SSL_PKEY_ECC: 4368 rsign = TLSEXT_signature_ecdsa; 4369 default_nid = NID_ecdsa_with_SHA1; 4370 break; 4371 4372 default: 4373 default_nid = -1; 4374 break; 4375 } 4376 } 4377 /* 4378 * If peer sent no signature algorithms extension and we have set 4379 * preferred signature algorithms check we support sha1. 4380 */ 4381 if (default_nid > 0 && c->conf_sigalgs) { 4382 size_t j; 4383 const unsigned char *p = c->conf_sigalgs; 4384 for (j = 0; j < c->conf_sigalgslen; j += 2, p += 2) { 4385 if (p[0] == TLSEXT_hash_sha1 && p[1] == rsign) 4386 break; 4387 } 4388 if (j == c->conf_sigalgslen) { 4389 if (check_flags) 4390 goto skip_sigs; 4391 else 4392 goto end; 4393 } 4394 } 4395 /* Check signature algorithm of each cert in chain */ 4396 if (!tls1_check_sig_alg(c, x, default_nid)) { 4397 if (!check_flags) 4398 goto end; 4399 } else 4400 rv |= CERT_PKEY_EE_SIGNATURE; 4401 rv |= CERT_PKEY_CA_SIGNATURE; 4402 for (i = 0; i < sk_X509_num(chain); i++) { 4403 if (!tls1_check_sig_alg(c, sk_X509_value(chain, i), default_nid)) { 4404 if (check_flags) { 4405 rv &= ~CERT_PKEY_CA_SIGNATURE; 4406 break; 4407 } else 4408 goto end; 4409 } 4410 } 4411 } 4412 /* Else not TLS 1.2, so mark EE and CA signing algorithms OK */ 4413 else if (check_flags) 4414 rv |= CERT_PKEY_EE_SIGNATURE | CERT_PKEY_CA_SIGNATURE; 4415 skip_sigs: 4416 /* Check cert parameters are consistent */ 4417 if (tls1_check_cert_param(s, x, check_flags ? 1 : 2)) 4418 rv |= CERT_PKEY_EE_PARAM; 4419 else if (!check_flags) 4420 goto end; 4421 if (!s->server) 4422 rv |= CERT_PKEY_CA_PARAM; 4423 /* In strict mode check rest of chain too */ 4424 else if (strict_mode) { 4425 rv |= CERT_PKEY_CA_PARAM; 4426 for (i = 0; i < sk_X509_num(chain); i++) { 4427 X509 *ca = sk_X509_value(chain, i); 4428 if (!tls1_check_cert_param(s, ca, 0)) { 4429 if (check_flags) { 4430 rv &= ~CERT_PKEY_CA_PARAM; 4431 break; 4432 } else 4433 goto end; 4434 } 4435 } 4436 } 4437 if (!s->server && strict_mode) { 4438 STACK_OF(X509_NAME) *ca_dn; 4439 int check_type = 0; 4440 switch (pk->type) { 4441 case EVP_PKEY_RSA: 4442 check_type = TLS_CT_RSA_SIGN; 4443 break; 4444 case EVP_PKEY_DSA: 4445 check_type = TLS_CT_DSS_SIGN; 4446 break; 4447 case EVP_PKEY_EC: 4448 check_type = TLS_CT_ECDSA_SIGN; 4449 break; 4450 case EVP_PKEY_DH: 4451 case EVP_PKEY_DHX: 4452 { 4453 int cert_type = X509_certificate_type(x, pk); 4454 if (cert_type & EVP_PKS_RSA) 4455 check_type = TLS_CT_RSA_FIXED_DH; 4456 if (cert_type & EVP_PKS_DSA) 4457 check_type = TLS_CT_DSS_FIXED_DH; 4458 } 4459 } 4460 if (check_type) { 4461 const unsigned char *ctypes; 4462 int ctypelen; 4463 if (c->ctypes) { 4464 ctypes = c->ctypes; 4465 ctypelen = (int)c->ctype_num; 4466 } else { 4467 ctypes = (unsigned char *)s->s3->tmp.ctype; 4468 ctypelen = s->s3->tmp.ctype_num; 4469 } 4470 for (i = 0; i < ctypelen; i++) { 4471 if (ctypes[i] == check_type) { 4472 rv |= CERT_PKEY_CERT_TYPE; 4473 break; 4474 } 4475 } 4476 if (!(rv & CERT_PKEY_CERT_TYPE) && !check_flags) 4477 goto end; 4478 } else 4479 rv |= CERT_PKEY_CERT_TYPE; 4480 4481 ca_dn = s->s3->tmp.ca_names; 4482 4483 if (!sk_X509_NAME_num(ca_dn)) 4484 rv |= CERT_PKEY_ISSUER_NAME; 4485 4486 if (!(rv & CERT_PKEY_ISSUER_NAME)) { 4487 if (ssl_check_ca_name(ca_dn, x)) 4488 rv |= CERT_PKEY_ISSUER_NAME; 4489 } 4490 if (!(rv & CERT_PKEY_ISSUER_NAME)) { 4491 for (i = 0; i < sk_X509_num(chain); i++) { 4492 X509 *xtmp = sk_X509_value(chain, i); 4493 if (ssl_check_ca_name(ca_dn, xtmp)) { 4494 rv |= CERT_PKEY_ISSUER_NAME; 4495 break; 4496 } 4497 } 4498 } 4499 if (!check_flags && !(rv & CERT_PKEY_ISSUER_NAME)) 4500 goto end; 4501 } else 4502 rv |= CERT_PKEY_ISSUER_NAME | CERT_PKEY_CERT_TYPE; 4503 4504 if (!check_flags || (rv & check_flags) == check_flags) 4505 rv |= CERT_PKEY_VALID; 4506 4507 end: 4508 4509 if (TLS1_get_version(s) >= TLS1_2_VERSION) { 4510 if (cpk->valid_flags & CERT_PKEY_EXPLICIT_SIGN) 4511 rv |= CERT_PKEY_EXPLICIT_SIGN | CERT_PKEY_SIGN; 4512 else if (cpk->digest) 4513 rv |= CERT_PKEY_SIGN; 4514 } else 4515 rv |= CERT_PKEY_SIGN | CERT_PKEY_EXPLICIT_SIGN; 4516 4517 /* 4518 * When checking a CERT_PKEY structure all flags are irrelevant if the 4519 * chain is invalid. 4520 */ 4521 if (!check_flags) { 4522 if (rv & CERT_PKEY_VALID) 4523 cpk->valid_flags = rv; 4524 else { 4525 /* Preserve explicit sign flag, clear rest */ 4526 cpk->valid_flags &= CERT_PKEY_EXPLICIT_SIGN; 4527 return 0; 4528 } 4529 } 4530 return rv; 4531} 4532 4533/* Set validity of certificates in an SSL structure */ 4534void tls1_set_cert_validity(SSL *s) 4535{ 4536 tls1_check_chain(s, NULL, NULL, NULL, SSL_PKEY_RSA_ENC); 4537 tls1_check_chain(s, NULL, NULL, NULL, SSL_PKEY_RSA_SIGN); 4538 tls1_check_chain(s, NULL, NULL, NULL, SSL_PKEY_DSA_SIGN); 4539 tls1_check_chain(s, NULL, NULL, NULL, SSL_PKEY_DH_RSA); 4540 tls1_check_chain(s, NULL, NULL, NULL, SSL_PKEY_DH_DSA); 4541 tls1_check_chain(s, NULL, NULL, NULL, SSL_PKEY_ECC); 4542} 4543 4544/* User level utiity function to check a chain is suitable */ 4545int SSL_check_chain(SSL *s, X509 *x, EVP_PKEY *pk, STACK_OF(X509) *chain) 4546{ 4547 return tls1_check_chain(s, x, pk, chain, -1); 4548} 4549 4550#endif 4551