diff options
| author | jsing <> | 2017-01-22 09:02:07 +0000 |
|---|---|---|
| committer | jsing <> | 2017-01-22 09:02:07 +0000 |
| commit | bd2d858e0149e88f8fe4f0124d9b1e4d22553fd1 (patch) | |
| tree | 74edac7239262d369a6f63b69bea3291a4184000 /src/lib/libssl/s3_lib.c | |
| parent | d549b46158cee11991715ad9f53e1adaa39d2280 (diff) | |
| download | openbsd-bd2d858e0149e88f8fe4f0124d9b1e4d22553fd1.tar.gz openbsd-bd2d858e0149e88f8fe4f0124d9b1e4d22553fd1.tar.bz2 openbsd-bd2d858e0149e88f8fe4f0124d9b1e4d22553fd1.zip | |
Move most of the SSL3_STATE fields to internal - the ones that remain are
known to be used by ports.
ok beck@
Diffstat (limited to 'src/lib/libssl/s3_lib.c')
| -rw-r--r-- | src/lib/libssl/s3_lib.c | 110 |
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 | ||
| 1688 | int | 1688 | int |
| @@ -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) | |||
| 2679 | long | 2685 | long |
| 2680 | ssl_get_algorithm2(SSL *s) | 2686 | ssl_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)) |
