diff options
author | doug <> | 2015-06-20 04:04:36 +0000 |
---|---|---|
committer | doug <> | 2015-06-20 04:04:36 +0000 |
commit | 73cef548cdfd8de314b5aba376df5f39c4bf1b6e (patch) | |
tree | 93cc5d2bdea8ae6a303cc4177da840b08097950c | |
parent | 7e40cd02570f741c84e7beaf1489fbc7826363c7 (diff) | |
download | openbsd-73cef548cdfd8de314b5aba376df5f39c4bf1b6e.tar.gz openbsd-73cef548cdfd8de314b5aba376df5f39c4bf1b6e.tar.bz2 openbsd-73cef548cdfd8de314b5aba376df5f39c4bf1b6e.zip |
Convert ssl_parse_clienthello_renegotiate_ext to CBS.
ok miod@, tweak + ok jsing@
-rw-r--r-- | src/lib/libssl/src/ssl/ssl_locl.h | 4 | ||||
-rw-r--r-- | src/lib/libssl/src/ssl/t1_reneg.c | 25 | ||||
-rw-r--r-- | src/lib/libssl/ssl_locl.h | 4 | ||||
-rw-r--r-- | src/lib/libssl/t1_reneg.c | 25 |
4 files changed, 28 insertions, 30 deletions
diff --git a/src/lib/libssl/src/ssl/ssl_locl.h b/src/lib/libssl/src/ssl/ssl_locl.h index 794769b79c..b55e8265af 100644 --- a/src/lib/libssl/src/ssl/ssl_locl.h +++ b/src/lib/libssl/src/ssl/ssl_locl.h | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ssl_locl.h,v 1.91 2015/06/18 22:51:05 doug Exp $ */ | 1 | /* $OpenBSD: ssl_locl.h,v 1.92 2015/06/20 04:04:35 doug 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 | * |
@@ -839,7 +839,7 @@ int ssl_parse_serverhello_renegotiate_ext(SSL *s, unsigned char *d, | |||
839 | int len, int *al); | 839 | int len, int *al); |
840 | int ssl_add_clienthello_renegotiate_ext(SSL *s, unsigned char *p, | 840 | int ssl_add_clienthello_renegotiate_ext(SSL *s, unsigned char *p, |
841 | int *len, int maxlen); | 841 | int *len, int maxlen); |
842 | int ssl_parse_clienthello_renegotiate_ext(SSL *s, unsigned char *d, | 842 | int ssl_parse_clienthello_renegotiate_ext(SSL *s, const unsigned char *d, |
843 | int len, int *al); | 843 | int len, int *al); |
844 | long ssl_get_algorithm2(SSL *s); | 844 | long ssl_get_algorithm2(SSL *s); |
845 | int tls1_process_sigalgs(SSL *s, const unsigned char *data, int dsize); | 845 | int tls1_process_sigalgs(SSL *s, const unsigned char *data, int dsize); |
diff --git a/src/lib/libssl/src/ssl/t1_reneg.c b/src/lib/libssl/src/ssl/t1_reneg.c index c93105ef4d..52d1754d94 100644 --- a/src/lib/libssl/src/ssl/t1_reneg.c +++ b/src/lib/libssl/src/ssl/t1_reneg.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: t1_reneg.c,v 1.9 2014/11/16 14:12:47 jsing Exp $ */ | 1 | /* $OpenBSD: t1_reneg.c,v 1.10 2015/06/20 04:04:36 doug 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 | * |
@@ -114,6 +114,7 @@ | |||
114 | #include <openssl/objects.h> | 114 | #include <openssl/objects.h> |
115 | 115 | ||
116 | #include "ssl_locl.h" | 116 | #include "ssl_locl.h" |
117 | #include "bytestring.h" | ||
117 | 118 | ||
118 | /* Add the client's renegotiation binding */ | 119 | /* Add the client's renegotiation binding */ |
119 | int | 120 | int |
@@ -144,23 +145,22 @@ ssl_add_clienthello_renegotiate_ext(SSL *s, unsigned char *p, int *len, | |||
144 | /* Parse the client's renegotiation binding and abort if it's not | 145 | /* Parse the client's renegotiation binding and abort if it's not |
145 | right */ | 146 | right */ |
146 | int | 147 | int |
147 | ssl_parse_clienthello_renegotiate_ext(SSL *s, unsigned char *d, int len, | 148 | ssl_parse_clienthello_renegotiate_ext(SSL *s, const unsigned char *d, int len, |
148 | int *al) | 149 | int *al) |
149 | { | 150 | { |
150 | int ilen; | 151 | CBS cbs, reneg; |
151 | 152 | ||
152 | /* Parse the length byte */ | 153 | if (len < 0) { |
153 | if (len < 1) { | ||
154 | SSLerr(SSL_F_SSL_PARSE_CLIENTHELLO_RENEGOTIATE_EXT, | 154 | SSLerr(SSL_F_SSL_PARSE_CLIENTHELLO_RENEGOTIATE_EXT, |
155 | SSL_R_RENEGOTIATION_ENCODING_ERR); | 155 | SSL_R_RENEGOTIATION_ENCODING_ERR); |
156 | *al = SSL_AD_ILLEGAL_PARAMETER; | 156 | *al = SSL_AD_ILLEGAL_PARAMETER; |
157 | return 0; | 157 | return 0; |
158 | } | 158 | } |
159 | ilen = *d; | ||
160 | d++; | ||
161 | 159 | ||
162 | /* Consistency check */ | 160 | CBS_init(&cbs, d, len); |
163 | if ((ilen + 1) != len) { | 161 | if (!CBS_get_u8_length_prefixed(&cbs, &reneg) || |
162 | /* Consistency check */ | ||
163 | CBS_len(&cbs) != 0) { | ||
164 | SSLerr(SSL_F_SSL_PARSE_CLIENTHELLO_RENEGOTIATE_EXT, | 164 | SSLerr(SSL_F_SSL_PARSE_CLIENTHELLO_RENEGOTIATE_EXT, |
165 | SSL_R_RENEGOTIATION_ENCODING_ERR); | 165 | SSL_R_RENEGOTIATION_ENCODING_ERR); |
166 | *al = SSL_AD_ILLEGAL_PARAMETER; | 166 | *al = SSL_AD_ILLEGAL_PARAMETER; |
@@ -168,22 +168,21 @@ ssl_parse_clienthello_renegotiate_ext(SSL *s, unsigned char *d, int len, | |||
168 | } | 168 | } |
169 | 169 | ||
170 | /* Check that the extension matches */ | 170 | /* Check that the extension matches */ |
171 | if (ilen != s->s3->previous_client_finished_len) { | 171 | if (CBS_len(&reneg) != s->s3->previous_client_finished_len) { |
172 | SSLerr(SSL_F_SSL_PARSE_CLIENTHELLO_RENEGOTIATE_EXT, | 172 | SSLerr(SSL_F_SSL_PARSE_CLIENTHELLO_RENEGOTIATE_EXT, |
173 | SSL_R_RENEGOTIATION_MISMATCH); | 173 | SSL_R_RENEGOTIATION_MISMATCH); |
174 | *al = SSL_AD_HANDSHAKE_FAILURE; | 174 | *al = SSL_AD_HANDSHAKE_FAILURE; |
175 | return 0; | 175 | return 0; |
176 | } | 176 | } |
177 | 177 | ||
178 | if (timingsafe_memcmp(d, s->s3->previous_client_finished, | 178 | if (!CBS_mem_equal(&reneg, s->s3->previous_client_finished, |
179 | s->s3->previous_client_finished_len) != 0) { | 179 | s->s3->previous_client_finished_len)) { |
180 | SSLerr(SSL_F_SSL_PARSE_CLIENTHELLO_RENEGOTIATE_EXT, | 180 | SSLerr(SSL_F_SSL_PARSE_CLIENTHELLO_RENEGOTIATE_EXT, |
181 | SSL_R_RENEGOTIATION_MISMATCH); | 181 | SSL_R_RENEGOTIATION_MISMATCH); |
182 | *al = SSL_AD_HANDSHAKE_FAILURE; | 182 | *al = SSL_AD_HANDSHAKE_FAILURE; |
183 | return 0; | 183 | return 0; |
184 | } | 184 | } |
185 | 185 | ||
186 | |||
187 | s->s3->send_connection_binding = 1; | 186 | s->s3->send_connection_binding = 1; |
188 | 187 | ||
189 | return 1; | 188 | return 1; |
diff --git a/src/lib/libssl/ssl_locl.h b/src/lib/libssl/ssl_locl.h index 794769b79c..b55e8265af 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.91 2015/06/18 22:51:05 doug Exp $ */ | 1 | /* $OpenBSD: ssl_locl.h,v 1.92 2015/06/20 04:04:35 doug 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 | * |
@@ -839,7 +839,7 @@ int ssl_parse_serverhello_renegotiate_ext(SSL *s, unsigned char *d, | |||
839 | int len, int *al); | 839 | int len, int *al); |
840 | int ssl_add_clienthello_renegotiate_ext(SSL *s, unsigned char *p, | 840 | int ssl_add_clienthello_renegotiate_ext(SSL *s, unsigned char *p, |
841 | int *len, int maxlen); | 841 | int *len, int maxlen); |
842 | int ssl_parse_clienthello_renegotiate_ext(SSL *s, unsigned char *d, | 842 | int ssl_parse_clienthello_renegotiate_ext(SSL *s, const unsigned char *d, |
843 | int len, int *al); | 843 | int len, int *al); |
844 | long ssl_get_algorithm2(SSL *s); | 844 | long ssl_get_algorithm2(SSL *s); |
845 | int tls1_process_sigalgs(SSL *s, const unsigned char *data, int dsize); | 845 | int tls1_process_sigalgs(SSL *s, const unsigned char *data, int dsize); |
diff --git a/src/lib/libssl/t1_reneg.c b/src/lib/libssl/t1_reneg.c index c93105ef4d..52d1754d94 100644 --- a/src/lib/libssl/t1_reneg.c +++ b/src/lib/libssl/t1_reneg.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: t1_reneg.c,v 1.9 2014/11/16 14:12:47 jsing Exp $ */ | 1 | /* $OpenBSD: t1_reneg.c,v 1.10 2015/06/20 04:04:36 doug 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 | * |
@@ -114,6 +114,7 @@ | |||
114 | #include <openssl/objects.h> | 114 | #include <openssl/objects.h> |
115 | 115 | ||
116 | #include "ssl_locl.h" | 116 | #include "ssl_locl.h" |
117 | #include "bytestring.h" | ||
117 | 118 | ||
118 | /* Add the client's renegotiation binding */ | 119 | /* Add the client's renegotiation binding */ |
119 | int | 120 | int |
@@ -144,23 +145,22 @@ ssl_add_clienthello_renegotiate_ext(SSL *s, unsigned char *p, int *len, | |||
144 | /* Parse the client's renegotiation binding and abort if it's not | 145 | /* Parse the client's renegotiation binding and abort if it's not |
145 | right */ | 146 | right */ |
146 | int | 147 | int |
147 | ssl_parse_clienthello_renegotiate_ext(SSL *s, unsigned char *d, int len, | 148 | ssl_parse_clienthello_renegotiate_ext(SSL *s, const unsigned char *d, int len, |
148 | int *al) | 149 | int *al) |
149 | { | 150 | { |
150 | int ilen; | 151 | CBS cbs, reneg; |
151 | 152 | ||
152 | /* Parse the length byte */ | 153 | if (len < 0) { |
153 | if (len < 1) { | ||
154 | SSLerr(SSL_F_SSL_PARSE_CLIENTHELLO_RENEGOTIATE_EXT, | 154 | SSLerr(SSL_F_SSL_PARSE_CLIENTHELLO_RENEGOTIATE_EXT, |
155 | SSL_R_RENEGOTIATION_ENCODING_ERR); | 155 | SSL_R_RENEGOTIATION_ENCODING_ERR); |
156 | *al = SSL_AD_ILLEGAL_PARAMETER; | 156 | *al = SSL_AD_ILLEGAL_PARAMETER; |
157 | return 0; | 157 | return 0; |
158 | } | 158 | } |
159 | ilen = *d; | ||
160 | d++; | ||
161 | 159 | ||
162 | /* Consistency check */ | 160 | CBS_init(&cbs, d, len); |
163 | if ((ilen + 1) != len) { | 161 | if (!CBS_get_u8_length_prefixed(&cbs, &reneg) || |
162 | /* Consistency check */ | ||
163 | CBS_len(&cbs) != 0) { | ||
164 | SSLerr(SSL_F_SSL_PARSE_CLIENTHELLO_RENEGOTIATE_EXT, | 164 | SSLerr(SSL_F_SSL_PARSE_CLIENTHELLO_RENEGOTIATE_EXT, |
165 | SSL_R_RENEGOTIATION_ENCODING_ERR); | 165 | SSL_R_RENEGOTIATION_ENCODING_ERR); |
166 | *al = SSL_AD_ILLEGAL_PARAMETER; | 166 | *al = SSL_AD_ILLEGAL_PARAMETER; |
@@ -168,22 +168,21 @@ ssl_parse_clienthello_renegotiate_ext(SSL *s, unsigned char *d, int len, | |||
168 | } | 168 | } |
169 | 169 | ||
170 | /* Check that the extension matches */ | 170 | /* Check that the extension matches */ |
171 | if (ilen != s->s3->previous_client_finished_len) { | 171 | if (CBS_len(&reneg) != s->s3->previous_client_finished_len) { |
172 | SSLerr(SSL_F_SSL_PARSE_CLIENTHELLO_RENEGOTIATE_EXT, | 172 | SSLerr(SSL_F_SSL_PARSE_CLIENTHELLO_RENEGOTIATE_EXT, |
173 | SSL_R_RENEGOTIATION_MISMATCH); | 173 | SSL_R_RENEGOTIATION_MISMATCH); |
174 | *al = SSL_AD_HANDSHAKE_FAILURE; | 174 | *al = SSL_AD_HANDSHAKE_FAILURE; |
175 | return 0; | 175 | return 0; |
176 | } | 176 | } |
177 | 177 | ||
178 | if (timingsafe_memcmp(d, s->s3->previous_client_finished, | 178 | if (!CBS_mem_equal(&reneg, s->s3->previous_client_finished, |
179 | s->s3->previous_client_finished_len) != 0) { | 179 | s->s3->previous_client_finished_len)) { |
180 | SSLerr(SSL_F_SSL_PARSE_CLIENTHELLO_RENEGOTIATE_EXT, | 180 | SSLerr(SSL_F_SSL_PARSE_CLIENTHELLO_RENEGOTIATE_EXT, |
181 | SSL_R_RENEGOTIATION_MISMATCH); | 181 | SSL_R_RENEGOTIATION_MISMATCH); |
182 | *al = SSL_AD_HANDSHAKE_FAILURE; | 182 | *al = SSL_AD_HANDSHAKE_FAILURE; |
183 | return 0; | 183 | return 0; |
184 | } | 184 | } |
185 | 185 | ||
186 | |||
187 | s->s3->send_connection_binding = 1; | 186 | s->s3->send_connection_binding = 1; |
188 | 187 | ||
189 | return 1; | 188 | return 1; |