diff options
author | miod <> | 2014-06-13 04:29:13 +0000 |
---|---|---|
committer | miod <> | 2014-06-13 04:29:13 +0000 |
commit | 9ef9f06708ef4fe615f3485f5d82f3fb919fdf03 (patch) | |
tree | 4a096128d8787d1beedaa53fd558a98773de0840 /src | |
parent | cc594d5ff9b7bb08404d34d62287ee1dfd6b8332 (diff) | |
download | openbsd-9ef9f06708ef4fe615f3485f5d82f3fb919fdf03.tar.gz openbsd-9ef9f06708ef4fe615f3485f5d82f3fb919fdf03.tar.bz2 openbsd-9ef9f06708ef4fe615f3485f5d82f3fb919fdf03.zip |
Remove support for the `opaque PRF input' extension, which draft has expired
7 years ago and never made it into an RFC. That code wasn't compiled in
anyway unless one would define the actual on-the-wire extension id bytes;
crank libssl major.
With help and enlightenment from Brendan MacDonell.
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/libssl/d1_lib.c | 4 | ||||
-rw-r--r-- | src/lib/libssl/s3_lib.c | 56 | ||||
-rw-r--r-- | src/lib/libssl/shlib_version | 4 | ||||
-rw-r--r-- | src/lib/libssl/src/apps/s_cb.c | 7 | ||||
-rw-r--r-- | src/lib/libssl/src/apps/s_client.c | 7 | ||||
-rw-r--r-- | src/lib/libssl/src/apps/s_server.c | 7 | ||||
-rw-r--r-- | src/lib/libssl/src/ssl/d1_lib.c | 4 | ||||
-rw-r--r-- | src/lib/libssl/src/ssl/s3_lib.c | 56 | ||||
-rw-r--r-- | src/lib/libssl/src/ssl/ssl.h | 15 | ||||
-rw-r--r-- | src/lib/libssl/src/ssl/ssl3.h | 11 | ||||
-rw-r--r-- | src/lib/libssl/src/ssl/ssl_err.c | 3 | ||||
-rw-r--r-- | src/lib/libssl/src/ssl/ssl_lib.c | 3 | ||||
-rw-r--r-- | src/lib/libssl/src/ssl/t1_enc.c | 19 | ||||
-rw-r--r-- | src/lib/libssl/src/ssl/t1_lib.c | 214 | ||||
-rw-r--r-- | src/lib/libssl/src/ssl/tls1.h | 9 | ||||
-rw-r--r-- | src/lib/libssl/ssl.h | 15 | ||||
-rw-r--r-- | src/lib/libssl/ssl/shlib_version | 4 | ||||
-rw-r--r-- | src/lib/libssl/ssl3.h | 11 | ||||
-rw-r--r-- | src/lib/libssl/ssl_err.c | 3 | ||||
-rw-r--r-- | src/lib/libssl/ssl_lib.c | 3 | ||||
-rw-r--r-- | src/lib/libssl/t1_enc.c | 19 | ||||
-rw-r--r-- | src/lib/libssl/t1_lib.c | 214 | ||||
-rw-r--r-- | src/lib/libssl/tls1.h | 9 | ||||
-rw-r--r-- | src/regress/lib/libssl/ssl/ssltest.c | 32 |
24 files changed, 29 insertions, 700 deletions
diff --git a/src/lib/libssl/d1_lib.c b/src/lib/libssl/d1_lib.c index 0b7c6404c5..13c93a77cf 100644 --- a/src/lib/libssl/d1_lib.c +++ b/src/lib/libssl/d1_lib.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: d1_lib.c,v 1.19 2014/06/12 15:49:31 deraadt Exp $ */ | 1 | /* $OpenBSD: d1_lib.c,v 1.20 2014/06/13 04:29:13 miod 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. |
@@ -135,6 +135,7 @@ dtls1_new(SSL *s) | |||
135 | if (d1->buffered_app_data.q) | 135 | if (d1->buffered_app_data.q) |
136 | pqueue_free(d1->buffered_app_data.q); | 136 | pqueue_free(d1->buffered_app_data.q); |
137 | free(d1); | 137 | free(d1); |
138 | ssl3_free(s); | ||
138 | return (0); | 139 | return (0); |
139 | } | 140 | } |
140 | 141 | ||
@@ -199,6 +200,7 @@ dtls1_free(SSL *s) | |||
199 | pqueue_free(s->d1->sent_messages); | 200 | pqueue_free(s->d1->sent_messages); |
200 | pqueue_free(s->d1->buffered_app_data.q); | 201 | pqueue_free(s->d1->buffered_app_data.q); |
201 | 202 | ||
203 | OPENSSL_cleanse(s->d1, sizeof *s->d1); | ||
202 | free(s->d1); | 204 | free(s->d1); |
203 | s->d1 = NULL; | 205 | s->d1 = NULL; |
204 | } | 206 | } |
diff --git a/src/lib/libssl/s3_lib.c b/src/lib/libssl/s3_lib.c index 03d30125b9..576ce2e52b 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.58 2014/06/12 15:49:31 deraadt Exp $ */ | 1 | /* $OpenBSD: s3_lib.c,v 1.59 2014/06/13 04:29:13 miod 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 | * |
@@ -2322,11 +2322,6 @@ ssl3_free(SSL *s) | |||
2322 | if (s == NULL) | 2322 | if (s == NULL) |
2323 | return; | 2323 | return; |
2324 | 2324 | ||
2325 | #ifdef TLSEXT_TYPE_opaque_prf_input | ||
2326 | free(s->s3->client_opaque_prf_input); | ||
2327 | free(s->s3->server_opaque_prf_input); | ||
2328 | #endif | ||
2329 | |||
2330 | ssl3_cleanup_key_block(s); | 2325 | ssl3_cleanup_key_block(s); |
2331 | ssl3_release_read_buffer(s); | 2326 | ssl3_release_read_buffer(s); |
2332 | ssl3_release_write_buffer(s); | 2327 | ssl3_release_write_buffer(s); |
@@ -2351,13 +2346,6 @@ ssl3_clear(SSL *s) | |||
2351 | size_t rlen, wlen; | 2346 | size_t rlen, wlen; |
2352 | int init_extra; | 2347 | int init_extra; |
2353 | 2348 | ||
2354 | #ifdef TLSEXT_TYPE_opaque_prf_input | ||
2355 | free(s->s3->client_opaque_prf_input); | ||
2356 | s->s3->client_opaque_prf_input = NULL; | ||
2357 | free(s->s3->server_opaque_prf_input); | ||
2358 | s->s3->server_opaque_prf_input = NULL; | ||
2359 | #endif | ||
2360 | |||
2361 | ssl3_cleanup_key_block(s); | 2349 | ssl3_cleanup_key_block(s); |
2362 | if (s->s3->tmp.ca_names != NULL) | 2350 | if (s->s3->tmp.ca_names != NULL) |
2363 | sk_X509_NAME_pop_free(s->s3->tmp.ca_names, X509_NAME_free); | 2351 | sk_X509_NAME_pop_free(s->s3->tmp.ca_names, X509_NAME_free); |
@@ -2570,35 +2558,6 @@ ssl3_ctrl(SSL *s, int cmd, long larg, void *parg) | |||
2570 | ret = 1; | 2558 | ret = 1; |
2571 | break; | 2559 | break; |
2572 | 2560 | ||
2573 | #ifdef TLSEXT_TYPE_opaque_prf_input | ||
2574 | case SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT: | ||
2575 | if (larg > 12288) { | ||
2576 | /* | ||
2577 | * Actual internal limit is 2^16 for the complete | ||
2578 | * hello message (including the cert chain and | ||
2579 | * everything) | ||
2580 | */ | ||
2581 | SSLerr(SSL_F_SSL3_CTRL, | ||
2582 | SSL_R_OPAQUE_PRF_INPUT_TOO_LONG); | ||
2583 | break; | ||
2584 | } | ||
2585 | free(s->tlsext_opaque_prf_input); | ||
2586 | if ((size_t)larg == 0) { | ||
2587 | s->tlsext_opaque_prf_input = NULL; | ||
2588 | s->tlsext_opaque_prf_input_len = 0; | ||
2589 | ret = 1; | ||
2590 | } else { | ||
2591 | s->tlsext_opaque_prf_input = | ||
2592 | BUF_memdup(parg, (size_t)larg); | ||
2593 | if (s->tlsext_opaque_prf_input != NULL) { | ||
2594 | s->tlsext_opaque_prf_input_len = (size_t)larg; | ||
2595 | ret = 1; | ||
2596 | } else | ||
2597 | s->tlsext_opaque_prf_input_len = 0; | ||
2598 | } | ||
2599 | break; | ||
2600 | #endif | ||
2601 | |||
2602 | case SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE: | 2561 | case SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE: |
2603 | s->tlsext_status_type = larg; | 2562 | s->tlsext_status_type = larg; |
2604 | ret = 1; | 2563 | ret = 1; |
@@ -2824,12 +2783,6 @@ ssl3_ctx_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg) | |||
2824 | return 1; | 2783 | return 1; |
2825 | } | 2784 | } |
2826 | 2785 | ||
2827 | #ifdef TLSEXT_TYPE_opaque_prf_input | ||
2828 | case SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB_ARG: | ||
2829 | ctx->tlsext_opaque_prf_input_callback_arg = parg; | ||
2830 | return 1; | ||
2831 | #endif | ||
2832 | |||
2833 | case SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG: | 2786 | case SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG: |
2834 | ctx->tlsext_status_arg = parg; | 2787 | ctx->tlsext_status_arg = parg; |
2835 | return 1; | 2788 | return 1; |
@@ -2890,13 +2843,6 @@ ssl3_ctx_callback_ctrl(SSL_CTX *ctx, int cmd, void (*fp)(void)) | |||
2890 | (int (*)(SSL *, int *, void *))fp; | 2843 | (int (*)(SSL *, int *, void *))fp; |
2891 | break; | 2844 | break; |
2892 | 2845 | ||
2893 | #ifdef TLSEXT_TYPE_opaque_prf_input | ||
2894 | case SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB: | ||
2895 | ctx->tlsext_opaque_prf_input_callback = | ||
2896 | (int (*)(SSL *, void *, size_t, void *))fp; | ||
2897 | break; | ||
2898 | #endif | ||
2899 | |||
2900 | case SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB: | 2846 | case SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB: |
2901 | ctx->tlsext_status_cb = (int (*)(SSL *, void *))fp; | 2847 | ctx->tlsext_status_cb = (int (*)(SSL *, void *))fp; |
2902 | break; | 2848 | break; |
diff --git a/src/lib/libssl/shlib_version b/src/lib/libssl/shlib_version index aa54cbb404..361604a5eb 100644 --- a/src/lib/libssl/shlib_version +++ b/src/lib/libssl/shlib_version | |||
@@ -1,2 +1,2 @@ | |||
1 | major=24 | 1 | major=25 |
2 | minor=1 | 2 | minor=0 |
diff --git a/src/lib/libssl/src/apps/s_cb.c b/src/lib/libssl/src/apps/s_cb.c index 51df99b2e8..29dd80e87d 100644 --- a/src/lib/libssl/src/apps/s_cb.c +++ b/src/lib/libssl/src/apps/s_cb.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: s_cb.c,v 1.21 2014/06/12 15:49:27 deraadt Exp $ */ | 1 | /* $OpenBSD: s_cb.c,v 1.22 2014/06/13 04:29:13 miod 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 | * |
@@ -696,11 +696,6 @@ tlsext_cb(SSL * s, int client_server, int type, unsigned char *data, int len, | |||
696 | extname = "renegotiation info"; | 696 | extname = "renegotiation info"; |
697 | break; | 697 | break; |
698 | 698 | ||
699 | #ifdef TLSEXT_TYPE_opaque_prf_input | ||
700 | case TLSEXT_TYPE_opaque_prf_input: | ||
701 | extname = "opaque PRF input"; | ||
702 | break; | ||
703 | #endif | ||
704 | #ifdef TLSEXT_TYPE_next_proto_neg | 699 | #ifdef TLSEXT_TYPE_next_proto_neg |
705 | case TLSEXT_TYPE_next_proto_neg: | 700 | case TLSEXT_TYPE_next_proto_neg: |
706 | extname = "next protocol"; | 701 | extname = "next protocol"; |
diff --git a/src/lib/libssl/src/apps/s_client.c b/src/lib/libssl/src/apps/s_client.c index 1e12eca895..c453875c07 100644 --- a/src/lib/libssl/src/apps/s_client.c +++ b/src/lib/libssl/src/apps/s_client.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: s_client.c,v 1.60 2014/06/12 15:49:27 deraadt Exp $ */ | 1 | /* $OpenBSD: s_client.c,v 1.61 2014/06/13 04:29:13 miod 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 | * |
@@ -910,11 +910,6 @@ bad: | |||
910 | } | 910 | } |
911 | #endif | 911 | #endif |
912 | /* SSL_set_cipher_list(con,"RC4-MD5"); */ | 912 | /* SSL_set_cipher_list(con,"RC4-MD5"); */ |
913 | #if 0 | ||
914 | #ifdef TLSEXT_TYPE_opaque_prf_input | ||
915 | SSL_set_tlsext_opaque_prf_input(con, "Test client", 11); | ||
916 | #endif | ||
917 | #endif | ||
918 | 913 | ||
919 | re_start: | 914 | re_start: |
920 | 915 | ||
diff --git a/src/lib/libssl/src/apps/s_server.c b/src/lib/libssl/src/apps/s_server.c index 25be6121b5..e73b249ca3 100644 --- a/src/lib/libssl/src/apps/s_server.c +++ b/src/lib/libssl/src/apps/s_server.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: s_server.c,v 1.52 2014/06/12 15:49:27 deraadt Exp $ */ | 1 | /* $OpenBSD: s_server.c,v 1.53 2014/06/13 04:29:13 miod 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 | * |
@@ -1541,11 +1541,6 @@ sv_body(char *hostname, int s, unsigned char *context) | |||
1541 | strlen((char *) context)); | 1541 | strlen((char *) context)); |
1542 | } | 1542 | } |
1543 | SSL_clear(con); | 1543 | SSL_clear(con); |
1544 | #if 0 | ||
1545 | #ifdef TLSEXT_TYPE_opaque_prf_input | ||
1546 | SSL_set_tlsext_opaque_prf_input(con, "Test server", 11); | ||
1547 | #endif | ||
1548 | #endif | ||
1549 | 1544 | ||
1550 | if (SSL_version(con) == DTLS1_VERSION) { | 1545 | if (SSL_version(con) == DTLS1_VERSION) { |
1551 | 1546 | ||
diff --git a/src/lib/libssl/src/ssl/d1_lib.c b/src/lib/libssl/src/ssl/d1_lib.c index 0b7c6404c5..13c93a77cf 100644 --- a/src/lib/libssl/src/ssl/d1_lib.c +++ b/src/lib/libssl/src/ssl/d1_lib.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: d1_lib.c,v 1.19 2014/06/12 15:49:31 deraadt Exp $ */ | 1 | /* $OpenBSD: d1_lib.c,v 1.20 2014/06/13 04:29:13 miod 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. |
@@ -135,6 +135,7 @@ dtls1_new(SSL *s) | |||
135 | if (d1->buffered_app_data.q) | 135 | if (d1->buffered_app_data.q) |
136 | pqueue_free(d1->buffered_app_data.q); | 136 | pqueue_free(d1->buffered_app_data.q); |
137 | free(d1); | 137 | free(d1); |
138 | ssl3_free(s); | ||
138 | return (0); | 139 | return (0); |
139 | } | 140 | } |
140 | 141 | ||
@@ -199,6 +200,7 @@ dtls1_free(SSL *s) | |||
199 | pqueue_free(s->d1->sent_messages); | 200 | pqueue_free(s->d1->sent_messages); |
200 | pqueue_free(s->d1->buffered_app_data.q); | 201 | pqueue_free(s->d1->buffered_app_data.q); |
201 | 202 | ||
203 | OPENSSL_cleanse(s->d1, sizeof *s->d1); | ||
202 | free(s->d1); | 204 | free(s->d1); |
203 | s->d1 = NULL; | 205 | s->d1 = NULL; |
204 | } | 206 | } |
diff --git a/src/lib/libssl/src/ssl/s3_lib.c b/src/lib/libssl/src/ssl/s3_lib.c index 03d30125b9..576ce2e52b 100644 --- a/src/lib/libssl/src/ssl/s3_lib.c +++ b/src/lib/libssl/src/ssl/s3_lib.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: s3_lib.c,v 1.58 2014/06/12 15:49:31 deraadt Exp $ */ | 1 | /* $OpenBSD: s3_lib.c,v 1.59 2014/06/13 04:29:13 miod 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 | * |
@@ -2322,11 +2322,6 @@ ssl3_free(SSL *s) | |||
2322 | if (s == NULL) | 2322 | if (s == NULL) |
2323 | return; | 2323 | return; |
2324 | 2324 | ||
2325 | #ifdef TLSEXT_TYPE_opaque_prf_input | ||
2326 | free(s->s3->client_opaque_prf_input); | ||
2327 | free(s->s3->server_opaque_prf_input); | ||
2328 | #endif | ||
2329 | |||
2330 | ssl3_cleanup_key_block(s); | 2325 | ssl3_cleanup_key_block(s); |
2331 | ssl3_release_read_buffer(s); | 2326 | ssl3_release_read_buffer(s); |
2332 | ssl3_release_write_buffer(s); | 2327 | ssl3_release_write_buffer(s); |
@@ -2351,13 +2346,6 @@ ssl3_clear(SSL *s) | |||
2351 | size_t rlen, wlen; | 2346 | size_t rlen, wlen; |
2352 | int init_extra; | 2347 | int init_extra; |
2353 | 2348 | ||
2354 | #ifdef TLSEXT_TYPE_opaque_prf_input | ||
2355 | free(s->s3->client_opaque_prf_input); | ||
2356 | s->s3->client_opaque_prf_input = NULL; | ||
2357 | free(s->s3->server_opaque_prf_input); | ||
2358 | s->s3->server_opaque_prf_input = NULL; | ||
2359 | #endif | ||
2360 | |||
2361 | ssl3_cleanup_key_block(s); | 2349 | ssl3_cleanup_key_block(s); |
2362 | if (s->s3->tmp.ca_names != NULL) | 2350 | if (s->s3->tmp.ca_names != NULL) |
2363 | sk_X509_NAME_pop_free(s->s3->tmp.ca_names, X509_NAME_free); | 2351 | sk_X509_NAME_pop_free(s->s3->tmp.ca_names, X509_NAME_free); |
@@ -2570,35 +2558,6 @@ ssl3_ctrl(SSL *s, int cmd, long larg, void *parg) | |||
2570 | ret = 1; | 2558 | ret = 1; |
2571 | break; | 2559 | break; |
2572 | 2560 | ||
2573 | #ifdef TLSEXT_TYPE_opaque_prf_input | ||
2574 | case SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT: | ||
2575 | if (larg > 12288) { | ||
2576 | /* | ||
2577 | * Actual internal limit is 2^16 for the complete | ||
2578 | * hello message (including the cert chain and | ||
2579 | * everything) | ||
2580 | */ | ||
2581 | SSLerr(SSL_F_SSL3_CTRL, | ||
2582 | SSL_R_OPAQUE_PRF_INPUT_TOO_LONG); | ||
2583 | break; | ||
2584 | } | ||
2585 | free(s->tlsext_opaque_prf_input); | ||
2586 | if ((size_t)larg == 0) { | ||
2587 | s->tlsext_opaque_prf_input = NULL; | ||
2588 | s->tlsext_opaque_prf_input_len = 0; | ||
2589 | ret = 1; | ||
2590 | } else { | ||
2591 | s->tlsext_opaque_prf_input = | ||
2592 | BUF_memdup(parg, (size_t)larg); | ||
2593 | if (s->tlsext_opaque_prf_input != NULL) { | ||
2594 | s->tlsext_opaque_prf_input_len = (size_t)larg; | ||
2595 | ret = 1; | ||
2596 | } else | ||
2597 | s->tlsext_opaque_prf_input_len = 0; | ||
2598 | } | ||
2599 | break; | ||
2600 | #endif | ||
2601 | |||
2602 | case SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE: | 2561 | case SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE: |
2603 | s->tlsext_status_type = larg; | 2562 | s->tlsext_status_type = larg; |
2604 | ret = 1; | 2563 | ret = 1; |
@@ -2824,12 +2783,6 @@ ssl3_ctx_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg) | |||
2824 | return 1; | 2783 | return 1; |
2825 | } | 2784 | } |
2826 | 2785 | ||
2827 | #ifdef TLSEXT_TYPE_opaque_prf_input | ||
2828 | case SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB_ARG: | ||
2829 | ctx->tlsext_opaque_prf_input_callback_arg = parg; | ||
2830 | return 1; | ||
2831 | #endif | ||
2832 | |||
2833 | case SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG: | 2786 | case SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG: |
2834 | ctx->tlsext_status_arg = parg; | 2787 | ctx->tlsext_status_arg = parg; |
2835 | return 1; | 2788 | return 1; |
@@ -2890,13 +2843,6 @@ ssl3_ctx_callback_ctrl(SSL_CTX *ctx, int cmd, void (*fp)(void)) | |||
2890 | (int (*)(SSL *, int *, void *))fp; | 2843 | (int (*)(SSL *, int *, void *))fp; |
2891 | break; | 2844 | break; |
2892 | 2845 | ||
2893 | #ifdef TLSEXT_TYPE_opaque_prf_input | ||
2894 | case SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB: | ||
2895 | ctx->tlsext_opaque_prf_input_callback = | ||
2896 | (int (*)(SSL *, void *, size_t, void *))fp; | ||
2897 | break; | ||
2898 | #endif | ||
2899 | |||
2900 | case SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB: | 2846 | case SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB: |
2901 | ctx->tlsext_status_cb = (int (*)(SSL *, void *))fp; | 2847 | ctx->tlsext_status_cb = (int (*)(SSL *, void *))fp; |
2902 | break; | 2848 | break; |
diff --git a/src/lib/libssl/src/ssl/ssl.h b/src/lib/libssl/src/ssl/ssl.h index a550a442a0..cd71f7bcfe 100644 --- a/src/lib/libssl/src/ssl/ssl.h +++ b/src/lib/libssl/src/ssl/ssl.h | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ssl.h,v 1.52 2014/06/12 15:49:31 deraadt Exp $ */ | 1 | /* $OpenBSD: ssl.h,v 1.53 2014/06/13 04:29:13 miod 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 | * |
@@ -847,11 +847,6 @@ struct ssl_ctx_st { | |||
847 | int (*tlsext_status_cb)(SSL *ssl, void *arg); | 847 | int (*tlsext_status_cb)(SSL *ssl, void *arg); |
848 | void *tlsext_status_arg; | 848 | void *tlsext_status_arg; |
849 | 849 | ||
850 | /* draft-rescorla-tls-opaque-prf-input-00.txt information */ | ||
851 | int (*tlsext_opaque_prf_input_callback)(SSL *, void *peerinput, | ||
852 | size_t len, void *arg); | ||
853 | void *tlsext_opaque_prf_input_callback_arg; | ||
854 | |||
855 | #ifndef OPENSSL_NO_PSK | 850 | #ifndef OPENSSL_NO_PSK |
856 | char *psk_identity_hint; | 851 | char *psk_identity_hint; |
857 | unsigned int (*psk_client_callback)(SSL *ssl, const char *hint, | 852 | unsigned int (*psk_client_callback)(SSL *ssl, const char *hint, |
@@ -1201,10 +1196,6 @@ struct ssl_st { | |||
1201 | size_t tlsext_ellipticcurvelist_length; | 1196 | size_t tlsext_ellipticcurvelist_length; |
1202 | unsigned char *tlsext_ellipticcurvelist; /* our list */ | 1197 | unsigned char *tlsext_ellipticcurvelist; /* our list */ |
1203 | 1198 | ||
1204 | /* draft-rescorla-tls-opaque-prf-input-00.txt information to be used for handshakes */ | ||
1205 | void *tlsext_opaque_prf_input; | ||
1206 | size_t tlsext_opaque_prf_input_len; | ||
1207 | |||
1208 | /* TLS Session Ticket extension override */ | 1199 | /* TLS Session Ticket extension override */ |
1209 | TLS_SESSION_TICKET_EXT *tlsext_session_ticket; | 1200 | TLS_SESSION_TICKET_EXT *tlsext_session_ticket; |
1210 | 1201 | ||
@@ -1454,9 +1445,6 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) | |||
1454 | #define SSL_CTRL_SET_TLSEXT_DEBUG_ARG 57 | 1445 | #define SSL_CTRL_SET_TLSEXT_DEBUG_ARG 57 |
1455 | #define SSL_CTRL_GET_TLSEXT_TICKET_KEYS 58 | 1446 | #define SSL_CTRL_GET_TLSEXT_TICKET_KEYS 58 |
1456 | #define SSL_CTRL_SET_TLSEXT_TICKET_KEYS 59 | 1447 | #define SSL_CTRL_SET_TLSEXT_TICKET_KEYS 59 |
1457 | #define SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT 60 | ||
1458 | #define SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB 61 | ||
1459 | #define SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB_ARG 62 | ||
1460 | #define SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB 63 | 1448 | #define SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB 63 |
1461 | #define SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG 64 | 1449 | #define SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG 64 |
1462 | #define SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE 65 | 1450 | #define SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE 65 |
@@ -2259,7 +2247,6 @@ void ERR_load_SSL_strings(void); | |||
2259 | #define SSL_R_OLD_SESSION_CIPHER_NOT_RETURNED 197 | 2247 | #define SSL_R_OLD_SESSION_CIPHER_NOT_RETURNED 197 |
2260 | #define SSL_R_OLD_SESSION_COMPRESSION_ALGORITHM_NOT_RETURNED 344 | 2248 | #define SSL_R_OLD_SESSION_COMPRESSION_ALGORITHM_NOT_RETURNED 344 |
2261 | #define SSL_R_ONLY_TLS_ALLOWED_IN_FIPS_MODE 297 | 2249 | #define SSL_R_ONLY_TLS_ALLOWED_IN_FIPS_MODE 297 |
2262 | #define SSL_R_OPAQUE_PRF_INPUT_TOO_LONG 327 | ||
2263 | #define SSL_R_PACKET_LENGTH_TOO_LONG 198 | 2250 | #define SSL_R_PACKET_LENGTH_TOO_LONG 198 |
2264 | #define SSL_R_PARSE_TLSEXT 227 | 2251 | #define SSL_R_PARSE_TLSEXT 227 |
2265 | #define SSL_R_PATH_TOO_LONG 270 | 2252 | #define SSL_R_PATH_TOO_LONG 270 |
diff --git a/src/lib/libssl/src/ssl/ssl3.h b/src/lib/libssl/src/ssl/ssl3.h index 7378136646..7fd00be2d3 100644 --- a/src/lib/libssl/src/ssl/ssl3.h +++ b/src/lib/libssl/src/ssl/ssl3.h | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ssl3.h,v 1.21 2014/06/12 15:49:31 deraadt Exp $ */ | 1 | /* $OpenBSD: ssl3.h,v 1.22 2014/06/13 04:29:13 miod 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 | * |
@@ -452,15 +452,6 @@ typedef struct ssl3_state_st { | |||
452 | 452 | ||
453 | int in_read_app_data; | 453 | int in_read_app_data; |
454 | 454 | ||
455 | /* Opaque PRF input as used for the current handshake. | ||
456 | * These fields are used only if TLSEXT_TYPE_opaque_prf_input is defined | ||
457 | * (otherwise, they are merely present to improve binary compatibility) | ||
458 | */ | ||
459 | void *client_opaque_prf_input; | ||
460 | size_t client_opaque_prf_input_len; | ||
461 | void *server_opaque_prf_input; | ||
462 | size_t server_opaque_prf_input_len; | ||
463 | |||
464 | struct { | 455 | struct { |
465 | /* actually only needs to be 16+20 */ | 456 | /* actually only needs to be 16+20 */ |
466 | unsigned char cert_verify_md[EVP_MAX_MD_SIZE*2]; | 457 | unsigned char cert_verify_md[EVP_MAX_MD_SIZE*2]; |
diff --git a/src/lib/libssl/src/ssl/ssl_err.c b/src/lib/libssl/src/ssl/ssl_err.c index 2bb6dcb4a8..0f18b1bc5f 100644 --- a/src/lib/libssl/src/ssl/ssl_err.c +++ b/src/lib/libssl/src/ssl/ssl_err.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ssl_err.c,v 1.23 2014/06/12 15:49:31 deraadt Exp $ */ | 1 | /* $OpenBSD: ssl_err.c,v 1.24 2014/06/13 04:29:13 miod Exp $ */ |
2 | /* ==================================================================== | 2 | /* ==================================================================== |
3 | * Copyright (c) 1999-2011 The OpenSSL Project. All rights reserved. | 3 | * Copyright (c) 1999-2011 The OpenSSL Project. All rights reserved. |
4 | * | 4 | * |
@@ -454,7 +454,6 @@ static ERR_STRING_DATA SSL_str_reasons[]= { | |||
454 | {ERR_REASON(SSL_R_OLD_SESSION_CIPHER_NOT_RETURNED), "old session cipher not returned"}, | 454 | {ERR_REASON(SSL_R_OLD_SESSION_CIPHER_NOT_RETURNED), "old session cipher not returned"}, |
455 | {ERR_REASON(SSL_R_OLD_SESSION_COMPRESSION_ALGORITHM_NOT_RETURNED), "old session compression algorithm not returned"}, | 455 | {ERR_REASON(SSL_R_OLD_SESSION_COMPRESSION_ALGORITHM_NOT_RETURNED), "old session compression algorithm not returned"}, |
456 | {ERR_REASON(SSL_R_ONLY_TLS_ALLOWED_IN_FIPS_MODE), "only tls allowed in fips mode"}, | 456 | {ERR_REASON(SSL_R_ONLY_TLS_ALLOWED_IN_FIPS_MODE), "only tls allowed in fips mode"}, |
457 | {ERR_REASON(SSL_R_OPAQUE_PRF_INPUT_TOO_LONG), "opaque PRF input too long"}, | ||
458 | {ERR_REASON(SSL_R_PACKET_LENGTH_TOO_LONG), "packet length too long"}, | 457 | {ERR_REASON(SSL_R_PACKET_LENGTH_TOO_LONG), "packet length too long"}, |
459 | {ERR_REASON(SSL_R_PARSE_TLSEXT) , "parse tlsext"}, | 458 | {ERR_REASON(SSL_R_PARSE_TLSEXT) , "parse tlsext"}, |
460 | {ERR_REASON(SSL_R_PATH_TOO_LONG) , "path too long"}, | 459 | {ERR_REASON(SSL_R_PATH_TOO_LONG) , "path too long"}, |
diff --git a/src/lib/libssl/src/ssl/ssl_lib.c b/src/lib/libssl/src/ssl/ssl_lib.c index 54b737d482..05abdb3944 100644 --- a/src/lib/libssl/src/ssl/ssl_lib.c +++ b/src/lib/libssl/src/ssl/ssl_lib.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ssl_lib.c,v 1.65 2014/06/12 15:49:31 deraadt Exp $ */ | 1 | /* $OpenBSD: ssl_lib.c,v 1.66 2014/06/13 04:29:13 miod 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 | * |
@@ -536,7 +536,6 @@ SSL_free(SSL *s) | |||
536 | SSL_CTX_free(s->initial_ctx); | 536 | SSL_CTX_free(s->initial_ctx); |
537 | free(s->tlsext_ecpointformatlist); | 537 | free(s->tlsext_ecpointformatlist); |
538 | free(s->tlsext_ellipticcurvelist); | 538 | free(s->tlsext_ellipticcurvelist); |
539 | free(s->tlsext_opaque_prf_input); | ||
540 | if (s->tlsext_ocsp_exts) | 539 | if (s->tlsext_ocsp_exts) |
541 | sk_X509_EXTENSION_pop_free(s->tlsext_ocsp_exts, | 540 | sk_X509_EXTENSION_pop_free(s->tlsext_ocsp_exts, |
542 | X509_EXTENSION_free); | 541 | X509_EXTENSION_free); |
diff --git a/src/lib/libssl/src/ssl/t1_enc.c b/src/lib/libssl/src/ssl/t1_enc.c index 304898aeb8..6d2e21c412 100644 --- a/src/lib/libssl/src/ssl/t1_enc.c +++ b/src/lib/libssl/src/ssl/t1_enc.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: t1_enc.c,v 1.54 2014/06/12 15:49:31 deraadt Exp $ */ | 1 | /* $OpenBSD: t1_enc.c,v 1.55 2014/06/13 04:29:13 miod 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 | * |
@@ -998,23 +998,6 @@ tls1_generate_master_secret(SSL *s, unsigned char *out, unsigned char *p, | |||
998 | const void *co = NULL, *so = NULL; | 998 | const void *co = NULL, *so = NULL; |
999 | int col = 0, sol = 0; | 999 | int col = 0, sol = 0; |
1000 | 1000 | ||
1001 | #ifdef TLSEXT_TYPE_opaque_prf_input | ||
1002 | if (s->s3->client_opaque_prf_input != NULL && | ||
1003 | s->s3->server_opaque_prf_input != NULL && | ||
1004 | s->s3->client_opaque_prf_input_len > 0 && | ||
1005 | s->s3->client_opaque_prf_input_len == | ||
1006 | s->s3->server_opaque_prf_input_len) { | ||
1007 | /* | ||
1008 | * sol must be same as col - see section 3.1 of | ||
1009 | * draft-rescorla-tls-opaque-prf-input-00.txt. | ||
1010 | */ | ||
1011 | co = s->s3->client_opaque_prf_input; | ||
1012 | col = s->s3->server_opaque_prf_input_len; | ||
1013 | so = s->s3->server_opaque_prf_input; | ||
1014 | sol = s->s3->client_opaque_prf_input_len; | ||
1015 | } | ||
1016 | #endif | ||
1017 | |||
1018 | tls1_PRF(ssl_get_algorithm2(s), | 1001 | tls1_PRF(ssl_get_algorithm2(s), |
1019 | TLS_MD_MASTER_SECRET_CONST, TLS_MD_MASTER_SECRET_CONST_SIZE, | 1002 | TLS_MD_MASTER_SECRET_CONST, TLS_MD_MASTER_SECRET_CONST_SIZE, |
1020 | s->s3->client_random, SSL3_RANDOM_SIZE, co, col, | 1003 | s->s3->client_random, SSL3_RANDOM_SIZE, co, col, |
diff --git a/src/lib/libssl/src/ssl/t1_lib.c b/src/lib/libssl/src/ssl/t1_lib.c index 6e4a29c4c8..b780faf603 100644 --- a/src/lib/libssl/src/ssl/t1_lib.c +++ b/src/lib/libssl/src/ssl/t1_lib.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: t1_lib.c,v 1.45 2014/06/12 15:49:31 deraadt Exp $ */ | 1 | /* $OpenBSD: t1_lib.c,v 1.46 2014/06/13 04:29:13 miod 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 | * |
@@ -557,25 +557,6 @@ skip_ext: | |||
557 | ret += sizeof(tls12_sigalgs); | 557 | ret += sizeof(tls12_sigalgs); |
558 | } | 558 | } |
559 | 559 | ||
560 | #ifdef TLSEXT_TYPE_opaque_prf_input | ||
561 | if (s->s3->client_opaque_prf_input != NULL && | ||
562 | s->version != DTLS1_VERSION) { | ||
563 | size_t col = s->s3->client_opaque_prf_input_len; | ||
564 | |||
565 | if ((size_t)(limit - ret) < 6 + col) | ||
566 | return NULL; | ||
567 | if (col > 0xFFFD) /* can't happen */ | ||
568 | return NULL; | ||
569 | |||
570 | s2n(TLSEXT_TYPE_opaque_prf_input, ret); | ||
571 | |||
572 | s2n(col + 2, ret); | ||
573 | s2n(col, ret); | ||
574 | memcpy(ret, s->s3->client_opaque_prf_input, col); | ||
575 | ret += col; | ||
576 | } | ||
577 | #endif | ||
578 | |||
579 | if (s->tlsext_status_type == TLSEXT_STATUSTYPE_ocsp && | 560 | if (s->tlsext_status_type == TLSEXT_STATUSTYPE_ocsp && |
580 | s->version != DTLS1_VERSION) { | 561 | s->version != DTLS1_VERSION) { |
581 | int i; | 562 | int i; |
@@ -783,25 +764,6 @@ ssl_add_serverhello_tlsext(SSL *s, unsigned char *p, unsigned char *limit) | |||
783 | s2n(0, ret); | 764 | s2n(0, ret); |
784 | } | 765 | } |
785 | 766 | ||
786 | #ifdef TLSEXT_TYPE_opaque_prf_input | ||
787 | if (s->s3->server_opaque_prf_input != NULL && | ||
788 | s->version != DTLS1_VERSION) { | ||
789 | size_t sol = s->s3->server_opaque_prf_input_len; | ||
790 | |||
791 | if ((size_t)(limit - ret) < 6 + sol) | ||
792 | return NULL; | ||
793 | if (sol > 0xFFFD) /* can't happen */ | ||
794 | return NULL; | ||
795 | |||
796 | s2n(TLSEXT_TYPE_opaque_prf_input, ret); | ||
797 | |||
798 | s2n(sol + 2, ret); | ||
799 | s2n(sol, ret); | ||
800 | memcpy(ret, s->s3->server_opaque_prf_input, sol); | ||
801 | ret += sol; | ||
802 | } | ||
803 | #endif | ||
804 | |||
805 | #ifndef OPENSSL_NO_SRTP | 767 | #ifndef OPENSSL_NO_SRTP |
806 | if (s->srtp_profile) { | 768 | if (s->srtp_profile) { |
807 | int el; | 769 | int el; |
@@ -1131,35 +1093,6 @@ ssl_parse_clienthello_tlsext(SSL *s, unsigned char **p, unsigned char *d, | |||
1131 | memcpy(s->session->tlsext_ellipticcurvelist, sdata, ellipticcurvelist_length); | 1093 | memcpy(s->session->tlsext_ellipticcurvelist, sdata, ellipticcurvelist_length); |
1132 | } | 1094 | } |
1133 | } | 1095 | } |
1134 | #ifdef TLSEXT_TYPE_opaque_prf_input | ||
1135 | else if (type == TLSEXT_TYPE_opaque_prf_input && | ||
1136 | s->version != DTLS1_VERSION) { | ||
1137 | unsigned char *sdata = data; | ||
1138 | |||
1139 | if (size < 2) { | ||
1140 | *al = SSL_AD_DECODE_ERROR; | ||
1141 | return 0; | ||
1142 | } | ||
1143 | n2s(sdata, s->s3->client_opaque_prf_input_len); | ||
1144 | if (s->s3->client_opaque_prf_input_len != size - 2) { | ||
1145 | *al = SSL_AD_DECODE_ERROR; | ||
1146 | return 0; | ||
1147 | } | ||
1148 | |||
1149 | free(s->s3->client_opaque_prf_input); | ||
1150 | s->s3->client_opaque_prf_input = NULL; | ||
1151 | |||
1152 | if (s->s3->client_opaque_prf_input_len != 0) { | ||
1153 | s->s3->client_opaque_prf_input = | ||
1154 | BUF_memdup(sdata, | ||
1155 | s->s3->client_opaque_prf_input_len); | ||
1156 | if (s->s3->client_opaque_prf_input == NULL) { | ||
1157 | *al = TLS1_AD_INTERNAL_ERROR; | ||
1158 | return 0; | ||
1159 | } | ||
1160 | } | ||
1161 | } | ||
1162 | #endif | ||
1163 | else if (type == TLSEXT_TYPE_session_ticket) { | 1096 | else if (type == TLSEXT_TYPE_session_ticket) { |
1164 | if (s->tls_session_ticket_ext_cb && | 1097 | if (s->tls_session_ticket_ext_cb && |
1165 | !s->tls_session_ticket_ext_cb(s, data, size, s->tls_session_ticket_ext_cb_arg)) { | 1098 | !s->tls_session_ticket_ext_cb(s, data, size, s->tls_session_ticket_ext_cb_arg)) { |
@@ -1428,35 +1361,6 @@ ssl_parse_serverhello_tlsext(SSL *s, unsigned char **p, unsigned char *d, | |||
1428 | } | 1361 | } |
1429 | s->tlsext_ticket_expected = 1; | 1362 | s->tlsext_ticket_expected = 1; |
1430 | } | 1363 | } |
1431 | #ifdef TLSEXT_TYPE_opaque_prf_input | ||
1432 | else if (type == TLSEXT_TYPE_opaque_prf_input && | ||
1433 | s->version != DTLS1_VERSION) { | ||
1434 | unsigned char *sdata = data; | ||
1435 | |||
1436 | if (size < 2) { | ||
1437 | *al = SSL_AD_DECODE_ERROR; | ||
1438 | return 0; | ||
1439 | } | ||
1440 | n2s(sdata, s->s3->server_opaque_prf_input_len); | ||
1441 | if (s->s3->server_opaque_prf_input_len != size - 2) { | ||
1442 | *al = SSL_AD_DECODE_ERROR; | ||
1443 | return 0; | ||
1444 | } | ||
1445 | |||
1446 | free(s->s3->server_opaque_prf_input); | ||
1447 | s->s3->server_opaque_prf_input = NULL; | ||
1448 | |||
1449 | if (s->s3->server_opaque_prf_input_len != 0) | ||
1450 | s->s3->server_opaque_prf_input = | ||
1451 | BUF_memdup(sdata, | ||
1452 | s->s3->server_opaque_prf_input_len); | ||
1453 | if (s->s3->server_opaque_prf_input == NULL) { | ||
1454 | *al = TLS1_AD_INTERNAL_ERROR; | ||
1455 | return 0; | ||
1456 | } | ||
1457 | } | ||
1458 | } | ||
1459 | #endif | ||
1460 | else if (type == TLSEXT_TYPE_status_request && | 1364 | else if (type == TLSEXT_TYPE_status_request && |
1461 | s->version != DTLS1_VERSION) { | 1365 | s->version != DTLS1_VERSION) { |
1462 | /* MUST be empty and only sent if we've requested | 1366 | /* MUST be empty and only sent if we've requested |
@@ -1609,42 +1513,6 @@ ssl_prepare_clienthello_tlsext(SSL *s) | |||
1609 | } | 1513 | } |
1610 | } | 1514 | } |
1611 | 1515 | ||
1612 | #ifdef TLSEXT_TYPE_opaque_prf_input | ||
1613 | { | ||
1614 | int r = 1; | ||
1615 | |||
1616 | if (s->ctx->tlsext_opaque_prf_input_callback != 0) { | ||
1617 | r = s->ctx->tlsext_opaque_prf_input_callback(s, NULL, 0, | ||
1618 | s->ctx->tlsext_opaque_prf_input_callback_arg); | ||
1619 | if (!r) | ||
1620 | return -1; | ||
1621 | } | ||
1622 | |||
1623 | if (s->tlsext_opaque_prf_input != NULL) { | ||
1624 | free(s->s3->client_opaque_prf_input); | ||
1625 | s->s3->client_opaque_prf_input = NULL; | ||
1626 | if (s->tlsext_opaque_prf_input_len != 0) { | ||
1627 | s->s3->client_opaque_prf_input = | ||
1628 | BUF_memdup(s->tlsext_opaque_prf_input, | ||
1629 | s->tlsext_opaque_prf_input_len); | ||
1630 | if (s->s3->client_opaque_prf_input == NULL) { | ||
1631 | SSLerr(SSL_F_SSL_PREPARE_CLIENTHELLO_TLSEXT, | ||
1632 | ERR_R_MALLOC_FAILURE); | ||
1633 | return -1; | ||
1634 | } | ||
1635 | } | ||
1636 | s->s3->client_opaque_prf_input_len = | ||
1637 | s->tlsext_opaque_prf_input_len; | ||
1638 | } | ||
1639 | |||
1640 | if (r == 2) { | ||
1641 | /* at callback's request, insist on receiving an appropriate server opaque PRF input */ | ||
1642 | s->s3->server_opaque_prf_input_len = | ||
1643 | s->tlsext_opaque_prf_input_len; | ||
1644 | } | ||
1645 | } | ||
1646 | #endif | ||
1647 | |||
1648 | return 1; | 1516 | return 1; |
1649 | } | 1517 | } |
1650 | 1518 | ||
@@ -1694,65 +1562,6 @@ ssl_check_clienthello_tlsext_early(SSL *s) | |||
1694 | else if (s->initial_ctx != NULL && s->initial_ctx->tlsext_servername_callback != 0) | 1562 | else if (s->initial_ctx != NULL && s->initial_ctx->tlsext_servername_callback != 0) |
1695 | ret = s->initial_ctx->tlsext_servername_callback(s, &al, s->initial_ctx->tlsext_servername_arg); | 1563 | ret = s->initial_ctx->tlsext_servername_callback(s, &al, s->initial_ctx->tlsext_servername_arg); |
1696 | 1564 | ||
1697 | #ifdef TLSEXT_TYPE_opaque_prf_input | ||
1698 | { | ||
1699 | /* This sort of belongs into ssl_prepare_serverhello_tlsext(), | ||
1700 | * but we might be sending an alert in response to the client hello, | ||
1701 | * so this has to happen here in | ||
1702 | * ssl_check_clienthello_tlsext_early(). */ | ||
1703 | |||
1704 | int r = 1; | ||
1705 | |||
1706 | if (s->ctx->tlsext_opaque_prf_input_callback != 0) { | ||
1707 | r = s->ctx->tlsext_opaque_prf_input_callback(s, NULL, 0, | ||
1708 | s->ctx->tlsext_opaque_prf_input_callback_arg); | ||
1709 | if (!r) { | ||
1710 | ret = SSL_TLSEXT_ERR_ALERT_FATAL; | ||
1711 | al = SSL_AD_INTERNAL_ERROR; | ||
1712 | goto err; | ||
1713 | } | ||
1714 | } | ||
1715 | |||
1716 | free(s->s3->server_opaque_prf_input); | ||
1717 | s->s3->server_opaque_prf_input = NULL; | ||
1718 | |||
1719 | if (s->tlsext_opaque_prf_input != NULL) { | ||
1720 | if (s->s3->client_opaque_prf_input != NULL && | ||
1721 | s->s3->client_opaque_prf_input_len == | ||
1722 | s->tlsext_opaque_prf_input_len) { | ||
1723 | /* | ||
1724 | * Can only use this extension if we have a | ||
1725 | * server opaque PRF input of the same length | ||
1726 | * as the client opaque PRF input! | ||
1727 | */ | ||
1728 | if (s->tlsext_opaque_prf_input_len != 0) { | ||
1729 | s->s3->server_opaque_prf_input = | ||
1730 | BUF_memdup(s->tlsext_opaque_prf_input, | ||
1731 | s->tlsext_opaque_prf_input_len); | ||
1732 | if (s->s3->server_opaque_prf_input == | ||
1733 | NULL) { | ||
1734 | ret = SSL_TLSEXT_ERR_ALERT_FATAL; | ||
1735 | al = SSL_AD_INTERNAL_ERROR; | ||
1736 | goto err; | ||
1737 | } | ||
1738 | } | ||
1739 | s->s3->server_opaque_prf_input_len = | ||
1740 | s->tlsext_opaque_prf_input_len; | ||
1741 | } | ||
1742 | } | ||
1743 | |||
1744 | if (r == 2 && s->s3->server_opaque_prf_input == NULL) { | ||
1745 | /* The callback wants to enforce use of the extension, | ||
1746 | * but we can't do that with the client opaque PRF input; | ||
1747 | * abort the handshake. | ||
1748 | */ | ||
1749 | ret = SSL_TLSEXT_ERR_ALERT_FATAL; | ||
1750 | al = SSL_AD_HANDSHAKE_FAILURE; | ||
1751 | } | ||
1752 | } | ||
1753 | |||
1754 | err: | ||
1755 | #endif | ||
1756 | switch (ret) { | 1565 | switch (ret) { |
1757 | case SSL_TLSEXT_ERR_ALERT_FATAL: | 1566 | case SSL_TLSEXT_ERR_ALERT_FATAL: |
1758 | ssl3_send_alert(s, SSL3_AL_FATAL, al); | 1567 | ssl3_send_alert(s, SSL3_AL_FATAL, al); |
@@ -1867,27 +1676,6 @@ ssl_check_serverhello_tlsext(SSL *s) | |||
1867 | else if (s->initial_ctx != NULL && s->initial_ctx->tlsext_servername_callback != 0) | 1676 | else if (s->initial_ctx != NULL && s->initial_ctx->tlsext_servername_callback != 0) |
1868 | ret = s->initial_ctx->tlsext_servername_callback(s, &al, s->initial_ctx->tlsext_servername_arg); | 1677 | ret = s->initial_ctx->tlsext_servername_callback(s, &al, s->initial_ctx->tlsext_servername_arg); |
1869 | 1678 | ||
1870 | #ifdef TLSEXT_TYPE_opaque_prf_input | ||
1871 | if (s->s3->server_opaque_prf_input_len > 0) { | ||
1872 | /* This case may indicate that we, as a client, want to insist on using opaque PRF inputs. | ||
1873 | * So first verify that we really have a value from the server too. */ | ||
1874 | |||
1875 | if (s->s3->server_opaque_prf_input == NULL) { | ||
1876 | ret = SSL_TLSEXT_ERR_ALERT_FATAL; | ||
1877 | al = SSL_AD_HANDSHAKE_FAILURE; | ||
1878 | } | ||
1879 | |||
1880 | /* Anytime the server *has* sent an opaque PRF input, we need to check | ||
1881 | * that we have a client opaque PRF input of the same size. */ | ||
1882 | if (s->s3->client_opaque_prf_input == NULL || | ||
1883 | s->s3->client_opaque_prf_input_len != | ||
1884 | s->s3->server_opaque_prf_input_len) { | ||
1885 | ret = SSL_TLSEXT_ERR_ALERT_FATAL; | ||
1886 | al = SSL_AD_ILLEGAL_PARAMETER; | ||
1887 | } | ||
1888 | } | ||
1889 | #endif | ||
1890 | |||
1891 | /* If we've requested certificate status and we wont get one | 1679 | /* If we've requested certificate status and we wont get one |
1892 | * tell the callback | 1680 | * tell the callback |
1893 | */ | 1681 | */ |
diff --git a/src/lib/libssl/src/ssl/tls1.h b/src/lib/libssl/src/ssl/tls1.h index f3341017a7..dbe8979a88 100644 --- a/src/lib/libssl/src/ssl/tls1.h +++ b/src/lib/libssl/src/ssl/tls1.h | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: tls1.h,v 1.17 2014/06/12 15:49:31 deraadt Exp $ */ | 1 | /* $OpenBSD: tls1.h,v 1.18 2014/06/13 04:29:13 miod 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 | * |
@@ -342,13 +342,6 @@ SSL_CTX_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB,(void (*)(void))cb) | |||
342 | #define SSL_CTX_set_tlsext_status_arg(ssl, arg) \ | 342 | #define SSL_CTX_set_tlsext_status_arg(ssl, arg) \ |
343 | SSL_CTX_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG,0, (void *)arg) | 343 | SSL_CTX_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG,0, (void *)arg) |
344 | 344 | ||
345 | #define SSL_set_tlsext_opaque_prf_input(s, src, len) \ | ||
346 | SSL_ctrl(s,SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT, len, src) | ||
347 | #define SSL_CTX_set_tlsext_opaque_prf_input_callback(ctx, cb) \ | ||
348 | SSL_CTX_callback_ctrl(ctx,SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB, (void (*)(void))cb) | ||
349 | #define SSL_CTX_set_tlsext_opaque_prf_input_callback_arg(ctx, arg) \ | ||
350 | SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB_ARG, 0, arg) | ||
351 | |||
352 | #define SSL_CTX_set_tlsext_ticket_key_cb(ssl, cb) \ | 345 | #define SSL_CTX_set_tlsext_ticket_key_cb(ssl, cb) \ |
353 | SSL_CTX_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB,(void (*)(void))cb) | 346 | SSL_CTX_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB,(void (*)(void))cb) |
354 | 347 | ||
diff --git a/src/lib/libssl/ssl.h b/src/lib/libssl/ssl.h index a550a442a0..cd71f7bcfe 100644 --- a/src/lib/libssl/ssl.h +++ b/src/lib/libssl/ssl.h | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ssl.h,v 1.52 2014/06/12 15:49:31 deraadt Exp $ */ | 1 | /* $OpenBSD: ssl.h,v 1.53 2014/06/13 04:29:13 miod 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 | * |
@@ -847,11 +847,6 @@ struct ssl_ctx_st { | |||
847 | int (*tlsext_status_cb)(SSL *ssl, void *arg); | 847 | int (*tlsext_status_cb)(SSL *ssl, void *arg); |
848 | void *tlsext_status_arg; | 848 | void *tlsext_status_arg; |
849 | 849 | ||
850 | /* draft-rescorla-tls-opaque-prf-input-00.txt information */ | ||
851 | int (*tlsext_opaque_prf_input_callback)(SSL *, void *peerinput, | ||
852 | size_t len, void *arg); | ||
853 | void *tlsext_opaque_prf_input_callback_arg; | ||
854 | |||
855 | #ifndef OPENSSL_NO_PSK | 850 | #ifndef OPENSSL_NO_PSK |
856 | char *psk_identity_hint; | 851 | char *psk_identity_hint; |
857 | unsigned int (*psk_client_callback)(SSL *ssl, const char *hint, | 852 | unsigned int (*psk_client_callback)(SSL *ssl, const char *hint, |
@@ -1201,10 +1196,6 @@ struct ssl_st { | |||
1201 | size_t tlsext_ellipticcurvelist_length; | 1196 | size_t tlsext_ellipticcurvelist_length; |
1202 | unsigned char *tlsext_ellipticcurvelist; /* our list */ | 1197 | unsigned char *tlsext_ellipticcurvelist; /* our list */ |
1203 | 1198 | ||
1204 | /* draft-rescorla-tls-opaque-prf-input-00.txt information to be used for handshakes */ | ||
1205 | void *tlsext_opaque_prf_input; | ||
1206 | size_t tlsext_opaque_prf_input_len; | ||
1207 | |||
1208 | /* TLS Session Ticket extension override */ | 1199 | /* TLS Session Ticket extension override */ |
1209 | TLS_SESSION_TICKET_EXT *tlsext_session_ticket; | 1200 | TLS_SESSION_TICKET_EXT *tlsext_session_ticket; |
1210 | 1201 | ||
@@ -1454,9 +1445,6 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) | |||
1454 | #define SSL_CTRL_SET_TLSEXT_DEBUG_ARG 57 | 1445 | #define SSL_CTRL_SET_TLSEXT_DEBUG_ARG 57 |
1455 | #define SSL_CTRL_GET_TLSEXT_TICKET_KEYS 58 | 1446 | #define SSL_CTRL_GET_TLSEXT_TICKET_KEYS 58 |
1456 | #define SSL_CTRL_SET_TLSEXT_TICKET_KEYS 59 | 1447 | #define SSL_CTRL_SET_TLSEXT_TICKET_KEYS 59 |
1457 | #define SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT 60 | ||
1458 | #define SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB 61 | ||
1459 | #define SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB_ARG 62 | ||
1460 | #define SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB 63 | 1448 | #define SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB 63 |
1461 | #define SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG 64 | 1449 | #define SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG 64 |
1462 | #define SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE 65 | 1450 | #define SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE 65 |
@@ -2259,7 +2247,6 @@ void ERR_load_SSL_strings(void); | |||
2259 | #define SSL_R_OLD_SESSION_CIPHER_NOT_RETURNED 197 | 2247 | #define SSL_R_OLD_SESSION_CIPHER_NOT_RETURNED 197 |
2260 | #define SSL_R_OLD_SESSION_COMPRESSION_ALGORITHM_NOT_RETURNED 344 | 2248 | #define SSL_R_OLD_SESSION_COMPRESSION_ALGORITHM_NOT_RETURNED 344 |
2261 | #define SSL_R_ONLY_TLS_ALLOWED_IN_FIPS_MODE 297 | 2249 | #define SSL_R_ONLY_TLS_ALLOWED_IN_FIPS_MODE 297 |
2262 | #define SSL_R_OPAQUE_PRF_INPUT_TOO_LONG 327 | ||
2263 | #define SSL_R_PACKET_LENGTH_TOO_LONG 198 | 2250 | #define SSL_R_PACKET_LENGTH_TOO_LONG 198 |
2264 | #define SSL_R_PARSE_TLSEXT 227 | 2251 | #define SSL_R_PARSE_TLSEXT 227 |
2265 | #define SSL_R_PATH_TOO_LONG 270 | 2252 | #define SSL_R_PATH_TOO_LONG 270 |
diff --git a/src/lib/libssl/ssl/shlib_version b/src/lib/libssl/ssl/shlib_version index aa54cbb404..361604a5eb 100644 --- a/src/lib/libssl/ssl/shlib_version +++ b/src/lib/libssl/ssl/shlib_version | |||
@@ -1,2 +1,2 @@ | |||
1 | major=24 | 1 | major=25 |
2 | minor=1 | 2 | minor=0 |
diff --git a/src/lib/libssl/ssl3.h b/src/lib/libssl/ssl3.h index 7378136646..7fd00be2d3 100644 --- a/src/lib/libssl/ssl3.h +++ b/src/lib/libssl/ssl3.h | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ssl3.h,v 1.21 2014/06/12 15:49:31 deraadt Exp $ */ | 1 | /* $OpenBSD: ssl3.h,v 1.22 2014/06/13 04:29:13 miod 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 | * |
@@ -452,15 +452,6 @@ typedef struct ssl3_state_st { | |||
452 | 452 | ||
453 | int in_read_app_data; | 453 | int in_read_app_data; |
454 | 454 | ||
455 | /* Opaque PRF input as used for the current handshake. | ||
456 | * These fields are used only if TLSEXT_TYPE_opaque_prf_input is defined | ||
457 | * (otherwise, they are merely present to improve binary compatibility) | ||
458 | */ | ||
459 | void *client_opaque_prf_input; | ||
460 | size_t client_opaque_prf_input_len; | ||
461 | void *server_opaque_prf_input; | ||
462 | size_t server_opaque_prf_input_len; | ||
463 | |||
464 | struct { | 455 | struct { |
465 | /* actually only needs to be 16+20 */ | 456 | /* actually only needs to be 16+20 */ |
466 | unsigned char cert_verify_md[EVP_MAX_MD_SIZE*2]; | 457 | unsigned char cert_verify_md[EVP_MAX_MD_SIZE*2]; |
diff --git a/src/lib/libssl/ssl_err.c b/src/lib/libssl/ssl_err.c index 2bb6dcb4a8..0f18b1bc5f 100644 --- a/src/lib/libssl/ssl_err.c +++ b/src/lib/libssl/ssl_err.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ssl_err.c,v 1.23 2014/06/12 15:49:31 deraadt Exp $ */ | 1 | /* $OpenBSD: ssl_err.c,v 1.24 2014/06/13 04:29:13 miod Exp $ */ |
2 | /* ==================================================================== | 2 | /* ==================================================================== |
3 | * Copyright (c) 1999-2011 The OpenSSL Project. All rights reserved. | 3 | * Copyright (c) 1999-2011 The OpenSSL Project. All rights reserved. |
4 | * | 4 | * |
@@ -454,7 +454,6 @@ static ERR_STRING_DATA SSL_str_reasons[]= { | |||
454 | {ERR_REASON(SSL_R_OLD_SESSION_CIPHER_NOT_RETURNED), "old session cipher not returned"}, | 454 | {ERR_REASON(SSL_R_OLD_SESSION_CIPHER_NOT_RETURNED), "old session cipher not returned"}, |
455 | {ERR_REASON(SSL_R_OLD_SESSION_COMPRESSION_ALGORITHM_NOT_RETURNED), "old session compression algorithm not returned"}, | 455 | {ERR_REASON(SSL_R_OLD_SESSION_COMPRESSION_ALGORITHM_NOT_RETURNED), "old session compression algorithm not returned"}, |
456 | {ERR_REASON(SSL_R_ONLY_TLS_ALLOWED_IN_FIPS_MODE), "only tls allowed in fips mode"}, | 456 | {ERR_REASON(SSL_R_ONLY_TLS_ALLOWED_IN_FIPS_MODE), "only tls allowed in fips mode"}, |
457 | {ERR_REASON(SSL_R_OPAQUE_PRF_INPUT_TOO_LONG), "opaque PRF input too long"}, | ||
458 | {ERR_REASON(SSL_R_PACKET_LENGTH_TOO_LONG), "packet length too long"}, | 457 | {ERR_REASON(SSL_R_PACKET_LENGTH_TOO_LONG), "packet length too long"}, |
459 | {ERR_REASON(SSL_R_PARSE_TLSEXT) , "parse tlsext"}, | 458 | {ERR_REASON(SSL_R_PARSE_TLSEXT) , "parse tlsext"}, |
460 | {ERR_REASON(SSL_R_PATH_TOO_LONG) , "path too long"}, | 459 | {ERR_REASON(SSL_R_PATH_TOO_LONG) , "path too long"}, |
diff --git a/src/lib/libssl/ssl_lib.c b/src/lib/libssl/ssl_lib.c index 54b737d482..05abdb3944 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.65 2014/06/12 15:49:31 deraadt Exp $ */ | 1 | /* $OpenBSD: ssl_lib.c,v 1.66 2014/06/13 04:29:13 miod 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 | * |
@@ -536,7 +536,6 @@ SSL_free(SSL *s) | |||
536 | SSL_CTX_free(s->initial_ctx); | 536 | SSL_CTX_free(s->initial_ctx); |
537 | free(s->tlsext_ecpointformatlist); | 537 | free(s->tlsext_ecpointformatlist); |
538 | free(s->tlsext_ellipticcurvelist); | 538 | free(s->tlsext_ellipticcurvelist); |
539 | free(s->tlsext_opaque_prf_input); | ||
540 | if (s->tlsext_ocsp_exts) | 539 | if (s->tlsext_ocsp_exts) |
541 | sk_X509_EXTENSION_pop_free(s->tlsext_ocsp_exts, | 540 | sk_X509_EXTENSION_pop_free(s->tlsext_ocsp_exts, |
542 | X509_EXTENSION_free); | 541 | X509_EXTENSION_free); |
diff --git a/src/lib/libssl/t1_enc.c b/src/lib/libssl/t1_enc.c index 304898aeb8..6d2e21c412 100644 --- a/src/lib/libssl/t1_enc.c +++ b/src/lib/libssl/t1_enc.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: t1_enc.c,v 1.54 2014/06/12 15:49:31 deraadt Exp $ */ | 1 | /* $OpenBSD: t1_enc.c,v 1.55 2014/06/13 04:29:13 miod 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 | * |
@@ -998,23 +998,6 @@ tls1_generate_master_secret(SSL *s, unsigned char *out, unsigned char *p, | |||
998 | const void *co = NULL, *so = NULL; | 998 | const void *co = NULL, *so = NULL; |
999 | int col = 0, sol = 0; | 999 | int col = 0, sol = 0; |
1000 | 1000 | ||
1001 | #ifdef TLSEXT_TYPE_opaque_prf_input | ||
1002 | if (s->s3->client_opaque_prf_input != NULL && | ||
1003 | s->s3->server_opaque_prf_input != NULL && | ||
1004 | s->s3->client_opaque_prf_input_len > 0 && | ||
1005 | s->s3->client_opaque_prf_input_len == | ||
1006 | s->s3->server_opaque_prf_input_len) { | ||
1007 | /* | ||
1008 | * sol must be same as col - see section 3.1 of | ||
1009 | * draft-rescorla-tls-opaque-prf-input-00.txt. | ||
1010 | */ | ||
1011 | co = s->s3->client_opaque_prf_input; | ||
1012 | col = s->s3->server_opaque_prf_input_len; | ||
1013 | so = s->s3->server_opaque_prf_input; | ||
1014 | sol = s->s3->client_opaque_prf_input_len; | ||
1015 | } | ||
1016 | #endif | ||
1017 | |||
1018 | tls1_PRF(ssl_get_algorithm2(s), | 1001 | tls1_PRF(ssl_get_algorithm2(s), |
1019 | TLS_MD_MASTER_SECRET_CONST, TLS_MD_MASTER_SECRET_CONST_SIZE, | 1002 | TLS_MD_MASTER_SECRET_CONST, TLS_MD_MASTER_SECRET_CONST_SIZE, |
1020 | s->s3->client_random, SSL3_RANDOM_SIZE, co, col, | 1003 | s->s3->client_random, SSL3_RANDOM_SIZE, co, col, |
diff --git a/src/lib/libssl/t1_lib.c b/src/lib/libssl/t1_lib.c index 6e4a29c4c8..b780faf603 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.45 2014/06/12 15:49:31 deraadt Exp $ */ | 1 | /* $OpenBSD: t1_lib.c,v 1.46 2014/06/13 04:29:13 miod 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 | * |
@@ -557,25 +557,6 @@ skip_ext: | |||
557 | ret += sizeof(tls12_sigalgs); | 557 | ret += sizeof(tls12_sigalgs); |
558 | } | 558 | } |
559 | 559 | ||
560 | #ifdef TLSEXT_TYPE_opaque_prf_input | ||
561 | if (s->s3->client_opaque_prf_input != NULL && | ||
562 | s->version != DTLS1_VERSION) { | ||
563 | size_t col = s->s3->client_opaque_prf_input_len; | ||
564 | |||
565 | if ((size_t)(limit - ret) < 6 + col) | ||
566 | return NULL; | ||
567 | if (col > 0xFFFD) /* can't happen */ | ||
568 | return NULL; | ||
569 | |||
570 | s2n(TLSEXT_TYPE_opaque_prf_input, ret); | ||
571 | |||
572 | s2n(col + 2, ret); | ||
573 | s2n(col, ret); | ||
574 | memcpy(ret, s->s3->client_opaque_prf_input, col); | ||
575 | ret += col; | ||
576 | } | ||
577 | #endif | ||
578 | |||
579 | if (s->tlsext_status_type == TLSEXT_STATUSTYPE_ocsp && | 560 | if (s->tlsext_status_type == TLSEXT_STATUSTYPE_ocsp && |
580 | s->version != DTLS1_VERSION) { | 561 | s->version != DTLS1_VERSION) { |
581 | int i; | 562 | int i; |
@@ -783,25 +764,6 @@ ssl_add_serverhello_tlsext(SSL *s, unsigned char *p, unsigned char *limit) | |||
783 | s2n(0, ret); | 764 | s2n(0, ret); |
784 | } | 765 | } |
785 | 766 | ||
786 | #ifdef TLSEXT_TYPE_opaque_prf_input | ||
787 | if (s->s3->server_opaque_prf_input != NULL && | ||
788 | s->version != DTLS1_VERSION) { | ||
789 | size_t sol = s->s3->server_opaque_prf_input_len; | ||
790 | |||
791 | if ((size_t)(limit - ret) < 6 + sol) | ||
792 | return NULL; | ||
793 | if (sol > 0xFFFD) /* can't happen */ | ||
794 | return NULL; | ||
795 | |||
796 | s2n(TLSEXT_TYPE_opaque_prf_input, ret); | ||
797 | |||
798 | s2n(sol + 2, ret); | ||
799 | s2n(sol, ret); | ||
800 | memcpy(ret, s->s3->server_opaque_prf_input, sol); | ||
801 | ret += sol; | ||
802 | } | ||
803 | #endif | ||
804 | |||
805 | #ifndef OPENSSL_NO_SRTP | 767 | #ifndef OPENSSL_NO_SRTP |
806 | if (s->srtp_profile) { | 768 | if (s->srtp_profile) { |
807 | int el; | 769 | int el; |
@@ -1131,35 +1093,6 @@ ssl_parse_clienthello_tlsext(SSL *s, unsigned char **p, unsigned char *d, | |||
1131 | memcpy(s->session->tlsext_ellipticcurvelist, sdata, ellipticcurvelist_length); | 1093 | memcpy(s->session->tlsext_ellipticcurvelist, sdata, ellipticcurvelist_length); |
1132 | } | 1094 | } |
1133 | } | 1095 | } |
1134 | #ifdef TLSEXT_TYPE_opaque_prf_input | ||
1135 | else if (type == TLSEXT_TYPE_opaque_prf_input && | ||
1136 | s->version != DTLS1_VERSION) { | ||
1137 | unsigned char *sdata = data; | ||
1138 | |||
1139 | if (size < 2) { | ||
1140 | *al = SSL_AD_DECODE_ERROR; | ||
1141 | return 0; | ||
1142 | } | ||
1143 | n2s(sdata, s->s3->client_opaque_prf_input_len); | ||
1144 | if (s->s3->client_opaque_prf_input_len != size - 2) { | ||
1145 | *al = SSL_AD_DECODE_ERROR; | ||
1146 | return 0; | ||
1147 | } | ||
1148 | |||
1149 | free(s->s3->client_opaque_prf_input); | ||
1150 | s->s3->client_opaque_prf_input = NULL; | ||
1151 | |||
1152 | if (s->s3->client_opaque_prf_input_len != 0) { | ||
1153 | s->s3->client_opaque_prf_input = | ||
1154 | BUF_memdup(sdata, | ||
1155 | s->s3->client_opaque_prf_input_len); | ||
1156 | if (s->s3->client_opaque_prf_input == NULL) { | ||
1157 | *al = TLS1_AD_INTERNAL_ERROR; | ||
1158 | return 0; | ||
1159 | } | ||
1160 | } | ||
1161 | } | ||
1162 | #endif | ||
1163 | else if (type == TLSEXT_TYPE_session_ticket) { | 1096 | else if (type == TLSEXT_TYPE_session_ticket) { |
1164 | if (s->tls_session_ticket_ext_cb && | 1097 | if (s->tls_session_ticket_ext_cb && |
1165 | !s->tls_session_ticket_ext_cb(s, data, size, s->tls_session_ticket_ext_cb_arg)) { | 1098 | !s->tls_session_ticket_ext_cb(s, data, size, s->tls_session_ticket_ext_cb_arg)) { |
@@ -1428,35 +1361,6 @@ ssl_parse_serverhello_tlsext(SSL *s, unsigned char **p, unsigned char *d, | |||
1428 | } | 1361 | } |
1429 | s->tlsext_ticket_expected = 1; | 1362 | s->tlsext_ticket_expected = 1; |
1430 | } | 1363 | } |
1431 | #ifdef TLSEXT_TYPE_opaque_prf_input | ||
1432 | else if (type == TLSEXT_TYPE_opaque_prf_input && | ||
1433 | s->version != DTLS1_VERSION) { | ||
1434 | unsigned char *sdata = data; | ||
1435 | |||
1436 | if (size < 2) { | ||
1437 | *al = SSL_AD_DECODE_ERROR; | ||
1438 | return 0; | ||
1439 | } | ||
1440 | n2s(sdata, s->s3->server_opaque_prf_input_len); | ||
1441 | if (s->s3->server_opaque_prf_input_len != size - 2) { | ||
1442 | *al = SSL_AD_DECODE_ERROR; | ||
1443 | return 0; | ||
1444 | } | ||
1445 | |||
1446 | free(s->s3->server_opaque_prf_input); | ||
1447 | s->s3->server_opaque_prf_input = NULL; | ||
1448 | |||
1449 | if (s->s3->server_opaque_prf_input_len != 0) | ||
1450 | s->s3->server_opaque_prf_input = | ||
1451 | BUF_memdup(sdata, | ||
1452 | s->s3->server_opaque_prf_input_len); | ||
1453 | if (s->s3->server_opaque_prf_input == NULL) { | ||
1454 | *al = TLS1_AD_INTERNAL_ERROR; | ||
1455 | return 0; | ||
1456 | } | ||
1457 | } | ||
1458 | } | ||
1459 | #endif | ||
1460 | else if (type == TLSEXT_TYPE_status_request && | 1364 | else if (type == TLSEXT_TYPE_status_request && |
1461 | s->version != DTLS1_VERSION) { | 1365 | s->version != DTLS1_VERSION) { |
1462 | /* MUST be empty and only sent if we've requested | 1366 | /* MUST be empty and only sent if we've requested |
@@ -1609,42 +1513,6 @@ ssl_prepare_clienthello_tlsext(SSL *s) | |||
1609 | } | 1513 | } |
1610 | } | 1514 | } |
1611 | 1515 | ||
1612 | #ifdef TLSEXT_TYPE_opaque_prf_input | ||
1613 | { | ||
1614 | int r = 1; | ||
1615 | |||
1616 | if (s->ctx->tlsext_opaque_prf_input_callback != 0) { | ||
1617 | r = s->ctx->tlsext_opaque_prf_input_callback(s, NULL, 0, | ||
1618 | s->ctx->tlsext_opaque_prf_input_callback_arg); | ||
1619 | if (!r) | ||
1620 | return -1; | ||
1621 | } | ||
1622 | |||
1623 | if (s->tlsext_opaque_prf_input != NULL) { | ||
1624 | free(s->s3->client_opaque_prf_input); | ||
1625 | s->s3->client_opaque_prf_input = NULL; | ||
1626 | if (s->tlsext_opaque_prf_input_len != 0) { | ||
1627 | s->s3->client_opaque_prf_input = | ||
1628 | BUF_memdup(s->tlsext_opaque_prf_input, | ||
1629 | s->tlsext_opaque_prf_input_len); | ||
1630 | if (s->s3->client_opaque_prf_input == NULL) { | ||
1631 | SSLerr(SSL_F_SSL_PREPARE_CLIENTHELLO_TLSEXT, | ||
1632 | ERR_R_MALLOC_FAILURE); | ||
1633 | return -1; | ||
1634 | } | ||
1635 | } | ||
1636 | s->s3->client_opaque_prf_input_len = | ||
1637 | s->tlsext_opaque_prf_input_len; | ||
1638 | } | ||
1639 | |||
1640 | if (r == 2) { | ||
1641 | /* at callback's request, insist on receiving an appropriate server opaque PRF input */ | ||
1642 | s->s3->server_opaque_prf_input_len = | ||
1643 | s->tlsext_opaque_prf_input_len; | ||
1644 | } | ||
1645 | } | ||
1646 | #endif | ||
1647 | |||
1648 | return 1; | 1516 | return 1; |
1649 | } | 1517 | } |
1650 | 1518 | ||
@@ -1694,65 +1562,6 @@ ssl_check_clienthello_tlsext_early(SSL *s) | |||
1694 | else if (s->initial_ctx != NULL && s->initial_ctx->tlsext_servername_callback != 0) | 1562 | else if (s->initial_ctx != NULL && s->initial_ctx->tlsext_servername_callback != 0) |
1695 | ret = s->initial_ctx->tlsext_servername_callback(s, &al, s->initial_ctx->tlsext_servername_arg); | 1563 | ret = s->initial_ctx->tlsext_servername_callback(s, &al, s->initial_ctx->tlsext_servername_arg); |
1696 | 1564 | ||
1697 | #ifdef TLSEXT_TYPE_opaque_prf_input | ||
1698 | { | ||
1699 | /* This sort of belongs into ssl_prepare_serverhello_tlsext(), | ||
1700 | * but we might be sending an alert in response to the client hello, | ||
1701 | * so this has to happen here in | ||
1702 | * ssl_check_clienthello_tlsext_early(). */ | ||
1703 | |||
1704 | int r = 1; | ||
1705 | |||
1706 | if (s->ctx->tlsext_opaque_prf_input_callback != 0) { | ||
1707 | r = s->ctx->tlsext_opaque_prf_input_callback(s, NULL, 0, | ||
1708 | s->ctx->tlsext_opaque_prf_input_callback_arg); | ||
1709 | if (!r) { | ||
1710 | ret = SSL_TLSEXT_ERR_ALERT_FATAL; | ||
1711 | al = SSL_AD_INTERNAL_ERROR; | ||
1712 | goto err; | ||
1713 | } | ||
1714 | } | ||
1715 | |||
1716 | free(s->s3->server_opaque_prf_input); | ||
1717 | s->s3->server_opaque_prf_input = NULL; | ||
1718 | |||
1719 | if (s->tlsext_opaque_prf_input != NULL) { | ||
1720 | if (s->s3->client_opaque_prf_input != NULL && | ||
1721 | s->s3->client_opaque_prf_input_len == | ||
1722 | s->tlsext_opaque_prf_input_len) { | ||
1723 | /* | ||
1724 | * Can only use this extension if we have a | ||
1725 | * server opaque PRF input of the same length | ||
1726 | * as the client opaque PRF input! | ||
1727 | */ | ||
1728 | if (s->tlsext_opaque_prf_input_len != 0) { | ||
1729 | s->s3->server_opaque_prf_input = | ||
1730 | BUF_memdup(s->tlsext_opaque_prf_input, | ||
1731 | s->tlsext_opaque_prf_input_len); | ||
1732 | if (s->s3->server_opaque_prf_input == | ||
1733 | NULL) { | ||
1734 | ret = SSL_TLSEXT_ERR_ALERT_FATAL; | ||
1735 | al = SSL_AD_INTERNAL_ERROR; | ||
1736 | goto err; | ||
1737 | } | ||
1738 | } | ||
1739 | s->s3->server_opaque_prf_input_len = | ||
1740 | s->tlsext_opaque_prf_input_len; | ||
1741 | } | ||
1742 | } | ||
1743 | |||
1744 | if (r == 2 && s->s3->server_opaque_prf_input == NULL) { | ||
1745 | /* The callback wants to enforce use of the extension, | ||
1746 | * but we can't do that with the client opaque PRF input; | ||
1747 | * abort the handshake. | ||
1748 | */ | ||
1749 | ret = SSL_TLSEXT_ERR_ALERT_FATAL; | ||
1750 | al = SSL_AD_HANDSHAKE_FAILURE; | ||
1751 | } | ||
1752 | } | ||
1753 | |||
1754 | err: | ||
1755 | #endif | ||
1756 | switch (ret) { | 1565 | switch (ret) { |
1757 | case SSL_TLSEXT_ERR_ALERT_FATAL: | 1566 | case SSL_TLSEXT_ERR_ALERT_FATAL: |
1758 | ssl3_send_alert(s, SSL3_AL_FATAL, al); | 1567 | ssl3_send_alert(s, SSL3_AL_FATAL, al); |
@@ -1867,27 +1676,6 @@ ssl_check_serverhello_tlsext(SSL *s) | |||
1867 | else if (s->initial_ctx != NULL && s->initial_ctx->tlsext_servername_callback != 0) | 1676 | else if (s->initial_ctx != NULL && s->initial_ctx->tlsext_servername_callback != 0) |
1868 | ret = s->initial_ctx->tlsext_servername_callback(s, &al, s->initial_ctx->tlsext_servername_arg); | 1677 | ret = s->initial_ctx->tlsext_servername_callback(s, &al, s->initial_ctx->tlsext_servername_arg); |
1869 | 1678 | ||
1870 | #ifdef TLSEXT_TYPE_opaque_prf_input | ||
1871 | if (s->s3->server_opaque_prf_input_len > 0) { | ||
1872 | /* This case may indicate that we, as a client, want to insist on using opaque PRF inputs. | ||
1873 | * So first verify that we really have a value from the server too. */ | ||
1874 | |||
1875 | if (s->s3->server_opaque_prf_input == NULL) { | ||
1876 | ret = SSL_TLSEXT_ERR_ALERT_FATAL; | ||
1877 | al = SSL_AD_HANDSHAKE_FAILURE; | ||
1878 | } | ||
1879 | |||
1880 | /* Anytime the server *has* sent an opaque PRF input, we need to check | ||
1881 | * that we have a client opaque PRF input of the same size. */ | ||
1882 | if (s->s3->client_opaque_prf_input == NULL || | ||
1883 | s->s3->client_opaque_prf_input_len != | ||
1884 | s->s3->server_opaque_prf_input_len) { | ||
1885 | ret = SSL_TLSEXT_ERR_ALERT_FATAL; | ||
1886 | al = SSL_AD_ILLEGAL_PARAMETER; | ||
1887 | } | ||
1888 | } | ||
1889 | #endif | ||
1890 | |||
1891 | /* If we've requested certificate status and we wont get one | 1679 | /* If we've requested certificate status and we wont get one |
1892 | * tell the callback | 1680 | * tell the callback |
1893 | */ | 1681 | */ |
diff --git a/src/lib/libssl/tls1.h b/src/lib/libssl/tls1.h index f3341017a7..dbe8979a88 100644 --- a/src/lib/libssl/tls1.h +++ b/src/lib/libssl/tls1.h | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: tls1.h,v 1.17 2014/06/12 15:49:31 deraadt Exp $ */ | 1 | /* $OpenBSD: tls1.h,v 1.18 2014/06/13 04:29:13 miod 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 | * |
@@ -342,13 +342,6 @@ SSL_CTX_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB,(void (*)(void))cb) | |||
342 | #define SSL_CTX_set_tlsext_status_arg(ssl, arg) \ | 342 | #define SSL_CTX_set_tlsext_status_arg(ssl, arg) \ |
343 | SSL_CTX_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG,0, (void *)arg) | 343 | SSL_CTX_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG,0, (void *)arg) |
344 | 344 | ||
345 | #define SSL_set_tlsext_opaque_prf_input(s, src, len) \ | ||
346 | SSL_ctrl(s,SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT, len, src) | ||
347 | #define SSL_CTX_set_tlsext_opaque_prf_input_callback(ctx, cb) \ | ||
348 | SSL_CTX_callback_ctrl(ctx,SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB, (void (*)(void))cb) | ||
349 | #define SSL_CTX_set_tlsext_opaque_prf_input_callback_arg(ctx, arg) \ | ||
350 | SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB_ARG, 0, arg) | ||
351 | |||
352 | #define SSL_CTX_set_tlsext_ticket_key_cb(ssl, cb) \ | 345 | #define SSL_CTX_set_tlsext_ticket_key_cb(ssl, cb) \ |
353 | SSL_CTX_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB,(void (*)(void))cb) | 346 | SSL_CTX_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB,(void (*)(void))cb) |
354 | 347 | ||
diff --git a/src/regress/lib/libssl/ssl/ssltest.c b/src/regress/lib/libssl/ssl/ssltest.c index 38c70906bb..ad24b1f713 100644 --- a/src/regress/lib/libssl/ssl/ssltest.c +++ b/src/regress/lib/libssl/ssl/ssltest.c | |||
@@ -380,31 +380,6 @@ err: | |||
380 | } | 380 | } |
381 | } | 381 | } |
382 | 382 | ||
383 | #ifdef TLSEXT_TYPE_opaque_prf_input | ||
384 | struct cb_info_st { void *input; | ||
385 | size_t len; | ||
386 | int ret; | ||
387 | }; | ||
388 | |||
389 | struct cb_info_st co1 = { "C", 1, 1 }; /* try to negotiate oqaque PRF input */ | ||
390 | struct cb_info_st co2 = { "C", 1, 2 }; /* insist on oqaque PRF input */ | ||
391 | struct cb_info_st so1 = { "S", 1, 1 }; /* try to negotiate oqaque PRF input */ | ||
392 | struct cb_info_st so2 = { "S", 1, 2 }; /* insist on oqaque PRF input */ | ||
393 | |||
394 | int | ||
395 | opaque_prf_input_cb(SSL *ssl, void *peerinput, size_t len, void *arg_) | ||
396 | { | ||
397 | struct cb_info_st *arg = arg_; | ||
398 | |||
399 | if (arg == NULL) | ||
400 | return 1; | ||
401 | |||
402 | if (!SSL_set_tlsext_opaque_prf_input(ssl, arg->input, arg->len)) | ||
403 | return 0; | ||
404 | return arg->ret; | ||
405 | } | ||
406 | #endif | ||
407 | |||
408 | int | 383 | int |
409 | main(int argc, char *argv[]) | 384 | main(int argc, char *argv[]) |
410 | { | 385 | { |
@@ -747,13 +722,6 @@ bad: | |||
747 | 722 | ||
748 | SSL_CTX_set_tmp_rsa_callback(s_ctx, tmp_rsa_cb); | 723 | SSL_CTX_set_tmp_rsa_callback(s_ctx, tmp_rsa_cb); |
749 | 724 | ||
750 | #ifdef TLSEXT_TYPE_opaque_prf_input | ||
751 | SSL_CTX_set_tlsext_opaque_prf_input_callback(c_ctx, opaque_prf_input_cb); | ||
752 | SSL_CTX_set_tlsext_opaque_prf_input_callback(s_ctx, opaque_prf_input_cb); | ||
753 | SSL_CTX_set_tlsext_opaque_prf_input_callback_arg(c_ctx, &co1); /* or &co2 or NULL */ | ||
754 | SSL_CTX_set_tlsext_opaque_prf_input_callback_arg(s_ctx, &so1); /* or &so2 or NULL */ | ||
755 | #endif | ||
756 | |||
757 | if (!SSL_CTX_use_certificate_file(s_ctx, server_cert, SSL_FILETYPE_PEM)) { | 725 | if (!SSL_CTX_use_certificate_file(s_ctx, server_cert, SSL_FILETYPE_PEM)) { |
758 | ERR_print_errors(bio_err); | 726 | ERR_print_errors(bio_err); |
759 | } else if (!SSL_CTX_use_PrivateKey_file(s_ctx, | 727 | } else if (!SSL_CTX_use_PrivateKey_file(s_ctx, |