tls13_client.c 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712
  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 <openssl/x509.h>
  24. #include "../crypto/internal.h"
  25. #include "internal.h"
  26. enum client_hs_state_t {
  27. state_process_hello_retry_request = 0,
  28. state_send_second_client_hello,
  29. state_process_server_hello,
  30. state_process_encrypted_extensions,
  31. state_process_certificate_request,
  32. state_process_server_certificate,
  33. state_process_server_certificate_verify,
  34. state_process_server_finished,
  35. state_send_client_certificate,
  36. state_send_client_certificate_verify,
  37. state_complete_client_certificate_verify,
  38. state_complete_second_flight,
  39. state_done,
  40. };
  41. static const uint8_t kZeroes[EVP_MAX_MD_SIZE] = {0};
  42. static enum ssl_hs_wait_t do_process_hello_retry_request(SSL_HANDSHAKE *hs) {
  43. SSL *const ssl = hs->ssl;
  44. if (ssl->s3->tmp.message_type != SSL3_MT_HELLO_RETRY_REQUEST) {
  45. hs->tls13_state = state_process_server_hello;
  46. return ssl_hs_ok;
  47. }
  48. CBS cbs, extensions;
  49. uint16_t server_wire_version;
  50. CBS_init(&cbs, ssl->init_msg, ssl->init_num);
  51. if (!CBS_get_u16(&cbs, &server_wire_version) ||
  52. !CBS_get_u16_length_prefixed(&cbs, &extensions) ||
  53. /* HelloRetryRequest may not be empty. */
  54. CBS_len(&extensions) == 0 ||
  55. CBS_len(&cbs) != 0) {
  56. OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
  57. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
  58. return ssl_hs_error;
  59. }
  60. int have_cookie, have_key_share;
  61. CBS cookie, key_share;
  62. const SSL_EXTENSION_TYPE ext_types[] = {
  63. {TLSEXT_TYPE_key_share, &have_key_share, &key_share},
  64. {TLSEXT_TYPE_cookie, &have_cookie, &cookie},
  65. };
  66. uint8_t alert = SSL_AD_DECODE_ERROR;
  67. if (!ssl_parse_extensions(&extensions, &alert, ext_types,
  68. OPENSSL_ARRAY_SIZE(ext_types),
  69. 0 /* reject unknown */)) {
  70. ssl3_send_alert(ssl, SSL3_AL_FATAL, alert);
  71. return ssl_hs_error;
  72. }
  73. if (have_cookie) {
  74. CBS cookie_value;
  75. if (!CBS_get_u16_length_prefixed(&cookie, &cookie_value) ||
  76. CBS_len(&cookie_value) == 0 ||
  77. CBS_len(&cookie) != 0) {
  78. OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
  79. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
  80. return ssl_hs_error;
  81. }
  82. if (!CBS_stow(&cookie_value, &hs->cookie, &hs->cookie_len)) {
  83. return ssl_hs_error;
  84. }
  85. }
  86. if (have_key_share) {
  87. uint16_t group_id;
  88. if (!CBS_get_u16(&key_share, &group_id) || CBS_len(&key_share) != 0) {
  89. OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
  90. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
  91. return ssl_hs_error;
  92. }
  93. /* The group must be supported. */
  94. const uint16_t *groups;
  95. size_t groups_len;
  96. tls1_get_grouplist(ssl, &groups, &groups_len);
  97. int found = 0;
  98. for (size_t i = 0; i < groups_len; i++) {
  99. if (groups[i] == group_id) {
  100. found = 1;
  101. break;
  102. }
  103. }
  104. if (!found) {
  105. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER);
  106. OPENSSL_PUT_ERROR(SSL, SSL_R_WRONG_CURVE);
  107. return ssl_hs_error;
  108. }
  109. /* Check that the HelloRetryRequest does not request the key share that
  110. * was provided in the initial ClientHello. */
  111. if (SSL_ECDH_CTX_get_id(&hs->ecdh_ctx) == group_id) {
  112. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER);
  113. OPENSSL_PUT_ERROR(SSL, SSL_R_WRONG_CURVE);
  114. return ssl_hs_error;
  115. }
  116. SSL_ECDH_CTX_cleanup(&hs->ecdh_ctx);
  117. hs->retry_group = group_id;
  118. }
  119. if (!ssl_hash_current_message(hs)) {
  120. return ssl_hs_error;
  121. }
  122. hs->received_hello_retry_request = 1;
  123. hs->tls13_state = state_send_second_client_hello;
  124. return ssl_hs_ok;
  125. }
  126. static enum ssl_hs_wait_t do_send_second_client_hello(SSL_HANDSHAKE *hs) {
  127. if (!ssl_write_client_hello(hs)) {
  128. return ssl_hs_error;
  129. }
  130. hs->tls13_state = state_process_server_hello;
  131. return ssl_hs_flush_and_read_message;
  132. }
  133. static enum ssl_hs_wait_t do_process_server_hello(SSL_HANDSHAKE *hs) {
  134. SSL *const ssl = hs->ssl;
  135. if (!ssl_check_message_type(ssl, SSL3_MT_SERVER_HELLO)) {
  136. return ssl_hs_error;
  137. }
  138. CBS cbs, server_random, extensions;
  139. uint16_t server_wire_version;
  140. uint16_t cipher_suite;
  141. CBS_init(&cbs, ssl->init_msg, ssl->init_num);
  142. if (!CBS_get_u16(&cbs, &server_wire_version) ||
  143. !CBS_get_bytes(&cbs, &server_random, SSL3_RANDOM_SIZE) ||
  144. !CBS_get_u16(&cbs, &cipher_suite) ||
  145. !CBS_get_u16_length_prefixed(&cbs, &extensions) ||
  146. CBS_len(&cbs) != 0) {
  147. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
  148. OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
  149. return ssl_hs_error;
  150. }
  151. if (server_wire_version != ssl->version) {
  152. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
  153. OPENSSL_PUT_ERROR(SSL, SSL_R_WRONG_VERSION_NUMBER);
  154. return ssl_hs_error;
  155. }
  156. assert(ssl->s3->have_version);
  157. OPENSSL_memcpy(ssl->s3->server_random, CBS_data(&server_random),
  158. SSL3_RANDOM_SIZE);
  159. const SSL_CIPHER *cipher = SSL_get_cipher_by_value(cipher_suite);
  160. if (cipher == NULL) {
  161. OPENSSL_PUT_ERROR(SSL, SSL_R_UNKNOWN_CIPHER_RETURNED);
  162. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER);
  163. return ssl_hs_error;
  164. }
  165. /* Check if the cipher is a TLS 1.3 cipher. */
  166. if (SSL_CIPHER_get_min_version(cipher) > ssl3_protocol_version(ssl) ||
  167. SSL_CIPHER_get_max_version(cipher) < ssl3_protocol_version(ssl)) {
  168. OPENSSL_PUT_ERROR(SSL, SSL_R_WRONG_CIPHER_RETURNED);
  169. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER);
  170. return ssl_hs_error;
  171. }
  172. /* Parse out the extensions. */
  173. int have_key_share = 0, have_pre_shared_key = 0, have_short_header = 0;
  174. CBS key_share, pre_shared_key, short_header;
  175. const SSL_EXTENSION_TYPE ext_types[] = {
  176. {TLSEXT_TYPE_key_share, &have_key_share, &key_share},
  177. {TLSEXT_TYPE_pre_shared_key, &have_pre_shared_key, &pre_shared_key},
  178. {TLSEXT_TYPE_short_header, &have_short_header, &short_header},
  179. };
  180. uint8_t alert = SSL_AD_DECODE_ERROR;
  181. if (!ssl_parse_extensions(&extensions, &alert, ext_types,
  182. OPENSSL_ARRAY_SIZE(ext_types),
  183. 0 /* reject unknown */)) {
  184. ssl3_send_alert(ssl, SSL3_AL_FATAL, alert);
  185. return ssl_hs_error;
  186. }
  187. alert = SSL_AD_DECODE_ERROR;
  188. if (have_pre_shared_key) {
  189. if (ssl->session == NULL) {
  190. OPENSSL_PUT_ERROR(SSL, SSL_R_UNEXPECTED_EXTENSION);
  191. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_UNSUPPORTED_EXTENSION);
  192. return ssl_hs_error;
  193. }
  194. if (!ssl_ext_pre_shared_key_parse_serverhello(hs, &alert,
  195. &pre_shared_key)) {
  196. ssl3_send_alert(ssl, SSL3_AL_FATAL, alert);
  197. return ssl_hs_error;
  198. }
  199. if (ssl->session->ssl_version != ssl->version) {
  200. OPENSSL_PUT_ERROR(SSL, SSL_R_OLD_SESSION_VERSION_NOT_RETURNED);
  201. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER);
  202. return ssl_hs_error;
  203. }
  204. if (ssl->session->cipher->algorithm_prf != cipher->algorithm_prf) {
  205. OPENSSL_PUT_ERROR(SSL, SSL_R_OLD_SESSION_PRF_HASH_MISMATCH);
  206. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER);
  207. return ssl_hs_error;
  208. }
  209. if (!ssl_session_is_context_valid(ssl, ssl->session)) {
  210. /* This is actually a client application bug. */
  211. OPENSSL_PUT_ERROR(SSL,
  212. SSL_R_ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT);
  213. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER);
  214. return ssl_hs_error;
  215. }
  216. ssl->s3->session_reused = 1;
  217. /* Only authentication information carries over in TLS 1.3. */
  218. hs->new_session = SSL_SESSION_dup(ssl->session, SSL_SESSION_DUP_AUTH_ONLY);
  219. if (hs->new_session == NULL) {
  220. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
  221. return ssl_hs_error;
  222. }
  223. ssl_set_session(ssl, NULL);
  224. /* Resumption incorporates fresh key material, so refresh the timeout. */
  225. ssl_session_renew_timeout(ssl, hs->new_session,
  226. ssl->initial_ctx->session_psk_dhe_timeout);
  227. } else if (!ssl_get_new_session(hs, 0)) {
  228. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
  229. return ssl_hs_error;
  230. }
  231. hs->new_session->cipher = cipher;
  232. hs->new_cipher = cipher;
  233. /* Store the initial negotiated ALPN in the session. */
  234. if (ssl->s3->alpn_selected != NULL) {
  235. hs->new_session->early_alpn =
  236. BUF_memdup(ssl->s3->alpn_selected, ssl->s3->alpn_selected_len);
  237. if (hs->new_session->early_alpn == NULL) {
  238. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
  239. return ssl_hs_error;
  240. }
  241. hs->new_session->early_alpn_len = ssl->s3->alpn_selected_len;
  242. }
  243. /* The PRF hash is now known. Set up the key schedule. */
  244. if (!tls13_init_key_schedule(hs)) {
  245. return ssl_hs_error;
  246. }
  247. /* Incorporate the PSK into the running secret. */
  248. if (ssl->s3->session_reused) {
  249. if (!tls13_advance_key_schedule(hs, hs->new_session->master_key,
  250. hs->new_session->master_key_length)) {
  251. return ssl_hs_error;
  252. }
  253. } else if (!tls13_advance_key_schedule(hs, kZeroes, hs->hash_len)) {
  254. return ssl_hs_error;
  255. }
  256. if (!have_key_share) {
  257. /* We do not support psk_ke and thus always require a key share. */
  258. OPENSSL_PUT_ERROR(SSL, SSL_R_MISSING_KEY_SHARE);
  259. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_MISSING_EXTENSION);
  260. return ssl_hs_error;
  261. }
  262. /* Resolve ECDHE and incorporate it into the secret. */
  263. uint8_t *dhe_secret;
  264. size_t dhe_secret_len;
  265. alert = SSL_AD_DECODE_ERROR;
  266. if (!ssl_ext_key_share_parse_serverhello(hs, &dhe_secret, &dhe_secret_len,
  267. &alert, &key_share)) {
  268. ssl3_send_alert(ssl, SSL3_AL_FATAL, alert);
  269. return ssl_hs_error;
  270. }
  271. if (!tls13_advance_key_schedule(hs, dhe_secret, dhe_secret_len)) {
  272. OPENSSL_free(dhe_secret);
  273. return ssl_hs_error;
  274. }
  275. OPENSSL_free(dhe_secret);
  276. /* Negotiate short record headers. */
  277. if (have_short_header) {
  278. if (CBS_len(&short_header) != 0) {
  279. OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
  280. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
  281. return ssl_hs_error;
  282. }
  283. if (!ssl->ctx->short_header_enabled) {
  284. OPENSSL_PUT_ERROR(SSL, SSL_R_UNEXPECTED_EXTENSION);
  285. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_UNSUPPORTED_EXTENSION);
  286. return ssl_hs_error;
  287. }
  288. ssl->s3->short_header = 1;
  289. }
  290. if (!ssl_hash_current_message(hs) ||
  291. !tls13_derive_handshake_secrets(hs) ||
  292. !tls13_set_traffic_key(ssl, evp_aead_open, hs->server_handshake_secret,
  293. hs->hash_len) ||
  294. !tls13_set_traffic_key(ssl, evp_aead_seal, hs->client_handshake_secret,
  295. hs->hash_len)) {
  296. return ssl_hs_error;
  297. }
  298. hs->tls13_state = state_process_encrypted_extensions;
  299. return ssl_hs_read_message;
  300. }
  301. static enum ssl_hs_wait_t do_process_encrypted_extensions(SSL_HANDSHAKE *hs) {
  302. SSL *const ssl = hs->ssl;
  303. if (!ssl_check_message_type(ssl, SSL3_MT_ENCRYPTED_EXTENSIONS)) {
  304. return ssl_hs_error;
  305. }
  306. CBS cbs;
  307. CBS_init(&cbs, ssl->init_msg, ssl->init_num);
  308. if (!ssl_parse_serverhello_tlsext(hs, &cbs)) {
  309. OPENSSL_PUT_ERROR(SSL, SSL_R_PARSE_TLSEXT);
  310. return ssl_hs_error;
  311. }
  312. if (CBS_len(&cbs) != 0) {
  313. OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
  314. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
  315. return ssl_hs_error;
  316. }
  317. if (!ssl_hash_current_message(hs)) {
  318. return ssl_hs_error;
  319. }
  320. hs->tls13_state = state_process_certificate_request;
  321. return ssl_hs_read_message;
  322. }
  323. static enum ssl_hs_wait_t do_process_certificate_request(SSL_HANDSHAKE *hs) {
  324. SSL *const ssl = hs->ssl;
  325. /* CertificateRequest may only be sent in non-resumption handshakes. */
  326. if (ssl->s3->session_reused) {
  327. hs->tls13_state = state_process_server_finished;
  328. return ssl_hs_ok;
  329. }
  330. /* CertificateRequest is optional. */
  331. if (ssl->s3->tmp.message_type != SSL3_MT_CERTIFICATE_REQUEST) {
  332. hs->tls13_state = state_process_server_certificate;
  333. return ssl_hs_ok;
  334. }
  335. CBS cbs, context, supported_signature_algorithms;
  336. CBS_init(&cbs, ssl->init_msg, ssl->init_num);
  337. if (!CBS_get_u8_length_prefixed(&cbs, &context) ||
  338. /* The request context is always empty during the handshake. */
  339. CBS_len(&context) != 0 ||
  340. !CBS_get_u16_length_prefixed(&cbs, &supported_signature_algorithms) ||
  341. CBS_len(&supported_signature_algorithms) == 0 ||
  342. !tls1_parse_peer_sigalgs(hs, &supported_signature_algorithms)) {
  343. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
  344. OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
  345. return ssl_hs_error;
  346. }
  347. uint8_t alert = SSL_AD_DECODE_ERROR;
  348. STACK_OF(X509_NAME) *ca_sk = ssl_parse_client_CA_list(ssl, &alert, &cbs);
  349. if (ca_sk == NULL) {
  350. ssl3_send_alert(ssl, SSL3_AL_FATAL, alert);
  351. return ssl_hs_error;
  352. }
  353. /* Ignore extensions. */
  354. CBS extensions;
  355. if (!CBS_get_u16_length_prefixed(&cbs, &extensions) ||
  356. CBS_len(&cbs) != 0) {
  357. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
  358. sk_X509_NAME_pop_free(ca_sk, X509_NAME_free);
  359. OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
  360. return ssl_hs_error;
  361. }
  362. hs->cert_request = 1;
  363. sk_X509_NAME_pop_free(hs->ca_names, X509_NAME_free);
  364. hs->ca_names = ca_sk;
  365. if (!ssl_hash_current_message(hs)) {
  366. return ssl_hs_error;
  367. }
  368. hs->tls13_state = state_process_server_certificate;
  369. return ssl_hs_read_message;
  370. }
  371. static enum ssl_hs_wait_t do_process_server_certificate(SSL_HANDSHAKE *hs) {
  372. SSL *const ssl = hs->ssl;
  373. if (!ssl_check_message_type(ssl, SSL3_MT_CERTIFICATE) ||
  374. !tls13_process_certificate(hs, 0 /* certificate required */) ||
  375. !ssl_hash_current_message(hs)) {
  376. return ssl_hs_error;
  377. }
  378. hs->tls13_state = state_process_server_certificate_verify;
  379. return ssl_hs_read_message;
  380. }
  381. static enum ssl_hs_wait_t do_process_server_certificate_verify(
  382. SSL_HANDSHAKE *hs) {
  383. SSL *const ssl = hs->ssl;
  384. if (!ssl_check_message_type(ssl, SSL3_MT_CERTIFICATE_VERIFY) ||
  385. !tls13_process_certificate_verify(hs) ||
  386. !ssl_hash_current_message(hs)) {
  387. return ssl_hs_error;
  388. }
  389. hs->tls13_state = state_process_server_finished;
  390. return ssl_hs_read_message;
  391. }
  392. static enum ssl_hs_wait_t do_process_server_finished(SSL_HANDSHAKE *hs) {
  393. SSL *const ssl = hs->ssl;
  394. if (!ssl_check_message_type(ssl, SSL3_MT_FINISHED) ||
  395. !tls13_process_finished(hs) ||
  396. !ssl_hash_current_message(hs) ||
  397. /* Update the secret to the master secret and derive traffic keys. */
  398. !tls13_advance_key_schedule(hs, kZeroes, hs->hash_len) ||
  399. !tls13_derive_application_secrets(hs)) {
  400. return ssl_hs_error;
  401. }
  402. ssl->method->received_flight(ssl);
  403. hs->tls13_state = state_send_client_certificate;
  404. return ssl_hs_ok;
  405. }
  406. static enum ssl_hs_wait_t do_send_client_certificate(SSL_HANDSHAKE *hs) {
  407. SSL *const ssl = hs->ssl;
  408. /* The peer didn't request a certificate. */
  409. if (!hs->cert_request) {
  410. hs->tls13_state = state_complete_second_flight;
  411. return ssl_hs_ok;
  412. }
  413. /* Call cert_cb to update the certificate. */
  414. if (ssl->cert->cert_cb != NULL) {
  415. int rv = ssl->cert->cert_cb(ssl, ssl->cert->cert_cb_arg);
  416. if (rv == 0) {
  417. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
  418. OPENSSL_PUT_ERROR(SSL, SSL_R_CERT_CB_ERROR);
  419. return ssl_hs_error;
  420. }
  421. if (rv < 0) {
  422. hs->tls13_state = state_send_client_certificate;
  423. return ssl_hs_x509_lookup;
  424. }
  425. }
  426. if (!ssl_auto_chain_if_needed(ssl) ||
  427. !tls13_add_certificate(hs)) {
  428. return ssl_hs_error;
  429. }
  430. hs->tls13_state = state_send_client_certificate_verify;
  431. return ssl_hs_ok;
  432. }
  433. static enum ssl_hs_wait_t do_send_client_certificate_verify(SSL_HANDSHAKE *hs,
  434. int is_first_run) {
  435. SSL *const ssl = hs->ssl;
  436. /* Don't send CertificateVerify if there is no certificate. */
  437. if (!ssl_has_certificate(ssl)) {
  438. hs->tls13_state = state_complete_second_flight;
  439. return ssl_hs_ok;
  440. }
  441. switch (tls13_add_certificate_verify(hs, is_first_run)) {
  442. case ssl_private_key_success:
  443. hs->tls13_state = state_complete_second_flight;
  444. return ssl_hs_ok;
  445. case ssl_private_key_retry:
  446. hs->tls13_state = state_complete_client_certificate_verify;
  447. return ssl_hs_private_key_operation;
  448. case ssl_private_key_failure:
  449. return ssl_hs_error;
  450. }
  451. assert(0);
  452. return ssl_hs_error;
  453. }
  454. static enum ssl_hs_wait_t do_complete_second_flight(SSL_HANDSHAKE *hs) {
  455. SSL *const ssl = hs->ssl;
  456. /* Send a Channel ID assertion if necessary. */
  457. if (ssl->s3->tlsext_channel_id_valid) {
  458. if (!ssl_do_channel_id_callback(ssl)) {
  459. hs->tls13_state = state_complete_second_flight;
  460. return ssl_hs_error;
  461. }
  462. if (ssl->tlsext_channel_id_private == NULL) {
  463. return ssl_hs_channel_id_lookup;
  464. }
  465. CBB cbb, body;
  466. if (!ssl->method->init_message(ssl, &cbb, &body, SSL3_MT_CHANNEL_ID) ||
  467. !tls1_write_channel_id(hs, &body) ||
  468. !ssl_add_message_cbb(ssl, &cbb)) {
  469. CBB_cleanup(&cbb);
  470. return ssl_hs_error;
  471. }
  472. }
  473. /* Send a Finished message. */
  474. if (!tls13_add_finished(hs)) {
  475. return ssl_hs_error;
  476. }
  477. /* Derive the final keys and enable them. */
  478. if (!tls13_set_traffic_key(ssl, evp_aead_open, hs->server_traffic_secret_0,
  479. hs->hash_len) ||
  480. !tls13_set_traffic_key(ssl, evp_aead_seal, hs->client_traffic_secret_0,
  481. hs->hash_len) ||
  482. !tls13_derive_resumption_secret(hs)) {
  483. return ssl_hs_error;
  484. }
  485. hs->tls13_state = state_done;
  486. return ssl_hs_flush;
  487. }
  488. enum ssl_hs_wait_t tls13_client_handshake(SSL_HANDSHAKE *hs) {
  489. while (hs->tls13_state != state_done) {
  490. enum ssl_hs_wait_t ret = ssl_hs_error;
  491. enum client_hs_state_t state = hs->tls13_state;
  492. switch (state) {
  493. case state_process_hello_retry_request:
  494. ret = do_process_hello_retry_request(hs);
  495. break;
  496. case state_send_second_client_hello:
  497. ret = do_send_second_client_hello(hs);
  498. break;
  499. case state_process_server_hello:
  500. ret = do_process_server_hello(hs);
  501. break;
  502. case state_process_encrypted_extensions:
  503. ret = do_process_encrypted_extensions(hs);
  504. break;
  505. case state_process_certificate_request:
  506. ret = do_process_certificate_request(hs);
  507. break;
  508. case state_process_server_certificate:
  509. ret = do_process_server_certificate(hs);
  510. break;
  511. case state_process_server_certificate_verify:
  512. ret = do_process_server_certificate_verify(hs);
  513. break;
  514. case state_process_server_finished:
  515. ret = do_process_server_finished(hs);
  516. break;
  517. case state_send_client_certificate:
  518. ret = do_send_client_certificate(hs);
  519. break;
  520. case state_send_client_certificate_verify:
  521. ret = do_send_client_certificate_verify(hs, 1 /* first run */);
  522. break;
  523. case state_complete_client_certificate_verify:
  524. ret = do_send_client_certificate_verify(hs, 0 /* complete */);
  525. break;
  526. case state_complete_second_flight:
  527. ret = do_complete_second_flight(hs);
  528. break;
  529. case state_done:
  530. ret = ssl_hs_ok;
  531. break;
  532. }
  533. if (ret != ssl_hs_ok) {
  534. return ret;
  535. }
  536. }
  537. return ssl_hs_ok;
  538. }
  539. int tls13_process_new_session_ticket(SSL *ssl) {
  540. int ret = 0;
  541. SSL_SESSION *session = SSL_SESSION_dup(ssl->s3->established_session,
  542. SSL_SESSION_INCLUDE_NONAUTH);
  543. if (session == NULL) {
  544. return 0;
  545. }
  546. ssl_session_rebase_time(ssl, session);
  547. uint32_t server_timeout;
  548. CBS cbs, ticket, extensions;
  549. CBS_init(&cbs, ssl->init_msg, ssl->init_num);
  550. if (!CBS_get_u32(&cbs, &server_timeout) ||
  551. !CBS_get_u32(&cbs, &session->ticket_age_add) ||
  552. !CBS_get_u16_length_prefixed(&cbs, &ticket) ||
  553. !CBS_stow(&ticket, &session->tlsext_tick, &session->tlsext_ticklen) ||
  554. !CBS_get_u16_length_prefixed(&cbs, &extensions) ||
  555. CBS_len(&cbs) != 0) {
  556. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
  557. OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
  558. goto err;
  559. }
  560. /* Cap the renewable lifetime by the server advertised value. This avoids
  561. * wasting bandwidth on 0-RTT when we know the server will reject it.
  562. *
  563. * TODO(davidben): This dance where we're not sure if long or uint32_t is
  564. * bigger is silly. session->timeout should not be a long to begin with.
  565. * https://crbug.com/boringssl/155. */
  566. #if LONG_MAX < 0xffffffff
  567. if (server_timeout > LONG_MAX) {
  568. server_timeout = LONG_MAX;
  569. }
  570. #endif
  571. if (session->timeout > (long)server_timeout) {
  572. session->timeout = (long)server_timeout;
  573. }
  574. /* Parse out the extensions. */
  575. int have_early_data_info = 0;
  576. CBS early_data_info;
  577. const SSL_EXTENSION_TYPE ext_types[] = {
  578. {TLSEXT_TYPE_ticket_early_data_info, &have_early_data_info,
  579. &early_data_info},
  580. };
  581. uint8_t alert = SSL_AD_DECODE_ERROR;
  582. if (!ssl_parse_extensions(&extensions, &alert, ext_types,
  583. OPENSSL_ARRAY_SIZE(ext_types),
  584. 1 /* ignore unknown */)) {
  585. ssl3_send_alert(ssl, SSL3_AL_FATAL, alert);
  586. goto err;
  587. }
  588. if (have_early_data_info && ssl->ctx->enable_early_data) {
  589. if (!CBS_get_u32(&early_data_info, &session->ticket_max_early_data) ||
  590. CBS_len(&early_data_info) != 0) {
  591. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
  592. OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
  593. goto err;
  594. }
  595. }
  596. session->ticket_age_add_valid = 1;
  597. session->not_resumable = 0;
  598. if (ssl->ctx->new_session_cb != NULL &&
  599. ssl->ctx->new_session_cb(ssl, session)) {
  600. /* |new_session_cb|'s return value signals that it took ownership. */
  601. session = NULL;
  602. }
  603. ret = 1;
  604. err:
  605. SSL_SESSION_free(session);
  606. return ret;
  607. }
  608. void ssl_clear_tls13_state(SSL_HANDSHAKE *hs) {
  609. SSL_ECDH_CTX_cleanup(&hs->ecdh_ctx);
  610. OPENSSL_free(hs->key_share_bytes);
  611. hs->key_share_bytes = NULL;
  612. hs->key_share_bytes_len = 0;
  613. }