diff options
author | jsing <> | 2017-01-23 04:15:28 +0000 |
---|---|---|
committer | jsing <> | 2017-01-23 04:15:28 +0000 |
commit | 0f157a9ac8d269cb234cff4f5cd07800027490ff (patch) | |
tree | d2bcfe381c02ccf528bdd3f18dcabbc4bec0aa3c /src/lib | |
parent | fdee32bae021d93d570e88a1dbbea0b3bad2c1e0 (diff) | |
download | openbsd-0f157a9ac8d269cb234cff4f5cd07800027490ff.tar.gz openbsd-0f157a9ac8d269cb234cff4f5cd07800027490ff.tar.bz2 openbsd-0f157a9ac8d269cb234cff4f5cd07800027490ff.zip |
Move callback function pointers and argument pointers from SSL_CTX to
internal.
ok beck@
Diffstat (limited to 'src/lib')
-rw-r--r-- | src/lib/libssl/d1_clnt.c | 6 | ||||
-rw-r--r-- | src/lib/libssl/d1_pkt.c | 10 | ||||
-rw-r--r-- | src/lib/libssl/d1_srvr.c | 12 | ||||
-rw-r--r-- | src/lib/libssl/s23_clnt.c | 10 | ||||
-rw-r--r-- | src/lib/libssl/s23_srvr.c | 6 | ||||
-rw-r--r-- | src/lib/libssl/s3_clnt.c | 15 | ||||
-rw-r--r-- | src/lib/libssl/s3_lib.c | 12 | ||||
-rw-r--r-- | src/lib/libssl/s3_pkt.c | 10 | ||||
-rw-r--r-- | src/lib/libssl/s3_srvr.c | 16 | ||||
-rw-r--r-- | src/lib/libssl/ssl.h | 59 | ||||
-rw-r--r-- | src/lib/libssl/ssl_cert.c | 7 | ||||
-rw-r--r-- | src/lib/libssl/ssl_lib.c | 70 | ||||
-rw-r--r-- | src/lib/libssl/ssl_locl.h | 61 | ||||
-rw-r--r-- | src/lib/libssl/ssl_rsa.c | 34 | ||||
-rw-r--r-- | src/lib/libssl/ssl_sess.c | 44 | ||||
-rw-r--r-- | src/lib/libssl/t1_lib.c | 38 |
16 files changed, 210 insertions, 200 deletions
diff --git a/src/lib/libssl/d1_clnt.c b/src/lib/libssl/d1_clnt.c index 71cd845ac6..127cda155c 100644 --- a/src/lib/libssl/d1_clnt.c +++ b/src/lib/libssl/d1_clnt.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: d1_clnt.c,v 1.63 2017/01/23 00:12:54 jsing Exp $ */ | 1 | /* $OpenBSD: d1_clnt.c,v 1.64 2017/01/23 04:15:28 jsing Exp $ */ |
2 | /* | 2 | /* |
3 | * DTLS implementation written by Nagendra Modadugu | 3 | * DTLS implementation written by Nagendra Modadugu |
4 | * (nagendra@cs.stanford.edu) for the OpenSSL project 2005. | 4 | * (nagendra@cs.stanford.edu) for the OpenSSL project 2005. |
@@ -190,8 +190,8 @@ dtls1_connect(SSL *s) | |||
190 | 190 | ||
191 | if (s->info_callback != NULL) | 191 | if (s->info_callback != NULL) |
192 | cb = s->info_callback; | 192 | cb = s->info_callback; |
193 | else if (s->ctx->info_callback != NULL) | 193 | else if (s->ctx->internal->info_callback != NULL) |
194 | cb = s->ctx->info_callback; | 194 | cb = s->ctx->internal->info_callback; |
195 | 195 | ||
196 | s->in_handshake++; | 196 | s->in_handshake++; |
197 | if (!SSL_in_init(s) || SSL_in_before(s)) | 197 | if (!SSL_in_init(s) || SSL_in_before(s)) |
diff --git a/src/lib/libssl/d1_pkt.c b/src/lib/libssl/d1_pkt.c index 315960b587..ef9bcaa786 100644 --- a/src/lib/libssl/d1_pkt.c +++ b/src/lib/libssl/d1_pkt.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: d1_pkt.c,v 1.51 2017/01/22 09:02:07 jsing Exp $ */ | 1 | /* $OpenBSD: d1_pkt.c,v 1.52 2017/01/23 04:15:28 jsing Exp $ */ |
2 | /* | 2 | /* |
3 | * DTLS implementation written by Nagendra Modadugu | 3 | * DTLS implementation written by Nagendra Modadugu |
4 | * (nagendra@cs.stanford.edu) for the OpenSSL project 2005. | 4 | * (nagendra@cs.stanford.edu) for the OpenSSL project 2005. |
@@ -928,8 +928,8 @@ start: | |||
928 | 928 | ||
929 | if (s->info_callback != NULL) | 929 | if (s->info_callback != NULL) |
930 | cb = s->info_callback; | 930 | cb = s->info_callback; |
931 | else if (s->ctx->info_callback != NULL) | 931 | else if (s->ctx->internal->info_callback != NULL) |
932 | cb = s->ctx->info_callback; | 932 | cb = s->ctx->internal->info_callback; |
933 | 933 | ||
934 | if (cb != NULL) { | 934 | if (cb != NULL) { |
935 | j = (alert_level << 8) | alert_descr; | 935 | j = (alert_level << 8) | alert_descr; |
@@ -1428,8 +1428,8 @@ dtls1_dispatch_alert(SSL *s) | |||
1428 | 1428 | ||
1429 | if (s->info_callback != NULL) | 1429 | if (s->info_callback != NULL) |
1430 | cb = s->info_callback; | 1430 | cb = s->info_callback; |
1431 | else if (s->ctx->info_callback != NULL) | 1431 | else if (s->ctx->internal->info_callback != NULL) |
1432 | cb = s->ctx->info_callback; | 1432 | cb = s->ctx->internal->info_callback; |
1433 | 1433 | ||
1434 | if (cb != NULL) { | 1434 | if (cb != NULL) { |
1435 | j = (s->s3->send_alert[0]<<8)|s->s3->send_alert[1]; | 1435 | j = (s->s3->send_alert[0]<<8)|s->s3->send_alert[1]; |
diff --git a/src/lib/libssl/d1_srvr.c b/src/lib/libssl/d1_srvr.c index 7cb1fdf3de..28a4442445 100644 --- a/src/lib/libssl/d1_srvr.c +++ b/src/lib/libssl/d1_srvr.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: d1_srvr.c,v 1.73 2017/01/23 00:12:54 jsing Exp $ */ | 1 | /* $OpenBSD: d1_srvr.c,v 1.74 2017/01/23 04:15:28 jsing Exp $ */ |
2 | /* | 2 | /* |
3 | * DTLS implementation written by Nagendra Modadugu | 3 | * DTLS implementation written by Nagendra Modadugu |
4 | * (nagendra@cs.stanford.edu) for the OpenSSL project 2005. | 4 | * (nagendra@cs.stanford.edu) for the OpenSSL project 2005. |
@@ -190,8 +190,8 @@ dtls1_accept(SSL *s) | |||
190 | 190 | ||
191 | if (s->info_callback != NULL) | 191 | if (s->info_callback != NULL) |
192 | cb = s->info_callback; | 192 | cb = s->info_callback; |
193 | else if (s->ctx->info_callback != NULL) | 193 | else if (s->ctx->internal->info_callback != NULL) |
194 | cb = s->ctx->info_callback; | 194 | cb = s->ctx->internal->info_callback; |
195 | 195 | ||
196 | listen = D1I(s)->listen; | 196 | listen = D1I(s)->listen; |
197 | 197 | ||
@@ -704,9 +704,9 @@ dtls1_send_hello_verify_request(SSL *s) | |||
704 | *(p++) = s->version >> 8; | 704 | *(p++) = s->version >> 8; |
705 | *(p++) = s->version & 0xFF; | 705 | *(p++) = s->version & 0xFF; |
706 | 706 | ||
707 | if (s->ctx->app_gen_cookie_cb == NULL || | 707 | if (s->ctx->internal->app_gen_cookie_cb == NULL || |
708 | s->ctx->app_gen_cookie_cb(s, D1I(s)->cookie, | 708 | s->ctx->internal->app_gen_cookie_cb(s, |
709 | &(D1I(s)->cookie_len)) == 0) { | 709 | D1I(s)->cookie, &(D1I(s)->cookie_len)) == 0) { |
710 | SSLerr(SSL_F_DTLS1_SEND_HELLO_VERIFY_REQUEST, | 710 | SSLerr(SSL_F_DTLS1_SEND_HELLO_VERIFY_REQUEST, |
711 | ERR_R_INTERNAL_ERROR); | 711 | ERR_R_INTERNAL_ERROR); |
712 | return 0; | 712 | return 0; |
diff --git a/src/lib/libssl/s23_clnt.c b/src/lib/libssl/s23_clnt.c index a7ad53fd98..56c1d53707 100644 --- a/src/lib/libssl/s23_clnt.c +++ b/src/lib/libssl/s23_clnt.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: s23_clnt.c,v 1.50 2017/01/23 00:12:54 jsing Exp $ */ | 1 | /* $OpenBSD: s23_clnt.c,v 1.51 2017/01/23 04:15:28 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 | * |
@@ -132,8 +132,8 @@ ssl23_connect(SSL *s) | |||
132 | 132 | ||
133 | if (s->info_callback != NULL) | 133 | if (s->info_callback != NULL) |
134 | cb = s->info_callback; | 134 | cb = s->info_callback; |
135 | else if (s->ctx->info_callback != NULL) | 135 | else if (s->ctx->internal->info_callback != NULL) |
136 | cb = s->ctx->info_callback; | 136 | cb = s->ctx->internal->info_callback; |
137 | 137 | ||
138 | s->in_handshake++; | 138 | s->in_handshake++; |
139 | if (!SSL_in_init(s) || SSL_in_before(s)) | 139 | if (!SSL_in_init(s) || SSL_in_before(s)) |
@@ -396,8 +396,8 @@ ssl23_get_server_hello(SSL *s) | |||
396 | 396 | ||
397 | if (s->info_callback != NULL) | 397 | if (s->info_callback != NULL) |
398 | cb = s->info_callback; | 398 | cb = s->info_callback; |
399 | else if (s->ctx->info_callback != NULL) | 399 | else if (s->ctx->internal->info_callback != NULL) |
400 | cb = s->ctx->info_callback; | 400 | cb = s->ctx->internal->info_callback; |
401 | 401 | ||
402 | i = p[5]; | 402 | i = p[5]; |
403 | if (cb != NULL) { | 403 | if (cb != NULL) { |
diff --git a/src/lib/libssl/s23_srvr.c b/src/lib/libssl/s23_srvr.c index e4cb633d06..88ff9bb9a8 100644 --- a/src/lib/libssl/s23_srvr.c +++ b/src/lib/libssl/s23_srvr.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: s23_srvr.c,v 1.51 2017/01/23 00:12:54 jsing Exp $ */ | 1 | /* $OpenBSD: s23_srvr.c,v 1.52 2017/01/23 04:15:28 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 | * |
@@ -131,8 +131,8 @@ ssl23_accept(SSL *s) | |||
131 | 131 | ||
132 | if (s->info_callback != NULL) | 132 | if (s->info_callback != NULL) |
133 | cb = s->info_callback; | 133 | cb = s->info_callback; |
134 | else if (s->ctx->info_callback != NULL) | 134 | else if (s->ctx->internal->info_callback != NULL) |
135 | cb = s->ctx->info_callback; | 135 | cb = s->ctx->internal->info_callback; |
136 | 136 | ||
137 | s->in_handshake++; | 137 | s->in_handshake++; |
138 | if (!SSL_in_init(s) || SSL_in_before(s)) | 138 | if (!SSL_in_init(s) || SSL_in_before(s)) |
diff --git a/src/lib/libssl/s3_clnt.c b/src/lib/libssl/s3_clnt.c index 2c272032b5..54833ded27 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.164 2017/01/23 01:22:08 jsing Exp $ */ | 1 | /* $OpenBSD: s3_clnt.c,v 1.165 2017/01/23 04:15:28 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 | * |
@@ -185,8 +185,8 @@ ssl3_connect(SSL *s) | |||
185 | 185 | ||
186 | if (s->info_callback != NULL) | 186 | if (s->info_callback != NULL) |
187 | cb = s->info_callback; | 187 | cb = s->info_callback; |
188 | else if (s->ctx->info_callback != NULL) | 188 | else if (s->ctx->internal->info_callback != NULL) |
189 | cb = s->ctx->info_callback; | 189 | cb = s->ctx->internal->info_callback; |
190 | 190 | ||
191 | s->in_handshake++; | 191 | s->in_handshake++; |
192 | if (!SSL_in_init(s) || SSL_in_before(s)) | 192 | if (!SSL_in_init(s) || SSL_in_before(s)) |
@@ -1886,9 +1886,10 @@ ssl3_get_cert_status(SSL *s) | |||
1886 | } | 1886 | } |
1887 | s->tlsext_ocsp_resplen = (int)stow_len; | 1887 | s->tlsext_ocsp_resplen = (int)stow_len; |
1888 | 1888 | ||
1889 | if (s->ctx->tlsext_status_cb) { | 1889 | if (s->ctx->internal->tlsext_status_cb) { |
1890 | int ret; | 1890 | int ret; |
1891 | ret = s->ctx->tlsext_status_cb(s, s->ctx->tlsext_status_arg); | 1891 | ret = s->ctx->internal->tlsext_status_cb(s, |
1892 | s->ctx->internal->tlsext_status_arg); | ||
1892 | if (ret == 0) { | 1893 | if (ret == 0) { |
1893 | al = SSL_AD_BAD_CERTIFICATE_STATUS_RESPONSE; | 1894 | al = SSL_AD_BAD_CERTIFICATE_STATUS_RESPONSE; |
1894 | SSLerr(SSL_F_SSL3_GET_CERT_STATUS, | 1895 | SSLerr(SSL_F_SSL3_GET_CERT_STATUS, |
@@ -2762,7 +2763,7 @@ ssl_do_client_cert_cb(SSL *s, X509 **px509, EVP_PKEY **ppkey) | |||
2762 | return (i); | 2763 | return (i); |
2763 | } | 2764 | } |
2764 | #endif | 2765 | #endif |
2765 | if (s->ctx->client_cert_cb) | 2766 | if (s->ctx->internal->client_cert_cb) |
2766 | i = s->ctx->client_cert_cb(s, px509, ppkey); | 2767 | i = s->ctx->internal->client_cert_cb(s, px509, ppkey); |
2767 | return (i); | 2768 | return (i); |
2768 | } | 2769 | } |
diff --git a/src/lib/libssl/s3_lib.c b/src/lib/libssl/s3_lib.c index ae2586912c..92f4c49aa8 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.121 2017/01/23 01:22:08 jsing Exp $ */ | 1 | /* $OpenBSD: s3_lib.c,v 1.122 2017/01/23 04:15:28 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 | * |
@@ -2265,7 +2265,7 @@ ssl3_ctx_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg) | |||
2265 | } | 2265 | } |
2266 | break; | 2266 | break; |
2267 | case SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG: | 2267 | case SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG: |
2268 | ctx->tlsext_servername_arg = parg; | 2268 | ctx->internal->tlsext_servername_arg = parg; |
2269 | break; | 2269 | break; |
2270 | case SSL_CTRL_SET_TLSEXT_TICKET_KEYS: | 2270 | case SSL_CTRL_SET_TLSEXT_TICKET_KEYS: |
2271 | case SSL_CTRL_GET_TLSEXT_TICKET_KEYS: | 2271 | case SSL_CTRL_GET_TLSEXT_TICKET_KEYS: |
@@ -2294,7 +2294,7 @@ ssl3_ctx_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg) | |||
2294 | } | 2294 | } |
2295 | 2295 | ||
2296 | case SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG: | 2296 | case SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG: |
2297 | ctx->tlsext_status_arg = parg; | 2297 | ctx->internal->tlsext_status_arg = parg; |
2298 | return 1; | 2298 | return 1; |
2299 | break; | 2299 | break; |
2300 | 2300 | ||
@@ -2346,16 +2346,16 @@ ssl3_ctx_callback_ctrl(SSL_CTX *ctx, int cmd, void (*fp)(void)) | |||
2346 | cert->ecdh_tmp_cb = (EC_KEY *(*)(SSL *, int, int))fp; | 2346 | cert->ecdh_tmp_cb = (EC_KEY *(*)(SSL *, int, int))fp; |
2347 | break; | 2347 | break; |
2348 | case SSL_CTRL_SET_TLSEXT_SERVERNAME_CB: | 2348 | case SSL_CTRL_SET_TLSEXT_SERVERNAME_CB: |
2349 | ctx->tlsext_servername_callback = | 2349 | ctx->internal->tlsext_servername_callback = |
2350 | (int (*)(SSL *, int *, void *))fp; | 2350 | (int (*)(SSL *, int *, void *))fp; |
2351 | break; | 2351 | break; |
2352 | 2352 | ||
2353 | case SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB: | 2353 | case SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB: |
2354 | ctx->tlsext_status_cb = (int (*)(SSL *, void *))fp; | 2354 | ctx->internal->tlsext_status_cb = (int (*)(SSL *, void *))fp; |
2355 | break; | 2355 | break; |
2356 | 2356 | ||
2357 | case SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB: | 2357 | case SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB: |
2358 | ctx->tlsext_ticket_key_cb = (int (*)(SSL *, unsigned char *, | 2358 | ctx->internal->tlsext_ticket_key_cb = (int (*)(SSL *, unsigned char *, |
2359 | unsigned char *, EVP_CIPHER_CTX *, HMAC_CTX *, int))fp; | 2359 | unsigned char *, EVP_CIPHER_CTX *, HMAC_CTX *, int))fp; |
2360 | break; | 2360 | break; |
2361 | 2361 | ||
diff --git a/src/lib/libssl/s3_pkt.c b/src/lib/libssl/s3_pkt.c index 857d35b5a8..a1d0ef9299 100644 --- a/src/lib/libssl/s3_pkt.c +++ b/src/lib/libssl/s3_pkt.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: s3_pkt.c,v 1.61 2017/01/22 09:02:07 jsing Exp $ */ | 1 | /* $OpenBSD: s3_pkt.c,v 1.62 2017/01/23 04:15:28 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 | * |
@@ -1115,8 +1115,8 @@ start: | |||
1115 | 1115 | ||
1116 | if (s->info_callback != NULL) | 1116 | if (s->info_callback != NULL) |
1117 | cb = s->info_callback; | 1117 | cb = s->info_callback; |
1118 | else if (s->ctx->info_callback != NULL) | 1118 | else if (s->ctx->internal->info_callback != NULL) |
1119 | cb = s->ctx->info_callback; | 1119 | cb = s->ctx->internal->info_callback; |
1120 | 1120 | ||
1121 | if (cb != NULL) { | 1121 | if (cb != NULL) { |
1122 | j = (alert_level << 8) | alert_descr; | 1122 | j = (alert_level << 8) | alert_descr; |
@@ -1397,8 +1397,8 @@ ssl3_dispatch_alert(SSL *s) | |||
1397 | 1397 | ||
1398 | if (s->info_callback != NULL) | 1398 | if (s->info_callback != NULL) |
1399 | cb = s->info_callback; | 1399 | cb = s->info_callback; |
1400 | else if (s->ctx->info_callback != NULL) | 1400 | else if (s->ctx->internal->info_callback != NULL) |
1401 | cb = s->ctx->info_callback; | 1401 | cb = s->ctx->internal->info_callback; |
1402 | 1402 | ||
1403 | if (cb != NULL) { | 1403 | if (cb != NULL) { |
1404 | j = (s->s3->send_alert[0]<<8)|s->s3->send_alert[1]; | 1404 | j = (s->s3->send_alert[0]<<8)|s->s3->send_alert[1]; |
diff --git a/src/lib/libssl/s3_srvr.c b/src/lib/libssl/s3_srvr.c index ebdb10cb91..3f53f27924 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.143 2017/01/23 01:22:08 jsing Exp $ */ | 1 | /* $OpenBSD: s3_srvr.c,v 1.144 2017/01/23 04:15:28 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 | * |
@@ -180,8 +180,8 @@ ssl3_accept(SSL *s) | |||
180 | 180 | ||
181 | if (s->info_callback != NULL) | 181 | if (s->info_callback != NULL) |
182 | cb = s->info_callback; | 182 | cb = s->info_callback; |
183 | else if (s->ctx->info_callback != NULL) | 183 | else if (s->ctx->internal->info_callback != NULL) |
184 | cb = s->ctx->info_callback; | 184 | cb = s->ctx->internal->info_callback; |
185 | 185 | ||
186 | /* init things to blank */ | 186 | /* init things to blank */ |
187 | s->in_handshake++; | 187 | s->in_handshake++; |
@@ -870,8 +870,8 @@ ssl3_get_client_hello(SSL *s) | |||
870 | cookie_len > 0) { | 870 | cookie_len > 0) { |
871 | memcpy(D1I(s)->rcvd_cookie, p, cookie_len); | 871 | memcpy(D1I(s)->rcvd_cookie, p, cookie_len); |
872 | 872 | ||
873 | if (s->ctx->app_verify_cookie_cb != NULL) { | 873 | if (s->ctx->internal->app_verify_cookie_cb != NULL) { |
874 | if (s->ctx->app_verify_cookie_cb(s, | 874 | if (s->ctx->internal->app_verify_cookie_cb(s, |
875 | D1I(s)->rcvd_cookie, cookie_len) == 0) { | 875 | D1I(s)->rcvd_cookie, cookie_len) == 0) { |
876 | al = SSL_AD_HANDSHAKE_FAILURE; | 876 | al = SSL_AD_HANDSHAKE_FAILURE; |
877 | SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO, | 877 | SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO, |
@@ -2742,9 +2742,9 @@ ssl3_send_newsession_ticket(SSL *s) | |||
2742 | * it does all the work otherwise use generated values | 2742 | * it does all the work otherwise use generated values |
2743 | * from parent ctx. | 2743 | * from parent ctx. |
2744 | */ | 2744 | */ |
2745 | if (tctx->tlsext_ticket_key_cb) { | 2745 | if (tctx->internal->tlsext_ticket_key_cb) { |
2746 | if (tctx->tlsext_ticket_key_cb(s, key_name, iv, &ctx, | 2746 | if (tctx->internal->tlsext_ticket_key_cb(s, |
2747 | &hctx, 1) < 0) { | 2747 | key_name, iv, &ctx, &hctx, 1) < 0) { |
2748 | EVP_CIPHER_CTX_cleanup(&ctx); | 2748 | EVP_CIPHER_CTX_cleanup(&ctx); |
2749 | goto err; | 2749 | goto err; |
2750 | } | 2750 | } |
diff --git a/src/lib/libssl/ssl.h b/src/lib/libssl/ssl.h index dce72d8c25..2d6a0e757d 100644 --- a/src/lib/libssl/ssl.h +++ b/src/lib/libssl/ssl.h | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ssl.h,v 1.109 2017/01/23 01:22:08 jsing Exp $ */ | 1 | /* $OpenBSD: ssl.h,v 1.110 2017/01/23 04:15:28 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 | * |
@@ -712,42 +712,8 @@ struct ssl_ctx_st { | |||
712 | * life easier to set things up */ | 712 | * life easier to set things up */ |
713 | long session_timeout; | 713 | long session_timeout; |
714 | 714 | ||
715 | /* If this callback is not null, it will be called each | ||
716 | * time a session id is added to the cache. If this function | ||
717 | * returns 1, it means that the callback will do a | ||
718 | * SSL_SESSION_free() when it has finished using it. Otherwise, | ||
719 | * on 0, it means the callback has finished with it. | ||
720 | * If remove_session_cb is not null, it will be called when | ||
721 | * a session-id is removed from the cache. After the call, | ||
722 | * OpenSSL will SSL_SESSION_free() it. */ | ||
723 | int (*new_session_cb)(struct ssl_st *ssl, SSL_SESSION *sess); | ||
724 | void (*remove_session_cb)(struct ssl_ctx_st *ctx, SSL_SESSION *sess); | ||
725 | SSL_SESSION *(*get_session_cb)(struct ssl_st *ssl, | ||
726 | unsigned char *data, int len, int *copy); | ||
727 | |||
728 | int references; | 715 | int references; |
729 | 716 | ||
730 | /* if defined, these override the X509_verify_cert() calls */ | ||
731 | int (*app_verify_callback)(X509_STORE_CTX *, void *); | ||
732 | void *app_verify_arg; | ||
733 | |||
734 | /* Default password callback. */ | ||
735 | pem_password_cb *default_passwd_callback; | ||
736 | |||
737 | /* Default password callback user data. */ | ||
738 | void *default_passwd_callback_userdata; | ||
739 | |||
740 | /* get client cert callback */ | ||
741 | int (*client_cert_cb)(SSL *ssl, X509 **x509, EVP_PKEY **pkey); | ||
742 | |||
743 | /* cookie generate callback */ | ||
744 | int (*app_gen_cookie_cb)(SSL *ssl, unsigned char *cookie, | ||
745 | unsigned int *cookie_len); | ||
746 | |||
747 | /* verify cookie callback */ | ||
748 | int (*app_verify_cookie_cb)(SSL *ssl, unsigned char *cookie, | ||
749 | unsigned int cookie_len); | ||
750 | |||
751 | CRYPTO_EX_DATA ex_data; | 717 | CRYPTO_EX_DATA ex_data; |
752 | 718 | ||
753 | const EVP_MD *md5; /* For SSLv3/TLSv1 'ssl3-md5' */ | 719 | const EVP_MD *md5; /* For SSLv3/TLSv1 'ssl3-md5' */ |
@@ -757,12 +723,9 @@ struct ssl_ctx_st { | |||
757 | 723 | ||
758 | /* Default values used when no per-SSL value is defined follow */ | 724 | /* Default values used when no per-SSL value is defined follow */ |
759 | 725 | ||
760 | void (*info_callback)(const SSL *ssl,int type,int val); /* used if SSL's info_callback is NULL */ | ||
761 | |||
762 | /* what we put in client cert requests */ | 726 | /* what we put in client cert requests */ |
763 | STACK_OF(X509_NAME) *client_CA; | 727 | STACK_OF(X509_NAME) *client_CA; |
764 | 728 | ||
765 | |||
766 | /* Default values to use in SSL structures follow (these are copied by SSL_new) */ | 729 | /* Default values to use in SSL structures follow (these are copied by SSL_new) */ |
767 | 730 | ||
768 | unsigned long options; | 731 | unsigned long options; |
@@ -772,18 +735,9 @@ struct ssl_ctx_st { | |||
772 | struct cert_st /* CERT */ *cert; | 735 | struct cert_st /* CERT */ *cert; |
773 | int read_ahead; | 736 | int read_ahead; |
774 | 737 | ||
775 | /* callback that allows applications to peek at protocol messages */ | ||
776 | void (*msg_callback)(int write_p, int version, int content_type, | ||
777 | const void *buf, size_t len, SSL *ssl, void *arg); | ||
778 | void *msg_callback_arg; | ||
779 | |||
780 | int verify_mode; | 738 | int verify_mode; |
781 | unsigned int sid_ctx_length; | 739 | unsigned int sid_ctx_length; |
782 | unsigned char sid_ctx[SSL_MAX_SID_CTX_LENGTH]; | 740 | unsigned char sid_ctx[SSL_MAX_SID_CTX_LENGTH]; |
783 | int (*default_verify_callback)(int ok,X509_STORE_CTX *ctx); /* called 'verify_callback' in the SSL */ | ||
784 | |||
785 | /* Default generate session ID callback. */ | ||
786 | GEN_SESSION_CB generate_session_id; | ||
787 | 741 | ||
788 | X509_VERIFY_PARAM *param; | 742 | X509_VERIFY_PARAM *param; |
789 | 743 | ||
@@ -801,21 +755,10 @@ struct ssl_ctx_st { | |||
801 | ENGINE *client_cert_engine; | 755 | ENGINE *client_cert_engine; |
802 | #endif | 756 | #endif |
803 | 757 | ||
804 | /* TLS extensions servername callback */ | ||
805 | int (*tlsext_servername_callback)(SSL*, int *, void *); | ||
806 | void *tlsext_servername_arg; | ||
807 | /* RFC 4507 session ticket keys */ | 758 | /* RFC 4507 session ticket keys */ |
808 | unsigned char tlsext_tick_key_name[16]; | 759 | unsigned char tlsext_tick_key_name[16]; |
809 | unsigned char tlsext_tick_hmac_key[16]; | 760 | unsigned char tlsext_tick_hmac_key[16]; |
810 | unsigned char tlsext_tick_aes_key[16]; | 761 | unsigned char tlsext_tick_aes_key[16]; |
811 | /* Callback to support customisation of ticket key setting */ | ||
812 | int (*tlsext_ticket_key_cb)(SSL *ssl, unsigned char *name, | ||
813 | unsigned char *iv, EVP_CIPHER_CTX *ectx, HMAC_CTX *hctx, int enc); | ||
814 | |||
815 | /* certificate status request info */ | ||
816 | /* Callback for status request */ | ||
817 | int (*tlsext_status_cb)(SSL *ssl, void *arg); | ||
818 | void *tlsext_status_arg; | ||
819 | 762 | ||
820 | /* SRTP profiles we are willing to do from RFC 5764 */ | 763 | /* SRTP profiles we are willing to do from RFC 5764 */ |
821 | STACK_OF(SRTP_PROTECTION_PROFILE) *srtp_profiles; | 764 | STACK_OF(SRTP_PROTECTION_PROFILE) *srtp_profiles; |
diff --git a/src/lib/libssl/ssl_cert.c b/src/lib/libssl/ssl_cert.c index d520a6d249..603deb4218 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.54 2017/01/22 09:02:07 jsing Exp $ */ | 1 | /* $OpenBSD: ssl_cert.c,v 1.55 2017/01/23 04:15:28 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 | * |
@@ -443,8 +443,9 @@ ssl_verify_cert_chain(SSL *s, STACK_OF(X509) *sk) | |||
443 | if (s->verify_callback) | 443 | if (s->verify_callback) |
444 | X509_STORE_CTX_set_verify_cb(&ctx, s->verify_callback); | 444 | X509_STORE_CTX_set_verify_cb(&ctx, s->verify_callback); |
445 | 445 | ||
446 | if (s->ctx->app_verify_callback != NULL) | 446 | if (s->ctx->internal->app_verify_callback != NULL) |
447 | ret = s->ctx->app_verify_callback(&ctx, s->ctx->app_verify_arg); | 447 | ret = s->ctx->internal->app_verify_callback(&ctx, |
448 | s->ctx->internal->app_verify_arg); | ||
448 | else | 449 | else |
449 | ret = X509_verify_cert(&ctx); | 450 | ret = X509_verify_cert(&ctx); |
450 | 451 | ||
diff --git a/src/lib/libssl/ssl_lib.c b/src/lib/libssl/ssl_lib.c index 1e529e85de..6e3e042fe6 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.131 2017/01/23 01:22:08 jsing Exp $ */ | 1 | /* $OpenBSD: ssl_lib.c,v 1.132 2017/01/23 04:15:28 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 | * |
@@ -307,14 +307,14 @@ SSL_new(SSL_CTX *ctx) | |||
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->read_ahead; |
310 | s->msg_callback = ctx->msg_callback; | 310 | s->msg_callback = ctx->internal->msg_callback; |
311 | s->msg_callback_arg = ctx->msg_callback_arg; | 311 | s->msg_callback_arg = ctx->internal->msg_callback_arg; |
312 | s->verify_mode = ctx->verify_mode; | 312 | s->verify_mode = ctx->verify_mode; |
313 | s->sid_ctx_length = ctx->sid_ctx_length; | 313 | s->sid_ctx_length = ctx->sid_ctx_length; |
314 | OPENSSL_assert(s->sid_ctx_length <= sizeof s->sid_ctx); | 314 | OPENSSL_assert(s->sid_ctx_length <= sizeof s->sid_ctx); |
315 | memcpy(&s->sid_ctx, &ctx->sid_ctx, sizeof(s->sid_ctx)); | 315 | memcpy(&s->sid_ctx, &ctx->sid_ctx, sizeof(s->sid_ctx)); |
316 | s->verify_callback = ctx->default_verify_callback; | 316 | s->verify_callback = ctx->internal->default_verify_callback; |
317 | s->generate_session_id = ctx->generate_session_id; | 317 | s->generate_session_id = ctx->internal->generate_session_id; |
318 | 318 | ||
319 | s->param = X509_VERIFY_PARAM_new(); | 319 | s->param = X509_VERIFY_PARAM_new(); |
320 | if (!s->param) | 320 | if (!s->param) |
@@ -406,7 +406,7 @@ int | |||
406 | SSL_CTX_set_generate_session_id(SSL_CTX *ctx, GEN_SESSION_CB cb) | 406 | SSL_CTX_set_generate_session_id(SSL_CTX *ctx, GEN_SESSION_CB cb) |
407 | { | 407 | { |
408 | CRYPTO_w_lock(CRYPTO_LOCK_SSL_CTX); | 408 | CRYPTO_w_lock(CRYPTO_LOCK_SSL_CTX); |
409 | ctx->generate_session_id = cb; | 409 | ctx->internal->generate_session_id = cb; |
410 | CRYPTO_w_unlock(CRYPTO_LOCK_SSL_CTX); | 410 | CRYPTO_w_unlock(CRYPTO_LOCK_SSL_CTX); |
411 | return (1); | 411 | return (1); |
412 | } | 412 | } |
@@ -758,7 +758,7 @@ SSL_CTX_get_verify_depth(const SSL_CTX *ctx) | |||
758 | 758 | ||
759 | int (*SSL_CTX_get_verify_callback(const SSL_CTX *ctx))(int, X509_STORE_CTX *) | 759 | int (*SSL_CTX_get_verify_callback(const SSL_CTX *ctx))(int, X509_STORE_CTX *) |
760 | { | 760 | { |
761 | return (ctx->default_verify_callback); | 761 | return (ctx->internal->default_verify_callback); |
762 | } | 762 | } |
763 | 763 | ||
764 | void | 764 | void |
@@ -1131,7 +1131,7 @@ SSL_CTX_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg) | |||
1131 | return (l); | 1131 | return (l); |
1132 | 1132 | ||
1133 | case SSL_CTRL_SET_MSG_CALLBACK_ARG: | 1133 | case SSL_CTRL_SET_MSG_CALLBACK_ARG: |
1134 | ctx->msg_callback_arg = parg; | 1134 | ctx->internal->msg_callback_arg = 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: |
@@ -1201,7 +1201,7 @@ SSL_CTX_callback_ctrl(SSL_CTX *ctx, int cmd, void (*fp)(void)) | |||
1201 | { | 1201 | { |
1202 | switch (cmd) { | 1202 | switch (cmd) { |
1203 | case SSL_CTRL_SET_MSG_CALLBACK: | 1203 | case SSL_CTRL_SET_MSG_CALLBACK: |
1204 | ctx->msg_callback = (void (*)(int write_p, int version, | 1204 | ctx->internal->msg_callback = (void (*)(int write_p, int version, |
1205 | int content_type, const void *buf, size_t len, SSL *ssl, | 1205 | int content_type, const void *buf, size_t len, SSL *ssl, |
1206 | void *arg))(fp); | 1206 | void *arg))(fp); |
1207 | return (1); | 1207 | return (1); |
@@ -1831,36 +1831,36 @@ SSL_CTX_new(const SSL_METHOD *meth) | |||
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(); |
1833 | 1833 | ||
1834 | ret->new_session_cb = 0; | 1834 | ret->internal->new_session_cb = 0; |
1835 | ret->remove_session_cb = 0; | 1835 | ret->internal->remove_session_cb = 0; |
1836 | ret->get_session_cb = 0; | 1836 | ret->internal->get_session_cb = 0; |
1837 | ret->generate_session_id = 0; | 1837 | ret->internal->generate_session_id = 0; |
1838 | 1838 | ||
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->quiet_shutdown = 0; |
1843 | 1843 | ||
1844 | ret->info_callback = NULL; | 1844 | ret->internal->info_callback = NULL; |
1845 | 1845 | ||
1846 | ret->app_verify_callback = 0; | 1846 | ret->internal->app_verify_callback = 0; |
1847 | ret->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->max_cert_list = SSL_MAX_CERT_LIST_DEFAULT; |
1850 | ret->read_ahead = 0; | 1850 | ret->read_ahead = 0; |
1851 | ret->msg_callback = 0; | 1851 | ret->internal->msg_callback = 0; |
1852 | ret->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->default_verify_callback = NULL; | 1855 | ret->internal->default_verify_callback = NULL; |
1856 | if ((ret->cert = ssl_cert_new()) == NULL) | 1856 | if ((ret->cert = ssl_cert_new()) == NULL) |
1857 | goto err; | 1857 | goto err; |
1858 | 1858 | ||
1859 | ret->default_passwd_callback = 0; | 1859 | ret->internal->default_passwd_callback = 0; |
1860 | ret->default_passwd_callback_userdata = NULL; | 1860 | ret->internal->default_passwd_callback_userdata = NULL; |
1861 | ret->client_cert_cb = 0; | 1861 | ret->internal->client_cert_cb = 0; |
1862 | ret->app_gen_cookie_cb = 0; | 1862 | ret->internal->app_gen_cookie_cb = 0; |
1863 | ret->app_verify_cookie_cb = 0; | 1863 | ret->internal->app_verify_cookie_cb = 0; |
1864 | 1864 | ||
1865 | ret->sessions = lh_SSL_SESSION_new(); | 1865 | ret->sessions = lh_SSL_SESSION_new(); |
1866 | if (ret->sessions == NULL) | 1866 | if (ret->sessions == NULL) |
@@ -1901,16 +1901,16 @@ SSL_CTX_new(const SSL_METHOD *meth) | |||
1901 | 1901 | ||
1902 | ret->max_send_fragment = SSL3_RT_MAX_PLAIN_LENGTH; | 1902 | ret->max_send_fragment = SSL3_RT_MAX_PLAIN_LENGTH; |
1903 | 1903 | ||
1904 | ret->tlsext_servername_callback = 0; | 1904 | ret->internal->tlsext_servername_callback = 0; |
1905 | ret->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->tlsext_tick_key_name, 16); |
1909 | arc4random_buf(ret->tlsext_tick_hmac_key, 16); | 1909 | arc4random_buf(ret->tlsext_tick_hmac_key, 16); |
1910 | arc4random_buf(ret->tlsext_tick_aes_key, 16); | 1910 | arc4random_buf(ret->tlsext_tick_aes_key, 16); |
1911 | 1911 | ||
1912 | ret->tlsext_status_cb = 0; | 1912 | ret->internal->tlsext_status_cb = 0; |
1913 | ret->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; |
@@ -2012,28 +2012,28 @@ SSL_CTX_free(SSL_CTX *a) | |||
2012 | void | 2012 | void |
2013 | SSL_CTX_set_default_passwd_cb(SSL_CTX *ctx, pem_password_cb *cb) | 2013 | SSL_CTX_set_default_passwd_cb(SSL_CTX *ctx, pem_password_cb *cb) |
2014 | { | 2014 | { |
2015 | ctx->default_passwd_callback = cb; | 2015 | ctx->internal->default_passwd_callback = cb; |
2016 | } | 2016 | } |
2017 | 2017 | ||
2018 | void | 2018 | void |
2019 | SSL_CTX_set_default_passwd_cb_userdata(SSL_CTX *ctx, void *u) | 2019 | SSL_CTX_set_default_passwd_cb_userdata(SSL_CTX *ctx, void *u) |
2020 | { | 2020 | { |
2021 | ctx->default_passwd_callback_userdata = u; | 2021 | ctx->internal->default_passwd_callback_userdata = u; |
2022 | } | 2022 | } |
2023 | 2023 | ||
2024 | void | 2024 | void |
2025 | SSL_CTX_set_cert_verify_callback(SSL_CTX *ctx, int (*cb)(X509_STORE_CTX *, | 2025 | SSL_CTX_set_cert_verify_callback(SSL_CTX *ctx, int (*cb)(X509_STORE_CTX *, |
2026 | void *), void *arg) | 2026 | void *), void *arg) |
2027 | { | 2027 | { |
2028 | ctx->app_verify_callback = cb; | 2028 | ctx->internal->app_verify_callback = cb; |
2029 | ctx->app_verify_arg = arg; | 2029 | ctx->internal->app_verify_arg = arg; |
2030 | } | 2030 | } |
2031 | 2031 | ||
2032 | void | 2032 | void |
2033 | SSL_CTX_set_verify(SSL_CTX *ctx, int mode, int (*cb)(int, X509_STORE_CTX *)) | 2033 | SSL_CTX_set_verify(SSL_CTX *ctx, int mode, int (*cb)(int, X509_STORE_CTX *)) |
2034 | { | 2034 | { |
2035 | ctx->verify_mode = mode; | 2035 | ctx->verify_mode = mode; |
2036 | ctx->default_verify_callback = cb; | 2036 | ctx->internal->default_verify_callback = cb; |
2037 | } | 2037 | } |
2038 | 2038 | ||
2039 | void | 2039 | void |
@@ -2275,9 +2275,9 @@ ssl_update_cache(SSL *s, int mode) | |||
2275 | i = s->session_ctx->session_cache_mode; | 2275 | i = s->session_ctx->session_cache_mode; |
2276 | if ((i & mode) && (!s->hit) && ((i & SSL_SESS_CACHE_NO_INTERNAL_STORE) | 2276 | if ((i & mode) && (!s->hit) && ((i & SSL_SESS_CACHE_NO_INTERNAL_STORE) |
2277 | || SSL_CTX_add_session(s->session_ctx, s->session)) | 2277 | || SSL_CTX_add_session(s->session_ctx, s->session)) |
2278 | && (s->session_ctx->new_session_cb != NULL)) { | 2278 | && (s->session_ctx->internal->new_session_cb != NULL)) { |
2279 | CRYPTO_add(&s->session->references, 1, CRYPTO_LOCK_SSL_SESSION); | 2279 | CRYPTO_add(&s->session->references, 1, CRYPTO_LOCK_SSL_SESSION); |
2280 | if (!s->session_ctx->new_session_cb(s, s->session)) | 2280 | if (!s->session_ctx->internal->new_session_cb(s, s->session)) |
2281 | SSL_SESSION_free(s->session); | 2281 | SSL_SESSION_free(s->session); |
2282 | } | 2282 | } |
2283 | 2283 | ||
diff --git a/src/lib/libssl/ssl_locl.h b/src/lib/libssl/ssl_locl.h index 2eace2567d..4d8659a493 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.153 2017/01/23 01:22:08 jsing Exp $ */ | 1 | /* $OpenBSD: ssl_locl.h,v 1.154 2017/01/23 04:15:28 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 | * |
@@ -392,6 +392,65 @@ typedef struct ssl_ctx_internal_st { | |||
392 | uint16_t min_version; | 392 | uint16_t min_version; |
393 | uint16_t max_version; | 393 | uint16_t max_version; |
394 | 394 | ||
395 | /* If this callback is not null, it will be called each | ||
396 | * time a session id is added to the cache. If this function | ||
397 | * returns 1, it means that the callback will do a | ||
398 | * SSL_SESSION_free() when it has finished using it. Otherwise, | ||
399 | * on 0, it means the callback has finished with it. | ||
400 | * If remove_session_cb is not null, it will be called when | ||
401 | * a session-id is removed from the cache. After the call, | ||
402 | * OpenSSL will SSL_SESSION_free() it. */ | ||
403 | int (*new_session_cb)(struct ssl_st *ssl, SSL_SESSION *sess); | ||
404 | void (*remove_session_cb)(struct ssl_ctx_st *ctx, SSL_SESSION *sess); | ||
405 | SSL_SESSION *(*get_session_cb)(struct ssl_st *ssl, | ||
406 | unsigned char *data, int len, int *copy); | ||
407 | |||
408 | /* if defined, these override the X509_verify_cert() calls */ | ||
409 | int (*app_verify_callback)(X509_STORE_CTX *, void *); | ||
410 | void *app_verify_arg; | ||
411 | |||
412 | /* Default password callback. */ | ||
413 | pem_password_cb *default_passwd_callback; | ||
414 | |||
415 | /* Default password callback user data. */ | ||
416 | void *default_passwd_callback_userdata; | ||
417 | |||
418 | /* get client cert callback */ | ||
419 | int (*client_cert_cb)(SSL *ssl, X509 **x509, EVP_PKEY **pkey); | ||
420 | |||
421 | /* cookie generate callback */ | ||
422 | int (*app_gen_cookie_cb)(SSL *ssl, unsigned char *cookie, | ||
423 | unsigned int *cookie_len); | ||
424 | |||
425 | /* verify cookie callback */ | ||
426 | int (*app_verify_cookie_cb)(SSL *ssl, unsigned char *cookie, | ||
427 | unsigned int cookie_len); | ||
428 | |||
429 | void (*info_callback)(const SSL *ssl,int type,int val); /* used if SSL's info_callback is NULL */ | ||
430 | |||
431 | /* callback that allows applications to peek at protocol messages */ | ||
432 | void (*msg_callback)(int write_p, int version, int content_type, | ||
433 | const void *buf, size_t len, SSL *ssl, void *arg); | ||
434 | void *msg_callback_arg; | ||
435 | |||
436 | int (*default_verify_callback)(int ok,X509_STORE_CTX *ctx); /* called 'verify_callback' in the SSL */ | ||
437 | |||
438 | /* Default generate session ID callback. */ | ||
439 | GEN_SESSION_CB generate_session_id; | ||
440 | |||
441 | /* TLS extensions servername callback */ | ||
442 | int (*tlsext_servername_callback)(SSL*, int *, void *); | ||
443 | void *tlsext_servername_arg; | ||
444 | |||
445 | /* Callback to support customisation of ticket key setting */ | ||
446 | int (*tlsext_ticket_key_cb)(SSL *ssl, unsigned char *name, | ||
447 | unsigned char *iv, EVP_CIPHER_CTX *ectx, HMAC_CTX *hctx, int enc); | ||
448 | |||
449 | /* certificate status request info */ | ||
450 | /* Callback for status request */ | ||
451 | int (*tlsext_status_cb)(SSL *ssl, void *arg); | ||
452 | void *tlsext_status_arg; | ||
453 | |||
395 | struct { | 454 | struct { |
396 | int sess_connect; /* SSL new conn - started */ | 455 | int sess_connect; /* SSL new conn - started */ |
397 | int sess_connect_renegotiate;/* SSL reneg - requested */ | 456 | int sess_connect_renegotiate;/* SSL reneg - requested */ |
diff --git a/src/lib/libssl/ssl_rsa.c b/src/lib/libssl/ssl_rsa.c index 7481524942..647cc4bfd8 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.21 2016/03/11 07:08:45 mmcc Exp $ */ | 1 | /* $OpenBSD: ssl_rsa.c,v 1.22 2017/01/23 04:15:28 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 | * |
@@ -108,8 +108,8 @@ SSL_use_certificate_file(SSL *ssl, const char *file, int type) | |||
108 | } else if (type == SSL_FILETYPE_PEM) { | 108 | } else if (type == SSL_FILETYPE_PEM) { |
109 | j = ERR_R_PEM_LIB; | 109 | j = ERR_R_PEM_LIB; |
110 | x = PEM_read_bio_X509(in, NULL, | 110 | x = PEM_read_bio_X509(in, NULL, |
111 | ssl->ctx->default_passwd_callback, | 111 | ssl->ctx->internal->default_passwd_callback, |
112 | ssl->ctx->default_passwd_callback_userdata); | 112 | ssl->ctx->internal->default_passwd_callback_userdata); |
113 | } else { | 113 | } else { |
114 | SSLerr(SSL_F_SSL_USE_CERTIFICATE_FILE, SSL_R_BAD_SSL_FILETYPE); | 114 | SSLerr(SSL_F_SSL_USE_CERTIFICATE_FILE, SSL_R_BAD_SSL_FILETYPE); |
115 | goto end; | 115 | goto end; |
@@ -236,8 +236,8 @@ SSL_use_RSAPrivateKey_file(SSL *ssl, const char *file, int type) | |||
236 | } else if (type == SSL_FILETYPE_PEM) { | 236 | } else if (type == SSL_FILETYPE_PEM) { |
237 | j = ERR_R_PEM_LIB; | 237 | j = ERR_R_PEM_LIB; |
238 | rsa = PEM_read_bio_RSAPrivateKey(in, NULL, | 238 | rsa = PEM_read_bio_RSAPrivateKey(in, NULL, |
239 | ssl->ctx->default_passwd_callback, | 239 | ssl->ctx->internal->default_passwd_callback, |
240 | ssl->ctx->default_passwd_callback_userdata); | 240 | ssl->ctx->internal->default_passwd_callback_userdata); |
241 | } else { | 241 | } else { |
242 | SSLerr(SSL_F_SSL_USE_RSAPRIVATEKEY_FILE, SSL_R_BAD_SSL_FILETYPE); | 242 | SSLerr(SSL_F_SSL_USE_RSAPRIVATEKEY_FILE, SSL_R_BAD_SSL_FILETYPE); |
243 | goto end; | 243 | goto end; |
@@ -308,8 +308,8 @@ SSL_use_PrivateKey_file(SSL *ssl, const char *file, int type) | |||
308 | if (type == SSL_FILETYPE_PEM) { | 308 | if (type == SSL_FILETYPE_PEM) { |
309 | j = ERR_R_PEM_LIB; | 309 | j = ERR_R_PEM_LIB; |
310 | pkey = PEM_read_bio_PrivateKey(in, NULL, | 310 | pkey = PEM_read_bio_PrivateKey(in, NULL, |
311 | ssl->ctx->default_passwd_callback, | 311 | ssl->ctx->internal->default_passwd_callback, |
312 | ssl->ctx->default_passwd_callback_userdata); | 312 | ssl->ctx->internal->default_passwd_callback_userdata); |
313 | } else if (type == SSL_FILETYPE_ASN1) { | 313 | } else if (type == SSL_FILETYPE_ASN1) { |
314 | j = ERR_R_ASN1_LIB; | 314 | j = ERR_R_ASN1_LIB; |
315 | pkey = d2i_PrivateKey_bio(in, NULL); | 315 | pkey = d2i_PrivateKey_bio(in, NULL); |
@@ -440,8 +440,8 @@ SSL_CTX_use_certificate_file(SSL_CTX *ctx, const char *file, int type) | |||
440 | x = d2i_X509_bio(in, NULL); | 440 | x = d2i_X509_bio(in, NULL); |
441 | } else if (type == SSL_FILETYPE_PEM) { | 441 | } else if (type == SSL_FILETYPE_PEM) { |
442 | j = ERR_R_PEM_LIB; | 442 | j = ERR_R_PEM_LIB; |
443 | x = PEM_read_bio_X509(in, NULL, ctx->default_passwd_callback, | 443 | x = PEM_read_bio_X509(in, NULL, ctx->internal->default_passwd_callback, |
444 | ctx->default_passwd_callback_userdata); | 444 | ctx->internal->default_passwd_callback_userdata); |
445 | } else { | 445 | } else { |
446 | SSLerr(SSL_F_SSL_CTX_USE_CERTIFICATE_FILE, SSL_R_BAD_SSL_FILETYPE); | 446 | SSLerr(SSL_F_SSL_CTX_USE_CERTIFICATE_FILE, SSL_R_BAD_SSL_FILETYPE); |
447 | goto end; | 447 | goto end; |
@@ -526,8 +526,8 @@ SSL_CTX_use_RSAPrivateKey_file(SSL_CTX *ctx, const char *file, int type) | |||
526 | } else if (type == SSL_FILETYPE_PEM) { | 526 | } else if (type == SSL_FILETYPE_PEM) { |
527 | j = ERR_R_PEM_LIB; | 527 | j = ERR_R_PEM_LIB; |
528 | rsa = PEM_read_bio_RSAPrivateKey(in, NULL, | 528 | rsa = PEM_read_bio_RSAPrivateKey(in, NULL, |
529 | ctx->default_passwd_callback, | 529 | ctx->internal->default_passwd_callback, |
530 | ctx->default_passwd_callback_userdata); | 530 | ctx->internal->default_passwd_callback_userdata); |
531 | } else { | 531 | } else { |
532 | SSLerr(SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_FILE, SSL_R_BAD_SSL_FILETYPE); | 532 | SSLerr(SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_FILE, SSL_R_BAD_SSL_FILETYPE); |
533 | goto end; | 533 | goto end; |
@@ -596,8 +596,8 @@ SSL_CTX_use_PrivateKey_file(SSL_CTX *ctx, const char *file, int type) | |||
596 | if (type == SSL_FILETYPE_PEM) { | 596 | if (type == SSL_FILETYPE_PEM) { |
597 | j = ERR_R_PEM_LIB; | 597 | j = ERR_R_PEM_LIB; |
598 | pkey = PEM_read_bio_PrivateKey(in, NULL, | 598 | pkey = PEM_read_bio_PrivateKey(in, NULL, |
599 | ctx->default_passwd_callback, | 599 | ctx->internal->default_passwd_callback, |
600 | ctx->default_passwd_callback_userdata); | 600 | ctx->internal->default_passwd_callback_userdata); |
601 | } else if (type == SSL_FILETYPE_ASN1) { | 601 | } else if (type == SSL_FILETYPE_ASN1) { |
602 | j = ERR_R_ASN1_LIB; | 602 | j = ERR_R_ASN1_LIB; |
603 | pkey = d2i_PrivateKey_bio(in, NULL); | 603 | pkey = d2i_PrivateKey_bio(in, NULL); |
@@ -650,8 +650,8 @@ ssl_ctx_use_certificate_chain_bio(SSL_CTX *ctx, BIO *in) | |||
650 | 650 | ||
651 | ERR_clear_error(); /* clear error stack for SSL_CTX_use_certificate() */ | 651 | ERR_clear_error(); /* clear error stack for SSL_CTX_use_certificate() */ |
652 | 652 | ||
653 | x = PEM_read_bio_X509_AUX(in, NULL, ctx->default_passwd_callback, | 653 | x = PEM_read_bio_X509_AUX(in, NULL, ctx->internal->default_passwd_callback, |
654 | ctx->default_passwd_callback_userdata); | 654 | ctx->internal->default_passwd_callback_userdata); |
655 | if (x == NULL) { | 655 | if (x == NULL) { |
656 | SSLerr(SSL_F_SSL_CTX_USE_CERTIFICATE_CHAIN_FILE, ERR_R_PEM_LIB); | 656 | SSLerr(SSL_F_SSL_CTX_USE_CERTIFICATE_CHAIN_FILE, ERR_R_PEM_LIB); |
657 | goto end; | 657 | goto end; |
@@ -677,8 +677,8 @@ ssl_ctx_use_certificate_chain_bio(SSL_CTX *ctx, BIO *in) | |||
677 | } | 677 | } |
678 | 678 | ||
679 | while ((ca = PEM_read_bio_X509(in, NULL, | 679 | while ((ca = PEM_read_bio_X509(in, NULL, |
680 | ctx->default_passwd_callback, | 680 | ctx->internal->default_passwd_callback, |
681 | ctx->default_passwd_callback_userdata)) != NULL) { | 681 | ctx->internal->default_passwd_callback_userdata)) != NULL) { |
682 | r = SSL_CTX_add_extra_chain_cert(ctx, ca); | 682 | r = SSL_CTX_add_extra_chain_cert(ctx, ca); |
683 | if (!r) { | 683 | if (!r) { |
684 | X509_free(ca); | 684 | X509_free(ca); |
diff --git a/src/lib/libssl/ssl_sess.c b/src/lib/libssl/ssl_sess.c index 2520843cc0..8700e851c6 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.57 2017/01/23 01:22:08 jsing Exp $ */ | 1 | /* $OpenBSD: ssl_sess.c,v 1.58 2017/01/23 04:15:28 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 | * |
@@ -328,8 +328,8 @@ ssl_get_new_session(SSL *s, int session) | |||
328 | CRYPTO_r_lock(CRYPTO_LOCK_SSL_CTX); | 328 | CRYPTO_r_lock(CRYPTO_LOCK_SSL_CTX); |
329 | if (s->generate_session_id) | 329 | if (s->generate_session_id) |
330 | cb = s->generate_session_id; | 330 | cb = s->generate_session_id; |
331 | else if (s->session_ctx->generate_session_id) | 331 | else if (s->session_ctx->internal->generate_session_id) |
332 | cb = s->session_ctx->generate_session_id; | 332 | cb = s->session_ctx->internal->generate_session_id; |
333 | CRYPTO_r_unlock(CRYPTO_LOCK_SSL_CTX); | 333 | CRYPTO_r_unlock(CRYPTO_LOCK_SSL_CTX); |
334 | 334 | ||
335 | /* Choose a session ID. */ | 335 | /* Choose a session ID. */ |
@@ -470,11 +470,11 @@ ssl_get_prev_session(SSL *s, unsigned char *session_id, int len, | |||
470 | } | 470 | } |
471 | 471 | ||
472 | if (try_session_cache && ret == NULL && | 472 | if (try_session_cache && ret == NULL && |
473 | s->session_ctx->get_session_cb != NULL) { | 473 | s->session_ctx->internal->get_session_cb != NULL) { |
474 | int copy = 1; | 474 | int copy = 1; |
475 | 475 | ||
476 | if ((ret = s->session_ctx->get_session_cb(s, session_id, | 476 | if ((ret = s->session_ctx->internal->get_session_cb(s, |
477 | len, ©))) { | 477 | session_id, len, ©))) { |
478 | s->session_ctx->internal->stats.sess_cb_hit++; | 478 | s->session_ctx->internal->stats.sess_cb_hit++; |
479 | 479 | ||
480 | /* | 480 | /* |
@@ -674,8 +674,8 @@ remove_session_lock(SSL_CTX *ctx, SSL_SESSION *c, int lck) | |||
674 | 674 | ||
675 | if (ret) { | 675 | if (ret) { |
676 | r->internal->not_resumable = 1; | 676 | r->internal->not_resumable = 1; |
677 | if (ctx->remove_session_cb != NULL) | 677 | if (ctx->internal->remove_session_cb != NULL) |
678 | ctx->remove_session_cb(ctx, r); | 678 | ctx->internal->remove_session_cb(ctx, r); |
679 | SSL_SESSION_free(r); | 679 | SSL_SESSION_free(r); |
680 | } | 680 | } |
681 | } else | 681 | } else |
@@ -911,8 +911,8 @@ timeout_doall_arg(SSL_SESSION *s, TIMEOUT_PARAM *p) | |||
911 | (void)lh_SSL_SESSION_delete(p->cache, s); | 911 | (void)lh_SSL_SESSION_delete(p->cache, s); |
912 | SSL_SESSION_list_remove(p->ctx, s); | 912 | SSL_SESSION_list_remove(p->ctx, s); |
913 | s->internal->not_resumable = 1; | 913 | s->internal->not_resumable = 1; |
914 | if (p->ctx->remove_session_cb != NULL) | 914 | if (p->ctx->internal->remove_session_cb != NULL) |
915 | p->ctx->remove_session_cb(p->ctx, s); | 915 | p->ctx->internal->remove_session_cb(p->ctx, s); |
916 | SSL_SESSION_free(s); | 916 | SSL_SESSION_free(s); |
917 | } | 917 | } |
918 | } | 918 | } |
@@ -1013,67 +1013,67 @@ SSL_SESSION_list_add(SSL_CTX *ctx, SSL_SESSION *s) | |||
1013 | void | 1013 | void |
1014 | SSL_CTX_sess_set_new_cb(SSL_CTX *ctx, | 1014 | SSL_CTX_sess_set_new_cb(SSL_CTX *ctx, |
1015 | int (*cb)(struct ssl_st *ssl, SSL_SESSION *sess)) { | 1015 | int (*cb)(struct ssl_st *ssl, SSL_SESSION *sess)) { |
1016 | ctx->new_session_cb = cb; | 1016 | ctx->internal->new_session_cb = cb; |
1017 | } | 1017 | } |
1018 | 1018 | ||
1019 | int | 1019 | int |
1020 | (*SSL_CTX_sess_get_new_cb(SSL_CTX *ctx))(SSL *ssl, SSL_SESSION *sess) | 1020 | (*SSL_CTX_sess_get_new_cb(SSL_CTX *ctx))(SSL *ssl, SSL_SESSION *sess) |
1021 | { | 1021 | { |
1022 | return ctx->new_session_cb; | 1022 | return ctx->internal->new_session_cb; |
1023 | } | 1023 | } |
1024 | 1024 | ||
1025 | void | 1025 | void |
1026 | SSL_CTX_sess_set_remove_cb(SSL_CTX *ctx, | 1026 | SSL_CTX_sess_set_remove_cb(SSL_CTX *ctx, |
1027 | void (*cb)(SSL_CTX *ctx, SSL_SESSION *sess)) | 1027 | void (*cb)(SSL_CTX *ctx, SSL_SESSION *sess)) |
1028 | { | 1028 | { |
1029 | ctx->remove_session_cb = cb; | 1029 | ctx->internal->remove_session_cb = cb; |
1030 | } | 1030 | } |
1031 | 1031 | ||
1032 | void | 1032 | void |
1033 | (*SSL_CTX_sess_get_remove_cb(SSL_CTX *ctx))(SSL_CTX * ctx, SSL_SESSION *sess) | 1033 | (*SSL_CTX_sess_get_remove_cb(SSL_CTX *ctx))(SSL_CTX * ctx, SSL_SESSION *sess) |
1034 | { | 1034 | { |
1035 | return ctx->remove_session_cb; | 1035 | return ctx->internal->remove_session_cb; |
1036 | } | 1036 | } |
1037 | 1037 | ||
1038 | void | 1038 | void |
1039 | SSL_CTX_sess_set_get_cb(SSL_CTX *ctx, SSL_SESSION *(*cb)(struct ssl_st *ssl, | 1039 | SSL_CTX_sess_set_get_cb(SSL_CTX *ctx, SSL_SESSION *(*cb)(struct ssl_st *ssl, |
1040 | unsigned char *data, int len, int *copy)) | 1040 | unsigned char *data, int len, int *copy)) |
1041 | { | 1041 | { |
1042 | ctx->get_session_cb = cb; | 1042 | ctx->internal->get_session_cb = cb; |
1043 | } | 1043 | } |
1044 | 1044 | ||
1045 | SSL_SESSION * | 1045 | SSL_SESSION * |
1046 | (*SSL_CTX_sess_get_get_cb(SSL_CTX *ctx))(SSL *ssl, unsigned char *data, | 1046 | (*SSL_CTX_sess_get_get_cb(SSL_CTX *ctx))(SSL *ssl, unsigned char *data, |
1047 | int len, int *copy) | 1047 | int len, int *copy) |
1048 | { | 1048 | { |
1049 | return ctx->get_session_cb; | 1049 | return ctx->internal->get_session_cb; |
1050 | } | 1050 | } |
1051 | 1051 | ||
1052 | void | 1052 | void |
1053 | SSL_CTX_set_info_callback(SSL_CTX *ctx, | 1053 | SSL_CTX_set_info_callback(SSL_CTX *ctx, |
1054 | void (*cb)(const SSL *ssl, int type, int val)) | 1054 | void (*cb)(const SSL *ssl, int type, int val)) |
1055 | { | 1055 | { |
1056 | ctx->info_callback = cb; | 1056 | ctx->internal->info_callback = cb; |
1057 | } | 1057 | } |
1058 | 1058 | ||
1059 | void | 1059 | void |
1060 | (*SSL_CTX_get_info_callback(SSL_CTX *ctx))(const SSL *ssl, int type, int val) | 1060 | (*SSL_CTX_get_info_callback(SSL_CTX *ctx))(const SSL *ssl, int type, int val) |
1061 | { | 1061 | { |
1062 | return ctx->info_callback; | 1062 | return ctx->internal->info_callback; |
1063 | } | 1063 | } |
1064 | 1064 | ||
1065 | void | 1065 | void |
1066 | SSL_CTX_set_client_cert_cb(SSL_CTX *ctx, | 1066 | SSL_CTX_set_client_cert_cb(SSL_CTX *ctx, |
1067 | int (*cb)(SSL *ssl, X509 **x509, EVP_PKEY **pkey)) | 1067 | int (*cb)(SSL *ssl, X509 **x509, EVP_PKEY **pkey)) |
1068 | { | 1068 | { |
1069 | ctx->client_cert_cb = cb; | 1069 | ctx->internal->client_cert_cb = cb; |
1070 | } | 1070 | } |
1071 | 1071 | ||
1072 | int | 1072 | int |
1073 | (*SSL_CTX_get_client_cert_cb(SSL_CTX *ctx))(SSL * ssl, X509 ** x509, | 1073 | (*SSL_CTX_get_client_cert_cb(SSL_CTX *ctx))(SSL * ssl, X509 ** x509, |
1074 | EVP_PKEY **pkey) | 1074 | EVP_PKEY **pkey) |
1075 | { | 1075 | { |
1076 | return ctx->client_cert_cb; | 1076 | return ctx->internal->client_cert_cb; |
1077 | } | 1077 | } |
1078 | 1078 | ||
1079 | #ifndef OPENSSL_NO_ENGINE | 1079 | #ifndef OPENSSL_NO_ENGINE |
@@ -1100,14 +1100,14 @@ void | |||
1100 | SSL_CTX_set_cookie_generate_cb(SSL_CTX *ctx, | 1100 | SSL_CTX_set_cookie_generate_cb(SSL_CTX *ctx, |
1101 | int (*cb)(SSL *ssl, unsigned char *cookie, unsigned int *cookie_len)) | 1101 | int (*cb)(SSL *ssl, unsigned char *cookie, unsigned int *cookie_len)) |
1102 | { | 1102 | { |
1103 | ctx->app_gen_cookie_cb = cb; | 1103 | ctx->internal->app_gen_cookie_cb = cb; |
1104 | } | 1104 | } |
1105 | 1105 | ||
1106 | void | 1106 | void |
1107 | SSL_CTX_set_cookie_verify_cb(SSL_CTX *ctx, | 1107 | SSL_CTX_set_cookie_verify_cb(SSL_CTX *ctx, |
1108 | int (*cb)(SSL *ssl, unsigned char *cookie, unsigned int cookie_len)) | 1108 | int (*cb)(SSL *ssl, unsigned char *cookie, unsigned int cookie_len)) |
1109 | { | 1109 | { |
1110 | ctx->app_verify_cookie_cb = cb; | 1110 | ctx->internal->app_verify_cookie_cb = cb; |
1111 | } | 1111 | } |
1112 | 1112 | ||
1113 | int | 1113 | int |
diff --git a/src/lib/libssl/t1_lib.c b/src/lib/libssl/t1_lib.c index d1d20b6bda..08818f4870 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.99 2017/01/22 09:02:07 jsing Exp $ */ | 1 | /* $OpenBSD: t1_lib.c,v 1.100 2017/01/23 04:15:28 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 | * |
@@ -1859,10 +1859,12 @@ ssl_check_clienthello_tlsext_early(SSL *s) | |||
1859 | * ssl3_choose_cipher in s3_lib.c. | 1859 | * ssl3_choose_cipher in s3_lib.c. |
1860 | */ | 1860 | */ |
1861 | 1861 | ||
1862 | if (s->ctx != NULL && s->ctx->tlsext_servername_callback != 0) | 1862 | if (s->ctx != NULL && s->ctx->internal->tlsext_servername_callback != 0) |
1863 | ret = s->ctx->tlsext_servername_callback(s, &al, s->ctx->tlsext_servername_arg); | 1863 | ret = s->ctx->internal->tlsext_servername_callback(s, &al, |
1864 | else if (s->initial_ctx != NULL && s->initial_ctx->tlsext_servername_callback != 0) | 1864 | s->ctx->internal->tlsext_servername_arg); |
1865 | ret = s->initial_ctx->tlsext_servername_callback(s, &al, s->initial_ctx->tlsext_servername_arg); | 1865 | else if (s->initial_ctx != NULL && s->initial_ctx->internal->tlsext_servername_callback != 0) |
1866 | ret = s->initial_ctx->internal->tlsext_servername_callback(s, &al, | ||
1867 | s->initial_ctx->internal->tlsext_servername_arg); | ||
1866 | 1868 | ||
1867 | switch (ret) { | 1869 | switch (ret) { |
1868 | case SSL_TLSEXT_ERR_ALERT_FATAL: | 1870 | case SSL_TLSEXT_ERR_ALERT_FATAL: |
@@ -1890,7 +1892,7 @@ ssl_check_clienthello_tlsext_late(SSL *s) | |||
1890 | * has been chosen because this may influence which certificate is sent | 1892 | * has been chosen because this may influence which certificate is sent |
1891 | */ | 1893 | */ |
1892 | if ((s->tlsext_status_type != -1) && | 1894 | if ((s->tlsext_status_type != -1) && |
1893 | s->ctx && s->ctx->tlsext_status_cb) { | 1895 | s->ctx && s->ctx->internal->tlsext_status_cb) { |
1894 | int r; | 1896 | int r; |
1895 | CERT_PKEY *certpkey; | 1897 | CERT_PKEY *certpkey; |
1896 | certpkey = ssl_get_server_send_pkey(s); | 1898 | certpkey = ssl_get_server_send_pkey(s); |
@@ -1903,7 +1905,8 @@ ssl_check_clienthello_tlsext_late(SSL *s) | |||
1903 | * SSL_get_certificate et al can pick it up. | 1905 | * SSL_get_certificate et al can pick it up. |
1904 | */ | 1906 | */ |
1905 | s->cert->key = certpkey; | 1907 | s->cert->key = certpkey; |
1906 | r = s->ctx->tlsext_status_cb(s, s->ctx->tlsext_status_arg); | 1908 | r = s->ctx->internal->tlsext_status_cb(s, |
1909 | s->ctx->internal->tlsext_status_arg); | ||
1907 | switch (r) { | 1910 | switch (r) { |
1908 | /* We don't want to send a status request response */ | 1911 | /* We don't want to send a status request response */ |
1909 | case SSL_TLSEXT_ERR_NOACK: | 1912 | case SSL_TLSEXT_ERR_NOACK: |
@@ -1973,16 +1976,18 @@ ssl_check_serverhello_tlsext(SSL *s) | |||
1973 | } | 1976 | } |
1974 | ret = SSL_TLSEXT_ERR_OK; | 1977 | ret = SSL_TLSEXT_ERR_OK; |
1975 | 1978 | ||
1976 | if (s->ctx != NULL && s->ctx->tlsext_servername_callback != 0) | 1979 | if (s->ctx != NULL && s->ctx->internal->tlsext_servername_callback != 0) |
1977 | ret = s->ctx->tlsext_servername_callback(s, &al, s->ctx->tlsext_servername_arg); | 1980 | ret = s->ctx->internal->tlsext_servername_callback(s, &al, |
1978 | else if (s->initial_ctx != NULL && s->initial_ctx->tlsext_servername_callback != 0) | 1981 | s->ctx->internal->tlsext_servername_arg); |
1979 | ret = s->initial_ctx->tlsext_servername_callback(s, &al, s->initial_ctx->tlsext_servername_arg); | 1982 | else if (s->initial_ctx != NULL && s->initial_ctx->internal->tlsext_servername_callback != 0) |
1983 | ret = s->initial_ctx->internal->tlsext_servername_callback(s, &al, | ||
1984 | s->initial_ctx->internal->tlsext_servername_arg); | ||
1980 | 1985 | ||
1981 | /* If we've requested certificate status and we wont get one | 1986 | /* If we've requested certificate status and we wont get one |
1982 | * tell the callback | 1987 | * tell the callback |
1983 | */ | 1988 | */ |
1984 | if ((s->tlsext_status_type != -1) && !(s->tlsext_status_expected) && | 1989 | if ((s->tlsext_status_type != -1) && !(s->tlsext_status_expected) && |
1985 | s->ctx && s->ctx->tlsext_status_cb) { | 1990 | s->ctx && s->ctx->internal->tlsext_status_cb) { |
1986 | int r; | 1991 | int r; |
1987 | /* Set resp to NULL, resplen to -1 so callback knows | 1992 | /* Set resp to NULL, resplen to -1 so callback knows |
1988 | * there is no response. | 1993 | * there is no response. |
@@ -1990,7 +1995,8 @@ ssl_check_serverhello_tlsext(SSL *s) | |||
1990 | free(s->tlsext_ocsp_resp); | 1995 | free(s->tlsext_ocsp_resp); |
1991 | s->tlsext_ocsp_resp = NULL; | 1996 | s->tlsext_ocsp_resp = NULL; |
1992 | s->tlsext_ocsp_resplen = -1; | 1997 | s->tlsext_ocsp_resplen = -1; |
1993 | r = s->ctx->tlsext_status_cb(s, s->ctx->tlsext_status_arg); | 1998 | r = s->ctx->internal->tlsext_status_cb(s, |
1999 | s->ctx->internal->tlsext_status_arg); | ||
1994 | if (r == 0) { | 2000 | if (r == 0) { |
1995 | al = SSL_AD_BAD_CERTIFICATE_STATUS_RESPONSE; | 2001 | al = SSL_AD_BAD_CERTIFICATE_STATUS_RESPONSE; |
1996 | ret = SSL_TLSEXT_ERR_ALERT_FATAL; | 2002 | ret = SSL_TLSEXT_ERR_ALERT_FATAL; |
@@ -2182,10 +2188,10 @@ tls_decrypt_ticket(SSL *s, const unsigned char *etick, int eticklen, | |||
2182 | /* Initialize session ticket encryption and HMAC contexts */ | 2188 | /* Initialize session ticket encryption and HMAC contexts */ |
2183 | HMAC_CTX_init(&hctx); | 2189 | HMAC_CTX_init(&hctx); |
2184 | EVP_CIPHER_CTX_init(&ctx); | 2190 | EVP_CIPHER_CTX_init(&ctx); |
2185 | if (tctx->tlsext_ticket_key_cb) { | 2191 | if (tctx->internal->tlsext_ticket_key_cb) { |
2186 | unsigned char *nctick = (unsigned char *)etick; | 2192 | unsigned char *nctick = (unsigned char *)etick; |
2187 | int rv = tctx->tlsext_ticket_key_cb(s, nctick, nctick + 16, | 2193 | int rv = tctx->internal->tlsext_ticket_key_cb(s, |
2188 | &ctx, &hctx, 0); | 2194 | nctick, nctick + 16, &ctx, &hctx, 0); |
2189 | if (rv < 0) { | 2195 | if (rv < 0) { |
2190 | HMAC_CTX_cleanup(&hctx); | 2196 | HMAC_CTX_cleanup(&hctx); |
2191 | EVP_CIPHER_CTX_cleanup(&ctx); | 2197 | EVP_CIPHER_CTX_cleanup(&ctx); |