summaryrefslogtreecommitdiff
path: root/src/lib/libssl/s3_lib.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/lib/libssl/s3_lib.c110
1 files changed, 58 insertions, 52 deletions
diff --git a/src/lib/libssl/s3_lib.c b/src/lib/libssl/s3_lib.c
index ef7a368d8f..990ce2153d 100644
--- a/src/lib/libssl/s3_lib.c
+++ b/src/lib/libssl/s3_lib.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: s3_lib.c,v 1.119 2017/01/22 06:36:49 jsing Exp $ */ 1/* $OpenBSD: s3_lib.c,v 1.120 2017/01/22 09:02:07 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 *
@@ -1681,8 +1681,8 @@ ssl3_pending(const SSL *s)
1681 if (s->rstate == SSL_ST_READ_BODY) 1681 if (s->rstate == SSL_ST_READ_BODY)
1682 return 0; 1682 return 0;
1683 1683
1684 return (s->s3->rrec.type == SSL3_RT_APPLICATION_DATA) ? 1684 return (S3I(s)->rrec.type == SSL3_RT_APPLICATION_DATA) ?
1685 s->s3->rrec.length : 0; 1685 S3I(s)->rrec.length : 0;
1686} 1686}
1687 1687
1688int 1688int
@@ -1811,7 +1811,7 @@ ssl3_new(SSL *s)
1811{ 1811{
1812 if ((s->s3 = calloc(1, sizeof(*s->s3))) == NULL) 1812 if ((s->s3 = calloc(1, sizeof(*s->s3))) == NULL)
1813 return (0); 1813 return (0);
1814 if ((s->s3->internal = calloc(1, sizeof(*s->s3->internal))) == NULL) { 1814 if ((S3I(s) = calloc(1, sizeof(*S3I(s)))) == NULL) {
1815 free(s->s3); 1815 free(s->s3);
1816 return (0); 1816 return (0);
1817 } 1817 }
@@ -1831,21 +1831,21 @@ ssl3_free(SSL *s)
1831 ssl3_release_read_buffer(s); 1831 ssl3_release_read_buffer(s);
1832 ssl3_release_write_buffer(s); 1832 ssl3_release_write_buffer(s);
1833 1833
1834 DH_free(s->s3->tmp.dh); 1834 DH_free(S3I(s)->tmp.dh);
1835 EC_KEY_free(s->s3->tmp.ecdh); 1835 EC_KEY_free(S3I(s)->tmp.ecdh);
1836 1836
1837 if (s->s3->tmp.x25519 != NULL) 1837 if (S3I(s)->tmp.x25519 != NULL)
1838 explicit_bzero(s->s3->tmp.x25519, X25519_KEY_LENGTH); 1838 explicit_bzero(S3I(s)->tmp.x25519, X25519_KEY_LENGTH);
1839 free(s->s3->tmp.x25519); 1839 free(S3I(s)->tmp.x25519);
1840 1840
1841 if (s->s3->tmp.ca_names != NULL) 1841 if (S3I(s)->tmp.ca_names != NULL)
1842 sk_X509_NAME_pop_free(s->s3->tmp.ca_names, X509_NAME_free); 1842 sk_X509_NAME_pop_free(S3I(s)->tmp.ca_names, X509_NAME_free);
1843 BIO_free(s->s3->handshake_buffer); 1843 BIO_free(S3I(s)->handshake_buffer);
1844 tls1_free_digest_list(s); 1844 tls1_free_digest_list(s);
1845 free(s->s3->alpn_selected); 1845 free(S3I(s)->alpn_selected);
1846 1846
1847 explicit_bzero(s->s3->internal, sizeof(*s->s3->internal)); 1847 explicit_bzero(S3I(s), sizeof(*S3I(s)));
1848 free(s->s3->internal); 1848 free(S3I(s));
1849 1849
1850 explicit_bzero(s->s3, sizeof(*s->s3)); 1850 explicit_bzero(s->s3, sizeof(*s->s3));
1851 free(s->s3); 1851 free(s->s3);
@@ -1861,36 +1861,36 @@ ssl3_clear(SSL *s)
1861 size_t rlen, wlen; 1861 size_t rlen, wlen;
1862 1862
1863 tls1_cleanup_key_block(s); 1863 tls1_cleanup_key_block(s);
1864 if (s->s3->tmp.ca_names != NULL) 1864 if (S3I(s)->tmp.ca_names != NULL)
1865 sk_X509_NAME_pop_free(s->s3->tmp.ca_names, X509_NAME_free); 1865 sk_X509_NAME_pop_free(S3I(s)->tmp.ca_names, X509_NAME_free);
1866 1866
1867 DH_free(s->s3->tmp.dh); 1867 DH_free(S3I(s)->tmp.dh);
1868 s->s3->tmp.dh = NULL; 1868 S3I(s)->tmp.dh = NULL;
1869 EC_KEY_free(s->s3->tmp.ecdh); 1869 EC_KEY_free(S3I(s)->tmp.ecdh);
1870 s->s3->tmp.ecdh = NULL; 1870 S3I(s)->tmp.ecdh = NULL;
1871 1871
1872 if (s->s3->tmp.x25519 != NULL) 1872 if (S3I(s)->tmp.x25519 != NULL)
1873 explicit_bzero(s->s3->tmp.x25519, X25519_KEY_LENGTH); 1873 explicit_bzero(S3I(s)->tmp.x25519, X25519_KEY_LENGTH);
1874 free(s->s3->tmp.x25519); 1874 free(S3I(s)->tmp.x25519);
1875 s->s3->tmp.x25519 = NULL; 1875 S3I(s)->tmp.x25519 = NULL;
1876 1876
1877 rp = s->s3->rbuf.buf; 1877 rp = s->s3->rbuf.buf;
1878 wp = s->s3->wbuf.buf; 1878 wp = s->s3->wbuf.buf;
1879 rlen = s->s3->rbuf.len; 1879 rlen = s->s3->rbuf.len;
1880 wlen = s->s3->wbuf.len; 1880 wlen = s->s3->wbuf.len;
1881 1881
1882 BIO_free(s->s3->handshake_buffer); 1882 BIO_free(S3I(s)->handshake_buffer);
1883 s->s3->handshake_buffer = NULL; 1883 S3I(s)->handshake_buffer = NULL;
1884 1884
1885 tls1_free_digest_list(s); 1885 tls1_free_digest_list(s);
1886 1886
1887 free(s->s3->alpn_selected); 1887 free(S3I(s)->alpn_selected);
1888 s->s3->alpn_selected = NULL; 1888 S3I(s)->alpn_selected = NULL;
1889 1889
1890 memset(s->s3->internal, 0, sizeof(*s->s3->internal)); 1890 memset(S3I(s), 0, sizeof(*S3I(s)));
1891 internal = s->s3->internal; 1891 internal = S3I(s);
1892 memset(s->s3, 0, sizeof(*s->s3)); 1892 memset(s->s3, 0, sizeof(*s->s3));
1893 s->s3->internal = internal; 1893 S3I(s) = internal;
1894 1894
1895 s->s3->rbuf.buf = rp; 1895 s->s3->rbuf.buf = rp;
1896 s->s3->wbuf.buf = wp; 1896 s->s3->wbuf.buf = wp;
@@ -1899,6 +1899,12 @@ ssl3_clear(SSL *s)
1899 1899
1900 ssl_free_wbio_buffer(s); 1900 ssl_free_wbio_buffer(s);
1901 1901
1902 /* Not needed... */
1903 S3I(s)->renegotiate = 0;
1904 S3I(s)->total_renegotiations = 0;
1905 S3I(s)->num_renegotiations = 0;
1906 S3I(s)->in_read_app_data = 0;
1907
1902 s->packet_length = 0; 1908 s->packet_length = 0;
1903 s->version = TLS1_VERSION; 1909 s->version = TLS1_VERSION;
1904 1910
@@ -1989,14 +1995,14 @@ ssl3_ctrl(SSL *s, int cmd, long larg, void *parg)
1989 case SSL_CTRL_GET_CLIENT_CERT_REQUEST: 1995 case SSL_CTRL_GET_CLIENT_CERT_REQUEST:
1990 break; 1996 break;
1991 case SSL_CTRL_GET_NUM_RENEGOTIATIONS: 1997 case SSL_CTRL_GET_NUM_RENEGOTIATIONS:
1992 ret = s->s3->num_renegotiations; 1998 ret = S3I(s)->num_renegotiations;
1993 break; 1999 break;
1994 case SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS: 2000 case SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS:
1995 ret = s->s3->num_renegotiations; 2001 ret = S3I(s)->num_renegotiations;
1996 s->s3->num_renegotiations = 0; 2002 S3I(s)->num_renegotiations = 0;
1997 break; 2003 break;
1998 case SSL_CTRL_GET_TOTAL_RENEGOTIATIONS: 2004 case SSL_CTRL_GET_TOTAL_RENEGOTIATIONS:
1999 ret = s->s3->total_renegotiations; 2005 ret = S3I(s)->total_renegotiations;
2000 break; 2006 break;
2001 case SSL_CTRL_GET_FLAGS: 2007 case SSL_CTRL_GET_FLAGS:
2002 ret = (int)(s->s3->flags); 2008 ret = (int)(s->s3->flags);
@@ -2463,7 +2469,7 @@ ssl3_get_req_cert_type(SSL *s, unsigned char *p)
2463 int ret = 0; 2469 int ret = 0;
2464 unsigned long alg_k; 2470 unsigned long alg_k;
2465 2471
2466 alg_k = s->s3->tmp.new_cipher->algorithm_mkey; 2472 alg_k = S3I(s)->tmp.new_cipher->algorithm_mkey;
2467 2473
2468#ifndef OPENSSL_NO_GOST 2474#ifndef OPENSSL_NO_GOST
2469 if ((alg_k & SSL_kGOST)) { 2475 if ((alg_k & SSL_kGOST)) {
@@ -2552,7 +2558,7 @@ ssl3_write(SSL *s, const void *buf, int len)
2552 } 2558 }
2553#endif 2559#endif
2554 errno = 0; 2560 errno = 0;
2555 if (s->s3->renegotiate) 2561 if (S3I(s)->renegotiate)
2556 ssl3_renegotiate_check(s); 2562 ssl3_renegotiate_check(s);
2557 2563
2558 /* 2564 /*
@@ -2564,13 +2570,13 @@ ssl3_write(SSL *s, const void *buf, int len)
2564 /* The second test is because the buffer may have been removed */ 2570 /* The second test is because the buffer may have been removed */
2565 if ((s->s3->flags & SSL3_FLAGS_POP_BUFFER) && (s->wbio == s->bbio)) { 2571 if ((s->s3->flags & SSL3_FLAGS_POP_BUFFER) && (s->wbio == s->bbio)) {
2566 /* First time through, we write into the buffer */ 2572 /* First time through, we write into the buffer */
2567 if (s->s3->delay_buf_pop_ret == 0) { 2573 if (S3I(s)->delay_buf_pop_ret == 0) {
2568 ret = ssl3_write_bytes(s, SSL3_RT_APPLICATION_DATA, 2574 ret = ssl3_write_bytes(s, SSL3_RT_APPLICATION_DATA,
2569 buf, len); 2575 buf, len);
2570 if (ret <= 0) 2576 if (ret <= 0)
2571 return (ret); 2577 return (ret);
2572 2578
2573 s->s3->delay_buf_pop_ret = ret; 2579 S3I(s)->delay_buf_pop_ret = ret;
2574 } 2580 }
2575 2581
2576 s->rwstate = SSL_WRITING; 2582 s->rwstate = SSL_WRITING;
@@ -2583,8 +2589,8 @@ ssl3_write(SSL *s, const void *buf, int len)
2583 ssl_free_wbio_buffer(s); 2589 ssl_free_wbio_buffer(s);
2584 s->s3->flags&= ~SSL3_FLAGS_POP_BUFFER; 2590 s->s3->flags&= ~SSL3_FLAGS_POP_BUFFER;
2585 2591
2586 ret = s->s3->delay_buf_pop_ret; 2592 ret = S3I(s)->delay_buf_pop_ret;
2587 s->s3->delay_buf_pop_ret = 0; 2593 S3I(s)->delay_buf_pop_ret = 0;
2588 } else { 2594 } else {
2589 ret = s->method->ssl_write_bytes(s, SSL3_RT_APPLICATION_DATA, 2595 ret = s->method->ssl_write_bytes(s, SSL3_RT_APPLICATION_DATA,
2590 buf, len); 2596 buf, len);
@@ -2601,12 +2607,12 @@ ssl3_read_internal(SSL *s, void *buf, int len, int peek)
2601 int ret; 2607 int ret;
2602 2608
2603 errno = 0; 2609 errno = 0;
2604 if (s->s3->renegotiate) 2610 if (S3I(s)->renegotiate)
2605 ssl3_renegotiate_check(s); 2611 ssl3_renegotiate_check(s);
2606 s->s3->in_read_app_data = 1; 2612 S3I(s)->in_read_app_data = 1;
2607 ret = s->method->ssl_read_bytes(s, 2613 ret = s->method->ssl_read_bytes(s,
2608 SSL3_RT_APPLICATION_DATA, buf, len, peek); 2614 SSL3_RT_APPLICATION_DATA, buf, len, peek);
2609 if ((ret == -1) && (s->s3->in_read_app_data == 2)) { 2615 if ((ret == -1) && (S3I(s)->in_read_app_data == 2)) {
2610 /* 2616 /*
2611 * ssl3_read_bytes decided to call s->handshake_func, which 2617 * ssl3_read_bytes decided to call s->handshake_func, which
2612 * called ssl3_read_bytes to read handshake data. 2618 * called ssl3_read_bytes to read handshake data.
@@ -2619,7 +2625,7 @@ ssl3_read_internal(SSL *s, void *buf, int len, int peek)
2619 SSL3_RT_APPLICATION_DATA, buf, len, peek); 2625 SSL3_RT_APPLICATION_DATA, buf, len, peek);
2620 s->in_handshake--; 2626 s->in_handshake--;
2621 } else 2627 } else
2622 s->s3->in_read_app_data = 0; 2628 S3I(s)->in_read_app_data = 0;
2623 2629
2624 return (ret); 2630 return (ret);
2625} 2631}
@@ -2645,7 +2651,7 @@ ssl3_renegotiate(SSL *s)
2645 if (s->s3->flags & SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS) 2651 if (s->s3->flags & SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS)
2646 return (0); 2652 return (0);
2647 2653
2648 s->s3->renegotiate = 1; 2654 S3I(s)->renegotiate = 1;
2649 return (1); 2655 return (1);
2650} 2656}
2651 2657
@@ -2654,7 +2660,7 @@ ssl3_renegotiate_check(SSL *s)
2654{ 2660{
2655 int ret = 0; 2661 int ret = 0;
2656 2662
2657 if (s->s3->renegotiate) { 2663 if (S3I(s)->renegotiate) {
2658 if ((s->s3->rbuf.left == 0) && (s->s3->wbuf.left == 0) && 2664 if ((s->s3->rbuf.left == 0) && (s->s3->wbuf.left == 0) &&
2659 !SSL_in_init(s)) { 2665 !SSL_in_init(s)) {
2660 /* 2666 /*
@@ -2664,9 +2670,9 @@ ssl3_renegotiate_check(SSL *s)
2664 */ 2670 */
2665 /* SSL_ST_ACCEPT */ 2671 /* SSL_ST_ACCEPT */
2666 s->state = SSL_ST_RENEGOTIATE; 2672 s->state = SSL_ST_RENEGOTIATE;
2667 s->s3->renegotiate = 0; 2673 S3I(s)->renegotiate = 0;
2668 s->s3->num_renegotiations++; 2674 S3I(s)->num_renegotiations++;
2669 s->s3->total_renegotiations++; 2675 S3I(s)->total_renegotiations++;
2670 ret = 1; 2676 ret = 1;
2671 } 2677 }
2672 } 2678 }
@@ -2679,7 +2685,7 @@ ssl3_renegotiate_check(SSL *s)
2679long 2685long
2680ssl_get_algorithm2(SSL *s) 2686ssl_get_algorithm2(SSL *s)
2681{ 2687{
2682 long alg2 = s->s3->tmp.new_cipher->algorithm2; 2688 long alg2 = S3I(s)->tmp.new_cipher->algorithm2;
2683 2689
2684 if (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_SHA256_PRF && 2690 if (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_SHA256_PRF &&
2685 alg2 == (SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF)) 2691 alg2 == (SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF))