summaryrefslogtreecommitdiff
path: root/src/lib/libssl/ssl_clnt.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libssl/ssl_clnt.c')
-rw-r--r--src/lib/libssl/ssl_clnt.c175
1 files changed, 81 insertions, 94 deletions
diff --git a/src/lib/libssl/ssl_clnt.c b/src/lib/libssl/ssl_clnt.c
index bcf5108975..8a4c54e7b7 100644
--- a/src/lib/libssl/ssl_clnt.c
+++ b/src/lib/libssl/ssl_clnt.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssl_clnt.c,v 1.112 2021/10/23 08:13:02 jsing Exp $ */ 1/* $OpenBSD: ssl_clnt.c,v 1.113 2021/10/23 08:34:36 jsing Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
@@ -779,16 +779,14 @@ ssl3_send_client_hello(SSL *s)
779int 779int
780ssl3_get_dtls_hello_verify(SSL *s) 780ssl3_get_dtls_hello_verify(SSL *s)
781{ 781{
782 long n; 782 CBS hello_verify_request, cookie;
783 int al, ok = 0;
784 size_t cookie_len; 783 size_t cookie_len;
785 uint16_t ssl_version; 784 uint16_t ssl_version;
786 CBS hello_verify_request, cookie; 785 int al, ret;
787 786
788 n = ssl3_get_message(s, DTLS1_ST_CR_HELLO_VERIFY_REQUEST_A, 787 if ((ret = ssl3_get_message(s, DTLS1_ST_CR_HELLO_VERIFY_REQUEST_A,
789 DTLS1_ST_CR_HELLO_VERIFY_REQUEST_B, -1, s->internal->max_cert_list, &ok); 788 DTLS1_ST_CR_HELLO_VERIFY_REQUEST_B, -1, s->internal->max_cert_list)) <= 0)
790 if (!ok) 789 return ret;
791 return ((int)n);
792 790
793 if (S3I(s)->hs.tls12.message_type != DTLS1_MT_HELLO_VERIFY_REQUEST) { 791 if (S3I(s)->hs.tls12.message_type != DTLS1_MT_HELLO_VERIFY_REQUEST) {
794 D1I(s)->send_cookie = 0; 792 D1I(s)->send_cookie = 0;
@@ -796,10 +794,11 @@ ssl3_get_dtls_hello_verify(SSL *s)
796 return (1); 794 return (1);
797 } 795 }
798 796
799 if (n < 0) 797 if (s->internal->init_num < 0)
800 goto decode_err; 798 goto decode_err;
801 799
802 CBS_init(&hello_verify_request, s->internal->init_msg, n); 800 CBS_init(&hello_verify_request, s->internal->init_msg,
801 s->internal->init_num);
803 802
804 if (!CBS_get_u16(&hello_verify_request, &ssl_version)) 803 if (!CBS_get_u16(&hello_verify_request, &ssl_version))
805 goto decode_err; 804 goto decode_err;
@@ -848,20 +847,18 @@ ssl3_get_server_hello(SSL *s)
848 const SSL_METHOD *method; 847 const SSL_METHOD *method;
849 unsigned long alg_k; 848 unsigned long alg_k;
850 size_t outlen; 849 size_t outlen;
851 int al, ok; 850 int al, ret;
852 long n;
853 851
854 s->internal->first_packet = 1; 852 s->internal->first_packet = 1;
855 n = ssl3_get_message(s, SSL3_ST_CR_SRVR_HELLO_A, 853 if ((ret = ssl3_get_message(s, SSL3_ST_CR_SRVR_HELLO_A,
856 SSL3_ST_CR_SRVR_HELLO_B, -1, 20000, /* ?? */ &ok); 854 SSL3_ST_CR_SRVR_HELLO_B, -1, 20000 /* ?? */)) <= 0)
857 if (!ok) 855 return ret;
858 return ((int)n);
859 s->internal->first_packet = 0; 856 s->internal->first_packet = 0;
860 857
861 if (n < 0) 858 if (s->internal->init_num < 0)
862 goto decode_err; 859 goto decode_err;
863 860
864 CBS_init(&cbs, s->internal->init_msg, n); 861 CBS_init(&cbs, s->internal->init_msg, s->internal->init_num);
865 862
866 if (SSL_is_dtls(s)) { 863 if (SSL_is_dtls(s)) {
867 if (S3I(s)->hs.tls12.message_type == DTLS1_MT_HELLO_VERIFY_REQUEST) { 864 if (S3I(s)->hs.tls12.message_type == DTLS1_MT_HELLO_VERIFY_REQUEST) {
@@ -1103,19 +1100,19 @@ ssl3_get_server_hello(SSL *s)
1103int 1100int
1104ssl3_get_server_certificate(SSL *s) 1101ssl3_get_server_certificate(SSL *s)
1105{ 1102{
1106 int al, i, ok, ret = -1; 1103 int al, i, ret;
1107 long n; 1104 CBS cbs, cert_list;
1108 CBS cbs, cert_list; 1105 X509 *x = NULL;
1109 X509 *x = NULL; 1106 const unsigned char *q;
1110 const unsigned char *q; 1107 STACK_OF(X509) *sk = NULL;
1111 STACK_OF(X509) *sk = NULL; 1108 SESS_CERT *sc;
1112 SESS_CERT *sc; 1109 EVP_PKEY *pkey = NULL;
1113 EVP_PKEY *pkey = NULL; 1110
1114 1111 if ((ret = ssl3_get_message(s, SSL3_ST_CR_CERT_A,
1115 n = ssl3_get_message(s, SSL3_ST_CR_CERT_A, 1112 SSL3_ST_CR_CERT_B, -1, s->internal->max_cert_list)) <= 0)
1116 SSL3_ST_CR_CERT_B, -1, s->internal->max_cert_list, &ok); 1113 return ret;
1117 if (!ok) 1114
1118 return ((int)n); 1115 ret = -1;
1119 1116
1120 if (S3I(s)->hs.tls12.message_type == SSL3_MT_SERVER_KEY_EXCHANGE) { 1117 if (S3I(s)->hs.tls12.message_type == SSL3_MT_SERVER_KEY_EXCHANGE) {
1121 S3I(s)->hs.tls12.reuse_message = 1; 1118 S3I(s)->hs.tls12.reuse_message = 1;
@@ -1128,16 +1125,15 @@ ssl3_get_server_certificate(SSL *s)
1128 goto fatal_err; 1125 goto fatal_err;
1129 } 1126 }
1130 1127
1131
1132 if ((sk = sk_X509_new_null()) == NULL) { 1128 if ((sk = sk_X509_new_null()) == NULL) {
1133 SSLerror(s, ERR_R_MALLOC_FAILURE); 1129 SSLerror(s, ERR_R_MALLOC_FAILURE);
1134 goto err; 1130 goto err;
1135 } 1131 }
1136 1132
1137 if (n < 0) 1133 if (s->internal->init_num < 0)
1138 goto decode_err; 1134 goto decode_err;
1139 1135
1140 CBS_init(&cbs, s->internal->init_msg, n); 1136 CBS_init(&cbs, s->internal->init_msg, s->internal->init_num);
1141 if (CBS_len(&cbs) < 3) 1137 if (CBS_len(&cbs) < 3)
1142 goto decode_err; 1138 goto decode_err;
1143 1139
@@ -1463,9 +1459,9 @@ ssl3_get_server_key_exchange(SSL *s)
1463 EVP_PKEY *pkey = NULL; 1459 EVP_PKEY *pkey = NULL;
1464 EVP_MD_CTX md_ctx; 1460 EVP_MD_CTX md_ctx;
1465 const unsigned char *param; 1461 const unsigned char *param;
1466 long n, alg_k, alg_a;
1467 int al, ok;
1468 size_t param_len; 1462 size_t param_len;
1463 long alg_k, alg_a;
1464 int al, ret;
1469 1465
1470 EVP_MD_CTX_init(&md_ctx); 1466 EVP_MD_CTX_init(&md_ctx);
1471 1467
@@ -1476,15 +1472,14 @@ ssl3_get_server_key_exchange(SSL *s)
1476 * Use same message size as in ssl3_get_certificate_request() 1472 * Use same message size as in ssl3_get_certificate_request()
1477 * as ServerKeyExchange message may be skipped. 1473 * as ServerKeyExchange message may be skipped.
1478 */ 1474 */
1479 n = ssl3_get_message(s, SSL3_ST_CR_KEY_EXCH_A, 1475 if ((ret = ssl3_get_message(s, SSL3_ST_CR_KEY_EXCH_A,
1480 SSL3_ST_CR_KEY_EXCH_B, -1, s->internal->max_cert_list, &ok); 1476 SSL3_ST_CR_KEY_EXCH_B, -1, s->internal->max_cert_list)) <= 0)
1481 if (!ok) 1477 return ret;
1482 return ((int)n);
1483 1478
1484 if (n < 0) 1479 if (s->internal->init_num < 0)
1485 goto err; 1480 goto err;
1486 1481
1487 CBS_init(&cbs, s->internal->init_msg, n); 1482 CBS_init(&cbs, s->internal->init_msg, s->internal->init_num);
1488 1483
1489 if (S3I(s)->hs.tls12.message_type != SSL3_MT_SERVER_KEY_EXCHANGE) { 1484 if (S3I(s)->hs.tls12.message_type != SSL3_MT_SERVER_KEY_EXCHANGE) {
1490 /* 1485 /*
@@ -1617,17 +1612,17 @@ ssl3_get_server_key_exchange(SSL *s)
1617int 1612int
1618ssl3_get_certificate_request(SSL *s) 1613ssl3_get_certificate_request(SSL *s)
1619{ 1614{
1620 int ok, ret = 0; 1615 CBS cert_request, cert_types, rdn_list;
1621 long n; 1616 X509_NAME *xn = NULL;
1622 CBS cert_request, cert_types, rdn_list; 1617 const unsigned char *q;
1623 X509_NAME *xn = NULL; 1618 STACK_OF(X509_NAME) *ca_sk = NULL;
1624 const unsigned char *q; 1619 int ret;
1625 STACK_OF(X509_NAME) *ca_sk = NULL; 1620
1626 1621 if ((ret = ssl3_get_message(s, SSL3_ST_CR_CERT_REQ_A,
1627 n = ssl3_get_message(s, SSL3_ST_CR_CERT_REQ_A, 1622 SSL3_ST_CR_CERT_REQ_B, -1, s->internal->max_cert_list)) <= 0)
1628 SSL3_ST_CR_CERT_REQ_B, -1, s->internal->max_cert_list, &ok); 1623 return ret;
1629 if (!ok) 1624
1630 return ((int)n); 1625 ret = 0;
1631 1626
1632 S3I(s)->hs.tls12.cert_request = 0; 1627 S3I(s)->hs.tls12.cert_request = 0;
1633 1628
@@ -1654,9 +1649,9 @@ ssl3_get_certificate_request(SSL *s)
1654 goto err; 1649 goto err;
1655 } 1650 }
1656 1651
1657 if (n < 0) 1652 if (s->internal->init_num < 0)
1658 goto decode_err; 1653 goto decode_err;
1659 CBS_init(&cert_request, s->internal->init_msg, n); 1654 CBS_init(&cert_request, s->internal->init_msg, s->internal->init_num);
1660 1655
1661 if ((ca_sk = sk_X509_NAME_new(ca_dn_cmp)) == NULL) { 1656 if ((ca_sk = sk_X509_NAME_new(ca_dn_cmp)) == NULL) {
1662 SSLerror(s, ERR_R_MALLOC_FAILURE); 1657 SSLerror(s, ERR_R_MALLOC_FAILURE);
@@ -1761,15 +1756,15 @@ ca_dn_cmp(const X509_NAME * const *a, const X509_NAME * const *b)
1761int 1756int
1762ssl3_get_new_session_ticket(SSL *s) 1757ssl3_get_new_session_ticket(SSL *s)
1763{ 1758{
1764 int ok, al, ret = 0; 1759 uint32_t lifetime_hint;
1765 uint32_t lifetime_hint; 1760 CBS cbs, session_ticket;
1766 long n; 1761 int al, ret;
1767 CBS cbs, session_ticket; 1762
1763 if ((ret = ssl3_get_message(s, SSL3_ST_CR_SESSION_TICKET_A,
1764 SSL3_ST_CR_SESSION_TICKET_B, -1, 16384)) <= 0)
1765 return ret;
1768 1766
1769 n = ssl3_get_message(s, SSL3_ST_CR_SESSION_TICKET_A, 1767 ret = 0;
1770 SSL3_ST_CR_SESSION_TICKET_B, -1, 16384, &ok);
1771 if (!ok)
1772 return ((int)n);
1773 1768
1774 if (S3I(s)->hs.tls12.message_type == SSL3_MT_FINISHED) { 1769 if (S3I(s)->hs.tls12.message_type == SSL3_MT_FINISHED) {
1775 S3I(s)->hs.tls12.reuse_message = 1; 1770 S3I(s)->hs.tls12.reuse_message = 1;
@@ -1781,13 +1776,13 @@ ssl3_get_new_session_ticket(SSL *s)
1781 goto fatal_err; 1776 goto fatal_err;
1782 } 1777 }
1783 1778
1784 if (n < 0) { 1779 if (s->internal->init_num < 0) {
1785 al = SSL_AD_DECODE_ERROR; 1780 al = SSL_AD_DECODE_ERROR;
1786 SSLerror(s, SSL_R_LENGTH_MISMATCH); 1781 SSLerror(s, SSL_R_LENGTH_MISMATCH);
1787 goto fatal_err; 1782 goto fatal_err;
1788 } 1783 }
1789 1784
1790 CBS_init(&cbs, s->internal->init_msg, n); 1785 CBS_init(&cbs, s->internal->init_msg, s->internal->init_num);
1791 if (!CBS_get_u32(&cbs, &lifetime_hint) || 1786 if (!CBS_get_u32(&cbs, &lifetime_hint) ||
1792 !CBS_get_u16_length_prefixed(&cbs, &session_ticket) || 1787 !CBS_get_u16_length_prefixed(&cbs, &session_ticket) ||
1793 CBS_len(&cbs) != 0) { 1788 CBS_len(&cbs) != 0) {
@@ -1833,15 +1828,13 @@ ssl3_get_new_session_ticket(SSL *s)
1833int 1828int
1834ssl3_get_cert_status(SSL *s) 1829ssl3_get_cert_status(SSL *s)
1835{ 1830{
1836 CBS cert_status, response; 1831 CBS cert_status, response;
1837 int ok, al; 1832 uint8_t status_type;
1838 long n; 1833 int al, ret;
1839 uint8_t status_type;
1840 1834
1841 n = ssl3_get_message(s, SSL3_ST_CR_CERT_STATUS_A, 1835 if ((ret = ssl3_get_message(s, SSL3_ST_CR_CERT_STATUS_A,
1842 SSL3_ST_CR_CERT_STATUS_B, -1, 16384, &ok); 1836 SSL3_ST_CR_CERT_STATUS_B, -1, 16384)) <= 0)
1843 if (!ok) 1837 return ret;
1844 return ((int)n);
1845 1838
1846 if (S3I(s)->hs.tls12.message_type == SSL3_MT_SERVER_KEY_EXCHANGE) { 1839 if (S3I(s)->hs.tls12.message_type == SSL3_MT_SERVER_KEY_EXCHANGE) {
1847 /* 1840 /*
@@ -1849,8 +1842,6 @@ ssl3_get_cert_status(SSL *s)
1849 * response, and has decided to head directly to key exchange. 1842 * response, and has decided to head directly to key exchange.
1850 */ 1843 */
1851 if (s->ctx->internal->tlsext_status_cb) { 1844 if (s->ctx->internal->tlsext_status_cb) {
1852 int ret;
1853
1854 free(s->internal->tlsext_ocsp_resp); 1845 free(s->internal->tlsext_ocsp_resp);
1855 s->internal->tlsext_ocsp_resp = NULL; 1846 s->internal->tlsext_ocsp_resp = NULL;
1856 s->internal->tlsext_ocsp_resp_len = 0; 1847 s->internal->tlsext_ocsp_resp_len = 0;
@@ -1879,14 +1870,14 @@ ssl3_get_cert_status(SSL *s)
1879 goto fatal_err; 1870 goto fatal_err;
1880 } 1871 }
1881 1872
1882 if (n < 0) { 1873 if (s->internal->init_num < 0) {
1883 /* need at least status type + length */ 1874 /* need at least status type + length */
1884 al = SSL_AD_DECODE_ERROR; 1875 al = SSL_AD_DECODE_ERROR;
1885 SSLerror(s, SSL_R_LENGTH_MISMATCH); 1876 SSLerror(s, SSL_R_LENGTH_MISMATCH);
1886 goto fatal_err; 1877 goto fatal_err;
1887 } 1878 }
1888 1879
1889 CBS_init(&cert_status, s->internal->init_msg, n); 1880 CBS_init(&cert_status, s->internal->init_msg, s->internal->init_num);
1890 if (!CBS_get_u8(&cert_status, &status_type) || 1881 if (!CBS_get_u8(&cert_status, &status_type) ||
1891 CBS_len(&cert_status) < 3) { 1882 CBS_len(&cert_status) < 3) {
1892 /* need at least status type + length */ 1883 /* need at least status type + length */
@@ -1939,23 +1930,21 @@ ssl3_get_cert_status(SSL *s)
1939int 1930int
1940ssl3_get_server_done(SSL *s) 1931ssl3_get_server_done(SSL *s)
1941{ 1932{
1942 int ok, ret = 0; 1933 int ret;
1943 long n;
1944 1934
1945 n = ssl3_get_message(s, SSL3_ST_CR_SRVR_DONE_A, 1935 if ((ret = ssl3_get_message(s, SSL3_ST_CR_SRVR_DONE_A,
1946 SSL3_ST_CR_SRVR_DONE_B, SSL3_MT_SERVER_DONE, 1936 SSL3_ST_CR_SRVR_DONE_B, SSL3_MT_SERVER_DONE,
1947 30, /* should be very small, like 0 :-) */ &ok); 1937 30 /* should be very small, like 0 :-) */)) <= 0)
1948 if (!ok) 1938 return ret;
1949 return ((int)n);
1950 1939
1951 if (n > 0) { 1940 if (s->internal->init_num != 0) {
1952 /* should contain no data */ 1941 /* should contain no data */
1953 ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR); 1942 ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
1954 SSLerror(s, SSL_R_LENGTH_MISMATCH); 1943 SSLerror(s, SSL_R_LENGTH_MISMATCH);
1955 return (-1); 1944 return -1;
1956 } 1945 }
1957 ret = 1; 1946
1958 return (ret); 1947 return 1;
1959} 1948}
1960 1949
1961static int 1950static int
@@ -2756,18 +2745,16 @@ ssl3_check_cert_and_algorithm(SSL *s)
2756int 2745int
2757ssl3_check_finished(SSL *s) 2746ssl3_check_finished(SSL *s)
2758{ 2747{
2759 int ok; 2748 int ret;
2760 long n;
2761 2749
2762 /* If we have no ticket it cannot be a resumed session. */ 2750 /* If we have no ticket it cannot be a resumed session. */
2763 if (!s->session->tlsext_tick) 2751 if (!s->session->tlsext_tick)
2764 return (1); 2752 return (1);
2765 /* this function is called when we really expect a Certificate 2753 /* this function is called when we really expect a Certificate
2766 * message, so permit appropriate message length */ 2754 * message, so permit appropriate message length */
2767 n = ssl3_get_message(s, SSL3_ST_CR_CERT_A, 2755 if ((ret = ssl3_get_message(s, SSL3_ST_CR_CERT_A,
2768 SSL3_ST_CR_CERT_B, -1, s->internal->max_cert_list, &ok); 2756 SSL3_ST_CR_CERT_B, -1, s->internal->max_cert_list)) <= 0)
2769 if (!ok) 2757 return ret;
2770 return ((int)n);
2771 2758
2772 S3I(s)->hs.tls12.reuse_message = 1; 2759 S3I(s)->hs.tls12.reuse_message = 1;
2773 if ((S3I(s)->hs.tls12.message_type == SSL3_MT_FINISHED) || 2760 if ((S3I(s)->hs.tls12.message_type == SSL3_MT_FINISHED) ||