diff options
-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 | /* |