You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

779 rivejä
25 KiB

  1. /* Copyright (c) 2016, Google Inc.
  2. *
  3. * Permission to use, copy, modify, and/or distribute this software for any
  4. * purpose with or without fee is hereby granted, provided that the above
  5. * copyright notice and this permission notice appear in all copies.
  6. *
  7. * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
  8. * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
  9. * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
  10. * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
  11. * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
  12. * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
  13. * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
  14. #include <openssl/ssl.h>
  15. #include <assert.h>
  16. #include <limits.h>
  17. #include <string.h>
  18. #include <openssl/bytestring.h>
  19. #include <openssl/digest.h>
  20. #include <openssl/err.h>
  21. #include <openssl/mem.h>
  22. #include <openssl/stack.h>
  23. #include "../crypto/internal.h"
  24. #include "internal.h"
  25. enum client_hs_state_t {
  26. state_process_hello_retry_request = 0,
  27. state_send_second_client_hello,
  28. state_process_server_hello,
  29. state_process_change_cipher_spec,
  30. state_process_encrypted_extensions,
  31. state_continue_second_server_flight,
  32. state_process_certificate_request,
  33. state_process_server_certificate,
  34. state_process_server_certificate_verify,
  35. state_process_server_finished,
  36. state_send_end_of_early_data,
  37. state_send_client_certificate,
  38. state_send_client_certificate_verify,
  39. state_complete_second_flight,
  40. state_done,
  41. };
  42. static const uint8_t kZeroes[EVP_MAX_MD_SIZE] = {0};
  43. static enum ssl_hs_wait_t do_process_hello_retry_request(SSL_HANDSHAKE *hs) {
  44. SSL *const ssl = hs->ssl;
  45. if (ssl->s3->tmp.message_type != SSL3_MT_HELLO_RETRY_REQUEST) {
  46. hs->tls13_state = state_process_server_hello;
  47. return ssl_hs_ok;
  48. }
  49. CBS cbs, extensions;
  50. uint16_t server_version;
  51. CBS_init(&cbs, ssl->init_msg, ssl->init_num);
  52. if (!CBS_get_u16(&cbs, &server_version) ||
  53. !CBS_get_u16_length_prefixed(&cbs, &extensions) ||
  54. /* HelloRetryRequest may not be empty. */
  55. CBS_len(&extensions) == 0 ||
  56. CBS_len(&cbs) != 0) {
  57. OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
  58. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
  59. return ssl_hs_error;
  60. }
  61. int have_cookie, have_key_share;
  62. CBS cookie, key_share;
  63. const SSL_EXTENSION_TYPE ext_types[] = {
  64. {TLSEXT_TYPE_key_share, &have_key_share, &key_share},
  65. {TLSEXT_TYPE_cookie, &have_cookie, &cookie},
  66. };
  67. uint8_t alert = SSL_AD_DECODE_ERROR;
  68. if (!ssl_parse_extensions(&extensions, &alert, ext_types,
  69. OPENSSL_ARRAY_SIZE(ext_types),
  70. 0 /* reject unknown */)) {
  71. ssl3_send_alert(ssl, SSL3_AL_FATAL, alert);
  72. return ssl_hs_error;
  73. }
  74. if (have_cookie) {
  75. CBS cookie_value;
  76. if (!CBS_get_u16_length_prefixed(&cookie, &cookie_value) ||
  77. CBS_len(&cookie_value) == 0 ||
  78. CBS_len(&cookie) != 0) {
  79. OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
  80. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
  81. return ssl_hs_error;
  82. }
  83. if (!CBS_stow(&cookie_value, &hs->cookie, &hs->cookie_len)) {
  84. return ssl_hs_error;
  85. }
  86. }
  87. if (have_key_share) {
  88. uint16_t group_id;
  89. if (!CBS_get_u16(&key_share, &group_id) || CBS_len(&key_share) != 0) {
  90. OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
  91. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
  92. return ssl_hs_error;
  93. }
  94. /* The group must be supported. */
  95. const uint16_t *groups;
  96. size_t groups_len;
  97. tls1_get_grouplist(ssl, &groups, &groups_len);
  98. int found = 0;
  99. for (size_t i = 0; i < groups_len; i++) {
  100. if (groups[i] == group_id) {
  101. found = 1;
  102. break;
  103. }
  104. }
  105. if (!found) {
  106. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER);
  107. OPENSSL_PUT_ERROR(SSL, SSL_R_WRONG_CURVE);
  108. return ssl_hs_error;
  109. }
  110. /* Check that the HelloRetryRequest does not request the key share that
  111. * was provided in the initial ClientHello. */
  112. if (SSL_ECDH_CTX_get_id(&hs->ecdh_ctx) == group_id) {
  113. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER);
  114. OPENSSL_PUT_ERROR(SSL, SSL_R_WRONG_CURVE);
  115. return ssl_hs_error;
  116. }
  117. SSL_ECDH_CTX_cleanup(&hs->ecdh_ctx);
  118. hs->retry_group = group_id;
  119. }
  120. if (!ssl_hash_current_message(hs)) {
  121. return ssl_hs_error;
  122. }
  123. hs->received_hello_retry_request = 1;
  124. hs->tls13_state = state_send_second_client_hello;
  125. /* 0-RTT is rejected if we receive a HelloRetryRequest. */
  126. if (hs->in_early_data) {
  127. return ssl_hs_early_data_rejected;
  128. }
  129. return ssl_hs_ok;
  130. }
  131. static enum ssl_hs_wait_t do_send_second_client_hello(SSL_HANDSHAKE *hs) {
  132. SSL *const ssl = hs->ssl;
  133. if (!ssl->method->set_write_state(ssl, NULL) ||
  134. !ssl_write_client_hello(hs)) {
  135. return ssl_hs_error;
  136. }
  137. hs->tls13_state = state_process_server_hello;
  138. return ssl_hs_flush_and_read_message;
  139. }
  140. static enum ssl_hs_wait_t do_process_server_hello(SSL_HANDSHAKE *hs) {
  141. SSL *const ssl = hs->ssl;
  142. if (!ssl_check_message_type(ssl, SSL3_MT_SERVER_HELLO)) {
  143. return ssl_hs_error;
  144. }
  145. CBS cbs, server_random, session_id, extensions;
  146. uint16_t server_version;
  147. uint16_t cipher_suite;
  148. uint8_t compression_method;
  149. CBS_init(&cbs, ssl->init_msg, ssl->init_num);
  150. if (!CBS_get_u16(&cbs, &server_version) ||
  151. !CBS_get_bytes(&cbs, &server_random, SSL3_RANDOM_SIZE) ||
  152. (ssl->version == TLS1_3_EXPERIMENT_VERSION &&
  153. !CBS_get_u8_length_prefixed(&cbs, &session_id)) ||
  154. !CBS_get_u16(&cbs, &cipher_suite) ||
  155. (ssl->version == TLS1_3_EXPERIMENT_VERSION &&
  156. (!CBS_get_u8(&cbs, &compression_method) || compression_method != 0)) ||
  157. !CBS_get_u16_length_prefixed(&cbs, &extensions) ||
  158. CBS_len(&cbs) != 0) {
  159. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
  160. OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
  161. return ssl_hs_error;
  162. }
  163. uint16_t expected_version =
  164. ssl->version == TLS1_3_EXPERIMENT_VERSION ? TLS1_2_VERSION : ssl->version;
  165. if (server_version != expected_version) {
  166. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
  167. OPENSSL_PUT_ERROR(SSL, SSL_R_WRONG_VERSION_NUMBER);
  168. return ssl_hs_error;
  169. }
  170. assert(ssl->s3->have_version);
  171. OPENSSL_memcpy(ssl->s3->server_random, CBS_data(&server_random),
  172. SSL3_RANDOM_SIZE);
  173. const SSL_CIPHER *cipher = SSL_get_cipher_by_value(cipher_suite);
  174. if (cipher == NULL) {
  175. OPENSSL_PUT_ERROR(SSL, SSL_R_UNKNOWN_CIPHER_RETURNED);
  176. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER);
  177. return ssl_hs_error;
  178. }
  179. /* Check if the cipher is a TLS 1.3 cipher. */
  180. if (SSL_CIPHER_get_min_version(cipher) > ssl3_protocol_version(ssl) ||
  181. SSL_CIPHER_get_max_version(cipher) < ssl3_protocol_version(ssl)) {
  182. OPENSSL_PUT_ERROR(SSL, SSL_R_WRONG_CIPHER_RETURNED);
  183. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER);
  184. return ssl_hs_error;
  185. }
  186. /* Parse out the extensions. */
  187. int have_key_share = 0, have_pre_shared_key = 0, have_supported_versions = 0;
  188. CBS key_share, pre_shared_key, supported_versions;
  189. const SSL_EXTENSION_TYPE ext_types[] = {
  190. {TLSEXT_TYPE_key_share, &have_key_share, &key_share},
  191. {TLSEXT_TYPE_pre_shared_key, &have_pre_shared_key, &pre_shared_key},
  192. {TLSEXT_TYPE_supported_versions, &have_supported_versions,
  193. &supported_versions},
  194. };
  195. uint8_t alert = SSL_AD_DECODE_ERROR;
  196. if (!ssl_parse_extensions(&extensions, &alert, ext_types,
  197. OPENSSL_ARRAY_SIZE(ext_types),
  198. 0 /* reject unknown */)) {
  199. ssl3_send_alert(ssl, SSL3_AL_FATAL, alert);
  200. return ssl_hs_error;
  201. }
  202. /* supported_versions is parsed in handshake_client to select the experimental
  203. * TLS 1.3 version. */
  204. if (have_supported_versions && ssl->version != TLS1_3_EXPERIMENT_VERSION) {
  205. OPENSSL_PUT_ERROR(SSL, SSL_R_UNEXPECTED_EXTENSION);
  206. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_UNSUPPORTED_EXTENSION);
  207. return ssl_hs_error;
  208. }
  209. alert = SSL_AD_DECODE_ERROR;
  210. if (have_pre_shared_key) {
  211. if (ssl->session == NULL) {
  212. OPENSSL_PUT_ERROR(SSL, SSL_R_UNEXPECTED_EXTENSION);
  213. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_UNSUPPORTED_EXTENSION);
  214. return ssl_hs_error;
  215. }
  216. if (!ssl_ext_pre_shared_key_parse_serverhello(hs, &alert,
  217. &pre_shared_key)) {
  218. ssl3_send_alert(ssl, SSL3_AL_FATAL, alert);
  219. return ssl_hs_error;
  220. }
  221. if (ssl->session->ssl_version != ssl->version) {
  222. OPENSSL_PUT_ERROR(SSL, SSL_R_OLD_SESSION_VERSION_NOT_RETURNED);
  223. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER);
  224. return ssl_hs_error;
  225. }
  226. if (ssl->session->cipher->algorithm_prf != cipher->algorithm_prf) {
  227. OPENSSL_PUT_ERROR(SSL, SSL_R_OLD_SESSION_PRF_HASH_MISMATCH);
  228. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER);
  229. return ssl_hs_error;
  230. }
  231. if (!ssl_session_is_context_valid(ssl, ssl->session)) {
  232. /* This is actually a client application bug. */
  233. OPENSSL_PUT_ERROR(SSL,
  234. SSL_R_ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT);
  235. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER);
  236. return ssl_hs_error;
  237. }
  238. ssl->s3->session_reused = 1;
  239. /* Only authentication information carries over in TLS 1.3. */
  240. hs->new_session = SSL_SESSION_dup(ssl->session, SSL_SESSION_DUP_AUTH_ONLY);
  241. if (hs->new_session == NULL) {
  242. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
  243. return ssl_hs_error;
  244. }
  245. ssl_set_session(ssl, NULL);
  246. /* Resumption incorporates fresh key material, so refresh the timeout. */
  247. ssl_session_renew_timeout(ssl, hs->new_session,
  248. ssl->session_ctx->session_psk_dhe_timeout);
  249. } else if (!ssl_get_new_session(hs, 0)) {
  250. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
  251. return ssl_hs_error;
  252. }
  253. hs->new_session->cipher = cipher;
  254. hs->new_cipher = cipher;
  255. /* The PRF hash is now known. Set up the key schedule. */
  256. if (!tls13_init_key_schedule(hs)) {
  257. return ssl_hs_error;
  258. }
  259. /* Incorporate the PSK into the running secret. */
  260. if (ssl->s3->session_reused) {
  261. if (!tls13_advance_key_schedule(hs, hs->new_session->master_key,
  262. hs->new_session->master_key_length)) {
  263. return ssl_hs_error;
  264. }
  265. } else if (!tls13_advance_key_schedule(hs, kZeroes, hs->hash_len)) {
  266. return ssl_hs_error;
  267. }
  268. if (!have_key_share) {
  269. /* We do not support psk_ke and thus always require a key share. */
  270. OPENSSL_PUT_ERROR(SSL, SSL_R_MISSING_KEY_SHARE);
  271. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_MISSING_EXTENSION);
  272. return ssl_hs_error;
  273. }
  274. /* Resolve ECDHE and incorporate it into the secret. */
  275. uint8_t *dhe_secret;
  276. size_t dhe_secret_len;
  277. alert = SSL_AD_DECODE_ERROR;
  278. if (!ssl_ext_key_share_parse_serverhello(hs, &dhe_secret, &dhe_secret_len,
  279. &alert, &key_share)) {
  280. ssl3_send_alert(ssl, SSL3_AL_FATAL, alert);
  281. return ssl_hs_error;
  282. }
  283. if (!tls13_advance_key_schedule(hs, dhe_secret, dhe_secret_len)) {
  284. OPENSSL_free(dhe_secret);
  285. return ssl_hs_error;
  286. }
  287. OPENSSL_free(dhe_secret);
  288. if (!ssl_hash_current_message(hs) ||
  289. !tls13_derive_handshake_secrets(hs)) {
  290. return ssl_hs_error;
  291. }
  292. hs->tls13_state = state_process_change_cipher_spec;
  293. return ssl->version == TLS1_3_EXPERIMENT_VERSION
  294. ? ssl_hs_read_change_cipher_spec
  295. : ssl_hs_ok;
  296. }
  297. static enum ssl_hs_wait_t do_process_change_cipher_spec(SSL_HANDSHAKE *hs) {
  298. SSL *const ssl = hs->ssl;
  299. if (!tls13_set_traffic_key(ssl, evp_aead_open, hs->server_handshake_secret,
  300. hs->hash_len)) {
  301. return ssl_hs_error;
  302. }
  303. if (!hs->early_data_offered) {
  304. /* If not sending early data, set client traffic keys now so that alerts are
  305. * encrypted. */
  306. if ((ssl->version == TLS1_3_EXPERIMENT_VERSION &&
  307. !ssl3_add_change_cipher_spec(ssl)) ||
  308. !tls13_set_traffic_key(ssl, evp_aead_seal, hs->client_handshake_secret,
  309. hs->hash_len)) {
  310. return ssl_hs_error;
  311. }
  312. }
  313. hs->tls13_state = state_process_encrypted_extensions;
  314. return ssl_hs_read_message;
  315. }
  316. static enum ssl_hs_wait_t do_process_encrypted_extensions(SSL_HANDSHAKE *hs) {
  317. SSL *const ssl = hs->ssl;
  318. if (!ssl_check_message_type(ssl, SSL3_MT_ENCRYPTED_EXTENSIONS)) {
  319. return ssl_hs_error;
  320. }
  321. CBS cbs;
  322. CBS_init(&cbs, ssl->init_msg, ssl->init_num);
  323. if (!ssl_parse_serverhello_tlsext(hs, &cbs)) {
  324. OPENSSL_PUT_ERROR(SSL, SSL_R_PARSE_TLSEXT);
  325. return ssl_hs_error;
  326. }
  327. if (CBS_len(&cbs) != 0) {
  328. OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
  329. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
  330. return ssl_hs_error;
  331. }
  332. /* Store the negotiated ALPN in the session. */
  333. if (ssl->s3->alpn_selected != NULL) {
  334. hs->new_session->early_alpn = (uint8_t *)BUF_memdup(
  335. ssl->s3->alpn_selected, ssl->s3->alpn_selected_len);
  336. if (hs->new_session->early_alpn == NULL) {
  337. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
  338. return ssl_hs_error;
  339. }
  340. hs->new_session->early_alpn_len = ssl->s3->alpn_selected_len;
  341. }
  342. if (ssl->early_data_accepted) {
  343. if (hs->early_session->cipher != hs->new_session->cipher ||
  344. hs->early_session->early_alpn_len != ssl->s3->alpn_selected_len ||
  345. OPENSSL_memcmp(hs->early_session->early_alpn, ssl->s3->alpn_selected,
  346. ssl->s3->alpn_selected_len) != 0) {
  347. OPENSSL_PUT_ERROR(SSL, SSL_R_ALPN_MISMATCH_ON_EARLY_DATA);
  348. return ssl_hs_error;
  349. }
  350. if (ssl->s3->tlsext_channel_id_valid) {
  351. OPENSSL_PUT_ERROR(SSL, SSL_R_CHANNEL_ID_ON_EARLY_DATA);
  352. return ssl_hs_error;
  353. }
  354. }
  355. if (!ssl_hash_current_message(hs)) {
  356. return ssl_hs_error;
  357. }
  358. hs->tls13_state = state_continue_second_server_flight;
  359. if (hs->in_early_data && !ssl->early_data_accepted) {
  360. return ssl_hs_early_data_rejected;
  361. }
  362. return ssl_hs_ok;
  363. }
  364. static enum ssl_hs_wait_t do_continue_second_server_flight(SSL_HANDSHAKE *hs) {
  365. hs->tls13_state = state_process_certificate_request;
  366. return ssl_hs_read_message;
  367. }
  368. static enum ssl_hs_wait_t do_process_certificate_request(SSL_HANDSHAKE *hs) {
  369. SSL *const ssl = hs->ssl;
  370. /* CertificateRequest may only be sent in non-resumption handshakes. */
  371. if (ssl->s3->session_reused) {
  372. hs->tls13_state = state_process_server_finished;
  373. return ssl_hs_ok;
  374. }
  375. /* CertificateRequest is optional. */
  376. if (ssl->s3->tmp.message_type != SSL3_MT_CERTIFICATE_REQUEST) {
  377. hs->tls13_state = state_process_server_certificate;
  378. return ssl_hs_ok;
  379. }
  380. CBS cbs, context, supported_signature_algorithms;
  381. CBS_init(&cbs, ssl->init_msg, ssl->init_num);
  382. if (!CBS_get_u8_length_prefixed(&cbs, &context) ||
  383. /* The request context is always empty during the handshake. */
  384. CBS_len(&context) != 0 ||
  385. !CBS_get_u16_length_prefixed(&cbs, &supported_signature_algorithms) ||
  386. CBS_len(&supported_signature_algorithms) == 0 ||
  387. !tls1_parse_peer_sigalgs(hs, &supported_signature_algorithms)) {
  388. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
  389. OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
  390. return ssl_hs_error;
  391. }
  392. uint8_t alert = SSL_AD_DECODE_ERROR;
  393. STACK_OF(CRYPTO_BUFFER) *ca_names =
  394. ssl_parse_client_CA_list(ssl, &alert, &cbs);
  395. if (ca_names == NULL) {
  396. ssl3_send_alert(ssl, SSL3_AL_FATAL, alert);
  397. return ssl_hs_error;
  398. }
  399. /* Ignore extensions. */
  400. CBS extensions;
  401. if (!CBS_get_u16_length_prefixed(&cbs, &extensions) ||
  402. CBS_len(&cbs) != 0) {
  403. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
  404. sk_CRYPTO_BUFFER_pop_free(ca_names, CRYPTO_BUFFER_free);
  405. OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
  406. return ssl_hs_error;
  407. }
  408. hs->cert_request = 1;
  409. sk_CRYPTO_BUFFER_pop_free(hs->ca_names, CRYPTO_BUFFER_free);
  410. hs->ca_names = ca_names;
  411. ssl->ctx->x509_method->hs_flush_cached_ca_names(hs);
  412. if (!ssl_hash_current_message(hs)) {
  413. return ssl_hs_error;
  414. }
  415. hs->tls13_state = state_process_server_certificate;
  416. return ssl_hs_read_message;
  417. }
  418. static enum ssl_hs_wait_t do_process_server_certificate(SSL_HANDSHAKE *hs) {
  419. SSL *const ssl = hs->ssl;
  420. if (!ssl_check_message_type(ssl, SSL3_MT_CERTIFICATE) ||
  421. !tls13_process_certificate(hs, 0 /* certificate required */) ||
  422. !ssl_hash_current_message(hs)) {
  423. return ssl_hs_error;
  424. }
  425. hs->tls13_state = state_process_server_certificate_verify;
  426. return ssl_hs_read_message;
  427. }
  428. static enum ssl_hs_wait_t do_process_server_certificate_verify(
  429. SSL_HANDSHAKE *hs) {
  430. SSL *const ssl = hs->ssl;
  431. if (!ssl_check_message_type(ssl, SSL3_MT_CERTIFICATE_VERIFY) ||
  432. !tls13_process_certificate_verify(hs) ||
  433. !ssl_hash_current_message(hs)) {
  434. return ssl_hs_error;
  435. }
  436. hs->tls13_state = state_process_server_finished;
  437. return ssl_hs_read_message;
  438. }
  439. static enum ssl_hs_wait_t do_process_server_finished(SSL_HANDSHAKE *hs) {
  440. SSL *const ssl = hs->ssl;
  441. if (!ssl_check_message_type(ssl, SSL3_MT_FINISHED) ||
  442. !tls13_process_finished(hs, 0 /* don't use saved value */) ||
  443. !ssl_hash_current_message(hs) ||
  444. /* Update the secret to the master secret and derive traffic keys. */
  445. !tls13_advance_key_schedule(hs, kZeroes, hs->hash_len) ||
  446. !tls13_derive_application_secrets(hs)) {
  447. return ssl_hs_error;
  448. }
  449. ssl->method->received_flight(ssl);
  450. hs->tls13_state = state_send_end_of_early_data;
  451. return ssl_hs_ok;
  452. }
  453. static enum ssl_hs_wait_t do_send_end_of_early_data(SSL_HANDSHAKE *hs) {
  454. SSL *const ssl = hs->ssl;
  455. if (ssl->early_data_accepted) {
  456. hs->can_early_write = 0;
  457. if (!ssl->method->add_alert(ssl, SSL3_AL_WARNING,
  458. TLS1_AD_END_OF_EARLY_DATA)) {
  459. return ssl_hs_error;
  460. }
  461. }
  462. if (hs->early_data_offered) {
  463. if ((ssl->version == TLS1_3_EXPERIMENT_VERSION &&
  464. !ssl3_add_change_cipher_spec(ssl)) ||
  465. !tls13_set_traffic_key(ssl, evp_aead_seal, hs->client_handshake_secret,
  466. hs->hash_len)) {
  467. return ssl_hs_error;
  468. }
  469. }
  470. hs->tls13_state = state_send_client_certificate;
  471. return ssl_hs_ok;
  472. }
  473. static enum ssl_hs_wait_t do_send_client_certificate(SSL_HANDSHAKE *hs) {
  474. SSL *const ssl = hs->ssl;
  475. /* The peer didn't request a certificate. */
  476. if (!hs->cert_request) {
  477. hs->tls13_state = state_complete_second_flight;
  478. return ssl_hs_ok;
  479. }
  480. /* Call cert_cb to update the certificate. */
  481. if (ssl->cert->cert_cb != NULL) {
  482. int rv = ssl->cert->cert_cb(ssl, ssl->cert->cert_cb_arg);
  483. if (rv == 0) {
  484. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
  485. OPENSSL_PUT_ERROR(SSL, SSL_R_CERT_CB_ERROR);
  486. return ssl_hs_error;
  487. }
  488. if (rv < 0) {
  489. hs->tls13_state = state_send_client_certificate;
  490. return ssl_hs_x509_lookup;
  491. }
  492. }
  493. if (!ssl_on_certificate_selected(hs) ||
  494. !tls13_add_certificate(hs)) {
  495. return ssl_hs_error;
  496. }
  497. hs->tls13_state = state_send_client_certificate_verify;
  498. return ssl_hs_ok;
  499. }
  500. static enum ssl_hs_wait_t do_send_client_certificate_verify(SSL_HANDSHAKE *hs) {
  501. SSL *const ssl = hs->ssl;
  502. /* Don't send CertificateVerify if there is no certificate. */
  503. if (!ssl_has_certificate(ssl)) {
  504. hs->tls13_state = state_complete_second_flight;
  505. return ssl_hs_ok;
  506. }
  507. switch (tls13_add_certificate_verify(hs)) {
  508. case ssl_private_key_success:
  509. hs->tls13_state = state_complete_second_flight;
  510. return ssl_hs_ok;
  511. case ssl_private_key_retry:
  512. hs->tls13_state = state_send_client_certificate_verify;
  513. return ssl_hs_private_key_operation;
  514. case ssl_private_key_failure:
  515. return ssl_hs_error;
  516. }
  517. assert(0);
  518. return ssl_hs_error;
  519. }
  520. static enum ssl_hs_wait_t do_complete_second_flight(SSL_HANDSHAKE *hs) {
  521. SSL *const ssl = hs->ssl;
  522. /* Send a Channel ID assertion if necessary. */
  523. if (ssl->s3->tlsext_channel_id_valid) {
  524. if (!ssl_do_channel_id_callback(ssl)) {
  525. hs->tls13_state = state_complete_second_flight;
  526. return ssl_hs_error;
  527. }
  528. if (ssl->tlsext_channel_id_private == NULL) {
  529. return ssl_hs_channel_id_lookup;
  530. }
  531. CBB cbb, body;
  532. if (!ssl->method->init_message(ssl, &cbb, &body, SSL3_MT_CHANNEL_ID) ||
  533. !tls1_write_channel_id(hs, &body) ||
  534. !ssl_add_message_cbb(ssl, &cbb)) {
  535. CBB_cleanup(&cbb);
  536. return ssl_hs_error;
  537. }
  538. }
  539. /* Send a Finished message. */
  540. if (!tls13_add_finished(hs)) {
  541. return ssl_hs_error;
  542. }
  543. /* Derive the final keys and enable them. */
  544. if (!tls13_set_traffic_key(ssl, evp_aead_open, hs->server_traffic_secret_0,
  545. hs->hash_len) ||
  546. !tls13_set_traffic_key(ssl, evp_aead_seal, hs->client_traffic_secret_0,
  547. hs->hash_len) ||
  548. !tls13_derive_resumption_secret(hs)) {
  549. return ssl_hs_error;
  550. }
  551. hs->tls13_state = state_done;
  552. return ssl_hs_flush;
  553. }
  554. enum ssl_hs_wait_t tls13_client_handshake(SSL_HANDSHAKE *hs) {
  555. while (hs->tls13_state != state_done) {
  556. enum ssl_hs_wait_t ret = ssl_hs_error;
  557. enum client_hs_state_t state =
  558. static_cast<enum client_hs_state_t>(hs->tls13_state);
  559. switch (state) {
  560. case state_process_hello_retry_request:
  561. ret = do_process_hello_retry_request(hs);
  562. break;
  563. case state_send_second_client_hello:
  564. ret = do_send_second_client_hello(hs);
  565. break;
  566. case state_process_server_hello:
  567. ret = do_process_server_hello(hs);
  568. break;
  569. case state_process_change_cipher_spec:
  570. ret = do_process_change_cipher_spec(hs);
  571. break;
  572. case state_process_encrypted_extensions:
  573. ret = do_process_encrypted_extensions(hs);
  574. break;
  575. case state_continue_second_server_flight:
  576. ret = do_continue_second_server_flight(hs);
  577. break;
  578. case state_process_certificate_request:
  579. ret = do_process_certificate_request(hs);
  580. break;
  581. case state_process_server_certificate:
  582. ret = do_process_server_certificate(hs);
  583. break;
  584. case state_process_server_certificate_verify:
  585. ret = do_process_server_certificate_verify(hs);
  586. break;
  587. case state_process_server_finished:
  588. ret = do_process_server_finished(hs);
  589. break;
  590. case state_send_end_of_early_data:
  591. ret = do_send_end_of_early_data(hs);
  592. break;
  593. case state_send_client_certificate:
  594. ret = do_send_client_certificate(hs);
  595. break;
  596. case state_send_client_certificate_verify:
  597. ret = do_send_client_certificate_verify(hs);
  598. break;
  599. case state_complete_second_flight:
  600. ret = do_complete_second_flight(hs);
  601. break;
  602. case state_done:
  603. ret = ssl_hs_ok;
  604. break;
  605. }
  606. if (ret != ssl_hs_ok) {
  607. return ret;
  608. }
  609. }
  610. return ssl_hs_ok;
  611. }
  612. int tls13_process_new_session_ticket(SSL *ssl) {
  613. bssl::UniquePtr<SSL_SESSION> session(SSL_SESSION_dup(
  614. ssl->s3->established_session, SSL_SESSION_INCLUDE_NONAUTH));
  615. if (!session) {
  616. return 0;
  617. }
  618. ssl_session_rebase_time(ssl, session.get());
  619. uint32_t server_timeout;
  620. CBS cbs, ticket, extensions;
  621. CBS_init(&cbs, ssl->init_msg, ssl->init_num);
  622. if (!CBS_get_u32(&cbs, &server_timeout) ||
  623. !CBS_get_u32(&cbs, &session->ticket_age_add) ||
  624. !CBS_get_u16_length_prefixed(&cbs, &ticket) ||
  625. !CBS_stow(&ticket, &session->tlsext_tick, &session->tlsext_ticklen) ||
  626. !CBS_get_u16_length_prefixed(&cbs, &extensions) ||
  627. CBS_len(&cbs) != 0) {
  628. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
  629. OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
  630. return 0;
  631. }
  632. /* Cap the renewable lifetime by the server advertised value. This avoids
  633. * wasting bandwidth on 0-RTT when we know the server will reject it. */
  634. if (session->timeout > server_timeout) {
  635. session->timeout = server_timeout;
  636. }
  637. /* Parse out the extensions. */
  638. int have_early_data_info = 0;
  639. CBS early_data_info;
  640. const SSL_EXTENSION_TYPE ext_types[] = {
  641. {TLSEXT_TYPE_ticket_early_data_info, &have_early_data_info,
  642. &early_data_info},
  643. };
  644. uint8_t alert = SSL_AD_DECODE_ERROR;
  645. if (!ssl_parse_extensions(&extensions, &alert, ext_types,
  646. OPENSSL_ARRAY_SIZE(ext_types),
  647. 1 /* ignore unknown */)) {
  648. ssl3_send_alert(ssl, SSL3_AL_FATAL, alert);
  649. return 0;
  650. }
  651. if (have_early_data_info && ssl->cert->enable_early_data) {
  652. if (!CBS_get_u32(&early_data_info, &session->ticket_max_early_data) ||
  653. CBS_len(&early_data_info) != 0) {
  654. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
  655. OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
  656. return 0;
  657. }
  658. }
  659. session->ticket_age_add_valid = 1;
  660. session->not_resumable = 0;
  661. if (ssl->ctx->new_session_cb != NULL &&
  662. ssl->ctx->new_session_cb(ssl, session.get())) {
  663. /* |new_session_cb|'s return value signals that it took ownership. */
  664. session.release();
  665. }
  666. return 1;
  667. }
  668. void ssl_clear_tls13_state(SSL_HANDSHAKE *hs) {
  669. SSL_ECDH_CTX_cleanup(&hs->ecdh_ctx);
  670. OPENSSL_free(hs->key_share_bytes);
  671. hs->key_share_bytes = NULL;
  672. hs->key_share_bytes_len = 0;
  673. }