Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

tls13_both.c 19 KiB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630
  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 <string.h>
  17. #include <openssl/bytestring.h>
  18. #include <openssl/err.h>
  19. #include <openssl/hkdf.h>
  20. #include <openssl/mem.h>
  21. #include <openssl/stack.h>
  22. #include <openssl/x509.h>
  23. #include <openssl/x509v3.h>
  24. #include "../crypto/internal.h"
  25. #include "internal.h"
  26. /* kMaxKeyUpdates is the number of consecutive KeyUpdates that will be
  27. * processed. Without this limit an attacker could force unbounded processing
  28. * without being able to return application data. */
  29. static const uint8_t kMaxKeyUpdates = 32;
  30. int tls13_handshake(SSL_HANDSHAKE *hs) {
  31. SSL *const ssl = hs->ssl;
  32. for (;;) {
  33. /* Resolve the operation the handshake was waiting on. */
  34. switch (hs->wait) {
  35. case ssl_hs_error:
  36. OPENSSL_PUT_ERROR(SSL, SSL_R_SSL_HANDSHAKE_FAILURE);
  37. return -1;
  38. case ssl_hs_flush:
  39. case ssl_hs_flush_and_read_message: {
  40. int ret = BIO_flush(ssl->wbio);
  41. if (ret <= 0) {
  42. ssl->rwstate = SSL_WRITING;
  43. return ret;
  44. }
  45. if (hs->wait != ssl_hs_flush_and_read_message) {
  46. break;
  47. }
  48. ssl->method->expect_flight(ssl);
  49. hs->wait = ssl_hs_read_message;
  50. /* Fall-through. */
  51. }
  52. case ssl_hs_read_message: {
  53. int ret = ssl->method->ssl_get_message(ssl, -1, ssl_dont_hash_message);
  54. if (ret <= 0) {
  55. return ret;
  56. }
  57. break;
  58. }
  59. case ssl_hs_write_message: {
  60. int ret = ssl->method->write_message(ssl);
  61. if (ret <= 0) {
  62. return ret;
  63. }
  64. break;
  65. }
  66. case ssl_hs_x509_lookup:
  67. ssl->rwstate = SSL_X509_LOOKUP;
  68. hs->wait = ssl_hs_ok;
  69. return -1;
  70. case ssl_hs_channel_id_lookup:
  71. ssl->rwstate = SSL_CHANNEL_ID_LOOKUP;
  72. hs->wait = ssl_hs_ok;
  73. return -1;
  74. case ssl_hs_private_key_operation:
  75. ssl->rwstate = SSL_PRIVATE_KEY_OPERATION;
  76. hs->wait = ssl_hs_ok;
  77. return -1;
  78. case ssl_hs_ok:
  79. break;
  80. }
  81. /* Run the state machine again. */
  82. hs->wait = hs->do_tls13_handshake(hs);
  83. if (hs->wait == ssl_hs_error) {
  84. /* Don't loop around to avoid a stray |SSL_R_SSL_HANDSHAKE_FAILURE| the
  85. * first time around. */
  86. return -1;
  87. }
  88. if (hs->wait == ssl_hs_ok) {
  89. /* The handshake has completed. */
  90. return 1;
  91. }
  92. /* Otherwise, loop to the beginning and resolve what was blocking the
  93. * handshake. */
  94. }
  95. }
  96. int tls13_get_cert_verify_signature_input(
  97. SSL *ssl, uint8_t **out, size_t *out_len,
  98. enum ssl_cert_verify_context_t cert_verify_context) {
  99. CBB cbb;
  100. if (!CBB_init(&cbb, 64 + 33 + 1 + 2 * EVP_MAX_MD_SIZE)) {
  101. goto err;
  102. }
  103. for (size_t i = 0; i < 64; i++) {
  104. if (!CBB_add_u8(&cbb, 0x20)) {
  105. goto err;
  106. }
  107. }
  108. const uint8_t *context;
  109. size_t context_len;
  110. if (cert_verify_context == ssl_cert_verify_server) {
  111. /* Include the NUL byte. */
  112. static const char kContext[] = "TLS 1.3, server CertificateVerify";
  113. context = (const uint8_t *)kContext;
  114. context_len = sizeof(kContext);
  115. } else if (cert_verify_context == ssl_cert_verify_client) {
  116. static const char kContext[] = "TLS 1.3, client CertificateVerify";
  117. context = (const uint8_t *)kContext;
  118. context_len = sizeof(kContext);
  119. } else if (cert_verify_context == ssl_cert_verify_channel_id) {
  120. static const char kContext[] = "TLS 1.3, Channel ID";
  121. context = (const uint8_t *)kContext;
  122. context_len = sizeof(kContext);
  123. } else {
  124. goto err;
  125. }
  126. if (!CBB_add_bytes(&cbb, context, context_len)) {
  127. goto err;
  128. }
  129. uint8_t context_hash[EVP_MAX_MD_SIZE];
  130. size_t context_hash_len;
  131. if (!tls13_get_context_hash(ssl, context_hash, &context_hash_len) ||
  132. !CBB_add_bytes(&cbb, context_hash, context_hash_len) ||
  133. !CBB_finish(&cbb, out, out_len)) {
  134. goto err;
  135. }
  136. return 1;
  137. err:
  138. OPENSSL_PUT_ERROR(SSL, ERR_R_MALLOC_FAILURE);
  139. CBB_cleanup(&cbb);
  140. return 0;
  141. }
  142. int tls13_process_certificate(SSL *ssl, int allow_anonymous) {
  143. CBS cbs, context, certificate_list;
  144. CBS_init(&cbs, ssl->init_msg, ssl->init_num);
  145. if (!CBS_get_u8_length_prefixed(&cbs, &context) ||
  146. CBS_len(&context) != 0) {
  147. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
  148. OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
  149. return 0;
  150. }
  151. const int retain_sha256 =
  152. ssl->server && ssl->retain_only_sha256_of_client_certs;
  153. int ret = 0;
  154. STACK_OF(CRYPTO_BUFFER) *certs = sk_CRYPTO_BUFFER_new_null();
  155. if (certs == NULL) {
  156. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
  157. OPENSSL_PUT_ERROR(SSL, ERR_R_MALLOC_FAILURE);
  158. goto err;
  159. }
  160. if (!CBS_get_u24_length_prefixed(&cbs, &certificate_list)) {
  161. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
  162. OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
  163. goto err;
  164. }
  165. while (CBS_len(&certificate_list) > 0) {
  166. CBS certificate, extensions;
  167. if (!CBS_get_u24_length_prefixed(&certificate_list, &certificate) ||
  168. !CBS_get_u16_length_prefixed(&certificate_list, &extensions) ||
  169. CBS_len(&certificate) == 0) {
  170. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
  171. OPENSSL_PUT_ERROR(SSL, SSL_R_CERT_LENGTH_MISMATCH);
  172. goto err;
  173. }
  174. /* Retain the hash of the leaf certificate if requested. */
  175. if (sk_CRYPTO_BUFFER_num(certs) == 0 && retain_sha256) {
  176. SHA256(CBS_data(&certificate), CBS_len(&certificate),
  177. ssl->s3->new_session->peer_sha256);
  178. }
  179. CRYPTO_BUFFER *buf =
  180. CRYPTO_BUFFER_new_from_CBS(&certificate, ssl->ctx->pool);
  181. if (buf == NULL ||
  182. !sk_CRYPTO_BUFFER_push(certs, buf)) {
  183. CRYPTO_BUFFER_free(buf);
  184. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
  185. OPENSSL_PUT_ERROR(SSL, ERR_R_MALLOC_FAILURE);
  186. goto err;
  187. }
  188. /* Parse out the extensions. */
  189. int have_status_request = 0, have_sct = 0;
  190. CBS status_request, sct;
  191. const SSL_EXTENSION_TYPE ext_types[] = {
  192. {TLSEXT_TYPE_status_request, &have_status_request, &status_request},
  193. {TLSEXT_TYPE_certificate_timestamp, &have_sct, &sct},
  194. };
  195. uint8_t alert;
  196. if (!ssl_parse_extensions(&extensions, &alert, ext_types,
  197. OPENSSL_ARRAY_SIZE(ext_types))) {
  198. ssl3_send_alert(ssl, SSL3_AL_FATAL, alert);
  199. goto err;
  200. }
  201. /* All Certificate extensions are parsed, but only the leaf extensions are
  202. * stored. */
  203. if (have_status_request) {
  204. if (ssl->server || !ssl->ocsp_stapling_enabled) {
  205. OPENSSL_PUT_ERROR(SSL, SSL_R_UNEXPECTED_EXTENSION);
  206. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_UNSUPPORTED_EXTENSION);
  207. goto err;
  208. }
  209. uint8_t status_type;
  210. CBS ocsp_response;
  211. if (!CBS_get_u8(&status_request, &status_type) ||
  212. status_type != TLSEXT_STATUSTYPE_ocsp ||
  213. !CBS_get_u24_length_prefixed(&status_request, &ocsp_response) ||
  214. CBS_len(&ocsp_response) == 0 ||
  215. CBS_len(&status_request) != 0) {
  216. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
  217. goto err;
  218. }
  219. if (sk_CRYPTO_BUFFER_num(certs) == 1 &&
  220. !CBS_stow(&ocsp_response, &ssl->s3->new_session->ocsp_response,
  221. &ssl->s3->new_session->ocsp_response_length)) {
  222. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
  223. goto err;
  224. }
  225. }
  226. if (have_sct) {
  227. if (ssl->server || !ssl->signed_cert_timestamps_enabled) {
  228. OPENSSL_PUT_ERROR(SSL, SSL_R_UNEXPECTED_EXTENSION);
  229. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_UNSUPPORTED_EXTENSION);
  230. goto err;
  231. }
  232. if (!ssl_is_sct_list_valid(&sct)) {
  233. OPENSSL_PUT_ERROR(SSL, SSL_R_ERROR_PARSING_EXTENSION);
  234. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
  235. goto err;
  236. }
  237. if (sk_CRYPTO_BUFFER_num(certs) == 1 &&
  238. !CBS_stow(&sct,
  239. &ssl->s3->new_session->tlsext_signed_cert_timestamp_list,
  240. &ssl->s3->new_session
  241. ->tlsext_signed_cert_timestamp_list_length)) {
  242. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
  243. goto err;
  244. }
  245. }
  246. }
  247. if (CBS_len(&cbs) != 0) {
  248. OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
  249. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
  250. goto err;
  251. }
  252. sk_CRYPTO_BUFFER_pop_free(ssl->s3->new_session->certs, CRYPTO_BUFFER_free);
  253. ssl->s3->new_session->certs = certs;
  254. certs = NULL;
  255. if (!ssl_session_x509_cache_objects(ssl->s3->new_session)) {
  256. OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
  257. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
  258. goto err;
  259. }
  260. if (sk_CRYPTO_BUFFER_num(ssl->s3->new_session->certs) == 0) {
  261. if (!allow_anonymous) {
  262. OPENSSL_PUT_ERROR(SSL, SSL_R_PEER_DID_NOT_RETURN_A_CERTIFICATE);
  263. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_CERTIFICATE_REQUIRED);
  264. goto err;
  265. }
  266. /* OpenSSL returns X509_V_OK when no certificates are requested. This is
  267. * classed by them as a bug, but it's assumed by at least NGINX. */
  268. ssl->s3->new_session->verify_result = X509_V_OK;
  269. /* No certificate, so nothing more to do. */
  270. ret = 1;
  271. goto err;
  272. }
  273. ssl->s3->new_session->peer_sha256_valid = retain_sha256;
  274. if (!ssl_verify_cert_chain(ssl, &ssl->s3->new_session->verify_result,
  275. ssl->s3->new_session->x509_chain)) {
  276. goto err;
  277. }
  278. ret = 1;
  279. err:
  280. sk_CRYPTO_BUFFER_pop_free(certs, CRYPTO_BUFFER_free);
  281. return ret;
  282. }
  283. int tls13_process_certificate_verify(SSL *ssl) {
  284. int ret = 0;
  285. X509 *peer = ssl->s3->new_session->x509_peer;
  286. EVP_PKEY *pkey = NULL;
  287. uint8_t *msg = NULL;
  288. size_t msg_len;
  289. /* Filter out unsupported certificate types. */
  290. pkey = X509_get_pubkey(peer);
  291. if (pkey == NULL) {
  292. goto err;
  293. }
  294. CBS cbs, signature;
  295. uint16_t signature_algorithm;
  296. CBS_init(&cbs, ssl->init_msg, ssl->init_num);
  297. if (!CBS_get_u16(&cbs, &signature_algorithm) ||
  298. !CBS_get_u16_length_prefixed(&cbs, &signature) ||
  299. CBS_len(&cbs) != 0) {
  300. OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
  301. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
  302. goto err;
  303. }
  304. int al;
  305. if (!tls12_check_peer_sigalg(ssl, &al, signature_algorithm)) {
  306. ssl3_send_alert(ssl, SSL3_AL_FATAL, al);
  307. goto err;
  308. }
  309. ssl->s3->tmp.peer_signature_algorithm = signature_algorithm;
  310. if (!tls13_get_cert_verify_signature_input(
  311. ssl, &msg, &msg_len,
  312. ssl->server ? ssl_cert_verify_client : ssl_cert_verify_server)) {
  313. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
  314. goto err;
  315. }
  316. int sig_ok =
  317. ssl_public_key_verify(ssl, CBS_data(&signature), CBS_len(&signature),
  318. signature_algorithm, pkey, msg, msg_len);
  319. #if defined(BORINGSSL_UNSAFE_FUZZER_MODE)
  320. sig_ok = 1;
  321. ERR_clear_error();
  322. #endif
  323. if (!sig_ok) {
  324. OPENSSL_PUT_ERROR(SSL, SSL_R_BAD_SIGNATURE);
  325. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECRYPT_ERROR);
  326. goto err;
  327. }
  328. ret = 1;
  329. err:
  330. EVP_PKEY_free(pkey);
  331. OPENSSL_free(msg);
  332. return ret;
  333. }
  334. int tls13_check_message_type(SSL *ssl, int type) {
  335. if (ssl->s3->tmp.message_type != type) {
  336. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_UNEXPECTED_MESSAGE);
  337. OPENSSL_PUT_ERROR(SSL, SSL_R_UNEXPECTED_MESSAGE);
  338. ERR_add_error_dataf("got type %d, wanted type %d",
  339. ssl->s3->tmp.message_type, type);
  340. return 0;
  341. }
  342. return 1;
  343. }
  344. int tls13_process_finished(SSL_HANDSHAKE *hs) {
  345. SSL *const ssl = hs->ssl;
  346. uint8_t verify_data[EVP_MAX_MD_SIZE];
  347. size_t verify_data_len;
  348. if (!tls13_finished_mac(hs, verify_data, &verify_data_len, !ssl->server)) {
  349. return 0;
  350. }
  351. int finished_ok =
  352. ssl->init_num == verify_data_len &&
  353. CRYPTO_memcmp(verify_data, ssl->init_msg, verify_data_len) == 0;
  354. #if defined(BORINGSSL_UNSAFE_FUZZER_MODE)
  355. finished_ok = 1;
  356. #endif
  357. if (!finished_ok) {
  358. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECRYPT_ERROR);
  359. OPENSSL_PUT_ERROR(SSL, SSL_R_DIGEST_CHECK_FAILED);
  360. return 0;
  361. }
  362. return 1;
  363. }
  364. int tls13_prepare_certificate(SSL_HANDSHAKE *hs) {
  365. SSL *const ssl = hs->ssl;
  366. CBB cbb, body, certificate_list;
  367. if (!ssl->method->init_message(ssl, &cbb, &body, SSL3_MT_CERTIFICATE) ||
  368. /* The request context is always empty in the handshake. */
  369. !CBB_add_u8(&body, 0) ||
  370. !CBB_add_u24_length_prefixed(&body, &certificate_list)) {
  371. OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
  372. goto err;
  373. }
  374. if (!ssl_has_certificate(ssl)) {
  375. if (!ssl_complete_message(ssl, &cbb)) {
  376. goto err;
  377. }
  378. return 1;
  379. }
  380. CERT *cert = ssl->cert;
  381. CBB leaf, extensions;
  382. if (!CBB_add_u24_length_prefixed(&certificate_list, &leaf) ||
  383. !ssl_add_cert_to_cbb(&leaf, cert->x509_leaf) ||
  384. !CBB_add_u16_length_prefixed(&certificate_list, &extensions)) {
  385. OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
  386. goto err;
  387. }
  388. if (hs->scts_requested &&
  389. ssl->ctx->signed_cert_timestamp_list_length != 0) {
  390. CBB contents;
  391. if (!CBB_add_u16(&extensions, TLSEXT_TYPE_certificate_timestamp) ||
  392. !CBB_add_u16_length_prefixed(&extensions, &contents) ||
  393. !CBB_add_bytes(&contents, ssl->ctx->signed_cert_timestamp_list,
  394. ssl->ctx->signed_cert_timestamp_list_length) ||
  395. !CBB_flush(&extensions)) {
  396. OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
  397. goto err;
  398. }
  399. }
  400. if (hs->ocsp_stapling_requested &&
  401. ssl->ocsp_response != NULL) {
  402. CBB contents, ocsp_response;
  403. if (!CBB_add_u16(&extensions, TLSEXT_TYPE_status_request) ||
  404. !CBB_add_u16_length_prefixed(&extensions, &contents) ||
  405. !CBB_add_u8(&contents, TLSEXT_STATUSTYPE_ocsp) ||
  406. !CBB_add_u24_length_prefixed(&contents, &ocsp_response) ||
  407. !CBB_add_bytes(&ocsp_response, CRYPTO_BUFFER_data(ssl->ocsp_response),
  408. CRYPTO_BUFFER_len(ssl->ocsp_response)) ||
  409. !CBB_flush(&extensions)) {
  410. OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
  411. goto err;
  412. }
  413. }
  414. for (size_t i = 0; i < sk_X509_num(cert->x509_chain); i++) {
  415. CBB child;
  416. if (!CBB_add_u24_length_prefixed(&certificate_list, &child) ||
  417. !ssl_add_cert_to_cbb(&child, sk_X509_value(cert->x509_chain, i)) ||
  418. !CBB_add_u16(&certificate_list, 0 /* no extensions */)) {
  419. OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
  420. goto err;
  421. }
  422. }
  423. if (!ssl_complete_message(ssl, &cbb)) {
  424. goto err;
  425. }
  426. return 1;
  427. err:
  428. CBB_cleanup(&cbb);
  429. return 0;
  430. }
  431. enum ssl_private_key_result_t tls13_prepare_certificate_verify(
  432. SSL_HANDSHAKE *hs, int is_first_run) {
  433. SSL *const ssl = hs->ssl;
  434. enum ssl_private_key_result_t ret = ssl_private_key_failure;
  435. uint8_t *msg = NULL;
  436. size_t msg_len;
  437. CBB cbb, body;
  438. CBB_zero(&cbb);
  439. uint16_t signature_algorithm;
  440. if (!tls1_choose_signature_algorithm(hs, &signature_algorithm)) {
  441. goto err;
  442. }
  443. if (!ssl->method->init_message(ssl, &cbb, &body,
  444. SSL3_MT_CERTIFICATE_VERIFY) ||
  445. !CBB_add_u16(&body, signature_algorithm)) {
  446. OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
  447. goto err;
  448. }
  449. /* Sign the digest. */
  450. CBB child;
  451. const size_t max_sig_len = ssl_private_key_max_signature_len(ssl);
  452. uint8_t *sig;
  453. size_t sig_len;
  454. if (!CBB_add_u16_length_prefixed(&body, &child) ||
  455. !CBB_reserve(&child, &sig, max_sig_len)) {
  456. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
  457. goto err;
  458. }
  459. enum ssl_private_key_result_t sign_result;
  460. if (is_first_run) {
  461. if (!tls13_get_cert_verify_signature_input(
  462. ssl, &msg, &msg_len,
  463. ssl->server ? ssl_cert_verify_server : ssl_cert_verify_client)) {
  464. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
  465. goto err;
  466. }
  467. sign_result = ssl_private_key_sign(ssl, sig, &sig_len, max_sig_len,
  468. signature_algorithm, msg, msg_len);
  469. } else {
  470. sign_result = ssl_private_key_complete(ssl, sig, &sig_len, max_sig_len);
  471. }
  472. if (sign_result != ssl_private_key_success) {
  473. ret = sign_result;
  474. goto err;
  475. }
  476. if (!CBB_did_write(&child, sig_len) ||
  477. !ssl_complete_message(ssl, &cbb)) {
  478. goto err;
  479. }
  480. ret = ssl_private_key_success;
  481. err:
  482. CBB_cleanup(&cbb);
  483. OPENSSL_free(msg);
  484. return ret;
  485. }
  486. int tls13_prepare_finished(SSL_HANDSHAKE *hs) {
  487. SSL *const ssl = hs->ssl;
  488. size_t verify_data_len;
  489. uint8_t verify_data[EVP_MAX_MD_SIZE];
  490. if (!tls13_finished_mac(hs, verify_data, &verify_data_len, ssl->server)) {
  491. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
  492. OPENSSL_PUT_ERROR(SSL, SSL_R_DIGEST_CHECK_FAILED);
  493. return 0;
  494. }
  495. CBB cbb, body;
  496. if (!ssl->method->init_message(ssl, &cbb, &body, SSL3_MT_FINISHED) ||
  497. !CBB_add_bytes(&body, verify_data, verify_data_len) ||
  498. !ssl_complete_message(ssl, &cbb)) {
  499. CBB_cleanup(&cbb);
  500. return 0;
  501. }
  502. return 1;
  503. }
  504. static int tls13_receive_key_update(SSL *ssl) {
  505. CBS cbs;
  506. uint8_t key_update_request;
  507. CBS_init(&cbs, ssl->init_msg, ssl->init_num);
  508. if (!CBS_get_u8(&cbs, &key_update_request) ||
  509. CBS_len(&cbs) != 0 ||
  510. (key_update_request != SSL_KEY_UPDATE_NOT_REQUESTED &&
  511. key_update_request != SSL_KEY_UPDATE_REQUESTED)) {
  512. OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
  513. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
  514. return 0;
  515. }
  516. /* TODO(svaldez): Send KeyUpdate if |key_update_request| is
  517. * |SSL_KEY_UPDATE_REQUESTED|. */
  518. return tls13_rotate_traffic_key(ssl, evp_aead_open);
  519. }
  520. int tls13_post_handshake(SSL *ssl) {
  521. if (ssl->s3->tmp.message_type == SSL3_MT_KEY_UPDATE) {
  522. ssl->s3->key_update_count++;
  523. if (ssl->s3->key_update_count > kMaxKeyUpdates) {
  524. OPENSSL_PUT_ERROR(SSL, SSL_R_TOO_MANY_KEY_UPDATES);
  525. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_UNEXPECTED_MESSAGE);
  526. return 0;
  527. }
  528. return tls13_receive_key_update(ssl);
  529. }
  530. ssl->s3->key_update_count = 0;
  531. if (ssl->s3->tmp.message_type == SSL3_MT_NEW_SESSION_TICKET &&
  532. !ssl->server) {
  533. return tls13_process_new_session_ticket(ssl);
  534. }
  535. // TODO(svaldez): Handle post-handshake authentication.
  536. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_UNEXPECTED_MESSAGE);
  537. OPENSSL_PUT_ERROR(SSL, SSL_R_UNEXPECTED_MESSAGE);
  538. return 0;
  539. }