summaryrefslogtreecommitdiff
path: root/src/lib/libssl/s3_clnt.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libssl/s3_clnt.c')
-rw-r--r--src/lib/libssl/s3_clnt.c397
1 files changed, 359 insertions, 38 deletions
diff --git a/src/lib/libssl/s3_clnt.c b/src/lib/libssl/s3_clnt.c
index 53223bd38d..b80d052e1f 100644
--- a/src/lib/libssl/s3_clnt.c
+++ b/src/lib/libssl/s3_clnt.c
@@ -156,6 +156,9 @@
156#include <openssl/objects.h> 156#include <openssl/objects.h>
157#include <openssl/evp.h> 157#include <openssl/evp.h>
158#include <openssl/md5.h> 158#include <openssl/md5.h>
159#ifdef OPENSSL_FIPS
160#include <openssl/fips.h>
161#endif
159#ifndef OPENSSL_NO_DH 162#ifndef OPENSSL_NO_DH
160#include <openssl/dh.h> 163#include <openssl/dh.h>
161#endif 164#endif
@@ -200,6 +203,18 @@ int ssl3_connect(SSL *s)
200 s->in_handshake++; 203 s->in_handshake++;
201 if (!SSL_in_init(s) || SSL_in_before(s)) SSL_clear(s); 204 if (!SSL_in_init(s) || SSL_in_before(s)) SSL_clear(s);
202 205
206#ifndef OPENSSL_NO_HEARTBEATS
207 /* If we're awaiting a HeartbeatResponse, pretend we
208 * already got and don't await it anymore, because
209 * Heartbeats don't make sense during handshakes anyway.
210 */
211 if (s->tlsext_hb_pending)
212 {
213 s->tlsext_hb_pending = 0;
214 s->tlsext_hb_seq++;
215 }
216#endif
217
203 for (;;) 218 for (;;)
204 { 219 {
205 state=s->state; 220 state=s->state;
@@ -207,7 +222,7 @@ int ssl3_connect(SSL *s)
207 switch(s->state) 222 switch(s->state)
208 { 223 {
209 case SSL_ST_RENEGOTIATE: 224 case SSL_ST_RENEGOTIATE:
210 s->new_session=1; 225 s->renegotiate=1;
211 s->state=SSL_ST_CONNECT; 226 s->state=SSL_ST_CONNECT;
212 s->ctx->stats.sess_connect_renegotiate++; 227 s->ctx->stats.sess_connect_renegotiate++;
213 /* break */ 228 /* break */
@@ -280,7 +295,16 @@ int ssl3_connect(SSL *s)
280 if (ret <= 0) goto end; 295 if (ret <= 0) goto end;
281 296
282 if (s->hit) 297 if (s->hit)
298 {
283 s->state=SSL3_ST_CR_FINISHED_A; 299 s->state=SSL3_ST_CR_FINISHED_A;
300#ifndef OPENSSL_NO_TLSEXT
301 if (s->tlsext_ticket_expected)
302 {
303 /* receive renewed session ticket */
304 s->state=SSL3_ST_CR_SESSION_TICKET_A;
305 }
306#endif
307 }
284 else 308 else
285 s->state=SSL3_ST_CR_CERT_A; 309 s->state=SSL3_ST_CR_CERT_A;
286 s->init_num=0; 310 s->init_num=0;
@@ -358,6 +382,17 @@ int ssl3_connect(SSL *s)
358 case SSL3_ST_CR_SRVR_DONE_B: 382 case SSL3_ST_CR_SRVR_DONE_B:
359 ret=ssl3_get_server_done(s); 383 ret=ssl3_get_server_done(s);
360 if (ret <= 0) goto end; 384 if (ret <= 0) goto end;
385#ifndef OPENSSL_NO_SRP
386 if (s->s3->tmp.new_cipher->algorithm_mkey & SSL_kSRP)
387 {
388 if ((ret = SRP_Calc_A_param(s))<=0)
389 {
390 SSLerr(SSL_F_SSL3_CONNECT,SSL_R_SRP_A_CALC);
391 ssl3_send_alert(s,SSL3_AL_FATAL,SSL_AD_INTERNAL_ERROR);
392 goto end;
393 }
394 }
395#endif
361 if (s->s3->tmp.cert_req) 396 if (s->s3->tmp.cert_req)
362 s->state=SSL3_ST_CW_CERT_A; 397 s->state=SSL3_ST_CW_CERT_A;
363 else 398 else
@@ -423,7 +458,16 @@ int ssl3_connect(SSL *s)
423 ret=ssl3_send_change_cipher_spec(s, 458 ret=ssl3_send_change_cipher_spec(s,
424 SSL3_ST_CW_CHANGE_A,SSL3_ST_CW_CHANGE_B); 459 SSL3_ST_CW_CHANGE_A,SSL3_ST_CW_CHANGE_B);
425 if (ret <= 0) goto end; 460 if (ret <= 0) goto end;
461
462
463#if defined(OPENSSL_NO_TLSEXT) || defined(OPENSSL_NO_NEXTPROTONEG)
426 s->state=SSL3_ST_CW_FINISHED_A; 464 s->state=SSL3_ST_CW_FINISHED_A;
465#else
466 if (s->s3->next_proto_neg_seen)
467 s->state=SSL3_ST_CW_NEXT_PROTO_A;
468 else
469 s->state=SSL3_ST_CW_FINISHED_A;
470#endif
427 s->init_num=0; 471 s->init_num=0;
428 472
429 s->session->cipher=s->s3->tmp.new_cipher; 473 s->session->cipher=s->s3->tmp.new_cipher;
@@ -451,6 +495,15 @@ int ssl3_connect(SSL *s)
451 495
452 break; 496 break;
453 497
498#if !defined(OPENSSL_NO_TLSEXT) && !defined(OPENSSL_NO_NEXTPROTONEG)
499 case SSL3_ST_CW_NEXT_PROTO_A:
500 case SSL3_ST_CW_NEXT_PROTO_B:
501 ret=ssl3_send_next_proto(s);
502 if (ret <= 0) goto end;
503 s->state=SSL3_ST_CW_FINISHED_A;
504 break;
505#endif
506
454 case SSL3_ST_CW_FINISHED_A: 507 case SSL3_ST_CW_FINISHED_A:
455 case SSL3_ST_CW_FINISHED_B: 508 case SSL3_ST_CW_FINISHED_B:
456 ret=ssl3_send_finished(s, 509 ret=ssl3_send_finished(s,
@@ -546,6 +599,7 @@ int ssl3_connect(SSL *s)
546 /* else do it later in ssl3_write */ 599 /* else do it later in ssl3_write */
547 600
548 s->init_num=0; 601 s->init_num=0;
602 s->renegotiate=0;
549 s->new_session=0; 603 s->new_session=0;
550 604
551 ssl_update_cache(s,SSL_SESS_CACHE_CLIENT); 605 ssl_update_cache(s,SSL_SESS_CACHE_CLIENT);
@@ -635,9 +689,43 @@ int ssl3_client_hello(SSL *s)
635 /* Do the message type and length last */ 689 /* Do the message type and length last */
636 d=p= &(buf[4]); 690 d=p= &(buf[4]);
637 691
692 /* version indicates the negotiated version: for example from
693 * an SSLv2/v3 compatible client hello). The client_version
694 * field is the maximum version we permit and it is also
695 * used in RSA encrypted premaster secrets. Some servers can
696 * choke if we initially report a higher version then
697 * renegotiate to a lower one in the premaster secret. This
698 * didn't happen with TLS 1.0 as most servers supported it
699 * but it can with TLS 1.1 or later if the server only supports
700 * 1.0.
701 *
702 * Possible scenario with previous logic:
703 * 1. Client hello indicates TLS 1.2
704 * 2. Server hello says TLS 1.0
705 * 3. RSA encrypted premaster secret uses 1.2.
706 * 4. Handhaked proceeds using TLS 1.0.
707 * 5. Server sends hello request to renegotiate.
708 * 6. Client hello indicates TLS v1.0 as we now
709 * know that is maximum server supports.
710 * 7. Server chokes on RSA encrypted premaster secret
711 * containing version 1.0.
712 *
713 * For interoperability it should be OK to always use the
714 * maximum version we support in client hello and then rely
715 * on the checking of version to ensure the servers isn't
716 * being inconsistent: for example initially negotiating with
717 * TLS 1.0 and renegotiating with TLS 1.2. We do this by using
718 * client_version in client hello and not resetting it to
719 * the negotiated version.
720 */
721#if 0
638 *(p++)=s->version>>8; 722 *(p++)=s->version>>8;
639 *(p++)=s->version&0xff; 723 *(p++)=s->version&0xff;
640 s->client_version=s->version; 724 s->client_version=s->version;
725#else
726 *(p++)=s->client_version>>8;
727 *(p++)=s->client_version&0xff;
728#endif
641 729
642 /* Random stuff */ 730 /* Random stuff */
643 memcpy(p,s->s3->client_random,SSL3_RANDOM_SIZE); 731 memcpy(p,s->s3->client_random,SSL3_RANDOM_SIZE);
@@ -667,6 +755,15 @@ int ssl3_client_hello(SSL *s)
667 SSLerr(SSL_F_SSL3_CLIENT_HELLO,SSL_R_NO_CIPHERS_AVAILABLE); 755 SSLerr(SSL_F_SSL3_CLIENT_HELLO,SSL_R_NO_CIPHERS_AVAILABLE);
668 goto err; 756 goto err;
669 } 757 }
758#ifdef OPENSSL_MAX_TLS1_2_CIPHER_LENGTH
759 /* Some servers hang if client hello > 256 bytes
760 * as hack workaround chop number of supported ciphers
761 * to keep it well below this if we use TLS v1.2
762 */
763 if (TLS1_get_version(s) >= TLS1_2_VERSION
764 && i > OPENSSL_MAX_TLS1_2_CIPHER_LENGTH)
765 i = OPENSSL_MAX_TLS1_2_CIPHER_LENGTH & ~1;
766#endif
670 s2n(i,p); 767 s2n(i,p);
671 p+=i; 768 p+=i;
672 769
@@ -847,6 +944,14 @@ int ssl3_get_server_hello(SSL *s)
847 SSLerr(SSL_F_SSL3_GET_SERVER_HELLO,SSL_R_UNKNOWN_CIPHER_RETURNED); 944 SSLerr(SSL_F_SSL3_GET_SERVER_HELLO,SSL_R_UNKNOWN_CIPHER_RETURNED);
848 goto f_err; 945 goto f_err;
849 } 946 }
947 /* TLS v1.2 only ciphersuites require v1.2 or later */
948 if ((c->algorithm_ssl & SSL_TLSV1_2) &&
949 (TLS1_get_version(s) < TLS1_2_VERSION))
950 {
951 al=SSL_AD_ILLEGAL_PARAMETER;
952 SSLerr(SSL_F_SSL3_GET_SERVER_HELLO,SSL_R_WRONG_CIPHER_RETURNED);
953 goto f_err;
954 }
850 p+=ssl_put_cipher_by_char(s,NULL,NULL); 955 p+=ssl_put_cipher_by_char(s,NULL,NULL);
851 956
852 sk=ssl_get_ciphers_by_id(s); 957 sk=ssl_get_ciphers_by_id(s);
@@ -878,9 +983,11 @@ int ssl3_get_server_hello(SSL *s)
878 } 983 }
879 } 984 }
880 s->s3->tmp.new_cipher=c; 985 s->s3->tmp.new_cipher=c;
881 if (!ssl3_digest_cached_records(s)) 986 /* Don't digest cached records if TLS v1.2: we may need them for
987 * client authentication.
988 */
989 if (TLS1_get_version(s) < TLS1_2_VERSION && !ssl3_digest_cached_records(s))
882 goto f_err; 990 goto f_err;
883
884 /* lets get the compression algorithm */ 991 /* lets get the compression algorithm */
885 /* COMPRESSION */ 992 /* COMPRESSION */
886#ifdef OPENSSL_NO_COMP 993#ifdef OPENSSL_NO_COMP
@@ -1159,6 +1266,7 @@ int ssl3_get_key_exchange(SSL *s)
1159 int al,i,j,param_len,ok; 1266 int al,i,j,param_len,ok;
1160 long n,alg_k,alg_a; 1267 long n,alg_k,alg_a;
1161 EVP_PKEY *pkey=NULL; 1268 EVP_PKEY *pkey=NULL;
1269 const EVP_MD *md = NULL;
1162#ifndef OPENSSL_NO_RSA 1270#ifndef OPENSSL_NO_RSA
1163 RSA *rsa=NULL; 1271 RSA *rsa=NULL;
1164#endif 1272#endif
@@ -1282,6 +1390,86 @@ int ssl3_get_key_exchange(SSL *s)
1282 } 1390 }
1283 else 1391 else
1284#endif /* !OPENSSL_NO_PSK */ 1392#endif /* !OPENSSL_NO_PSK */
1393#ifndef OPENSSL_NO_SRP
1394 if (alg_k & SSL_kSRP)
1395 {
1396 n2s(p,i);
1397 param_len=i+2;
1398 if (param_len > n)
1399 {
1400 al=SSL_AD_DECODE_ERROR;
1401 SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE,SSL_R_BAD_SRP_N_LENGTH);
1402 goto f_err;
1403 }
1404 if (!(s->srp_ctx.N=BN_bin2bn(p,i,NULL)))
1405 {
1406 SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE,ERR_R_BN_LIB);
1407 goto err;
1408 }
1409 p+=i;
1410
1411 n2s(p,i);
1412 param_len+=i+2;
1413 if (param_len > n)
1414 {
1415 al=SSL_AD_DECODE_ERROR;
1416 SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE,SSL_R_BAD_SRP_G_LENGTH);
1417 goto f_err;
1418 }
1419 if (!(s->srp_ctx.g=BN_bin2bn(p,i,NULL)))
1420 {
1421 SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE,ERR_R_BN_LIB);
1422 goto err;
1423 }
1424 p+=i;
1425
1426 i = (unsigned int)(p[0]);
1427 p++;
1428 param_len+=i+1;
1429 if (param_len > n)
1430 {
1431 al=SSL_AD_DECODE_ERROR;
1432 SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE,SSL_R_BAD_SRP_S_LENGTH);
1433 goto f_err;
1434 }
1435 if (!(s->srp_ctx.s=BN_bin2bn(p,i,NULL)))
1436 {
1437 SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE,ERR_R_BN_LIB);
1438 goto err;
1439 }
1440 p+=i;
1441
1442 n2s(p,i);
1443 param_len+=i+2;
1444 if (param_len > n)
1445 {
1446 al=SSL_AD_DECODE_ERROR;
1447 SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE,SSL_R_BAD_SRP_B_LENGTH);
1448 goto f_err;
1449 }
1450 if (!(s->srp_ctx.B=BN_bin2bn(p,i,NULL)))
1451 {
1452 SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE,ERR_R_BN_LIB);
1453 goto err;
1454 }
1455 p+=i;
1456 n-=param_len;
1457
1458/* We must check if there is a certificate */
1459#ifndef OPENSSL_NO_RSA
1460 if (alg_a & SSL_aRSA)
1461 pkey=X509_get_pubkey(s->session->sess_cert->peer_pkeys[SSL_PKEY_RSA_ENC].x509);
1462#else
1463 if (0)
1464 ;
1465#endif
1466#ifndef OPENSSL_NO_DSA
1467 else if (alg_a & SSL_aDSS)
1468 pkey=X509_get_pubkey(s->session->sess_cert->peer_pkeys[SSL_PKEY_DSA_SIGN].x509);
1469#endif
1470 }
1471 else
1472#endif /* !OPENSSL_NO_SRP */
1285#ifndef OPENSSL_NO_RSA 1473#ifndef OPENSSL_NO_RSA
1286 if (alg_k & SSL_kRSA) 1474 if (alg_k & SSL_kRSA)
1287 { 1475 {
@@ -1529,6 +1717,38 @@ int ssl3_get_key_exchange(SSL *s)
1529 /* if it was signed, check the signature */ 1717 /* if it was signed, check the signature */
1530 if (pkey != NULL) 1718 if (pkey != NULL)
1531 { 1719 {
1720 if (TLS1_get_version(s) >= TLS1_2_VERSION)
1721 {
1722 int sigalg = tls12_get_sigid(pkey);
1723 /* Should never happen */
1724 if (sigalg == -1)
1725 {
1726 SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE,ERR_R_INTERNAL_ERROR);
1727 goto err;
1728 }
1729 /* Check key type is consistent with signature */
1730 if (sigalg != (int)p[1])
1731 {
1732 SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE,SSL_R_WRONG_SIGNATURE_TYPE);
1733 al=SSL_AD_DECODE_ERROR;
1734 goto f_err;
1735 }
1736 md = tls12_get_hash(p[0]);
1737 if (md == NULL)
1738 {
1739 SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE,SSL_R_UNKNOWN_DIGEST);
1740 al=SSL_AD_DECODE_ERROR;
1741 goto f_err;
1742 }
1743#ifdef SSL_DEBUG
1744fprintf(stderr, "USING TLSv1.2 HASH %s\n", EVP_MD_name(md));
1745#endif
1746 p += 2;
1747 n -= 2;
1748 }
1749 else
1750 md = EVP_sha1();
1751
1532 n2s(p,i); 1752 n2s(p,i);
1533 n-=2; 1753 n-=2;
1534 j=EVP_PKEY_size(pkey); 1754 j=EVP_PKEY_size(pkey);
@@ -1542,7 +1762,7 @@ int ssl3_get_key_exchange(SSL *s)
1542 } 1762 }
1543 1763
1544#ifndef OPENSSL_NO_RSA 1764#ifndef OPENSSL_NO_RSA
1545 if (pkey->type == EVP_PKEY_RSA) 1765 if (pkey->type == EVP_PKEY_RSA && TLS1_get_version(s) < TLS1_2_VERSION)
1546 { 1766 {
1547 int num; 1767 int num;
1548 1768
@@ -1550,6 +1770,8 @@ int ssl3_get_key_exchange(SSL *s)
1550 q=md_buf; 1770 q=md_buf;
1551 for (num=2; num > 0; num--) 1771 for (num=2; num > 0; num--)
1552 { 1772 {
1773 EVP_MD_CTX_set_flags(&md_ctx,
1774 EVP_MD_CTX_FLAG_NON_FIPS_ALLOW);
1553 EVP_DigestInit_ex(&md_ctx,(num == 2) 1775 EVP_DigestInit_ex(&md_ctx,(num == 2)
1554 ?s->ctx->md5:s->ctx->sha1, NULL); 1776 ?s->ctx->md5:s->ctx->sha1, NULL);
1555 EVP_DigestUpdate(&md_ctx,&(s->s3->client_random[0]),SSL3_RANDOM_SIZE); 1777 EVP_DigestUpdate(&md_ctx,&(s->s3->client_random[0]),SSL3_RANDOM_SIZE);
@@ -1577,29 +1799,8 @@ int ssl3_get_key_exchange(SSL *s)
1577 } 1799 }
1578 else 1800 else
1579#endif 1801#endif
1580#ifndef OPENSSL_NO_DSA
1581 if (pkey->type == EVP_PKEY_DSA)
1582 {
1583 /* lets do DSS */
1584 EVP_VerifyInit_ex(&md_ctx,EVP_dss1(), NULL);
1585 EVP_VerifyUpdate(&md_ctx,&(s->s3->client_random[0]),SSL3_RANDOM_SIZE);
1586 EVP_VerifyUpdate(&md_ctx,&(s->s3->server_random[0]),SSL3_RANDOM_SIZE);
1587 EVP_VerifyUpdate(&md_ctx,param,param_len);
1588 if (EVP_VerifyFinal(&md_ctx,p,(int)n,pkey) <= 0)
1589 {
1590 /* bad signature */
1591 al=SSL_AD_DECRYPT_ERROR;
1592 SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE,SSL_R_BAD_SIGNATURE);
1593 goto f_err;
1594 }
1595 }
1596 else
1597#endif
1598#ifndef OPENSSL_NO_ECDSA
1599 if (pkey->type == EVP_PKEY_EC)
1600 { 1802 {
1601 /* let's do ECDSA */ 1803 EVP_VerifyInit_ex(&md_ctx, md, NULL);
1602 EVP_VerifyInit_ex(&md_ctx,EVP_ecdsa(), NULL);
1603 EVP_VerifyUpdate(&md_ctx,&(s->s3->client_random[0]),SSL3_RANDOM_SIZE); 1804 EVP_VerifyUpdate(&md_ctx,&(s->s3->client_random[0]),SSL3_RANDOM_SIZE);
1604 EVP_VerifyUpdate(&md_ctx,&(s->s3->server_random[0]),SSL3_RANDOM_SIZE); 1805 EVP_VerifyUpdate(&md_ctx,&(s->s3->server_random[0]),SSL3_RANDOM_SIZE);
1605 EVP_VerifyUpdate(&md_ctx,param,param_len); 1806 EVP_VerifyUpdate(&md_ctx,param,param_len);
@@ -1611,12 +1812,6 @@ int ssl3_get_key_exchange(SSL *s)
1611 goto f_err; 1812 goto f_err;
1612 } 1813 }
1613 } 1814 }
1614 else
1615#endif
1616 {
1617 SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE,ERR_R_INTERNAL_ERROR);
1618 goto err;
1619 }
1620 } 1815 }
1621 else 1816 else
1622 { 1817 {
@@ -1663,7 +1858,7 @@ int ssl3_get_certificate_request(SSL *s)
1663 { 1858 {
1664 int ok,ret=0; 1859 int ok,ret=0;
1665 unsigned long n,nc,l; 1860 unsigned long n,nc,l;
1666 unsigned int llen,ctype_num,i; 1861 unsigned int llen, ctype_num,i;
1667 X509_NAME *xn=NULL; 1862 X509_NAME *xn=NULL;
1668 const unsigned char *p,*q; 1863 const unsigned char *p,*q;
1669 unsigned char *d; 1864 unsigned char *d;
@@ -1683,6 +1878,14 @@ int ssl3_get_certificate_request(SSL *s)
1683 if (s->s3->tmp.message_type == SSL3_MT_SERVER_DONE) 1878 if (s->s3->tmp.message_type == SSL3_MT_SERVER_DONE)
1684 { 1879 {
1685 s->s3->tmp.reuse_message=1; 1880 s->s3->tmp.reuse_message=1;
1881 /* If we get here we don't need any cached handshake records
1882 * as we wont be doing client auth.
1883 */
1884 if (s->s3->handshake_buffer)
1885 {
1886 if (!ssl3_digest_cached_records(s))
1887 goto err;
1888 }
1686 return(1); 1889 return(1);
1687 } 1890 }
1688 1891
@@ -1719,6 +1922,26 @@ int ssl3_get_certificate_request(SSL *s)
1719 for (i=0; i<ctype_num; i++) 1922 for (i=0; i<ctype_num; i++)
1720 s->s3->tmp.ctype[i]= p[i]; 1923 s->s3->tmp.ctype[i]= p[i];
1721 p+=ctype_num; 1924 p+=ctype_num;
1925 if (TLS1_get_version(s) >= TLS1_2_VERSION)
1926 {
1927 n2s(p, llen);
1928 /* Check we have enough room for signature algorithms and
1929 * following length value.
1930 */
1931 if ((unsigned long)(p - d + llen + 2) > n)
1932 {
1933 ssl3_send_alert(s,SSL3_AL_FATAL,SSL_AD_DECODE_ERROR);
1934 SSLerr(SSL_F_SSL3_GET_CERTIFICATE_REQUEST,SSL_R_DATA_LENGTH_TOO_LONG);
1935 goto err;
1936 }
1937 if ((llen & 1) || !tls1_process_sigalgs(s, p, llen))
1938 {
1939 ssl3_send_alert(s,SSL3_AL_FATAL,SSL_AD_DECODE_ERROR);
1940 SSLerr(SSL_F_SSL3_GET_CERTIFICATE_REQUEST,SSL_R_SIGNATURE_ALGORITHMS_ERROR);
1941 goto err;
1942 }
1943 p += llen;
1944 }
1722 1945
1723 /* get the CA RDNs */ 1946 /* get the CA RDNs */
1724 n2s(p,llen); 1947 n2s(p,llen);
@@ -1731,7 +1954,7 @@ fclose(out);
1731} 1954}
1732#endif 1955#endif
1733 1956
1734 if ((llen+ctype_num+2+1) != n) 1957 if ((unsigned long)(p - d + llen) != n)
1735 { 1958 {
1736 ssl3_send_alert(s,SSL3_AL_FATAL,SSL_AD_DECODE_ERROR); 1959 ssl3_send_alert(s,SSL3_AL_FATAL,SSL_AD_DECODE_ERROR);
1737 SSLerr(SSL_F_SSL3_GET_CERTIFICATE_REQUEST,SSL_R_LENGTH_MISMATCH); 1960 SSLerr(SSL_F_SSL3_GET_CERTIFICATE_REQUEST,SSL_R_LENGTH_MISMATCH);
@@ -2553,6 +2776,39 @@ int ssl3_send_client_key_exchange(SSL *s)
2553 EVP_PKEY_free(pub_key); 2776 EVP_PKEY_free(pub_key);
2554 2777
2555 } 2778 }
2779#ifndef OPENSSL_NO_SRP
2780 else if (alg_k & SSL_kSRP)
2781 {
2782 if (s->srp_ctx.A != NULL)
2783 {
2784 /* send off the data */
2785 n=BN_num_bytes(s->srp_ctx.A);
2786 s2n(n,p);
2787 BN_bn2bin(s->srp_ctx.A,p);
2788 n+=2;
2789 }
2790 else
2791 {
2792 SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE,ERR_R_INTERNAL_ERROR);
2793 goto err;
2794 }
2795 if (s->session->srp_username != NULL)
2796 OPENSSL_free(s->session->srp_username);
2797 s->session->srp_username = BUF_strdup(s->srp_ctx.login);
2798 if (s->session->srp_username == NULL)
2799 {
2800 SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE,
2801 ERR_R_MALLOC_FAILURE);
2802 goto err;
2803 }
2804
2805 if ((s->session->master_key_length = SRP_generate_client_master_secret(s,s->session->master_key))<0)
2806 {
2807 SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE,ERR_R_INTERNAL_ERROR);
2808 goto err;
2809 }
2810 }
2811#endif
2556#ifndef OPENSSL_NO_PSK 2812#ifndef OPENSSL_NO_PSK
2557 else if (alg_k & SSL_kPSK) 2813 else if (alg_k & SSL_kPSK)
2558 { 2814 {
@@ -2672,12 +2928,13 @@ int ssl3_send_client_verify(SSL *s)
2672 unsigned char data[MD5_DIGEST_LENGTH+SHA_DIGEST_LENGTH]; 2928 unsigned char data[MD5_DIGEST_LENGTH+SHA_DIGEST_LENGTH];
2673 EVP_PKEY *pkey; 2929 EVP_PKEY *pkey;
2674 EVP_PKEY_CTX *pctx=NULL; 2930 EVP_PKEY_CTX *pctx=NULL;
2675#ifndef OPENSSL_NO_RSA 2931 EVP_MD_CTX mctx;
2676 unsigned u=0; 2932 unsigned u=0;
2677#endif
2678 unsigned long n; 2933 unsigned long n;
2679 int j; 2934 int j;
2680 2935
2936 EVP_MD_CTX_init(&mctx);
2937
2681 if (s->state == SSL3_ST_CW_CERT_VRFY_A) 2938 if (s->state == SSL3_ST_CW_CERT_VRFY_A)
2682 { 2939 {
2683 d=(unsigned char *)s->init_buf->data; 2940 d=(unsigned char *)s->init_buf->data;
@@ -2688,7 +2945,8 @@ int ssl3_send_client_verify(SSL *s)
2688 EVP_PKEY_sign_init(pctx); 2945 EVP_PKEY_sign_init(pctx);
2689 if (EVP_PKEY_CTX_set_signature_md(pctx, EVP_sha1())>0) 2946 if (EVP_PKEY_CTX_set_signature_md(pctx, EVP_sha1())>0)
2690 { 2947 {
2691 s->method->ssl3_enc->cert_verify_mac(s, 2948 if (TLS1_get_version(s) < TLS1_2_VERSION)
2949 s->method->ssl3_enc->cert_verify_mac(s,
2692 NID_sha1, 2950 NID_sha1,
2693 &(data[MD5_DIGEST_LENGTH])); 2951 &(data[MD5_DIGEST_LENGTH]));
2694 } 2952 }
@@ -2696,6 +2954,41 @@ int ssl3_send_client_verify(SSL *s)
2696 { 2954 {
2697 ERR_clear_error(); 2955 ERR_clear_error();
2698 } 2956 }
2957 /* For TLS v1.2 send signature algorithm and signature
2958 * using agreed digest and cached handshake records.
2959 */
2960 if (TLS1_get_version(s) >= TLS1_2_VERSION)
2961 {
2962 long hdatalen = 0;
2963 void *hdata;
2964 const EVP_MD *md = s->cert->key->digest;
2965 hdatalen = BIO_get_mem_data(s->s3->handshake_buffer,
2966 &hdata);
2967 if (hdatalen <= 0 || !tls12_get_sigandhash(p, pkey, md))
2968 {
2969 SSLerr(SSL_F_SSL3_SEND_CLIENT_VERIFY,
2970 ERR_R_INTERNAL_ERROR);
2971 goto err;
2972 }
2973 p += 2;
2974#ifdef SSL_DEBUG
2975 fprintf(stderr, "Using TLS 1.2 with client alg %s\n",
2976 EVP_MD_name(md));
2977#endif
2978 if (!EVP_SignInit_ex(&mctx, md, NULL)
2979 || !EVP_SignUpdate(&mctx, hdata, hdatalen)
2980 || !EVP_SignFinal(&mctx, p + 2, &u, pkey))
2981 {
2982 SSLerr(SSL_F_SSL3_SEND_CLIENT_VERIFY,
2983 ERR_R_EVP_LIB);
2984 goto err;
2985 }
2986 s2n(u,p);
2987 n = u + 4;
2988 if (!ssl3_digest_cached_records(s))
2989 goto err;
2990 }
2991 else
2699#ifndef OPENSSL_NO_RSA 2992#ifndef OPENSSL_NO_RSA
2700 if (pkey->type == EVP_PKEY_RSA) 2993 if (pkey->type == EVP_PKEY_RSA)
2701 { 2994 {
@@ -2778,9 +3071,11 @@ int ssl3_send_client_verify(SSL *s)
2778 s->init_num=(int)n+4; 3071 s->init_num=(int)n+4;
2779 s->init_off=0; 3072 s->init_off=0;
2780 } 3073 }
3074 EVP_MD_CTX_cleanup(&mctx);
2781 EVP_PKEY_CTX_free(pctx); 3075 EVP_PKEY_CTX_free(pctx);
2782 return(ssl3_do_write(s,SSL3_RT_HANDSHAKE)); 3076 return(ssl3_do_write(s,SSL3_RT_HANDSHAKE));
2783err: 3077err:
3078 EVP_MD_CTX_cleanup(&mctx);
2784 EVP_PKEY_CTX_free(pctx); 3079 EVP_PKEY_CTX_free(pctx);
2785 return(-1); 3080 return(-1);
2786 } 3081 }
@@ -2904,7 +3199,7 @@ int ssl3_check_cert_and_algorithm(SSL *s)
2904 if (idx == SSL_PKEY_ECC) 3199 if (idx == SSL_PKEY_ECC)
2905 { 3200 {
2906 if (ssl_check_srvr_ecc_cert_and_alg(sc->peer_pkeys[idx].x509, 3201 if (ssl_check_srvr_ecc_cert_and_alg(sc->peer_pkeys[idx].x509,
2907 s->s3->tmp.new_cipher) == 0) 3202 s) == 0)
2908 { /* check failed */ 3203 { /* check failed */
2909 SSLerr(SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM,SSL_R_BAD_ECC_CERT); 3204 SSLerr(SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM,SSL_R_BAD_ECC_CERT);
2910 goto f_err; 3205 goto f_err;
@@ -3000,6 +3295,32 @@ err:
3000 return(0); 3295 return(0);
3001 } 3296 }
3002 3297
3298#if !defined(OPENSSL_NO_TLSEXT) && !defined(OPENSSL_NO_NEXTPROTONEG)
3299int ssl3_send_next_proto(SSL *s)
3300 {
3301 unsigned int len, padding_len;
3302 unsigned char *d;
3303
3304 if (s->state == SSL3_ST_CW_NEXT_PROTO_A)
3305 {
3306 len = s->next_proto_negotiated_len;
3307 padding_len = 32 - ((len + 2) % 32);
3308 d = (unsigned char *)s->init_buf->data;
3309 d[4] = len;
3310 memcpy(d + 5, s->next_proto_negotiated, len);
3311 d[5 + len] = padding_len;
3312 memset(d + 6 + len, 0, padding_len);
3313 *(d++)=SSL3_MT_NEXT_PROTO;
3314 l2n3(2 + len + padding_len, d);
3315 s->state = SSL3_ST_CW_NEXT_PROTO_B;
3316 s->init_num = 4 + 2 + len + padding_len;
3317 s->init_off = 0;
3318 }
3319
3320 return ssl3_do_write(s, SSL3_RT_HANDSHAKE);
3321}
3322#endif /* !OPENSSL_NO_TLSEXT && !OPENSSL_NO_NEXTPROTONEG */
3323
3003/* Check to see if handshake is full or resumed. Usually this is just a 3324/* Check to see if handshake is full or resumed. Usually this is just a
3004 * case of checking to see if a cache hit has occurred. In the case of 3325 * case of checking to see if a cache hit has occurred. In the case of
3005 * session tickets we have to check the next message to be sure. 3326 * session tickets we have to check the next message to be sure.