tls13_both.c 19 KB

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