Não pode escolher mais do que 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 
 
 
 

3840 linhas
99 KiB

  1. /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
  2. * All rights reserved.
  3. *
  4. * This package is an SSL implementation written
  5. * by Eric Young (eay@cryptsoft.com).
  6. * The implementation was written so as to conform with Netscapes SSL.
  7. *
  8. * This library is free for commercial and non-commercial use as long as
  9. * the following conditions are aheared to. The following conditions
  10. * apply to all code found in this distribution, be it the RC4, RSA,
  11. * lhash, DES, etc., code; not just the SSL code. The SSL documentation
  12. * included with this distribution is covered by the same copyright terms
  13. * except that the holder is Tim Hudson (tjh@cryptsoft.com).
  14. *
  15. * Copyright remains Eric Young's, and as such any Copyright notices in
  16. * the code are not to be removed.
  17. * If this package is used in a product, Eric Young should be given attribution
  18. * as the author of the parts of the library used.
  19. * This can be in the form of a textual message at program startup or
  20. * in documentation (online or textual) provided with the package.
  21. *
  22. * Redistribution and use in source and binary forms, with or without
  23. * modification, are permitted provided that the following conditions
  24. * are met:
  25. * 1. Redistributions of source code must retain the copyright
  26. * notice, this list of conditions and the following disclaimer.
  27. * 2. Redistributions in binary form must reproduce the above copyright
  28. * notice, this list of conditions and the following disclaimer in the
  29. * documentation and/or other materials provided with the distribution.
  30. * 3. All advertising materials mentioning features or use of this software
  31. * must display the following acknowledgement:
  32. * "This product includes cryptographic software written by
  33. * Eric Young (eay@cryptsoft.com)"
  34. * The word 'cryptographic' can be left out if the rouines from the library
  35. * being used are not cryptographic related :-).
  36. * 4. If you include any Windows specific code (or a derivative thereof) from
  37. * the apps directory (application code) you must include an acknowledgement:
  38. * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
  39. *
  40. * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
  41. * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  42. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  43. * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
  44. * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  45. * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  46. * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  47. * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  48. * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  49. * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  50. * SUCH DAMAGE.
  51. *
  52. * The licence and distribution terms for any publically available version or
  53. * derivative of this code cannot be changed. i.e. this code cannot simply be
  54. * copied and put under another distribution licence
  55. * [including the GNU Public Licence.]
  56. */
  57. /* ====================================================================
  58. * Copyright (c) 1998-2007 The OpenSSL Project. All rights reserved.
  59. *
  60. * Redistribution and use in source and binary forms, with or without
  61. * modification, are permitted provided that the following conditions
  62. * are met:
  63. *
  64. * 1. Redistributions of source code must retain the above copyright
  65. * notice, this list of conditions and the following disclaimer.
  66. *
  67. * 2. Redistributions in binary form must reproduce the above copyright
  68. * notice, this list of conditions and the following disclaimer in
  69. * the documentation and/or other materials provided with the
  70. * distribution.
  71. *
  72. * 3. All advertising materials mentioning features or use of this
  73. * software must display the following acknowledgment:
  74. * "This product includes software developed by the OpenSSL Project
  75. * for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
  76. *
  77. * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
  78. * endorse or promote products derived from this software without
  79. * prior written permission. For written permission, please contact
  80. * openssl-core@openssl.org.
  81. *
  82. * 5. Products derived from this software may not be called "OpenSSL"
  83. * nor may "OpenSSL" appear in their names without prior written
  84. * permission of the OpenSSL Project.
  85. *
  86. * 6. Redistributions of any form whatsoever must retain the following
  87. * acknowledgment:
  88. * "This product includes software developed by the OpenSSL Project
  89. * for use in the OpenSSL Toolkit (http://www.openssl.org/)"
  90. *
  91. * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
  92. * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  93. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
  94. * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
  95. * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  96. * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
  97. * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  98. * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  99. * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
  100. * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  101. * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
  102. * OF THE POSSIBILITY OF SUCH DAMAGE.
  103. * ====================================================================
  104. *
  105. * This product includes cryptographic software written by Eric Young
  106. * (eay@cryptsoft.com). This product includes software written by Tim
  107. * Hudson (tjh@cryptsoft.com). */
  108. #include <stdio.h>
  109. #include <stdlib.h>
  110. #include <assert.h>
  111. #include <openssl/bytestring.h>
  112. #include <openssl/evp.h>
  113. #include <openssl/hmac.h>
  114. #include <openssl/mem.h>
  115. #include <openssl/obj.h>
  116. #include <openssl/rand.h>
  117. #include "ssl_locl.h"
  118. static int tls_decrypt_ticket(SSL *s, const unsigned char *tick, int ticklen,
  119. const unsigned char *sess_id, int sesslen,
  120. SSL_SESSION **psess);
  121. static int ssl_check_clienthello_tlsext_early(SSL *s);
  122. int ssl_check_serverhello_tlsext(SSL *s);
  123. SSL3_ENC_METHOD TLSv1_enc_data={
  124. tls1_enc,
  125. tls1_mac,
  126. tls1_setup_key_block,
  127. tls1_generate_master_secret,
  128. tls1_change_cipher_state,
  129. tls1_final_finish_mac,
  130. TLS1_FINISH_MAC_LENGTH,
  131. tls1_cert_verify_mac,
  132. TLS_MD_CLIENT_FINISH_CONST,TLS_MD_CLIENT_FINISH_CONST_SIZE,
  133. TLS_MD_SERVER_FINISH_CONST,TLS_MD_SERVER_FINISH_CONST_SIZE,
  134. tls1_alert_code,
  135. tls1_export_keying_material,
  136. 0,
  137. SSL3_HM_HEADER_LENGTH,
  138. ssl3_set_handshake_header,
  139. ssl3_handshake_write
  140. };
  141. SSL3_ENC_METHOD TLSv1_1_enc_data={
  142. tls1_enc,
  143. tls1_mac,
  144. tls1_setup_key_block,
  145. tls1_generate_master_secret,
  146. tls1_change_cipher_state,
  147. tls1_final_finish_mac,
  148. TLS1_FINISH_MAC_LENGTH,
  149. tls1_cert_verify_mac,
  150. TLS_MD_CLIENT_FINISH_CONST,TLS_MD_CLIENT_FINISH_CONST_SIZE,
  151. TLS_MD_SERVER_FINISH_CONST,TLS_MD_SERVER_FINISH_CONST_SIZE,
  152. tls1_alert_code,
  153. tls1_export_keying_material,
  154. SSL_ENC_FLAG_EXPLICIT_IV,
  155. SSL3_HM_HEADER_LENGTH,
  156. ssl3_set_handshake_header,
  157. ssl3_handshake_write
  158. };
  159. SSL3_ENC_METHOD TLSv1_2_enc_data={
  160. tls1_enc,
  161. tls1_mac,
  162. tls1_setup_key_block,
  163. tls1_generate_master_secret,
  164. tls1_change_cipher_state,
  165. tls1_final_finish_mac,
  166. TLS1_FINISH_MAC_LENGTH,
  167. tls1_cert_verify_mac,
  168. TLS_MD_CLIENT_FINISH_CONST,TLS_MD_CLIENT_FINISH_CONST_SIZE,
  169. TLS_MD_SERVER_FINISH_CONST,TLS_MD_SERVER_FINISH_CONST_SIZE,
  170. tls1_alert_code,
  171. tls1_export_keying_material,
  172. SSL_ENC_FLAG_EXPLICIT_IV|SSL_ENC_FLAG_SIGALGS|SSL_ENC_FLAG_SHA256_PRF
  173. |SSL_ENC_FLAG_TLS1_2_CIPHERS,
  174. SSL3_HM_HEADER_LENGTH,
  175. ssl3_set_handshake_header,
  176. ssl3_handshake_write
  177. };
  178. long tls1_default_timeout(void)
  179. {
  180. /* 2 hours, the 24 hours mentioned in the TLSv1 spec
  181. * is way too long for http, the cache would over fill */
  182. return(60*60*2);
  183. }
  184. int tls1_new(SSL *s)
  185. {
  186. if (!ssl3_new(s)) return(0);
  187. s->method->ssl_clear(s);
  188. return(1);
  189. }
  190. void tls1_free(SSL *s)
  191. {
  192. if (s->tlsext_session_ticket)
  193. {
  194. OPENSSL_free(s->tlsext_session_ticket);
  195. }
  196. ssl3_free(s);
  197. }
  198. void tls1_clear(SSL *s)
  199. {
  200. ssl3_clear(s);
  201. s->version = s->method->version;
  202. }
  203. static int compare_uint16_t(const void *p1, const void *p2)
  204. {
  205. uint16_t u1 = *((const uint16_t*)p1);
  206. uint16_t u2 = *((const uint16_t*)p2);
  207. if (u1 < u2)
  208. {
  209. return -1;
  210. }
  211. else if (u1 > u2)
  212. {
  213. return 1;
  214. }
  215. else
  216. {
  217. return 0;
  218. }
  219. }
  220. /* Per http://tools.ietf.org/html/rfc5246#section-7.4.1.4, there may not be more
  221. * than one extension of the same type in a ClientHello or ServerHello. This
  222. * function does an initial scan over the extensions block to filter those
  223. * out. */
  224. static int tls1_check_duplicate_extensions(const CBS *cbs)
  225. {
  226. CBS extensions = *cbs;
  227. size_t num_extensions = 0, i = 0;
  228. uint16_t *extension_types = NULL;
  229. int ret = 0;
  230. /* First pass: count the extensions. */
  231. while (CBS_len(&extensions) > 0)
  232. {
  233. uint16_t type;
  234. CBS extension;
  235. if (!CBS_get_u16(&extensions, &type) ||
  236. !CBS_get_u16_length_prefixed(&extensions, &extension))
  237. {
  238. goto done;
  239. }
  240. num_extensions++;
  241. }
  242. extension_types = (uint16_t*)OPENSSL_malloc(sizeof(uint16_t) * num_extensions);
  243. if (extension_types == NULL)
  244. {
  245. OPENSSL_PUT_ERROR(SSL, tls1_check_duplicate_extensions, ERR_R_MALLOC_FAILURE);
  246. goto done;
  247. }
  248. /* Second pass: gather the extension types. */
  249. extensions = *cbs;
  250. for (i = 0; i < num_extensions; i++)
  251. {
  252. CBS extension;
  253. if (!CBS_get_u16(&extensions, &extension_types[i]) ||
  254. !CBS_get_u16_length_prefixed(&extensions, &extension))
  255. {
  256. /* This should not happen. */
  257. goto done;
  258. }
  259. }
  260. assert(CBS_len(&extensions) == 0);
  261. /* Sort the extensions and make sure there are no duplicates. */
  262. qsort(extension_types, num_extensions, sizeof(uint16_t), compare_uint16_t);
  263. for (i = 1; i < num_extensions; i++)
  264. {
  265. if (extension_types[i-1] == extension_types[i])
  266. {
  267. goto done;
  268. }
  269. }
  270. ret = 1;
  271. done:
  272. if (extension_types)
  273. OPENSSL_free(extension_types);
  274. return ret;
  275. }
  276. char ssl_early_callback_init(struct ssl_early_callback_ctx *ctx)
  277. {
  278. CBS client_hello, session_id, cipher_suites, compression_methods, extensions;
  279. CBS_init(&client_hello, ctx->client_hello, ctx->client_hello_len);
  280. /* Skip client version. */
  281. if (!CBS_skip(&client_hello, 2))
  282. return 0;
  283. /* Skip client nonce. */
  284. if (!CBS_skip(&client_hello, 32))
  285. return 0;
  286. /* Extract session_id. */
  287. if (!CBS_get_u8_length_prefixed(&client_hello, &session_id))
  288. return 0;
  289. ctx->session_id = CBS_data(&session_id);
  290. ctx->session_id_len = CBS_len(&session_id);
  291. /* Skip past DTLS cookie */
  292. if (ctx->ssl->version == DTLS1_VERSION || ctx->ssl->version == DTLS1_BAD_VER)
  293. {
  294. CBS cookie;
  295. if (!CBS_get_u8_length_prefixed(&client_hello, &cookie))
  296. return 0;
  297. }
  298. /* Extract cipher_suites. */
  299. if (!CBS_get_u16_length_prefixed(&client_hello, &cipher_suites) ||
  300. CBS_len(&cipher_suites) < 2 ||
  301. (CBS_len(&cipher_suites) & 1) != 0)
  302. return 0;
  303. ctx->cipher_suites = CBS_data(&cipher_suites);
  304. ctx->cipher_suites_len = CBS_len(&cipher_suites);
  305. /* Extract compression_methods. */
  306. if (!CBS_get_u8_length_prefixed(&client_hello, &compression_methods) ||
  307. CBS_len(&compression_methods) < 1)
  308. return 0;
  309. ctx->compression_methods = CBS_data(&compression_methods);
  310. ctx->compression_methods_len = CBS_len(&compression_methods);
  311. /* If the ClientHello ends here then it's valid, but doesn't have any
  312. * extensions. (E.g. SSLv3.) */
  313. if (CBS_len(&client_hello) == 0)
  314. {
  315. ctx->extensions = NULL;
  316. ctx->extensions_len = 0;
  317. return 1;
  318. }
  319. /* Extract extensions and check it is valid. */
  320. if (!CBS_get_u16_length_prefixed(&client_hello, &extensions) ||
  321. !tls1_check_duplicate_extensions(&extensions) ||
  322. CBS_len(&client_hello) != 0)
  323. return 0;
  324. ctx->extensions = CBS_data(&extensions);
  325. ctx->extensions_len = CBS_len(&extensions);
  326. return 1;
  327. }
  328. char
  329. SSL_early_callback_ctx_extension_get(const struct ssl_early_callback_ctx *ctx,
  330. uint16_t extension_type,
  331. const unsigned char **out_data,
  332. size_t *out_len)
  333. {
  334. CBS extensions;
  335. CBS_init(&extensions, ctx->extensions, ctx->extensions_len);
  336. while (CBS_len(&extensions) != 0)
  337. {
  338. uint16_t type;
  339. CBS extension;
  340. /* Decode the next extension. */
  341. if (!CBS_get_u16(&extensions, &type) ||
  342. !CBS_get_u16_length_prefixed(&extensions, &extension))
  343. return 0;
  344. if (type == extension_type)
  345. {
  346. *out_data = CBS_data(&extension);
  347. *out_len = CBS_len(&extension);
  348. return 1;
  349. }
  350. }
  351. return 0;
  352. }
  353. #ifndef OPENSSL_NO_EC
  354. static int nid_list[] =
  355. {
  356. NID_sect163k1, /* sect163k1 (1) */
  357. NID_sect163r1, /* sect163r1 (2) */
  358. NID_sect163r2, /* sect163r2 (3) */
  359. NID_sect193r1, /* sect193r1 (4) */
  360. NID_sect193r2, /* sect193r2 (5) */
  361. NID_sect233k1, /* sect233k1 (6) */
  362. NID_sect233r1, /* sect233r1 (7) */
  363. NID_sect239k1, /* sect239k1 (8) */
  364. NID_sect283k1, /* sect283k1 (9) */
  365. NID_sect283r1, /* sect283r1 (10) */
  366. NID_sect409k1, /* sect409k1 (11) */
  367. NID_sect409r1, /* sect409r1 (12) */
  368. NID_sect571k1, /* sect571k1 (13) */
  369. NID_sect571r1, /* sect571r1 (14) */
  370. NID_secp160k1, /* secp160k1 (15) */
  371. NID_secp160r1, /* secp160r1 (16) */
  372. NID_secp160r2, /* secp160r2 (17) */
  373. NID_secp192k1, /* secp192k1 (18) */
  374. NID_X9_62_prime192v1, /* secp192r1 (19) */
  375. NID_secp224k1, /* secp224k1 (20) */
  376. NID_secp224r1, /* secp224r1 (21) */
  377. NID_secp256k1, /* secp256k1 (22) */
  378. NID_X9_62_prime256v1, /* secp256r1 (23) */
  379. NID_secp384r1, /* secp384r1 (24) */
  380. NID_secp521r1, /* secp521r1 (25) */
  381. NID_brainpoolP256r1, /* brainpoolP256r1 (26) */
  382. NID_brainpoolP384r1, /* brainpoolP384r1 (27) */
  383. NID_brainpoolP512r1 /* brainpool512r1 (28) */
  384. };
  385. static const uint8_t ecformats_default[] =
  386. {
  387. TLSEXT_ECPOINTFORMAT_uncompressed,
  388. };
  389. static const uint16_t eccurves_default[] =
  390. {
  391. 23, /* secp256r1 (23) */
  392. 24, /* secp384r1 (24) */
  393. 25, /* secp521r1 (25) */
  394. };
  395. static const uint16_t suiteb_curves[] =
  396. {
  397. TLSEXT_curve_P_256,
  398. TLSEXT_curve_P_384,
  399. };
  400. int tls1_ec_curve_id2nid(uint16_t curve_id)
  401. {
  402. /* ECC curves from draft-ietf-tls-ecc-12.txt (Oct. 17, 2005) */
  403. if (curve_id < 1 || curve_id > sizeof(nid_list)/sizeof(nid_list[0]))
  404. return OBJ_undef;
  405. return nid_list[curve_id-1];
  406. }
  407. uint16_t tls1_ec_nid2curve_id(int nid)
  408. {
  409. size_t i;
  410. for (i = 0; i < sizeof(nid_list)/sizeof(nid_list[0]); i++)
  411. {
  412. /* nid_list[i] stores the NID corresponding to curve ID i+1. */
  413. if (nid == nid_list[i])
  414. return i + 1;
  415. }
  416. /* Use 0 for non-existent curve ID. Note: this assumes that curve ID 0
  417. * will never be allocated. */
  418. return 0;
  419. }
  420. /* tls1_get_curvelist sets |*out_curve_ids| and |*out_curve_ids_len| to the list
  421. * of allowed curve IDs. If |get_client_curves| is non-zero, return the client
  422. * curve list. Otherwise, return the preferred list. */
  423. static void tls1_get_curvelist(SSL *s, int get_client_curves,
  424. const uint16_t **out_curve_ids, size_t *out_curve_ids_len)
  425. {
  426. if (get_client_curves)
  427. {
  428. *out_curve_ids = s->session->tlsext_ellipticcurvelist;
  429. *out_curve_ids_len = s->session->tlsext_ellipticcurvelist_length;
  430. return;
  431. }
  432. /* For Suite B mode only include P-256, P-384 */
  433. switch (tls1_suiteb(s))
  434. {
  435. case SSL_CERT_FLAG_SUITEB_128_LOS:
  436. *out_curve_ids = suiteb_curves;
  437. *out_curve_ids_len = sizeof(suiteb_curves);
  438. break;
  439. case SSL_CERT_FLAG_SUITEB_128_LOS_ONLY:
  440. *out_curve_ids = suiteb_curves;
  441. *out_curve_ids_len = 1;
  442. break;
  443. case SSL_CERT_FLAG_SUITEB_192_LOS:
  444. *out_curve_ids = suiteb_curves + 1;
  445. *out_curve_ids_len = 1;
  446. break;
  447. default:
  448. *out_curve_ids = s->tlsext_ellipticcurvelist;
  449. *out_curve_ids_len = s->tlsext_ellipticcurvelist_length;
  450. }
  451. if (!*out_curve_ids)
  452. {
  453. *out_curve_ids = eccurves_default;
  454. *out_curve_ids_len = sizeof(eccurves_default);
  455. }
  456. }
  457. int tls1_check_curve(SSL *s, CBS *cbs, uint16_t *out_curve_id)
  458. {
  459. uint8_t curve_type;
  460. uint16_t curve_id;
  461. const uint16_t *curves;
  462. size_t curves_len, i;
  463. /* Only support named curves. */
  464. if (!CBS_get_u8(cbs, &curve_type) ||
  465. curve_type != NAMED_CURVE_TYPE ||
  466. !CBS_get_u16(cbs, &curve_id))
  467. return 0;
  468. /* Check curve matches Suite B preferences */
  469. if (tls1_suiteb(s))
  470. {
  471. unsigned long cid = s->s3->tmp.new_cipher->id;
  472. if (cid == TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256)
  473. {
  474. if (curve_id != TLSEXT_curve_P_256)
  475. return 0;
  476. }
  477. else if (cid == TLS1_CK_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384)
  478. {
  479. if (curve_id != TLSEXT_curve_P_384)
  480. return 0;
  481. }
  482. else /* Should never happen */
  483. return 0;
  484. }
  485. tls1_get_curvelist(s, 0, &curves, &curves_len);
  486. for (i = 0; i < curves_len; i++)
  487. {
  488. if (curve_id == curves[i])
  489. {
  490. *out_curve_id = curve_id;
  491. return 1;
  492. }
  493. }
  494. return 0;
  495. }
  496. int tls1_get_shared_curve(SSL *s)
  497. {
  498. const uint16_t *pref, *supp;
  499. size_t preflen, supplen, i, j;
  500. /* Can't do anything on client side */
  501. if (s->server == 0)
  502. return NID_undef;
  503. if (tls1_suiteb(s))
  504. {
  505. /* For Suite B ciphersuite determines curve: we
  506. * already know these are acceptable due to previous
  507. * checks.
  508. */
  509. unsigned long cid = s->s3->tmp.new_cipher->id;
  510. if (cid == TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256)
  511. return NID_X9_62_prime256v1; /* P-256 */
  512. if (cid == TLS1_CK_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384)
  513. return NID_secp384r1; /* P-384 */
  514. /* Should never happen */
  515. return NID_undef;
  516. }
  517. /* If not Suite B just return first preference shared curve */
  518. tls1_get_curvelist(s, !!(s->options & SSL_OP_CIPHER_SERVER_PREFERENCE),
  519. &supp, &supplen);
  520. tls1_get_curvelist(s, !(s->options & SSL_OP_CIPHER_SERVER_PREFERENCE),
  521. &pref, &preflen);
  522. for (i = 0; i < preflen; i++)
  523. {
  524. for (j = 0; j < supplen; j++)
  525. {
  526. if (pref[i] == supp[j])
  527. return tls1_ec_curve_id2nid(pref[i]);
  528. }
  529. }
  530. return NID_undef;
  531. }
  532. /* NOTE: tls1_ec_curve_id2nid and tls1_set_curves assume that
  533. *
  534. * (a) 0 is not a valid curve ID.
  535. *
  536. * (b) The largest curve ID is 31.
  537. *
  538. * Those implementations must be revised before adding support for curve IDs
  539. * that break these assumptions. */
  540. OPENSSL_COMPILE_ASSERT(
  541. (sizeof(nid_list) / sizeof(nid_list[0])) < 32, small_curve_ids);
  542. int tls1_set_curves(uint16_t **out_curve_ids, size_t *out_curve_ids_len,
  543. const int *curves, size_t ncurves)
  544. {
  545. uint16_t *curve_ids;
  546. size_t i;
  547. /* Bitmap of curves included to detect duplicates: only works
  548. * while curve ids < 32
  549. */
  550. uint32_t dup_list = 0;
  551. curve_ids = (uint16_t*)OPENSSL_malloc(ncurves * sizeof(uint16_t));
  552. if (!curve_ids)
  553. return 0;
  554. for (i = 0; i < ncurves; i++)
  555. {
  556. uint32_t idmask;
  557. uint16_t id;
  558. id = tls1_ec_nid2curve_id(curves[i]);
  559. idmask = ((uint32_t)1) << id;
  560. if (!id || (dup_list & idmask))
  561. {
  562. OPENSSL_free(curve_ids);
  563. return 0;
  564. }
  565. dup_list |= idmask;
  566. curve_ids[i] = id;
  567. }
  568. if (*out_curve_ids)
  569. OPENSSL_free(*out_curve_ids);
  570. *out_curve_ids = curve_ids;
  571. *out_curve_ids_len = ncurves;
  572. return 1;
  573. }
  574. /* tls1_curve_params_from_ec_key sets |*out_curve_id| and |*out_comp_id| to the
  575. * TLS curve ID and point format, respectively, for |ec|. It returns one on
  576. * success and zero on failure. */
  577. static int tls1_curve_params_from_ec_key(uint16_t *out_curve_id, uint8_t *out_comp_id, EC_KEY *ec)
  578. {
  579. int nid;
  580. uint16_t id;
  581. const EC_GROUP *grp;
  582. if (!ec)
  583. return 0;
  584. grp = EC_KEY_get0_group(ec);
  585. if (!grp)
  586. return 0;
  587. /* Determine curve ID */
  588. nid = EC_GROUP_get_curve_name(grp);
  589. id = tls1_ec_nid2curve_id(nid);
  590. if (!id)
  591. return 0;
  592. /* Set the named curve ID. Arbitrary explicit curves are not
  593. * supported. */
  594. *out_curve_id = id;
  595. if (out_comp_id)
  596. {
  597. if (EC_KEY_get0_public_key(ec) == NULL)
  598. return 0;
  599. if (EC_KEY_get_conv_form(ec) == POINT_CONVERSION_COMPRESSED)
  600. *out_comp_id = TLSEXT_ECPOINTFORMAT_ansiX962_compressed_prime;
  601. else
  602. *out_comp_id = TLSEXT_ECPOINTFORMAT_uncompressed;
  603. }
  604. return 1;
  605. }
  606. /* Check an EC key is compatible with extensions */
  607. static int tls1_check_ec_key(SSL *s,
  608. const uint16_t *curve_id, const uint8_t *comp_id)
  609. {
  610. const uint16_t *curves;
  611. size_t curves_len, i;
  612. int j;
  613. /* If point formats extension present check it, otherwise everything
  614. * is supported (see RFC4492).
  615. */
  616. if (comp_id && s->session->tlsext_ecpointformatlist)
  617. {
  618. uint8_t *p = s->session->tlsext_ecpointformatlist;
  619. size_t plen = s->session->tlsext_ecpointformatlist_length;
  620. for (i = 0; i < plen; i++)
  621. {
  622. if (*comp_id == p[i])
  623. break;
  624. }
  625. if (i == plen)
  626. return 0;
  627. }
  628. if (!curve_id)
  629. return 1;
  630. /* Check curve is consistent with client and server preferences */
  631. for (j = 0; j <= 1; j++)
  632. {
  633. tls1_get_curvelist(s, j, &curves, &curves_len);
  634. for (i = 0; i < curves_len; i++)
  635. {
  636. if (curves[i] == *curve_id)
  637. break;
  638. }
  639. if (i == curves_len)
  640. return 0;
  641. /* For clients can only check sent curve list */
  642. if (!s->server)
  643. return 1;
  644. }
  645. return 1;
  646. }
  647. static void tls1_get_formatlist(SSL *s, const unsigned char **pformats,
  648. size_t *pformatslen)
  649. {
  650. /* If we have a custom point format list use it otherwise
  651. * use default */
  652. if (s->tlsext_ecpointformatlist)
  653. {
  654. *pformats = s->tlsext_ecpointformatlist;
  655. *pformatslen = s->tlsext_ecpointformatlist_length;
  656. }
  657. else
  658. {
  659. *pformats = ecformats_default;
  660. /* For Suite B we don't support char2 fields */
  661. if (tls1_suiteb(s))
  662. *pformatslen = sizeof(ecformats_default) - 1;
  663. else
  664. *pformatslen = sizeof(ecformats_default);
  665. }
  666. }
  667. /* Check cert parameters compatible with extensions: currently just checks
  668. * EC certificates have compatible curves and compression.
  669. */
  670. static int tls1_check_cert_param(SSL *s, X509 *x, int set_ee_md)
  671. {
  672. uint8_t comp_id;
  673. uint16_t curve_id;
  674. EVP_PKEY *pkey;
  675. int rv;
  676. pkey = X509_get_pubkey(x);
  677. if (!pkey)
  678. return 0;
  679. /* If not EC nothing to do */
  680. if (pkey->type != EVP_PKEY_EC)
  681. {
  682. EVP_PKEY_free(pkey);
  683. return 1;
  684. }
  685. rv = tls1_curve_params_from_ec_key(&curve_id, &comp_id, pkey->pkey.ec);
  686. EVP_PKEY_free(pkey);
  687. if (!rv)
  688. return 0;
  689. /* Can't check curve_id for client certs as we don't have a
  690. * supported curves extension.
  691. */
  692. rv = tls1_check_ec_key(s, s->server ? &curve_id : NULL, &comp_id);
  693. if (!rv)
  694. return 0;
  695. /* Special case for suite B. We *MUST* sign using SHA256+P-256 or
  696. * SHA384+P-384, adjust digest if necessary.
  697. */
  698. if (set_ee_md && tls1_suiteb(s))
  699. {
  700. int check_md;
  701. size_t i;
  702. CERT *c = s->cert;
  703. /* Check to see we have necessary signing algorithm */
  704. if (curve_id == TLSEXT_curve_P_256)
  705. check_md = NID_ecdsa_with_SHA256;
  706. else if (curve_id == TLSEXT_curve_P_384)
  707. check_md = NID_ecdsa_with_SHA384;
  708. else
  709. return 0; /* Should never happen */
  710. for (i = 0; i < c->shared_sigalgslen; i++)
  711. if (check_md == c->shared_sigalgs[i].signandhash_nid)
  712. break;
  713. if (i == c->shared_sigalgslen)
  714. return 0;
  715. if (set_ee_md == 2)
  716. {
  717. if (check_md == NID_ecdsa_with_SHA256)
  718. c->pkeys[SSL_PKEY_ECC].digest = EVP_sha256();
  719. else
  720. c->pkeys[SSL_PKEY_ECC].digest = EVP_sha384();
  721. }
  722. }
  723. return rv;
  724. }
  725. /* Check EC temporary key is compatible with client extensions */
  726. int tls1_check_ec_tmp_key(SSL *s, unsigned long cid)
  727. {
  728. uint16_t curve_id;
  729. EC_KEY *ec = s->cert->ecdh_tmp;
  730. #ifdef OPENSSL_SSL_DEBUG_BROKEN_PROTOCOL
  731. /* Allow any curve: not just those peer supports */
  732. if (s->cert->cert_flags & SSL_CERT_FLAG_BROKEN_PROTOCOL)
  733. return 1;
  734. #endif
  735. /* If Suite B, AES128 MUST use P-256 and AES256 MUST use P-384,
  736. * no other curves permitted.
  737. */
  738. if (tls1_suiteb(s))
  739. {
  740. /* Curve to check determined by ciphersuite */
  741. if (cid == TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256)
  742. curve_id = TLSEXT_curve_P_256;
  743. else if (cid == TLS1_CK_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384)
  744. curve_id = TLSEXT_curve_P_384;
  745. else
  746. return 0;
  747. /* Check this curve is acceptable */
  748. if (!tls1_check_ec_key(s, &curve_id, NULL))
  749. return 0;
  750. /* If auto or setting curve from callback assume OK */
  751. if (s->cert->ecdh_tmp_auto || s->cert->ecdh_tmp_cb)
  752. return 1;
  753. /* Otherwise check curve is acceptable */
  754. else
  755. {
  756. uint16_t curve_tmp;
  757. if (!ec)
  758. return 0;
  759. if (!tls1_curve_params_from_ec_key(&curve_tmp, NULL, ec))
  760. return 0;
  761. if (curve_tmp == curve_id)
  762. return 1;
  763. return 0;
  764. }
  765. }
  766. if (s->cert->ecdh_tmp_auto)
  767. {
  768. /* Need a shared curve */
  769. return tls1_get_shared_curve(s) != NID_undef;
  770. }
  771. if (!ec)
  772. {
  773. if (s->cert->ecdh_tmp_cb)
  774. return 1;
  775. else
  776. return 0;
  777. }
  778. if (!tls1_curve_params_from_ec_key(&curve_id, NULL, ec))
  779. return 0;
  780. /* Set this to allow use of invalid curves for testing */
  781. #if 0
  782. return 1;
  783. #else
  784. return tls1_check_ec_key(s, &curve_id, NULL);
  785. #endif
  786. }
  787. #else
  788. static int tls1_check_cert_param(SSL *s, X509 *x, int set_ee_md)
  789. {
  790. return 1;
  791. }
  792. #endif /* OPENSSL_NO_EC */
  793. /* List of supported signature algorithms and hashes. Should make this
  794. * customisable at some point, for now include everything we support.
  795. */
  796. #define tlsext_sigalg_rsa(md) md, TLSEXT_signature_rsa,
  797. #ifdef OPENSSL_NO_DSA
  798. #define tlsext_sigalg_dsa(md) /* */
  799. #else
  800. #define tlsext_sigalg_dsa(md) md, TLSEXT_signature_dsa,
  801. #endif
  802. #ifdef OPENSSL_NO_ECDSA
  803. #define tlsext_sigalg_ecdsa(md) /* */
  804. #else
  805. #define tlsext_sigalg_ecdsa(md) md, TLSEXT_signature_ecdsa,
  806. #endif
  807. #define tlsext_sigalg(md) \
  808. tlsext_sigalg_rsa(md) \
  809. tlsext_sigalg_dsa(md) \
  810. tlsext_sigalg_ecdsa(md)
  811. static unsigned char tls12_sigalgs[] = {
  812. #ifndef OPENSSL_NO_SHA512
  813. tlsext_sigalg(TLSEXT_hash_sha512)
  814. tlsext_sigalg(TLSEXT_hash_sha384)
  815. #endif
  816. #ifndef OPENSSL_NO_SHA256
  817. tlsext_sigalg(TLSEXT_hash_sha256)
  818. tlsext_sigalg(TLSEXT_hash_sha224)
  819. #endif
  820. #ifndef OPENSSL_NO_SHA
  821. tlsext_sigalg(TLSEXT_hash_sha1)
  822. #endif
  823. };
  824. #ifndef OPENSSL_NO_ECDSA
  825. static unsigned char suiteb_sigalgs[] = {
  826. tlsext_sigalg_ecdsa(TLSEXT_hash_sha256)
  827. tlsext_sigalg_ecdsa(TLSEXT_hash_sha384)
  828. };
  829. #endif
  830. size_t tls12_get_psigalgs(SSL *s, const unsigned char **psigs)
  831. {
  832. /* If Suite B mode use Suite B sigalgs only, ignore any other
  833. * preferences.
  834. */
  835. #ifndef OPENSSL_NO_EC
  836. switch (tls1_suiteb(s))
  837. {
  838. case SSL_CERT_FLAG_SUITEB_128_LOS:
  839. *psigs = suiteb_sigalgs;
  840. return sizeof(suiteb_sigalgs);
  841. case SSL_CERT_FLAG_SUITEB_128_LOS_ONLY:
  842. *psigs = suiteb_sigalgs;
  843. return 2;
  844. case SSL_CERT_FLAG_SUITEB_192_LOS:
  845. *psigs = suiteb_sigalgs + 2;
  846. return 2;
  847. }
  848. #endif
  849. /* If server use client authentication sigalgs if not NULL */
  850. if (s->server && s->cert->client_sigalgs)
  851. {
  852. *psigs = s->cert->client_sigalgs;
  853. return s->cert->client_sigalgslen;
  854. }
  855. else if (s->cert->conf_sigalgs)
  856. {
  857. *psigs = s->cert->conf_sigalgs;
  858. return s->cert->conf_sigalgslen;
  859. }
  860. else
  861. {
  862. *psigs = tls12_sigalgs;
  863. return sizeof(tls12_sigalgs);
  864. }
  865. }
  866. /* tls12_check_peer_sigalg parses a SignatureAndHashAlgorithm out of
  867. * |cbs|. It checks it is consistent with |s|'s sent supported
  868. * signature algorithms and, if so, writes the relevant digest into
  869. * |*out_md| and returns 1. Otherwise it returns 0 and writes an alert
  870. * into |*out_alert|.
  871. */
  872. int tls12_check_peer_sigalg(const EVP_MD **out_md, int *out_alert,
  873. SSL *s, CBS *cbs, EVP_PKEY *pkey)
  874. {
  875. const unsigned char *sent_sigs;
  876. size_t sent_sigslen, i;
  877. int sigalg = tls12_get_sigid(pkey);
  878. uint8_t hash, signature;
  879. /* Should never happen */
  880. if (sigalg == -1)
  881. {
  882. OPENSSL_PUT_ERROR(SSL, tls12_check_peer_sigalg, ERR_R_INTERNAL_ERROR);
  883. *out_alert = SSL_AD_INTERNAL_ERROR;
  884. return 0;
  885. }
  886. if (!CBS_get_u8(cbs, &hash) ||
  887. !CBS_get_u8(cbs, &signature))
  888. {
  889. OPENSSL_PUT_ERROR(SSL, tls12_check_peer_sigalg, SSL_R_DECODE_ERROR);
  890. *out_alert = SSL_AD_DECODE_ERROR;
  891. return 0;
  892. }
  893. /* Check key type is consistent with signature */
  894. if (sigalg != signature)
  895. {
  896. OPENSSL_PUT_ERROR(SSL, tls12_check_peer_sigalg, SSL_R_WRONG_SIGNATURE_TYPE);
  897. *out_alert = SSL_AD_ILLEGAL_PARAMETER;
  898. return 0;
  899. }
  900. #ifndef OPENSSL_NO_EC
  901. if (pkey->type == EVP_PKEY_EC)
  902. {
  903. uint16_t curve_id;
  904. uint8_t comp_id;
  905. /* Check compression and curve matches extensions */
  906. if (!tls1_curve_params_from_ec_key(&curve_id, &comp_id, pkey->pkey.ec))
  907. {
  908. *out_alert = SSL_AD_INTERNAL_ERROR;
  909. return 0;
  910. }
  911. if (!s->server && !tls1_check_ec_key(s, &curve_id, &comp_id))
  912. {
  913. OPENSSL_PUT_ERROR(SSL, tls12_check_peer_sigalg, SSL_R_WRONG_CURVE);
  914. *out_alert = SSL_AD_ILLEGAL_PARAMETER;
  915. return 0;
  916. }
  917. /* If Suite B only P-384+SHA384 or P-256+SHA-256 allowed */
  918. if (tls1_suiteb(s))
  919. {
  920. if (curve_id == TLSEXT_curve_P_256)
  921. {
  922. if (hash != TLSEXT_hash_sha256)
  923. {
  924. OPENSSL_PUT_ERROR(SSL, tls12_check_peer_sigalg, SSL_R_ILLEGAL_SUITEB_DIGEST);
  925. *out_alert = SSL_AD_ILLEGAL_PARAMETER;
  926. return 0;
  927. }
  928. }
  929. else if (curve_id == TLSEXT_curve_P_384)
  930. {
  931. if (hash != TLSEXT_hash_sha384)
  932. {
  933. OPENSSL_PUT_ERROR(SSL, tls12_check_peer_sigalg, SSL_R_ILLEGAL_SUITEB_DIGEST);
  934. *out_alert = SSL_AD_ILLEGAL_PARAMETER;
  935. return 0;
  936. }
  937. }
  938. else
  939. {
  940. *out_alert = SSL_AD_ILLEGAL_PARAMETER;
  941. return 0;
  942. }
  943. }
  944. }
  945. else if (tls1_suiteb(s))
  946. {
  947. *out_alert = SSL_AD_ILLEGAL_PARAMETER;
  948. return 0;
  949. }
  950. #endif
  951. /* Check signature matches a type we sent */
  952. sent_sigslen = tls12_get_psigalgs(s, &sent_sigs);
  953. for (i = 0; i < sent_sigslen; i+=2, sent_sigs+=2)
  954. {
  955. if (hash == sent_sigs[0] && signature == sent_sigs[1])
  956. break;
  957. }
  958. /* Allow fallback to SHA1 if not strict mode */
  959. if (i == sent_sigslen && (hash != TLSEXT_hash_sha1 || s->cert->cert_flags & SSL_CERT_FLAGS_CHECK_TLS_STRICT))
  960. {
  961. OPENSSL_PUT_ERROR(SSL, tls12_check_peer_sigalg, SSL_R_WRONG_SIGNATURE_TYPE);
  962. *out_alert = SSL_AD_ILLEGAL_PARAMETER;
  963. return 0;
  964. }
  965. *out_md = tls12_get_hash(hash);
  966. if (*out_md == NULL)
  967. {
  968. OPENSSL_PUT_ERROR(SSL, tls12_check_peer_sigalg, SSL_R_UNKNOWN_DIGEST);
  969. *out_alert = SSL_AD_ILLEGAL_PARAMETER;
  970. return 0;
  971. }
  972. /* Store the digest used so applications can retrieve it if they
  973. * wish.
  974. */
  975. if (s->session && s->session->sess_cert)
  976. s->session->sess_cert->peer_key->digest = *out_md;
  977. return 1;
  978. }
  979. /* Get a mask of disabled algorithms: an algorithm is disabled
  980. * if it isn't supported or doesn't appear in supported signature
  981. * algorithms. Unlike ssl_cipher_get_disabled this applies to a specific
  982. * session and not global settings.
  983. *
  984. */
  985. void ssl_set_client_disabled(SSL *s)
  986. {
  987. CERT *c = s->cert;
  988. const unsigned char *sigalgs;
  989. size_t i, sigalgslen;
  990. int have_rsa = 0, have_dsa = 0, have_ecdsa = 0;
  991. c->mask_a = 0;
  992. c->mask_k = 0;
  993. /* Don't allow TLS 1.2 only ciphers if we don't suppport them */
  994. if (!SSL_CLIENT_USE_TLS1_2_CIPHERS(s))
  995. c->mask_ssl = SSL_TLSV1_2;
  996. else
  997. c->mask_ssl = 0;
  998. /* Now go through all signature algorithms seeing if we support
  999. * any for RSA, DSA, ECDSA. Do this for all versions not just
  1000. * TLS 1.2.
  1001. */
  1002. sigalgslen = tls12_get_psigalgs(s, &sigalgs);
  1003. for (i = 0; i < sigalgslen; i += 2, sigalgs += 2)
  1004. {
  1005. switch(sigalgs[1])
  1006. {
  1007. case TLSEXT_signature_rsa:
  1008. have_rsa = 1;
  1009. break;
  1010. #ifndef OPENSSL_NO_DSA
  1011. case TLSEXT_signature_dsa:
  1012. have_dsa = 1;
  1013. break;
  1014. #endif
  1015. #ifndef OPENSSL_NO_ECDSA
  1016. case TLSEXT_signature_ecdsa:
  1017. have_ecdsa = 1;
  1018. break;
  1019. #endif
  1020. }
  1021. }
  1022. /* Disable auth and static DH if we don't include any appropriate
  1023. * signature algorithms.
  1024. */
  1025. if (!have_rsa)
  1026. {
  1027. c->mask_a |= SSL_aRSA;
  1028. c->mask_k |= SSL_kDHr|SSL_kECDHr;
  1029. }
  1030. if (!have_dsa)
  1031. {
  1032. c->mask_a |= SSL_aDSS;
  1033. c->mask_k |= SSL_kDHd;
  1034. }
  1035. if (!have_ecdsa)
  1036. {
  1037. c->mask_a |= SSL_aECDSA;
  1038. c->mask_k |= SSL_kECDHe;
  1039. }
  1040. #ifndef OPENSSL_NO_PSK
  1041. /* with PSK there must be client callback set */
  1042. if (!s->psk_client_callback)
  1043. {
  1044. c->mask_a |= SSL_aPSK;
  1045. c->mask_k |= SSL_kPSK;
  1046. }
  1047. #endif /* OPENSSL_NO_PSK */
  1048. c->valid = 1;
  1049. }
  1050. /* header_len is the length of the ClientHello header written so far, used to
  1051. * compute padding. It does not include the record header. Pass 0 if no padding
  1052. * is to be done. */
  1053. unsigned char *ssl_add_clienthello_tlsext(SSL *s, unsigned char *buf, unsigned char *limit, size_t header_len)
  1054. {
  1055. int extdatalen=0;
  1056. unsigned char *ret = buf;
  1057. unsigned char *orig = buf;
  1058. #ifndef OPENSSL_NO_EC
  1059. /* See if we support any ECC ciphersuites */
  1060. int using_ecc = 0;
  1061. if (s->version >= TLS1_VERSION || SSL_IS_DTLS(s))
  1062. {
  1063. int i;
  1064. unsigned long alg_k, alg_a;
  1065. STACK_OF(SSL_CIPHER) *cipher_stack = SSL_get_ciphers(s);
  1066. for (i = 0; i < sk_SSL_CIPHER_num(cipher_stack); i++)
  1067. {
  1068. SSL_CIPHER *c = sk_SSL_CIPHER_value(cipher_stack, i);
  1069. alg_k = c->algorithm_mkey;
  1070. alg_a = c->algorithm_auth;
  1071. if ((alg_k & (SSL_kEECDH|SSL_kECDHr|SSL_kECDHe)
  1072. || (alg_a & SSL_aECDSA)))
  1073. {
  1074. using_ecc = 1;
  1075. break;
  1076. }
  1077. }
  1078. }
  1079. #endif
  1080. /* don't add extensions for SSLv3 unless doing secure renegotiation */
  1081. if (s->client_version == SSL3_VERSION
  1082. && !s->s3->send_connection_binding)
  1083. return orig;
  1084. ret+=2;
  1085. if (ret>=limit) return NULL; /* this really never occurs, but ... */
  1086. if (s->tlsext_hostname != NULL)
  1087. {
  1088. /* Add TLS extension servername to the Client Hello message */
  1089. unsigned long size_str;
  1090. long lenmax;
  1091. /* check for enough space.
  1092. 4 for the servername type and entension length
  1093. 2 for servernamelist length
  1094. 1 for the hostname type
  1095. 2 for hostname length
  1096. + hostname length
  1097. */
  1098. if ((lenmax = limit - ret - 9) < 0
  1099. || (size_str = strlen(s->tlsext_hostname)) > (unsigned long)lenmax)
  1100. return NULL;
  1101. /* extension type and length */
  1102. s2n(TLSEXT_TYPE_server_name,ret);
  1103. s2n(size_str+5,ret);
  1104. /* length of servername list */
  1105. s2n(size_str+3,ret);
  1106. /* hostname type, length and hostname */
  1107. *(ret++) = (unsigned char) TLSEXT_NAMETYPE_host_name;
  1108. s2n(size_str,ret);
  1109. memcpy(ret, s->tlsext_hostname, size_str);
  1110. ret+=size_str;
  1111. }
  1112. /* Add RI if renegotiating */
  1113. if (s->renegotiate)
  1114. {
  1115. int el;
  1116. if(!ssl_add_clienthello_renegotiate_ext(s, 0, &el, 0))
  1117. {
  1118. OPENSSL_PUT_ERROR(SSL, ssl_add_clienthello_tlsext, ERR_R_INTERNAL_ERROR);
  1119. return NULL;
  1120. }
  1121. if((limit - ret - 4 - el) < 0) return NULL;
  1122. s2n(TLSEXT_TYPE_renegotiate,ret);
  1123. s2n(el,ret);
  1124. if(!ssl_add_clienthello_renegotiate_ext(s, ret, &el, el))
  1125. {
  1126. OPENSSL_PUT_ERROR(SSL, ssl_add_clienthello_tlsext, ERR_R_INTERNAL_ERROR);
  1127. return NULL;
  1128. }
  1129. ret += el;
  1130. }
  1131. if (!(SSL_get_options(s) & SSL_OP_NO_TICKET))
  1132. {
  1133. int ticklen;
  1134. if (!s->new_session && s->session && s->session->tlsext_tick)
  1135. ticklen = s->session->tlsext_ticklen;
  1136. else if (s->session && s->tlsext_session_ticket &&
  1137. s->tlsext_session_ticket->data)
  1138. {
  1139. ticklen = s->tlsext_session_ticket->length;
  1140. s->session->tlsext_tick = OPENSSL_malloc(ticklen);
  1141. if (!s->session->tlsext_tick)
  1142. return NULL;
  1143. memcpy(s->session->tlsext_tick,
  1144. s->tlsext_session_ticket->data,
  1145. ticklen);
  1146. s->session->tlsext_ticklen = ticklen;
  1147. }
  1148. else
  1149. ticklen = 0;
  1150. if (ticklen == 0 && s->tlsext_session_ticket &&
  1151. s->tlsext_session_ticket->data == NULL)
  1152. goto skip_ext;
  1153. /* Check for enough room 2 for extension type, 2 for len
  1154. * rest for ticket
  1155. */
  1156. if ((long)(limit - ret - 4 - ticklen) < 0) return NULL;
  1157. s2n(TLSEXT_TYPE_session_ticket,ret);
  1158. s2n(ticklen,ret);
  1159. if (ticklen)
  1160. {
  1161. memcpy(ret, s->session->tlsext_tick, ticklen);
  1162. ret += ticklen;
  1163. }
  1164. }
  1165. skip_ext:
  1166. if (SSL_USE_SIGALGS(s))
  1167. {
  1168. size_t salglen;
  1169. const unsigned char *salg;
  1170. salglen = tls12_get_psigalgs(s, &salg);
  1171. if ((size_t)(limit - ret) < salglen + 6)
  1172. return NULL;
  1173. s2n(TLSEXT_TYPE_signature_algorithms,ret);
  1174. s2n(salglen + 2, ret);
  1175. s2n(salglen, ret);
  1176. memcpy(ret, salg, salglen);
  1177. ret += salglen;
  1178. }
  1179. /* TODO(fork): we probably want OCSP stapling, but it currently pulls in a lot of code. */
  1180. #if 0
  1181. if (s->tlsext_status_type == TLSEXT_STATUSTYPE_ocsp)
  1182. {
  1183. int i;
  1184. long extlen, idlen, itmp;
  1185. OCSP_RESPID *id;
  1186. idlen = 0;
  1187. for (i = 0; i < sk_OCSP_RESPID_num(s->tlsext_ocsp_ids); i++)
  1188. {
  1189. id = sk_OCSP_RESPID_value(s->tlsext_ocsp_ids, i);
  1190. itmp = i2d_OCSP_RESPID(id, NULL);
  1191. if (itmp <= 0)
  1192. return NULL;
  1193. idlen += itmp + 2;
  1194. }
  1195. if (s->tlsext_ocsp_exts)
  1196. {
  1197. extlen = i2d_X509_EXTENSIONS(s->tlsext_ocsp_exts, NULL);
  1198. if (extlen < 0)
  1199. return NULL;
  1200. }
  1201. else
  1202. extlen = 0;
  1203. if ((long)(limit - ret - 7 - extlen - idlen) < 0) return NULL;
  1204. s2n(TLSEXT_TYPE_status_request, ret);
  1205. if (extlen + idlen > 0xFFF0)
  1206. return NULL;
  1207. s2n(extlen + idlen + 5, ret);
  1208. *(ret++) = TLSEXT_STATUSTYPE_ocsp;
  1209. s2n(idlen, ret);
  1210. for (i = 0; i < sk_OCSP_RESPID_num(s->tlsext_ocsp_ids); i++)
  1211. {
  1212. /* save position of id len */
  1213. unsigned char *q = ret;
  1214. id = sk_OCSP_RESPID_value(s->tlsext_ocsp_ids, i);
  1215. /* skip over id len */
  1216. ret += 2;
  1217. itmp = i2d_OCSP_RESPID(id, &ret);
  1218. /* write id len */
  1219. s2n(itmp, q);
  1220. }
  1221. s2n(extlen, ret);
  1222. if (extlen > 0)
  1223. i2d_X509_EXTENSIONS(s->tlsext_ocsp_exts, &ret);
  1224. }
  1225. #endif
  1226. #ifndef OPENSSL_NO_NEXTPROTONEG
  1227. if (s->ctx->next_proto_select_cb && !s->s3->tmp.finish_md_len)
  1228. {
  1229. /* The client advertises an emtpy extension to indicate its
  1230. * support for Next Protocol Negotiation */
  1231. if (limit - ret - 4 < 0)
  1232. return NULL;
  1233. s2n(TLSEXT_TYPE_next_proto_neg,ret);
  1234. s2n(0,ret);
  1235. }
  1236. #endif
  1237. if (s->alpn_client_proto_list && !s->s3->tmp.finish_md_len)
  1238. {
  1239. if ((size_t)(limit - ret) < 6 + s->alpn_client_proto_list_len)
  1240. return NULL;
  1241. s2n(TLSEXT_TYPE_application_layer_protocol_negotiation,ret);
  1242. s2n(2 + s->alpn_client_proto_list_len,ret);
  1243. s2n(s->alpn_client_proto_list_len,ret);
  1244. memcpy(ret, s->alpn_client_proto_list,
  1245. s->alpn_client_proto_list_len);
  1246. ret += s->alpn_client_proto_list_len;
  1247. }
  1248. if (s->tlsext_channel_id_enabled)
  1249. {
  1250. /* The client advertises an emtpy extension to indicate its
  1251. * support for Channel ID. */
  1252. if (limit - ret - 4 < 0)
  1253. return NULL;
  1254. if (s->ctx->tlsext_channel_id_enabled_new)
  1255. s2n(TLSEXT_TYPE_channel_id_new,ret);
  1256. else
  1257. s2n(TLSEXT_TYPE_channel_id,ret);
  1258. s2n(0,ret);
  1259. }
  1260. if(SSL_get_srtp_profiles(s))
  1261. {
  1262. int el;
  1263. ssl_add_clienthello_use_srtp_ext(s, 0, &el, 0);
  1264. if((limit - ret - 4 - el) < 0) return NULL;
  1265. s2n(TLSEXT_TYPE_use_srtp,ret);
  1266. s2n(el,ret);
  1267. if(ssl_add_clienthello_use_srtp_ext(s, ret, &el, el))
  1268. {
  1269. OPENSSL_PUT_ERROR(SSL, ssl_add_clienthello_tlsext, ERR_R_INTERNAL_ERROR);
  1270. return NULL;
  1271. }
  1272. ret += el;
  1273. }
  1274. #ifndef OPENSSL_NO_EC
  1275. if (using_ecc)
  1276. {
  1277. /* Add TLS extension ECPointFormats to the ClientHello message */
  1278. long lenmax;
  1279. const uint8_t *formats;
  1280. const uint16_t *curves;
  1281. size_t formats_len, curves_len, i;
  1282. tls1_get_formatlist(s, &formats, &formats_len);
  1283. if ((lenmax = limit - ret - 5) < 0) return NULL;
  1284. if (formats_len > (size_t)lenmax) return NULL;
  1285. if (formats_len > 255)
  1286. {
  1287. OPENSSL_PUT_ERROR(SSL, ssl_add_clienthello_tlsext, ERR_R_INTERNAL_ERROR);
  1288. return NULL;
  1289. }
  1290. s2n(TLSEXT_TYPE_ec_point_formats,ret);
  1291. s2n(formats_len + 1,ret);
  1292. *(ret++) = (unsigned char)formats_len;
  1293. memcpy(ret, formats, formats_len);
  1294. ret+=formats_len;
  1295. /* Add TLS extension EllipticCurves to the ClientHello message */
  1296. tls1_get_curvelist(s, 0, &curves, &curves_len);
  1297. if ((lenmax = limit - ret - 6) < 0) return NULL;
  1298. if ((curves_len * 2) > (size_t)lenmax) return NULL;
  1299. if ((curves_len * 2) > 65532)
  1300. {
  1301. OPENSSL_PUT_ERROR(SSL, ssl_add_clienthello_tlsext, ERR_R_INTERNAL_ERROR);
  1302. return NULL;
  1303. }
  1304. s2n(TLSEXT_TYPE_elliptic_curves,ret);
  1305. s2n((curves_len * 2) + 2, ret);
  1306. /* NB: draft-ietf-tls-ecc-12.txt uses a one-byte prefix for
  1307. * elliptic_curve_list, but the examples use two bytes.
  1308. * http://www1.ietf.org/mail-archive/web/tls/current/msg00538.html
  1309. * resolves this to two bytes.
  1310. */
  1311. s2n(curves_len * 2, ret);
  1312. for (i = 0; i < curves_len; i++)
  1313. {
  1314. s2n(curves[i], ret);
  1315. }
  1316. }
  1317. #endif /* OPENSSL_NO_EC */
  1318. #ifdef TLSEXT_TYPE_padding
  1319. /* Add padding to workaround bugs in F5 terminators.
  1320. * See https://tools.ietf.org/html/draft-agl-tls-padding-03
  1321. *
  1322. * NB: because this code works out the length of all existing
  1323. * extensions it MUST always appear last. */
  1324. if (header_len > 0)
  1325. {
  1326. header_len += ret - orig;
  1327. if (header_len > 0xff && header_len < 0x200)
  1328. {
  1329. size_t padding_len = 0x200 - header_len;
  1330. /* Extensions take at least four bytes to encode. Always
  1331. * include least one byte of data if including the
  1332. * extension. WebSphere Application Server 7.0 is
  1333. * intolerant to the last extension being zero-length. */
  1334. if (padding_len >= 4 + 1)
  1335. padding_len -= 4;
  1336. else
  1337. padding_len = 1;
  1338. if (limit - ret - 4 - (long)padding_len < 0)
  1339. return NULL;
  1340. s2n(TLSEXT_TYPE_padding, ret);
  1341. s2n(padding_len, ret);
  1342. memset(ret, 0, padding_len);
  1343. ret += padding_len;
  1344. }
  1345. }
  1346. #endif
  1347. if ((extdatalen = ret-orig-2)== 0)
  1348. return orig;
  1349. s2n(extdatalen, orig);
  1350. return ret;
  1351. }
  1352. unsigned char *ssl_add_serverhello_tlsext(SSL *s, unsigned char *buf, unsigned char *limit)
  1353. {
  1354. int extdatalen=0;
  1355. unsigned char *orig = buf;
  1356. unsigned char *ret = buf;
  1357. #ifndef OPENSSL_NO_NEXTPROTONEG
  1358. int next_proto_neg_seen;
  1359. #endif
  1360. #ifndef OPENSSL_NO_EC
  1361. unsigned long alg_k = s->s3->tmp.new_cipher->algorithm_mkey;
  1362. unsigned long alg_a = s->s3->tmp.new_cipher->algorithm_auth;
  1363. int using_ecc = (alg_k & (SSL_kEECDH|SSL_kECDHr|SSL_kECDHe)) || (alg_a & SSL_aECDSA);
  1364. using_ecc = using_ecc && (s->session->tlsext_ecpointformatlist != NULL);
  1365. #endif
  1366. /* don't add extensions for SSLv3, unless doing secure renegotiation */
  1367. if (s->version == SSL3_VERSION && !s->s3->send_connection_binding)
  1368. return orig;
  1369. ret+=2;
  1370. if (ret>=limit) return NULL; /* this really never occurs, but ... */
  1371. if (!s->hit && s->servername_done == 1 && s->session->tlsext_hostname != NULL)
  1372. {
  1373. if ((long)(limit - ret - 4) < 0) return NULL;
  1374. s2n(TLSEXT_TYPE_server_name,ret);
  1375. s2n(0,ret);
  1376. }
  1377. if(s->s3->send_connection_binding)
  1378. {
  1379. int el;
  1380. if(!ssl_add_serverhello_renegotiate_ext(s, 0, &el, 0))
  1381. {
  1382. OPENSSL_PUT_ERROR(SSL, ssl_add_serverhello_tlsext, ERR_R_INTERNAL_ERROR);
  1383. return NULL;
  1384. }
  1385. if((limit - ret - 4 - el) < 0) return NULL;
  1386. s2n(TLSEXT_TYPE_renegotiate,ret);
  1387. s2n(el,ret);
  1388. if(!ssl_add_serverhello_renegotiate_ext(s, ret, &el, el))
  1389. {
  1390. OPENSSL_PUT_ERROR(SSL, ssl_add_serverhello_tlsext, ERR_R_INTERNAL_ERROR);
  1391. return NULL;
  1392. }
  1393. ret += el;
  1394. }
  1395. #ifndef OPENSSL_NO_EC
  1396. if (using_ecc)
  1397. {
  1398. const unsigned char *plist;
  1399. size_t plistlen;
  1400. /* Add TLS extension ECPointFormats to the ServerHello message */
  1401. long lenmax;
  1402. tls1_get_formatlist(s, &plist, &plistlen);
  1403. if ((lenmax = limit - ret - 5) < 0) return NULL;
  1404. if (plistlen > (size_t)lenmax) return NULL;
  1405. if (plistlen > 255)
  1406. {
  1407. OPENSSL_PUT_ERROR(SSL, ssl_add_serverhello_tlsext, ERR_R_INTERNAL_ERROR);
  1408. return NULL;
  1409. }
  1410. s2n(TLSEXT_TYPE_ec_point_formats,ret);
  1411. s2n(plistlen + 1,ret);
  1412. *(ret++) = (unsigned char) plistlen;
  1413. memcpy(ret, plist, plistlen);
  1414. ret+=plistlen;
  1415. }
  1416. /* Currently the server should not respond with a SupportedCurves extension */
  1417. #endif /* OPENSSL_NO_EC */
  1418. if (s->tlsext_ticket_expected
  1419. && !(SSL_get_options(s) & SSL_OP_NO_TICKET))
  1420. {
  1421. if ((long)(limit - ret - 4) < 0) return NULL;
  1422. s2n(TLSEXT_TYPE_session_ticket,ret);
  1423. s2n(0,ret);
  1424. }
  1425. if (s->tlsext_status_expected)
  1426. {
  1427. if ((long)(limit - ret - 4) < 0) return NULL;
  1428. s2n(TLSEXT_TYPE_status_request,ret);
  1429. s2n(0,ret);
  1430. }
  1431. if(s->srtp_profile)
  1432. {
  1433. int el;
  1434. ssl_add_serverhello_use_srtp_ext(s, 0, &el, 0);
  1435. if((limit - ret - 4 - el) < 0) return NULL;
  1436. s2n(TLSEXT_TYPE_use_srtp,ret);
  1437. s2n(el,ret);
  1438. if(ssl_add_serverhello_use_srtp_ext(s, ret, &el, el))
  1439. {
  1440. OPENSSL_PUT_ERROR(SSL, ssl_add_serverhello_tlsext, ERR_R_INTERNAL_ERROR);
  1441. return NULL;
  1442. }
  1443. ret+=el;
  1444. }
  1445. #ifndef OPENSSL_NO_NEXTPROTONEG
  1446. next_proto_neg_seen = s->s3->next_proto_neg_seen;
  1447. s->s3->next_proto_neg_seen = 0;
  1448. if (next_proto_neg_seen && s->ctx->next_protos_advertised_cb)
  1449. {
  1450. const unsigned char *npa;
  1451. unsigned int npalen;
  1452. int r;
  1453. r = s->ctx->next_protos_advertised_cb(s, &npa, &npalen, s->ctx->next_protos_advertised_cb_arg);
  1454. if (r == SSL_TLSEXT_ERR_OK)
  1455. {
  1456. if ((long)(limit - ret - 4 - npalen) < 0) return NULL;
  1457. s2n(TLSEXT_TYPE_next_proto_neg,ret);
  1458. s2n(npalen,ret);
  1459. memcpy(ret, npa, npalen);
  1460. ret += npalen;
  1461. s->s3->next_proto_neg_seen = 1;
  1462. }
  1463. }
  1464. #endif
  1465. if (s->s3->alpn_selected)
  1466. {
  1467. const uint8_t *selected = s->s3->alpn_selected;
  1468. size_t len = s->s3->alpn_selected_len;
  1469. if ((long)(limit - ret - 4 - 2 - 1 - len) < 0)
  1470. return NULL;
  1471. s2n(TLSEXT_TYPE_application_layer_protocol_negotiation,ret);
  1472. s2n(3 + len,ret);
  1473. s2n(1 + len,ret);
  1474. *ret++ = len;
  1475. memcpy(ret, selected, len);
  1476. ret += len;
  1477. }
  1478. /* If the client advertised support for Channel ID, and we have it
  1479. * enabled, then we want to echo it back. */
  1480. if (s->s3->tlsext_channel_id_valid)
  1481. {
  1482. if (limit - ret - 4 < 0)
  1483. return NULL;
  1484. if (s->s3->tlsext_channel_id_new)
  1485. s2n(TLSEXT_TYPE_channel_id_new,ret);
  1486. else
  1487. s2n(TLSEXT_TYPE_channel_id,ret);
  1488. s2n(0,ret);
  1489. }
  1490. if ((extdatalen = ret-orig-2) == 0)
  1491. return orig;
  1492. s2n(extdatalen, orig);
  1493. return ret;
  1494. }
  1495. /* tls1_alpn_handle_client_hello is called to process the ALPN extension in a
  1496. * ClientHello.
  1497. * cbs: the contents of the extension, not including the type and length.
  1498. * out_alert: a pointer to the alert value to send in the event of a zero
  1499. * return.
  1500. *
  1501. * returns: 1 on success. */
  1502. static int tls1_alpn_handle_client_hello(SSL *s, CBS *cbs, int *out_alert)
  1503. {
  1504. CBS protocol_name_list;
  1505. const unsigned char *selected;
  1506. unsigned char selected_len;
  1507. int r;
  1508. if (s->ctx->alpn_select_cb == NULL)
  1509. return 1;
  1510. if (!CBS_get_u16_length_prefixed(cbs, &protocol_name_list) ||
  1511. CBS_len(cbs) != 0 ||
  1512. CBS_len(&protocol_name_list) < 2)
  1513. goto parse_error;
  1514. /* Validate the protocol list. */
  1515. CBS protocol_name_list_copy = protocol_name_list;
  1516. while (CBS_len(&protocol_name_list_copy) > 0)
  1517. {
  1518. CBS protocol_name;
  1519. if (!CBS_get_u8_length_prefixed(&protocol_name_list_copy, &protocol_name))
  1520. goto parse_error;
  1521. }
  1522. r = s->ctx->alpn_select_cb(s, &selected, &selected_len,
  1523. CBS_data(&protocol_name_list), CBS_len(&protocol_name_list),
  1524. s->ctx->alpn_select_cb_arg);
  1525. if (r == SSL_TLSEXT_ERR_OK) {
  1526. if (s->s3->alpn_selected)
  1527. OPENSSL_free(s->s3->alpn_selected);
  1528. s->s3->alpn_selected = OPENSSL_malloc(selected_len);
  1529. if (!s->s3->alpn_selected)
  1530. {
  1531. *out_alert = SSL_AD_INTERNAL_ERROR;
  1532. return 0;
  1533. }
  1534. memcpy(s->s3->alpn_selected, selected, selected_len);
  1535. s->s3->alpn_selected_len = selected_len;
  1536. }
  1537. return 1;
  1538. parse_error:
  1539. *out_alert = SSL_AD_DECODE_ERROR;
  1540. return 0;
  1541. }
  1542. static int ssl_scan_clienthello_tlsext(SSL *s, CBS *cbs, int *out_alert)
  1543. {
  1544. int renegotiate_seen = 0;
  1545. CBS extensions;
  1546. size_t i;
  1547. s->servername_done = 0;
  1548. s->tlsext_status_type = -1;
  1549. #ifndef OPENSSL_NO_NEXTPROTONEG
  1550. s->s3->next_proto_neg_seen = 0;
  1551. #endif
  1552. if (s->s3->alpn_selected)
  1553. {
  1554. OPENSSL_free(s->s3->alpn_selected);
  1555. s->s3->alpn_selected = NULL;
  1556. }
  1557. /* Clear any signature algorithms extension received */
  1558. if (s->cert->peer_sigalgs)
  1559. {
  1560. OPENSSL_free(s->cert->peer_sigalgs);
  1561. s->cert->peer_sigalgs = NULL;
  1562. }
  1563. /* Clear any shared sigtnature algorithms */
  1564. if (s->cert->shared_sigalgs)
  1565. {
  1566. OPENSSL_free(s->cert->shared_sigalgs);
  1567. s->cert->shared_sigalgs = NULL;
  1568. }
  1569. /* Clear certificate digests and validity flags */
  1570. for (i = 0; i < SSL_PKEY_NUM; i++)
  1571. {
  1572. s->cert->pkeys[i].digest = NULL;
  1573. s->cert->pkeys[i].valid_flags = 0;
  1574. }
  1575. /* TODO(fork): we probably want OCSP stapling support, but this pulls in
  1576. * a lot of code. */
  1577. #if 0
  1578. /* Clear OCSP state. */
  1579. s->tlsext_status_type = -1;
  1580. if (s->tlsext_ocsp_ids)
  1581. {
  1582. sk_OCSP_RESPID_pop_free(s->tlsext_ocsp_ids, OCSP_RESPID_free);
  1583. s->tlsext_ocsp_ids = NULL;
  1584. }
  1585. if (s->tlsext_ocsp_exts)
  1586. {
  1587. sk_X509_EXTENSION_pop_free(s->tlsext_ocsp_exts, X509_EXTENSION_free);
  1588. s->tlsext_ocsp_exts = NULL;
  1589. }
  1590. #endif
  1591. /* There may be no extensions. */
  1592. if (CBS_len(cbs) == 0)
  1593. {
  1594. goto ri_check;
  1595. }
  1596. /* Decode the extensions block and check it is valid. */
  1597. if (!CBS_get_u16_length_prefixed(cbs, &extensions) ||
  1598. !tls1_check_duplicate_extensions(&extensions))
  1599. {
  1600. *out_alert = SSL_AD_DECODE_ERROR;
  1601. return 0;
  1602. }
  1603. while (CBS_len(&extensions) != 0)
  1604. {
  1605. uint16_t type;
  1606. CBS extension;
  1607. /* Decode the next extension. */
  1608. if (!CBS_get_u16(&extensions, &type) ||
  1609. !CBS_get_u16_length_prefixed(&extensions, &extension))
  1610. {
  1611. *out_alert = SSL_AD_DECODE_ERROR;
  1612. return 0;
  1613. }
  1614. if (s->tlsext_debug_cb)
  1615. {
  1616. s->tlsext_debug_cb(s, 0, type, (unsigned char*)CBS_data(&extension),
  1617. CBS_len(&extension), s->tlsext_debug_arg);
  1618. }
  1619. /* The servername extension is treated as follows:
  1620. - Only the hostname type is supported with a maximum length of 255.
  1621. - The servername is rejected if too long or if it contains zeros,
  1622. in which case an fatal alert is generated.
  1623. - The servername field is maintained together with the session cache.
  1624. - When a session is resumed, the servername call back invoked in order
  1625. to allow the application to position itself to the right context.
  1626. - The servername is acknowledged if it is new for a session or when
  1627. it is identical to a previously used for the same session.
  1628. Applications can control the behaviour. They can at any time
  1629. set a 'desirable' servername for a new SSL object. This can be the
  1630. case for example with HTTPS when a Host: header field is received and
  1631. a renegotiation is requested. In this case, a possible servername
  1632. presented in the new client hello is only acknowledged if it matches
  1633. the value of the Host: field.
  1634. - Applications must use SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION
  1635. if they provide for changing an explicit servername context for the session,
  1636. i.e. when the session has been established with a servername extension.
  1637. - On session reconnect, the servername extension may be absent.
  1638. */
  1639. if (type == TLSEXT_TYPE_server_name)
  1640. {
  1641. CBS server_name_list;
  1642. if (!CBS_get_u16_length_prefixed(&extension, &server_name_list) ||
  1643. CBS_len(&server_name_list) < 1 ||
  1644. CBS_len(&extension) != 0)
  1645. {
  1646. *out_alert = SSL_AD_DECODE_ERROR;
  1647. return 0;
  1648. }
  1649. /* Decode each ServerName in the extension. */
  1650. while (CBS_len(&server_name_list) > 0)
  1651. {
  1652. uint8_t name_type;
  1653. CBS host_name;
  1654. /* Decode the NameType. */
  1655. if (!CBS_get_u8(&server_name_list, &name_type))
  1656. {
  1657. *out_alert = SSL_AD_DECODE_ERROR;
  1658. return 0;
  1659. }
  1660. /* Only host_name is supported. */
  1661. if (name_type != TLSEXT_NAMETYPE_host_name)
  1662. continue;
  1663. if (!s->hit)
  1664. {
  1665. if (s->session->tlsext_hostname)
  1666. {
  1667. /* The ServerNameList MUST NOT
  1668. contain more than one name of
  1669. the same name_type. */
  1670. *out_alert = SSL_AD_DECODE_ERROR;
  1671. return 0;
  1672. }
  1673. if (!CBS_get_u16_length_prefixed(&server_name_list, &host_name) ||
  1674. CBS_len(&host_name) < 1)
  1675. {
  1676. *out_alert = SSL_AD_DECODE_ERROR;
  1677. return 0;
  1678. }
  1679. if (CBS_len(&host_name) > TLSEXT_MAXLEN_host_name ||
  1680. CBS_contains_zero_byte(&host_name))
  1681. {
  1682. *out_alert = SSL_AD_UNRECOGNIZED_NAME;
  1683. return 0;
  1684. }
  1685. /* Copy the hostname as a string. */
  1686. if (!CBS_strdup(&host_name, &s->session->tlsext_hostname))
  1687. {
  1688. *out_alert = SSL_AD_INTERNAL_ERROR;
  1689. return 0;
  1690. }
  1691. s->servername_done = 1;
  1692. }
  1693. else
  1694. {
  1695. s->servername_done = s->session->tlsext_hostname
  1696. && strlen(s->session->tlsext_hostname) == CBS_len(&host_name)
  1697. && strncmp(s->session->tlsext_hostname,
  1698. (char *)CBS_data(&host_name), CBS_len(&host_name)) == 0;
  1699. }
  1700. }
  1701. }
  1702. #ifndef OPENSSL_NO_EC
  1703. else if (type == TLSEXT_TYPE_ec_point_formats)
  1704. {
  1705. CBS ec_point_format_list;
  1706. if (!CBS_get_u8_length_prefixed(&extension, &ec_point_format_list) ||
  1707. CBS_len(&extension) != 0)
  1708. {
  1709. *out_alert = SSL_AD_DECODE_ERROR;
  1710. return 0;
  1711. }
  1712. if (!s->hit)
  1713. {
  1714. if (!CBS_stow(&ec_point_format_list,
  1715. &s->session->tlsext_ecpointformatlist,
  1716. &s->session->tlsext_ecpointformatlist_length))
  1717. {
  1718. *out_alert = SSL_AD_INTERNAL_ERROR;
  1719. return 0;
  1720. }
  1721. }
  1722. }
  1723. else if (type == TLSEXT_TYPE_elliptic_curves)
  1724. {
  1725. CBS elliptic_curve_list;
  1726. size_t i, num_curves;
  1727. if (!CBS_get_u16_length_prefixed(&extension, &elliptic_curve_list) ||
  1728. CBS_len(&elliptic_curve_list) == 0 ||
  1729. (CBS_len(&elliptic_curve_list) & 1) != 0 ||
  1730. CBS_len(&extension) != 0)
  1731. {
  1732. *out_alert = SSL_AD_DECODE_ERROR;
  1733. return 0;
  1734. }
  1735. if (!s->hit)
  1736. {
  1737. if (s->session->tlsext_ellipticcurvelist)
  1738. {
  1739. OPENSSL_free(s->session->tlsext_ellipticcurvelist);
  1740. s->session->tlsext_ellipticcurvelist_length = 0;
  1741. }
  1742. s->session->tlsext_ellipticcurvelist =
  1743. (uint16_t*)OPENSSL_malloc(CBS_len(&elliptic_curve_list));
  1744. if (s->session->tlsext_ellipticcurvelist == NULL)
  1745. {
  1746. *out_alert = SSL_AD_INTERNAL_ERROR;
  1747. return 0;
  1748. }
  1749. num_curves = CBS_len(&elliptic_curve_list) / 2;
  1750. for (i = 0; i < num_curves; i++)
  1751. {
  1752. if (!CBS_get_u16(&elliptic_curve_list,
  1753. &s->session->tlsext_ellipticcurvelist[i]))
  1754. {
  1755. *out_alert = SSL_AD_INTERNAL_ERROR;
  1756. return 0;
  1757. }
  1758. }
  1759. if (CBS_len(&elliptic_curve_list) != 0)
  1760. {
  1761. *out_alert = SSL_AD_INTERNAL_ERROR;
  1762. return 0;
  1763. }
  1764. s->session->tlsext_ellipticcurvelist_length = num_curves;
  1765. }
  1766. }
  1767. #endif /* OPENSSL_NO_EC */
  1768. else if (type == TLSEXT_TYPE_session_ticket)
  1769. {
  1770. if (s->tls_session_ticket_ext_cb &&
  1771. !s->tls_session_ticket_ext_cb(s, CBS_data(&extension), CBS_len(&extension), s->tls_session_ticket_ext_cb_arg))
  1772. {
  1773. *out_alert = SSL_AD_INTERNAL_ERROR;
  1774. return 0;
  1775. }
  1776. }
  1777. else if (type == TLSEXT_TYPE_renegotiate)
  1778. {
  1779. if (!ssl_parse_clienthello_renegotiate_ext(s, &extension, out_alert))
  1780. return 0;
  1781. renegotiate_seen = 1;
  1782. }
  1783. else if (type == TLSEXT_TYPE_signature_algorithms)
  1784. {
  1785. CBS supported_signature_algorithms;
  1786. if (!CBS_get_u16_length_prefixed(&extension, &supported_signature_algorithms) ||
  1787. CBS_len(&extension) != 0)
  1788. {
  1789. *out_alert = SSL_AD_DECODE_ERROR;
  1790. return 0;
  1791. }
  1792. /* Ensure the signature algorithms are non-empty. It
  1793. * contains a list of SignatureAndHashAlgorithms
  1794. * which are two bytes each. */
  1795. if (CBS_len(&supported_signature_algorithms) == 0 ||
  1796. (CBS_len(&supported_signature_algorithms) % 2) != 0)
  1797. {
  1798. *out_alert = SSL_AD_DECODE_ERROR;
  1799. return 0;
  1800. }
  1801. if (!tls1_process_sigalgs(s,
  1802. CBS_data(&supported_signature_algorithms),
  1803. CBS_len(&supported_signature_algorithms)))
  1804. {
  1805. *out_alert = SSL_AD_DECODE_ERROR;
  1806. return 0;
  1807. }
  1808. /* If sigalgs received and no shared algorithms fatal
  1809. * error.
  1810. */
  1811. if (s->cert->peer_sigalgs && !s->cert->shared_sigalgs)
  1812. {
  1813. OPENSSL_PUT_ERROR(SSL, ssl_add_serverhello_tlsext, SSL_R_NO_SHARED_SIGATURE_ALGORITHMS);
  1814. *out_alert = SSL_AD_ILLEGAL_PARAMETER;
  1815. return 0;
  1816. }
  1817. }
  1818. /* TODO(fork): we probably want OCSP stapling support, but this pulls in a lot of code. */
  1819. #if 0
  1820. else if (type == TLSEXT_TYPE_status_request)
  1821. {
  1822. uint8_t status_type;
  1823. CBS responder_id_list;
  1824. CBS request_extensions;
  1825. if (!CBS_get_u8(&extension, &status_type))
  1826. {
  1827. *out_alert = SSL_AD_DECODE_ERROR;
  1828. return 0;
  1829. }
  1830. /* Only OCSP is supported. */
  1831. if (status_type != TLSEXT_STATUSTYPE_ocsp)
  1832. continue;
  1833. s->tlsext_status_type = status_type;
  1834. /* Extension consists of a responder_id_list and
  1835. * request_extensions. */
  1836. if (!CBS_get_u16_length_prefixed(&extension, &responder_id_list) ||
  1837. !CBS_get_u16_length_prefixed(&extension, &request_extensions) ||
  1838. CBS_len(&extension) != 0)
  1839. {
  1840. *out_alert = SSL_AD_DECODE_ERROR;
  1841. return 0;
  1842. }
  1843. if (CBS_len(&responder_id_list) > 0)
  1844. {
  1845. s->tlsext_ocsp_ids = sk_OCSP_RESPID_new_null();
  1846. if (s->tlsext_ocsp_ids == NULL)
  1847. {
  1848. *out_alert = SSL_AD_INTERNAL_ERROR;
  1849. return 0;
  1850. }
  1851. }
  1852. /* Parse out the responder IDs. */
  1853. while (CBS_len(&responder_id_list) > 0)
  1854. {
  1855. CBS responder_id;
  1856. OCSP_RESPID *id;
  1857. const uint8_t *data;
  1858. /* Each ResponderID must have size at least 1. */
  1859. if (!CBS_get_u16_length_prefixed(&responder_id_list, &responder_id) ||
  1860. CBS_len(&responder_id) < 1)
  1861. {
  1862. *out_alert = SSL_AD_DECODE_ERROR;
  1863. return 0;
  1864. }
  1865. /* TODO(fork): Add CBS versions of d2i_FOO_BAR. */
  1866. data = CBS_data(&responder_id);
  1867. id = d2i_OCSP_RESPID(NULL, &data, CBS_len(&responder_id));
  1868. if (!id)
  1869. {
  1870. *out_alert = SSL_AD_DECODE_ERROR;
  1871. return 0;
  1872. }
  1873. if (!CBS_skip(&responder_id, data - CBS_data(&responder_id)))
  1874. {
  1875. /* This should never happen. */
  1876. *out_alert = SSL_AD_INTERNAL_ERROR;
  1877. OCSP_RESPID_free(id);
  1878. return 0;
  1879. }
  1880. if (CBS_len(&responder_id) != 0)
  1881. {
  1882. *out_alert = SSL_AD_DECODE_ERROR;
  1883. OCSP_RESPID_free(id);
  1884. return 0;
  1885. }
  1886. if (!sk_OCSP_RESPID_push(s->tlsext_ocsp_ids, id))
  1887. {
  1888. *out_alert = SSL_AD_INTERNAL_ERROR;
  1889. OCSP_RESPID_free(id);
  1890. return 0;
  1891. }
  1892. }
  1893. /* Parse out request_extensions. */
  1894. if (CBS_len(&request_extensions) > 0)
  1895. {
  1896. const uint8_t *data;
  1897. data = CBS_data(&request_extensions);
  1898. s->tlsext_ocsp_exts = d2i_X509_EXTENSIONS(NULL,
  1899. &data, CBS_len(&request_extensions));
  1900. if (s->tlsext_ocsp_exts == NULL)
  1901. {
  1902. *out_alert = SSL_AD_DECODE_ERROR;
  1903. return 0;
  1904. }
  1905. if (!CBS_skip(&request_extensions, data - CBS_data(&request_extensions)))
  1906. {
  1907. /* This should never happen. */
  1908. *out_alert = SSL_AD_INTERNAL_ERROR;
  1909. return 0;
  1910. }
  1911. if (CBS_len(&request_extensions) != 0)
  1912. {
  1913. *out_alert = SSL_AD_DECODE_ERROR;
  1914. return 0;
  1915. }
  1916. }
  1917. }
  1918. #endif
  1919. #ifndef OPENSSL_NO_NEXTPROTONEG
  1920. else if (type == TLSEXT_TYPE_next_proto_neg &&
  1921. s->s3->tmp.finish_md_len == 0 &&
  1922. s->s3->alpn_selected == NULL)
  1923. {
  1924. /* The extension must be empty. */
  1925. if (CBS_len(&extension) != 0)
  1926. {
  1927. *out_alert = SSL_AD_DECODE_ERROR;
  1928. return 0;
  1929. }
  1930. /* We shouldn't accept this extension on a
  1931. * renegotiation.
  1932. *
  1933. * s->new_session will be set on renegotiation, but we
  1934. * probably shouldn't rely that it couldn't be set on
  1935. * the initial renegotation too in certain cases (when
  1936. * there's some other reason to disallow resuming an
  1937. * earlier session -- the current code won't be doing
  1938. * anything like that, but this might change).
  1939. * A valid sign that there's been a previous handshake
  1940. * in this connection is if s->s3->tmp.finish_md_len >
  1941. * 0. (We are talking about a check that will happen
  1942. * in the Hello protocol round, well before a new
  1943. * Finished message could have been computed.) */
  1944. s->s3->next_proto_neg_seen = 1;
  1945. }
  1946. #endif
  1947. else if (type == TLSEXT_TYPE_application_layer_protocol_negotiation &&
  1948. s->ctx->alpn_select_cb &&
  1949. s->s3->tmp.finish_md_len == 0)
  1950. {
  1951. if (!tls1_alpn_handle_client_hello(s, &extension, out_alert))
  1952. return 0;
  1953. #ifndef OPENSSL_NO_NEXTPROTONEG
  1954. /* ALPN takes precedence over NPN. */
  1955. s->s3->next_proto_neg_seen = 0;
  1956. #endif
  1957. }
  1958. else if (type == TLSEXT_TYPE_channel_id &&
  1959. s->tlsext_channel_id_enabled)
  1960. {
  1961. /* The extension must be empty. */
  1962. if (CBS_len(&extension) != 0)
  1963. {
  1964. *out_alert = SSL_AD_DECODE_ERROR;
  1965. return 0;
  1966. }
  1967. s->s3->tlsext_channel_id_valid = 1;
  1968. }
  1969. else if (type == TLSEXT_TYPE_channel_id_new &&
  1970. s->tlsext_channel_id_enabled)
  1971. {
  1972. /* The extension must be empty. */
  1973. if (CBS_len(&extension) != 0)
  1974. {
  1975. *out_alert = SSL_AD_DECODE_ERROR;
  1976. return 0;
  1977. }
  1978. s->s3->tlsext_channel_id_valid = 1;
  1979. s->s3->tlsext_channel_id_new = 1;
  1980. }
  1981. /* session ticket processed earlier */
  1982. else if (type == TLSEXT_TYPE_use_srtp)
  1983. {
  1984. if (!ssl_parse_clienthello_use_srtp_ext(s, &extension, out_alert))
  1985. return 0;
  1986. }
  1987. }
  1988. ri_check:
  1989. /* Need RI if renegotiating */
  1990. if (!renegotiate_seen && s->renegotiate &&
  1991. !(s->options & SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION))
  1992. {
  1993. *out_alert = SSL_AD_HANDSHAKE_FAILURE;
  1994. OPENSSL_PUT_ERROR(SSL, ssl_add_serverhello_tlsext, SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED);
  1995. return 0;
  1996. }
  1997. /* If no signature algorithms extension set default values */
  1998. if (!s->cert->peer_sigalgs)
  1999. ssl_cert_set_default_md(s->cert);
  2000. return 1;
  2001. }
  2002. int ssl_parse_clienthello_tlsext(SSL *s, CBS *cbs)
  2003. {
  2004. int alert = -1;
  2005. if (ssl_scan_clienthello_tlsext(s, cbs, &alert) <= 0)
  2006. {
  2007. ssl3_send_alert(s, SSL3_AL_FATAL, alert);
  2008. return 0;
  2009. }
  2010. if (ssl_check_clienthello_tlsext_early(s) <= 0)
  2011. {
  2012. OPENSSL_PUT_ERROR(SSL, ssl_parse_clienthello_tlsext, SSL_R_CLIENTHELLO_TLSEXT);
  2013. return 0;
  2014. }
  2015. return 1;
  2016. }
  2017. #ifndef OPENSSL_NO_NEXTPROTONEG
  2018. /* ssl_next_proto_validate validates a Next Protocol Negotiation block. No
  2019. * elements of zero length are allowed and the set of elements must exactly fill
  2020. * the length of the block. */
  2021. static char ssl_next_proto_validate(const CBS *cbs)
  2022. {
  2023. CBS copy = *cbs;
  2024. while (CBS_len(&copy) != 0)
  2025. {
  2026. CBS proto;
  2027. if (!CBS_get_u8_length_prefixed(&copy, &proto) ||
  2028. CBS_len(&proto) == 0)
  2029. {
  2030. return 0;
  2031. }
  2032. }
  2033. return 1;
  2034. }
  2035. #endif
  2036. static int ssl_scan_serverhello_tlsext(SSL *s, CBS *cbs, int *out_alert)
  2037. {
  2038. int tlsext_servername = 0;
  2039. int renegotiate_seen = 0;
  2040. CBS extensions;
  2041. #ifndef OPENSSL_NO_NEXTPROTONEG
  2042. s->s3->next_proto_neg_seen = 0;
  2043. #endif
  2044. s->tlsext_ticket_expected = 0;
  2045. if (s->s3->alpn_selected)
  2046. {
  2047. OPENSSL_free(s->s3->alpn_selected);
  2048. s->s3->alpn_selected = NULL;
  2049. }
  2050. /* There may be no extensions. */
  2051. if (CBS_len(cbs) == 0)
  2052. {
  2053. goto ri_check;
  2054. }
  2055. /* Decode the extensions block and check it is valid. */
  2056. if (!CBS_get_u16_length_prefixed(cbs, &extensions) ||
  2057. !tls1_check_duplicate_extensions(&extensions))
  2058. {
  2059. *out_alert = SSL_AD_DECODE_ERROR;
  2060. return 0;
  2061. }
  2062. while (CBS_len(&extensions) != 0)
  2063. {
  2064. uint16_t type;
  2065. CBS extension;
  2066. /* Decode the next extension. */
  2067. if (!CBS_get_u16(&extensions, &type) ||
  2068. !CBS_get_u16_length_prefixed(&extensions, &extension))
  2069. {
  2070. *out_alert = SSL_AD_DECODE_ERROR;
  2071. return 0;
  2072. }
  2073. if (s->tlsext_debug_cb)
  2074. {
  2075. s->tlsext_debug_cb(s, 1, type, (unsigned char*)CBS_data(&extension),
  2076. CBS_len(&extension), s->tlsext_debug_arg);
  2077. }
  2078. if (type == TLSEXT_TYPE_server_name)
  2079. {
  2080. /* The extension must be empty. */
  2081. if (CBS_len(&extension) != 0)
  2082. {
  2083. *out_alert = SSL_AD_DECODE_ERROR;
  2084. return 0;
  2085. }
  2086. /* We must have sent it in ClientHello. */
  2087. if (s->tlsext_hostname == NULL)
  2088. {
  2089. *out_alert = SSL_AD_UNSUPPORTED_EXTENSION;
  2090. return 0;
  2091. }
  2092. tlsext_servername = 1;
  2093. }
  2094. #ifndef OPENSSL_NO_EC
  2095. else if (type == TLSEXT_TYPE_ec_point_formats)
  2096. {
  2097. CBS ec_point_format_list;
  2098. if (!CBS_get_u8_length_prefixed(&extension, &ec_point_format_list) ||
  2099. CBS_len(&extension) != 0)
  2100. {
  2101. *out_alert = SSL_AD_DECODE_ERROR;
  2102. return 0;
  2103. }
  2104. if (!CBS_stow(&ec_point_format_list,
  2105. &s->session->tlsext_ecpointformatlist,
  2106. &s->session->tlsext_ecpointformatlist_length))
  2107. {
  2108. *out_alert = SSL_AD_INTERNAL_ERROR;
  2109. return 0;
  2110. }
  2111. }
  2112. #endif /* OPENSSL_NO_EC */
  2113. else if (type == TLSEXT_TYPE_session_ticket)
  2114. {
  2115. if (s->tls_session_ticket_ext_cb &&
  2116. !s->tls_session_ticket_ext_cb(s, CBS_data(&extension), CBS_len(&extension),
  2117. s->tls_session_ticket_ext_cb_arg))
  2118. {
  2119. *out_alert = SSL_AD_INTERNAL_ERROR;
  2120. return 0;
  2121. }
  2122. if ((SSL_get_options(s) & SSL_OP_NO_TICKET) || CBS_len(&extension) > 0)
  2123. {
  2124. *out_alert = SSL_AD_UNSUPPORTED_EXTENSION;
  2125. return 0;
  2126. }
  2127. s->tlsext_ticket_expected = 1;
  2128. }
  2129. else if (type == TLSEXT_TYPE_status_request)
  2130. {
  2131. /* The extension MUST be empty and may only sent if
  2132. * we've requested a status request message. */
  2133. if (CBS_len(&extension) != 0)
  2134. {
  2135. *out_alert = SSL_AD_DECODE_ERROR;
  2136. return 0;
  2137. }
  2138. if (s->tlsext_status_type == -1)
  2139. {
  2140. *out_alert = SSL_AD_UNSUPPORTED_EXTENSION;
  2141. return 0;
  2142. }
  2143. /* Set a flag to expect a CertificateStatus message */
  2144. s->tlsext_status_expected = 1;
  2145. }
  2146. #ifndef OPENSSL_NO_NEXTPROTONEG
  2147. else if (type == TLSEXT_TYPE_next_proto_neg && s->s3->tmp.finish_md_len == 0) {
  2148. unsigned char *selected;
  2149. unsigned char selected_len;
  2150. /* We must have requested it. */
  2151. if (s->ctx->next_proto_select_cb == NULL)
  2152. {
  2153. *out_alert = SSL_AD_UNSUPPORTED_EXTENSION;
  2154. return 0;
  2155. }
  2156. /* The data must be valid. */
  2157. if (!ssl_next_proto_validate(&extension))
  2158. {
  2159. *out_alert = SSL_AD_DECODE_ERROR;
  2160. return 0;
  2161. }
  2162. if (s->ctx->next_proto_select_cb(s, &selected, &selected_len,
  2163. CBS_data(&extension), CBS_len(&extension),
  2164. s->ctx->next_proto_select_cb_arg) != SSL_TLSEXT_ERR_OK)
  2165. {
  2166. *out_alert = SSL_AD_INTERNAL_ERROR;
  2167. return 0;
  2168. }
  2169. s->next_proto_negotiated = BUF_memdup(selected, selected_len);
  2170. if (s->next_proto_negotiated == NULL)
  2171. {
  2172. *out_alert = SSL_AD_INTERNAL_ERROR;
  2173. return 0;
  2174. }
  2175. s->next_proto_negotiated_len = selected_len;
  2176. s->s3->next_proto_neg_seen = 1;
  2177. }
  2178. #endif
  2179. else if (type == TLSEXT_TYPE_application_layer_protocol_negotiation)
  2180. {
  2181. CBS protocol_name_list, protocol_name;
  2182. /* We must have requested it. */
  2183. if (s->alpn_client_proto_list == NULL)
  2184. {
  2185. *out_alert = SSL_AD_UNSUPPORTED_EXTENSION;
  2186. return 0;
  2187. }
  2188. /* The extension data consists of a ProtocolNameList
  2189. * which must have exactly one ProtocolName. Each of
  2190. * these is length-prefixed. */
  2191. if (!CBS_get_u16_length_prefixed(&extension, &protocol_name_list) ||
  2192. CBS_len(&extension) != 0 ||
  2193. !CBS_get_u8_length_prefixed(&protocol_name_list, &protocol_name) ||
  2194. CBS_len(&protocol_name_list) != 0)
  2195. {
  2196. *out_alert = SSL_AD_DECODE_ERROR;
  2197. return 0;
  2198. }
  2199. if (!CBS_stow(&protocol_name,
  2200. &s->s3->alpn_selected,
  2201. &s->s3->alpn_selected_len))
  2202. {
  2203. *out_alert = SSL_AD_INTERNAL_ERROR;
  2204. return 0;
  2205. }
  2206. }
  2207. else if (type == TLSEXT_TYPE_channel_id)
  2208. {
  2209. if (CBS_len(&extension) != 0)
  2210. {
  2211. *out_alert = SSL_AD_DECODE_ERROR;
  2212. return 0;
  2213. }
  2214. s->s3->tlsext_channel_id_valid = 1;
  2215. }
  2216. else if (type == TLSEXT_TYPE_channel_id_new)
  2217. {
  2218. if (CBS_len(&extension) != 0)
  2219. {
  2220. *out_alert = SSL_AD_DECODE_ERROR;
  2221. return 0;
  2222. }
  2223. s->s3->tlsext_channel_id_valid = 1;
  2224. s->s3->tlsext_channel_id_new = 1;
  2225. }
  2226. else if (type == TLSEXT_TYPE_renegotiate)
  2227. {
  2228. if (!ssl_parse_serverhello_renegotiate_ext(s, &extension, out_alert))
  2229. return 0;
  2230. renegotiate_seen = 1;
  2231. }
  2232. else if (type == TLSEXT_TYPE_use_srtp)
  2233. {
  2234. if (!ssl_parse_serverhello_use_srtp_ext(s, &extension, out_alert))
  2235. return 0;
  2236. }
  2237. }
  2238. if (!s->hit && tlsext_servername == 1)
  2239. {
  2240. if (s->tlsext_hostname)
  2241. {
  2242. if (s->session->tlsext_hostname == NULL)
  2243. {
  2244. s->session->tlsext_hostname = BUF_strdup(s->tlsext_hostname);
  2245. if (!s->session->tlsext_hostname)
  2246. {
  2247. *out_alert = SSL_AD_UNRECOGNIZED_NAME;
  2248. return 0;
  2249. }
  2250. }
  2251. else
  2252. {
  2253. *out_alert = SSL_AD_DECODE_ERROR;
  2254. return 0;
  2255. }
  2256. }
  2257. }
  2258. ri_check:
  2259. /* Determine if we need to see RI. Strictly speaking if we want to
  2260. * avoid an attack we should *always* see RI even on initial server
  2261. * hello because the client doesn't see any renegotiation during an
  2262. * attack. However this would mean we could not connect to any server
  2263. * which doesn't support RI so for the immediate future tolerate RI
  2264. * absence on initial connect only.
  2265. */
  2266. if (!renegotiate_seen
  2267. && !(s->options & SSL_OP_LEGACY_SERVER_CONNECT)
  2268. && !(s->options & SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION))
  2269. {
  2270. *out_alert = SSL_AD_HANDSHAKE_FAILURE;
  2271. OPENSSL_PUT_ERROR(SSL, ssl_scan_serverhello_tlsext, SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED);
  2272. return 0;
  2273. }
  2274. return 1;
  2275. }
  2276. int ssl_prepare_clienthello_tlsext(SSL *s)
  2277. {
  2278. return 1;
  2279. }
  2280. int ssl_prepare_serverhello_tlsext(SSL *s)
  2281. {
  2282. return 1;
  2283. }
  2284. static int ssl_check_clienthello_tlsext_early(SSL *s)
  2285. {
  2286. int ret=SSL_TLSEXT_ERR_NOACK;
  2287. int al = SSL_AD_UNRECOGNIZED_NAME;
  2288. #ifndef OPENSSL_NO_EC
  2289. /* The handling of the ECPointFormats extension is done elsewhere, namely in
  2290. * ssl3_choose_cipher in s3_lib.c.
  2291. */
  2292. /* The handling of the EllipticCurves extension is done elsewhere, namely in
  2293. * ssl3_choose_cipher in s3_lib.c.
  2294. */
  2295. #endif
  2296. if (s->ctx != NULL && s->ctx->tlsext_servername_callback != 0)
  2297. ret = s->ctx->tlsext_servername_callback(s, &al, s->ctx->tlsext_servername_arg);
  2298. else if (s->initial_ctx != NULL && s->initial_ctx->tlsext_servername_callback != 0)
  2299. ret = s->initial_ctx->tlsext_servername_callback(s, &al, s->initial_ctx->tlsext_servername_arg);
  2300. switch (ret)
  2301. {
  2302. case SSL_TLSEXT_ERR_ALERT_FATAL:
  2303. ssl3_send_alert(s,SSL3_AL_FATAL,al);
  2304. return -1;
  2305. case SSL_TLSEXT_ERR_ALERT_WARNING:
  2306. ssl3_send_alert(s,SSL3_AL_WARNING,al);
  2307. return 1;
  2308. case SSL_TLSEXT_ERR_NOACK:
  2309. s->servername_done=0;
  2310. default:
  2311. return 1;
  2312. }
  2313. }
  2314. int ssl_check_clienthello_tlsext_late(SSL *s)
  2315. {
  2316. int ret = SSL_TLSEXT_ERR_OK;
  2317. int al;
  2318. /* If status request then ask callback what to do.
  2319. * Note: this must be called after servername callbacks in case
  2320. * the certificate has changed, and must be called after the cipher
  2321. * has been chosen because this may influence which certificate is sent
  2322. */
  2323. if ((s->tlsext_status_type != -1) && s->ctx && s->ctx->tlsext_status_cb)
  2324. {
  2325. int r;
  2326. CERT_PKEY *certpkey;
  2327. certpkey = ssl_get_server_send_pkey(s);
  2328. /* If no certificate can't return certificate status */
  2329. if (certpkey == NULL)
  2330. {
  2331. s->tlsext_status_expected = 0;
  2332. return 1;
  2333. }
  2334. /* Set current certificate to one we will use so
  2335. * SSL_get_certificate et al can pick it up.
  2336. */
  2337. s->cert->key = certpkey;
  2338. r = s->ctx->tlsext_status_cb(s, s->ctx->tlsext_status_arg);
  2339. switch (r)
  2340. {
  2341. /* We don't want to send a status request response */
  2342. case SSL_TLSEXT_ERR_NOACK:
  2343. s->tlsext_status_expected = 0;
  2344. break;
  2345. /* status request response should be sent */
  2346. case SSL_TLSEXT_ERR_OK:
  2347. if (s->tlsext_ocsp_resp)
  2348. s->tlsext_status_expected = 1;
  2349. else
  2350. s->tlsext_status_expected = 0;
  2351. break;
  2352. /* something bad happened */
  2353. case SSL_TLSEXT_ERR_ALERT_FATAL:
  2354. ret = SSL_TLSEXT_ERR_ALERT_FATAL;
  2355. al = SSL_AD_INTERNAL_ERROR;
  2356. goto err;
  2357. }
  2358. }
  2359. else
  2360. s->tlsext_status_expected = 0;
  2361. err:
  2362. switch (ret)
  2363. {
  2364. case SSL_TLSEXT_ERR_ALERT_FATAL:
  2365. ssl3_send_alert(s, SSL3_AL_FATAL, al);
  2366. return -1;
  2367. case SSL_TLSEXT_ERR_ALERT_WARNING:
  2368. ssl3_send_alert(s, SSL3_AL_WARNING, al);
  2369. return 1;
  2370. default:
  2371. return 1;
  2372. }
  2373. }
  2374. int ssl_check_serverhello_tlsext(SSL *s)
  2375. {
  2376. int ret=SSL_TLSEXT_ERR_NOACK;
  2377. int al = SSL_AD_UNRECOGNIZED_NAME;
  2378. #ifndef OPENSSL_NO_EC
  2379. /* If we are client and using an elliptic curve cryptography cipher
  2380. * suite, then if server returns an EC point formats lists extension
  2381. * it must contain uncompressed.
  2382. */
  2383. unsigned long alg_k = s->s3->tmp.new_cipher->algorithm_mkey;
  2384. unsigned long alg_a = s->s3->tmp.new_cipher->algorithm_auth;
  2385. if ((s->tlsext_ecpointformatlist != NULL) && (s->tlsext_ecpointformatlist_length > 0) &&
  2386. (s->session->tlsext_ecpointformatlist != NULL) && (s->session->tlsext_ecpointformatlist_length > 0) &&
  2387. ((alg_k & (SSL_kEECDH|SSL_kECDHr|SSL_kECDHe)) || (alg_a & SSL_aECDSA)))
  2388. {
  2389. /* we are using an ECC cipher */
  2390. size_t i;
  2391. unsigned char *list;
  2392. int found_uncompressed = 0;
  2393. list = s->session->tlsext_ecpointformatlist;
  2394. for (i = 0; i < s->session->tlsext_ecpointformatlist_length; i++)
  2395. {
  2396. if (*(list++) == TLSEXT_ECPOINTFORMAT_uncompressed)
  2397. {
  2398. found_uncompressed = 1;
  2399. break;
  2400. }
  2401. }
  2402. if (!found_uncompressed)
  2403. {
  2404. OPENSSL_PUT_ERROR(SSL, ssl_add_serverhello_tlsext, SSL_R_TLS_INVALID_ECPOINTFORMAT_LIST);
  2405. return -1;
  2406. }
  2407. }
  2408. ret = SSL_TLSEXT_ERR_OK;
  2409. #endif /* OPENSSL_NO_EC */
  2410. if (s->ctx != NULL && s->ctx->tlsext_servername_callback != 0)
  2411. ret = s->ctx->tlsext_servername_callback(s, &al, s->ctx->tlsext_servername_arg);
  2412. else if (s->initial_ctx != NULL && s->initial_ctx->tlsext_servername_callback != 0)
  2413. ret = s->initial_ctx->tlsext_servername_callback(s, &al, s->initial_ctx->tlsext_servername_arg);
  2414. /* If we've requested certificate status and we wont get one
  2415. * tell the callback
  2416. */
  2417. if ((s->tlsext_status_type != -1) && !(s->tlsext_status_expected)
  2418. && s->ctx && s->ctx->tlsext_status_cb)
  2419. {
  2420. int r;
  2421. /* Set resp to NULL, resplen to -1 so callback knows
  2422. * there is no response.
  2423. */
  2424. if (s->tlsext_ocsp_resp)
  2425. {
  2426. OPENSSL_free(s->tlsext_ocsp_resp);
  2427. s->tlsext_ocsp_resp = NULL;
  2428. }
  2429. s->tlsext_ocsp_resplen = -1;
  2430. r = s->ctx->tlsext_status_cb(s, s->ctx->tlsext_status_arg);
  2431. if (r == 0)
  2432. {
  2433. al = SSL_AD_BAD_CERTIFICATE_STATUS_RESPONSE;
  2434. ret = SSL_TLSEXT_ERR_ALERT_FATAL;
  2435. }
  2436. if (r < 0)
  2437. {
  2438. al = SSL_AD_INTERNAL_ERROR;
  2439. ret = SSL_TLSEXT_ERR_ALERT_FATAL;
  2440. }
  2441. }
  2442. switch (ret)
  2443. {
  2444. case SSL_TLSEXT_ERR_ALERT_FATAL:
  2445. ssl3_send_alert(s,SSL3_AL_FATAL,al);
  2446. return -1;
  2447. case SSL_TLSEXT_ERR_ALERT_WARNING:
  2448. ssl3_send_alert(s,SSL3_AL_WARNING,al);
  2449. return 1;
  2450. case SSL_TLSEXT_ERR_NOACK:
  2451. s->servername_done=0;
  2452. default:
  2453. return 1;
  2454. }
  2455. }
  2456. int ssl_parse_serverhello_tlsext(SSL *s, CBS *cbs)
  2457. {
  2458. int alert = -1;
  2459. if (s->version < SSL3_VERSION)
  2460. return 1;
  2461. if (ssl_scan_serverhello_tlsext(s, cbs, &alert) <= 0)
  2462. {
  2463. ssl3_send_alert(s, SSL3_AL_FATAL, alert);
  2464. return 0;
  2465. }
  2466. if (ssl_check_serverhello_tlsext(s) <= 0)
  2467. {
  2468. OPENSSL_PUT_ERROR(SSL, ssl_parse_serverhello_tlsext, SSL_R_SERVERHELLO_TLSEXT);
  2469. return 0;
  2470. }
  2471. return 1;
  2472. }
  2473. /* Since the server cache lookup is done early on in the processing of the
  2474. * ClientHello, and other operations depend on the result, we need to handle
  2475. * any TLS session ticket extension at the same time.
  2476. *
  2477. * ctx: contains the early callback context, which is the result of a
  2478. * shallow parse of the ClientHello.
  2479. * ret: (output) on return, if a ticket was decrypted, then this is set to
  2480. * point to the resulting session.
  2481. *
  2482. * If s->tls_session_secret_cb is set then we are expecting a pre-shared key
  2483. * ciphersuite, in which case we have no use for session tickets and one will
  2484. * never be decrypted, nor will s->tlsext_ticket_expected be set to 1.
  2485. *
  2486. * Returns:
  2487. * -1: fatal error, either from parsing or decrypting the ticket.
  2488. * 0: no ticket was found (or was ignored, based on settings).
  2489. * 1: a zero length extension was found, indicating that the client supports
  2490. * session tickets but doesn't currently have one to offer.
  2491. * 2: either s->tls_session_secret_cb was set, or a ticket was offered but
  2492. * couldn't be decrypted because of a non-fatal error.
  2493. * 3: a ticket was successfully decrypted and *ret was set.
  2494. *
  2495. * Side effects:
  2496. * Sets s->tlsext_ticket_expected to 1 if the server will have to issue
  2497. * a new session ticket to the client because the client indicated support
  2498. * (and s->tls_session_secret_cb is NULL) but the client either doesn't have
  2499. * a session ticket or we couldn't use the one it gave us, or if
  2500. * s->ctx->tlsext_ticket_key_cb asked to renew the client's ticket.
  2501. * Otherwise, s->tlsext_ticket_expected is set to 0.
  2502. */
  2503. int tls1_process_ticket(SSL *s, const struct ssl_early_callback_ctx *ctx,
  2504. SSL_SESSION **ret)
  2505. {
  2506. *ret = NULL;
  2507. s->tlsext_ticket_expected = 0;
  2508. const unsigned char *data;
  2509. size_t len;
  2510. int r;
  2511. /* If tickets disabled behave as if no ticket present
  2512. * to permit stateful resumption.
  2513. */
  2514. if (SSL_get_options(s) & SSL_OP_NO_TICKET)
  2515. return 0;
  2516. if ((s->version <= SSL3_VERSION) && !ctx->extensions)
  2517. return 0;
  2518. if (!SSL_early_callback_ctx_extension_get(
  2519. ctx, TLSEXT_TYPE_session_ticket, &data, &len))
  2520. {
  2521. return 0;
  2522. }
  2523. if (len == 0)
  2524. {
  2525. /* The client will accept a ticket but doesn't
  2526. * currently have one. */
  2527. s->tlsext_ticket_expected = 1;
  2528. return 1;
  2529. }
  2530. if (s->tls_session_secret_cb)
  2531. {
  2532. /* Indicate that the ticket couldn't be
  2533. * decrypted rather than generating the session
  2534. * from ticket now, trigger abbreviated
  2535. * handshake based on external mechanism to
  2536. * calculate the master secret later. */
  2537. return 2;
  2538. }
  2539. r = tls_decrypt_ticket(s, data, len, ctx->session_id,
  2540. ctx->session_id_len, ret);
  2541. switch (r)
  2542. {
  2543. case 2: /* ticket couldn't be decrypted */
  2544. s->tlsext_ticket_expected = 1;
  2545. return 2;
  2546. case 3: /* ticket was decrypted */
  2547. return r;
  2548. case 4: /* ticket decrypted but need to renew */
  2549. s->tlsext_ticket_expected = 1;
  2550. return 3;
  2551. default: /* fatal error */
  2552. return -1;
  2553. }
  2554. }
  2555. /* tls_decrypt_ticket attempts to decrypt a session ticket.
  2556. *
  2557. * etick: points to the body of the session ticket extension.
  2558. * eticklen: the length of the session tickets extenion.
  2559. * sess_id: points at the session ID.
  2560. * sesslen: the length of the session ID.
  2561. * psess: (output) on return, if a ticket was decrypted, then this is set to
  2562. * point to the resulting session.
  2563. *
  2564. * Returns:
  2565. * -1: fatal error, either from parsing or decrypting the ticket.
  2566. * 2: the ticket couldn't be decrypted.
  2567. * 3: a ticket was successfully decrypted and *psess was set.
  2568. * 4: same as 3, but the ticket needs to be renewed.
  2569. */
  2570. static int tls_decrypt_ticket(SSL *s, const unsigned char *etick, int eticklen,
  2571. const unsigned char *sess_id, int sesslen,
  2572. SSL_SESSION **psess)
  2573. {
  2574. SSL_SESSION *sess;
  2575. unsigned char *sdec;
  2576. const unsigned char *p;
  2577. int slen, mlen, renew_ticket = 0;
  2578. unsigned char tick_hmac[EVP_MAX_MD_SIZE];
  2579. HMAC_CTX hctx;
  2580. EVP_CIPHER_CTX ctx;
  2581. SSL_CTX *tctx = s->initial_ctx;
  2582. /* Need at least keyname + iv + some encrypted data */
  2583. if (eticklen < 48)
  2584. return 2;
  2585. /* Initialize session ticket encryption and HMAC contexts */
  2586. HMAC_CTX_init(&hctx);
  2587. EVP_CIPHER_CTX_init(&ctx);
  2588. if (tctx->tlsext_ticket_key_cb)
  2589. {
  2590. unsigned char *nctick = (unsigned char *)etick;
  2591. int rv = tctx->tlsext_ticket_key_cb(s, nctick, nctick + 16,
  2592. &ctx, &hctx, 0);
  2593. if (rv < 0)
  2594. return -1;
  2595. if (rv == 0)
  2596. return 2;
  2597. if (rv == 2)
  2598. renew_ticket = 1;
  2599. }
  2600. else
  2601. {
  2602. /* Check key name matches */
  2603. if (memcmp(etick, tctx->tlsext_tick_key_name, 16))
  2604. return 2;
  2605. HMAC_Init_ex(&hctx, tctx->tlsext_tick_hmac_key, 16,
  2606. tlsext_tick_md(), NULL);
  2607. EVP_DecryptInit_ex(&ctx, EVP_aes_128_cbc(), NULL,
  2608. tctx->tlsext_tick_aes_key, etick + 16);
  2609. }
  2610. /* Attempt to process session ticket, first conduct sanity and
  2611. * integrity checks on ticket.
  2612. */
  2613. mlen = HMAC_size(&hctx);
  2614. if (mlen < 0)
  2615. {
  2616. EVP_CIPHER_CTX_cleanup(&ctx);
  2617. return -1;
  2618. }
  2619. eticklen -= mlen;
  2620. /* Check HMAC of encrypted ticket */
  2621. HMAC_Update(&hctx, etick, eticklen);
  2622. HMAC_Final(&hctx, tick_hmac, NULL);
  2623. HMAC_CTX_cleanup(&hctx);
  2624. if (CRYPTO_memcmp(tick_hmac, etick + eticklen, mlen))
  2625. return 2;
  2626. /* Attempt to decrypt session data */
  2627. /* Move p after IV to start of encrypted ticket, update length */
  2628. p = etick + 16 + EVP_CIPHER_CTX_iv_length(&ctx);
  2629. eticklen -= 16 + EVP_CIPHER_CTX_iv_length(&ctx);
  2630. sdec = OPENSSL_malloc(eticklen);
  2631. if (!sdec)
  2632. {
  2633. EVP_CIPHER_CTX_cleanup(&ctx);
  2634. return -1;
  2635. }
  2636. EVP_DecryptUpdate(&ctx, sdec, &slen, p, eticklen);
  2637. if (EVP_DecryptFinal_ex(&ctx, sdec + slen, &mlen) <= 0)
  2638. return 2;
  2639. slen += mlen;
  2640. EVP_CIPHER_CTX_cleanup(&ctx);
  2641. p = sdec;
  2642. sess = d2i_SSL_SESSION(NULL, &p, slen);
  2643. OPENSSL_free(sdec);
  2644. if (sess)
  2645. {
  2646. /* The session ID, if non-empty, is used by some clients to
  2647. * detect that the ticket has been accepted. So we copy it to
  2648. * the session structure. If it is empty set length to zero
  2649. * as required by standard.
  2650. */
  2651. if (sesslen)
  2652. memcpy(sess->session_id, sess_id, sesslen);
  2653. sess->session_id_length = sesslen;
  2654. *psess = sess;
  2655. if (renew_ticket)
  2656. return 4;
  2657. else
  2658. return 3;
  2659. }
  2660. ERR_clear_error();
  2661. /* For session parse failure, indicate that we need to send a new
  2662. * ticket. */
  2663. return 2;
  2664. }
  2665. /* Tables to translate from NIDs to TLS v1.2 ids */
  2666. typedef struct
  2667. {
  2668. int nid;
  2669. int id;
  2670. } tls12_lookup;
  2671. static tls12_lookup tls12_md[] = {
  2672. {NID_md5, TLSEXT_hash_md5},
  2673. {NID_sha1, TLSEXT_hash_sha1},
  2674. {NID_sha224, TLSEXT_hash_sha224},
  2675. {NID_sha256, TLSEXT_hash_sha256},
  2676. {NID_sha384, TLSEXT_hash_sha384},
  2677. {NID_sha512, TLSEXT_hash_sha512}
  2678. };
  2679. static tls12_lookup tls12_sig[] = {
  2680. {EVP_PKEY_RSA, TLSEXT_signature_rsa},
  2681. {EVP_PKEY_DSA, TLSEXT_signature_dsa},
  2682. {EVP_PKEY_EC, TLSEXT_signature_ecdsa}
  2683. };
  2684. static int tls12_find_id(int nid, tls12_lookup *table, size_t tlen)
  2685. {
  2686. size_t i;
  2687. for (i = 0; i < tlen; i++)
  2688. {
  2689. if (table[i].nid == nid)
  2690. return table[i].id;
  2691. }
  2692. return -1;
  2693. }
  2694. static int tls12_find_nid(int id, tls12_lookup *table, size_t tlen)
  2695. {
  2696. size_t i;
  2697. for (i = 0; i < tlen; i++)
  2698. {
  2699. if ((table[i].id) == id)
  2700. return table[i].nid;
  2701. }
  2702. return NID_undef;
  2703. }
  2704. int tls12_get_sigandhash(unsigned char *p, const EVP_PKEY *pk, const EVP_MD *md)
  2705. {
  2706. int sig_id, md_id;
  2707. if (!md)
  2708. return 0;
  2709. md_id = tls12_find_id(EVP_MD_type(md), tls12_md,
  2710. sizeof(tls12_md)/sizeof(tls12_lookup));
  2711. if (md_id == -1)
  2712. return 0;
  2713. sig_id = tls12_get_sigid(pk);
  2714. if (sig_id == -1)
  2715. return 0;
  2716. p[0] = (unsigned char)md_id;
  2717. p[1] = (unsigned char)sig_id;
  2718. return 1;
  2719. }
  2720. int tls12_get_sigid(const EVP_PKEY *pk)
  2721. {
  2722. return tls12_find_id(pk->type, tls12_sig,
  2723. sizeof(tls12_sig)/sizeof(tls12_lookup));
  2724. }
  2725. const EVP_MD *tls12_get_hash(unsigned char hash_alg)
  2726. {
  2727. switch(hash_alg)
  2728. {
  2729. #ifndef OPENSSL_NO_MD5
  2730. case TLSEXT_hash_md5:
  2731. return EVP_md5();
  2732. #endif
  2733. #ifndef OPENSSL_NO_SHA
  2734. case TLSEXT_hash_sha1:
  2735. return EVP_sha1();
  2736. #endif
  2737. #ifndef OPENSSL_NO_SHA256
  2738. case TLSEXT_hash_sha224:
  2739. return EVP_sha224();
  2740. case TLSEXT_hash_sha256:
  2741. return EVP_sha256();
  2742. #endif
  2743. #ifndef OPENSSL_NO_SHA512
  2744. case TLSEXT_hash_sha384:
  2745. return EVP_sha384();
  2746. case TLSEXT_hash_sha512:
  2747. return EVP_sha512();
  2748. #endif
  2749. default:
  2750. return NULL;
  2751. }
  2752. }
  2753. static int tls12_get_pkey_idx(unsigned char sig_alg)
  2754. {
  2755. switch(sig_alg)
  2756. {
  2757. case TLSEXT_signature_rsa:
  2758. return SSL_PKEY_RSA_SIGN;
  2759. #ifndef OPENSSL_NO_DSA
  2760. case TLSEXT_signature_dsa:
  2761. return SSL_PKEY_DSA_SIGN;
  2762. #endif
  2763. #ifndef OPENSSL_NO_ECDSA
  2764. case TLSEXT_signature_ecdsa:
  2765. return SSL_PKEY_ECC;
  2766. #endif
  2767. }
  2768. return -1;
  2769. }
  2770. /* Convert TLS 1.2 signature algorithm extension values into NIDs */
  2771. static void tls1_lookup_sigalg(int *phash_nid, int *psign_nid,
  2772. int *psignhash_nid, const unsigned char *data)
  2773. {
  2774. int sign_nid = 0, hash_nid = 0;
  2775. if (!phash_nid && !psign_nid && !psignhash_nid)
  2776. return;
  2777. if (phash_nid || psignhash_nid)
  2778. {
  2779. hash_nid = tls12_find_nid(data[0], tls12_md,
  2780. sizeof(tls12_md)/sizeof(tls12_lookup));
  2781. if (phash_nid)
  2782. *phash_nid = hash_nid;
  2783. }
  2784. if (psign_nid || psignhash_nid)
  2785. {
  2786. sign_nid = tls12_find_nid(data[1], tls12_sig,
  2787. sizeof(tls12_sig)/sizeof(tls12_lookup));
  2788. if (psign_nid)
  2789. *psign_nid = sign_nid;
  2790. }
  2791. if (psignhash_nid)
  2792. {
  2793. if (sign_nid && hash_nid)
  2794. OBJ_find_sigid_by_algs(psignhash_nid,
  2795. hash_nid, sign_nid);
  2796. else
  2797. *psignhash_nid = NID_undef;
  2798. }
  2799. }
  2800. /* Given preference and allowed sigalgs set shared sigalgs */
  2801. static int tls12_do_shared_sigalgs(TLS_SIGALGS *shsig,
  2802. const unsigned char *pref, size_t preflen,
  2803. const unsigned char *allow, size_t allowlen)
  2804. {
  2805. const unsigned char *ptmp, *atmp;
  2806. size_t i, j, nmatch = 0;
  2807. for (i = 0, ptmp = pref; i < preflen; i+=2, ptmp+=2)
  2808. {
  2809. /* Skip disabled hashes or signature algorithms */
  2810. if (tls12_get_hash(ptmp[0]) == NULL)
  2811. continue;
  2812. if (tls12_get_pkey_idx(ptmp[1]) == -1)
  2813. continue;
  2814. for (j = 0, atmp = allow; j < allowlen; j+=2, atmp+=2)
  2815. {
  2816. if (ptmp[0] == atmp[0] && ptmp[1] == atmp[1])
  2817. {
  2818. nmatch++;
  2819. if (shsig)
  2820. {
  2821. shsig->rhash = ptmp[0];
  2822. shsig->rsign = ptmp[1];
  2823. tls1_lookup_sigalg(&shsig->hash_nid,
  2824. &shsig->sign_nid,
  2825. &shsig->signandhash_nid,
  2826. ptmp);
  2827. shsig++;
  2828. }
  2829. break;
  2830. }
  2831. }
  2832. }
  2833. return nmatch;
  2834. }
  2835. /* Set shared signature algorithms for SSL structures */
  2836. static int tls1_set_shared_sigalgs(SSL *s)
  2837. {
  2838. const unsigned char *pref, *allow, *conf;
  2839. size_t preflen, allowlen, conflen;
  2840. size_t nmatch;
  2841. TLS_SIGALGS *salgs = NULL;
  2842. CERT *c = s->cert;
  2843. unsigned int is_suiteb = tls1_suiteb(s);
  2844. if (c->shared_sigalgs)
  2845. {
  2846. OPENSSL_free(c->shared_sigalgs);
  2847. c->shared_sigalgs = NULL;
  2848. }
  2849. /* If client use client signature algorithms if not NULL */
  2850. if (!s->server && c->client_sigalgs && !is_suiteb)
  2851. {
  2852. conf = c->client_sigalgs;
  2853. conflen = c->client_sigalgslen;
  2854. }
  2855. else if (c->conf_sigalgs && !is_suiteb)
  2856. {
  2857. conf = c->conf_sigalgs;
  2858. conflen = c->conf_sigalgslen;
  2859. }
  2860. else
  2861. conflen = tls12_get_psigalgs(s, &conf);
  2862. if(s->options & SSL_OP_CIPHER_SERVER_PREFERENCE || is_suiteb)
  2863. {
  2864. pref = conf;
  2865. preflen = conflen;
  2866. allow = c->peer_sigalgs;
  2867. allowlen = c->peer_sigalgslen;
  2868. }
  2869. else
  2870. {
  2871. allow = conf;
  2872. allowlen = conflen;
  2873. pref = c->peer_sigalgs;
  2874. preflen = c->peer_sigalgslen;
  2875. }
  2876. nmatch = tls12_do_shared_sigalgs(NULL, pref, preflen, allow, allowlen);
  2877. if (!nmatch)
  2878. return 1;
  2879. salgs = OPENSSL_malloc(nmatch * sizeof(TLS_SIGALGS));
  2880. if (!salgs)
  2881. return 0;
  2882. nmatch = tls12_do_shared_sigalgs(salgs, pref, preflen, allow, allowlen);
  2883. c->shared_sigalgs = salgs;
  2884. c->shared_sigalgslen = nmatch;
  2885. return 1;
  2886. }
  2887. /* Set preferred digest for each key type */
  2888. int tls1_process_sigalgs(SSL *s, const unsigned char *data, int dsize)
  2889. {
  2890. int idx;
  2891. size_t i;
  2892. const EVP_MD *md;
  2893. CERT *c = s->cert;
  2894. TLS_SIGALGS *sigptr;
  2895. /* Extension ignored for inappropriate versions */
  2896. if (!SSL_USE_SIGALGS(s))
  2897. return 1;
  2898. /* Length must be even */
  2899. if (dsize % 2 != 0)
  2900. return 0;
  2901. /* Should never happen */
  2902. if (!c)
  2903. return 0;
  2904. if (c->peer_sigalgs)
  2905. OPENSSL_free(c->peer_sigalgs);
  2906. c->peer_sigalgs = OPENSSL_malloc(dsize);
  2907. if (!c->peer_sigalgs)
  2908. return 0;
  2909. c->peer_sigalgslen = dsize;
  2910. memcpy(c->peer_sigalgs, data, dsize);
  2911. tls1_set_shared_sigalgs(s);
  2912. #ifdef OPENSSL_SSL_DEBUG_BROKEN_PROTOCOL
  2913. if (s->cert->cert_flags & SSL_CERT_FLAG_BROKEN_PROTOCOL)
  2914. {
  2915. /* Use first set signature preference to force message
  2916. * digest, ignoring any peer preferences.
  2917. */
  2918. const unsigned char *sigs = NULL;
  2919. if (s->server)
  2920. sigs = c->conf_sigalgs;
  2921. else
  2922. sigs = c->client_sigalgs;
  2923. if (sigs)
  2924. {
  2925. idx = tls12_get_pkey_idx(sigs[1]);
  2926. md = tls12_get_hash(sigs[0]);
  2927. c->pkeys[idx].digest = md;
  2928. c->pkeys[idx].valid_flags = CERT_PKEY_EXPLICIT_SIGN;
  2929. if (idx == SSL_PKEY_RSA_SIGN)
  2930. {
  2931. c->pkeys[SSL_PKEY_RSA_ENC].valid_flags = CERT_PKEY_EXPLICIT_SIGN;
  2932. c->pkeys[SSL_PKEY_RSA_ENC].digest = md;
  2933. }
  2934. }
  2935. }
  2936. #endif
  2937. for (i = 0, sigptr = c->shared_sigalgs;
  2938. i < c->shared_sigalgslen; i++, sigptr++)
  2939. {
  2940. idx = tls12_get_pkey_idx(sigptr->rsign);
  2941. if (idx > 0 && c->pkeys[idx].digest == NULL)
  2942. {
  2943. md = tls12_get_hash(sigptr->rhash);
  2944. c->pkeys[idx].digest = md;
  2945. c->pkeys[idx].valid_flags = CERT_PKEY_EXPLICIT_SIGN;
  2946. if (idx == SSL_PKEY_RSA_SIGN)
  2947. {
  2948. c->pkeys[SSL_PKEY_RSA_ENC].valid_flags = CERT_PKEY_EXPLICIT_SIGN;
  2949. c->pkeys[SSL_PKEY_RSA_ENC].digest = md;
  2950. }
  2951. }
  2952. }
  2953. /* In strict mode leave unset digests as NULL to indicate we can't
  2954. * use the certificate for signing.
  2955. */
  2956. if (!(s->cert->cert_flags & SSL_CERT_FLAGS_CHECK_TLS_STRICT))
  2957. {
  2958. /* Set any remaining keys to default values. NOTE: if alg is
  2959. * not supported it stays as NULL.
  2960. */
  2961. #ifndef OPENSSL_NO_DSA
  2962. if (!c->pkeys[SSL_PKEY_DSA_SIGN].digest)
  2963. c->pkeys[SSL_PKEY_DSA_SIGN].digest = EVP_sha1();
  2964. #endif
  2965. if (!c->pkeys[SSL_PKEY_RSA_SIGN].digest)
  2966. {
  2967. c->pkeys[SSL_PKEY_RSA_SIGN].digest = EVP_sha1();
  2968. c->pkeys[SSL_PKEY_RSA_ENC].digest = EVP_sha1();
  2969. }
  2970. #ifndef OPENSSL_NO_ECDSA
  2971. if (!c->pkeys[SSL_PKEY_ECC].digest)
  2972. c->pkeys[SSL_PKEY_ECC].digest = EVP_sha1();
  2973. #endif
  2974. }
  2975. return 1;
  2976. }
  2977. int SSL_get_sigalgs(SSL *s, int idx,
  2978. int *psign, int *phash, int *psignhash,
  2979. unsigned char *rsig, unsigned char *rhash)
  2980. {
  2981. const unsigned char *psig = s->cert->peer_sigalgs;
  2982. if (psig == NULL)
  2983. return 0;
  2984. if (idx >= 0)
  2985. {
  2986. idx <<= 1;
  2987. if (idx >= (int)s->cert->peer_sigalgslen)
  2988. return 0;
  2989. psig += idx;
  2990. if (rhash)
  2991. *rhash = psig[0];
  2992. if (rsig)
  2993. *rsig = psig[1];
  2994. tls1_lookup_sigalg(phash, psign, psignhash, psig);
  2995. }
  2996. return s->cert->peer_sigalgslen / 2;
  2997. }
  2998. int SSL_get_shared_sigalgs(SSL *s, int idx,
  2999. int *psign, int *phash, int *psignhash,
  3000. unsigned char *rsig, unsigned char *rhash)
  3001. {
  3002. TLS_SIGALGS *shsigalgs = s->cert->shared_sigalgs;
  3003. if (!shsigalgs || idx >= (int)s->cert->shared_sigalgslen)
  3004. return 0;
  3005. shsigalgs += idx;
  3006. if (phash)
  3007. *phash = shsigalgs->hash_nid;
  3008. if (psign)
  3009. *psign = shsigalgs->sign_nid;
  3010. if (psignhash)
  3011. *psignhash = shsigalgs->signandhash_nid;
  3012. if (rsig)
  3013. *rsig = shsigalgs->rsign;
  3014. if (rhash)
  3015. *rhash = shsigalgs->rhash;
  3016. return s->cert->shared_sigalgslen;
  3017. }
  3018. /* tls1_channel_id_hash calculates the signed data for a Channel ID on the given
  3019. * SSL connection and writes it to |md|. */
  3020. int
  3021. tls1_channel_id_hash(EVP_MD_CTX *md, SSL *s)
  3022. {
  3023. EVP_MD_CTX ctx;
  3024. unsigned char temp_digest[EVP_MAX_MD_SIZE];
  3025. unsigned temp_digest_len;
  3026. int i;
  3027. static const char kClientIDMagic[] = "TLS Channel ID signature";
  3028. if (s->s3->handshake_buffer)
  3029. if (!ssl3_digest_cached_records(s))
  3030. return 0;
  3031. EVP_DigestUpdate(md, kClientIDMagic, sizeof(kClientIDMagic));
  3032. if (s->hit && s->s3->tlsext_channel_id_new)
  3033. {
  3034. static const char kResumptionMagic[] = "Resumption";
  3035. EVP_DigestUpdate(md, kResumptionMagic,
  3036. sizeof(kResumptionMagic));
  3037. if (s->session->original_handshake_hash_len == 0)
  3038. return 0;
  3039. EVP_DigestUpdate(md, s->session->original_handshake_hash,
  3040. s->session->original_handshake_hash_len);
  3041. }
  3042. EVP_MD_CTX_init(&ctx);
  3043. for (i = 0; i < SSL_MAX_DIGEST; i++)
  3044. {
  3045. if (s->s3->handshake_dgst[i] == NULL)
  3046. continue;
  3047. EVP_MD_CTX_copy_ex(&ctx, s->s3->handshake_dgst[i]);
  3048. EVP_DigestFinal_ex(&ctx, temp_digest, &temp_digest_len);
  3049. EVP_DigestUpdate(md, temp_digest, temp_digest_len);
  3050. }
  3051. EVP_MD_CTX_cleanup(&ctx);
  3052. return 1;
  3053. }
  3054. /* tls1_record_handshake_hashes_for_channel_id records the current handshake
  3055. * hashes in |s->session| so that Channel ID resumptions can sign that data. */
  3056. int tls1_record_handshake_hashes_for_channel_id(SSL *s)
  3057. {
  3058. int digest_len;
  3059. /* This function should never be called for a resumed session because
  3060. * the handshake hashes that we wish to record are for the original,
  3061. * full handshake. */
  3062. if (s->hit)
  3063. return -1;
  3064. /* It only makes sense to call this function if Channel IDs have been
  3065. * negotiated. */
  3066. if (!s->s3->tlsext_channel_id_new)
  3067. return -1;
  3068. digest_len = tls1_handshake_digest(
  3069. s, s->session->original_handshake_hash,
  3070. sizeof(s->session->original_handshake_hash));
  3071. if (digest_len < 0)
  3072. return -1;
  3073. s->session->original_handshake_hash_len = digest_len;
  3074. return 1;
  3075. }
  3076. /* TODO(fork): remove */
  3077. #if 0
  3078. #define MAX_SIGALGLEN (TLSEXT_hash_num * TLSEXT_signature_num * 2)
  3079. typedef struct
  3080. {
  3081. size_t sigalgcnt;
  3082. int sigalgs[MAX_SIGALGLEN];
  3083. } sig_cb_st;
  3084. static int sig_cb(const char *elem, int len, void *arg)
  3085. {
  3086. sig_cb_st *sarg = arg;
  3087. size_t i;
  3088. char etmp[20], *p;
  3089. int sig_alg, hash_alg;
  3090. if (sarg->sigalgcnt == MAX_SIGALGLEN)
  3091. return 0;
  3092. if (len > (int)(sizeof(etmp) - 1))
  3093. return 0;
  3094. memcpy(etmp, elem, len);
  3095. etmp[len] = 0;
  3096. p = strchr(etmp, '+');
  3097. if (!p)
  3098. return 0;
  3099. *p = 0;
  3100. p++;
  3101. if (!*p)
  3102. return 0;
  3103. if (!strcmp(etmp, "RSA"))
  3104. sig_alg = EVP_PKEY_RSA;
  3105. else if (!strcmp(etmp, "DSA"))
  3106. sig_alg = EVP_PKEY_DSA;
  3107. else if (!strcmp(etmp, "ECDSA"))
  3108. sig_alg = EVP_PKEY_EC;
  3109. else return 0;
  3110. hash_alg = OBJ_sn2nid(p);
  3111. if (hash_alg == NID_undef)
  3112. hash_alg = OBJ_ln2nid(p);
  3113. if (hash_alg == NID_undef)
  3114. return 0;
  3115. for (i = 0; i < sarg->sigalgcnt; i+=2)
  3116. {
  3117. if (sarg->sigalgs[i] == sig_alg
  3118. && sarg->sigalgs[i + 1] == hash_alg)
  3119. return 0;
  3120. }
  3121. sarg->sigalgs[sarg->sigalgcnt++] = hash_alg;
  3122. sarg->sigalgs[sarg->sigalgcnt++] = sig_alg;
  3123. return 1;
  3124. }
  3125. /* Set suppored signature algorithms based on a colon separated list
  3126. * of the form sig+hash e.g. RSA+SHA512:DSA+SHA512 */
  3127. int tls1_set_sigalgs_list(CERT *c, const char *str, int client)
  3128. {
  3129. sig_cb_st sig;
  3130. sig.sigalgcnt = 0;
  3131. if (!CONF_parse_list(str, ':', 1, sig_cb, &sig))
  3132. return 0;
  3133. if (c == NULL)
  3134. return 1;
  3135. return tls1_set_sigalgs(c, sig.sigalgs, sig.sigalgcnt, client);
  3136. }
  3137. #endif
  3138. int tls1_set_sigalgs(CERT *c, const int *psig_nids, size_t salglen, int client)
  3139. {
  3140. unsigned char *sigalgs, *sptr;
  3141. int rhash, rsign;
  3142. size_t i;
  3143. if (salglen & 1)
  3144. return 0;
  3145. sigalgs = OPENSSL_malloc(salglen);
  3146. if (sigalgs == NULL)
  3147. return 0;
  3148. for (i = 0, sptr = sigalgs; i < salglen; i+=2)
  3149. {
  3150. rhash = tls12_find_id(*psig_nids++, tls12_md,
  3151. sizeof(tls12_md)/sizeof(tls12_lookup));
  3152. rsign = tls12_find_id(*psig_nids++, tls12_sig,
  3153. sizeof(tls12_sig)/sizeof(tls12_lookup));
  3154. if (rhash == -1 || rsign == -1)
  3155. goto err;
  3156. *sptr++ = rhash;
  3157. *sptr++ = rsign;
  3158. }
  3159. if (client)
  3160. {
  3161. if (c->client_sigalgs)
  3162. OPENSSL_free(c->client_sigalgs);
  3163. c->client_sigalgs = sigalgs;
  3164. c->client_sigalgslen = salglen;
  3165. }
  3166. else
  3167. {
  3168. if (c->conf_sigalgs)
  3169. OPENSSL_free(c->conf_sigalgs);
  3170. c->conf_sigalgs = sigalgs;
  3171. c->conf_sigalgslen = salglen;
  3172. }
  3173. return 1;
  3174. err:
  3175. OPENSSL_free(sigalgs);
  3176. return 0;
  3177. }
  3178. static int tls1_check_sig_alg(CERT *c, X509 *x, int default_nid)
  3179. {
  3180. int sig_nid;
  3181. size_t i;
  3182. if (default_nid == -1)
  3183. return 1;
  3184. sig_nid = X509_get_signature_nid(x);
  3185. if (default_nid)
  3186. return sig_nid == default_nid ? 1 : 0;
  3187. for (i = 0; i < c->shared_sigalgslen; i++)
  3188. if (sig_nid == c->shared_sigalgs[i].signandhash_nid)
  3189. return 1;
  3190. return 0;
  3191. }
  3192. /* Check to see if a certificate issuer name matches list of CA names */
  3193. static int ssl_check_ca_name(STACK_OF(X509_NAME) *names, X509 *x)
  3194. {
  3195. X509_NAME *nm;
  3196. int i;
  3197. nm = X509_get_issuer_name(x);
  3198. for (i = 0; i < sk_X509_NAME_num(names); i++)
  3199. {
  3200. if(!X509_NAME_cmp(nm, sk_X509_NAME_value(names, i)))
  3201. return 1;
  3202. }
  3203. return 0;
  3204. }
  3205. /* Check certificate chain is consistent with TLS extensions and is
  3206. * usable by server. This servers two purposes: it allows users to
  3207. * check chains before passing them to the server and it allows the
  3208. * server to check chains before attempting to use them.
  3209. */
  3210. /* Flags which need to be set for a certificate when stict mode not set */
  3211. #define CERT_PKEY_VALID_FLAGS \
  3212. (CERT_PKEY_EE_SIGNATURE|CERT_PKEY_EE_PARAM)
  3213. /* Strict mode flags */
  3214. #define CERT_PKEY_STRICT_FLAGS \
  3215. (CERT_PKEY_VALID_FLAGS|CERT_PKEY_CA_SIGNATURE|CERT_PKEY_CA_PARAM \
  3216. | CERT_PKEY_ISSUER_NAME|CERT_PKEY_CERT_TYPE)
  3217. int tls1_check_chain(SSL *s, X509 *x, EVP_PKEY *pk, STACK_OF(X509) *chain,
  3218. int idx)
  3219. {
  3220. int i;
  3221. int rv = 0;
  3222. int check_flags = 0, strict_mode;
  3223. CERT_PKEY *cpk = NULL;
  3224. CERT *c = s->cert;
  3225. unsigned int suiteb_flags = tls1_suiteb(s);
  3226. /* idx == -1 means checking server chains */
  3227. if (idx != -1)
  3228. {
  3229. /* idx == -2 means checking client certificate chains */
  3230. if (idx == -2)
  3231. {
  3232. cpk = c->key;
  3233. idx = cpk - c->pkeys;
  3234. }
  3235. else
  3236. cpk = c->pkeys + idx;
  3237. x = cpk->x509;
  3238. pk = cpk->privatekey;
  3239. chain = cpk->chain;
  3240. strict_mode = c->cert_flags & SSL_CERT_FLAGS_CHECK_TLS_STRICT;
  3241. /* If no cert or key, forget it */
  3242. if (!x || !pk)
  3243. goto end;
  3244. #ifdef OPENSSL_SSL_DEBUG_BROKEN_PROTOCOL
  3245. /* Allow any certificate to pass test */
  3246. if (s->cert->cert_flags & SSL_CERT_FLAG_BROKEN_PROTOCOL)
  3247. {
  3248. rv = CERT_PKEY_STRICT_FLAGS|CERT_PKEY_EXPLICIT_SIGN|CERT_PKEY_VALID|CERT_PKEY_SIGN;
  3249. cpk->valid_flags = rv;
  3250. return rv;
  3251. }
  3252. #endif
  3253. }
  3254. else
  3255. {
  3256. if (!x || !pk)
  3257. goto end;
  3258. idx = ssl_cert_type(x, pk);
  3259. if (idx == -1)
  3260. goto end;
  3261. cpk = c->pkeys + idx;
  3262. if (c->cert_flags & SSL_CERT_FLAGS_CHECK_TLS_STRICT)
  3263. check_flags = CERT_PKEY_STRICT_FLAGS;
  3264. else
  3265. check_flags = CERT_PKEY_VALID_FLAGS;
  3266. strict_mode = 1;
  3267. }
  3268. if (suiteb_flags)
  3269. {
  3270. int ok;
  3271. if (check_flags)
  3272. check_flags |= CERT_PKEY_SUITEB;
  3273. ok = X509_chain_check_suiteb(NULL, x, chain, suiteb_flags);
  3274. if (ok != X509_V_OK)
  3275. {
  3276. if (check_flags)
  3277. rv |= CERT_PKEY_SUITEB;
  3278. else
  3279. goto end;
  3280. }
  3281. }
  3282. /* Check all signature algorithms are consistent with
  3283. * signature algorithms extension if TLS 1.2 or later
  3284. * and strict mode.
  3285. */
  3286. if (TLS1_get_version(s) >= TLS1_2_VERSION && strict_mode)
  3287. {
  3288. int default_nid;
  3289. unsigned char rsign = 0;
  3290. if (c->peer_sigalgs)
  3291. default_nid = 0;
  3292. /* If no sigalgs extension use defaults from RFC5246 */
  3293. else
  3294. {
  3295. switch(idx)
  3296. {
  3297. case SSL_PKEY_RSA_ENC:
  3298. case SSL_PKEY_RSA_SIGN:
  3299. case SSL_PKEY_DH_RSA:
  3300. rsign = TLSEXT_signature_rsa;
  3301. default_nid = NID_sha1WithRSAEncryption;
  3302. break;
  3303. case SSL_PKEY_DSA_SIGN:
  3304. case SSL_PKEY_DH_DSA:
  3305. rsign = TLSEXT_signature_dsa;
  3306. default_nid = NID_dsaWithSHA1;
  3307. break;
  3308. case SSL_PKEY_ECC:
  3309. rsign = TLSEXT_signature_ecdsa;
  3310. default_nid = NID_ecdsa_with_SHA1;
  3311. break;
  3312. default:
  3313. default_nid = -1;
  3314. break;
  3315. }
  3316. }
  3317. /* If peer sent no signature algorithms extension and we
  3318. * have set preferred signature algorithms check we support
  3319. * sha1.
  3320. */
  3321. if (default_nid > 0 && c->conf_sigalgs)
  3322. {
  3323. size_t j;
  3324. const unsigned char *p = c->conf_sigalgs;
  3325. for (j = 0; j < c->conf_sigalgslen; j += 2, p += 2)
  3326. {
  3327. if (p[0] == TLSEXT_hash_sha1 && p[1] == rsign)
  3328. break;
  3329. }
  3330. if (j == c->conf_sigalgslen)
  3331. {
  3332. if (check_flags)
  3333. goto skip_sigs;
  3334. else
  3335. goto end;
  3336. }
  3337. }
  3338. /* Check signature algorithm of each cert in chain */
  3339. if (!tls1_check_sig_alg(c, x, default_nid))
  3340. {
  3341. if (!check_flags) goto end;
  3342. }
  3343. else
  3344. rv |= CERT_PKEY_EE_SIGNATURE;
  3345. rv |= CERT_PKEY_CA_SIGNATURE;
  3346. for (i = 0; i < sk_X509_num(chain); i++)
  3347. {
  3348. if (!tls1_check_sig_alg(c, sk_X509_value(chain, i),
  3349. default_nid))
  3350. {
  3351. if (check_flags)
  3352. {
  3353. rv &= ~CERT_PKEY_CA_SIGNATURE;
  3354. break;
  3355. }
  3356. else
  3357. goto end;
  3358. }
  3359. }
  3360. }
  3361. /* Else not TLS 1.2, so mark EE and CA signing algorithms OK */
  3362. else if(check_flags)
  3363. rv |= CERT_PKEY_EE_SIGNATURE|CERT_PKEY_CA_SIGNATURE;
  3364. skip_sigs:
  3365. /* Check cert parameters are consistent */
  3366. if (tls1_check_cert_param(s, x, check_flags ? 1 : 2))
  3367. rv |= CERT_PKEY_EE_PARAM;
  3368. else if (!check_flags)
  3369. goto end;
  3370. if (!s->server)
  3371. rv |= CERT_PKEY_CA_PARAM;
  3372. /* In strict mode check rest of chain too */
  3373. else if (strict_mode)
  3374. {
  3375. rv |= CERT_PKEY_CA_PARAM;
  3376. for (i = 0; i < sk_X509_num(chain); i++)
  3377. {
  3378. X509 *ca = sk_X509_value(chain, i);
  3379. if (!tls1_check_cert_param(s, ca, 0))
  3380. {
  3381. if (check_flags)
  3382. {
  3383. rv &= ~CERT_PKEY_CA_PARAM;
  3384. break;
  3385. }
  3386. else
  3387. goto end;
  3388. }
  3389. }
  3390. }
  3391. if (!s->server && strict_mode)
  3392. {
  3393. STACK_OF(X509_NAME) *ca_dn;
  3394. uint8_t check_type = 0;
  3395. switch (pk->type)
  3396. {
  3397. case EVP_PKEY_RSA:
  3398. check_type = TLS_CT_RSA_SIGN;
  3399. break;
  3400. case EVP_PKEY_DSA:
  3401. check_type = TLS_CT_DSS_SIGN;
  3402. break;
  3403. case EVP_PKEY_EC:
  3404. check_type = TLS_CT_ECDSA_SIGN;
  3405. break;
  3406. case EVP_PKEY_DH:
  3407. case EVP_PKEY_DHX:
  3408. {
  3409. int cert_type = X509_certificate_type(x, pk);
  3410. if (cert_type & EVP_PKS_RSA)
  3411. check_type = TLS_CT_RSA_FIXED_DH;
  3412. if (cert_type & EVP_PKS_DSA)
  3413. check_type = TLS_CT_DSS_FIXED_DH;
  3414. }
  3415. }
  3416. if (check_type)
  3417. {
  3418. if (s->s3->tmp.certificate_types &&
  3419. memchr(s->s3->tmp.certificate_types, check_type, s->s3->tmp.num_certificate_types))
  3420. {
  3421. rv |= CERT_PKEY_CERT_TYPE;
  3422. }
  3423. if (!(rv & CERT_PKEY_CERT_TYPE) && !check_flags)
  3424. goto end;
  3425. }
  3426. else
  3427. rv |= CERT_PKEY_CERT_TYPE;
  3428. ca_dn = s->s3->tmp.ca_names;
  3429. if (!sk_X509_NAME_num(ca_dn))
  3430. rv |= CERT_PKEY_ISSUER_NAME;
  3431. if (!(rv & CERT_PKEY_ISSUER_NAME))
  3432. {
  3433. if (ssl_check_ca_name(ca_dn, x))
  3434. rv |= CERT_PKEY_ISSUER_NAME;
  3435. }
  3436. if (!(rv & CERT_PKEY_ISSUER_NAME))
  3437. {
  3438. for (i = 0; i < sk_X509_num(chain); i++)
  3439. {
  3440. X509 *xtmp = sk_X509_value(chain, i);
  3441. if (ssl_check_ca_name(ca_dn, xtmp))
  3442. {
  3443. rv |= CERT_PKEY_ISSUER_NAME;
  3444. break;
  3445. }
  3446. }
  3447. }
  3448. if (!check_flags && !(rv & CERT_PKEY_ISSUER_NAME))
  3449. goto end;
  3450. }
  3451. else
  3452. rv |= CERT_PKEY_ISSUER_NAME|CERT_PKEY_CERT_TYPE;
  3453. if (!check_flags || (rv & check_flags) == check_flags)
  3454. rv |= CERT_PKEY_VALID;
  3455. end:
  3456. if (TLS1_get_version(s) >= TLS1_2_VERSION)
  3457. {
  3458. if (cpk->valid_flags & CERT_PKEY_EXPLICIT_SIGN)
  3459. rv |= CERT_PKEY_EXPLICIT_SIGN|CERT_PKEY_SIGN;
  3460. else if (cpk->digest)
  3461. rv |= CERT_PKEY_SIGN;
  3462. }
  3463. else
  3464. rv |= CERT_PKEY_SIGN|CERT_PKEY_EXPLICIT_SIGN;
  3465. /* When checking a CERT_PKEY structure all flags are irrelevant
  3466. * if the chain is invalid.
  3467. */
  3468. if (!check_flags)
  3469. {
  3470. if (rv & CERT_PKEY_VALID)
  3471. cpk->valid_flags = rv;
  3472. else
  3473. {
  3474. /* Preserve explicit sign flag, clear rest */
  3475. cpk->valid_flags &= CERT_PKEY_EXPLICIT_SIGN;
  3476. return 0;
  3477. }
  3478. }
  3479. return rv;
  3480. }
  3481. /* Set validity of certificates in an SSL structure */
  3482. void tls1_set_cert_validity(SSL *s)
  3483. {
  3484. tls1_check_chain(s, NULL, NULL, NULL, SSL_PKEY_RSA_ENC);
  3485. tls1_check_chain(s, NULL, NULL, NULL, SSL_PKEY_RSA_SIGN);
  3486. tls1_check_chain(s, NULL, NULL, NULL, SSL_PKEY_DSA_SIGN);
  3487. tls1_check_chain(s, NULL, NULL, NULL, SSL_PKEY_DH_RSA);
  3488. tls1_check_chain(s, NULL, NULL, NULL, SSL_PKEY_DH_DSA);
  3489. tls1_check_chain(s, NULL, NULL, NULL, SSL_PKEY_ECC);
  3490. }
  3491. /* User level utiity function to check a chain is suitable */
  3492. int SSL_check_chain(SSL *s, X509 *x, EVP_PKEY *pk, STACK_OF(X509) *chain)
  3493. {
  3494. return tls1_check_chain(s, x, pk, chain, -1);
  3495. }