diff options
| author | jsing <> | 2017-01-23 05:13:02 +0000 |
|---|---|---|
| committer | jsing <> | 2017-01-23 05:13:02 +0000 |
| commit | 4630d5542486d6e54b467c2ff4c949c001f4c5f6 (patch) | |
| tree | 50ca3784f76b348ba017005a955c6a288b176b57 /src | |
| parent | 98459d42c7a847e84cc12f2d7df5e16e0f44839c (diff) | |
| download | openbsd-4630d5542486d6e54b467c2ff4c949c001f4c5f6.tar.gz openbsd-4630d5542486d6e54b467c2ff4c949c001f4c5f6.tar.bz2 openbsd-4630d5542486d6e54b467c2ff4c949c001f4c5f6.zip | |
Move most of the fields in SSL_CTX to internal - the ones that remain are
known to be in use.
ok beck@
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/libssl/d1_srtp.c | 8 | ||||
| -rw-r--r-- | src/lib/libssl/s3_clnt.c | 14 | ||||
| -rw-r--r-- | src/lib/libssl/s3_lib.c | 22 | ||||
| -rw-r--r-- | src/lib/libssl/s3_srvr.c | 16 | ||||
| -rw-r--r-- | src/lib/libssl/ssl.h | 55 | ||||
| -rw-r--r-- | src/lib/libssl/ssl_cert.c | 10 | ||||
| -rw-r--r-- | src/lib/libssl/ssl_lib.c | 147 | ||||
| -rw-r--r-- | src/lib/libssl/ssl_locl.h | 58 | ||||
| -rw-r--r-- | src/lib/libssl/ssl_rsa.c | 14 | ||||
| -rw-r--r-- | src/lib/libssl/ssl_sess.c | 56 | ||||
| -rw-r--r-- | src/lib/libssl/t1_lib.c | 11 |
11 files changed, 209 insertions, 202 deletions
diff --git a/src/lib/libssl/d1_srtp.c b/src/lib/libssl/d1_srtp.c index 45ce5b8d3e..7b80d73d14 100644 --- a/src/lib/libssl/d1_srtp.c +++ b/src/lib/libssl/d1_srtp.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: d1_srtp.c,v 1.15 2015/07/31 00:35:06 doug Exp $ */ | 1 | /* $OpenBSD: d1_srtp.c,v 1.16 2017/01/23 05:13:02 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 | * |
| @@ -217,7 +217,7 @@ ssl_ctx_make_profiles(const char *profiles_string, | |||
| 217 | int | 217 | int |
| 218 | SSL_CTX_set_tlsext_use_srtp(SSL_CTX *ctx, const char *profiles) | 218 | SSL_CTX_set_tlsext_use_srtp(SSL_CTX *ctx, const char *profiles) |
| 219 | { | 219 | { |
| 220 | return ssl_ctx_make_profiles(profiles, &ctx->srtp_profiles); | 220 | return ssl_ctx_make_profiles(profiles, &ctx->internal->srtp_profiles); |
| 221 | } | 221 | } |
| 222 | 222 | ||
| 223 | int | 223 | int |
| @@ -234,8 +234,8 @@ SSL_get_srtp_profiles(SSL *s) | |||
| 234 | if (s->srtp_profiles != NULL) { | 234 | if (s->srtp_profiles != NULL) { |
| 235 | return s->srtp_profiles; | 235 | return s->srtp_profiles; |
| 236 | } else if ((s->ctx != NULL) && | 236 | } else if ((s->ctx != NULL) && |
| 237 | (s->ctx->srtp_profiles != NULL)) { | 237 | (s->ctx->internal->srtp_profiles != NULL)) { |
| 238 | return s->ctx->srtp_profiles; | 238 | return s->ctx->internal->srtp_profiles; |
| 239 | } | 239 | } |
| 240 | } | 240 | } |
| 241 | 241 | ||
diff --git a/src/lib/libssl/s3_clnt.c b/src/lib/libssl/s3_clnt.c index c606091e10..8c1a87f38e 100644 --- a/src/lib/libssl/s3_clnt.c +++ b/src/lib/libssl/s3_clnt.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: s3_clnt.c,v 1.166 2017/01/23 04:55:26 beck Exp $ */ | 1 | /* $OpenBSD: s3_clnt.c,v 1.167 2017/01/23 05:13:02 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 | * |
| @@ -1484,8 +1484,8 @@ ssl3_get_server_key_exchange(SSL *s) | |||
| 1484 | q = md_buf; | 1484 | q = md_buf; |
| 1485 | for (num = 2; num > 0; num--) { | 1485 | for (num = 2; num > 0; num--) { |
| 1486 | if (!EVP_DigestInit_ex(&md_ctx, | 1486 | if (!EVP_DigestInit_ex(&md_ctx, |
| 1487 | (num == 2) ? s->ctx->md5 : s->ctx->sha1, | 1487 | (num == 2) ? s->ctx->internal->md5 : |
| 1488 | NULL)) { | 1488 | s->ctx->internal->sha1, NULL)) { |
| 1489 | al = SSL_AD_INTERNAL_ERROR; | 1489 | al = SSL_AD_INTERNAL_ERROR; |
| 1490 | goto f_err; | 1490 | goto f_err; |
| 1491 | } | 1491 | } |
| @@ -2755,10 +2755,10 @@ ssl_do_client_cert_cb(SSL *s, X509 **px509, EVP_PKEY **ppkey) | |||
| 2755 | int i = 0; | 2755 | int i = 0; |
| 2756 | 2756 | ||
| 2757 | #ifndef OPENSSL_NO_ENGINE | 2757 | #ifndef OPENSSL_NO_ENGINE |
| 2758 | if (s->ctx->client_cert_engine) { | 2758 | if (s->ctx->internal->client_cert_engine) { |
| 2759 | i = ENGINE_load_ssl_client_cert(s->ctx->client_cert_engine, s, | 2759 | i = ENGINE_load_ssl_client_cert( |
| 2760 | SSL_get_client_CA_list(s), | 2760 | s->ctx->internal->client_cert_engine, s, |
| 2761 | px509, ppkey, NULL, NULL, NULL); | 2761 | SSL_get_client_CA_list(s), px509, ppkey, NULL, NULL, NULL); |
| 2762 | if (i != 0) | 2762 | if (i != 0) |
| 2763 | return (i); | 2763 | return (i); |
| 2764 | } | 2764 | } |
diff --git a/src/lib/libssl/s3_lib.c b/src/lib/libssl/s3_lib.c index 8e52c8bb4a..3e44d5e4c1 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.123 2017/01/23 04:55:26 beck Exp $ */ | 1 | /* $OpenBSD: s3_lib.c,v 1.124 2017/01/23 05:13:02 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 | * |
| @@ -2195,7 +2195,7 @@ ssl3_ctx_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg) | |||
| 2195 | { | 2195 | { |
| 2196 | CERT *cert; | 2196 | CERT *cert; |
| 2197 | 2197 | ||
| 2198 | cert = ctx->cert; | 2198 | cert = ctx->internal->cert; |
| 2199 | 2199 | ||
| 2200 | switch (cmd) { | 2200 | switch (cmd) { |
| 2201 | case SSL_CTRL_NEED_TMP_RSA: | 2201 | case SSL_CTRL_NEED_TMP_RSA: |
| @@ -2225,7 +2225,7 @@ ssl3_ctx_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg) | |||
| 2225 | return (0); | 2225 | return (0); |
| 2226 | 2226 | ||
| 2227 | case SSL_CTRL_SET_DH_AUTO: | 2227 | case SSL_CTRL_SET_DH_AUTO: |
| 2228 | ctx->cert->dh_tmp_auto = larg; | 2228 | ctx->internal->cert->dh_tmp_auto = larg; |
| 2229 | return (1); | 2229 | return (1); |
| 2230 | 2230 | ||
| 2231 | case SSL_CTRL_SET_TMP_ECDH: | 2231 | case SSL_CTRL_SET_TMP_ECDH: |
| @@ -2279,16 +2279,16 @@ ssl3_ctx_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg) | |||
| 2279 | return 0; | 2279 | return 0; |
| 2280 | } | 2280 | } |
| 2281 | if (cmd == SSL_CTRL_SET_TLSEXT_TICKET_KEYS) { | 2281 | if (cmd == SSL_CTRL_SET_TLSEXT_TICKET_KEYS) { |
| 2282 | memcpy(ctx->tlsext_tick_key_name, keys, 16); | 2282 | memcpy(ctx->internal->tlsext_tick_key_name, keys, 16); |
| 2283 | memcpy(ctx->tlsext_tick_hmac_key, | 2283 | memcpy(ctx->internal->tlsext_tick_hmac_key, |
| 2284 | keys + 16, 16); | 2284 | keys + 16, 16); |
| 2285 | memcpy(ctx->tlsext_tick_aes_key, keys + 32, 16); | 2285 | memcpy(ctx->internal->tlsext_tick_aes_key, keys + 32, 16); |
| 2286 | } else { | 2286 | } else { |
| 2287 | memcpy(keys, ctx->tlsext_tick_key_name, 16); | 2287 | memcpy(keys, ctx->internal->tlsext_tick_key_name, 16); |
| 2288 | memcpy(keys + 16, | 2288 | memcpy(keys + 16, |
| 2289 | ctx->tlsext_tick_hmac_key, 16); | 2289 | ctx->internal->tlsext_tick_hmac_key, 16); |
| 2290 | memcpy(keys + 32, | 2290 | memcpy(keys + 32, |
| 2291 | ctx->tlsext_tick_aes_key, 16); | 2291 | ctx->internal->tlsext_tick_aes_key, 16); |
| 2292 | } | 2292 | } |
| 2293 | return 1; | 2293 | return 1; |
| 2294 | } | 2294 | } |
| @@ -2299,7 +2299,7 @@ ssl3_ctx_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg) | |||
| 2299 | break; | 2299 | break; |
| 2300 | 2300 | ||
| 2301 | case SSL_CTRL_SET_ECDH_AUTO: | 2301 | case SSL_CTRL_SET_ECDH_AUTO: |
| 2302 | ctx->cert->ecdh_tmp_auto = larg; | 2302 | ctx->internal->cert->ecdh_tmp_auto = larg; |
| 2303 | return 1; | 2303 | return 1; |
| 2304 | 2304 | ||
| 2305 | /* A Thawte special :-) */ | 2305 | /* A Thawte special :-) */ |
| @@ -2333,7 +2333,7 @@ ssl3_ctx_callback_ctrl(SSL_CTX *ctx, int cmd, void (*fp)(void)) | |||
| 2333 | { | 2333 | { |
| 2334 | CERT *cert; | 2334 | CERT *cert; |
| 2335 | 2335 | ||
| 2336 | cert = ctx->cert; | 2336 | cert = ctx->internal->cert; |
| 2337 | 2337 | ||
| 2338 | switch (cmd) { | 2338 | switch (cmd) { |
| 2339 | case SSL_CTRL_SET_TMP_RSA_CB: | 2339 | case SSL_CTRL_SET_TMP_RSA_CB: |
diff --git a/src/lib/libssl/s3_srvr.c b/src/lib/libssl/s3_srvr.c index 21849487ea..5717d5edda 100644 --- a/src/lib/libssl/s3_srvr.c +++ b/src/lib/libssl/s3_srvr.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: s3_srvr.c,v 1.145 2017/01/23 04:55:27 beck Exp $ */ | 1 | /* $OpenBSD: s3_srvr.c,v 1.146 2017/01/23 05:13:02 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 | * |
| @@ -1129,7 +1129,7 @@ ssl3_send_server_hello(SSL *s) | |||
| 1129 | * so the following won't overwrite an ID that we're supposed | 1129 | * so the following won't overwrite an ID that we're supposed |
| 1130 | * to send back. | 1130 | * to send back. |
| 1131 | */ | 1131 | */ |
| 1132 | if (!(s->ctx->session_cache_mode & SSL_SESS_CACHE_SERVER) | 1132 | if (!(s->ctx->internal->session_cache_mode & SSL_SESS_CACHE_SERVER) |
| 1133 | && !s->hit) | 1133 | && !s->hit) |
| 1134 | s->session->session_id_length = 0; | 1134 | s->session->session_id_length = 0; |
| 1135 | 1135 | ||
| @@ -1553,8 +1553,8 @@ ssl3_send_server_key_exchange(SSL *s) | |||
| 1553 | j = 0; | 1553 | j = 0; |
| 1554 | for (num = 2; num > 0; num--) { | 1554 | for (num = 2; num > 0; num--) { |
| 1555 | if (!EVP_DigestInit_ex(&md_ctx, | 1555 | if (!EVP_DigestInit_ex(&md_ctx, |
| 1556 | (num == 2) ? s->ctx->md5 : | 1556 | (num == 2) ? s->ctx->internal->md5 : |
| 1557 | s->ctx->sha1, NULL)) | 1557 | s->ctx->internal->sha1, NULL)) |
| 1558 | goto err; | 1558 | goto err; |
| 1559 | EVP_DigestUpdate(&md_ctx, | 1559 | EVP_DigestUpdate(&md_ctx, |
| 1560 | s->s3->client_random, | 1560 | s->s3->client_random, |
| @@ -2751,10 +2751,10 @@ ssl3_send_newsession_ticket(SSL *s) | |||
| 2751 | } else { | 2751 | } else { |
| 2752 | arc4random_buf(iv, 16); | 2752 | arc4random_buf(iv, 16); |
| 2753 | EVP_EncryptInit_ex(&ctx, EVP_aes_128_cbc(), NULL, | 2753 | EVP_EncryptInit_ex(&ctx, EVP_aes_128_cbc(), NULL, |
| 2754 | tctx->tlsext_tick_aes_key, iv); | 2754 | tctx->internal->tlsext_tick_aes_key, iv); |
| 2755 | HMAC_Init_ex(&hctx, tctx->tlsext_tick_hmac_key, 16, | 2755 | HMAC_Init_ex(&hctx, tctx->internal->tlsext_tick_hmac_key, |
| 2756 | tlsext_tick_md(), NULL); | 2756 | 16, tlsext_tick_md(), NULL); |
| 2757 | memcpy(key_name, tctx->tlsext_tick_key_name, 16); | 2757 | memcpy(key_name, tctx->internal->tlsext_tick_key_name, 16); |
| 2758 | } | 2758 | } |
| 2759 | 2759 | ||
| 2760 | /* | 2760 | /* |
diff --git a/src/lib/libssl/ssl.h b/src/lib/libssl/ssl.h index 4080af8999..9fc6c5e976 100644 --- a/src/lib/libssl/ssl.h +++ b/src/lib/libssl/ssl.h | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: ssl.h,v 1.111 2017/01/23 04:55:27 beck Exp $ */ | 1 | /* $OpenBSD: ssl.h,v 1.112 2017/01/23 05:13:02 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 | * |
| @@ -689,23 +689,8 @@ struct ssl_ctx_st { | |||
| 689 | const SSL_METHOD *method; | 689 | const SSL_METHOD *method; |
| 690 | 690 | ||
| 691 | STACK_OF(SSL_CIPHER) *cipher_list; | 691 | STACK_OF(SSL_CIPHER) *cipher_list; |
| 692 | /* same as above but sorted for lookup */ | ||
| 693 | STACK_OF(SSL_CIPHER) *cipher_list_by_id; | ||
| 694 | 692 | ||
| 695 | struct x509_store_st /* X509_STORE */ *cert_store; | 693 | struct x509_store_st /* X509_STORE */ *cert_store; |
| 696 | struct lhash_st_SSL_SESSION *sessions; | ||
| 697 | /* Most session-ids that will be cached, default is | ||
| 698 | * SSL_SESSION_CACHE_MAX_SIZE_DEFAULT. 0 is unlimited. */ | ||
| 699 | unsigned long session_cache_size; | ||
| 700 | struct ssl_session_st *session_cache_head; | ||
| 701 | struct ssl_session_st *session_cache_tail; | ||
| 702 | |||
| 703 | /* This can have one of 2 values, ored together, | ||
| 704 | * SSL_SESS_CACHE_CLIENT, | ||
| 705 | * SSL_SESS_CACHE_SERVER, | ||
| 706 | * Default is SSL_SESSION_CACHE_SERVER, which means only | ||
| 707 | * SSL_accept which cache SSL_SESSIONS. */ | ||
| 708 | int session_cache_mode; | ||
| 709 | 694 | ||
| 710 | /* If timeout is not 0, it is the default timeout value set | 695 | /* If timeout is not 0, it is the default timeout value set |
| 711 | * when SSL_new() is called. This has been put in to make | 696 | * when SSL_new() is called. This has been put in to make |
| @@ -714,26 +699,12 @@ struct ssl_ctx_st { | |||
| 714 | 699 | ||
| 715 | int references; | 700 | int references; |
| 716 | 701 | ||
| 717 | CRYPTO_EX_DATA ex_data; | ||
| 718 | |||
| 719 | const EVP_MD *md5; /* For SSLv3/TLSv1 'ssl3-md5' */ | ||
| 720 | const EVP_MD *sha1; /* For SSLv3/TLSv1 'ssl3-sha1' */ | ||
| 721 | |||
| 722 | STACK_OF(X509) *extra_certs; | ||
| 723 | |||
| 724 | /* Default values used when no per-SSL value is defined follow */ | ||
| 725 | |||
| 726 | /* what we put in client cert requests */ | ||
| 727 | STACK_OF(X509_NAME) *client_CA; | ||
| 728 | |||
| 729 | /* Default values to use in SSL structures follow (these are copied by SSL_new) */ | 702 | /* Default values to use in SSL structures follow (these are copied by SSL_new) */ |
| 730 | 703 | ||
| 731 | unsigned long options; | 704 | unsigned long options; |
| 732 | unsigned long mode; | 705 | unsigned long mode; |
| 733 | long max_cert_list; | ||
| 734 | 706 | ||
| 735 | struct cert_st /* CERT */ *cert; | 707 | STACK_OF(X509) *extra_certs; |
| 736 | int read_ahead; | ||
| 737 | 708 | ||
| 738 | int verify_mode; | 709 | int verify_mode; |
| 739 | unsigned int sid_ctx_length; | 710 | unsigned int sid_ctx_length; |
| @@ -741,28 +712,6 @@ struct ssl_ctx_st { | |||
| 741 | 712 | ||
| 742 | X509_VERIFY_PARAM *param; | 713 | X509_VERIFY_PARAM *param; |
| 743 | 714 | ||
| 744 | int quiet_shutdown; | ||
| 745 | |||
| 746 | /* Maximum amount of data to send in one fragment. | ||
| 747 | * actual record size can be more than this due to | ||
| 748 | * padding and MAC overheads. | ||
| 749 | */ | ||
| 750 | unsigned int max_send_fragment; | ||
| 751 | |||
| 752 | #ifndef OPENSSL_NO_ENGINE | ||
| 753 | /* Engine to pass requests for client certs to | ||
| 754 | */ | ||
| 755 | ENGINE *client_cert_engine; | ||
| 756 | #endif | ||
| 757 | |||
| 758 | /* RFC 4507 session ticket keys */ | ||
| 759 | unsigned char tlsext_tick_key_name[16]; | ||
| 760 | unsigned char tlsext_tick_hmac_key[16]; | ||
| 761 | unsigned char tlsext_tick_aes_key[16]; | ||
| 762 | |||
| 763 | /* SRTP profiles we are willing to do from RFC 5764 */ | ||
| 764 | STACK_OF(SRTP_PROTECTION_PROFILE) *srtp_profiles; | ||
| 765 | |||
| 766 | struct ssl_ctx_internal_st *internal; | 715 | struct ssl_ctx_internal_st *internal; |
| 767 | }; | 716 | }; |
| 768 | 717 | ||
diff --git a/src/lib/libssl/ssl_cert.c b/src/lib/libssl/ssl_cert.c index 13591aec9c..496fcf85bc 100644 --- a/src/lib/libssl/ssl_cert.c +++ b/src/lib/libssl/ssl_cert.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: ssl_cert.c,v 1.56 2017/01/23 04:55:27 beck Exp $ */ | 1 | /* $OpenBSD: ssl_cert.c,v 1.57 2017/01/23 05:13:02 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 | * |
| @@ -492,13 +492,13 @@ SSL_set_client_CA_list(SSL *s, STACK_OF(X509_NAME) *name_list) | |||
| 492 | void | 492 | void |
| 493 | SSL_CTX_set_client_CA_list(SSL_CTX *ctx, STACK_OF(X509_NAME) *name_list) | 493 | SSL_CTX_set_client_CA_list(SSL_CTX *ctx, STACK_OF(X509_NAME) *name_list) |
| 494 | { | 494 | { |
| 495 | set_client_CA_list(&(ctx->client_CA), name_list); | 495 | set_client_CA_list(&(ctx->internal->client_CA), name_list); |
| 496 | } | 496 | } |
| 497 | 497 | ||
| 498 | STACK_OF(X509_NAME) * | 498 | STACK_OF(X509_NAME) * |
| 499 | SSL_CTX_get_client_CA_list(const SSL_CTX *ctx) | 499 | SSL_CTX_get_client_CA_list(const SSL_CTX *ctx) |
| 500 | { | 500 | { |
| 501 | return (ctx->client_CA); | 501 | return (ctx->internal->client_CA); |
| 502 | } | 502 | } |
| 503 | 503 | ||
| 504 | STACK_OF(X509_NAME) * | 504 | STACK_OF(X509_NAME) * |
| @@ -515,7 +515,7 @@ SSL_get_client_CA_list(const SSL *s) | |||
| 515 | if (s->client_CA != NULL) | 515 | if (s->client_CA != NULL) |
| 516 | return (s->client_CA); | 516 | return (s->client_CA); |
| 517 | else | 517 | else |
| 518 | return (s->ctx->client_CA); | 518 | return (s->ctx->internal->client_CA); |
| 519 | } | 519 | } |
| 520 | } | 520 | } |
| 521 | 521 | ||
| @@ -548,7 +548,7 @@ SSL_add_client_CA(SSL *ssl, X509 *x) | |||
| 548 | int | 548 | int |
| 549 | SSL_CTX_add_client_CA(SSL_CTX *ctx, X509 *x) | 549 | SSL_CTX_add_client_CA(SSL_CTX *ctx, X509 *x) |
| 550 | { | 550 | { |
| 551 | return (add_client_CA(&(ctx->client_CA), x)); | 551 | return (add_client_CA(&(ctx->internal->client_CA), x)); |
| 552 | } | 552 | } |
| 553 | 553 | ||
| 554 | static int | 554 | static int |
diff --git a/src/lib/libssl/ssl_lib.c b/src/lib/libssl/ssl_lib.c index c9af96e48e..036a13b36a 100644 --- a/src/lib/libssl/ssl_lib.c +++ b/src/lib/libssl/ssl_lib.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: ssl_lib.c,v 1.133 2017/01/23 04:55:27 beck Exp $ */ | 1 | /* $OpenBSD: ssl_lib.c,v 1.134 2017/01/23 05:13:02 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 | * |
| @@ -251,7 +251,7 @@ SSL_CTX_set_ssl_version(SSL_CTX *ctx, const SSL_METHOD *meth) | |||
| 251 | ctx->method = meth; | 251 | ctx->method = meth; |
| 252 | 252 | ||
| 253 | sk = ssl_create_cipher_list(ctx->method, &(ctx->cipher_list), | 253 | sk = ssl_create_cipher_list(ctx->method, &(ctx->cipher_list), |
| 254 | &(ctx->cipher_list_by_id), SSL_DEFAULT_CIPHER_LIST); | 254 | &(ctx->internal->cipher_list_by_id), SSL_DEFAULT_CIPHER_LIST); |
| 255 | if ((sk == NULL) || (sk_SSL_CIPHER_num(sk) <= 0)) { | 255 | if ((sk == NULL) || (sk_SSL_CIPHER_num(sk) <= 0)) { |
| 256 | SSLerr(SSL_F_SSL_CTX_SET_SSL_VERSION, | 256 | SSLerr(SSL_F_SSL_CTX_SET_SSL_VERSION, |
| 257 | SSL_R_SSL_LIBRARY_HAS_NO_CIPHERS); | 257 | SSL_R_SSL_LIBRARY_HAS_NO_CIPHERS); |
| @@ -286,9 +286,9 @@ SSL_new(SSL_CTX *ctx) | |||
| 286 | 286 | ||
| 287 | s->options = ctx->options; | 287 | s->options = ctx->options; |
| 288 | s->mode = ctx->mode; | 288 | s->mode = ctx->mode; |
| 289 | s->max_cert_list = ctx->max_cert_list; | 289 | s->max_cert_list = ctx->internal->max_cert_list; |
| 290 | 290 | ||
| 291 | if (ctx->cert != NULL) { | 291 | if (ctx->internal->cert != NULL) { |
| 292 | /* | 292 | /* |
| 293 | * Earlier library versions used to copy the pointer to | 293 | * Earlier library versions used to copy the pointer to |
| 294 | * the CERT, not its contents; only when setting new | 294 | * the CERT, not its contents; only when setting new |
| @@ -300,13 +300,13 @@ SSL_new(SSL_CTX *ctx) | |||
| 300 | * Now we don't look at the SSL_CTX's CERT after having | 300 | * Now we don't look at the SSL_CTX's CERT after having |
| 301 | * duplicated it once. | 301 | * duplicated it once. |
| 302 | */ | 302 | */ |
| 303 | s->cert = ssl_cert_dup(ctx->cert); | 303 | s->cert = ssl_cert_dup(ctx->internal->cert); |
| 304 | if (s->cert == NULL) | 304 | if (s->cert == NULL) |
| 305 | goto err; | 305 | goto err; |
| 306 | } else | 306 | } else |
| 307 | s->cert=NULL; /* Cannot really happen (see SSL_CTX_new) */ | 307 | s->cert=NULL; /* Cannot really happen (see SSL_CTX_new) */ |
| 308 | 308 | ||
| 309 | s->read_ahead = ctx->read_ahead; | 309 | s->read_ahead = ctx->internal->read_ahead; |
| 310 | s->internal->msg_callback = ctx->internal->msg_callback; | 310 | s->internal->msg_callback = ctx->internal->msg_callback; |
| 311 | s->internal->msg_callback_arg = ctx->internal->msg_callback_arg; | 311 | s->internal->msg_callback_arg = ctx->internal->msg_callback_arg; |
| 312 | s->verify_mode = ctx->verify_mode; | 312 | s->verify_mode = ctx->verify_mode; |
| @@ -320,8 +320,8 @@ SSL_new(SSL_CTX *ctx) | |||
| 320 | if (!s->param) | 320 | if (!s->param) |
| 321 | goto err; | 321 | goto err; |
| 322 | X509_VERIFY_PARAM_inherit(s->param, ctx->param); | 322 | X509_VERIFY_PARAM_inherit(s->param, ctx->param); |
| 323 | s->quiet_shutdown = ctx->quiet_shutdown; | 323 | s->quiet_shutdown = ctx->internal->quiet_shutdown; |
| 324 | s->max_send_fragment = ctx->max_send_fragment; | 324 | s->max_send_fragment = ctx->internal->max_send_fragment; |
| 325 | 325 | ||
| 326 | CRYPTO_add(&ctx->references, 1, CRYPTO_LOCK_SSL_CTX); | 326 | CRYPTO_add(&ctx->references, 1, CRYPTO_LOCK_SSL_CTX); |
| 327 | s->ctx = ctx; | 327 | s->ctx = ctx; |
| @@ -441,7 +441,7 @@ SSL_has_matching_session_id(const SSL *ssl, const unsigned char *id, | |||
| 441 | memcpy(r.session_id, id, id_len); | 441 | memcpy(r.session_id, id, id_len); |
| 442 | 442 | ||
| 443 | CRYPTO_r_lock(CRYPTO_LOCK_SSL_CTX); | 443 | CRYPTO_r_lock(CRYPTO_LOCK_SSL_CTX); |
| 444 | p = lh_SSL_SESSION_retrieve(ssl->ctx->sessions, &r); | 444 | p = lh_SSL_SESSION_retrieve(ssl->ctx->internal->sessions, &r); |
| 445 | CRYPTO_r_unlock(CRYPTO_LOCK_SSL_CTX); | 445 | CRYPTO_r_unlock(CRYPTO_LOCK_SSL_CTX); |
| 446 | return (p != NULL); | 446 | return (p != NULL); |
| 447 | } | 447 | } |
| @@ -876,19 +876,19 @@ SSL_copy_session_id(SSL *t, const SSL *f) | |||
| 876 | int | 876 | int |
| 877 | SSL_CTX_check_private_key(const SSL_CTX *ctx) | 877 | SSL_CTX_check_private_key(const SSL_CTX *ctx) |
| 878 | { | 878 | { |
| 879 | if ((ctx == NULL) || (ctx->cert == NULL) || | 879 | if ((ctx == NULL) || (ctx->internal->cert == NULL) || |
| 880 | (ctx->cert->key->x509 == NULL)) { | 880 | (ctx->internal->cert->key->x509 == NULL)) { |
| 881 | SSLerr(SSL_F_SSL_CTX_CHECK_PRIVATE_KEY, | 881 | SSLerr(SSL_F_SSL_CTX_CHECK_PRIVATE_KEY, |
| 882 | SSL_R_NO_CERTIFICATE_ASSIGNED); | 882 | SSL_R_NO_CERTIFICATE_ASSIGNED); |
| 883 | return (0); | 883 | return (0); |
| 884 | } | 884 | } |
| 885 | if (ctx->cert->key->privatekey == NULL) { | 885 | if (ctx->internal->cert->key->privatekey == NULL) { |
| 886 | SSLerr(SSL_F_SSL_CTX_CHECK_PRIVATE_KEY, | 886 | SSLerr(SSL_F_SSL_CTX_CHECK_PRIVATE_KEY, |
| 887 | SSL_R_NO_PRIVATE_KEY_ASSIGNED); | 887 | SSL_R_NO_PRIVATE_KEY_ASSIGNED); |
| 888 | return (0); | 888 | return (0); |
| 889 | } | 889 | } |
| 890 | return (X509_check_private_key(ctx->cert->key->x509, | 890 | return (X509_check_private_key(ctx->internal->cert->key->x509, |
| 891 | ctx->cert->key->privatekey)); | 891 | ctx->internal->cert->key->privatekey)); |
| 892 | } | 892 | } |
| 893 | 893 | ||
| 894 | /* Fix this function so that it takes an optional type parameter */ | 894 | /* Fix this function so that it takes an optional type parameter */ |
| @@ -1114,7 +1114,7 @@ SSL_callback_ctrl(SSL *s, int cmd, void (*fp)(void)) | |||
| 1114 | struct lhash_st_SSL_SESSION * | 1114 | struct lhash_st_SSL_SESSION * |
| 1115 | SSL_CTX_sessions(SSL_CTX *ctx) | 1115 | SSL_CTX_sessions(SSL_CTX *ctx) |
| 1116 | { | 1116 | { |
| 1117 | return (ctx->sessions); | 1117 | return (ctx->internal->sessions); |
| 1118 | } | 1118 | } |
| 1119 | 1119 | ||
| 1120 | long | 1120 | long |
| @@ -1124,10 +1124,10 @@ SSL_CTX_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg) | |||
| 1124 | 1124 | ||
| 1125 | switch (cmd) { | 1125 | switch (cmd) { |
| 1126 | case SSL_CTRL_GET_READ_AHEAD: | 1126 | case SSL_CTRL_GET_READ_AHEAD: |
| 1127 | return (ctx->read_ahead); | 1127 | return (ctx->internal->read_ahead); |
| 1128 | case SSL_CTRL_SET_READ_AHEAD: | 1128 | case SSL_CTRL_SET_READ_AHEAD: |
| 1129 | l = ctx->read_ahead; | 1129 | l = ctx->internal->read_ahead; |
| 1130 | ctx->read_ahead = larg; | 1130 | ctx->internal->read_ahead = larg; |
| 1131 | return (l); | 1131 | return (l); |
| 1132 | 1132 | ||
| 1133 | case SSL_CTRL_SET_MSG_CALLBACK_ARG: | 1133 | case SSL_CTRL_SET_MSG_CALLBACK_ARG: |
| @@ -1135,27 +1135,27 @@ SSL_CTX_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg) | |||
| 1135 | return (1); | 1135 | return (1); |
| 1136 | 1136 | ||
| 1137 | case SSL_CTRL_GET_MAX_CERT_LIST: | 1137 | case SSL_CTRL_GET_MAX_CERT_LIST: |
| 1138 | return (ctx->max_cert_list); | 1138 | return (ctx->internal->max_cert_list); |
| 1139 | case SSL_CTRL_SET_MAX_CERT_LIST: | 1139 | case SSL_CTRL_SET_MAX_CERT_LIST: |
| 1140 | l = ctx->max_cert_list; | 1140 | l = ctx->internal->max_cert_list; |
| 1141 | ctx->max_cert_list = larg; | 1141 | ctx->internal->max_cert_list = larg; |
| 1142 | return (l); | 1142 | return (l); |
| 1143 | 1143 | ||
| 1144 | case SSL_CTRL_SET_SESS_CACHE_SIZE: | 1144 | case SSL_CTRL_SET_SESS_CACHE_SIZE: |
| 1145 | l = ctx->session_cache_size; | 1145 | l = ctx->internal->session_cache_size; |
| 1146 | ctx->session_cache_size = larg; | 1146 | ctx->internal->session_cache_size = larg; |
| 1147 | return (l); | 1147 | return (l); |
| 1148 | case SSL_CTRL_GET_SESS_CACHE_SIZE: | 1148 | case SSL_CTRL_GET_SESS_CACHE_SIZE: |
| 1149 | return (ctx->session_cache_size); | 1149 | return (ctx->internal->session_cache_size); |
| 1150 | case SSL_CTRL_SET_SESS_CACHE_MODE: | 1150 | case SSL_CTRL_SET_SESS_CACHE_MODE: |
| 1151 | l = ctx->session_cache_mode; | 1151 | l = ctx->internal->session_cache_mode; |
| 1152 | ctx->session_cache_mode = larg; | 1152 | ctx->internal->session_cache_mode = larg; |
| 1153 | return (l); | 1153 | return (l); |
| 1154 | case SSL_CTRL_GET_SESS_CACHE_MODE: | 1154 | case SSL_CTRL_GET_SESS_CACHE_MODE: |
| 1155 | return (ctx->session_cache_mode); | 1155 | return (ctx->internal->session_cache_mode); |
| 1156 | 1156 | ||
| 1157 | case SSL_CTRL_SESS_NUMBER: | 1157 | case SSL_CTRL_SESS_NUMBER: |
| 1158 | return (lh_SSL_SESSION_num_items(ctx->sessions)); | 1158 | return (lh_SSL_SESSION_num_items(ctx->internal->sessions)); |
| 1159 | case SSL_CTRL_SESS_CONNECT: | 1159 | case SSL_CTRL_SESS_CONNECT: |
| 1160 | return (ctx->internal->stats.sess_connect); | 1160 | return (ctx->internal->stats.sess_connect); |
| 1161 | case SSL_CTRL_SESS_CONNECT_GOOD: | 1161 | case SSL_CTRL_SESS_CONNECT_GOOD: |
| @@ -1189,7 +1189,7 @@ SSL_CTX_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg) | |||
| 1189 | case SSL_CTRL_SET_MAX_SEND_FRAGMENT: | 1189 | case SSL_CTRL_SET_MAX_SEND_FRAGMENT: |
| 1190 | if (larg < 512 || larg > SSL3_RT_MAX_PLAIN_LENGTH) | 1190 | if (larg < 512 || larg > SSL3_RT_MAX_PLAIN_LENGTH) |
| 1191 | return (0); | 1191 | return (0); |
| 1192 | ctx->max_send_fragment = larg; | 1192 | ctx->internal->max_send_fragment = larg; |
| 1193 | return (1); | 1193 | return (1); |
| 1194 | default: | 1194 | default: |
| 1195 | return (ctx->method->ssl_ctx_ctrl(ctx, cmd, larg, parg)); | 1195 | return (ctx->method->ssl_ctx_ctrl(ctx, cmd, larg, parg)); |
| @@ -1264,8 +1264,8 @@ ssl_get_ciphers_by_id(SSL *s) | |||
| 1264 | if (s->cipher_list_by_id != NULL) { | 1264 | if (s->cipher_list_by_id != NULL) { |
| 1265 | return (s->cipher_list_by_id); | 1265 | return (s->cipher_list_by_id); |
| 1266 | } else if ((s->ctx != NULL) && | 1266 | } else if ((s->ctx != NULL) && |
| 1267 | (s->ctx->cipher_list_by_id != NULL)) { | 1267 | (s->ctx->internal->cipher_list_by_id != NULL)) { |
| 1268 | return (s->ctx->cipher_list_by_id); | 1268 | return (s->ctx->internal->cipher_list_by_id); |
| 1269 | } | 1269 | } |
| 1270 | } | 1270 | } |
| 1271 | return (NULL); | 1271 | return (NULL); |
| @@ -1296,14 +1296,14 @@ SSL_CTX_set_cipher_list(SSL_CTX *ctx, const char *str) | |||
| 1296 | STACK_OF(SSL_CIPHER) *sk; | 1296 | STACK_OF(SSL_CIPHER) *sk; |
| 1297 | 1297 | ||
| 1298 | sk = ssl_create_cipher_list(ctx->method, &ctx->cipher_list, | 1298 | sk = ssl_create_cipher_list(ctx->method, &ctx->cipher_list, |
| 1299 | &ctx->cipher_list_by_id, str); | 1299 | &ctx->internal->cipher_list_by_id, str); |
| 1300 | /* | 1300 | /* |
| 1301 | * ssl_create_cipher_list may return an empty stack if it | 1301 | * ssl_create_cipher_list may return an empty stack if it |
| 1302 | * was unable to find a cipher matching the given rule string | 1302 | * was unable to find a cipher matching the given rule string |
| 1303 | * (for example if the rule string specifies a cipher which | 1303 | * (for example if the rule string specifies a cipher which |
| 1304 | * has been disabled). This is not an error as far as | 1304 | * has been disabled). This is not an error as far as |
| 1305 | * ssl_create_cipher_list is concerned, and hence | 1305 | * ssl_create_cipher_list is concerned, and hence |
| 1306 | * ctx->cipher_list and ctx->cipher_list_by_id has been | 1306 | * ctx->cipher_list and ctx->internal->cipher_list_by_id has been |
| 1307 | * updated. | 1307 | * updated. |
| 1308 | */ | 1308 | */ |
| 1309 | if (sk == NULL) | 1309 | if (sk == NULL) |
| @@ -1823,10 +1823,10 @@ SSL_CTX_new(const SSL_METHOD *meth) | |||
| 1823 | ret->method = meth; | 1823 | ret->method = meth; |
| 1824 | 1824 | ||
| 1825 | ret->cert_store = NULL; | 1825 | ret->cert_store = NULL; |
| 1826 | ret->session_cache_mode = SSL_SESS_CACHE_SERVER; | 1826 | ret->internal->session_cache_mode = SSL_SESS_CACHE_SERVER; |
| 1827 | ret->session_cache_size = SSL_SESSION_CACHE_MAX_SIZE_DEFAULT; | 1827 | ret->internal->session_cache_size = SSL_SESSION_CACHE_MAX_SIZE_DEFAULT; |
| 1828 | ret->session_cache_head = NULL; | 1828 | ret->internal->session_cache_head = NULL; |
| 1829 | ret->session_cache_tail = NULL; | 1829 | ret->internal->session_cache_tail = NULL; |
| 1830 | 1830 | ||
| 1831 | /* We take the system default */ | 1831 | /* We take the system default */ |
| 1832 | ret->session_timeout = meth->get_timeout(); | 1832 | ret->session_timeout = meth->get_timeout(); |
| @@ -1839,21 +1839,21 @@ SSL_CTX_new(const SSL_METHOD *meth) | |||
| 1839 | memset((char *)&ret->internal->stats, 0, sizeof(ret->internal->stats)); | 1839 | memset((char *)&ret->internal->stats, 0, sizeof(ret->internal->stats)); |
| 1840 | 1840 | ||
| 1841 | ret->references = 1; | 1841 | ret->references = 1; |
| 1842 | ret->quiet_shutdown = 0; | 1842 | ret->internal->quiet_shutdown = 0; |
| 1843 | 1843 | ||
| 1844 | ret->internal->info_callback = NULL; | 1844 | ret->internal->info_callback = NULL; |
| 1845 | 1845 | ||
| 1846 | ret->internal->app_verify_callback = 0; | 1846 | ret->internal->app_verify_callback = 0; |
| 1847 | ret->internal->app_verify_arg = NULL; | 1847 | ret->internal->app_verify_arg = NULL; |
| 1848 | 1848 | ||
| 1849 | ret->max_cert_list = SSL_MAX_CERT_LIST_DEFAULT; | 1849 | ret->internal->max_cert_list = SSL_MAX_CERT_LIST_DEFAULT; |
| 1850 | ret->read_ahead = 0; | 1850 | ret->internal->read_ahead = 0; |
| 1851 | ret->internal->msg_callback = 0; | 1851 | ret->internal->msg_callback = 0; |
| 1852 | ret->internal->msg_callback_arg = NULL; | 1852 | ret->internal->msg_callback_arg = NULL; |
| 1853 | ret->verify_mode = SSL_VERIFY_NONE; | 1853 | ret->verify_mode = SSL_VERIFY_NONE; |
| 1854 | ret->sid_ctx_length = 0; | 1854 | ret->sid_ctx_length = 0; |
| 1855 | ret->internal->default_verify_callback = NULL; | 1855 | ret->internal->default_verify_callback = NULL; |
| 1856 | if ((ret->cert = ssl_cert_new()) == NULL) | 1856 | if ((ret->internal->cert = ssl_cert_new()) == NULL) |
| 1857 | goto err; | 1857 | goto err; |
| 1858 | 1858 | ||
| 1859 | ret->internal->default_passwd_callback = 0; | 1859 | ret->internal->default_passwd_callback = 0; |
| @@ -1862,15 +1862,15 @@ SSL_CTX_new(const SSL_METHOD *meth) | |||
| 1862 | ret->internal->app_gen_cookie_cb = 0; | 1862 | ret->internal->app_gen_cookie_cb = 0; |
| 1863 | ret->internal->app_verify_cookie_cb = 0; | 1863 | ret->internal->app_verify_cookie_cb = 0; |
| 1864 | 1864 | ||
| 1865 | ret->sessions = lh_SSL_SESSION_new(); | 1865 | ret->internal->sessions = lh_SSL_SESSION_new(); |
| 1866 | if (ret->sessions == NULL) | 1866 | if (ret->internal->sessions == NULL) |
| 1867 | goto err; | 1867 | goto err; |
| 1868 | ret->cert_store = X509_STORE_new(); | 1868 | ret->cert_store = X509_STORE_new(); |
| 1869 | if (ret->cert_store == NULL) | 1869 | if (ret->cert_store == NULL) |
| 1870 | goto err; | 1870 | goto err; |
| 1871 | 1871 | ||
| 1872 | ssl_create_cipher_list(ret->method, &ret->cipher_list, | 1872 | ssl_create_cipher_list(ret->method, &ret->cipher_list, |
| 1873 | &ret->cipher_list_by_id, SSL_DEFAULT_CIPHER_LIST); | 1873 | &ret->internal->cipher_list_by_id, SSL_DEFAULT_CIPHER_LIST); |
| 1874 | if (ret->cipher_list == NULL || | 1874 | if (ret->cipher_list == NULL || |
| 1875 | sk_SSL_CIPHER_num(ret->cipher_list) <= 0) { | 1875 | sk_SSL_CIPHER_num(ret->cipher_list) <= 0) { |
| 1876 | SSLerr(SSL_F_SSL_CTX_NEW, SSL_R_LIBRARY_HAS_NO_CIPHERS); | 1876 | SSLerr(SSL_F_SSL_CTX_NEW, SSL_R_LIBRARY_HAS_NO_CIPHERS); |
| @@ -1881,41 +1881,42 @@ SSL_CTX_new(const SSL_METHOD *meth) | |||
| 1881 | if (!ret->param) | 1881 | if (!ret->param) |
| 1882 | goto err; | 1882 | goto err; |
| 1883 | 1883 | ||
| 1884 | if ((ret->md5 = EVP_get_digestbyname("ssl3-md5")) == NULL) { | 1884 | if ((ret->internal->md5 = EVP_get_digestbyname("ssl3-md5")) == NULL) { |
| 1885 | SSLerr(SSL_F_SSL_CTX_NEW, | 1885 | SSLerr(SSL_F_SSL_CTX_NEW, |
| 1886 | SSL_R_UNABLE_TO_LOAD_SSL3_MD5_ROUTINES); | 1886 | SSL_R_UNABLE_TO_LOAD_SSL3_MD5_ROUTINES); |
| 1887 | goto err2; | 1887 | goto err2; |
| 1888 | } | 1888 | } |
| 1889 | if ((ret->sha1 = EVP_get_digestbyname("ssl3-sha1")) == NULL) { | 1889 | if ((ret->internal->sha1 = EVP_get_digestbyname("ssl3-sha1")) == NULL) { |
| 1890 | SSLerr(SSL_F_SSL_CTX_NEW, | 1890 | SSLerr(SSL_F_SSL_CTX_NEW, |
| 1891 | SSL_R_UNABLE_TO_LOAD_SSL3_SHA1_ROUTINES); | 1891 | SSL_R_UNABLE_TO_LOAD_SSL3_SHA1_ROUTINES); |
| 1892 | goto err2; | 1892 | goto err2; |
| 1893 | } | 1893 | } |
| 1894 | 1894 | ||
| 1895 | if ((ret->client_CA = sk_X509_NAME_new_null()) == NULL) | 1895 | if ((ret->internal->client_CA = sk_X509_NAME_new_null()) == NULL) |
| 1896 | goto err; | 1896 | goto err; |
| 1897 | 1897 | ||
| 1898 | CRYPTO_new_ex_data(CRYPTO_EX_INDEX_SSL_CTX, ret, &ret->ex_data); | 1898 | CRYPTO_new_ex_data(CRYPTO_EX_INDEX_SSL_CTX, ret, &ret->internal->ex_data); |
| 1899 | 1899 | ||
| 1900 | ret->extra_certs = NULL; | 1900 | ret->extra_certs = NULL; |
| 1901 | 1901 | ||
| 1902 | ret->max_send_fragment = SSL3_RT_MAX_PLAIN_LENGTH; | 1902 | ret->internal->max_send_fragment = SSL3_RT_MAX_PLAIN_LENGTH; |
| 1903 | 1903 | ||
| 1904 | ret->internal->tlsext_servername_callback = 0; | 1904 | ret->internal->tlsext_servername_callback = 0; |
| 1905 | ret->internal->tlsext_servername_arg = NULL; | 1905 | ret->internal->tlsext_servername_arg = NULL; |
| 1906 | 1906 | ||
| 1907 | /* Setup RFC4507 ticket keys */ | 1907 | /* Setup RFC4507 ticket keys */ |
| 1908 | arc4random_buf(ret->tlsext_tick_key_name, 16); | 1908 | arc4random_buf(ret->internal->tlsext_tick_key_name, 16); |
| 1909 | arc4random_buf(ret->tlsext_tick_hmac_key, 16); | 1909 | arc4random_buf(ret->internal->tlsext_tick_hmac_key, 16); |
| 1910 | arc4random_buf(ret->tlsext_tick_aes_key, 16); | 1910 | arc4random_buf(ret->internal->tlsext_tick_aes_key, 16); |
| 1911 | 1911 | ||
| 1912 | ret->internal->tlsext_status_cb = 0; | 1912 | ret->internal->tlsext_status_cb = 0; |
| 1913 | ret->internal->tlsext_status_arg = NULL; | 1913 | ret->internal->tlsext_status_arg = NULL; |
| 1914 | 1914 | ||
| 1915 | ret->internal->next_protos_advertised_cb = 0; | 1915 | ret->internal->next_protos_advertised_cb = 0; |
| 1916 | ret->internal->next_proto_select_cb = 0; | 1916 | ret->internal->next_proto_select_cb = 0; |
| 1917 | |||
| 1917 | #ifndef OPENSSL_NO_ENGINE | 1918 | #ifndef OPENSSL_NO_ENGINE |
| 1918 | ret->client_cert_engine = NULL; | 1919 | ret->internal->client_cert_engine = NULL; |
| 1919 | #ifdef OPENSSL_SSL_CLIENT_ENGINE_AUTO | 1920 | #ifdef OPENSSL_SSL_CLIENT_ENGINE_AUTO |
| 1920 | #define eng_strx(x) #x | 1921 | #define eng_strx(x) #x |
| 1921 | #define eng_str(x) eng_strx(x) | 1922 | #define eng_str(x) eng_strx(x) |
| @@ -1972,35 +1973,35 @@ SSL_CTX_free(SSL_CTX *a) | |||
| 1972 | * free ex_data, then finally free the cache. | 1973 | * free ex_data, then finally free the cache. |
| 1973 | * (See ticket [openssl.org #212].) | 1974 | * (See ticket [openssl.org #212].) |
| 1974 | */ | 1975 | */ |
| 1975 | if (a->sessions != NULL) | 1976 | if (a->internal->sessions != NULL) |
| 1976 | SSL_CTX_flush_sessions(a, 0); | 1977 | SSL_CTX_flush_sessions(a, 0); |
| 1977 | 1978 | ||
| 1978 | CRYPTO_free_ex_data(CRYPTO_EX_INDEX_SSL_CTX, a, &a->ex_data); | 1979 | CRYPTO_free_ex_data(CRYPTO_EX_INDEX_SSL_CTX, a, &a->internal->ex_data); |
| 1979 | 1980 | ||
| 1980 | if (a->sessions != NULL) | 1981 | if (a->internal->sessions != NULL) |
| 1981 | lh_SSL_SESSION_free(a->sessions); | 1982 | lh_SSL_SESSION_free(a->internal->sessions); |
| 1982 | 1983 | ||
| 1983 | if (a->cert_store != NULL) | 1984 | if (a->cert_store != NULL) |
| 1984 | X509_STORE_free(a->cert_store); | 1985 | X509_STORE_free(a->cert_store); |
| 1985 | if (a->cipher_list != NULL) | 1986 | if (a->cipher_list != NULL) |
| 1986 | sk_SSL_CIPHER_free(a->cipher_list); | 1987 | sk_SSL_CIPHER_free(a->cipher_list); |
| 1987 | if (a->cipher_list_by_id != NULL) | 1988 | if (a->internal->cipher_list_by_id != NULL) |
| 1988 | sk_SSL_CIPHER_free(a->cipher_list_by_id); | 1989 | sk_SSL_CIPHER_free(a->internal->cipher_list_by_id); |
| 1989 | if (a->cert != NULL) | 1990 | if (a->internal->cert != NULL) |
| 1990 | ssl_cert_free(a->cert); | 1991 | ssl_cert_free(a->internal->cert); |
| 1991 | if (a->client_CA != NULL) | 1992 | if (a->internal->client_CA != NULL) |
| 1992 | sk_X509_NAME_pop_free(a->client_CA, X509_NAME_free); | 1993 | sk_X509_NAME_pop_free(a->internal->client_CA, X509_NAME_free); |
| 1993 | if (a->extra_certs != NULL) | 1994 | if (a->extra_certs != NULL) |
| 1994 | sk_X509_pop_free(a->extra_certs, X509_free); | 1995 | sk_X509_pop_free(a->extra_certs, X509_free); |
| 1995 | 1996 | ||
| 1996 | #ifndef OPENSSL_NO_SRTP | 1997 | #ifndef OPENSSL_NO_SRTP |
| 1997 | if (a->srtp_profiles) | 1998 | if (a->internal->srtp_profiles) |
| 1998 | sk_SRTP_PROTECTION_PROFILE_free(a->srtp_profiles); | 1999 | sk_SRTP_PROTECTION_PROFILE_free(a->internal->srtp_profiles); |
| 1999 | #endif | 2000 | #endif |
| 2000 | 2001 | ||
| 2001 | #ifndef OPENSSL_NO_ENGINE | 2002 | #ifndef OPENSSL_NO_ENGINE |
| 2002 | if (a->client_cert_engine) | 2003 | if (a->internal->client_cert_engine) |
| 2003 | ENGINE_finish(a->client_cert_engine); | 2004 | ENGINE_finish(a->internal->client_cert_engine); |
| 2004 | #endif | 2005 | #endif |
| 2005 | 2006 | ||
| 2006 | free(a->internal->alpn_client_proto_list); | 2007 | free(a->internal->alpn_client_proto_list); |
| @@ -2272,7 +2273,7 @@ ssl_update_cache(SSL *s, int mode) | |||
| 2272 | if (s->session->session_id_length == 0) | 2273 | if (s->session->session_id_length == 0) |
| 2273 | return; | 2274 | return; |
| 2274 | 2275 | ||
| 2275 | i = s->session_ctx->session_cache_mode; | 2276 | i = s->session_ctx->internal->session_cache_mode; |
| 2276 | if ((i & mode) && (!s->hit) && ((i & SSL_SESS_CACHE_NO_INTERNAL_STORE) | 2277 | if ((i & mode) && (!s->hit) && ((i & SSL_SESS_CACHE_NO_INTERNAL_STORE) |
| 2277 | || SSL_CTX_add_session(s->session_ctx, s->session)) | 2278 | || SSL_CTX_add_session(s->session_ctx, s->session)) |
| 2278 | && (s->session_ctx->internal->new_session_cb != NULL)) { | 2279 | && (s->session_ctx->internal->new_session_cb != NULL)) { |
| @@ -2839,13 +2840,13 @@ ssl_free_wbio_buffer(SSL *s) | |||
| 2839 | void | 2840 | void |
| 2840 | SSL_CTX_set_quiet_shutdown(SSL_CTX *ctx, int mode) | 2841 | SSL_CTX_set_quiet_shutdown(SSL_CTX *ctx, int mode) |
| 2841 | { | 2842 | { |
| 2842 | ctx->quiet_shutdown = mode; | 2843 | ctx->internal->quiet_shutdown = mode; |
| 2843 | } | 2844 | } |
| 2844 | 2845 | ||
| 2845 | int | 2846 | int |
| 2846 | SSL_CTX_get_quiet_shutdown(const SSL_CTX *ctx) | 2847 | SSL_CTX_get_quiet_shutdown(const SSL_CTX *ctx) |
| 2847 | { | 2848 | { |
| 2848 | return (ctx->quiet_shutdown); | 2849 | return (ctx->internal->quiet_shutdown); |
| 2849 | } | 2850 | } |
| 2850 | 2851 | ||
| 2851 | void | 2852 | void |
| @@ -2893,7 +2894,7 @@ SSL_set_SSL_CTX(SSL *ssl, SSL_CTX* ctx) | |||
| 2893 | return (ssl->ctx); | 2894 | return (ssl->ctx); |
| 2894 | if (ctx == NULL) | 2895 | if (ctx == NULL) |
| 2895 | ctx = ssl->initial_ctx; | 2896 | ctx = ssl->initial_ctx; |
| 2896 | ssl->cert = ssl_cert_dup(ctx->cert); | 2897 | ssl->cert = ssl_cert_dup(ctx->internal->cert); |
| 2897 | if (ocert != NULL) { | 2898 | if (ocert != NULL) { |
| 2898 | int i; | 2899 | int i; |
| 2899 | /* Copy negotiated digests from original certificate. */ | 2900 | /* Copy negotiated digests from original certificate. */ |
| @@ -2992,13 +2993,13 @@ SSL_CTX_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, | |||
| 2992 | int | 2993 | int |
| 2993 | SSL_CTX_set_ex_data(SSL_CTX *s, int idx, void *arg) | 2994 | SSL_CTX_set_ex_data(SSL_CTX *s, int idx, void *arg) |
| 2994 | { | 2995 | { |
| 2995 | return (CRYPTO_set_ex_data(&s->ex_data, idx, arg)); | 2996 | return (CRYPTO_set_ex_data(&s->internal->ex_data, idx, arg)); |
| 2996 | } | 2997 | } |
| 2997 | 2998 | ||
| 2998 | void * | 2999 | void * |
| 2999 | SSL_CTX_get_ex_data(const SSL_CTX *s, int idx) | 3000 | SSL_CTX_get_ex_data(const SSL_CTX *s, int idx) |
| 3000 | { | 3001 | { |
| 3001 | return (CRYPTO_get_ex_data(&s->ex_data, idx)); | 3002 | return (CRYPTO_get_ex_data(&s->internal->ex_data, idx)); |
| 3002 | } | 3003 | } |
| 3003 | 3004 | ||
| 3004 | int | 3005 | int |
diff --git a/src/lib/libssl/ssl_locl.h b/src/lib/libssl/ssl_locl.h index 60bb5597e8..83ffb1103f 100644 --- a/src/lib/libssl/ssl_locl.h +++ b/src/lib/libssl/ssl_locl.h | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: ssl_locl.h,v 1.155 2017/01/23 04:55:27 beck Exp $ */ | 1 | /* $OpenBSD: ssl_locl.h,v 1.156 2017/01/23 05:13:02 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 | * |
| @@ -451,6 +451,21 @@ typedef struct ssl_ctx_internal_st { | |||
| 451 | int (*tlsext_status_cb)(SSL *ssl, void *arg); | 451 | int (*tlsext_status_cb)(SSL *ssl, void *arg); |
| 452 | void *tlsext_status_arg; | 452 | void *tlsext_status_arg; |
| 453 | 453 | ||
| 454 | struct lhash_st_SSL_SESSION *sessions; | ||
| 455 | |||
| 456 | /* Most session-ids that will be cached, default is | ||
| 457 | * SSL_SESSION_CACHE_MAX_SIZE_DEFAULT. 0 is unlimited. */ | ||
| 458 | unsigned long session_cache_size; | ||
| 459 | struct ssl_session_st *session_cache_head; | ||
| 460 | struct ssl_session_st *session_cache_tail; | ||
| 461 | |||
| 462 | /* This can have one of 2 values, ored together, | ||
| 463 | * SSL_SESS_CACHE_CLIENT, | ||
| 464 | * SSL_SESS_CACHE_SERVER, | ||
| 465 | * Default is SSL_SESSION_CACHE_SERVER, which means only | ||
| 466 | * SSL_accept which cache SSL_SESSIONS. */ | ||
| 467 | int session_cache_mode; | ||
| 468 | |||
| 454 | struct { | 469 | struct { |
| 455 | int sess_connect; /* SSL new conn - started */ | 470 | int sess_connect; /* SSL new conn - started */ |
| 456 | int sess_connect_renegotiate;/* SSL reneg - requested */ | 471 | int sess_connect_renegotiate;/* SSL reneg - requested */ |
| @@ -470,6 +485,47 @@ typedef struct ssl_ctx_internal_st { | |||
| 470 | * processes - spooky :-) */ | 485 | * processes - spooky :-) */ |
| 471 | } stats; | 486 | } stats; |
| 472 | 487 | ||
| 488 | CRYPTO_EX_DATA ex_data; | ||
| 489 | |||
| 490 | /* same cipher_list but sorted for lookup */ | ||
| 491 | STACK_OF(SSL_CIPHER) *cipher_list_by_id; | ||
| 492 | |||
| 493 | struct cert_st /* CERT */ *cert; | ||
| 494 | |||
| 495 | const EVP_MD *md5; /* For SSLv3/TLSv1 'ssl3-md5' */ | ||
| 496 | const EVP_MD *sha1; /* For SSLv3/TLSv1 'ssl3-sha1' */ | ||
| 497 | |||
| 498 | /* Default values used when no per-SSL value is defined follow */ | ||
| 499 | |||
| 500 | /* what we put in client cert requests */ | ||
| 501 | STACK_OF(X509_NAME) *client_CA; | ||
| 502 | |||
| 503 | long max_cert_list; | ||
| 504 | |||
| 505 | int read_ahead; | ||
| 506 | |||
| 507 | int quiet_shutdown; | ||
| 508 | |||
| 509 | /* Maximum amount of data to send in one fragment. | ||
| 510 | * actual record size can be more than this due to | ||
| 511 | * padding and MAC overheads. | ||
| 512 | */ | ||
| 513 | unsigned int max_send_fragment; | ||
| 514 | |||
| 515 | #ifndef OPENSSL_NO_ENGINE | ||
| 516 | /* Engine to pass requests for client certs to | ||
| 517 | */ | ||
| 518 | ENGINE *client_cert_engine; | ||
| 519 | #endif | ||
| 520 | |||
| 521 | /* RFC 4507 session ticket keys */ | ||
| 522 | unsigned char tlsext_tick_key_name[16]; | ||
| 523 | unsigned char tlsext_tick_hmac_key[16]; | ||
| 524 | unsigned char tlsext_tick_aes_key[16]; | ||
| 525 | |||
| 526 | /* SRTP profiles we are willing to do from RFC 5764 */ | ||
| 527 | STACK_OF(SRTP_PROTECTION_PROFILE) *srtp_profiles; | ||
| 528 | |||
| 473 | /* Next protocol negotiation information */ | 529 | /* Next protocol negotiation information */ |
| 474 | /* (for experimental NPN extension). */ | 530 | /* (for experimental NPN extension). */ |
| 475 | 531 | ||
diff --git a/src/lib/libssl/ssl_rsa.c b/src/lib/libssl/ssl_rsa.c index 647cc4bfd8..cbb1c0b562 100644 --- a/src/lib/libssl/ssl_rsa.c +++ b/src/lib/libssl/ssl_rsa.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: ssl_rsa.c,v 1.22 2017/01/23 04:15:28 jsing Exp $ */ | 1 | /* $OpenBSD: ssl_rsa.c,v 1.23 2017/01/23 05:13:02 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 | * |
| @@ -353,11 +353,11 @@ SSL_CTX_use_certificate(SSL_CTX *ctx, X509 *x) | |||
| 353 | SSLerr(SSL_F_SSL_CTX_USE_CERTIFICATE, ERR_R_PASSED_NULL_PARAMETER); | 353 | SSLerr(SSL_F_SSL_CTX_USE_CERTIFICATE, ERR_R_PASSED_NULL_PARAMETER); |
| 354 | return (0); | 354 | return (0); |
| 355 | } | 355 | } |
| 356 | if (!ssl_cert_inst(&ctx->cert)) { | 356 | if (!ssl_cert_inst(&ctx->internal->cert)) { |
| 357 | SSLerr(SSL_F_SSL_CTX_USE_CERTIFICATE, ERR_R_MALLOC_FAILURE); | 357 | SSLerr(SSL_F_SSL_CTX_USE_CERTIFICATE, ERR_R_MALLOC_FAILURE); |
| 358 | return (0); | 358 | return (0); |
| 359 | } | 359 | } |
| 360 | return (ssl_set_cert(ctx->cert, x)); | 360 | return (ssl_set_cert(ctx->internal->cert, x)); |
| 361 | } | 361 | } |
| 362 | 362 | ||
| 363 | static int | 363 | static int |
| @@ -486,7 +486,7 @@ SSL_CTX_use_RSAPrivateKey(SSL_CTX *ctx, RSA *rsa) | |||
| 486 | SSLerr(SSL_F_SSL_CTX_USE_RSAPRIVATEKEY, ERR_R_PASSED_NULL_PARAMETER); | 486 | SSLerr(SSL_F_SSL_CTX_USE_RSAPRIVATEKEY, ERR_R_PASSED_NULL_PARAMETER); |
| 487 | return (0); | 487 | return (0); |
| 488 | } | 488 | } |
| 489 | if (!ssl_cert_inst(&ctx->cert)) { | 489 | if (!ssl_cert_inst(&ctx->internal->cert)) { |
| 490 | SSLerr(SSL_F_SSL_CTX_USE_RSAPRIVATEKEY, ERR_R_MALLOC_FAILURE); | 490 | SSLerr(SSL_F_SSL_CTX_USE_RSAPRIVATEKEY, ERR_R_MALLOC_FAILURE); |
| 491 | return (0); | 491 | return (0); |
| 492 | } | 492 | } |
| @@ -498,7 +498,7 @@ SSL_CTX_use_RSAPrivateKey(SSL_CTX *ctx, RSA *rsa) | |||
| 498 | RSA_up_ref(rsa); | 498 | RSA_up_ref(rsa); |
| 499 | EVP_PKEY_assign_RSA(pkey, rsa); | 499 | EVP_PKEY_assign_RSA(pkey, rsa); |
| 500 | 500 | ||
| 501 | ret = ssl_set_pkey(ctx->cert, pkey); | 501 | ret = ssl_set_pkey(ctx->internal->cert, pkey); |
| 502 | EVP_PKEY_free(pkey); | 502 | EVP_PKEY_free(pkey); |
| 503 | return (ret); | 503 | return (ret); |
| 504 | } | 504 | } |
| @@ -569,11 +569,11 @@ SSL_CTX_use_PrivateKey(SSL_CTX *ctx, EVP_PKEY *pkey) | |||
| 569 | ERR_R_PASSED_NULL_PARAMETER); | 569 | ERR_R_PASSED_NULL_PARAMETER); |
| 570 | return (0); | 570 | return (0); |
| 571 | } | 571 | } |
| 572 | if (!ssl_cert_inst(&ctx->cert)) { | 572 | if (!ssl_cert_inst(&ctx->internal->cert)) { |
| 573 | SSLerr(SSL_F_SSL_CTX_USE_PRIVATEKEY, ERR_R_MALLOC_FAILURE); | 573 | SSLerr(SSL_F_SSL_CTX_USE_PRIVATEKEY, ERR_R_MALLOC_FAILURE); |
| 574 | return (0); | 574 | return (0); |
| 575 | } | 575 | } |
| 576 | return (ssl_set_pkey(ctx->cert, pkey)); | 576 | return (ssl_set_pkey(ctx->internal->cert, pkey)); |
| 577 | } | 577 | } |
| 578 | 578 | ||
| 579 | int | 579 | int |
diff --git a/src/lib/libssl/ssl_sess.c b/src/lib/libssl/ssl_sess.c index 541b143384..c114e6ec07 100644 --- a/src/lib/libssl/ssl_sess.c +++ b/src/lib/libssl/ssl_sess.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: ssl_sess.c,v 1.59 2017/01/23 04:55:27 beck Exp $ */ | 1 | /* $OpenBSD: ssl_sess.c,v 1.60 2017/01/23 05:13:02 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 | * |
| @@ -449,7 +449,7 @@ ssl_get_prev_session(SSL *s, unsigned char *session_id, int len, | |||
| 449 | } | 449 | } |
| 450 | 450 | ||
| 451 | if (try_session_cache && ret == NULL && | 451 | if (try_session_cache && ret == NULL && |
| 452 | !(s->session_ctx->session_cache_mode & | 452 | !(s->session_ctx->internal->session_cache_mode & |
| 453 | SSL_SESS_CACHE_NO_INTERNAL_LOOKUP)) { | 453 | SSL_SESS_CACHE_NO_INTERNAL_LOOKUP)) { |
| 454 | SSL_SESSION data; | 454 | SSL_SESSION data; |
| 455 | data.ssl_version = s->version; | 455 | data.ssl_version = s->version; |
| @@ -457,7 +457,7 @@ ssl_get_prev_session(SSL *s, unsigned char *session_id, int len, | |||
| 457 | memcpy(data.session_id, session_id, len); | 457 | memcpy(data.session_id, session_id, len); |
| 458 | 458 | ||
| 459 | CRYPTO_r_lock(CRYPTO_LOCK_SSL_CTX); | 459 | CRYPTO_r_lock(CRYPTO_LOCK_SSL_CTX); |
| 460 | ret = lh_SSL_SESSION_retrieve(s->session_ctx->sessions, &data); | 460 | ret = lh_SSL_SESSION_retrieve(s->session_ctx->internal->sessions, &data); |
| 461 | if (ret != NULL) { | 461 | if (ret != NULL) { |
| 462 | /* Don't allow other threads to steal it. */ | 462 | /* Don't allow other threads to steal it. */ |
| 463 | CRYPTO_add(&ret->references, 1, | 463 | CRYPTO_add(&ret->references, 1, |
| @@ -493,7 +493,7 @@ ssl_get_prev_session(SSL *s, unsigned char *session_id, int len, | |||
| 493 | * Add the externally cached session to the internal | 493 | * Add the externally cached session to the internal |
| 494 | * cache as well if and only if we are supposed to. | 494 | * cache as well if and only if we are supposed to. |
| 495 | */ | 495 | */ |
| 496 | if (!(s->session_ctx->session_cache_mode & | 496 | if (!(s->session_ctx->internal->session_cache_mode & |
| 497 | SSL_SESS_CACHE_NO_INTERNAL_STORE)) | 497 | SSL_SESS_CACHE_NO_INTERNAL_STORE)) |
| 498 | /* | 498 | /* |
| 499 | * The following should not return 1, | 499 | * The following should not return 1, |
| @@ -593,12 +593,12 @@ SSL_CTX_add_session(SSL_CTX *ctx, SSL_SESSION *c) | |||
| 593 | * later. | 593 | * later. |
| 594 | */ | 594 | */ |
| 595 | CRYPTO_w_lock(CRYPTO_LOCK_SSL_CTX); | 595 | CRYPTO_w_lock(CRYPTO_LOCK_SSL_CTX); |
| 596 | s = lh_SSL_SESSION_insert(ctx->sessions, c); | 596 | s = lh_SSL_SESSION_insert(ctx->internal->sessions, c); |
| 597 | 597 | ||
| 598 | /* | 598 | /* |
| 599 | * s != NULL iff we already had a session with the given PID. | 599 | * s != NULL iff we already had a session with the given PID. |
| 600 | * In this case, s == c should hold (then we did not really modify | 600 | * In this case, s == c should hold (then we did not really modify |
| 601 | * ctx->sessions), or we're in trouble. | 601 | * ctx->internal->sessions), or we're in trouble. |
| 602 | */ | 602 | */ |
| 603 | if (s != NULL && s != c) { | 603 | if (s != NULL && s != c) { |
| 604 | /* We *are* in trouble ... */ | 604 | /* We *are* in trouble ... */ |
| @@ -638,7 +638,7 @@ SSL_CTX_add_session(SSL_CTX *ctx, SSL_SESSION *c) | |||
| 638 | while (SSL_CTX_sess_number(ctx) > | 638 | while (SSL_CTX_sess_number(ctx) > |
| 639 | SSL_CTX_sess_get_cache_size(ctx)) { | 639 | SSL_CTX_sess_get_cache_size(ctx)) { |
| 640 | if (!remove_session_lock(ctx, | 640 | if (!remove_session_lock(ctx, |
| 641 | ctx->session_cache_tail, 0)) | 641 | ctx->internal->session_cache_tail, 0)) |
| 642 | break; | 642 | break; |
| 643 | else | 643 | else |
| 644 | ctx->internal->stats.sess_cache_full++; | 644 | ctx->internal->stats.sess_cache_full++; |
| @@ -664,9 +664,9 @@ remove_session_lock(SSL_CTX *ctx, SSL_SESSION *c, int lck) | |||
| 664 | if ((c != NULL) && (c->session_id_length != 0)) { | 664 | if ((c != NULL) && (c->session_id_length != 0)) { |
| 665 | if (lck) | 665 | if (lck) |
| 666 | CRYPTO_w_lock(CRYPTO_LOCK_SSL_CTX); | 666 | CRYPTO_w_lock(CRYPTO_LOCK_SSL_CTX); |
| 667 | if ((r = lh_SSL_SESSION_retrieve(ctx->sessions, c)) == c) { | 667 | if ((r = lh_SSL_SESSION_retrieve(ctx->internal->sessions, c)) == c) { |
| 668 | ret = 1; | 668 | ret = 1; |
| 669 | r = lh_SSL_SESSION_delete(ctx->sessions, c); | 669 | r = lh_SSL_SESSION_delete(ctx->internal->sessions, c); |
| 670 | SSL_SESSION_list_remove(ctx, c); | 670 | SSL_SESSION_list_remove(ctx, c); |
| 671 | } | 671 | } |
| 672 | if (lck) | 672 | if (lck) |
| @@ -934,7 +934,7 @@ SSL_CTX_flush_sessions(SSL_CTX *s, long t) | |||
| 934 | TIMEOUT_PARAM tp; | 934 | TIMEOUT_PARAM tp; |
| 935 | 935 | ||
| 936 | tp.ctx = s; | 936 | tp.ctx = s; |
| 937 | tp.cache = s->sessions; | 937 | tp.cache = s->internal->sessions; |
| 938 | if (tp.cache == NULL) | 938 | if (tp.cache == NULL) |
| 939 | return; | 939 | return; |
| 940 | tp.time = t; | 940 | tp.time = t; |
| @@ -965,23 +965,23 @@ SSL_SESSION_list_remove(SSL_CTX *ctx, SSL_SESSION *s) | |||
| 965 | if ((s->next == NULL) || (s->prev == NULL)) | 965 | if ((s->next == NULL) || (s->prev == NULL)) |
| 966 | return; | 966 | return; |
| 967 | 967 | ||
| 968 | if (s->next == (SSL_SESSION *)&(ctx->session_cache_tail)) { | 968 | if (s->next == (SSL_SESSION *)&(ctx->internal->session_cache_tail)) { |
| 969 | /* last element in list */ | 969 | /* last element in list */ |
| 970 | if (s->prev == (SSL_SESSION *)&(ctx->session_cache_head)) { | 970 | if (s->prev == (SSL_SESSION *)&(ctx->internal->session_cache_head)) { |
| 971 | /* only one element in list */ | 971 | /* only one element in list */ |
| 972 | ctx->session_cache_head = NULL; | 972 | ctx->internal->session_cache_head = NULL; |
| 973 | ctx->session_cache_tail = NULL; | 973 | ctx->internal->session_cache_tail = NULL; |
| 974 | } else { | 974 | } else { |
| 975 | ctx->session_cache_tail = s->prev; | 975 | ctx->internal->session_cache_tail = s->prev; |
| 976 | s->prev->next = | 976 | s->prev->next = |
| 977 | (SSL_SESSION *)&(ctx->session_cache_tail); | 977 | (SSL_SESSION *)&(ctx->internal->session_cache_tail); |
| 978 | } | 978 | } |
| 979 | } else { | 979 | } else { |
| 980 | if (s->prev == (SSL_SESSION *)&(ctx->session_cache_head)) { | 980 | if (s->prev == (SSL_SESSION *)&(ctx->internal->session_cache_head)) { |
| 981 | /* first element in list */ | 981 | /* first element in list */ |
| 982 | ctx->session_cache_head = s->next; | 982 | ctx->internal->session_cache_head = s->next; |
| 983 | s->next->prev = | 983 | s->next->prev = |
| 984 | (SSL_SESSION *)&(ctx->session_cache_head); | 984 | (SSL_SESSION *)&(ctx->internal->session_cache_head); |
| 985 | } else { | 985 | } else { |
| 986 | /* middle of list */ | 986 | /* middle of list */ |
| 987 | s->next->prev = s->prev; | 987 | s->next->prev = s->prev; |
| @@ -997,16 +997,16 @@ SSL_SESSION_list_add(SSL_CTX *ctx, SSL_SESSION *s) | |||
| 997 | if ((s->next != NULL) && (s->prev != NULL)) | 997 | if ((s->next != NULL) && (s->prev != NULL)) |
| 998 | SSL_SESSION_list_remove(ctx, s); | 998 | SSL_SESSION_list_remove(ctx, s); |
| 999 | 999 | ||
| 1000 | if (ctx->session_cache_head == NULL) { | 1000 | if (ctx->internal->session_cache_head == NULL) { |
| 1001 | ctx->session_cache_head = s; | 1001 | ctx->internal->session_cache_head = s; |
| 1002 | ctx->session_cache_tail = s; | 1002 | ctx->internal->session_cache_tail = s; |
| 1003 | s->prev = (SSL_SESSION *)&(ctx->session_cache_head); | 1003 | s->prev = (SSL_SESSION *)&(ctx->internal->session_cache_head); |
| 1004 | s->next = (SSL_SESSION *)&(ctx->session_cache_tail); | 1004 | s->next = (SSL_SESSION *)&(ctx->internal->session_cache_tail); |
| 1005 | } else { | 1005 | } else { |
| 1006 | s->next = ctx->session_cache_head; | 1006 | s->next = ctx->internal->session_cache_head; |
| 1007 | s->next->prev = s; | 1007 | s->next->prev = s; |
| 1008 | s->prev = (SSL_SESSION *)&(ctx->session_cache_head); | 1008 | s->prev = (SSL_SESSION *)&(ctx->internal->session_cache_head); |
| 1009 | ctx->session_cache_head = s; | 1009 | ctx->internal->session_cache_head = s; |
| 1010 | } | 1010 | } |
| 1011 | } | 1011 | } |
| 1012 | 1012 | ||
| @@ -1091,7 +1091,7 @@ SSL_CTX_set_client_cert_engine(SSL_CTX *ctx, ENGINE *e) | |||
| 1091 | ENGINE_finish(e); | 1091 | ENGINE_finish(e); |
| 1092 | return 0; | 1092 | return 0; |
| 1093 | } | 1093 | } |
| 1094 | ctx->client_cert_engine = e; | 1094 | ctx->internal->client_cert_engine = e; |
| 1095 | return 1; | 1095 | return 1; |
| 1096 | } | 1096 | } |
| 1097 | #endif | 1097 | #endif |
diff --git a/src/lib/libssl/t1_lib.c b/src/lib/libssl/t1_lib.c index b2d9883900..0dbd83fecf 100644 --- a/src/lib/libssl/t1_lib.c +++ b/src/lib/libssl/t1_lib.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: t1_lib.c,v 1.101 2017/01/23 04:55:27 beck Exp $ */ | 1 | /* $OpenBSD: t1_lib.c,v 1.102 2017/01/23 05:13:02 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 | * |
| @@ -2206,12 +2206,13 @@ tls_decrypt_ticket(SSL *s, const unsigned char *etick, int eticklen, | |||
| 2206 | renew_ticket = 1; | 2206 | renew_ticket = 1; |
| 2207 | } else { | 2207 | } else { |
| 2208 | /* Check key name matches */ | 2208 | /* Check key name matches */ |
| 2209 | if (timingsafe_memcmp(etick, tctx->tlsext_tick_key_name, 16)) | 2209 | if (timingsafe_memcmp(etick, |
| 2210 | tctx->internal->tlsext_tick_key_name, 16)) | ||
| 2210 | return 2; | 2211 | return 2; |
| 2211 | HMAC_Init_ex(&hctx, tctx->tlsext_tick_hmac_key, 16, | 2212 | HMAC_Init_ex(&hctx, tctx->internal->tlsext_tick_hmac_key, |
| 2212 | tlsext_tick_md(), NULL); | 2213 | 16, tlsext_tick_md(), NULL); |
| 2213 | EVP_DecryptInit_ex(&ctx, EVP_aes_128_cbc(), NULL, | 2214 | EVP_DecryptInit_ex(&ctx, EVP_aes_128_cbc(), NULL, |
| 2214 | tctx->tlsext_tick_aes_key, etick + 16); | 2215 | tctx->internal->tlsext_tick_aes_key, etick + 16); |
| 2215 | } | 2216 | } |
| 2216 | 2217 | ||
| 2217 | /* | 2218 | /* |
