25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.
 
 
 
 
 
 

641 satır
19 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 <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, -1, ssl_dont_hash_message);
  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 *ssl, 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 (!tls13_get_context_hash(ssl, context_hash, &context_hash_len) ||
  124. !CBB_add_bytes(&cbb, context_hash, context_hash_len) ||
  125. !CBB_finish(&cbb, out, out_len)) {
  126. goto err;
  127. }
  128. return 1;
  129. err:
  130. OPENSSL_PUT_ERROR(SSL, ERR_R_MALLOC_FAILURE);
  131. CBB_cleanup(&cbb);
  132. return 0;
  133. }
  134. int tls13_process_certificate(SSL_HANDSHAKE *hs, int allow_anonymous) {
  135. SSL *const ssl = hs->ssl;
  136. CBS cbs, context, certificate_list;
  137. CBS_init(&cbs, ssl->init_msg, ssl->init_num);
  138. if (!CBS_get_u8_length_prefixed(&cbs, &context) ||
  139. CBS_len(&context) != 0) {
  140. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
  141. OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
  142. return 0;
  143. }
  144. const int retain_sha256 =
  145. ssl->server && ssl->retain_only_sha256_of_client_certs;
  146. int ret = 0;
  147. EVP_PKEY *pkey = NULL;
  148. STACK_OF(CRYPTO_BUFFER) *certs = sk_CRYPTO_BUFFER_new_null();
  149. if (certs == NULL) {
  150. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
  151. OPENSSL_PUT_ERROR(SSL, ERR_R_MALLOC_FAILURE);
  152. goto err;
  153. }
  154. if (!CBS_get_u24_length_prefixed(&cbs, &certificate_list)) {
  155. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
  156. OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
  157. goto err;
  158. }
  159. while (CBS_len(&certificate_list) > 0) {
  160. CBS certificate, extensions;
  161. if (!CBS_get_u24_length_prefixed(&certificate_list, &certificate) ||
  162. !CBS_get_u16_length_prefixed(&certificate_list, &extensions) ||
  163. CBS_len(&certificate) == 0) {
  164. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
  165. OPENSSL_PUT_ERROR(SSL, SSL_R_CERT_LENGTH_MISMATCH);
  166. goto err;
  167. }
  168. if (sk_CRYPTO_BUFFER_num(certs) == 0) {
  169. pkey = ssl_cert_parse_pubkey(&certificate);
  170. if (pkey == NULL) {
  171. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
  172. OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
  173. goto err;
  174. }
  175. /* TLS 1.3 always uses certificate keys for signing thus the correct
  176. * keyUsage is enforced. */
  177. if (!ssl_cert_check_digital_signature_key_usage(&certificate)) {
  178. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER);
  179. goto err;
  180. }
  181. if (retain_sha256) {
  182. /* Retain the hash of the leaf certificate if requested. */
  183. SHA256(CBS_data(&certificate), CBS_len(&certificate),
  184. ssl->s3->new_session->peer_sha256);
  185. }
  186. }
  187. CRYPTO_BUFFER *buf =
  188. CRYPTO_BUFFER_new_from_CBS(&certificate, ssl->ctx->pool);
  189. if (buf == NULL ||
  190. !sk_CRYPTO_BUFFER_push(certs, buf)) {
  191. CRYPTO_BUFFER_free(buf);
  192. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
  193. OPENSSL_PUT_ERROR(SSL, ERR_R_MALLOC_FAILURE);
  194. goto err;
  195. }
  196. /* Parse out the extensions. */
  197. int have_status_request = 0, have_sct = 0;
  198. CBS status_request, sct;
  199. const SSL_EXTENSION_TYPE ext_types[] = {
  200. {TLSEXT_TYPE_status_request, &have_status_request, &status_request},
  201. {TLSEXT_TYPE_certificate_timestamp, &have_sct, &sct},
  202. };
  203. uint8_t alert;
  204. if (!ssl_parse_extensions(&extensions, &alert, ext_types,
  205. OPENSSL_ARRAY_SIZE(ext_types),
  206. 0 /* reject unknown */)) {
  207. ssl3_send_alert(ssl, SSL3_AL_FATAL, alert);
  208. goto err;
  209. }
  210. /* All Certificate extensions are parsed, but only the leaf extensions are
  211. * stored. */
  212. if (have_status_request) {
  213. if (ssl->server || !ssl->ocsp_stapling_enabled) {
  214. OPENSSL_PUT_ERROR(SSL, SSL_R_UNEXPECTED_EXTENSION);
  215. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_UNSUPPORTED_EXTENSION);
  216. goto err;
  217. }
  218. uint8_t status_type;
  219. CBS ocsp_response;
  220. if (!CBS_get_u8(&status_request, &status_type) ||
  221. status_type != TLSEXT_STATUSTYPE_ocsp ||
  222. !CBS_get_u24_length_prefixed(&status_request, &ocsp_response) ||
  223. CBS_len(&ocsp_response) == 0 ||
  224. CBS_len(&status_request) != 0) {
  225. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
  226. goto err;
  227. }
  228. if (sk_CRYPTO_BUFFER_num(certs) == 1 &&
  229. !CBS_stow(&ocsp_response, &ssl->s3->new_session->ocsp_response,
  230. &ssl->s3->new_session->ocsp_response_length)) {
  231. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
  232. goto err;
  233. }
  234. }
  235. if (have_sct) {
  236. if (ssl->server || !ssl->signed_cert_timestamps_enabled) {
  237. OPENSSL_PUT_ERROR(SSL, SSL_R_UNEXPECTED_EXTENSION);
  238. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_UNSUPPORTED_EXTENSION);
  239. goto err;
  240. }
  241. if (!ssl_is_sct_list_valid(&sct)) {
  242. OPENSSL_PUT_ERROR(SSL, SSL_R_ERROR_PARSING_EXTENSION);
  243. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
  244. goto err;
  245. }
  246. if (sk_CRYPTO_BUFFER_num(certs) == 1 &&
  247. !CBS_stow(&sct,
  248. &ssl->s3->new_session->tlsext_signed_cert_timestamp_list,
  249. &ssl->s3->new_session
  250. ->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(ssl->s3->new_session->certs, CRYPTO_BUFFER_free);
  265. ssl->s3->new_session->certs = certs;
  266. certs = NULL;
  267. if (!ssl_session_x509_cache_objects(ssl->s3->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(ssl->s3->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. ssl->s3->new_session->verify_result = X509_V_OK;
  281. /* No certificate, so nothing more to do. */
  282. ret = 1;
  283. goto err;
  284. }
  285. ssl->s3->new_session->peer_sha256_valid = retain_sha256;
  286. if (!ssl_verify_cert_chain(ssl, &ssl->s3->new_session->verify_result,
  287. ssl->s3->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. ssl->s3->new_session->peer_signature_algorithm = signature_algorithm;
  320. if (!tls13_get_cert_verify_signature_input(
  321. ssl, &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_check_message_type(SSL *ssl, int type) {
  344. if (ssl->s3->tmp.message_type != type) {
  345. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_UNEXPECTED_MESSAGE);
  346. OPENSSL_PUT_ERROR(SSL, SSL_R_UNEXPECTED_MESSAGE);
  347. ERR_add_error_dataf("got type %d, wanted type %d",
  348. ssl->s3->tmp.message_type, type);
  349. return 0;
  350. }
  351. return 1;
  352. }
  353. int tls13_process_finished(SSL_HANDSHAKE *hs) {
  354. SSL *const ssl = hs->ssl;
  355. uint8_t verify_data[EVP_MAX_MD_SIZE];
  356. size_t verify_data_len;
  357. if (!tls13_finished_mac(hs, verify_data, &verify_data_len, !ssl->server)) {
  358. return 0;
  359. }
  360. int finished_ok =
  361. ssl->init_num == verify_data_len &&
  362. CRYPTO_memcmp(verify_data, ssl->init_msg, verify_data_len) == 0;
  363. #if defined(BORINGSSL_UNSAFE_FUZZER_MODE)
  364. finished_ok = 1;
  365. #endif
  366. if (!finished_ok) {
  367. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECRYPT_ERROR);
  368. OPENSSL_PUT_ERROR(SSL, SSL_R_DIGEST_CHECK_FAILED);
  369. return 0;
  370. }
  371. return 1;
  372. }
  373. int tls13_add_certificate(SSL_HANDSHAKE *hs) {
  374. SSL *const ssl = hs->ssl;
  375. CBB cbb, body, certificate_list;
  376. if (!ssl->method->init_message(ssl, &cbb, &body, SSL3_MT_CERTIFICATE) ||
  377. /* The request context is always empty in the handshake. */
  378. !CBB_add_u8(&body, 0) ||
  379. !CBB_add_u24_length_prefixed(&body, &certificate_list)) {
  380. OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
  381. goto err;
  382. }
  383. if (!ssl_has_certificate(ssl)) {
  384. if (!ssl_add_message_cbb(ssl, &cbb)) {
  385. goto err;
  386. }
  387. return 1;
  388. }
  389. CERT *cert = ssl->cert;
  390. CBB leaf, extensions;
  391. if (!CBB_add_u24_length_prefixed(&certificate_list, &leaf) ||
  392. !ssl_add_cert_to_cbb(&leaf, cert->x509_leaf) ||
  393. !CBB_add_u16_length_prefixed(&certificate_list, &extensions)) {
  394. OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
  395. goto err;
  396. }
  397. if (hs->scts_requested &&
  398. ssl->ctx->signed_cert_timestamp_list_length != 0) {
  399. CBB contents;
  400. if (!CBB_add_u16(&extensions, TLSEXT_TYPE_certificate_timestamp) ||
  401. !CBB_add_u16_length_prefixed(&extensions, &contents) ||
  402. !CBB_add_bytes(&contents, ssl->ctx->signed_cert_timestamp_list,
  403. ssl->ctx->signed_cert_timestamp_list_length) ||
  404. !CBB_flush(&extensions)) {
  405. OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
  406. goto err;
  407. }
  408. }
  409. if (hs->ocsp_stapling_requested &&
  410. ssl->ocsp_response != NULL) {
  411. CBB contents, ocsp_response;
  412. if (!CBB_add_u16(&extensions, TLSEXT_TYPE_status_request) ||
  413. !CBB_add_u16_length_prefixed(&extensions, &contents) ||
  414. !CBB_add_u8(&contents, TLSEXT_STATUSTYPE_ocsp) ||
  415. !CBB_add_u24_length_prefixed(&contents, &ocsp_response) ||
  416. !CBB_add_bytes(&ocsp_response, CRYPTO_BUFFER_data(ssl->ocsp_response),
  417. CRYPTO_BUFFER_len(ssl->ocsp_response)) ||
  418. !CBB_flush(&extensions)) {
  419. OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
  420. goto err;
  421. }
  422. }
  423. for (size_t i = 0; i < sk_X509_num(cert->x509_chain); i++) {
  424. CBB child;
  425. if (!CBB_add_u24_length_prefixed(&certificate_list, &child) ||
  426. !ssl_add_cert_to_cbb(&child, sk_X509_value(cert->x509_chain, i)) ||
  427. !CBB_add_u16(&certificate_list, 0 /* no extensions */)) {
  428. OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
  429. goto err;
  430. }
  431. }
  432. if (!ssl_add_message_cbb(ssl, &cbb)) {
  433. goto err;
  434. }
  435. return 1;
  436. err:
  437. CBB_cleanup(&cbb);
  438. return 0;
  439. }
  440. enum ssl_private_key_result_t tls13_add_certificate_verify(SSL_HANDSHAKE *hs,
  441. int is_first_run) {
  442. SSL *const ssl = hs->ssl;
  443. enum ssl_private_key_result_t ret = ssl_private_key_failure;
  444. uint8_t *msg = NULL;
  445. size_t msg_len;
  446. CBB cbb, body;
  447. CBB_zero(&cbb);
  448. uint16_t signature_algorithm;
  449. if (!tls1_choose_signature_algorithm(hs, &signature_algorithm)) {
  450. goto err;
  451. }
  452. if (!ssl->method->init_message(ssl, &cbb, &body,
  453. SSL3_MT_CERTIFICATE_VERIFY) ||
  454. !CBB_add_u16(&body, signature_algorithm)) {
  455. OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
  456. goto err;
  457. }
  458. /* Sign the digest. */
  459. CBB child;
  460. const size_t max_sig_len = ssl_private_key_max_signature_len(ssl);
  461. uint8_t *sig;
  462. size_t sig_len;
  463. if (!CBB_add_u16_length_prefixed(&body, &child) ||
  464. !CBB_reserve(&child, &sig, max_sig_len)) {
  465. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
  466. goto err;
  467. }
  468. enum ssl_private_key_result_t sign_result;
  469. if (is_first_run) {
  470. if (!tls13_get_cert_verify_signature_input(
  471. ssl, &msg, &msg_len,
  472. ssl->server ? ssl_cert_verify_server : ssl_cert_verify_client)) {
  473. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
  474. goto err;
  475. }
  476. sign_result = ssl_private_key_sign(ssl, sig, &sig_len, max_sig_len,
  477. signature_algorithm, msg, msg_len);
  478. } else {
  479. sign_result = ssl_private_key_complete(ssl, sig, &sig_len, max_sig_len);
  480. }
  481. if (sign_result != ssl_private_key_success) {
  482. ret = sign_result;
  483. goto err;
  484. }
  485. if (!CBB_did_write(&child, sig_len) ||
  486. !ssl_add_message_cbb(ssl, &cbb)) {
  487. goto err;
  488. }
  489. ret = ssl_private_key_success;
  490. err:
  491. CBB_cleanup(&cbb);
  492. OPENSSL_free(msg);
  493. return ret;
  494. }
  495. int tls13_add_finished(SSL_HANDSHAKE *hs) {
  496. SSL *const ssl = hs->ssl;
  497. size_t verify_data_len;
  498. uint8_t verify_data[EVP_MAX_MD_SIZE];
  499. if (!tls13_finished_mac(hs, verify_data, &verify_data_len, ssl->server)) {
  500. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
  501. OPENSSL_PUT_ERROR(SSL, SSL_R_DIGEST_CHECK_FAILED);
  502. return 0;
  503. }
  504. CBB cbb, body;
  505. if (!ssl->method->init_message(ssl, &cbb, &body, SSL3_MT_FINISHED) ||
  506. !CBB_add_bytes(&body, verify_data, verify_data_len) ||
  507. !ssl_add_message_cbb(ssl, &cbb)) {
  508. CBB_cleanup(&cbb);
  509. return 0;
  510. }
  511. return 1;
  512. }
  513. static int tls13_receive_key_update(SSL *ssl) {
  514. CBS cbs;
  515. uint8_t key_update_request;
  516. CBS_init(&cbs, ssl->init_msg, ssl->init_num);
  517. if (!CBS_get_u8(&cbs, &key_update_request) ||
  518. CBS_len(&cbs) != 0 ||
  519. (key_update_request != SSL_KEY_UPDATE_NOT_REQUESTED &&
  520. key_update_request != SSL_KEY_UPDATE_REQUESTED)) {
  521. OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
  522. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
  523. return 0;
  524. }
  525. /* TODO(svaldez): Send KeyUpdate if |key_update_request| is
  526. * |SSL_KEY_UPDATE_REQUESTED|. */
  527. return tls13_rotate_traffic_key(ssl, evp_aead_open);
  528. }
  529. int tls13_post_handshake(SSL *ssl) {
  530. if (ssl->s3->tmp.message_type == SSL3_MT_KEY_UPDATE) {
  531. ssl->s3->key_update_count++;
  532. if (ssl->s3->key_update_count > kMaxKeyUpdates) {
  533. OPENSSL_PUT_ERROR(SSL, SSL_R_TOO_MANY_KEY_UPDATES);
  534. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_UNEXPECTED_MESSAGE);
  535. return 0;
  536. }
  537. return tls13_receive_key_update(ssl);
  538. }
  539. ssl->s3->key_update_count = 0;
  540. if (ssl->s3->tmp.message_type == SSL3_MT_NEW_SESSION_TICKET &&
  541. !ssl->server) {
  542. return tls13_process_new_session_ticket(ssl);
  543. }
  544. // TODO(svaldez): Handle post-handshake authentication.
  545. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_UNEXPECTED_MESSAGE);
  546. OPENSSL_PUT_ERROR(SSL, SSL_R_UNEXPECTED_MESSAGE);
  547. return 0;
  548. }