diff options
author | jsing <> | 2014-04-14 16:07:22 +0000 |
---|---|---|
committer | jsing <> | 2014-04-14 16:07:22 +0000 |
commit | 3779c39bff8e2ae1adcc6f1324eb388d0bd49a15 (patch) | |
tree | 59d0c287f42ab034084280f620d44a0f68d282e7 /src | |
parent | 0d0163b85ca991957ea599bb646ef136beaef4d0 (diff) | |
download | openbsd-3779c39bff8e2ae1adcc6f1324eb388d0bd49a15.tar.gz openbsd-3779c39bff8e2ae1adcc6f1324eb388d0bd49a15.tar.bz2 openbsd-3779c39bff8e2ae1adcc6f1324eb388d0bd49a15.zip |
First pass at applying KNF to the OpenSSL code, which almost makes it
readable. This pass is whitespace only and can readily be verified using
tr and md5.
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/libssl/s3_both.c | 668 | ||||
-rw-r--r-- | src/lib/libssl/s3_cbc.c | 445 | ||||
-rw-r--r-- | src/lib/libssl/s3_lib.c | 5293 | ||||
-rw-r--r-- | src/lib/libssl/s3_pkt.c | 1223 | ||||
-rw-r--r-- | src/lib/libssl/src/ssl/s3_both.c | 668 | ||||
-rw-r--r-- | src/lib/libssl/src/ssl/s3_cbc.c | 445 | ||||
-rw-r--r-- | src/lib/libssl/src/ssl/s3_enc.c | 932 | ||||
-rw-r--r-- | src/lib/libssl/src/ssl/s3_lib.c | 5293 | ||||
-rw-r--r-- | src/lib/libssl/src/ssl/s3_meth.c | 18 | ||||
-rw-r--r-- | src/lib/libssl/src/ssl/s3_pkt.c | 1223 |
10 files changed, 7852 insertions, 8356 deletions
diff --git a/src/lib/libssl/s3_both.c b/src/lib/libssl/s3_both.c index 77f825af31..b2fd5c6f80 100644 --- a/src/lib/libssl/s3_both.c +++ b/src/lib/libssl/s3_both.c | |||
@@ -125,82 +125,81 @@ | |||
125 | #include <openssl/x509.h> | 125 | #include <openssl/x509.h> |
126 | 126 | ||
127 | /* send s->init_buf in records of type 'type' (SSL3_RT_HANDSHAKE or SSL3_RT_CHANGE_CIPHER_SPEC) */ | 127 | /* send s->init_buf in records of type 'type' (SSL3_RT_HANDSHAKE or SSL3_RT_CHANGE_CIPHER_SPEC) */ |
128 | int ssl3_do_write(SSL *s, int type) | 128 | int |
129 | { | 129 | ssl3_do_write(SSL *s, int type) |
130 | { | ||
130 | int ret; | 131 | int ret; |
131 | 132 | ||
132 | ret=ssl3_write_bytes(s,type,&s->init_buf->data[s->init_off], | 133 | ret = ssl3_write_bytes(s, type, &s->init_buf->data[s->init_off], |
133 | s->init_num); | 134 | s->init_num); |
134 | if (ret < 0) return(-1); | 135 | if (ret < 0) |
136 | return (-1); | ||
135 | if (type == SSL3_RT_HANDSHAKE) | 137 | if (type == SSL3_RT_HANDSHAKE) |
136 | /* should not be done for 'Hello Request's, but in that case | 138 | /* should not be done for 'Hello Request's, but in that case |
137 | * we'll ignore the result anyway */ | 139 | * we'll ignore the result anyway */ |
138 | ssl3_finish_mac(s,(unsigned char *)&s->init_buf->data[s->init_off],ret); | 140 | ssl3_finish_mac(s,(unsigned char *)&s->init_buf->data[s->init_off], ret); |
139 | 141 | ||
140 | if (ret == s->init_num) | 142 | if (ret == s->init_num) { |
141 | { | ||
142 | if (s->msg_callback) | 143 | if (s->msg_callback) |
143 | s->msg_callback(1, s->version, type, s->init_buf->data, (size_t)(s->init_off + s->init_num), s, s->msg_callback_arg); | 144 | s->msg_callback(1, s->version, type, s->init_buf->data, (size_t)(s->init_off + s->init_num), s, s->msg_callback_arg); |
144 | return(1); | 145 | return (1); |
145 | } | ||
146 | s->init_off+=ret; | ||
147 | s->init_num-=ret; | ||
148 | return(0); | ||
149 | } | 146 | } |
147 | s->init_off += ret; | ||
148 | s->init_num -= ret; | ||
149 | return (0); | ||
150 | } | ||
150 | 151 | ||
151 | int ssl3_send_finished(SSL *s, int a, int b, const char *sender, int slen) | 152 | int |
152 | { | 153 | ssl3_send_finished(SSL *s, int a, int b, const char *sender, int slen) |
153 | unsigned char *p,*d; | 154 | { |
155 | unsigned char *p, *d; | ||
154 | int i; | 156 | int i; |
155 | unsigned long l; | 157 | unsigned long l; |
156 | 158 | ||
157 | if (s->state == a) | 159 | if (s->state == a) { |
158 | { | 160 | d = (unsigned char *)s->init_buf->data; |
159 | d=(unsigned char *)s->init_buf->data; | 161 | p = &(d[4]); |
160 | p= &(d[4]); | ||
161 | 162 | ||
162 | i=s->method->ssl3_enc->final_finish_mac(s, | 163 | i = s->method->ssl3_enc->final_finish_mac(s, |
163 | sender,slen,s->s3->tmp.finish_md); | 164 | sender, slen, s->s3->tmp.finish_md); |
164 | if (i == 0) | 165 | if (i == 0) |
165 | return 0; | 166 | return 0; |
166 | s->s3->tmp.finish_md_len = i; | 167 | s->s3->tmp.finish_md_len = i; |
167 | memcpy(p, s->s3->tmp.finish_md, i); | 168 | memcpy(p, s->s3->tmp.finish_md, i); |
168 | p+=i; | 169 | p += i; |
169 | l=i; | 170 | l = i; |
170 | 171 | ||
171 | /* Copy the finished so we can use it for | 172 | /* Copy the finished so we can use it for |
172 | renegotiation checks */ | 173 | renegotiation checks */ |
173 | if(s->type == SSL_ST_CONNECT) | 174 | if (s->type == SSL_ST_CONNECT) { |
174 | { | 175 | OPENSSL_assert(i <= EVP_MAX_MD_SIZE); |
175 | OPENSSL_assert(i <= EVP_MAX_MD_SIZE); | 176 | memcpy(s->s3->previous_client_finished, |
176 | memcpy(s->s3->previous_client_finished, | 177 | s->s3->tmp.finish_md, i); |
177 | s->s3->tmp.finish_md, i); | 178 | s->s3->previous_client_finished_len = i; |
178 | s->s3->previous_client_finished_len=i; | 179 | } else { |
179 | } | 180 | OPENSSL_assert(i <= EVP_MAX_MD_SIZE); |
180 | else | 181 | memcpy(s->s3->previous_server_finished, |
181 | { | 182 | s->s3->tmp.finish_md, i); |
182 | OPENSSL_assert(i <= EVP_MAX_MD_SIZE); | 183 | s->s3->previous_server_finished_len = i; |
183 | memcpy(s->s3->previous_server_finished, | ||
184 | s->s3->tmp.finish_md, i); | ||
185 | s->s3->previous_server_finished_len=i; | ||
186 | } | ||
187 | |||
188 | *(d++)=SSL3_MT_FINISHED; | ||
189 | l2n3(l,d); | ||
190 | s->init_num=(int)l+4; | ||
191 | s->init_off=0; | ||
192 | |||
193 | s->state=b; | ||
194 | } | 184 | } |
195 | 185 | ||
196 | /* SSL3_ST_SEND_xxxxxx_HELLO_B */ | 186 | *(d++) = SSL3_MT_FINISHED; |
197 | return(ssl3_do_write(s,SSL3_RT_HANDSHAKE)); | 187 | l2n3(l, d); |
188 | s->init_num = (int)l + 4; | ||
189 | s->init_off = 0; | ||
190 | |||
191 | s->state = b; | ||
198 | } | 192 | } |
199 | 193 | ||
194 | /* SSL3_ST_SEND_xxxxxx_HELLO_B */ | ||
195 | return (ssl3_do_write(s, SSL3_RT_HANDSHAKE)); | ||
196 | } | ||
197 | |||
200 | #ifndef OPENSSL_NO_NEXTPROTONEG | 198 | #ifndef OPENSSL_NO_NEXTPROTONEG |
201 | /* ssl3_take_mac calculates the Finished MAC for the handshakes messages seen to far. */ | 199 | /* ssl3_take_mac calculates the Finished MAC for the handshakes messages seen to far. */ |
202 | static void ssl3_take_mac(SSL *s) | 200 | static void |
203 | { | 201 | ssl3_take_mac(SSL *s) |
202 | { | ||
204 | const char *sender; | 203 | const char *sender; |
205 | int slen; | 204 | int slen; |
206 | /* If no new cipher setup return immediately: other functions will | 205 | /* If no new cipher setup return immediately: other functions will |
@@ -208,25 +207,23 @@ static void ssl3_take_mac(SSL *s) | |||
208 | */ | 207 | */ |
209 | if (s->s3->tmp.new_cipher == NULL) | 208 | if (s->s3->tmp.new_cipher == NULL) |
210 | return; | 209 | return; |
211 | if (s->state & SSL_ST_CONNECT) | 210 | if (s->state & SSL_ST_CONNECT) { |
212 | { | 211 | sender = s->method->ssl3_enc->server_finished_label; |
213 | sender=s->method->ssl3_enc->server_finished_label; | 212 | slen = s->method->ssl3_enc->server_finished_label_len; |
214 | slen=s->method->ssl3_enc->server_finished_label_len; | 213 | } else { |
215 | } | 214 | sender = s->method->ssl3_enc->client_finished_label; |
216 | else | 215 | slen = s->method->ssl3_enc->client_finished_label_len; |
217 | { | 216 | } |
218 | sender=s->method->ssl3_enc->client_finished_label; | ||
219 | slen=s->method->ssl3_enc->client_finished_label_len; | ||
220 | } | ||
221 | 217 | ||
222 | s->s3->tmp.peer_finish_md_len = s->method->ssl3_enc->final_finish_mac(s, | 218 | s->s3->tmp.peer_finish_md_len = s->method->ssl3_enc->final_finish_mac(s, |
223 | sender,slen,s->s3->tmp.peer_finish_md); | 219 | sender, slen, s->s3->tmp.peer_finish_md); |
224 | } | 220 | } |
225 | #endif | 221 | #endif |
226 | 222 | ||
227 | int ssl3_get_finished(SSL *s, int a, int b) | 223 | int |
228 | { | 224 | ssl3_get_finished(SSL *s, int a, int b) |
229 | int al,i,ok; | 225 | { |
226 | int al, i, ok; | ||
230 | long n; | 227 | long n; |
231 | unsigned char *p; | 228 | unsigned char *p; |
232 | 229 | ||
@@ -236,64 +233,55 @@ int ssl3_get_finished(SSL *s, int a, int b) | |||
236 | */ | 233 | */ |
237 | #endif | 234 | #endif |
238 | 235 | ||
239 | n=s->method->ssl_get_message(s, | 236 | n = s->method->ssl_get_message(s, a, b, SSL3_MT_FINISHED, |
240 | a, | 237 | 64, /* should actually be 36+4 :-) */ &ok); |
241 | b, | ||
242 | SSL3_MT_FINISHED, | ||
243 | 64, /* should actually be 36+4 :-) */ | ||
244 | &ok); | ||
245 | 238 | ||
246 | if (!ok) return((int)n); | 239 | if (!ok) |
240 | return ((int)n); | ||
247 | 241 | ||
248 | /* If this occurs, we have missed a message */ | 242 | /* If this occurs, we have missed a message */ |
249 | if (!s->s3->change_cipher_spec) | 243 | if (!s->s3->change_cipher_spec) { |
250 | { | 244 | al = SSL_AD_UNEXPECTED_MESSAGE; |
251 | al=SSL_AD_UNEXPECTED_MESSAGE; | 245 | SSLerr(SSL_F_SSL3_GET_FINISHED, SSL_R_GOT_A_FIN_BEFORE_A_CCS); |
252 | SSLerr(SSL_F_SSL3_GET_FINISHED,SSL_R_GOT_A_FIN_BEFORE_A_CCS); | ||
253 | goto f_err; | 246 | goto f_err; |
254 | } | 247 | } |
255 | s->s3->change_cipher_spec=0; | 248 | s->s3->change_cipher_spec = 0; |
256 | 249 | ||
257 | p = (unsigned char *)s->init_msg; | 250 | p = (unsigned char *)s->init_msg; |
258 | i = s->s3->tmp.peer_finish_md_len; | 251 | i = s->s3->tmp.peer_finish_md_len; |
259 | 252 | ||
260 | if (i != n) | 253 | if (i != n) { |
261 | { | 254 | al = SSL_AD_DECODE_ERROR; |
262 | al=SSL_AD_DECODE_ERROR; | 255 | SSLerr(SSL_F_SSL3_GET_FINISHED, SSL_R_BAD_DIGEST_LENGTH); |
263 | SSLerr(SSL_F_SSL3_GET_FINISHED,SSL_R_BAD_DIGEST_LENGTH); | ||
264 | goto f_err; | 256 | goto f_err; |
265 | } | 257 | } |
266 | 258 | ||
267 | if (CRYPTO_memcmp(p, s->s3->tmp.peer_finish_md, i) != 0) | 259 | if (CRYPTO_memcmp(p, s->s3->tmp.peer_finish_md, i) != 0) { |
268 | { | 260 | al = SSL_AD_DECRYPT_ERROR; |
269 | al=SSL_AD_DECRYPT_ERROR; | 261 | SSLerr(SSL_F_SSL3_GET_FINISHED, SSL_R_DIGEST_CHECK_FAILED); |
270 | SSLerr(SSL_F_SSL3_GET_FINISHED,SSL_R_DIGEST_CHECK_FAILED); | ||
271 | goto f_err; | 262 | goto f_err; |
272 | } | 263 | } |
273 | 264 | ||
274 | /* Copy the finished so we can use it for | 265 | /* Copy the finished so we can use it for |
275 | renegotiation checks */ | 266 | renegotiation checks */ |
276 | if(s->type == SSL_ST_ACCEPT) | 267 | if (s->type == SSL_ST_ACCEPT) { |
277 | { | 268 | OPENSSL_assert(i <= EVP_MAX_MD_SIZE); |
278 | OPENSSL_assert(i <= EVP_MAX_MD_SIZE); | 269 | memcpy(s->s3->previous_client_finished, |
279 | memcpy(s->s3->previous_client_finished, | 270 | s->s3->tmp.peer_finish_md, i); |
280 | s->s3->tmp.peer_finish_md, i); | 271 | s->s3->previous_client_finished_len = i; |
281 | s->s3->previous_client_finished_len=i; | 272 | } else { |
282 | } | 273 | OPENSSL_assert(i <= EVP_MAX_MD_SIZE); |
283 | else | 274 | memcpy(s->s3->previous_server_finished, |
284 | { | 275 | s->s3->tmp.peer_finish_md, i); |
285 | OPENSSL_assert(i <= EVP_MAX_MD_SIZE); | 276 | s->s3->previous_server_finished_len = i; |
286 | memcpy(s->s3->previous_server_finished, | ||
287 | s->s3->tmp.peer_finish_md, i); | ||
288 | s->s3->previous_server_finished_len=i; | ||
289 | } | ||
290 | |||
291 | return(1); | ||
292 | f_err: | ||
293 | ssl3_send_alert(s,SSL3_AL_FATAL,al); | ||
294 | return(0); | ||
295 | } | 277 | } |
296 | 278 | ||
279 | return (1); | ||
280 | f_err: | ||
281 | ssl3_send_alert(s, SSL3_AL_FATAL, al); | ||
282 | return (0); | ||
283 | } | ||
284 | |||
297 | /* for these 2 messages, we need to | 285 | /* for these 2 messages, we need to |
298 | * ssl->enc_read_ctx re-init | 286 | * ssl->enc_read_ctx re-init |
299 | * ssl->s3->read_sequence zero | 287 | * ssl->s3->read_sequence zero |
@@ -302,48 +290,49 @@ f_err: | |||
302 | * ssl->session->read_compression assign | 290 | * ssl->session->read_compression assign |
303 | * ssl->session->read_hash assign | 291 | * ssl->session->read_hash assign |
304 | */ | 292 | */ |
305 | int ssl3_send_change_cipher_spec(SSL *s, int a, int b) | 293 | int |
306 | { | 294 | ssl3_send_change_cipher_spec(SSL *s, int a, int b) |
295 | { | ||
307 | unsigned char *p; | 296 | unsigned char *p; |
308 | 297 | ||
309 | if (s->state == a) | 298 | if (s->state == a) { |
310 | { | 299 | p = (unsigned char *)s->init_buf->data; |
311 | p=(unsigned char *)s->init_buf->data; | 300 | *p = SSL3_MT_CCS; |
312 | *p=SSL3_MT_CCS; | 301 | s->init_num = 1; |
313 | s->init_num=1; | 302 | s->init_off = 0; |
314 | s->init_off=0; | ||
315 | 303 | ||
316 | s->state=b; | 304 | s->state = b; |
317 | } | 305 | } |
318 | 306 | ||
319 | /* SSL3_ST_CW_CHANGE_B */ | 307 | /* SSL3_ST_CW_CHANGE_B */ |
320 | return(ssl3_do_write(s,SSL3_RT_CHANGE_CIPHER_SPEC)); | 308 | return (ssl3_do_write(s, SSL3_RT_CHANGE_CIPHER_SPEC)); |
321 | } | 309 | } |
322 | 310 | ||
323 | static int ssl3_add_cert_to_buf(BUF_MEM *buf, unsigned long *l, X509 *x) | 311 | static int |
324 | { | 312 | ssl3_add_cert_to_buf(BUF_MEM *buf, unsigned long *l, X509 *x) |
313 | { | ||
325 | int n; | 314 | int n; |
326 | unsigned char *p; | 315 | unsigned char *p; |
327 | 316 | ||
328 | n=i2d_X509(x,NULL); | 317 | n = i2d_X509(x, NULL); |
329 | if (!BUF_MEM_grow_clean(buf,(int)(n+(*l)+3))) | 318 | if (!BUF_MEM_grow_clean(buf,(int)(n + (*l) + 3))) { |
330 | { | 319 | SSLerr(SSL_F_SSL3_ADD_CERT_TO_BUF, ERR_R_BUF_LIB); |
331 | SSLerr(SSL_F_SSL3_ADD_CERT_TO_BUF,ERR_R_BUF_LIB); | 320 | return (-1); |
332 | return(-1); | ||
333 | } | ||
334 | p=(unsigned char *)&(buf->data[*l]); | ||
335 | l2n3(n,p); | ||
336 | i2d_X509(x,&p); | ||
337 | *l+=n+3; | ||
338 | |||
339 | return(0); | ||
340 | } | 321 | } |
322 | p = (unsigned char *)&(buf->data[*l]); | ||
323 | l2n3(n, p); | ||
324 | i2d_X509(x, &p); | ||
325 | *l += n + 3; | ||
341 | 326 | ||
342 | unsigned long ssl3_output_cert_chain(SSL *s, X509 *x) | 327 | return (0); |
343 | { | 328 | } |
329 | |||
330 | unsigned long | ||
331 | ssl3_output_cert_chain(SSL *s, X509 *x) | ||
332 | { | ||
344 | unsigned char *p; | 333 | unsigned char *p; |
345 | int i; | 334 | int i; |
346 | unsigned long l=7; | 335 | unsigned long l = 7; |
347 | BUF_MEM *buf; | 336 | BUF_MEM *buf; |
348 | int no_chain; | 337 | int no_chain; |
349 | 338 | ||
@@ -353,111 +342,99 @@ unsigned long ssl3_output_cert_chain(SSL *s, X509 *x) | |||
353 | no_chain = 0; | 342 | no_chain = 0; |
354 | 343 | ||
355 | /* TLSv1 sends a chain with nothing in it, instead of an alert */ | 344 | /* TLSv1 sends a chain with nothing in it, instead of an alert */ |
356 | buf=s->init_buf; | 345 | buf = s->init_buf; |
357 | if (!BUF_MEM_grow_clean(buf,10)) | 346 | if (!BUF_MEM_grow_clean(buf, 10)) { |
358 | { | 347 | SSLerr(SSL_F_SSL3_OUTPUT_CERT_CHAIN, ERR_R_BUF_LIB); |
359 | SSLerr(SSL_F_SSL3_OUTPUT_CERT_CHAIN,ERR_R_BUF_LIB); | 348 | return (0); |
360 | return(0); | 349 | } |
361 | } | 350 | if (x != NULL) { |
362 | if (x != NULL) | 351 | if (no_chain) { |
363 | { | ||
364 | if (no_chain) | ||
365 | { | ||
366 | if (ssl3_add_cert_to_buf(buf, &l, x)) | 352 | if (ssl3_add_cert_to_buf(buf, &l, x)) |
367 | return(0); | 353 | return (0); |
368 | } | 354 | } else { |
369 | else | ||
370 | { | ||
371 | X509_STORE_CTX xs_ctx; | 355 | X509_STORE_CTX xs_ctx; |
372 | 356 | ||
373 | if (!X509_STORE_CTX_init(&xs_ctx,s->ctx->cert_store,x,NULL)) | 357 | if (!X509_STORE_CTX_init(&xs_ctx, s->ctx->cert_store, x, NULL)) { |
374 | { | 358 | SSLerr(SSL_F_SSL3_OUTPUT_CERT_CHAIN, ERR_R_X509_LIB); |
375 | SSLerr(SSL_F_SSL3_OUTPUT_CERT_CHAIN,ERR_R_X509_LIB); | 359 | return (0); |
376 | return(0); | 360 | } |
377 | } | ||
378 | X509_verify_cert(&xs_ctx); | 361 | X509_verify_cert(&xs_ctx); |
379 | /* Don't leave errors in the queue */ | 362 | /* Don't leave errors in the queue */ |
380 | ERR_clear_error(); | 363 | ERR_clear_error(); |
381 | for (i=0; i < sk_X509_num(xs_ctx.chain); i++) | 364 | for (i = 0; i < sk_X509_num(xs_ctx.chain); i++) { |
382 | { | ||
383 | x = sk_X509_value(xs_ctx.chain, i); | 365 | x = sk_X509_value(xs_ctx.chain, i); |
384 | 366 | ||
385 | if (ssl3_add_cert_to_buf(buf, &l, x)) | 367 | if (ssl3_add_cert_to_buf(buf, &l, x)) { |
386 | { | ||
387 | X509_STORE_CTX_cleanup(&xs_ctx); | 368 | X509_STORE_CTX_cleanup(&xs_ctx); |
388 | return 0; | 369 | return 0; |
389 | } | ||
390 | } | 370 | } |
391 | X509_STORE_CTX_cleanup(&xs_ctx); | ||
392 | } | 371 | } |
372 | X509_STORE_CTX_cleanup(&xs_ctx); | ||
393 | } | 373 | } |
374 | } | ||
394 | /* Thawte special :-) */ | 375 | /* Thawte special :-) */ |
395 | for (i=0; i<sk_X509_num(s->ctx->extra_certs); i++) | 376 | for (i = 0; i < sk_X509_num(s->ctx->extra_certs); i++) { |
396 | { | 377 | x = sk_X509_value(s->ctx->extra_certs, i); |
397 | x=sk_X509_value(s->ctx->extra_certs,i); | ||
398 | if (ssl3_add_cert_to_buf(buf, &l, x)) | 378 | if (ssl3_add_cert_to_buf(buf, &l, x)) |
399 | return(0); | 379 | return (0); |
400 | } | ||
401 | |||
402 | l-=7; | ||
403 | p=(unsigned char *)&(buf->data[4]); | ||
404 | l2n3(l,p); | ||
405 | l+=3; | ||
406 | p=(unsigned char *)&(buf->data[0]); | ||
407 | *(p++)=SSL3_MT_CERTIFICATE; | ||
408 | l2n3(l,p); | ||
409 | l+=4; | ||
410 | return(l); | ||
411 | } | 380 | } |
412 | 381 | ||
382 | l -= 7; | ||
383 | p = (unsigned char *)&(buf->data[4]); | ||
384 | l2n3(l, p); | ||
385 | l += 3; | ||
386 | p = (unsigned char *)&(buf->data[0]); | ||
387 | *(p++) = SSL3_MT_CERTIFICATE; | ||
388 | l2n3(l, p); | ||
389 | l += 4; | ||
390 | return (l); | ||
391 | } | ||
392 | |||
413 | /* Obtain handshake message of message type 'mt' (any if mt == -1), | 393 | /* Obtain handshake message of message type 'mt' (any if mt == -1), |
414 | * maximum acceptable body length 'max'. | 394 | * maximum acceptable body length 'max'. |
415 | * The first four bytes (msg_type and length) are read in state 'st1', | 395 | * The first four bytes (msg_type and length) are read in state 'st1', |
416 | * the body is read in state 'stn'. | 396 | * the body is read in state 'stn'. |
417 | */ | 397 | */ |
418 | long ssl3_get_message(SSL *s, int st1, int stn, int mt, long max, int *ok) | 398 | long |
419 | { | 399 | ssl3_get_message(SSL *s, int st1, int stn, int mt, long max, int *ok) |
400 | { | ||
420 | unsigned char *p; | 401 | unsigned char *p; |
421 | unsigned long l; | 402 | unsigned long l; |
422 | long n; | 403 | long n; |
423 | int i,al; | 404 | int i, al; |
424 | 405 | ||
425 | if (s->s3->tmp.reuse_message) | 406 | if (s->s3->tmp.reuse_message) { |
426 | { | 407 | s->s3->tmp.reuse_message = 0; |
427 | s->s3->tmp.reuse_message=0; | 408 | if ((mt >= 0) && (s->s3->tmp.message_type != mt)) { |
428 | if ((mt >= 0) && (s->s3->tmp.message_type != mt)) | 409 | al = SSL_AD_UNEXPECTED_MESSAGE; |
429 | { | 410 | SSLerr(SSL_F_SSL3_GET_MESSAGE, SSL_R_UNEXPECTED_MESSAGE); |
430 | al=SSL_AD_UNEXPECTED_MESSAGE; | ||
431 | SSLerr(SSL_F_SSL3_GET_MESSAGE,SSL_R_UNEXPECTED_MESSAGE); | ||
432 | goto f_err; | 411 | goto f_err; |
433 | } | 412 | } |
434 | *ok=1; | 413 | *ok = 1; |
435 | s->init_msg = s->init_buf->data + 4; | 414 | s->init_msg = s->init_buf->data + 4; |
436 | s->init_num = (int)s->s3->tmp.message_size; | 415 | s->init_num = (int)s->s3->tmp.message_size; |
437 | return s->init_num; | 416 | return s->init_num; |
438 | } | 417 | } |
439 | 418 | ||
440 | p=(unsigned char *)s->init_buf->data; | 419 | p = (unsigned char *)s->init_buf->data; |
441 | 420 | ||
442 | if (s->state == st1) /* s->init_num < 4 */ | 421 | if (s->state == st1) /* s->init_num < 4 */ |
443 | { | 422 | { |
444 | int skip_message; | 423 | int skip_message; |
445 | 424 | ||
446 | do | 425 | do { |
447 | { | 426 | while (s->init_num < 4) { |
448 | while (s->init_num < 4) | 427 | i = s->method->ssl_read_bytes(s, |
449 | { | 428 | SSL3_RT_HANDSHAKE, &p[s->init_num], |
450 | i=s->method->ssl_read_bytes(s,SSL3_RT_HANDSHAKE, | 429 | 4 - s->init_num, 0); |
451 | &p[s->init_num],4 - s->init_num, 0); | 430 | if (i <= 0) { |
452 | if (i <= 0) | 431 | s->rwstate = SSL_READING; |
453 | { | ||
454 | s->rwstate=SSL_READING; | ||
455 | *ok = 0; | 432 | *ok = 0; |
456 | return i; | 433 | return i; |
457 | } | ||
458 | s->init_num+=i; | ||
459 | } | 434 | } |
460 | 435 | s->init_num += i; | |
436 | } | ||
437 | |||
461 | skip_message = 0; | 438 | skip_message = 0; |
462 | if (!s->server) | 439 | if (!s->server) |
463 | if (p[0] == SSL3_MT_HELLO_REQUEST) | 440 | if (p[0] == SSL3_MT_HELLO_REQUEST) |
@@ -465,79 +442,72 @@ long ssl3_get_message(SSL *s, int st1, int stn, int mt, long max, int *ok) | |||
465 | * we are doing a handshake anyway now, so ignore them | 442 | * we are doing a handshake anyway now, so ignore them |
466 | * if their format is correct. Does not count for | 443 | * if their format is correct. Does not count for |
467 | * 'Finished' MAC. */ | 444 | * 'Finished' MAC. */ |
468 | if (p[1] == 0 && p[2] == 0 &&p[3] == 0) | 445 | if (p[1] == 0 && p[2] == 0 &&p[3] == 0) { |
469 | { | 446 | s->init_num = 0; |
470 | s->init_num = 0; | 447 | skip_message = 1; |
471 | skip_message = 1; | 448 | |
472 | 449 | if (s->msg_callback) | |
473 | if (s->msg_callback) | 450 | s->msg_callback(0, s->version, SSL3_RT_HANDSHAKE, p, 4, s, s->msg_callback_arg); |
474 | s->msg_callback(0, s->version, SSL3_RT_HANDSHAKE, p, 4, s, s->msg_callback_arg); | ||
475 | } | ||
476 | } | 451 | } |
452 | } | ||
477 | while (skip_message); | 453 | while (skip_message); |
478 | 454 | ||
479 | /* s->init_num == 4 */ | 455 | /* s->init_num == 4 */ |
480 | 456 | ||
481 | if ((mt >= 0) && (*p != mt)) | 457 | if ((mt >= 0) && (*p != mt)) { |
482 | { | 458 | al = SSL_AD_UNEXPECTED_MESSAGE; |
483 | al=SSL_AD_UNEXPECTED_MESSAGE; | 459 | SSLerr(SSL_F_SSL3_GET_MESSAGE, SSL_R_UNEXPECTED_MESSAGE); |
484 | SSLerr(SSL_F_SSL3_GET_MESSAGE,SSL_R_UNEXPECTED_MESSAGE); | ||
485 | goto f_err; | 460 | goto f_err; |
486 | } | 461 | } |
487 | if ((mt < 0) && (*p == SSL3_MT_CLIENT_HELLO) && | 462 | if ((mt < 0) && (*p == SSL3_MT_CLIENT_HELLO) && |
488 | (st1 == SSL3_ST_SR_CERT_A) && | 463 | (st1 == SSL3_ST_SR_CERT_A) && (stn == SSL3_ST_SR_CERT_B)) { |
489 | (stn == SSL3_ST_SR_CERT_B)) | ||
490 | { | ||
491 | /* At this point we have got an MS SGC second client | 464 | /* At this point we have got an MS SGC second client |
492 | * hello (maybe we should always allow the client to | 465 | * hello (maybe we should always allow the client to |
493 | * start a new handshake?). We need to restart the mac. | 466 | * start a new handshake?). We need to restart the mac. |
494 | * Don't increment {num,total}_renegotiations because | 467 | * Don't increment {num,total}_renegotiations because |
495 | * we have not completed the handshake. */ | 468 | * we have not completed the handshake. */ |
496 | ssl3_init_finished_mac(s); | 469 | ssl3_init_finished_mac(s); |
497 | } | 470 | } |
498 | 471 | ||
499 | s->s3->tmp.message_type= *(p++); | 472 | s->s3->tmp.message_type= *(p++); |
500 | 473 | ||
501 | n2l3(p,l); | 474 | n2l3(p, l); |
502 | if (l > (unsigned long)max) | 475 | if (l > (unsigned long)max) { |
503 | { | 476 | al = SSL_AD_ILLEGAL_PARAMETER; |
504 | al=SSL_AD_ILLEGAL_PARAMETER; | 477 | SSLerr(SSL_F_SSL3_GET_MESSAGE, SSL_R_EXCESSIVE_MESSAGE_SIZE); |
505 | SSLerr(SSL_F_SSL3_GET_MESSAGE,SSL_R_EXCESSIVE_MESSAGE_SIZE); | ||
506 | goto f_err; | 478 | goto f_err; |
507 | } | 479 | } |
508 | if (l > (INT_MAX-4)) /* BUF_MEM_grow takes an 'int' parameter */ | 480 | if (l > (INT_MAX-4)) /* BUF_MEM_grow takes an 'int' parameter */ |
509 | { | 481 | { |
510 | al=SSL_AD_ILLEGAL_PARAMETER; | 482 | al = SSL_AD_ILLEGAL_PARAMETER; |
511 | SSLerr(SSL_F_SSL3_GET_MESSAGE,SSL_R_EXCESSIVE_MESSAGE_SIZE); | 483 | SSLerr(SSL_F_SSL3_GET_MESSAGE, SSL_R_EXCESSIVE_MESSAGE_SIZE); |
512 | goto f_err; | 484 | goto f_err; |
513 | } | 485 | } |
514 | if (l && !BUF_MEM_grow_clean(s->init_buf,(int)l+4)) | 486 | if (l && !BUF_MEM_grow_clean(s->init_buf,(int)l + 4)) { |
515 | { | 487 | SSLerr(SSL_F_SSL3_GET_MESSAGE, ERR_R_BUF_LIB); |
516 | SSLerr(SSL_F_SSL3_GET_MESSAGE,ERR_R_BUF_LIB); | ||
517 | goto err; | 488 | goto err; |
518 | } | 489 | } |
519 | s->s3->tmp.message_size=l; | 490 | s->s3->tmp.message_size = l; |
520 | s->state=stn; | 491 | s->state = stn; |
521 | 492 | ||
522 | s->init_msg = s->init_buf->data + 4; | 493 | s->init_msg = s->init_buf->data + 4; |
523 | s->init_num = 0; | 494 | s->init_num = 0; |
524 | } | 495 | } |
525 | 496 | ||
526 | /* next state (stn) */ | 497 | /* next state (stn) */ |
527 | p = s->init_msg; | 498 | p = s->init_msg; |
528 | n = s->s3->tmp.message_size - s->init_num; | 499 | n = s->s3->tmp.message_size - s->init_num; |
529 | while (n > 0) | 500 | while (n > 0) { |
530 | { | 501 | i = s->method->ssl_read_bytes(s, SSL3_RT_HANDSHAKE, |
531 | i=s->method->ssl_read_bytes(s,SSL3_RT_HANDSHAKE,&p[s->init_num],n,0); | 502 | &p[s->init_num], n, 0); |
532 | if (i <= 0) | 503 | if (i <= 0) { |
533 | { | 504 | s->rwstate = SSL_READING; |
534 | s->rwstate=SSL_READING; | ||
535 | *ok = 0; | 505 | *ok = 0; |
536 | return i; | 506 | return i; |
537 | } | 507 | } |
538 | s->init_num += i; | 508 | s->init_num += i; |
539 | n -= i; | 509 | n -= i; |
540 | } | 510 | } |
541 | 511 | ||
542 | #ifndef OPENSSL_NO_NEXTPROTONEG | 512 | #ifndef OPENSSL_NO_NEXTPROTONEG |
543 | /* If receiving Finished, record MAC of prior handshake messages for | 513 | /* If receiving Finished, record MAC of prior handshake messages for |
@@ -550,64 +520,60 @@ long ssl3_get_message(SSL *s, int st1, int stn, int mt, long max, int *ok) | |||
550 | ssl3_finish_mac(s, (unsigned char *)s->init_buf->data, s->init_num + 4); | 520 | ssl3_finish_mac(s, (unsigned char *)s->init_buf->data, s->init_num + 4); |
551 | if (s->msg_callback) | 521 | if (s->msg_callback) |
552 | s->msg_callback(0, s->version, SSL3_RT_HANDSHAKE, s->init_buf->data, (size_t)s->init_num + 4, s, s->msg_callback_arg); | 522 | s->msg_callback(0, s->version, SSL3_RT_HANDSHAKE, s->init_buf->data, (size_t)s->init_num + 4, s, s->msg_callback_arg); |
553 | *ok=1; | 523 | *ok = 1; |
554 | return s->init_num; | 524 | return s->init_num; |
555 | f_err: | 525 | f_err: |
556 | ssl3_send_alert(s,SSL3_AL_FATAL,al); | 526 | ssl3_send_alert(s, SSL3_AL_FATAL, al); |
557 | err: | 527 | err: |
558 | *ok=0; | 528 | *ok = 0; |
559 | return(-1); | 529 | return (-1); |
560 | } | 530 | } |
561 | 531 | ||
562 | int ssl_cert_type(X509 *x, EVP_PKEY *pkey) | 532 | int |
563 | { | 533 | ssl_cert_type(X509 *x, EVP_PKEY *pkey) |
534 | { | ||
564 | EVP_PKEY *pk; | 535 | EVP_PKEY *pk; |
565 | int ret= -1,i; | 536 | int ret = -1, i; |
566 | 537 | ||
567 | if (pkey == NULL) | 538 | if (pkey == NULL) |
568 | pk=X509_get_pubkey(x); | 539 | pk = X509_get_pubkey(x); |
569 | else | 540 | else |
570 | pk=pkey; | 541 | pk = pkey; |
571 | if (pk == NULL) goto err; | 542 | if (pk == NULL) |
572 | 543 | goto err; | |
573 | i=pk->type; | 544 | |
574 | if (i == EVP_PKEY_RSA) | 545 | i = pk->type; |
575 | { | 546 | if (i == EVP_PKEY_RSA) { |
576 | ret=SSL_PKEY_RSA_ENC; | 547 | ret = SSL_PKEY_RSA_ENC; |
577 | } | 548 | } else if (i == EVP_PKEY_DSA) { |
578 | else if (i == EVP_PKEY_DSA) | 549 | ret = SSL_PKEY_DSA_SIGN; |
579 | { | 550 | } |
580 | ret=SSL_PKEY_DSA_SIGN; | ||
581 | } | ||
582 | #ifndef OPENSSL_NO_EC | 551 | #ifndef OPENSSL_NO_EC |
583 | else if (i == EVP_PKEY_EC) | 552 | else if (i == EVP_PKEY_EC) { |
584 | { | ||
585 | ret = SSL_PKEY_ECC; | 553 | ret = SSL_PKEY_ECC; |
586 | } | 554 | } |
587 | #endif | 555 | #endif |
588 | else if (i == NID_id_GostR3410_94 || i == NID_id_GostR3410_94_cc) | 556 | else if (i == NID_id_GostR3410_94 || i == NID_id_GostR3410_94_cc) { |
589 | { | ||
590 | ret = SSL_PKEY_GOST94; | 557 | ret = SSL_PKEY_GOST94; |
591 | } | 558 | } else if (i == NID_id_GostR3410_2001 || i == NID_id_GostR3410_2001_cc) { |
592 | else if (i == NID_id_GostR3410_2001 || i == NID_id_GostR3410_2001_cc) | ||
593 | { | ||
594 | ret = SSL_PKEY_GOST01; | 559 | ret = SSL_PKEY_GOST01; |
595 | } | ||
596 | err: | ||
597 | if(!pkey) EVP_PKEY_free(pk); | ||
598 | return(ret); | ||
599 | } | 560 | } |
561 | err: | ||
562 | if (!pkey) | ||
563 | EVP_PKEY_free(pk); | ||
564 | return (ret); | ||
565 | } | ||
600 | 566 | ||
601 | int ssl_verify_alarm_type(long type) | 567 | int |
602 | { | 568 | ssl_verify_alarm_type(long type) |
569 | { | ||
603 | int al; | 570 | int al; |
604 | 571 | ||
605 | switch(type) | 572 | switch (type) { |
606 | { | ||
607 | case X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT: | 573 | case X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT: |
608 | case X509_V_ERR_UNABLE_TO_GET_CRL: | 574 | case X509_V_ERR_UNABLE_TO_GET_CRL: |
609 | case X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER: | 575 | case X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER: |
610 | al=SSL_AD_UNKNOWN_CA; | 576 | al = SSL_AD_UNKNOWN_CA; |
611 | break; | 577 | break; |
612 | case X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE: | 578 | case X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE: |
613 | case X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE: | 579 | case X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE: |
@@ -620,21 +586,21 @@ int ssl_verify_alarm_type(long type) | |||
620 | case X509_V_ERR_CRL_NOT_YET_VALID: | 586 | case X509_V_ERR_CRL_NOT_YET_VALID: |
621 | case X509_V_ERR_CERT_UNTRUSTED: | 587 | case X509_V_ERR_CERT_UNTRUSTED: |
622 | case X509_V_ERR_CERT_REJECTED: | 588 | case X509_V_ERR_CERT_REJECTED: |
623 | al=SSL_AD_BAD_CERTIFICATE; | 589 | al = SSL_AD_BAD_CERTIFICATE; |
624 | break; | 590 | break; |
625 | case X509_V_ERR_CERT_SIGNATURE_FAILURE: | 591 | case X509_V_ERR_CERT_SIGNATURE_FAILURE: |
626 | case X509_V_ERR_CRL_SIGNATURE_FAILURE: | 592 | case X509_V_ERR_CRL_SIGNATURE_FAILURE: |
627 | al=SSL_AD_DECRYPT_ERROR; | 593 | al = SSL_AD_DECRYPT_ERROR; |
628 | break; | 594 | break; |
629 | case X509_V_ERR_CERT_HAS_EXPIRED: | 595 | case X509_V_ERR_CERT_HAS_EXPIRED: |
630 | case X509_V_ERR_CRL_HAS_EXPIRED: | 596 | case X509_V_ERR_CRL_HAS_EXPIRED: |
631 | al=SSL_AD_CERTIFICATE_EXPIRED; | 597 | al = SSL_AD_CERTIFICATE_EXPIRED; |
632 | break; | 598 | break; |
633 | case X509_V_ERR_CERT_REVOKED: | 599 | case X509_V_ERR_CERT_REVOKED: |
634 | al=SSL_AD_CERTIFICATE_REVOKED; | 600 | al = SSL_AD_CERTIFICATE_REVOKED; |
635 | break; | 601 | break; |
636 | case X509_V_ERR_OUT_OF_MEM: | 602 | case X509_V_ERR_OUT_OF_MEM: |
637 | al=SSL_AD_INTERNAL_ERROR; | 603 | al = SSL_AD_INTERNAL_ERROR; |
638 | break; | 604 | break; |
639 | case X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT: | 605 | case X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT: |
640 | case X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN: | 606 | case X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN: |
@@ -643,20 +609,20 @@ int ssl_verify_alarm_type(long type) | |||
643 | case X509_V_ERR_CERT_CHAIN_TOO_LONG: | 609 | case X509_V_ERR_CERT_CHAIN_TOO_LONG: |
644 | case X509_V_ERR_PATH_LENGTH_EXCEEDED: | 610 | case X509_V_ERR_PATH_LENGTH_EXCEEDED: |
645 | case X509_V_ERR_INVALID_CA: | 611 | case X509_V_ERR_INVALID_CA: |
646 | al=SSL_AD_UNKNOWN_CA; | 612 | al = SSL_AD_UNKNOWN_CA; |
647 | break; | 613 | break; |
648 | case X509_V_ERR_APPLICATION_VERIFICATION: | 614 | case X509_V_ERR_APPLICATION_VERIFICATION: |
649 | al=SSL_AD_HANDSHAKE_FAILURE; | 615 | al = SSL_AD_HANDSHAKE_FAILURE; |
650 | break; | 616 | break; |
651 | case X509_V_ERR_INVALID_PURPOSE: | 617 | case X509_V_ERR_INVALID_PURPOSE: |
652 | al=SSL_AD_UNSUPPORTED_CERTIFICATE; | 618 | al = SSL_AD_UNSUPPORTED_CERTIFICATE; |
653 | break; | 619 | break; |
654 | default: | 620 | default: |
655 | al=SSL_AD_CERTIFICATE_UNKNOWN; | 621 | al = SSL_AD_CERTIFICATE_UNKNOWN; |
656 | break; | 622 | break; |
657 | } | ||
658 | return(al); | ||
659 | } | 623 | } |
624 | return (al); | ||
625 | } | ||
660 | 626 | ||
661 | #ifndef OPENSSL_NO_BUF_FREELISTS | 627 | #ifndef OPENSSL_NO_BUF_FREELISTS |
662 | /* On some platforms, malloc() performance is bad enough that you can't just | 628 | /* On some platforms, malloc() performance is bad enough that you can't just |
@@ -680,7 +646,7 @@ int ssl_verify_alarm_type(long type) | |||
680 | */ | 646 | */ |
681 | static void * | 647 | static void * |
682 | freelist_extract(SSL_CTX *ctx, int for_read, int sz) | 648 | freelist_extract(SSL_CTX *ctx, int for_read, int sz) |
683 | { | 649 | { |
684 | SSL3_BUF_FREELIST *list; | 650 | SSL3_BUF_FREELIST *list; |
685 | SSL3_BUF_FREELIST_ENTRY *ent = NULL; | 651 | SSL3_BUF_FREELIST_ENTRY *ent = NULL; |
686 | void *result = NULL; | 652 | void *result = NULL; |
@@ -689,13 +655,12 @@ freelist_extract(SSL_CTX *ctx, int for_read, int sz) | |||
689 | list = for_read ? ctx->rbuf_freelist : ctx->wbuf_freelist; | 655 | list = for_read ? ctx->rbuf_freelist : ctx->wbuf_freelist; |
690 | if (list != NULL && sz == (int)list->chunklen) | 656 | if (list != NULL && sz == (int)list->chunklen) |
691 | ent = list->head; | 657 | ent = list->head; |
692 | if (ent != NULL) | 658 | if (ent != NULL) { |
693 | { | ||
694 | list->head = ent->next; | 659 | list->head = ent->next; |
695 | result = ent; | 660 | result = ent; |
696 | if (--list->len == 0) | 661 | if (--list->len == 0) |
697 | list->chunklen = 0; | 662 | list->chunklen = 0; |
698 | } | 663 | } |
699 | CRYPTO_w_unlock(CRYPTO_LOCK_SSL_CTX); | 664 | CRYPTO_w_unlock(CRYPTO_LOCK_SSL_CTX); |
700 | if (!result) | 665 | if (!result) |
701 | result = OPENSSL_malloc(sz); | 666 | result = OPENSSL_malloc(sz); |
@@ -704,80 +669,76 @@ freelist_extract(SSL_CTX *ctx, int for_read, int sz) | |||
704 | 669 | ||
705 | static void | 670 | static void |
706 | freelist_insert(SSL_CTX *ctx, int for_read, size_t sz, void *mem) | 671 | freelist_insert(SSL_CTX *ctx, int for_read, size_t sz, void *mem) |
707 | { | 672 | { |
708 | SSL3_BUF_FREELIST *list; | 673 | SSL3_BUF_FREELIST *list; |
709 | SSL3_BUF_FREELIST_ENTRY *ent; | 674 | SSL3_BUF_FREELIST_ENTRY *ent; |
710 | 675 | ||
711 | CRYPTO_w_lock(CRYPTO_LOCK_SSL_CTX); | 676 | CRYPTO_w_lock(CRYPTO_LOCK_SSL_CTX); |
712 | list = for_read ? ctx->rbuf_freelist : ctx->wbuf_freelist; | 677 | list = for_read ? ctx->rbuf_freelist : ctx->wbuf_freelist; |
713 | if (list != NULL && | 678 | if (list != NULL && (sz == list->chunklen || list->chunklen == 0) && |
714 | (sz == list->chunklen || list->chunklen == 0) && | 679 | list->len < ctx->freelist_max_len && sz >= sizeof(*ent)) { |
715 | list->len < ctx->freelist_max_len && | ||
716 | sz >= sizeof(*ent)) | ||
717 | { | ||
718 | list->chunklen = sz; | 680 | list->chunklen = sz; |
719 | ent = mem; | 681 | ent = mem; |
720 | ent->next = list->head; | 682 | ent->next = list->head; |
721 | list->head = ent; | 683 | list->head = ent; |
722 | ++list->len; | 684 | ++list->len; |
723 | mem = NULL; | 685 | mem = NULL; |
724 | } | 686 | } |
725 | 687 | ||
726 | CRYPTO_w_unlock(CRYPTO_LOCK_SSL_CTX); | 688 | CRYPTO_w_unlock(CRYPTO_LOCK_SSL_CTX); |
727 | if (mem) | 689 | if (mem) |
728 | OPENSSL_free(mem); | 690 | OPENSSL_free(mem); |
729 | } | 691 | } |
730 | #else | 692 | #else |
731 | #define freelist_extract(c,fr,sz) OPENSSL_malloc(sz) | 693 | #define freelist_extract(c,fr,sz) OPENSSL_malloc(sz) |
732 | #define freelist_insert(c,fr,sz,m) OPENSSL_free(m) | 694 | #define freelist_insert(c,fr,sz,m) OPENSSL_free(m) |
733 | #endif | 695 | #endif |
734 | 696 | ||
735 | int ssl3_setup_read_buffer(SSL *s) | 697 | int |
736 | { | 698 | ssl3_setup_read_buffer(SSL *s) |
699 | { | ||
737 | unsigned char *p; | 700 | unsigned char *p; |
738 | size_t len,align=0,headerlen; | 701 | size_t len, align = 0, headerlen; |
739 | 702 | ||
740 | if (SSL_version(s) == DTLS1_VERSION || SSL_version(s) == DTLS1_BAD_VER) | 703 | if (SSL_version(s) == DTLS1_VERSION || SSL_version(s) == DTLS1_BAD_VER) |
741 | headerlen = DTLS1_RT_HEADER_LENGTH; | 704 | headerlen = DTLS1_RT_HEADER_LENGTH; |
742 | else | 705 | else |
743 | headerlen = SSL3_RT_HEADER_LENGTH; | 706 | headerlen = SSL3_RT_HEADER_LENGTH; |
744 | 707 | ||
745 | #if defined(SSL3_ALIGN_PAYLOAD) && SSL3_ALIGN_PAYLOAD!=0 | 708 | #if defined(SSL3_ALIGN_PAYLOAD) && SSL3_ALIGN_PAYLOAD!=0 |
746 | align = (-SSL3_RT_HEADER_LENGTH)&(SSL3_ALIGN_PAYLOAD-1); | 709 | align = (-SSL3_RT_HEADER_LENGTH)&(SSL3_ALIGN_PAYLOAD - 1); |
747 | #endif | 710 | #endif |
748 | 711 | ||
749 | if (s->s3->rbuf.buf == NULL) | 712 | if (s->s3->rbuf.buf == NULL) { |
750 | { | 713 | len = SSL3_RT_MAX_PLAIN_LENGTH + |
751 | len = SSL3_RT_MAX_PLAIN_LENGTH | 714 | SSL3_RT_MAX_ENCRYPTED_OVERHEAD + headerlen + align; |
752 | + SSL3_RT_MAX_ENCRYPTED_OVERHEAD | 715 | if (s->options & SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER) { |
753 | + headerlen + align; | ||
754 | if (s->options & SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER) | ||
755 | { | ||
756 | s->s3->init_extra = 1; | 716 | s->s3->init_extra = 1; |
757 | len += SSL3_RT_MAX_EXTRA; | 717 | len += SSL3_RT_MAX_EXTRA; |
758 | } | 718 | } |
759 | #ifndef OPENSSL_NO_COMP | 719 | #ifndef OPENSSL_NO_COMP |
760 | if (!(s->options & SSL_OP_NO_COMPRESSION)) | 720 | if (!(s->options & SSL_OP_NO_COMPRESSION)) |
761 | len += SSL3_RT_MAX_COMPRESSED_OVERHEAD; | 721 | len += SSL3_RT_MAX_COMPRESSED_OVERHEAD; |
762 | #endif | 722 | #endif |
763 | if ((p=freelist_extract(s->ctx, 1, len)) == NULL) | 723 | if ((p = freelist_extract(s->ctx, 1, len)) == NULL) |
764 | goto err; | 724 | goto err; |
765 | s->s3->rbuf.buf = p; | 725 | s->s3->rbuf.buf = p; |
766 | s->s3->rbuf.len = len; | 726 | s->s3->rbuf.len = len; |
767 | } | 727 | } |
768 | 728 | ||
769 | s->packet= &(s->s3->rbuf.buf[0]); | 729 | s->packet = &(s->s3->rbuf.buf[0]); |
770 | return 1; | 730 | return 1; |
771 | 731 | ||
772 | err: | 732 | err: |
773 | SSLerr(SSL_F_SSL3_SETUP_READ_BUFFER,ERR_R_MALLOC_FAILURE); | 733 | SSLerr(SSL_F_SSL3_SETUP_READ_BUFFER, ERR_R_MALLOC_FAILURE); |
774 | return 0; | 734 | return 0; |
775 | } | 735 | } |
776 | 736 | ||
777 | int ssl3_setup_write_buffer(SSL *s) | 737 | int |
778 | { | 738 | ssl3_setup_write_buffer(SSL *s) |
739 | { | ||
779 | unsigned char *p; | 740 | unsigned char *p; |
780 | size_t len,align=0,headerlen; | 741 | size_t len, align = 0, headerlen; |
781 | 742 | ||
782 | if (SSL_version(s) == DTLS1_VERSION || SSL_version(s) == DTLS1_BAD_VER) | 743 | if (SSL_version(s) == DTLS1_VERSION || SSL_version(s) == DTLS1_BAD_VER) |
783 | headerlen = DTLS1_RT_HEADER_LENGTH + 1; | 744 | headerlen = DTLS1_RT_HEADER_LENGTH + 1; |
@@ -785,62 +746,61 @@ int ssl3_setup_write_buffer(SSL *s) | |||
785 | headerlen = SSL3_RT_HEADER_LENGTH; | 746 | headerlen = SSL3_RT_HEADER_LENGTH; |
786 | 747 | ||
787 | #if defined(SSL3_ALIGN_PAYLOAD) && SSL3_ALIGN_PAYLOAD!=0 | 748 | #if defined(SSL3_ALIGN_PAYLOAD) && SSL3_ALIGN_PAYLOAD!=0 |
788 | align = (-SSL3_RT_HEADER_LENGTH)&(SSL3_ALIGN_PAYLOAD-1); | 749 | align = (-SSL3_RT_HEADER_LENGTH)&(SSL3_ALIGN_PAYLOAD - 1); |
789 | #endif | 750 | #endif |
790 | 751 | ||
791 | if (s->s3->wbuf.buf == NULL) | 752 | if (s->s3->wbuf.buf == NULL) { |
792 | { | 753 | len = s->max_send_fragment + |
793 | len = s->max_send_fragment | 754 | SSL3_RT_SEND_MAX_ENCRYPTED_OVERHEAD + headerlen + align; |
794 | + SSL3_RT_SEND_MAX_ENCRYPTED_OVERHEAD | ||
795 | + headerlen + align; | ||
796 | #ifndef OPENSSL_NO_COMP | 755 | #ifndef OPENSSL_NO_COMP |
797 | if (!(s->options & SSL_OP_NO_COMPRESSION)) | 756 | if (!(s->options & SSL_OP_NO_COMPRESSION)) |
798 | len += SSL3_RT_MAX_COMPRESSED_OVERHEAD; | 757 | len += SSL3_RT_MAX_COMPRESSED_OVERHEAD; |
799 | #endif | 758 | #endif |
800 | if (!(s->options & SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS)) | 759 | if (!(s->options & SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS)) |
801 | len += headerlen + align | 760 | len += headerlen + align + |
802 | + SSL3_RT_SEND_MAX_ENCRYPTED_OVERHEAD; | 761 | SSL3_RT_SEND_MAX_ENCRYPTED_OVERHEAD; |
803 | 762 | ||
804 | if ((p=freelist_extract(s->ctx, 0, len)) == NULL) | 763 | if ((p = freelist_extract(s->ctx, 0, len)) == NULL) |
805 | goto err; | 764 | goto err; |
806 | s->s3->wbuf.buf = p; | 765 | s->s3->wbuf.buf = p; |
807 | s->s3->wbuf.len = len; | 766 | s->s3->wbuf.len = len; |
808 | } | 767 | } |
809 | 768 | ||
810 | return 1; | 769 | return 1; |
811 | 770 | ||
812 | err: | 771 | err: |
813 | SSLerr(SSL_F_SSL3_SETUP_WRITE_BUFFER,ERR_R_MALLOC_FAILURE); | 772 | SSLerr(SSL_F_SSL3_SETUP_WRITE_BUFFER, ERR_R_MALLOC_FAILURE); |
814 | return 0; | 773 | return 0; |
815 | } | 774 | } |
816 | 775 | ||
817 | 776 | ||
818 | int ssl3_setup_buffers(SSL *s) | 777 | int |
819 | { | 778 | ssl3_setup_buffers(SSL *s) |
779 | { | ||
820 | if (!ssl3_setup_read_buffer(s)) | 780 | if (!ssl3_setup_read_buffer(s)) |
821 | return 0; | 781 | return 0; |
822 | if (!ssl3_setup_write_buffer(s)) | 782 | if (!ssl3_setup_write_buffer(s)) |
823 | return 0; | 783 | return 0; |
824 | return 1; | 784 | return 1; |
825 | } | 785 | } |
826 | 786 | ||
827 | int ssl3_release_write_buffer(SSL *s) | 787 | int |
828 | { | 788 | ssl3_release_write_buffer(SSL *s) |
829 | if (s->s3->wbuf.buf != NULL) | 789 | { |
830 | { | 790 | if (s->s3->wbuf.buf != NULL) { |
831 | freelist_insert(s->ctx, 0, s->s3->wbuf.len, s->s3->wbuf.buf); | 791 | freelist_insert(s->ctx, 0, s->s3->wbuf.len, s->s3->wbuf.buf); |
832 | s->s3->wbuf.buf = NULL; | 792 | s->s3->wbuf.buf = NULL; |
833 | } | ||
834 | return 1; | ||
835 | } | 793 | } |
794 | return 1; | ||
795 | } | ||
836 | 796 | ||
837 | int ssl3_release_read_buffer(SSL *s) | 797 | int |
838 | { | 798 | ssl3_release_read_buffer(SSL *s) |
839 | if (s->s3->rbuf.buf != NULL) | 799 | { |
840 | { | 800 | if (s->s3->rbuf.buf != NULL) { |
841 | freelist_insert(s->ctx, 1, s->s3->rbuf.len, s->s3->rbuf.buf); | 801 | freelist_insert(s->ctx, 1, s->s3->rbuf.len, s->s3->rbuf.buf); |
842 | s->s3->rbuf.buf = NULL; | 802 | s->s3->rbuf.buf = NULL; |
843 | } | ||
844 | return 1; | ||
845 | } | 803 | } |
804 | return 1; | ||
805 | } | ||
846 | 806 | ||
diff --git a/src/lib/libssl/s3_cbc.c b/src/lib/libssl/s3_cbc.c index 443a31e746..d6cc9b4771 100644 --- a/src/lib/libssl/s3_cbc.c +++ b/src/lib/libssl/s3_cbc.c | |||
@@ -73,30 +73,33 @@ | |||
73 | * bits. They use the fact that arithmetic shift shifts-in the sign bit. | 73 | * bits. They use the fact that arithmetic shift shifts-in the sign bit. |
74 | * However, this is not ensured by the C standard so you may need to replace | 74 | * However, this is not ensured by the C standard so you may need to replace |
75 | * them with something else on odd CPUs. */ | 75 | * them with something else on odd CPUs. */ |
76 | #define DUPLICATE_MSB_TO_ALL(x) ( (unsigned)( (int)(x) >> (sizeof(int)*8-1) ) ) | 76 | #define DUPLICATE_MSB_TO_ALL(x) ((unsigned)((int)(x) >> (sizeof(int) * 8 - 1))) |
77 | #define DUPLICATE_MSB_TO_ALL_8(x) ((unsigned char)(DUPLICATE_MSB_TO_ALL(x))) | 77 | #define DUPLICATE_MSB_TO_ALL_8(x) ((unsigned char)(DUPLICATE_MSB_TO_ALL(x))) |
78 | 78 | ||
79 | /* constant_time_lt returns 0xff if a<b and 0x00 otherwise. */ | 79 | /* constant_time_lt returns 0xff if a<b and 0x00 otherwise. */ |
80 | static unsigned constant_time_lt(unsigned a, unsigned b) | 80 | static unsigned |
81 | { | 81 | constant_time_lt(unsigned a, unsigned b) |
82 | { | ||
82 | a -= b; | 83 | a -= b; |
83 | return DUPLICATE_MSB_TO_ALL(a); | 84 | return DUPLICATE_MSB_TO_ALL(a); |
84 | } | 85 | } |
85 | 86 | ||
86 | /* constant_time_ge returns 0xff if a>=b and 0x00 otherwise. */ | 87 | /* constant_time_ge returns 0xff if a>=b and 0x00 otherwise. */ |
87 | static unsigned constant_time_ge(unsigned a, unsigned b) | 88 | static unsigned |
88 | { | 89 | constant_time_ge(unsigned a, unsigned b) |
90 | { | ||
89 | a -= b; | 91 | a -= b; |
90 | return DUPLICATE_MSB_TO_ALL(~a); | 92 | return DUPLICATE_MSB_TO_ALL(~a); |
91 | } | 93 | } |
92 | 94 | ||
93 | /* constant_time_eq_8 returns 0xff if a==b and 0x00 otherwise. */ | 95 | /* constant_time_eq_8 returns 0xff if a==b and 0x00 otherwise. */ |
94 | static unsigned char constant_time_eq_8(unsigned a, unsigned b) | 96 | static unsigned char |
95 | { | 97 | constant_time_eq_8(unsigned a, unsigned b) |
98 | { | ||
96 | unsigned c = a ^ b; | 99 | unsigned c = a ^ b; |
97 | c--; | 100 | c--; |
98 | return DUPLICATE_MSB_TO_ALL_8(c); | 101 | return DUPLICATE_MSB_TO_ALL_8(c); |
99 | } | 102 | } |
100 | 103 | ||
101 | /* ssl3_cbc_remove_padding removes padding from the decrypted, SSLv3, CBC | 104 | /* ssl3_cbc_remove_padding removes padding from the decrypted, SSLv3, CBC |
102 | * record in |rec| by updating |rec->length| in constant time. | 105 | * record in |rec| by updating |rec->length| in constant time. |
@@ -106,11 +109,10 @@ static unsigned char constant_time_eq_8(unsigned a, unsigned b) | |||
106 | * 0: (in non-constant time) if the record is publicly invalid. | 109 | * 0: (in non-constant time) if the record is publicly invalid. |
107 | * 1: if the padding was valid | 110 | * 1: if the padding was valid |
108 | * -1: otherwise. */ | 111 | * -1: otherwise. */ |
109 | int ssl3_cbc_remove_padding(const SSL* s, | 112 | int |
110 | SSL3_RECORD *rec, | 113 | ssl3_cbc_remove_padding(const SSL* s, SSL3_RECORD *rec, unsigned block_size, |
111 | unsigned block_size, | 114 | unsigned mac_size) |
112 | unsigned mac_size) | 115 | { |
113 | { | ||
114 | unsigned padding_length, good; | 116 | unsigned padding_length, good; |
115 | const unsigned overhead = 1 /* padding length byte */ + mac_size; | 117 | const unsigned overhead = 1 /* padding length byte */ + mac_size; |
116 | 118 | ||
@@ -119,13 +121,13 @@ int ssl3_cbc_remove_padding(const SSL* s, | |||
119 | if (overhead > rec->length) | 121 | if (overhead > rec->length) |
120 | return 0; | 122 | return 0; |
121 | 123 | ||
122 | padding_length = rec->data[rec->length-1]; | 124 | padding_length = rec->data[rec->length - 1]; |
123 | good = constant_time_ge(rec->length, padding_length+overhead); | 125 | good = constant_time_ge(rec->length, padding_length + overhead); |
124 | /* SSLv3 requires that the padding is minimal. */ | 126 | /* SSLv3 requires that the padding is minimal. */ |
125 | good &= constant_time_ge(block_size, padding_length+1); | 127 | good &= constant_time_ge(block_size, padding_length + 1); |
126 | padding_length = good & (padding_length+1); | 128 | padding_length = good & (padding_length + 1); |
127 | rec->length -= padding_length; | 129 | rec->length -= padding_length; |
128 | rec->type |= padding_length<<8; /* kludge: pass padding length */ | 130 | rec->type |= padding_length << 8; /* kludge: pass padding length */ |
129 | return (int)((good & 1) | (~good & -1)); | 131 | return (int)((good & 1) | (~good & -1)); |
130 | } | 132 | } |
131 | 133 | ||
@@ -140,16 +142,14 @@ int ssl3_cbc_remove_padding(const SSL* s, | |||
140 | * 0: (in non-constant time) if the record is publicly invalid. | 142 | * 0: (in non-constant time) if the record is publicly invalid. |
141 | * 1: if the padding was valid | 143 | * 1: if the padding was valid |
142 | * -1: otherwise. */ | 144 | * -1: otherwise. */ |
143 | int tls1_cbc_remove_padding(const SSL* s, | 145 | int |
144 | SSL3_RECORD *rec, | 146 | tls1_cbc_remove_padding(const SSL* s, SSL3_RECORD *rec, unsigned block_size, |
145 | unsigned block_size, | 147 | unsigned mac_size) |
146 | unsigned mac_size) | 148 | { |
147 | { | ||
148 | unsigned padding_length, good, to_check, i; | 149 | unsigned padding_length, good, to_check, i; |
149 | const unsigned overhead = 1 /* padding length byte */ + mac_size; | 150 | const unsigned overhead = 1 /* padding length byte */ + mac_size; |
150 | /* Check if version requires explicit IV */ | 151 | /* Check if version requires explicit IV */ |
151 | if (s->version >= TLS1_1_VERSION || s->version == DTLS1_BAD_VER) | 152 | if (s->version >= TLS1_1_VERSION || s->version == DTLS1_BAD_VER) { |
152 | { | ||
153 | /* These lengths are all public so we can test them in | 153 | /* These lengths are all public so we can test them in |
154 | * non-constant time. | 154 | * non-constant time. |
155 | */ | 155 | */ |
@@ -159,40 +159,35 @@ int tls1_cbc_remove_padding(const SSL* s, | |||
159 | rec->data += block_size; | 159 | rec->data += block_size; |
160 | rec->input += block_size; | 160 | rec->input += block_size; |
161 | rec->length -= block_size; | 161 | rec->length -= block_size; |
162 | } | 162 | } else if (overhead > rec->length) |
163 | else if (overhead > rec->length) | ||
164 | return 0; | 163 | return 0; |
165 | 164 | ||
166 | padding_length = rec->data[rec->length-1]; | 165 | padding_length = rec->data[rec->length - 1]; |
167 | 166 | ||
168 | /* NB: if compression is in operation the first packet may not be of | 167 | /* NB: if compression is in operation the first packet may not be of |
169 | * even length so the padding bug check cannot be performed. This bug | 168 | * even length so the padding bug check cannot be performed. This bug |
170 | * workaround has been around since SSLeay so hopefully it is either | 169 | * workaround has been around since SSLeay so hopefully it is either |
171 | * fixed now or no buggy implementation supports compression [steve] | 170 | * fixed now or no buggy implementation supports compression [steve] |
172 | */ | 171 | */ |
173 | if ( (s->options&SSL_OP_TLS_BLOCK_PADDING_BUG) && !s->expand) | 172 | if ((s->options & SSL_OP_TLS_BLOCK_PADDING_BUG) && !s->expand) { |
174 | { | ||
175 | /* First packet is even in size, so check */ | 173 | /* First packet is even in size, so check */ |
176 | if ((memcmp(s->s3->read_sequence, "\0\0\0\0\0\0\0\0",8) == 0) && | 174 | if ((memcmp(s->s3->read_sequence, "\0\0\0\0\0\0\0\0", 8) == 0) && |
177 | !(padding_length & 1)) | 175 | !(padding_length & 1)) { |
178 | { | ||
179 | s->s3->flags|=TLS1_FLAGS_TLS_PADDING_BUG; | 176 | s->s3->flags|=TLS1_FLAGS_TLS_PADDING_BUG; |
180 | } | 177 | } |
181 | if ((s->s3->flags & TLS1_FLAGS_TLS_PADDING_BUG) && | 178 | if ((s->s3->flags & TLS1_FLAGS_TLS_PADDING_BUG) && |
182 | padding_length > 0) | 179 | padding_length > 0) { |
183 | { | ||
184 | padding_length--; | 180 | padding_length--; |
185 | } | ||
186 | } | 181 | } |
182 | } | ||
187 | 183 | ||
188 | if (EVP_CIPHER_flags(s->enc_read_ctx->cipher)&EVP_CIPH_FLAG_AEAD_CIPHER) | 184 | if (EVP_CIPHER_flags(s->enc_read_ctx->cipher) & EVP_CIPH_FLAG_AEAD_CIPHER) { |
189 | { | ||
190 | /* padding is already verified */ | 185 | /* padding is already verified */ |
191 | rec->length -= padding_length + 1; | 186 | rec->length -= padding_length + 1; |
192 | return 1; | 187 | return 1; |
193 | } | 188 | } |
194 | 189 | ||
195 | good = constant_time_ge(rec->length, overhead+padding_length); | 190 | good = constant_time_ge(rec->length, overhead + padding_length); |
196 | /* The padding consists of a length byte at the end of the record and | 191 | /* The padding consists of a length byte at the end of the record and |
197 | * then that many bytes of padding, all with the same value as the | 192 | * then that many bytes of padding, all with the same value as the |
198 | * length byte. Thus, with the length byte included, there are i+1 | 193 | * length byte. Thus, with the length byte included, there are i+1 |
@@ -203,17 +198,16 @@ int tls1_cbc_remove_padding(const SSL* s, | |||
203 | * amount of padding possible. (Again, the length of the record is | 198 | * amount of padding possible. (Again, the length of the record is |
204 | * public information so we can use it.) */ | 199 | * public information so we can use it.) */ |
205 | to_check = 255; /* maximum amount of padding. */ | 200 | to_check = 255; /* maximum amount of padding. */ |
206 | if (to_check > rec->length-1) | 201 | if (to_check > rec->length - 1) |
207 | to_check = rec->length-1; | 202 | to_check = rec->length - 1; |
208 | 203 | ||
209 | for (i = 0; i < to_check; i++) | 204 | for (i = 0; i < to_check; i++) { |
210 | { | ||
211 | unsigned char mask = constant_time_ge(padding_length, i); | 205 | unsigned char mask = constant_time_ge(padding_length, i); |
212 | unsigned char b = rec->data[rec->length-1-i]; | 206 | unsigned char b = rec->data[rec->length - 1 - i]; |
213 | /* The final |padding_length+1| bytes should all have the value | 207 | /* The final |padding_length+1| bytes should all have the value |
214 | * |padding_length|. Therefore the XOR should be zero. */ | 208 | * |padding_length|. Therefore the XOR should be zero. */ |
215 | good &= ~(mask&(padding_length ^ b)); | 209 | good &= ~(mask&(padding_length ^ b)); |
216 | } | 210 | } |
217 | 211 | ||
218 | /* If any of the final |padding_length+1| bytes had the wrong value, | 212 | /* If any of the final |padding_length+1| bytes had the wrong value, |
219 | * one or more of the lower eight bits of |good| will be cleared. We | 213 | * one or more of the lower eight bits of |good| will be cleared. We |
@@ -222,15 +216,15 @@ int tls1_cbc_remove_padding(const SSL* s, | |||
222 | good &= good >> 4; | 216 | good &= good >> 4; |
223 | good &= good >> 2; | 217 | good &= good >> 2; |
224 | good &= good >> 1; | 218 | good &= good >> 1; |
225 | good <<= sizeof(good)*8-1; | 219 | good <<= sizeof(good)*8 - 1; |
226 | good = DUPLICATE_MSB_TO_ALL(good); | 220 | good = DUPLICATE_MSB_TO_ALL(good); |
227 | 221 | ||
228 | padding_length = good & (padding_length+1); | 222 | padding_length = good & (padding_length + 1); |
229 | rec->length -= padding_length; | 223 | rec->length -= padding_length; |
230 | rec->type |= padding_length<<8; /* kludge: pass padding length */ | 224 | rec->type |= padding_length<<8; /* kludge: pass padding length */ |
231 | 225 | ||
232 | return (int)((good & 1) | (~good & -1)); | 226 | return (int)((good & 1) | (~good & -1)); |
233 | } | 227 | } |
234 | 228 | ||
235 | /* ssl3_cbc_copy_mac copies |md_size| bytes from the end of |rec| to |out| in | 229 | /* ssl3_cbc_copy_mac copies |md_size| bytes from the end of |rec| to |out| in |
236 | * constant time (independent of the concrete value of rec->length, which may | 230 | * constant time (independent of the concrete value of rec->length, which may |
@@ -251,12 +245,12 @@ int tls1_cbc_remove_padding(const SSL* s, | |||
251 | */ | 245 | */ |
252 | #define CBC_MAC_ROTATE_IN_PLACE | 246 | #define CBC_MAC_ROTATE_IN_PLACE |
253 | 247 | ||
254 | void ssl3_cbc_copy_mac(unsigned char* out, | 248 | void |
255 | const SSL3_RECORD *rec, | 249 | ssl3_cbc_copy_mac(unsigned char* out, const SSL3_RECORD *rec, |
256 | unsigned md_size,unsigned orig_len) | 250 | unsigned md_size, unsigned orig_len) |
257 | { | 251 | { |
258 | #if defined(CBC_MAC_ROTATE_IN_PLACE) | 252 | #if defined(CBC_MAC_ROTATE_IN_PLACE) |
259 | unsigned char rotated_mac_buf[64+EVP_MAX_MD_SIZE]; | 253 | unsigned char rotated_mac_buf[64 + EVP_MAX_MD_SIZE]; |
260 | unsigned char *rotated_mac; | 254 | unsigned char *rotated_mac; |
261 | #else | 255 | #else |
262 | unsigned char rotated_mac[EVP_MAX_MD_SIZE]; | 256 | unsigned char rotated_mac[EVP_MAX_MD_SIZE]; |
@@ -276,7 +270,7 @@ void ssl3_cbc_copy_mac(unsigned char* out, | |||
276 | OPENSSL_assert(md_size <= EVP_MAX_MD_SIZE); | 270 | OPENSSL_assert(md_size <= EVP_MAX_MD_SIZE); |
277 | 271 | ||
278 | #if defined(CBC_MAC_ROTATE_IN_PLACE) | 272 | #if defined(CBC_MAC_ROTATE_IN_PLACE) |
279 | rotated_mac = rotated_mac_buf + ((0-(size_t)rotated_mac_buf)&63); | 273 | rotated_mac = rotated_mac_buf + ((0 - (size_t)rotated_mac_buf)&63); |
280 | #endif | 274 | #endif |
281 | 275 | ||
282 | /* This information is public so it's safe to branch based on it. */ | 276 | /* This information is public so it's safe to branch based on it. */ |
@@ -290,42 +284,39 @@ void ssl3_cbc_copy_mac(unsigned char* out, | |||
290 | * figure out that it can remove div_spoiler as that would require it | 284 | * figure out that it can remove div_spoiler as that would require it |
291 | * to prove that md_size is always even, which I hope is beyond it. */ | 285 | * to prove that md_size is always even, which I hope is beyond it. */ |
292 | div_spoiler = md_size >> 1; | 286 | div_spoiler = md_size >> 1; |
293 | div_spoiler <<= (sizeof(div_spoiler)-1)*8; | 287 | div_spoiler <<= (sizeof(div_spoiler) - 1) * 8; |
294 | rotate_offset = (div_spoiler + mac_start - scan_start) % md_size; | 288 | rotate_offset = (div_spoiler + mac_start - scan_start) % md_size; |
295 | 289 | ||
296 | memset(rotated_mac, 0, md_size); | 290 | memset(rotated_mac, 0, md_size); |
297 | for (i = scan_start, j = 0; i < orig_len; i++) | 291 | for (i = scan_start, j = 0; i < orig_len; i++) { |
298 | { | ||
299 | unsigned char mac_started = constant_time_ge(i, mac_start); | 292 | unsigned char mac_started = constant_time_ge(i, mac_start); |
300 | unsigned char mac_ended = constant_time_ge(i, mac_end); | 293 | unsigned char mac_ended = constant_time_ge(i, mac_end); |
301 | unsigned char b = rec->data[i]; | 294 | unsigned char b = rec->data[i]; |
302 | rotated_mac[j++] |= b & mac_started & ~mac_ended; | 295 | rotated_mac[j++] |= b & mac_started & ~mac_ended; |
303 | j &= constant_time_lt(j,md_size); | 296 | j &= constant_time_lt(j, md_size); |
304 | } | 297 | } |
305 | 298 | ||
306 | /* Now rotate the MAC */ | 299 | /* Now rotate the MAC */ |
307 | #if defined(CBC_MAC_ROTATE_IN_PLACE) | 300 | #if defined(CBC_MAC_ROTATE_IN_PLACE) |
308 | j = 0; | 301 | j = 0; |
309 | for (i = 0; i < md_size; i++) | 302 | for (i = 0; i < md_size; i++) { |
310 | { | ||
311 | /* in case cache-line is 32 bytes, touch second line */ | 303 | /* in case cache-line is 32 bytes, touch second line */ |
312 | ((volatile unsigned char *)rotated_mac)[rotate_offset^32]; | 304 | ((volatile unsigned char *)rotated_mac)[rotate_offset^32]; |
313 | out[j++] = rotated_mac[rotate_offset++]; | 305 | out[j++] = rotated_mac[rotate_offset++]; |
314 | rotate_offset &= constant_time_lt(rotate_offset,md_size); | 306 | rotate_offset &= constant_time_lt(rotate_offset, md_size); |
315 | } | 307 | } |
316 | #else | 308 | #else |
317 | memset(out, 0, md_size); | 309 | memset(out, 0, md_size); |
318 | rotate_offset = md_size - rotate_offset; | 310 | rotate_offset = md_size - rotate_offset; |
319 | rotate_offset &= constant_time_lt(rotate_offset,md_size); | 311 | rotate_offset &= constant_time_lt(rotate_offset, md_size); |
320 | for (i = 0; i < md_size; i++) | 312 | for (i = 0; i < md_size; i++) { |
321 | { | ||
322 | for (j = 0; j < md_size; j++) | 313 | for (j = 0; j < md_size; j++) |
323 | out[j] |= rotated_mac[i] & constant_time_eq_8(j, rotate_offset); | 314 | out[j] |= rotated_mac[i] & constant_time_eq_8(j, rotate_offset); |
324 | rotate_offset++; | 315 | rotate_offset++; |
325 | rotate_offset &= constant_time_lt(rotate_offset,md_size); | 316 | rotate_offset &= constant_time_lt(rotate_offset, md_size); |
326 | } | ||
327 | #endif | ||
328 | } | 317 | } |
318 | #endif | ||
319 | } | ||
329 | 320 | ||
330 | /* u32toLE serialises an unsigned, 32-bit number (n) as four bytes at (p) in | 321 | /* u32toLE serialises an unsigned, 32-bit number (n) as four bytes at (p) in |
331 | * little-endian order. The value of p is advanced by four. */ | 322 | * little-endian order. The value of p is advanced by four. */ |
@@ -338,81 +329,83 @@ void ssl3_cbc_copy_mac(unsigned char* out, | |||
338 | /* These functions serialize the state of a hash and thus perform the standard | 329 | /* These functions serialize the state of a hash and thus perform the standard |
339 | * "final" operation without adding the padding and length that such a function | 330 | * "final" operation without adding the padding and length that such a function |
340 | * typically does. */ | 331 | * typically does. */ |
341 | static void tls1_md5_final_raw(void* ctx, unsigned char *md_out) | 332 | static void |
342 | { | 333 | tls1_md5_final_raw(void* ctx, unsigned char *md_out) |
334 | { | ||
343 | MD5_CTX *md5 = ctx; | 335 | MD5_CTX *md5 = ctx; |
344 | u32toLE(md5->A, md_out); | 336 | u32toLE(md5->A, md_out); |
345 | u32toLE(md5->B, md_out); | 337 | u32toLE(md5->B, md_out); |
346 | u32toLE(md5->C, md_out); | 338 | u32toLE(md5->C, md_out); |
347 | u32toLE(md5->D, md_out); | 339 | u32toLE(md5->D, md_out); |
348 | } | 340 | } |
349 | 341 | ||
350 | static void tls1_sha1_final_raw(void* ctx, unsigned char *md_out) | 342 | static void |
351 | { | 343 | tls1_sha1_final_raw(void* ctx, unsigned char *md_out) |
344 | { | ||
352 | SHA_CTX *sha1 = ctx; | 345 | SHA_CTX *sha1 = ctx; |
353 | l2n(sha1->h0, md_out); | 346 | l2n(sha1->h0, md_out); |
354 | l2n(sha1->h1, md_out); | 347 | l2n(sha1->h1, md_out); |
355 | l2n(sha1->h2, md_out); | 348 | l2n(sha1->h2, md_out); |
356 | l2n(sha1->h3, md_out); | 349 | l2n(sha1->h3, md_out); |
357 | l2n(sha1->h4, md_out); | 350 | l2n(sha1->h4, md_out); |
358 | } | 351 | } |
359 | #define LARGEST_DIGEST_CTX SHA_CTX | 352 | #define LARGEST_DIGEST_CTX SHA_CTX |
360 | 353 | ||
361 | #ifndef OPENSSL_NO_SHA256 | 354 | #ifndef OPENSSL_NO_SHA256 |
362 | static void tls1_sha256_final_raw(void* ctx, unsigned char *md_out) | 355 | static void |
363 | { | 356 | tls1_sha256_final_raw(void* ctx, unsigned char *md_out) |
357 | { | ||
364 | SHA256_CTX *sha256 = ctx; | 358 | SHA256_CTX *sha256 = ctx; |
365 | unsigned i; | 359 | unsigned i; |
366 | 360 | ||
367 | for (i = 0; i < 8; i++) | 361 | for (i = 0; i < 8; i++) { |
368 | { | ||
369 | l2n(sha256->h[i], md_out); | 362 | l2n(sha256->h[i], md_out); |
370 | } | ||
371 | } | 363 | } |
364 | } | ||
372 | #undef LARGEST_DIGEST_CTX | 365 | #undef LARGEST_DIGEST_CTX |
373 | #define LARGEST_DIGEST_CTX SHA256_CTX | 366 | #define LARGEST_DIGEST_CTX SHA256_CTX |
374 | #endif | 367 | #endif |
375 | 368 | ||
376 | #ifndef OPENSSL_NO_SHA512 | 369 | #ifndef OPENSSL_NO_SHA512 |
377 | static void tls1_sha512_final_raw(void* ctx, unsigned char *md_out) | 370 | static void |
378 | { | 371 | tls1_sha512_final_raw(void* ctx, unsigned char *md_out) |
372 | { | ||
379 | SHA512_CTX *sha512 = ctx; | 373 | SHA512_CTX *sha512 = ctx; |
380 | unsigned i; | 374 | unsigned i; |
381 | 375 | ||
382 | for (i = 0; i < 8; i++) | 376 | for (i = 0; i < 8; i++) { |
383 | { | ||
384 | l2n8(sha512->h[i], md_out); | 377 | l2n8(sha512->h[i], md_out); |
385 | } | ||
386 | } | 378 | } |
379 | } | ||
387 | #undef LARGEST_DIGEST_CTX | 380 | #undef LARGEST_DIGEST_CTX |
388 | #define LARGEST_DIGEST_CTX SHA512_CTX | 381 | #define LARGEST_DIGEST_CTX SHA512_CTX |
389 | #endif | 382 | #endif |
390 | 383 | ||
391 | /* ssl3_cbc_record_digest_supported returns 1 iff |ctx| uses a hash function | 384 | /* ssl3_cbc_record_digest_supported returns 1 iff |ctx| uses a hash function |
392 | * which ssl3_cbc_digest_record supports. */ | 385 | * which ssl3_cbc_digest_record supports. */ |
393 | char ssl3_cbc_record_digest_supported(const EVP_MD_CTX *ctx) | 386 | char |
394 | { | 387 | ssl3_cbc_record_digest_supported(const EVP_MD_CTX *ctx) |
388 | { | ||
395 | #ifdef OPENSSL_FIPS | 389 | #ifdef OPENSSL_FIPS |
396 | if (FIPS_mode()) | 390 | if (FIPS_mode()) |
397 | return 0; | 391 | return 0; |
398 | #endif | 392 | #endif |
399 | switch (EVP_MD_CTX_type(ctx)) | 393 | switch (EVP_MD_CTX_type(ctx)) { |
400 | { | 394 | case NID_md5: |
401 | case NID_md5: | 395 | case NID_sha1: |
402 | case NID_sha1: | ||
403 | #ifndef OPENSSL_NO_SHA256 | 396 | #ifndef OPENSSL_NO_SHA256 |
404 | case NID_sha224: | 397 | case NID_sha224: |
405 | case NID_sha256: | 398 | case NID_sha256: |
406 | #endif | 399 | #endif |
407 | #ifndef OPENSSL_NO_SHA512 | 400 | #ifndef OPENSSL_NO_SHA512 |
408 | case NID_sha384: | 401 | case NID_sha384: |
409 | case NID_sha512: | 402 | case NID_sha512: |
410 | #endif | 403 | #endif |
411 | return 1; | 404 | return 1; |
412 | default: | 405 | default: |
413 | return 0; | 406 | return 0; |
414 | } | ||
415 | } | 407 | } |
408 | } | ||
416 | 409 | ||
417 | /* ssl3_cbc_digest_record computes the MAC of a decrypted, padded SSLv3/TLS | 410 | /* ssl3_cbc_digest_record computes the MAC of a decrypted, padded SSLv3/TLS |
418 | * record. | 411 | * record. |
@@ -433,26 +426,21 @@ char ssl3_cbc_record_digest_supported(const EVP_MD_CTX *ctx) | |||
433 | * functions, above, we know that data_plus_mac_size is large enough to contain | 426 | * functions, above, we know that data_plus_mac_size is large enough to contain |
434 | * a padding byte and MAC. (If the padding was invalid, it might contain the | 427 | * a padding byte and MAC. (If the padding was invalid, it might contain the |
435 | * padding too. ) */ | 428 | * padding too. ) */ |
436 | void ssl3_cbc_digest_record( | 429 | void ssl3_cbc_digest_record(const EVP_MD_CTX *ctx, unsigned char* md_out, |
437 | const EVP_MD_CTX *ctx, | 430 | size_t* md_out_size, const unsigned char header[13], |
438 | unsigned char* md_out, | 431 | const unsigned char *data, size_t data_plus_mac_size, |
439 | size_t* md_out_size, | 432 | size_t data_plus_mac_plus_padding_size, const unsigned char *mac_secret, |
440 | const unsigned char header[13], | 433 | unsigned mac_secret_length, char is_sslv3) |
441 | const unsigned char *data, | 434 | { |
442 | size_t data_plus_mac_size, | ||
443 | size_t data_plus_mac_plus_padding_size, | ||
444 | const unsigned char *mac_secret, | ||
445 | unsigned mac_secret_length, | ||
446 | char is_sslv3) | ||
447 | { | ||
448 | union { double align; | 435 | union { double align; |
449 | unsigned char c[sizeof(LARGEST_DIGEST_CTX)]; } md_state; | 436 | unsigned char c[sizeof(LARGEST_DIGEST_CTX)]; |
437 | } md_state; | ||
450 | void (*md_final_raw)(void *ctx, unsigned char *md_out); | 438 | void (*md_final_raw)(void *ctx, unsigned char *md_out); |
451 | void (*md_transform)(void *ctx, const unsigned char *block); | 439 | void (*md_transform)(void *ctx, const unsigned char *block); |
452 | unsigned md_size, md_block_size = 64; | 440 | unsigned md_size, md_block_size = 64; |
453 | unsigned sslv3_pad_length = 40, header_length, variance_blocks, | 441 | unsigned sslv3_pad_length = 40, header_length, variance_blocks, |
454 | len, max_mac_bytes, num_blocks, | 442 | len, max_mac_bytes, num_blocks, |
455 | num_starting_blocks, k, mac_end_offset, c, index_a, index_b; | 443 | num_starting_blocks, k, mac_end_offset, c, index_a, index_b; |
456 | unsigned int bits; /* at most 18 bits */ | 444 | unsigned int bits; /* at most 18 bits */ |
457 | unsigned char length_bytes[MAX_HASH_BIT_COUNT_BYTES]; | 445 | unsigned char length_bytes[MAX_HASH_BIT_COUNT_BYTES]; |
458 | /* hmac_pad is the masked HMAC key. */ | 446 | /* hmac_pad is the masked HMAC key. */ |
@@ -470,78 +458,74 @@ void ssl3_cbc_digest_record( | |||
470 | * many possible overflows later in this function. */ | 458 | * many possible overflows later in this function. */ |
471 | OPENSSL_assert(data_plus_mac_plus_padding_size < 1024*1024); | 459 | OPENSSL_assert(data_plus_mac_plus_padding_size < 1024*1024); |
472 | 460 | ||
473 | switch (EVP_MD_CTX_type(ctx)) | 461 | switch (EVP_MD_CTX_type(ctx)) { |
474 | { | 462 | case NID_md5: |
475 | case NID_md5: | 463 | MD5_Init((MD5_CTX*)md_state.c); |
476 | MD5_Init((MD5_CTX*)md_state.c); | 464 | md_final_raw = tls1_md5_final_raw; |
477 | md_final_raw = tls1_md5_final_raw; | 465 | md_transform = (void(*)(void *ctx, const unsigned char *block)) MD5_Transform; |
478 | md_transform = (void(*)(void *ctx, const unsigned char *block)) MD5_Transform; | 466 | md_size = 16; |
479 | md_size = 16; | 467 | sslv3_pad_length = 48; |
480 | sslv3_pad_length = 48; | 468 | length_is_big_endian = 0; |
481 | length_is_big_endian = 0; | 469 | break; |
482 | break; | 470 | case NID_sha1: |
483 | case NID_sha1: | 471 | SHA1_Init((SHA_CTX*)md_state.c); |
484 | SHA1_Init((SHA_CTX*)md_state.c); | 472 | md_final_raw = tls1_sha1_final_raw; |
485 | md_final_raw = tls1_sha1_final_raw; | 473 | md_transform = (void(*)(void *ctx, const unsigned char *block)) SHA1_Transform; |
486 | md_transform = (void(*)(void *ctx, const unsigned char *block)) SHA1_Transform; | 474 | md_size = 20; |
487 | md_size = 20; | 475 | break; |
488 | break; | ||
489 | #ifndef OPENSSL_NO_SHA256 | 476 | #ifndef OPENSSL_NO_SHA256 |
490 | case NID_sha224: | 477 | case NID_sha224: |
491 | SHA224_Init((SHA256_CTX*)md_state.c); | 478 | SHA224_Init((SHA256_CTX*)md_state.c); |
492 | md_final_raw = tls1_sha256_final_raw; | 479 | md_final_raw = tls1_sha256_final_raw; |
493 | md_transform = (void(*)(void *ctx, const unsigned char *block)) SHA256_Transform; | 480 | md_transform = (void(*)(void *ctx, const unsigned char *block)) SHA256_Transform; |
494 | md_size = 224/8; | 481 | md_size = 224/8; |
495 | break; | 482 | break; |
496 | case NID_sha256: | 483 | case NID_sha256: |
497 | SHA256_Init((SHA256_CTX*)md_state.c); | 484 | SHA256_Init((SHA256_CTX*)md_state.c); |
498 | md_final_raw = tls1_sha256_final_raw; | 485 | md_final_raw = tls1_sha256_final_raw; |
499 | md_transform = (void(*)(void *ctx, const unsigned char *block)) SHA256_Transform; | 486 | md_transform = (void(*)(void *ctx, const unsigned char *block)) SHA256_Transform; |
500 | md_size = 32; | 487 | md_size = 32; |
501 | break; | 488 | break; |
502 | #endif | 489 | #endif |
503 | #ifndef OPENSSL_NO_SHA512 | 490 | #ifndef OPENSSL_NO_SHA512 |
504 | case NID_sha384: | 491 | case NID_sha384: |
505 | SHA384_Init((SHA512_CTX*)md_state.c); | 492 | SHA384_Init((SHA512_CTX*)md_state.c); |
506 | md_final_raw = tls1_sha512_final_raw; | 493 | md_final_raw = tls1_sha512_final_raw; |
507 | md_transform = (void(*)(void *ctx, const unsigned char *block)) SHA512_Transform; | 494 | md_transform = (void(*)(void *ctx, const unsigned char *block)) SHA512_Transform; |
508 | md_size = 384/8; | 495 | md_size = 384/8; |
509 | md_block_size = 128; | 496 | md_block_size = 128; |
510 | md_length_size = 16; | 497 | md_length_size = 16; |
511 | break; | 498 | break; |
512 | case NID_sha512: | 499 | case NID_sha512: |
513 | SHA512_Init((SHA512_CTX*)md_state.c); | 500 | SHA512_Init((SHA512_CTX*)md_state.c); |
514 | md_final_raw = tls1_sha512_final_raw; | 501 | md_final_raw = tls1_sha512_final_raw; |
515 | md_transform = (void(*)(void *ctx, const unsigned char *block)) SHA512_Transform; | 502 | md_transform = (void(*)(void *ctx, const unsigned char *block)) SHA512_Transform; |
516 | md_size = 64; | 503 | md_size = 64; |
517 | md_block_size = 128; | 504 | md_block_size = 128; |
518 | md_length_size = 16; | 505 | md_length_size = 16; |
519 | break; | 506 | break; |
520 | #endif | 507 | #endif |
521 | default: | 508 | default: |
522 | /* ssl3_cbc_record_digest_supported should have been | 509 | /* ssl3_cbc_record_digest_supported should have been |
523 | * called first to check that the hash function is | 510 | * called first to check that the hash function is |
524 | * supported. */ | 511 | * supported. */ |
525 | OPENSSL_assert(0); | 512 | OPENSSL_assert(0); |
526 | if (md_out_size) | 513 | if (md_out_size) |
527 | *md_out_size = -1; | 514 | *md_out_size = -1; |
528 | return; | 515 | return; |
529 | } | 516 | } |
530 | 517 | ||
531 | OPENSSL_assert(md_length_size <= MAX_HASH_BIT_COUNT_BYTES); | 518 | OPENSSL_assert(md_length_size <= MAX_HASH_BIT_COUNT_BYTES); |
532 | OPENSSL_assert(md_block_size <= MAX_HASH_BLOCK_SIZE); | 519 | OPENSSL_assert(md_block_size <= MAX_HASH_BLOCK_SIZE); |
533 | OPENSSL_assert(md_size <= EVP_MAX_MD_SIZE); | 520 | OPENSSL_assert(md_size <= EVP_MAX_MD_SIZE); |
534 | 521 | ||
535 | header_length = 13; | 522 | header_length = 13; |
536 | if (is_sslv3) | 523 | if (is_sslv3) { |
537 | { | 524 | header_length = mac_secret_length + sslv3_pad_length + |
538 | header_length = | 525 | 8 /* sequence number */ + |
539 | mac_secret_length + | 526 | 1 /* record type */ + |
540 | sslv3_pad_length + | 527 | 2 /* record length */; |
541 | 8 /* sequence number */ + | 528 | } |
542 | 1 /* record type */ + | ||
543 | 2 /* record length */; | ||
544 | } | ||
545 | 529 | ||
546 | /* variance_blocks is the number of blocks of the hash that we have to | 530 | /* variance_blocks is the number of blocks of the hash that we have to |
547 | * calculate in constant time because they could be altered by the | 531 | * calculate in constant time because they could be altered by the |
@@ -597,15 +581,13 @@ void ssl3_cbc_digest_record( | |||
597 | 581 | ||
598 | /* For SSLv3, if we're going to have any starting blocks then we need | 582 | /* For SSLv3, if we're going to have any starting blocks then we need |
599 | * at least two because the header is larger than a single block. */ | 583 | * at least two because the header is larger than a single block. */ |
600 | if (num_blocks > variance_blocks + (is_sslv3 ? 1 : 0)) | 584 | if (num_blocks > variance_blocks + (is_sslv3 ? 1 : 0)) { |
601 | { | ||
602 | num_starting_blocks = num_blocks - variance_blocks; | 585 | num_starting_blocks = num_blocks - variance_blocks; |
603 | k = md_block_size*num_starting_blocks; | 586 | k = md_block_size*num_starting_blocks; |
604 | } | 587 | } |
605 | 588 | ||
606 | bits = 8*mac_end_offset; | 589 | bits = 8*mac_end_offset; |
607 | if (!is_sslv3) | 590 | if (!is_sslv3) { |
608 | { | ||
609 | /* Compute the initial HMAC block. For SSLv3, the padding and | 591 | /* Compute the initial HMAC block. For SSLv3, the padding and |
610 | * secret bytes are included in |header| because they take more | 592 | * secret bytes are included in |header| because they take more |
611 | * than a single block. */ | 593 | * than a single block. */ |
@@ -617,51 +599,44 @@ void ssl3_cbc_digest_record( | |||
617 | hmac_pad[i] ^= 0x36; | 599 | hmac_pad[i] ^= 0x36; |
618 | 600 | ||
619 | md_transform(md_state.c, hmac_pad); | 601 | md_transform(md_state.c, hmac_pad); |
620 | } | 602 | } |
621 | 603 | ||
622 | if (length_is_big_endian) | 604 | if (length_is_big_endian) { |
623 | { | 605 | memset(length_bytes, 0, md_length_size - 4); |
624 | memset(length_bytes,0,md_length_size-4); | 606 | length_bytes[md_length_size - 4] = (unsigned char)(bits >> 24); |
625 | length_bytes[md_length_size-4] = (unsigned char)(bits>>24); | 607 | length_bytes[md_length_size - 3] = (unsigned char)(bits >> 16); |
626 | length_bytes[md_length_size-3] = (unsigned char)(bits>>16); | 608 | length_bytes[md_length_size - 2] = (unsigned char)(bits >> 8); |
627 | length_bytes[md_length_size-2] = (unsigned char)(bits>>8); | 609 | length_bytes[md_length_size - 1] = (unsigned char)bits; |
628 | length_bytes[md_length_size-1] = (unsigned char)bits; | 610 | } else { |
629 | } | 611 | memset(length_bytes, 0, md_length_size); |
630 | else | 612 | length_bytes[md_length_size - 5] = (unsigned char)(bits >> 24); |
631 | { | 613 | length_bytes[md_length_size - 6] = (unsigned char)(bits >> 16); |
632 | memset(length_bytes,0,md_length_size); | 614 | length_bytes[md_length_size - 7] = (unsigned char)(bits >> 8); |
633 | length_bytes[md_length_size-5] = (unsigned char)(bits>>24); | 615 | length_bytes[md_length_size - 8] = (unsigned char)bits; |
634 | length_bytes[md_length_size-6] = (unsigned char)(bits>>16); | 616 | } |
635 | length_bytes[md_length_size-7] = (unsigned char)(bits>>8); | ||
636 | length_bytes[md_length_size-8] = (unsigned char)bits; | ||
637 | } | ||
638 | 617 | ||
639 | if (k > 0) | 618 | if (k > 0) { |
640 | { | 619 | if (is_sslv3) { |
641 | if (is_sslv3) | ||
642 | { | ||
643 | /* The SSLv3 header is larger than a single block. | 620 | /* The SSLv3 header is larger than a single block. |
644 | * overhang is the number of bytes beyond a single | 621 | * overhang is the number of bytes beyond a single |
645 | * block that the header consumes: either 7 bytes | 622 | * block that the header consumes: either 7 bytes |
646 | * (SHA1) or 11 bytes (MD5). */ | 623 | * (SHA1) or 11 bytes (MD5). */ |
647 | unsigned overhang = header_length-md_block_size; | 624 | unsigned overhang = header_length - md_block_size; |
648 | md_transform(md_state.c, header); | 625 | md_transform(md_state.c, header); |
649 | memcpy(first_block, header + md_block_size, overhang); | 626 | memcpy(first_block, header + md_block_size, overhang); |
650 | memcpy(first_block + overhang, data, md_block_size-overhang); | 627 | memcpy(first_block + overhang, data, md_block_size - overhang); |
651 | md_transform(md_state.c, first_block); | 628 | md_transform(md_state.c, first_block); |
652 | for (i = 1; i < k/md_block_size - 1; i++) | 629 | for (i = 1; i < k/md_block_size - 1; i++) |
653 | md_transform(md_state.c, data + md_block_size*i - overhang); | 630 | md_transform(md_state.c, data + md_block_size*i - overhang); |
654 | } | 631 | } else { |
655 | else | ||
656 | { | ||
657 | /* k is a multiple of md_block_size. */ | 632 | /* k is a multiple of md_block_size. */ |
658 | memcpy(first_block, header, 13); | 633 | memcpy(first_block, header, 13); |
659 | memcpy(first_block+13, data, md_block_size-13); | 634 | memcpy(first_block + 13, data, md_block_size - 13); |
660 | md_transform(md_state.c, first_block); | 635 | md_transform(md_state.c, first_block); |
661 | for (i = 1; i < k/md_block_size; i++) | 636 | for (i = 1; i < k/md_block_size; i++) |
662 | md_transform(md_state.c, data + md_block_size*i - 13); | 637 | md_transform(md_state.c, data + md_block_size*i - 13); |
663 | } | ||
664 | } | 638 | } |
639 | } | ||
665 | 640 | ||
666 | memset(mac_out, 0, sizeof(mac_out)); | 641 | memset(mac_out, 0, sizeof(mac_out)); |
667 | 642 | ||
@@ -669,22 +644,20 @@ void ssl3_cbc_digest_record( | |||
669 | * it in constant time. If the |i==index_a| then we'll include the 0x80 | 644 | * it in constant time. If the |i==index_a| then we'll include the 0x80 |
670 | * bytes and zero pad etc. For each block we selectively copy it, in | 645 | * bytes and zero pad etc. For each block we selectively copy it, in |
671 | * constant time, to |mac_out|. */ | 646 | * constant time, to |mac_out|. */ |
672 | for (i = num_starting_blocks; i <= num_starting_blocks+variance_blocks; i++) | 647 | for (i = num_starting_blocks; i <= num_starting_blocks + variance_blocks; i++) { |
673 | { | ||
674 | unsigned char block[MAX_HASH_BLOCK_SIZE]; | 648 | unsigned char block[MAX_HASH_BLOCK_SIZE]; |
675 | unsigned char is_block_a = constant_time_eq_8(i, index_a); | 649 | unsigned char is_block_a = constant_time_eq_8(i, index_a); |
676 | unsigned char is_block_b = constant_time_eq_8(i, index_b); | 650 | unsigned char is_block_b = constant_time_eq_8(i, index_b); |
677 | for (j = 0; j < md_block_size; j++) | 651 | for (j = 0; j < md_block_size; j++) { |
678 | { | ||
679 | unsigned char b = 0, is_past_c, is_past_cp1; | 652 | unsigned char b = 0, is_past_c, is_past_cp1; |
680 | if (k < header_length) | 653 | if (k < header_length) |
681 | b = header[k]; | 654 | b = header[k]; |
682 | else if (k < data_plus_mac_plus_padding_size + header_length) | 655 | else if (k < data_plus_mac_plus_padding_size + header_length) |
683 | b = data[k-header_length]; | 656 | b = data[k - header_length]; |
684 | k++; | 657 | k++; |
685 | 658 | ||
686 | is_past_c = is_block_a & constant_time_ge(j, c); | 659 | is_past_c = is_block_a & constant_time_ge(j, c); |
687 | is_past_cp1 = is_block_a & constant_time_ge(j, c+1); | 660 | is_past_cp1 = is_block_a & constant_time_ge(j, c + 1); |
688 | /* If this is the block containing the end of the | 661 | /* If this is the block containing the end of the |
689 | * application data, and we are at the offset for the | 662 | * application data, and we are at the offset for the |
690 | * 0x80 value, then overwrite b with 0x80. */ | 663 | * 0x80 value, then overwrite b with 0x80. */ |
@@ -701,46 +674,42 @@ void ssl3_cbc_digest_record( | |||
701 | 674 | ||
702 | /* The final bytes of one of the blocks contains the | 675 | /* The final bytes of one of the blocks contains the |
703 | * length. */ | 676 | * length. */ |
704 | if (j >= md_block_size - md_length_size) | 677 | if (j >= md_block_size - md_length_size) { |
705 | { | ||
706 | /* If this is index_b, write a length byte. */ | 678 | /* If this is index_b, write a length byte. */ |
707 | b = (b&~is_block_b) | (is_block_b&length_bytes[j-(md_block_size-md_length_size)]); | 679 | b = (b&~is_block_b) | (is_block_b&length_bytes[j - (md_block_size - md_length_size)]); |
708 | } | ||
709 | block[j] = b; | ||
710 | } | 680 | } |
681 | block[j] = b; | ||
682 | } | ||
711 | 683 | ||
712 | md_transform(md_state.c, block); | 684 | md_transform(md_state.c, block); |
713 | md_final_raw(md_state.c, block); | 685 | md_final_raw(md_state.c, block); |
714 | /* If this is index_b, copy the hash value to |mac_out|. */ | 686 | /* If this is index_b, copy the hash value to |mac_out|. */ |
715 | for (j = 0; j < md_size; j++) | 687 | for (j = 0; j < md_size; j++) |
716 | mac_out[j] |= block[j]&is_block_b; | 688 | mac_out[j] |= block[j]&is_block_b; |
717 | } | 689 | } |
718 | 690 | ||
719 | EVP_MD_CTX_init(&md_ctx); | 691 | EVP_MD_CTX_init(&md_ctx); |
720 | EVP_DigestInit_ex(&md_ctx, ctx->digest, NULL /* engine */); | 692 | EVP_DigestInit_ex(&md_ctx, ctx->digest, NULL /* engine */); |
721 | if (is_sslv3) | 693 | if (is_sslv3) { |
722 | { | ||
723 | /* We repurpose |hmac_pad| to contain the SSLv3 pad2 block. */ | 694 | /* We repurpose |hmac_pad| to contain the SSLv3 pad2 block. */ |
724 | memset(hmac_pad, 0x5c, sslv3_pad_length); | 695 | memset(hmac_pad, 0x5c, sslv3_pad_length); |
725 | 696 | ||
726 | EVP_DigestUpdate(&md_ctx, mac_secret, mac_secret_length); | 697 | EVP_DigestUpdate(&md_ctx, mac_secret, mac_secret_length); |
727 | EVP_DigestUpdate(&md_ctx, hmac_pad, sslv3_pad_length); | 698 | EVP_DigestUpdate(&md_ctx, hmac_pad, sslv3_pad_length); |
728 | EVP_DigestUpdate(&md_ctx, mac_out, md_size); | 699 | EVP_DigestUpdate(&md_ctx, mac_out, md_size); |
729 | } | 700 | } else { |
730 | else | ||
731 | { | ||
732 | /* Complete the HMAC in the standard manner. */ | 701 | /* Complete the HMAC in the standard manner. */ |
733 | for (i = 0; i < md_block_size; i++) | 702 | for (i = 0; i < md_block_size; i++) |
734 | hmac_pad[i] ^= 0x6a; | 703 | hmac_pad[i] ^= 0x6a; |
735 | 704 | ||
736 | EVP_DigestUpdate(&md_ctx, hmac_pad, md_block_size); | 705 | EVP_DigestUpdate(&md_ctx, hmac_pad, md_block_size); |
737 | EVP_DigestUpdate(&md_ctx, mac_out, md_size); | 706 | EVP_DigestUpdate(&md_ctx, mac_out, md_size); |
738 | } | 707 | } |
739 | EVP_DigestFinal(&md_ctx, md_out, &md_out_size_u); | 708 | EVP_DigestFinal(&md_ctx, md_out, &md_out_size_u); |
740 | if (md_out_size) | 709 | if (md_out_size) |
741 | *md_out_size = md_out_size_u; | 710 | *md_out_size = md_out_size_u; |
742 | EVP_MD_CTX_cleanup(&md_ctx); | 711 | EVP_MD_CTX_cleanup(&md_ctx); |
743 | } | 712 | } |
744 | 713 | ||
745 | #ifdef OPENSSL_FIPS | 714 | #ifdef OPENSSL_FIPS |
746 | 715 | ||
@@ -749,10 +718,10 @@ void ssl3_cbc_digest_record( | |||
749 | * by digesting additional data. | 718 | * by digesting additional data. |
750 | */ | 719 | */ |
751 | 720 | ||
752 | void tls_fips_digest_extra( | 721 | void tls_fips_digest_extra(const EVP_CIPHER_CTX *cipher_ctx, |
753 | const EVP_CIPHER_CTX *cipher_ctx, EVP_MD_CTX *mac_ctx, | 722 | EVP_MD_CTX *mac_ctx, const unsigned char *data, size_t data_len, |
754 | const unsigned char *data, size_t data_len, size_t orig_len) | 723 | size_t orig_len) |
755 | { | 724 | { |
756 | size_t block_size, digest_pad, blocks_data, blocks_orig; | 725 | size_t block_size, digest_pad, blocks_data, blocks_orig; |
757 | if (EVP_CIPHER_CTX_mode(cipher_ctx) != EVP_CIPH_CBC_MODE) | 726 | if (EVP_CIPHER_CTX_mode(cipher_ctx) != EVP_CIPH_CBC_MODE) |
758 | return; | 727 | return; |
@@ -785,6 +754,6 @@ void tls_fips_digest_extra( | |||
785 | * length TLS buffer. | 754 | * length TLS buffer. |
786 | */ | 755 | */ |
787 | EVP_DigestSignUpdate(mac_ctx, data, | 756 | EVP_DigestSignUpdate(mac_ctx, data, |
788 | (blocks_orig - blocks_data + 1) * block_size); | 757 | (blocks_orig - blocks_data + 1) * block_size); |
789 | } | 758 | } |
790 | #endif | 759 | #endif |
diff --git a/src/lib/libssl/s3_lib.c b/src/lib/libssl/s3_lib.c index fd1e7b80d8..926071fffa 100644 --- a/src/lib/libssl/s3_lib.c +++ b/src/lib/libssl/s3_lib.c | |||
@@ -164,496 +164,496 @@ | |||
164 | 164 | ||
165 | const char ssl3_version_str[]="SSLv3" OPENSSL_VERSION_PTEXT; | 165 | const char ssl3_version_str[]="SSLv3" OPENSSL_VERSION_PTEXT; |
166 | 166 | ||
167 | #define SSL3_NUM_CIPHERS (sizeof(ssl3_ciphers)/sizeof(SSL_CIPHER)) | 167 | #define SSL3_NUM_CIPHERS (sizeof(ssl3_ciphers) / sizeof(SSL_CIPHER)) |
168 | 168 | ||
169 | /* list of available SSLv3 ciphers (sorted by id) */ | 169 | /* list of available SSLv3 ciphers (sorted by id) */ |
170 | OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]={ | 170 | OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = { |
171 | 171 | ||
172 | /* The RSA ciphers */ | 172 | /* The RSA ciphers */ |
173 | /* Cipher 01 */ | 173 | /* Cipher 01 */ |
174 | { | 174 | { |
175 | 1, | 175 | 1, |
176 | SSL3_TXT_RSA_NULL_MD5, | 176 | SSL3_TXT_RSA_NULL_MD5, |
177 | SSL3_CK_RSA_NULL_MD5, | 177 | SSL3_CK_RSA_NULL_MD5, |
178 | SSL_kRSA, | 178 | SSL_kRSA, |
179 | SSL_aRSA, | 179 | SSL_aRSA, |
180 | SSL_eNULL, | 180 | SSL_eNULL, |
181 | SSL_MD5, | 181 | SSL_MD5, |
182 | SSL_SSLV3, | 182 | SSL_SSLV3, |
183 | SSL_NOT_EXP|SSL_STRONG_NONE, | 183 | SSL_NOT_EXP|SSL_STRONG_NONE, |
184 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 184 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
185 | 0, | 185 | 0, |
186 | 0, | 186 | 0, |
187 | }, | 187 | }, |
188 | 188 | ||
189 | /* Cipher 02 */ | 189 | /* Cipher 02 */ |
190 | { | 190 | { |
191 | 1, | 191 | 1, |
192 | SSL3_TXT_RSA_NULL_SHA, | 192 | SSL3_TXT_RSA_NULL_SHA, |
193 | SSL3_CK_RSA_NULL_SHA, | 193 | SSL3_CK_RSA_NULL_SHA, |
194 | SSL_kRSA, | 194 | SSL_kRSA, |
195 | SSL_aRSA, | 195 | SSL_aRSA, |
196 | SSL_eNULL, | 196 | SSL_eNULL, |
197 | SSL_SHA1, | 197 | SSL_SHA1, |
198 | SSL_SSLV3, | 198 | SSL_SSLV3, |
199 | SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS, | 199 | SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS, |
200 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 200 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
201 | 0, | 201 | 0, |
202 | 0, | 202 | 0, |
203 | }, | 203 | }, |
204 | 204 | ||
205 | /* Cipher 03 */ | 205 | /* Cipher 03 */ |
206 | { | 206 | { |
207 | 1, | 207 | 1, |
208 | SSL3_TXT_RSA_RC4_40_MD5, | 208 | SSL3_TXT_RSA_RC4_40_MD5, |
209 | SSL3_CK_RSA_RC4_40_MD5, | 209 | SSL3_CK_RSA_RC4_40_MD5, |
210 | SSL_kRSA, | 210 | SSL_kRSA, |
211 | SSL_aRSA, | 211 | SSL_aRSA, |
212 | SSL_RC4, | 212 | SSL_RC4, |
213 | SSL_MD5, | 213 | SSL_MD5, |
214 | SSL_SSLV3, | 214 | SSL_SSLV3, |
215 | SSL_EXPORT|SSL_EXP40, | 215 | SSL_EXPORT|SSL_EXP40, |
216 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 216 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
217 | 40, | 217 | 40, |
218 | 128, | 218 | 128, |
219 | }, | 219 | }, |
220 | 220 | ||
221 | /* Cipher 04 */ | 221 | /* Cipher 04 */ |
222 | { | 222 | { |
223 | 1, | 223 | 1, |
224 | SSL3_TXT_RSA_RC4_128_MD5, | 224 | SSL3_TXT_RSA_RC4_128_MD5, |
225 | SSL3_CK_RSA_RC4_128_MD5, | 225 | SSL3_CK_RSA_RC4_128_MD5, |
226 | SSL_kRSA, | 226 | SSL_kRSA, |
227 | SSL_aRSA, | 227 | SSL_aRSA, |
228 | SSL_RC4, | 228 | SSL_RC4, |
229 | SSL_MD5, | 229 | SSL_MD5, |
230 | SSL_SSLV3, | 230 | SSL_SSLV3, |
231 | SSL_NOT_EXP|SSL_MEDIUM, | 231 | SSL_NOT_EXP|SSL_MEDIUM, |
232 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 232 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
233 | 128, | 233 | 128, |
234 | 128, | 234 | 128, |
235 | }, | 235 | }, |
236 | 236 | ||
237 | /* Cipher 05 */ | 237 | /* Cipher 05 */ |
238 | { | 238 | { |
239 | 1, | 239 | 1, |
240 | SSL3_TXT_RSA_RC4_128_SHA, | 240 | SSL3_TXT_RSA_RC4_128_SHA, |
241 | SSL3_CK_RSA_RC4_128_SHA, | 241 | SSL3_CK_RSA_RC4_128_SHA, |
242 | SSL_kRSA, | 242 | SSL_kRSA, |
243 | SSL_aRSA, | 243 | SSL_aRSA, |
244 | SSL_RC4, | 244 | SSL_RC4, |
245 | SSL_SHA1, | 245 | SSL_SHA1, |
246 | SSL_SSLV3, | 246 | SSL_SSLV3, |
247 | SSL_NOT_EXP|SSL_MEDIUM, | 247 | SSL_NOT_EXP|SSL_MEDIUM, |
248 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 248 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
249 | 128, | 249 | 128, |
250 | 128, | 250 | 128, |
251 | }, | 251 | }, |
252 | 252 | ||
253 | /* Cipher 06 */ | 253 | /* Cipher 06 */ |
254 | { | 254 | { |
255 | 1, | 255 | 1, |
256 | SSL3_TXT_RSA_RC2_40_MD5, | 256 | SSL3_TXT_RSA_RC2_40_MD5, |
257 | SSL3_CK_RSA_RC2_40_MD5, | 257 | SSL3_CK_RSA_RC2_40_MD5, |
258 | SSL_kRSA, | 258 | SSL_kRSA, |
259 | SSL_aRSA, | 259 | SSL_aRSA, |
260 | SSL_RC2, | 260 | SSL_RC2, |
261 | SSL_MD5, | 261 | SSL_MD5, |
262 | SSL_SSLV3, | 262 | SSL_SSLV3, |
263 | SSL_EXPORT|SSL_EXP40, | 263 | SSL_EXPORT|SSL_EXP40, |
264 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 264 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
265 | 40, | 265 | 40, |
266 | 128, | 266 | 128, |
267 | }, | 267 | }, |
268 | 268 | ||
269 | /* Cipher 07 */ | 269 | /* Cipher 07 */ |
270 | #ifndef OPENSSL_NO_IDEA | 270 | #ifndef OPENSSL_NO_IDEA |
271 | { | 271 | { |
272 | 1, | 272 | 1, |
273 | SSL3_TXT_RSA_IDEA_128_SHA, | 273 | SSL3_TXT_RSA_IDEA_128_SHA, |
274 | SSL3_CK_RSA_IDEA_128_SHA, | 274 | SSL3_CK_RSA_IDEA_128_SHA, |
275 | SSL_kRSA, | 275 | SSL_kRSA, |
276 | SSL_aRSA, | 276 | SSL_aRSA, |
277 | SSL_IDEA, | 277 | SSL_IDEA, |
278 | SSL_SHA1, | 278 | SSL_SHA1, |
279 | SSL_SSLV3, | 279 | SSL_SSLV3, |
280 | SSL_NOT_EXP|SSL_MEDIUM, | 280 | SSL_NOT_EXP|SSL_MEDIUM, |
281 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 281 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
282 | 128, | 282 | 128, |
283 | 128, | 283 | 128, |
284 | }, | 284 | }, |
285 | #endif | 285 | #endif |
286 | 286 | ||
287 | /* Cipher 08 */ | 287 | /* Cipher 08 */ |
288 | { | 288 | { |
289 | 1, | 289 | 1, |
290 | SSL3_TXT_RSA_DES_40_CBC_SHA, | 290 | SSL3_TXT_RSA_DES_40_CBC_SHA, |
291 | SSL3_CK_RSA_DES_40_CBC_SHA, | 291 | SSL3_CK_RSA_DES_40_CBC_SHA, |
292 | SSL_kRSA, | 292 | SSL_kRSA, |
293 | SSL_aRSA, | 293 | SSL_aRSA, |
294 | SSL_DES, | 294 | SSL_DES, |
295 | SSL_SHA1, | 295 | SSL_SHA1, |
296 | SSL_SSLV3, | 296 | SSL_SSLV3, |
297 | SSL_EXPORT|SSL_EXP40, | 297 | SSL_EXPORT|SSL_EXP40, |
298 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 298 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
299 | 40, | 299 | 40, |
300 | 56, | 300 | 56, |
301 | }, | 301 | }, |
302 | 302 | ||
303 | /* Cipher 09 */ | 303 | /* Cipher 09 */ |
304 | { | 304 | { |
305 | 1, | 305 | 1, |
306 | SSL3_TXT_RSA_DES_64_CBC_SHA, | 306 | SSL3_TXT_RSA_DES_64_CBC_SHA, |
307 | SSL3_CK_RSA_DES_64_CBC_SHA, | 307 | SSL3_CK_RSA_DES_64_CBC_SHA, |
308 | SSL_kRSA, | 308 | SSL_kRSA, |
309 | SSL_aRSA, | 309 | SSL_aRSA, |
310 | SSL_DES, | 310 | SSL_DES, |
311 | SSL_SHA1, | 311 | SSL_SHA1, |
312 | SSL_SSLV3, | 312 | SSL_SSLV3, |
313 | SSL_NOT_EXP|SSL_LOW, | 313 | SSL_NOT_EXP|SSL_LOW, |
314 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 314 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
315 | 56, | 315 | 56, |
316 | 56, | 316 | 56, |
317 | }, | 317 | }, |
318 | 318 | ||
319 | /* Cipher 0A */ | 319 | /* Cipher 0A */ |
320 | { | 320 | { |
321 | 1, | 321 | 1, |
322 | SSL3_TXT_RSA_DES_192_CBC3_SHA, | 322 | SSL3_TXT_RSA_DES_192_CBC3_SHA, |
323 | SSL3_CK_RSA_DES_192_CBC3_SHA, | 323 | SSL3_CK_RSA_DES_192_CBC3_SHA, |
324 | SSL_kRSA, | 324 | SSL_kRSA, |
325 | SSL_aRSA, | 325 | SSL_aRSA, |
326 | SSL_3DES, | 326 | SSL_3DES, |
327 | SSL_SHA1, | 327 | SSL_SHA1, |
328 | SSL_SSLV3, | 328 | SSL_SSLV3, |
329 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 329 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
330 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 330 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
331 | 168, | 331 | 168, |
332 | 168, | 332 | 168, |
333 | }, | 333 | }, |
334 | 334 | ||
335 | /* The DH ciphers */ | 335 | /* The DH ciphers */ |
336 | /* Cipher 0B */ | 336 | /* Cipher 0B */ |
337 | { | 337 | { |
338 | 0, | 338 | 0, |
339 | SSL3_TXT_DH_DSS_DES_40_CBC_SHA, | 339 | SSL3_TXT_DH_DSS_DES_40_CBC_SHA, |
340 | SSL3_CK_DH_DSS_DES_40_CBC_SHA, | 340 | SSL3_CK_DH_DSS_DES_40_CBC_SHA, |
341 | SSL_kDHd, | 341 | SSL_kDHd, |
342 | SSL_aDH, | 342 | SSL_aDH, |
343 | SSL_DES, | 343 | SSL_DES, |
344 | SSL_SHA1, | 344 | SSL_SHA1, |
345 | SSL_SSLV3, | 345 | SSL_SSLV3, |
346 | SSL_EXPORT|SSL_EXP40, | 346 | SSL_EXPORT|SSL_EXP40, |
347 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 347 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
348 | 40, | 348 | 40, |
349 | 56, | 349 | 56, |
350 | }, | 350 | }, |
351 | 351 | ||
352 | /* Cipher 0C */ | 352 | /* Cipher 0C */ |
353 | { | 353 | { |
354 | 0, /* not implemented (non-ephemeral DH) */ | 354 | 0, /* not implemented (non-ephemeral DH) */ |
355 | SSL3_TXT_DH_DSS_DES_64_CBC_SHA, | 355 | SSL3_TXT_DH_DSS_DES_64_CBC_SHA, |
356 | SSL3_CK_DH_DSS_DES_64_CBC_SHA, | 356 | SSL3_CK_DH_DSS_DES_64_CBC_SHA, |
357 | SSL_kDHd, | 357 | SSL_kDHd, |
358 | SSL_aDH, | 358 | SSL_aDH, |
359 | SSL_DES, | 359 | SSL_DES, |
360 | SSL_SHA1, | 360 | SSL_SHA1, |
361 | SSL_SSLV3, | 361 | SSL_SSLV3, |
362 | SSL_NOT_EXP|SSL_LOW, | 362 | SSL_NOT_EXP|SSL_LOW, |
363 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 363 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
364 | 56, | 364 | 56, |
365 | 56, | 365 | 56, |
366 | }, | 366 | }, |
367 | 367 | ||
368 | /* Cipher 0D */ | 368 | /* Cipher 0D */ |
369 | { | 369 | { |
370 | 0, /* not implemented (non-ephemeral DH) */ | 370 | 0, /* not implemented (non-ephemeral DH) */ |
371 | SSL3_TXT_DH_DSS_DES_192_CBC3_SHA, | 371 | SSL3_TXT_DH_DSS_DES_192_CBC3_SHA, |
372 | SSL3_CK_DH_DSS_DES_192_CBC3_SHA, | 372 | SSL3_CK_DH_DSS_DES_192_CBC3_SHA, |
373 | SSL_kDHd, | 373 | SSL_kDHd, |
374 | SSL_aDH, | 374 | SSL_aDH, |
375 | SSL_3DES, | 375 | SSL_3DES, |
376 | SSL_SHA1, | 376 | SSL_SHA1, |
377 | SSL_SSLV3, | 377 | SSL_SSLV3, |
378 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 378 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
379 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 379 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
380 | 168, | 380 | 168, |
381 | 168, | 381 | 168, |
382 | }, | 382 | }, |
383 | 383 | ||
384 | /* Cipher 0E */ | 384 | /* Cipher 0E */ |
385 | { | 385 | { |
386 | 0, /* not implemented (non-ephemeral DH) */ | 386 | 0, /* not implemented (non-ephemeral DH) */ |
387 | SSL3_TXT_DH_RSA_DES_40_CBC_SHA, | 387 | SSL3_TXT_DH_RSA_DES_40_CBC_SHA, |
388 | SSL3_CK_DH_RSA_DES_40_CBC_SHA, | 388 | SSL3_CK_DH_RSA_DES_40_CBC_SHA, |
389 | SSL_kDHr, | 389 | SSL_kDHr, |
390 | SSL_aDH, | 390 | SSL_aDH, |
391 | SSL_DES, | 391 | SSL_DES, |
392 | SSL_SHA1, | 392 | SSL_SHA1, |
393 | SSL_SSLV3, | 393 | SSL_SSLV3, |
394 | SSL_EXPORT|SSL_EXP40, | 394 | SSL_EXPORT|SSL_EXP40, |
395 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 395 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
396 | 40, | 396 | 40, |
397 | 56, | 397 | 56, |
398 | }, | 398 | }, |
399 | 399 | ||
400 | /* Cipher 0F */ | 400 | /* Cipher 0F */ |
401 | { | 401 | { |
402 | 0, /* not implemented (non-ephemeral DH) */ | 402 | 0, /* not implemented (non-ephemeral DH) */ |
403 | SSL3_TXT_DH_RSA_DES_64_CBC_SHA, | 403 | SSL3_TXT_DH_RSA_DES_64_CBC_SHA, |
404 | SSL3_CK_DH_RSA_DES_64_CBC_SHA, | 404 | SSL3_CK_DH_RSA_DES_64_CBC_SHA, |
405 | SSL_kDHr, | 405 | SSL_kDHr, |
406 | SSL_aDH, | 406 | SSL_aDH, |
407 | SSL_DES, | 407 | SSL_DES, |
408 | SSL_SHA1, | 408 | SSL_SHA1, |
409 | SSL_SSLV3, | 409 | SSL_SSLV3, |
410 | SSL_NOT_EXP|SSL_LOW, | 410 | SSL_NOT_EXP|SSL_LOW, |
411 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 411 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
412 | 56, | 412 | 56, |
413 | 56, | 413 | 56, |
414 | }, | 414 | }, |
415 | 415 | ||
416 | /* Cipher 10 */ | 416 | /* Cipher 10 */ |
417 | { | 417 | { |
418 | 0, /* not implemented (non-ephemeral DH) */ | 418 | 0, /* not implemented (non-ephemeral DH) */ |
419 | SSL3_TXT_DH_RSA_DES_192_CBC3_SHA, | 419 | SSL3_TXT_DH_RSA_DES_192_CBC3_SHA, |
420 | SSL3_CK_DH_RSA_DES_192_CBC3_SHA, | 420 | SSL3_CK_DH_RSA_DES_192_CBC3_SHA, |
421 | SSL_kDHr, | 421 | SSL_kDHr, |
422 | SSL_aDH, | 422 | SSL_aDH, |
423 | SSL_3DES, | 423 | SSL_3DES, |
424 | SSL_SHA1, | 424 | SSL_SHA1, |
425 | SSL_SSLV3, | 425 | SSL_SSLV3, |
426 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 426 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
427 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 427 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
428 | 168, | 428 | 168, |
429 | 168, | 429 | 168, |
430 | }, | 430 | }, |
431 | 431 | ||
432 | /* The Ephemeral DH ciphers */ | 432 | /* The Ephemeral DH ciphers */ |
433 | /* Cipher 11 */ | 433 | /* Cipher 11 */ |
434 | { | 434 | { |
435 | 1, | 435 | 1, |
436 | SSL3_TXT_EDH_DSS_DES_40_CBC_SHA, | 436 | SSL3_TXT_EDH_DSS_DES_40_CBC_SHA, |
437 | SSL3_CK_EDH_DSS_DES_40_CBC_SHA, | 437 | SSL3_CK_EDH_DSS_DES_40_CBC_SHA, |
438 | SSL_kEDH, | 438 | SSL_kEDH, |
439 | SSL_aDSS, | 439 | SSL_aDSS, |
440 | SSL_DES, | 440 | SSL_DES, |
441 | SSL_SHA1, | 441 | SSL_SHA1, |
442 | SSL_SSLV3, | 442 | SSL_SSLV3, |
443 | SSL_EXPORT|SSL_EXP40, | 443 | SSL_EXPORT|SSL_EXP40, |
444 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 444 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
445 | 40, | 445 | 40, |
446 | 56, | 446 | 56, |
447 | }, | 447 | }, |
448 | 448 | ||
449 | /* Cipher 12 */ | 449 | /* Cipher 12 */ |
450 | { | 450 | { |
451 | 1, | 451 | 1, |
452 | SSL3_TXT_EDH_DSS_DES_64_CBC_SHA, | 452 | SSL3_TXT_EDH_DSS_DES_64_CBC_SHA, |
453 | SSL3_CK_EDH_DSS_DES_64_CBC_SHA, | 453 | SSL3_CK_EDH_DSS_DES_64_CBC_SHA, |
454 | SSL_kEDH, | 454 | SSL_kEDH, |
455 | SSL_aDSS, | 455 | SSL_aDSS, |
456 | SSL_DES, | 456 | SSL_DES, |
457 | SSL_SHA1, | 457 | SSL_SHA1, |
458 | SSL_SSLV3, | 458 | SSL_SSLV3, |
459 | SSL_NOT_EXP|SSL_LOW, | 459 | SSL_NOT_EXP|SSL_LOW, |
460 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 460 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
461 | 56, | 461 | 56, |
462 | 56, | 462 | 56, |
463 | }, | 463 | }, |
464 | 464 | ||
465 | /* Cipher 13 */ | 465 | /* Cipher 13 */ |
466 | { | 466 | { |
467 | 1, | 467 | 1, |
468 | SSL3_TXT_EDH_DSS_DES_192_CBC3_SHA, | 468 | SSL3_TXT_EDH_DSS_DES_192_CBC3_SHA, |
469 | SSL3_CK_EDH_DSS_DES_192_CBC3_SHA, | 469 | SSL3_CK_EDH_DSS_DES_192_CBC3_SHA, |
470 | SSL_kEDH, | 470 | SSL_kEDH, |
471 | SSL_aDSS, | 471 | SSL_aDSS, |
472 | SSL_3DES, | 472 | SSL_3DES, |
473 | SSL_SHA1, | 473 | SSL_SHA1, |
474 | SSL_SSLV3, | 474 | SSL_SSLV3, |
475 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 475 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
476 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 476 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
477 | 168, | 477 | 168, |
478 | 168, | 478 | 168, |
479 | }, | 479 | }, |
480 | 480 | ||
481 | /* Cipher 14 */ | 481 | /* Cipher 14 */ |
482 | { | 482 | { |
483 | 1, | 483 | 1, |
484 | SSL3_TXT_EDH_RSA_DES_40_CBC_SHA, | 484 | SSL3_TXT_EDH_RSA_DES_40_CBC_SHA, |
485 | SSL3_CK_EDH_RSA_DES_40_CBC_SHA, | 485 | SSL3_CK_EDH_RSA_DES_40_CBC_SHA, |
486 | SSL_kEDH, | 486 | SSL_kEDH, |
487 | SSL_aRSA, | 487 | SSL_aRSA, |
488 | SSL_DES, | 488 | SSL_DES, |
489 | SSL_SHA1, | 489 | SSL_SHA1, |
490 | SSL_SSLV3, | 490 | SSL_SSLV3, |
491 | SSL_EXPORT|SSL_EXP40, | 491 | SSL_EXPORT|SSL_EXP40, |
492 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 492 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
493 | 40, | 493 | 40, |
494 | 56, | 494 | 56, |
495 | }, | 495 | }, |
496 | 496 | ||
497 | /* Cipher 15 */ | 497 | /* Cipher 15 */ |
498 | { | 498 | { |
499 | 1, | 499 | 1, |
500 | SSL3_TXT_EDH_RSA_DES_64_CBC_SHA, | 500 | SSL3_TXT_EDH_RSA_DES_64_CBC_SHA, |
501 | SSL3_CK_EDH_RSA_DES_64_CBC_SHA, | 501 | SSL3_CK_EDH_RSA_DES_64_CBC_SHA, |
502 | SSL_kEDH, | 502 | SSL_kEDH, |
503 | SSL_aRSA, | 503 | SSL_aRSA, |
504 | SSL_DES, | 504 | SSL_DES, |
505 | SSL_SHA1, | 505 | SSL_SHA1, |
506 | SSL_SSLV3, | 506 | SSL_SSLV3, |
507 | SSL_NOT_EXP|SSL_LOW, | 507 | SSL_NOT_EXP|SSL_LOW, |
508 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 508 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
509 | 56, | 509 | 56, |
510 | 56, | 510 | 56, |
511 | }, | 511 | }, |
512 | 512 | ||
513 | /* Cipher 16 */ | 513 | /* Cipher 16 */ |
514 | { | 514 | { |
515 | 1, | 515 | 1, |
516 | SSL3_TXT_EDH_RSA_DES_192_CBC3_SHA, | 516 | SSL3_TXT_EDH_RSA_DES_192_CBC3_SHA, |
517 | SSL3_CK_EDH_RSA_DES_192_CBC3_SHA, | 517 | SSL3_CK_EDH_RSA_DES_192_CBC3_SHA, |
518 | SSL_kEDH, | 518 | SSL_kEDH, |
519 | SSL_aRSA, | 519 | SSL_aRSA, |
520 | SSL_3DES, | 520 | SSL_3DES, |
521 | SSL_SHA1, | 521 | SSL_SHA1, |
522 | SSL_SSLV3, | 522 | SSL_SSLV3, |
523 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 523 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
524 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 524 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
525 | 168, | 525 | 168, |
526 | 168, | 526 | 168, |
527 | }, | 527 | }, |
528 | 528 | ||
529 | /* Cipher 17 */ | 529 | /* Cipher 17 */ |
530 | { | 530 | { |
531 | 1, | 531 | 1, |
532 | SSL3_TXT_ADH_RC4_40_MD5, | 532 | SSL3_TXT_ADH_RC4_40_MD5, |
533 | SSL3_CK_ADH_RC4_40_MD5, | 533 | SSL3_CK_ADH_RC4_40_MD5, |
534 | SSL_kEDH, | 534 | SSL_kEDH, |
535 | SSL_aNULL, | 535 | SSL_aNULL, |
536 | SSL_RC4, | 536 | SSL_RC4, |
537 | SSL_MD5, | 537 | SSL_MD5, |
538 | SSL_SSLV3, | 538 | SSL_SSLV3, |
539 | SSL_EXPORT|SSL_EXP40, | 539 | SSL_EXPORT|SSL_EXP40, |
540 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 540 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
541 | 40, | 541 | 40, |
542 | 128, | 542 | 128, |
543 | }, | 543 | }, |
544 | 544 | ||
545 | /* Cipher 18 */ | 545 | /* Cipher 18 */ |
546 | { | 546 | { |
547 | 1, | 547 | 1, |
548 | SSL3_TXT_ADH_RC4_128_MD5, | 548 | SSL3_TXT_ADH_RC4_128_MD5, |
549 | SSL3_CK_ADH_RC4_128_MD5, | 549 | SSL3_CK_ADH_RC4_128_MD5, |
550 | SSL_kEDH, | 550 | SSL_kEDH, |
551 | SSL_aNULL, | 551 | SSL_aNULL, |
552 | SSL_RC4, | 552 | SSL_RC4, |
553 | SSL_MD5, | 553 | SSL_MD5, |
554 | SSL_SSLV3, | 554 | SSL_SSLV3, |
555 | SSL_NOT_EXP|SSL_MEDIUM, | 555 | SSL_NOT_EXP|SSL_MEDIUM, |
556 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 556 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
557 | 128, | 557 | 128, |
558 | 128, | 558 | 128, |
559 | }, | 559 | }, |
560 | 560 | ||
561 | /* Cipher 19 */ | 561 | /* Cipher 19 */ |
562 | { | 562 | { |
563 | 1, | 563 | 1, |
564 | SSL3_TXT_ADH_DES_40_CBC_SHA, | 564 | SSL3_TXT_ADH_DES_40_CBC_SHA, |
565 | SSL3_CK_ADH_DES_40_CBC_SHA, | 565 | SSL3_CK_ADH_DES_40_CBC_SHA, |
566 | SSL_kEDH, | 566 | SSL_kEDH, |
567 | SSL_aNULL, | 567 | SSL_aNULL, |
568 | SSL_DES, | 568 | SSL_DES, |
569 | SSL_SHA1, | 569 | SSL_SHA1, |
570 | SSL_SSLV3, | 570 | SSL_SSLV3, |
571 | SSL_EXPORT|SSL_EXP40, | 571 | SSL_EXPORT|SSL_EXP40, |
572 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 572 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
573 | 40, | 573 | 40, |
574 | 128, | 574 | 128, |
575 | }, | 575 | }, |
576 | 576 | ||
577 | /* Cipher 1A */ | 577 | /* Cipher 1A */ |
578 | { | 578 | { |
579 | 1, | 579 | 1, |
580 | SSL3_TXT_ADH_DES_64_CBC_SHA, | 580 | SSL3_TXT_ADH_DES_64_CBC_SHA, |
581 | SSL3_CK_ADH_DES_64_CBC_SHA, | 581 | SSL3_CK_ADH_DES_64_CBC_SHA, |
582 | SSL_kEDH, | 582 | SSL_kEDH, |
583 | SSL_aNULL, | 583 | SSL_aNULL, |
584 | SSL_DES, | 584 | SSL_DES, |
585 | SSL_SHA1, | 585 | SSL_SHA1, |
586 | SSL_SSLV3, | 586 | SSL_SSLV3, |
587 | SSL_NOT_EXP|SSL_LOW, | 587 | SSL_NOT_EXP|SSL_LOW, |
588 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 588 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
589 | 56, | 589 | 56, |
590 | 56, | 590 | 56, |
591 | }, | 591 | }, |
592 | 592 | ||
593 | /* Cipher 1B */ | 593 | /* Cipher 1B */ |
594 | { | 594 | { |
595 | 1, | 595 | 1, |
596 | SSL3_TXT_ADH_DES_192_CBC_SHA, | 596 | SSL3_TXT_ADH_DES_192_CBC_SHA, |
597 | SSL3_CK_ADH_DES_192_CBC_SHA, | 597 | SSL3_CK_ADH_DES_192_CBC_SHA, |
598 | SSL_kEDH, | 598 | SSL_kEDH, |
599 | SSL_aNULL, | 599 | SSL_aNULL, |
600 | SSL_3DES, | 600 | SSL_3DES, |
601 | SSL_SHA1, | 601 | SSL_SHA1, |
602 | SSL_SSLV3, | 602 | SSL_SSLV3, |
603 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 603 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
604 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 604 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
605 | 168, | 605 | 168, |
606 | 168, | 606 | 168, |
607 | }, | 607 | }, |
608 | 608 | ||
609 | /* Fortezza ciphersuite from SSL 3.0 spec */ | 609 | /* Fortezza ciphersuite from SSL 3.0 spec */ |
610 | #if 0 | 610 | #if 0 |
611 | /* Cipher 1C */ | 611 | /* Cipher 1C */ |
612 | { | 612 | { |
613 | 0, | 613 | 0, |
614 | SSL3_TXT_FZA_DMS_NULL_SHA, | 614 | SSL3_TXT_FZA_DMS_NULL_SHA, |
615 | SSL3_CK_FZA_DMS_NULL_SHA, | 615 | SSL3_CK_FZA_DMS_NULL_SHA, |
616 | SSL_kFZA, | 616 | SSL_kFZA, |
617 | SSL_aFZA, | 617 | SSL_aFZA, |
618 | SSL_eNULL, | 618 | SSL_eNULL, |
619 | SSL_SHA1, | 619 | SSL_SHA1, |
620 | SSL_SSLV3, | 620 | SSL_SSLV3, |
621 | SSL_NOT_EXP|SSL_STRONG_NONE, | 621 | SSL_NOT_EXP|SSL_STRONG_NONE, |
622 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 622 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
623 | 0, | 623 | 0, |
624 | 0, | 624 | 0, |
625 | }, | 625 | }, |
626 | 626 | ||
627 | /* Cipher 1D */ | 627 | /* Cipher 1D */ |
628 | { | 628 | { |
629 | 0, | 629 | 0, |
630 | SSL3_TXT_FZA_DMS_FZA_SHA, | 630 | SSL3_TXT_FZA_DMS_FZA_SHA, |
631 | SSL3_CK_FZA_DMS_FZA_SHA, | 631 | SSL3_CK_FZA_DMS_FZA_SHA, |
632 | SSL_kFZA, | 632 | SSL_kFZA, |
633 | SSL_aFZA, | 633 | SSL_aFZA, |
634 | SSL_eFZA, | 634 | SSL_eFZA, |
635 | SSL_SHA1, | 635 | SSL_SHA1, |
636 | SSL_SSLV3, | 636 | SSL_SSLV3, |
637 | SSL_NOT_EXP|SSL_STRONG_NONE, | 637 | SSL_NOT_EXP|SSL_STRONG_NONE, |
638 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 638 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
639 | 0, | 639 | 0, |
640 | 0, | 640 | 0, |
641 | }, | 641 | }, |
642 | 642 | ||
643 | /* Cipher 1E */ | 643 | /* Cipher 1E */ |
644 | { | 644 | { |
645 | 0, | 645 | 0, |
646 | SSL3_TXT_FZA_DMS_RC4_SHA, | 646 | SSL3_TXT_FZA_DMS_RC4_SHA, |
647 | SSL3_CK_FZA_DMS_RC4_SHA, | 647 | SSL3_CK_FZA_DMS_RC4_SHA, |
648 | SSL_kFZA, | 648 | SSL_kFZA, |
649 | SSL_aFZA, | 649 | SSL_aFZA, |
650 | SSL_RC4, | 650 | SSL_RC4, |
651 | SSL_SHA1, | 651 | SSL_SHA1, |
652 | SSL_SSLV3, | 652 | SSL_SSLV3, |
653 | SSL_NOT_EXP|SSL_MEDIUM, | 653 | SSL_NOT_EXP|SSL_MEDIUM, |
654 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 654 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
655 | 128, | 655 | 128, |
656 | 128, | 656 | 128, |
657 | }, | 657 | }, |
658 | #endif | 658 | #endif |
659 | 659 | ||
@@ -661,511 +661,511 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]={ | |||
661 | /* The Kerberos ciphers*/ | 661 | /* The Kerberos ciphers*/ |
662 | /* Cipher 1E */ | 662 | /* Cipher 1E */ |
663 | { | 663 | { |
664 | 1, | 664 | 1, |
665 | SSL3_TXT_KRB5_DES_64_CBC_SHA, | 665 | SSL3_TXT_KRB5_DES_64_CBC_SHA, |
666 | SSL3_CK_KRB5_DES_64_CBC_SHA, | 666 | SSL3_CK_KRB5_DES_64_CBC_SHA, |
667 | SSL_kKRB5, | 667 | SSL_kKRB5, |
668 | SSL_aKRB5, | 668 | SSL_aKRB5, |
669 | SSL_DES, | 669 | SSL_DES, |
670 | SSL_SHA1, | 670 | SSL_SHA1, |
671 | SSL_SSLV3, | 671 | SSL_SSLV3, |
672 | SSL_NOT_EXP|SSL_LOW, | 672 | SSL_NOT_EXP|SSL_LOW, |
673 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 673 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
674 | 56, | 674 | 56, |
675 | 56, | 675 | 56, |
676 | }, | 676 | }, |
677 | 677 | ||
678 | /* Cipher 1F */ | 678 | /* Cipher 1F */ |
679 | { | 679 | { |
680 | 1, | 680 | 1, |
681 | SSL3_TXT_KRB5_DES_192_CBC3_SHA, | 681 | SSL3_TXT_KRB5_DES_192_CBC3_SHA, |
682 | SSL3_CK_KRB5_DES_192_CBC3_SHA, | 682 | SSL3_CK_KRB5_DES_192_CBC3_SHA, |
683 | SSL_kKRB5, | 683 | SSL_kKRB5, |
684 | SSL_aKRB5, | 684 | SSL_aKRB5, |
685 | SSL_3DES, | 685 | SSL_3DES, |
686 | SSL_SHA1, | 686 | SSL_SHA1, |
687 | SSL_SSLV3, | 687 | SSL_SSLV3, |
688 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 688 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
689 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 689 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
690 | 168, | 690 | 168, |
691 | 168, | 691 | 168, |
692 | }, | 692 | }, |
693 | 693 | ||
694 | /* Cipher 20 */ | 694 | /* Cipher 20 */ |
695 | { | 695 | { |
696 | 1, | 696 | 1, |
697 | SSL3_TXT_KRB5_RC4_128_SHA, | 697 | SSL3_TXT_KRB5_RC4_128_SHA, |
698 | SSL3_CK_KRB5_RC4_128_SHA, | 698 | SSL3_CK_KRB5_RC4_128_SHA, |
699 | SSL_kKRB5, | 699 | SSL_kKRB5, |
700 | SSL_aKRB5, | 700 | SSL_aKRB5, |
701 | SSL_RC4, | 701 | SSL_RC4, |
702 | SSL_SHA1, | 702 | SSL_SHA1, |
703 | SSL_SSLV3, | 703 | SSL_SSLV3, |
704 | SSL_NOT_EXP|SSL_MEDIUM, | 704 | SSL_NOT_EXP|SSL_MEDIUM, |
705 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 705 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
706 | 128, | 706 | 128, |
707 | 128, | 707 | 128, |
708 | }, | 708 | }, |
709 | 709 | ||
710 | /* Cipher 21 */ | 710 | /* Cipher 21 */ |
711 | { | 711 | { |
712 | 1, | 712 | 1, |
713 | SSL3_TXT_KRB5_IDEA_128_CBC_SHA, | 713 | SSL3_TXT_KRB5_IDEA_128_CBC_SHA, |
714 | SSL3_CK_KRB5_IDEA_128_CBC_SHA, | 714 | SSL3_CK_KRB5_IDEA_128_CBC_SHA, |
715 | SSL_kKRB5, | 715 | SSL_kKRB5, |
716 | SSL_aKRB5, | 716 | SSL_aKRB5, |
717 | SSL_IDEA, | 717 | SSL_IDEA, |
718 | SSL_SHA1, | 718 | SSL_SHA1, |
719 | SSL_SSLV3, | 719 | SSL_SSLV3, |
720 | SSL_NOT_EXP|SSL_MEDIUM, | 720 | SSL_NOT_EXP|SSL_MEDIUM, |
721 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 721 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
722 | 128, | 722 | 128, |
723 | 128, | 723 | 128, |
724 | }, | 724 | }, |
725 | 725 | ||
726 | /* Cipher 22 */ | 726 | /* Cipher 22 */ |
727 | { | 727 | { |
728 | 1, | 728 | 1, |
729 | SSL3_TXT_KRB5_DES_64_CBC_MD5, | 729 | SSL3_TXT_KRB5_DES_64_CBC_MD5, |
730 | SSL3_CK_KRB5_DES_64_CBC_MD5, | 730 | SSL3_CK_KRB5_DES_64_CBC_MD5, |
731 | SSL_kKRB5, | 731 | SSL_kKRB5, |
732 | SSL_aKRB5, | 732 | SSL_aKRB5, |
733 | SSL_DES, | 733 | SSL_DES, |
734 | SSL_MD5, | 734 | SSL_MD5, |
735 | SSL_SSLV3, | 735 | SSL_SSLV3, |
736 | SSL_NOT_EXP|SSL_LOW, | 736 | SSL_NOT_EXP|SSL_LOW, |
737 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 737 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
738 | 56, | 738 | 56, |
739 | 56, | 739 | 56, |
740 | }, | 740 | }, |
741 | 741 | ||
742 | /* Cipher 23 */ | 742 | /* Cipher 23 */ |
743 | { | 743 | { |
744 | 1, | 744 | 1, |
745 | SSL3_TXT_KRB5_DES_192_CBC3_MD5, | 745 | SSL3_TXT_KRB5_DES_192_CBC3_MD5, |
746 | SSL3_CK_KRB5_DES_192_CBC3_MD5, | 746 | SSL3_CK_KRB5_DES_192_CBC3_MD5, |
747 | SSL_kKRB5, | 747 | SSL_kKRB5, |
748 | SSL_aKRB5, | 748 | SSL_aKRB5, |
749 | SSL_3DES, | 749 | SSL_3DES, |
750 | SSL_MD5, | 750 | SSL_MD5, |
751 | SSL_SSLV3, | 751 | SSL_SSLV3, |
752 | SSL_NOT_EXP|SSL_HIGH, | 752 | SSL_NOT_EXP|SSL_HIGH, |
753 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 753 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
754 | 168, | 754 | 168, |
755 | 168, | 755 | 168, |
756 | }, | 756 | }, |
757 | 757 | ||
758 | /* Cipher 24 */ | 758 | /* Cipher 24 */ |
759 | { | 759 | { |
760 | 1, | 760 | 1, |
761 | SSL3_TXT_KRB5_RC4_128_MD5, | 761 | SSL3_TXT_KRB5_RC4_128_MD5, |
762 | SSL3_CK_KRB5_RC4_128_MD5, | 762 | SSL3_CK_KRB5_RC4_128_MD5, |
763 | SSL_kKRB5, | 763 | SSL_kKRB5, |
764 | SSL_aKRB5, | 764 | SSL_aKRB5, |
765 | SSL_RC4, | 765 | SSL_RC4, |
766 | SSL_MD5, | 766 | SSL_MD5, |
767 | SSL_SSLV3, | 767 | SSL_SSLV3, |
768 | SSL_NOT_EXP|SSL_MEDIUM, | 768 | SSL_NOT_EXP|SSL_MEDIUM, |
769 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 769 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
770 | 128, | 770 | 128, |
771 | 128, | 771 | 128, |
772 | }, | 772 | }, |
773 | 773 | ||
774 | /* Cipher 25 */ | 774 | /* Cipher 25 */ |
775 | { | 775 | { |
776 | 1, | 776 | 1, |
777 | SSL3_TXT_KRB5_IDEA_128_CBC_MD5, | 777 | SSL3_TXT_KRB5_IDEA_128_CBC_MD5, |
778 | SSL3_CK_KRB5_IDEA_128_CBC_MD5, | 778 | SSL3_CK_KRB5_IDEA_128_CBC_MD5, |
779 | SSL_kKRB5, | 779 | SSL_kKRB5, |
780 | SSL_aKRB5, | 780 | SSL_aKRB5, |
781 | SSL_IDEA, | 781 | SSL_IDEA, |
782 | SSL_MD5, | 782 | SSL_MD5, |
783 | SSL_SSLV3, | 783 | SSL_SSLV3, |
784 | SSL_NOT_EXP|SSL_MEDIUM, | 784 | SSL_NOT_EXP|SSL_MEDIUM, |
785 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 785 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
786 | 128, | 786 | 128, |
787 | 128, | 787 | 128, |
788 | }, | 788 | }, |
789 | 789 | ||
790 | /* Cipher 26 */ | 790 | /* Cipher 26 */ |
791 | { | 791 | { |
792 | 1, | 792 | 1, |
793 | SSL3_TXT_KRB5_DES_40_CBC_SHA, | 793 | SSL3_TXT_KRB5_DES_40_CBC_SHA, |
794 | SSL3_CK_KRB5_DES_40_CBC_SHA, | 794 | SSL3_CK_KRB5_DES_40_CBC_SHA, |
795 | SSL_kKRB5, | 795 | SSL_kKRB5, |
796 | SSL_aKRB5, | 796 | SSL_aKRB5, |
797 | SSL_DES, | 797 | SSL_DES, |
798 | SSL_SHA1, | 798 | SSL_SHA1, |
799 | SSL_SSLV3, | 799 | SSL_SSLV3, |
800 | SSL_EXPORT|SSL_EXP40, | 800 | SSL_EXPORT|SSL_EXP40, |
801 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 801 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
802 | 40, | 802 | 40, |
803 | 56, | 803 | 56, |
804 | }, | 804 | }, |
805 | 805 | ||
806 | /* Cipher 27 */ | 806 | /* Cipher 27 */ |
807 | { | 807 | { |
808 | 1, | 808 | 1, |
809 | SSL3_TXT_KRB5_RC2_40_CBC_SHA, | 809 | SSL3_TXT_KRB5_RC2_40_CBC_SHA, |
810 | SSL3_CK_KRB5_RC2_40_CBC_SHA, | 810 | SSL3_CK_KRB5_RC2_40_CBC_SHA, |
811 | SSL_kKRB5, | 811 | SSL_kKRB5, |
812 | SSL_aKRB5, | 812 | SSL_aKRB5, |
813 | SSL_RC2, | 813 | SSL_RC2, |
814 | SSL_SHA1, | 814 | SSL_SHA1, |
815 | SSL_SSLV3, | 815 | SSL_SSLV3, |
816 | SSL_EXPORT|SSL_EXP40, | 816 | SSL_EXPORT|SSL_EXP40, |
817 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 817 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
818 | 40, | 818 | 40, |
819 | 128, | 819 | 128, |
820 | }, | 820 | }, |
821 | 821 | ||
822 | /* Cipher 28 */ | 822 | /* Cipher 28 */ |
823 | { | 823 | { |
824 | 1, | 824 | 1, |
825 | SSL3_TXT_KRB5_RC4_40_SHA, | 825 | SSL3_TXT_KRB5_RC4_40_SHA, |
826 | SSL3_CK_KRB5_RC4_40_SHA, | 826 | SSL3_CK_KRB5_RC4_40_SHA, |
827 | SSL_kKRB5, | 827 | SSL_kKRB5, |
828 | SSL_aKRB5, | 828 | SSL_aKRB5, |
829 | SSL_RC4, | 829 | SSL_RC4, |
830 | SSL_SHA1, | 830 | SSL_SHA1, |
831 | SSL_SSLV3, | 831 | SSL_SSLV3, |
832 | SSL_EXPORT|SSL_EXP40, | 832 | SSL_EXPORT|SSL_EXP40, |
833 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 833 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
834 | 40, | 834 | 40, |
835 | 128, | 835 | 128, |
836 | }, | 836 | }, |
837 | 837 | ||
838 | /* Cipher 29 */ | 838 | /* Cipher 29 */ |
839 | { | 839 | { |
840 | 1, | 840 | 1, |
841 | SSL3_TXT_KRB5_DES_40_CBC_MD5, | 841 | SSL3_TXT_KRB5_DES_40_CBC_MD5, |
842 | SSL3_CK_KRB5_DES_40_CBC_MD5, | 842 | SSL3_CK_KRB5_DES_40_CBC_MD5, |
843 | SSL_kKRB5, | 843 | SSL_kKRB5, |
844 | SSL_aKRB5, | 844 | SSL_aKRB5, |
845 | SSL_DES, | 845 | SSL_DES, |
846 | SSL_MD5, | 846 | SSL_MD5, |
847 | SSL_SSLV3, | 847 | SSL_SSLV3, |
848 | SSL_EXPORT|SSL_EXP40, | 848 | SSL_EXPORT|SSL_EXP40, |
849 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 849 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
850 | 40, | 850 | 40, |
851 | 56, | 851 | 56, |
852 | }, | 852 | }, |
853 | 853 | ||
854 | /* Cipher 2A */ | 854 | /* Cipher 2A */ |
855 | { | 855 | { |
856 | 1, | 856 | 1, |
857 | SSL3_TXT_KRB5_RC2_40_CBC_MD5, | 857 | SSL3_TXT_KRB5_RC2_40_CBC_MD5, |
858 | SSL3_CK_KRB5_RC2_40_CBC_MD5, | 858 | SSL3_CK_KRB5_RC2_40_CBC_MD5, |
859 | SSL_kKRB5, | 859 | SSL_kKRB5, |
860 | SSL_aKRB5, | 860 | SSL_aKRB5, |
861 | SSL_RC2, | 861 | SSL_RC2, |
862 | SSL_MD5, | 862 | SSL_MD5, |
863 | SSL_SSLV3, | 863 | SSL_SSLV3, |
864 | SSL_EXPORT|SSL_EXP40, | 864 | SSL_EXPORT|SSL_EXP40, |
865 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 865 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
866 | 40, | 866 | 40, |
867 | 128, | 867 | 128, |
868 | }, | 868 | }, |
869 | 869 | ||
870 | /* Cipher 2B */ | 870 | /* Cipher 2B */ |
871 | { | 871 | { |
872 | 1, | 872 | 1, |
873 | SSL3_TXT_KRB5_RC4_40_MD5, | 873 | SSL3_TXT_KRB5_RC4_40_MD5, |
874 | SSL3_CK_KRB5_RC4_40_MD5, | 874 | SSL3_CK_KRB5_RC4_40_MD5, |
875 | SSL_kKRB5, | 875 | SSL_kKRB5, |
876 | SSL_aKRB5, | 876 | SSL_aKRB5, |
877 | SSL_RC4, | 877 | SSL_RC4, |
878 | SSL_MD5, | 878 | SSL_MD5, |
879 | SSL_SSLV3, | 879 | SSL_SSLV3, |
880 | SSL_EXPORT|SSL_EXP40, | 880 | SSL_EXPORT|SSL_EXP40, |
881 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 881 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
882 | 40, | 882 | 40, |
883 | 128, | 883 | 128, |
884 | }, | 884 | }, |
885 | #endif /* OPENSSL_NO_KRB5 */ | 885 | #endif /* OPENSSL_NO_KRB5 */ |
886 | 886 | ||
887 | /* New AES ciphersuites */ | 887 | /* New AES ciphersuites */ |
888 | /* Cipher 2F */ | 888 | /* Cipher 2F */ |
889 | { | 889 | { |
890 | 1, | 890 | 1, |
891 | TLS1_TXT_RSA_WITH_AES_128_SHA, | 891 | TLS1_TXT_RSA_WITH_AES_128_SHA, |
892 | TLS1_CK_RSA_WITH_AES_128_SHA, | 892 | TLS1_CK_RSA_WITH_AES_128_SHA, |
893 | SSL_kRSA, | 893 | SSL_kRSA, |
894 | SSL_aRSA, | 894 | SSL_aRSA, |
895 | SSL_AES128, | 895 | SSL_AES128, |
896 | SSL_SHA1, | 896 | SSL_SHA1, |
897 | SSL_TLSV1, | 897 | SSL_TLSV1, |
898 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 898 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
899 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 899 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
900 | 128, | 900 | 128, |
901 | 128, | 901 | 128, |
902 | }, | 902 | }, |
903 | /* Cipher 30 */ | 903 | /* Cipher 30 */ |
904 | { | 904 | { |
905 | 0, | 905 | 0, |
906 | TLS1_TXT_DH_DSS_WITH_AES_128_SHA, | 906 | TLS1_TXT_DH_DSS_WITH_AES_128_SHA, |
907 | TLS1_CK_DH_DSS_WITH_AES_128_SHA, | 907 | TLS1_CK_DH_DSS_WITH_AES_128_SHA, |
908 | SSL_kDHd, | 908 | SSL_kDHd, |
909 | SSL_aDH, | 909 | SSL_aDH, |
910 | SSL_AES128, | 910 | SSL_AES128, |
911 | SSL_SHA1, | 911 | SSL_SHA1, |
912 | SSL_TLSV1, | 912 | SSL_TLSV1, |
913 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 913 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
914 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 914 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
915 | 128, | 915 | 128, |
916 | 128, | 916 | 128, |
917 | }, | 917 | }, |
918 | /* Cipher 31 */ | 918 | /* Cipher 31 */ |
919 | { | 919 | { |
920 | 0, | 920 | 0, |
921 | TLS1_TXT_DH_RSA_WITH_AES_128_SHA, | 921 | TLS1_TXT_DH_RSA_WITH_AES_128_SHA, |
922 | TLS1_CK_DH_RSA_WITH_AES_128_SHA, | 922 | TLS1_CK_DH_RSA_WITH_AES_128_SHA, |
923 | SSL_kDHr, | 923 | SSL_kDHr, |
924 | SSL_aDH, | 924 | SSL_aDH, |
925 | SSL_AES128, | 925 | SSL_AES128, |
926 | SSL_SHA1, | 926 | SSL_SHA1, |
927 | SSL_TLSV1, | 927 | SSL_TLSV1, |
928 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 928 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
929 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 929 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
930 | 128, | 930 | 128, |
931 | 128, | 931 | 128, |
932 | }, | 932 | }, |
933 | /* Cipher 32 */ | 933 | /* Cipher 32 */ |
934 | { | 934 | { |
935 | 1, | 935 | 1, |
936 | TLS1_TXT_DHE_DSS_WITH_AES_128_SHA, | 936 | TLS1_TXT_DHE_DSS_WITH_AES_128_SHA, |
937 | TLS1_CK_DHE_DSS_WITH_AES_128_SHA, | 937 | TLS1_CK_DHE_DSS_WITH_AES_128_SHA, |
938 | SSL_kEDH, | 938 | SSL_kEDH, |
939 | SSL_aDSS, | 939 | SSL_aDSS, |
940 | SSL_AES128, | 940 | SSL_AES128, |
941 | SSL_SHA1, | 941 | SSL_SHA1, |
942 | SSL_TLSV1, | 942 | SSL_TLSV1, |
943 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 943 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
944 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 944 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
945 | 128, | 945 | 128, |
946 | 128, | 946 | 128, |
947 | }, | 947 | }, |
948 | /* Cipher 33 */ | 948 | /* Cipher 33 */ |
949 | { | 949 | { |
950 | 1, | 950 | 1, |
951 | TLS1_TXT_DHE_RSA_WITH_AES_128_SHA, | 951 | TLS1_TXT_DHE_RSA_WITH_AES_128_SHA, |
952 | TLS1_CK_DHE_RSA_WITH_AES_128_SHA, | 952 | TLS1_CK_DHE_RSA_WITH_AES_128_SHA, |
953 | SSL_kEDH, | 953 | SSL_kEDH, |
954 | SSL_aRSA, | 954 | SSL_aRSA, |
955 | SSL_AES128, | 955 | SSL_AES128, |
956 | SSL_SHA1, | 956 | SSL_SHA1, |
957 | SSL_TLSV1, | 957 | SSL_TLSV1, |
958 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 958 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
959 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 959 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
960 | 128, | 960 | 128, |
961 | 128, | 961 | 128, |
962 | }, | 962 | }, |
963 | /* Cipher 34 */ | 963 | /* Cipher 34 */ |
964 | { | 964 | { |
965 | 1, | 965 | 1, |
966 | TLS1_TXT_ADH_WITH_AES_128_SHA, | 966 | TLS1_TXT_ADH_WITH_AES_128_SHA, |
967 | TLS1_CK_ADH_WITH_AES_128_SHA, | 967 | TLS1_CK_ADH_WITH_AES_128_SHA, |
968 | SSL_kEDH, | 968 | SSL_kEDH, |
969 | SSL_aNULL, | 969 | SSL_aNULL, |
970 | SSL_AES128, | 970 | SSL_AES128, |
971 | SSL_SHA1, | 971 | SSL_SHA1, |
972 | SSL_TLSV1, | 972 | SSL_TLSV1, |
973 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 973 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
974 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 974 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
975 | 128, | 975 | 128, |
976 | 128, | 976 | 128, |
977 | }, | 977 | }, |
978 | 978 | ||
979 | /* Cipher 35 */ | 979 | /* Cipher 35 */ |
980 | { | 980 | { |
981 | 1, | 981 | 1, |
982 | TLS1_TXT_RSA_WITH_AES_256_SHA, | 982 | TLS1_TXT_RSA_WITH_AES_256_SHA, |
983 | TLS1_CK_RSA_WITH_AES_256_SHA, | 983 | TLS1_CK_RSA_WITH_AES_256_SHA, |
984 | SSL_kRSA, | 984 | SSL_kRSA, |
985 | SSL_aRSA, | 985 | SSL_aRSA, |
986 | SSL_AES256, | 986 | SSL_AES256, |
987 | SSL_SHA1, | 987 | SSL_SHA1, |
988 | SSL_TLSV1, | 988 | SSL_TLSV1, |
989 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 989 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
990 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 990 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
991 | 256, | 991 | 256, |
992 | 256, | 992 | 256, |
993 | }, | 993 | }, |
994 | /* Cipher 36 */ | 994 | /* Cipher 36 */ |
995 | { | 995 | { |
996 | 0, | 996 | 0, |
997 | TLS1_TXT_DH_DSS_WITH_AES_256_SHA, | 997 | TLS1_TXT_DH_DSS_WITH_AES_256_SHA, |
998 | TLS1_CK_DH_DSS_WITH_AES_256_SHA, | 998 | TLS1_CK_DH_DSS_WITH_AES_256_SHA, |
999 | SSL_kDHd, | 999 | SSL_kDHd, |
1000 | SSL_aDH, | 1000 | SSL_aDH, |
1001 | SSL_AES256, | 1001 | SSL_AES256, |
1002 | SSL_SHA1, | 1002 | SSL_SHA1, |
1003 | SSL_TLSV1, | 1003 | SSL_TLSV1, |
1004 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1004 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
1005 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1005 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1006 | 256, | 1006 | 256, |
1007 | 256, | 1007 | 256, |
1008 | }, | 1008 | }, |
1009 | 1009 | ||
1010 | /* Cipher 37 */ | 1010 | /* Cipher 37 */ |
1011 | { | 1011 | { |
1012 | 0, /* not implemented (non-ephemeral DH) */ | 1012 | 0, /* not implemented (non-ephemeral DH) */ |
1013 | TLS1_TXT_DH_RSA_WITH_AES_256_SHA, | 1013 | TLS1_TXT_DH_RSA_WITH_AES_256_SHA, |
1014 | TLS1_CK_DH_RSA_WITH_AES_256_SHA, | 1014 | TLS1_CK_DH_RSA_WITH_AES_256_SHA, |
1015 | SSL_kDHr, | 1015 | SSL_kDHr, |
1016 | SSL_aDH, | 1016 | SSL_aDH, |
1017 | SSL_AES256, | 1017 | SSL_AES256, |
1018 | SSL_SHA1, | 1018 | SSL_SHA1, |
1019 | SSL_TLSV1, | 1019 | SSL_TLSV1, |
1020 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1020 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
1021 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1021 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1022 | 256, | 1022 | 256, |
1023 | 256, | 1023 | 256, |
1024 | }, | 1024 | }, |
1025 | 1025 | ||
1026 | /* Cipher 38 */ | 1026 | /* Cipher 38 */ |
1027 | { | 1027 | { |
1028 | 1, | 1028 | 1, |
1029 | TLS1_TXT_DHE_DSS_WITH_AES_256_SHA, | 1029 | TLS1_TXT_DHE_DSS_WITH_AES_256_SHA, |
1030 | TLS1_CK_DHE_DSS_WITH_AES_256_SHA, | 1030 | TLS1_CK_DHE_DSS_WITH_AES_256_SHA, |
1031 | SSL_kEDH, | 1031 | SSL_kEDH, |
1032 | SSL_aDSS, | 1032 | SSL_aDSS, |
1033 | SSL_AES256, | 1033 | SSL_AES256, |
1034 | SSL_SHA1, | 1034 | SSL_SHA1, |
1035 | SSL_TLSV1, | 1035 | SSL_TLSV1, |
1036 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1036 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
1037 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1037 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1038 | 256, | 1038 | 256, |
1039 | 256, | 1039 | 256, |
1040 | }, | 1040 | }, |
1041 | 1041 | ||
1042 | /* Cipher 39 */ | 1042 | /* Cipher 39 */ |
1043 | { | 1043 | { |
1044 | 1, | 1044 | 1, |
1045 | TLS1_TXT_DHE_RSA_WITH_AES_256_SHA, | 1045 | TLS1_TXT_DHE_RSA_WITH_AES_256_SHA, |
1046 | TLS1_CK_DHE_RSA_WITH_AES_256_SHA, | 1046 | TLS1_CK_DHE_RSA_WITH_AES_256_SHA, |
1047 | SSL_kEDH, | 1047 | SSL_kEDH, |
1048 | SSL_aRSA, | 1048 | SSL_aRSA, |
1049 | SSL_AES256, | 1049 | SSL_AES256, |
1050 | SSL_SHA1, | 1050 | SSL_SHA1, |
1051 | SSL_TLSV1, | 1051 | SSL_TLSV1, |
1052 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1052 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
1053 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1053 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1054 | 256, | 1054 | 256, |
1055 | 256, | 1055 | 256, |
1056 | }, | 1056 | }, |
1057 | 1057 | ||
1058 | /* Cipher 3A */ | 1058 | /* Cipher 3A */ |
1059 | { | 1059 | { |
1060 | 1, | 1060 | 1, |
1061 | TLS1_TXT_ADH_WITH_AES_256_SHA, | 1061 | TLS1_TXT_ADH_WITH_AES_256_SHA, |
1062 | TLS1_CK_ADH_WITH_AES_256_SHA, | 1062 | TLS1_CK_ADH_WITH_AES_256_SHA, |
1063 | SSL_kEDH, | 1063 | SSL_kEDH, |
1064 | SSL_aNULL, | 1064 | SSL_aNULL, |
1065 | SSL_AES256, | 1065 | SSL_AES256, |
1066 | SSL_SHA1, | 1066 | SSL_SHA1, |
1067 | SSL_TLSV1, | 1067 | SSL_TLSV1, |
1068 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1068 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
1069 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1069 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1070 | 256, | 1070 | 256, |
1071 | 256, | 1071 | 256, |
1072 | }, | 1072 | }, |
1073 | 1073 | ||
1074 | /* TLS v1.2 ciphersuites */ | 1074 | /* TLS v1.2 ciphersuites */ |
1075 | /* Cipher 3B */ | 1075 | /* Cipher 3B */ |
1076 | { | 1076 | { |
1077 | 1, | 1077 | 1, |
1078 | TLS1_TXT_RSA_WITH_NULL_SHA256, | 1078 | TLS1_TXT_RSA_WITH_NULL_SHA256, |
1079 | TLS1_CK_RSA_WITH_NULL_SHA256, | 1079 | TLS1_CK_RSA_WITH_NULL_SHA256, |
1080 | SSL_kRSA, | 1080 | SSL_kRSA, |
1081 | SSL_aRSA, | 1081 | SSL_aRSA, |
1082 | SSL_eNULL, | 1082 | SSL_eNULL, |
1083 | SSL_SHA256, | 1083 | SSL_SHA256, |
1084 | SSL_TLSV1_2, | 1084 | SSL_TLSV1_2, |
1085 | SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS, | 1085 | SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS, |
1086 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1086 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1087 | 0, | 1087 | 0, |
1088 | 0, | 1088 | 0, |
1089 | }, | 1089 | }, |
1090 | 1090 | ||
1091 | /* Cipher 3C */ | 1091 | /* Cipher 3C */ |
1092 | { | 1092 | { |
1093 | 1, | 1093 | 1, |
1094 | TLS1_TXT_RSA_WITH_AES_128_SHA256, | 1094 | TLS1_TXT_RSA_WITH_AES_128_SHA256, |
1095 | TLS1_CK_RSA_WITH_AES_128_SHA256, | 1095 | TLS1_CK_RSA_WITH_AES_128_SHA256, |
1096 | SSL_kRSA, | 1096 | SSL_kRSA, |
1097 | SSL_aRSA, | 1097 | SSL_aRSA, |
1098 | SSL_AES128, | 1098 | SSL_AES128, |
1099 | SSL_SHA256, | 1099 | SSL_SHA256, |
1100 | SSL_TLSV1_2, | 1100 | SSL_TLSV1_2, |
1101 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1101 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
1102 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1102 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1103 | 128, | 1103 | 128, |
1104 | 128, | 1104 | 128, |
1105 | }, | 1105 | }, |
1106 | 1106 | ||
1107 | /* Cipher 3D */ | 1107 | /* Cipher 3D */ |
1108 | { | 1108 | { |
1109 | 1, | 1109 | 1, |
1110 | TLS1_TXT_RSA_WITH_AES_256_SHA256, | 1110 | TLS1_TXT_RSA_WITH_AES_256_SHA256, |
1111 | TLS1_CK_RSA_WITH_AES_256_SHA256, | 1111 | TLS1_CK_RSA_WITH_AES_256_SHA256, |
1112 | SSL_kRSA, | 1112 | SSL_kRSA, |
1113 | SSL_aRSA, | 1113 | SSL_aRSA, |
1114 | SSL_AES256, | 1114 | SSL_AES256, |
1115 | SSL_SHA256, | 1115 | SSL_SHA256, |
1116 | SSL_TLSV1_2, | 1116 | SSL_TLSV1_2, |
1117 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1117 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
1118 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1118 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1119 | 256, | 1119 | 256, |
1120 | 256, | 1120 | 256, |
1121 | }, | 1121 | }, |
1122 | 1122 | ||
1123 | /* Cipher 3E */ | 1123 | /* Cipher 3E */ |
1124 | { | 1124 | { |
1125 | 0, /* not implemented (non-ephemeral DH) */ | 1125 | 0, /* not implemented (non-ephemeral DH) */ |
1126 | TLS1_TXT_DH_DSS_WITH_AES_128_SHA256, | 1126 | TLS1_TXT_DH_DSS_WITH_AES_128_SHA256, |
1127 | TLS1_CK_DH_DSS_WITH_AES_128_SHA256, | 1127 | TLS1_CK_DH_DSS_WITH_AES_128_SHA256, |
1128 | SSL_kDHd, | 1128 | SSL_kDHd, |
1129 | SSL_aDH, | 1129 | SSL_aDH, |
1130 | SSL_AES128, | 1130 | SSL_AES128, |
1131 | SSL_SHA256, | 1131 | SSL_SHA256, |
1132 | SSL_TLSV1_2, | 1132 | SSL_TLSV1_2, |
1133 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1133 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
1134 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1134 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1135 | 128, | 1135 | 128, |
1136 | 128, | 1136 | 128, |
1137 | }, | 1137 | }, |
1138 | 1138 | ||
1139 | /* Cipher 3F */ | 1139 | /* Cipher 3F */ |
1140 | { | 1140 | { |
1141 | 0, /* not implemented (non-ephemeral DH) */ | 1141 | 0, /* not implemented (non-ephemeral DH) */ |
1142 | TLS1_TXT_DH_RSA_WITH_AES_128_SHA256, | 1142 | TLS1_TXT_DH_RSA_WITH_AES_128_SHA256, |
1143 | TLS1_CK_DH_RSA_WITH_AES_128_SHA256, | 1143 | TLS1_CK_DH_RSA_WITH_AES_128_SHA256, |
1144 | SSL_kDHr, | 1144 | SSL_kDHr, |
1145 | SSL_aDH, | 1145 | SSL_aDH, |
1146 | SSL_AES128, | 1146 | SSL_AES128, |
1147 | SSL_SHA256, | 1147 | SSL_SHA256, |
1148 | SSL_TLSV1_2, | 1148 | SSL_TLSV1_2, |
1149 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1149 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
1150 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1150 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1151 | 128, | 1151 | 128, |
1152 | 128, | 1152 | 128, |
1153 | }, | 1153 | }, |
1154 | 1154 | ||
1155 | /* Cipher 40 */ | 1155 | /* Cipher 40 */ |
1156 | { | 1156 | { |
1157 | 1, | 1157 | 1, |
1158 | TLS1_TXT_DHE_DSS_WITH_AES_128_SHA256, | 1158 | TLS1_TXT_DHE_DSS_WITH_AES_128_SHA256, |
1159 | TLS1_CK_DHE_DSS_WITH_AES_128_SHA256, | 1159 | TLS1_CK_DHE_DSS_WITH_AES_128_SHA256, |
1160 | SSL_kEDH, | 1160 | SSL_kEDH, |
1161 | SSL_aDSS, | 1161 | SSL_aDSS, |
1162 | SSL_AES128, | 1162 | SSL_AES128, |
1163 | SSL_SHA256, | 1163 | SSL_SHA256, |
1164 | SSL_TLSV1_2, | 1164 | SSL_TLSV1_2, |
1165 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1165 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
1166 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1166 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1167 | 128, | 1167 | 128, |
1168 | 128, | 1168 | 128, |
1169 | }, | 1169 | }, |
1170 | 1170 | ||
1171 | #ifndef OPENSSL_NO_CAMELLIA | 1171 | #ifndef OPENSSL_NO_CAMELLIA |
@@ -1173,98 +1173,98 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]={ | |||
1173 | 1173 | ||
1174 | /* Cipher 41 */ | 1174 | /* Cipher 41 */ |
1175 | { | 1175 | { |
1176 | 1, | 1176 | 1, |
1177 | TLS1_TXT_RSA_WITH_CAMELLIA_128_CBC_SHA, | 1177 | TLS1_TXT_RSA_WITH_CAMELLIA_128_CBC_SHA, |
1178 | TLS1_CK_RSA_WITH_CAMELLIA_128_CBC_SHA, | 1178 | TLS1_CK_RSA_WITH_CAMELLIA_128_CBC_SHA, |
1179 | SSL_kRSA, | 1179 | SSL_kRSA, |
1180 | SSL_aRSA, | 1180 | SSL_aRSA, |
1181 | SSL_CAMELLIA128, | 1181 | SSL_CAMELLIA128, |
1182 | SSL_SHA1, | 1182 | SSL_SHA1, |
1183 | SSL_TLSV1, | 1183 | SSL_TLSV1, |
1184 | SSL_NOT_EXP|SSL_HIGH, | 1184 | SSL_NOT_EXP|SSL_HIGH, |
1185 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1185 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1186 | 128, | 1186 | 128, |
1187 | 128, | 1187 | 128, |
1188 | }, | 1188 | }, |
1189 | 1189 | ||
1190 | /* Cipher 42 */ | 1190 | /* Cipher 42 */ |
1191 | { | 1191 | { |
1192 | 0, /* not implemented (non-ephemeral DH) */ | 1192 | 0, /* not implemented (non-ephemeral DH) */ |
1193 | TLS1_TXT_DH_DSS_WITH_CAMELLIA_128_CBC_SHA, | 1193 | TLS1_TXT_DH_DSS_WITH_CAMELLIA_128_CBC_SHA, |
1194 | TLS1_CK_DH_DSS_WITH_CAMELLIA_128_CBC_SHA, | 1194 | TLS1_CK_DH_DSS_WITH_CAMELLIA_128_CBC_SHA, |
1195 | SSL_kDHd, | 1195 | SSL_kDHd, |
1196 | SSL_aDH, | 1196 | SSL_aDH, |
1197 | SSL_CAMELLIA128, | 1197 | SSL_CAMELLIA128, |
1198 | SSL_SHA1, | 1198 | SSL_SHA1, |
1199 | SSL_TLSV1, | 1199 | SSL_TLSV1, |
1200 | SSL_NOT_EXP|SSL_HIGH, | 1200 | SSL_NOT_EXP|SSL_HIGH, |
1201 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1201 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1202 | 128, | 1202 | 128, |
1203 | 128, | 1203 | 128, |
1204 | }, | 1204 | }, |
1205 | 1205 | ||
1206 | /* Cipher 43 */ | 1206 | /* Cipher 43 */ |
1207 | { | 1207 | { |
1208 | 0, /* not implemented (non-ephemeral DH) */ | 1208 | 0, /* not implemented (non-ephemeral DH) */ |
1209 | TLS1_TXT_DH_RSA_WITH_CAMELLIA_128_CBC_SHA, | 1209 | TLS1_TXT_DH_RSA_WITH_CAMELLIA_128_CBC_SHA, |
1210 | TLS1_CK_DH_RSA_WITH_CAMELLIA_128_CBC_SHA, | 1210 | TLS1_CK_DH_RSA_WITH_CAMELLIA_128_CBC_SHA, |
1211 | SSL_kDHr, | 1211 | SSL_kDHr, |
1212 | SSL_aDH, | 1212 | SSL_aDH, |
1213 | SSL_CAMELLIA128, | 1213 | SSL_CAMELLIA128, |
1214 | SSL_SHA1, | 1214 | SSL_SHA1, |
1215 | SSL_TLSV1, | 1215 | SSL_TLSV1, |
1216 | SSL_NOT_EXP|SSL_HIGH, | 1216 | SSL_NOT_EXP|SSL_HIGH, |
1217 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1217 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1218 | 128, | 1218 | 128, |
1219 | 128, | 1219 | 128, |
1220 | }, | 1220 | }, |
1221 | 1221 | ||
1222 | /* Cipher 44 */ | 1222 | /* Cipher 44 */ |
1223 | { | 1223 | { |
1224 | 1, | 1224 | 1, |
1225 | TLS1_TXT_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA, | 1225 | TLS1_TXT_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA, |
1226 | TLS1_CK_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA, | 1226 | TLS1_CK_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA, |
1227 | SSL_kEDH, | 1227 | SSL_kEDH, |
1228 | SSL_aDSS, | 1228 | SSL_aDSS, |
1229 | SSL_CAMELLIA128, | 1229 | SSL_CAMELLIA128, |
1230 | SSL_SHA1, | 1230 | SSL_SHA1, |
1231 | SSL_TLSV1, | 1231 | SSL_TLSV1, |
1232 | SSL_NOT_EXP|SSL_HIGH, | 1232 | SSL_NOT_EXP|SSL_HIGH, |
1233 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1233 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1234 | 128, | 1234 | 128, |
1235 | 128, | 1235 | 128, |
1236 | }, | 1236 | }, |
1237 | 1237 | ||
1238 | /* Cipher 45 */ | 1238 | /* Cipher 45 */ |
1239 | { | 1239 | { |
1240 | 1, | 1240 | 1, |
1241 | TLS1_TXT_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA, | 1241 | TLS1_TXT_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA, |
1242 | TLS1_CK_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA, | 1242 | TLS1_CK_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA, |
1243 | SSL_kEDH, | 1243 | SSL_kEDH, |
1244 | SSL_aRSA, | 1244 | SSL_aRSA, |
1245 | SSL_CAMELLIA128, | 1245 | SSL_CAMELLIA128, |
1246 | SSL_SHA1, | 1246 | SSL_SHA1, |
1247 | SSL_TLSV1, | 1247 | SSL_TLSV1, |
1248 | SSL_NOT_EXP|SSL_HIGH, | 1248 | SSL_NOT_EXP|SSL_HIGH, |
1249 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1249 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1250 | 128, | 1250 | 128, |
1251 | 128, | 1251 | 128, |
1252 | }, | 1252 | }, |
1253 | 1253 | ||
1254 | /* Cipher 46 */ | 1254 | /* Cipher 46 */ |
1255 | { | 1255 | { |
1256 | 1, | 1256 | 1, |
1257 | TLS1_TXT_ADH_WITH_CAMELLIA_128_CBC_SHA, | 1257 | TLS1_TXT_ADH_WITH_CAMELLIA_128_CBC_SHA, |
1258 | TLS1_CK_ADH_WITH_CAMELLIA_128_CBC_SHA, | 1258 | TLS1_CK_ADH_WITH_CAMELLIA_128_CBC_SHA, |
1259 | SSL_kEDH, | 1259 | SSL_kEDH, |
1260 | SSL_aNULL, | 1260 | SSL_aNULL, |
1261 | SSL_CAMELLIA128, | 1261 | SSL_CAMELLIA128, |
1262 | SSL_SHA1, | 1262 | SSL_SHA1, |
1263 | SSL_TLSV1, | 1263 | SSL_TLSV1, |
1264 | SSL_NOT_EXP|SSL_HIGH, | 1264 | SSL_NOT_EXP|SSL_HIGH, |
1265 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1265 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1266 | 128, | 1266 | 128, |
1267 | 128, | 1267 | 128, |
1268 | }, | 1268 | }, |
1269 | #endif /* OPENSSL_NO_CAMELLIA */ | 1269 | #endif /* OPENSSL_NO_CAMELLIA */ |
1270 | 1270 | ||
@@ -1273,288 +1273,288 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]={ | |||
1273 | #if 0 | 1273 | #if 0 |
1274 | /* Cipher 60 */ | 1274 | /* Cipher 60 */ |
1275 | { | 1275 | { |
1276 | 1, | 1276 | 1, |
1277 | TLS1_TXT_RSA_EXPORT1024_WITH_RC4_56_MD5, | 1277 | TLS1_TXT_RSA_EXPORT1024_WITH_RC4_56_MD5, |
1278 | TLS1_CK_RSA_EXPORT1024_WITH_RC4_56_MD5, | 1278 | TLS1_CK_RSA_EXPORT1024_WITH_RC4_56_MD5, |
1279 | SSL_kRSA, | 1279 | SSL_kRSA, |
1280 | SSL_aRSA, | 1280 | SSL_aRSA, |
1281 | SSL_RC4, | 1281 | SSL_RC4, |
1282 | SSL_MD5, | 1282 | SSL_MD5, |
1283 | SSL_TLSV1, | 1283 | SSL_TLSV1, |
1284 | SSL_EXPORT|SSL_EXP56, | 1284 | SSL_EXPORT|SSL_EXP56, |
1285 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1285 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1286 | 56, | 1286 | 56, |
1287 | 128, | 1287 | 128, |
1288 | }, | 1288 | }, |
1289 | 1289 | ||
1290 | /* Cipher 61 */ | 1290 | /* Cipher 61 */ |
1291 | { | 1291 | { |
1292 | 1, | 1292 | 1, |
1293 | TLS1_TXT_RSA_EXPORT1024_WITH_RC2_CBC_56_MD5, | 1293 | TLS1_TXT_RSA_EXPORT1024_WITH_RC2_CBC_56_MD5, |
1294 | TLS1_CK_RSA_EXPORT1024_WITH_RC2_CBC_56_MD5, | 1294 | TLS1_CK_RSA_EXPORT1024_WITH_RC2_CBC_56_MD5, |
1295 | SSL_kRSA, | 1295 | SSL_kRSA, |
1296 | SSL_aRSA, | 1296 | SSL_aRSA, |
1297 | SSL_RC2, | 1297 | SSL_RC2, |
1298 | SSL_MD5, | 1298 | SSL_MD5, |
1299 | SSL_TLSV1, | 1299 | SSL_TLSV1, |
1300 | SSL_EXPORT|SSL_EXP56, | 1300 | SSL_EXPORT|SSL_EXP56, |
1301 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1301 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1302 | 56, | 1302 | 56, |
1303 | 128, | 1303 | 128, |
1304 | }, | 1304 | }, |
1305 | #endif | 1305 | #endif |
1306 | 1306 | ||
1307 | /* Cipher 62 */ | 1307 | /* Cipher 62 */ |
1308 | { | 1308 | { |
1309 | 1, | 1309 | 1, |
1310 | TLS1_TXT_RSA_EXPORT1024_WITH_DES_CBC_SHA, | 1310 | TLS1_TXT_RSA_EXPORT1024_WITH_DES_CBC_SHA, |
1311 | TLS1_CK_RSA_EXPORT1024_WITH_DES_CBC_SHA, | 1311 | TLS1_CK_RSA_EXPORT1024_WITH_DES_CBC_SHA, |
1312 | SSL_kRSA, | 1312 | SSL_kRSA, |
1313 | SSL_aRSA, | 1313 | SSL_aRSA, |
1314 | SSL_DES, | 1314 | SSL_DES, |
1315 | SSL_SHA1, | 1315 | SSL_SHA1, |
1316 | SSL_TLSV1, | 1316 | SSL_TLSV1, |
1317 | SSL_EXPORT|SSL_EXP56, | 1317 | SSL_EXPORT|SSL_EXP56, |
1318 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1318 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1319 | 56, | 1319 | 56, |
1320 | 56, | 1320 | 56, |
1321 | }, | 1321 | }, |
1322 | 1322 | ||
1323 | /* Cipher 63 */ | 1323 | /* Cipher 63 */ |
1324 | { | 1324 | { |
1325 | 1, | 1325 | 1, |
1326 | TLS1_TXT_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA, | 1326 | TLS1_TXT_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA, |
1327 | TLS1_CK_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA, | 1327 | TLS1_CK_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA, |
1328 | SSL_kEDH, | 1328 | SSL_kEDH, |
1329 | SSL_aDSS, | 1329 | SSL_aDSS, |
1330 | SSL_DES, | 1330 | SSL_DES, |
1331 | SSL_SHA1, | 1331 | SSL_SHA1, |
1332 | SSL_TLSV1, | 1332 | SSL_TLSV1, |
1333 | SSL_EXPORT|SSL_EXP56, | 1333 | SSL_EXPORT|SSL_EXP56, |
1334 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1334 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1335 | 56, | 1335 | 56, |
1336 | 56, | 1336 | 56, |
1337 | }, | 1337 | }, |
1338 | 1338 | ||
1339 | /* Cipher 64 */ | 1339 | /* Cipher 64 */ |
1340 | { | 1340 | { |
1341 | 1, | 1341 | 1, |
1342 | TLS1_TXT_RSA_EXPORT1024_WITH_RC4_56_SHA, | 1342 | TLS1_TXT_RSA_EXPORT1024_WITH_RC4_56_SHA, |
1343 | TLS1_CK_RSA_EXPORT1024_WITH_RC4_56_SHA, | 1343 | TLS1_CK_RSA_EXPORT1024_WITH_RC4_56_SHA, |
1344 | SSL_kRSA, | 1344 | SSL_kRSA, |
1345 | SSL_aRSA, | 1345 | SSL_aRSA, |
1346 | SSL_RC4, | 1346 | SSL_RC4, |
1347 | SSL_SHA1, | 1347 | SSL_SHA1, |
1348 | SSL_TLSV1, | 1348 | SSL_TLSV1, |
1349 | SSL_EXPORT|SSL_EXP56, | 1349 | SSL_EXPORT|SSL_EXP56, |
1350 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1350 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1351 | 56, | 1351 | 56, |
1352 | 128, | 1352 | 128, |
1353 | }, | 1353 | }, |
1354 | 1354 | ||
1355 | /* Cipher 65 */ | 1355 | /* Cipher 65 */ |
1356 | { | 1356 | { |
1357 | 1, | 1357 | 1, |
1358 | TLS1_TXT_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA, | 1358 | TLS1_TXT_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA, |
1359 | TLS1_CK_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA, | 1359 | TLS1_CK_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA, |
1360 | SSL_kEDH, | 1360 | SSL_kEDH, |
1361 | SSL_aDSS, | 1361 | SSL_aDSS, |
1362 | SSL_RC4, | 1362 | SSL_RC4, |
1363 | SSL_SHA1, | 1363 | SSL_SHA1, |
1364 | SSL_TLSV1, | 1364 | SSL_TLSV1, |
1365 | SSL_EXPORT|SSL_EXP56, | 1365 | SSL_EXPORT|SSL_EXP56, |
1366 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1366 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1367 | 56, | 1367 | 56, |
1368 | 128, | 1368 | 128, |
1369 | }, | 1369 | }, |
1370 | 1370 | ||
1371 | /* Cipher 66 */ | 1371 | /* Cipher 66 */ |
1372 | { | 1372 | { |
1373 | 1, | 1373 | 1, |
1374 | TLS1_TXT_DHE_DSS_WITH_RC4_128_SHA, | 1374 | TLS1_TXT_DHE_DSS_WITH_RC4_128_SHA, |
1375 | TLS1_CK_DHE_DSS_WITH_RC4_128_SHA, | 1375 | TLS1_CK_DHE_DSS_WITH_RC4_128_SHA, |
1376 | SSL_kEDH, | 1376 | SSL_kEDH, |
1377 | SSL_aDSS, | 1377 | SSL_aDSS, |
1378 | SSL_RC4, | 1378 | SSL_RC4, |
1379 | SSL_SHA1, | 1379 | SSL_SHA1, |
1380 | SSL_TLSV1, | 1380 | SSL_TLSV1, |
1381 | SSL_NOT_EXP|SSL_MEDIUM, | 1381 | SSL_NOT_EXP|SSL_MEDIUM, |
1382 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1382 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1383 | 128, | 1383 | 128, |
1384 | 128, | 1384 | 128, |
1385 | }, | 1385 | }, |
1386 | #endif | 1386 | #endif |
1387 | 1387 | ||
1388 | /* TLS v1.2 ciphersuites */ | 1388 | /* TLS v1.2 ciphersuites */ |
1389 | /* Cipher 67 */ | 1389 | /* Cipher 67 */ |
1390 | { | 1390 | { |
1391 | 1, | 1391 | 1, |
1392 | TLS1_TXT_DHE_RSA_WITH_AES_128_SHA256, | 1392 | TLS1_TXT_DHE_RSA_WITH_AES_128_SHA256, |
1393 | TLS1_CK_DHE_RSA_WITH_AES_128_SHA256, | 1393 | TLS1_CK_DHE_RSA_WITH_AES_128_SHA256, |
1394 | SSL_kEDH, | 1394 | SSL_kEDH, |
1395 | SSL_aRSA, | 1395 | SSL_aRSA, |
1396 | SSL_AES128, | 1396 | SSL_AES128, |
1397 | SSL_SHA256, | 1397 | SSL_SHA256, |
1398 | SSL_TLSV1_2, | 1398 | SSL_TLSV1_2, |
1399 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1399 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
1400 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1400 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1401 | 128, | 1401 | 128, |
1402 | 128, | 1402 | 128, |
1403 | }, | 1403 | }, |
1404 | 1404 | ||
1405 | /* Cipher 68 */ | 1405 | /* Cipher 68 */ |
1406 | { | 1406 | { |
1407 | 0, /* not implemented (non-ephemeral DH) */ | 1407 | 0, /* not implemented (non-ephemeral DH) */ |
1408 | TLS1_TXT_DH_DSS_WITH_AES_256_SHA256, | 1408 | TLS1_TXT_DH_DSS_WITH_AES_256_SHA256, |
1409 | TLS1_CK_DH_DSS_WITH_AES_256_SHA256, | 1409 | TLS1_CK_DH_DSS_WITH_AES_256_SHA256, |
1410 | SSL_kDHd, | 1410 | SSL_kDHd, |
1411 | SSL_aDH, | 1411 | SSL_aDH, |
1412 | SSL_AES256, | 1412 | SSL_AES256, |
1413 | SSL_SHA256, | 1413 | SSL_SHA256, |
1414 | SSL_TLSV1_2, | 1414 | SSL_TLSV1_2, |
1415 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1415 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
1416 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1416 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1417 | 256, | 1417 | 256, |
1418 | 256, | 1418 | 256, |
1419 | }, | 1419 | }, |
1420 | 1420 | ||
1421 | /* Cipher 69 */ | 1421 | /* Cipher 69 */ |
1422 | { | 1422 | { |
1423 | 0, /* not implemented (non-ephemeral DH) */ | 1423 | 0, /* not implemented (non-ephemeral DH) */ |
1424 | TLS1_TXT_DH_RSA_WITH_AES_256_SHA256, | 1424 | TLS1_TXT_DH_RSA_WITH_AES_256_SHA256, |
1425 | TLS1_CK_DH_RSA_WITH_AES_256_SHA256, | 1425 | TLS1_CK_DH_RSA_WITH_AES_256_SHA256, |
1426 | SSL_kDHr, | 1426 | SSL_kDHr, |
1427 | SSL_aDH, | 1427 | SSL_aDH, |
1428 | SSL_AES256, | 1428 | SSL_AES256, |
1429 | SSL_SHA256, | 1429 | SSL_SHA256, |
1430 | SSL_TLSV1_2, | 1430 | SSL_TLSV1_2, |
1431 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1431 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
1432 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1432 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1433 | 256, | 1433 | 256, |
1434 | 256, | 1434 | 256, |
1435 | }, | 1435 | }, |
1436 | 1436 | ||
1437 | /* Cipher 6A */ | 1437 | /* Cipher 6A */ |
1438 | { | 1438 | { |
1439 | 1, | 1439 | 1, |
1440 | TLS1_TXT_DHE_DSS_WITH_AES_256_SHA256, | 1440 | TLS1_TXT_DHE_DSS_WITH_AES_256_SHA256, |
1441 | TLS1_CK_DHE_DSS_WITH_AES_256_SHA256, | 1441 | TLS1_CK_DHE_DSS_WITH_AES_256_SHA256, |
1442 | SSL_kEDH, | 1442 | SSL_kEDH, |
1443 | SSL_aDSS, | 1443 | SSL_aDSS, |
1444 | SSL_AES256, | 1444 | SSL_AES256, |
1445 | SSL_SHA256, | 1445 | SSL_SHA256, |
1446 | SSL_TLSV1_2, | 1446 | SSL_TLSV1_2, |
1447 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1447 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
1448 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1448 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1449 | 256, | 1449 | 256, |
1450 | 256, | 1450 | 256, |
1451 | }, | 1451 | }, |
1452 | 1452 | ||
1453 | /* Cipher 6B */ | 1453 | /* Cipher 6B */ |
1454 | { | 1454 | { |
1455 | 1, | 1455 | 1, |
1456 | TLS1_TXT_DHE_RSA_WITH_AES_256_SHA256, | 1456 | TLS1_TXT_DHE_RSA_WITH_AES_256_SHA256, |
1457 | TLS1_CK_DHE_RSA_WITH_AES_256_SHA256, | 1457 | TLS1_CK_DHE_RSA_WITH_AES_256_SHA256, |
1458 | SSL_kEDH, | 1458 | SSL_kEDH, |
1459 | SSL_aRSA, | 1459 | SSL_aRSA, |
1460 | SSL_AES256, | 1460 | SSL_AES256, |
1461 | SSL_SHA256, | 1461 | SSL_SHA256, |
1462 | SSL_TLSV1_2, | 1462 | SSL_TLSV1_2, |
1463 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1463 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
1464 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1464 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1465 | 256, | 1465 | 256, |
1466 | 256, | 1466 | 256, |
1467 | }, | 1467 | }, |
1468 | 1468 | ||
1469 | /* Cipher 6C */ | 1469 | /* Cipher 6C */ |
1470 | { | 1470 | { |
1471 | 1, | 1471 | 1, |
1472 | TLS1_TXT_ADH_WITH_AES_128_SHA256, | 1472 | TLS1_TXT_ADH_WITH_AES_128_SHA256, |
1473 | TLS1_CK_ADH_WITH_AES_128_SHA256, | 1473 | TLS1_CK_ADH_WITH_AES_128_SHA256, |
1474 | SSL_kEDH, | 1474 | SSL_kEDH, |
1475 | SSL_aNULL, | 1475 | SSL_aNULL, |
1476 | SSL_AES128, | 1476 | SSL_AES128, |
1477 | SSL_SHA256, | 1477 | SSL_SHA256, |
1478 | SSL_TLSV1_2, | 1478 | SSL_TLSV1_2, |
1479 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1479 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
1480 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1480 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1481 | 128, | 1481 | 128, |
1482 | 128, | 1482 | 128, |
1483 | }, | 1483 | }, |
1484 | 1484 | ||
1485 | /* Cipher 6D */ | 1485 | /* Cipher 6D */ |
1486 | { | 1486 | { |
1487 | 1, | 1487 | 1, |
1488 | TLS1_TXT_ADH_WITH_AES_256_SHA256, | 1488 | TLS1_TXT_ADH_WITH_AES_256_SHA256, |
1489 | TLS1_CK_ADH_WITH_AES_256_SHA256, | 1489 | TLS1_CK_ADH_WITH_AES_256_SHA256, |
1490 | SSL_kEDH, | 1490 | SSL_kEDH, |
1491 | SSL_aNULL, | 1491 | SSL_aNULL, |
1492 | SSL_AES256, | 1492 | SSL_AES256, |
1493 | SSL_SHA256, | 1493 | SSL_SHA256, |
1494 | SSL_TLSV1_2, | 1494 | SSL_TLSV1_2, |
1495 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1495 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
1496 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1496 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1497 | 256, | 1497 | 256, |
1498 | 256, | 1498 | 256, |
1499 | }, | 1499 | }, |
1500 | 1500 | ||
1501 | /* GOST Ciphersuites */ | 1501 | /* GOST Ciphersuites */ |
1502 | 1502 | ||
1503 | { | 1503 | { |
1504 | 1, | 1504 | 1, |
1505 | "GOST94-GOST89-GOST89", | 1505 | "GOST94-GOST89-GOST89", |
1506 | 0x3000080, | 1506 | 0x3000080, |
1507 | SSL_kGOST, | 1507 | SSL_kGOST, |
1508 | SSL_aGOST94, | 1508 | SSL_aGOST94, |
1509 | SSL_eGOST2814789CNT, | 1509 | SSL_eGOST2814789CNT, |
1510 | SSL_GOST89MAC, | 1510 | SSL_GOST89MAC, |
1511 | SSL_TLSV1, | 1511 | SSL_TLSV1, |
1512 | SSL_NOT_EXP|SSL_HIGH, | 1512 | SSL_NOT_EXP|SSL_HIGH, |
1513 | SSL_HANDSHAKE_MAC_GOST94|TLS1_PRF_GOST94|TLS1_STREAM_MAC, | 1513 | SSL_HANDSHAKE_MAC_GOST94|TLS1_PRF_GOST94|TLS1_STREAM_MAC, |
1514 | 256, | 1514 | 256, |
1515 | 256 | 1515 | 256 |
1516 | }, | 1516 | }, |
1517 | { | 1517 | { |
1518 | 1, | 1518 | 1, |
1519 | "GOST2001-GOST89-GOST89", | 1519 | "GOST2001-GOST89-GOST89", |
1520 | 0x3000081, | 1520 | 0x3000081, |
1521 | SSL_kGOST, | 1521 | SSL_kGOST, |
1522 | SSL_aGOST01, | 1522 | SSL_aGOST01, |
1523 | SSL_eGOST2814789CNT, | 1523 | SSL_eGOST2814789CNT, |
1524 | SSL_GOST89MAC, | 1524 | SSL_GOST89MAC, |
1525 | SSL_TLSV1, | 1525 | SSL_TLSV1, |
1526 | SSL_NOT_EXP|SSL_HIGH, | 1526 | SSL_NOT_EXP|SSL_HIGH, |
1527 | SSL_HANDSHAKE_MAC_GOST94|TLS1_PRF_GOST94|TLS1_STREAM_MAC, | 1527 | SSL_HANDSHAKE_MAC_GOST94|TLS1_PRF_GOST94|TLS1_STREAM_MAC, |
1528 | 256, | 1528 | 256, |
1529 | 256 | 1529 | 256 |
1530 | }, | 1530 | }, |
1531 | { | 1531 | { |
1532 | 1, | 1532 | 1, |
1533 | "GOST94-NULL-GOST94", | 1533 | "GOST94-NULL-GOST94", |
1534 | 0x3000082, | 1534 | 0x3000082, |
1535 | SSL_kGOST, | 1535 | SSL_kGOST, |
1536 | SSL_aGOST94, | 1536 | SSL_aGOST94, |
1537 | SSL_eNULL, | 1537 | SSL_eNULL, |
1538 | SSL_GOST94, | 1538 | SSL_GOST94, |
1539 | SSL_TLSV1, | 1539 | SSL_TLSV1, |
1540 | SSL_NOT_EXP|SSL_STRONG_NONE, | 1540 | SSL_NOT_EXP|SSL_STRONG_NONE, |
1541 | SSL_HANDSHAKE_MAC_GOST94|TLS1_PRF_GOST94, | 1541 | SSL_HANDSHAKE_MAC_GOST94|TLS1_PRF_GOST94, |
1542 | 0, | 1542 | 0, |
1543 | 0 | 1543 | 0 |
1544 | }, | 1544 | }, |
1545 | { | 1545 | { |
1546 | 1, | 1546 | 1, |
1547 | "GOST2001-NULL-GOST94", | 1547 | "GOST2001-NULL-GOST94", |
1548 | 0x3000083, | 1548 | 0x3000083, |
1549 | SSL_kGOST, | 1549 | SSL_kGOST, |
1550 | SSL_aGOST01, | 1550 | SSL_aGOST01, |
1551 | SSL_eNULL, | 1551 | SSL_eNULL, |
1552 | SSL_GOST94, | 1552 | SSL_GOST94, |
1553 | SSL_TLSV1, | 1553 | SSL_TLSV1, |
1554 | SSL_NOT_EXP|SSL_STRONG_NONE, | 1554 | SSL_NOT_EXP|SSL_STRONG_NONE, |
1555 | SSL_HANDSHAKE_MAC_GOST94|TLS1_PRF_GOST94, | 1555 | SSL_HANDSHAKE_MAC_GOST94|TLS1_PRF_GOST94, |
1556 | 0, | 1556 | 0, |
1557 | 0 | 1557 | 0 |
1558 | }, | 1558 | }, |
1559 | 1559 | ||
1560 | #ifndef OPENSSL_NO_CAMELLIA | 1560 | #ifndef OPENSSL_NO_CAMELLIA |
@@ -1562,163 +1562,163 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]={ | |||
1562 | 1562 | ||
1563 | /* Cipher 84 */ | 1563 | /* Cipher 84 */ |
1564 | { | 1564 | { |
1565 | 1, | 1565 | 1, |
1566 | TLS1_TXT_RSA_WITH_CAMELLIA_256_CBC_SHA, | 1566 | TLS1_TXT_RSA_WITH_CAMELLIA_256_CBC_SHA, |
1567 | TLS1_CK_RSA_WITH_CAMELLIA_256_CBC_SHA, | 1567 | TLS1_CK_RSA_WITH_CAMELLIA_256_CBC_SHA, |
1568 | SSL_kRSA, | 1568 | SSL_kRSA, |
1569 | SSL_aRSA, | 1569 | SSL_aRSA, |
1570 | SSL_CAMELLIA256, | 1570 | SSL_CAMELLIA256, |
1571 | SSL_SHA1, | 1571 | SSL_SHA1, |
1572 | SSL_TLSV1, | 1572 | SSL_TLSV1, |
1573 | SSL_NOT_EXP|SSL_HIGH, | 1573 | SSL_NOT_EXP|SSL_HIGH, |
1574 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1574 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1575 | 256, | 1575 | 256, |
1576 | 256, | 1576 | 256, |
1577 | }, | 1577 | }, |
1578 | /* Cipher 85 */ | 1578 | /* Cipher 85 */ |
1579 | { | 1579 | { |
1580 | 0, /* not implemented (non-ephemeral DH) */ | 1580 | 0, /* not implemented (non-ephemeral DH) */ |
1581 | TLS1_TXT_DH_DSS_WITH_CAMELLIA_256_CBC_SHA, | 1581 | TLS1_TXT_DH_DSS_WITH_CAMELLIA_256_CBC_SHA, |
1582 | TLS1_CK_DH_DSS_WITH_CAMELLIA_256_CBC_SHA, | 1582 | TLS1_CK_DH_DSS_WITH_CAMELLIA_256_CBC_SHA, |
1583 | SSL_kDHd, | 1583 | SSL_kDHd, |
1584 | SSL_aDH, | 1584 | SSL_aDH, |
1585 | SSL_CAMELLIA256, | 1585 | SSL_CAMELLIA256, |
1586 | SSL_SHA1, | 1586 | SSL_SHA1, |
1587 | SSL_TLSV1, | 1587 | SSL_TLSV1, |
1588 | SSL_NOT_EXP|SSL_HIGH, | 1588 | SSL_NOT_EXP|SSL_HIGH, |
1589 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1589 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1590 | 256, | 1590 | 256, |
1591 | 256, | 1591 | 256, |
1592 | }, | 1592 | }, |
1593 | 1593 | ||
1594 | /* Cipher 86 */ | 1594 | /* Cipher 86 */ |
1595 | { | 1595 | { |
1596 | 0, /* not implemented (non-ephemeral DH) */ | 1596 | 0, /* not implemented (non-ephemeral DH) */ |
1597 | TLS1_TXT_DH_RSA_WITH_CAMELLIA_256_CBC_SHA, | 1597 | TLS1_TXT_DH_RSA_WITH_CAMELLIA_256_CBC_SHA, |
1598 | TLS1_CK_DH_RSA_WITH_CAMELLIA_256_CBC_SHA, | 1598 | TLS1_CK_DH_RSA_WITH_CAMELLIA_256_CBC_SHA, |
1599 | SSL_kDHr, | 1599 | SSL_kDHr, |
1600 | SSL_aDH, | 1600 | SSL_aDH, |
1601 | SSL_CAMELLIA256, | 1601 | SSL_CAMELLIA256, |
1602 | SSL_SHA1, | 1602 | SSL_SHA1, |
1603 | SSL_TLSV1, | 1603 | SSL_TLSV1, |
1604 | SSL_NOT_EXP|SSL_HIGH, | 1604 | SSL_NOT_EXP|SSL_HIGH, |
1605 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1605 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1606 | 256, | 1606 | 256, |
1607 | 256, | 1607 | 256, |
1608 | }, | 1608 | }, |
1609 | 1609 | ||
1610 | /* Cipher 87 */ | 1610 | /* Cipher 87 */ |
1611 | { | 1611 | { |
1612 | 1, | 1612 | 1, |
1613 | TLS1_TXT_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA, | 1613 | TLS1_TXT_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA, |
1614 | TLS1_CK_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA, | 1614 | TLS1_CK_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA, |
1615 | SSL_kEDH, | 1615 | SSL_kEDH, |
1616 | SSL_aDSS, | 1616 | SSL_aDSS, |
1617 | SSL_CAMELLIA256, | 1617 | SSL_CAMELLIA256, |
1618 | SSL_SHA1, | 1618 | SSL_SHA1, |
1619 | SSL_TLSV1, | 1619 | SSL_TLSV1, |
1620 | SSL_NOT_EXP|SSL_HIGH, | 1620 | SSL_NOT_EXP|SSL_HIGH, |
1621 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1621 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1622 | 256, | 1622 | 256, |
1623 | 256, | 1623 | 256, |
1624 | }, | 1624 | }, |
1625 | 1625 | ||
1626 | /* Cipher 88 */ | 1626 | /* Cipher 88 */ |
1627 | { | 1627 | { |
1628 | 1, | 1628 | 1, |
1629 | TLS1_TXT_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA, | 1629 | TLS1_TXT_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA, |
1630 | TLS1_CK_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA, | 1630 | TLS1_CK_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA, |
1631 | SSL_kEDH, | 1631 | SSL_kEDH, |
1632 | SSL_aRSA, | 1632 | SSL_aRSA, |
1633 | SSL_CAMELLIA256, | 1633 | SSL_CAMELLIA256, |
1634 | SSL_SHA1, | 1634 | SSL_SHA1, |
1635 | SSL_TLSV1, | 1635 | SSL_TLSV1, |
1636 | SSL_NOT_EXP|SSL_HIGH, | 1636 | SSL_NOT_EXP|SSL_HIGH, |
1637 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1637 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1638 | 256, | 1638 | 256, |
1639 | 256, | 1639 | 256, |
1640 | }, | 1640 | }, |
1641 | 1641 | ||
1642 | /* Cipher 89 */ | 1642 | /* Cipher 89 */ |
1643 | { | 1643 | { |
1644 | 1, | 1644 | 1, |
1645 | TLS1_TXT_ADH_WITH_CAMELLIA_256_CBC_SHA, | 1645 | TLS1_TXT_ADH_WITH_CAMELLIA_256_CBC_SHA, |
1646 | TLS1_CK_ADH_WITH_CAMELLIA_256_CBC_SHA, | 1646 | TLS1_CK_ADH_WITH_CAMELLIA_256_CBC_SHA, |
1647 | SSL_kEDH, | 1647 | SSL_kEDH, |
1648 | SSL_aNULL, | 1648 | SSL_aNULL, |
1649 | SSL_CAMELLIA256, | 1649 | SSL_CAMELLIA256, |
1650 | SSL_SHA1, | 1650 | SSL_SHA1, |
1651 | SSL_TLSV1, | 1651 | SSL_TLSV1, |
1652 | SSL_NOT_EXP|SSL_HIGH, | 1652 | SSL_NOT_EXP|SSL_HIGH, |
1653 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1653 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1654 | 256, | 1654 | 256, |
1655 | 256, | 1655 | 256, |
1656 | }, | 1656 | }, |
1657 | #endif /* OPENSSL_NO_CAMELLIA */ | 1657 | #endif /* OPENSSL_NO_CAMELLIA */ |
1658 | 1658 | ||
1659 | #ifndef OPENSSL_NO_PSK | 1659 | #ifndef OPENSSL_NO_PSK |
1660 | /* Cipher 8A */ | 1660 | /* Cipher 8A */ |
1661 | { | 1661 | { |
1662 | 1, | 1662 | 1, |
1663 | TLS1_TXT_PSK_WITH_RC4_128_SHA, | 1663 | TLS1_TXT_PSK_WITH_RC4_128_SHA, |
1664 | TLS1_CK_PSK_WITH_RC4_128_SHA, | 1664 | TLS1_CK_PSK_WITH_RC4_128_SHA, |
1665 | SSL_kPSK, | 1665 | SSL_kPSK, |
1666 | SSL_aPSK, | 1666 | SSL_aPSK, |
1667 | SSL_RC4, | 1667 | SSL_RC4, |
1668 | SSL_SHA1, | 1668 | SSL_SHA1, |
1669 | SSL_TLSV1, | 1669 | SSL_TLSV1, |
1670 | SSL_NOT_EXP|SSL_MEDIUM, | 1670 | SSL_NOT_EXP|SSL_MEDIUM, |
1671 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1671 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1672 | 128, | 1672 | 128, |
1673 | 128, | 1673 | 128, |
1674 | }, | 1674 | }, |
1675 | 1675 | ||
1676 | /* Cipher 8B */ | 1676 | /* Cipher 8B */ |
1677 | { | 1677 | { |
1678 | 1, | 1678 | 1, |
1679 | TLS1_TXT_PSK_WITH_3DES_EDE_CBC_SHA, | 1679 | TLS1_TXT_PSK_WITH_3DES_EDE_CBC_SHA, |
1680 | TLS1_CK_PSK_WITH_3DES_EDE_CBC_SHA, | 1680 | TLS1_CK_PSK_WITH_3DES_EDE_CBC_SHA, |
1681 | SSL_kPSK, | 1681 | SSL_kPSK, |
1682 | SSL_aPSK, | 1682 | SSL_aPSK, |
1683 | SSL_3DES, | 1683 | SSL_3DES, |
1684 | SSL_SHA1, | 1684 | SSL_SHA1, |
1685 | SSL_TLSV1, | 1685 | SSL_TLSV1, |
1686 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1686 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
1687 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1687 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1688 | 168, | 1688 | 168, |
1689 | 168, | 1689 | 168, |
1690 | }, | 1690 | }, |
1691 | 1691 | ||
1692 | /* Cipher 8C */ | 1692 | /* Cipher 8C */ |
1693 | { | 1693 | { |
1694 | 1, | 1694 | 1, |
1695 | TLS1_TXT_PSK_WITH_AES_128_CBC_SHA, | 1695 | TLS1_TXT_PSK_WITH_AES_128_CBC_SHA, |
1696 | TLS1_CK_PSK_WITH_AES_128_CBC_SHA, | 1696 | TLS1_CK_PSK_WITH_AES_128_CBC_SHA, |
1697 | SSL_kPSK, | 1697 | SSL_kPSK, |
1698 | SSL_aPSK, | 1698 | SSL_aPSK, |
1699 | SSL_AES128, | 1699 | SSL_AES128, |
1700 | SSL_SHA1, | 1700 | SSL_SHA1, |
1701 | SSL_TLSV1, | 1701 | SSL_TLSV1, |
1702 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1702 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
1703 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1703 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1704 | 128, | 1704 | 128, |
1705 | 128, | 1705 | 128, |
1706 | }, | 1706 | }, |
1707 | 1707 | ||
1708 | /* Cipher 8D */ | 1708 | /* Cipher 8D */ |
1709 | { | 1709 | { |
1710 | 1, | 1710 | 1, |
1711 | TLS1_TXT_PSK_WITH_AES_256_CBC_SHA, | 1711 | TLS1_TXT_PSK_WITH_AES_256_CBC_SHA, |
1712 | TLS1_CK_PSK_WITH_AES_256_CBC_SHA, | 1712 | TLS1_CK_PSK_WITH_AES_256_CBC_SHA, |
1713 | SSL_kPSK, | 1713 | SSL_kPSK, |
1714 | SSL_aPSK, | 1714 | SSL_aPSK, |
1715 | SSL_AES256, | 1715 | SSL_AES256, |
1716 | SSL_SHA1, | 1716 | SSL_SHA1, |
1717 | SSL_TLSV1, | 1717 | SSL_TLSV1, |
1718 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1718 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
1719 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1719 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1720 | 256, | 1720 | 256, |
1721 | 256, | 1721 | 256, |
1722 | }, | 1722 | }, |
1723 | #endif /* OPENSSL_NO_PSK */ | 1723 | #endif /* OPENSSL_NO_PSK */ |
1724 | 1724 | ||
@@ -1727,98 +1727,98 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]={ | |||
1727 | 1727 | ||
1728 | /* Cipher 96 */ | 1728 | /* Cipher 96 */ |
1729 | { | 1729 | { |
1730 | 1, | 1730 | 1, |
1731 | TLS1_TXT_RSA_WITH_SEED_SHA, | 1731 | TLS1_TXT_RSA_WITH_SEED_SHA, |
1732 | TLS1_CK_RSA_WITH_SEED_SHA, | 1732 | TLS1_CK_RSA_WITH_SEED_SHA, |
1733 | SSL_kRSA, | 1733 | SSL_kRSA, |
1734 | SSL_aRSA, | 1734 | SSL_aRSA, |
1735 | SSL_SEED, | 1735 | SSL_SEED, |
1736 | SSL_SHA1, | 1736 | SSL_SHA1, |
1737 | SSL_TLSV1, | 1737 | SSL_TLSV1, |
1738 | SSL_NOT_EXP|SSL_MEDIUM, | 1738 | SSL_NOT_EXP|SSL_MEDIUM, |
1739 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1739 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1740 | 128, | 1740 | 128, |
1741 | 128, | 1741 | 128, |
1742 | }, | 1742 | }, |
1743 | 1743 | ||
1744 | /* Cipher 97 */ | 1744 | /* Cipher 97 */ |
1745 | { | 1745 | { |
1746 | 0, /* not implemented (non-ephemeral DH) */ | 1746 | 0, /* not implemented (non-ephemeral DH) */ |
1747 | TLS1_TXT_DH_DSS_WITH_SEED_SHA, | 1747 | TLS1_TXT_DH_DSS_WITH_SEED_SHA, |
1748 | TLS1_CK_DH_DSS_WITH_SEED_SHA, | 1748 | TLS1_CK_DH_DSS_WITH_SEED_SHA, |
1749 | SSL_kDHd, | 1749 | SSL_kDHd, |
1750 | SSL_aDH, | 1750 | SSL_aDH, |
1751 | SSL_SEED, | 1751 | SSL_SEED, |
1752 | SSL_SHA1, | 1752 | SSL_SHA1, |
1753 | SSL_TLSV1, | 1753 | SSL_TLSV1, |
1754 | SSL_NOT_EXP|SSL_MEDIUM, | 1754 | SSL_NOT_EXP|SSL_MEDIUM, |
1755 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1755 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1756 | 128, | 1756 | 128, |
1757 | 128, | 1757 | 128, |
1758 | }, | 1758 | }, |
1759 | 1759 | ||
1760 | /* Cipher 98 */ | 1760 | /* Cipher 98 */ |
1761 | { | 1761 | { |
1762 | 0, /* not implemented (non-ephemeral DH) */ | 1762 | 0, /* not implemented (non-ephemeral DH) */ |
1763 | TLS1_TXT_DH_RSA_WITH_SEED_SHA, | 1763 | TLS1_TXT_DH_RSA_WITH_SEED_SHA, |
1764 | TLS1_CK_DH_RSA_WITH_SEED_SHA, | 1764 | TLS1_CK_DH_RSA_WITH_SEED_SHA, |
1765 | SSL_kDHr, | 1765 | SSL_kDHr, |
1766 | SSL_aDH, | 1766 | SSL_aDH, |
1767 | SSL_SEED, | 1767 | SSL_SEED, |
1768 | SSL_SHA1, | 1768 | SSL_SHA1, |
1769 | SSL_TLSV1, | 1769 | SSL_TLSV1, |
1770 | SSL_NOT_EXP|SSL_MEDIUM, | 1770 | SSL_NOT_EXP|SSL_MEDIUM, |
1771 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1771 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1772 | 128, | 1772 | 128, |
1773 | 128, | 1773 | 128, |
1774 | }, | 1774 | }, |
1775 | 1775 | ||
1776 | /* Cipher 99 */ | 1776 | /* Cipher 99 */ |
1777 | { | 1777 | { |
1778 | 1, | 1778 | 1, |
1779 | TLS1_TXT_DHE_DSS_WITH_SEED_SHA, | 1779 | TLS1_TXT_DHE_DSS_WITH_SEED_SHA, |
1780 | TLS1_CK_DHE_DSS_WITH_SEED_SHA, | 1780 | TLS1_CK_DHE_DSS_WITH_SEED_SHA, |
1781 | SSL_kEDH, | 1781 | SSL_kEDH, |
1782 | SSL_aDSS, | 1782 | SSL_aDSS, |
1783 | SSL_SEED, | 1783 | SSL_SEED, |
1784 | SSL_SHA1, | 1784 | SSL_SHA1, |
1785 | SSL_TLSV1, | 1785 | SSL_TLSV1, |
1786 | SSL_NOT_EXP|SSL_MEDIUM, | 1786 | SSL_NOT_EXP|SSL_MEDIUM, |
1787 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1787 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1788 | 128, | 1788 | 128, |
1789 | 128, | 1789 | 128, |
1790 | }, | 1790 | }, |
1791 | 1791 | ||
1792 | /* Cipher 9A */ | 1792 | /* Cipher 9A */ |
1793 | { | 1793 | { |
1794 | 1, | 1794 | 1, |
1795 | TLS1_TXT_DHE_RSA_WITH_SEED_SHA, | 1795 | TLS1_TXT_DHE_RSA_WITH_SEED_SHA, |
1796 | TLS1_CK_DHE_RSA_WITH_SEED_SHA, | 1796 | TLS1_CK_DHE_RSA_WITH_SEED_SHA, |
1797 | SSL_kEDH, | 1797 | SSL_kEDH, |
1798 | SSL_aRSA, | 1798 | SSL_aRSA, |
1799 | SSL_SEED, | 1799 | SSL_SEED, |
1800 | SSL_SHA1, | 1800 | SSL_SHA1, |
1801 | SSL_TLSV1, | 1801 | SSL_TLSV1, |
1802 | SSL_NOT_EXP|SSL_MEDIUM, | 1802 | SSL_NOT_EXP|SSL_MEDIUM, |
1803 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1803 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1804 | 128, | 1804 | 128, |
1805 | 128, | 1805 | 128, |
1806 | }, | 1806 | }, |
1807 | 1807 | ||
1808 | /* Cipher 9B */ | 1808 | /* Cipher 9B */ |
1809 | { | 1809 | { |
1810 | 1, | 1810 | 1, |
1811 | TLS1_TXT_ADH_WITH_SEED_SHA, | 1811 | TLS1_TXT_ADH_WITH_SEED_SHA, |
1812 | TLS1_CK_ADH_WITH_SEED_SHA, | 1812 | TLS1_CK_ADH_WITH_SEED_SHA, |
1813 | SSL_kEDH, | 1813 | SSL_kEDH, |
1814 | SSL_aNULL, | 1814 | SSL_aNULL, |
1815 | SSL_SEED, | 1815 | SSL_SEED, |
1816 | SSL_SHA1, | 1816 | SSL_SHA1, |
1817 | SSL_TLSV1, | 1817 | SSL_TLSV1, |
1818 | SSL_NOT_EXP|SSL_MEDIUM, | 1818 | SSL_NOT_EXP|SSL_MEDIUM, |
1819 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1819 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1820 | 128, | 1820 | 128, |
1821 | 128, | 1821 | 128, |
1822 | }, | 1822 | }, |
1823 | 1823 | ||
1824 | #endif /* OPENSSL_NO_SEED */ | 1824 | #endif /* OPENSSL_NO_SEED */ |
@@ -1827,741 +1827,741 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]={ | |||
1827 | 1827 | ||
1828 | /* Cipher 9C */ | 1828 | /* Cipher 9C */ |
1829 | { | 1829 | { |
1830 | 1, | 1830 | 1, |
1831 | TLS1_TXT_RSA_WITH_AES_128_GCM_SHA256, | 1831 | TLS1_TXT_RSA_WITH_AES_128_GCM_SHA256, |
1832 | TLS1_CK_RSA_WITH_AES_128_GCM_SHA256, | 1832 | TLS1_CK_RSA_WITH_AES_128_GCM_SHA256, |
1833 | SSL_kRSA, | 1833 | SSL_kRSA, |
1834 | SSL_aRSA, | 1834 | SSL_aRSA, |
1835 | SSL_AES128GCM, | 1835 | SSL_AES128GCM, |
1836 | SSL_AEAD, | 1836 | SSL_AEAD, |
1837 | SSL_TLSV1_2, | 1837 | SSL_TLSV1_2, |
1838 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1838 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
1839 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, | 1839 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, |
1840 | 128, | 1840 | 128, |
1841 | 128, | 1841 | 128, |
1842 | }, | 1842 | }, |
1843 | 1843 | ||
1844 | /* Cipher 9D */ | 1844 | /* Cipher 9D */ |
1845 | { | 1845 | { |
1846 | 1, | 1846 | 1, |
1847 | TLS1_TXT_RSA_WITH_AES_256_GCM_SHA384, | 1847 | TLS1_TXT_RSA_WITH_AES_256_GCM_SHA384, |
1848 | TLS1_CK_RSA_WITH_AES_256_GCM_SHA384, | 1848 | TLS1_CK_RSA_WITH_AES_256_GCM_SHA384, |
1849 | SSL_kRSA, | 1849 | SSL_kRSA, |
1850 | SSL_aRSA, | 1850 | SSL_aRSA, |
1851 | SSL_AES256GCM, | 1851 | SSL_AES256GCM, |
1852 | SSL_AEAD, | 1852 | SSL_AEAD, |
1853 | SSL_TLSV1_2, | 1853 | SSL_TLSV1_2, |
1854 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1854 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
1855 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, | 1855 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, |
1856 | 256, | 1856 | 256, |
1857 | 256, | 1857 | 256, |
1858 | }, | 1858 | }, |
1859 | 1859 | ||
1860 | /* Cipher 9E */ | 1860 | /* Cipher 9E */ |
1861 | { | 1861 | { |
1862 | 1, | 1862 | 1, |
1863 | TLS1_TXT_DHE_RSA_WITH_AES_128_GCM_SHA256, | 1863 | TLS1_TXT_DHE_RSA_WITH_AES_128_GCM_SHA256, |
1864 | TLS1_CK_DHE_RSA_WITH_AES_128_GCM_SHA256, | 1864 | TLS1_CK_DHE_RSA_WITH_AES_128_GCM_SHA256, |
1865 | SSL_kEDH, | 1865 | SSL_kEDH, |
1866 | SSL_aRSA, | 1866 | SSL_aRSA, |
1867 | SSL_AES128GCM, | 1867 | SSL_AES128GCM, |
1868 | SSL_AEAD, | 1868 | SSL_AEAD, |
1869 | SSL_TLSV1_2, | 1869 | SSL_TLSV1_2, |
1870 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1870 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
1871 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, | 1871 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, |
1872 | 128, | 1872 | 128, |
1873 | 128, | 1873 | 128, |
1874 | }, | 1874 | }, |
1875 | 1875 | ||
1876 | /* Cipher 9F */ | 1876 | /* Cipher 9F */ |
1877 | { | 1877 | { |
1878 | 1, | 1878 | 1, |
1879 | TLS1_TXT_DHE_RSA_WITH_AES_256_GCM_SHA384, | 1879 | TLS1_TXT_DHE_RSA_WITH_AES_256_GCM_SHA384, |
1880 | TLS1_CK_DHE_RSA_WITH_AES_256_GCM_SHA384, | 1880 | TLS1_CK_DHE_RSA_WITH_AES_256_GCM_SHA384, |
1881 | SSL_kEDH, | 1881 | SSL_kEDH, |
1882 | SSL_aRSA, | 1882 | SSL_aRSA, |
1883 | SSL_AES256GCM, | 1883 | SSL_AES256GCM, |
1884 | SSL_AEAD, | 1884 | SSL_AEAD, |
1885 | SSL_TLSV1_2, | 1885 | SSL_TLSV1_2, |
1886 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1886 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
1887 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, | 1887 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, |
1888 | 256, | 1888 | 256, |
1889 | 256, | 1889 | 256, |
1890 | }, | 1890 | }, |
1891 | 1891 | ||
1892 | /* Cipher A0 */ | 1892 | /* Cipher A0 */ |
1893 | { | 1893 | { |
1894 | 0, | 1894 | 0, |
1895 | TLS1_TXT_DH_RSA_WITH_AES_128_GCM_SHA256, | 1895 | TLS1_TXT_DH_RSA_WITH_AES_128_GCM_SHA256, |
1896 | TLS1_CK_DH_RSA_WITH_AES_128_GCM_SHA256, | 1896 | TLS1_CK_DH_RSA_WITH_AES_128_GCM_SHA256, |
1897 | SSL_kDHr, | 1897 | SSL_kDHr, |
1898 | SSL_aDH, | 1898 | SSL_aDH, |
1899 | SSL_AES128GCM, | 1899 | SSL_AES128GCM, |
1900 | SSL_AEAD, | 1900 | SSL_AEAD, |
1901 | SSL_TLSV1_2, | 1901 | SSL_TLSV1_2, |
1902 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1902 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
1903 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, | 1903 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, |
1904 | 128, | 1904 | 128, |
1905 | 128, | 1905 | 128, |
1906 | }, | 1906 | }, |
1907 | 1907 | ||
1908 | /* Cipher A1 */ | 1908 | /* Cipher A1 */ |
1909 | { | 1909 | { |
1910 | 0, | 1910 | 0, |
1911 | TLS1_TXT_DH_RSA_WITH_AES_256_GCM_SHA384, | 1911 | TLS1_TXT_DH_RSA_WITH_AES_256_GCM_SHA384, |
1912 | TLS1_CK_DH_RSA_WITH_AES_256_GCM_SHA384, | 1912 | TLS1_CK_DH_RSA_WITH_AES_256_GCM_SHA384, |
1913 | SSL_kDHr, | 1913 | SSL_kDHr, |
1914 | SSL_aDH, | 1914 | SSL_aDH, |
1915 | SSL_AES256GCM, | 1915 | SSL_AES256GCM, |
1916 | SSL_AEAD, | 1916 | SSL_AEAD, |
1917 | SSL_TLSV1_2, | 1917 | SSL_TLSV1_2, |
1918 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1918 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
1919 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, | 1919 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, |
1920 | 256, | 1920 | 256, |
1921 | 256, | 1921 | 256, |
1922 | }, | 1922 | }, |
1923 | 1923 | ||
1924 | /* Cipher A2 */ | 1924 | /* Cipher A2 */ |
1925 | { | 1925 | { |
1926 | 1, | 1926 | 1, |
1927 | TLS1_TXT_DHE_DSS_WITH_AES_128_GCM_SHA256, | 1927 | TLS1_TXT_DHE_DSS_WITH_AES_128_GCM_SHA256, |
1928 | TLS1_CK_DHE_DSS_WITH_AES_128_GCM_SHA256, | 1928 | TLS1_CK_DHE_DSS_WITH_AES_128_GCM_SHA256, |
1929 | SSL_kEDH, | 1929 | SSL_kEDH, |
1930 | SSL_aDSS, | 1930 | SSL_aDSS, |
1931 | SSL_AES128GCM, | 1931 | SSL_AES128GCM, |
1932 | SSL_AEAD, | 1932 | SSL_AEAD, |
1933 | SSL_TLSV1_2, | 1933 | SSL_TLSV1_2, |
1934 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1934 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
1935 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, | 1935 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, |
1936 | 128, | 1936 | 128, |
1937 | 128, | 1937 | 128, |
1938 | }, | 1938 | }, |
1939 | 1939 | ||
1940 | /* Cipher A3 */ | 1940 | /* Cipher A3 */ |
1941 | { | 1941 | { |
1942 | 1, | 1942 | 1, |
1943 | TLS1_TXT_DHE_DSS_WITH_AES_256_GCM_SHA384, | 1943 | TLS1_TXT_DHE_DSS_WITH_AES_256_GCM_SHA384, |
1944 | TLS1_CK_DHE_DSS_WITH_AES_256_GCM_SHA384, | 1944 | TLS1_CK_DHE_DSS_WITH_AES_256_GCM_SHA384, |
1945 | SSL_kEDH, | 1945 | SSL_kEDH, |
1946 | SSL_aDSS, | 1946 | SSL_aDSS, |
1947 | SSL_AES256GCM, | 1947 | SSL_AES256GCM, |
1948 | SSL_AEAD, | 1948 | SSL_AEAD, |
1949 | SSL_TLSV1_2, | 1949 | SSL_TLSV1_2, |
1950 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1950 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
1951 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, | 1951 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, |
1952 | 256, | 1952 | 256, |
1953 | 256, | 1953 | 256, |
1954 | }, | 1954 | }, |
1955 | 1955 | ||
1956 | /* Cipher A4 */ | 1956 | /* Cipher A4 */ |
1957 | { | 1957 | { |
1958 | 0, | 1958 | 0, |
1959 | TLS1_TXT_DH_DSS_WITH_AES_128_GCM_SHA256, | 1959 | TLS1_TXT_DH_DSS_WITH_AES_128_GCM_SHA256, |
1960 | TLS1_CK_DH_DSS_WITH_AES_128_GCM_SHA256, | 1960 | TLS1_CK_DH_DSS_WITH_AES_128_GCM_SHA256, |
1961 | SSL_kDHd, | 1961 | SSL_kDHd, |
1962 | SSL_aDH, | 1962 | SSL_aDH, |
1963 | SSL_AES128GCM, | 1963 | SSL_AES128GCM, |
1964 | SSL_AEAD, | 1964 | SSL_AEAD, |
1965 | SSL_TLSV1_2, | 1965 | SSL_TLSV1_2, |
1966 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1966 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
1967 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, | 1967 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, |
1968 | 128, | 1968 | 128, |
1969 | 128, | 1969 | 128, |
1970 | }, | 1970 | }, |
1971 | 1971 | ||
1972 | /* Cipher A5 */ | 1972 | /* Cipher A5 */ |
1973 | { | 1973 | { |
1974 | 0, | 1974 | 0, |
1975 | TLS1_TXT_DH_DSS_WITH_AES_256_GCM_SHA384, | 1975 | TLS1_TXT_DH_DSS_WITH_AES_256_GCM_SHA384, |
1976 | TLS1_CK_DH_DSS_WITH_AES_256_GCM_SHA384, | 1976 | TLS1_CK_DH_DSS_WITH_AES_256_GCM_SHA384, |
1977 | SSL_kDHd, | 1977 | SSL_kDHd, |
1978 | SSL_aDH, | 1978 | SSL_aDH, |
1979 | SSL_AES256GCM, | 1979 | SSL_AES256GCM, |
1980 | SSL_AEAD, | 1980 | SSL_AEAD, |
1981 | SSL_TLSV1_2, | 1981 | SSL_TLSV1_2, |
1982 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1982 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
1983 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, | 1983 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, |
1984 | 256, | 1984 | 256, |
1985 | 256, | 1985 | 256, |
1986 | }, | 1986 | }, |
1987 | 1987 | ||
1988 | /* Cipher A6 */ | 1988 | /* Cipher A6 */ |
1989 | { | 1989 | { |
1990 | 1, | 1990 | 1, |
1991 | TLS1_TXT_ADH_WITH_AES_128_GCM_SHA256, | 1991 | TLS1_TXT_ADH_WITH_AES_128_GCM_SHA256, |
1992 | TLS1_CK_ADH_WITH_AES_128_GCM_SHA256, | 1992 | TLS1_CK_ADH_WITH_AES_128_GCM_SHA256, |
1993 | SSL_kEDH, | 1993 | SSL_kEDH, |
1994 | SSL_aNULL, | 1994 | SSL_aNULL, |
1995 | SSL_AES128GCM, | 1995 | SSL_AES128GCM, |
1996 | SSL_AEAD, | 1996 | SSL_AEAD, |
1997 | SSL_TLSV1_2, | 1997 | SSL_TLSV1_2, |
1998 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1998 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
1999 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, | 1999 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, |
2000 | 128, | 2000 | 128, |
2001 | 128, | 2001 | 128, |
2002 | }, | 2002 | }, |
2003 | 2003 | ||
2004 | /* Cipher A7 */ | 2004 | /* Cipher A7 */ |
2005 | { | 2005 | { |
2006 | 1, | 2006 | 1, |
2007 | TLS1_TXT_ADH_WITH_AES_256_GCM_SHA384, | 2007 | TLS1_TXT_ADH_WITH_AES_256_GCM_SHA384, |
2008 | TLS1_CK_ADH_WITH_AES_256_GCM_SHA384, | 2008 | TLS1_CK_ADH_WITH_AES_256_GCM_SHA384, |
2009 | SSL_kEDH, | 2009 | SSL_kEDH, |
2010 | SSL_aNULL, | 2010 | SSL_aNULL, |
2011 | SSL_AES256GCM, | 2011 | SSL_AES256GCM, |
2012 | SSL_AEAD, | 2012 | SSL_AEAD, |
2013 | SSL_TLSV1_2, | 2013 | SSL_TLSV1_2, |
2014 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2014 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
2015 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, | 2015 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, |
2016 | 256, | 2016 | 256, |
2017 | 256, | 2017 | 256, |
2018 | }, | 2018 | }, |
2019 | 2019 | ||
2020 | #ifndef OPENSSL_NO_ECDH | 2020 | #ifndef OPENSSL_NO_ECDH |
2021 | /* Cipher C001 */ | 2021 | /* Cipher C001 */ |
2022 | { | 2022 | { |
2023 | 1, | 2023 | 1, |
2024 | TLS1_TXT_ECDH_ECDSA_WITH_NULL_SHA, | 2024 | TLS1_TXT_ECDH_ECDSA_WITH_NULL_SHA, |
2025 | TLS1_CK_ECDH_ECDSA_WITH_NULL_SHA, | 2025 | TLS1_CK_ECDH_ECDSA_WITH_NULL_SHA, |
2026 | SSL_kECDHe, | 2026 | SSL_kECDHe, |
2027 | SSL_aECDH, | 2027 | SSL_aECDH, |
2028 | SSL_eNULL, | 2028 | SSL_eNULL, |
2029 | SSL_SHA1, | 2029 | SSL_SHA1, |
2030 | SSL_TLSV1, | 2030 | SSL_TLSV1, |
2031 | SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS, | 2031 | SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS, |
2032 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2032 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
2033 | 0, | 2033 | 0, |
2034 | 0, | 2034 | 0, |
2035 | }, | 2035 | }, |
2036 | 2036 | ||
2037 | /* Cipher C002 */ | 2037 | /* Cipher C002 */ |
2038 | { | 2038 | { |
2039 | 1, | 2039 | 1, |
2040 | TLS1_TXT_ECDH_ECDSA_WITH_RC4_128_SHA, | 2040 | TLS1_TXT_ECDH_ECDSA_WITH_RC4_128_SHA, |
2041 | TLS1_CK_ECDH_ECDSA_WITH_RC4_128_SHA, | 2041 | TLS1_CK_ECDH_ECDSA_WITH_RC4_128_SHA, |
2042 | SSL_kECDHe, | 2042 | SSL_kECDHe, |
2043 | SSL_aECDH, | 2043 | SSL_aECDH, |
2044 | SSL_RC4, | 2044 | SSL_RC4, |
2045 | SSL_SHA1, | 2045 | SSL_SHA1, |
2046 | SSL_TLSV1, | 2046 | SSL_TLSV1, |
2047 | SSL_NOT_EXP|SSL_MEDIUM, | 2047 | SSL_NOT_EXP|SSL_MEDIUM, |
2048 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2048 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
2049 | 128, | 2049 | 128, |
2050 | 128, | 2050 | 128, |
2051 | }, | 2051 | }, |
2052 | 2052 | ||
2053 | /* Cipher C003 */ | 2053 | /* Cipher C003 */ |
2054 | { | 2054 | { |
2055 | 1, | 2055 | 1, |
2056 | TLS1_TXT_ECDH_ECDSA_WITH_DES_192_CBC3_SHA, | 2056 | TLS1_TXT_ECDH_ECDSA_WITH_DES_192_CBC3_SHA, |
2057 | TLS1_CK_ECDH_ECDSA_WITH_DES_192_CBC3_SHA, | 2057 | TLS1_CK_ECDH_ECDSA_WITH_DES_192_CBC3_SHA, |
2058 | SSL_kECDHe, | 2058 | SSL_kECDHe, |
2059 | SSL_aECDH, | 2059 | SSL_aECDH, |
2060 | SSL_3DES, | 2060 | SSL_3DES, |
2061 | SSL_SHA1, | 2061 | SSL_SHA1, |
2062 | SSL_TLSV1, | 2062 | SSL_TLSV1, |
2063 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2063 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
2064 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2064 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
2065 | 168, | 2065 | 168, |
2066 | 168, | 2066 | 168, |
2067 | }, | 2067 | }, |
2068 | 2068 | ||
2069 | /* Cipher C004 */ | 2069 | /* Cipher C004 */ |
2070 | { | 2070 | { |
2071 | 1, | 2071 | 1, |
2072 | TLS1_TXT_ECDH_ECDSA_WITH_AES_128_CBC_SHA, | 2072 | TLS1_TXT_ECDH_ECDSA_WITH_AES_128_CBC_SHA, |
2073 | TLS1_CK_ECDH_ECDSA_WITH_AES_128_CBC_SHA, | 2073 | TLS1_CK_ECDH_ECDSA_WITH_AES_128_CBC_SHA, |
2074 | SSL_kECDHe, | 2074 | SSL_kECDHe, |
2075 | SSL_aECDH, | 2075 | SSL_aECDH, |
2076 | SSL_AES128, | 2076 | SSL_AES128, |
2077 | SSL_SHA1, | 2077 | SSL_SHA1, |
2078 | SSL_TLSV1, | 2078 | SSL_TLSV1, |
2079 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2079 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
2080 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2080 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
2081 | 128, | 2081 | 128, |
2082 | 128, | 2082 | 128, |
2083 | }, | 2083 | }, |
2084 | 2084 | ||
2085 | /* Cipher C005 */ | 2085 | /* Cipher C005 */ |
2086 | { | 2086 | { |
2087 | 1, | 2087 | 1, |
2088 | TLS1_TXT_ECDH_ECDSA_WITH_AES_256_CBC_SHA, | 2088 | TLS1_TXT_ECDH_ECDSA_WITH_AES_256_CBC_SHA, |
2089 | TLS1_CK_ECDH_ECDSA_WITH_AES_256_CBC_SHA, | 2089 | TLS1_CK_ECDH_ECDSA_WITH_AES_256_CBC_SHA, |
2090 | SSL_kECDHe, | 2090 | SSL_kECDHe, |
2091 | SSL_aECDH, | 2091 | SSL_aECDH, |
2092 | SSL_AES256, | 2092 | SSL_AES256, |
2093 | SSL_SHA1, | 2093 | SSL_SHA1, |
2094 | SSL_TLSV1, | 2094 | SSL_TLSV1, |
2095 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2095 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
2096 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2096 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
2097 | 256, | 2097 | 256, |
2098 | 256, | 2098 | 256, |
2099 | }, | 2099 | }, |
2100 | 2100 | ||
2101 | /* Cipher C006 */ | 2101 | /* Cipher C006 */ |
2102 | { | 2102 | { |
2103 | 1, | 2103 | 1, |
2104 | TLS1_TXT_ECDHE_ECDSA_WITH_NULL_SHA, | 2104 | TLS1_TXT_ECDHE_ECDSA_WITH_NULL_SHA, |
2105 | TLS1_CK_ECDHE_ECDSA_WITH_NULL_SHA, | 2105 | TLS1_CK_ECDHE_ECDSA_WITH_NULL_SHA, |
2106 | SSL_kEECDH, | 2106 | SSL_kEECDH, |
2107 | SSL_aECDSA, | 2107 | SSL_aECDSA, |
2108 | SSL_eNULL, | 2108 | SSL_eNULL, |
2109 | SSL_SHA1, | 2109 | SSL_SHA1, |
2110 | SSL_TLSV1, | 2110 | SSL_TLSV1, |
2111 | SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS, | 2111 | SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS, |
2112 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2112 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
2113 | 0, | 2113 | 0, |
2114 | 0, | 2114 | 0, |
2115 | }, | 2115 | }, |
2116 | 2116 | ||
2117 | /* Cipher C007 */ | 2117 | /* Cipher C007 */ |
2118 | { | 2118 | { |
2119 | 1, | 2119 | 1, |
2120 | TLS1_TXT_ECDHE_ECDSA_WITH_RC4_128_SHA, | 2120 | TLS1_TXT_ECDHE_ECDSA_WITH_RC4_128_SHA, |
2121 | TLS1_CK_ECDHE_ECDSA_WITH_RC4_128_SHA, | 2121 | TLS1_CK_ECDHE_ECDSA_WITH_RC4_128_SHA, |
2122 | SSL_kEECDH, | 2122 | SSL_kEECDH, |
2123 | SSL_aECDSA, | 2123 | SSL_aECDSA, |
2124 | SSL_RC4, | 2124 | SSL_RC4, |
2125 | SSL_SHA1, | 2125 | SSL_SHA1, |
2126 | SSL_TLSV1, | 2126 | SSL_TLSV1, |
2127 | SSL_NOT_EXP|SSL_MEDIUM, | 2127 | SSL_NOT_EXP|SSL_MEDIUM, |
2128 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2128 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
2129 | 128, | 2129 | 128, |
2130 | 128, | 2130 | 128, |
2131 | }, | 2131 | }, |
2132 | 2132 | ||
2133 | /* Cipher C008 */ | 2133 | /* Cipher C008 */ |
2134 | { | 2134 | { |
2135 | 1, | 2135 | 1, |
2136 | TLS1_TXT_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA, | 2136 | TLS1_TXT_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA, |
2137 | TLS1_CK_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA, | 2137 | TLS1_CK_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA, |
2138 | SSL_kEECDH, | 2138 | SSL_kEECDH, |
2139 | SSL_aECDSA, | 2139 | SSL_aECDSA, |
2140 | SSL_3DES, | 2140 | SSL_3DES, |
2141 | SSL_SHA1, | 2141 | SSL_SHA1, |
2142 | SSL_TLSV1, | 2142 | SSL_TLSV1, |
2143 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2143 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
2144 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2144 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
2145 | 168, | 2145 | 168, |
2146 | 168, | 2146 | 168, |
2147 | }, | 2147 | }, |
2148 | 2148 | ||
2149 | /* Cipher C009 */ | 2149 | /* Cipher C009 */ |
2150 | { | 2150 | { |
2151 | 1, | 2151 | 1, |
2152 | TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, | 2152 | TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, |
2153 | TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, | 2153 | TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, |
2154 | SSL_kEECDH, | 2154 | SSL_kEECDH, |
2155 | SSL_aECDSA, | 2155 | SSL_aECDSA, |
2156 | SSL_AES128, | 2156 | SSL_AES128, |
2157 | SSL_SHA1, | 2157 | SSL_SHA1, |
2158 | SSL_TLSV1, | 2158 | SSL_TLSV1, |
2159 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2159 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
2160 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2160 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
2161 | 128, | 2161 | 128, |
2162 | 128, | 2162 | 128, |
2163 | }, | 2163 | }, |
2164 | 2164 | ||
2165 | /* Cipher C00A */ | 2165 | /* Cipher C00A */ |
2166 | { | 2166 | { |
2167 | 1, | 2167 | 1, |
2168 | TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, | 2168 | TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, |
2169 | TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, | 2169 | TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, |
2170 | SSL_kEECDH, | 2170 | SSL_kEECDH, |
2171 | SSL_aECDSA, | 2171 | SSL_aECDSA, |
2172 | SSL_AES256, | 2172 | SSL_AES256, |
2173 | SSL_SHA1, | 2173 | SSL_SHA1, |
2174 | SSL_TLSV1, | 2174 | SSL_TLSV1, |
2175 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2175 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
2176 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2176 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
2177 | 256, | 2177 | 256, |
2178 | 256, | 2178 | 256, |
2179 | }, | 2179 | }, |
2180 | 2180 | ||
2181 | /* Cipher C00B */ | 2181 | /* Cipher C00B */ |
2182 | { | 2182 | { |
2183 | 1, | 2183 | 1, |
2184 | TLS1_TXT_ECDH_RSA_WITH_NULL_SHA, | 2184 | TLS1_TXT_ECDH_RSA_WITH_NULL_SHA, |
2185 | TLS1_CK_ECDH_RSA_WITH_NULL_SHA, | 2185 | TLS1_CK_ECDH_RSA_WITH_NULL_SHA, |
2186 | SSL_kECDHr, | 2186 | SSL_kECDHr, |
2187 | SSL_aECDH, | 2187 | SSL_aECDH, |
2188 | SSL_eNULL, | 2188 | SSL_eNULL, |
2189 | SSL_SHA1, | 2189 | SSL_SHA1, |
2190 | SSL_TLSV1, | 2190 | SSL_TLSV1, |
2191 | SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS, | 2191 | SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS, |
2192 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2192 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
2193 | 0, | 2193 | 0, |
2194 | 0, | 2194 | 0, |
2195 | }, | 2195 | }, |
2196 | 2196 | ||
2197 | /* Cipher C00C */ | 2197 | /* Cipher C00C */ |
2198 | { | 2198 | { |
2199 | 1, | 2199 | 1, |
2200 | TLS1_TXT_ECDH_RSA_WITH_RC4_128_SHA, | 2200 | TLS1_TXT_ECDH_RSA_WITH_RC4_128_SHA, |
2201 | TLS1_CK_ECDH_RSA_WITH_RC4_128_SHA, | 2201 | TLS1_CK_ECDH_RSA_WITH_RC4_128_SHA, |
2202 | SSL_kECDHr, | 2202 | SSL_kECDHr, |
2203 | SSL_aECDH, | 2203 | SSL_aECDH, |
2204 | SSL_RC4, | 2204 | SSL_RC4, |
2205 | SSL_SHA1, | 2205 | SSL_SHA1, |
2206 | SSL_TLSV1, | 2206 | SSL_TLSV1, |
2207 | SSL_NOT_EXP|SSL_MEDIUM, | 2207 | SSL_NOT_EXP|SSL_MEDIUM, |
2208 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2208 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
2209 | 128, | 2209 | 128, |
2210 | 128, | 2210 | 128, |
2211 | }, | 2211 | }, |
2212 | 2212 | ||
2213 | /* Cipher C00D */ | 2213 | /* Cipher C00D */ |
2214 | { | 2214 | { |
2215 | 1, | 2215 | 1, |
2216 | TLS1_TXT_ECDH_RSA_WITH_DES_192_CBC3_SHA, | 2216 | TLS1_TXT_ECDH_RSA_WITH_DES_192_CBC3_SHA, |
2217 | TLS1_CK_ECDH_RSA_WITH_DES_192_CBC3_SHA, | 2217 | TLS1_CK_ECDH_RSA_WITH_DES_192_CBC3_SHA, |
2218 | SSL_kECDHr, | 2218 | SSL_kECDHr, |
2219 | SSL_aECDH, | 2219 | SSL_aECDH, |
2220 | SSL_3DES, | 2220 | SSL_3DES, |
2221 | SSL_SHA1, | 2221 | SSL_SHA1, |
2222 | SSL_TLSV1, | 2222 | SSL_TLSV1, |
2223 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2223 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
2224 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2224 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
2225 | 168, | 2225 | 168, |
2226 | 168, | 2226 | 168, |
2227 | }, | 2227 | }, |
2228 | 2228 | ||
2229 | /* Cipher C00E */ | 2229 | /* Cipher C00E */ |
2230 | { | 2230 | { |
2231 | 1, | 2231 | 1, |
2232 | TLS1_TXT_ECDH_RSA_WITH_AES_128_CBC_SHA, | 2232 | TLS1_TXT_ECDH_RSA_WITH_AES_128_CBC_SHA, |
2233 | TLS1_CK_ECDH_RSA_WITH_AES_128_CBC_SHA, | 2233 | TLS1_CK_ECDH_RSA_WITH_AES_128_CBC_SHA, |
2234 | SSL_kECDHr, | 2234 | SSL_kECDHr, |
2235 | SSL_aECDH, | 2235 | SSL_aECDH, |
2236 | SSL_AES128, | 2236 | SSL_AES128, |
2237 | SSL_SHA1, | 2237 | SSL_SHA1, |
2238 | SSL_TLSV1, | 2238 | SSL_TLSV1, |
2239 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2239 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
2240 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2240 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
2241 | 128, | 2241 | 128, |
2242 | 128, | 2242 | 128, |
2243 | }, | 2243 | }, |
2244 | 2244 | ||
2245 | /* Cipher C00F */ | 2245 | /* Cipher C00F */ |
2246 | { | 2246 | { |
2247 | 1, | 2247 | 1, |
2248 | TLS1_TXT_ECDH_RSA_WITH_AES_256_CBC_SHA, | 2248 | TLS1_TXT_ECDH_RSA_WITH_AES_256_CBC_SHA, |
2249 | TLS1_CK_ECDH_RSA_WITH_AES_256_CBC_SHA, | 2249 | TLS1_CK_ECDH_RSA_WITH_AES_256_CBC_SHA, |
2250 | SSL_kECDHr, | 2250 | SSL_kECDHr, |
2251 | SSL_aECDH, | 2251 | SSL_aECDH, |
2252 | SSL_AES256, | 2252 | SSL_AES256, |
2253 | SSL_SHA1, | 2253 | SSL_SHA1, |
2254 | SSL_TLSV1, | 2254 | SSL_TLSV1, |
2255 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2255 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
2256 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2256 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
2257 | 256, | 2257 | 256, |
2258 | 256, | 2258 | 256, |
2259 | }, | 2259 | }, |
2260 | 2260 | ||
2261 | /* Cipher C010 */ | 2261 | /* Cipher C010 */ |
2262 | { | 2262 | { |
2263 | 1, | 2263 | 1, |
2264 | TLS1_TXT_ECDHE_RSA_WITH_NULL_SHA, | 2264 | TLS1_TXT_ECDHE_RSA_WITH_NULL_SHA, |
2265 | TLS1_CK_ECDHE_RSA_WITH_NULL_SHA, | 2265 | TLS1_CK_ECDHE_RSA_WITH_NULL_SHA, |
2266 | SSL_kEECDH, | 2266 | SSL_kEECDH, |
2267 | SSL_aRSA, | 2267 | SSL_aRSA, |
2268 | SSL_eNULL, | 2268 | SSL_eNULL, |
2269 | SSL_SHA1, | 2269 | SSL_SHA1, |
2270 | SSL_TLSV1, | 2270 | SSL_TLSV1, |
2271 | SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS, | 2271 | SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS, |
2272 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2272 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
2273 | 0, | 2273 | 0, |
2274 | 0, | 2274 | 0, |
2275 | }, | 2275 | }, |
2276 | 2276 | ||
2277 | /* Cipher C011 */ | 2277 | /* Cipher C011 */ |
2278 | { | 2278 | { |
2279 | 1, | 2279 | 1, |
2280 | TLS1_TXT_ECDHE_RSA_WITH_RC4_128_SHA, | 2280 | TLS1_TXT_ECDHE_RSA_WITH_RC4_128_SHA, |
2281 | TLS1_CK_ECDHE_RSA_WITH_RC4_128_SHA, | 2281 | TLS1_CK_ECDHE_RSA_WITH_RC4_128_SHA, |
2282 | SSL_kEECDH, | 2282 | SSL_kEECDH, |
2283 | SSL_aRSA, | 2283 | SSL_aRSA, |
2284 | SSL_RC4, | 2284 | SSL_RC4, |
2285 | SSL_SHA1, | 2285 | SSL_SHA1, |
2286 | SSL_TLSV1, | 2286 | SSL_TLSV1, |
2287 | SSL_NOT_EXP|SSL_MEDIUM, | 2287 | SSL_NOT_EXP|SSL_MEDIUM, |
2288 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2288 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
2289 | 128, | 2289 | 128, |
2290 | 128, | 2290 | 128, |
2291 | }, | 2291 | }, |
2292 | 2292 | ||
2293 | /* Cipher C012 */ | 2293 | /* Cipher C012 */ |
2294 | { | 2294 | { |
2295 | 1, | 2295 | 1, |
2296 | TLS1_TXT_ECDHE_RSA_WITH_DES_192_CBC3_SHA, | 2296 | TLS1_TXT_ECDHE_RSA_WITH_DES_192_CBC3_SHA, |
2297 | TLS1_CK_ECDHE_RSA_WITH_DES_192_CBC3_SHA, | 2297 | TLS1_CK_ECDHE_RSA_WITH_DES_192_CBC3_SHA, |
2298 | SSL_kEECDH, | 2298 | SSL_kEECDH, |
2299 | SSL_aRSA, | 2299 | SSL_aRSA, |
2300 | SSL_3DES, | 2300 | SSL_3DES, |
2301 | SSL_SHA1, | 2301 | SSL_SHA1, |
2302 | SSL_TLSV1, | 2302 | SSL_TLSV1, |
2303 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2303 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
2304 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2304 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
2305 | 168, | 2305 | 168, |
2306 | 168, | 2306 | 168, |
2307 | }, | 2307 | }, |
2308 | 2308 | ||
2309 | /* Cipher C013 */ | 2309 | /* Cipher C013 */ |
2310 | { | 2310 | { |
2311 | 1, | 2311 | 1, |
2312 | TLS1_TXT_ECDHE_RSA_WITH_AES_128_CBC_SHA, | 2312 | TLS1_TXT_ECDHE_RSA_WITH_AES_128_CBC_SHA, |
2313 | TLS1_CK_ECDHE_RSA_WITH_AES_128_CBC_SHA, | 2313 | TLS1_CK_ECDHE_RSA_WITH_AES_128_CBC_SHA, |
2314 | SSL_kEECDH, | 2314 | SSL_kEECDH, |
2315 | SSL_aRSA, | 2315 | SSL_aRSA, |
2316 | SSL_AES128, | 2316 | SSL_AES128, |
2317 | SSL_SHA1, | 2317 | SSL_SHA1, |
2318 | SSL_TLSV1, | 2318 | SSL_TLSV1, |
2319 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2319 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
2320 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2320 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
2321 | 128, | 2321 | 128, |
2322 | 128, | 2322 | 128, |
2323 | }, | 2323 | }, |
2324 | 2324 | ||
2325 | /* Cipher C014 */ | 2325 | /* Cipher C014 */ |
2326 | { | 2326 | { |
2327 | 1, | 2327 | 1, |
2328 | TLS1_TXT_ECDHE_RSA_WITH_AES_256_CBC_SHA, | 2328 | TLS1_TXT_ECDHE_RSA_WITH_AES_256_CBC_SHA, |
2329 | TLS1_CK_ECDHE_RSA_WITH_AES_256_CBC_SHA, | 2329 | TLS1_CK_ECDHE_RSA_WITH_AES_256_CBC_SHA, |
2330 | SSL_kEECDH, | 2330 | SSL_kEECDH, |
2331 | SSL_aRSA, | 2331 | SSL_aRSA, |
2332 | SSL_AES256, | 2332 | SSL_AES256, |
2333 | SSL_SHA1, | 2333 | SSL_SHA1, |
2334 | SSL_TLSV1, | 2334 | SSL_TLSV1, |
2335 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2335 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
2336 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2336 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
2337 | 256, | 2337 | 256, |
2338 | 256, | 2338 | 256, |
2339 | }, | 2339 | }, |
2340 | 2340 | ||
2341 | /* Cipher C015 */ | 2341 | /* Cipher C015 */ |
2342 | { | 2342 | { |
2343 | 1, | 2343 | 1, |
2344 | TLS1_TXT_ECDH_anon_WITH_NULL_SHA, | 2344 | TLS1_TXT_ECDH_anon_WITH_NULL_SHA, |
2345 | TLS1_CK_ECDH_anon_WITH_NULL_SHA, | 2345 | TLS1_CK_ECDH_anon_WITH_NULL_SHA, |
2346 | SSL_kEECDH, | 2346 | SSL_kEECDH, |
2347 | SSL_aNULL, | 2347 | SSL_aNULL, |
2348 | SSL_eNULL, | 2348 | SSL_eNULL, |
2349 | SSL_SHA1, | 2349 | SSL_SHA1, |
2350 | SSL_TLSV1, | 2350 | SSL_TLSV1, |
2351 | SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS, | 2351 | SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS, |
2352 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2352 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
2353 | 0, | 2353 | 0, |
2354 | 0, | 2354 | 0, |
2355 | }, | 2355 | }, |
2356 | 2356 | ||
2357 | /* Cipher C016 */ | 2357 | /* Cipher C016 */ |
2358 | { | 2358 | { |
2359 | 1, | 2359 | 1, |
2360 | TLS1_TXT_ECDH_anon_WITH_RC4_128_SHA, | 2360 | TLS1_TXT_ECDH_anon_WITH_RC4_128_SHA, |
2361 | TLS1_CK_ECDH_anon_WITH_RC4_128_SHA, | 2361 | TLS1_CK_ECDH_anon_WITH_RC4_128_SHA, |
2362 | SSL_kEECDH, | 2362 | SSL_kEECDH, |
2363 | SSL_aNULL, | 2363 | SSL_aNULL, |
2364 | SSL_RC4, | 2364 | SSL_RC4, |
2365 | SSL_SHA1, | 2365 | SSL_SHA1, |
2366 | SSL_TLSV1, | 2366 | SSL_TLSV1, |
2367 | SSL_NOT_EXP|SSL_MEDIUM, | 2367 | SSL_NOT_EXP|SSL_MEDIUM, |
2368 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2368 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
2369 | 128, | 2369 | 128, |
2370 | 128, | 2370 | 128, |
2371 | }, | 2371 | }, |
2372 | 2372 | ||
2373 | /* Cipher C017 */ | 2373 | /* Cipher C017 */ |
2374 | { | 2374 | { |
2375 | 1, | 2375 | 1, |
2376 | TLS1_TXT_ECDH_anon_WITH_DES_192_CBC3_SHA, | 2376 | TLS1_TXT_ECDH_anon_WITH_DES_192_CBC3_SHA, |
2377 | TLS1_CK_ECDH_anon_WITH_DES_192_CBC3_SHA, | 2377 | TLS1_CK_ECDH_anon_WITH_DES_192_CBC3_SHA, |
2378 | SSL_kEECDH, | 2378 | SSL_kEECDH, |
2379 | SSL_aNULL, | 2379 | SSL_aNULL, |
2380 | SSL_3DES, | 2380 | SSL_3DES, |
2381 | SSL_SHA1, | 2381 | SSL_SHA1, |
2382 | SSL_TLSV1, | 2382 | SSL_TLSV1, |
2383 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2383 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
2384 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2384 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
2385 | 168, | 2385 | 168, |
2386 | 168, | 2386 | 168, |
2387 | }, | 2387 | }, |
2388 | 2388 | ||
2389 | /* Cipher C018 */ | 2389 | /* Cipher C018 */ |
2390 | { | 2390 | { |
2391 | 1, | 2391 | 1, |
2392 | TLS1_TXT_ECDH_anon_WITH_AES_128_CBC_SHA, | 2392 | TLS1_TXT_ECDH_anon_WITH_AES_128_CBC_SHA, |
2393 | TLS1_CK_ECDH_anon_WITH_AES_128_CBC_SHA, | 2393 | TLS1_CK_ECDH_anon_WITH_AES_128_CBC_SHA, |
2394 | SSL_kEECDH, | 2394 | SSL_kEECDH, |
2395 | SSL_aNULL, | 2395 | SSL_aNULL, |
2396 | SSL_AES128, | 2396 | SSL_AES128, |
2397 | SSL_SHA1, | 2397 | SSL_SHA1, |
2398 | SSL_TLSV1, | 2398 | SSL_TLSV1, |
2399 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2399 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
2400 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2400 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
2401 | 128, | 2401 | 128, |
2402 | 128, | 2402 | 128, |
2403 | }, | 2403 | }, |
2404 | 2404 | ||
2405 | /* Cipher C019 */ | 2405 | /* Cipher C019 */ |
2406 | { | 2406 | { |
2407 | 1, | 2407 | 1, |
2408 | TLS1_TXT_ECDH_anon_WITH_AES_256_CBC_SHA, | 2408 | TLS1_TXT_ECDH_anon_WITH_AES_256_CBC_SHA, |
2409 | TLS1_CK_ECDH_anon_WITH_AES_256_CBC_SHA, | 2409 | TLS1_CK_ECDH_anon_WITH_AES_256_CBC_SHA, |
2410 | SSL_kEECDH, | 2410 | SSL_kEECDH, |
2411 | SSL_aNULL, | 2411 | SSL_aNULL, |
2412 | SSL_AES256, | 2412 | SSL_AES256, |
2413 | SSL_SHA1, | 2413 | SSL_SHA1, |
2414 | SSL_TLSV1, | 2414 | SSL_TLSV1, |
2415 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2415 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
2416 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2416 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
2417 | 256, | 2417 | 256, |
2418 | 256, | 2418 | 256, |
2419 | }, | 2419 | }, |
2420 | #endif /* OPENSSL_NO_ECDH */ | 2420 | #endif /* OPENSSL_NO_ECDH */ |
2421 | 2421 | ||
2422 | #ifndef OPENSSL_NO_SRP | 2422 | #ifndef OPENSSL_NO_SRP |
2423 | /* Cipher C01A */ | 2423 | /* Cipher C01A */ |
2424 | { | 2424 | { |
2425 | 1, | 2425 | 1, |
2426 | TLS1_TXT_SRP_SHA_WITH_3DES_EDE_CBC_SHA, | 2426 | TLS1_TXT_SRP_SHA_WITH_3DES_EDE_CBC_SHA, |
2427 | TLS1_CK_SRP_SHA_WITH_3DES_EDE_CBC_SHA, | 2427 | TLS1_CK_SRP_SHA_WITH_3DES_EDE_CBC_SHA, |
2428 | SSL_kSRP, | 2428 | SSL_kSRP, |
2429 | SSL_aNULL, | 2429 | SSL_aNULL, |
2430 | SSL_3DES, | 2430 | SSL_3DES, |
2431 | SSL_SHA1, | 2431 | SSL_SHA1, |
2432 | SSL_TLSV1, | 2432 | SSL_TLSV1, |
2433 | SSL_NOT_EXP|SSL_HIGH, | 2433 | SSL_NOT_EXP|SSL_HIGH, |
2434 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2434 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
2435 | 168, | 2435 | 168, |
2436 | 168, | 2436 | 168, |
2437 | }, | 2437 | }, |
2438 | 2438 | ||
2439 | /* Cipher C01B */ | 2439 | /* Cipher C01B */ |
2440 | { | 2440 | { |
2441 | 1, | 2441 | 1, |
2442 | TLS1_TXT_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA, | 2442 | TLS1_TXT_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA, |
2443 | TLS1_CK_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA, | 2443 | TLS1_CK_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA, |
2444 | SSL_kSRP, | 2444 | SSL_kSRP, |
2445 | SSL_aRSA, | 2445 | SSL_aRSA, |
2446 | SSL_3DES, | 2446 | SSL_3DES, |
2447 | SSL_SHA1, | 2447 | SSL_SHA1, |
2448 | SSL_TLSV1, | 2448 | SSL_TLSV1, |
2449 | SSL_NOT_EXP|SSL_HIGH, | 2449 | SSL_NOT_EXP|SSL_HIGH, |
2450 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2450 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
2451 | 168, | 2451 | 168, |
2452 | 168, | 2452 | 168, |
2453 | }, | 2453 | }, |
2454 | 2454 | ||
2455 | /* Cipher C01C */ | 2455 | /* Cipher C01C */ |
2456 | { | 2456 | { |
2457 | 1, | 2457 | 1, |
2458 | TLS1_TXT_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA, | 2458 | TLS1_TXT_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA, |
2459 | TLS1_CK_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA, | 2459 | TLS1_CK_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA, |
2460 | SSL_kSRP, | 2460 | SSL_kSRP, |
2461 | SSL_aDSS, | 2461 | SSL_aDSS, |
2462 | SSL_3DES, | 2462 | SSL_3DES, |
2463 | SSL_SHA1, | 2463 | SSL_SHA1, |
2464 | SSL_TLSV1, | 2464 | SSL_TLSV1, |
2465 | SSL_NOT_EXP|SSL_HIGH, | 2465 | SSL_NOT_EXP|SSL_HIGH, |
2466 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2466 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
2467 | 168, | 2467 | 168, |
2468 | 168, | 2468 | 168, |
2469 | }, | 2469 | }, |
2470 | 2470 | ||
2471 | /* Cipher C01D */ | 2471 | /* Cipher C01D */ |
2472 | { | 2472 | { |
2473 | 1, | 2473 | 1, |
2474 | TLS1_TXT_SRP_SHA_WITH_AES_128_CBC_SHA, | 2474 | TLS1_TXT_SRP_SHA_WITH_AES_128_CBC_SHA, |
2475 | TLS1_CK_SRP_SHA_WITH_AES_128_CBC_SHA, | 2475 | TLS1_CK_SRP_SHA_WITH_AES_128_CBC_SHA, |
2476 | SSL_kSRP, | 2476 | SSL_kSRP, |
2477 | SSL_aNULL, | 2477 | SSL_aNULL, |
2478 | SSL_AES128, | 2478 | SSL_AES128, |
2479 | SSL_SHA1, | 2479 | SSL_SHA1, |
2480 | SSL_TLSV1, | 2480 | SSL_TLSV1, |
2481 | SSL_NOT_EXP|SSL_HIGH, | 2481 | SSL_NOT_EXP|SSL_HIGH, |
2482 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2482 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
2483 | 128, | 2483 | 128, |
2484 | 128, | 2484 | 128, |
2485 | }, | 2485 | }, |
2486 | 2486 | ||
2487 | /* Cipher C01E */ | 2487 | /* Cipher C01E */ |
2488 | { | 2488 | { |
2489 | 1, | 2489 | 1, |
2490 | TLS1_TXT_SRP_SHA_RSA_WITH_AES_128_CBC_SHA, | 2490 | TLS1_TXT_SRP_SHA_RSA_WITH_AES_128_CBC_SHA, |
2491 | TLS1_CK_SRP_SHA_RSA_WITH_AES_128_CBC_SHA, | 2491 | TLS1_CK_SRP_SHA_RSA_WITH_AES_128_CBC_SHA, |
2492 | SSL_kSRP, | 2492 | SSL_kSRP, |
2493 | SSL_aRSA, | 2493 | SSL_aRSA, |
2494 | SSL_AES128, | 2494 | SSL_AES128, |
2495 | SSL_SHA1, | 2495 | SSL_SHA1, |
2496 | SSL_TLSV1, | 2496 | SSL_TLSV1, |
2497 | SSL_NOT_EXP|SSL_HIGH, | 2497 | SSL_NOT_EXP|SSL_HIGH, |
2498 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2498 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
2499 | 128, | 2499 | 128, |
2500 | 128, | 2500 | 128, |
2501 | }, | 2501 | }, |
2502 | 2502 | ||
2503 | /* Cipher C01F */ | 2503 | /* Cipher C01F */ |
2504 | { | 2504 | { |
2505 | 1, | 2505 | 1, |
2506 | TLS1_TXT_SRP_SHA_DSS_WITH_AES_128_CBC_SHA, | 2506 | TLS1_TXT_SRP_SHA_DSS_WITH_AES_128_CBC_SHA, |
2507 | TLS1_CK_SRP_SHA_DSS_WITH_AES_128_CBC_SHA, | 2507 | TLS1_CK_SRP_SHA_DSS_WITH_AES_128_CBC_SHA, |
2508 | SSL_kSRP, | 2508 | SSL_kSRP, |
2509 | SSL_aDSS, | 2509 | SSL_aDSS, |
2510 | SSL_AES128, | 2510 | SSL_AES128, |
2511 | SSL_SHA1, | 2511 | SSL_SHA1, |
2512 | SSL_TLSV1, | 2512 | SSL_TLSV1, |
2513 | SSL_NOT_EXP|SSL_HIGH, | 2513 | SSL_NOT_EXP|SSL_HIGH, |
2514 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2514 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
2515 | 128, | 2515 | 128, |
2516 | 128, | 2516 | 128, |
2517 | }, | 2517 | }, |
2518 | 2518 | ||
2519 | /* Cipher C020 */ | 2519 | /* Cipher C020 */ |
2520 | { | 2520 | { |
2521 | 1, | 2521 | 1, |
2522 | TLS1_TXT_SRP_SHA_WITH_AES_256_CBC_SHA, | 2522 | TLS1_TXT_SRP_SHA_WITH_AES_256_CBC_SHA, |
2523 | TLS1_CK_SRP_SHA_WITH_AES_256_CBC_SHA, | 2523 | TLS1_CK_SRP_SHA_WITH_AES_256_CBC_SHA, |
2524 | SSL_kSRP, | 2524 | SSL_kSRP, |
2525 | SSL_aNULL, | 2525 | SSL_aNULL, |
2526 | SSL_AES256, | 2526 | SSL_AES256, |
2527 | SSL_SHA1, | 2527 | SSL_SHA1, |
2528 | SSL_TLSV1, | 2528 | SSL_TLSV1, |
2529 | SSL_NOT_EXP|SSL_HIGH, | 2529 | SSL_NOT_EXP|SSL_HIGH, |
2530 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2530 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
2531 | 256, | 2531 | 256, |
2532 | 256, | 2532 | 256, |
2533 | }, | 2533 | }, |
2534 | 2534 | ||
2535 | /* Cipher C021 */ | 2535 | /* Cipher C021 */ |
2536 | { | 2536 | { |
2537 | 1, | 2537 | 1, |
2538 | TLS1_TXT_SRP_SHA_RSA_WITH_AES_256_CBC_SHA, | 2538 | TLS1_TXT_SRP_SHA_RSA_WITH_AES_256_CBC_SHA, |
2539 | TLS1_CK_SRP_SHA_RSA_WITH_AES_256_CBC_SHA, | 2539 | TLS1_CK_SRP_SHA_RSA_WITH_AES_256_CBC_SHA, |
2540 | SSL_kSRP, | 2540 | SSL_kSRP, |
2541 | SSL_aRSA, | 2541 | SSL_aRSA, |
2542 | SSL_AES256, | 2542 | SSL_AES256, |
2543 | SSL_SHA1, | 2543 | SSL_SHA1, |
2544 | SSL_TLSV1, | 2544 | SSL_TLSV1, |
2545 | SSL_NOT_EXP|SSL_HIGH, | 2545 | SSL_NOT_EXP|SSL_HIGH, |
2546 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2546 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
2547 | 256, | 2547 | 256, |
2548 | 256, | 2548 | 256, |
2549 | }, | 2549 | }, |
2550 | 2550 | ||
2551 | /* Cipher C022 */ | 2551 | /* Cipher C022 */ |
2552 | { | 2552 | { |
2553 | 1, | 2553 | 1, |
2554 | TLS1_TXT_SRP_SHA_DSS_WITH_AES_256_CBC_SHA, | 2554 | TLS1_TXT_SRP_SHA_DSS_WITH_AES_256_CBC_SHA, |
2555 | TLS1_CK_SRP_SHA_DSS_WITH_AES_256_CBC_SHA, | 2555 | TLS1_CK_SRP_SHA_DSS_WITH_AES_256_CBC_SHA, |
2556 | SSL_kSRP, | 2556 | SSL_kSRP, |
2557 | SSL_aDSS, | 2557 | SSL_aDSS, |
2558 | SSL_AES256, | 2558 | SSL_AES256, |
2559 | SSL_SHA1, | 2559 | SSL_SHA1, |
2560 | SSL_TLSV1, | 2560 | SSL_TLSV1, |
2561 | SSL_NOT_EXP|SSL_HIGH, | 2561 | SSL_NOT_EXP|SSL_HIGH, |
2562 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2562 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
2563 | 256, | 2563 | 256, |
2564 | 256, | 2564 | 256, |
2565 | }, | 2565 | }, |
2566 | #endif /* OPENSSL_NO_SRP */ | 2566 | #endif /* OPENSSL_NO_SRP */ |
2567 | #ifndef OPENSSL_NO_ECDH | 2567 | #ifndef OPENSSL_NO_ECDH |
@@ -2570,260 +2570,260 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]={ | |||
2570 | 2570 | ||
2571 | /* Cipher C023 */ | 2571 | /* Cipher C023 */ |
2572 | { | 2572 | { |
2573 | 1, | 2573 | 1, |
2574 | TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_SHA256, | 2574 | TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_SHA256, |
2575 | TLS1_CK_ECDHE_ECDSA_WITH_AES_128_SHA256, | 2575 | TLS1_CK_ECDHE_ECDSA_WITH_AES_128_SHA256, |
2576 | SSL_kEECDH, | 2576 | SSL_kEECDH, |
2577 | SSL_aECDSA, | 2577 | SSL_aECDSA, |
2578 | SSL_AES128, | 2578 | SSL_AES128, |
2579 | SSL_SHA256, | 2579 | SSL_SHA256, |
2580 | SSL_TLSV1_2, | 2580 | SSL_TLSV1_2, |
2581 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2581 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
2582 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, | 2582 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, |
2583 | 128, | 2583 | 128, |
2584 | 128, | 2584 | 128, |
2585 | }, | 2585 | }, |
2586 | 2586 | ||
2587 | /* Cipher C024 */ | 2587 | /* Cipher C024 */ |
2588 | { | 2588 | { |
2589 | 1, | 2589 | 1, |
2590 | TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_SHA384, | 2590 | TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_SHA384, |
2591 | TLS1_CK_ECDHE_ECDSA_WITH_AES_256_SHA384, | 2591 | TLS1_CK_ECDHE_ECDSA_WITH_AES_256_SHA384, |
2592 | SSL_kEECDH, | 2592 | SSL_kEECDH, |
2593 | SSL_aECDSA, | 2593 | SSL_aECDSA, |
2594 | SSL_AES256, | 2594 | SSL_AES256, |
2595 | SSL_SHA384, | 2595 | SSL_SHA384, |
2596 | SSL_TLSV1_2, | 2596 | SSL_TLSV1_2, |
2597 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2597 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
2598 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, | 2598 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, |
2599 | 256, | 2599 | 256, |
2600 | 256, | 2600 | 256, |
2601 | }, | 2601 | }, |
2602 | 2602 | ||
2603 | /* Cipher C025 */ | 2603 | /* Cipher C025 */ |
2604 | { | 2604 | { |
2605 | 1, | 2605 | 1, |
2606 | TLS1_TXT_ECDH_ECDSA_WITH_AES_128_SHA256, | 2606 | TLS1_TXT_ECDH_ECDSA_WITH_AES_128_SHA256, |
2607 | TLS1_CK_ECDH_ECDSA_WITH_AES_128_SHA256, | 2607 | TLS1_CK_ECDH_ECDSA_WITH_AES_128_SHA256, |
2608 | SSL_kECDHe, | 2608 | SSL_kECDHe, |
2609 | SSL_aECDH, | 2609 | SSL_aECDH, |
2610 | SSL_AES128, | 2610 | SSL_AES128, |
2611 | SSL_SHA256, | 2611 | SSL_SHA256, |
2612 | SSL_TLSV1_2, | 2612 | SSL_TLSV1_2, |
2613 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2613 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
2614 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, | 2614 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, |
2615 | 128, | 2615 | 128, |
2616 | 128, | 2616 | 128, |
2617 | }, | 2617 | }, |
2618 | 2618 | ||
2619 | /* Cipher C026 */ | 2619 | /* Cipher C026 */ |
2620 | { | 2620 | { |
2621 | 1, | 2621 | 1, |
2622 | TLS1_TXT_ECDH_ECDSA_WITH_AES_256_SHA384, | 2622 | TLS1_TXT_ECDH_ECDSA_WITH_AES_256_SHA384, |
2623 | TLS1_CK_ECDH_ECDSA_WITH_AES_256_SHA384, | 2623 | TLS1_CK_ECDH_ECDSA_WITH_AES_256_SHA384, |
2624 | SSL_kECDHe, | 2624 | SSL_kECDHe, |
2625 | SSL_aECDH, | 2625 | SSL_aECDH, |
2626 | SSL_AES256, | 2626 | SSL_AES256, |
2627 | SSL_SHA384, | 2627 | SSL_SHA384, |
2628 | SSL_TLSV1_2, | 2628 | SSL_TLSV1_2, |
2629 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2629 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
2630 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, | 2630 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, |
2631 | 256, | 2631 | 256, |
2632 | 256, | 2632 | 256, |
2633 | }, | 2633 | }, |
2634 | 2634 | ||
2635 | /* Cipher C027 */ | 2635 | /* Cipher C027 */ |
2636 | { | 2636 | { |
2637 | 1, | 2637 | 1, |
2638 | TLS1_TXT_ECDHE_RSA_WITH_AES_128_SHA256, | 2638 | TLS1_TXT_ECDHE_RSA_WITH_AES_128_SHA256, |
2639 | TLS1_CK_ECDHE_RSA_WITH_AES_128_SHA256, | 2639 | TLS1_CK_ECDHE_RSA_WITH_AES_128_SHA256, |
2640 | SSL_kEECDH, | 2640 | SSL_kEECDH, |
2641 | SSL_aRSA, | 2641 | SSL_aRSA, |
2642 | SSL_AES128, | 2642 | SSL_AES128, |
2643 | SSL_SHA256, | 2643 | SSL_SHA256, |
2644 | SSL_TLSV1_2, | 2644 | SSL_TLSV1_2, |
2645 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2645 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
2646 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, | 2646 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, |
2647 | 128, | 2647 | 128, |
2648 | 128, | 2648 | 128, |
2649 | }, | 2649 | }, |
2650 | 2650 | ||
2651 | /* Cipher C028 */ | 2651 | /* Cipher C028 */ |
2652 | { | 2652 | { |
2653 | 1, | 2653 | 1, |
2654 | TLS1_TXT_ECDHE_RSA_WITH_AES_256_SHA384, | 2654 | TLS1_TXT_ECDHE_RSA_WITH_AES_256_SHA384, |
2655 | TLS1_CK_ECDHE_RSA_WITH_AES_256_SHA384, | 2655 | TLS1_CK_ECDHE_RSA_WITH_AES_256_SHA384, |
2656 | SSL_kEECDH, | 2656 | SSL_kEECDH, |
2657 | SSL_aRSA, | 2657 | SSL_aRSA, |
2658 | SSL_AES256, | 2658 | SSL_AES256, |
2659 | SSL_SHA384, | 2659 | SSL_SHA384, |
2660 | SSL_TLSV1_2, | 2660 | SSL_TLSV1_2, |
2661 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2661 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
2662 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, | 2662 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, |
2663 | 256, | 2663 | 256, |
2664 | 256, | 2664 | 256, |
2665 | }, | 2665 | }, |
2666 | 2666 | ||
2667 | /* Cipher C029 */ | 2667 | /* Cipher C029 */ |
2668 | { | 2668 | { |
2669 | 1, | 2669 | 1, |
2670 | TLS1_TXT_ECDH_RSA_WITH_AES_128_SHA256, | 2670 | TLS1_TXT_ECDH_RSA_WITH_AES_128_SHA256, |
2671 | TLS1_CK_ECDH_RSA_WITH_AES_128_SHA256, | 2671 | TLS1_CK_ECDH_RSA_WITH_AES_128_SHA256, |
2672 | SSL_kECDHr, | 2672 | SSL_kECDHr, |
2673 | SSL_aECDH, | 2673 | SSL_aECDH, |
2674 | SSL_AES128, | 2674 | SSL_AES128, |
2675 | SSL_SHA256, | 2675 | SSL_SHA256, |
2676 | SSL_TLSV1_2, | 2676 | SSL_TLSV1_2, |
2677 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2677 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
2678 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, | 2678 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, |
2679 | 128, | 2679 | 128, |
2680 | 128, | 2680 | 128, |
2681 | }, | 2681 | }, |
2682 | 2682 | ||
2683 | /* Cipher C02A */ | 2683 | /* Cipher C02A */ |
2684 | { | 2684 | { |
2685 | 1, | 2685 | 1, |
2686 | TLS1_TXT_ECDH_RSA_WITH_AES_256_SHA384, | 2686 | TLS1_TXT_ECDH_RSA_WITH_AES_256_SHA384, |
2687 | TLS1_CK_ECDH_RSA_WITH_AES_256_SHA384, | 2687 | TLS1_CK_ECDH_RSA_WITH_AES_256_SHA384, |
2688 | SSL_kECDHr, | 2688 | SSL_kECDHr, |
2689 | SSL_aECDH, | 2689 | SSL_aECDH, |
2690 | SSL_AES256, | 2690 | SSL_AES256, |
2691 | SSL_SHA384, | 2691 | SSL_SHA384, |
2692 | SSL_TLSV1_2, | 2692 | SSL_TLSV1_2, |
2693 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2693 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
2694 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, | 2694 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, |
2695 | 256, | 2695 | 256, |
2696 | 256, | 2696 | 256, |
2697 | }, | 2697 | }, |
2698 | 2698 | ||
2699 | /* GCM based TLS v1.2 ciphersuites from RFC5289 */ | 2699 | /* GCM based TLS v1.2 ciphersuites from RFC5289 */ |
2700 | 2700 | ||
2701 | /* Cipher C02B */ | 2701 | /* Cipher C02B */ |
2702 | { | 2702 | { |
2703 | 1, | 2703 | 1, |
2704 | TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, | 2704 | TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, |
2705 | TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, | 2705 | TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, |
2706 | SSL_kEECDH, | 2706 | SSL_kEECDH, |
2707 | SSL_aECDSA, | 2707 | SSL_aECDSA, |
2708 | SSL_AES128GCM, | 2708 | SSL_AES128GCM, |
2709 | SSL_AEAD, | 2709 | SSL_AEAD, |
2710 | SSL_TLSV1_2, | 2710 | SSL_TLSV1_2, |
2711 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2711 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
2712 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, | 2712 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, |
2713 | 128, | 2713 | 128, |
2714 | 128, | 2714 | 128, |
2715 | }, | 2715 | }, |
2716 | 2716 | ||
2717 | /* Cipher C02C */ | 2717 | /* Cipher C02C */ |
2718 | { | 2718 | { |
2719 | 1, | 2719 | 1, |
2720 | TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, | 2720 | TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, |
2721 | TLS1_CK_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, | 2721 | TLS1_CK_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, |
2722 | SSL_kEECDH, | 2722 | SSL_kEECDH, |
2723 | SSL_aECDSA, | 2723 | SSL_aECDSA, |
2724 | SSL_AES256GCM, | 2724 | SSL_AES256GCM, |
2725 | SSL_AEAD, | 2725 | SSL_AEAD, |
2726 | SSL_TLSV1_2, | 2726 | SSL_TLSV1_2, |
2727 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2727 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
2728 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, | 2728 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, |
2729 | 256, | 2729 | 256, |
2730 | 256, | 2730 | 256, |
2731 | }, | 2731 | }, |
2732 | 2732 | ||
2733 | /* Cipher C02D */ | 2733 | /* Cipher C02D */ |
2734 | { | 2734 | { |
2735 | 1, | 2735 | 1, |
2736 | TLS1_TXT_ECDH_ECDSA_WITH_AES_128_GCM_SHA256, | 2736 | TLS1_TXT_ECDH_ECDSA_WITH_AES_128_GCM_SHA256, |
2737 | TLS1_CK_ECDH_ECDSA_WITH_AES_128_GCM_SHA256, | 2737 | TLS1_CK_ECDH_ECDSA_WITH_AES_128_GCM_SHA256, |
2738 | SSL_kECDHe, | 2738 | SSL_kECDHe, |
2739 | SSL_aECDH, | 2739 | SSL_aECDH, |
2740 | SSL_AES128GCM, | 2740 | SSL_AES128GCM, |
2741 | SSL_AEAD, | 2741 | SSL_AEAD, |
2742 | SSL_TLSV1_2, | 2742 | SSL_TLSV1_2, |
2743 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2743 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
2744 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, | 2744 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, |
2745 | 128, | 2745 | 128, |
2746 | 128, | 2746 | 128, |
2747 | }, | 2747 | }, |
2748 | 2748 | ||
2749 | /* Cipher C02E */ | 2749 | /* Cipher C02E */ |
2750 | { | 2750 | { |
2751 | 1, | 2751 | 1, |
2752 | TLS1_TXT_ECDH_ECDSA_WITH_AES_256_GCM_SHA384, | 2752 | TLS1_TXT_ECDH_ECDSA_WITH_AES_256_GCM_SHA384, |
2753 | TLS1_CK_ECDH_ECDSA_WITH_AES_256_GCM_SHA384, | 2753 | TLS1_CK_ECDH_ECDSA_WITH_AES_256_GCM_SHA384, |
2754 | SSL_kECDHe, | 2754 | SSL_kECDHe, |
2755 | SSL_aECDH, | 2755 | SSL_aECDH, |
2756 | SSL_AES256GCM, | 2756 | SSL_AES256GCM, |
2757 | SSL_AEAD, | 2757 | SSL_AEAD, |
2758 | SSL_TLSV1_2, | 2758 | SSL_TLSV1_2, |
2759 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2759 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
2760 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, | 2760 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, |
2761 | 256, | 2761 | 256, |
2762 | 256, | 2762 | 256, |
2763 | }, | 2763 | }, |
2764 | 2764 | ||
2765 | /* Cipher C02F */ | 2765 | /* Cipher C02F */ |
2766 | { | 2766 | { |
2767 | 1, | 2767 | 1, |
2768 | TLS1_TXT_ECDHE_RSA_WITH_AES_128_GCM_SHA256, | 2768 | TLS1_TXT_ECDHE_RSA_WITH_AES_128_GCM_SHA256, |
2769 | TLS1_CK_ECDHE_RSA_WITH_AES_128_GCM_SHA256, | 2769 | TLS1_CK_ECDHE_RSA_WITH_AES_128_GCM_SHA256, |
2770 | SSL_kEECDH, | 2770 | SSL_kEECDH, |
2771 | SSL_aRSA, | 2771 | SSL_aRSA, |
2772 | SSL_AES128GCM, | 2772 | SSL_AES128GCM, |
2773 | SSL_AEAD, | 2773 | SSL_AEAD, |
2774 | SSL_TLSV1_2, | 2774 | SSL_TLSV1_2, |
2775 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2775 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
2776 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, | 2776 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, |
2777 | 128, | 2777 | 128, |
2778 | 128, | 2778 | 128, |
2779 | }, | 2779 | }, |
2780 | 2780 | ||
2781 | /* Cipher C030 */ | 2781 | /* Cipher C030 */ |
2782 | { | 2782 | { |
2783 | 1, | 2783 | 1, |
2784 | TLS1_TXT_ECDHE_RSA_WITH_AES_256_GCM_SHA384, | 2784 | TLS1_TXT_ECDHE_RSA_WITH_AES_256_GCM_SHA384, |
2785 | TLS1_CK_ECDHE_RSA_WITH_AES_256_GCM_SHA384, | 2785 | TLS1_CK_ECDHE_RSA_WITH_AES_256_GCM_SHA384, |
2786 | SSL_kEECDH, | 2786 | SSL_kEECDH, |
2787 | SSL_aRSA, | 2787 | SSL_aRSA, |
2788 | SSL_AES256GCM, | 2788 | SSL_AES256GCM, |
2789 | SSL_AEAD, | 2789 | SSL_AEAD, |
2790 | SSL_TLSV1_2, | 2790 | SSL_TLSV1_2, |
2791 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2791 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
2792 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, | 2792 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, |
2793 | 256, | 2793 | 256, |
2794 | 256, | 2794 | 256, |
2795 | }, | 2795 | }, |
2796 | 2796 | ||
2797 | /* Cipher C031 */ | 2797 | /* Cipher C031 */ |
2798 | { | 2798 | { |
2799 | 1, | 2799 | 1, |
2800 | TLS1_TXT_ECDH_RSA_WITH_AES_128_GCM_SHA256, | 2800 | TLS1_TXT_ECDH_RSA_WITH_AES_128_GCM_SHA256, |
2801 | TLS1_CK_ECDH_RSA_WITH_AES_128_GCM_SHA256, | 2801 | TLS1_CK_ECDH_RSA_WITH_AES_128_GCM_SHA256, |
2802 | SSL_kECDHr, | 2802 | SSL_kECDHr, |
2803 | SSL_aECDH, | 2803 | SSL_aECDH, |
2804 | SSL_AES128GCM, | 2804 | SSL_AES128GCM, |
2805 | SSL_AEAD, | 2805 | SSL_AEAD, |
2806 | SSL_TLSV1_2, | 2806 | SSL_TLSV1_2, |
2807 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2807 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
2808 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, | 2808 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, |
2809 | 128, | 2809 | 128, |
2810 | 128, | 2810 | 128, |
2811 | }, | 2811 | }, |
2812 | 2812 | ||
2813 | /* Cipher C032 */ | 2813 | /* Cipher C032 */ |
2814 | { | 2814 | { |
2815 | 1, | 2815 | 1, |
2816 | TLS1_TXT_ECDH_RSA_WITH_AES_256_GCM_SHA384, | 2816 | TLS1_TXT_ECDH_RSA_WITH_AES_256_GCM_SHA384, |
2817 | TLS1_CK_ECDH_RSA_WITH_AES_256_GCM_SHA384, | 2817 | TLS1_CK_ECDH_RSA_WITH_AES_256_GCM_SHA384, |
2818 | SSL_kECDHr, | 2818 | SSL_kECDHr, |
2819 | SSL_aECDH, | 2819 | SSL_aECDH, |
2820 | SSL_AES256GCM, | 2820 | SSL_AES256GCM, |
2821 | SSL_AEAD, | 2821 | SSL_AEAD, |
2822 | SSL_TLSV1_2, | 2822 | SSL_TLSV1_2, |
2823 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2823 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
2824 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, | 2824 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, |
2825 | 256, | 2825 | 256, |
2826 | 256, | 2826 | 256, |
2827 | }, | 2827 | }, |
2828 | 2828 | ||
2829 | #endif /* OPENSSL_NO_ECDH */ | 2829 | #endif /* OPENSSL_NO_ECDH */ |
@@ -2832,135 +2832,141 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]={ | |||
2832 | #ifdef TEMP_GOST_TLS | 2832 | #ifdef TEMP_GOST_TLS |
2833 | /* Cipher FF00 */ | 2833 | /* Cipher FF00 */ |
2834 | { | 2834 | { |
2835 | 1, | 2835 | 1, |
2836 | "GOST-MD5", | 2836 | "GOST-MD5", |
2837 | 0x0300ff00, | 2837 | 0x0300ff00, |
2838 | SSL_kRSA, | 2838 | SSL_kRSA, |
2839 | SSL_aRSA, | 2839 | SSL_aRSA, |
2840 | SSL_eGOST2814789CNT, | 2840 | SSL_eGOST2814789CNT, |
2841 | SSL_MD5, | 2841 | SSL_MD5, |
2842 | SSL_TLSV1, | 2842 | SSL_TLSV1, |
2843 | SSL_NOT_EXP|SSL_HIGH, | 2843 | SSL_NOT_EXP|SSL_HIGH, |
2844 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2844 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
2845 | 256, | 2845 | 256, |
2846 | 256, | 2846 | 256, |
2847 | }, | 2847 | }, |
2848 | { | 2848 | { |
2849 | 1, | 2849 | 1, |
2850 | "GOST-GOST94", | 2850 | "GOST-GOST94", |
2851 | 0x0300ff01, | 2851 | 0x0300ff01, |
2852 | SSL_kRSA, | 2852 | SSL_kRSA, |
2853 | SSL_aRSA, | 2853 | SSL_aRSA, |
2854 | SSL_eGOST2814789CNT, | 2854 | SSL_eGOST2814789CNT, |
2855 | SSL_GOST94, | 2855 | SSL_GOST94, |
2856 | SSL_TLSV1, | 2856 | SSL_TLSV1, |
2857 | SSL_NOT_EXP|SSL_HIGH, | 2857 | SSL_NOT_EXP|SSL_HIGH, |
2858 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2858 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
2859 | 256, | 2859 | 256, |
2860 | 256 | 2860 | 256 |
2861 | }, | 2861 | }, |
2862 | { | 2862 | { |
2863 | 1, | 2863 | 1, |
2864 | "GOST-GOST89MAC", | 2864 | "GOST-GOST89MAC", |
2865 | 0x0300ff02, | 2865 | 0x0300ff02, |
2866 | SSL_kRSA, | 2866 | SSL_kRSA, |
2867 | SSL_aRSA, | 2867 | SSL_aRSA, |
2868 | SSL_eGOST2814789CNT, | 2868 | SSL_eGOST2814789CNT, |
2869 | SSL_GOST89MAC, | 2869 | SSL_GOST89MAC, |
2870 | SSL_TLSV1, | 2870 | SSL_TLSV1, |
2871 | SSL_NOT_EXP|SSL_HIGH, | 2871 | SSL_NOT_EXP|SSL_HIGH, |
2872 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2872 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
2873 | 256, | 2873 | 256, |
2874 | 256 | 2874 | 256 |
2875 | }, | 2875 | }, |
2876 | { | 2876 | { |
2877 | 1, | 2877 | 1, |
2878 | "GOST-GOST89STREAM", | 2878 | "GOST-GOST89STREAM", |
2879 | 0x0300ff03, | 2879 | 0x0300ff03, |
2880 | SSL_kRSA, | 2880 | SSL_kRSA, |
2881 | SSL_aRSA, | 2881 | SSL_aRSA, |
2882 | SSL_eGOST2814789CNT, | 2882 | SSL_eGOST2814789CNT, |
2883 | SSL_GOST89MAC, | 2883 | SSL_GOST89MAC, |
2884 | SSL_TLSV1, | 2884 | SSL_TLSV1, |
2885 | SSL_NOT_EXP|SSL_HIGH, | 2885 | SSL_NOT_EXP|SSL_HIGH, |
2886 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF|TLS1_STREAM_MAC, | 2886 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF|TLS1_STREAM_MAC, |
2887 | 256, | 2887 | 256, |
2888 | 256 | 2888 | 256 |
2889 | }, | 2889 | }, |
2890 | #endif | 2890 | #endif |
2891 | 2891 | ||
2892 | /* end of list */ | 2892 | /* end of list */ |
2893 | }; | 2893 | }; |
2894 | 2894 | ||
2895 | SSL3_ENC_METHOD SSLv3_enc_data={ | 2895 | SSL3_ENC_METHOD SSLv3_enc_data = { |
2896 | ssl3_enc, | 2896 | ssl3_enc, |
2897 | n_ssl3_mac, | 2897 | n_ssl3_mac, |
2898 | ssl3_setup_key_block, | 2898 | ssl3_setup_key_block, |
2899 | ssl3_generate_master_secret, | 2899 | ssl3_generate_master_secret, |
2900 | ssl3_change_cipher_state, | 2900 | ssl3_change_cipher_state, |
2901 | ssl3_final_finish_mac, | 2901 | ssl3_final_finish_mac, |
2902 | MD5_DIGEST_LENGTH+SHA_DIGEST_LENGTH, | 2902 | MD5_DIGEST_LENGTH + SHA_DIGEST_LENGTH, |
2903 | ssl3_cert_verify_mac, | 2903 | ssl3_cert_verify_mac, |
2904 | SSL3_MD_CLIENT_FINISHED_CONST,4, | 2904 | SSL3_MD_CLIENT_FINISHED_CONST, 4, |
2905 | SSL3_MD_SERVER_FINISHED_CONST,4, | 2905 | SSL3_MD_SERVER_FINISHED_CONST, 4, |
2906 | ssl3_alert_code, | 2906 | ssl3_alert_code, |
2907 | (int (*)(SSL *, unsigned char *, size_t, const char *, | 2907 | (int (*)(SSL *, unsigned char *, size_t, const char *, |
2908 | size_t, const unsigned char *, size_t, | 2908 | size_t, const unsigned char *, size_t, |
2909 | int use_context))ssl_undefined_function, | 2909 | int use_context))ssl_undefined_function, |
2910 | }; | 2910 | }; |
2911 | 2911 | ||
2912 | long ssl3_default_timeout(void) | 2912 | long |
2913 | { | 2913 | ssl3_default_timeout(void) |
2914 | { | ||
2914 | /* 2 hours, the 24 hours mentioned in the SSLv3 spec | 2915 | /* 2 hours, the 24 hours mentioned in the SSLv3 spec |
2915 | * is way too long for http, the cache would over fill */ | 2916 | * is way too long for http, the cache would over fill */ |
2916 | return(60*60*2); | 2917 | return (60*60*2); |
2917 | } | 2918 | } |
2918 | 2919 | ||
2919 | int ssl3_num_ciphers(void) | 2920 | int |
2920 | { | 2921 | ssl3_num_ciphers(void) |
2921 | return(SSL3_NUM_CIPHERS); | 2922 | { |
2922 | } | 2923 | return (SSL3_NUM_CIPHERS); |
2923 | 2924 | } | |
2924 | const SSL_CIPHER *ssl3_get_cipher(unsigned int u) | 2925 | |
2925 | { | 2926 | const SSL_CIPHER |
2927 | *ssl3_get_cipher(unsigned int u) | ||
2928 | { | ||
2926 | if (u < SSL3_NUM_CIPHERS) | 2929 | if (u < SSL3_NUM_CIPHERS) |
2927 | return(&(ssl3_ciphers[SSL3_NUM_CIPHERS-1-u])); | 2930 | return (&(ssl3_ciphers[SSL3_NUM_CIPHERS - 1 - u])); |
2928 | else | 2931 | else |
2929 | return(NULL); | 2932 | return (NULL); |
2930 | } | 2933 | } |
2931 | 2934 | ||
2932 | int ssl3_pending(const SSL *s) | 2935 | int |
2933 | { | 2936 | ssl3_pending(const SSL *s) |
2937 | { | ||
2934 | if (s->rstate == SSL_ST_READ_BODY) | 2938 | if (s->rstate == SSL_ST_READ_BODY) |
2935 | return 0; | 2939 | return 0; |
2936 | 2940 | ||
2937 | return (s->s3->rrec.type == SSL3_RT_APPLICATION_DATA) ? s->s3->rrec.length : 0; | 2941 | return (s->s3->rrec.type == SSL3_RT_APPLICATION_DATA) ? s->s3->rrec.length : 0; |
2938 | } | 2942 | } |
2939 | 2943 | ||
2940 | int ssl3_new(SSL *s) | 2944 | int |
2941 | { | 2945 | ssl3_new(SSL *s) |
2946 | { | ||
2942 | SSL3_STATE *s3; | 2947 | SSL3_STATE *s3; |
2943 | 2948 | ||
2944 | if ((s3=OPENSSL_malloc(sizeof *s3)) == NULL) goto err; | 2949 | if ((s3 = OPENSSL_malloc(sizeof *s3)) == NULL) goto err; |
2945 | memset(s3,0,sizeof *s3); | 2950 | memset(s3, 0, sizeof *s3); |
2946 | memset(s3->rrec.seq_num,0,sizeof(s3->rrec.seq_num)); | 2951 | memset(s3->rrec.seq_num, 0, sizeof(s3->rrec.seq_num)); |
2947 | memset(s3->wrec.seq_num,0,sizeof(s3->wrec.seq_num)); | 2952 | memset(s3->wrec.seq_num, 0, sizeof(s3->wrec.seq_num)); |
2948 | 2953 | ||
2949 | s->s3=s3; | 2954 | s->s3 = s3; |
2950 | 2955 | ||
2951 | #ifndef OPENSSL_NO_SRP | 2956 | #ifndef OPENSSL_NO_SRP |
2952 | SSL_SRP_CTX_init(s); | 2957 | SSL_SRP_CTX_init(s); |
2953 | #endif | 2958 | #endif |
2954 | s->method->ssl_clear(s); | 2959 | s->method->ssl_clear(s); |
2955 | return(1); | 2960 | return (1); |
2956 | err: | 2961 | err: |
2957 | return(0); | 2962 | return (0); |
2958 | } | 2963 | } |
2959 | 2964 | ||
2960 | void ssl3_free(SSL *s) | 2965 | void |
2961 | { | 2966 | ssl3_free(SSL *s) |
2962 | if(s == NULL) | 2967 | { |
2963 | return; | 2968 | if (s == NULL) |
2969 | return; | ||
2964 | 2970 | ||
2965 | #ifdef TLSEXT_TYPE_opaque_prf_input | 2971 | #ifdef TLSEXT_TYPE_opaque_prf_input |
2966 | if (s->s3->client_opaque_prf_input != NULL) | 2972 | if (s->s3->client_opaque_prf_input != NULL) |
@@ -2986,22 +2992,24 @@ void ssl3_free(SSL *s) | |||
2986 | #endif | 2992 | #endif |
2987 | 2993 | ||
2988 | if (s->s3->tmp.ca_names != NULL) | 2994 | if (s->s3->tmp.ca_names != NULL) |
2989 | sk_X509_NAME_pop_free(s->s3->tmp.ca_names,X509_NAME_free); | 2995 | sk_X509_NAME_pop_free(s->s3->tmp.ca_names, X509_NAME_free); |
2990 | if (s->s3->handshake_buffer) { | 2996 | if (s->s3->handshake_buffer) { |
2991 | BIO_free(s->s3->handshake_buffer); | 2997 | BIO_free(s->s3->handshake_buffer); |
2992 | } | 2998 | } |
2993 | if (s->s3->handshake_dgst) ssl3_free_digest_list(s); | 2999 | if (s->s3->handshake_dgst) |
3000 | ssl3_free_digest_list(s); | ||
2994 | #ifndef OPENSSL_NO_SRP | 3001 | #ifndef OPENSSL_NO_SRP |
2995 | SSL_SRP_CTX_free(s); | 3002 | SSL_SRP_CTX_free(s); |
2996 | #endif | 3003 | #endif |
2997 | OPENSSL_cleanse(s->s3,sizeof *s->s3); | 3004 | OPENSSL_cleanse(s->s3, sizeof *s->s3); |
2998 | OPENSSL_free(s->s3); | 3005 | OPENSSL_free(s->s3); |
2999 | s->s3=NULL; | 3006 | s->s3 = NULL; |
3000 | } | 3007 | } |
3001 | 3008 | ||
3002 | void ssl3_clear(SSL *s) | 3009 | void |
3003 | { | 3010 | ssl3_clear(SSL *s) |
3004 | unsigned char *rp,*wp; | 3011 | { |
3012 | unsigned char *rp, *wp; | ||
3005 | size_t rlen, wlen; | 3013 | size_t rlen, wlen; |
3006 | int init_extra; | 3014 | int init_extra; |
3007 | 3015 | ||
@@ -3016,26 +3024,23 @@ void ssl3_clear(SSL *s) | |||
3016 | 3024 | ||
3017 | ssl3_cleanup_key_block(s); | 3025 | ssl3_cleanup_key_block(s); |
3018 | if (s->s3->tmp.ca_names != NULL) | 3026 | if (s->s3->tmp.ca_names != NULL) |
3019 | sk_X509_NAME_pop_free(s->s3->tmp.ca_names,X509_NAME_free); | 3027 | sk_X509_NAME_pop_free(s->s3->tmp.ca_names, X509_NAME_free); |
3020 | 3028 | ||
3021 | if (s->s3->rrec.comp != NULL) | 3029 | if (s->s3->rrec.comp != NULL) { |
3022 | { | ||
3023 | OPENSSL_free(s->s3->rrec.comp); | 3030 | OPENSSL_free(s->s3->rrec.comp); |
3024 | s->s3->rrec.comp=NULL; | 3031 | s->s3->rrec.comp = NULL; |
3025 | } | 3032 | } |
3026 | #ifndef OPENSSL_NO_DH | 3033 | #ifndef OPENSSL_NO_DH |
3027 | if (s->s3->tmp.dh != NULL) | 3034 | if (s->s3->tmp.dh != NULL) { |
3028 | { | ||
3029 | DH_free(s->s3->tmp.dh); | 3035 | DH_free(s->s3->tmp.dh); |
3030 | s->s3->tmp.dh = NULL; | 3036 | s->s3->tmp.dh = NULL; |
3031 | } | 3037 | } |
3032 | #endif | 3038 | #endif |
3033 | #ifndef OPENSSL_NO_ECDH | 3039 | #ifndef OPENSSL_NO_ECDH |
3034 | if (s->s3->tmp.ecdh != NULL) | 3040 | if (s->s3->tmp.ecdh != NULL) { |
3035 | { | ||
3036 | EC_KEY_free(s->s3->tmp.ecdh); | 3041 | EC_KEY_free(s->s3->tmp.ecdh); |
3037 | s->s3->tmp.ecdh = NULL; | 3042 | s->s3->tmp.ecdh = NULL; |
3038 | } | 3043 | } |
3039 | #endif | 3044 | #endif |
3040 | #ifndef OPENSSL_NO_TLSEXT | 3045 | #ifndef OPENSSL_NO_TLSEXT |
3041 | #ifndef OPENSSL_NO_EC | 3046 | #ifndef OPENSSL_NO_EC |
@@ -3046,7 +3051,7 @@ void ssl3_clear(SSL *s) | |||
3046 | rp = s->s3->rbuf.buf; | 3051 | rp = s->s3->rbuf.buf; |
3047 | wp = s->s3->wbuf.buf; | 3052 | wp = s->s3->wbuf.buf; |
3048 | rlen = s->s3->rbuf.len; | 3053 | rlen = s->s3->rbuf.len; |
3049 | wlen = s->s3->wbuf.len; | 3054 | wlen = s->s3->wbuf.len; |
3050 | init_extra = s->s3->init_extra; | 3055 | init_extra = s->s3->init_extra; |
3051 | if (s->s3->handshake_buffer) { | 3056 | if (s->s3->handshake_buffer) { |
3052 | BIO_free(s->s3->handshake_buffer); | 3057 | BIO_free(s->s3->handshake_buffer); |
@@ -3054,104 +3059,100 @@ void ssl3_clear(SSL *s) | |||
3054 | } | 3059 | } |
3055 | if (s->s3->handshake_dgst) { | 3060 | if (s->s3->handshake_dgst) { |
3056 | ssl3_free_digest_list(s); | 3061 | ssl3_free_digest_list(s); |
3057 | } | 3062 | } |
3058 | memset(s->s3,0,sizeof *s->s3); | 3063 | memset(s->s3, 0, sizeof *s->s3); |
3059 | s->s3->rbuf.buf = rp; | 3064 | s->s3->rbuf.buf = rp; |
3060 | s->s3->wbuf.buf = wp; | 3065 | s->s3->wbuf.buf = wp; |
3061 | s->s3->rbuf.len = rlen; | 3066 | s->s3->rbuf.len = rlen; |
3062 | s->s3->wbuf.len = wlen; | 3067 | s->s3->wbuf.len = wlen; |
3063 | s->s3->init_extra = init_extra; | 3068 | s->s3->init_extra = init_extra; |
3064 | 3069 | ||
3065 | ssl_free_wbio_buffer(s); | 3070 | ssl_free_wbio_buffer(s); |
3066 | 3071 | ||
3067 | s->packet_length=0; | 3072 | s->packet_length = 0; |
3068 | s->s3->renegotiate=0; | 3073 | s->s3->renegotiate = 0; |
3069 | s->s3->total_renegotiations=0; | 3074 | s->s3->total_renegotiations = 0; |
3070 | s->s3->num_renegotiations=0; | 3075 | s->s3->num_renegotiations = 0; |
3071 | s->s3->in_read_app_data=0; | 3076 | s->s3->in_read_app_data = 0; |
3072 | s->version=SSL3_VERSION; | 3077 | s->version = SSL3_VERSION; |
3073 | 3078 | ||
3074 | #if !defined(OPENSSL_NO_TLSEXT) && !defined(OPENSSL_NO_NEXTPROTONEG) | 3079 | #if !defined(OPENSSL_NO_TLSEXT) && !defined(OPENSSL_NO_NEXTPROTONEG) |
3075 | if (s->next_proto_negotiated) | 3080 | if (s->next_proto_negotiated) { |
3076 | { | ||
3077 | OPENSSL_free(s->next_proto_negotiated); | 3081 | OPENSSL_free(s->next_proto_negotiated); |
3078 | s->next_proto_negotiated = NULL; | 3082 | s->next_proto_negotiated = NULL; |
3079 | s->next_proto_negotiated_len = 0; | 3083 | s->next_proto_negotiated_len = 0; |
3080 | } | ||
3081 | #endif | ||
3082 | } | 3084 | } |
3085 | #endif | ||
3086 | } | ||
3083 | 3087 | ||
3084 | #ifndef OPENSSL_NO_SRP | 3088 | #ifndef OPENSSL_NO_SRP |
3085 | static char * srp_password_from_info_cb(SSL *s, void *arg) | 3089 | static char * |
3086 | { | 3090 | srp_password_from_info_cb(SSL *s, void *arg) |
3087 | return BUF_strdup(s->srp_ctx.info) ; | 3091 | { |
3088 | } | 3092 | return BUF_strdup(s->srp_ctx.info); |
3093 | } | ||
3089 | #endif | 3094 | #endif |
3090 | 3095 | ||
3091 | long ssl3_ctrl(SSL *s, int cmd, long larg, void *parg) | 3096 | long |
3092 | { | 3097 | ssl3_ctrl(SSL *s, int cmd, long larg, void *parg) |
3093 | int ret=0; | 3098 | { |
3099 | int ret = 0; | ||
3094 | 3100 | ||
3095 | #if !defined(OPENSSL_NO_DSA) || !defined(OPENSSL_NO_RSA) | 3101 | #if !defined(OPENSSL_NO_DSA) || !defined(OPENSSL_NO_RSA) |
3096 | if ( | 3102 | if ( |
3097 | #ifndef OPENSSL_NO_RSA | 3103 | #ifndef OPENSSL_NO_RSA |
3098 | cmd == SSL_CTRL_SET_TMP_RSA || | 3104 | cmd == SSL_CTRL_SET_TMP_RSA || |
3099 | cmd == SSL_CTRL_SET_TMP_RSA_CB || | 3105 | cmd == SSL_CTRL_SET_TMP_RSA_CB || |
3100 | #endif | 3106 | #endif |
3101 | #ifndef OPENSSL_NO_DSA | 3107 | #ifndef OPENSSL_NO_DSA |
3102 | cmd == SSL_CTRL_SET_TMP_DH || | 3108 | cmd == SSL_CTRL_SET_TMP_DH || |
3103 | cmd == SSL_CTRL_SET_TMP_DH_CB || | 3109 | cmd == SSL_CTRL_SET_TMP_DH_CB || |
3104 | #endif | 3110 | #endif |
3105 | 0) | 3111 | 0) { |
3106 | { | 3112 | if (!ssl_cert_inst(&s->cert)) { |
3107 | if (!ssl_cert_inst(&s->cert)) | ||
3108 | { | ||
3109 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_MALLOC_FAILURE); | 3113 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_MALLOC_FAILURE); |
3110 | return(0); | 3114 | return (0); |
3111 | } | ||
3112 | } | 3115 | } |
3116 | } | ||
3113 | #endif | 3117 | #endif |
3114 | 3118 | ||
3115 | switch (cmd) | 3119 | switch (cmd) { |
3116 | { | ||
3117 | case SSL_CTRL_GET_SESSION_REUSED: | 3120 | case SSL_CTRL_GET_SESSION_REUSED: |
3118 | ret=s->hit; | 3121 | ret = s->hit; |
3119 | break; | 3122 | break; |
3120 | case SSL_CTRL_GET_CLIENT_CERT_REQUEST: | 3123 | case SSL_CTRL_GET_CLIENT_CERT_REQUEST: |
3121 | break; | 3124 | break; |
3122 | case SSL_CTRL_GET_NUM_RENEGOTIATIONS: | 3125 | case SSL_CTRL_GET_NUM_RENEGOTIATIONS: |
3123 | ret=s->s3->num_renegotiations; | 3126 | ret = s->s3->num_renegotiations; |
3124 | break; | 3127 | break; |
3125 | case SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS: | 3128 | case SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS: |
3126 | ret=s->s3->num_renegotiations; | 3129 | ret = s->s3->num_renegotiations; |
3127 | s->s3->num_renegotiations=0; | 3130 | s->s3->num_renegotiations = 0; |
3128 | break; | 3131 | break; |
3129 | case SSL_CTRL_GET_TOTAL_RENEGOTIATIONS: | 3132 | case SSL_CTRL_GET_TOTAL_RENEGOTIATIONS: |
3130 | ret=s->s3->total_renegotiations; | 3133 | ret = s->s3->total_renegotiations; |
3131 | break; | 3134 | break; |
3132 | case SSL_CTRL_GET_FLAGS: | 3135 | case SSL_CTRL_GET_FLAGS: |
3133 | ret=(int)(s->s3->flags); | 3136 | ret = (int)(s->s3->flags); |
3134 | break; | 3137 | break; |
3135 | #ifndef OPENSSL_NO_RSA | 3138 | #ifndef OPENSSL_NO_RSA |
3136 | case SSL_CTRL_NEED_TMP_RSA: | 3139 | case SSL_CTRL_NEED_TMP_RSA: |
3137 | if ((s->cert != NULL) && (s->cert->rsa_tmp == NULL) && | 3140 | if ((s->cert != NULL) && (s->cert->rsa_tmp == NULL) && |
3138 | ((s->cert->pkeys[SSL_PKEY_RSA_ENC].privatekey == NULL) || | 3141 | ((s->cert->pkeys[SSL_PKEY_RSA_ENC].privatekey == NULL) || |
3139 | (EVP_PKEY_size(s->cert->pkeys[SSL_PKEY_RSA_ENC].privatekey) > (512/8)))) | 3142 | (EVP_PKEY_size(s->cert->pkeys[SSL_PKEY_RSA_ENC].privatekey) > (512 / 8)))) |
3140 | ret = 1; | 3143 | ret = 1; |
3141 | break; | 3144 | break; |
3142 | case SSL_CTRL_SET_TMP_RSA: | 3145 | case SSL_CTRL_SET_TMP_RSA: |
3143 | { | 3146 | { |
3144 | RSA *rsa = (RSA *)parg; | 3147 | RSA *rsa = (RSA *)parg; |
3145 | if (rsa == NULL) | 3148 | if (rsa == NULL) { |
3146 | { | ||
3147 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_PASSED_NULL_PARAMETER); | 3149 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_PASSED_NULL_PARAMETER); |
3148 | return(ret); | 3150 | return (ret); |
3149 | } | 3151 | } |
3150 | if ((rsa = RSAPrivateKey_dup(rsa)) == NULL) | 3152 | if ((rsa = RSAPrivateKey_dup(rsa)) == NULL) { |
3151 | { | ||
3152 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_RSA_LIB); | 3153 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_RSA_LIB); |
3153 | return(ret); | 3154 | return (ret); |
3154 | } | 3155 | } |
3155 | if (s->cert->rsa_tmp != NULL) | 3156 | if (s->cert->rsa_tmp != NULL) |
3156 | RSA_free(s->cert->rsa_tmp); | 3157 | RSA_free(s->cert->rsa_tmp); |
3157 | s->cert->rsa_tmp = rsa; | 3158 | s->cert->rsa_tmp = rsa; |
@@ -3160,8 +3161,8 @@ long ssl3_ctrl(SSL *s, int cmd, long larg, void *parg) | |||
3160 | break; | 3161 | break; |
3161 | case SSL_CTRL_SET_TMP_RSA_CB: | 3162 | case SSL_CTRL_SET_TMP_RSA_CB: |
3162 | { | 3163 | { |
3163 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); | 3164 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); |
3164 | return(ret); | 3165 | return (ret); |
3165 | } | 3166 | } |
3166 | break; | 3167 | break; |
3167 | #endif | 3168 | #endif |
@@ -3169,25 +3170,21 @@ long ssl3_ctrl(SSL *s, int cmd, long larg, void *parg) | |||
3169 | case SSL_CTRL_SET_TMP_DH: | 3170 | case SSL_CTRL_SET_TMP_DH: |
3170 | { | 3171 | { |
3171 | DH *dh = (DH *)parg; | 3172 | DH *dh = (DH *)parg; |
3172 | if (dh == NULL) | 3173 | if (dh == NULL) { |
3173 | { | ||
3174 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_PASSED_NULL_PARAMETER); | 3174 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_PASSED_NULL_PARAMETER); |
3175 | return(ret); | 3175 | return (ret); |
3176 | } | 3176 | } |
3177 | if ((dh = DHparams_dup(dh)) == NULL) | 3177 | if ((dh = DHparams_dup(dh)) == NULL) { |
3178 | { | ||
3179 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_DH_LIB); | 3178 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_DH_LIB); |
3180 | return(ret); | 3179 | return (ret); |
3181 | } | 3180 | } |
3182 | if (!(s->options & SSL_OP_SINGLE_DH_USE)) | 3181 | if (!(s->options & SSL_OP_SINGLE_DH_USE)) { |
3183 | { | 3182 | if (!DH_generate_key(dh)) { |
3184 | if (!DH_generate_key(dh)) | ||
3185 | { | ||
3186 | DH_free(dh); | 3183 | DH_free(dh); |
3187 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_DH_LIB); | 3184 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_DH_LIB); |
3188 | return(ret); | 3185 | return (ret); |
3189 | } | ||
3190 | } | 3186 | } |
3187 | } | ||
3191 | if (s->cert->dh_tmp != NULL) | 3188 | if (s->cert->dh_tmp != NULL) |
3192 | DH_free(s->cert->dh_tmp); | 3189 | DH_free(s->cert->dh_tmp); |
3193 | s->cert->dh_tmp = dh; | 3190 | s->cert->dh_tmp = dh; |
@@ -3196,79 +3193,70 @@ long ssl3_ctrl(SSL *s, int cmd, long larg, void *parg) | |||
3196 | break; | 3193 | break; |
3197 | case SSL_CTRL_SET_TMP_DH_CB: | 3194 | case SSL_CTRL_SET_TMP_DH_CB: |
3198 | { | 3195 | { |
3199 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); | 3196 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); |
3200 | return(ret); | 3197 | return (ret); |
3201 | } | 3198 | } |
3202 | break; | 3199 | break; |
3203 | #endif | 3200 | #endif |
3204 | #ifndef OPENSSL_NO_ECDH | 3201 | #ifndef OPENSSL_NO_ECDH |
3205 | case SSL_CTRL_SET_TMP_ECDH: | 3202 | case SSL_CTRL_SET_TMP_ECDH: |
3206 | { | 3203 | { |
3207 | EC_KEY *ecdh = NULL; | 3204 | EC_KEY *ecdh = NULL; |
3208 | 3205 | ||
3209 | if (parg == NULL) | 3206 | if (parg == NULL) { |
3210 | { | 3207 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_PASSED_NULL_PARAMETER); |
3211 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_PASSED_NULL_PARAMETER); | 3208 | return (ret); |
3212 | return(ret); | ||
3213 | } | 3209 | } |
3214 | if (!EC_KEY_up_ref((EC_KEY *)parg)) | 3210 | if (!EC_KEY_up_ref((EC_KEY *)parg)) { |
3215 | { | 3211 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_ECDH_LIB); |
3216 | SSLerr(SSL_F_SSL3_CTRL,ERR_R_ECDH_LIB); | 3212 | return (ret); |
3217 | return(ret); | ||
3218 | } | 3213 | } |
3219 | ecdh = (EC_KEY *)parg; | 3214 | ecdh = (EC_KEY *)parg; |
3220 | if (!(s->options & SSL_OP_SINGLE_ECDH_USE)) | 3215 | if (!(s->options & SSL_OP_SINGLE_ECDH_USE)) { |
3221 | { | 3216 | if (!EC_KEY_generate_key(ecdh)) { |
3222 | if (!EC_KEY_generate_key(ecdh)) | 3217 | EC_KEY_free(ecdh); |
3223 | { | 3218 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_ECDH_LIB); |
3224 | EC_KEY_free(ecdh); | 3219 | return (ret); |
3225 | SSLerr(SSL_F_SSL3_CTRL,ERR_R_ECDH_LIB); | ||
3226 | return(ret); | ||
3227 | } | 3220 | } |
3228 | } | 3221 | } |
3229 | if (s->cert->ecdh_tmp != NULL) | 3222 | if (s->cert->ecdh_tmp != NULL) |
3230 | EC_KEY_free(s->cert->ecdh_tmp); | 3223 | EC_KEY_free(s->cert->ecdh_tmp); |
3231 | s->cert->ecdh_tmp = ecdh; | 3224 | s->cert->ecdh_tmp = ecdh; |
3232 | ret = 1; | 3225 | ret = 1; |
3233 | } | 3226 | } |
3234 | break; | 3227 | break; |
3235 | case SSL_CTRL_SET_TMP_ECDH_CB: | 3228 | case SSL_CTRL_SET_TMP_ECDH_CB: |
3236 | { | 3229 | { |
3237 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); | 3230 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); |
3238 | return(ret); | 3231 | return (ret); |
3239 | } | 3232 | } |
3240 | break; | 3233 | break; |
3241 | #endif /* !OPENSSL_NO_ECDH */ | 3234 | #endif /* !OPENSSL_NO_ECDH */ |
3242 | #ifndef OPENSSL_NO_TLSEXT | 3235 | #ifndef OPENSSL_NO_TLSEXT |
3243 | case SSL_CTRL_SET_TLSEXT_HOSTNAME: | 3236 | case SSL_CTRL_SET_TLSEXT_HOSTNAME: |
3244 | if (larg == TLSEXT_NAMETYPE_host_name) | 3237 | if (larg == TLSEXT_NAMETYPE_host_name) { |
3245 | { | 3238 | if (s->tlsext_hostname != NULL) |
3246 | if (s->tlsext_hostname != NULL) | ||
3247 | OPENSSL_free(s->tlsext_hostname); | 3239 | OPENSSL_free(s->tlsext_hostname); |
3248 | s->tlsext_hostname = NULL; | 3240 | s->tlsext_hostname = NULL; |
3249 | 3241 | ||
3250 | ret = 1; | 3242 | ret = 1; |
3251 | if (parg == NULL) | 3243 | if (parg == NULL) |
3252 | break; | 3244 | break; |
3253 | if (strlen((char *)parg) > TLSEXT_MAXLEN_host_name) | 3245 | if (strlen((char *)parg) > TLSEXT_MAXLEN_host_name) { |
3254 | { | ||
3255 | SSLerr(SSL_F_SSL3_CTRL, SSL_R_SSL3_EXT_INVALID_SERVERNAME); | 3246 | SSLerr(SSL_F_SSL3_CTRL, SSL_R_SSL3_EXT_INVALID_SERVERNAME); |
3256 | return 0; | 3247 | return 0; |
3257 | } | 3248 | } |
3258 | if ((s->tlsext_hostname = BUF_strdup((char *)parg)) == NULL) | 3249 | if ((s->tlsext_hostname = BUF_strdup((char *)parg)) == NULL) { |
3259 | { | ||
3260 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_INTERNAL_ERROR); | 3250 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_INTERNAL_ERROR); |
3261 | return 0; | 3251 | return 0; |
3262 | } | ||
3263 | } | 3252 | } |
3264 | else | 3253 | } else { |
3265 | { | ||
3266 | SSLerr(SSL_F_SSL3_CTRL, SSL_R_SSL3_EXT_INVALID_SERVERNAME_TYPE); | 3254 | SSLerr(SSL_F_SSL3_CTRL, SSL_R_SSL3_EXT_INVALID_SERVERNAME_TYPE); |
3267 | return 0; | 3255 | return 0; |
3268 | } | 3256 | } |
3269 | break; | 3257 | break; |
3270 | case SSL_CTRL_SET_TLSEXT_DEBUG_ARG: | 3258 | case SSL_CTRL_SET_TLSEXT_DEBUG_ARG: |
3271 | s->tlsext_debug_arg=parg; | 3259 | s->tlsext_debug_arg = parg; |
3272 | ret = 1; | 3260 | ret = 1; |
3273 | break; | 3261 | break; |
3274 | 3262 | ||
@@ -3276,28 +3264,26 @@ long ssl3_ctrl(SSL *s, int cmd, long larg, void *parg) | |||
3276 | case SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT: | 3264 | case SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT: |
3277 | if (larg > 12288) /* actual internal limit is 2^16 for the complete hello message | 3265 | if (larg > 12288) /* actual internal limit is 2^16 for the complete hello message |
3278 | * (including the cert chain and everything) */ | 3266 | * (including the cert chain and everything) */ |
3279 | { | 3267 | { |
3280 | SSLerr(SSL_F_SSL3_CTRL, SSL_R_OPAQUE_PRF_INPUT_TOO_LONG); | 3268 | SSLerr(SSL_F_SSL3_CTRL, SSL_R_OPAQUE_PRF_INPUT_TOO_LONG); |
3281 | break; | 3269 | break; |
3282 | } | 3270 | } |
3283 | if (s->tlsext_opaque_prf_input != NULL) | 3271 | if (s->tlsext_opaque_prf_input != NULL) |
3284 | OPENSSL_free(s->tlsext_opaque_prf_input); | 3272 | OPENSSL_free(s->tlsext_opaque_prf_input); |
3285 | if ((size_t)larg == 0) | 3273 | if ((size_t)larg == 0) |
3286 | s->tlsext_opaque_prf_input = OPENSSL_malloc(1); /* dummy byte just to get non-NULL */ | 3274 | s->tlsext_opaque_prf_input = OPENSSL_malloc(1); /* dummy byte just to get non-NULL */ |
3287 | else | 3275 | else |
3288 | s->tlsext_opaque_prf_input = BUF_memdup(parg, (size_t)larg); | 3276 | s->tlsext_opaque_prf_input = BUF_memdup(parg, (size_t)larg); |
3289 | if (s->tlsext_opaque_prf_input != NULL) | 3277 | if (s->tlsext_opaque_prf_input != NULL) { |
3290 | { | ||
3291 | s->tlsext_opaque_prf_input_len = (size_t)larg; | 3278 | s->tlsext_opaque_prf_input_len = (size_t)larg; |
3292 | ret = 1; | 3279 | ret = 1; |
3293 | } | 3280 | } else |
3294 | else | ||
3295 | s->tlsext_opaque_prf_input_len = 0; | 3281 | s->tlsext_opaque_prf_input_len = 0; |
3296 | break; | 3282 | break; |
3297 | #endif | 3283 | #endif |
3298 | 3284 | ||
3299 | case SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE: | 3285 | case SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE: |
3300 | s->tlsext_status_type=larg; | 3286 | s->tlsext_status_type = larg; |
3301 | ret = 1; | 3287 | ret = 1; |
3302 | break; | 3288 | break; |
3303 | 3289 | ||
@@ -3324,7 +3310,7 @@ long ssl3_ctrl(SSL *s, int cmd, long larg, void *parg) | |||
3324 | case SSL_CTRL_GET_TLSEXT_STATUS_REQ_OCSP_RESP: | 3310 | case SSL_CTRL_GET_TLSEXT_STATUS_REQ_OCSP_RESP: |
3325 | *(unsigned char **)parg = s->tlsext_ocsp_resp; | 3311 | *(unsigned char **)parg = s->tlsext_ocsp_resp; |
3326 | return s->tlsext_ocsp_resplen; | 3312 | return s->tlsext_ocsp_resplen; |
3327 | 3313 | ||
3328 | case SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP: | 3314 | case SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP: |
3329 | if (s->tlsext_ocsp_resp) | 3315 | if (s->tlsext_ocsp_resp) |
3330 | OPENSSL_free(s->tlsext_ocsp_resp); | 3316 | OPENSSL_free(s->tlsext_ocsp_resp); |
@@ -3357,222 +3343,204 @@ long ssl3_ctrl(SSL *s, int cmd, long larg, void *parg) | |||
3357 | #endif /* !OPENSSL_NO_TLSEXT */ | 3343 | #endif /* !OPENSSL_NO_TLSEXT */ |
3358 | default: | 3344 | default: |
3359 | break; | 3345 | break; |
3360 | } | ||
3361 | return(ret); | ||
3362 | } | 3346 | } |
3347 | return (ret); | ||
3348 | } | ||
3363 | 3349 | ||
3364 | long ssl3_callback_ctrl(SSL *s, int cmd, void (*fp)(void)) | 3350 | long |
3365 | { | 3351 | ssl3_callback_ctrl(SSL *s, int cmd, void (*fp)(void)) |
3366 | int ret=0; | 3352 | { |
3353 | int ret = 0; | ||
3367 | 3354 | ||
3368 | #if !defined(OPENSSL_NO_DSA) || !defined(OPENSSL_NO_RSA) | 3355 | #if !defined(OPENSSL_NO_DSA) || !defined(OPENSSL_NO_RSA) |
3369 | if ( | 3356 | if ( |
3370 | #ifndef OPENSSL_NO_RSA | 3357 | #ifndef OPENSSL_NO_RSA |
3371 | cmd == SSL_CTRL_SET_TMP_RSA_CB || | 3358 | cmd == SSL_CTRL_SET_TMP_RSA_CB || |
3372 | #endif | 3359 | #endif |
3373 | #ifndef OPENSSL_NO_DSA | 3360 | #ifndef OPENSSL_NO_DSA |
3374 | cmd == SSL_CTRL_SET_TMP_DH_CB || | 3361 | cmd == SSL_CTRL_SET_TMP_DH_CB || |
3375 | #endif | 3362 | #endif |
3376 | 0) | 3363 | 0) { |
3377 | { | 3364 | if (!ssl_cert_inst(&s->cert)) { |
3378 | if (!ssl_cert_inst(&s->cert)) | ||
3379 | { | ||
3380 | SSLerr(SSL_F_SSL3_CALLBACK_CTRL, ERR_R_MALLOC_FAILURE); | 3365 | SSLerr(SSL_F_SSL3_CALLBACK_CTRL, ERR_R_MALLOC_FAILURE); |
3381 | return(0); | 3366 | return (0); |
3382 | } | ||
3383 | } | 3367 | } |
3368 | } | ||
3384 | #endif | 3369 | #endif |
3385 | 3370 | ||
3386 | switch (cmd) | 3371 | switch (cmd) { |
3387 | { | ||
3388 | #ifndef OPENSSL_NO_RSA | 3372 | #ifndef OPENSSL_NO_RSA |
3389 | case SSL_CTRL_SET_TMP_RSA_CB: | 3373 | case SSL_CTRL_SET_TMP_RSA_CB: |
3390 | { | 3374 | { |
3391 | s->cert->rsa_tmp_cb = (RSA *(*)(SSL *, int, int))fp; | 3375 | s->cert->rsa_tmp_cb = (RSA *(*)(SSL *, int, int))fp; |
3392 | } | 3376 | } |
3393 | break; | 3377 | break; |
3394 | #endif | 3378 | #endif |
3395 | #ifndef OPENSSL_NO_DH | 3379 | #ifndef OPENSSL_NO_DH |
3396 | case SSL_CTRL_SET_TMP_DH_CB: | 3380 | case SSL_CTRL_SET_TMP_DH_CB: |
3397 | { | 3381 | { |
3398 | s->cert->dh_tmp_cb = (DH *(*)(SSL *, int, int))fp; | 3382 | s->cert->dh_tmp_cb = (DH *(*)(SSL *, int, int))fp; |
3399 | } | 3383 | } |
3400 | break; | 3384 | break; |
3401 | #endif | 3385 | #endif |
3402 | #ifndef OPENSSL_NO_ECDH | 3386 | #ifndef OPENSSL_NO_ECDH |
3403 | case SSL_CTRL_SET_TMP_ECDH_CB: | 3387 | case SSL_CTRL_SET_TMP_ECDH_CB: |
3404 | { | 3388 | { |
3405 | s->cert->ecdh_tmp_cb = (EC_KEY *(*)(SSL *, int, int))fp; | 3389 | s->cert->ecdh_tmp_cb = (EC_KEY *(*)(SSL *, int, int))fp; |
3406 | } | 3390 | } |
3407 | break; | 3391 | break; |
3408 | #endif | 3392 | #endif |
3409 | #ifndef OPENSSL_NO_TLSEXT | 3393 | #ifndef OPENSSL_NO_TLSEXT |
3410 | case SSL_CTRL_SET_TLSEXT_DEBUG_CB: | 3394 | case SSL_CTRL_SET_TLSEXT_DEBUG_CB: |
3411 | s->tlsext_debug_cb=(void (*)(SSL *,int ,int, | 3395 | s->tlsext_debug_cb = (void (*)(SSL *, int , int, |
3412 | unsigned char *, int, void *))fp; | 3396 | unsigned char *, int, void *))fp; |
3413 | break; | 3397 | break; |
3414 | #endif | 3398 | #endif |
3415 | default: | 3399 | default: |
3416 | break; | 3400 | break; |
3417 | } | ||
3418 | return(ret); | ||
3419 | } | 3401 | } |
3402 | return (ret); | ||
3403 | } | ||
3420 | 3404 | ||
3421 | long ssl3_ctx_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg) | 3405 | long |
3422 | { | 3406 | ssl3_ctx_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg) |
3407 | { | ||
3423 | CERT *cert; | 3408 | CERT *cert; |
3424 | 3409 | ||
3425 | cert=ctx->cert; | 3410 | cert = ctx->cert; |
3426 | 3411 | ||
3427 | switch (cmd) | 3412 | switch (cmd) { |
3428 | { | ||
3429 | #ifndef OPENSSL_NO_RSA | 3413 | #ifndef OPENSSL_NO_RSA |
3430 | case SSL_CTRL_NEED_TMP_RSA: | 3414 | case SSL_CTRL_NEED_TMP_RSA: |
3431 | if ( (cert->rsa_tmp == NULL) && | 3415 | if ((cert->rsa_tmp == NULL) && |
3432 | ((cert->pkeys[SSL_PKEY_RSA_ENC].privatekey == NULL) || | 3416 | ((cert->pkeys[SSL_PKEY_RSA_ENC].privatekey == NULL) || |
3433 | (EVP_PKEY_size(cert->pkeys[SSL_PKEY_RSA_ENC].privatekey) > (512/8))) | 3417 | (EVP_PKEY_size(cert->pkeys[SSL_PKEY_RSA_ENC].privatekey) > (512 / 8))) |
3434 | ) | 3418 | ) |
3435 | return(1); | 3419 | return (1); |
3436 | else | 3420 | else |
3437 | return(0); | 3421 | return (0); |
3438 | /* break; */ | 3422 | /* break; */ |
3439 | case SSL_CTRL_SET_TMP_RSA: | 3423 | case SSL_CTRL_SET_TMP_RSA: |
3440 | { | 3424 | { |
3441 | RSA *rsa; | 3425 | RSA *rsa; |
3442 | int i; | 3426 | int i; |
3443 | 3427 | ||
3444 | rsa=(RSA *)parg; | 3428 | rsa = (RSA *)parg; |
3445 | i=1; | 3429 | i = 1; |
3446 | if (rsa == NULL) | 3430 | if (rsa == NULL) |
3447 | i=0; | 3431 | i = 0; |
3448 | else | 3432 | else { |
3449 | { | 3433 | if ((rsa = RSAPrivateKey_dup(rsa)) == NULL) |
3450 | if ((rsa=RSAPrivateKey_dup(rsa)) == NULL) | 3434 | i = 0; |
3451 | i=0; | ||
3452 | } | 3435 | } |
3453 | if (!i) | 3436 | if (!i) { |
3454 | { | 3437 | SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_RSA_LIB); |
3455 | SSLerr(SSL_F_SSL3_CTX_CTRL,ERR_R_RSA_LIB); | 3438 | return (0); |
3456 | return(0); | 3439 | } else { |
3457 | } | 3440 | if (cert->rsa_tmp != NULL) |
3458 | else | 3441 | RSA_free(cert->rsa_tmp); |
3459 | { | 3442 | cert->rsa_tmp = rsa; |
3460 | if (cert->rsa_tmp != NULL) | 3443 | return (1); |
3461 | RSA_free(cert->rsa_tmp); | ||
3462 | cert->rsa_tmp=rsa; | ||
3463 | return(1); | ||
3464 | } | 3444 | } |
3465 | } | 3445 | } |
3466 | /* break; */ | 3446 | /* break; */ |
3467 | case SSL_CTRL_SET_TMP_RSA_CB: | 3447 | case SSL_CTRL_SET_TMP_RSA_CB: |
3468 | { | 3448 | { |
3469 | SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); | 3449 | SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); |
3470 | return(0); | 3450 | return (0); |
3471 | } | 3451 | } |
3472 | break; | 3452 | break; |
3473 | #endif | 3453 | #endif |
3474 | #ifndef OPENSSL_NO_DH | 3454 | #ifndef OPENSSL_NO_DH |
3475 | case SSL_CTRL_SET_TMP_DH: | 3455 | case SSL_CTRL_SET_TMP_DH: |
3476 | { | 3456 | { |
3477 | DH *new=NULL,*dh; | 3457 | DH *new = NULL, *dh; |
3478 | 3458 | ||
3479 | dh=(DH *)parg; | 3459 | dh = (DH *)parg; |
3480 | if ((new=DHparams_dup(dh)) == NULL) | 3460 | if ((new = DHparams_dup(dh)) == NULL) { |
3481 | { | 3461 | SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_DH_LIB); |
3482 | SSLerr(SSL_F_SSL3_CTX_CTRL,ERR_R_DH_LIB); | ||
3483 | return 0; | ||
3484 | } | ||
3485 | if (!(ctx->options & SSL_OP_SINGLE_DH_USE)) | ||
3486 | { | ||
3487 | if (!DH_generate_key(new)) | ||
3488 | { | ||
3489 | SSLerr(SSL_F_SSL3_CTX_CTRL,ERR_R_DH_LIB); | ||
3490 | DH_free(new); | ||
3491 | return 0; | 3462 | return 0; |
3463 | } | ||
3464 | if (!(ctx->options & SSL_OP_SINGLE_DH_USE)) { | ||
3465 | if (!DH_generate_key(new)) { | ||
3466 | SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_DH_LIB); | ||
3467 | DH_free(new); | ||
3468 | return 0; | ||
3492 | } | 3469 | } |
3493 | } | 3470 | } |
3494 | if (cert->dh_tmp != NULL) | 3471 | if (cert->dh_tmp != NULL) |
3495 | DH_free(cert->dh_tmp); | 3472 | DH_free(cert->dh_tmp); |
3496 | cert->dh_tmp=new; | 3473 | cert->dh_tmp = new; |
3497 | return 1; | 3474 | return 1; |
3498 | } | 3475 | } |
3499 | /*break; */ | 3476 | /*break; */ |
3500 | case SSL_CTRL_SET_TMP_DH_CB: | 3477 | case SSL_CTRL_SET_TMP_DH_CB: |
3501 | { | 3478 | { |
3502 | SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); | 3479 | SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); |
3503 | return(0); | 3480 | return (0); |
3504 | } | 3481 | } |
3505 | break; | 3482 | break; |
3506 | #endif | 3483 | #endif |
3507 | #ifndef OPENSSL_NO_ECDH | 3484 | #ifndef OPENSSL_NO_ECDH |
3508 | case SSL_CTRL_SET_TMP_ECDH: | 3485 | case SSL_CTRL_SET_TMP_ECDH: |
3509 | { | 3486 | { |
3510 | EC_KEY *ecdh = NULL; | 3487 | EC_KEY *ecdh = NULL; |
3511 | 3488 | ||
3512 | if (parg == NULL) | 3489 | if (parg == NULL) { |
3513 | { | 3490 | SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_ECDH_LIB); |
3514 | SSLerr(SSL_F_SSL3_CTX_CTRL,ERR_R_ECDH_LIB); | 3491 | return 0; |
3515 | return 0; | ||
3516 | } | ||
3517 | ecdh = EC_KEY_dup((EC_KEY *)parg); | ||
3518 | if (ecdh == NULL) | ||
3519 | { | ||
3520 | SSLerr(SSL_F_SSL3_CTX_CTRL,ERR_R_EC_LIB); | ||
3521 | return 0; | ||
3522 | } | 3492 | } |
3523 | if (!(ctx->options & SSL_OP_SINGLE_ECDH_USE)) | 3493 | ecdh = EC_KEY_dup((EC_KEY *)parg); |
3524 | { | 3494 | if (ecdh == NULL) { |
3525 | if (!EC_KEY_generate_key(ecdh)) | 3495 | SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_EC_LIB); |
3526 | { | ||
3527 | EC_KEY_free(ecdh); | ||
3528 | SSLerr(SSL_F_SSL3_CTX_CTRL,ERR_R_ECDH_LIB); | ||
3529 | return 0; | 3496 | return 0; |
3497 | } | ||
3498 | if (!(ctx->options & SSL_OP_SINGLE_ECDH_USE)) { | ||
3499 | if (!EC_KEY_generate_key(ecdh)) { | ||
3500 | EC_KEY_free(ecdh); | ||
3501 | SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_ECDH_LIB); | ||
3502 | return 0; | ||
3530 | } | 3503 | } |
3531 | } | 3504 | } |
3532 | 3505 | ||
3533 | if (cert->ecdh_tmp != NULL) | 3506 | if (cert->ecdh_tmp != NULL) { |
3534 | { | 3507 | EC_KEY_free(cert->ecdh_tmp); |
3535 | EC_KEY_free(cert->ecdh_tmp); | ||
3536 | } | 3508 | } |
3537 | cert->ecdh_tmp = ecdh; | 3509 | cert->ecdh_tmp = ecdh; |
3538 | return 1; | 3510 | return 1; |
3539 | } | 3511 | } |
3540 | /* break; */ | 3512 | /* break; */ |
3541 | case SSL_CTRL_SET_TMP_ECDH_CB: | 3513 | case SSL_CTRL_SET_TMP_ECDH_CB: |
3542 | { | 3514 | { |
3543 | SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); | 3515 | SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); |
3544 | return(0); | 3516 | return (0); |
3545 | } | 3517 | } |
3546 | break; | 3518 | break; |
3547 | #endif /* !OPENSSL_NO_ECDH */ | 3519 | #endif /* !OPENSSL_NO_ECDH */ |
3548 | #ifndef OPENSSL_NO_TLSEXT | 3520 | #ifndef OPENSSL_NO_TLSEXT |
3549 | case SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG: | 3521 | case SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG: |
3550 | ctx->tlsext_servername_arg=parg; | 3522 | ctx->tlsext_servername_arg = parg; |
3551 | break; | 3523 | break; |
3552 | case SSL_CTRL_SET_TLSEXT_TICKET_KEYS: | 3524 | case SSL_CTRL_SET_TLSEXT_TICKET_KEYS: |
3553 | case SSL_CTRL_GET_TLSEXT_TICKET_KEYS: | 3525 | case SSL_CTRL_GET_TLSEXT_TICKET_KEYS: |
3554 | { | 3526 | { |
3555 | unsigned char *keys = parg; | 3527 | unsigned char *keys = parg; |
3556 | if (!keys) | 3528 | if (!keys) |
3557 | return 48; | 3529 | return 48; |
3558 | if (larg != 48) | 3530 | if (larg != 48) { |
3559 | { | 3531 | SSLerr(SSL_F_SSL3_CTX_CTRL, SSL_R_INVALID_TICKET_KEYS_LENGTH); |
3560 | SSLerr(SSL_F_SSL3_CTX_CTRL, SSL_R_INVALID_TICKET_KEYS_LENGTH); | 3532 | return 0; |
3561 | return 0; | ||
3562 | } | ||
3563 | if (cmd == SSL_CTRL_SET_TLSEXT_TICKET_KEYS) | ||
3564 | { | ||
3565 | memcpy(ctx->tlsext_tick_key_name, keys, 16); | ||
3566 | memcpy(ctx->tlsext_tick_hmac_key, keys + 16, 16); | ||
3567 | memcpy(ctx->tlsext_tick_aes_key, keys + 32, 16); | ||
3568 | } | 3533 | } |
3569 | else | 3534 | if (cmd == SSL_CTRL_SET_TLSEXT_TICKET_KEYS) { |
3570 | { | 3535 | memcpy(ctx->tlsext_tick_key_name, keys, 16); |
3571 | memcpy(keys, ctx->tlsext_tick_key_name, 16); | 3536 | memcpy(ctx->tlsext_tick_hmac_key, keys + 16, 16); |
3572 | memcpy(keys + 16, ctx->tlsext_tick_hmac_key, 16); | 3537 | memcpy(ctx->tlsext_tick_aes_key, keys + 32, 16); |
3573 | memcpy(keys + 32, ctx->tlsext_tick_aes_key, 16); | 3538 | } else { |
3539 | memcpy(keys, ctx->tlsext_tick_key_name, 16); | ||
3540 | memcpy(keys + 16, ctx->tlsext_tick_hmac_key, 16); | ||
3541 | memcpy(keys + 32, ctx->tlsext_tick_aes_key, 16); | ||
3574 | } | 3542 | } |
3575 | return 1; | 3543 | return 1; |
3576 | } | 3544 | } |
3577 | 3545 | ||
3578 | #ifdef TLSEXT_TYPE_opaque_prf_input | 3546 | #ifdef TLSEXT_TYPE_opaque_prf_input |
@@ -3582,7 +3550,7 @@ long ssl3_ctx_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg) | |||
3582 | #endif | 3550 | #endif |
3583 | 3551 | ||
3584 | case SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG: | 3552 | case SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG: |
3585 | ctx->tlsext_status_arg=parg; | 3553 | ctx->tlsext_status_arg = parg; |
3586 | return 1; | 3554 | return 1; |
3587 | break; | 3555 | break; |
3588 | 3556 | ||
@@ -3594,182 +3562,182 @@ long ssl3_ctx_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg) | |||
3594 | ctx->srp_ctx.login = NULL; | 3562 | ctx->srp_ctx.login = NULL; |
3595 | if (parg == NULL) | 3563 | if (parg == NULL) |
3596 | break; | 3564 | break; |
3597 | if (strlen((const char *)parg) > 255 || strlen((const char *)parg) < 1) | 3565 | if (strlen((const char *)parg) > 255 || strlen((const char *)parg) < 1) { |
3598 | { | ||
3599 | SSLerr(SSL_F_SSL3_CTX_CTRL, SSL_R_INVALID_SRP_USERNAME); | 3566 | SSLerr(SSL_F_SSL3_CTX_CTRL, SSL_R_INVALID_SRP_USERNAME); |
3600 | return 0; | 3567 | return 0; |
3601 | } | 3568 | } |
3602 | if ((ctx->srp_ctx.login = BUF_strdup((char *)parg)) == NULL) | 3569 | if ((ctx->srp_ctx.login = BUF_strdup((char *)parg)) == NULL) { |
3603 | { | ||
3604 | SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_INTERNAL_ERROR); | 3570 | SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_INTERNAL_ERROR); |
3605 | return 0; | 3571 | return 0; |
3606 | } | 3572 | } |
3607 | break; | 3573 | break; |
3608 | case SSL_CTRL_SET_TLS_EXT_SRP_PASSWORD: | 3574 | case SSL_CTRL_SET_TLS_EXT_SRP_PASSWORD: |
3609 | ctx->srp_ctx.SRP_give_srp_client_pwd_callback=srp_password_from_info_cb; | 3575 | ctx->srp_ctx.SRP_give_srp_client_pwd_callback = srp_password_from_info_cb; |
3610 | ctx->srp_ctx.info=parg; | 3576 | ctx->srp_ctx.info = parg; |
3611 | break; | 3577 | break; |
3612 | case SSL_CTRL_SET_SRP_ARG: | 3578 | case SSL_CTRL_SET_SRP_ARG: |
3613 | ctx->srp_ctx.srp_Mask|=SSL_kSRP; | 3579 | ctx->srp_ctx.srp_Mask|=SSL_kSRP; |
3614 | ctx->srp_ctx.SRP_cb_arg=parg; | 3580 | ctx->srp_ctx.SRP_cb_arg = parg; |
3615 | break; | 3581 | break; |
3616 | 3582 | ||
3617 | case SSL_CTRL_SET_TLS_EXT_SRP_STRENGTH: | 3583 | case SSL_CTRL_SET_TLS_EXT_SRP_STRENGTH: |
3618 | ctx->srp_ctx.strength=larg; | 3584 | ctx->srp_ctx.strength = larg; |
3619 | break; | 3585 | break; |
3620 | #endif | 3586 | #endif |
3621 | #endif /* !OPENSSL_NO_TLSEXT */ | 3587 | #endif /* !OPENSSL_NO_TLSEXT */ |
3622 | 3588 | ||
3623 | /* A Thawte special :-) */ | 3589 | /* A Thawte special :-) */ |
3624 | case SSL_CTRL_EXTRA_CHAIN_CERT: | 3590 | case SSL_CTRL_EXTRA_CHAIN_CERT: |
3625 | if (ctx->extra_certs == NULL) | 3591 | if (ctx->extra_certs == NULL) { |
3626 | { | 3592 | if ((ctx->extra_certs = sk_X509_new_null()) == NULL) |
3627 | if ((ctx->extra_certs=sk_X509_new_null()) == NULL) | 3593 | return (0); |
3628 | return(0); | 3594 | } |
3629 | } | ||
3630 | sk_X509_push(ctx->extra_certs,(X509 *)parg); | 3595 | sk_X509_push(ctx->extra_certs,(X509 *)parg); |
3631 | break; | 3596 | break; |
3632 | 3597 | ||
3633 | case SSL_CTRL_GET_EXTRA_CHAIN_CERTS: | 3598 | case SSL_CTRL_GET_EXTRA_CHAIN_CERTS: |
3634 | *(STACK_OF(X509) **)parg = ctx->extra_certs; | 3599 | *(STACK_OF(X509) **)parg = ctx->extra_certs; |
3635 | break; | 3600 | break; |
3636 | 3601 | ||
3637 | case SSL_CTRL_CLEAR_EXTRA_CHAIN_CERTS: | 3602 | case SSL_CTRL_CLEAR_EXTRA_CHAIN_CERTS: |
3638 | if (ctx->extra_certs) | 3603 | if (ctx->extra_certs) { |
3639 | { | ||
3640 | sk_X509_pop_free(ctx->extra_certs, X509_free); | 3604 | sk_X509_pop_free(ctx->extra_certs, X509_free); |
3641 | ctx->extra_certs = NULL; | 3605 | ctx->extra_certs = NULL; |
3642 | } | 3606 | } |
3643 | break; | 3607 | break; |
3644 | 3608 | ||
3645 | default: | 3609 | default: |
3646 | return(0); | 3610 | return (0); |
3647 | } | ||
3648 | return(1); | ||
3649 | } | 3611 | } |
3612 | return (1); | ||
3613 | } | ||
3650 | 3614 | ||
3651 | long ssl3_ctx_callback_ctrl(SSL_CTX *ctx, int cmd, void (*fp)(void)) | 3615 | long |
3652 | { | 3616 | ssl3_ctx_callback_ctrl(SSL_CTX *ctx, int cmd, void (*fp)(void)) |
3617 | { | ||
3653 | CERT *cert; | 3618 | CERT *cert; |
3654 | 3619 | ||
3655 | cert=ctx->cert; | 3620 | cert = ctx->cert; |
3656 | 3621 | ||
3657 | switch (cmd) | 3622 | switch (cmd) { |
3658 | { | ||
3659 | #ifndef OPENSSL_NO_RSA | 3623 | #ifndef OPENSSL_NO_RSA |
3660 | case SSL_CTRL_SET_TMP_RSA_CB: | 3624 | case SSL_CTRL_SET_TMP_RSA_CB: |
3661 | { | 3625 | { |
3662 | cert->rsa_tmp_cb = (RSA *(*)(SSL *, int, int))fp; | 3626 | cert->rsa_tmp_cb = (RSA *(*)(SSL *, int, int))fp; |
3663 | } | 3627 | } |
3664 | break; | 3628 | break; |
3665 | #endif | 3629 | #endif |
3666 | #ifndef OPENSSL_NO_DH | 3630 | #ifndef OPENSSL_NO_DH |
3667 | case SSL_CTRL_SET_TMP_DH_CB: | 3631 | case SSL_CTRL_SET_TMP_DH_CB: |
3668 | { | 3632 | { |
3669 | cert->dh_tmp_cb = (DH *(*)(SSL *, int, int))fp; | 3633 | cert->dh_tmp_cb = (DH *(*)(SSL *, int, int))fp; |
3670 | } | 3634 | } |
3671 | break; | 3635 | break; |
3672 | #endif | 3636 | #endif |
3673 | #ifndef OPENSSL_NO_ECDH | 3637 | #ifndef OPENSSL_NO_ECDH |
3674 | case SSL_CTRL_SET_TMP_ECDH_CB: | 3638 | case SSL_CTRL_SET_TMP_ECDH_CB: |
3675 | { | 3639 | { |
3676 | cert->ecdh_tmp_cb = (EC_KEY *(*)(SSL *, int, int))fp; | 3640 | cert->ecdh_tmp_cb = (EC_KEY *(*)(SSL *, int, int))fp; |
3677 | } | 3641 | } |
3678 | break; | 3642 | break; |
3679 | #endif | 3643 | #endif |
3680 | #ifndef OPENSSL_NO_TLSEXT | 3644 | #ifndef OPENSSL_NO_TLSEXT |
3681 | case SSL_CTRL_SET_TLSEXT_SERVERNAME_CB: | 3645 | case SSL_CTRL_SET_TLSEXT_SERVERNAME_CB: |
3682 | ctx->tlsext_servername_callback=(int (*)(SSL *,int *,void *))fp; | 3646 | ctx->tlsext_servername_callback = (int (*)(SSL *, int *, void *))fp; |
3683 | break; | 3647 | break; |
3684 | 3648 | ||
3685 | #ifdef TLSEXT_TYPE_opaque_prf_input | 3649 | #ifdef TLSEXT_TYPE_opaque_prf_input |
3686 | case SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB: | 3650 | case SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB: |
3687 | ctx->tlsext_opaque_prf_input_callback = (int (*)(SSL *,void *, size_t, void *))fp; | 3651 | ctx->tlsext_opaque_prf_input_callback = (int (*)(SSL *, void *, size_t, void *))fp; |
3688 | break; | 3652 | break; |
3689 | #endif | 3653 | #endif |
3690 | 3654 | ||
3691 | case SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB: | 3655 | case SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB: |
3692 | ctx->tlsext_status_cb=(int (*)(SSL *,void *))fp; | 3656 | ctx->tlsext_status_cb = (int (*)(SSL *, void *))fp; |
3693 | break; | 3657 | break; |
3694 | 3658 | ||
3695 | case SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB: | 3659 | case SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB: |
3696 | ctx->tlsext_ticket_key_cb=(int (*)(SSL *,unsigned char *, | 3660 | ctx->tlsext_ticket_key_cb = (int (*)(SSL *, unsigned char *, |
3697 | unsigned char *, | 3661 | unsigned char *, EVP_CIPHER_CTX *, HMAC_CTX *, int))fp; |
3698 | EVP_CIPHER_CTX *, | ||
3699 | HMAC_CTX *, int))fp; | ||
3700 | break; | 3662 | break; |
3701 | 3663 | ||
3702 | #ifndef OPENSSL_NO_SRP | 3664 | #ifndef OPENSSL_NO_SRP |
3703 | case SSL_CTRL_SET_SRP_VERIFY_PARAM_CB: | 3665 | case SSL_CTRL_SET_SRP_VERIFY_PARAM_CB: |
3704 | ctx->srp_ctx.srp_Mask|=SSL_kSRP; | 3666 | ctx->srp_ctx.srp_Mask|=SSL_kSRP; |
3705 | ctx->srp_ctx.SRP_verify_param_callback=(int (*)(SSL *,void *))fp; | 3667 | ctx->srp_ctx.SRP_verify_param_callback = |
3668 | (int (*)(SSL *, void *))fp; | ||
3706 | break; | 3669 | break; |
3707 | case SSL_CTRL_SET_TLS_EXT_SRP_USERNAME_CB: | 3670 | case SSL_CTRL_SET_TLS_EXT_SRP_USERNAME_CB: |
3708 | ctx->srp_ctx.srp_Mask|=SSL_kSRP; | 3671 | ctx->srp_ctx.srp_Mask|=SSL_kSRP; |
3709 | ctx->srp_ctx.TLS_ext_srp_username_callback=(int (*)(SSL *,int *,void *))fp; | 3672 | ctx->srp_ctx.TLS_ext_srp_username_callback = |
3673 | (int (*)(SSL *, int *, void *))fp; | ||
3710 | break; | 3674 | break; |
3711 | case SSL_CTRL_SET_SRP_GIVE_CLIENT_PWD_CB: | 3675 | case SSL_CTRL_SET_SRP_GIVE_CLIENT_PWD_CB: |
3712 | ctx->srp_ctx.srp_Mask|=SSL_kSRP; | 3676 | ctx->srp_ctx.srp_Mask|=SSL_kSRP; |
3713 | ctx->srp_ctx.SRP_give_srp_client_pwd_callback=(char *(*)(SSL *,void *))fp; | 3677 | ctx->srp_ctx.SRP_give_srp_client_pwd_callback = |
3678 | (char *(*)(SSL *, void *))fp; | ||
3714 | break; | 3679 | break; |
3715 | #endif | 3680 | #endif |
3716 | #endif | 3681 | #endif |
3717 | default: | 3682 | default: |
3718 | return(0); | 3683 | return (0); |
3719 | } | ||
3720 | return(1); | ||
3721 | } | 3684 | } |
3685 | return (1); | ||
3686 | } | ||
3722 | 3687 | ||
3723 | /* This function needs to check if the ciphers required are actually | 3688 | /* This function needs to check if the ciphers required are actually |
3724 | * available */ | 3689 | * available */ |
3725 | const SSL_CIPHER *ssl3_get_cipher_by_char(const unsigned char *p) | 3690 | const SSL_CIPHER |
3726 | { | 3691 | *ssl3_get_cipher_by_char(const unsigned char *p) |
3692 | { | ||
3727 | SSL_CIPHER c; | 3693 | SSL_CIPHER c; |
3728 | const SSL_CIPHER *cp; | 3694 | const SSL_CIPHER *cp; |
3729 | unsigned long id; | 3695 | unsigned long id; |
3730 | 3696 | ||
3731 | id=0x03000000L|((unsigned long)p[0]<<8L)|(unsigned long)p[1]; | 3697 | id = 0x03000000L | ((unsigned long)p[0] << 8L) | (unsigned long)p[1]; |
3732 | c.id=id; | 3698 | c.id = id; |
3733 | cp = OBJ_bsearch_ssl_cipher_id(&c, ssl3_ciphers, SSL3_NUM_CIPHERS); | 3699 | cp = OBJ_bsearch_ssl_cipher_id(&c, ssl3_ciphers, SSL3_NUM_CIPHERS); |
3734 | #ifdef DEBUG_PRINT_UNKNOWN_CIPHERSUITES | 3700 | #ifdef DEBUG_PRINT_UNKNOWN_CIPHERSUITES |
3735 | if (cp == NULL) fprintf(stderr, "Unknown cipher ID %x\n", (p[0] << 8) | p[1]); | 3701 | if (cp == NULL) |
3702 | fprintf(stderr, "Unknown cipher ID %x\n", (p[0] << 8) | p[1]); | ||
3736 | #endif | 3703 | #endif |
3737 | if (cp == NULL || cp->valid == 0) | 3704 | if (cp == NULL || cp->valid == 0) |
3738 | return NULL; | 3705 | return NULL; |
3739 | else | 3706 | else |
3740 | return cp; | 3707 | return cp; |
3741 | } | 3708 | } |
3742 | 3709 | ||
3743 | int ssl3_put_cipher_by_char(const SSL_CIPHER *c, unsigned char *p) | 3710 | int |
3744 | { | 3711 | ssl3_put_cipher_by_char(const SSL_CIPHER *c, unsigned char *p) |
3712 | { | ||
3745 | long l; | 3713 | long l; |
3746 | 3714 | ||
3747 | if (p != NULL) | 3715 | if (p != NULL) { |
3748 | { | 3716 | l = c->id; |
3749 | l=c->id; | 3717 | if ((l & 0xff000000) != 0x03000000) |
3750 | if ((l & 0xff000000) != 0x03000000) return(0); | 3718 | return (0); |
3751 | p[0]=((unsigned char)(l>> 8L))&0xFF; | 3719 | p[0] = ((unsigned char)(l >> 8L)) & 0xFF; |
3752 | p[1]=((unsigned char)(l ))&0xFF; | 3720 | p[1] = ((unsigned char)(l)) & 0xFF; |
3753 | } | ||
3754 | return(2); | ||
3755 | } | 3721 | } |
3722 | return (2); | ||
3723 | } | ||
3756 | 3724 | ||
3757 | SSL_CIPHER *ssl3_choose_cipher(SSL *s, STACK_OF(SSL_CIPHER) *clnt, | 3725 | SSL_CIPHER *ssl3_choose_cipher(SSL *s, STACK_OF(SSL_CIPHER) *clnt, |
3758 | STACK_OF(SSL_CIPHER) *srvr) | 3726 | STACK_OF(SSL_CIPHER) *srvr) |
3759 | { | 3727 | { |
3760 | SSL_CIPHER *c,*ret=NULL; | 3728 | SSL_CIPHER *c, *ret = NULL; |
3761 | STACK_OF(SSL_CIPHER) *prio, *allow; | 3729 | STACK_OF(SSL_CIPHER) *prio, *allow; |
3762 | int i,ii,ok; | 3730 | int i, ii, ok; |
3763 | #if !defined(OPENSSL_NO_TLSEXT) && !defined(OPENSSL_NO_EC) | 3731 | #if !defined(OPENSSL_NO_TLSEXT) && !defined(OPENSSL_NO_EC) |
3764 | unsigned int j; | 3732 | unsigned int j; |
3765 | int ec_ok, ec_nid; | 3733 | int ec_ok, ec_nid; |
3766 | unsigned char ec_search1 = 0, ec_search2 = 0; | 3734 | unsigned char ec_search1 = 0, ec_search2 = 0; |
3767 | #endif | 3735 | #endif |
3768 | CERT *cert; | 3736 | CERT *cert; |
3769 | unsigned long alg_k,alg_a,mask_k,mask_a,emask_k,emask_a; | 3737 | unsigned long alg_k, alg_a, mask_k, mask_a, emask_k, emask_a; |
3770 | 3738 | ||
3771 | /* Let's see which ciphers we can support */ | 3739 | /* Let's see which ciphers we can support */ |
3772 | cert=s->cert; | 3740 | cert = s->cert; |
3773 | 3741 | ||
3774 | #if 0 | 3742 | #if 0 |
3775 | /* Do not set the compare functions, because this may lead to a | 3743 | /* Do not set the compare functions, because this may lead to a |
@@ -3783,62 +3751,55 @@ SSL_CIPHER *ssl3_choose_cipher(SSL *s, STACK_OF(SSL_CIPHER) *clnt, | |||
3783 | 3751 | ||
3784 | #ifdef CIPHER_DEBUG | 3752 | #ifdef CIPHER_DEBUG |
3785 | printf("Server has %d from %p:\n", sk_SSL_CIPHER_num(srvr), (void *)srvr); | 3753 | printf("Server has %d from %p:\n", sk_SSL_CIPHER_num(srvr), (void *)srvr); |
3786 | for(i=0 ; i < sk_SSL_CIPHER_num(srvr) ; ++i) | 3754 | for (i = 0; i < sk_SSL_CIPHER_num(srvr); ++i) { |
3787 | { | 3755 | c = sk_SSL_CIPHER_value(srvr, i); |
3788 | c=sk_SSL_CIPHER_value(srvr,i); | 3756 | printf("%p:%s\n",(void *)c, c->name); |
3789 | printf("%p:%s\n",(void *)c,c->name); | 3757 | } |
3790 | } | ||
3791 | printf("Client sent %d from %p:\n", sk_SSL_CIPHER_num(clnt), (void *)clnt); | 3758 | printf("Client sent %d from %p:\n", sk_SSL_CIPHER_num(clnt), (void *)clnt); |
3792 | for(i=0 ; i < sk_SSL_CIPHER_num(clnt) ; ++i) | 3759 | for (i = 0; i < sk_SSL_CIPHER_num(clnt); ++i) { |
3793 | { | 3760 | c = sk_SSL_CIPHER_value(clnt, i); |
3794 | c=sk_SSL_CIPHER_value(clnt,i); | 3761 | printf("%p:%s\n",(void *)c, c->name); |
3795 | printf("%p:%s\n",(void *)c,c->name); | 3762 | } |
3796 | } | ||
3797 | #endif | 3763 | #endif |
3798 | 3764 | ||
3799 | if (s->options & SSL_OP_CIPHER_SERVER_PREFERENCE) | 3765 | if (s->options & SSL_OP_CIPHER_SERVER_PREFERENCE) { |
3800 | { | ||
3801 | prio = srvr; | 3766 | prio = srvr; |
3802 | allow = clnt; | 3767 | allow = clnt; |
3803 | } | 3768 | } else { |
3804 | else | ||
3805 | { | ||
3806 | prio = clnt; | 3769 | prio = clnt; |
3807 | allow = srvr; | 3770 | allow = srvr; |
3808 | } | 3771 | } |
3809 | 3772 | ||
3810 | for (i=0; i<sk_SSL_CIPHER_num(prio); i++) | 3773 | for (i = 0; i < sk_SSL_CIPHER_num(prio); i++) { |
3811 | { | 3774 | c = sk_SSL_CIPHER_value(prio, i); |
3812 | c=sk_SSL_CIPHER_value(prio,i); | ||
3813 | 3775 | ||
3814 | /* Skip TLS v1.2 only ciphersuites if lower than v1.2 */ | 3776 | /* Skip TLS v1.2 only ciphersuites if lower than v1.2 */ |
3815 | if ((c->algorithm_ssl & SSL_TLSV1_2) && | 3777 | if ((c->algorithm_ssl & SSL_TLSV1_2) && |
3816 | (TLS1_get_version(s) < TLS1_2_VERSION)) | 3778 | (TLS1_get_version(s) < TLS1_2_VERSION)) |
3817 | continue; | 3779 | continue; |
3818 | 3780 | ||
3819 | ssl_set_cert_masks(cert,c); | 3781 | ssl_set_cert_masks(cert, c); |
3820 | mask_k = cert->mask_k; | 3782 | mask_k = cert->mask_k; |
3821 | mask_a = cert->mask_a; | 3783 | mask_a = cert->mask_a; |
3822 | emask_k = cert->export_mask_k; | 3784 | emask_k = cert->export_mask_k; |
3823 | emask_a = cert->export_mask_a; | 3785 | emask_a = cert->export_mask_a; |
3824 | #ifndef OPENSSL_NO_SRP | 3786 | #ifndef OPENSSL_NO_SRP |
3825 | mask_k=cert->mask_k | s->srp_ctx.srp_Mask; | 3787 | mask_k = cert->mask_k | s->srp_ctx.srp_Mask; |
3826 | emask_k=cert->export_mask_k | s->srp_ctx.srp_Mask; | 3788 | emask_k = cert->export_mask_k | s->srp_ctx.srp_Mask; |
3827 | #endif | 3789 | #endif |
3828 | 3790 | ||
3829 | #ifdef KSSL_DEBUG | 3791 | #ifdef KSSL_DEBUG |
3830 | /* printf("ssl3_choose_cipher %d alg= %lx\n", i,c->algorithms);*/ | 3792 | /* printf("ssl3_choose_cipher %d alg= %lx\n", i,c->algorithms);*/ |
3831 | #endif /* KSSL_DEBUG */ | 3793 | #endif /* KSSL_DEBUG */ |
3832 | 3794 | ||
3833 | alg_k=c->algorithm_mkey; | 3795 | alg_k = c->algorithm_mkey; |
3834 | alg_a=c->algorithm_auth; | 3796 | alg_a = c->algorithm_auth; |
3835 | 3797 | ||
3836 | #ifndef OPENSSL_NO_KRB5 | 3798 | #ifndef OPENSSL_NO_KRB5 |
3837 | if (alg_k & SSL_kKRB5) | 3799 | if (alg_k & SSL_kKRB5) { |
3838 | { | 3800 | if (!kssl_keytab_is_available(s->kssl_ctx) ) |
3839 | if ( !kssl_keytab_is_available(s->kssl_ctx) ) | 3801 | continue; |
3840 | continue; | 3802 | } |
3841 | } | ||
3842 | #endif /* OPENSSL_NO_KRB5 */ | 3803 | #endif /* OPENSSL_NO_KRB5 */ |
3843 | #ifndef OPENSSL_NO_PSK | 3804 | #ifndef OPENSSL_NO_PSK |
3844 | /* with PSK there must be server callback set */ | 3805 | /* with PSK there must be server callback set */ |
@@ -3846,449 +3807,405 @@ SSL_CIPHER *ssl3_choose_cipher(SSL *s, STACK_OF(SSL_CIPHER) *clnt, | |||
3846 | continue; | 3807 | continue; |
3847 | #endif /* OPENSSL_NO_PSK */ | 3808 | #endif /* OPENSSL_NO_PSK */ |
3848 | 3809 | ||
3849 | if (SSL_C_IS_EXPORT(c)) | 3810 | if (SSL_C_IS_EXPORT(c)) { |
3850 | { | ||
3851 | ok = (alg_k & emask_k) && (alg_a & emask_a); | 3811 | ok = (alg_k & emask_k) && (alg_a & emask_a); |
3852 | #ifdef CIPHER_DEBUG | 3812 | #ifdef CIPHER_DEBUG |
3853 | printf("%d:[%08lX:%08lX:%08lX:%08lX]%p:%s (export)\n",ok,alg_k,alg_a,emask_k,emask_a, | 3813 | printf("%d:[%08lX:%08lX:%08lX:%08lX]%p:%s (export)\n", ok, alg_k, alg_a, emask_k, emask_a, |
3854 | (void *)c,c->name); | 3814 | (void *)c, c->name); |
3855 | #endif | 3815 | #endif |
3856 | } | 3816 | } else { |
3857 | else | ||
3858 | { | ||
3859 | ok = (alg_k & mask_k) && (alg_a & mask_a); | 3817 | ok = (alg_k & mask_k) && (alg_a & mask_a); |
3860 | #ifdef CIPHER_DEBUG | 3818 | #ifdef CIPHER_DEBUG |
3861 | printf("%d:[%08lX:%08lX:%08lX:%08lX]%p:%s\n",ok,alg_k,alg_a,mask_k,mask_a,(void *)c, | 3819 | printf("%d:[%08lX:%08lX:%08lX:%08lX]%p:%s\n", ok, alg_k, alg_a, mask_k, mask_a,(void *)c, |
3862 | c->name); | 3820 | c->name); |
3863 | #endif | 3821 | #endif |
3864 | } | 3822 | } |
3865 | 3823 | ||
3866 | #ifndef OPENSSL_NO_TLSEXT | 3824 | #ifndef OPENSSL_NO_TLSEXT |
3867 | #ifndef OPENSSL_NO_EC | 3825 | #ifndef OPENSSL_NO_EC |
3868 | if ( | 3826 | if ( |
3869 | /* if we are considering an ECC cipher suite that uses our certificate */ | 3827 | /* if we are considering an ECC cipher suite that uses our certificate */ |
3870 | (alg_a & SSL_aECDSA || alg_a & SSL_aECDH) | 3828 | (alg_a & SSL_aECDSA || alg_a & SSL_aECDH) |
3871 | /* and we have an ECC certificate */ | 3829 | /* and we have an ECC certificate */ |
3872 | && (s->cert->pkeys[SSL_PKEY_ECC].x509 != NULL) | 3830 | && (s->cert->pkeys[SSL_PKEY_ECC].x509 != NULL) |
3873 | /* and the client specified a Supported Point Formats extension */ | 3831 | /* and the client specified a Supported Point Formats extension */ |
3874 | && ((s->session->tlsext_ecpointformatlist_length > 0) && (s->session->tlsext_ecpointformatlist != NULL)) | 3832 | && ((s->session->tlsext_ecpointformatlist_length > 0) && (s->session->tlsext_ecpointformatlist != NULL)) |
3875 | /* and our certificate's point is compressed */ | 3833 | /* and our certificate's point is compressed */ |
3876 | && ( | 3834 | && ( |
3877 | (s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info != NULL) | 3835 | (s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info != NULL) |
3878 | && (s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info->key != NULL) | 3836 | && (s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info->key != NULL) |
3879 | && (s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info->key->public_key != NULL) | 3837 | && (s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info->key->public_key != NULL) |
3880 | && (s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info->key->public_key->data != NULL) | 3838 | && (s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info->key->public_key->data != NULL) |
3881 | && ( | 3839 | && ( |
3882 | (*(s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info->key->public_key->data) == POINT_CONVERSION_COMPRESSED) | 3840 | (*(s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info->key->public_key->data) == POINT_CONVERSION_COMPRESSED) |
3883 | || (*(s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info->key->public_key->data) == POINT_CONVERSION_COMPRESSED + 1) | 3841 | || (*(s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info->key->public_key->data) == POINT_CONVERSION_COMPRESSED + 1) |
3884 | ) | ||
3885 | ) | ||
3886 | ) | 3842 | ) |
3887 | { | 3843 | ) |
3844 | ) { | ||
3888 | ec_ok = 0; | 3845 | ec_ok = 0; |
3889 | /* if our certificate's curve is over a field type that the client does not support | 3846 | /* if our certificate's curve is over a field type that the client does not support |
3890 | * then do not allow this cipher suite to be negotiated */ | 3847 | * then do not allow this cipher suite to be negotiated */ |
3891 | if ( | 3848 | if ( |
3892 | (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec != NULL) | 3849 | (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec != NULL) |
3893 | && (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group != NULL) | 3850 | && (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group != NULL) |
3894 | && (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group->meth != NULL) | 3851 | && (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group->meth != NULL) |
3895 | && (EC_METHOD_get_field_type(s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group->meth) == NID_X9_62_prime_field) | 3852 | && (EC_METHOD_get_field_type(s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group->meth) == NID_X9_62_prime_field) |
3896 | ) | 3853 | ) { |
3897 | { | 3854 | for (j = 0; j < s->session->tlsext_ecpointformatlist_length; j++) { |
3898 | for (j = 0; j < s->session->tlsext_ecpointformatlist_length; j++) | 3855 | if (s->session->tlsext_ecpointformatlist[j] == TLSEXT_ECPOINTFORMAT_ansiX962_compressed_prime) { |
3899 | { | ||
3900 | if (s->session->tlsext_ecpointformatlist[j] == TLSEXT_ECPOINTFORMAT_ansiX962_compressed_prime) | ||
3901 | { | ||
3902 | ec_ok = 1; | 3856 | ec_ok = 1; |
3903 | break; | 3857 | break; |
3904 | } | ||
3905 | } | 3858 | } |
3906 | } | 3859 | } |
3907 | else if (EC_METHOD_get_field_type(s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group->meth) == NID_X9_62_characteristic_two_field) | 3860 | } else if (EC_METHOD_get_field_type(s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group->meth) == NID_X9_62_characteristic_two_field) { |
3908 | { | 3861 | for (j = 0; j < s->session->tlsext_ecpointformatlist_length; j++) { |
3909 | for (j = 0; j < s->session->tlsext_ecpointformatlist_length; j++) | 3862 | if (s->session->tlsext_ecpointformatlist[j] == TLSEXT_ECPOINTFORMAT_ansiX962_compressed_char2) { |
3910 | { | ||
3911 | if (s->session->tlsext_ecpointformatlist[j] == TLSEXT_ECPOINTFORMAT_ansiX962_compressed_char2) | ||
3912 | { | ||
3913 | ec_ok = 1; | 3863 | ec_ok = 1; |
3914 | break; | 3864 | break; |
3915 | } | ||
3916 | } | 3865 | } |
3917 | } | 3866 | } |
3918 | ok = ok && ec_ok; | ||
3919 | } | 3867 | } |
3868 | ok = ok && ec_ok; | ||
3869 | } | ||
3920 | if ( | 3870 | if ( |
3921 | /* if we are considering an ECC cipher suite that uses our certificate */ | 3871 | /* if we are considering an ECC cipher suite that uses our certificate */ |
3922 | (alg_a & SSL_aECDSA || alg_a & SSL_aECDH) | 3872 | (alg_a & SSL_aECDSA || alg_a & SSL_aECDH) |
3923 | /* and we have an ECC certificate */ | 3873 | /* and we have an ECC certificate */ |
3924 | && (s->cert->pkeys[SSL_PKEY_ECC].x509 != NULL) | 3874 | && (s->cert->pkeys[SSL_PKEY_ECC].x509 != NULL) |
3925 | /* and the client specified an EllipticCurves extension */ | 3875 | /* and the client specified an EllipticCurves extension */ |
3926 | && ((s->session->tlsext_ellipticcurvelist_length > 0) && (s->session->tlsext_ellipticcurvelist != NULL)) | 3876 | && ((s->session->tlsext_ellipticcurvelist_length > 0) && (s->session->tlsext_ellipticcurvelist != NULL)) |
3927 | ) | 3877 | ) { |
3928 | { | ||
3929 | ec_ok = 0; | 3878 | ec_ok = 0; |
3930 | if ( | 3879 | if ( |
3931 | (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec != NULL) | 3880 | (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec != NULL) |
3932 | && (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group != NULL) | 3881 | && (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group != NULL) |
3933 | ) | 3882 | ) { |
3934 | { | ||
3935 | ec_nid = EC_GROUP_get_curve_name(s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group); | 3883 | ec_nid = EC_GROUP_get_curve_name(s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group); |
3936 | if ((ec_nid == 0) | 3884 | if ((ec_nid == 0) |
3937 | && (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group->meth != NULL) | 3885 | && (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group->meth != NULL) |
3938 | ) | 3886 | ) { |
3939 | { | 3887 | if (EC_METHOD_get_field_type(s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group->meth) == NID_X9_62_prime_field) { |
3940 | if (EC_METHOD_get_field_type(s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group->meth) == NID_X9_62_prime_field) | ||
3941 | { | ||
3942 | ec_search1 = 0xFF; | 3888 | ec_search1 = 0xFF; |
3943 | ec_search2 = 0x01; | 3889 | ec_search2 = 0x01; |
3944 | } | 3890 | } else if (EC_METHOD_get_field_type(s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group->meth) == NID_X9_62_characteristic_two_field) { |
3945 | else if (EC_METHOD_get_field_type(s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group->meth) == NID_X9_62_characteristic_two_field) | ||
3946 | { | ||
3947 | ec_search1 = 0xFF; | 3891 | ec_search1 = 0xFF; |
3948 | ec_search2 = 0x02; | 3892 | ec_search2 = 0x02; |
3949 | } | ||
3950 | } | 3893 | } |
3951 | else | 3894 | } else { |
3952 | { | ||
3953 | ec_search1 = 0x00; | 3895 | ec_search1 = 0x00; |
3954 | ec_search2 = tls1_ec_nid2curve_id(ec_nid); | 3896 | ec_search2 = tls1_ec_nid2curve_id(ec_nid); |
3955 | } | 3897 | } |
3956 | if ((ec_search1 != 0) || (ec_search2 != 0)) | 3898 | if ((ec_search1 != 0) || (ec_search2 != 0)) { |
3957 | { | 3899 | for (j = 0; j < s->session->tlsext_ellipticcurvelist_length / 2; j++) { |
3958 | for (j = 0; j < s->session->tlsext_ellipticcurvelist_length / 2; j++) | 3900 | if ((s->session->tlsext_ellipticcurvelist[2*j] == ec_search1) && (s->session->tlsext_ellipticcurvelist[2*j + 1] == ec_search2)) { |
3959 | { | ||
3960 | if ((s->session->tlsext_ellipticcurvelist[2*j] == ec_search1) && (s->session->tlsext_ellipticcurvelist[2*j+1] == ec_search2)) | ||
3961 | { | ||
3962 | ec_ok = 1; | 3901 | ec_ok = 1; |
3963 | break; | 3902 | break; |
3964 | } | ||
3965 | } | 3903 | } |
3966 | } | 3904 | } |
3967 | } | 3905 | } |
3968 | ok = ok && ec_ok; | ||
3969 | } | 3906 | } |
3907 | ok = ok && ec_ok; | ||
3908 | } | ||
3970 | if ( | 3909 | if ( |
3971 | /* if we are considering an ECC cipher suite that uses an ephemeral EC key */ | 3910 | /* if we are considering an ECC cipher suite that uses an ephemeral EC key */ |
3972 | (alg_k & SSL_kEECDH) | 3911 | (alg_k & SSL_kEECDH) |
3973 | /* and we have an ephemeral EC key */ | 3912 | /* and we have an ephemeral EC key */ |
3974 | && (s->cert->ecdh_tmp != NULL) | 3913 | && (s->cert->ecdh_tmp != NULL) |
3975 | /* and the client specified an EllipticCurves extension */ | 3914 | /* and the client specified an EllipticCurves extension */ |
3976 | && ((s->session->tlsext_ellipticcurvelist_length > 0) && (s->session->tlsext_ellipticcurvelist != NULL)) | 3915 | && ((s->session->tlsext_ellipticcurvelist_length > 0) && (s->session->tlsext_ellipticcurvelist != NULL)) |
3977 | ) | 3916 | ) { |
3978 | { | ||
3979 | ec_ok = 0; | 3917 | ec_ok = 0; |
3980 | if (s->cert->ecdh_tmp->group != NULL) | 3918 | if (s->cert->ecdh_tmp->group != NULL) { |
3981 | { | ||
3982 | ec_nid = EC_GROUP_get_curve_name(s->cert->ecdh_tmp->group); | 3919 | ec_nid = EC_GROUP_get_curve_name(s->cert->ecdh_tmp->group); |
3983 | if ((ec_nid == 0) | 3920 | if ((ec_nid == 0) |
3984 | && (s->cert->ecdh_tmp->group->meth != NULL) | 3921 | && (s->cert->ecdh_tmp->group->meth != NULL) |
3985 | ) | 3922 | ) { |
3986 | { | 3923 | if (EC_METHOD_get_field_type(s->cert->ecdh_tmp->group->meth) == NID_X9_62_prime_field) { |
3987 | if (EC_METHOD_get_field_type(s->cert->ecdh_tmp->group->meth) == NID_X9_62_prime_field) | ||
3988 | { | ||
3989 | ec_search1 = 0xFF; | 3924 | ec_search1 = 0xFF; |
3990 | ec_search2 = 0x01; | 3925 | ec_search2 = 0x01; |
3991 | } | 3926 | } else if (EC_METHOD_get_field_type(s->cert->ecdh_tmp->group->meth) == NID_X9_62_characteristic_two_field) { |
3992 | else if (EC_METHOD_get_field_type(s->cert->ecdh_tmp->group->meth) == NID_X9_62_characteristic_two_field) | ||
3993 | { | ||
3994 | ec_search1 = 0xFF; | 3927 | ec_search1 = 0xFF; |
3995 | ec_search2 = 0x02; | 3928 | ec_search2 = 0x02; |
3996 | } | ||
3997 | } | 3929 | } |
3998 | else | 3930 | } else { |
3999 | { | ||
4000 | ec_search1 = 0x00; | 3931 | ec_search1 = 0x00; |
4001 | ec_search2 = tls1_ec_nid2curve_id(ec_nid); | 3932 | ec_search2 = tls1_ec_nid2curve_id(ec_nid); |
4002 | } | 3933 | } |
4003 | if ((ec_search1 != 0) || (ec_search2 != 0)) | 3934 | if ((ec_search1 != 0) || (ec_search2 != 0)) { |
4004 | { | 3935 | for (j = 0; j < s->session->tlsext_ellipticcurvelist_length / 2; j++) { |
4005 | for (j = 0; j < s->session->tlsext_ellipticcurvelist_length / 2; j++) | 3936 | if ((s->session->tlsext_ellipticcurvelist[2*j] == ec_search1) && (s->session->tlsext_ellipticcurvelist[2*j + 1] == ec_search2)) { |
4006 | { | ||
4007 | if ((s->session->tlsext_ellipticcurvelist[2*j] == ec_search1) && (s->session->tlsext_ellipticcurvelist[2*j+1] == ec_search2)) | ||
4008 | { | ||
4009 | ec_ok = 1; | 3937 | ec_ok = 1; |
4010 | break; | 3938 | break; |
4011 | } | ||
4012 | } | 3939 | } |
4013 | } | 3940 | } |
4014 | } | 3941 | } |
4015 | ok = ok && ec_ok; | ||
4016 | } | 3942 | } |
3943 | ok = ok && ec_ok; | ||
3944 | } | ||
4017 | #endif /* OPENSSL_NO_EC */ | 3945 | #endif /* OPENSSL_NO_EC */ |
4018 | #endif /* OPENSSL_NO_TLSEXT */ | 3946 | #endif /* OPENSSL_NO_TLSEXT */ |
4019 | 3947 | ||
4020 | if (!ok) continue; | 3948 | if (!ok) |
4021 | ii=sk_SSL_CIPHER_find(allow,c); | 3949 | continue; |
4022 | if (ii >= 0) | 3950 | ii = sk_SSL_CIPHER_find(allow, c); |
4023 | { | 3951 | if (ii >= 0) { |
4024 | #if !defined(OPENSSL_NO_EC) && !defined(OPENSSL_NO_TLSEXT) | 3952 | #if !defined(OPENSSL_NO_EC) && !defined(OPENSSL_NO_TLSEXT) |
4025 | if ((alg_k & SSL_kEECDH) && (alg_a & SSL_aECDSA) && s->s3->is_probably_safari) | 3953 | if ((alg_k & SSL_kEECDH) && (alg_a & SSL_aECDSA) && s->s3->is_probably_safari) { |
4026 | { | 3954 | if (!ret) |
4027 | if (!ret) ret=sk_SSL_CIPHER_value(allow,ii); | 3955 | ret = sk_SSL_CIPHER_value(allow, ii); |
4028 | continue; | 3956 | continue; |
4029 | } | 3957 | } |
4030 | #endif | 3958 | #endif |
4031 | ret=sk_SSL_CIPHER_value(allow,ii); | 3959 | ret = sk_SSL_CIPHER_value(allow, ii); |
4032 | break; | 3960 | break; |
4033 | } | ||
4034 | } | 3961 | } |
4035 | return(ret); | ||
4036 | } | 3962 | } |
3963 | return (ret); | ||
3964 | } | ||
4037 | 3965 | ||
4038 | int ssl3_get_req_cert_type(SSL *s, unsigned char *p) | 3966 | int |
4039 | { | 3967 | ssl3_get_req_cert_type(SSL *s, unsigned char *p) |
4040 | int ret=0; | 3968 | { |
3969 | int ret = 0; | ||
4041 | unsigned long alg_k; | 3970 | unsigned long alg_k; |
4042 | 3971 | ||
4043 | alg_k = s->s3->tmp.new_cipher->algorithm_mkey; | 3972 | alg_k = s->s3->tmp.new_cipher->algorithm_mkey; |
4044 | 3973 | ||
4045 | #ifndef OPENSSL_NO_GOST | 3974 | #ifndef OPENSSL_NO_GOST |
4046 | if (s->version >= TLS1_VERSION) | 3975 | if (s->version >= TLS1_VERSION) { |
4047 | { | 3976 | if (alg_k & SSL_kGOST) { |
4048 | if (alg_k & SSL_kGOST) | 3977 | p[ret++] = TLS_CT_GOST94_SIGN; |
4049 | { | 3978 | p[ret++] = TLS_CT_GOST01_SIGN; |
4050 | p[ret++]=TLS_CT_GOST94_SIGN; | 3979 | return (ret); |
4051 | p[ret++]=TLS_CT_GOST01_SIGN; | ||
4052 | return(ret); | ||
4053 | } | ||
4054 | } | 3980 | } |
3981 | } | ||
4055 | #endif | 3982 | #endif |
4056 | 3983 | ||
4057 | #ifndef OPENSSL_NO_DH | 3984 | #ifndef OPENSSL_NO_DH |
4058 | if (alg_k & (SSL_kDHr|SSL_kEDH)) | 3985 | if (alg_k & (SSL_kDHr|SSL_kEDH)) { |
4059 | { | ||
4060 | # ifndef OPENSSL_NO_RSA | 3986 | # ifndef OPENSSL_NO_RSA |
4061 | p[ret++]=SSL3_CT_RSA_FIXED_DH; | 3987 | p[ret++] = SSL3_CT_RSA_FIXED_DH; |
4062 | # endif | 3988 | # endif |
4063 | # ifndef OPENSSL_NO_DSA | 3989 | # ifndef OPENSSL_NO_DSA |
4064 | p[ret++]=SSL3_CT_DSS_FIXED_DH; | 3990 | p[ret++] = SSL3_CT_DSS_FIXED_DH; |
4065 | # endif | 3991 | # endif |
4066 | } | 3992 | } |
4067 | if ((s->version == SSL3_VERSION) && | 3993 | if ((s->version == SSL3_VERSION) && |
4068 | (alg_k & (SSL_kEDH|SSL_kDHd|SSL_kDHr))) | 3994 | (alg_k & (SSL_kEDH|SSL_kDHd|SSL_kDHr))) { |
4069 | { | ||
4070 | # ifndef OPENSSL_NO_RSA | 3995 | # ifndef OPENSSL_NO_RSA |
4071 | p[ret++]=SSL3_CT_RSA_EPHEMERAL_DH; | 3996 | p[ret++] = SSL3_CT_RSA_EPHEMERAL_DH; |
4072 | # endif | 3997 | # endif |
4073 | # ifndef OPENSSL_NO_DSA | 3998 | # ifndef OPENSSL_NO_DSA |
4074 | p[ret++]=SSL3_CT_DSS_EPHEMERAL_DH; | 3999 | p[ret++] = SSL3_CT_DSS_EPHEMERAL_DH; |
4075 | # endif | 4000 | # endif |
4076 | } | 4001 | } |
4077 | #endif /* !OPENSSL_NO_DH */ | 4002 | #endif /* !OPENSSL_NO_DH */ |
4078 | #ifndef OPENSSL_NO_RSA | 4003 | #ifndef OPENSSL_NO_RSA |
4079 | p[ret++]=SSL3_CT_RSA_SIGN; | 4004 | p[ret++] = SSL3_CT_RSA_SIGN; |
4080 | #endif | 4005 | #endif |
4081 | #ifndef OPENSSL_NO_DSA | 4006 | #ifndef OPENSSL_NO_DSA |
4082 | p[ret++]=SSL3_CT_DSS_SIGN; | 4007 | p[ret++] = SSL3_CT_DSS_SIGN; |
4083 | #endif | 4008 | #endif |
4084 | #ifndef OPENSSL_NO_ECDH | 4009 | #ifndef OPENSSL_NO_ECDH |
4085 | if ((alg_k & (SSL_kECDHr|SSL_kECDHe)) && (s->version >= TLS1_VERSION)) | 4010 | if ((alg_k & (SSL_kECDHr|SSL_kECDHe)) && (s->version >= TLS1_VERSION)) { |
4086 | { | 4011 | p[ret++] = TLS_CT_RSA_FIXED_ECDH; |
4087 | p[ret++]=TLS_CT_RSA_FIXED_ECDH; | 4012 | p[ret++] = TLS_CT_ECDSA_FIXED_ECDH; |
4088 | p[ret++]=TLS_CT_ECDSA_FIXED_ECDH; | 4013 | } |
4089 | } | ||
4090 | #endif | 4014 | #endif |
4091 | 4015 | ||
4092 | #ifndef OPENSSL_NO_ECDSA | 4016 | #ifndef OPENSSL_NO_ECDSA |
4093 | /* ECDSA certs can be used with RSA cipher suites as well | 4017 | /* ECDSA certs can be used with RSA cipher suites as well |
4094 | * so we don't need to check for SSL_kECDH or SSL_kEECDH | 4018 | * so we don't need to check for SSL_kECDH or SSL_kEECDH |
4095 | */ | 4019 | */ |
4096 | if (s->version >= TLS1_VERSION) | 4020 | if (s->version >= TLS1_VERSION) { |
4097 | { | 4021 | p[ret++] = TLS_CT_ECDSA_SIGN; |
4098 | p[ret++]=TLS_CT_ECDSA_SIGN; | ||
4099 | } | ||
4100 | #endif | ||
4101 | return(ret); | ||
4102 | } | 4022 | } |
4023 | #endif | ||
4024 | return (ret); | ||
4025 | } | ||
4103 | 4026 | ||
4104 | int ssl3_shutdown(SSL *s) | 4027 | int |
4105 | { | 4028 | ssl3_shutdown(SSL *s) |
4029 | { | ||
4106 | int ret; | 4030 | int ret; |
4107 | 4031 | ||
4108 | /* Don't do anything much if we have not done the handshake or | 4032 | /* Don't do anything much if we have not done the handshake or |
4109 | * we don't want to send messages :-) */ | 4033 | * we don't want to send messages :-) */ |
4110 | if ((s->quiet_shutdown) || (s->state == SSL_ST_BEFORE)) | 4034 | if ((s->quiet_shutdown) || (s->state == SSL_ST_BEFORE)) { |
4111 | { | 4035 | s->shutdown = (SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN); |
4112 | s->shutdown=(SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN); | 4036 | return (1); |
4113 | return(1); | 4037 | } |
4114 | } | ||
4115 | 4038 | ||
4116 | if (!(s->shutdown & SSL_SENT_SHUTDOWN)) | 4039 | if (!(s->shutdown & SSL_SENT_SHUTDOWN)) { |
4117 | { | ||
4118 | s->shutdown|=SSL_SENT_SHUTDOWN; | 4040 | s->shutdown|=SSL_SENT_SHUTDOWN; |
4119 | #if 1 | 4041 | #if 1 |
4120 | ssl3_send_alert(s,SSL3_AL_WARNING,SSL_AD_CLOSE_NOTIFY); | 4042 | ssl3_send_alert(s, SSL3_AL_WARNING, SSL_AD_CLOSE_NOTIFY); |
4121 | #endif | 4043 | #endif |
4122 | /* our shutdown alert has been sent now, and if it still needs | 4044 | /* our shutdown alert has been sent now, and if it still needs |
4123 | * to be written, s->s3->alert_dispatch will be true */ | 4045 | * to be written, s->s3->alert_dispatch will be true */ |
4124 | if (s->s3->alert_dispatch) | 4046 | if (s->s3->alert_dispatch) |
4125 | return(-1); /* return WANT_WRITE */ | 4047 | return(-1); /* return WANT_WRITE */ |
4126 | } | 4048 | } else if (s->s3->alert_dispatch) { |
4127 | else if (s->s3->alert_dispatch) | ||
4128 | { | ||
4129 | /* resend it if not sent */ | 4049 | /* resend it if not sent */ |
4130 | #if 1 | 4050 | #if 1 |
4131 | ret=s->method->ssl_dispatch_alert(s); | 4051 | ret = s->method->ssl_dispatch_alert(s); |
4132 | if(ret == -1) | 4052 | if (ret == -1) { |
4133 | { | ||
4134 | /* we only get to return -1 here the 2nd/Nth | 4053 | /* we only get to return -1 here the 2nd/Nth |
4135 | * invocation, we must have already signalled | 4054 | * invocation, we must have already signalled |
4136 | * return 0 upon a previous invoation, | 4055 | * return 0 upon a previous invoation, |
4137 | * return WANT_WRITE */ | 4056 | * return WANT_WRITE */ |
4138 | return(ret); | 4057 | return (ret); |
4139 | } | ||
4140 | #endif | ||
4141 | } | 4058 | } |
4142 | else if (!(s->shutdown & SSL_RECEIVED_SHUTDOWN)) | 4059 | #endif |
4143 | { | 4060 | } else if (!(s->shutdown & SSL_RECEIVED_SHUTDOWN)) { |
4144 | /* If we are waiting for a close from our peer, we are closed */ | 4061 | /* If we are waiting for a close from our peer, we are closed */ |
4145 | s->method->ssl_read_bytes(s,0,NULL,0,0); | 4062 | s->method->ssl_read_bytes(s, 0, NULL, 0, 0); |
4146 | if(!(s->shutdown & SSL_RECEIVED_SHUTDOWN)) | 4063 | if (!(s->shutdown & SSL_RECEIVED_SHUTDOWN)) { |
4147 | { | ||
4148 | return(-1); /* return WANT_READ */ | 4064 | return(-1); /* return WANT_READ */ |
4149 | } | ||
4150 | } | 4065 | } |
4066 | } | ||
4151 | 4067 | ||
4152 | if ((s->shutdown == (SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN)) && | 4068 | if ((s->shutdown == (SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN)) && |
4153 | !s->s3->alert_dispatch) | 4069 | !s->s3->alert_dispatch) |
4154 | return(1); | 4070 | return (1); |
4155 | else | 4071 | else |
4156 | return(0); | 4072 | return (0); |
4157 | } | 4073 | } |
4158 | 4074 | ||
4159 | int ssl3_write(SSL *s, const void *buf, int len) | 4075 | int |
4160 | { | 4076 | ssl3_write(SSL *s, const void *buf, int len) |
4161 | int ret,n; | 4077 | { |
4078 | int ret, n; | ||
4162 | 4079 | ||
4163 | #if 0 | 4080 | #if 0 |
4164 | if (s->shutdown & SSL_SEND_SHUTDOWN) | 4081 | if (s->shutdown & SSL_SEND_SHUTDOWN) { |
4165 | { | 4082 | s->rwstate = SSL_NOTHING; |
4166 | s->rwstate=SSL_NOTHING; | 4083 | return (0); |
4167 | return(0); | 4084 | } |
4168 | } | ||
4169 | #endif | 4085 | #endif |
4170 | errno = 0; | 4086 | errno = 0; |
4171 | if (s->s3->renegotiate) ssl3_renegotiate_check(s); | 4087 | if (s->s3->renegotiate) |
4088 | ssl3_renegotiate_check(s); | ||
4172 | 4089 | ||
4173 | /* This is an experimental flag that sends the | 4090 | /* This is an experimental flag that sends the |
4174 | * last handshake message in the same packet as the first | 4091 | * last handshake message in the same packet as the first |
4175 | * use data - used to see if it helps the TCP protocol during | 4092 | * use data - used to see if it helps the TCP protocol during |
4176 | * session-id reuse */ | 4093 | * session-id reuse */ |
4177 | /* The second test is because the buffer may have been removed */ | 4094 | /* The second test is because the buffer may have been removed */ |
4178 | if ((s->s3->flags & SSL3_FLAGS_POP_BUFFER) && (s->wbio == s->bbio)) | 4095 | if ((s->s3->flags & SSL3_FLAGS_POP_BUFFER) && (s->wbio == s->bbio)) { |
4179 | { | ||
4180 | /* First time through, we write into the buffer */ | 4096 | /* First time through, we write into the buffer */ |
4181 | if (s->s3->delay_buf_pop_ret == 0) | 4097 | if (s->s3->delay_buf_pop_ret == 0) { |
4182 | { | 4098 | ret = ssl3_write_bytes(s, SSL3_RT_APPLICATION_DATA, |
4183 | ret=ssl3_write_bytes(s,SSL3_RT_APPLICATION_DATA, | 4099 | buf, len); |
4184 | buf,len); | 4100 | if (ret <= 0) |
4185 | if (ret <= 0) return(ret); | 4101 | return (ret); |
4186 | 4102 | ||
4187 | s->s3->delay_buf_pop_ret=ret; | 4103 | s->s3->delay_buf_pop_ret = ret; |
4188 | } | 4104 | } |
4189 | 4105 | ||
4190 | s->rwstate=SSL_WRITING; | 4106 | s->rwstate = SSL_WRITING; |
4191 | n=BIO_flush(s->wbio); | 4107 | n = BIO_flush(s->wbio); |
4192 | if (n <= 0) return(n); | 4108 | if (n <= 0) |
4193 | s->rwstate=SSL_NOTHING; | 4109 | return (n); |
4110 | s->rwstate = SSL_NOTHING; | ||
4194 | 4111 | ||
4195 | /* We have flushed the buffer, so remove it */ | 4112 | /* We have flushed the buffer, so remove it */ |
4196 | ssl_free_wbio_buffer(s); | 4113 | ssl_free_wbio_buffer(s); |
4197 | s->s3->flags&= ~SSL3_FLAGS_POP_BUFFER; | 4114 | s->s3->flags&= ~SSL3_FLAGS_POP_BUFFER; |
4198 | 4115 | ||
4199 | ret=s->s3->delay_buf_pop_ret; | 4116 | ret = s->s3->delay_buf_pop_ret; |
4200 | s->s3->delay_buf_pop_ret=0; | 4117 | s->s3->delay_buf_pop_ret = 0; |
4201 | } | 4118 | } else { |
4202 | else | 4119 | ret = s->method->ssl_write_bytes(s, SSL3_RT_APPLICATION_DATA, |
4203 | { | 4120 | buf, len); |
4204 | ret=s->method->ssl_write_bytes(s,SSL3_RT_APPLICATION_DATA, | 4121 | if (ret <= 0) |
4205 | buf,len); | 4122 | return (ret); |
4206 | if (ret <= 0) return(ret); | ||
4207 | } | ||
4208 | |||
4209 | return(ret); | ||
4210 | } | 4123 | } |
4211 | 4124 | ||
4212 | static int ssl3_read_internal(SSL *s, void *buf, int len, int peek) | 4125 | return (ret); |
4213 | { | 4126 | } |
4127 | |||
4128 | static int | ||
4129 | ssl3_read_internal(SSL *s, void *buf, int len, int peek) | ||
4130 | { | ||
4214 | int ret; | 4131 | int ret; |
4215 | 4132 | ||
4216 | errno = 0; | 4133 | errno = 0; |
4217 | if (s->s3->renegotiate) ssl3_renegotiate_check(s); | 4134 | if (s->s3->renegotiate) |
4218 | s->s3->in_read_app_data=1; | 4135 | ssl3_renegotiate_check(s); |
4219 | ret=s->method->ssl_read_bytes(s,SSL3_RT_APPLICATION_DATA,buf,len,peek); | 4136 | s->s3->in_read_app_data = 1; |
4220 | if ((ret == -1) && (s->s3->in_read_app_data == 2)) | 4137 | ret = s->method->ssl_read_bytes(s, SSL3_RT_APPLICATION_DATA, buf, len, peek); |
4221 | { | 4138 | if ((ret == -1) && (s->s3->in_read_app_data == 2)) { |
4222 | /* ssl3_read_bytes decided to call s->handshake_func, which | 4139 | /* ssl3_read_bytes decided to call s->handshake_func, which |
4223 | * called ssl3_read_bytes to read handshake data. | 4140 | * called ssl3_read_bytes to read handshake data. |
4224 | * However, ssl3_read_bytes actually found application data | 4141 | * However, ssl3_read_bytes actually found application data |
4225 | * and thinks that application data makes sense here; so disable | 4142 | * and thinks that application data makes sense here; so disable |
4226 | * handshake processing and try to read application data again. */ | 4143 | * handshake processing and try to read application data again. */ |
4227 | s->in_handshake++; | 4144 | s->in_handshake++; |
4228 | ret=s->method->ssl_read_bytes(s,SSL3_RT_APPLICATION_DATA,buf,len,peek); | 4145 | ret = s->method->ssl_read_bytes(s, SSL3_RT_APPLICATION_DATA, buf, len, peek); |
4229 | s->in_handshake--; | 4146 | s->in_handshake--; |
4230 | } | 4147 | } else |
4231 | else | 4148 | s->s3->in_read_app_data = 0; |
4232 | s->s3->in_read_app_data=0; | ||
4233 | 4149 | ||
4234 | return(ret); | 4150 | return (ret); |
4235 | } | 4151 | } |
4236 | 4152 | ||
4237 | int ssl3_read(SSL *s, void *buf, int len) | 4153 | int |
4238 | { | 4154 | ssl3_read(SSL *s, void *buf, int len) |
4155 | { | ||
4239 | return ssl3_read_internal(s, buf, len, 0); | 4156 | return ssl3_read_internal(s, buf, len, 0); |
4240 | } | 4157 | } |
4241 | 4158 | ||
4242 | int ssl3_peek(SSL *s, void *buf, int len) | 4159 | int |
4243 | { | 4160 | ssl3_peek(SSL *s, void *buf, int len) |
4161 | { | ||
4244 | return ssl3_read_internal(s, buf, len, 1); | 4162 | return ssl3_read_internal(s, buf, len, 1); |
4245 | } | 4163 | } |
4246 | 4164 | ||
4247 | int ssl3_renegotiate(SSL *s) | 4165 | int |
4248 | { | 4166 | ssl3_renegotiate(SSL *s) |
4167 | { | ||
4249 | if (s->handshake_func == NULL) | 4168 | if (s->handshake_func == NULL) |
4250 | return(1); | 4169 | return (1); |
4251 | 4170 | ||
4252 | if (s->s3->flags & SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS) | 4171 | if (s->s3->flags & SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS) |
4253 | return(0); | 4172 | return (0); |
4254 | 4173 | ||
4255 | s->s3->renegotiate=1; | 4174 | s->s3->renegotiate = 1; |
4256 | return(1); | 4175 | return (1); |
4257 | } | 4176 | } |
4258 | 4177 | ||
4259 | int ssl3_renegotiate_check(SSL *s) | 4178 | int |
4260 | { | 4179 | ssl3_renegotiate_check(SSL *s) |
4261 | int ret=0; | 4180 | { |
4181 | int ret = 0; | ||
4262 | 4182 | ||
4263 | if (s->s3->renegotiate) | 4183 | if (s->s3->renegotiate) { |
4264 | { | 4184 | if ((s->s3->rbuf.left == 0) && (s->s3->wbuf.left == 0) && |
4265 | if ( (s->s3->rbuf.left == 0) && | 4185 | !SSL_in_init(s)) { |
4266 | (s->s3->wbuf.left == 0) && | ||
4267 | !SSL_in_init(s)) | ||
4268 | { | ||
4269 | /* | 4186 | /* |
4270 | if we are the server, and we have sent a 'RENEGOTIATE' message, we | 4187 | if we are the server, and we have sent a 'RENEGOTIATE' message, we |
4271 | need to go to SSL_ST_ACCEPT. | 4188 | need to go to SSL_ST_ACCEPT. |
4272 | */ | 4189 | */ |
4273 | /* SSL_ST_ACCEPT */ | 4190 | /* SSL_ST_ACCEPT */ |
4274 | s->state=SSL_ST_RENEGOTIATE; | 4191 | s->state = SSL_ST_RENEGOTIATE; |
4275 | s->s3->renegotiate=0; | 4192 | s->s3->renegotiate = 0; |
4276 | s->s3->num_renegotiations++; | 4193 | s->s3->num_renegotiations++; |
4277 | s->s3->total_renegotiations++; | 4194 | s->s3->total_renegotiations++; |
4278 | ret=1; | 4195 | ret = 1; |
4279 | } | ||
4280 | } | 4196 | } |
4281 | return(ret); | ||
4282 | } | 4197 | } |
4198 | return (ret); | ||
4199 | } | ||
4283 | /* If we are using TLS v1.2 or later and default SHA1+MD5 algorithms switch | 4200 | /* If we are using TLS v1.2 or later and default SHA1+MD5 algorithms switch |
4284 | * to new SHA256 PRF and handshake macs | 4201 | * to new SHA256 PRF and handshake macs |
4285 | */ | 4202 | */ |
4286 | long ssl_get_algorithm2(SSL *s) | 4203 | long |
4287 | { | 4204 | ssl_get_algorithm2(SSL *s) |
4205 | { | ||
4288 | long alg2 = s->s3->tmp.new_cipher->algorithm2; | 4206 | long alg2 = s->s3->tmp.new_cipher->algorithm2; |
4289 | if (s->method->version == TLS1_2_VERSION && | 4207 | if (s->method->version == TLS1_2_VERSION && |
4290 | alg2 == (SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF)) | 4208 | alg2 == (SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF)) |
4291 | return SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256; | 4209 | return SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256; |
4292 | return alg2; | 4210 | return alg2; |
4293 | } | 4211 | } |
4294 | |||
diff --git a/src/lib/libssl/s3_pkt.c b/src/lib/libssl/s3_pkt.c index 6b55d21a3e..6c677d9f6b 100644 --- a/src/lib/libssl/s3_pkt.c +++ b/src/lib/libssl/s3_pkt.c | |||
@@ -118,11 +118,12 @@ | |||
118 | #include <openssl/rand.h> | 118 | #include <openssl/rand.h> |
119 | 119 | ||
120 | static int do_ssl3_write(SSL *s, int type, const unsigned char *buf, | 120 | static int do_ssl3_write(SSL *s, int type, const unsigned char *buf, |
121 | unsigned int len, int create_empty_fragment); | 121 | unsigned int len, int create_empty_fragment); |
122 | static int ssl3_get_record(SSL *s); | 122 | static int ssl3_get_record(SSL *s); |
123 | 123 | ||
124 | int ssl3_read_n(SSL *s, int n, int max, int extend) | 124 | int |
125 | { | 125 | ssl3_read_n(SSL *s, int n, int max, int extend) |
126 | { | ||
126 | /* If extend == 0, obtain new n-byte packet; if extend == 1, increase | 127 | /* If extend == 0, obtain new n-byte packet; if extend == 1, increase |
127 | * packet by another n bytes. | 128 | * packet by another n bytes. |
128 | * The packet will be in the sub-array of s->s3->rbuf.buf specified | 129 | * The packet will be in the sub-array of s->s3->rbuf.buf specified |
@@ -130,37 +131,35 @@ int ssl3_read_n(SSL *s, int n, int max, int extend) | |||
130 | * (If s->read_ahead is set, 'max' bytes may be stored in rbuf | 131 | * (If s->read_ahead is set, 'max' bytes may be stored in rbuf |
131 | * [plus s->packet_length bytes if extend == 1].) | 132 | * [plus s->packet_length bytes if extend == 1].) |
132 | */ | 133 | */ |
133 | int i,len,left; | 134 | int i, len, left; |
134 | long align=0; | 135 | long align = 0; |
135 | unsigned char *pkt; | 136 | unsigned char *pkt; |
136 | SSL3_BUFFER *rb; | 137 | SSL3_BUFFER *rb; |
137 | 138 | ||
138 | if (n <= 0) return n; | 139 | if (n <= 0) |
140 | return n; | ||
139 | 141 | ||
140 | rb = &(s->s3->rbuf); | 142 | rb = &(s->s3->rbuf); |
141 | if (rb->buf == NULL) | 143 | if (rb->buf == NULL) |
142 | if (!ssl3_setup_read_buffer(s)) | 144 | if (!ssl3_setup_read_buffer(s)) |
143 | return -1; | 145 | return -1; |
144 | 146 | ||
145 | left = rb->left; | 147 | left = rb->left; |
146 | #if defined(SSL3_ALIGN_PAYLOAD) && SSL3_ALIGN_PAYLOAD!=0 | 148 | #if defined(SSL3_ALIGN_PAYLOAD) && SSL3_ALIGN_PAYLOAD!=0 |
147 | align = (long)rb->buf + SSL3_RT_HEADER_LENGTH; | 149 | align = (long)rb->buf + SSL3_RT_HEADER_LENGTH; |
148 | align = (-align)&(SSL3_ALIGN_PAYLOAD-1); | 150 | align = (-align)&(SSL3_ALIGN_PAYLOAD - 1); |
149 | #endif | 151 | #endif |
150 | 152 | ||
151 | if (!extend) | 153 | if (!extend) { |
152 | { | ||
153 | /* start with empty packet ... */ | 154 | /* start with empty packet ... */ |
154 | if (left == 0) | 155 | if (left == 0) |
155 | rb->offset = align; | 156 | rb->offset = align; |
156 | else if (align != 0 && left >= SSL3_RT_HEADER_LENGTH) | 157 | else if (align != 0 && left >= SSL3_RT_HEADER_LENGTH) { |
157 | { | ||
158 | /* check if next packet length is large | 158 | /* check if next packet length is large |
159 | * enough to justify payload alignment... */ | 159 | * enough to justify payload alignment... */ |
160 | pkt = rb->buf + rb->offset; | 160 | pkt = rb->buf + rb->offset; |
161 | if (pkt[0] == SSL3_RT_APPLICATION_DATA | 161 | if (pkt[0] == SSL3_RT_APPLICATION_DATA |
162 | && (pkt[3]<<8|pkt[4]) >= 128) | 162 | && (pkt[3]<<8|pkt[4]) >= 128) { |
163 | { | ||
164 | /* Note that even if packet is corrupted | 163 | /* Note that even if packet is corrupted |
165 | * and its length field is insane, we can | 164 | * and its length field is insane, we can |
166 | * only be led to wrong decision about | 165 | * only be led to wrong decision about |
@@ -168,109 +167,100 @@ int ssl3_read_n(SSL *s, int n, int max, int extend) | |||
168 | * Header values has no effect on memmove | 167 | * Header values has no effect on memmove |
169 | * arguments and therefore no buffer | 168 | * arguments and therefore no buffer |
170 | * overrun can be triggered. */ | 169 | * overrun can be triggered. */ |
171 | memmove (rb->buf+align,pkt,left); | 170 | memmove (rb->buf + align, pkt, left); |
172 | rb->offset = align; | 171 | rb->offset = align; |
173 | } | ||
174 | } | 172 | } |
173 | } | ||
175 | s->packet = rb->buf + rb->offset; | 174 | s->packet = rb->buf + rb->offset; |
176 | s->packet_length = 0; | 175 | s->packet_length = 0; |
177 | /* ... now we can act as if 'extend' was set */ | 176 | /* ... now we can act as if 'extend' was set */ |
178 | } | 177 | } |
179 | 178 | ||
180 | /* For DTLS/UDP reads should not span multiple packets | 179 | /* For DTLS/UDP reads should not span multiple packets |
181 | * because the read operation returns the whole packet | 180 | * because the read operation returns the whole packet |
182 | * at once (as long as it fits into the buffer). */ | 181 | * at once (as long as it fits into the buffer). */ |
183 | if (SSL_version(s) == DTLS1_VERSION || SSL_version(s) == DTLS1_BAD_VER) | 182 | if (SSL_version(s) == DTLS1_VERSION || SSL_version(s) == DTLS1_BAD_VER) { |
184 | { | ||
185 | if (left > 0 && n > left) | 183 | if (left > 0 && n > left) |
186 | n = left; | 184 | n = left; |
187 | } | 185 | } |
188 | 186 | ||
189 | /* if there is enough in the buffer from a previous read, take some */ | 187 | /* if there is enough in the buffer from a previous read, take some */ |
190 | if (left >= n) | 188 | if (left >= n) { |
191 | { | 189 | s->packet_length += n; |
192 | s->packet_length+=n; | 190 | rb->left = left - n; |
193 | rb->left=left-n; | 191 | rb->offset += n; |
194 | rb->offset+=n; | 192 | return (n); |
195 | return(n); | 193 | } |
196 | } | ||
197 | 194 | ||
198 | /* else we need to read more data */ | 195 | /* else we need to read more data */ |
199 | 196 | ||
200 | len = s->packet_length; | 197 | len = s->packet_length; |
201 | pkt = rb->buf+align; | 198 | pkt = rb->buf + align; |
202 | /* Move any available bytes to front of buffer: | 199 | /* Move any available bytes to front of buffer: |
203 | * 'len' bytes already pointed to by 'packet', | 200 | * 'len' bytes already pointed to by 'packet', |
204 | * 'left' extra ones at the end */ | 201 | * 'left' extra ones at the end */ |
205 | if (s->packet != pkt) /* len > 0 */ | 202 | if (s->packet != pkt) /* len > 0 */ |
206 | { | 203 | { |
207 | memmove(pkt, s->packet, len+left); | 204 | memmove(pkt, s->packet, len + left); |
208 | s->packet = pkt; | 205 | s->packet = pkt; |
209 | rb->offset = len + align; | 206 | rb->offset = len + align; |
210 | } | 207 | } |
211 | 208 | ||
212 | if (n > (int)(rb->len - rb->offset)) /* does not happen */ | 209 | if (n > (int)(rb->len - rb->offset)) /* does not happen */ |
213 | { | 210 | { |
214 | SSLerr(SSL_F_SSL3_READ_N,ERR_R_INTERNAL_ERROR); | 211 | SSLerr(SSL_F_SSL3_READ_N, ERR_R_INTERNAL_ERROR); |
215 | return -1; | 212 | return -1; |
216 | } | 213 | } |
217 | 214 | ||
218 | if (!s->read_ahead) | 215 | if (!s->read_ahead) |
219 | /* ignore max parameter */ | 216 | /* ignore max parameter */ |
220 | max = n; | 217 | max = n; |
221 | else | 218 | else { |
222 | { | ||
223 | if (max < n) | 219 | if (max < n) |
224 | max = n; | 220 | max = n; |
225 | if (max > (int)(rb->len - rb->offset)) | 221 | if (max > (int)(rb->len - rb->offset)) |
226 | max = rb->len - rb->offset; | 222 | max = rb->len - rb->offset; |
227 | } | 223 | } |
228 | 224 | ||
229 | while (left < n) | 225 | while (left < n) { |
230 | { | ||
231 | /* Now we have len+left bytes at the front of s->s3->rbuf.buf | 226 | /* Now we have len+left bytes at the front of s->s3->rbuf.buf |
232 | * and need to read in more until we have len+n (up to | 227 | * and need to read in more until we have len+n (up to |
233 | * len+max if possible) */ | 228 | * len+max if possible) */ |
234 | 229 | ||
235 | errno = 0; | 230 | errno = 0; |
236 | if (s->rbio != NULL) | 231 | if (s->rbio != NULL) { |
237 | { | 232 | s->rwstate = SSL_READING; |
238 | s->rwstate=SSL_READING; | 233 | i = BIO_read(s->rbio, pkt + len + left, max - left); |
239 | i=BIO_read(s->rbio,pkt+len+left, max-left); | 234 | } else { |
240 | } | 235 | SSLerr(SSL_F_SSL3_READ_N, SSL_R_READ_BIO_NOT_SET); |
241 | else | ||
242 | { | ||
243 | SSLerr(SSL_F_SSL3_READ_N,SSL_R_READ_BIO_NOT_SET); | ||
244 | i = -1; | 236 | i = -1; |
245 | } | 237 | } |
246 | 238 | ||
247 | if (i <= 0) | 239 | if (i <= 0) { |
248 | { | ||
249 | rb->left = left; | 240 | rb->left = left; |
250 | if (s->mode & SSL_MODE_RELEASE_BUFFERS && | 241 | if (s->mode & SSL_MODE_RELEASE_BUFFERS && |
251 | SSL_version(s) != DTLS1_VERSION && SSL_version(s) != DTLS1_BAD_VER) | 242 | SSL_version(s) != DTLS1_VERSION && SSL_version(s) != DTLS1_BAD_VER) |
252 | if (len+left == 0) | 243 | if (len + left == 0) |
253 | ssl3_release_read_buffer(s); | 244 | ssl3_release_read_buffer(s); |
254 | return(i); | 245 | return (i); |
255 | } | 246 | } |
256 | left+=i; | 247 | left += i; |
257 | /* reads should *never* span multiple packets for DTLS because | 248 | /* reads should *never* span multiple packets for DTLS because |
258 | * the underlying transport protocol is message oriented as opposed | 249 | * the underlying transport protocol is message oriented as opposed |
259 | * to byte oriented as in the TLS case. */ | 250 | * to byte oriented as in the TLS case. */ |
260 | if (SSL_version(s) == DTLS1_VERSION || SSL_version(s) == DTLS1_BAD_VER) | 251 | if (SSL_version(s) == DTLS1_VERSION || SSL_version(s) == DTLS1_BAD_VER) { |
261 | { | ||
262 | if (n > left) | 252 | if (n > left) |
263 | n = left; /* makes the while condition false */ | 253 | n = left; /* makes the while condition false */ |
264 | } | ||
265 | } | 254 | } |
255 | } | ||
266 | 256 | ||
267 | /* done reading, now the book-keeping */ | 257 | /* done reading, now the book-keeping */ |
268 | rb->offset += n; | 258 | rb->offset += n; |
269 | rb->left = left - n; | 259 | rb->left = left - n; |
270 | s->packet_length += n; | 260 | s->packet_length += n; |
271 | s->rwstate=SSL_NOTHING; | 261 | s->rwstate = SSL_NOTHING; |
272 | return(n); | 262 | return (n); |
273 | } | 263 | } |
274 | 264 | ||
275 | /* Call this to get a new input record. | 265 | /* Call this to get a new input record. |
276 | * It will return <= 0 if more data is needed, normally due to an error | 266 | * It will return <= 0 if more data is needed, normally due to an error |
@@ -281,10 +271,11 @@ int ssl3_read_n(SSL *s, int n, int max, int extend) | |||
281 | * ssl->s3->rrec.length, - number of bytes | 271 | * ssl->s3->rrec.length, - number of bytes |
282 | */ | 272 | */ |
283 | /* used only by ssl3_read_bytes */ | 273 | /* used only by ssl3_read_bytes */ |
284 | static int ssl3_get_record(SSL *s) | 274 | static int |
285 | { | 275 | ssl3_get_record(SSL *s) |
286 | int ssl_major,ssl_minor,al; | 276 | { |
287 | int enc_err,n,i,ret= -1; | 277 | int ssl_major, ssl_minor, al; |
278 | int enc_err, n, i, ret = -1; | ||
288 | SSL3_RECORD *rr; | 279 | SSL3_RECORD *rr; |
289 | SSL_SESSION *sess; | 280 | SSL_SESSION *sess; |
290 | unsigned char *p; | 281 | unsigned char *p; |
@@ -293,90 +284,83 @@ static int ssl3_get_record(SSL *s) | |||
293 | unsigned mac_size, orig_len; | 284 | unsigned mac_size, orig_len; |
294 | size_t extra; | 285 | size_t extra; |
295 | 286 | ||
296 | rr= &(s->s3->rrec); | 287 | rr = &(s->s3->rrec); |
297 | sess=s->session; | 288 | sess = s->session; |
298 | 289 | ||
299 | if (s->options & SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER) | 290 | if (s->options & SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER) |
300 | extra=SSL3_RT_MAX_EXTRA; | 291 | extra = SSL3_RT_MAX_EXTRA; |
301 | else | 292 | else |
302 | extra=0; | 293 | extra = 0; |
303 | if (extra && !s->s3->init_extra) | 294 | if (extra && !s->s3->init_extra) { |
304 | { | ||
305 | /* An application error: SLS_OP_MICROSOFT_BIG_SSLV3_BUFFER | 295 | /* An application error: SLS_OP_MICROSOFT_BIG_SSLV3_BUFFER |
306 | * set after ssl3_setup_buffers() was done */ | 296 | * set after ssl3_setup_buffers() was done */ |
307 | SSLerr(SSL_F_SSL3_GET_RECORD, ERR_R_INTERNAL_ERROR); | 297 | SSLerr(SSL_F_SSL3_GET_RECORD, ERR_R_INTERNAL_ERROR); |
308 | return -1; | 298 | return -1; |
309 | } | 299 | } |
310 | 300 | ||
311 | again: | 301 | again: |
312 | /* check if we have the header */ | 302 | /* check if we have the header */ |
313 | if ( (s->rstate != SSL_ST_READ_BODY) || | 303 | if ((s->rstate != SSL_ST_READ_BODY) || |
314 | (s->packet_length < SSL3_RT_HEADER_LENGTH)) | 304 | (s->packet_length < SSL3_RT_HEADER_LENGTH)) { |
315 | { | 305 | n = ssl3_read_n(s, SSL3_RT_HEADER_LENGTH, s->s3->rbuf.len, 0); |
316 | n=ssl3_read_n(s, SSL3_RT_HEADER_LENGTH, s->s3->rbuf.len, 0); | ||
317 | if (n <= 0) return(n); /* error or non-blocking */ | 306 | if (n <= 0) return(n); /* error or non-blocking */ |
318 | s->rstate=SSL_ST_READ_BODY; | 307 | s->rstate = SSL_ST_READ_BODY; |
319 | 308 | ||
320 | p=s->packet; | 309 | p = s->packet; |
321 | 310 | ||
322 | /* Pull apart the header into the SSL3_RECORD */ | 311 | /* Pull apart the header into the SSL3_RECORD */ |
323 | rr->type= *(p++); | 312 | rr->type= *(p++); |
324 | ssl_major= *(p++); | 313 | ssl_major= *(p++); |
325 | ssl_minor= *(p++); | 314 | ssl_minor= *(p++); |
326 | version=(ssl_major<<8)|ssl_minor; | 315 | version = (ssl_major << 8)|ssl_minor; |
327 | n2s(p,rr->length); | 316 | n2s(p, rr->length); |
328 | #if 0 | 317 | #if 0 |
329 | fprintf(stderr, "Record type=%d, Length=%d\n", rr->type, rr->length); | 318 | fprintf(stderr, "Record type=%d, Length=%d\n", rr->type, rr->length); |
330 | #endif | 319 | #endif |
331 | 320 | ||
332 | /* Lets check version */ | 321 | /* Lets check version */ |
333 | if (!s->first_packet) | 322 | if (!s->first_packet) { |
334 | { | 323 | if (version != s->version) { |
335 | if (version != s->version) | 324 | SSLerr(SSL_F_SSL3_GET_RECORD, SSL_R_WRONG_VERSION_NUMBER); |
336 | { | 325 | if ((s->version & 0xFF00) == (version & 0xFF00) && !s->enc_write_ctx && !s->write_hash) |
337 | SSLerr(SSL_F_SSL3_GET_RECORD,SSL_R_WRONG_VERSION_NUMBER); | 326 | /* Send back error using their minor version number :-) */ |
338 | if ((s->version & 0xFF00) == (version & 0xFF00) && !s->enc_write_ctx && !s->write_hash) | 327 | s->version = (unsigned short)version; |
339 | /* Send back error using their minor version number :-) */ | 328 | al = SSL_AD_PROTOCOL_VERSION; |
340 | s->version = (unsigned short)version; | ||
341 | al=SSL_AD_PROTOCOL_VERSION; | ||
342 | goto f_err; | 329 | goto f_err; |
343 | } | ||
344 | } | 330 | } |
331 | } | ||
345 | 332 | ||
346 | if ((version>>8) != SSL3_VERSION_MAJOR) | 333 | if ((version >> 8) != SSL3_VERSION_MAJOR) { |
347 | { | 334 | SSLerr(SSL_F_SSL3_GET_RECORD, SSL_R_WRONG_VERSION_NUMBER); |
348 | SSLerr(SSL_F_SSL3_GET_RECORD,SSL_R_WRONG_VERSION_NUMBER); | ||
349 | goto err; | 335 | goto err; |
350 | } | 336 | } |
351 | 337 | ||
352 | if (rr->length > s->s3->rbuf.len - SSL3_RT_HEADER_LENGTH) | 338 | if (rr->length > s->s3->rbuf.len - SSL3_RT_HEADER_LENGTH) { |
353 | { | 339 | al = SSL_AD_RECORD_OVERFLOW; |
354 | al=SSL_AD_RECORD_OVERFLOW; | 340 | SSLerr(SSL_F_SSL3_GET_RECORD, SSL_R_PACKET_LENGTH_TOO_LONG); |
355 | SSLerr(SSL_F_SSL3_GET_RECORD,SSL_R_PACKET_LENGTH_TOO_LONG); | ||
356 | goto f_err; | 341 | goto f_err; |
357 | } | 342 | } |
358 | 343 | ||
359 | /* now s->rstate == SSL_ST_READ_BODY */ | 344 | /* now s->rstate == SSL_ST_READ_BODY */ |
360 | } | 345 | } |
361 | 346 | ||
362 | /* s->rstate == SSL_ST_READ_BODY, get and decode the data */ | 347 | /* s->rstate == SSL_ST_READ_BODY, get and decode the data */ |
363 | 348 | ||
364 | if (rr->length > s->packet_length-SSL3_RT_HEADER_LENGTH) | 349 | if (rr->length > s->packet_length - SSL3_RT_HEADER_LENGTH) { |
365 | { | ||
366 | /* now s->packet_length == SSL3_RT_HEADER_LENGTH */ | 350 | /* now s->packet_length == SSL3_RT_HEADER_LENGTH */ |
367 | i=rr->length; | 351 | i = rr->length; |
368 | n=ssl3_read_n(s,i,i,1); | 352 | n = ssl3_read_n(s, i, i, 1); |
369 | if (n <= 0) return(n); /* error or non-blocking io */ | 353 | if (n <= 0) return(n); /* error or non-blocking io */ |
370 | /* now n == rr->length, | 354 | /* now n == rr->length, |
371 | * and s->packet_length == SSL3_RT_HEADER_LENGTH + rr->length */ | 355 | * and s->packet_length == SSL3_RT_HEADER_LENGTH + rr->length */ |
372 | } | 356 | } |
373 | 357 | ||
374 | s->rstate=SSL_ST_READ_HEADER; /* set state for later operations */ | 358 | s->rstate=SSL_ST_READ_HEADER; /* set state for later operations */ |
375 | 359 | ||
376 | /* At this point, s->packet_length == SSL3_RT_HEADER_LNGTH + rr->length, | 360 | /* At this point, s->packet_length == SSL3_RT_HEADER_LNGTH + rr->length, |
377 | * and we have that many bytes in s->packet | 361 | * and we have that many bytes in s->packet |
378 | */ | 362 | */ |
379 | rr->input= &(s->packet[SSL3_RT_HEADER_LENGTH]); | 363 | rr->input = &(s->packet[SSL3_RT_HEADER_LENGTH]); |
380 | 364 | ||
381 | /* ok, we can now read from 's->packet' data into 'rr' | 365 | /* ok, we can now read from 's->packet' data into 'rr' |
382 | * rr->input points at rr->length bytes, which | 366 | * rr->input points at rr->length bytes, which |
@@ -389,47 +373,43 @@ fprintf(stderr, "Record type=%d, Length=%d\n", rr->type, rr->length); | |||
389 | * rr->length bytes of encrypted compressed stuff. */ | 373 | * rr->length bytes of encrypted compressed stuff. */ |
390 | 374 | ||
391 | /* check is not needed I believe */ | 375 | /* check is not needed I believe */ |
392 | if (rr->length > SSL3_RT_MAX_ENCRYPTED_LENGTH+extra) | 376 | if (rr->length > SSL3_RT_MAX_ENCRYPTED_LENGTH + extra) { |
393 | { | 377 | al = SSL_AD_RECORD_OVERFLOW; |
394 | al=SSL_AD_RECORD_OVERFLOW; | 378 | SSLerr(SSL_F_SSL3_GET_RECORD, SSL_R_ENCRYPTED_LENGTH_TOO_LONG); |
395 | SSLerr(SSL_F_SSL3_GET_RECORD,SSL_R_ENCRYPTED_LENGTH_TOO_LONG); | ||
396 | goto f_err; | 379 | goto f_err; |
397 | } | 380 | } |
398 | 381 | ||
399 | /* decrypt in place in 'rr->input' */ | 382 | /* decrypt in place in 'rr->input' */ |
400 | rr->data=rr->input; | 383 | rr->data = rr->input; |
401 | 384 | ||
402 | enc_err = s->method->ssl3_enc->enc(s,0); | 385 | enc_err = s->method->ssl3_enc->enc(s, 0); |
403 | /* enc_err is: | 386 | /* enc_err is: |
404 | * 0: (in non-constant time) if the record is publically invalid. | 387 | * 0: (in non-constant time) if the record is publically invalid. |
405 | * 1: if the padding is valid | 388 | * 1: if the padding is valid |
406 | * -1: if the padding is invalid */ | 389 | * -1: if the padding is invalid */ |
407 | if (enc_err == 0) | 390 | if (enc_err == 0) { |
408 | { | 391 | al = SSL_AD_DECRYPTION_FAILED; |
409 | al=SSL_AD_DECRYPTION_FAILED; | 392 | SSLerr(SSL_F_SSL3_GET_RECORD, SSL_R_BLOCK_CIPHER_PAD_IS_WRONG); |
410 | SSLerr(SSL_F_SSL3_GET_RECORD,SSL_R_BLOCK_CIPHER_PAD_IS_WRONG); | ||
411 | goto f_err; | 393 | goto f_err; |
412 | } | 394 | } |
413 | 395 | ||
414 | #ifdef TLS_DEBUG | 396 | #ifdef TLS_DEBUG |
415 | printf("dec %d\n",rr->length); | 397 | printf("dec %d\n", rr->length); |
416 | { unsigned int z; for (z=0; z<rr->length; z++) printf("%02X%c",rr->data[z],((z+1)%16)?' ':'\n'); } | 398 | { unsigned int z; for (z = 0; z<rr->length; z++) printf("%02X%c", rr->data[z],((z+1)%16)?' ':'\n'); } |
417 | printf("\n"); | 399 | printf("\n"); |
418 | #endif | 400 | #endif |
419 | 401 | ||
420 | /* r->length is now the compressed data plus mac */ | 402 | /* r->length is now the compressed data plus mac */ |
421 | if ((sess != NULL) && | 403 | if ((sess != NULL) && (s->enc_read_ctx != NULL) && |
422 | (s->enc_read_ctx != NULL) && | 404 | (EVP_MD_CTX_md(s->read_hash) != NULL)) { |
423 | (EVP_MD_CTX_md(s->read_hash) != NULL)) | ||
424 | { | ||
425 | /* s->read_hash != NULL => mac_size != -1 */ | 405 | /* s->read_hash != NULL => mac_size != -1 */ |
426 | unsigned char *mac = NULL; | 406 | unsigned char *mac = NULL; |
427 | unsigned char mac_tmp[EVP_MAX_MD_SIZE]; | 407 | unsigned char mac_tmp[EVP_MAX_MD_SIZE]; |
428 | mac_size=EVP_MD_CTX_size(s->read_hash); | 408 | mac_size = EVP_MD_CTX_size(s->read_hash); |
429 | OPENSSL_assert(mac_size <= EVP_MAX_MD_SIZE); | 409 | OPENSSL_assert(mac_size <= EVP_MAX_MD_SIZE); |
430 | 410 | ||
431 | /* kludge: *_cbc_remove_padding passes padding length in rr->type */ | 411 | /* kludge: *_cbc_remove_padding passes padding length in rr->type */ |
432 | orig_len = rr->length+((unsigned int)rr->type>>8); | 412 | orig_len = rr->length + ((unsigned int)rr->type >> 8); |
433 | 413 | ||
434 | /* orig_len is the length of the record before any padding was | 414 | /* orig_len is the length of the record before any padding was |
435 | * removed. This is public information, as is the MAC in use, | 415 | * removed. This is public information, as is the MAC in use, |
@@ -437,17 +417,15 @@ printf("\n"); | |||
437 | * amount of time if it's too short to possibly contain a MAC. | 417 | * amount of time if it's too short to possibly contain a MAC. |
438 | */ | 418 | */ |
439 | if (orig_len < mac_size || | 419 | if (orig_len < mac_size || |
440 | /* CBC records must have a padding length byte too. */ | 420 | /* CBC records must have a padding length byte too. */ |
441 | (EVP_CIPHER_CTX_mode(s->enc_read_ctx) == EVP_CIPH_CBC_MODE && | 421 | (EVP_CIPHER_CTX_mode(s->enc_read_ctx) == EVP_CIPH_CBC_MODE && |
442 | orig_len < mac_size+1)) | 422 | orig_len < mac_size + 1)) { |
443 | { | 423 | al = SSL_AD_DECODE_ERROR; |
444 | al=SSL_AD_DECODE_ERROR; | 424 | SSLerr(SSL_F_SSL3_GET_RECORD, SSL_R_LENGTH_TOO_SHORT); |
445 | SSLerr(SSL_F_SSL3_GET_RECORD,SSL_R_LENGTH_TOO_SHORT); | ||
446 | goto f_err; | 425 | goto f_err; |
447 | } | 426 | } |
448 | 427 | ||
449 | if (EVP_CIPHER_CTX_mode(s->enc_read_ctx) == EVP_CIPH_CBC_MODE) | 428 | if (EVP_CIPHER_CTX_mode(s->enc_read_ctx) == EVP_CIPH_CBC_MODE) { |
450 | { | ||
451 | /* We update the length so that the TLS header bytes | 429 | /* We update the length so that the TLS header bytes |
452 | * can be constructed correctly but we need to extract | 430 | * can be constructed correctly but we need to extract |
453 | * the MAC in constant time from within the record, | 431 | * the MAC in constant time from within the record, |
@@ -456,60 +434,53 @@ printf("\n"); | |||
456 | mac = mac_tmp; | 434 | mac = mac_tmp; |
457 | ssl3_cbc_copy_mac(mac_tmp, rr, mac_size, orig_len); | 435 | ssl3_cbc_copy_mac(mac_tmp, rr, mac_size, orig_len); |
458 | rr->length -= mac_size; | 436 | rr->length -= mac_size; |
459 | } | 437 | } else { |
460 | else | ||
461 | { | ||
462 | /* In this case there's no padding, so |orig_len| | 438 | /* In this case there's no padding, so |orig_len| |
463 | * equals |rec->length| and we checked that there's | 439 | * equals |rec->length| and we checked that there's |
464 | * enough bytes for |mac_size| above. */ | 440 | * enough bytes for |mac_size| above. */ |
465 | rr->length -= mac_size; | 441 | rr->length -= mac_size; |
466 | mac = &rr->data[rr->length]; | 442 | mac = &rr->data[rr->length]; |
467 | } | 443 | } |
468 | 444 | ||
469 | i=s->method->ssl3_enc->mac(s,md,0 /* not send */); | 445 | i=s->method->ssl3_enc->mac(s,md,0 /* not send */); |
470 | if (i < 0 || mac == NULL || CRYPTO_memcmp(md, mac, (size_t)mac_size) != 0) | 446 | if (i < 0 || mac == NULL || CRYPTO_memcmp(md, mac, (size_t)mac_size) != 0) |
471 | enc_err = -1; | 447 | enc_err = -1; |
472 | if (rr->length > SSL3_RT_MAX_COMPRESSED_LENGTH+extra+mac_size) | 448 | if (rr->length > SSL3_RT_MAX_COMPRESSED_LENGTH + extra + mac_size) |
473 | enc_err = -1; | 449 | enc_err = -1; |
474 | } | 450 | } |
475 | 451 | ||
476 | if (enc_err < 0) | 452 | if (enc_err < 0) { |
477 | { | ||
478 | /* A separate 'decryption_failed' alert was introduced with TLS 1.0, | 453 | /* A separate 'decryption_failed' alert was introduced with TLS 1.0, |
479 | * SSL 3.0 only has 'bad_record_mac'. But unless a decryption | 454 | * SSL 3.0 only has 'bad_record_mac'. But unless a decryption |
480 | * failure is directly visible from the ciphertext anyway, | 455 | * failure is directly visible from the ciphertext anyway, |
481 | * we should not reveal which kind of error occured -- this | 456 | * we should not reveal which kind of error occured -- this |
482 | * might become visible to an attacker (e.g. via a logfile) */ | 457 | * might become visible to an attacker (e.g. via a logfile) */ |
483 | al=SSL_AD_BAD_RECORD_MAC; | 458 | al = SSL_AD_BAD_RECORD_MAC; |
484 | SSLerr(SSL_F_SSL3_GET_RECORD,SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC); | 459 | SSLerr(SSL_F_SSL3_GET_RECORD, SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC); |
485 | goto f_err; | 460 | goto f_err; |
486 | } | 461 | } |
487 | 462 | ||
488 | /* r->length is now just compressed */ | 463 | /* r->length is now just compressed */ |
489 | if (s->expand != NULL) | 464 | if (s->expand != NULL) { |
490 | { | 465 | if (rr->length > SSL3_RT_MAX_COMPRESSED_LENGTH + extra) { |
491 | if (rr->length > SSL3_RT_MAX_COMPRESSED_LENGTH+extra) | 466 | al = SSL_AD_RECORD_OVERFLOW; |
492 | { | 467 | SSLerr(SSL_F_SSL3_GET_RECORD, SSL_R_COMPRESSED_LENGTH_TOO_LONG); |
493 | al=SSL_AD_RECORD_OVERFLOW; | ||
494 | SSLerr(SSL_F_SSL3_GET_RECORD,SSL_R_COMPRESSED_LENGTH_TOO_LONG); | ||
495 | goto f_err; | 468 | goto f_err; |
496 | } | 469 | } |
497 | if (!ssl3_do_uncompress(s)) | 470 | if (!ssl3_do_uncompress(s)) { |
498 | { | 471 | al = SSL_AD_DECOMPRESSION_FAILURE; |
499 | al=SSL_AD_DECOMPRESSION_FAILURE; | 472 | SSLerr(SSL_F_SSL3_GET_RECORD, SSL_R_BAD_DECOMPRESSION); |
500 | SSLerr(SSL_F_SSL3_GET_RECORD,SSL_R_BAD_DECOMPRESSION); | ||
501 | goto f_err; | 473 | goto f_err; |
502 | } | ||
503 | } | 474 | } |
475 | } | ||
504 | 476 | ||
505 | if (rr->length > SSL3_RT_MAX_PLAIN_LENGTH+extra) | 477 | if (rr->length > SSL3_RT_MAX_PLAIN_LENGTH + extra) { |
506 | { | 478 | al = SSL_AD_RECORD_OVERFLOW; |
507 | al=SSL_AD_RECORD_OVERFLOW; | 479 | SSLerr(SSL_F_SSL3_GET_RECORD, SSL_R_DATA_LENGTH_TOO_LONG); |
508 | SSLerr(SSL_F_SSL3_GET_RECORD,SSL_R_DATA_LENGTH_TOO_LONG); | ||
509 | goto f_err; | 480 | goto f_err; |
510 | } | 481 | } |
511 | 482 | ||
512 | rr->off=0; | 483 | rr->off = 0; |
513 | /* So at this point the following is true | 484 | /* So at this point the following is true |
514 | * ssl->s3->rrec.type is the type of record | 485 | * ssl->s3->rrec.type is the type of record |
515 | * ssl->s3->rrec.length == number of bytes in record | 486 | * ssl->s3->rrec.length == number of bytes in record |
@@ -519,178 +490,171 @@ printf("\n"); | |||
519 | */ | 490 | */ |
520 | 491 | ||
521 | /* we have pulled in a full packet so zero things */ | 492 | /* we have pulled in a full packet so zero things */ |
522 | s->packet_length=0; | 493 | s->packet_length = 0; |
523 | 494 | ||
524 | /* just read a 0 length packet */ | 495 | /* just read a 0 length packet */ |
525 | if (rr->length == 0) goto again; | 496 | if (rr->length == 0) |
497 | goto again; | ||
526 | 498 | ||
527 | #if 0 | 499 | #if 0 |
528 | fprintf(stderr, "Ultimate Record type=%d, Length=%d\n", rr->type, rr->length); | 500 | fprintf(stderr, "Ultimate Record type=%d, Length=%d\n", rr->type, rr->length); |
529 | #endif | 501 | #endif |
530 | 502 | ||
531 | return(1); | 503 | return (1); |
532 | 504 | ||
533 | f_err: | 505 | f_err: |
534 | ssl3_send_alert(s,SSL3_AL_FATAL,al); | 506 | ssl3_send_alert(s, SSL3_AL_FATAL, al); |
535 | err: | 507 | err: |
536 | return(ret); | 508 | return (ret); |
537 | } | 509 | } |
538 | 510 | ||
539 | int ssl3_do_uncompress(SSL *ssl) | 511 | int |
540 | { | 512 | ssl3_do_uncompress(SSL *ssl) |
513 | { | ||
541 | #ifndef OPENSSL_NO_COMP | 514 | #ifndef OPENSSL_NO_COMP |
542 | int i; | 515 | int i; |
543 | SSL3_RECORD *rr; | 516 | SSL3_RECORD *rr; |
544 | 517 | ||
545 | rr= &(ssl->s3->rrec); | 518 | rr = &(ssl->s3->rrec); |
546 | i=COMP_expand_block(ssl->expand,rr->comp, | 519 | i = COMP_expand_block(ssl->expand, rr->comp, |
547 | SSL3_RT_MAX_PLAIN_LENGTH,rr->data,(int)rr->length); | 520 | SSL3_RT_MAX_PLAIN_LENGTH, rr->data,(int)rr->length); |
548 | if (i < 0) | 521 | if (i < 0) |
549 | return(0); | 522 | return (0); |
550 | else | 523 | else |
551 | rr->length=i; | 524 | rr->length = i; |
552 | rr->data=rr->comp; | 525 | rr->data = rr->comp; |
553 | #endif | 526 | #endif |
554 | return(1); | 527 | return (1); |
555 | } | 528 | } |
556 | 529 | ||
557 | int ssl3_do_compress(SSL *ssl) | 530 | int |
558 | { | 531 | ssl3_do_compress(SSL *ssl) |
532 | { | ||
559 | #ifndef OPENSSL_NO_COMP | 533 | #ifndef OPENSSL_NO_COMP |
560 | int i; | 534 | int i; |
561 | SSL3_RECORD *wr; | 535 | SSL3_RECORD *wr; |
562 | 536 | ||
563 | wr= &(ssl->s3->wrec); | 537 | wr = &(ssl->s3->wrec); |
564 | i=COMP_compress_block(ssl->compress,wr->data, | 538 | i = COMP_compress_block(ssl->compress, wr->data, |
565 | SSL3_RT_MAX_COMPRESSED_LENGTH, | 539 | SSL3_RT_MAX_COMPRESSED_LENGTH, |
566 | wr->input,(int)wr->length); | 540 | wr->input,(int)wr->length); |
567 | if (i < 0) | 541 | if (i < 0) |
568 | return(0); | 542 | return (0); |
569 | else | 543 | else |
570 | wr->length=i; | 544 | wr->length = i; |
571 | 545 | ||
572 | wr->input=wr->data; | 546 | wr->input = wr->data; |
573 | #endif | 547 | #endif |
574 | return(1); | 548 | return (1); |
575 | } | 549 | } |
576 | 550 | ||
577 | /* Call this to write data in records of type 'type' | 551 | /* Call this to write data in records of type 'type' |
578 | * It will return <= 0 if not all data has been sent or non-blocking IO. | 552 | * It will return <= 0 if not all data has been sent or non-blocking IO. |
579 | */ | 553 | */ |
580 | int ssl3_write_bytes(SSL *s, int type, const void *buf_, int len) | 554 | int |
581 | { | 555 | ssl3_write_bytes(SSL *s, int type, const void *buf_, int len) |
582 | const unsigned char *buf=buf_; | 556 | { |
583 | unsigned int tot,n,nw; | 557 | const unsigned char *buf = buf_; |
558 | unsigned int tot, n, nw; | ||
584 | int i; | 559 | int i; |
585 | 560 | ||
586 | s->rwstate=SSL_NOTHING; | 561 | s->rwstate = SSL_NOTHING; |
587 | tot=s->s3->wnum; | 562 | tot = s->s3->wnum; |
588 | s->s3->wnum=0; | 563 | s->s3->wnum = 0; |
589 | 564 | ||
590 | if (SSL_in_init(s) && !s->in_handshake) | 565 | if (SSL_in_init(s) && !s->in_handshake) { |
591 | { | 566 | i = s->handshake_func(s); |
592 | i=s->handshake_func(s); | 567 | if (i < 0) |
593 | if (i < 0) return(i); | 568 | return (i); |
594 | if (i == 0) | 569 | if (i == 0) { |
595 | { | 570 | SSLerr(SSL_F_SSL3_WRITE_BYTES, SSL_R_SSL_HANDSHAKE_FAILURE); |
596 | SSLerr(SSL_F_SSL3_WRITE_BYTES,SSL_R_SSL_HANDSHAKE_FAILURE); | ||
597 | return -1; | 571 | return -1; |
598 | } | ||
599 | } | 572 | } |
573 | } | ||
600 | 574 | ||
601 | n=(len-tot); | 575 | n = (len - tot); |
602 | for (;;) | 576 | for (;;) { |
603 | { | ||
604 | if (n > s->max_send_fragment) | 577 | if (n > s->max_send_fragment) |
605 | nw=s->max_send_fragment; | 578 | nw = s->max_send_fragment; |
606 | else | 579 | else |
607 | nw=n; | 580 | nw = n; |
608 | 581 | ||
609 | i=do_ssl3_write(s, type, &(buf[tot]), nw, 0); | 582 | i = do_ssl3_write(s, type, &(buf[tot]), nw, 0); |
610 | if (i <= 0) | 583 | if (i <= 0) { |
611 | { | 584 | s->s3->wnum = tot; |
612 | s->s3->wnum=tot; | ||
613 | return i; | 585 | return i; |
614 | } | 586 | } |
615 | 587 | ||
616 | if ((i == (int)n) || | 588 | if ((i == (int)n) || (type == SSL3_RT_APPLICATION_DATA && |
617 | (type == SSL3_RT_APPLICATION_DATA && | 589 | (s->mode & SSL_MODE_ENABLE_PARTIAL_WRITE))) { |
618 | (s->mode & SSL_MODE_ENABLE_PARTIAL_WRITE))) | ||
619 | { | ||
620 | /* next chunk of data should get another prepended empty fragment | 590 | /* next chunk of data should get another prepended empty fragment |
621 | * in ciphersuites with known-IV weakness: */ | 591 | * in ciphersuites with known-IV weakness: */ |
622 | s->s3->empty_fragment_done = 0; | 592 | s->s3->empty_fragment_done = 0; |
623 | |||
624 | return tot+i; | ||
625 | } | ||
626 | 593 | ||
627 | n-=i; | 594 | return tot + i; |
628 | tot+=i; | ||
629 | } | 595 | } |
630 | } | ||
631 | 596 | ||
632 | static int do_ssl3_write(SSL *s, int type, const unsigned char *buf, | 597 | n -= i; |
633 | unsigned int len, int create_empty_fragment) | 598 | tot += i; |
634 | { | 599 | } |
635 | unsigned char *p,*plen; | 600 | } |
636 | int i,mac_size,clear=0; | 601 | |
637 | int prefix_len=0; | 602 | static int |
603 | do_ssl3_write(SSL *s, int type, const unsigned char *buf, | ||
604 | unsigned int len, int create_empty_fragment) | ||
605 | { | ||
606 | unsigned char *p, *plen; | ||
607 | int i, mac_size, clear = 0; | ||
608 | int prefix_len = 0; | ||
638 | int eivlen; | 609 | int eivlen; |
639 | long align=0; | 610 | long align = 0; |
640 | SSL3_RECORD *wr; | 611 | SSL3_RECORD *wr; |
641 | SSL3_BUFFER *wb=&(s->s3->wbuf); | 612 | SSL3_BUFFER *wb = &(s->s3->wbuf); |
642 | SSL_SESSION *sess; | 613 | SSL_SESSION *sess; |
643 | 614 | ||
644 | if (wb->buf == NULL) | 615 | if (wb->buf == NULL) |
645 | if (!ssl3_setup_write_buffer(s)) | 616 | if (!ssl3_setup_write_buffer(s)) |
646 | return -1; | 617 | return -1; |
647 | 618 | ||
648 | /* first check if there is a SSL3_BUFFER still being written | 619 | /* first check if there is a SSL3_BUFFER still being written |
649 | * out. This will happen with non blocking IO */ | 620 | * out. This will happen with non blocking IO */ |
650 | if (wb->left != 0) | 621 | if (wb->left != 0) |
651 | return(ssl3_write_pending(s,type,buf,len)); | 622 | return (ssl3_write_pending(s, type, buf, len)); |
652 | 623 | ||
653 | /* If we have an alert to send, lets send it */ | 624 | /* If we have an alert to send, lets send it */ |
654 | if (s->s3->alert_dispatch) | 625 | if (s->s3->alert_dispatch) { |
655 | { | 626 | i = s->method->ssl_dispatch_alert(s); |
656 | i=s->method->ssl_dispatch_alert(s); | ||
657 | if (i <= 0) | 627 | if (i <= 0) |
658 | return(i); | 628 | return (i); |
659 | /* if it went, fall through and send more stuff */ | 629 | /* if it went, fall through and send more stuff */ |
660 | } | 630 | } |
661 | 631 | ||
662 | if (len == 0 && !create_empty_fragment) | 632 | if (len == 0 && !create_empty_fragment) |
663 | return 0; | 633 | return 0; |
664 | 634 | ||
665 | wr= &(s->s3->wrec); | 635 | wr = &(s->s3->wrec); |
666 | sess=s->session; | 636 | sess = s->session; |
667 | 637 | ||
668 | if ( (sess == NULL) || | 638 | if ((sess == NULL) || (s->enc_write_ctx == NULL) || |
669 | (s->enc_write_ctx == NULL) || | 639 | (EVP_MD_CTX_md(s->write_hash) == NULL)) { |
670 | (EVP_MD_CTX_md(s->write_hash) == NULL)) | ||
671 | { | ||
672 | #if 1 | 640 | #if 1 |
673 | clear=s->enc_write_ctx?0:1; /* must be AEAD cipher */ | 641 | clear = s->enc_write_ctx ? 0 : 1; /* must be AEAD cipher */ |
674 | #else | 642 | #else |
675 | clear=1; | 643 | clear = 1; |
676 | #endif | 644 | #endif |
677 | mac_size=0; | 645 | mac_size = 0; |
678 | } | 646 | } else { |
679 | else | 647 | mac_size = EVP_MD_CTX_size(s->write_hash); |
680 | { | ||
681 | mac_size=EVP_MD_CTX_size(s->write_hash); | ||
682 | if (mac_size < 0) | 648 | if (mac_size < 0) |
683 | goto err; | 649 | goto err; |
684 | } | 650 | } |
685 | 651 | ||
686 | /* 'create_empty_fragment' is true only when this function calls itself */ | 652 | /* 'create_empty_fragment' is true only when this function calls itself */ |
687 | if (!clear && !create_empty_fragment && !s->s3->empty_fragment_done) | 653 | if (!clear && !create_empty_fragment && !s->s3->empty_fragment_done) { |
688 | { | ||
689 | /* countermeasure against known-IV weakness in CBC ciphersuites | 654 | /* countermeasure against known-IV weakness in CBC ciphersuites |
690 | * (see http://www.openssl.org/~bodo/tls-cbc.txt) */ | 655 | * (see http://www.openssl.org/~bodo/tls-cbc.txt) */ |
691 | 656 | ||
692 | if (s->s3->need_empty_fragments && type == SSL3_RT_APPLICATION_DATA) | 657 | if (s->s3->need_empty_fragments && type == SSL3_RT_APPLICATION_DATA) { |
693 | { | ||
694 | /* recursive function call with 'create_empty_fragment' set; | 658 | /* recursive function call with 'create_empty_fragment' set; |
695 | * this prepares and buffers the data for an empty fragment | 659 | * this prepares and buffers the data for an empty fragment |
696 | * (these 'prefix_len' bytes are sent out later | 660 | * (these 'prefix_len' bytes are sent out later |
@@ -700,216 +664,195 @@ static int do_ssl3_write(SSL *s, int type, const unsigned char *buf, | |||
700 | goto err; | 664 | goto err; |
701 | 665 | ||
702 | if (prefix_len > | 666 | if (prefix_len > |
703 | (SSL3_RT_HEADER_LENGTH + SSL3_RT_SEND_MAX_ENCRYPTED_OVERHEAD)) | 667 | (SSL3_RT_HEADER_LENGTH + SSL3_RT_SEND_MAX_ENCRYPTED_OVERHEAD)) { |
704 | { | ||
705 | /* insufficient space */ | 668 | /* insufficient space */ |
706 | SSLerr(SSL_F_DO_SSL3_WRITE, ERR_R_INTERNAL_ERROR); | 669 | SSLerr(SSL_F_DO_SSL3_WRITE, ERR_R_INTERNAL_ERROR); |
707 | goto err; | 670 | goto err; |
708 | } | ||
709 | } | 671 | } |
710 | |||
711 | s->s3->empty_fragment_done = 1; | ||
712 | } | 672 | } |
713 | 673 | ||
714 | if (create_empty_fragment) | 674 | s->s3->empty_fragment_done = 1; |
715 | { | 675 | } |
676 | |||
677 | if (create_empty_fragment) { | ||
716 | #if defined(SSL3_ALIGN_PAYLOAD) && SSL3_ALIGN_PAYLOAD!=0 | 678 | #if defined(SSL3_ALIGN_PAYLOAD) && SSL3_ALIGN_PAYLOAD!=0 |
717 | /* extra fragment would be couple of cipher blocks, | 679 | /* extra fragment would be couple of cipher blocks, |
718 | * which would be multiple of SSL3_ALIGN_PAYLOAD, so | 680 | * which would be multiple of SSL3_ALIGN_PAYLOAD, so |
719 | * if we want to align the real payload, then we can | 681 | * if we want to align the real payload, then we can |
720 | * just pretent we simply have two headers. */ | 682 | * just pretent we simply have two headers. */ |
721 | align = (long)wb->buf + 2*SSL3_RT_HEADER_LENGTH; | 683 | align = (long)wb->buf + 2*SSL3_RT_HEADER_LENGTH; |
722 | align = (-align)&(SSL3_ALIGN_PAYLOAD-1); | 684 | align = (-align)&(SSL3_ALIGN_PAYLOAD - 1); |
723 | #endif | 685 | #endif |
724 | p = wb->buf + align; | 686 | p = wb->buf + align; |
725 | wb->offset = align; | 687 | wb->offset = align; |
726 | } | 688 | } else if (prefix_len) { |
727 | else if (prefix_len) | ||
728 | { | ||
729 | p = wb->buf + wb->offset + prefix_len; | 689 | p = wb->buf + wb->offset + prefix_len; |
730 | } | 690 | } else { |
731 | else | ||
732 | { | ||
733 | #if defined(SSL3_ALIGN_PAYLOAD) && SSL3_ALIGN_PAYLOAD!=0 | 691 | #if defined(SSL3_ALIGN_PAYLOAD) && SSL3_ALIGN_PAYLOAD!=0 |
734 | align = (long)wb->buf + SSL3_RT_HEADER_LENGTH; | 692 | align = (long)wb->buf + SSL3_RT_HEADER_LENGTH; |
735 | align = (-align)&(SSL3_ALIGN_PAYLOAD-1); | 693 | align = (-align)&(SSL3_ALIGN_PAYLOAD - 1); |
736 | #endif | 694 | #endif |
737 | p = wb->buf + align; | 695 | p = wb->buf + align; |
738 | wb->offset = align; | 696 | wb->offset = align; |
739 | } | 697 | } |
740 | 698 | ||
741 | /* write the header */ | 699 | /* write the header */ |
742 | 700 | ||
743 | *(p++)=type&0xff; | 701 | *(p++) = type&0xff; |
744 | wr->type=type; | 702 | wr->type = type; |
745 | 703 | ||
746 | *(p++)=(s->version>>8); | 704 | *(p++) = (s->version >> 8); |
747 | /* Some servers hang if iniatial client hello is larger than 256 | 705 | /* Some servers hang if iniatial client hello is larger than 256 |
748 | * bytes and record version number > TLS 1.0 | 706 | * bytes and record version number > TLS 1.0 |
749 | */ | 707 | */ |
750 | if (s->state == SSL3_ST_CW_CLNT_HELLO_B | 708 | if (s->state == SSL3_ST_CW_CLNT_HELLO_B && !s->renegotiate && |
751 | && !s->renegotiate | 709 | TLS1_get_version(s) > TLS1_VERSION) |
752 | && TLS1_get_version(s) > TLS1_VERSION) | ||
753 | *(p++) = 0x1; | 710 | *(p++) = 0x1; |
754 | else | 711 | else |
755 | *(p++)=s->version&0xff; | 712 | *(p++) = s->version&0xff; |
756 | 713 | ||
757 | /* field where we are to write out packet length */ | 714 | /* field where we are to write out packet length */ |
758 | plen=p; | 715 | plen = p; |
759 | p+=2; | 716 | |
717 | p += 2; | ||
760 | /* Explicit IV length, block ciphers and TLS version 1.1 or later */ | 718 | /* Explicit IV length, block ciphers and TLS version 1.1 or later */ |
761 | if (s->enc_write_ctx && s->version >= TLS1_1_VERSION) | 719 | if (s->enc_write_ctx && s->version >= TLS1_1_VERSION) { |
762 | { | ||
763 | int mode = EVP_CIPHER_CTX_mode(s->enc_write_ctx); | 720 | int mode = EVP_CIPHER_CTX_mode(s->enc_write_ctx); |
764 | if (mode == EVP_CIPH_CBC_MODE) | 721 | if (mode == EVP_CIPH_CBC_MODE) { |
765 | { | ||
766 | eivlen = EVP_CIPHER_CTX_iv_length(s->enc_write_ctx); | 722 | eivlen = EVP_CIPHER_CTX_iv_length(s->enc_write_ctx); |
767 | if (eivlen <= 1) | 723 | if (eivlen <= 1) |
768 | eivlen = 0; | 724 | eivlen = 0; |
769 | } | 725 | } |
770 | /* Need explicit part of IV for GCM mode */ | 726 | /* Need explicit part of IV for GCM mode */ |
771 | else if (mode == EVP_CIPH_GCM_MODE) | 727 | else if (mode == EVP_CIPH_GCM_MODE) |
772 | eivlen = EVP_GCM_TLS_EXPLICIT_IV_LEN; | 728 | eivlen = EVP_GCM_TLS_EXPLICIT_IV_LEN; |
773 | else | 729 | else |
774 | eivlen = 0; | 730 | eivlen = 0; |
775 | } | 731 | } else |
776 | else | ||
777 | eivlen = 0; | 732 | eivlen = 0; |
778 | 733 | ||
779 | /* lets setup the record stuff. */ | 734 | /* lets setup the record stuff. */ |
780 | wr->data=p + eivlen; | 735 | wr->data = p + eivlen; |
781 | wr->length=(int)len; | 736 | wr->length = (int)len; |
782 | wr->input=(unsigned char *)buf; | 737 | wr->input = (unsigned char *)buf; |
783 | 738 | ||
784 | /* we now 'read' from wr->input, wr->length bytes into | 739 | /* we now 'read' from wr->input, wr->length bytes into |
785 | * wr->data */ | 740 | * wr->data */ |
786 | 741 | ||
787 | /* first we compress */ | 742 | /* first we compress */ |
788 | if (s->compress != NULL) | 743 | if (s->compress != NULL) { |
789 | { | 744 | if (!ssl3_do_compress(s)) { |
790 | if (!ssl3_do_compress(s)) | 745 | SSLerr(SSL_F_DO_SSL3_WRITE, SSL_R_COMPRESSION_FAILURE); |
791 | { | ||
792 | SSLerr(SSL_F_DO_SSL3_WRITE,SSL_R_COMPRESSION_FAILURE); | ||
793 | goto err; | 746 | goto err; |
794 | } | ||
795 | } | ||
796 | else | ||
797 | { | ||
798 | memcpy(wr->data,wr->input,wr->length); | ||
799 | wr->input=wr->data; | ||
800 | } | 747 | } |
748 | } else { | ||
749 | memcpy(wr->data, wr->input, wr->length); | ||
750 | wr->input = wr->data; | ||
751 | } | ||
801 | 752 | ||
802 | /* we should still have the output to wr->data and the input | 753 | /* we should still have the output to wr->data and the input |
803 | * from wr->input. Length should be wr->length. | 754 | * from wr->input. Length should be wr->length. |
804 | * wr->data still points in the wb->buf */ | 755 | * wr->data still points in the wb->buf */ |
805 | 756 | ||
806 | if (mac_size != 0) | 757 | if (mac_size != 0) { |
807 | { | 758 | if (s->method->ssl3_enc->mac(s, &(p[wr->length + eivlen]), 1) < 0) |
808 | if (s->method->ssl3_enc->mac(s,&(p[wr->length + eivlen]),1) < 0) | ||
809 | goto err; | 759 | goto err; |
810 | wr->length+=mac_size; | 760 | wr->length += mac_size; |
811 | } | 761 | } |
812 | 762 | ||
813 | wr->input=p; | 763 | wr->input = p; |
814 | wr->data=p; | 764 | wr->data = p; |
815 | 765 | ||
816 | if (eivlen) | 766 | if (eivlen) { |
817 | { | ||
818 | /* if (RAND_pseudo_bytes(p, eivlen) <= 0) | 767 | /* if (RAND_pseudo_bytes(p, eivlen) <= 0) |
819 | goto err; */ | 768 | goto err; |
769 | */ | ||
820 | wr->length += eivlen; | 770 | wr->length += eivlen; |
821 | } | 771 | } |
822 | 772 | ||
823 | /* ssl3_enc can only have an error on read */ | 773 | /* ssl3_enc can only have an error on read */ |
824 | s->method->ssl3_enc->enc(s,1); | 774 | s->method->ssl3_enc->enc(s, 1); |
825 | 775 | ||
826 | /* record length after mac and block padding */ | 776 | /* record length after mac and block padding */ |
827 | s2n(wr->length,plen); | 777 | s2n(wr->length, plen); |
828 | 778 | ||
829 | /* we should now have | 779 | /* we should now have |
830 | * wr->data pointing to the encrypted data, which is | 780 | * wr->data pointing to the encrypted data, which is |
831 | * wr->length long */ | 781 | * wr->length long */ |
832 | wr->type=type; /* not needed but helps for debugging */ | 782 | wr->type=type; /* not needed but helps for debugging */ |
833 | wr->length+=SSL3_RT_HEADER_LENGTH; | 783 | wr->length += SSL3_RT_HEADER_LENGTH; |
834 | 784 | ||
835 | if (create_empty_fragment) | 785 | if (create_empty_fragment) { |
836 | { | ||
837 | /* we are in a recursive call; | 786 | /* we are in a recursive call; |
838 | * just return the length, don't write out anything here | 787 | * just return the length, don't write out anything here |
839 | */ | 788 | */ |
840 | return wr->length; | 789 | return wr->length; |
841 | } | 790 | } |
842 | 791 | ||
843 | /* now let's set up wb */ | 792 | /* now let's set up wb */ |
844 | wb->left = prefix_len + wr->length; | 793 | wb->left = prefix_len + wr->length; |
845 | 794 | ||
846 | /* memorize arguments so that ssl3_write_pending can detect bad write retries later */ | 795 | /* memorize arguments so that ssl3_write_pending can detect bad write retries later */ |
847 | s->s3->wpend_tot=len; | 796 | s->s3->wpend_tot = len; |
848 | s->s3->wpend_buf=buf; | 797 | s->s3->wpend_buf = buf; |
849 | s->s3->wpend_type=type; | 798 | s->s3->wpend_type = type; |
850 | s->s3->wpend_ret=len; | 799 | s->s3->wpend_ret = len; |
851 | 800 | ||
852 | /* we now just need to write the buffer */ | 801 | /* we now just need to write the buffer */ |
853 | return ssl3_write_pending(s,type,buf,len); | 802 | return ssl3_write_pending(s, type, buf, len); |
854 | err: | 803 | err: |
855 | return -1; | 804 | return -1; |
856 | } | 805 | } |
857 | 806 | ||
858 | /* if s->s3->wbuf.left != 0, we need to call this */ | 807 | /* if s->s3->wbuf.left != 0, we need to call this */ |
859 | int ssl3_write_pending(SSL *s, int type, const unsigned char *buf, | 808 | int |
860 | unsigned int len) | 809 | ssl3_write_pending(SSL *s, int type, const unsigned char *buf, |
861 | { | 810 | unsigned int len) |
811 | { | ||
862 | int i; | 812 | int i; |
863 | SSL3_BUFFER *wb=&(s->s3->wbuf); | 813 | SSL3_BUFFER *wb = &(s->s3->wbuf); |
864 | 814 | ||
865 | /* XXXX */ | 815 | /* XXXX */ |
866 | if ((s->s3->wpend_tot > (int)len) | 816 | if ((s->s3->wpend_tot > (int)len) || ((s->s3->wpend_buf != buf) && |
867 | || ((s->s3->wpend_buf != buf) && | 817 | !(s->mode & SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER)) || |
868 | !(s->mode & SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER)) | 818 | (s->s3->wpend_type != type)) { |
869 | || (s->s3->wpend_type != type)) | 819 | SSLerr(SSL_F_SSL3_WRITE_PENDING, SSL_R_BAD_WRITE_RETRY); |
870 | { | 820 | return (-1); |
871 | SSLerr(SSL_F_SSL3_WRITE_PENDING,SSL_R_BAD_WRITE_RETRY); | 821 | } |
872 | return(-1); | ||
873 | } | ||
874 | 822 | ||
875 | for (;;) | 823 | for (;;) { |
876 | { | ||
877 | errno = 0; | 824 | errno = 0; |
878 | if (s->wbio != NULL) | 825 | if (s->wbio != NULL) { |
879 | { | 826 | s->rwstate = SSL_WRITING; |
880 | s->rwstate=SSL_WRITING; | 827 | i = BIO_write(s->wbio, |
881 | i=BIO_write(s->wbio, | 828 | (char *)&(wb->buf[wb->offset]), |
882 | (char *)&(wb->buf[wb->offset]), | 829 | (unsigned int)wb->left); |
883 | (unsigned int)wb->left); | 830 | } else { |
884 | } | 831 | SSLerr(SSL_F_SSL3_WRITE_PENDING, SSL_R_BIO_NOT_SET); |
885 | else | 832 | i = -1; |
886 | { | 833 | } |
887 | SSLerr(SSL_F_SSL3_WRITE_PENDING,SSL_R_BIO_NOT_SET); | 834 | if (i == wb->left) { |
888 | i= -1; | 835 | wb->left = 0; |
889 | } | 836 | wb->offset += i; |
890 | if (i == wb->left) | ||
891 | { | ||
892 | wb->left=0; | ||
893 | wb->offset+=i; | ||
894 | if (s->mode & SSL_MODE_RELEASE_BUFFERS && | 837 | if (s->mode & SSL_MODE_RELEASE_BUFFERS && |
895 | SSL_version(s) != DTLS1_VERSION && SSL_version(s) != DTLS1_BAD_VER) | 838 | SSL_version(s) != DTLS1_VERSION && |
839 | SSL_version(s) != DTLS1_BAD_VER) | ||
896 | ssl3_release_write_buffer(s); | 840 | ssl3_release_write_buffer(s); |
897 | s->rwstate=SSL_NOTHING; | 841 | s->rwstate = SSL_NOTHING; |
898 | return(s->s3->wpend_ret); | 842 | return (s->s3->wpend_ret); |
899 | } | 843 | } else if (i <= 0) { |
900 | else if (i <= 0) { | ||
901 | if (s->version == DTLS1_VERSION || | 844 | if (s->version == DTLS1_VERSION || |
902 | s->version == DTLS1_BAD_VER) { | 845 | s->version == DTLS1_BAD_VER) { |
903 | /* For DTLS, just drop it. That's kind of the whole | 846 | /* For DTLS, just drop it. That's kind of the whole |
904 | point in using a datagram service */ | 847 | point in using a datagram service */ |
905 | wb->left = 0; | 848 | wb->left = 0; |
906 | } | 849 | } |
907 | return(i); | 850 | return (i); |
908 | } | ||
909 | wb->offset+=i; | ||
910 | wb->left-=i; | ||
911 | } | 851 | } |
852 | wb->offset += i; | ||
853 | wb->left -= i; | ||
912 | } | 854 | } |
855 | } | ||
913 | 856 | ||
914 | /* Return up to 'len' payload bytes received in 'type' records. | 857 | /* Return up to 'len' payload bytes received in 'type' records. |
915 | * 'type' is one of the following: | 858 | * 'type' is one of the following: |
@@ -938,39 +881,40 @@ int ssl3_write_pending(SSL *s, int type, const unsigned char *buf, | |||
938 | * Application data protocol | 881 | * Application data protocol |
939 | * none of our business | 882 | * none of our business |
940 | */ | 883 | */ |
941 | int ssl3_read_bytes(SSL *s, int type, unsigned char *buf, int len, int peek) | 884 | int |
942 | { | 885 | ssl3_read_bytes(SSL *s, int type, unsigned char *buf, int len, int peek) |
943 | int al,i,j,ret; | 886 | { |
887 | int al, i, j, ret; | ||
944 | unsigned int n; | 888 | unsigned int n; |
945 | SSL3_RECORD *rr; | 889 | SSL3_RECORD *rr; |
946 | void (*cb)(const SSL *ssl,int type2,int val)=NULL; | 890 | void (*cb)(const SSL *ssl, int type2, int val) = NULL; |
947 | 891 | ||
948 | if (s->s3->rbuf.buf == NULL) /* Not initialized yet */ | 892 | if (s->s3->rbuf.buf == NULL) /* Not initialized yet */ |
949 | if (!ssl3_setup_read_buffer(s)) | 893 | if (!ssl3_setup_read_buffer(s)) |
950 | return(-1); | 894 | return (-1); |
951 | 895 | ||
952 | if ((type && (type != SSL3_RT_APPLICATION_DATA) && (type != SSL3_RT_HANDSHAKE) && type) || | 896 | if ((type && (type != SSL3_RT_APPLICATION_DATA) && |
953 | (peek && (type != SSL3_RT_APPLICATION_DATA))) | 897 | (type != SSL3_RT_HANDSHAKE) && type) || |
954 | { | 898 | (peek && (type != SSL3_RT_APPLICATION_DATA))) { |
955 | SSLerr(SSL_F_SSL3_READ_BYTES, ERR_R_INTERNAL_ERROR); | 899 | SSLerr(SSL_F_SSL3_READ_BYTES, ERR_R_INTERNAL_ERROR); |
956 | return -1; | 900 | return -1; |
957 | } | 901 | } |
958 | 902 | ||
959 | if ((type == SSL3_RT_HANDSHAKE) && (s->s3->handshake_fragment_len > 0)) | 903 | if ((type == SSL3_RT_HANDSHAKE) && (s->s3->handshake_fragment_len > 0)) |
960 | /* (partially) satisfy request from storage */ | 904 | /* (partially) satisfy request from storage */ |
961 | { | 905 | { |
962 | unsigned char *src = s->s3->handshake_fragment; | 906 | unsigned char *src = s->s3->handshake_fragment; |
963 | unsigned char *dst = buf; | 907 | unsigned char *dst = buf; |
964 | unsigned int k; | 908 | unsigned int k; |
965 | 909 | ||
966 | /* peek == 0 */ | 910 | /* peek == 0 */ |
967 | n = 0; | 911 | n = 0; |
968 | while ((len > 0) && (s->s3->handshake_fragment_len > 0)) | 912 | while ((len > 0) && (s->s3->handshake_fragment_len > 0)) { |
969 | { | ||
970 | *dst++ = *src++; | 913 | *dst++ = *src++; |
971 | len--; s->s3->handshake_fragment_len--; | 914 | len--; |
915 | s->s3->handshake_fragment_len--; | ||
972 | n++; | 916 | n++; |
973 | } | 917 | } |
974 | /* move any remaining fragment bytes: */ | 918 | /* move any remaining fragment bytes: */ |
975 | for (k = 0; k < s->s3->handshake_fragment_len; k++) | 919 | for (k = 0; k < s->s3->handshake_fragment_len; k++) |
976 | s->s3->handshake_fragment[k] = *src++; | 920 | s->s3->handshake_fragment[k] = *src++; |
@@ -979,19 +923,18 @@ int ssl3_read_bytes(SSL *s, int type, unsigned char *buf, int len, int peek) | |||
979 | 923 | ||
980 | /* Now s->s3->handshake_fragment_len == 0 if type == SSL3_RT_HANDSHAKE. */ | 924 | /* Now s->s3->handshake_fragment_len == 0 if type == SSL3_RT_HANDSHAKE. */ |
981 | 925 | ||
982 | if (!s->in_handshake && SSL_in_init(s)) | 926 | if (!s->in_handshake && SSL_in_init(s)) { |
983 | { | ||
984 | /* type == SSL3_RT_APPLICATION_DATA */ | 927 | /* type == SSL3_RT_APPLICATION_DATA */ |
985 | i=s->handshake_func(s); | 928 | i = s->handshake_func(s); |
986 | if (i < 0) return(i); | 929 | if (i < 0) |
987 | if (i == 0) | 930 | return (i); |
988 | { | 931 | if (i == 0) { |
989 | SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_SSL_HANDSHAKE_FAILURE); | 932 | SSLerr(SSL_F_SSL3_READ_BYTES, SSL_R_SSL_HANDSHAKE_FAILURE); |
990 | return(-1); | 933 | return (-1); |
991 | } | ||
992 | } | 934 | } |
935 | } | ||
993 | start: | 936 | start: |
994 | s->rwstate=SSL_NOTHING; | 937 | s->rwstate = SSL_NOTHING; |
995 | 938 | ||
996 | /* s->s3->rrec.type - is the type of record | 939 | /* s->s3->rrec.type - is the type of record |
997 | * s->s3->rrec.data, - data | 940 | * s->s3->rrec.data, - data |
@@ -1000,67 +943,63 @@ start: | |||
1000 | rr = &(s->s3->rrec); | 943 | rr = &(s->s3->rrec); |
1001 | 944 | ||
1002 | /* get new packet if necessary */ | 945 | /* get new packet if necessary */ |
1003 | if ((rr->length == 0) || (s->rstate == SSL_ST_READ_BODY)) | 946 | if ((rr->length == 0) || (s->rstate == SSL_ST_READ_BODY)) { |
1004 | { | 947 | ret = ssl3_get_record(s); |
1005 | ret=ssl3_get_record(s); | 948 | if (ret <= 0) |
1006 | if (ret <= 0) return(ret); | 949 | return (ret); |
1007 | } | 950 | } |
1008 | 951 | ||
1009 | /* we now have a packet which can be read and processed */ | 952 | /* we now have a packet which can be read and processed */ |
1010 | 953 | ||
1011 | if (s->s3->change_cipher_spec /* set when we receive ChangeCipherSpec, | 954 | if (s->s3->change_cipher_spec /* set when we receive ChangeCipherSpec, |
1012 | * reset by ssl3_get_finished */ | 955 | * reset by ssl3_get_finished */ |
1013 | && (rr->type != SSL3_RT_HANDSHAKE)) | 956 | && (rr->type != SSL3_RT_HANDSHAKE)) { |
1014 | { | 957 | al = SSL_AD_UNEXPECTED_MESSAGE; |
1015 | al=SSL_AD_UNEXPECTED_MESSAGE; | 958 | SSLerr(SSL_F_SSL3_READ_BYTES, SSL_R_DATA_BETWEEN_CCS_AND_FINISHED); |
1016 | SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_DATA_BETWEEN_CCS_AND_FINISHED); | ||
1017 | goto f_err; | 959 | goto f_err; |
1018 | } | 960 | } |
1019 | 961 | ||
1020 | /* If the other end has shut down, throw anything we read away | 962 | /* If the other end has shut down, throw anything we read away |
1021 | * (even in 'peek' mode) */ | 963 | * (even in 'peek' mode) */ |
1022 | if (s->shutdown & SSL_RECEIVED_SHUTDOWN) | 964 | if (s->shutdown & SSL_RECEIVED_SHUTDOWN) { |
1023 | { | 965 | rr->length = 0; |
1024 | rr->length=0; | 966 | s->rwstate = SSL_NOTHING; |
1025 | s->rwstate=SSL_NOTHING; | 967 | return (0); |
1026 | return(0); | 968 | } |
1027 | } | ||
1028 | 969 | ||
1029 | 970 | ||
1030 | if (type == rr->type) /* SSL3_RT_APPLICATION_DATA or SSL3_RT_HANDSHAKE */ | 971 | if (type == rr->type) /* SSL3_RT_APPLICATION_DATA or SSL3_RT_HANDSHAKE */ |
1031 | { | 972 | { |
1032 | /* make sure that we are not getting application data when we | 973 | /* make sure that we are not getting application data when we |
1033 | * are doing a handshake for the first time */ | 974 | * are doing a handshake for the first time */ |
1034 | if (SSL_in_init(s) && (type == SSL3_RT_APPLICATION_DATA) && | 975 | if (SSL_in_init(s) && (type == SSL3_RT_APPLICATION_DATA) && |
1035 | (s->enc_read_ctx == NULL)) | 976 | (s->enc_read_ctx == NULL)) { |
1036 | { | 977 | al = SSL_AD_UNEXPECTED_MESSAGE; |
1037 | al=SSL_AD_UNEXPECTED_MESSAGE; | 978 | SSLerr(SSL_F_SSL3_READ_BYTES, SSL_R_APP_DATA_IN_HANDSHAKE); |
1038 | SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_APP_DATA_IN_HANDSHAKE); | ||
1039 | goto f_err; | 979 | goto f_err; |
1040 | } | 980 | } |
1041 | 981 | ||
1042 | if (len <= 0) return(len); | 982 | if (len <= 0) |
983 | return (len); | ||
1043 | 984 | ||
1044 | if ((unsigned int)len > rr->length) | 985 | if ((unsigned int)len > rr->length) |
1045 | n = rr->length; | 986 | n = rr->length; |
1046 | else | 987 | else |
1047 | n = (unsigned int)len; | 988 | n = (unsigned int)len; |
1048 | 989 | ||
1049 | memcpy(buf,&(rr->data[rr->off]),n); | 990 | memcpy(buf, &(rr->data[rr->off]), n); |
1050 | if (!peek) | 991 | if (!peek) { |
1051 | { | 992 | rr->length -= n; |
1052 | rr->length-=n; | 993 | rr->off += n; |
1053 | rr->off+=n; | 994 | if (rr->length == 0) { |
1054 | if (rr->length == 0) | 995 | s->rstate = SSL_ST_READ_HEADER; |
1055 | { | 996 | rr->off = 0; |
1056 | s->rstate=SSL_ST_READ_HEADER; | ||
1057 | rr->off=0; | ||
1058 | if (s->mode & SSL_MODE_RELEASE_BUFFERS) | 997 | if (s->mode & SSL_MODE_RELEASE_BUFFERS) |
1059 | ssl3_release_read_buffer(s); | 998 | ssl3_release_read_buffer(s); |
1060 | } | ||
1061 | } | 999 | } |
1062 | return(n); | ||
1063 | } | 1000 | } |
1001 | return (n); | ||
1002 | } | ||
1064 | 1003 | ||
1065 | 1004 | ||
1066 | /* If we get here, then type != rr->type; if we have a handshake | 1005 | /* If we get here, then type != rr->type; if we have a handshake |
@@ -1069,137 +1008,122 @@ start: | |||
1069 | /* In case of record types for which we have 'fragment' storage, | 1008 | /* In case of record types for which we have 'fragment' storage, |
1070 | * fill that so that we can process the data at a fixed place. | 1009 | * fill that so that we can process the data at a fixed place. |
1071 | */ | 1010 | */ |
1072 | { | 1011 | { |
1073 | unsigned int dest_maxlen = 0; | 1012 | unsigned int dest_maxlen = 0; |
1074 | unsigned char *dest = NULL; | 1013 | unsigned char *dest = NULL; |
1075 | unsigned int *dest_len = NULL; | 1014 | unsigned int *dest_len = NULL; |
1076 | 1015 | ||
1077 | if (rr->type == SSL3_RT_HANDSHAKE) | 1016 | if (rr->type == SSL3_RT_HANDSHAKE) { |
1078 | { | ||
1079 | dest_maxlen = sizeof s->s3->handshake_fragment; | 1017 | dest_maxlen = sizeof s->s3->handshake_fragment; |
1080 | dest = s->s3->handshake_fragment; | 1018 | dest = s->s3->handshake_fragment; |
1081 | dest_len = &s->s3->handshake_fragment_len; | 1019 | dest_len = &s->s3->handshake_fragment_len; |
1082 | } | 1020 | } else if (rr->type == SSL3_RT_ALERT) { |
1083 | else if (rr->type == SSL3_RT_ALERT) | ||
1084 | { | ||
1085 | dest_maxlen = sizeof s->s3->alert_fragment; | 1021 | dest_maxlen = sizeof s->s3->alert_fragment; |
1086 | dest = s->s3->alert_fragment; | 1022 | dest = s->s3->alert_fragment; |
1087 | dest_len = &s->s3->alert_fragment_len; | 1023 | dest_len = &s->s3->alert_fragment_len; |
1088 | } | 1024 | } |
1089 | #ifndef OPENSSL_NO_HEARTBEATS | 1025 | #ifndef OPENSSL_NO_HEARTBEATS |
1090 | else if (rr->type == TLS1_RT_HEARTBEAT) | 1026 | else if (rr->type == TLS1_RT_HEARTBEAT) { |
1091 | { | ||
1092 | tls1_process_heartbeat(s); | 1027 | tls1_process_heartbeat(s); |
1093 | 1028 | ||
1094 | /* Exit and notify application to read again */ | 1029 | /* Exit and notify application to read again */ |
1095 | rr->length = 0; | 1030 | rr->length = 0; |
1096 | s->rwstate=SSL_READING; | 1031 | s->rwstate = SSL_READING; |
1097 | BIO_clear_retry_flags(SSL_get_rbio(s)); | 1032 | BIO_clear_retry_flags(SSL_get_rbio(s)); |
1098 | BIO_set_retry_read(SSL_get_rbio(s)); | 1033 | BIO_set_retry_read(SSL_get_rbio(s)); |
1099 | return(-1); | 1034 | return (-1); |
1100 | } | 1035 | } |
1101 | #endif | 1036 | #endif |
1102 | 1037 | ||
1103 | if (dest_maxlen > 0) | 1038 | if (dest_maxlen > 0) { |
1104 | { | ||
1105 | n = dest_maxlen - *dest_len; /* available space in 'dest' */ | 1039 | n = dest_maxlen - *dest_len; /* available space in 'dest' */ |
1106 | if (rr->length < n) | 1040 | if (rr->length < n) |
1107 | n = rr->length; /* available bytes */ | 1041 | n = rr->length; /* available bytes */ |
1108 | 1042 | ||
1109 | /* now move 'n' bytes: */ | 1043 | /* now move 'n' bytes: */ |
1110 | while (n-- > 0) | 1044 | while (n-- > 0) { |
1111 | { | ||
1112 | dest[(*dest_len)++] = rr->data[rr->off++]; | 1045 | dest[(*dest_len)++] = rr->data[rr->off++]; |
1113 | rr->length--; | 1046 | rr->length--; |
1114 | } | 1047 | } |
1115 | 1048 | ||
1116 | if (*dest_len < dest_maxlen) | 1049 | if (*dest_len < dest_maxlen) |
1117 | goto start; /* fragment was too small */ | 1050 | goto start; /* fragment was too small */ |
1118 | } | ||
1119 | } | 1051 | } |
1052 | } | ||
1120 | 1053 | ||
1121 | /* s->s3->handshake_fragment_len == 4 iff rr->type == SSL3_RT_HANDSHAKE; | 1054 | /* s->s3->handshake_fragment_len == 4 iff rr->type == SSL3_RT_HANDSHAKE; |
1122 | * s->s3->alert_fragment_len == 2 iff rr->type == SSL3_RT_ALERT. | 1055 | * s->s3->alert_fragment_len == 2 iff rr->type == SSL3_RT_ALERT. |
1123 | * (Possibly rr is 'empty' now, i.e. rr->length may be 0.) */ | 1056 | * (Possibly rr is 'empty' now, i.e. rr->length may be 0.) */ |
1124 | 1057 | ||
1125 | /* If we are a client, check for an incoming 'Hello Request': */ | 1058 | /* If we are a client, check for an incoming 'Hello Request': */ |
1126 | if ((!s->server) && | 1059 | if ((!s->server) && (s->s3->handshake_fragment_len >= 4) && |
1127 | (s->s3->handshake_fragment_len >= 4) && | 1060 | (s->s3->handshake_fragment[0] == SSL3_MT_HELLO_REQUEST) && |
1128 | (s->s3->handshake_fragment[0] == SSL3_MT_HELLO_REQUEST) && | 1061 | (s->session != NULL) && (s->session->cipher != NULL)) { |
1129 | (s->session != NULL) && (s->session->cipher != NULL)) | ||
1130 | { | ||
1131 | s->s3->handshake_fragment_len = 0; | 1062 | s->s3->handshake_fragment_len = 0; |
1132 | 1063 | ||
1133 | if ((s->s3->handshake_fragment[1] != 0) || | 1064 | if ((s->s3->handshake_fragment[1] != 0) || |
1134 | (s->s3->handshake_fragment[2] != 0) || | 1065 | (s->s3->handshake_fragment[2] != 0) || |
1135 | (s->s3->handshake_fragment[3] != 0)) | 1066 | (s->s3->handshake_fragment[3] != 0)) { |
1136 | { | 1067 | al = SSL_AD_DECODE_ERROR; |
1137 | al=SSL_AD_DECODE_ERROR; | 1068 | SSLerr(SSL_F_SSL3_READ_BYTES, SSL_R_BAD_HELLO_REQUEST); |
1138 | SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_BAD_HELLO_REQUEST); | ||
1139 | goto f_err; | 1069 | goto f_err; |
1140 | } | 1070 | } |
1141 | 1071 | ||
1142 | if (s->msg_callback) | 1072 | if (s->msg_callback) |
1143 | s->msg_callback(0, s->version, SSL3_RT_HANDSHAKE, s->s3->handshake_fragment, 4, s, s->msg_callback_arg); | 1073 | s->msg_callback(0, s->version, SSL3_RT_HANDSHAKE, s->s3->handshake_fragment, 4, s, s->msg_callback_arg); |
1144 | 1074 | ||
1145 | if (SSL_is_init_finished(s) && | 1075 | if (SSL_is_init_finished(s) && |
1146 | !(s->s3->flags & SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS) && | 1076 | !(s->s3->flags & SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS) && |
1147 | !s->s3->renegotiate) | 1077 | !s->s3->renegotiate) { |
1148 | { | ||
1149 | ssl3_renegotiate(s); | 1078 | ssl3_renegotiate(s); |
1150 | if (ssl3_renegotiate_check(s)) | 1079 | if (ssl3_renegotiate_check(s)) { |
1151 | { | 1080 | i = s->handshake_func(s); |
1152 | i=s->handshake_func(s); | 1081 | if (i < 0) |
1153 | if (i < 0) return(i); | 1082 | return (i); |
1154 | if (i == 0) | 1083 | if (i == 0) { |
1155 | { | 1084 | SSLerr(SSL_F_SSL3_READ_BYTES, SSL_R_SSL_HANDSHAKE_FAILURE); |
1156 | SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_SSL_HANDSHAKE_FAILURE); | 1085 | return (-1); |
1157 | return(-1); | 1086 | } |
1158 | } | ||
1159 | 1087 | ||
1160 | if (!(s->mode & SSL_MODE_AUTO_RETRY)) | 1088 | if (!(s->mode & SSL_MODE_AUTO_RETRY)) { |
1161 | { | ||
1162 | if (s->s3->rbuf.left == 0) /* no read-ahead left? */ | 1089 | if (s->s3->rbuf.left == 0) /* no read-ahead left? */ |
1163 | { | 1090 | { |
1164 | BIO *bio; | 1091 | BIO *bio; |
1165 | /* In the case where we try to read application data, | 1092 | /* In the case where we try to read application data, |
1166 | * but we trigger an SSL handshake, we return -1 with | 1093 | * but we trigger an SSL handshake, we return -1 with |
1167 | * the retry option set. Otherwise renegotiation may | 1094 | * the retry option set. Otherwise renegotiation may |
1168 | * cause nasty problems in the blocking world */ | 1095 | * cause nasty problems in the blocking world */ |
1169 | s->rwstate=SSL_READING; | 1096 | s->rwstate = SSL_READING; |
1170 | bio=SSL_get_rbio(s); | 1097 | bio = SSL_get_rbio(s); |
1171 | BIO_clear_retry_flags(bio); | 1098 | BIO_clear_retry_flags(bio); |
1172 | BIO_set_retry_read(bio); | 1099 | BIO_set_retry_read(bio); |
1173 | return(-1); | 1100 | return (-1); |
1174 | } | ||
1175 | } | 1101 | } |
1176 | } | 1102 | } |
1177 | } | 1103 | } |
1104 | } | ||
1178 | /* we either finished a handshake or ignored the request, | 1105 | /* we either finished a handshake or ignored the request, |
1179 | * now try again to obtain the (application) data we were asked for */ | 1106 | * now try again to obtain the (application) data we were asked for */ |
1180 | goto start; | 1107 | goto start; |
1181 | } | 1108 | } |
1182 | /* If we are a server and get a client hello when renegotiation isn't | 1109 | /* If we are a server and get a client hello when renegotiation isn't |
1183 | * allowed send back a no renegotiation alert and carry on. | 1110 | * allowed send back a no renegotiation alert and carry on. |
1184 | * WARNING: experimental code, needs reviewing (steve) | 1111 | * WARNING: experimental code, needs reviewing (steve) |
1185 | */ | 1112 | */ |
1186 | if (s->server && | 1113 | if (s->server && |
1187 | SSL_is_init_finished(s) && | 1114 | SSL_is_init_finished(s) && |
1188 | !s->s3->send_connection_binding && | 1115 | !s->s3->send_connection_binding && |
1189 | (s->version > SSL3_VERSION) && | 1116 | (s->version > SSL3_VERSION) && |
1190 | (s->s3->handshake_fragment_len >= 4) && | 1117 | (s->s3->handshake_fragment_len >= 4) && |
1191 | (s->s3->handshake_fragment[0] == SSL3_MT_CLIENT_HELLO) && | 1118 | (s->s3->handshake_fragment[0] == SSL3_MT_CLIENT_HELLO) && |
1192 | (s->session != NULL) && (s->session->cipher != NULL) && | 1119 | (s->session != NULL) && (s->session->cipher != NULL) && |
1193 | !(s->ctx->options & SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION)) | 1120 | !(s->ctx->options & SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION)) { |
1194 | |||
1195 | { | ||
1196 | /*s->s3->handshake_fragment_len = 0;*/ | 1121 | /*s->s3->handshake_fragment_len = 0;*/ |
1197 | rr->length = 0; | 1122 | rr->length = 0; |
1198 | ssl3_send_alert(s,SSL3_AL_WARNING, SSL_AD_NO_RENEGOTIATION); | 1123 | ssl3_send_alert(s, SSL3_AL_WARNING, SSL_AD_NO_RENEGOTIATION); |
1199 | goto start; | 1124 | goto start; |
1200 | } | 1125 | } |
1201 | if (s->s3->alert_fragment_len >= 2) | 1126 | if (s->s3->alert_fragment_len >= 2) { |
1202 | { | ||
1203 | int alert_level = s->s3->alert_fragment[0]; | 1127 | int alert_level = s->s3->alert_fragment[0]; |
1204 | int alert_descr = s->s3->alert_fragment[1]; | 1128 | int alert_descr = s->s3->alert_fragment[1]; |
1205 | 1129 | ||
@@ -1209,24 +1133,22 @@ start: | |||
1209 | s->msg_callback(0, s->version, SSL3_RT_ALERT, s->s3->alert_fragment, 2, s, s->msg_callback_arg); | 1133 | s->msg_callback(0, s->version, SSL3_RT_ALERT, s->s3->alert_fragment, 2, s, s->msg_callback_arg); |
1210 | 1134 | ||
1211 | if (s->info_callback != NULL) | 1135 | if (s->info_callback != NULL) |
1212 | cb=s->info_callback; | 1136 | cb = s->info_callback; |
1213 | else if (s->ctx->info_callback != NULL) | 1137 | else if (s->ctx->info_callback != NULL) |
1214 | cb=s->ctx->info_callback; | 1138 | cb = s->ctx->info_callback; |
1215 | 1139 | ||
1216 | if (cb != NULL) | 1140 | if (cb != NULL) { |
1217 | { | ||
1218 | j = (alert_level << 8) | alert_descr; | 1141 | j = (alert_level << 8) | alert_descr; |
1219 | cb(s, SSL_CB_READ_ALERT, j); | 1142 | cb(s, SSL_CB_READ_ALERT, j); |
1220 | } | 1143 | } |
1221 | 1144 | ||
1222 | if (alert_level == 1) /* warning */ | 1145 | if (alert_level == 1) /* warning */ |
1223 | { | 1146 | { |
1224 | s->s3->warn_alert = alert_descr; | 1147 | s->s3->warn_alert = alert_descr; |
1225 | if (alert_descr == SSL_AD_CLOSE_NOTIFY) | 1148 | if (alert_descr == SSL_AD_CLOSE_NOTIFY) { |
1226 | { | ||
1227 | s->shutdown |= SSL_RECEIVED_SHUTDOWN; | 1149 | s->shutdown |= SSL_RECEIVED_SHUTDOWN; |
1228 | return(0); | 1150 | return (0); |
1229 | } | 1151 | } |
1230 | /* This is a warning but we receive it if we requested | 1152 | /* This is a warning but we receive it if we requested |
1231 | * renegotiation and the peer denied it. Terminate with | 1153 | * renegotiation and the peer denied it. Terminate with |
1232 | * a fatal alert because if application tried to | 1154 | * a fatal alert because if application tried to |
@@ -1236,139 +1158,126 @@ start: | |||
1236 | * In future we might have a renegotiation where we | 1158 | * In future we might have a renegotiation where we |
1237 | * don't care if the peer refused it where we carry on. | 1159 | * don't care if the peer refused it where we carry on. |
1238 | */ | 1160 | */ |
1239 | else if (alert_descr == SSL_AD_NO_RENEGOTIATION) | 1161 | else if (alert_descr == SSL_AD_NO_RENEGOTIATION) { |
1240 | { | ||
1241 | al = SSL_AD_HANDSHAKE_FAILURE; | 1162 | al = SSL_AD_HANDSHAKE_FAILURE; |
1242 | SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_NO_RENEGOTIATION); | 1163 | SSLerr(SSL_F_SSL3_READ_BYTES, SSL_R_NO_RENEGOTIATION); |
1243 | goto f_err; | 1164 | goto f_err; |
1244 | } | 1165 | } |
1245 | #ifdef SSL_AD_MISSING_SRP_USERNAME | 1166 | #ifdef SSL_AD_MISSING_SRP_USERNAME |
1246 | else if (alert_descr == SSL_AD_MISSING_SRP_USERNAME) | 1167 | else if (alert_descr == SSL_AD_MISSING_SRP_USERNAME) |
1247 | return(0); | 1168 | return (0); |
1248 | #endif | 1169 | #endif |
1249 | } | 1170 | } else if (alert_level == 2) /* fatal */ |
1250 | else if (alert_level == 2) /* fatal */ | 1171 | { |
1251 | { | ||
1252 | char tmp[16]; | 1172 | char tmp[16]; |
1253 | 1173 | ||
1254 | s->rwstate=SSL_NOTHING; | 1174 | s->rwstate = SSL_NOTHING; |
1255 | s->s3->fatal_alert = alert_descr; | 1175 | s->s3->fatal_alert = alert_descr; |
1256 | SSLerr(SSL_F_SSL3_READ_BYTES, SSL_AD_REASON_OFFSET + alert_descr); | 1176 | SSLerr(SSL_F_SSL3_READ_BYTES, SSL_AD_REASON_OFFSET + alert_descr); |
1257 | BIO_snprintf(tmp,sizeof tmp,"%d",alert_descr); | 1177 | BIO_snprintf(tmp, sizeof tmp, "%d", alert_descr); |
1258 | ERR_add_error_data(2,"SSL alert number ",tmp); | 1178 | ERR_add_error_data(2, "SSL alert number ", tmp); |
1259 | s->shutdown|=SSL_RECEIVED_SHUTDOWN; | 1179 | s->shutdown|=SSL_RECEIVED_SHUTDOWN; |
1260 | SSL_CTX_remove_session(s->ctx,s->session); | 1180 | SSL_CTX_remove_session(s->ctx, s->session); |
1261 | return(0); | 1181 | return (0); |
1262 | } | 1182 | } else { |
1263 | else | 1183 | al = SSL_AD_ILLEGAL_PARAMETER; |
1264 | { | 1184 | SSLerr(SSL_F_SSL3_READ_BYTES, SSL_R_UNKNOWN_ALERT_TYPE); |
1265 | al=SSL_AD_ILLEGAL_PARAMETER; | ||
1266 | SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_UNKNOWN_ALERT_TYPE); | ||
1267 | goto f_err; | 1185 | goto f_err; |
1268 | } | 1186 | } |
1269 | 1187 | ||
1270 | goto start; | 1188 | goto start; |
1271 | } | 1189 | } |
1272 | 1190 | ||
1273 | if (s->shutdown & SSL_SENT_SHUTDOWN) /* but we have not received a shutdown */ | 1191 | if (s->shutdown & SSL_SENT_SHUTDOWN) /* but we have not received a shutdown */ |
1274 | { | 1192 | { |
1275 | s->rwstate=SSL_NOTHING; | 1193 | s->rwstate = SSL_NOTHING; |
1276 | rr->length=0; | 1194 | rr->length = 0; |
1277 | return(0); | 1195 | return (0); |
1278 | } | 1196 | } |
1279 | 1197 | ||
1280 | if (rr->type == SSL3_RT_CHANGE_CIPHER_SPEC) | 1198 | if (rr->type == SSL3_RT_CHANGE_CIPHER_SPEC) { |
1281 | { | ||
1282 | /* 'Change Cipher Spec' is just a single byte, so we know | 1199 | /* 'Change Cipher Spec' is just a single byte, so we know |
1283 | * exactly what the record payload has to look like */ | 1200 | * exactly what the record payload has to look like */ |
1284 | if ( (rr->length != 1) || (rr->off != 0) || | 1201 | if ((rr->length != 1) || (rr->off != 0) || |
1285 | (rr->data[0] != SSL3_MT_CCS)) | 1202 | (rr->data[0] != SSL3_MT_CCS)) { |
1286 | { | 1203 | al = SSL_AD_ILLEGAL_PARAMETER; |
1287 | al=SSL_AD_ILLEGAL_PARAMETER; | 1204 | SSLerr(SSL_F_SSL3_READ_BYTES, SSL_R_BAD_CHANGE_CIPHER_SPEC); |
1288 | SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_BAD_CHANGE_CIPHER_SPEC); | ||
1289 | goto f_err; | 1205 | goto f_err; |
1290 | } | 1206 | } |
1291 | 1207 | ||
1292 | /* Check we have a cipher to change to */ | 1208 | /* Check we have a cipher to change to */ |
1293 | if (s->s3->tmp.new_cipher == NULL) | 1209 | if (s->s3->tmp.new_cipher == NULL) { |
1294 | { | 1210 | al = SSL_AD_UNEXPECTED_MESSAGE; |
1295 | al=SSL_AD_UNEXPECTED_MESSAGE; | 1211 | SSLerr(SSL_F_SSL3_READ_BYTES, SSL_R_CCS_RECEIVED_EARLY); |
1296 | SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_CCS_RECEIVED_EARLY); | ||
1297 | goto f_err; | 1212 | goto f_err; |
1298 | } | 1213 | } |
1299 | 1214 | ||
1300 | rr->length=0; | 1215 | rr->length = 0; |
1301 | 1216 | ||
1302 | if (s->msg_callback) | 1217 | if (s->msg_callback) |
1303 | s->msg_callback(0, s->version, SSL3_RT_CHANGE_CIPHER_SPEC, rr->data, 1, s, s->msg_callback_arg); | 1218 | s->msg_callback(0, s->version, SSL3_RT_CHANGE_CIPHER_SPEC, rr->data, 1, s, s->msg_callback_arg); |
1304 | 1219 | ||
1305 | s->s3->change_cipher_spec=1; | 1220 | s->s3->change_cipher_spec = 1; |
1306 | if (!ssl3_do_change_cipher_spec(s)) | 1221 | if (!ssl3_do_change_cipher_spec(s)) |
1307 | goto err; | 1222 | goto err; |
1308 | else | 1223 | else |
1309 | goto start; | 1224 | goto start; |
1310 | } | 1225 | } |
1311 | 1226 | ||
1312 | /* Unexpected handshake message (Client Hello, or protocol violation) */ | 1227 | /* Unexpected handshake message (Client Hello, or protocol violation) */ |
1313 | if ((s->s3->handshake_fragment_len >= 4) && !s->in_handshake) | 1228 | if ((s->s3->handshake_fragment_len >= 4) && !s->in_handshake) { |
1314 | { | ||
1315 | if (((s->state&SSL_ST_MASK) == SSL_ST_OK) && | 1229 | if (((s->state&SSL_ST_MASK) == SSL_ST_OK) && |
1316 | !(s->s3->flags & SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS)) | 1230 | !(s->s3->flags & SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS)) { |
1317 | { | ||
1318 | #if 0 /* worked only because C operator preferences are not as expected (and | 1231 | #if 0 /* worked only because C operator preferences are not as expected (and |
1319 | * because this is not really needed for clients except for detecting | 1232 | * because this is not really needed for clients except for detecting |
1320 | * protocol violations): */ | 1233 | * protocol violations): */ |
1321 | s->state=SSL_ST_BEFORE|(s->server) | 1234 | s->state = SSL_ST_BEFORE | |
1322 | ?SSL_ST_ACCEPT | 1235 | (s->server) ? SSL_ST_ACCEPT : SSL_ST_CONNECT; |
1323 | :SSL_ST_CONNECT; | ||
1324 | #else | 1236 | #else |
1325 | s->state = s->server ? SSL_ST_ACCEPT : SSL_ST_CONNECT; | 1237 | s->state = s->server ? SSL_ST_ACCEPT : SSL_ST_CONNECT; |
1326 | #endif | 1238 | #endif |
1327 | s->renegotiate=1; | 1239 | s->renegotiate = 1; |
1328 | s->new_session=1; | 1240 | s->new_session = 1; |
1329 | } | 1241 | } |
1330 | i=s->handshake_func(s); | 1242 | i = s->handshake_func(s); |
1331 | if (i < 0) return(i); | 1243 | if (i < 0) |
1332 | if (i == 0) | 1244 | return (i); |
1333 | { | 1245 | if (i == 0) { |
1334 | SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_SSL_HANDSHAKE_FAILURE); | 1246 | SSLerr(SSL_F_SSL3_READ_BYTES, SSL_R_SSL_HANDSHAKE_FAILURE); |
1335 | return(-1); | 1247 | return (-1); |
1336 | } | 1248 | } |
1337 | 1249 | ||
1338 | if (!(s->mode & SSL_MODE_AUTO_RETRY)) | 1250 | if (!(s->mode & SSL_MODE_AUTO_RETRY)) { |
1339 | { | ||
1340 | if (s->s3->rbuf.left == 0) /* no read-ahead left? */ | 1251 | if (s->s3->rbuf.left == 0) /* no read-ahead left? */ |
1341 | { | 1252 | { |
1342 | BIO *bio; | 1253 | BIO *bio; |
1343 | /* In the case where we try to read application data, | 1254 | /* In the case where we try to read application data, |
1344 | * but we trigger an SSL handshake, we return -1 with | 1255 | * but we trigger an SSL handshake, we return -1 with |
1345 | * the retry option set. Otherwise renegotiation may | 1256 | * the retry option set. Otherwise renegotiation may |
1346 | * cause nasty problems in the blocking world */ | 1257 | * cause nasty problems in the blocking world */ |
1347 | s->rwstate=SSL_READING; | 1258 | s->rwstate = SSL_READING; |
1348 | bio=SSL_get_rbio(s); | 1259 | bio = SSL_get_rbio(s); |
1349 | BIO_clear_retry_flags(bio); | 1260 | BIO_clear_retry_flags(bio); |
1350 | BIO_set_retry_read(bio); | 1261 | BIO_set_retry_read(bio); |
1351 | return(-1); | 1262 | return (-1); |
1352 | } | ||
1353 | } | 1263 | } |
1354 | goto start; | ||
1355 | } | 1264 | } |
1265 | goto start; | ||
1266 | } | ||
1356 | 1267 | ||
1357 | switch (rr->type) | 1268 | switch (rr->type) { |
1358 | { | ||
1359 | default: | 1269 | default: |
1360 | #ifndef OPENSSL_NO_TLS | 1270 | #ifndef OPENSSL_NO_TLS |
1361 | /* TLS up to v1.1 just ignores unknown message types: | 1271 | /* TLS up to v1.1 just ignores unknown message types: |
1362 | * TLS v1.2 give an unexpected message alert. | 1272 | * TLS v1.2 give an unexpected message alert. |
1363 | */ | 1273 | */ |
1364 | if (s->version >= TLS1_VERSION && s->version <= TLS1_1_VERSION) | 1274 | if (s->version >= TLS1_VERSION && s->version <= TLS1_1_VERSION) { |
1365 | { | ||
1366 | rr->length = 0; | 1275 | rr->length = 0; |
1367 | goto start; | 1276 | goto start; |
1368 | } | 1277 | } |
1369 | #endif | 1278 | #endif |
1370 | al=SSL_AD_UNEXPECTED_MESSAGE; | 1279 | al = SSL_AD_UNEXPECTED_MESSAGE; |
1371 | SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_UNEXPECTED_RECORD); | 1280 | SSLerr(SSL_F_SSL3_READ_BYTES, SSL_R_UNEXPECTED_RECORD); |
1372 | goto f_err; | 1281 | goto f_err; |
1373 | case SSL3_RT_CHANGE_CIPHER_SPEC: | 1282 | case SSL3_RT_CHANGE_CIPHER_SPEC: |
1374 | case SSL3_RT_ALERT: | 1283 | case SSL3_RT_ALERT: |
@@ -1376,8 +1285,8 @@ start: | |||
1376 | /* we already handled all of these, with the possible exception | 1285 | /* we already handled all of these, with the possible exception |
1377 | * of SSL3_RT_HANDSHAKE when s->in_handshake is set, but that | 1286 | * of SSL3_RT_HANDSHAKE when s->in_handshake is set, but that |
1378 | * should not happen when type != rr->type */ | 1287 | * should not happen when type != rr->type */ |
1379 | al=SSL_AD_UNEXPECTED_MESSAGE; | 1288 | al = SSL_AD_UNEXPECTED_MESSAGE; |
1380 | SSLerr(SSL_F_SSL3_READ_BYTES,ERR_R_INTERNAL_ERROR); | 1289 | SSLerr(SSL_F_SSL3_READ_BYTES, ERR_R_INTERNAL_ERROR); |
1381 | goto f_err; | 1290 | goto f_err; |
1382 | case SSL3_RT_APPLICATION_DATA: | 1291 | case SSL3_RT_APPLICATION_DATA: |
1383 | /* At this point, we were expecting handshake data, | 1292 | /* At this point, we were expecting handshake data, |
@@ -1388,123 +1297,116 @@ start: | |||
1388 | * we will indulge it. | 1297 | * we will indulge it. |
1389 | */ | 1298 | */ |
1390 | if (s->s3->in_read_app_data && | 1299 | if (s->s3->in_read_app_data && |
1391 | (s->s3->total_renegotiations != 0) && | 1300 | (s->s3->total_renegotiations != 0) && |
1392 | (( | 1301 | (( |
1393 | (s->state & SSL_ST_CONNECT) && | 1302 | (s->state & SSL_ST_CONNECT) && |
1394 | (s->state >= SSL3_ST_CW_CLNT_HELLO_A) && | 1303 | (s->state >= SSL3_ST_CW_CLNT_HELLO_A) && |
1395 | (s->state <= SSL3_ST_CR_SRVR_HELLO_A) | 1304 | (s->state <= SSL3_ST_CR_SRVR_HELLO_A) |
1396 | ) || ( | 1305 | ) || ( |
1397 | (s->state & SSL_ST_ACCEPT) && | 1306 | (s->state & SSL_ST_ACCEPT) && |
1398 | (s->state <= SSL3_ST_SW_HELLO_REQ_A) && | 1307 | (s->state <= SSL3_ST_SW_HELLO_REQ_A) && |
1399 | (s->state >= SSL3_ST_SR_CLNT_HELLO_A) | 1308 | (s->state >= SSL3_ST_SR_CLNT_HELLO_A) |
1400 | ) | 1309 | ) |
1401 | )) | 1310 | )) { |
1402 | { | 1311 | s->s3->in_read_app_data = 2; |
1403 | s->s3->in_read_app_data=2; | 1312 | return (-1); |
1404 | return(-1); | 1313 | } else { |
1405 | } | 1314 | al = SSL_AD_UNEXPECTED_MESSAGE; |
1406 | else | 1315 | SSLerr(SSL_F_SSL3_READ_BYTES, SSL_R_UNEXPECTED_RECORD); |
1407 | { | ||
1408 | al=SSL_AD_UNEXPECTED_MESSAGE; | ||
1409 | SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_UNEXPECTED_RECORD); | ||
1410 | goto f_err; | 1316 | goto f_err; |
1411 | } | ||
1412 | } | 1317 | } |
1318 | } | ||
1413 | /* not reached */ | 1319 | /* not reached */ |
1414 | 1320 | ||
1415 | f_err: | 1321 | f_err: |
1416 | ssl3_send_alert(s,SSL3_AL_FATAL,al); | 1322 | ssl3_send_alert(s, SSL3_AL_FATAL, al); |
1417 | err: | 1323 | err: |
1418 | return(-1); | 1324 | return (-1); |
1419 | } | 1325 | } |
1420 | 1326 | ||
1421 | int ssl3_do_change_cipher_spec(SSL *s) | 1327 | int |
1422 | { | 1328 | ssl3_do_change_cipher_spec(SSL *s) |
1329 | { | ||
1423 | int i; | 1330 | int i; |
1424 | const char *sender; | 1331 | const char *sender; |
1425 | int slen; | 1332 | int slen; |
1426 | 1333 | ||
1427 | if (s->state & SSL_ST_ACCEPT) | 1334 | if (s->state & SSL_ST_ACCEPT) |
1428 | i=SSL3_CHANGE_CIPHER_SERVER_READ; | 1335 | i = SSL3_CHANGE_CIPHER_SERVER_READ; |
1429 | else | 1336 | else |
1430 | i=SSL3_CHANGE_CIPHER_CLIENT_READ; | 1337 | i = SSL3_CHANGE_CIPHER_CLIENT_READ; |
1431 | 1338 | ||
1432 | if (s->s3->tmp.key_block == NULL) | 1339 | if (s->s3->tmp.key_block == NULL) { |
1433 | { | 1340 | if (s->session == NULL) { |
1434 | if (s->session == NULL) | ||
1435 | { | ||
1436 | /* might happen if dtls1_read_bytes() calls this */ | 1341 | /* might happen if dtls1_read_bytes() calls this */ |
1437 | SSLerr(SSL_F_SSL3_DO_CHANGE_CIPHER_SPEC,SSL_R_CCS_RECEIVED_EARLY); | 1342 | SSLerr(SSL_F_SSL3_DO_CHANGE_CIPHER_SPEC, SSL_R_CCS_RECEIVED_EARLY); |
1438 | return (0); | 1343 | return (0); |
1439 | } | ||
1440 | |||
1441 | s->session->cipher=s->s3->tmp.new_cipher; | ||
1442 | if (!s->method->ssl3_enc->setup_key_block(s)) return(0); | ||
1443 | } | 1344 | } |
1444 | 1345 | ||
1445 | if (!s->method->ssl3_enc->change_cipher_state(s,i)) | 1346 | s->session->cipher = s->s3->tmp.new_cipher; |
1446 | return(0); | 1347 | if (!s->method->ssl3_enc->setup_key_block(s)) |
1348 | return (0); | ||
1349 | } | ||
1350 | |||
1351 | if (!s->method->ssl3_enc->change_cipher_state(s, i)) | ||
1352 | return (0); | ||
1447 | 1353 | ||
1448 | /* we have to record the message digest at | 1354 | /* we have to record the message digest at |
1449 | * this point so we can get it before we read | 1355 | * this point so we can get it before we read |
1450 | * the finished message */ | 1356 | * the finished message */ |
1451 | if (s->state & SSL_ST_CONNECT) | 1357 | if (s->state & SSL_ST_CONNECT) { |
1452 | { | 1358 | sender = s->method->ssl3_enc->server_finished_label; |
1453 | sender=s->method->ssl3_enc->server_finished_label; | 1359 | slen = s->method->ssl3_enc->server_finished_label_len; |
1454 | slen=s->method->ssl3_enc->server_finished_label_len; | 1360 | } else { |
1455 | } | 1361 | sender = s->method->ssl3_enc->client_finished_label; |
1456 | else | 1362 | slen = s->method->ssl3_enc->client_finished_label_len; |
1457 | { | 1363 | } |
1458 | sender=s->method->ssl3_enc->client_finished_label; | ||
1459 | slen=s->method->ssl3_enc->client_finished_label_len; | ||
1460 | } | ||
1461 | 1364 | ||
1462 | i = s->method->ssl3_enc->final_finish_mac(s, | 1365 | i = s->method->ssl3_enc->final_finish_mac(s, |
1463 | sender,slen,s->s3->tmp.peer_finish_md); | 1366 | sender, slen, s->s3->tmp.peer_finish_md); |
1464 | if (i == 0) | 1367 | if (i == 0) { |
1465 | { | ||
1466 | SSLerr(SSL_F_SSL3_DO_CHANGE_CIPHER_SPEC, ERR_R_INTERNAL_ERROR); | 1368 | SSLerr(SSL_F_SSL3_DO_CHANGE_CIPHER_SPEC, ERR_R_INTERNAL_ERROR); |
1467 | return 0; | 1369 | return 0; |
1468 | } | 1370 | } |
1469 | s->s3->tmp.peer_finish_md_len = i; | 1371 | s->s3->tmp.peer_finish_md_len = i; |
1470 | 1372 | ||
1471 | return(1); | 1373 | return (1); |
1472 | } | 1374 | } |
1473 | 1375 | ||
1474 | int ssl3_send_alert(SSL *s, int level, int desc) | 1376 | int |
1475 | { | 1377 | ssl3_send_alert(SSL *s, int level, int desc) |
1378 | { | ||
1476 | /* Map tls/ssl alert value to correct one */ | 1379 | /* Map tls/ssl alert value to correct one */ |
1477 | desc=s->method->ssl3_enc->alert_value(desc); | 1380 | desc = s->method->ssl3_enc->alert_value(desc); |
1478 | if (s->version == SSL3_VERSION && desc == SSL_AD_PROTOCOL_VERSION) | 1381 | if (s->version == SSL3_VERSION && desc == SSL_AD_PROTOCOL_VERSION) |
1479 | desc = SSL_AD_HANDSHAKE_FAILURE; /* SSL 3.0 does not have protocol_version alerts */ | 1382 | desc = SSL_AD_HANDSHAKE_FAILURE; /* SSL 3.0 does not have protocol_version alerts */ |
1480 | if (desc < 0) return -1; | 1383 | if (desc < 0) |
1384 | return -1; | ||
1481 | /* If a fatal one, remove from cache */ | 1385 | /* If a fatal one, remove from cache */ |
1482 | if ((level == 2) && (s->session != NULL)) | 1386 | if ((level == 2) && (s->session != NULL)) |
1483 | SSL_CTX_remove_session(s->ctx,s->session); | 1387 | SSL_CTX_remove_session(s->ctx, s->session); |
1484 | 1388 | ||
1485 | s->s3->alert_dispatch=1; | 1389 | s->s3->alert_dispatch = 1; |
1486 | s->s3->send_alert[0]=level; | 1390 | s->s3->send_alert[0] = level; |
1487 | s->s3->send_alert[1]=desc; | 1391 | s->s3->send_alert[1] = desc; |
1488 | if (s->s3->wbuf.left == 0) /* data still being written out? */ | 1392 | if (s->s3->wbuf.left == 0) /* data still being written out? */ |
1489 | return s->method->ssl_dispatch_alert(s); | 1393 | return s->method->ssl_dispatch_alert(s); |
1490 | /* else data is still being written out, we will get written | 1394 | /* else data is still being written out, we will get written |
1491 | * some time in the future */ | 1395 | * some time in the future */ |
1492 | return -1; | 1396 | return -1; |
1493 | } | 1397 | } |
1494 | 1398 | ||
1495 | int ssl3_dispatch_alert(SSL *s) | 1399 | int |
1496 | { | 1400 | ssl3_dispatch_alert(SSL *s) |
1497 | int i,j; | 1401 | { |
1498 | void (*cb)(const SSL *ssl,int type,int val)=NULL; | 1402 | int i, j; |
1403 | void (*cb)(const SSL *ssl, int type, int val) = NULL; | ||
1499 | 1404 | ||
1500 | s->s3->alert_dispatch=0; | 1405 | s->s3->alert_dispatch = 0; |
1501 | i = do_ssl3_write(s, SSL3_RT_ALERT, &s->s3->send_alert[0], 2, 0); | 1406 | i = do_ssl3_write(s, SSL3_RT_ALERT, &s->s3->send_alert[0], 2, 0); |
1502 | if (i <= 0) | 1407 | if (i <= 0) { |
1503 | { | 1408 | s->s3->alert_dispatch = 1; |
1504 | s->s3->alert_dispatch=1; | 1409 | } else { |
1505 | } | ||
1506 | else | ||
1507 | { | ||
1508 | /* Alert sent to BIO. If it is important, flush it now. | 1410 | /* Alert sent to BIO. If it is important, flush it now. |
1509 | * If the message does not get sent due to non-blocking IO, | 1411 | * If the message does not get sent due to non-blocking IO, |
1510 | * we will not worry too much. */ | 1412 | * we will not worry too much. */ |
@@ -1515,15 +1417,14 @@ int ssl3_dispatch_alert(SSL *s) | |||
1515 | s->msg_callback(1, s->version, SSL3_RT_ALERT, s->s3->send_alert, 2, s, s->msg_callback_arg); | 1417 | s->msg_callback(1, s->version, SSL3_RT_ALERT, s->s3->send_alert, 2, s, s->msg_callback_arg); |
1516 | 1418 | ||
1517 | if (s->info_callback != NULL) | 1419 | if (s->info_callback != NULL) |
1518 | cb=s->info_callback; | 1420 | cb = s->info_callback; |
1519 | else if (s->ctx->info_callback != NULL) | 1421 | else if (s->ctx->info_callback != NULL) |
1520 | cb=s->ctx->info_callback; | 1422 | cb = s->ctx->info_callback; |
1521 | 1423 | ||
1522 | if (cb != NULL) | 1424 | if (cb != NULL) { |
1523 | { | 1425 | j = (s->s3->send_alert[0]<<8)|s->s3->send_alert[1]; |
1524 | j=(s->s3->send_alert[0]<<8)|s->s3->send_alert[1]; | 1426 | cb(s, SSL_CB_WRITE_ALERT, j); |
1525 | cb(s,SSL_CB_WRITE_ALERT,j); | ||
1526 | } | ||
1527 | } | 1427 | } |
1528 | return(i); | ||
1529 | } | 1428 | } |
1429 | return (i); | ||
1430 | } | ||
diff --git a/src/lib/libssl/src/ssl/s3_both.c b/src/lib/libssl/src/ssl/s3_both.c index 77f825af31..b2fd5c6f80 100644 --- a/src/lib/libssl/src/ssl/s3_both.c +++ b/src/lib/libssl/src/ssl/s3_both.c | |||
@@ -125,82 +125,81 @@ | |||
125 | #include <openssl/x509.h> | 125 | #include <openssl/x509.h> |
126 | 126 | ||
127 | /* send s->init_buf in records of type 'type' (SSL3_RT_HANDSHAKE or SSL3_RT_CHANGE_CIPHER_SPEC) */ | 127 | /* send s->init_buf in records of type 'type' (SSL3_RT_HANDSHAKE or SSL3_RT_CHANGE_CIPHER_SPEC) */ |
128 | int ssl3_do_write(SSL *s, int type) | 128 | int |
129 | { | 129 | ssl3_do_write(SSL *s, int type) |
130 | { | ||
130 | int ret; | 131 | int ret; |
131 | 132 | ||
132 | ret=ssl3_write_bytes(s,type,&s->init_buf->data[s->init_off], | 133 | ret = ssl3_write_bytes(s, type, &s->init_buf->data[s->init_off], |
133 | s->init_num); | 134 | s->init_num); |
134 | if (ret < 0) return(-1); | 135 | if (ret < 0) |
136 | return (-1); | ||
135 | if (type == SSL3_RT_HANDSHAKE) | 137 | if (type == SSL3_RT_HANDSHAKE) |
136 | /* should not be done for 'Hello Request's, but in that case | 138 | /* should not be done for 'Hello Request's, but in that case |
137 | * we'll ignore the result anyway */ | 139 | * we'll ignore the result anyway */ |
138 | ssl3_finish_mac(s,(unsigned char *)&s->init_buf->data[s->init_off],ret); | 140 | ssl3_finish_mac(s,(unsigned char *)&s->init_buf->data[s->init_off], ret); |
139 | 141 | ||
140 | if (ret == s->init_num) | 142 | if (ret == s->init_num) { |
141 | { | ||
142 | if (s->msg_callback) | 143 | if (s->msg_callback) |
143 | s->msg_callback(1, s->version, type, s->init_buf->data, (size_t)(s->init_off + s->init_num), s, s->msg_callback_arg); | 144 | s->msg_callback(1, s->version, type, s->init_buf->data, (size_t)(s->init_off + s->init_num), s, s->msg_callback_arg); |
144 | return(1); | 145 | return (1); |
145 | } | ||
146 | s->init_off+=ret; | ||
147 | s->init_num-=ret; | ||
148 | return(0); | ||
149 | } | 146 | } |
147 | s->init_off += ret; | ||
148 | s->init_num -= ret; | ||
149 | return (0); | ||
150 | } | ||
150 | 151 | ||
151 | int ssl3_send_finished(SSL *s, int a, int b, const char *sender, int slen) | 152 | int |
152 | { | 153 | ssl3_send_finished(SSL *s, int a, int b, const char *sender, int slen) |
153 | unsigned char *p,*d; | 154 | { |
155 | unsigned char *p, *d; | ||
154 | int i; | 156 | int i; |
155 | unsigned long l; | 157 | unsigned long l; |
156 | 158 | ||
157 | if (s->state == a) | 159 | if (s->state == a) { |
158 | { | 160 | d = (unsigned char *)s->init_buf->data; |
159 | d=(unsigned char *)s->init_buf->data; | 161 | p = &(d[4]); |
160 | p= &(d[4]); | ||
161 | 162 | ||
162 | i=s->method->ssl3_enc->final_finish_mac(s, | 163 | i = s->method->ssl3_enc->final_finish_mac(s, |
163 | sender,slen,s->s3->tmp.finish_md); | 164 | sender, slen, s->s3->tmp.finish_md); |
164 | if (i == 0) | 165 | if (i == 0) |
165 | return 0; | 166 | return 0; |
166 | s->s3->tmp.finish_md_len = i; | 167 | s->s3->tmp.finish_md_len = i; |
167 | memcpy(p, s->s3->tmp.finish_md, i); | 168 | memcpy(p, s->s3->tmp.finish_md, i); |
168 | p+=i; | 169 | p += i; |
169 | l=i; | 170 | l = i; |
170 | 171 | ||
171 | /* Copy the finished so we can use it for | 172 | /* Copy the finished so we can use it for |
172 | renegotiation checks */ | 173 | renegotiation checks */ |
173 | if(s->type == SSL_ST_CONNECT) | 174 | if (s->type == SSL_ST_CONNECT) { |
174 | { | 175 | OPENSSL_assert(i <= EVP_MAX_MD_SIZE); |
175 | OPENSSL_assert(i <= EVP_MAX_MD_SIZE); | 176 | memcpy(s->s3->previous_client_finished, |
176 | memcpy(s->s3->previous_client_finished, | 177 | s->s3->tmp.finish_md, i); |
177 | s->s3->tmp.finish_md, i); | 178 | s->s3->previous_client_finished_len = i; |
178 | s->s3->previous_client_finished_len=i; | 179 | } else { |
179 | } | 180 | OPENSSL_assert(i <= EVP_MAX_MD_SIZE); |
180 | else | 181 | memcpy(s->s3->previous_server_finished, |
181 | { | 182 | s->s3->tmp.finish_md, i); |
182 | OPENSSL_assert(i <= EVP_MAX_MD_SIZE); | 183 | s->s3->previous_server_finished_len = i; |
183 | memcpy(s->s3->previous_server_finished, | ||
184 | s->s3->tmp.finish_md, i); | ||
185 | s->s3->previous_server_finished_len=i; | ||
186 | } | ||
187 | |||
188 | *(d++)=SSL3_MT_FINISHED; | ||
189 | l2n3(l,d); | ||
190 | s->init_num=(int)l+4; | ||
191 | s->init_off=0; | ||
192 | |||
193 | s->state=b; | ||
194 | } | 184 | } |
195 | 185 | ||
196 | /* SSL3_ST_SEND_xxxxxx_HELLO_B */ | 186 | *(d++) = SSL3_MT_FINISHED; |
197 | return(ssl3_do_write(s,SSL3_RT_HANDSHAKE)); | 187 | l2n3(l, d); |
188 | s->init_num = (int)l + 4; | ||
189 | s->init_off = 0; | ||
190 | |||
191 | s->state = b; | ||
198 | } | 192 | } |
199 | 193 | ||
194 | /* SSL3_ST_SEND_xxxxxx_HELLO_B */ | ||
195 | return (ssl3_do_write(s, SSL3_RT_HANDSHAKE)); | ||
196 | } | ||
197 | |||
200 | #ifndef OPENSSL_NO_NEXTPROTONEG | 198 | #ifndef OPENSSL_NO_NEXTPROTONEG |
201 | /* ssl3_take_mac calculates the Finished MAC for the handshakes messages seen to far. */ | 199 | /* ssl3_take_mac calculates the Finished MAC for the handshakes messages seen to far. */ |
202 | static void ssl3_take_mac(SSL *s) | 200 | static void |
203 | { | 201 | ssl3_take_mac(SSL *s) |
202 | { | ||
204 | const char *sender; | 203 | const char *sender; |
205 | int slen; | 204 | int slen; |
206 | /* If no new cipher setup return immediately: other functions will | 205 | /* If no new cipher setup return immediately: other functions will |
@@ -208,25 +207,23 @@ static void ssl3_take_mac(SSL *s) | |||
208 | */ | 207 | */ |
209 | if (s->s3->tmp.new_cipher == NULL) | 208 | if (s->s3->tmp.new_cipher == NULL) |
210 | return; | 209 | return; |
211 | if (s->state & SSL_ST_CONNECT) | 210 | if (s->state & SSL_ST_CONNECT) { |
212 | { | 211 | sender = s->method->ssl3_enc->server_finished_label; |
213 | sender=s->method->ssl3_enc->server_finished_label; | 212 | slen = s->method->ssl3_enc->server_finished_label_len; |
214 | slen=s->method->ssl3_enc->server_finished_label_len; | 213 | } else { |
215 | } | 214 | sender = s->method->ssl3_enc->client_finished_label; |
216 | else | 215 | slen = s->method->ssl3_enc->client_finished_label_len; |
217 | { | 216 | } |
218 | sender=s->method->ssl3_enc->client_finished_label; | ||
219 | slen=s->method->ssl3_enc->client_finished_label_len; | ||
220 | } | ||
221 | 217 | ||
222 | s->s3->tmp.peer_finish_md_len = s->method->ssl3_enc->final_finish_mac(s, | 218 | s->s3->tmp.peer_finish_md_len = s->method->ssl3_enc->final_finish_mac(s, |
223 | sender,slen,s->s3->tmp.peer_finish_md); | 219 | sender, slen, s->s3->tmp.peer_finish_md); |
224 | } | 220 | } |
225 | #endif | 221 | #endif |
226 | 222 | ||
227 | int ssl3_get_finished(SSL *s, int a, int b) | 223 | int |
228 | { | 224 | ssl3_get_finished(SSL *s, int a, int b) |
229 | int al,i,ok; | 225 | { |
226 | int al, i, ok; | ||
230 | long n; | 227 | long n; |
231 | unsigned char *p; | 228 | unsigned char *p; |
232 | 229 | ||
@@ -236,64 +233,55 @@ int ssl3_get_finished(SSL *s, int a, int b) | |||
236 | */ | 233 | */ |
237 | #endif | 234 | #endif |
238 | 235 | ||
239 | n=s->method->ssl_get_message(s, | 236 | n = s->method->ssl_get_message(s, a, b, SSL3_MT_FINISHED, |
240 | a, | 237 | 64, /* should actually be 36+4 :-) */ &ok); |
241 | b, | ||
242 | SSL3_MT_FINISHED, | ||
243 | 64, /* should actually be 36+4 :-) */ | ||
244 | &ok); | ||
245 | 238 | ||
246 | if (!ok) return((int)n); | 239 | if (!ok) |
240 | return ((int)n); | ||
247 | 241 | ||
248 | /* If this occurs, we have missed a message */ | 242 | /* If this occurs, we have missed a message */ |
249 | if (!s->s3->change_cipher_spec) | 243 | if (!s->s3->change_cipher_spec) { |
250 | { | 244 | al = SSL_AD_UNEXPECTED_MESSAGE; |
251 | al=SSL_AD_UNEXPECTED_MESSAGE; | 245 | SSLerr(SSL_F_SSL3_GET_FINISHED, SSL_R_GOT_A_FIN_BEFORE_A_CCS); |
252 | SSLerr(SSL_F_SSL3_GET_FINISHED,SSL_R_GOT_A_FIN_BEFORE_A_CCS); | ||
253 | goto f_err; | 246 | goto f_err; |
254 | } | 247 | } |
255 | s->s3->change_cipher_spec=0; | 248 | s->s3->change_cipher_spec = 0; |
256 | 249 | ||
257 | p = (unsigned char *)s->init_msg; | 250 | p = (unsigned char *)s->init_msg; |
258 | i = s->s3->tmp.peer_finish_md_len; | 251 | i = s->s3->tmp.peer_finish_md_len; |
259 | 252 | ||
260 | if (i != n) | 253 | if (i != n) { |
261 | { | 254 | al = SSL_AD_DECODE_ERROR; |
262 | al=SSL_AD_DECODE_ERROR; | 255 | SSLerr(SSL_F_SSL3_GET_FINISHED, SSL_R_BAD_DIGEST_LENGTH); |
263 | SSLerr(SSL_F_SSL3_GET_FINISHED,SSL_R_BAD_DIGEST_LENGTH); | ||
264 | goto f_err; | 256 | goto f_err; |
265 | } | 257 | } |
266 | 258 | ||
267 | if (CRYPTO_memcmp(p, s->s3->tmp.peer_finish_md, i) != 0) | 259 | if (CRYPTO_memcmp(p, s->s3->tmp.peer_finish_md, i) != 0) { |
268 | { | 260 | al = SSL_AD_DECRYPT_ERROR; |
269 | al=SSL_AD_DECRYPT_ERROR; | 261 | SSLerr(SSL_F_SSL3_GET_FINISHED, SSL_R_DIGEST_CHECK_FAILED); |
270 | SSLerr(SSL_F_SSL3_GET_FINISHED,SSL_R_DIGEST_CHECK_FAILED); | ||
271 | goto f_err; | 262 | goto f_err; |
272 | } | 263 | } |
273 | 264 | ||
274 | /* Copy the finished so we can use it for | 265 | /* Copy the finished so we can use it for |
275 | renegotiation checks */ | 266 | renegotiation checks */ |
276 | if(s->type == SSL_ST_ACCEPT) | 267 | if (s->type == SSL_ST_ACCEPT) { |
277 | { | 268 | OPENSSL_assert(i <= EVP_MAX_MD_SIZE); |
278 | OPENSSL_assert(i <= EVP_MAX_MD_SIZE); | 269 | memcpy(s->s3->previous_client_finished, |
279 | memcpy(s->s3->previous_client_finished, | 270 | s->s3->tmp.peer_finish_md, i); |
280 | s->s3->tmp.peer_finish_md, i); | 271 | s->s3->previous_client_finished_len = i; |
281 | s->s3->previous_client_finished_len=i; | 272 | } else { |
282 | } | 273 | OPENSSL_assert(i <= EVP_MAX_MD_SIZE); |
283 | else | 274 | memcpy(s->s3->previous_server_finished, |
284 | { | 275 | s->s3->tmp.peer_finish_md, i); |
285 | OPENSSL_assert(i <= EVP_MAX_MD_SIZE); | 276 | s->s3->previous_server_finished_len = i; |
286 | memcpy(s->s3->previous_server_finished, | ||
287 | s->s3->tmp.peer_finish_md, i); | ||
288 | s->s3->previous_server_finished_len=i; | ||
289 | } | ||
290 | |||
291 | return(1); | ||
292 | f_err: | ||
293 | ssl3_send_alert(s,SSL3_AL_FATAL,al); | ||
294 | return(0); | ||
295 | } | 277 | } |
296 | 278 | ||
279 | return (1); | ||
280 | f_err: | ||
281 | ssl3_send_alert(s, SSL3_AL_FATAL, al); | ||
282 | return (0); | ||
283 | } | ||
284 | |||
297 | /* for these 2 messages, we need to | 285 | /* for these 2 messages, we need to |
298 | * ssl->enc_read_ctx re-init | 286 | * ssl->enc_read_ctx re-init |
299 | * ssl->s3->read_sequence zero | 287 | * ssl->s3->read_sequence zero |
@@ -302,48 +290,49 @@ f_err: | |||
302 | * ssl->session->read_compression assign | 290 | * ssl->session->read_compression assign |
303 | * ssl->session->read_hash assign | 291 | * ssl->session->read_hash assign |
304 | */ | 292 | */ |
305 | int ssl3_send_change_cipher_spec(SSL *s, int a, int b) | 293 | int |
306 | { | 294 | ssl3_send_change_cipher_spec(SSL *s, int a, int b) |
295 | { | ||
307 | unsigned char *p; | 296 | unsigned char *p; |
308 | 297 | ||
309 | if (s->state == a) | 298 | if (s->state == a) { |
310 | { | 299 | p = (unsigned char *)s->init_buf->data; |
311 | p=(unsigned char *)s->init_buf->data; | 300 | *p = SSL3_MT_CCS; |
312 | *p=SSL3_MT_CCS; | 301 | s->init_num = 1; |
313 | s->init_num=1; | 302 | s->init_off = 0; |
314 | s->init_off=0; | ||
315 | 303 | ||
316 | s->state=b; | 304 | s->state = b; |
317 | } | 305 | } |
318 | 306 | ||
319 | /* SSL3_ST_CW_CHANGE_B */ | 307 | /* SSL3_ST_CW_CHANGE_B */ |
320 | return(ssl3_do_write(s,SSL3_RT_CHANGE_CIPHER_SPEC)); | 308 | return (ssl3_do_write(s, SSL3_RT_CHANGE_CIPHER_SPEC)); |
321 | } | 309 | } |
322 | 310 | ||
323 | static int ssl3_add_cert_to_buf(BUF_MEM *buf, unsigned long *l, X509 *x) | 311 | static int |
324 | { | 312 | ssl3_add_cert_to_buf(BUF_MEM *buf, unsigned long *l, X509 *x) |
313 | { | ||
325 | int n; | 314 | int n; |
326 | unsigned char *p; | 315 | unsigned char *p; |
327 | 316 | ||
328 | n=i2d_X509(x,NULL); | 317 | n = i2d_X509(x, NULL); |
329 | if (!BUF_MEM_grow_clean(buf,(int)(n+(*l)+3))) | 318 | if (!BUF_MEM_grow_clean(buf,(int)(n + (*l) + 3))) { |
330 | { | 319 | SSLerr(SSL_F_SSL3_ADD_CERT_TO_BUF, ERR_R_BUF_LIB); |
331 | SSLerr(SSL_F_SSL3_ADD_CERT_TO_BUF,ERR_R_BUF_LIB); | 320 | return (-1); |
332 | return(-1); | ||
333 | } | ||
334 | p=(unsigned char *)&(buf->data[*l]); | ||
335 | l2n3(n,p); | ||
336 | i2d_X509(x,&p); | ||
337 | *l+=n+3; | ||
338 | |||
339 | return(0); | ||
340 | } | 321 | } |
322 | p = (unsigned char *)&(buf->data[*l]); | ||
323 | l2n3(n, p); | ||
324 | i2d_X509(x, &p); | ||
325 | *l += n + 3; | ||
341 | 326 | ||
342 | unsigned long ssl3_output_cert_chain(SSL *s, X509 *x) | 327 | return (0); |
343 | { | 328 | } |
329 | |||
330 | unsigned long | ||
331 | ssl3_output_cert_chain(SSL *s, X509 *x) | ||
332 | { | ||
344 | unsigned char *p; | 333 | unsigned char *p; |
345 | int i; | 334 | int i; |
346 | unsigned long l=7; | 335 | unsigned long l = 7; |
347 | BUF_MEM *buf; | 336 | BUF_MEM *buf; |
348 | int no_chain; | 337 | int no_chain; |
349 | 338 | ||
@@ -353,111 +342,99 @@ unsigned long ssl3_output_cert_chain(SSL *s, X509 *x) | |||
353 | no_chain = 0; | 342 | no_chain = 0; |
354 | 343 | ||
355 | /* TLSv1 sends a chain with nothing in it, instead of an alert */ | 344 | /* TLSv1 sends a chain with nothing in it, instead of an alert */ |
356 | buf=s->init_buf; | 345 | buf = s->init_buf; |
357 | if (!BUF_MEM_grow_clean(buf,10)) | 346 | if (!BUF_MEM_grow_clean(buf, 10)) { |
358 | { | 347 | SSLerr(SSL_F_SSL3_OUTPUT_CERT_CHAIN, ERR_R_BUF_LIB); |
359 | SSLerr(SSL_F_SSL3_OUTPUT_CERT_CHAIN,ERR_R_BUF_LIB); | 348 | return (0); |
360 | return(0); | 349 | } |
361 | } | 350 | if (x != NULL) { |
362 | if (x != NULL) | 351 | if (no_chain) { |
363 | { | ||
364 | if (no_chain) | ||
365 | { | ||
366 | if (ssl3_add_cert_to_buf(buf, &l, x)) | 352 | if (ssl3_add_cert_to_buf(buf, &l, x)) |
367 | return(0); | 353 | return (0); |
368 | } | 354 | } else { |
369 | else | ||
370 | { | ||
371 | X509_STORE_CTX xs_ctx; | 355 | X509_STORE_CTX xs_ctx; |
372 | 356 | ||
373 | if (!X509_STORE_CTX_init(&xs_ctx,s->ctx->cert_store,x,NULL)) | 357 | if (!X509_STORE_CTX_init(&xs_ctx, s->ctx->cert_store, x, NULL)) { |
374 | { | 358 | SSLerr(SSL_F_SSL3_OUTPUT_CERT_CHAIN, ERR_R_X509_LIB); |
375 | SSLerr(SSL_F_SSL3_OUTPUT_CERT_CHAIN,ERR_R_X509_LIB); | 359 | return (0); |
376 | return(0); | 360 | } |
377 | } | ||
378 | X509_verify_cert(&xs_ctx); | 361 | X509_verify_cert(&xs_ctx); |
379 | /* Don't leave errors in the queue */ | 362 | /* Don't leave errors in the queue */ |
380 | ERR_clear_error(); | 363 | ERR_clear_error(); |
381 | for (i=0; i < sk_X509_num(xs_ctx.chain); i++) | 364 | for (i = 0; i < sk_X509_num(xs_ctx.chain); i++) { |
382 | { | ||
383 | x = sk_X509_value(xs_ctx.chain, i); | 365 | x = sk_X509_value(xs_ctx.chain, i); |
384 | 366 | ||
385 | if (ssl3_add_cert_to_buf(buf, &l, x)) | 367 | if (ssl3_add_cert_to_buf(buf, &l, x)) { |
386 | { | ||
387 | X509_STORE_CTX_cleanup(&xs_ctx); | 368 | X509_STORE_CTX_cleanup(&xs_ctx); |
388 | return 0; | 369 | return 0; |
389 | } | ||
390 | } | 370 | } |
391 | X509_STORE_CTX_cleanup(&xs_ctx); | ||
392 | } | 371 | } |
372 | X509_STORE_CTX_cleanup(&xs_ctx); | ||
393 | } | 373 | } |
374 | } | ||
394 | /* Thawte special :-) */ | 375 | /* Thawte special :-) */ |
395 | for (i=0; i<sk_X509_num(s->ctx->extra_certs); i++) | 376 | for (i = 0; i < sk_X509_num(s->ctx->extra_certs); i++) { |
396 | { | 377 | x = sk_X509_value(s->ctx->extra_certs, i); |
397 | x=sk_X509_value(s->ctx->extra_certs,i); | ||
398 | if (ssl3_add_cert_to_buf(buf, &l, x)) | 378 | if (ssl3_add_cert_to_buf(buf, &l, x)) |
399 | return(0); | 379 | return (0); |
400 | } | ||
401 | |||
402 | l-=7; | ||
403 | p=(unsigned char *)&(buf->data[4]); | ||
404 | l2n3(l,p); | ||
405 | l+=3; | ||
406 | p=(unsigned char *)&(buf->data[0]); | ||
407 | *(p++)=SSL3_MT_CERTIFICATE; | ||
408 | l2n3(l,p); | ||
409 | l+=4; | ||
410 | return(l); | ||
411 | } | 380 | } |
412 | 381 | ||
382 | l -= 7; | ||
383 | p = (unsigned char *)&(buf->data[4]); | ||
384 | l2n3(l, p); | ||
385 | l += 3; | ||
386 | p = (unsigned char *)&(buf->data[0]); | ||
387 | *(p++) = SSL3_MT_CERTIFICATE; | ||
388 | l2n3(l, p); | ||
389 | l += 4; | ||
390 | return (l); | ||
391 | } | ||
392 | |||
413 | /* Obtain handshake message of message type 'mt' (any if mt == -1), | 393 | /* Obtain handshake message of message type 'mt' (any if mt == -1), |
414 | * maximum acceptable body length 'max'. | 394 | * maximum acceptable body length 'max'. |
415 | * The first four bytes (msg_type and length) are read in state 'st1', | 395 | * The first four bytes (msg_type and length) are read in state 'st1', |
416 | * the body is read in state 'stn'. | 396 | * the body is read in state 'stn'. |
417 | */ | 397 | */ |
418 | long ssl3_get_message(SSL *s, int st1, int stn, int mt, long max, int *ok) | 398 | long |
419 | { | 399 | ssl3_get_message(SSL *s, int st1, int stn, int mt, long max, int *ok) |
400 | { | ||
420 | unsigned char *p; | 401 | unsigned char *p; |
421 | unsigned long l; | 402 | unsigned long l; |
422 | long n; | 403 | long n; |
423 | int i,al; | 404 | int i, al; |
424 | 405 | ||
425 | if (s->s3->tmp.reuse_message) | 406 | if (s->s3->tmp.reuse_message) { |
426 | { | 407 | s->s3->tmp.reuse_message = 0; |
427 | s->s3->tmp.reuse_message=0; | 408 | if ((mt >= 0) && (s->s3->tmp.message_type != mt)) { |
428 | if ((mt >= 0) && (s->s3->tmp.message_type != mt)) | 409 | al = SSL_AD_UNEXPECTED_MESSAGE; |
429 | { | 410 | SSLerr(SSL_F_SSL3_GET_MESSAGE, SSL_R_UNEXPECTED_MESSAGE); |
430 | al=SSL_AD_UNEXPECTED_MESSAGE; | ||
431 | SSLerr(SSL_F_SSL3_GET_MESSAGE,SSL_R_UNEXPECTED_MESSAGE); | ||
432 | goto f_err; | 411 | goto f_err; |
433 | } | 412 | } |
434 | *ok=1; | 413 | *ok = 1; |
435 | s->init_msg = s->init_buf->data + 4; | 414 | s->init_msg = s->init_buf->data + 4; |
436 | s->init_num = (int)s->s3->tmp.message_size; | 415 | s->init_num = (int)s->s3->tmp.message_size; |
437 | return s->init_num; | 416 | return s->init_num; |
438 | } | 417 | } |
439 | 418 | ||
440 | p=(unsigned char *)s->init_buf->data; | 419 | p = (unsigned char *)s->init_buf->data; |
441 | 420 | ||
442 | if (s->state == st1) /* s->init_num < 4 */ | 421 | if (s->state == st1) /* s->init_num < 4 */ |
443 | { | 422 | { |
444 | int skip_message; | 423 | int skip_message; |
445 | 424 | ||
446 | do | 425 | do { |
447 | { | 426 | while (s->init_num < 4) { |
448 | while (s->init_num < 4) | 427 | i = s->method->ssl_read_bytes(s, |
449 | { | 428 | SSL3_RT_HANDSHAKE, &p[s->init_num], |
450 | i=s->method->ssl_read_bytes(s,SSL3_RT_HANDSHAKE, | 429 | 4 - s->init_num, 0); |
451 | &p[s->init_num],4 - s->init_num, 0); | 430 | if (i <= 0) { |
452 | if (i <= 0) | 431 | s->rwstate = SSL_READING; |
453 | { | ||
454 | s->rwstate=SSL_READING; | ||
455 | *ok = 0; | 432 | *ok = 0; |
456 | return i; | 433 | return i; |
457 | } | ||
458 | s->init_num+=i; | ||
459 | } | 434 | } |
460 | 435 | s->init_num += i; | |
436 | } | ||
437 | |||
461 | skip_message = 0; | 438 | skip_message = 0; |
462 | if (!s->server) | 439 | if (!s->server) |
463 | if (p[0] == SSL3_MT_HELLO_REQUEST) | 440 | if (p[0] == SSL3_MT_HELLO_REQUEST) |
@@ -465,79 +442,72 @@ long ssl3_get_message(SSL *s, int st1, int stn, int mt, long max, int *ok) | |||
465 | * we are doing a handshake anyway now, so ignore them | 442 | * we are doing a handshake anyway now, so ignore them |
466 | * if their format is correct. Does not count for | 443 | * if their format is correct. Does not count for |
467 | * 'Finished' MAC. */ | 444 | * 'Finished' MAC. */ |
468 | if (p[1] == 0 && p[2] == 0 &&p[3] == 0) | 445 | if (p[1] == 0 && p[2] == 0 &&p[3] == 0) { |
469 | { | 446 | s->init_num = 0; |
470 | s->init_num = 0; | 447 | skip_message = 1; |
471 | skip_message = 1; | 448 | |
472 | 449 | if (s->msg_callback) | |
473 | if (s->msg_callback) | 450 | s->msg_callback(0, s->version, SSL3_RT_HANDSHAKE, p, 4, s, s->msg_callback_arg); |
474 | s->msg_callback(0, s->version, SSL3_RT_HANDSHAKE, p, 4, s, s->msg_callback_arg); | ||
475 | } | ||
476 | } | 451 | } |
452 | } | ||
477 | while (skip_message); | 453 | while (skip_message); |
478 | 454 | ||
479 | /* s->init_num == 4 */ | 455 | /* s->init_num == 4 */ |
480 | 456 | ||
481 | if ((mt >= 0) && (*p != mt)) | 457 | if ((mt >= 0) && (*p != mt)) { |
482 | { | 458 | al = SSL_AD_UNEXPECTED_MESSAGE; |
483 | al=SSL_AD_UNEXPECTED_MESSAGE; | 459 | SSLerr(SSL_F_SSL3_GET_MESSAGE, SSL_R_UNEXPECTED_MESSAGE); |
484 | SSLerr(SSL_F_SSL3_GET_MESSAGE,SSL_R_UNEXPECTED_MESSAGE); | ||
485 | goto f_err; | 460 | goto f_err; |
486 | } | 461 | } |
487 | if ((mt < 0) && (*p == SSL3_MT_CLIENT_HELLO) && | 462 | if ((mt < 0) && (*p == SSL3_MT_CLIENT_HELLO) && |
488 | (st1 == SSL3_ST_SR_CERT_A) && | 463 | (st1 == SSL3_ST_SR_CERT_A) && (stn == SSL3_ST_SR_CERT_B)) { |
489 | (stn == SSL3_ST_SR_CERT_B)) | ||
490 | { | ||
491 | /* At this point we have got an MS SGC second client | 464 | /* At this point we have got an MS SGC second client |
492 | * hello (maybe we should always allow the client to | 465 | * hello (maybe we should always allow the client to |
493 | * start a new handshake?). We need to restart the mac. | 466 | * start a new handshake?). We need to restart the mac. |
494 | * Don't increment {num,total}_renegotiations because | 467 | * Don't increment {num,total}_renegotiations because |
495 | * we have not completed the handshake. */ | 468 | * we have not completed the handshake. */ |
496 | ssl3_init_finished_mac(s); | 469 | ssl3_init_finished_mac(s); |
497 | } | 470 | } |
498 | 471 | ||
499 | s->s3->tmp.message_type= *(p++); | 472 | s->s3->tmp.message_type= *(p++); |
500 | 473 | ||
501 | n2l3(p,l); | 474 | n2l3(p, l); |
502 | if (l > (unsigned long)max) | 475 | if (l > (unsigned long)max) { |
503 | { | 476 | al = SSL_AD_ILLEGAL_PARAMETER; |
504 | al=SSL_AD_ILLEGAL_PARAMETER; | 477 | SSLerr(SSL_F_SSL3_GET_MESSAGE, SSL_R_EXCESSIVE_MESSAGE_SIZE); |
505 | SSLerr(SSL_F_SSL3_GET_MESSAGE,SSL_R_EXCESSIVE_MESSAGE_SIZE); | ||
506 | goto f_err; | 478 | goto f_err; |
507 | } | 479 | } |
508 | if (l > (INT_MAX-4)) /* BUF_MEM_grow takes an 'int' parameter */ | 480 | if (l > (INT_MAX-4)) /* BUF_MEM_grow takes an 'int' parameter */ |
509 | { | 481 | { |
510 | al=SSL_AD_ILLEGAL_PARAMETER; | 482 | al = SSL_AD_ILLEGAL_PARAMETER; |
511 | SSLerr(SSL_F_SSL3_GET_MESSAGE,SSL_R_EXCESSIVE_MESSAGE_SIZE); | 483 | SSLerr(SSL_F_SSL3_GET_MESSAGE, SSL_R_EXCESSIVE_MESSAGE_SIZE); |
512 | goto f_err; | 484 | goto f_err; |
513 | } | 485 | } |
514 | if (l && !BUF_MEM_grow_clean(s->init_buf,(int)l+4)) | 486 | if (l && !BUF_MEM_grow_clean(s->init_buf,(int)l + 4)) { |
515 | { | 487 | SSLerr(SSL_F_SSL3_GET_MESSAGE, ERR_R_BUF_LIB); |
516 | SSLerr(SSL_F_SSL3_GET_MESSAGE,ERR_R_BUF_LIB); | ||
517 | goto err; | 488 | goto err; |
518 | } | 489 | } |
519 | s->s3->tmp.message_size=l; | 490 | s->s3->tmp.message_size = l; |
520 | s->state=stn; | 491 | s->state = stn; |
521 | 492 | ||
522 | s->init_msg = s->init_buf->data + 4; | 493 | s->init_msg = s->init_buf->data + 4; |
523 | s->init_num = 0; | 494 | s->init_num = 0; |
524 | } | 495 | } |
525 | 496 | ||
526 | /* next state (stn) */ | 497 | /* next state (stn) */ |
527 | p = s->init_msg; | 498 | p = s->init_msg; |
528 | n = s->s3->tmp.message_size - s->init_num; | 499 | n = s->s3->tmp.message_size - s->init_num; |
529 | while (n > 0) | 500 | while (n > 0) { |
530 | { | 501 | i = s->method->ssl_read_bytes(s, SSL3_RT_HANDSHAKE, |
531 | i=s->method->ssl_read_bytes(s,SSL3_RT_HANDSHAKE,&p[s->init_num],n,0); | 502 | &p[s->init_num], n, 0); |
532 | if (i <= 0) | 503 | if (i <= 0) { |
533 | { | 504 | s->rwstate = SSL_READING; |
534 | s->rwstate=SSL_READING; | ||
535 | *ok = 0; | 505 | *ok = 0; |
536 | return i; | 506 | return i; |
537 | } | 507 | } |
538 | s->init_num += i; | 508 | s->init_num += i; |
539 | n -= i; | 509 | n -= i; |
540 | } | 510 | } |
541 | 511 | ||
542 | #ifndef OPENSSL_NO_NEXTPROTONEG | 512 | #ifndef OPENSSL_NO_NEXTPROTONEG |
543 | /* If receiving Finished, record MAC of prior handshake messages for | 513 | /* If receiving Finished, record MAC of prior handshake messages for |
@@ -550,64 +520,60 @@ long ssl3_get_message(SSL *s, int st1, int stn, int mt, long max, int *ok) | |||
550 | ssl3_finish_mac(s, (unsigned char *)s->init_buf->data, s->init_num + 4); | 520 | ssl3_finish_mac(s, (unsigned char *)s->init_buf->data, s->init_num + 4); |
551 | if (s->msg_callback) | 521 | if (s->msg_callback) |
552 | s->msg_callback(0, s->version, SSL3_RT_HANDSHAKE, s->init_buf->data, (size_t)s->init_num + 4, s, s->msg_callback_arg); | 522 | s->msg_callback(0, s->version, SSL3_RT_HANDSHAKE, s->init_buf->data, (size_t)s->init_num + 4, s, s->msg_callback_arg); |
553 | *ok=1; | 523 | *ok = 1; |
554 | return s->init_num; | 524 | return s->init_num; |
555 | f_err: | 525 | f_err: |
556 | ssl3_send_alert(s,SSL3_AL_FATAL,al); | 526 | ssl3_send_alert(s, SSL3_AL_FATAL, al); |
557 | err: | 527 | err: |
558 | *ok=0; | 528 | *ok = 0; |
559 | return(-1); | 529 | return (-1); |
560 | } | 530 | } |
561 | 531 | ||
562 | int ssl_cert_type(X509 *x, EVP_PKEY *pkey) | 532 | int |
563 | { | 533 | ssl_cert_type(X509 *x, EVP_PKEY *pkey) |
534 | { | ||
564 | EVP_PKEY *pk; | 535 | EVP_PKEY *pk; |
565 | int ret= -1,i; | 536 | int ret = -1, i; |
566 | 537 | ||
567 | if (pkey == NULL) | 538 | if (pkey == NULL) |
568 | pk=X509_get_pubkey(x); | 539 | pk = X509_get_pubkey(x); |
569 | else | 540 | else |
570 | pk=pkey; | 541 | pk = pkey; |
571 | if (pk == NULL) goto err; | 542 | if (pk == NULL) |
572 | 543 | goto err; | |
573 | i=pk->type; | 544 | |
574 | if (i == EVP_PKEY_RSA) | 545 | i = pk->type; |
575 | { | 546 | if (i == EVP_PKEY_RSA) { |
576 | ret=SSL_PKEY_RSA_ENC; | 547 | ret = SSL_PKEY_RSA_ENC; |
577 | } | 548 | } else if (i == EVP_PKEY_DSA) { |
578 | else if (i == EVP_PKEY_DSA) | 549 | ret = SSL_PKEY_DSA_SIGN; |
579 | { | 550 | } |
580 | ret=SSL_PKEY_DSA_SIGN; | ||
581 | } | ||
582 | #ifndef OPENSSL_NO_EC | 551 | #ifndef OPENSSL_NO_EC |
583 | else if (i == EVP_PKEY_EC) | 552 | else if (i == EVP_PKEY_EC) { |
584 | { | ||
585 | ret = SSL_PKEY_ECC; | 553 | ret = SSL_PKEY_ECC; |
586 | } | 554 | } |
587 | #endif | 555 | #endif |
588 | else if (i == NID_id_GostR3410_94 || i == NID_id_GostR3410_94_cc) | 556 | else if (i == NID_id_GostR3410_94 || i == NID_id_GostR3410_94_cc) { |
589 | { | ||
590 | ret = SSL_PKEY_GOST94; | 557 | ret = SSL_PKEY_GOST94; |
591 | } | 558 | } else if (i == NID_id_GostR3410_2001 || i == NID_id_GostR3410_2001_cc) { |
592 | else if (i == NID_id_GostR3410_2001 || i == NID_id_GostR3410_2001_cc) | ||
593 | { | ||
594 | ret = SSL_PKEY_GOST01; | 559 | ret = SSL_PKEY_GOST01; |
595 | } | ||
596 | err: | ||
597 | if(!pkey) EVP_PKEY_free(pk); | ||
598 | return(ret); | ||
599 | } | 560 | } |
561 | err: | ||
562 | if (!pkey) | ||
563 | EVP_PKEY_free(pk); | ||
564 | return (ret); | ||
565 | } | ||
600 | 566 | ||
601 | int ssl_verify_alarm_type(long type) | 567 | int |
602 | { | 568 | ssl_verify_alarm_type(long type) |
569 | { | ||
603 | int al; | 570 | int al; |
604 | 571 | ||
605 | switch(type) | 572 | switch (type) { |
606 | { | ||
607 | case X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT: | 573 | case X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT: |
608 | case X509_V_ERR_UNABLE_TO_GET_CRL: | 574 | case X509_V_ERR_UNABLE_TO_GET_CRL: |
609 | case X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER: | 575 | case X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER: |
610 | al=SSL_AD_UNKNOWN_CA; | 576 | al = SSL_AD_UNKNOWN_CA; |
611 | break; | 577 | break; |
612 | case X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE: | 578 | case X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE: |
613 | case X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE: | 579 | case X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE: |
@@ -620,21 +586,21 @@ int ssl_verify_alarm_type(long type) | |||
620 | case X509_V_ERR_CRL_NOT_YET_VALID: | 586 | case X509_V_ERR_CRL_NOT_YET_VALID: |
621 | case X509_V_ERR_CERT_UNTRUSTED: | 587 | case X509_V_ERR_CERT_UNTRUSTED: |
622 | case X509_V_ERR_CERT_REJECTED: | 588 | case X509_V_ERR_CERT_REJECTED: |
623 | al=SSL_AD_BAD_CERTIFICATE; | 589 | al = SSL_AD_BAD_CERTIFICATE; |
624 | break; | 590 | break; |
625 | case X509_V_ERR_CERT_SIGNATURE_FAILURE: | 591 | case X509_V_ERR_CERT_SIGNATURE_FAILURE: |
626 | case X509_V_ERR_CRL_SIGNATURE_FAILURE: | 592 | case X509_V_ERR_CRL_SIGNATURE_FAILURE: |
627 | al=SSL_AD_DECRYPT_ERROR; | 593 | al = SSL_AD_DECRYPT_ERROR; |
628 | break; | 594 | break; |
629 | case X509_V_ERR_CERT_HAS_EXPIRED: | 595 | case X509_V_ERR_CERT_HAS_EXPIRED: |
630 | case X509_V_ERR_CRL_HAS_EXPIRED: | 596 | case X509_V_ERR_CRL_HAS_EXPIRED: |
631 | al=SSL_AD_CERTIFICATE_EXPIRED; | 597 | al = SSL_AD_CERTIFICATE_EXPIRED; |
632 | break; | 598 | break; |
633 | case X509_V_ERR_CERT_REVOKED: | 599 | case X509_V_ERR_CERT_REVOKED: |
634 | al=SSL_AD_CERTIFICATE_REVOKED; | 600 | al = SSL_AD_CERTIFICATE_REVOKED; |
635 | break; | 601 | break; |
636 | case X509_V_ERR_OUT_OF_MEM: | 602 | case X509_V_ERR_OUT_OF_MEM: |
637 | al=SSL_AD_INTERNAL_ERROR; | 603 | al = SSL_AD_INTERNAL_ERROR; |
638 | break; | 604 | break; |
639 | case X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT: | 605 | case X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT: |
640 | case X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN: | 606 | case X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN: |
@@ -643,20 +609,20 @@ int ssl_verify_alarm_type(long type) | |||
643 | case X509_V_ERR_CERT_CHAIN_TOO_LONG: | 609 | case X509_V_ERR_CERT_CHAIN_TOO_LONG: |
644 | case X509_V_ERR_PATH_LENGTH_EXCEEDED: | 610 | case X509_V_ERR_PATH_LENGTH_EXCEEDED: |
645 | case X509_V_ERR_INVALID_CA: | 611 | case X509_V_ERR_INVALID_CA: |
646 | al=SSL_AD_UNKNOWN_CA; | 612 | al = SSL_AD_UNKNOWN_CA; |
647 | break; | 613 | break; |
648 | case X509_V_ERR_APPLICATION_VERIFICATION: | 614 | case X509_V_ERR_APPLICATION_VERIFICATION: |
649 | al=SSL_AD_HANDSHAKE_FAILURE; | 615 | al = SSL_AD_HANDSHAKE_FAILURE; |
650 | break; | 616 | break; |
651 | case X509_V_ERR_INVALID_PURPOSE: | 617 | case X509_V_ERR_INVALID_PURPOSE: |
652 | al=SSL_AD_UNSUPPORTED_CERTIFICATE; | 618 | al = SSL_AD_UNSUPPORTED_CERTIFICATE; |
653 | break; | 619 | break; |
654 | default: | 620 | default: |
655 | al=SSL_AD_CERTIFICATE_UNKNOWN; | 621 | al = SSL_AD_CERTIFICATE_UNKNOWN; |
656 | break; | 622 | break; |
657 | } | ||
658 | return(al); | ||
659 | } | 623 | } |
624 | return (al); | ||
625 | } | ||
660 | 626 | ||
661 | #ifndef OPENSSL_NO_BUF_FREELISTS | 627 | #ifndef OPENSSL_NO_BUF_FREELISTS |
662 | /* On some platforms, malloc() performance is bad enough that you can't just | 628 | /* On some platforms, malloc() performance is bad enough that you can't just |
@@ -680,7 +646,7 @@ int ssl_verify_alarm_type(long type) | |||
680 | */ | 646 | */ |
681 | static void * | 647 | static void * |
682 | freelist_extract(SSL_CTX *ctx, int for_read, int sz) | 648 | freelist_extract(SSL_CTX *ctx, int for_read, int sz) |
683 | { | 649 | { |
684 | SSL3_BUF_FREELIST *list; | 650 | SSL3_BUF_FREELIST *list; |
685 | SSL3_BUF_FREELIST_ENTRY *ent = NULL; | 651 | SSL3_BUF_FREELIST_ENTRY *ent = NULL; |
686 | void *result = NULL; | 652 | void *result = NULL; |
@@ -689,13 +655,12 @@ freelist_extract(SSL_CTX *ctx, int for_read, int sz) | |||
689 | list = for_read ? ctx->rbuf_freelist : ctx->wbuf_freelist; | 655 | list = for_read ? ctx->rbuf_freelist : ctx->wbuf_freelist; |
690 | if (list != NULL && sz == (int)list->chunklen) | 656 | if (list != NULL && sz == (int)list->chunklen) |
691 | ent = list->head; | 657 | ent = list->head; |
692 | if (ent != NULL) | 658 | if (ent != NULL) { |
693 | { | ||
694 | list->head = ent->next; | 659 | list->head = ent->next; |
695 | result = ent; | 660 | result = ent; |
696 | if (--list->len == 0) | 661 | if (--list->len == 0) |
697 | list->chunklen = 0; | 662 | list->chunklen = 0; |
698 | } | 663 | } |
699 | CRYPTO_w_unlock(CRYPTO_LOCK_SSL_CTX); | 664 | CRYPTO_w_unlock(CRYPTO_LOCK_SSL_CTX); |
700 | if (!result) | 665 | if (!result) |
701 | result = OPENSSL_malloc(sz); | 666 | result = OPENSSL_malloc(sz); |
@@ -704,80 +669,76 @@ freelist_extract(SSL_CTX *ctx, int for_read, int sz) | |||
704 | 669 | ||
705 | static void | 670 | static void |
706 | freelist_insert(SSL_CTX *ctx, int for_read, size_t sz, void *mem) | 671 | freelist_insert(SSL_CTX *ctx, int for_read, size_t sz, void *mem) |
707 | { | 672 | { |
708 | SSL3_BUF_FREELIST *list; | 673 | SSL3_BUF_FREELIST *list; |
709 | SSL3_BUF_FREELIST_ENTRY *ent; | 674 | SSL3_BUF_FREELIST_ENTRY *ent; |
710 | 675 | ||
711 | CRYPTO_w_lock(CRYPTO_LOCK_SSL_CTX); | 676 | CRYPTO_w_lock(CRYPTO_LOCK_SSL_CTX); |
712 | list = for_read ? ctx->rbuf_freelist : ctx->wbuf_freelist; | 677 | list = for_read ? ctx->rbuf_freelist : ctx->wbuf_freelist; |
713 | if (list != NULL && | 678 | if (list != NULL && (sz == list->chunklen || list->chunklen == 0) && |
714 | (sz == list->chunklen || list->chunklen == 0) && | 679 | list->len < ctx->freelist_max_len && sz >= sizeof(*ent)) { |
715 | list->len < ctx->freelist_max_len && | ||
716 | sz >= sizeof(*ent)) | ||
717 | { | ||
718 | list->chunklen = sz; | 680 | list->chunklen = sz; |
719 | ent = mem; | 681 | ent = mem; |
720 | ent->next = list->head; | 682 | ent->next = list->head; |
721 | list->head = ent; | 683 | list->head = ent; |
722 | ++list->len; | 684 | ++list->len; |
723 | mem = NULL; | 685 | mem = NULL; |
724 | } | 686 | } |
725 | 687 | ||
726 | CRYPTO_w_unlock(CRYPTO_LOCK_SSL_CTX); | 688 | CRYPTO_w_unlock(CRYPTO_LOCK_SSL_CTX); |
727 | if (mem) | 689 | if (mem) |
728 | OPENSSL_free(mem); | 690 | OPENSSL_free(mem); |
729 | } | 691 | } |
730 | #else | 692 | #else |
731 | #define freelist_extract(c,fr,sz) OPENSSL_malloc(sz) | 693 | #define freelist_extract(c,fr,sz) OPENSSL_malloc(sz) |
732 | #define freelist_insert(c,fr,sz,m) OPENSSL_free(m) | 694 | #define freelist_insert(c,fr,sz,m) OPENSSL_free(m) |
733 | #endif | 695 | #endif |
734 | 696 | ||
735 | int ssl3_setup_read_buffer(SSL *s) | 697 | int |
736 | { | 698 | ssl3_setup_read_buffer(SSL *s) |
699 | { | ||
737 | unsigned char *p; | 700 | unsigned char *p; |
738 | size_t len,align=0,headerlen; | 701 | size_t len, align = 0, headerlen; |
739 | 702 | ||
740 | if (SSL_version(s) == DTLS1_VERSION || SSL_version(s) == DTLS1_BAD_VER) | 703 | if (SSL_version(s) == DTLS1_VERSION || SSL_version(s) == DTLS1_BAD_VER) |
741 | headerlen = DTLS1_RT_HEADER_LENGTH; | 704 | headerlen = DTLS1_RT_HEADER_LENGTH; |
742 | else | 705 | else |
743 | headerlen = SSL3_RT_HEADER_LENGTH; | 706 | headerlen = SSL3_RT_HEADER_LENGTH; |
744 | 707 | ||
745 | #if defined(SSL3_ALIGN_PAYLOAD) && SSL3_ALIGN_PAYLOAD!=0 | 708 | #if defined(SSL3_ALIGN_PAYLOAD) && SSL3_ALIGN_PAYLOAD!=0 |
746 | align = (-SSL3_RT_HEADER_LENGTH)&(SSL3_ALIGN_PAYLOAD-1); | 709 | align = (-SSL3_RT_HEADER_LENGTH)&(SSL3_ALIGN_PAYLOAD - 1); |
747 | #endif | 710 | #endif |
748 | 711 | ||
749 | if (s->s3->rbuf.buf == NULL) | 712 | if (s->s3->rbuf.buf == NULL) { |
750 | { | 713 | len = SSL3_RT_MAX_PLAIN_LENGTH + |
751 | len = SSL3_RT_MAX_PLAIN_LENGTH | 714 | SSL3_RT_MAX_ENCRYPTED_OVERHEAD + headerlen + align; |
752 | + SSL3_RT_MAX_ENCRYPTED_OVERHEAD | 715 | if (s->options & SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER) { |
753 | + headerlen + align; | ||
754 | if (s->options & SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER) | ||
755 | { | ||
756 | s->s3->init_extra = 1; | 716 | s->s3->init_extra = 1; |
757 | len += SSL3_RT_MAX_EXTRA; | 717 | len += SSL3_RT_MAX_EXTRA; |
758 | } | 718 | } |
759 | #ifndef OPENSSL_NO_COMP | 719 | #ifndef OPENSSL_NO_COMP |
760 | if (!(s->options & SSL_OP_NO_COMPRESSION)) | 720 | if (!(s->options & SSL_OP_NO_COMPRESSION)) |
761 | len += SSL3_RT_MAX_COMPRESSED_OVERHEAD; | 721 | len += SSL3_RT_MAX_COMPRESSED_OVERHEAD; |
762 | #endif | 722 | #endif |
763 | if ((p=freelist_extract(s->ctx, 1, len)) == NULL) | 723 | if ((p = freelist_extract(s->ctx, 1, len)) == NULL) |
764 | goto err; | 724 | goto err; |
765 | s->s3->rbuf.buf = p; | 725 | s->s3->rbuf.buf = p; |
766 | s->s3->rbuf.len = len; | 726 | s->s3->rbuf.len = len; |
767 | } | 727 | } |
768 | 728 | ||
769 | s->packet= &(s->s3->rbuf.buf[0]); | 729 | s->packet = &(s->s3->rbuf.buf[0]); |
770 | return 1; | 730 | return 1; |
771 | 731 | ||
772 | err: | 732 | err: |
773 | SSLerr(SSL_F_SSL3_SETUP_READ_BUFFER,ERR_R_MALLOC_FAILURE); | 733 | SSLerr(SSL_F_SSL3_SETUP_READ_BUFFER, ERR_R_MALLOC_FAILURE); |
774 | return 0; | 734 | return 0; |
775 | } | 735 | } |
776 | 736 | ||
777 | int ssl3_setup_write_buffer(SSL *s) | 737 | int |
778 | { | 738 | ssl3_setup_write_buffer(SSL *s) |
739 | { | ||
779 | unsigned char *p; | 740 | unsigned char *p; |
780 | size_t len,align=0,headerlen; | 741 | size_t len, align = 0, headerlen; |
781 | 742 | ||
782 | if (SSL_version(s) == DTLS1_VERSION || SSL_version(s) == DTLS1_BAD_VER) | 743 | if (SSL_version(s) == DTLS1_VERSION || SSL_version(s) == DTLS1_BAD_VER) |
783 | headerlen = DTLS1_RT_HEADER_LENGTH + 1; | 744 | headerlen = DTLS1_RT_HEADER_LENGTH + 1; |
@@ -785,62 +746,61 @@ int ssl3_setup_write_buffer(SSL *s) | |||
785 | headerlen = SSL3_RT_HEADER_LENGTH; | 746 | headerlen = SSL3_RT_HEADER_LENGTH; |
786 | 747 | ||
787 | #if defined(SSL3_ALIGN_PAYLOAD) && SSL3_ALIGN_PAYLOAD!=0 | 748 | #if defined(SSL3_ALIGN_PAYLOAD) && SSL3_ALIGN_PAYLOAD!=0 |
788 | align = (-SSL3_RT_HEADER_LENGTH)&(SSL3_ALIGN_PAYLOAD-1); | 749 | align = (-SSL3_RT_HEADER_LENGTH)&(SSL3_ALIGN_PAYLOAD - 1); |
789 | #endif | 750 | #endif |
790 | 751 | ||
791 | if (s->s3->wbuf.buf == NULL) | 752 | if (s->s3->wbuf.buf == NULL) { |
792 | { | 753 | len = s->max_send_fragment + |
793 | len = s->max_send_fragment | 754 | SSL3_RT_SEND_MAX_ENCRYPTED_OVERHEAD + headerlen + align; |
794 | + SSL3_RT_SEND_MAX_ENCRYPTED_OVERHEAD | ||
795 | + headerlen + align; | ||
796 | #ifndef OPENSSL_NO_COMP | 755 | #ifndef OPENSSL_NO_COMP |
797 | if (!(s->options & SSL_OP_NO_COMPRESSION)) | 756 | if (!(s->options & SSL_OP_NO_COMPRESSION)) |
798 | len += SSL3_RT_MAX_COMPRESSED_OVERHEAD; | 757 | len += SSL3_RT_MAX_COMPRESSED_OVERHEAD; |
799 | #endif | 758 | #endif |
800 | if (!(s->options & SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS)) | 759 | if (!(s->options & SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS)) |
801 | len += headerlen + align | 760 | len += headerlen + align + |
802 | + SSL3_RT_SEND_MAX_ENCRYPTED_OVERHEAD; | 761 | SSL3_RT_SEND_MAX_ENCRYPTED_OVERHEAD; |
803 | 762 | ||
804 | if ((p=freelist_extract(s->ctx, 0, len)) == NULL) | 763 | if ((p = freelist_extract(s->ctx, 0, len)) == NULL) |
805 | goto err; | 764 | goto err; |
806 | s->s3->wbuf.buf = p; | 765 | s->s3->wbuf.buf = p; |
807 | s->s3->wbuf.len = len; | 766 | s->s3->wbuf.len = len; |
808 | } | 767 | } |
809 | 768 | ||
810 | return 1; | 769 | return 1; |
811 | 770 | ||
812 | err: | 771 | err: |
813 | SSLerr(SSL_F_SSL3_SETUP_WRITE_BUFFER,ERR_R_MALLOC_FAILURE); | 772 | SSLerr(SSL_F_SSL3_SETUP_WRITE_BUFFER, ERR_R_MALLOC_FAILURE); |
814 | return 0; | 773 | return 0; |
815 | } | 774 | } |
816 | 775 | ||
817 | 776 | ||
818 | int ssl3_setup_buffers(SSL *s) | 777 | int |
819 | { | 778 | ssl3_setup_buffers(SSL *s) |
779 | { | ||
820 | if (!ssl3_setup_read_buffer(s)) | 780 | if (!ssl3_setup_read_buffer(s)) |
821 | return 0; | 781 | return 0; |
822 | if (!ssl3_setup_write_buffer(s)) | 782 | if (!ssl3_setup_write_buffer(s)) |
823 | return 0; | 783 | return 0; |
824 | return 1; | 784 | return 1; |
825 | } | 785 | } |
826 | 786 | ||
827 | int ssl3_release_write_buffer(SSL *s) | 787 | int |
828 | { | 788 | ssl3_release_write_buffer(SSL *s) |
829 | if (s->s3->wbuf.buf != NULL) | 789 | { |
830 | { | 790 | if (s->s3->wbuf.buf != NULL) { |
831 | freelist_insert(s->ctx, 0, s->s3->wbuf.len, s->s3->wbuf.buf); | 791 | freelist_insert(s->ctx, 0, s->s3->wbuf.len, s->s3->wbuf.buf); |
832 | s->s3->wbuf.buf = NULL; | 792 | s->s3->wbuf.buf = NULL; |
833 | } | ||
834 | return 1; | ||
835 | } | 793 | } |
794 | return 1; | ||
795 | } | ||
836 | 796 | ||
837 | int ssl3_release_read_buffer(SSL *s) | 797 | int |
838 | { | 798 | ssl3_release_read_buffer(SSL *s) |
839 | if (s->s3->rbuf.buf != NULL) | 799 | { |
840 | { | 800 | if (s->s3->rbuf.buf != NULL) { |
841 | freelist_insert(s->ctx, 1, s->s3->rbuf.len, s->s3->rbuf.buf); | 801 | freelist_insert(s->ctx, 1, s->s3->rbuf.len, s->s3->rbuf.buf); |
842 | s->s3->rbuf.buf = NULL; | 802 | s->s3->rbuf.buf = NULL; |
843 | } | ||
844 | return 1; | ||
845 | } | 803 | } |
804 | return 1; | ||
805 | } | ||
846 | 806 | ||
diff --git a/src/lib/libssl/src/ssl/s3_cbc.c b/src/lib/libssl/src/ssl/s3_cbc.c index 443a31e746..d6cc9b4771 100644 --- a/src/lib/libssl/src/ssl/s3_cbc.c +++ b/src/lib/libssl/src/ssl/s3_cbc.c | |||
@@ -73,30 +73,33 @@ | |||
73 | * bits. They use the fact that arithmetic shift shifts-in the sign bit. | 73 | * bits. They use the fact that arithmetic shift shifts-in the sign bit. |
74 | * However, this is not ensured by the C standard so you may need to replace | 74 | * However, this is not ensured by the C standard so you may need to replace |
75 | * them with something else on odd CPUs. */ | 75 | * them with something else on odd CPUs. */ |
76 | #define DUPLICATE_MSB_TO_ALL(x) ( (unsigned)( (int)(x) >> (sizeof(int)*8-1) ) ) | 76 | #define DUPLICATE_MSB_TO_ALL(x) ((unsigned)((int)(x) >> (sizeof(int) * 8 - 1))) |
77 | #define DUPLICATE_MSB_TO_ALL_8(x) ((unsigned char)(DUPLICATE_MSB_TO_ALL(x))) | 77 | #define DUPLICATE_MSB_TO_ALL_8(x) ((unsigned char)(DUPLICATE_MSB_TO_ALL(x))) |
78 | 78 | ||
79 | /* constant_time_lt returns 0xff if a<b and 0x00 otherwise. */ | 79 | /* constant_time_lt returns 0xff if a<b and 0x00 otherwise. */ |
80 | static unsigned constant_time_lt(unsigned a, unsigned b) | 80 | static unsigned |
81 | { | 81 | constant_time_lt(unsigned a, unsigned b) |
82 | { | ||
82 | a -= b; | 83 | a -= b; |
83 | return DUPLICATE_MSB_TO_ALL(a); | 84 | return DUPLICATE_MSB_TO_ALL(a); |
84 | } | 85 | } |
85 | 86 | ||
86 | /* constant_time_ge returns 0xff if a>=b and 0x00 otherwise. */ | 87 | /* constant_time_ge returns 0xff if a>=b and 0x00 otherwise. */ |
87 | static unsigned constant_time_ge(unsigned a, unsigned b) | 88 | static unsigned |
88 | { | 89 | constant_time_ge(unsigned a, unsigned b) |
90 | { | ||
89 | a -= b; | 91 | a -= b; |
90 | return DUPLICATE_MSB_TO_ALL(~a); | 92 | return DUPLICATE_MSB_TO_ALL(~a); |
91 | } | 93 | } |
92 | 94 | ||
93 | /* constant_time_eq_8 returns 0xff if a==b and 0x00 otherwise. */ | 95 | /* constant_time_eq_8 returns 0xff if a==b and 0x00 otherwise. */ |
94 | static unsigned char constant_time_eq_8(unsigned a, unsigned b) | 96 | static unsigned char |
95 | { | 97 | constant_time_eq_8(unsigned a, unsigned b) |
98 | { | ||
96 | unsigned c = a ^ b; | 99 | unsigned c = a ^ b; |
97 | c--; | 100 | c--; |
98 | return DUPLICATE_MSB_TO_ALL_8(c); | 101 | return DUPLICATE_MSB_TO_ALL_8(c); |
99 | } | 102 | } |
100 | 103 | ||
101 | /* ssl3_cbc_remove_padding removes padding from the decrypted, SSLv3, CBC | 104 | /* ssl3_cbc_remove_padding removes padding from the decrypted, SSLv3, CBC |
102 | * record in |rec| by updating |rec->length| in constant time. | 105 | * record in |rec| by updating |rec->length| in constant time. |
@@ -106,11 +109,10 @@ static unsigned char constant_time_eq_8(unsigned a, unsigned b) | |||
106 | * 0: (in non-constant time) if the record is publicly invalid. | 109 | * 0: (in non-constant time) if the record is publicly invalid. |
107 | * 1: if the padding was valid | 110 | * 1: if the padding was valid |
108 | * -1: otherwise. */ | 111 | * -1: otherwise. */ |
109 | int ssl3_cbc_remove_padding(const SSL* s, | 112 | int |
110 | SSL3_RECORD *rec, | 113 | ssl3_cbc_remove_padding(const SSL* s, SSL3_RECORD *rec, unsigned block_size, |
111 | unsigned block_size, | 114 | unsigned mac_size) |
112 | unsigned mac_size) | 115 | { |
113 | { | ||
114 | unsigned padding_length, good; | 116 | unsigned padding_length, good; |
115 | const unsigned overhead = 1 /* padding length byte */ + mac_size; | 117 | const unsigned overhead = 1 /* padding length byte */ + mac_size; |
116 | 118 | ||
@@ -119,13 +121,13 @@ int ssl3_cbc_remove_padding(const SSL* s, | |||
119 | if (overhead > rec->length) | 121 | if (overhead > rec->length) |
120 | return 0; | 122 | return 0; |
121 | 123 | ||
122 | padding_length = rec->data[rec->length-1]; | 124 | padding_length = rec->data[rec->length - 1]; |
123 | good = constant_time_ge(rec->length, padding_length+overhead); | 125 | good = constant_time_ge(rec->length, padding_length + overhead); |
124 | /* SSLv3 requires that the padding is minimal. */ | 126 | /* SSLv3 requires that the padding is minimal. */ |
125 | good &= constant_time_ge(block_size, padding_length+1); | 127 | good &= constant_time_ge(block_size, padding_length + 1); |
126 | padding_length = good & (padding_length+1); | 128 | padding_length = good & (padding_length + 1); |
127 | rec->length -= padding_length; | 129 | rec->length -= padding_length; |
128 | rec->type |= padding_length<<8; /* kludge: pass padding length */ | 130 | rec->type |= padding_length << 8; /* kludge: pass padding length */ |
129 | return (int)((good & 1) | (~good & -1)); | 131 | return (int)((good & 1) | (~good & -1)); |
130 | } | 132 | } |
131 | 133 | ||
@@ -140,16 +142,14 @@ int ssl3_cbc_remove_padding(const SSL* s, | |||
140 | * 0: (in non-constant time) if the record is publicly invalid. | 142 | * 0: (in non-constant time) if the record is publicly invalid. |
141 | * 1: if the padding was valid | 143 | * 1: if the padding was valid |
142 | * -1: otherwise. */ | 144 | * -1: otherwise. */ |
143 | int tls1_cbc_remove_padding(const SSL* s, | 145 | int |
144 | SSL3_RECORD *rec, | 146 | tls1_cbc_remove_padding(const SSL* s, SSL3_RECORD *rec, unsigned block_size, |
145 | unsigned block_size, | 147 | unsigned mac_size) |
146 | unsigned mac_size) | 148 | { |
147 | { | ||
148 | unsigned padding_length, good, to_check, i; | 149 | unsigned padding_length, good, to_check, i; |
149 | const unsigned overhead = 1 /* padding length byte */ + mac_size; | 150 | const unsigned overhead = 1 /* padding length byte */ + mac_size; |
150 | /* Check if version requires explicit IV */ | 151 | /* Check if version requires explicit IV */ |
151 | if (s->version >= TLS1_1_VERSION || s->version == DTLS1_BAD_VER) | 152 | if (s->version >= TLS1_1_VERSION || s->version == DTLS1_BAD_VER) { |
152 | { | ||
153 | /* These lengths are all public so we can test them in | 153 | /* These lengths are all public so we can test them in |
154 | * non-constant time. | 154 | * non-constant time. |
155 | */ | 155 | */ |
@@ -159,40 +159,35 @@ int tls1_cbc_remove_padding(const SSL* s, | |||
159 | rec->data += block_size; | 159 | rec->data += block_size; |
160 | rec->input += block_size; | 160 | rec->input += block_size; |
161 | rec->length -= block_size; | 161 | rec->length -= block_size; |
162 | } | 162 | } else if (overhead > rec->length) |
163 | else if (overhead > rec->length) | ||
164 | return 0; | 163 | return 0; |
165 | 164 | ||
166 | padding_length = rec->data[rec->length-1]; | 165 | padding_length = rec->data[rec->length - 1]; |
167 | 166 | ||
168 | /* NB: if compression is in operation the first packet may not be of | 167 | /* NB: if compression is in operation the first packet may not be of |
169 | * even length so the padding bug check cannot be performed. This bug | 168 | * even length so the padding bug check cannot be performed. This bug |
170 | * workaround has been around since SSLeay so hopefully it is either | 169 | * workaround has been around since SSLeay so hopefully it is either |
171 | * fixed now or no buggy implementation supports compression [steve] | 170 | * fixed now or no buggy implementation supports compression [steve] |
172 | */ | 171 | */ |
173 | if ( (s->options&SSL_OP_TLS_BLOCK_PADDING_BUG) && !s->expand) | 172 | if ((s->options & SSL_OP_TLS_BLOCK_PADDING_BUG) && !s->expand) { |
174 | { | ||
175 | /* First packet is even in size, so check */ | 173 | /* First packet is even in size, so check */ |
176 | if ((memcmp(s->s3->read_sequence, "\0\0\0\0\0\0\0\0",8) == 0) && | 174 | if ((memcmp(s->s3->read_sequence, "\0\0\0\0\0\0\0\0", 8) == 0) && |
177 | !(padding_length & 1)) | 175 | !(padding_length & 1)) { |
178 | { | ||
179 | s->s3->flags|=TLS1_FLAGS_TLS_PADDING_BUG; | 176 | s->s3->flags|=TLS1_FLAGS_TLS_PADDING_BUG; |
180 | } | 177 | } |
181 | if ((s->s3->flags & TLS1_FLAGS_TLS_PADDING_BUG) && | 178 | if ((s->s3->flags & TLS1_FLAGS_TLS_PADDING_BUG) && |
182 | padding_length > 0) | 179 | padding_length > 0) { |
183 | { | ||
184 | padding_length--; | 180 | padding_length--; |
185 | } | ||
186 | } | 181 | } |
182 | } | ||
187 | 183 | ||
188 | if (EVP_CIPHER_flags(s->enc_read_ctx->cipher)&EVP_CIPH_FLAG_AEAD_CIPHER) | 184 | if (EVP_CIPHER_flags(s->enc_read_ctx->cipher) & EVP_CIPH_FLAG_AEAD_CIPHER) { |
189 | { | ||
190 | /* padding is already verified */ | 185 | /* padding is already verified */ |
191 | rec->length -= padding_length + 1; | 186 | rec->length -= padding_length + 1; |
192 | return 1; | 187 | return 1; |
193 | } | 188 | } |
194 | 189 | ||
195 | good = constant_time_ge(rec->length, overhead+padding_length); | 190 | good = constant_time_ge(rec->length, overhead + padding_length); |
196 | /* The padding consists of a length byte at the end of the record and | 191 | /* The padding consists of a length byte at the end of the record and |
197 | * then that many bytes of padding, all with the same value as the | 192 | * then that many bytes of padding, all with the same value as the |
198 | * length byte. Thus, with the length byte included, there are i+1 | 193 | * length byte. Thus, with the length byte included, there are i+1 |
@@ -203,17 +198,16 @@ int tls1_cbc_remove_padding(const SSL* s, | |||
203 | * amount of padding possible. (Again, the length of the record is | 198 | * amount of padding possible. (Again, the length of the record is |
204 | * public information so we can use it.) */ | 199 | * public information so we can use it.) */ |
205 | to_check = 255; /* maximum amount of padding. */ | 200 | to_check = 255; /* maximum amount of padding. */ |
206 | if (to_check > rec->length-1) | 201 | if (to_check > rec->length - 1) |
207 | to_check = rec->length-1; | 202 | to_check = rec->length - 1; |
208 | 203 | ||
209 | for (i = 0; i < to_check; i++) | 204 | for (i = 0; i < to_check; i++) { |
210 | { | ||
211 | unsigned char mask = constant_time_ge(padding_length, i); | 205 | unsigned char mask = constant_time_ge(padding_length, i); |
212 | unsigned char b = rec->data[rec->length-1-i]; | 206 | unsigned char b = rec->data[rec->length - 1 - i]; |
213 | /* The final |padding_length+1| bytes should all have the value | 207 | /* The final |padding_length+1| bytes should all have the value |
214 | * |padding_length|. Therefore the XOR should be zero. */ | 208 | * |padding_length|. Therefore the XOR should be zero. */ |
215 | good &= ~(mask&(padding_length ^ b)); | 209 | good &= ~(mask&(padding_length ^ b)); |
216 | } | 210 | } |
217 | 211 | ||
218 | /* If any of the final |padding_length+1| bytes had the wrong value, | 212 | /* If any of the final |padding_length+1| bytes had the wrong value, |
219 | * one or more of the lower eight bits of |good| will be cleared. We | 213 | * one or more of the lower eight bits of |good| will be cleared. We |
@@ -222,15 +216,15 @@ int tls1_cbc_remove_padding(const SSL* s, | |||
222 | good &= good >> 4; | 216 | good &= good >> 4; |
223 | good &= good >> 2; | 217 | good &= good >> 2; |
224 | good &= good >> 1; | 218 | good &= good >> 1; |
225 | good <<= sizeof(good)*8-1; | 219 | good <<= sizeof(good)*8 - 1; |
226 | good = DUPLICATE_MSB_TO_ALL(good); | 220 | good = DUPLICATE_MSB_TO_ALL(good); |
227 | 221 | ||
228 | padding_length = good & (padding_length+1); | 222 | padding_length = good & (padding_length + 1); |
229 | rec->length -= padding_length; | 223 | rec->length -= padding_length; |
230 | rec->type |= padding_length<<8; /* kludge: pass padding length */ | 224 | rec->type |= padding_length<<8; /* kludge: pass padding length */ |
231 | 225 | ||
232 | return (int)((good & 1) | (~good & -1)); | 226 | return (int)((good & 1) | (~good & -1)); |
233 | } | 227 | } |
234 | 228 | ||
235 | /* ssl3_cbc_copy_mac copies |md_size| bytes from the end of |rec| to |out| in | 229 | /* ssl3_cbc_copy_mac copies |md_size| bytes from the end of |rec| to |out| in |
236 | * constant time (independent of the concrete value of rec->length, which may | 230 | * constant time (independent of the concrete value of rec->length, which may |
@@ -251,12 +245,12 @@ int tls1_cbc_remove_padding(const SSL* s, | |||
251 | */ | 245 | */ |
252 | #define CBC_MAC_ROTATE_IN_PLACE | 246 | #define CBC_MAC_ROTATE_IN_PLACE |
253 | 247 | ||
254 | void ssl3_cbc_copy_mac(unsigned char* out, | 248 | void |
255 | const SSL3_RECORD *rec, | 249 | ssl3_cbc_copy_mac(unsigned char* out, const SSL3_RECORD *rec, |
256 | unsigned md_size,unsigned orig_len) | 250 | unsigned md_size, unsigned orig_len) |
257 | { | 251 | { |
258 | #if defined(CBC_MAC_ROTATE_IN_PLACE) | 252 | #if defined(CBC_MAC_ROTATE_IN_PLACE) |
259 | unsigned char rotated_mac_buf[64+EVP_MAX_MD_SIZE]; | 253 | unsigned char rotated_mac_buf[64 + EVP_MAX_MD_SIZE]; |
260 | unsigned char *rotated_mac; | 254 | unsigned char *rotated_mac; |
261 | #else | 255 | #else |
262 | unsigned char rotated_mac[EVP_MAX_MD_SIZE]; | 256 | unsigned char rotated_mac[EVP_MAX_MD_SIZE]; |
@@ -276,7 +270,7 @@ void ssl3_cbc_copy_mac(unsigned char* out, | |||
276 | OPENSSL_assert(md_size <= EVP_MAX_MD_SIZE); | 270 | OPENSSL_assert(md_size <= EVP_MAX_MD_SIZE); |
277 | 271 | ||
278 | #if defined(CBC_MAC_ROTATE_IN_PLACE) | 272 | #if defined(CBC_MAC_ROTATE_IN_PLACE) |
279 | rotated_mac = rotated_mac_buf + ((0-(size_t)rotated_mac_buf)&63); | 273 | rotated_mac = rotated_mac_buf + ((0 - (size_t)rotated_mac_buf)&63); |
280 | #endif | 274 | #endif |
281 | 275 | ||
282 | /* This information is public so it's safe to branch based on it. */ | 276 | /* This information is public so it's safe to branch based on it. */ |
@@ -290,42 +284,39 @@ void ssl3_cbc_copy_mac(unsigned char* out, | |||
290 | * figure out that it can remove div_spoiler as that would require it | 284 | * figure out that it can remove div_spoiler as that would require it |
291 | * to prove that md_size is always even, which I hope is beyond it. */ | 285 | * to prove that md_size is always even, which I hope is beyond it. */ |
292 | div_spoiler = md_size >> 1; | 286 | div_spoiler = md_size >> 1; |
293 | div_spoiler <<= (sizeof(div_spoiler)-1)*8; | 287 | div_spoiler <<= (sizeof(div_spoiler) - 1) * 8; |
294 | rotate_offset = (div_spoiler + mac_start - scan_start) % md_size; | 288 | rotate_offset = (div_spoiler + mac_start - scan_start) % md_size; |
295 | 289 | ||
296 | memset(rotated_mac, 0, md_size); | 290 | memset(rotated_mac, 0, md_size); |
297 | for (i = scan_start, j = 0; i < orig_len; i++) | 291 | for (i = scan_start, j = 0; i < orig_len; i++) { |
298 | { | ||
299 | unsigned char mac_started = constant_time_ge(i, mac_start); | 292 | unsigned char mac_started = constant_time_ge(i, mac_start); |
300 | unsigned char mac_ended = constant_time_ge(i, mac_end); | 293 | unsigned char mac_ended = constant_time_ge(i, mac_end); |
301 | unsigned char b = rec->data[i]; | 294 | unsigned char b = rec->data[i]; |
302 | rotated_mac[j++] |= b & mac_started & ~mac_ended; | 295 | rotated_mac[j++] |= b & mac_started & ~mac_ended; |
303 | j &= constant_time_lt(j,md_size); | 296 | j &= constant_time_lt(j, md_size); |
304 | } | 297 | } |
305 | 298 | ||
306 | /* Now rotate the MAC */ | 299 | /* Now rotate the MAC */ |
307 | #if defined(CBC_MAC_ROTATE_IN_PLACE) | 300 | #if defined(CBC_MAC_ROTATE_IN_PLACE) |
308 | j = 0; | 301 | j = 0; |
309 | for (i = 0; i < md_size; i++) | 302 | for (i = 0; i < md_size; i++) { |
310 | { | ||
311 | /* in case cache-line is 32 bytes, touch second line */ | 303 | /* in case cache-line is 32 bytes, touch second line */ |
312 | ((volatile unsigned char *)rotated_mac)[rotate_offset^32]; | 304 | ((volatile unsigned char *)rotated_mac)[rotate_offset^32]; |
313 | out[j++] = rotated_mac[rotate_offset++]; | 305 | out[j++] = rotated_mac[rotate_offset++]; |
314 | rotate_offset &= constant_time_lt(rotate_offset,md_size); | 306 | rotate_offset &= constant_time_lt(rotate_offset, md_size); |
315 | } | 307 | } |
316 | #else | 308 | #else |
317 | memset(out, 0, md_size); | 309 | memset(out, 0, md_size); |
318 | rotate_offset = md_size - rotate_offset; | 310 | rotate_offset = md_size - rotate_offset; |
319 | rotate_offset &= constant_time_lt(rotate_offset,md_size); | 311 | rotate_offset &= constant_time_lt(rotate_offset, md_size); |
320 | for (i = 0; i < md_size; i++) | 312 | for (i = 0; i < md_size; i++) { |
321 | { | ||
322 | for (j = 0; j < md_size; j++) | 313 | for (j = 0; j < md_size; j++) |
323 | out[j] |= rotated_mac[i] & constant_time_eq_8(j, rotate_offset); | 314 | out[j] |= rotated_mac[i] & constant_time_eq_8(j, rotate_offset); |
324 | rotate_offset++; | 315 | rotate_offset++; |
325 | rotate_offset &= constant_time_lt(rotate_offset,md_size); | 316 | rotate_offset &= constant_time_lt(rotate_offset, md_size); |
326 | } | ||
327 | #endif | ||
328 | } | 317 | } |
318 | #endif | ||
319 | } | ||
329 | 320 | ||
330 | /* u32toLE serialises an unsigned, 32-bit number (n) as four bytes at (p) in | 321 | /* u32toLE serialises an unsigned, 32-bit number (n) as four bytes at (p) in |
331 | * little-endian order. The value of p is advanced by four. */ | 322 | * little-endian order. The value of p is advanced by four. */ |
@@ -338,81 +329,83 @@ void ssl3_cbc_copy_mac(unsigned char* out, | |||
338 | /* These functions serialize the state of a hash and thus perform the standard | 329 | /* These functions serialize the state of a hash and thus perform the standard |
339 | * "final" operation without adding the padding and length that such a function | 330 | * "final" operation without adding the padding and length that such a function |
340 | * typically does. */ | 331 | * typically does. */ |
341 | static void tls1_md5_final_raw(void* ctx, unsigned char *md_out) | 332 | static void |
342 | { | 333 | tls1_md5_final_raw(void* ctx, unsigned char *md_out) |
334 | { | ||
343 | MD5_CTX *md5 = ctx; | 335 | MD5_CTX *md5 = ctx; |
344 | u32toLE(md5->A, md_out); | 336 | u32toLE(md5->A, md_out); |
345 | u32toLE(md5->B, md_out); | 337 | u32toLE(md5->B, md_out); |
346 | u32toLE(md5->C, md_out); | 338 | u32toLE(md5->C, md_out); |
347 | u32toLE(md5->D, md_out); | 339 | u32toLE(md5->D, md_out); |
348 | } | 340 | } |
349 | 341 | ||
350 | static void tls1_sha1_final_raw(void* ctx, unsigned char *md_out) | 342 | static void |
351 | { | 343 | tls1_sha1_final_raw(void* ctx, unsigned char *md_out) |
344 | { | ||
352 | SHA_CTX *sha1 = ctx; | 345 | SHA_CTX *sha1 = ctx; |
353 | l2n(sha1->h0, md_out); | 346 | l2n(sha1->h0, md_out); |
354 | l2n(sha1->h1, md_out); | 347 | l2n(sha1->h1, md_out); |
355 | l2n(sha1->h2, md_out); | 348 | l2n(sha1->h2, md_out); |
356 | l2n(sha1->h3, md_out); | 349 | l2n(sha1->h3, md_out); |
357 | l2n(sha1->h4, md_out); | 350 | l2n(sha1->h4, md_out); |
358 | } | 351 | } |
359 | #define LARGEST_DIGEST_CTX SHA_CTX | 352 | #define LARGEST_DIGEST_CTX SHA_CTX |
360 | 353 | ||
361 | #ifndef OPENSSL_NO_SHA256 | 354 | #ifndef OPENSSL_NO_SHA256 |
362 | static void tls1_sha256_final_raw(void* ctx, unsigned char *md_out) | 355 | static void |
363 | { | 356 | tls1_sha256_final_raw(void* ctx, unsigned char *md_out) |
357 | { | ||
364 | SHA256_CTX *sha256 = ctx; | 358 | SHA256_CTX *sha256 = ctx; |
365 | unsigned i; | 359 | unsigned i; |
366 | 360 | ||
367 | for (i = 0; i < 8; i++) | 361 | for (i = 0; i < 8; i++) { |
368 | { | ||
369 | l2n(sha256->h[i], md_out); | 362 | l2n(sha256->h[i], md_out); |
370 | } | ||
371 | } | 363 | } |
364 | } | ||
372 | #undef LARGEST_DIGEST_CTX | 365 | #undef LARGEST_DIGEST_CTX |
373 | #define LARGEST_DIGEST_CTX SHA256_CTX | 366 | #define LARGEST_DIGEST_CTX SHA256_CTX |
374 | #endif | 367 | #endif |
375 | 368 | ||
376 | #ifndef OPENSSL_NO_SHA512 | 369 | #ifndef OPENSSL_NO_SHA512 |
377 | static void tls1_sha512_final_raw(void* ctx, unsigned char *md_out) | 370 | static void |
378 | { | 371 | tls1_sha512_final_raw(void* ctx, unsigned char *md_out) |
372 | { | ||
379 | SHA512_CTX *sha512 = ctx; | 373 | SHA512_CTX *sha512 = ctx; |
380 | unsigned i; | 374 | unsigned i; |
381 | 375 | ||
382 | for (i = 0; i < 8; i++) | 376 | for (i = 0; i < 8; i++) { |
383 | { | ||
384 | l2n8(sha512->h[i], md_out); | 377 | l2n8(sha512->h[i], md_out); |
385 | } | ||
386 | } | 378 | } |
379 | } | ||
387 | #undef LARGEST_DIGEST_CTX | 380 | #undef LARGEST_DIGEST_CTX |
388 | #define LARGEST_DIGEST_CTX SHA512_CTX | 381 | #define LARGEST_DIGEST_CTX SHA512_CTX |
389 | #endif | 382 | #endif |
390 | 383 | ||
391 | /* ssl3_cbc_record_digest_supported returns 1 iff |ctx| uses a hash function | 384 | /* ssl3_cbc_record_digest_supported returns 1 iff |ctx| uses a hash function |
392 | * which ssl3_cbc_digest_record supports. */ | 385 | * which ssl3_cbc_digest_record supports. */ |
393 | char ssl3_cbc_record_digest_supported(const EVP_MD_CTX *ctx) | 386 | char |
394 | { | 387 | ssl3_cbc_record_digest_supported(const EVP_MD_CTX *ctx) |
388 | { | ||
395 | #ifdef OPENSSL_FIPS | 389 | #ifdef OPENSSL_FIPS |
396 | if (FIPS_mode()) | 390 | if (FIPS_mode()) |
397 | return 0; | 391 | return 0; |
398 | #endif | 392 | #endif |
399 | switch (EVP_MD_CTX_type(ctx)) | 393 | switch (EVP_MD_CTX_type(ctx)) { |
400 | { | 394 | case NID_md5: |
401 | case NID_md5: | 395 | case NID_sha1: |
402 | case NID_sha1: | ||
403 | #ifndef OPENSSL_NO_SHA256 | 396 | #ifndef OPENSSL_NO_SHA256 |
404 | case NID_sha224: | 397 | case NID_sha224: |
405 | case NID_sha256: | 398 | case NID_sha256: |
406 | #endif | 399 | #endif |
407 | #ifndef OPENSSL_NO_SHA512 | 400 | #ifndef OPENSSL_NO_SHA512 |
408 | case NID_sha384: | 401 | case NID_sha384: |
409 | case NID_sha512: | 402 | case NID_sha512: |
410 | #endif | 403 | #endif |
411 | return 1; | 404 | return 1; |
412 | default: | 405 | default: |
413 | return 0; | 406 | return 0; |
414 | } | ||
415 | } | 407 | } |
408 | } | ||
416 | 409 | ||
417 | /* ssl3_cbc_digest_record computes the MAC of a decrypted, padded SSLv3/TLS | 410 | /* ssl3_cbc_digest_record computes the MAC of a decrypted, padded SSLv3/TLS |
418 | * record. | 411 | * record. |
@@ -433,26 +426,21 @@ char ssl3_cbc_record_digest_supported(const EVP_MD_CTX *ctx) | |||
433 | * functions, above, we know that data_plus_mac_size is large enough to contain | 426 | * functions, above, we know that data_plus_mac_size is large enough to contain |
434 | * a padding byte and MAC. (If the padding was invalid, it might contain the | 427 | * a padding byte and MAC. (If the padding was invalid, it might contain the |
435 | * padding too. ) */ | 428 | * padding too. ) */ |
436 | void ssl3_cbc_digest_record( | 429 | void ssl3_cbc_digest_record(const EVP_MD_CTX *ctx, unsigned char* md_out, |
437 | const EVP_MD_CTX *ctx, | 430 | size_t* md_out_size, const unsigned char header[13], |
438 | unsigned char* md_out, | 431 | const unsigned char *data, size_t data_plus_mac_size, |
439 | size_t* md_out_size, | 432 | size_t data_plus_mac_plus_padding_size, const unsigned char *mac_secret, |
440 | const unsigned char header[13], | 433 | unsigned mac_secret_length, char is_sslv3) |
441 | const unsigned char *data, | 434 | { |
442 | size_t data_plus_mac_size, | ||
443 | size_t data_plus_mac_plus_padding_size, | ||
444 | const unsigned char *mac_secret, | ||
445 | unsigned mac_secret_length, | ||
446 | char is_sslv3) | ||
447 | { | ||
448 | union { double align; | 435 | union { double align; |
449 | unsigned char c[sizeof(LARGEST_DIGEST_CTX)]; } md_state; | 436 | unsigned char c[sizeof(LARGEST_DIGEST_CTX)]; |
437 | } md_state; | ||
450 | void (*md_final_raw)(void *ctx, unsigned char *md_out); | 438 | void (*md_final_raw)(void *ctx, unsigned char *md_out); |
451 | void (*md_transform)(void *ctx, const unsigned char *block); | 439 | void (*md_transform)(void *ctx, const unsigned char *block); |
452 | unsigned md_size, md_block_size = 64; | 440 | unsigned md_size, md_block_size = 64; |
453 | unsigned sslv3_pad_length = 40, header_length, variance_blocks, | 441 | unsigned sslv3_pad_length = 40, header_length, variance_blocks, |
454 | len, max_mac_bytes, num_blocks, | 442 | len, max_mac_bytes, num_blocks, |
455 | num_starting_blocks, k, mac_end_offset, c, index_a, index_b; | 443 | num_starting_blocks, k, mac_end_offset, c, index_a, index_b; |
456 | unsigned int bits; /* at most 18 bits */ | 444 | unsigned int bits; /* at most 18 bits */ |
457 | unsigned char length_bytes[MAX_HASH_BIT_COUNT_BYTES]; | 445 | unsigned char length_bytes[MAX_HASH_BIT_COUNT_BYTES]; |
458 | /* hmac_pad is the masked HMAC key. */ | 446 | /* hmac_pad is the masked HMAC key. */ |
@@ -470,78 +458,74 @@ void ssl3_cbc_digest_record( | |||
470 | * many possible overflows later in this function. */ | 458 | * many possible overflows later in this function. */ |
471 | OPENSSL_assert(data_plus_mac_plus_padding_size < 1024*1024); | 459 | OPENSSL_assert(data_plus_mac_plus_padding_size < 1024*1024); |
472 | 460 | ||
473 | switch (EVP_MD_CTX_type(ctx)) | 461 | switch (EVP_MD_CTX_type(ctx)) { |
474 | { | 462 | case NID_md5: |
475 | case NID_md5: | 463 | MD5_Init((MD5_CTX*)md_state.c); |
476 | MD5_Init((MD5_CTX*)md_state.c); | 464 | md_final_raw = tls1_md5_final_raw; |
477 | md_final_raw = tls1_md5_final_raw; | 465 | md_transform = (void(*)(void *ctx, const unsigned char *block)) MD5_Transform; |
478 | md_transform = (void(*)(void *ctx, const unsigned char *block)) MD5_Transform; | 466 | md_size = 16; |
479 | md_size = 16; | 467 | sslv3_pad_length = 48; |
480 | sslv3_pad_length = 48; | 468 | length_is_big_endian = 0; |
481 | length_is_big_endian = 0; | 469 | break; |
482 | break; | 470 | case NID_sha1: |
483 | case NID_sha1: | 471 | SHA1_Init((SHA_CTX*)md_state.c); |
484 | SHA1_Init((SHA_CTX*)md_state.c); | 472 | md_final_raw = tls1_sha1_final_raw; |
485 | md_final_raw = tls1_sha1_final_raw; | 473 | md_transform = (void(*)(void *ctx, const unsigned char *block)) SHA1_Transform; |
486 | md_transform = (void(*)(void *ctx, const unsigned char *block)) SHA1_Transform; | 474 | md_size = 20; |
487 | md_size = 20; | 475 | break; |
488 | break; | ||
489 | #ifndef OPENSSL_NO_SHA256 | 476 | #ifndef OPENSSL_NO_SHA256 |
490 | case NID_sha224: | 477 | case NID_sha224: |
491 | SHA224_Init((SHA256_CTX*)md_state.c); | 478 | SHA224_Init((SHA256_CTX*)md_state.c); |
492 | md_final_raw = tls1_sha256_final_raw; | 479 | md_final_raw = tls1_sha256_final_raw; |
493 | md_transform = (void(*)(void *ctx, const unsigned char *block)) SHA256_Transform; | 480 | md_transform = (void(*)(void *ctx, const unsigned char *block)) SHA256_Transform; |
494 | md_size = 224/8; | 481 | md_size = 224/8; |
495 | break; | 482 | break; |
496 | case NID_sha256: | 483 | case NID_sha256: |
497 | SHA256_Init((SHA256_CTX*)md_state.c); | 484 | SHA256_Init((SHA256_CTX*)md_state.c); |
498 | md_final_raw = tls1_sha256_final_raw; | 485 | md_final_raw = tls1_sha256_final_raw; |
499 | md_transform = (void(*)(void *ctx, const unsigned char *block)) SHA256_Transform; | 486 | md_transform = (void(*)(void *ctx, const unsigned char *block)) SHA256_Transform; |
500 | md_size = 32; | 487 | md_size = 32; |
501 | break; | 488 | break; |
502 | #endif | 489 | #endif |
503 | #ifndef OPENSSL_NO_SHA512 | 490 | #ifndef OPENSSL_NO_SHA512 |
504 | case NID_sha384: | 491 | case NID_sha384: |
505 | SHA384_Init((SHA512_CTX*)md_state.c); | 492 | SHA384_Init((SHA512_CTX*)md_state.c); |
506 | md_final_raw = tls1_sha512_final_raw; | 493 | md_final_raw = tls1_sha512_final_raw; |
507 | md_transform = (void(*)(void *ctx, const unsigned char *block)) SHA512_Transform; | 494 | md_transform = (void(*)(void *ctx, const unsigned char *block)) SHA512_Transform; |
508 | md_size = 384/8; | 495 | md_size = 384/8; |
509 | md_block_size = 128; | 496 | md_block_size = 128; |
510 | md_length_size = 16; | 497 | md_length_size = 16; |
511 | break; | 498 | break; |
512 | case NID_sha512: | 499 | case NID_sha512: |
513 | SHA512_Init((SHA512_CTX*)md_state.c); | 500 | SHA512_Init((SHA512_CTX*)md_state.c); |
514 | md_final_raw = tls1_sha512_final_raw; | 501 | md_final_raw = tls1_sha512_final_raw; |
515 | md_transform = (void(*)(void *ctx, const unsigned char *block)) SHA512_Transform; | 502 | md_transform = (void(*)(void *ctx, const unsigned char *block)) SHA512_Transform; |
516 | md_size = 64; | 503 | md_size = 64; |
517 | md_block_size = 128; | 504 | md_block_size = 128; |
518 | md_length_size = 16; | 505 | md_length_size = 16; |
519 | break; | 506 | break; |
520 | #endif | 507 | #endif |
521 | default: | 508 | default: |
522 | /* ssl3_cbc_record_digest_supported should have been | 509 | /* ssl3_cbc_record_digest_supported should have been |
523 | * called first to check that the hash function is | 510 | * called first to check that the hash function is |
524 | * supported. */ | 511 | * supported. */ |
525 | OPENSSL_assert(0); | 512 | OPENSSL_assert(0); |
526 | if (md_out_size) | 513 | if (md_out_size) |
527 | *md_out_size = -1; | 514 | *md_out_size = -1; |
528 | return; | 515 | return; |
529 | } | 516 | } |
530 | 517 | ||
531 | OPENSSL_assert(md_length_size <= MAX_HASH_BIT_COUNT_BYTES); | 518 | OPENSSL_assert(md_length_size <= MAX_HASH_BIT_COUNT_BYTES); |
532 | OPENSSL_assert(md_block_size <= MAX_HASH_BLOCK_SIZE); | 519 | OPENSSL_assert(md_block_size <= MAX_HASH_BLOCK_SIZE); |
533 | OPENSSL_assert(md_size <= EVP_MAX_MD_SIZE); | 520 | OPENSSL_assert(md_size <= EVP_MAX_MD_SIZE); |
534 | 521 | ||
535 | header_length = 13; | 522 | header_length = 13; |
536 | if (is_sslv3) | 523 | if (is_sslv3) { |
537 | { | 524 | header_length = mac_secret_length + sslv3_pad_length + |
538 | header_length = | 525 | 8 /* sequence number */ + |
539 | mac_secret_length + | 526 | 1 /* record type */ + |
540 | sslv3_pad_length + | 527 | 2 /* record length */; |
541 | 8 /* sequence number */ + | 528 | } |
542 | 1 /* record type */ + | ||
543 | 2 /* record length */; | ||
544 | } | ||
545 | 529 | ||
546 | /* variance_blocks is the number of blocks of the hash that we have to | 530 | /* variance_blocks is the number of blocks of the hash that we have to |
547 | * calculate in constant time because they could be altered by the | 531 | * calculate in constant time because they could be altered by the |
@@ -597,15 +581,13 @@ void ssl3_cbc_digest_record( | |||
597 | 581 | ||
598 | /* For SSLv3, if we're going to have any starting blocks then we need | 582 | /* For SSLv3, if we're going to have any starting blocks then we need |
599 | * at least two because the header is larger than a single block. */ | 583 | * at least two because the header is larger than a single block. */ |
600 | if (num_blocks > variance_blocks + (is_sslv3 ? 1 : 0)) | 584 | if (num_blocks > variance_blocks + (is_sslv3 ? 1 : 0)) { |
601 | { | ||
602 | num_starting_blocks = num_blocks - variance_blocks; | 585 | num_starting_blocks = num_blocks - variance_blocks; |
603 | k = md_block_size*num_starting_blocks; | 586 | k = md_block_size*num_starting_blocks; |
604 | } | 587 | } |
605 | 588 | ||
606 | bits = 8*mac_end_offset; | 589 | bits = 8*mac_end_offset; |
607 | if (!is_sslv3) | 590 | if (!is_sslv3) { |
608 | { | ||
609 | /* Compute the initial HMAC block. For SSLv3, the padding and | 591 | /* Compute the initial HMAC block. For SSLv3, the padding and |
610 | * secret bytes are included in |header| because they take more | 592 | * secret bytes are included in |header| because they take more |
611 | * than a single block. */ | 593 | * than a single block. */ |
@@ -617,51 +599,44 @@ void ssl3_cbc_digest_record( | |||
617 | hmac_pad[i] ^= 0x36; | 599 | hmac_pad[i] ^= 0x36; |
618 | 600 | ||
619 | md_transform(md_state.c, hmac_pad); | 601 | md_transform(md_state.c, hmac_pad); |
620 | } | 602 | } |
621 | 603 | ||
622 | if (length_is_big_endian) | 604 | if (length_is_big_endian) { |
623 | { | 605 | memset(length_bytes, 0, md_length_size - 4); |
624 | memset(length_bytes,0,md_length_size-4); | 606 | length_bytes[md_length_size - 4] = (unsigned char)(bits >> 24); |
625 | length_bytes[md_length_size-4] = (unsigned char)(bits>>24); | 607 | length_bytes[md_length_size - 3] = (unsigned char)(bits >> 16); |
626 | length_bytes[md_length_size-3] = (unsigned char)(bits>>16); | 608 | length_bytes[md_length_size - 2] = (unsigned char)(bits >> 8); |
627 | length_bytes[md_length_size-2] = (unsigned char)(bits>>8); | 609 | length_bytes[md_length_size - 1] = (unsigned char)bits; |
628 | length_bytes[md_length_size-1] = (unsigned char)bits; | 610 | } else { |
629 | } | 611 | memset(length_bytes, 0, md_length_size); |
630 | else | 612 | length_bytes[md_length_size - 5] = (unsigned char)(bits >> 24); |
631 | { | 613 | length_bytes[md_length_size - 6] = (unsigned char)(bits >> 16); |
632 | memset(length_bytes,0,md_length_size); | 614 | length_bytes[md_length_size - 7] = (unsigned char)(bits >> 8); |
633 | length_bytes[md_length_size-5] = (unsigned char)(bits>>24); | 615 | length_bytes[md_length_size - 8] = (unsigned char)bits; |
634 | length_bytes[md_length_size-6] = (unsigned char)(bits>>16); | 616 | } |
635 | length_bytes[md_length_size-7] = (unsigned char)(bits>>8); | ||
636 | length_bytes[md_length_size-8] = (unsigned char)bits; | ||
637 | } | ||
638 | 617 | ||
639 | if (k > 0) | 618 | if (k > 0) { |
640 | { | 619 | if (is_sslv3) { |
641 | if (is_sslv3) | ||
642 | { | ||
643 | /* The SSLv3 header is larger than a single block. | 620 | /* The SSLv3 header is larger than a single block. |
644 | * overhang is the number of bytes beyond a single | 621 | * overhang is the number of bytes beyond a single |
645 | * block that the header consumes: either 7 bytes | 622 | * block that the header consumes: either 7 bytes |
646 | * (SHA1) or 11 bytes (MD5). */ | 623 | * (SHA1) or 11 bytes (MD5). */ |
647 | unsigned overhang = header_length-md_block_size; | 624 | unsigned overhang = header_length - md_block_size; |
648 | md_transform(md_state.c, header); | 625 | md_transform(md_state.c, header); |
649 | memcpy(first_block, header + md_block_size, overhang); | 626 | memcpy(first_block, header + md_block_size, overhang); |
650 | memcpy(first_block + overhang, data, md_block_size-overhang); | 627 | memcpy(first_block + overhang, data, md_block_size - overhang); |
651 | md_transform(md_state.c, first_block); | 628 | md_transform(md_state.c, first_block); |
652 | for (i = 1; i < k/md_block_size - 1; i++) | 629 | for (i = 1; i < k/md_block_size - 1; i++) |
653 | md_transform(md_state.c, data + md_block_size*i - overhang); | 630 | md_transform(md_state.c, data + md_block_size*i - overhang); |
654 | } | 631 | } else { |
655 | else | ||
656 | { | ||
657 | /* k is a multiple of md_block_size. */ | 632 | /* k is a multiple of md_block_size. */ |
658 | memcpy(first_block, header, 13); | 633 | memcpy(first_block, header, 13); |
659 | memcpy(first_block+13, data, md_block_size-13); | 634 | memcpy(first_block + 13, data, md_block_size - 13); |
660 | md_transform(md_state.c, first_block); | 635 | md_transform(md_state.c, first_block); |
661 | for (i = 1; i < k/md_block_size; i++) | 636 | for (i = 1; i < k/md_block_size; i++) |
662 | md_transform(md_state.c, data + md_block_size*i - 13); | 637 | md_transform(md_state.c, data + md_block_size*i - 13); |
663 | } | ||
664 | } | 638 | } |
639 | } | ||
665 | 640 | ||
666 | memset(mac_out, 0, sizeof(mac_out)); | 641 | memset(mac_out, 0, sizeof(mac_out)); |
667 | 642 | ||
@@ -669,22 +644,20 @@ void ssl3_cbc_digest_record( | |||
669 | * it in constant time. If the |i==index_a| then we'll include the 0x80 | 644 | * it in constant time. If the |i==index_a| then we'll include the 0x80 |
670 | * bytes and zero pad etc. For each block we selectively copy it, in | 645 | * bytes and zero pad etc. For each block we selectively copy it, in |
671 | * constant time, to |mac_out|. */ | 646 | * constant time, to |mac_out|. */ |
672 | for (i = num_starting_blocks; i <= num_starting_blocks+variance_blocks; i++) | 647 | for (i = num_starting_blocks; i <= num_starting_blocks + variance_blocks; i++) { |
673 | { | ||
674 | unsigned char block[MAX_HASH_BLOCK_SIZE]; | 648 | unsigned char block[MAX_HASH_BLOCK_SIZE]; |
675 | unsigned char is_block_a = constant_time_eq_8(i, index_a); | 649 | unsigned char is_block_a = constant_time_eq_8(i, index_a); |
676 | unsigned char is_block_b = constant_time_eq_8(i, index_b); | 650 | unsigned char is_block_b = constant_time_eq_8(i, index_b); |
677 | for (j = 0; j < md_block_size; j++) | 651 | for (j = 0; j < md_block_size; j++) { |
678 | { | ||
679 | unsigned char b = 0, is_past_c, is_past_cp1; | 652 | unsigned char b = 0, is_past_c, is_past_cp1; |
680 | if (k < header_length) | 653 | if (k < header_length) |
681 | b = header[k]; | 654 | b = header[k]; |
682 | else if (k < data_plus_mac_plus_padding_size + header_length) | 655 | else if (k < data_plus_mac_plus_padding_size + header_length) |
683 | b = data[k-header_length]; | 656 | b = data[k - header_length]; |
684 | k++; | 657 | k++; |
685 | 658 | ||
686 | is_past_c = is_block_a & constant_time_ge(j, c); | 659 | is_past_c = is_block_a & constant_time_ge(j, c); |
687 | is_past_cp1 = is_block_a & constant_time_ge(j, c+1); | 660 | is_past_cp1 = is_block_a & constant_time_ge(j, c + 1); |
688 | /* If this is the block containing the end of the | 661 | /* If this is the block containing the end of the |
689 | * application data, and we are at the offset for the | 662 | * application data, and we are at the offset for the |
690 | * 0x80 value, then overwrite b with 0x80. */ | 663 | * 0x80 value, then overwrite b with 0x80. */ |
@@ -701,46 +674,42 @@ void ssl3_cbc_digest_record( | |||
701 | 674 | ||
702 | /* The final bytes of one of the blocks contains the | 675 | /* The final bytes of one of the blocks contains the |
703 | * length. */ | 676 | * length. */ |
704 | if (j >= md_block_size - md_length_size) | 677 | if (j >= md_block_size - md_length_size) { |
705 | { | ||
706 | /* If this is index_b, write a length byte. */ | 678 | /* If this is index_b, write a length byte. */ |
707 | b = (b&~is_block_b) | (is_block_b&length_bytes[j-(md_block_size-md_length_size)]); | 679 | b = (b&~is_block_b) | (is_block_b&length_bytes[j - (md_block_size - md_length_size)]); |
708 | } | ||
709 | block[j] = b; | ||
710 | } | 680 | } |
681 | block[j] = b; | ||
682 | } | ||
711 | 683 | ||
712 | md_transform(md_state.c, block); | 684 | md_transform(md_state.c, block); |
713 | md_final_raw(md_state.c, block); | 685 | md_final_raw(md_state.c, block); |
714 | /* If this is index_b, copy the hash value to |mac_out|. */ | 686 | /* If this is index_b, copy the hash value to |mac_out|. */ |
715 | for (j = 0; j < md_size; j++) | 687 | for (j = 0; j < md_size; j++) |
716 | mac_out[j] |= block[j]&is_block_b; | 688 | mac_out[j] |= block[j]&is_block_b; |
717 | } | 689 | } |
718 | 690 | ||
719 | EVP_MD_CTX_init(&md_ctx); | 691 | EVP_MD_CTX_init(&md_ctx); |
720 | EVP_DigestInit_ex(&md_ctx, ctx->digest, NULL /* engine */); | 692 | EVP_DigestInit_ex(&md_ctx, ctx->digest, NULL /* engine */); |
721 | if (is_sslv3) | 693 | if (is_sslv3) { |
722 | { | ||
723 | /* We repurpose |hmac_pad| to contain the SSLv3 pad2 block. */ | 694 | /* We repurpose |hmac_pad| to contain the SSLv3 pad2 block. */ |
724 | memset(hmac_pad, 0x5c, sslv3_pad_length); | 695 | memset(hmac_pad, 0x5c, sslv3_pad_length); |
725 | 696 | ||
726 | EVP_DigestUpdate(&md_ctx, mac_secret, mac_secret_length); | 697 | EVP_DigestUpdate(&md_ctx, mac_secret, mac_secret_length); |
727 | EVP_DigestUpdate(&md_ctx, hmac_pad, sslv3_pad_length); | 698 | EVP_DigestUpdate(&md_ctx, hmac_pad, sslv3_pad_length); |
728 | EVP_DigestUpdate(&md_ctx, mac_out, md_size); | 699 | EVP_DigestUpdate(&md_ctx, mac_out, md_size); |
729 | } | 700 | } else { |
730 | else | ||
731 | { | ||
732 | /* Complete the HMAC in the standard manner. */ | 701 | /* Complete the HMAC in the standard manner. */ |
733 | for (i = 0; i < md_block_size; i++) | 702 | for (i = 0; i < md_block_size; i++) |
734 | hmac_pad[i] ^= 0x6a; | 703 | hmac_pad[i] ^= 0x6a; |
735 | 704 | ||
736 | EVP_DigestUpdate(&md_ctx, hmac_pad, md_block_size); | 705 | EVP_DigestUpdate(&md_ctx, hmac_pad, md_block_size); |
737 | EVP_DigestUpdate(&md_ctx, mac_out, md_size); | 706 | EVP_DigestUpdate(&md_ctx, mac_out, md_size); |
738 | } | 707 | } |
739 | EVP_DigestFinal(&md_ctx, md_out, &md_out_size_u); | 708 | EVP_DigestFinal(&md_ctx, md_out, &md_out_size_u); |
740 | if (md_out_size) | 709 | if (md_out_size) |
741 | *md_out_size = md_out_size_u; | 710 | *md_out_size = md_out_size_u; |
742 | EVP_MD_CTX_cleanup(&md_ctx); | 711 | EVP_MD_CTX_cleanup(&md_ctx); |
743 | } | 712 | } |
744 | 713 | ||
745 | #ifdef OPENSSL_FIPS | 714 | #ifdef OPENSSL_FIPS |
746 | 715 | ||
@@ -749,10 +718,10 @@ void ssl3_cbc_digest_record( | |||
749 | * by digesting additional data. | 718 | * by digesting additional data. |
750 | */ | 719 | */ |
751 | 720 | ||
752 | void tls_fips_digest_extra( | 721 | void tls_fips_digest_extra(const EVP_CIPHER_CTX *cipher_ctx, |
753 | const EVP_CIPHER_CTX *cipher_ctx, EVP_MD_CTX *mac_ctx, | 722 | EVP_MD_CTX *mac_ctx, const unsigned char *data, size_t data_len, |
754 | const unsigned char *data, size_t data_len, size_t orig_len) | 723 | size_t orig_len) |
755 | { | 724 | { |
756 | size_t block_size, digest_pad, blocks_data, blocks_orig; | 725 | size_t block_size, digest_pad, blocks_data, blocks_orig; |
757 | if (EVP_CIPHER_CTX_mode(cipher_ctx) != EVP_CIPH_CBC_MODE) | 726 | if (EVP_CIPHER_CTX_mode(cipher_ctx) != EVP_CIPH_CBC_MODE) |
758 | return; | 727 | return; |
@@ -785,6 +754,6 @@ void tls_fips_digest_extra( | |||
785 | * length TLS buffer. | 754 | * length TLS buffer. |
786 | */ | 755 | */ |
787 | EVP_DigestSignUpdate(mac_ctx, data, | 756 | EVP_DigestSignUpdate(mac_ctx, data, |
788 | (blocks_orig - blocks_data + 1) * block_size); | 757 | (blocks_orig - blocks_data + 1) * block_size); |
789 | } | 758 | } |
790 | #endif | 759 | #endif |
diff --git a/src/lib/libssl/src/ssl/s3_enc.c b/src/lib/libssl/src/ssl/s3_enc.c index e3cd4f062c..4536ca5995 100644 --- a/src/lib/libssl/src/ssl/s3_enc.c +++ b/src/lib/libssl/src/ssl/s3_enc.c | |||
@@ -140,85 +140,87 @@ | |||
140 | #include <openssl/evp.h> | 140 | #include <openssl/evp.h> |
141 | #include <openssl/md5.h> | 141 | #include <openssl/md5.h> |
142 | 142 | ||
143 | static unsigned char ssl3_pad_1[48]={ | 143 | static unsigned char ssl3_pad_1[48] = { |
144 | 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, | 144 | 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, |
145 | 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, | 145 | 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, |
146 | 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, | 146 | 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, |
147 | 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, | 147 | 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, |
148 | 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, | 148 | 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, |
149 | 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36 }; | 149 | 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36 |
150 | 150 | }; | |
151 | static unsigned char ssl3_pad_2[48]={ | 151 | |
152 | 0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,0x5c, | 152 | static unsigned char ssl3_pad_2[48] = { |
153 | 0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,0x5c, | 153 | 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, |
154 | 0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,0x5c, | 154 | 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, |
155 | 0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,0x5c, | 155 | 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, |
156 | 0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,0x5c, | 156 | 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, |
157 | 0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,0x5c }; | 157 | 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, |
158 | static int ssl3_handshake_mac(SSL *s, int md_nid, | 158 | 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c |
159 | const char *sender, int len, unsigned char *p); | 159 | }; |
160 | static int ssl3_generate_key_block(SSL *s, unsigned char *km, int num) | 160 | |
161 | { | 161 | static int ssl3_handshake_mac(SSL *s, int md_nid, const char *sender, |
162 | int len, unsigned char *p); | ||
163 | |||
164 | static int | ||
165 | ssl3_generate_key_block(SSL *s, unsigned char *km, int num) | ||
166 | { | ||
162 | EVP_MD_CTX m5; | 167 | EVP_MD_CTX m5; |
163 | EVP_MD_CTX s1; | 168 | EVP_MD_CTX s1; |
164 | unsigned char buf[16],smd[SHA_DIGEST_LENGTH]; | 169 | unsigned char buf[16], smd[SHA_DIGEST_LENGTH]; |
165 | unsigned char c='A'; | 170 | unsigned char c = 'A'; |
166 | unsigned int i,j,k; | 171 | unsigned int i, j, k; |
167 | 172 | ||
168 | #ifdef CHARSET_EBCDIC | 173 | #ifdef CHARSET_EBCDIC |
169 | c = os_toascii[c]; /*'A' in ASCII */ | 174 | c = os_toascii[c]; /*'A' in ASCII */ |
170 | #endif | 175 | #endif |
171 | k=0; | 176 | k = 0; |
172 | EVP_MD_CTX_init(&m5); | 177 | EVP_MD_CTX_init(&m5); |
173 | EVP_MD_CTX_set_flags(&m5, EVP_MD_CTX_FLAG_NON_FIPS_ALLOW); | 178 | EVP_MD_CTX_set_flags(&m5, EVP_MD_CTX_FLAG_NON_FIPS_ALLOW); |
174 | EVP_MD_CTX_init(&s1); | 179 | EVP_MD_CTX_init(&s1); |
175 | for (i=0; (int)i<num; i+=MD5_DIGEST_LENGTH) | 180 | for (i = 0; (int)i < num; i += MD5_DIGEST_LENGTH) { |
176 | { | ||
177 | k++; | 181 | k++; |
178 | if (k > sizeof buf) | 182 | if (k > sizeof buf) { |
179 | { | ||
180 | /* bug: 'buf' is too small for this ciphersuite */ | 183 | /* bug: 'buf' is too small for this ciphersuite */ |
181 | SSLerr(SSL_F_SSL3_GENERATE_KEY_BLOCK, ERR_R_INTERNAL_ERROR); | 184 | SSLerr(SSL_F_SSL3_GENERATE_KEY_BLOCK, ERR_R_INTERNAL_ERROR); |
182 | return 0; | 185 | return 0; |
183 | } | 186 | } |
184 | 187 | ||
185 | for (j=0; j<k; j++) | 188 | for (j = 0; j < k; j++) |
186 | buf[j]=c; | 189 | buf[j] = c; |
187 | c++; | 190 | c++; |
188 | EVP_DigestInit_ex(&s1,EVP_sha1(), NULL); | 191 | EVP_DigestInit_ex(&s1, EVP_sha1(), NULL); |
189 | EVP_DigestUpdate(&s1,buf,k); | 192 | EVP_DigestUpdate(&s1, buf, k); |
190 | EVP_DigestUpdate(&s1,s->session->master_key, | 193 | EVP_DigestUpdate(&s1, s->session->master_key, |
191 | s->session->master_key_length); | 194 | s->session->master_key_length); |
192 | EVP_DigestUpdate(&s1,s->s3->server_random,SSL3_RANDOM_SIZE); | 195 | EVP_DigestUpdate(&s1, s->s3->server_random, SSL3_RANDOM_SIZE); |
193 | EVP_DigestUpdate(&s1,s->s3->client_random,SSL3_RANDOM_SIZE); | 196 | EVP_DigestUpdate(&s1, s->s3->client_random, SSL3_RANDOM_SIZE); |
194 | EVP_DigestFinal_ex(&s1,smd,NULL); | 197 | EVP_DigestFinal_ex(&s1, smd, NULL); |
195 | |||
196 | EVP_DigestInit_ex(&m5,EVP_md5(), NULL); | ||
197 | EVP_DigestUpdate(&m5,s->session->master_key, | ||
198 | s->session->master_key_length); | ||
199 | EVP_DigestUpdate(&m5,smd,SHA_DIGEST_LENGTH); | ||
200 | if ((int)(i+MD5_DIGEST_LENGTH) > num) | ||
201 | { | ||
202 | EVP_DigestFinal_ex(&m5,smd,NULL); | ||
203 | memcpy(km,smd,(num-i)); | ||
204 | } | ||
205 | else | ||
206 | EVP_DigestFinal_ex(&m5,km,NULL); | ||
207 | 198 | ||
208 | km+=MD5_DIGEST_LENGTH; | 199 | EVP_DigestInit_ex(&m5, EVP_md5(), NULL); |
209 | } | 200 | EVP_DigestUpdate(&m5, s->session->master_key, |
210 | OPENSSL_cleanse(smd,SHA_DIGEST_LENGTH); | 201 | s->session->master_key_length); |
202 | EVP_DigestUpdate(&m5, smd, SHA_DIGEST_LENGTH); | ||
203 | if ((int)(i + MD5_DIGEST_LENGTH) > num) { | ||
204 | EVP_DigestFinal_ex(&m5, smd, NULL); | ||
205 | memcpy(km, smd,(num - i)); | ||
206 | } else | ||
207 | EVP_DigestFinal_ex(&m5, km, NULL); | ||
208 | |||
209 | km += MD5_DIGEST_LENGTH; | ||
210 | } | ||
211 | OPENSSL_cleanse(smd, SHA_DIGEST_LENGTH); | ||
211 | EVP_MD_CTX_cleanup(&m5); | 212 | EVP_MD_CTX_cleanup(&m5); |
212 | EVP_MD_CTX_cleanup(&s1); | 213 | EVP_MD_CTX_cleanup(&s1); |
213 | return 1; | 214 | return 1; |
214 | } | 215 | } |
215 | 216 | ||
216 | int ssl3_change_cipher_state(SSL *s, int which) | 217 | int |
217 | { | 218 | ssl3_change_cipher_state(SSL *s, int which) |
218 | unsigned char *p,*mac_secret; | 219 | { |
220 | unsigned char *p, *mac_secret; | ||
219 | unsigned char exp_key[EVP_MAX_KEY_LENGTH]; | 221 | unsigned char exp_key[EVP_MAX_KEY_LENGTH]; |
220 | unsigned char exp_iv[EVP_MAX_IV_LENGTH]; | 222 | unsigned char exp_iv[EVP_MAX_IV_LENGTH]; |
221 | unsigned char *ms,*key,*iv,*er1,*er2; | 223 | unsigned char *ms, *key, *iv, *er1, *er2; |
222 | EVP_CIPHER_CTX *dd; | 224 | EVP_CIPHER_CTX *dd; |
223 | const EVP_CIPHER *c; | 225 | const EVP_CIPHER *c; |
224 | #ifndef OPENSSL_NO_COMP | 226 | #ifndef OPENSSL_NO_COMP |
@@ -226,167 +228,159 @@ int ssl3_change_cipher_state(SSL *s, int which) | |||
226 | #endif | 228 | #endif |
227 | const EVP_MD *m; | 229 | const EVP_MD *m; |
228 | EVP_MD_CTX md; | 230 | EVP_MD_CTX md; |
229 | int is_exp,n,i,j,k,cl; | 231 | int is_exp, n, i, j, k, cl; |
230 | int reuse_dd = 0; | 232 | int reuse_dd = 0; |
231 | 233 | ||
232 | is_exp=SSL_C_IS_EXPORT(s->s3->tmp.new_cipher); | 234 | is_exp = SSL_C_IS_EXPORT(s->s3->tmp.new_cipher); |
233 | c=s->s3->tmp.new_sym_enc; | 235 | c = s->s3->tmp.new_sym_enc; |
234 | m=s->s3->tmp.new_hash; | 236 | m = s->s3->tmp.new_hash; |
235 | /* m == NULL will lead to a crash later */ | 237 | /* m == NULL will lead to a crash later */ |
236 | OPENSSL_assert(m); | 238 | OPENSSL_assert(m); |
237 | #ifndef OPENSSL_NO_COMP | 239 | #ifndef OPENSSL_NO_COMP |
238 | if (s->s3->tmp.new_compression == NULL) | 240 | if (s->s3->tmp.new_compression == NULL) |
239 | comp=NULL; | 241 | comp = NULL; |
240 | else | 242 | else |
241 | comp=s->s3->tmp.new_compression->method; | 243 | comp = s->s3->tmp.new_compression->method; |
242 | #endif | 244 | #endif |
243 | 245 | ||
244 | if (which & SSL3_CC_READ) | 246 | if (which & SSL3_CC_READ) { |
245 | { | ||
246 | if (s->enc_read_ctx != NULL) | 247 | if (s->enc_read_ctx != NULL) |
247 | reuse_dd = 1; | 248 | reuse_dd = 1; |
248 | else if ((s->enc_read_ctx=OPENSSL_malloc(sizeof(EVP_CIPHER_CTX))) == NULL) | 249 | else if ((s->enc_read_ctx = OPENSSL_malloc(sizeof(EVP_CIPHER_CTX))) == NULL) |
249 | goto err; | 250 | goto err; |
250 | else | 251 | else |
251 | /* make sure it's intialized in case we exit later with an error */ | 252 | /* make sure it's intialized in case we exit later with an error */ |
252 | EVP_CIPHER_CTX_init(s->enc_read_ctx); | 253 | EVP_CIPHER_CTX_init(s->enc_read_ctx); |
253 | dd= s->enc_read_ctx; | 254 | dd = s->enc_read_ctx; |
254 | 255 | ||
255 | ssl_replace_hash(&s->read_hash,m); | 256 | ssl_replace_hash(&s->read_hash, m); |
256 | #ifndef OPENSSL_NO_COMP | 257 | #ifndef OPENSSL_NO_COMP |
257 | /* COMPRESS */ | 258 | /* COMPRESS */ |
258 | if (s->expand != NULL) | 259 | if (s->expand != NULL) { |
259 | { | ||
260 | COMP_CTX_free(s->expand); | 260 | COMP_CTX_free(s->expand); |
261 | s->expand=NULL; | 261 | s->expand = NULL; |
262 | } | 262 | } |
263 | if (comp != NULL) | 263 | if (comp != NULL) { |
264 | { | 264 | s->expand = COMP_CTX_new(comp); |
265 | s->expand=COMP_CTX_new(comp); | 265 | if (s->expand == NULL) { |
266 | if (s->expand == NULL) | 266 | SSLerr(SSL_F_SSL3_CHANGE_CIPHER_STATE, SSL_R_COMPRESSION_LIBRARY_ERROR); |
267 | { | ||
268 | SSLerr(SSL_F_SSL3_CHANGE_CIPHER_STATE,SSL_R_COMPRESSION_LIBRARY_ERROR); | ||
269 | goto err2; | 267 | goto err2; |
270 | } | 268 | } |
271 | if (s->s3->rrec.comp == NULL) | 269 | if (s->s3->rrec.comp == NULL) |
272 | s->s3->rrec.comp=(unsigned char *) | 270 | s->s3->rrec.comp = (unsigned char *) |
273 | OPENSSL_malloc(SSL3_RT_MAX_PLAIN_LENGTH); | 271 | OPENSSL_malloc(SSL3_RT_MAX_PLAIN_LENGTH); |
274 | if (s->s3->rrec.comp == NULL) | 272 | if (s->s3->rrec.comp == NULL) |
275 | goto err; | 273 | goto err; |
276 | } | ||
277 | #endif | ||
278 | memset(&(s->s3->read_sequence[0]),0,8); | ||
279 | mac_secret= &(s->s3->read_mac_secret[0]); | ||
280 | } | 274 | } |
281 | else | 275 | #endif |
282 | { | 276 | memset(&(s->s3->read_sequence[0]), 0, 8); |
277 | mac_secret = &(s->s3->read_mac_secret[0]); | ||
278 | } else { | ||
283 | if (s->enc_write_ctx != NULL) | 279 | if (s->enc_write_ctx != NULL) |
284 | reuse_dd = 1; | 280 | reuse_dd = 1; |
285 | else if ((s->enc_write_ctx=OPENSSL_malloc(sizeof(EVP_CIPHER_CTX))) == NULL) | 281 | else if ((s->enc_write_ctx = OPENSSL_malloc(sizeof(EVP_CIPHER_CTX))) == NULL) |
286 | goto err; | 282 | goto err; |
287 | else | 283 | else |
288 | /* make sure it's intialized in case we exit later with an error */ | 284 | /* make sure it's intialized in case we exit later with an error */ |
289 | EVP_CIPHER_CTX_init(s->enc_write_ctx); | 285 | EVP_CIPHER_CTX_init(s->enc_write_ctx); |
290 | dd= s->enc_write_ctx; | 286 | dd = s->enc_write_ctx; |
291 | ssl_replace_hash(&s->write_hash,m); | 287 | ssl_replace_hash(&s->write_hash, m); |
292 | #ifndef OPENSSL_NO_COMP | 288 | #ifndef OPENSSL_NO_COMP |
293 | /* COMPRESS */ | 289 | /* COMPRESS */ |
294 | if (s->compress != NULL) | 290 | if (s->compress != NULL) { |
295 | { | ||
296 | COMP_CTX_free(s->compress); | 291 | COMP_CTX_free(s->compress); |
297 | s->compress=NULL; | 292 | s->compress = NULL; |
298 | } | 293 | } |
299 | if (comp != NULL) | 294 | if (comp != NULL) { |
300 | { | 295 | s->compress = COMP_CTX_new(comp); |
301 | s->compress=COMP_CTX_new(comp); | 296 | if (s->compress == NULL) { |
302 | if (s->compress == NULL) | 297 | SSLerr(SSL_F_SSL3_CHANGE_CIPHER_STATE, SSL_R_COMPRESSION_LIBRARY_ERROR); |
303 | { | ||
304 | SSLerr(SSL_F_SSL3_CHANGE_CIPHER_STATE,SSL_R_COMPRESSION_LIBRARY_ERROR); | ||
305 | goto err2; | 298 | goto err2; |
306 | } | ||
307 | } | 299 | } |
308 | #endif | ||
309 | memset(&(s->s3->write_sequence[0]),0,8); | ||
310 | mac_secret= &(s->s3->write_mac_secret[0]); | ||
311 | } | 300 | } |
301 | #endif | ||
302 | memset(&(s->s3->write_sequence[0]), 0, 8); | ||
303 | mac_secret = &(s->s3->write_mac_secret[0]); | ||
304 | } | ||
312 | 305 | ||
313 | if (reuse_dd) | 306 | if (reuse_dd) |
314 | EVP_CIPHER_CTX_cleanup(dd); | 307 | EVP_CIPHER_CTX_cleanup(dd); |
315 | 308 | ||
316 | p=s->s3->tmp.key_block; | 309 | p = s->s3->tmp.key_block; |
317 | i=EVP_MD_size(m); | 310 | i = EVP_MD_size(m); |
318 | if (i < 0) | 311 | if (i < 0) |
319 | goto err2; | 312 | goto err2; |
320 | cl=EVP_CIPHER_key_length(c); | 313 | cl = EVP_CIPHER_key_length(c); |
321 | j=is_exp ? (cl < SSL_C_EXPORT_KEYLENGTH(s->s3->tmp.new_cipher) ? | 314 | j = is_exp ? (cl < SSL_C_EXPORT_KEYLENGTH(s->s3->tmp.new_cipher) ? |
322 | cl : SSL_C_EXPORT_KEYLENGTH(s->s3->tmp.new_cipher)) : cl; | 315 | cl : SSL_C_EXPORT_KEYLENGTH(s->s3->tmp.new_cipher)) : cl; |
323 | /* Was j=(is_exp)?5:EVP_CIPHER_key_length(c); */ | 316 | /* Was j=(is_exp)?5:EVP_CIPHER_key_length(c); */ |
324 | k=EVP_CIPHER_iv_length(c); | 317 | k = EVP_CIPHER_iv_length(c); |
325 | if ( (which == SSL3_CHANGE_CIPHER_CLIENT_WRITE) || | 318 | if ((which == SSL3_CHANGE_CIPHER_CLIENT_WRITE) || |
326 | (which == SSL3_CHANGE_CIPHER_SERVER_READ)) | 319 | (which == SSL3_CHANGE_CIPHER_SERVER_READ)) { |
327 | { | 320 | ms = &(p[0]); |
328 | ms= &(p[ 0]); n=i+i; | 321 | n = i + i; |
329 | key= &(p[ n]); n+=j+j; | 322 | key = &(p[n]); |
330 | iv= &(p[ n]); n+=k+k; | 323 | n += j + j; |
331 | er1= &(s->s3->client_random[0]); | 324 | iv = &(p[n]); |
332 | er2= &(s->s3->server_random[0]); | 325 | n += k + k; |
333 | } | 326 | er1 = &(s->s3->client_random[0]); |
334 | else | 327 | er2 = &(s->s3->server_random[0]); |
335 | { | 328 | } else { |
336 | n=i; | 329 | n = i; |
337 | ms= &(p[ n]); n+=i+j; | 330 | ms = &(p[n]); |
338 | key= &(p[ n]); n+=j+k; | 331 | n += i + j; |
339 | iv= &(p[ n]); n+=k; | 332 | key = &(p[n]); |
340 | er1= &(s->s3->server_random[0]); | 333 | n += j + k; |
341 | er2= &(s->s3->client_random[0]); | 334 | iv = &(p[n]); |
342 | } | 335 | n += k; |
336 | er1 = &(s->s3->server_random[0]); | ||
337 | er2 = &(s->s3->client_random[0]); | ||
338 | } | ||
343 | 339 | ||
344 | if (n > s->s3->tmp.key_block_length) | 340 | if (n > s->s3->tmp.key_block_length) { |
345 | { | 341 | SSLerr(SSL_F_SSL3_CHANGE_CIPHER_STATE, ERR_R_INTERNAL_ERROR); |
346 | SSLerr(SSL_F_SSL3_CHANGE_CIPHER_STATE,ERR_R_INTERNAL_ERROR); | ||
347 | goto err2; | 342 | goto err2; |
348 | } | 343 | } |
349 | 344 | ||
350 | EVP_MD_CTX_init(&md); | 345 | EVP_MD_CTX_init(&md); |
351 | memcpy(mac_secret,ms,i); | 346 | memcpy(mac_secret, ms, i); |
352 | if (is_exp) | 347 | if (is_exp) { |
353 | { | ||
354 | /* In here I set both the read and write key/iv to the | 348 | /* In here I set both the read and write key/iv to the |
355 | * same value since only the correct one will be used :-). | 349 | * same value since only the correct one will be used :-). |
356 | */ | 350 | */ |
357 | EVP_DigestInit_ex(&md,EVP_md5(), NULL); | 351 | EVP_DigestInit_ex(&md, EVP_md5(), NULL); |
358 | EVP_DigestUpdate(&md,key,j); | 352 | EVP_DigestUpdate(&md, key, j); |
359 | EVP_DigestUpdate(&md,er1,SSL3_RANDOM_SIZE); | 353 | EVP_DigestUpdate(&md, er1, SSL3_RANDOM_SIZE); |
360 | EVP_DigestUpdate(&md,er2,SSL3_RANDOM_SIZE); | 354 | EVP_DigestUpdate(&md, er2, SSL3_RANDOM_SIZE); |
361 | EVP_DigestFinal_ex(&md,&(exp_key[0]),NULL); | 355 | EVP_DigestFinal_ex(&md, &(exp_key[0]), NULL); |
362 | key= &(exp_key[0]); | 356 | key = &(exp_key[0]); |
363 | 357 | ||
364 | if (k > 0) | 358 | if (k > 0) { |
365 | { | 359 | EVP_DigestInit_ex(&md, EVP_md5(), NULL); |
366 | EVP_DigestInit_ex(&md,EVP_md5(), NULL); | 360 | EVP_DigestUpdate(&md, er1, SSL3_RANDOM_SIZE); |
367 | EVP_DigestUpdate(&md,er1,SSL3_RANDOM_SIZE); | 361 | EVP_DigestUpdate(&md, er2, SSL3_RANDOM_SIZE); |
368 | EVP_DigestUpdate(&md,er2,SSL3_RANDOM_SIZE); | 362 | EVP_DigestFinal_ex(&md, &(exp_iv[0]), NULL); |
369 | EVP_DigestFinal_ex(&md,&(exp_iv[0]),NULL); | 363 | iv = &(exp_iv[0]); |
370 | iv= &(exp_iv[0]); | ||
371 | } | ||
372 | } | 364 | } |
365 | } | ||
373 | 366 | ||
374 | s->session->key_arg_length=0; | 367 | s->session->key_arg_length = 0; |
375 | 368 | ||
376 | EVP_CipherInit_ex(dd,c,NULL,key,iv,(which & SSL3_CC_WRITE)); | 369 | EVP_CipherInit_ex(dd, c, NULL, key, iv,(which & SSL3_CC_WRITE)); |
377 | 370 | ||
378 | OPENSSL_cleanse(&(exp_key[0]),sizeof(exp_key)); | 371 | OPENSSL_cleanse(&(exp_key[0]), sizeof(exp_key)); |
379 | OPENSSL_cleanse(&(exp_iv[0]),sizeof(exp_iv)); | 372 | OPENSSL_cleanse(&(exp_iv[0]), sizeof(exp_iv)); |
380 | EVP_MD_CTX_cleanup(&md); | 373 | EVP_MD_CTX_cleanup(&md); |
381 | return(1); | 374 | return (1); |
382 | err: | 375 | err: |
383 | SSLerr(SSL_F_SSL3_CHANGE_CIPHER_STATE,ERR_R_MALLOC_FAILURE); | 376 | SSLerr(SSL_F_SSL3_CHANGE_CIPHER_STATE, ERR_R_MALLOC_FAILURE); |
384 | err2: | 377 | err2: |
385 | return(0); | 378 | return (0); |
386 | } | 379 | } |
387 | 380 | ||
388 | int ssl3_setup_key_block(SSL *s) | 381 | int |
389 | { | 382 | ssl3_setup_key_block(SSL *s) |
383 | { | ||
390 | unsigned char *p; | 384 | unsigned char *p; |
391 | const EVP_CIPHER *c; | 385 | const EVP_CIPHER *c; |
392 | const EVP_MD *hash; | 386 | const EVP_MD *hash; |
@@ -395,76 +389,73 @@ int ssl3_setup_key_block(SSL *s) | |||
395 | SSL_COMP *comp; | 389 | SSL_COMP *comp; |
396 | 390 | ||
397 | if (s->s3->tmp.key_block_length != 0) | 391 | if (s->s3->tmp.key_block_length != 0) |
398 | return(1); | 392 | return (1); |
399 | 393 | ||
400 | if (!ssl_cipher_get_evp(s->session,&c,&hash,NULL,NULL,&comp)) | 394 | if (!ssl_cipher_get_evp(s->session, &c, &hash, NULL, NULL, &comp)) { |
401 | { | 395 | SSLerr(SSL_F_SSL3_SETUP_KEY_BLOCK, SSL_R_CIPHER_OR_HASH_UNAVAILABLE); |
402 | SSLerr(SSL_F_SSL3_SETUP_KEY_BLOCK,SSL_R_CIPHER_OR_HASH_UNAVAILABLE); | 396 | return (0); |
403 | return(0); | 397 | } |
404 | } | ||
405 | 398 | ||
406 | s->s3->tmp.new_sym_enc=c; | 399 | s->s3->tmp.new_sym_enc = c; |
407 | s->s3->tmp.new_hash=hash; | 400 | s->s3->tmp.new_hash = hash; |
408 | #ifdef OPENSSL_NO_COMP | 401 | #ifdef OPENSSL_NO_COMP |
409 | s->s3->tmp.new_compression=NULL; | 402 | s->s3->tmp.new_compression = NULL; |
410 | #else | 403 | #else |
411 | s->s3->tmp.new_compression=comp; | 404 | s->s3->tmp.new_compression = comp; |
412 | #endif | 405 | #endif |
413 | 406 | ||
414 | num=EVP_MD_size(hash); | 407 | num = EVP_MD_size(hash); |
415 | if (num < 0) | 408 | if (num < 0) |
416 | return 0; | 409 | return 0; |
417 | 410 | ||
418 | num=EVP_CIPHER_key_length(c)+num+EVP_CIPHER_iv_length(c); | 411 | num = EVP_CIPHER_key_length(c) + num + EVP_CIPHER_iv_length(c); |
419 | num*=2; | 412 | num *= 2; |
420 | 413 | ||
421 | ssl3_cleanup_key_block(s); | 414 | ssl3_cleanup_key_block(s); |
422 | 415 | ||
423 | if ((p=OPENSSL_malloc(num)) == NULL) | 416 | if ((p = OPENSSL_malloc(num)) == NULL) |
424 | goto err; | 417 | goto err; |
425 | 418 | ||
426 | s->s3->tmp.key_block_length=num; | 419 | s->s3->tmp.key_block_length = num; |
427 | s->s3->tmp.key_block=p; | 420 | s->s3->tmp.key_block = p; |
428 | 421 | ||
429 | ret = ssl3_generate_key_block(s,p,num); | 422 | ret = ssl3_generate_key_block(s, p, num); |
430 | 423 | ||
431 | if (!(s->options & SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS)) | 424 | if (!(s->options & SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS)) { |
432 | { | ||
433 | /* enable vulnerability countermeasure for CBC ciphers with | 425 | /* enable vulnerability countermeasure for CBC ciphers with |
434 | * known-IV problem (http://www.openssl.org/~bodo/tls-cbc.txt) | 426 | * known-IV problem (http://www.openssl.org/~bodo/tls-cbc.txt) |
435 | */ | 427 | */ |
436 | s->s3->need_empty_fragments = 1; | 428 | s->s3->need_empty_fragments = 1; |
437 | 429 | ||
438 | if (s->session->cipher != NULL) | 430 | if (s->session->cipher != NULL) { |
439 | { | ||
440 | if (s->session->cipher->algorithm_enc == SSL_eNULL) | 431 | if (s->session->cipher->algorithm_enc == SSL_eNULL) |
441 | s->s3->need_empty_fragments = 0; | 432 | s->s3->need_empty_fragments = 0; |
442 | 433 | ||
443 | #ifndef OPENSSL_NO_RC4 | 434 | #ifndef OPENSSL_NO_RC4 |
444 | if (s->session->cipher->algorithm_enc == SSL_RC4) | 435 | if (s->session->cipher->algorithm_enc == SSL_RC4) |
445 | s->s3->need_empty_fragments = 0; | 436 | s->s3->need_empty_fragments = 0; |
446 | #endif | 437 | #endif |
447 | } | ||
448 | } | 438 | } |
439 | } | ||
449 | 440 | ||
450 | return ret; | 441 | return ret; |
451 | |||
452 | err: | ||
453 | SSLerr(SSL_F_SSL3_SETUP_KEY_BLOCK,ERR_R_MALLOC_FAILURE); | ||
454 | return(0); | ||
455 | } | ||
456 | 442 | ||
457 | void ssl3_cleanup_key_block(SSL *s) | 443 | err: |
458 | { | 444 | SSLerr(SSL_F_SSL3_SETUP_KEY_BLOCK, ERR_R_MALLOC_FAILURE); |
459 | if (s->s3->tmp.key_block != NULL) | 445 | return (0); |
460 | { | 446 | } |
447 | |||
448 | void | ||
449 | ssl3_cleanup_key_block(SSL *s) | ||
450 | { | ||
451 | if (s->s3->tmp.key_block != NULL) { | ||
461 | OPENSSL_cleanse(s->s3->tmp.key_block, | 452 | OPENSSL_cleanse(s->s3->tmp.key_block, |
462 | s->s3->tmp.key_block_length); | 453 | s->s3->tmp.key_block_length); |
463 | OPENSSL_free(s->s3->tmp.key_block); | 454 | OPENSSL_free(s->s3->tmp.key_block); |
464 | s->s3->tmp.key_block=NULL; | 455 | s->s3->tmp.key_block = NULL; |
465 | } | ||
466 | s->s3->tmp.key_block_length=0; | ||
467 | } | 456 | } |
457 | s->s3->tmp.key_block_length = 0; | ||
458 | } | ||
468 | 459 | ||
469 | /* ssl3_enc encrypts/decrypts the record in |s->wrec| / |s->rrec|, respectively. | 460 | /* ssl3_enc encrypts/decrypts the record in |s->wrec| / |s->rrec|, respectively. |
470 | * | 461 | * |
@@ -475,118 +466,114 @@ void ssl3_cleanup_key_block(SSL *s) | |||
475 | * -1: if the record's padding is invalid or, if sending, an internal error | 466 | * -1: if the record's padding is invalid or, if sending, an internal error |
476 | * occured. | 467 | * occured. |
477 | */ | 468 | */ |
478 | int ssl3_enc(SSL *s, int send) | 469 | int |
479 | { | 470 | ssl3_enc(SSL *s, int send) |
471 | { | ||
480 | SSL3_RECORD *rec; | 472 | SSL3_RECORD *rec; |
481 | EVP_CIPHER_CTX *ds; | 473 | EVP_CIPHER_CTX *ds; |
482 | unsigned long l; | 474 | unsigned long l; |
483 | int bs,i,mac_size=0; | 475 | int bs, i, mac_size = 0; |
484 | const EVP_CIPHER *enc; | 476 | const EVP_CIPHER *enc; |
485 | 477 | ||
486 | if (send) | 478 | if (send) { |
487 | { | 479 | ds = s->enc_write_ctx; |
488 | ds=s->enc_write_ctx; | 480 | rec = &(s->s3->wrec); |
489 | rec= &(s->s3->wrec); | ||
490 | if (s->enc_write_ctx == NULL) | 481 | if (s->enc_write_ctx == NULL) |
491 | enc=NULL; | 482 | enc = NULL; |
492 | else | 483 | else |
493 | enc=EVP_CIPHER_CTX_cipher(s->enc_write_ctx); | 484 | enc = EVP_CIPHER_CTX_cipher(s->enc_write_ctx); |
494 | } | 485 | } else { |
495 | else | 486 | ds = s->enc_read_ctx; |
496 | { | 487 | rec = &(s->s3->rrec); |
497 | ds=s->enc_read_ctx; | ||
498 | rec= &(s->s3->rrec); | ||
499 | if (s->enc_read_ctx == NULL) | 488 | if (s->enc_read_ctx == NULL) |
500 | enc=NULL; | 489 | enc = NULL; |
501 | else | 490 | else |
502 | enc=EVP_CIPHER_CTX_cipher(s->enc_read_ctx); | 491 | enc = EVP_CIPHER_CTX_cipher(s->enc_read_ctx); |
503 | } | 492 | } |
504 | 493 | ||
505 | if ((s->session == NULL) || (ds == NULL) || | 494 | if ((s->session == NULL) || (ds == NULL) || |
506 | (enc == NULL)) | 495 | (enc == NULL)) { |
507 | { | 496 | memmove(rec->data, rec->input, rec->length); |
508 | memmove(rec->data,rec->input,rec->length); | 497 | rec->input = rec->data; |
509 | rec->input=rec->data; | 498 | } else { |
510 | } | 499 | l = rec->length; |
511 | else | 500 | bs = EVP_CIPHER_block_size(ds->cipher); |
512 | { | ||
513 | l=rec->length; | ||
514 | bs=EVP_CIPHER_block_size(ds->cipher); | ||
515 | 501 | ||
516 | /* COMPRESS */ | 502 | /* COMPRESS */ |
517 | 503 | ||
518 | if ((bs != 1) && send) | 504 | if ((bs != 1) && send) { |
519 | { | 505 | i = bs - ((int)l % bs); |
520 | i=bs-((int)l%bs); | ||
521 | 506 | ||
522 | /* we need to add 'i-1' padding bytes */ | 507 | /* we need to add 'i-1' padding bytes */ |
523 | l+=i; | 508 | l += i; |
524 | /* the last of these zero bytes will be overwritten | 509 | /* the last of these zero bytes will be overwritten |
525 | * with the padding length. */ | 510 | * with the padding length. */ |
526 | memset(&rec->input[rec->length], 0, i); | 511 | memset(&rec->input[rec->length], 0, i); |
527 | rec->length+=i; | 512 | rec->length += i; |
528 | rec->input[l-1]=(i-1); | 513 | rec->input[l - 1] = (i - 1); |
529 | } | 514 | } |
530 | 515 | ||
531 | if (!send) | 516 | if (!send) { |
532 | { | 517 | if (l == 0 || l % bs != 0) |
533 | if (l == 0 || l%bs != 0) | ||
534 | return 0; | 518 | return 0; |
535 | /* otherwise, rec->length >= bs */ | 519 | /* otherwise, rec->length >= bs */ |
536 | } | 520 | } |
537 | 521 | ||
538 | EVP_Cipher(ds,rec->data,rec->input,l); | 522 | EVP_Cipher(ds, rec->data, rec->input, l); |
539 | 523 | ||
540 | if (EVP_MD_CTX_md(s->read_hash) != NULL) | 524 | if (EVP_MD_CTX_md(s->read_hash) != NULL) |
541 | mac_size = EVP_MD_CTX_size(s->read_hash); | 525 | mac_size = EVP_MD_CTX_size(s->read_hash); |
542 | if ((bs != 1) && !send) | 526 | if ((bs != 1) && !send) |
543 | return ssl3_cbc_remove_padding(s, rec, bs, mac_size); | 527 | return ssl3_cbc_remove_padding(s, rec, bs, mac_size); |
544 | } | ||
545 | return(1); | ||
546 | } | 528 | } |
529 | return (1); | ||
530 | } | ||
547 | 531 | ||
548 | void ssl3_init_finished_mac(SSL *s) | 532 | void |
549 | { | 533 | ssl3_init_finished_mac(SSL *s) |
550 | if (s->s3->handshake_buffer) BIO_free(s->s3->handshake_buffer); | 534 | { |
551 | if (s->s3->handshake_dgst) ssl3_free_digest_list(s); | 535 | if (s->s3->handshake_buffer) |
552 | s->s3->handshake_buffer=BIO_new(BIO_s_mem()); | 536 | BIO_free(s->s3->handshake_buffer); |
553 | (void)BIO_set_close(s->s3->handshake_buffer,BIO_CLOSE); | 537 | if (s->s3->handshake_dgst) |
554 | } | 538 | ssl3_free_digest_list(s); |
539 | s->s3->handshake_buffer = BIO_new(BIO_s_mem()); | ||
540 | |||
541 | (void)BIO_set_close(s->s3->handshake_buffer, BIO_CLOSE); | ||
542 | } | ||
555 | 543 | ||
556 | void ssl3_free_digest_list(SSL *s) | 544 | void |
557 | { | 545 | ssl3_free_digest_list(SSL *s) |
546 | { | ||
558 | int i; | 547 | int i; |
559 | if (!s->s3->handshake_dgst) return; | 548 | if (!s->s3->handshake_dgst) |
560 | for (i=0;i<SSL_MAX_DIGEST;i++) | 549 | return; |
561 | { | 550 | for (i = 0; i < SSL_MAX_DIGEST; i++) { |
562 | if (s->s3->handshake_dgst[i]) | 551 | if (s->s3->handshake_dgst[i]) |
563 | EVP_MD_CTX_destroy(s->s3->handshake_dgst[i]); | 552 | EVP_MD_CTX_destroy(s->s3->handshake_dgst[i]); |
564 | } | 553 | } |
565 | OPENSSL_free(s->s3->handshake_dgst); | 554 | OPENSSL_free(s->s3->handshake_dgst); |
566 | s->s3->handshake_dgst=NULL; | 555 | s->s3->handshake_dgst = NULL; |
567 | } | 556 | } |
568 | 557 | ||
569 | 558 | ||
570 | 559 | ||
571 | void ssl3_finish_mac(SSL *s, const unsigned char *buf, int len) | 560 | void |
572 | { | 561 | ssl3_finish_mac(SSL *s, const unsigned char *buf, int len) |
573 | if (s->s3->handshake_buffer && !(s->s3->flags & TLS1_FLAGS_KEEP_HANDSHAKE)) | 562 | { |
574 | { | 563 | if (s->s3->handshake_buffer && !(s->s3->flags & TLS1_FLAGS_KEEP_HANDSHAKE)) { |
575 | BIO_write (s->s3->handshake_buffer,(void *)buf,len); | 564 | BIO_write (s->s3->handshake_buffer,(void *)buf, len); |
576 | } | 565 | } else { |
577 | else | ||
578 | { | ||
579 | int i; | 566 | int i; |
580 | for (i=0;i< SSL_MAX_DIGEST;i++) | 567 | for (i = 0; i < SSL_MAX_DIGEST; i++) { |
581 | { | ||
582 | if (s->s3->handshake_dgst[i]!= NULL) | 568 | if (s->s3->handshake_dgst[i]!= NULL) |
583 | EVP_DigestUpdate(s->s3->handshake_dgst[i],buf,len); | 569 | EVP_DigestUpdate(s->s3->handshake_dgst[i], buf, len); |
584 | } | 570 | } |
585 | } | ||
586 | } | 571 | } |
572 | } | ||
587 | 573 | ||
588 | int ssl3_digest_cached_records(SSL *s) | 574 | int |
589 | { | 575 | ssl3_digest_cached_records(SSL *s) |
576 | { | ||
590 | int i; | 577 | int i; |
591 | long mask; | 578 | long mask; |
592 | const EVP_MD *md; | 579 | const EVP_MD *md; |
@@ -596,152 +583,144 @@ int ssl3_digest_cached_records(SSL *s) | |||
596 | /* Allocate handshake_dgst array */ | 583 | /* Allocate handshake_dgst array */ |
597 | ssl3_free_digest_list(s); | 584 | ssl3_free_digest_list(s); |
598 | s->s3->handshake_dgst = OPENSSL_malloc(SSL_MAX_DIGEST * sizeof(EVP_MD_CTX *)); | 585 | s->s3->handshake_dgst = OPENSSL_malloc(SSL_MAX_DIGEST * sizeof(EVP_MD_CTX *)); |
599 | memset(s->s3->handshake_dgst,0,SSL_MAX_DIGEST *sizeof(EVP_MD_CTX *)); | 586 | memset(s->s3->handshake_dgst, 0, SSL_MAX_DIGEST *sizeof(EVP_MD_CTX *)); |
600 | hdatalen = BIO_get_mem_data(s->s3->handshake_buffer,&hdata); | 587 | hdatalen = BIO_get_mem_data(s->s3->handshake_buffer, &hdata); |
601 | if (hdatalen <= 0) | 588 | if (hdatalen <= 0) { |
602 | { | ||
603 | SSLerr(SSL_F_SSL3_DIGEST_CACHED_RECORDS, SSL_R_BAD_HANDSHAKE_LENGTH); | 589 | SSLerr(SSL_F_SSL3_DIGEST_CACHED_RECORDS, SSL_R_BAD_HANDSHAKE_LENGTH); |
604 | return 0; | 590 | return 0; |
605 | } | 591 | } |
606 | 592 | ||
607 | /* Loop through bitso of algorithm2 field and create MD_CTX-es */ | 593 | /* Loop through bitso of algorithm2 field and create MD_CTX-es */ |
608 | for (i=0;ssl_get_handshake_digest(i,&mask,&md); i++) | 594 | for (i = 0; ssl_get_handshake_digest(i, &mask, &md); i++) { |
609 | { | 595 | if ((mask & ssl_get_algorithm2(s)) && md) { |
610 | if ((mask & ssl_get_algorithm2(s)) && md) | 596 | s->s3->handshake_dgst[i] = EVP_MD_CTX_create(); |
611 | { | ||
612 | s->s3->handshake_dgst[i]=EVP_MD_CTX_create(); | ||
613 | #ifdef OPENSSL_FIPS | 597 | #ifdef OPENSSL_FIPS |
614 | if (EVP_MD_nid(md) == NID_md5) | 598 | if (EVP_MD_nid(md) == NID_md5) { |
615 | { | ||
616 | EVP_MD_CTX_set_flags(s->s3->handshake_dgst[i], | 599 | EVP_MD_CTX_set_flags(s->s3->handshake_dgst[i], |
617 | EVP_MD_CTX_FLAG_NON_FIPS_ALLOW); | 600 | EVP_MD_CTX_FLAG_NON_FIPS_ALLOW); |
618 | } | ||
619 | #endif | ||
620 | EVP_DigestInit_ex(s->s3->handshake_dgst[i],md,NULL); | ||
621 | EVP_DigestUpdate(s->s3->handshake_dgst[i],hdata,hdatalen); | ||
622 | } | ||
623 | else | ||
624 | { | ||
625 | s->s3->handshake_dgst[i]=NULL; | ||
626 | } | 601 | } |
602 | #endif | ||
603 | EVP_DigestInit_ex(s->s3->handshake_dgst[i], md, NULL); | ||
604 | EVP_DigestUpdate(s->s3->handshake_dgst[i], hdata, hdatalen); | ||
605 | } else { | ||
606 | s->s3->handshake_dgst[i] = NULL; | ||
627 | } | 607 | } |
628 | if (!(s->s3->flags & TLS1_FLAGS_KEEP_HANDSHAKE)) | 608 | } |
629 | { | 609 | if (!(s->s3->flags & TLS1_FLAGS_KEEP_HANDSHAKE)) { |
630 | /* Free handshake_buffer BIO */ | 610 | /* Free handshake_buffer BIO */ |
631 | BIO_free(s->s3->handshake_buffer); | 611 | BIO_free(s->s3->handshake_buffer); |
632 | s->s3->handshake_buffer = NULL; | 612 | s->s3->handshake_buffer = NULL; |
633 | } | 613 | } |
634 | 614 | ||
635 | return 1; | 615 | return 1; |
636 | } | 616 | } |
637 | 617 | ||
638 | int ssl3_cert_verify_mac(SSL *s, int md_nid, unsigned char *p) | 618 | int |
639 | { | 619 | ssl3_cert_verify_mac(SSL *s, int md_nid, unsigned char *p) |
640 | return(ssl3_handshake_mac(s,md_nid,NULL,0,p)); | 620 | { |
641 | } | 621 | return (ssl3_handshake_mac(s, md_nid, NULL, 0, p)); |
642 | int ssl3_final_finish_mac(SSL *s, | 622 | } |
643 | const char *sender, int len, unsigned char *p) | 623 | |
644 | { | 624 | int |
625 | ssl3_final_finish_mac(SSL *s, const char *sender, int len, unsigned char *p) | ||
626 | { | ||
645 | int ret; | 627 | int ret; |
646 | ret=ssl3_handshake_mac(s,NID_md5,sender,len,p); | 628 | ret = ssl3_handshake_mac(s, NID_md5, sender, len, p); |
647 | p+=ret; | 629 | p += ret; |
648 | ret+=ssl3_handshake_mac(s,NID_sha1,sender,len,p); | 630 | ret += ssl3_handshake_mac(s, NID_sha1, sender, len, p); |
649 | return(ret); | 631 | return (ret); |
650 | } | 632 | } |
651 | static int ssl3_handshake_mac(SSL *s, int md_nid, | 633 | |
652 | const char *sender, int len, unsigned char *p) | 634 | static int |
653 | { | 635 | ssl3_handshake_mac(SSL *s, int md_nid, const char *sender, int len, |
636 | unsigned char *p) | ||
637 | { | ||
654 | unsigned int ret; | 638 | unsigned int ret; |
655 | int npad,n; | 639 | int npad, n; |
656 | unsigned int i; | 640 | unsigned int i; |
657 | unsigned char md_buf[EVP_MAX_MD_SIZE]; | 641 | unsigned char md_buf[EVP_MAX_MD_SIZE]; |
658 | EVP_MD_CTX ctx,*d=NULL; | 642 | EVP_MD_CTX ctx, *d = NULL; |
659 | 643 | ||
660 | if (s->s3->handshake_buffer) | 644 | if (s->s3->handshake_buffer) |
661 | if (!ssl3_digest_cached_records(s)) | 645 | if (!ssl3_digest_cached_records(s)) |
662 | return 0; | 646 | return 0; |
663 | 647 | ||
664 | /* Search for digest of specified type in the handshake_dgst | 648 | /* Search for digest of specified type in the handshake_dgst |
665 | * array*/ | 649 | * array*/ |
666 | for (i=0;i<SSL_MAX_DIGEST;i++) | 650 | for (i = 0; i < SSL_MAX_DIGEST; i++) { |
667 | { | 651 | if (s->s3->handshake_dgst[i]&&EVP_MD_CTX_type(s->s3->handshake_dgst[i]) == md_nid) { |
668 | if (s->s3->handshake_dgst[i]&&EVP_MD_CTX_type(s->s3->handshake_dgst[i])==md_nid) | 652 | d = s->s3->handshake_dgst[i]; |
669 | { | ||
670 | d=s->s3->handshake_dgst[i]; | ||
671 | break; | 653 | break; |
672 | } | ||
673 | } | 654 | } |
655 | } | ||
674 | if (!d) { | 656 | if (!d) { |
675 | SSLerr(SSL_F_SSL3_HANDSHAKE_MAC,SSL_R_NO_REQUIRED_DIGEST); | 657 | SSLerr(SSL_F_SSL3_HANDSHAKE_MAC, SSL_R_NO_REQUIRED_DIGEST); |
676 | return 0; | 658 | return 0; |
677 | } | 659 | } |
678 | EVP_MD_CTX_init(&ctx); | 660 | EVP_MD_CTX_init(&ctx); |
679 | EVP_MD_CTX_set_flags(&ctx, EVP_MD_CTX_FLAG_NON_FIPS_ALLOW); | 661 | EVP_MD_CTX_set_flags(&ctx, EVP_MD_CTX_FLAG_NON_FIPS_ALLOW); |
680 | EVP_MD_CTX_copy_ex(&ctx,d); | 662 | EVP_MD_CTX_copy_ex(&ctx, d); |
681 | n=EVP_MD_CTX_size(&ctx); | 663 | n = EVP_MD_CTX_size(&ctx); |
682 | if (n < 0) | 664 | if (n < 0) |
683 | return 0; | 665 | return 0; |
684 | 666 | ||
685 | npad=(48/n)*n; | 667 | npad = (48/n)*n; |
686 | if (sender != NULL) | 668 | if (sender != NULL) |
687 | EVP_DigestUpdate(&ctx,sender,len); | 669 | EVP_DigestUpdate(&ctx, sender, len); |
688 | EVP_DigestUpdate(&ctx,s->session->master_key, | 670 | EVP_DigestUpdate(&ctx, s->session->master_key, |
689 | s->session->master_key_length); | 671 | s->session->master_key_length); |
690 | EVP_DigestUpdate(&ctx,ssl3_pad_1,npad); | 672 | EVP_DigestUpdate(&ctx, ssl3_pad_1, npad); |
691 | EVP_DigestFinal_ex(&ctx,md_buf,&i); | 673 | EVP_DigestFinal_ex(&ctx, md_buf, &i); |
692 | 674 | ||
693 | EVP_DigestInit_ex(&ctx,EVP_MD_CTX_md(&ctx), NULL); | 675 | EVP_DigestInit_ex(&ctx, EVP_MD_CTX_md(&ctx), NULL); |
694 | EVP_DigestUpdate(&ctx,s->session->master_key, | 676 | EVP_DigestUpdate(&ctx, s->session->master_key, |
695 | s->session->master_key_length); | 677 | s->session->master_key_length); |
696 | EVP_DigestUpdate(&ctx,ssl3_pad_2,npad); | 678 | EVP_DigestUpdate(&ctx, ssl3_pad_2, npad); |
697 | EVP_DigestUpdate(&ctx,md_buf,i); | 679 | EVP_DigestUpdate(&ctx, md_buf, i); |
698 | EVP_DigestFinal_ex(&ctx,p,&ret); | 680 | EVP_DigestFinal_ex(&ctx, p, &ret); |
699 | 681 | ||
700 | EVP_MD_CTX_cleanup(&ctx); | 682 | EVP_MD_CTX_cleanup(&ctx); |
701 | 683 | ||
702 | return((int)ret); | 684 | return ((int)ret); |
703 | } | 685 | } |
704 | 686 | ||
705 | int n_ssl3_mac(SSL *ssl, unsigned char *md, int send) | 687 | int |
706 | { | 688 | n_ssl3_mac(SSL *ssl, unsigned char *md, int send) |
689 | { | ||
707 | SSL3_RECORD *rec; | 690 | SSL3_RECORD *rec; |
708 | unsigned char *mac_sec,*seq; | 691 | unsigned char *mac_sec, *seq; |
709 | EVP_MD_CTX md_ctx; | 692 | EVP_MD_CTX md_ctx; |
710 | const EVP_MD_CTX *hash; | 693 | const EVP_MD_CTX *hash; |
711 | unsigned char *p,rec_char; | 694 | unsigned char *p, rec_char; |
712 | size_t md_size, orig_len; | 695 | size_t md_size, orig_len; |
713 | int npad; | 696 | int npad; |
714 | int t; | 697 | int t; |
715 | 698 | ||
716 | if (send) | 699 | if (send) { |
717 | { | 700 | rec = &(ssl->s3->wrec); |
718 | rec= &(ssl->s3->wrec); | 701 | mac_sec = &(ssl->s3->write_mac_secret[0]); |
719 | mac_sec= &(ssl->s3->write_mac_secret[0]); | 702 | seq = &(ssl->s3->write_sequence[0]); |
720 | seq= &(ssl->s3->write_sequence[0]); | 703 | hash = ssl->write_hash; |
721 | hash=ssl->write_hash; | 704 | } else { |
722 | } | 705 | rec = &(ssl->s3->rrec); |
723 | else | 706 | mac_sec = &(ssl->s3->read_mac_secret[0]); |
724 | { | 707 | seq = &(ssl->s3->read_sequence[0]); |
725 | rec= &(ssl->s3->rrec); | 708 | hash = ssl->read_hash; |
726 | mac_sec= &(ssl->s3->read_mac_secret[0]); | 709 | } |
727 | seq= &(ssl->s3->read_sequence[0]); | ||
728 | hash=ssl->read_hash; | ||
729 | } | ||
730 | 710 | ||
731 | t=EVP_MD_CTX_size(hash); | 711 | t = EVP_MD_CTX_size(hash); |
732 | if (t < 0) | 712 | if (t < 0) |
733 | return -1; | 713 | return -1; |
734 | md_size=t; | 714 | md_size = t; |
735 | npad=(48/md_size)*md_size; | 715 | npad = (48/md_size)*md_size; |
736 | 716 | ||
737 | /* kludge: ssl3_cbc_remove_padding passes padding length in rec->type */ | 717 | /* kludge: ssl3_cbc_remove_padding passes padding length in rec->type */ |
738 | orig_len = rec->length+md_size+((unsigned int)rec->type>>8); | 718 | orig_len = rec->length + md_size + ((unsigned int)rec->type >> 8); |
739 | rec->type &= 0xff; | 719 | rec->type &= 0xff; |
740 | 720 | ||
741 | if (!send && | 721 | if (!send && |
742 | EVP_CIPHER_CTX_mode(ssl->enc_read_ctx) == EVP_CIPH_CBC_MODE && | 722 | EVP_CIPHER_CTX_mode(ssl->enc_read_ctx) == EVP_CIPH_CBC_MODE && |
743 | ssl3_cbc_record_digest_supported(hash)) | 723 | ssl3_cbc_record_digest_supported(hash)) { |
744 | { | ||
745 | /* This is a CBC-encrypted record. We must avoid leaking any | 724 | /* This is a CBC-encrypted record. We must avoid leaking any |
746 | * timing-side channel information about how many blocks of | 725 | * timing-side channel information about how many blocks of |
747 | * data we are hashing because that gives an attacker a | 726 | * data we are hashing because that gives an attacker a |
@@ -755,71 +734,68 @@ int n_ssl3_mac(SSL *ssl, unsigned char *md, int send) | |||
755 | * total size. */ | 734 | * total size. */ |
756 | unsigned char header[75]; | 735 | unsigned char header[75]; |
757 | unsigned j = 0; | 736 | unsigned j = 0; |
758 | memcpy(header+j, mac_sec, md_size); | 737 | memcpy(header + j, mac_sec, md_size); |
759 | j += md_size; | 738 | j += md_size; |
760 | memcpy(header+j, ssl3_pad_1, npad); | 739 | memcpy(header + j, ssl3_pad_1, npad); |
761 | j += npad; | 740 | j += npad; |
762 | memcpy(header+j, seq, 8); | 741 | memcpy(header + j, seq, 8); |
763 | j += 8; | 742 | j += 8; |
764 | header[j++] = rec->type; | 743 | header[j++] = rec->type; |
765 | header[j++] = rec->length >> 8; | 744 | header[j++] = rec->length >> 8; |
766 | header[j++] = rec->length & 0xff; | 745 | header[j++] = rec->length & 0xff; |
767 | 746 | ||
768 | ssl3_cbc_digest_record( | 747 | ssl3_cbc_digest_record(hash, md, &md_size, header, rec->input, |
769 | hash, | 748 | rec->length + md_size, orig_len, mac_sec, md_size, |
770 | md, &md_size, | 749 | 1 /* is SSLv3 */); |
771 | header, rec->input, | 750 | } else { |
772 | rec->length + md_size, orig_len, | ||
773 | mac_sec, md_size, | ||
774 | 1 /* is SSLv3 */); | ||
775 | } | ||
776 | else | ||
777 | { | ||
778 | unsigned int md_size_u; | 751 | unsigned int md_size_u; |
779 | /* Chop the digest off the end :-) */ | 752 | /* Chop the digest off the end :-) */ |
780 | EVP_MD_CTX_init(&md_ctx); | 753 | EVP_MD_CTX_init(&md_ctx); |
781 | 754 | ||
782 | EVP_MD_CTX_copy_ex( &md_ctx,hash); | 755 | EVP_MD_CTX_copy_ex( &md_ctx, hash); |
783 | EVP_DigestUpdate(&md_ctx,mac_sec,md_size); | 756 | EVP_DigestUpdate(&md_ctx, mac_sec, md_size); |
784 | EVP_DigestUpdate(&md_ctx,ssl3_pad_1,npad); | 757 | EVP_DigestUpdate(&md_ctx, ssl3_pad_1, npad); |
785 | EVP_DigestUpdate(&md_ctx,seq,8); | 758 | EVP_DigestUpdate(&md_ctx, seq, 8); |
786 | rec_char=rec->type; | 759 | rec_char = rec->type; |
787 | EVP_DigestUpdate(&md_ctx,&rec_char,1); | 760 | EVP_DigestUpdate(&md_ctx, &rec_char, 1); |
788 | p=md; | 761 | p = md; |
789 | s2n(rec->length,p); | 762 | s2n(rec->length, p); |
790 | EVP_DigestUpdate(&md_ctx,md,2); | 763 | EVP_DigestUpdate(&md_ctx, md, 2); |
791 | EVP_DigestUpdate(&md_ctx,rec->input,rec->length); | 764 | EVP_DigestUpdate(&md_ctx, rec->input, rec->length); |
792 | EVP_DigestFinal_ex( &md_ctx,md,NULL); | 765 | EVP_DigestFinal_ex( &md_ctx, md, NULL); |
793 | 766 | ||
794 | EVP_MD_CTX_copy_ex( &md_ctx,hash); | 767 | EVP_MD_CTX_copy_ex( &md_ctx, hash); |
795 | EVP_DigestUpdate(&md_ctx,mac_sec,md_size); | 768 | EVP_DigestUpdate(&md_ctx, mac_sec, md_size); |
796 | EVP_DigestUpdate(&md_ctx,ssl3_pad_2,npad); | 769 | EVP_DigestUpdate(&md_ctx, ssl3_pad_2, npad); |
797 | EVP_DigestUpdate(&md_ctx,md,md_size); | 770 | EVP_DigestUpdate(&md_ctx, md, md_size); |
798 | EVP_DigestFinal_ex( &md_ctx,md,&md_size_u); | 771 | EVP_DigestFinal_ex( &md_ctx, md, &md_size_u); |
799 | md_size = md_size_u; | 772 | md_size = md_size_u; |
800 | 773 | ||
801 | EVP_MD_CTX_cleanup(&md_ctx); | 774 | EVP_MD_CTX_cleanup(&md_ctx); |
802 | } | 775 | } |
803 | 776 | ||
804 | ssl3_record_sequence_update(seq); | 777 | ssl3_record_sequence_update(seq); |
805 | return(md_size); | 778 | return (md_size); |
806 | } | 779 | } |
807 | 780 | ||
808 | void ssl3_record_sequence_update(unsigned char *seq) | 781 | void |
809 | { | 782 | ssl3_record_sequence_update(unsigned char *seq) |
783 | { | ||
810 | int i; | 784 | int i; |
811 | 785 | ||
812 | for (i=7; i>=0; i--) | 786 | for (i = 7; i >= 0; i--) { |
813 | { | ||
814 | ++seq[i]; | 787 | ++seq[i]; |
815 | if (seq[i] != 0) break; | 788 | if (seq[i] != 0) |
816 | } | 789 | break; |
790 | |||
817 | } | 791 | } |
792 | } | ||
818 | 793 | ||
819 | int ssl3_generate_master_secret(SSL *s, unsigned char *out, unsigned char *p, | 794 | int |
820 | int len) | 795 | ssl3_generate_master_secret(SSL *s, unsigned char *out, unsigned char *p, |
821 | { | 796 | int len) |
822 | static const unsigned char *salt[3]={ | 797 | { |
798 | static const unsigned char *salt[3] = { | ||
823 | #ifndef CHARSET_EBCDIC | 799 | #ifndef CHARSET_EBCDIC |
824 | (const unsigned char *)"A", | 800 | (const unsigned char *)"A", |
825 | (const unsigned char *)"BB", | 801 | (const unsigned char *)"BB", |
@@ -829,70 +805,98 @@ int ssl3_generate_master_secret(SSL *s, unsigned char *out, unsigned char *p, | |||
829 | (const unsigned char *)"\x42\x42", | 805 | (const unsigned char *)"\x42\x42", |
830 | (const unsigned char *)"\x43\x43\x43", | 806 | (const unsigned char *)"\x43\x43\x43", |
831 | #endif | 807 | #endif |
832 | }; | 808 | }; |
833 | unsigned char buf[EVP_MAX_MD_SIZE]; | 809 | unsigned char buf[EVP_MAX_MD_SIZE]; |
834 | EVP_MD_CTX ctx; | 810 | EVP_MD_CTX ctx; |
835 | int i,ret=0; | 811 | int i, ret = 0; |
836 | unsigned int n; | 812 | unsigned int n; |
837 | 813 | ||
838 | EVP_MD_CTX_init(&ctx); | 814 | EVP_MD_CTX_init(&ctx); |
839 | for (i=0; i<3; i++) | 815 | for (i = 0; i < 3; i++) { |
840 | { | 816 | EVP_DigestInit_ex(&ctx, s->ctx->sha1, NULL); |
841 | EVP_DigestInit_ex(&ctx,s->ctx->sha1, NULL); | 817 | EVP_DigestUpdate(&ctx, salt[i], strlen((const char *)salt[i])); |
842 | EVP_DigestUpdate(&ctx,salt[i],strlen((const char *)salt[i])); | 818 | EVP_DigestUpdate(&ctx, p, len); |
843 | EVP_DigestUpdate(&ctx,p,len); | 819 | EVP_DigestUpdate(&ctx, &(s->s3->client_random[0]), |
844 | EVP_DigestUpdate(&ctx,&(s->s3->client_random[0]), | 820 | SSL3_RANDOM_SIZE); |
845 | SSL3_RANDOM_SIZE); | 821 | EVP_DigestUpdate(&ctx, &(s->s3->server_random[0]), |
846 | EVP_DigestUpdate(&ctx,&(s->s3->server_random[0]), | 822 | SSL3_RANDOM_SIZE); |
847 | SSL3_RANDOM_SIZE); | 823 | EVP_DigestFinal_ex(&ctx, buf, &n); |
848 | EVP_DigestFinal_ex(&ctx,buf,&n); | 824 | |
849 | 825 | EVP_DigestInit_ex(&ctx, s->ctx->md5, NULL); | |
850 | EVP_DigestInit_ex(&ctx,s->ctx->md5, NULL); | 826 | EVP_DigestUpdate(&ctx, p, len); |
851 | EVP_DigestUpdate(&ctx,p,len); | 827 | EVP_DigestUpdate(&ctx, buf, n); |
852 | EVP_DigestUpdate(&ctx,buf,n); | 828 | EVP_DigestFinal_ex(&ctx, out, &n); |
853 | EVP_DigestFinal_ex(&ctx,out,&n); | 829 | out += n; |
854 | out+=n; | 830 | ret += n; |
855 | ret+=n; | ||
856 | } | ||
857 | EVP_MD_CTX_cleanup(&ctx); | ||
858 | return(ret); | ||
859 | } | 831 | } |
860 | 832 | EVP_MD_CTX_cleanup(&ctx); | |
861 | int ssl3_alert_code(int code) | 833 | return (ret); |
862 | { | 834 | } |
863 | switch (code) | 835 | |
864 | { | 836 | int |
865 | case SSL_AD_CLOSE_NOTIFY: return(SSL3_AD_CLOSE_NOTIFY); | 837 | ssl3_alert_code(int code) |
866 | case SSL_AD_UNEXPECTED_MESSAGE: return(SSL3_AD_UNEXPECTED_MESSAGE); | 838 | { |
867 | case SSL_AD_BAD_RECORD_MAC: return(SSL3_AD_BAD_RECORD_MAC); | 839 | switch (code) { |
868 | case SSL_AD_DECRYPTION_FAILED: return(SSL3_AD_BAD_RECORD_MAC); | 840 | case SSL_AD_CLOSE_NOTIFY: |
869 | case SSL_AD_RECORD_OVERFLOW: return(SSL3_AD_BAD_RECORD_MAC); | 841 | return (SSL3_AD_CLOSE_NOTIFY); |
870 | case SSL_AD_DECOMPRESSION_FAILURE:return(SSL3_AD_DECOMPRESSION_FAILURE); | 842 | case SSL_AD_UNEXPECTED_MESSAGE: |
871 | case SSL_AD_HANDSHAKE_FAILURE: return(SSL3_AD_HANDSHAKE_FAILURE); | 843 | return (SSL3_AD_UNEXPECTED_MESSAGE); |
872 | case SSL_AD_NO_CERTIFICATE: return(SSL3_AD_NO_CERTIFICATE); | 844 | case SSL_AD_BAD_RECORD_MAC: |
873 | case SSL_AD_BAD_CERTIFICATE: return(SSL3_AD_BAD_CERTIFICATE); | 845 | return (SSL3_AD_BAD_RECORD_MAC); |
874 | case SSL_AD_UNSUPPORTED_CERTIFICATE:return(SSL3_AD_UNSUPPORTED_CERTIFICATE); | 846 | case SSL_AD_DECRYPTION_FAILED: |
875 | case SSL_AD_CERTIFICATE_REVOKED:return(SSL3_AD_CERTIFICATE_REVOKED); | 847 | return (SSL3_AD_BAD_RECORD_MAC); |
876 | case SSL_AD_CERTIFICATE_EXPIRED:return(SSL3_AD_CERTIFICATE_EXPIRED); | 848 | case SSL_AD_RECORD_OVERFLOW: |
877 | case SSL_AD_CERTIFICATE_UNKNOWN:return(SSL3_AD_CERTIFICATE_UNKNOWN); | 849 | return (SSL3_AD_BAD_RECORD_MAC); |
878 | case SSL_AD_ILLEGAL_PARAMETER: return(SSL3_AD_ILLEGAL_PARAMETER); | 850 | case SSL_AD_DECOMPRESSION_FAILURE: |
879 | case SSL_AD_UNKNOWN_CA: return(SSL3_AD_BAD_CERTIFICATE); | 851 | return (SSL3_AD_DECOMPRESSION_FAILURE); |
880 | case SSL_AD_ACCESS_DENIED: return(SSL3_AD_HANDSHAKE_FAILURE); | 852 | case SSL_AD_HANDSHAKE_FAILURE: |
881 | case SSL_AD_DECODE_ERROR: return(SSL3_AD_HANDSHAKE_FAILURE); | 853 | return (SSL3_AD_HANDSHAKE_FAILURE); |
882 | case SSL_AD_DECRYPT_ERROR: return(SSL3_AD_HANDSHAKE_FAILURE); | 854 | case SSL_AD_NO_CERTIFICATE: |
883 | case SSL_AD_EXPORT_RESTRICTION: return(SSL3_AD_HANDSHAKE_FAILURE); | 855 | return (SSL3_AD_NO_CERTIFICATE); |
884 | case SSL_AD_PROTOCOL_VERSION: return(SSL3_AD_HANDSHAKE_FAILURE); | 856 | case SSL_AD_BAD_CERTIFICATE: |
885 | case SSL_AD_INSUFFICIENT_SECURITY:return(SSL3_AD_HANDSHAKE_FAILURE); | 857 | return (SSL3_AD_BAD_CERTIFICATE); |
886 | case SSL_AD_INTERNAL_ERROR: return(SSL3_AD_HANDSHAKE_FAILURE); | 858 | case SSL_AD_UNSUPPORTED_CERTIFICATE: |
887 | case SSL_AD_USER_CANCELLED: return(SSL3_AD_HANDSHAKE_FAILURE); | 859 | return (SSL3_AD_UNSUPPORTED_CERTIFICATE); |
860 | case SSL_AD_CERTIFICATE_REVOKED: | ||
861 | return (SSL3_AD_CERTIFICATE_REVOKED); | ||
862 | case SSL_AD_CERTIFICATE_EXPIRED: | ||
863 | return (SSL3_AD_CERTIFICATE_EXPIRED); | ||
864 | case SSL_AD_CERTIFICATE_UNKNOWN: | ||
865 | return (SSL3_AD_CERTIFICATE_UNKNOWN); | ||
866 | case SSL_AD_ILLEGAL_PARAMETER: | ||
867 | return (SSL3_AD_ILLEGAL_PARAMETER); | ||
868 | case SSL_AD_UNKNOWN_CA: | ||
869 | return (SSL3_AD_BAD_CERTIFICATE); | ||
870 | case SSL_AD_ACCESS_DENIED: | ||
871 | return (SSL3_AD_HANDSHAKE_FAILURE); | ||
872 | case SSL_AD_DECODE_ERROR: | ||
873 | return (SSL3_AD_HANDSHAKE_FAILURE); | ||
874 | case SSL_AD_DECRYPT_ERROR: | ||
875 | return (SSL3_AD_HANDSHAKE_FAILURE); | ||
876 | case SSL_AD_EXPORT_RESTRICTION: | ||
877 | return (SSL3_AD_HANDSHAKE_FAILURE); | ||
878 | case SSL_AD_PROTOCOL_VERSION: | ||
879 | return (SSL3_AD_HANDSHAKE_FAILURE); | ||
880 | case SSL_AD_INSUFFICIENT_SECURITY: | ||
881 | return (SSL3_AD_HANDSHAKE_FAILURE); | ||
882 | case SSL_AD_INTERNAL_ERROR: | ||
883 | return (SSL3_AD_HANDSHAKE_FAILURE); | ||
884 | case SSL_AD_USER_CANCELLED: | ||
885 | return (SSL3_AD_HANDSHAKE_FAILURE); | ||
888 | case SSL_AD_NO_RENEGOTIATION: return(-1); /* Don't send it :-) */ | 886 | case SSL_AD_NO_RENEGOTIATION: return(-1); /* Don't send it :-) */ |
889 | case SSL_AD_UNSUPPORTED_EXTENSION: return(SSL3_AD_HANDSHAKE_FAILURE); | 887 | case SSL_AD_UNSUPPORTED_EXTENSION: |
890 | case SSL_AD_CERTIFICATE_UNOBTAINABLE: return(SSL3_AD_HANDSHAKE_FAILURE); | 888 | return (SSL3_AD_HANDSHAKE_FAILURE); |
891 | case SSL_AD_UNRECOGNIZED_NAME: return(SSL3_AD_HANDSHAKE_FAILURE); | 889 | case SSL_AD_CERTIFICATE_UNOBTAINABLE: |
892 | case SSL_AD_BAD_CERTIFICATE_STATUS_RESPONSE: return(SSL3_AD_HANDSHAKE_FAILURE); | 890 | return (SSL3_AD_HANDSHAKE_FAILURE); |
893 | case SSL_AD_BAD_CERTIFICATE_HASH_VALUE: return(SSL3_AD_HANDSHAKE_FAILURE); | 891 | case SSL_AD_UNRECOGNIZED_NAME: |
894 | case SSL_AD_UNKNOWN_PSK_IDENTITY:return(TLS1_AD_UNKNOWN_PSK_IDENTITY); | 892 | return (SSL3_AD_HANDSHAKE_FAILURE); |
895 | default: return(-1); | 893 | case SSL_AD_BAD_CERTIFICATE_STATUS_RESPONSE: |
896 | } | 894 | return (SSL3_AD_HANDSHAKE_FAILURE); |
895 | case SSL_AD_BAD_CERTIFICATE_HASH_VALUE: | ||
896 | return (SSL3_AD_HANDSHAKE_FAILURE); | ||
897 | case SSL_AD_UNKNOWN_PSK_IDENTITY: | ||
898 | return (TLS1_AD_UNKNOWN_PSK_IDENTITY); | ||
899 | default: | ||
900 | return (-1); | ||
897 | } | 901 | } |
898 | 902 | } | |
diff --git a/src/lib/libssl/src/ssl/s3_lib.c b/src/lib/libssl/src/ssl/s3_lib.c index fd1e7b80d8..926071fffa 100644 --- a/src/lib/libssl/src/ssl/s3_lib.c +++ b/src/lib/libssl/src/ssl/s3_lib.c | |||
@@ -164,496 +164,496 @@ | |||
164 | 164 | ||
165 | const char ssl3_version_str[]="SSLv3" OPENSSL_VERSION_PTEXT; | 165 | const char ssl3_version_str[]="SSLv3" OPENSSL_VERSION_PTEXT; |
166 | 166 | ||
167 | #define SSL3_NUM_CIPHERS (sizeof(ssl3_ciphers)/sizeof(SSL_CIPHER)) | 167 | #define SSL3_NUM_CIPHERS (sizeof(ssl3_ciphers) / sizeof(SSL_CIPHER)) |
168 | 168 | ||
169 | /* list of available SSLv3 ciphers (sorted by id) */ | 169 | /* list of available SSLv3 ciphers (sorted by id) */ |
170 | OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]={ | 170 | OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = { |
171 | 171 | ||
172 | /* The RSA ciphers */ | 172 | /* The RSA ciphers */ |
173 | /* Cipher 01 */ | 173 | /* Cipher 01 */ |
174 | { | 174 | { |
175 | 1, | 175 | 1, |
176 | SSL3_TXT_RSA_NULL_MD5, | 176 | SSL3_TXT_RSA_NULL_MD5, |
177 | SSL3_CK_RSA_NULL_MD5, | 177 | SSL3_CK_RSA_NULL_MD5, |
178 | SSL_kRSA, | 178 | SSL_kRSA, |
179 | SSL_aRSA, | 179 | SSL_aRSA, |
180 | SSL_eNULL, | 180 | SSL_eNULL, |
181 | SSL_MD5, | 181 | SSL_MD5, |
182 | SSL_SSLV3, | 182 | SSL_SSLV3, |
183 | SSL_NOT_EXP|SSL_STRONG_NONE, | 183 | SSL_NOT_EXP|SSL_STRONG_NONE, |
184 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 184 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
185 | 0, | 185 | 0, |
186 | 0, | 186 | 0, |
187 | }, | 187 | }, |
188 | 188 | ||
189 | /* Cipher 02 */ | 189 | /* Cipher 02 */ |
190 | { | 190 | { |
191 | 1, | 191 | 1, |
192 | SSL3_TXT_RSA_NULL_SHA, | 192 | SSL3_TXT_RSA_NULL_SHA, |
193 | SSL3_CK_RSA_NULL_SHA, | 193 | SSL3_CK_RSA_NULL_SHA, |
194 | SSL_kRSA, | 194 | SSL_kRSA, |
195 | SSL_aRSA, | 195 | SSL_aRSA, |
196 | SSL_eNULL, | 196 | SSL_eNULL, |
197 | SSL_SHA1, | 197 | SSL_SHA1, |
198 | SSL_SSLV3, | 198 | SSL_SSLV3, |
199 | SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS, | 199 | SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS, |
200 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 200 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
201 | 0, | 201 | 0, |
202 | 0, | 202 | 0, |
203 | }, | 203 | }, |
204 | 204 | ||
205 | /* Cipher 03 */ | 205 | /* Cipher 03 */ |
206 | { | 206 | { |
207 | 1, | 207 | 1, |
208 | SSL3_TXT_RSA_RC4_40_MD5, | 208 | SSL3_TXT_RSA_RC4_40_MD5, |
209 | SSL3_CK_RSA_RC4_40_MD5, | 209 | SSL3_CK_RSA_RC4_40_MD5, |
210 | SSL_kRSA, | 210 | SSL_kRSA, |
211 | SSL_aRSA, | 211 | SSL_aRSA, |
212 | SSL_RC4, | 212 | SSL_RC4, |
213 | SSL_MD5, | 213 | SSL_MD5, |
214 | SSL_SSLV3, | 214 | SSL_SSLV3, |
215 | SSL_EXPORT|SSL_EXP40, | 215 | SSL_EXPORT|SSL_EXP40, |
216 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 216 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
217 | 40, | 217 | 40, |
218 | 128, | 218 | 128, |
219 | }, | 219 | }, |
220 | 220 | ||
221 | /* Cipher 04 */ | 221 | /* Cipher 04 */ |
222 | { | 222 | { |
223 | 1, | 223 | 1, |
224 | SSL3_TXT_RSA_RC4_128_MD5, | 224 | SSL3_TXT_RSA_RC4_128_MD5, |
225 | SSL3_CK_RSA_RC4_128_MD5, | 225 | SSL3_CK_RSA_RC4_128_MD5, |
226 | SSL_kRSA, | 226 | SSL_kRSA, |
227 | SSL_aRSA, | 227 | SSL_aRSA, |
228 | SSL_RC4, | 228 | SSL_RC4, |
229 | SSL_MD5, | 229 | SSL_MD5, |
230 | SSL_SSLV3, | 230 | SSL_SSLV3, |
231 | SSL_NOT_EXP|SSL_MEDIUM, | 231 | SSL_NOT_EXP|SSL_MEDIUM, |
232 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 232 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
233 | 128, | 233 | 128, |
234 | 128, | 234 | 128, |
235 | }, | 235 | }, |
236 | 236 | ||
237 | /* Cipher 05 */ | 237 | /* Cipher 05 */ |
238 | { | 238 | { |
239 | 1, | 239 | 1, |
240 | SSL3_TXT_RSA_RC4_128_SHA, | 240 | SSL3_TXT_RSA_RC4_128_SHA, |
241 | SSL3_CK_RSA_RC4_128_SHA, | 241 | SSL3_CK_RSA_RC4_128_SHA, |
242 | SSL_kRSA, | 242 | SSL_kRSA, |
243 | SSL_aRSA, | 243 | SSL_aRSA, |
244 | SSL_RC4, | 244 | SSL_RC4, |
245 | SSL_SHA1, | 245 | SSL_SHA1, |
246 | SSL_SSLV3, | 246 | SSL_SSLV3, |
247 | SSL_NOT_EXP|SSL_MEDIUM, | 247 | SSL_NOT_EXP|SSL_MEDIUM, |
248 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 248 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
249 | 128, | 249 | 128, |
250 | 128, | 250 | 128, |
251 | }, | 251 | }, |
252 | 252 | ||
253 | /* Cipher 06 */ | 253 | /* Cipher 06 */ |
254 | { | 254 | { |
255 | 1, | 255 | 1, |
256 | SSL3_TXT_RSA_RC2_40_MD5, | 256 | SSL3_TXT_RSA_RC2_40_MD5, |
257 | SSL3_CK_RSA_RC2_40_MD5, | 257 | SSL3_CK_RSA_RC2_40_MD5, |
258 | SSL_kRSA, | 258 | SSL_kRSA, |
259 | SSL_aRSA, | 259 | SSL_aRSA, |
260 | SSL_RC2, | 260 | SSL_RC2, |
261 | SSL_MD5, | 261 | SSL_MD5, |
262 | SSL_SSLV3, | 262 | SSL_SSLV3, |
263 | SSL_EXPORT|SSL_EXP40, | 263 | SSL_EXPORT|SSL_EXP40, |
264 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 264 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
265 | 40, | 265 | 40, |
266 | 128, | 266 | 128, |
267 | }, | 267 | }, |
268 | 268 | ||
269 | /* Cipher 07 */ | 269 | /* Cipher 07 */ |
270 | #ifndef OPENSSL_NO_IDEA | 270 | #ifndef OPENSSL_NO_IDEA |
271 | { | 271 | { |
272 | 1, | 272 | 1, |
273 | SSL3_TXT_RSA_IDEA_128_SHA, | 273 | SSL3_TXT_RSA_IDEA_128_SHA, |
274 | SSL3_CK_RSA_IDEA_128_SHA, | 274 | SSL3_CK_RSA_IDEA_128_SHA, |
275 | SSL_kRSA, | 275 | SSL_kRSA, |
276 | SSL_aRSA, | 276 | SSL_aRSA, |
277 | SSL_IDEA, | 277 | SSL_IDEA, |
278 | SSL_SHA1, | 278 | SSL_SHA1, |
279 | SSL_SSLV3, | 279 | SSL_SSLV3, |
280 | SSL_NOT_EXP|SSL_MEDIUM, | 280 | SSL_NOT_EXP|SSL_MEDIUM, |
281 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 281 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
282 | 128, | 282 | 128, |
283 | 128, | 283 | 128, |
284 | }, | 284 | }, |
285 | #endif | 285 | #endif |
286 | 286 | ||
287 | /* Cipher 08 */ | 287 | /* Cipher 08 */ |
288 | { | 288 | { |
289 | 1, | 289 | 1, |
290 | SSL3_TXT_RSA_DES_40_CBC_SHA, | 290 | SSL3_TXT_RSA_DES_40_CBC_SHA, |
291 | SSL3_CK_RSA_DES_40_CBC_SHA, | 291 | SSL3_CK_RSA_DES_40_CBC_SHA, |
292 | SSL_kRSA, | 292 | SSL_kRSA, |
293 | SSL_aRSA, | 293 | SSL_aRSA, |
294 | SSL_DES, | 294 | SSL_DES, |
295 | SSL_SHA1, | 295 | SSL_SHA1, |
296 | SSL_SSLV3, | 296 | SSL_SSLV3, |
297 | SSL_EXPORT|SSL_EXP40, | 297 | SSL_EXPORT|SSL_EXP40, |
298 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 298 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
299 | 40, | 299 | 40, |
300 | 56, | 300 | 56, |
301 | }, | 301 | }, |
302 | 302 | ||
303 | /* Cipher 09 */ | 303 | /* Cipher 09 */ |
304 | { | 304 | { |
305 | 1, | 305 | 1, |
306 | SSL3_TXT_RSA_DES_64_CBC_SHA, | 306 | SSL3_TXT_RSA_DES_64_CBC_SHA, |
307 | SSL3_CK_RSA_DES_64_CBC_SHA, | 307 | SSL3_CK_RSA_DES_64_CBC_SHA, |
308 | SSL_kRSA, | 308 | SSL_kRSA, |
309 | SSL_aRSA, | 309 | SSL_aRSA, |
310 | SSL_DES, | 310 | SSL_DES, |
311 | SSL_SHA1, | 311 | SSL_SHA1, |
312 | SSL_SSLV3, | 312 | SSL_SSLV3, |
313 | SSL_NOT_EXP|SSL_LOW, | 313 | SSL_NOT_EXP|SSL_LOW, |
314 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 314 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
315 | 56, | 315 | 56, |
316 | 56, | 316 | 56, |
317 | }, | 317 | }, |
318 | 318 | ||
319 | /* Cipher 0A */ | 319 | /* Cipher 0A */ |
320 | { | 320 | { |
321 | 1, | 321 | 1, |
322 | SSL3_TXT_RSA_DES_192_CBC3_SHA, | 322 | SSL3_TXT_RSA_DES_192_CBC3_SHA, |
323 | SSL3_CK_RSA_DES_192_CBC3_SHA, | 323 | SSL3_CK_RSA_DES_192_CBC3_SHA, |
324 | SSL_kRSA, | 324 | SSL_kRSA, |
325 | SSL_aRSA, | 325 | SSL_aRSA, |
326 | SSL_3DES, | 326 | SSL_3DES, |
327 | SSL_SHA1, | 327 | SSL_SHA1, |
328 | SSL_SSLV3, | 328 | SSL_SSLV3, |
329 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 329 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
330 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 330 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
331 | 168, | 331 | 168, |
332 | 168, | 332 | 168, |
333 | }, | 333 | }, |
334 | 334 | ||
335 | /* The DH ciphers */ | 335 | /* The DH ciphers */ |
336 | /* Cipher 0B */ | 336 | /* Cipher 0B */ |
337 | { | 337 | { |
338 | 0, | 338 | 0, |
339 | SSL3_TXT_DH_DSS_DES_40_CBC_SHA, | 339 | SSL3_TXT_DH_DSS_DES_40_CBC_SHA, |
340 | SSL3_CK_DH_DSS_DES_40_CBC_SHA, | 340 | SSL3_CK_DH_DSS_DES_40_CBC_SHA, |
341 | SSL_kDHd, | 341 | SSL_kDHd, |
342 | SSL_aDH, | 342 | SSL_aDH, |
343 | SSL_DES, | 343 | SSL_DES, |
344 | SSL_SHA1, | 344 | SSL_SHA1, |
345 | SSL_SSLV3, | 345 | SSL_SSLV3, |
346 | SSL_EXPORT|SSL_EXP40, | 346 | SSL_EXPORT|SSL_EXP40, |
347 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 347 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
348 | 40, | 348 | 40, |
349 | 56, | 349 | 56, |
350 | }, | 350 | }, |
351 | 351 | ||
352 | /* Cipher 0C */ | 352 | /* Cipher 0C */ |
353 | { | 353 | { |
354 | 0, /* not implemented (non-ephemeral DH) */ | 354 | 0, /* not implemented (non-ephemeral DH) */ |
355 | SSL3_TXT_DH_DSS_DES_64_CBC_SHA, | 355 | SSL3_TXT_DH_DSS_DES_64_CBC_SHA, |
356 | SSL3_CK_DH_DSS_DES_64_CBC_SHA, | 356 | SSL3_CK_DH_DSS_DES_64_CBC_SHA, |
357 | SSL_kDHd, | 357 | SSL_kDHd, |
358 | SSL_aDH, | 358 | SSL_aDH, |
359 | SSL_DES, | 359 | SSL_DES, |
360 | SSL_SHA1, | 360 | SSL_SHA1, |
361 | SSL_SSLV3, | 361 | SSL_SSLV3, |
362 | SSL_NOT_EXP|SSL_LOW, | 362 | SSL_NOT_EXP|SSL_LOW, |
363 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 363 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
364 | 56, | 364 | 56, |
365 | 56, | 365 | 56, |
366 | }, | 366 | }, |
367 | 367 | ||
368 | /* Cipher 0D */ | 368 | /* Cipher 0D */ |
369 | { | 369 | { |
370 | 0, /* not implemented (non-ephemeral DH) */ | 370 | 0, /* not implemented (non-ephemeral DH) */ |
371 | SSL3_TXT_DH_DSS_DES_192_CBC3_SHA, | 371 | SSL3_TXT_DH_DSS_DES_192_CBC3_SHA, |
372 | SSL3_CK_DH_DSS_DES_192_CBC3_SHA, | 372 | SSL3_CK_DH_DSS_DES_192_CBC3_SHA, |
373 | SSL_kDHd, | 373 | SSL_kDHd, |
374 | SSL_aDH, | 374 | SSL_aDH, |
375 | SSL_3DES, | 375 | SSL_3DES, |
376 | SSL_SHA1, | 376 | SSL_SHA1, |
377 | SSL_SSLV3, | 377 | SSL_SSLV3, |
378 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 378 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
379 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 379 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
380 | 168, | 380 | 168, |
381 | 168, | 381 | 168, |
382 | }, | 382 | }, |
383 | 383 | ||
384 | /* Cipher 0E */ | 384 | /* Cipher 0E */ |
385 | { | 385 | { |
386 | 0, /* not implemented (non-ephemeral DH) */ | 386 | 0, /* not implemented (non-ephemeral DH) */ |
387 | SSL3_TXT_DH_RSA_DES_40_CBC_SHA, | 387 | SSL3_TXT_DH_RSA_DES_40_CBC_SHA, |
388 | SSL3_CK_DH_RSA_DES_40_CBC_SHA, | 388 | SSL3_CK_DH_RSA_DES_40_CBC_SHA, |
389 | SSL_kDHr, | 389 | SSL_kDHr, |
390 | SSL_aDH, | 390 | SSL_aDH, |
391 | SSL_DES, | 391 | SSL_DES, |
392 | SSL_SHA1, | 392 | SSL_SHA1, |
393 | SSL_SSLV3, | 393 | SSL_SSLV3, |
394 | SSL_EXPORT|SSL_EXP40, | 394 | SSL_EXPORT|SSL_EXP40, |
395 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 395 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
396 | 40, | 396 | 40, |
397 | 56, | 397 | 56, |
398 | }, | 398 | }, |
399 | 399 | ||
400 | /* Cipher 0F */ | 400 | /* Cipher 0F */ |
401 | { | 401 | { |
402 | 0, /* not implemented (non-ephemeral DH) */ | 402 | 0, /* not implemented (non-ephemeral DH) */ |
403 | SSL3_TXT_DH_RSA_DES_64_CBC_SHA, | 403 | SSL3_TXT_DH_RSA_DES_64_CBC_SHA, |
404 | SSL3_CK_DH_RSA_DES_64_CBC_SHA, | 404 | SSL3_CK_DH_RSA_DES_64_CBC_SHA, |
405 | SSL_kDHr, | 405 | SSL_kDHr, |
406 | SSL_aDH, | 406 | SSL_aDH, |
407 | SSL_DES, | 407 | SSL_DES, |
408 | SSL_SHA1, | 408 | SSL_SHA1, |
409 | SSL_SSLV3, | 409 | SSL_SSLV3, |
410 | SSL_NOT_EXP|SSL_LOW, | 410 | SSL_NOT_EXP|SSL_LOW, |
411 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 411 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
412 | 56, | 412 | 56, |
413 | 56, | 413 | 56, |
414 | }, | 414 | }, |
415 | 415 | ||
416 | /* Cipher 10 */ | 416 | /* Cipher 10 */ |
417 | { | 417 | { |
418 | 0, /* not implemented (non-ephemeral DH) */ | 418 | 0, /* not implemented (non-ephemeral DH) */ |
419 | SSL3_TXT_DH_RSA_DES_192_CBC3_SHA, | 419 | SSL3_TXT_DH_RSA_DES_192_CBC3_SHA, |
420 | SSL3_CK_DH_RSA_DES_192_CBC3_SHA, | 420 | SSL3_CK_DH_RSA_DES_192_CBC3_SHA, |
421 | SSL_kDHr, | 421 | SSL_kDHr, |
422 | SSL_aDH, | 422 | SSL_aDH, |
423 | SSL_3DES, | 423 | SSL_3DES, |
424 | SSL_SHA1, | 424 | SSL_SHA1, |
425 | SSL_SSLV3, | 425 | SSL_SSLV3, |
426 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 426 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
427 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 427 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
428 | 168, | 428 | 168, |
429 | 168, | 429 | 168, |
430 | }, | 430 | }, |
431 | 431 | ||
432 | /* The Ephemeral DH ciphers */ | 432 | /* The Ephemeral DH ciphers */ |
433 | /* Cipher 11 */ | 433 | /* Cipher 11 */ |
434 | { | 434 | { |
435 | 1, | 435 | 1, |
436 | SSL3_TXT_EDH_DSS_DES_40_CBC_SHA, | 436 | SSL3_TXT_EDH_DSS_DES_40_CBC_SHA, |
437 | SSL3_CK_EDH_DSS_DES_40_CBC_SHA, | 437 | SSL3_CK_EDH_DSS_DES_40_CBC_SHA, |
438 | SSL_kEDH, | 438 | SSL_kEDH, |
439 | SSL_aDSS, | 439 | SSL_aDSS, |
440 | SSL_DES, | 440 | SSL_DES, |
441 | SSL_SHA1, | 441 | SSL_SHA1, |
442 | SSL_SSLV3, | 442 | SSL_SSLV3, |
443 | SSL_EXPORT|SSL_EXP40, | 443 | SSL_EXPORT|SSL_EXP40, |
444 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 444 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
445 | 40, | 445 | 40, |
446 | 56, | 446 | 56, |
447 | }, | 447 | }, |
448 | 448 | ||
449 | /* Cipher 12 */ | 449 | /* Cipher 12 */ |
450 | { | 450 | { |
451 | 1, | 451 | 1, |
452 | SSL3_TXT_EDH_DSS_DES_64_CBC_SHA, | 452 | SSL3_TXT_EDH_DSS_DES_64_CBC_SHA, |
453 | SSL3_CK_EDH_DSS_DES_64_CBC_SHA, | 453 | SSL3_CK_EDH_DSS_DES_64_CBC_SHA, |
454 | SSL_kEDH, | 454 | SSL_kEDH, |
455 | SSL_aDSS, | 455 | SSL_aDSS, |
456 | SSL_DES, | 456 | SSL_DES, |
457 | SSL_SHA1, | 457 | SSL_SHA1, |
458 | SSL_SSLV3, | 458 | SSL_SSLV3, |
459 | SSL_NOT_EXP|SSL_LOW, | 459 | SSL_NOT_EXP|SSL_LOW, |
460 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 460 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
461 | 56, | 461 | 56, |
462 | 56, | 462 | 56, |
463 | }, | 463 | }, |
464 | 464 | ||
465 | /* Cipher 13 */ | 465 | /* Cipher 13 */ |
466 | { | 466 | { |
467 | 1, | 467 | 1, |
468 | SSL3_TXT_EDH_DSS_DES_192_CBC3_SHA, | 468 | SSL3_TXT_EDH_DSS_DES_192_CBC3_SHA, |
469 | SSL3_CK_EDH_DSS_DES_192_CBC3_SHA, | 469 | SSL3_CK_EDH_DSS_DES_192_CBC3_SHA, |
470 | SSL_kEDH, | 470 | SSL_kEDH, |
471 | SSL_aDSS, | 471 | SSL_aDSS, |
472 | SSL_3DES, | 472 | SSL_3DES, |
473 | SSL_SHA1, | 473 | SSL_SHA1, |
474 | SSL_SSLV3, | 474 | SSL_SSLV3, |
475 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 475 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
476 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 476 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
477 | 168, | 477 | 168, |
478 | 168, | 478 | 168, |
479 | }, | 479 | }, |
480 | 480 | ||
481 | /* Cipher 14 */ | 481 | /* Cipher 14 */ |
482 | { | 482 | { |
483 | 1, | 483 | 1, |
484 | SSL3_TXT_EDH_RSA_DES_40_CBC_SHA, | 484 | SSL3_TXT_EDH_RSA_DES_40_CBC_SHA, |
485 | SSL3_CK_EDH_RSA_DES_40_CBC_SHA, | 485 | SSL3_CK_EDH_RSA_DES_40_CBC_SHA, |
486 | SSL_kEDH, | 486 | SSL_kEDH, |
487 | SSL_aRSA, | 487 | SSL_aRSA, |
488 | SSL_DES, | 488 | SSL_DES, |
489 | SSL_SHA1, | 489 | SSL_SHA1, |
490 | SSL_SSLV3, | 490 | SSL_SSLV3, |
491 | SSL_EXPORT|SSL_EXP40, | 491 | SSL_EXPORT|SSL_EXP40, |
492 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 492 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
493 | 40, | 493 | 40, |
494 | 56, | 494 | 56, |
495 | }, | 495 | }, |
496 | 496 | ||
497 | /* Cipher 15 */ | 497 | /* Cipher 15 */ |
498 | { | 498 | { |
499 | 1, | 499 | 1, |
500 | SSL3_TXT_EDH_RSA_DES_64_CBC_SHA, | 500 | SSL3_TXT_EDH_RSA_DES_64_CBC_SHA, |
501 | SSL3_CK_EDH_RSA_DES_64_CBC_SHA, | 501 | SSL3_CK_EDH_RSA_DES_64_CBC_SHA, |
502 | SSL_kEDH, | 502 | SSL_kEDH, |
503 | SSL_aRSA, | 503 | SSL_aRSA, |
504 | SSL_DES, | 504 | SSL_DES, |
505 | SSL_SHA1, | 505 | SSL_SHA1, |
506 | SSL_SSLV3, | 506 | SSL_SSLV3, |
507 | SSL_NOT_EXP|SSL_LOW, | 507 | SSL_NOT_EXP|SSL_LOW, |
508 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 508 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
509 | 56, | 509 | 56, |
510 | 56, | 510 | 56, |
511 | }, | 511 | }, |
512 | 512 | ||
513 | /* Cipher 16 */ | 513 | /* Cipher 16 */ |
514 | { | 514 | { |
515 | 1, | 515 | 1, |
516 | SSL3_TXT_EDH_RSA_DES_192_CBC3_SHA, | 516 | SSL3_TXT_EDH_RSA_DES_192_CBC3_SHA, |
517 | SSL3_CK_EDH_RSA_DES_192_CBC3_SHA, | 517 | SSL3_CK_EDH_RSA_DES_192_CBC3_SHA, |
518 | SSL_kEDH, | 518 | SSL_kEDH, |
519 | SSL_aRSA, | 519 | SSL_aRSA, |
520 | SSL_3DES, | 520 | SSL_3DES, |
521 | SSL_SHA1, | 521 | SSL_SHA1, |
522 | SSL_SSLV3, | 522 | SSL_SSLV3, |
523 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 523 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
524 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 524 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
525 | 168, | 525 | 168, |
526 | 168, | 526 | 168, |
527 | }, | 527 | }, |
528 | 528 | ||
529 | /* Cipher 17 */ | 529 | /* Cipher 17 */ |
530 | { | 530 | { |
531 | 1, | 531 | 1, |
532 | SSL3_TXT_ADH_RC4_40_MD5, | 532 | SSL3_TXT_ADH_RC4_40_MD5, |
533 | SSL3_CK_ADH_RC4_40_MD5, | 533 | SSL3_CK_ADH_RC4_40_MD5, |
534 | SSL_kEDH, | 534 | SSL_kEDH, |
535 | SSL_aNULL, | 535 | SSL_aNULL, |
536 | SSL_RC4, | 536 | SSL_RC4, |
537 | SSL_MD5, | 537 | SSL_MD5, |
538 | SSL_SSLV3, | 538 | SSL_SSLV3, |
539 | SSL_EXPORT|SSL_EXP40, | 539 | SSL_EXPORT|SSL_EXP40, |
540 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 540 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
541 | 40, | 541 | 40, |
542 | 128, | 542 | 128, |
543 | }, | 543 | }, |
544 | 544 | ||
545 | /* Cipher 18 */ | 545 | /* Cipher 18 */ |
546 | { | 546 | { |
547 | 1, | 547 | 1, |
548 | SSL3_TXT_ADH_RC4_128_MD5, | 548 | SSL3_TXT_ADH_RC4_128_MD5, |
549 | SSL3_CK_ADH_RC4_128_MD5, | 549 | SSL3_CK_ADH_RC4_128_MD5, |
550 | SSL_kEDH, | 550 | SSL_kEDH, |
551 | SSL_aNULL, | 551 | SSL_aNULL, |
552 | SSL_RC4, | 552 | SSL_RC4, |
553 | SSL_MD5, | 553 | SSL_MD5, |
554 | SSL_SSLV3, | 554 | SSL_SSLV3, |
555 | SSL_NOT_EXP|SSL_MEDIUM, | 555 | SSL_NOT_EXP|SSL_MEDIUM, |
556 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 556 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
557 | 128, | 557 | 128, |
558 | 128, | 558 | 128, |
559 | }, | 559 | }, |
560 | 560 | ||
561 | /* Cipher 19 */ | 561 | /* Cipher 19 */ |
562 | { | 562 | { |
563 | 1, | 563 | 1, |
564 | SSL3_TXT_ADH_DES_40_CBC_SHA, | 564 | SSL3_TXT_ADH_DES_40_CBC_SHA, |
565 | SSL3_CK_ADH_DES_40_CBC_SHA, | 565 | SSL3_CK_ADH_DES_40_CBC_SHA, |
566 | SSL_kEDH, | 566 | SSL_kEDH, |
567 | SSL_aNULL, | 567 | SSL_aNULL, |
568 | SSL_DES, | 568 | SSL_DES, |
569 | SSL_SHA1, | 569 | SSL_SHA1, |
570 | SSL_SSLV3, | 570 | SSL_SSLV3, |
571 | SSL_EXPORT|SSL_EXP40, | 571 | SSL_EXPORT|SSL_EXP40, |
572 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 572 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
573 | 40, | 573 | 40, |
574 | 128, | 574 | 128, |
575 | }, | 575 | }, |
576 | 576 | ||
577 | /* Cipher 1A */ | 577 | /* Cipher 1A */ |
578 | { | 578 | { |
579 | 1, | 579 | 1, |
580 | SSL3_TXT_ADH_DES_64_CBC_SHA, | 580 | SSL3_TXT_ADH_DES_64_CBC_SHA, |
581 | SSL3_CK_ADH_DES_64_CBC_SHA, | 581 | SSL3_CK_ADH_DES_64_CBC_SHA, |
582 | SSL_kEDH, | 582 | SSL_kEDH, |
583 | SSL_aNULL, | 583 | SSL_aNULL, |
584 | SSL_DES, | 584 | SSL_DES, |
585 | SSL_SHA1, | 585 | SSL_SHA1, |
586 | SSL_SSLV3, | 586 | SSL_SSLV3, |
587 | SSL_NOT_EXP|SSL_LOW, | 587 | SSL_NOT_EXP|SSL_LOW, |
588 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 588 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
589 | 56, | 589 | 56, |
590 | 56, | 590 | 56, |
591 | }, | 591 | }, |
592 | 592 | ||
593 | /* Cipher 1B */ | 593 | /* Cipher 1B */ |
594 | { | 594 | { |
595 | 1, | 595 | 1, |
596 | SSL3_TXT_ADH_DES_192_CBC_SHA, | 596 | SSL3_TXT_ADH_DES_192_CBC_SHA, |
597 | SSL3_CK_ADH_DES_192_CBC_SHA, | 597 | SSL3_CK_ADH_DES_192_CBC_SHA, |
598 | SSL_kEDH, | 598 | SSL_kEDH, |
599 | SSL_aNULL, | 599 | SSL_aNULL, |
600 | SSL_3DES, | 600 | SSL_3DES, |
601 | SSL_SHA1, | 601 | SSL_SHA1, |
602 | SSL_SSLV3, | 602 | SSL_SSLV3, |
603 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 603 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
604 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 604 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
605 | 168, | 605 | 168, |
606 | 168, | 606 | 168, |
607 | }, | 607 | }, |
608 | 608 | ||
609 | /* Fortezza ciphersuite from SSL 3.0 spec */ | 609 | /* Fortezza ciphersuite from SSL 3.0 spec */ |
610 | #if 0 | 610 | #if 0 |
611 | /* Cipher 1C */ | 611 | /* Cipher 1C */ |
612 | { | 612 | { |
613 | 0, | 613 | 0, |
614 | SSL3_TXT_FZA_DMS_NULL_SHA, | 614 | SSL3_TXT_FZA_DMS_NULL_SHA, |
615 | SSL3_CK_FZA_DMS_NULL_SHA, | 615 | SSL3_CK_FZA_DMS_NULL_SHA, |
616 | SSL_kFZA, | 616 | SSL_kFZA, |
617 | SSL_aFZA, | 617 | SSL_aFZA, |
618 | SSL_eNULL, | 618 | SSL_eNULL, |
619 | SSL_SHA1, | 619 | SSL_SHA1, |
620 | SSL_SSLV3, | 620 | SSL_SSLV3, |
621 | SSL_NOT_EXP|SSL_STRONG_NONE, | 621 | SSL_NOT_EXP|SSL_STRONG_NONE, |
622 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 622 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
623 | 0, | 623 | 0, |
624 | 0, | 624 | 0, |
625 | }, | 625 | }, |
626 | 626 | ||
627 | /* Cipher 1D */ | 627 | /* Cipher 1D */ |
628 | { | 628 | { |
629 | 0, | 629 | 0, |
630 | SSL3_TXT_FZA_DMS_FZA_SHA, | 630 | SSL3_TXT_FZA_DMS_FZA_SHA, |
631 | SSL3_CK_FZA_DMS_FZA_SHA, | 631 | SSL3_CK_FZA_DMS_FZA_SHA, |
632 | SSL_kFZA, | 632 | SSL_kFZA, |
633 | SSL_aFZA, | 633 | SSL_aFZA, |
634 | SSL_eFZA, | 634 | SSL_eFZA, |
635 | SSL_SHA1, | 635 | SSL_SHA1, |
636 | SSL_SSLV3, | 636 | SSL_SSLV3, |
637 | SSL_NOT_EXP|SSL_STRONG_NONE, | 637 | SSL_NOT_EXP|SSL_STRONG_NONE, |
638 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 638 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
639 | 0, | 639 | 0, |
640 | 0, | 640 | 0, |
641 | }, | 641 | }, |
642 | 642 | ||
643 | /* Cipher 1E */ | 643 | /* Cipher 1E */ |
644 | { | 644 | { |
645 | 0, | 645 | 0, |
646 | SSL3_TXT_FZA_DMS_RC4_SHA, | 646 | SSL3_TXT_FZA_DMS_RC4_SHA, |
647 | SSL3_CK_FZA_DMS_RC4_SHA, | 647 | SSL3_CK_FZA_DMS_RC4_SHA, |
648 | SSL_kFZA, | 648 | SSL_kFZA, |
649 | SSL_aFZA, | 649 | SSL_aFZA, |
650 | SSL_RC4, | 650 | SSL_RC4, |
651 | SSL_SHA1, | 651 | SSL_SHA1, |
652 | SSL_SSLV3, | 652 | SSL_SSLV3, |
653 | SSL_NOT_EXP|SSL_MEDIUM, | 653 | SSL_NOT_EXP|SSL_MEDIUM, |
654 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 654 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
655 | 128, | 655 | 128, |
656 | 128, | 656 | 128, |
657 | }, | 657 | }, |
658 | #endif | 658 | #endif |
659 | 659 | ||
@@ -661,511 +661,511 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]={ | |||
661 | /* The Kerberos ciphers*/ | 661 | /* The Kerberos ciphers*/ |
662 | /* Cipher 1E */ | 662 | /* Cipher 1E */ |
663 | { | 663 | { |
664 | 1, | 664 | 1, |
665 | SSL3_TXT_KRB5_DES_64_CBC_SHA, | 665 | SSL3_TXT_KRB5_DES_64_CBC_SHA, |
666 | SSL3_CK_KRB5_DES_64_CBC_SHA, | 666 | SSL3_CK_KRB5_DES_64_CBC_SHA, |
667 | SSL_kKRB5, | 667 | SSL_kKRB5, |
668 | SSL_aKRB5, | 668 | SSL_aKRB5, |
669 | SSL_DES, | 669 | SSL_DES, |
670 | SSL_SHA1, | 670 | SSL_SHA1, |
671 | SSL_SSLV3, | 671 | SSL_SSLV3, |
672 | SSL_NOT_EXP|SSL_LOW, | 672 | SSL_NOT_EXP|SSL_LOW, |
673 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 673 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
674 | 56, | 674 | 56, |
675 | 56, | 675 | 56, |
676 | }, | 676 | }, |
677 | 677 | ||
678 | /* Cipher 1F */ | 678 | /* Cipher 1F */ |
679 | { | 679 | { |
680 | 1, | 680 | 1, |
681 | SSL3_TXT_KRB5_DES_192_CBC3_SHA, | 681 | SSL3_TXT_KRB5_DES_192_CBC3_SHA, |
682 | SSL3_CK_KRB5_DES_192_CBC3_SHA, | 682 | SSL3_CK_KRB5_DES_192_CBC3_SHA, |
683 | SSL_kKRB5, | 683 | SSL_kKRB5, |
684 | SSL_aKRB5, | 684 | SSL_aKRB5, |
685 | SSL_3DES, | 685 | SSL_3DES, |
686 | SSL_SHA1, | 686 | SSL_SHA1, |
687 | SSL_SSLV3, | 687 | SSL_SSLV3, |
688 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 688 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
689 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 689 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
690 | 168, | 690 | 168, |
691 | 168, | 691 | 168, |
692 | }, | 692 | }, |
693 | 693 | ||
694 | /* Cipher 20 */ | 694 | /* Cipher 20 */ |
695 | { | 695 | { |
696 | 1, | 696 | 1, |
697 | SSL3_TXT_KRB5_RC4_128_SHA, | 697 | SSL3_TXT_KRB5_RC4_128_SHA, |
698 | SSL3_CK_KRB5_RC4_128_SHA, | 698 | SSL3_CK_KRB5_RC4_128_SHA, |
699 | SSL_kKRB5, | 699 | SSL_kKRB5, |
700 | SSL_aKRB5, | 700 | SSL_aKRB5, |
701 | SSL_RC4, | 701 | SSL_RC4, |
702 | SSL_SHA1, | 702 | SSL_SHA1, |
703 | SSL_SSLV3, | 703 | SSL_SSLV3, |
704 | SSL_NOT_EXP|SSL_MEDIUM, | 704 | SSL_NOT_EXP|SSL_MEDIUM, |
705 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 705 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
706 | 128, | 706 | 128, |
707 | 128, | 707 | 128, |
708 | }, | 708 | }, |
709 | 709 | ||
710 | /* Cipher 21 */ | 710 | /* Cipher 21 */ |
711 | { | 711 | { |
712 | 1, | 712 | 1, |
713 | SSL3_TXT_KRB5_IDEA_128_CBC_SHA, | 713 | SSL3_TXT_KRB5_IDEA_128_CBC_SHA, |
714 | SSL3_CK_KRB5_IDEA_128_CBC_SHA, | 714 | SSL3_CK_KRB5_IDEA_128_CBC_SHA, |
715 | SSL_kKRB5, | 715 | SSL_kKRB5, |
716 | SSL_aKRB5, | 716 | SSL_aKRB5, |
717 | SSL_IDEA, | 717 | SSL_IDEA, |
718 | SSL_SHA1, | 718 | SSL_SHA1, |
719 | SSL_SSLV3, | 719 | SSL_SSLV3, |
720 | SSL_NOT_EXP|SSL_MEDIUM, | 720 | SSL_NOT_EXP|SSL_MEDIUM, |
721 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 721 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
722 | 128, | 722 | 128, |
723 | 128, | 723 | 128, |
724 | }, | 724 | }, |
725 | 725 | ||
726 | /* Cipher 22 */ | 726 | /* Cipher 22 */ |
727 | { | 727 | { |
728 | 1, | 728 | 1, |
729 | SSL3_TXT_KRB5_DES_64_CBC_MD5, | 729 | SSL3_TXT_KRB5_DES_64_CBC_MD5, |
730 | SSL3_CK_KRB5_DES_64_CBC_MD5, | 730 | SSL3_CK_KRB5_DES_64_CBC_MD5, |
731 | SSL_kKRB5, | 731 | SSL_kKRB5, |
732 | SSL_aKRB5, | 732 | SSL_aKRB5, |
733 | SSL_DES, | 733 | SSL_DES, |
734 | SSL_MD5, | 734 | SSL_MD5, |
735 | SSL_SSLV3, | 735 | SSL_SSLV3, |
736 | SSL_NOT_EXP|SSL_LOW, | 736 | SSL_NOT_EXP|SSL_LOW, |
737 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 737 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
738 | 56, | 738 | 56, |
739 | 56, | 739 | 56, |
740 | }, | 740 | }, |
741 | 741 | ||
742 | /* Cipher 23 */ | 742 | /* Cipher 23 */ |
743 | { | 743 | { |
744 | 1, | 744 | 1, |
745 | SSL3_TXT_KRB5_DES_192_CBC3_MD5, | 745 | SSL3_TXT_KRB5_DES_192_CBC3_MD5, |
746 | SSL3_CK_KRB5_DES_192_CBC3_MD5, | 746 | SSL3_CK_KRB5_DES_192_CBC3_MD5, |
747 | SSL_kKRB5, | 747 | SSL_kKRB5, |
748 | SSL_aKRB5, | 748 | SSL_aKRB5, |
749 | SSL_3DES, | 749 | SSL_3DES, |
750 | SSL_MD5, | 750 | SSL_MD5, |
751 | SSL_SSLV3, | 751 | SSL_SSLV3, |
752 | SSL_NOT_EXP|SSL_HIGH, | 752 | SSL_NOT_EXP|SSL_HIGH, |
753 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 753 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
754 | 168, | 754 | 168, |
755 | 168, | 755 | 168, |
756 | }, | 756 | }, |
757 | 757 | ||
758 | /* Cipher 24 */ | 758 | /* Cipher 24 */ |
759 | { | 759 | { |
760 | 1, | 760 | 1, |
761 | SSL3_TXT_KRB5_RC4_128_MD5, | 761 | SSL3_TXT_KRB5_RC4_128_MD5, |
762 | SSL3_CK_KRB5_RC4_128_MD5, | 762 | SSL3_CK_KRB5_RC4_128_MD5, |
763 | SSL_kKRB5, | 763 | SSL_kKRB5, |
764 | SSL_aKRB5, | 764 | SSL_aKRB5, |
765 | SSL_RC4, | 765 | SSL_RC4, |
766 | SSL_MD5, | 766 | SSL_MD5, |
767 | SSL_SSLV3, | 767 | SSL_SSLV3, |
768 | SSL_NOT_EXP|SSL_MEDIUM, | 768 | SSL_NOT_EXP|SSL_MEDIUM, |
769 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 769 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
770 | 128, | 770 | 128, |
771 | 128, | 771 | 128, |
772 | }, | 772 | }, |
773 | 773 | ||
774 | /* Cipher 25 */ | 774 | /* Cipher 25 */ |
775 | { | 775 | { |
776 | 1, | 776 | 1, |
777 | SSL3_TXT_KRB5_IDEA_128_CBC_MD5, | 777 | SSL3_TXT_KRB5_IDEA_128_CBC_MD5, |
778 | SSL3_CK_KRB5_IDEA_128_CBC_MD5, | 778 | SSL3_CK_KRB5_IDEA_128_CBC_MD5, |
779 | SSL_kKRB5, | 779 | SSL_kKRB5, |
780 | SSL_aKRB5, | 780 | SSL_aKRB5, |
781 | SSL_IDEA, | 781 | SSL_IDEA, |
782 | SSL_MD5, | 782 | SSL_MD5, |
783 | SSL_SSLV3, | 783 | SSL_SSLV3, |
784 | SSL_NOT_EXP|SSL_MEDIUM, | 784 | SSL_NOT_EXP|SSL_MEDIUM, |
785 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 785 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
786 | 128, | 786 | 128, |
787 | 128, | 787 | 128, |
788 | }, | 788 | }, |
789 | 789 | ||
790 | /* Cipher 26 */ | 790 | /* Cipher 26 */ |
791 | { | 791 | { |
792 | 1, | 792 | 1, |
793 | SSL3_TXT_KRB5_DES_40_CBC_SHA, | 793 | SSL3_TXT_KRB5_DES_40_CBC_SHA, |
794 | SSL3_CK_KRB5_DES_40_CBC_SHA, | 794 | SSL3_CK_KRB5_DES_40_CBC_SHA, |
795 | SSL_kKRB5, | 795 | SSL_kKRB5, |
796 | SSL_aKRB5, | 796 | SSL_aKRB5, |
797 | SSL_DES, | 797 | SSL_DES, |
798 | SSL_SHA1, | 798 | SSL_SHA1, |
799 | SSL_SSLV3, | 799 | SSL_SSLV3, |
800 | SSL_EXPORT|SSL_EXP40, | 800 | SSL_EXPORT|SSL_EXP40, |
801 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 801 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
802 | 40, | 802 | 40, |
803 | 56, | 803 | 56, |
804 | }, | 804 | }, |
805 | 805 | ||
806 | /* Cipher 27 */ | 806 | /* Cipher 27 */ |
807 | { | 807 | { |
808 | 1, | 808 | 1, |
809 | SSL3_TXT_KRB5_RC2_40_CBC_SHA, | 809 | SSL3_TXT_KRB5_RC2_40_CBC_SHA, |
810 | SSL3_CK_KRB5_RC2_40_CBC_SHA, | 810 | SSL3_CK_KRB5_RC2_40_CBC_SHA, |
811 | SSL_kKRB5, | 811 | SSL_kKRB5, |
812 | SSL_aKRB5, | 812 | SSL_aKRB5, |
813 | SSL_RC2, | 813 | SSL_RC2, |
814 | SSL_SHA1, | 814 | SSL_SHA1, |
815 | SSL_SSLV3, | 815 | SSL_SSLV3, |
816 | SSL_EXPORT|SSL_EXP40, | 816 | SSL_EXPORT|SSL_EXP40, |
817 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 817 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
818 | 40, | 818 | 40, |
819 | 128, | 819 | 128, |
820 | }, | 820 | }, |
821 | 821 | ||
822 | /* Cipher 28 */ | 822 | /* Cipher 28 */ |
823 | { | 823 | { |
824 | 1, | 824 | 1, |
825 | SSL3_TXT_KRB5_RC4_40_SHA, | 825 | SSL3_TXT_KRB5_RC4_40_SHA, |
826 | SSL3_CK_KRB5_RC4_40_SHA, | 826 | SSL3_CK_KRB5_RC4_40_SHA, |
827 | SSL_kKRB5, | 827 | SSL_kKRB5, |
828 | SSL_aKRB5, | 828 | SSL_aKRB5, |
829 | SSL_RC4, | 829 | SSL_RC4, |
830 | SSL_SHA1, | 830 | SSL_SHA1, |
831 | SSL_SSLV3, | 831 | SSL_SSLV3, |
832 | SSL_EXPORT|SSL_EXP40, | 832 | SSL_EXPORT|SSL_EXP40, |
833 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 833 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
834 | 40, | 834 | 40, |
835 | 128, | 835 | 128, |
836 | }, | 836 | }, |
837 | 837 | ||
838 | /* Cipher 29 */ | 838 | /* Cipher 29 */ |
839 | { | 839 | { |
840 | 1, | 840 | 1, |
841 | SSL3_TXT_KRB5_DES_40_CBC_MD5, | 841 | SSL3_TXT_KRB5_DES_40_CBC_MD5, |
842 | SSL3_CK_KRB5_DES_40_CBC_MD5, | 842 | SSL3_CK_KRB5_DES_40_CBC_MD5, |
843 | SSL_kKRB5, | 843 | SSL_kKRB5, |
844 | SSL_aKRB5, | 844 | SSL_aKRB5, |
845 | SSL_DES, | 845 | SSL_DES, |
846 | SSL_MD5, | 846 | SSL_MD5, |
847 | SSL_SSLV3, | 847 | SSL_SSLV3, |
848 | SSL_EXPORT|SSL_EXP40, | 848 | SSL_EXPORT|SSL_EXP40, |
849 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 849 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
850 | 40, | 850 | 40, |
851 | 56, | 851 | 56, |
852 | }, | 852 | }, |
853 | 853 | ||
854 | /* Cipher 2A */ | 854 | /* Cipher 2A */ |
855 | { | 855 | { |
856 | 1, | 856 | 1, |
857 | SSL3_TXT_KRB5_RC2_40_CBC_MD5, | 857 | SSL3_TXT_KRB5_RC2_40_CBC_MD5, |
858 | SSL3_CK_KRB5_RC2_40_CBC_MD5, | 858 | SSL3_CK_KRB5_RC2_40_CBC_MD5, |
859 | SSL_kKRB5, | 859 | SSL_kKRB5, |
860 | SSL_aKRB5, | 860 | SSL_aKRB5, |
861 | SSL_RC2, | 861 | SSL_RC2, |
862 | SSL_MD5, | 862 | SSL_MD5, |
863 | SSL_SSLV3, | 863 | SSL_SSLV3, |
864 | SSL_EXPORT|SSL_EXP40, | 864 | SSL_EXPORT|SSL_EXP40, |
865 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 865 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
866 | 40, | 866 | 40, |
867 | 128, | 867 | 128, |
868 | }, | 868 | }, |
869 | 869 | ||
870 | /* Cipher 2B */ | 870 | /* Cipher 2B */ |
871 | { | 871 | { |
872 | 1, | 872 | 1, |
873 | SSL3_TXT_KRB5_RC4_40_MD5, | 873 | SSL3_TXT_KRB5_RC4_40_MD5, |
874 | SSL3_CK_KRB5_RC4_40_MD5, | 874 | SSL3_CK_KRB5_RC4_40_MD5, |
875 | SSL_kKRB5, | 875 | SSL_kKRB5, |
876 | SSL_aKRB5, | 876 | SSL_aKRB5, |
877 | SSL_RC4, | 877 | SSL_RC4, |
878 | SSL_MD5, | 878 | SSL_MD5, |
879 | SSL_SSLV3, | 879 | SSL_SSLV3, |
880 | SSL_EXPORT|SSL_EXP40, | 880 | SSL_EXPORT|SSL_EXP40, |
881 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 881 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
882 | 40, | 882 | 40, |
883 | 128, | 883 | 128, |
884 | }, | 884 | }, |
885 | #endif /* OPENSSL_NO_KRB5 */ | 885 | #endif /* OPENSSL_NO_KRB5 */ |
886 | 886 | ||
887 | /* New AES ciphersuites */ | 887 | /* New AES ciphersuites */ |
888 | /* Cipher 2F */ | 888 | /* Cipher 2F */ |
889 | { | 889 | { |
890 | 1, | 890 | 1, |
891 | TLS1_TXT_RSA_WITH_AES_128_SHA, | 891 | TLS1_TXT_RSA_WITH_AES_128_SHA, |
892 | TLS1_CK_RSA_WITH_AES_128_SHA, | 892 | TLS1_CK_RSA_WITH_AES_128_SHA, |
893 | SSL_kRSA, | 893 | SSL_kRSA, |
894 | SSL_aRSA, | 894 | SSL_aRSA, |
895 | SSL_AES128, | 895 | SSL_AES128, |
896 | SSL_SHA1, | 896 | SSL_SHA1, |
897 | SSL_TLSV1, | 897 | SSL_TLSV1, |
898 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 898 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
899 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 899 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
900 | 128, | 900 | 128, |
901 | 128, | 901 | 128, |
902 | }, | 902 | }, |
903 | /* Cipher 30 */ | 903 | /* Cipher 30 */ |
904 | { | 904 | { |
905 | 0, | 905 | 0, |
906 | TLS1_TXT_DH_DSS_WITH_AES_128_SHA, | 906 | TLS1_TXT_DH_DSS_WITH_AES_128_SHA, |
907 | TLS1_CK_DH_DSS_WITH_AES_128_SHA, | 907 | TLS1_CK_DH_DSS_WITH_AES_128_SHA, |
908 | SSL_kDHd, | 908 | SSL_kDHd, |
909 | SSL_aDH, | 909 | SSL_aDH, |
910 | SSL_AES128, | 910 | SSL_AES128, |
911 | SSL_SHA1, | 911 | SSL_SHA1, |
912 | SSL_TLSV1, | 912 | SSL_TLSV1, |
913 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 913 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
914 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 914 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
915 | 128, | 915 | 128, |
916 | 128, | 916 | 128, |
917 | }, | 917 | }, |
918 | /* Cipher 31 */ | 918 | /* Cipher 31 */ |
919 | { | 919 | { |
920 | 0, | 920 | 0, |
921 | TLS1_TXT_DH_RSA_WITH_AES_128_SHA, | 921 | TLS1_TXT_DH_RSA_WITH_AES_128_SHA, |
922 | TLS1_CK_DH_RSA_WITH_AES_128_SHA, | 922 | TLS1_CK_DH_RSA_WITH_AES_128_SHA, |
923 | SSL_kDHr, | 923 | SSL_kDHr, |
924 | SSL_aDH, | 924 | SSL_aDH, |
925 | SSL_AES128, | 925 | SSL_AES128, |
926 | SSL_SHA1, | 926 | SSL_SHA1, |
927 | SSL_TLSV1, | 927 | SSL_TLSV1, |
928 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 928 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
929 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 929 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
930 | 128, | 930 | 128, |
931 | 128, | 931 | 128, |
932 | }, | 932 | }, |
933 | /* Cipher 32 */ | 933 | /* Cipher 32 */ |
934 | { | 934 | { |
935 | 1, | 935 | 1, |
936 | TLS1_TXT_DHE_DSS_WITH_AES_128_SHA, | 936 | TLS1_TXT_DHE_DSS_WITH_AES_128_SHA, |
937 | TLS1_CK_DHE_DSS_WITH_AES_128_SHA, | 937 | TLS1_CK_DHE_DSS_WITH_AES_128_SHA, |
938 | SSL_kEDH, | 938 | SSL_kEDH, |
939 | SSL_aDSS, | 939 | SSL_aDSS, |
940 | SSL_AES128, | 940 | SSL_AES128, |
941 | SSL_SHA1, | 941 | SSL_SHA1, |
942 | SSL_TLSV1, | 942 | SSL_TLSV1, |
943 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 943 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
944 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 944 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
945 | 128, | 945 | 128, |
946 | 128, | 946 | 128, |
947 | }, | 947 | }, |
948 | /* Cipher 33 */ | 948 | /* Cipher 33 */ |
949 | { | 949 | { |
950 | 1, | 950 | 1, |
951 | TLS1_TXT_DHE_RSA_WITH_AES_128_SHA, | 951 | TLS1_TXT_DHE_RSA_WITH_AES_128_SHA, |
952 | TLS1_CK_DHE_RSA_WITH_AES_128_SHA, | 952 | TLS1_CK_DHE_RSA_WITH_AES_128_SHA, |
953 | SSL_kEDH, | 953 | SSL_kEDH, |
954 | SSL_aRSA, | 954 | SSL_aRSA, |
955 | SSL_AES128, | 955 | SSL_AES128, |
956 | SSL_SHA1, | 956 | SSL_SHA1, |
957 | SSL_TLSV1, | 957 | SSL_TLSV1, |
958 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 958 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
959 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 959 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
960 | 128, | 960 | 128, |
961 | 128, | 961 | 128, |
962 | }, | 962 | }, |
963 | /* Cipher 34 */ | 963 | /* Cipher 34 */ |
964 | { | 964 | { |
965 | 1, | 965 | 1, |
966 | TLS1_TXT_ADH_WITH_AES_128_SHA, | 966 | TLS1_TXT_ADH_WITH_AES_128_SHA, |
967 | TLS1_CK_ADH_WITH_AES_128_SHA, | 967 | TLS1_CK_ADH_WITH_AES_128_SHA, |
968 | SSL_kEDH, | 968 | SSL_kEDH, |
969 | SSL_aNULL, | 969 | SSL_aNULL, |
970 | SSL_AES128, | 970 | SSL_AES128, |
971 | SSL_SHA1, | 971 | SSL_SHA1, |
972 | SSL_TLSV1, | 972 | SSL_TLSV1, |
973 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 973 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
974 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 974 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
975 | 128, | 975 | 128, |
976 | 128, | 976 | 128, |
977 | }, | 977 | }, |
978 | 978 | ||
979 | /* Cipher 35 */ | 979 | /* Cipher 35 */ |
980 | { | 980 | { |
981 | 1, | 981 | 1, |
982 | TLS1_TXT_RSA_WITH_AES_256_SHA, | 982 | TLS1_TXT_RSA_WITH_AES_256_SHA, |
983 | TLS1_CK_RSA_WITH_AES_256_SHA, | 983 | TLS1_CK_RSA_WITH_AES_256_SHA, |
984 | SSL_kRSA, | 984 | SSL_kRSA, |
985 | SSL_aRSA, | 985 | SSL_aRSA, |
986 | SSL_AES256, | 986 | SSL_AES256, |
987 | SSL_SHA1, | 987 | SSL_SHA1, |
988 | SSL_TLSV1, | 988 | SSL_TLSV1, |
989 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 989 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
990 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 990 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
991 | 256, | 991 | 256, |
992 | 256, | 992 | 256, |
993 | }, | 993 | }, |
994 | /* Cipher 36 */ | 994 | /* Cipher 36 */ |
995 | { | 995 | { |
996 | 0, | 996 | 0, |
997 | TLS1_TXT_DH_DSS_WITH_AES_256_SHA, | 997 | TLS1_TXT_DH_DSS_WITH_AES_256_SHA, |
998 | TLS1_CK_DH_DSS_WITH_AES_256_SHA, | 998 | TLS1_CK_DH_DSS_WITH_AES_256_SHA, |
999 | SSL_kDHd, | 999 | SSL_kDHd, |
1000 | SSL_aDH, | 1000 | SSL_aDH, |
1001 | SSL_AES256, | 1001 | SSL_AES256, |
1002 | SSL_SHA1, | 1002 | SSL_SHA1, |
1003 | SSL_TLSV1, | 1003 | SSL_TLSV1, |
1004 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1004 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
1005 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1005 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1006 | 256, | 1006 | 256, |
1007 | 256, | 1007 | 256, |
1008 | }, | 1008 | }, |
1009 | 1009 | ||
1010 | /* Cipher 37 */ | 1010 | /* Cipher 37 */ |
1011 | { | 1011 | { |
1012 | 0, /* not implemented (non-ephemeral DH) */ | 1012 | 0, /* not implemented (non-ephemeral DH) */ |
1013 | TLS1_TXT_DH_RSA_WITH_AES_256_SHA, | 1013 | TLS1_TXT_DH_RSA_WITH_AES_256_SHA, |
1014 | TLS1_CK_DH_RSA_WITH_AES_256_SHA, | 1014 | TLS1_CK_DH_RSA_WITH_AES_256_SHA, |
1015 | SSL_kDHr, | 1015 | SSL_kDHr, |
1016 | SSL_aDH, | 1016 | SSL_aDH, |
1017 | SSL_AES256, | 1017 | SSL_AES256, |
1018 | SSL_SHA1, | 1018 | SSL_SHA1, |
1019 | SSL_TLSV1, | 1019 | SSL_TLSV1, |
1020 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1020 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
1021 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1021 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1022 | 256, | 1022 | 256, |
1023 | 256, | 1023 | 256, |
1024 | }, | 1024 | }, |
1025 | 1025 | ||
1026 | /* Cipher 38 */ | 1026 | /* Cipher 38 */ |
1027 | { | 1027 | { |
1028 | 1, | 1028 | 1, |
1029 | TLS1_TXT_DHE_DSS_WITH_AES_256_SHA, | 1029 | TLS1_TXT_DHE_DSS_WITH_AES_256_SHA, |
1030 | TLS1_CK_DHE_DSS_WITH_AES_256_SHA, | 1030 | TLS1_CK_DHE_DSS_WITH_AES_256_SHA, |
1031 | SSL_kEDH, | 1031 | SSL_kEDH, |
1032 | SSL_aDSS, | 1032 | SSL_aDSS, |
1033 | SSL_AES256, | 1033 | SSL_AES256, |
1034 | SSL_SHA1, | 1034 | SSL_SHA1, |
1035 | SSL_TLSV1, | 1035 | SSL_TLSV1, |
1036 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1036 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
1037 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1037 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1038 | 256, | 1038 | 256, |
1039 | 256, | 1039 | 256, |
1040 | }, | 1040 | }, |
1041 | 1041 | ||
1042 | /* Cipher 39 */ | 1042 | /* Cipher 39 */ |
1043 | { | 1043 | { |
1044 | 1, | 1044 | 1, |
1045 | TLS1_TXT_DHE_RSA_WITH_AES_256_SHA, | 1045 | TLS1_TXT_DHE_RSA_WITH_AES_256_SHA, |
1046 | TLS1_CK_DHE_RSA_WITH_AES_256_SHA, | 1046 | TLS1_CK_DHE_RSA_WITH_AES_256_SHA, |
1047 | SSL_kEDH, | 1047 | SSL_kEDH, |
1048 | SSL_aRSA, | 1048 | SSL_aRSA, |
1049 | SSL_AES256, | 1049 | SSL_AES256, |
1050 | SSL_SHA1, | 1050 | SSL_SHA1, |
1051 | SSL_TLSV1, | 1051 | SSL_TLSV1, |
1052 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1052 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
1053 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1053 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1054 | 256, | 1054 | 256, |
1055 | 256, | 1055 | 256, |
1056 | }, | 1056 | }, |
1057 | 1057 | ||
1058 | /* Cipher 3A */ | 1058 | /* Cipher 3A */ |
1059 | { | 1059 | { |
1060 | 1, | 1060 | 1, |
1061 | TLS1_TXT_ADH_WITH_AES_256_SHA, | 1061 | TLS1_TXT_ADH_WITH_AES_256_SHA, |
1062 | TLS1_CK_ADH_WITH_AES_256_SHA, | 1062 | TLS1_CK_ADH_WITH_AES_256_SHA, |
1063 | SSL_kEDH, | 1063 | SSL_kEDH, |
1064 | SSL_aNULL, | 1064 | SSL_aNULL, |
1065 | SSL_AES256, | 1065 | SSL_AES256, |
1066 | SSL_SHA1, | 1066 | SSL_SHA1, |
1067 | SSL_TLSV1, | 1067 | SSL_TLSV1, |
1068 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1068 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
1069 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1069 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1070 | 256, | 1070 | 256, |
1071 | 256, | 1071 | 256, |
1072 | }, | 1072 | }, |
1073 | 1073 | ||
1074 | /* TLS v1.2 ciphersuites */ | 1074 | /* TLS v1.2 ciphersuites */ |
1075 | /* Cipher 3B */ | 1075 | /* Cipher 3B */ |
1076 | { | 1076 | { |
1077 | 1, | 1077 | 1, |
1078 | TLS1_TXT_RSA_WITH_NULL_SHA256, | 1078 | TLS1_TXT_RSA_WITH_NULL_SHA256, |
1079 | TLS1_CK_RSA_WITH_NULL_SHA256, | 1079 | TLS1_CK_RSA_WITH_NULL_SHA256, |
1080 | SSL_kRSA, | 1080 | SSL_kRSA, |
1081 | SSL_aRSA, | 1081 | SSL_aRSA, |
1082 | SSL_eNULL, | 1082 | SSL_eNULL, |
1083 | SSL_SHA256, | 1083 | SSL_SHA256, |
1084 | SSL_TLSV1_2, | 1084 | SSL_TLSV1_2, |
1085 | SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS, | 1085 | SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS, |
1086 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1086 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1087 | 0, | 1087 | 0, |
1088 | 0, | 1088 | 0, |
1089 | }, | 1089 | }, |
1090 | 1090 | ||
1091 | /* Cipher 3C */ | 1091 | /* Cipher 3C */ |
1092 | { | 1092 | { |
1093 | 1, | 1093 | 1, |
1094 | TLS1_TXT_RSA_WITH_AES_128_SHA256, | 1094 | TLS1_TXT_RSA_WITH_AES_128_SHA256, |
1095 | TLS1_CK_RSA_WITH_AES_128_SHA256, | 1095 | TLS1_CK_RSA_WITH_AES_128_SHA256, |
1096 | SSL_kRSA, | 1096 | SSL_kRSA, |
1097 | SSL_aRSA, | 1097 | SSL_aRSA, |
1098 | SSL_AES128, | 1098 | SSL_AES128, |
1099 | SSL_SHA256, | 1099 | SSL_SHA256, |
1100 | SSL_TLSV1_2, | 1100 | SSL_TLSV1_2, |
1101 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1101 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
1102 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1102 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1103 | 128, | 1103 | 128, |
1104 | 128, | 1104 | 128, |
1105 | }, | 1105 | }, |
1106 | 1106 | ||
1107 | /* Cipher 3D */ | 1107 | /* Cipher 3D */ |
1108 | { | 1108 | { |
1109 | 1, | 1109 | 1, |
1110 | TLS1_TXT_RSA_WITH_AES_256_SHA256, | 1110 | TLS1_TXT_RSA_WITH_AES_256_SHA256, |
1111 | TLS1_CK_RSA_WITH_AES_256_SHA256, | 1111 | TLS1_CK_RSA_WITH_AES_256_SHA256, |
1112 | SSL_kRSA, | 1112 | SSL_kRSA, |
1113 | SSL_aRSA, | 1113 | SSL_aRSA, |
1114 | SSL_AES256, | 1114 | SSL_AES256, |
1115 | SSL_SHA256, | 1115 | SSL_SHA256, |
1116 | SSL_TLSV1_2, | 1116 | SSL_TLSV1_2, |
1117 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1117 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
1118 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1118 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1119 | 256, | 1119 | 256, |
1120 | 256, | 1120 | 256, |
1121 | }, | 1121 | }, |
1122 | 1122 | ||
1123 | /* Cipher 3E */ | 1123 | /* Cipher 3E */ |
1124 | { | 1124 | { |
1125 | 0, /* not implemented (non-ephemeral DH) */ | 1125 | 0, /* not implemented (non-ephemeral DH) */ |
1126 | TLS1_TXT_DH_DSS_WITH_AES_128_SHA256, | 1126 | TLS1_TXT_DH_DSS_WITH_AES_128_SHA256, |
1127 | TLS1_CK_DH_DSS_WITH_AES_128_SHA256, | 1127 | TLS1_CK_DH_DSS_WITH_AES_128_SHA256, |
1128 | SSL_kDHd, | 1128 | SSL_kDHd, |
1129 | SSL_aDH, | 1129 | SSL_aDH, |
1130 | SSL_AES128, | 1130 | SSL_AES128, |
1131 | SSL_SHA256, | 1131 | SSL_SHA256, |
1132 | SSL_TLSV1_2, | 1132 | SSL_TLSV1_2, |
1133 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1133 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
1134 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1134 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1135 | 128, | 1135 | 128, |
1136 | 128, | 1136 | 128, |
1137 | }, | 1137 | }, |
1138 | 1138 | ||
1139 | /* Cipher 3F */ | 1139 | /* Cipher 3F */ |
1140 | { | 1140 | { |
1141 | 0, /* not implemented (non-ephemeral DH) */ | 1141 | 0, /* not implemented (non-ephemeral DH) */ |
1142 | TLS1_TXT_DH_RSA_WITH_AES_128_SHA256, | 1142 | TLS1_TXT_DH_RSA_WITH_AES_128_SHA256, |
1143 | TLS1_CK_DH_RSA_WITH_AES_128_SHA256, | 1143 | TLS1_CK_DH_RSA_WITH_AES_128_SHA256, |
1144 | SSL_kDHr, | 1144 | SSL_kDHr, |
1145 | SSL_aDH, | 1145 | SSL_aDH, |
1146 | SSL_AES128, | 1146 | SSL_AES128, |
1147 | SSL_SHA256, | 1147 | SSL_SHA256, |
1148 | SSL_TLSV1_2, | 1148 | SSL_TLSV1_2, |
1149 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1149 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
1150 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1150 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1151 | 128, | 1151 | 128, |
1152 | 128, | 1152 | 128, |
1153 | }, | 1153 | }, |
1154 | 1154 | ||
1155 | /* Cipher 40 */ | 1155 | /* Cipher 40 */ |
1156 | { | 1156 | { |
1157 | 1, | 1157 | 1, |
1158 | TLS1_TXT_DHE_DSS_WITH_AES_128_SHA256, | 1158 | TLS1_TXT_DHE_DSS_WITH_AES_128_SHA256, |
1159 | TLS1_CK_DHE_DSS_WITH_AES_128_SHA256, | 1159 | TLS1_CK_DHE_DSS_WITH_AES_128_SHA256, |
1160 | SSL_kEDH, | 1160 | SSL_kEDH, |
1161 | SSL_aDSS, | 1161 | SSL_aDSS, |
1162 | SSL_AES128, | 1162 | SSL_AES128, |
1163 | SSL_SHA256, | 1163 | SSL_SHA256, |
1164 | SSL_TLSV1_2, | 1164 | SSL_TLSV1_2, |
1165 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1165 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
1166 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1166 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1167 | 128, | 1167 | 128, |
1168 | 128, | 1168 | 128, |
1169 | }, | 1169 | }, |
1170 | 1170 | ||
1171 | #ifndef OPENSSL_NO_CAMELLIA | 1171 | #ifndef OPENSSL_NO_CAMELLIA |
@@ -1173,98 +1173,98 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]={ | |||
1173 | 1173 | ||
1174 | /* Cipher 41 */ | 1174 | /* Cipher 41 */ |
1175 | { | 1175 | { |
1176 | 1, | 1176 | 1, |
1177 | TLS1_TXT_RSA_WITH_CAMELLIA_128_CBC_SHA, | 1177 | TLS1_TXT_RSA_WITH_CAMELLIA_128_CBC_SHA, |
1178 | TLS1_CK_RSA_WITH_CAMELLIA_128_CBC_SHA, | 1178 | TLS1_CK_RSA_WITH_CAMELLIA_128_CBC_SHA, |
1179 | SSL_kRSA, | 1179 | SSL_kRSA, |
1180 | SSL_aRSA, | 1180 | SSL_aRSA, |
1181 | SSL_CAMELLIA128, | 1181 | SSL_CAMELLIA128, |
1182 | SSL_SHA1, | 1182 | SSL_SHA1, |
1183 | SSL_TLSV1, | 1183 | SSL_TLSV1, |
1184 | SSL_NOT_EXP|SSL_HIGH, | 1184 | SSL_NOT_EXP|SSL_HIGH, |
1185 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1185 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1186 | 128, | 1186 | 128, |
1187 | 128, | 1187 | 128, |
1188 | }, | 1188 | }, |
1189 | 1189 | ||
1190 | /* Cipher 42 */ | 1190 | /* Cipher 42 */ |
1191 | { | 1191 | { |
1192 | 0, /* not implemented (non-ephemeral DH) */ | 1192 | 0, /* not implemented (non-ephemeral DH) */ |
1193 | TLS1_TXT_DH_DSS_WITH_CAMELLIA_128_CBC_SHA, | 1193 | TLS1_TXT_DH_DSS_WITH_CAMELLIA_128_CBC_SHA, |
1194 | TLS1_CK_DH_DSS_WITH_CAMELLIA_128_CBC_SHA, | 1194 | TLS1_CK_DH_DSS_WITH_CAMELLIA_128_CBC_SHA, |
1195 | SSL_kDHd, | 1195 | SSL_kDHd, |
1196 | SSL_aDH, | 1196 | SSL_aDH, |
1197 | SSL_CAMELLIA128, | 1197 | SSL_CAMELLIA128, |
1198 | SSL_SHA1, | 1198 | SSL_SHA1, |
1199 | SSL_TLSV1, | 1199 | SSL_TLSV1, |
1200 | SSL_NOT_EXP|SSL_HIGH, | 1200 | SSL_NOT_EXP|SSL_HIGH, |
1201 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1201 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1202 | 128, | 1202 | 128, |
1203 | 128, | 1203 | 128, |
1204 | }, | 1204 | }, |
1205 | 1205 | ||
1206 | /* Cipher 43 */ | 1206 | /* Cipher 43 */ |
1207 | { | 1207 | { |
1208 | 0, /* not implemented (non-ephemeral DH) */ | 1208 | 0, /* not implemented (non-ephemeral DH) */ |
1209 | TLS1_TXT_DH_RSA_WITH_CAMELLIA_128_CBC_SHA, | 1209 | TLS1_TXT_DH_RSA_WITH_CAMELLIA_128_CBC_SHA, |
1210 | TLS1_CK_DH_RSA_WITH_CAMELLIA_128_CBC_SHA, | 1210 | TLS1_CK_DH_RSA_WITH_CAMELLIA_128_CBC_SHA, |
1211 | SSL_kDHr, | 1211 | SSL_kDHr, |
1212 | SSL_aDH, | 1212 | SSL_aDH, |
1213 | SSL_CAMELLIA128, | 1213 | SSL_CAMELLIA128, |
1214 | SSL_SHA1, | 1214 | SSL_SHA1, |
1215 | SSL_TLSV1, | 1215 | SSL_TLSV1, |
1216 | SSL_NOT_EXP|SSL_HIGH, | 1216 | SSL_NOT_EXP|SSL_HIGH, |
1217 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1217 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1218 | 128, | 1218 | 128, |
1219 | 128, | 1219 | 128, |
1220 | }, | 1220 | }, |
1221 | 1221 | ||
1222 | /* Cipher 44 */ | 1222 | /* Cipher 44 */ |
1223 | { | 1223 | { |
1224 | 1, | 1224 | 1, |
1225 | TLS1_TXT_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA, | 1225 | TLS1_TXT_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA, |
1226 | TLS1_CK_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA, | 1226 | TLS1_CK_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA, |
1227 | SSL_kEDH, | 1227 | SSL_kEDH, |
1228 | SSL_aDSS, | 1228 | SSL_aDSS, |
1229 | SSL_CAMELLIA128, | 1229 | SSL_CAMELLIA128, |
1230 | SSL_SHA1, | 1230 | SSL_SHA1, |
1231 | SSL_TLSV1, | 1231 | SSL_TLSV1, |
1232 | SSL_NOT_EXP|SSL_HIGH, | 1232 | SSL_NOT_EXP|SSL_HIGH, |
1233 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1233 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1234 | 128, | 1234 | 128, |
1235 | 128, | 1235 | 128, |
1236 | }, | 1236 | }, |
1237 | 1237 | ||
1238 | /* Cipher 45 */ | 1238 | /* Cipher 45 */ |
1239 | { | 1239 | { |
1240 | 1, | 1240 | 1, |
1241 | TLS1_TXT_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA, | 1241 | TLS1_TXT_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA, |
1242 | TLS1_CK_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA, | 1242 | TLS1_CK_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA, |
1243 | SSL_kEDH, | 1243 | SSL_kEDH, |
1244 | SSL_aRSA, | 1244 | SSL_aRSA, |
1245 | SSL_CAMELLIA128, | 1245 | SSL_CAMELLIA128, |
1246 | SSL_SHA1, | 1246 | SSL_SHA1, |
1247 | SSL_TLSV1, | 1247 | SSL_TLSV1, |
1248 | SSL_NOT_EXP|SSL_HIGH, | 1248 | SSL_NOT_EXP|SSL_HIGH, |
1249 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1249 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1250 | 128, | 1250 | 128, |
1251 | 128, | 1251 | 128, |
1252 | }, | 1252 | }, |
1253 | 1253 | ||
1254 | /* Cipher 46 */ | 1254 | /* Cipher 46 */ |
1255 | { | 1255 | { |
1256 | 1, | 1256 | 1, |
1257 | TLS1_TXT_ADH_WITH_CAMELLIA_128_CBC_SHA, | 1257 | TLS1_TXT_ADH_WITH_CAMELLIA_128_CBC_SHA, |
1258 | TLS1_CK_ADH_WITH_CAMELLIA_128_CBC_SHA, | 1258 | TLS1_CK_ADH_WITH_CAMELLIA_128_CBC_SHA, |
1259 | SSL_kEDH, | 1259 | SSL_kEDH, |
1260 | SSL_aNULL, | 1260 | SSL_aNULL, |
1261 | SSL_CAMELLIA128, | 1261 | SSL_CAMELLIA128, |
1262 | SSL_SHA1, | 1262 | SSL_SHA1, |
1263 | SSL_TLSV1, | 1263 | SSL_TLSV1, |
1264 | SSL_NOT_EXP|SSL_HIGH, | 1264 | SSL_NOT_EXP|SSL_HIGH, |
1265 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1265 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1266 | 128, | 1266 | 128, |
1267 | 128, | 1267 | 128, |
1268 | }, | 1268 | }, |
1269 | #endif /* OPENSSL_NO_CAMELLIA */ | 1269 | #endif /* OPENSSL_NO_CAMELLIA */ |
1270 | 1270 | ||
@@ -1273,288 +1273,288 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]={ | |||
1273 | #if 0 | 1273 | #if 0 |
1274 | /* Cipher 60 */ | 1274 | /* Cipher 60 */ |
1275 | { | 1275 | { |
1276 | 1, | 1276 | 1, |
1277 | TLS1_TXT_RSA_EXPORT1024_WITH_RC4_56_MD5, | 1277 | TLS1_TXT_RSA_EXPORT1024_WITH_RC4_56_MD5, |
1278 | TLS1_CK_RSA_EXPORT1024_WITH_RC4_56_MD5, | 1278 | TLS1_CK_RSA_EXPORT1024_WITH_RC4_56_MD5, |
1279 | SSL_kRSA, | 1279 | SSL_kRSA, |
1280 | SSL_aRSA, | 1280 | SSL_aRSA, |
1281 | SSL_RC4, | 1281 | SSL_RC4, |
1282 | SSL_MD5, | 1282 | SSL_MD5, |
1283 | SSL_TLSV1, | 1283 | SSL_TLSV1, |
1284 | SSL_EXPORT|SSL_EXP56, | 1284 | SSL_EXPORT|SSL_EXP56, |
1285 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1285 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1286 | 56, | 1286 | 56, |
1287 | 128, | 1287 | 128, |
1288 | }, | 1288 | }, |
1289 | 1289 | ||
1290 | /* Cipher 61 */ | 1290 | /* Cipher 61 */ |
1291 | { | 1291 | { |
1292 | 1, | 1292 | 1, |
1293 | TLS1_TXT_RSA_EXPORT1024_WITH_RC2_CBC_56_MD5, | 1293 | TLS1_TXT_RSA_EXPORT1024_WITH_RC2_CBC_56_MD5, |
1294 | TLS1_CK_RSA_EXPORT1024_WITH_RC2_CBC_56_MD5, | 1294 | TLS1_CK_RSA_EXPORT1024_WITH_RC2_CBC_56_MD5, |
1295 | SSL_kRSA, | 1295 | SSL_kRSA, |
1296 | SSL_aRSA, | 1296 | SSL_aRSA, |
1297 | SSL_RC2, | 1297 | SSL_RC2, |
1298 | SSL_MD5, | 1298 | SSL_MD5, |
1299 | SSL_TLSV1, | 1299 | SSL_TLSV1, |
1300 | SSL_EXPORT|SSL_EXP56, | 1300 | SSL_EXPORT|SSL_EXP56, |
1301 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1301 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1302 | 56, | 1302 | 56, |
1303 | 128, | 1303 | 128, |
1304 | }, | 1304 | }, |
1305 | #endif | 1305 | #endif |
1306 | 1306 | ||
1307 | /* Cipher 62 */ | 1307 | /* Cipher 62 */ |
1308 | { | 1308 | { |
1309 | 1, | 1309 | 1, |
1310 | TLS1_TXT_RSA_EXPORT1024_WITH_DES_CBC_SHA, | 1310 | TLS1_TXT_RSA_EXPORT1024_WITH_DES_CBC_SHA, |
1311 | TLS1_CK_RSA_EXPORT1024_WITH_DES_CBC_SHA, | 1311 | TLS1_CK_RSA_EXPORT1024_WITH_DES_CBC_SHA, |
1312 | SSL_kRSA, | 1312 | SSL_kRSA, |
1313 | SSL_aRSA, | 1313 | SSL_aRSA, |
1314 | SSL_DES, | 1314 | SSL_DES, |
1315 | SSL_SHA1, | 1315 | SSL_SHA1, |
1316 | SSL_TLSV1, | 1316 | SSL_TLSV1, |
1317 | SSL_EXPORT|SSL_EXP56, | 1317 | SSL_EXPORT|SSL_EXP56, |
1318 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1318 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1319 | 56, | 1319 | 56, |
1320 | 56, | 1320 | 56, |
1321 | }, | 1321 | }, |
1322 | 1322 | ||
1323 | /* Cipher 63 */ | 1323 | /* Cipher 63 */ |
1324 | { | 1324 | { |
1325 | 1, | 1325 | 1, |
1326 | TLS1_TXT_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA, | 1326 | TLS1_TXT_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA, |
1327 | TLS1_CK_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA, | 1327 | TLS1_CK_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA, |
1328 | SSL_kEDH, | 1328 | SSL_kEDH, |
1329 | SSL_aDSS, | 1329 | SSL_aDSS, |
1330 | SSL_DES, | 1330 | SSL_DES, |
1331 | SSL_SHA1, | 1331 | SSL_SHA1, |
1332 | SSL_TLSV1, | 1332 | SSL_TLSV1, |
1333 | SSL_EXPORT|SSL_EXP56, | 1333 | SSL_EXPORT|SSL_EXP56, |
1334 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1334 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1335 | 56, | 1335 | 56, |
1336 | 56, | 1336 | 56, |
1337 | }, | 1337 | }, |
1338 | 1338 | ||
1339 | /* Cipher 64 */ | 1339 | /* Cipher 64 */ |
1340 | { | 1340 | { |
1341 | 1, | 1341 | 1, |
1342 | TLS1_TXT_RSA_EXPORT1024_WITH_RC4_56_SHA, | 1342 | TLS1_TXT_RSA_EXPORT1024_WITH_RC4_56_SHA, |
1343 | TLS1_CK_RSA_EXPORT1024_WITH_RC4_56_SHA, | 1343 | TLS1_CK_RSA_EXPORT1024_WITH_RC4_56_SHA, |
1344 | SSL_kRSA, | 1344 | SSL_kRSA, |
1345 | SSL_aRSA, | 1345 | SSL_aRSA, |
1346 | SSL_RC4, | 1346 | SSL_RC4, |
1347 | SSL_SHA1, | 1347 | SSL_SHA1, |
1348 | SSL_TLSV1, | 1348 | SSL_TLSV1, |
1349 | SSL_EXPORT|SSL_EXP56, | 1349 | SSL_EXPORT|SSL_EXP56, |
1350 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1350 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1351 | 56, | 1351 | 56, |
1352 | 128, | 1352 | 128, |
1353 | }, | 1353 | }, |
1354 | 1354 | ||
1355 | /* Cipher 65 */ | 1355 | /* Cipher 65 */ |
1356 | { | 1356 | { |
1357 | 1, | 1357 | 1, |
1358 | TLS1_TXT_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA, | 1358 | TLS1_TXT_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA, |
1359 | TLS1_CK_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA, | 1359 | TLS1_CK_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA, |
1360 | SSL_kEDH, | 1360 | SSL_kEDH, |
1361 | SSL_aDSS, | 1361 | SSL_aDSS, |
1362 | SSL_RC4, | 1362 | SSL_RC4, |
1363 | SSL_SHA1, | 1363 | SSL_SHA1, |
1364 | SSL_TLSV1, | 1364 | SSL_TLSV1, |
1365 | SSL_EXPORT|SSL_EXP56, | 1365 | SSL_EXPORT|SSL_EXP56, |
1366 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1366 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1367 | 56, | 1367 | 56, |
1368 | 128, | 1368 | 128, |
1369 | }, | 1369 | }, |
1370 | 1370 | ||
1371 | /* Cipher 66 */ | 1371 | /* Cipher 66 */ |
1372 | { | 1372 | { |
1373 | 1, | 1373 | 1, |
1374 | TLS1_TXT_DHE_DSS_WITH_RC4_128_SHA, | 1374 | TLS1_TXT_DHE_DSS_WITH_RC4_128_SHA, |
1375 | TLS1_CK_DHE_DSS_WITH_RC4_128_SHA, | 1375 | TLS1_CK_DHE_DSS_WITH_RC4_128_SHA, |
1376 | SSL_kEDH, | 1376 | SSL_kEDH, |
1377 | SSL_aDSS, | 1377 | SSL_aDSS, |
1378 | SSL_RC4, | 1378 | SSL_RC4, |
1379 | SSL_SHA1, | 1379 | SSL_SHA1, |
1380 | SSL_TLSV1, | 1380 | SSL_TLSV1, |
1381 | SSL_NOT_EXP|SSL_MEDIUM, | 1381 | SSL_NOT_EXP|SSL_MEDIUM, |
1382 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1382 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1383 | 128, | 1383 | 128, |
1384 | 128, | 1384 | 128, |
1385 | }, | 1385 | }, |
1386 | #endif | 1386 | #endif |
1387 | 1387 | ||
1388 | /* TLS v1.2 ciphersuites */ | 1388 | /* TLS v1.2 ciphersuites */ |
1389 | /* Cipher 67 */ | 1389 | /* Cipher 67 */ |
1390 | { | 1390 | { |
1391 | 1, | 1391 | 1, |
1392 | TLS1_TXT_DHE_RSA_WITH_AES_128_SHA256, | 1392 | TLS1_TXT_DHE_RSA_WITH_AES_128_SHA256, |
1393 | TLS1_CK_DHE_RSA_WITH_AES_128_SHA256, | 1393 | TLS1_CK_DHE_RSA_WITH_AES_128_SHA256, |
1394 | SSL_kEDH, | 1394 | SSL_kEDH, |
1395 | SSL_aRSA, | 1395 | SSL_aRSA, |
1396 | SSL_AES128, | 1396 | SSL_AES128, |
1397 | SSL_SHA256, | 1397 | SSL_SHA256, |
1398 | SSL_TLSV1_2, | 1398 | SSL_TLSV1_2, |
1399 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1399 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
1400 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1400 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1401 | 128, | 1401 | 128, |
1402 | 128, | 1402 | 128, |
1403 | }, | 1403 | }, |
1404 | 1404 | ||
1405 | /* Cipher 68 */ | 1405 | /* Cipher 68 */ |
1406 | { | 1406 | { |
1407 | 0, /* not implemented (non-ephemeral DH) */ | 1407 | 0, /* not implemented (non-ephemeral DH) */ |
1408 | TLS1_TXT_DH_DSS_WITH_AES_256_SHA256, | 1408 | TLS1_TXT_DH_DSS_WITH_AES_256_SHA256, |
1409 | TLS1_CK_DH_DSS_WITH_AES_256_SHA256, | 1409 | TLS1_CK_DH_DSS_WITH_AES_256_SHA256, |
1410 | SSL_kDHd, | 1410 | SSL_kDHd, |
1411 | SSL_aDH, | 1411 | SSL_aDH, |
1412 | SSL_AES256, | 1412 | SSL_AES256, |
1413 | SSL_SHA256, | 1413 | SSL_SHA256, |
1414 | SSL_TLSV1_2, | 1414 | SSL_TLSV1_2, |
1415 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1415 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
1416 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1416 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1417 | 256, | 1417 | 256, |
1418 | 256, | 1418 | 256, |
1419 | }, | 1419 | }, |
1420 | 1420 | ||
1421 | /* Cipher 69 */ | 1421 | /* Cipher 69 */ |
1422 | { | 1422 | { |
1423 | 0, /* not implemented (non-ephemeral DH) */ | 1423 | 0, /* not implemented (non-ephemeral DH) */ |
1424 | TLS1_TXT_DH_RSA_WITH_AES_256_SHA256, | 1424 | TLS1_TXT_DH_RSA_WITH_AES_256_SHA256, |
1425 | TLS1_CK_DH_RSA_WITH_AES_256_SHA256, | 1425 | TLS1_CK_DH_RSA_WITH_AES_256_SHA256, |
1426 | SSL_kDHr, | 1426 | SSL_kDHr, |
1427 | SSL_aDH, | 1427 | SSL_aDH, |
1428 | SSL_AES256, | 1428 | SSL_AES256, |
1429 | SSL_SHA256, | 1429 | SSL_SHA256, |
1430 | SSL_TLSV1_2, | 1430 | SSL_TLSV1_2, |
1431 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1431 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
1432 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1432 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1433 | 256, | 1433 | 256, |
1434 | 256, | 1434 | 256, |
1435 | }, | 1435 | }, |
1436 | 1436 | ||
1437 | /* Cipher 6A */ | 1437 | /* Cipher 6A */ |
1438 | { | 1438 | { |
1439 | 1, | 1439 | 1, |
1440 | TLS1_TXT_DHE_DSS_WITH_AES_256_SHA256, | 1440 | TLS1_TXT_DHE_DSS_WITH_AES_256_SHA256, |
1441 | TLS1_CK_DHE_DSS_WITH_AES_256_SHA256, | 1441 | TLS1_CK_DHE_DSS_WITH_AES_256_SHA256, |
1442 | SSL_kEDH, | 1442 | SSL_kEDH, |
1443 | SSL_aDSS, | 1443 | SSL_aDSS, |
1444 | SSL_AES256, | 1444 | SSL_AES256, |
1445 | SSL_SHA256, | 1445 | SSL_SHA256, |
1446 | SSL_TLSV1_2, | 1446 | SSL_TLSV1_2, |
1447 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1447 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
1448 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1448 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1449 | 256, | 1449 | 256, |
1450 | 256, | 1450 | 256, |
1451 | }, | 1451 | }, |
1452 | 1452 | ||
1453 | /* Cipher 6B */ | 1453 | /* Cipher 6B */ |
1454 | { | 1454 | { |
1455 | 1, | 1455 | 1, |
1456 | TLS1_TXT_DHE_RSA_WITH_AES_256_SHA256, | 1456 | TLS1_TXT_DHE_RSA_WITH_AES_256_SHA256, |
1457 | TLS1_CK_DHE_RSA_WITH_AES_256_SHA256, | 1457 | TLS1_CK_DHE_RSA_WITH_AES_256_SHA256, |
1458 | SSL_kEDH, | 1458 | SSL_kEDH, |
1459 | SSL_aRSA, | 1459 | SSL_aRSA, |
1460 | SSL_AES256, | 1460 | SSL_AES256, |
1461 | SSL_SHA256, | 1461 | SSL_SHA256, |
1462 | SSL_TLSV1_2, | 1462 | SSL_TLSV1_2, |
1463 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1463 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
1464 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1464 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1465 | 256, | 1465 | 256, |
1466 | 256, | 1466 | 256, |
1467 | }, | 1467 | }, |
1468 | 1468 | ||
1469 | /* Cipher 6C */ | 1469 | /* Cipher 6C */ |
1470 | { | 1470 | { |
1471 | 1, | 1471 | 1, |
1472 | TLS1_TXT_ADH_WITH_AES_128_SHA256, | 1472 | TLS1_TXT_ADH_WITH_AES_128_SHA256, |
1473 | TLS1_CK_ADH_WITH_AES_128_SHA256, | 1473 | TLS1_CK_ADH_WITH_AES_128_SHA256, |
1474 | SSL_kEDH, | 1474 | SSL_kEDH, |
1475 | SSL_aNULL, | 1475 | SSL_aNULL, |
1476 | SSL_AES128, | 1476 | SSL_AES128, |
1477 | SSL_SHA256, | 1477 | SSL_SHA256, |
1478 | SSL_TLSV1_2, | 1478 | SSL_TLSV1_2, |
1479 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1479 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
1480 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1480 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1481 | 128, | 1481 | 128, |
1482 | 128, | 1482 | 128, |
1483 | }, | 1483 | }, |
1484 | 1484 | ||
1485 | /* Cipher 6D */ | 1485 | /* Cipher 6D */ |
1486 | { | 1486 | { |
1487 | 1, | 1487 | 1, |
1488 | TLS1_TXT_ADH_WITH_AES_256_SHA256, | 1488 | TLS1_TXT_ADH_WITH_AES_256_SHA256, |
1489 | TLS1_CK_ADH_WITH_AES_256_SHA256, | 1489 | TLS1_CK_ADH_WITH_AES_256_SHA256, |
1490 | SSL_kEDH, | 1490 | SSL_kEDH, |
1491 | SSL_aNULL, | 1491 | SSL_aNULL, |
1492 | SSL_AES256, | 1492 | SSL_AES256, |
1493 | SSL_SHA256, | 1493 | SSL_SHA256, |
1494 | SSL_TLSV1_2, | 1494 | SSL_TLSV1_2, |
1495 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1495 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
1496 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1496 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1497 | 256, | 1497 | 256, |
1498 | 256, | 1498 | 256, |
1499 | }, | 1499 | }, |
1500 | 1500 | ||
1501 | /* GOST Ciphersuites */ | 1501 | /* GOST Ciphersuites */ |
1502 | 1502 | ||
1503 | { | 1503 | { |
1504 | 1, | 1504 | 1, |
1505 | "GOST94-GOST89-GOST89", | 1505 | "GOST94-GOST89-GOST89", |
1506 | 0x3000080, | 1506 | 0x3000080, |
1507 | SSL_kGOST, | 1507 | SSL_kGOST, |
1508 | SSL_aGOST94, | 1508 | SSL_aGOST94, |
1509 | SSL_eGOST2814789CNT, | 1509 | SSL_eGOST2814789CNT, |
1510 | SSL_GOST89MAC, | 1510 | SSL_GOST89MAC, |
1511 | SSL_TLSV1, | 1511 | SSL_TLSV1, |
1512 | SSL_NOT_EXP|SSL_HIGH, | 1512 | SSL_NOT_EXP|SSL_HIGH, |
1513 | SSL_HANDSHAKE_MAC_GOST94|TLS1_PRF_GOST94|TLS1_STREAM_MAC, | 1513 | SSL_HANDSHAKE_MAC_GOST94|TLS1_PRF_GOST94|TLS1_STREAM_MAC, |
1514 | 256, | 1514 | 256, |
1515 | 256 | 1515 | 256 |
1516 | }, | 1516 | }, |
1517 | { | 1517 | { |
1518 | 1, | 1518 | 1, |
1519 | "GOST2001-GOST89-GOST89", | 1519 | "GOST2001-GOST89-GOST89", |
1520 | 0x3000081, | 1520 | 0x3000081, |
1521 | SSL_kGOST, | 1521 | SSL_kGOST, |
1522 | SSL_aGOST01, | 1522 | SSL_aGOST01, |
1523 | SSL_eGOST2814789CNT, | 1523 | SSL_eGOST2814789CNT, |
1524 | SSL_GOST89MAC, | 1524 | SSL_GOST89MAC, |
1525 | SSL_TLSV1, | 1525 | SSL_TLSV1, |
1526 | SSL_NOT_EXP|SSL_HIGH, | 1526 | SSL_NOT_EXP|SSL_HIGH, |
1527 | SSL_HANDSHAKE_MAC_GOST94|TLS1_PRF_GOST94|TLS1_STREAM_MAC, | 1527 | SSL_HANDSHAKE_MAC_GOST94|TLS1_PRF_GOST94|TLS1_STREAM_MAC, |
1528 | 256, | 1528 | 256, |
1529 | 256 | 1529 | 256 |
1530 | }, | 1530 | }, |
1531 | { | 1531 | { |
1532 | 1, | 1532 | 1, |
1533 | "GOST94-NULL-GOST94", | 1533 | "GOST94-NULL-GOST94", |
1534 | 0x3000082, | 1534 | 0x3000082, |
1535 | SSL_kGOST, | 1535 | SSL_kGOST, |
1536 | SSL_aGOST94, | 1536 | SSL_aGOST94, |
1537 | SSL_eNULL, | 1537 | SSL_eNULL, |
1538 | SSL_GOST94, | 1538 | SSL_GOST94, |
1539 | SSL_TLSV1, | 1539 | SSL_TLSV1, |
1540 | SSL_NOT_EXP|SSL_STRONG_NONE, | 1540 | SSL_NOT_EXP|SSL_STRONG_NONE, |
1541 | SSL_HANDSHAKE_MAC_GOST94|TLS1_PRF_GOST94, | 1541 | SSL_HANDSHAKE_MAC_GOST94|TLS1_PRF_GOST94, |
1542 | 0, | 1542 | 0, |
1543 | 0 | 1543 | 0 |
1544 | }, | 1544 | }, |
1545 | { | 1545 | { |
1546 | 1, | 1546 | 1, |
1547 | "GOST2001-NULL-GOST94", | 1547 | "GOST2001-NULL-GOST94", |
1548 | 0x3000083, | 1548 | 0x3000083, |
1549 | SSL_kGOST, | 1549 | SSL_kGOST, |
1550 | SSL_aGOST01, | 1550 | SSL_aGOST01, |
1551 | SSL_eNULL, | 1551 | SSL_eNULL, |
1552 | SSL_GOST94, | 1552 | SSL_GOST94, |
1553 | SSL_TLSV1, | 1553 | SSL_TLSV1, |
1554 | SSL_NOT_EXP|SSL_STRONG_NONE, | 1554 | SSL_NOT_EXP|SSL_STRONG_NONE, |
1555 | SSL_HANDSHAKE_MAC_GOST94|TLS1_PRF_GOST94, | 1555 | SSL_HANDSHAKE_MAC_GOST94|TLS1_PRF_GOST94, |
1556 | 0, | 1556 | 0, |
1557 | 0 | 1557 | 0 |
1558 | }, | 1558 | }, |
1559 | 1559 | ||
1560 | #ifndef OPENSSL_NO_CAMELLIA | 1560 | #ifndef OPENSSL_NO_CAMELLIA |
@@ -1562,163 +1562,163 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]={ | |||
1562 | 1562 | ||
1563 | /* Cipher 84 */ | 1563 | /* Cipher 84 */ |
1564 | { | 1564 | { |
1565 | 1, | 1565 | 1, |
1566 | TLS1_TXT_RSA_WITH_CAMELLIA_256_CBC_SHA, | 1566 | TLS1_TXT_RSA_WITH_CAMELLIA_256_CBC_SHA, |
1567 | TLS1_CK_RSA_WITH_CAMELLIA_256_CBC_SHA, | 1567 | TLS1_CK_RSA_WITH_CAMELLIA_256_CBC_SHA, |
1568 | SSL_kRSA, | 1568 | SSL_kRSA, |
1569 | SSL_aRSA, | 1569 | SSL_aRSA, |
1570 | SSL_CAMELLIA256, | 1570 | SSL_CAMELLIA256, |
1571 | SSL_SHA1, | 1571 | SSL_SHA1, |
1572 | SSL_TLSV1, | 1572 | SSL_TLSV1, |
1573 | SSL_NOT_EXP|SSL_HIGH, | 1573 | SSL_NOT_EXP|SSL_HIGH, |
1574 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1574 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1575 | 256, | 1575 | 256, |
1576 | 256, | 1576 | 256, |
1577 | }, | 1577 | }, |
1578 | /* Cipher 85 */ | 1578 | /* Cipher 85 */ |
1579 | { | 1579 | { |
1580 | 0, /* not implemented (non-ephemeral DH) */ | 1580 | 0, /* not implemented (non-ephemeral DH) */ |
1581 | TLS1_TXT_DH_DSS_WITH_CAMELLIA_256_CBC_SHA, | 1581 | TLS1_TXT_DH_DSS_WITH_CAMELLIA_256_CBC_SHA, |
1582 | TLS1_CK_DH_DSS_WITH_CAMELLIA_256_CBC_SHA, | 1582 | TLS1_CK_DH_DSS_WITH_CAMELLIA_256_CBC_SHA, |
1583 | SSL_kDHd, | 1583 | SSL_kDHd, |
1584 | SSL_aDH, | 1584 | SSL_aDH, |
1585 | SSL_CAMELLIA256, | 1585 | SSL_CAMELLIA256, |
1586 | SSL_SHA1, | 1586 | SSL_SHA1, |
1587 | SSL_TLSV1, | 1587 | SSL_TLSV1, |
1588 | SSL_NOT_EXP|SSL_HIGH, | 1588 | SSL_NOT_EXP|SSL_HIGH, |
1589 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1589 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1590 | 256, | 1590 | 256, |
1591 | 256, | 1591 | 256, |
1592 | }, | 1592 | }, |
1593 | 1593 | ||
1594 | /* Cipher 86 */ | 1594 | /* Cipher 86 */ |
1595 | { | 1595 | { |
1596 | 0, /* not implemented (non-ephemeral DH) */ | 1596 | 0, /* not implemented (non-ephemeral DH) */ |
1597 | TLS1_TXT_DH_RSA_WITH_CAMELLIA_256_CBC_SHA, | 1597 | TLS1_TXT_DH_RSA_WITH_CAMELLIA_256_CBC_SHA, |
1598 | TLS1_CK_DH_RSA_WITH_CAMELLIA_256_CBC_SHA, | 1598 | TLS1_CK_DH_RSA_WITH_CAMELLIA_256_CBC_SHA, |
1599 | SSL_kDHr, | 1599 | SSL_kDHr, |
1600 | SSL_aDH, | 1600 | SSL_aDH, |
1601 | SSL_CAMELLIA256, | 1601 | SSL_CAMELLIA256, |
1602 | SSL_SHA1, | 1602 | SSL_SHA1, |
1603 | SSL_TLSV1, | 1603 | SSL_TLSV1, |
1604 | SSL_NOT_EXP|SSL_HIGH, | 1604 | SSL_NOT_EXP|SSL_HIGH, |
1605 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1605 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1606 | 256, | 1606 | 256, |
1607 | 256, | 1607 | 256, |
1608 | }, | 1608 | }, |
1609 | 1609 | ||
1610 | /* Cipher 87 */ | 1610 | /* Cipher 87 */ |
1611 | { | 1611 | { |
1612 | 1, | 1612 | 1, |
1613 | TLS1_TXT_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA, | 1613 | TLS1_TXT_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA, |
1614 | TLS1_CK_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA, | 1614 | TLS1_CK_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA, |
1615 | SSL_kEDH, | 1615 | SSL_kEDH, |
1616 | SSL_aDSS, | 1616 | SSL_aDSS, |
1617 | SSL_CAMELLIA256, | 1617 | SSL_CAMELLIA256, |
1618 | SSL_SHA1, | 1618 | SSL_SHA1, |
1619 | SSL_TLSV1, | 1619 | SSL_TLSV1, |
1620 | SSL_NOT_EXP|SSL_HIGH, | 1620 | SSL_NOT_EXP|SSL_HIGH, |
1621 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1621 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1622 | 256, | 1622 | 256, |
1623 | 256, | 1623 | 256, |
1624 | }, | 1624 | }, |
1625 | 1625 | ||
1626 | /* Cipher 88 */ | 1626 | /* Cipher 88 */ |
1627 | { | 1627 | { |
1628 | 1, | 1628 | 1, |
1629 | TLS1_TXT_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA, | 1629 | TLS1_TXT_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA, |
1630 | TLS1_CK_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA, | 1630 | TLS1_CK_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA, |
1631 | SSL_kEDH, | 1631 | SSL_kEDH, |
1632 | SSL_aRSA, | 1632 | SSL_aRSA, |
1633 | SSL_CAMELLIA256, | 1633 | SSL_CAMELLIA256, |
1634 | SSL_SHA1, | 1634 | SSL_SHA1, |
1635 | SSL_TLSV1, | 1635 | SSL_TLSV1, |
1636 | SSL_NOT_EXP|SSL_HIGH, | 1636 | SSL_NOT_EXP|SSL_HIGH, |
1637 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1637 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1638 | 256, | 1638 | 256, |
1639 | 256, | 1639 | 256, |
1640 | }, | 1640 | }, |
1641 | 1641 | ||
1642 | /* Cipher 89 */ | 1642 | /* Cipher 89 */ |
1643 | { | 1643 | { |
1644 | 1, | 1644 | 1, |
1645 | TLS1_TXT_ADH_WITH_CAMELLIA_256_CBC_SHA, | 1645 | TLS1_TXT_ADH_WITH_CAMELLIA_256_CBC_SHA, |
1646 | TLS1_CK_ADH_WITH_CAMELLIA_256_CBC_SHA, | 1646 | TLS1_CK_ADH_WITH_CAMELLIA_256_CBC_SHA, |
1647 | SSL_kEDH, | 1647 | SSL_kEDH, |
1648 | SSL_aNULL, | 1648 | SSL_aNULL, |
1649 | SSL_CAMELLIA256, | 1649 | SSL_CAMELLIA256, |
1650 | SSL_SHA1, | 1650 | SSL_SHA1, |
1651 | SSL_TLSV1, | 1651 | SSL_TLSV1, |
1652 | SSL_NOT_EXP|SSL_HIGH, | 1652 | SSL_NOT_EXP|SSL_HIGH, |
1653 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1653 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1654 | 256, | 1654 | 256, |
1655 | 256, | 1655 | 256, |
1656 | }, | 1656 | }, |
1657 | #endif /* OPENSSL_NO_CAMELLIA */ | 1657 | #endif /* OPENSSL_NO_CAMELLIA */ |
1658 | 1658 | ||
1659 | #ifndef OPENSSL_NO_PSK | 1659 | #ifndef OPENSSL_NO_PSK |
1660 | /* Cipher 8A */ | 1660 | /* Cipher 8A */ |
1661 | { | 1661 | { |
1662 | 1, | 1662 | 1, |
1663 | TLS1_TXT_PSK_WITH_RC4_128_SHA, | 1663 | TLS1_TXT_PSK_WITH_RC4_128_SHA, |
1664 | TLS1_CK_PSK_WITH_RC4_128_SHA, | 1664 | TLS1_CK_PSK_WITH_RC4_128_SHA, |
1665 | SSL_kPSK, | 1665 | SSL_kPSK, |
1666 | SSL_aPSK, | 1666 | SSL_aPSK, |
1667 | SSL_RC4, | 1667 | SSL_RC4, |
1668 | SSL_SHA1, | 1668 | SSL_SHA1, |
1669 | SSL_TLSV1, | 1669 | SSL_TLSV1, |
1670 | SSL_NOT_EXP|SSL_MEDIUM, | 1670 | SSL_NOT_EXP|SSL_MEDIUM, |
1671 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1671 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1672 | 128, | 1672 | 128, |
1673 | 128, | 1673 | 128, |
1674 | }, | 1674 | }, |
1675 | 1675 | ||
1676 | /* Cipher 8B */ | 1676 | /* Cipher 8B */ |
1677 | { | 1677 | { |
1678 | 1, | 1678 | 1, |
1679 | TLS1_TXT_PSK_WITH_3DES_EDE_CBC_SHA, | 1679 | TLS1_TXT_PSK_WITH_3DES_EDE_CBC_SHA, |
1680 | TLS1_CK_PSK_WITH_3DES_EDE_CBC_SHA, | 1680 | TLS1_CK_PSK_WITH_3DES_EDE_CBC_SHA, |
1681 | SSL_kPSK, | 1681 | SSL_kPSK, |
1682 | SSL_aPSK, | 1682 | SSL_aPSK, |
1683 | SSL_3DES, | 1683 | SSL_3DES, |
1684 | SSL_SHA1, | 1684 | SSL_SHA1, |
1685 | SSL_TLSV1, | 1685 | SSL_TLSV1, |
1686 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1686 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
1687 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1687 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1688 | 168, | 1688 | 168, |
1689 | 168, | 1689 | 168, |
1690 | }, | 1690 | }, |
1691 | 1691 | ||
1692 | /* Cipher 8C */ | 1692 | /* Cipher 8C */ |
1693 | { | 1693 | { |
1694 | 1, | 1694 | 1, |
1695 | TLS1_TXT_PSK_WITH_AES_128_CBC_SHA, | 1695 | TLS1_TXT_PSK_WITH_AES_128_CBC_SHA, |
1696 | TLS1_CK_PSK_WITH_AES_128_CBC_SHA, | 1696 | TLS1_CK_PSK_WITH_AES_128_CBC_SHA, |
1697 | SSL_kPSK, | 1697 | SSL_kPSK, |
1698 | SSL_aPSK, | 1698 | SSL_aPSK, |
1699 | SSL_AES128, | 1699 | SSL_AES128, |
1700 | SSL_SHA1, | 1700 | SSL_SHA1, |
1701 | SSL_TLSV1, | 1701 | SSL_TLSV1, |
1702 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1702 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
1703 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1703 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1704 | 128, | 1704 | 128, |
1705 | 128, | 1705 | 128, |
1706 | }, | 1706 | }, |
1707 | 1707 | ||
1708 | /* Cipher 8D */ | 1708 | /* Cipher 8D */ |
1709 | { | 1709 | { |
1710 | 1, | 1710 | 1, |
1711 | TLS1_TXT_PSK_WITH_AES_256_CBC_SHA, | 1711 | TLS1_TXT_PSK_WITH_AES_256_CBC_SHA, |
1712 | TLS1_CK_PSK_WITH_AES_256_CBC_SHA, | 1712 | TLS1_CK_PSK_WITH_AES_256_CBC_SHA, |
1713 | SSL_kPSK, | 1713 | SSL_kPSK, |
1714 | SSL_aPSK, | 1714 | SSL_aPSK, |
1715 | SSL_AES256, | 1715 | SSL_AES256, |
1716 | SSL_SHA1, | 1716 | SSL_SHA1, |
1717 | SSL_TLSV1, | 1717 | SSL_TLSV1, |
1718 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1718 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
1719 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1719 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1720 | 256, | 1720 | 256, |
1721 | 256, | 1721 | 256, |
1722 | }, | 1722 | }, |
1723 | #endif /* OPENSSL_NO_PSK */ | 1723 | #endif /* OPENSSL_NO_PSK */ |
1724 | 1724 | ||
@@ -1727,98 +1727,98 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]={ | |||
1727 | 1727 | ||
1728 | /* Cipher 96 */ | 1728 | /* Cipher 96 */ |
1729 | { | 1729 | { |
1730 | 1, | 1730 | 1, |
1731 | TLS1_TXT_RSA_WITH_SEED_SHA, | 1731 | TLS1_TXT_RSA_WITH_SEED_SHA, |
1732 | TLS1_CK_RSA_WITH_SEED_SHA, | 1732 | TLS1_CK_RSA_WITH_SEED_SHA, |
1733 | SSL_kRSA, | 1733 | SSL_kRSA, |
1734 | SSL_aRSA, | 1734 | SSL_aRSA, |
1735 | SSL_SEED, | 1735 | SSL_SEED, |
1736 | SSL_SHA1, | 1736 | SSL_SHA1, |
1737 | SSL_TLSV1, | 1737 | SSL_TLSV1, |
1738 | SSL_NOT_EXP|SSL_MEDIUM, | 1738 | SSL_NOT_EXP|SSL_MEDIUM, |
1739 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1739 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1740 | 128, | 1740 | 128, |
1741 | 128, | 1741 | 128, |
1742 | }, | 1742 | }, |
1743 | 1743 | ||
1744 | /* Cipher 97 */ | 1744 | /* Cipher 97 */ |
1745 | { | 1745 | { |
1746 | 0, /* not implemented (non-ephemeral DH) */ | 1746 | 0, /* not implemented (non-ephemeral DH) */ |
1747 | TLS1_TXT_DH_DSS_WITH_SEED_SHA, | 1747 | TLS1_TXT_DH_DSS_WITH_SEED_SHA, |
1748 | TLS1_CK_DH_DSS_WITH_SEED_SHA, | 1748 | TLS1_CK_DH_DSS_WITH_SEED_SHA, |
1749 | SSL_kDHd, | 1749 | SSL_kDHd, |
1750 | SSL_aDH, | 1750 | SSL_aDH, |
1751 | SSL_SEED, | 1751 | SSL_SEED, |
1752 | SSL_SHA1, | 1752 | SSL_SHA1, |
1753 | SSL_TLSV1, | 1753 | SSL_TLSV1, |
1754 | SSL_NOT_EXP|SSL_MEDIUM, | 1754 | SSL_NOT_EXP|SSL_MEDIUM, |
1755 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1755 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1756 | 128, | 1756 | 128, |
1757 | 128, | 1757 | 128, |
1758 | }, | 1758 | }, |
1759 | 1759 | ||
1760 | /* Cipher 98 */ | 1760 | /* Cipher 98 */ |
1761 | { | 1761 | { |
1762 | 0, /* not implemented (non-ephemeral DH) */ | 1762 | 0, /* not implemented (non-ephemeral DH) */ |
1763 | TLS1_TXT_DH_RSA_WITH_SEED_SHA, | 1763 | TLS1_TXT_DH_RSA_WITH_SEED_SHA, |
1764 | TLS1_CK_DH_RSA_WITH_SEED_SHA, | 1764 | TLS1_CK_DH_RSA_WITH_SEED_SHA, |
1765 | SSL_kDHr, | 1765 | SSL_kDHr, |
1766 | SSL_aDH, | 1766 | SSL_aDH, |
1767 | SSL_SEED, | 1767 | SSL_SEED, |
1768 | SSL_SHA1, | 1768 | SSL_SHA1, |
1769 | SSL_TLSV1, | 1769 | SSL_TLSV1, |
1770 | SSL_NOT_EXP|SSL_MEDIUM, | 1770 | SSL_NOT_EXP|SSL_MEDIUM, |
1771 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1771 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1772 | 128, | 1772 | 128, |
1773 | 128, | 1773 | 128, |
1774 | }, | 1774 | }, |
1775 | 1775 | ||
1776 | /* Cipher 99 */ | 1776 | /* Cipher 99 */ |
1777 | { | 1777 | { |
1778 | 1, | 1778 | 1, |
1779 | TLS1_TXT_DHE_DSS_WITH_SEED_SHA, | 1779 | TLS1_TXT_DHE_DSS_WITH_SEED_SHA, |
1780 | TLS1_CK_DHE_DSS_WITH_SEED_SHA, | 1780 | TLS1_CK_DHE_DSS_WITH_SEED_SHA, |
1781 | SSL_kEDH, | 1781 | SSL_kEDH, |
1782 | SSL_aDSS, | 1782 | SSL_aDSS, |
1783 | SSL_SEED, | 1783 | SSL_SEED, |
1784 | SSL_SHA1, | 1784 | SSL_SHA1, |
1785 | SSL_TLSV1, | 1785 | SSL_TLSV1, |
1786 | SSL_NOT_EXP|SSL_MEDIUM, | 1786 | SSL_NOT_EXP|SSL_MEDIUM, |
1787 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1787 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1788 | 128, | 1788 | 128, |
1789 | 128, | 1789 | 128, |
1790 | }, | 1790 | }, |
1791 | 1791 | ||
1792 | /* Cipher 9A */ | 1792 | /* Cipher 9A */ |
1793 | { | 1793 | { |
1794 | 1, | 1794 | 1, |
1795 | TLS1_TXT_DHE_RSA_WITH_SEED_SHA, | 1795 | TLS1_TXT_DHE_RSA_WITH_SEED_SHA, |
1796 | TLS1_CK_DHE_RSA_WITH_SEED_SHA, | 1796 | TLS1_CK_DHE_RSA_WITH_SEED_SHA, |
1797 | SSL_kEDH, | 1797 | SSL_kEDH, |
1798 | SSL_aRSA, | 1798 | SSL_aRSA, |
1799 | SSL_SEED, | 1799 | SSL_SEED, |
1800 | SSL_SHA1, | 1800 | SSL_SHA1, |
1801 | SSL_TLSV1, | 1801 | SSL_TLSV1, |
1802 | SSL_NOT_EXP|SSL_MEDIUM, | 1802 | SSL_NOT_EXP|SSL_MEDIUM, |
1803 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1803 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1804 | 128, | 1804 | 128, |
1805 | 128, | 1805 | 128, |
1806 | }, | 1806 | }, |
1807 | 1807 | ||
1808 | /* Cipher 9B */ | 1808 | /* Cipher 9B */ |
1809 | { | 1809 | { |
1810 | 1, | 1810 | 1, |
1811 | TLS1_TXT_ADH_WITH_SEED_SHA, | 1811 | TLS1_TXT_ADH_WITH_SEED_SHA, |
1812 | TLS1_CK_ADH_WITH_SEED_SHA, | 1812 | TLS1_CK_ADH_WITH_SEED_SHA, |
1813 | SSL_kEDH, | 1813 | SSL_kEDH, |
1814 | SSL_aNULL, | 1814 | SSL_aNULL, |
1815 | SSL_SEED, | 1815 | SSL_SEED, |
1816 | SSL_SHA1, | 1816 | SSL_SHA1, |
1817 | SSL_TLSV1, | 1817 | SSL_TLSV1, |
1818 | SSL_NOT_EXP|SSL_MEDIUM, | 1818 | SSL_NOT_EXP|SSL_MEDIUM, |
1819 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 1819 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
1820 | 128, | 1820 | 128, |
1821 | 128, | 1821 | 128, |
1822 | }, | 1822 | }, |
1823 | 1823 | ||
1824 | #endif /* OPENSSL_NO_SEED */ | 1824 | #endif /* OPENSSL_NO_SEED */ |
@@ -1827,741 +1827,741 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]={ | |||
1827 | 1827 | ||
1828 | /* Cipher 9C */ | 1828 | /* Cipher 9C */ |
1829 | { | 1829 | { |
1830 | 1, | 1830 | 1, |
1831 | TLS1_TXT_RSA_WITH_AES_128_GCM_SHA256, | 1831 | TLS1_TXT_RSA_WITH_AES_128_GCM_SHA256, |
1832 | TLS1_CK_RSA_WITH_AES_128_GCM_SHA256, | 1832 | TLS1_CK_RSA_WITH_AES_128_GCM_SHA256, |
1833 | SSL_kRSA, | 1833 | SSL_kRSA, |
1834 | SSL_aRSA, | 1834 | SSL_aRSA, |
1835 | SSL_AES128GCM, | 1835 | SSL_AES128GCM, |
1836 | SSL_AEAD, | 1836 | SSL_AEAD, |
1837 | SSL_TLSV1_2, | 1837 | SSL_TLSV1_2, |
1838 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1838 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
1839 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, | 1839 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, |
1840 | 128, | 1840 | 128, |
1841 | 128, | 1841 | 128, |
1842 | }, | 1842 | }, |
1843 | 1843 | ||
1844 | /* Cipher 9D */ | 1844 | /* Cipher 9D */ |
1845 | { | 1845 | { |
1846 | 1, | 1846 | 1, |
1847 | TLS1_TXT_RSA_WITH_AES_256_GCM_SHA384, | 1847 | TLS1_TXT_RSA_WITH_AES_256_GCM_SHA384, |
1848 | TLS1_CK_RSA_WITH_AES_256_GCM_SHA384, | 1848 | TLS1_CK_RSA_WITH_AES_256_GCM_SHA384, |
1849 | SSL_kRSA, | 1849 | SSL_kRSA, |
1850 | SSL_aRSA, | 1850 | SSL_aRSA, |
1851 | SSL_AES256GCM, | 1851 | SSL_AES256GCM, |
1852 | SSL_AEAD, | 1852 | SSL_AEAD, |
1853 | SSL_TLSV1_2, | 1853 | SSL_TLSV1_2, |
1854 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1854 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
1855 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, | 1855 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, |
1856 | 256, | 1856 | 256, |
1857 | 256, | 1857 | 256, |
1858 | }, | 1858 | }, |
1859 | 1859 | ||
1860 | /* Cipher 9E */ | 1860 | /* Cipher 9E */ |
1861 | { | 1861 | { |
1862 | 1, | 1862 | 1, |
1863 | TLS1_TXT_DHE_RSA_WITH_AES_128_GCM_SHA256, | 1863 | TLS1_TXT_DHE_RSA_WITH_AES_128_GCM_SHA256, |
1864 | TLS1_CK_DHE_RSA_WITH_AES_128_GCM_SHA256, | 1864 | TLS1_CK_DHE_RSA_WITH_AES_128_GCM_SHA256, |
1865 | SSL_kEDH, | 1865 | SSL_kEDH, |
1866 | SSL_aRSA, | 1866 | SSL_aRSA, |
1867 | SSL_AES128GCM, | 1867 | SSL_AES128GCM, |
1868 | SSL_AEAD, | 1868 | SSL_AEAD, |
1869 | SSL_TLSV1_2, | 1869 | SSL_TLSV1_2, |
1870 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1870 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
1871 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, | 1871 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, |
1872 | 128, | 1872 | 128, |
1873 | 128, | 1873 | 128, |
1874 | }, | 1874 | }, |
1875 | 1875 | ||
1876 | /* Cipher 9F */ | 1876 | /* Cipher 9F */ |
1877 | { | 1877 | { |
1878 | 1, | 1878 | 1, |
1879 | TLS1_TXT_DHE_RSA_WITH_AES_256_GCM_SHA384, | 1879 | TLS1_TXT_DHE_RSA_WITH_AES_256_GCM_SHA384, |
1880 | TLS1_CK_DHE_RSA_WITH_AES_256_GCM_SHA384, | 1880 | TLS1_CK_DHE_RSA_WITH_AES_256_GCM_SHA384, |
1881 | SSL_kEDH, | 1881 | SSL_kEDH, |
1882 | SSL_aRSA, | 1882 | SSL_aRSA, |
1883 | SSL_AES256GCM, | 1883 | SSL_AES256GCM, |
1884 | SSL_AEAD, | 1884 | SSL_AEAD, |
1885 | SSL_TLSV1_2, | 1885 | SSL_TLSV1_2, |
1886 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1886 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
1887 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, | 1887 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, |
1888 | 256, | 1888 | 256, |
1889 | 256, | 1889 | 256, |
1890 | }, | 1890 | }, |
1891 | 1891 | ||
1892 | /* Cipher A0 */ | 1892 | /* Cipher A0 */ |
1893 | { | 1893 | { |
1894 | 0, | 1894 | 0, |
1895 | TLS1_TXT_DH_RSA_WITH_AES_128_GCM_SHA256, | 1895 | TLS1_TXT_DH_RSA_WITH_AES_128_GCM_SHA256, |
1896 | TLS1_CK_DH_RSA_WITH_AES_128_GCM_SHA256, | 1896 | TLS1_CK_DH_RSA_WITH_AES_128_GCM_SHA256, |
1897 | SSL_kDHr, | 1897 | SSL_kDHr, |
1898 | SSL_aDH, | 1898 | SSL_aDH, |
1899 | SSL_AES128GCM, | 1899 | SSL_AES128GCM, |
1900 | SSL_AEAD, | 1900 | SSL_AEAD, |
1901 | SSL_TLSV1_2, | 1901 | SSL_TLSV1_2, |
1902 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1902 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
1903 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, | 1903 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, |
1904 | 128, | 1904 | 128, |
1905 | 128, | 1905 | 128, |
1906 | }, | 1906 | }, |
1907 | 1907 | ||
1908 | /* Cipher A1 */ | 1908 | /* Cipher A1 */ |
1909 | { | 1909 | { |
1910 | 0, | 1910 | 0, |
1911 | TLS1_TXT_DH_RSA_WITH_AES_256_GCM_SHA384, | 1911 | TLS1_TXT_DH_RSA_WITH_AES_256_GCM_SHA384, |
1912 | TLS1_CK_DH_RSA_WITH_AES_256_GCM_SHA384, | 1912 | TLS1_CK_DH_RSA_WITH_AES_256_GCM_SHA384, |
1913 | SSL_kDHr, | 1913 | SSL_kDHr, |
1914 | SSL_aDH, | 1914 | SSL_aDH, |
1915 | SSL_AES256GCM, | 1915 | SSL_AES256GCM, |
1916 | SSL_AEAD, | 1916 | SSL_AEAD, |
1917 | SSL_TLSV1_2, | 1917 | SSL_TLSV1_2, |
1918 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1918 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
1919 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, | 1919 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, |
1920 | 256, | 1920 | 256, |
1921 | 256, | 1921 | 256, |
1922 | }, | 1922 | }, |
1923 | 1923 | ||
1924 | /* Cipher A2 */ | 1924 | /* Cipher A2 */ |
1925 | { | 1925 | { |
1926 | 1, | 1926 | 1, |
1927 | TLS1_TXT_DHE_DSS_WITH_AES_128_GCM_SHA256, | 1927 | TLS1_TXT_DHE_DSS_WITH_AES_128_GCM_SHA256, |
1928 | TLS1_CK_DHE_DSS_WITH_AES_128_GCM_SHA256, | 1928 | TLS1_CK_DHE_DSS_WITH_AES_128_GCM_SHA256, |
1929 | SSL_kEDH, | 1929 | SSL_kEDH, |
1930 | SSL_aDSS, | 1930 | SSL_aDSS, |
1931 | SSL_AES128GCM, | 1931 | SSL_AES128GCM, |
1932 | SSL_AEAD, | 1932 | SSL_AEAD, |
1933 | SSL_TLSV1_2, | 1933 | SSL_TLSV1_2, |
1934 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1934 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
1935 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, | 1935 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, |
1936 | 128, | 1936 | 128, |
1937 | 128, | 1937 | 128, |
1938 | }, | 1938 | }, |
1939 | 1939 | ||
1940 | /* Cipher A3 */ | 1940 | /* Cipher A3 */ |
1941 | { | 1941 | { |
1942 | 1, | 1942 | 1, |
1943 | TLS1_TXT_DHE_DSS_WITH_AES_256_GCM_SHA384, | 1943 | TLS1_TXT_DHE_DSS_WITH_AES_256_GCM_SHA384, |
1944 | TLS1_CK_DHE_DSS_WITH_AES_256_GCM_SHA384, | 1944 | TLS1_CK_DHE_DSS_WITH_AES_256_GCM_SHA384, |
1945 | SSL_kEDH, | 1945 | SSL_kEDH, |
1946 | SSL_aDSS, | 1946 | SSL_aDSS, |
1947 | SSL_AES256GCM, | 1947 | SSL_AES256GCM, |
1948 | SSL_AEAD, | 1948 | SSL_AEAD, |
1949 | SSL_TLSV1_2, | 1949 | SSL_TLSV1_2, |
1950 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1950 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
1951 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, | 1951 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, |
1952 | 256, | 1952 | 256, |
1953 | 256, | 1953 | 256, |
1954 | }, | 1954 | }, |
1955 | 1955 | ||
1956 | /* Cipher A4 */ | 1956 | /* Cipher A4 */ |
1957 | { | 1957 | { |
1958 | 0, | 1958 | 0, |
1959 | TLS1_TXT_DH_DSS_WITH_AES_128_GCM_SHA256, | 1959 | TLS1_TXT_DH_DSS_WITH_AES_128_GCM_SHA256, |
1960 | TLS1_CK_DH_DSS_WITH_AES_128_GCM_SHA256, | 1960 | TLS1_CK_DH_DSS_WITH_AES_128_GCM_SHA256, |
1961 | SSL_kDHd, | 1961 | SSL_kDHd, |
1962 | SSL_aDH, | 1962 | SSL_aDH, |
1963 | SSL_AES128GCM, | 1963 | SSL_AES128GCM, |
1964 | SSL_AEAD, | 1964 | SSL_AEAD, |
1965 | SSL_TLSV1_2, | 1965 | SSL_TLSV1_2, |
1966 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1966 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
1967 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, | 1967 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, |
1968 | 128, | 1968 | 128, |
1969 | 128, | 1969 | 128, |
1970 | }, | 1970 | }, |
1971 | 1971 | ||
1972 | /* Cipher A5 */ | 1972 | /* Cipher A5 */ |
1973 | { | 1973 | { |
1974 | 0, | 1974 | 0, |
1975 | TLS1_TXT_DH_DSS_WITH_AES_256_GCM_SHA384, | 1975 | TLS1_TXT_DH_DSS_WITH_AES_256_GCM_SHA384, |
1976 | TLS1_CK_DH_DSS_WITH_AES_256_GCM_SHA384, | 1976 | TLS1_CK_DH_DSS_WITH_AES_256_GCM_SHA384, |
1977 | SSL_kDHd, | 1977 | SSL_kDHd, |
1978 | SSL_aDH, | 1978 | SSL_aDH, |
1979 | SSL_AES256GCM, | 1979 | SSL_AES256GCM, |
1980 | SSL_AEAD, | 1980 | SSL_AEAD, |
1981 | SSL_TLSV1_2, | 1981 | SSL_TLSV1_2, |
1982 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1982 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
1983 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, | 1983 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, |
1984 | 256, | 1984 | 256, |
1985 | 256, | 1985 | 256, |
1986 | }, | 1986 | }, |
1987 | 1987 | ||
1988 | /* Cipher A6 */ | 1988 | /* Cipher A6 */ |
1989 | { | 1989 | { |
1990 | 1, | 1990 | 1, |
1991 | TLS1_TXT_ADH_WITH_AES_128_GCM_SHA256, | 1991 | TLS1_TXT_ADH_WITH_AES_128_GCM_SHA256, |
1992 | TLS1_CK_ADH_WITH_AES_128_GCM_SHA256, | 1992 | TLS1_CK_ADH_WITH_AES_128_GCM_SHA256, |
1993 | SSL_kEDH, | 1993 | SSL_kEDH, |
1994 | SSL_aNULL, | 1994 | SSL_aNULL, |
1995 | SSL_AES128GCM, | 1995 | SSL_AES128GCM, |
1996 | SSL_AEAD, | 1996 | SSL_AEAD, |
1997 | SSL_TLSV1_2, | 1997 | SSL_TLSV1_2, |
1998 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 1998 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
1999 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, | 1999 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, |
2000 | 128, | 2000 | 128, |
2001 | 128, | 2001 | 128, |
2002 | }, | 2002 | }, |
2003 | 2003 | ||
2004 | /* Cipher A7 */ | 2004 | /* Cipher A7 */ |
2005 | { | 2005 | { |
2006 | 1, | 2006 | 1, |
2007 | TLS1_TXT_ADH_WITH_AES_256_GCM_SHA384, | 2007 | TLS1_TXT_ADH_WITH_AES_256_GCM_SHA384, |
2008 | TLS1_CK_ADH_WITH_AES_256_GCM_SHA384, | 2008 | TLS1_CK_ADH_WITH_AES_256_GCM_SHA384, |
2009 | SSL_kEDH, | 2009 | SSL_kEDH, |
2010 | SSL_aNULL, | 2010 | SSL_aNULL, |
2011 | SSL_AES256GCM, | 2011 | SSL_AES256GCM, |
2012 | SSL_AEAD, | 2012 | SSL_AEAD, |
2013 | SSL_TLSV1_2, | 2013 | SSL_TLSV1_2, |
2014 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2014 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
2015 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, | 2015 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, |
2016 | 256, | 2016 | 256, |
2017 | 256, | 2017 | 256, |
2018 | }, | 2018 | }, |
2019 | 2019 | ||
2020 | #ifndef OPENSSL_NO_ECDH | 2020 | #ifndef OPENSSL_NO_ECDH |
2021 | /* Cipher C001 */ | 2021 | /* Cipher C001 */ |
2022 | { | 2022 | { |
2023 | 1, | 2023 | 1, |
2024 | TLS1_TXT_ECDH_ECDSA_WITH_NULL_SHA, | 2024 | TLS1_TXT_ECDH_ECDSA_WITH_NULL_SHA, |
2025 | TLS1_CK_ECDH_ECDSA_WITH_NULL_SHA, | 2025 | TLS1_CK_ECDH_ECDSA_WITH_NULL_SHA, |
2026 | SSL_kECDHe, | 2026 | SSL_kECDHe, |
2027 | SSL_aECDH, | 2027 | SSL_aECDH, |
2028 | SSL_eNULL, | 2028 | SSL_eNULL, |
2029 | SSL_SHA1, | 2029 | SSL_SHA1, |
2030 | SSL_TLSV1, | 2030 | SSL_TLSV1, |
2031 | SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS, | 2031 | SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS, |
2032 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2032 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
2033 | 0, | 2033 | 0, |
2034 | 0, | 2034 | 0, |
2035 | }, | 2035 | }, |
2036 | 2036 | ||
2037 | /* Cipher C002 */ | 2037 | /* Cipher C002 */ |
2038 | { | 2038 | { |
2039 | 1, | 2039 | 1, |
2040 | TLS1_TXT_ECDH_ECDSA_WITH_RC4_128_SHA, | 2040 | TLS1_TXT_ECDH_ECDSA_WITH_RC4_128_SHA, |
2041 | TLS1_CK_ECDH_ECDSA_WITH_RC4_128_SHA, | 2041 | TLS1_CK_ECDH_ECDSA_WITH_RC4_128_SHA, |
2042 | SSL_kECDHe, | 2042 | SSL_kECDHe, |
2043 | SSL_aECDH, | 2043 | SSL_aECDH, |
2044 | SSL_RC4, | 2044 | SSL_RC4, |
2045 | SSL_SHA1, | 2045 | SSL_SHA1, |
2046 | SSL_TLSV1, | 2046 | SSL_TLSV1, |
2047 | SSL_NOT_EXP|SSL_MEDIUM, | 2047 | SSL_NOT_EXP|SSL_MEDIUM, |
2048 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2048 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
2049 | 128, | 2049 | 128, |
2050 | 128, | 2050 | 128, |
2051 | }, | 2051 | }, |
2052 | 2052 | ||
2053 | /* Cipher C003 */ | 2053 | /* Cipher C003 */ |
2054 | { | 2054 | { |
2055 | 1, | 2055 | 1, |
2056 | TLS1_TXT_ECDH_ECDSA_WITH_DES_192_CBC3_SHA, | 2056 | TLS1_TXT_ECDH_ECDSA_WITH_DES_192_CBC3_SHA, |
2057 | TLS1_CK_ECDH_ECDSA_WITH_DES_192_CBC3_SHA, | 2057 | TLS1_CK_ECDH_ECDSA_WITH_DES_192_CBC3_SHA, |
2058 | SSL_kECDHe, | 2058 | SSL_kECDHe, |
2059 | SSL_aECDH, | 2059 | SSL_aECDH, |
2060 | SSL_3DES, | 2060 | SSL_3DES, |
2061 | SSL_SHA1, | 2061 | SSL_SHA1, |
2062 | SSL_TLSV1, | 2062 | SSL_TLSV1, |
2063 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2063 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
2064 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2064 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
2065 | 168, | 2065 | 168, |
2066 | 168, | 2066 | 168, |
2067 | }, | 2067 | }, |
2068 | 2068 | ||
2069 | /* Cipher C004 */ | 2069 | /* Cipher C004 */ |
2070 | { | 2070 | { |
2071 | 1, | 2071 | 1, |
2072 | TLS1_TXT_ECDH_ECDSA_WITH_AES_128_CBC_SHA, | 2072 | TLS1_TXT_ECDH_ECDSA_WITH_AES_128_CBC_SHA, |
2073 | TLS1_CK_ECDH_ECDSA_WITH_AES_128_CBC_SHA, | 2073 | TLS1_CK_ECDH_ECDSA_WITH_AES_128_CBC_SHA, |
2074 | SSL_kECDHe, | 2074 | SSL_kECDHe, |
2075 | SSL_aECDH, | 2075 | SSL_aECDH, |
2076 | SSL_AES128, | 2076 | SSL_AES128, |
2077 | SSL_SHA1, | 2077 | SSL_SHA1, |
2078 | SSL_TLSV1, | 2078 | SSL_TLSV1, |
2079 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2079 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
2080 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2080 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
2081 | 128, | 2081 | 128, |
2082 | 128, | 2082 | 128, |
2083 | }, | 2083 | }, |
2084 | 2084 | ||
2085 | /* Cipher C005 */ | 2085 | /* Cipher C005 */ |
2086 | { | 2086 | { |
2087 | 1, | 2087 | 1, |
2088 | TLS1_TXT_ECDH_ECDSA_WITH_AES_256_CBC_SHA, | 2088 | TLS1_TXT_ECDH_ECDSA_WITH_AES_256_CBC_SHA, |
2089 | TLS1_CK_ECDH_ECDSA_WITH_AES_256_CBC_SHA, | 2089 | TLS1_CK_ECDH_ECDSA_WITH_AES_256_CBC_SHA, |
2090 | SSL_kECDHe, | 2090 | SSL_kECDHe, |
2091 | SSL_aECDH, | 2091 | SSL_aECDH, |
2092 | SSL_AES256, | 2092 | SSL_AES256, |
2093 | SSL_SHA1, | 2093 | SSL_SHA1, |
2094 | SSL_TLSV1, | 2094 | SSL_TLSV1, |
2095 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2095 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
2096 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2096 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
2097 | 256, | 2097 | 256, |
2098 | 256, | 2098 | 256, |
2099 | }, | 2099 | }, |
2100 | 2100 | ||
2101 | /* Cipher C006 */ | 2101 | /* Cipher C006 */ |
2102 | { | 2102 | { |
2103 | 1, | 2103 | 1, |
2104 | TLS1_TXT_ECDHE_ECDSA_WITH_NULL_SHA, | 2104 | TLS1_TXT_ECDHE_ECDSA_WITH_NULL_SHA, |
2105 | TLS1_CK_ECDHE_ECDSA_WITH_NULL_SHA, | 2105 | TLS1_CK_ECDHE_ECDSA_WITH_NULL_SHA, |
2106 | SSL_kEECDH, | 2106 | SSL_kEECDH, |
2107 | SSL_aECDSA, | 2107 | SSL_aECDSA, |
2108 | SSL_eNULL, | 2108 | SSL_eNULL, |
2109 | SSL_SHA1, | 2109 | SSL_SHA1, |
2110 | SSL_TLSV1, | 2110 | SSL_TLSV1, |
2111 | SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS, | 2111 | SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS, |
2112 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2112 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
2113 | 0, | 2113 | 0, |
2114 | 0, | 2114 | 0, |
2115 | }, | 2115 | }, |
2116 | 2116 | ||
2117 | /* Cipher C007 */ | 2117 | /* Cipher C007 */ |
2118 | { | 2118 | { |
2119 | 1, | 2119 | 1, |
2120 | TLS1_TXT_ECDHE_ECDSA_WITH_RC4_128_SHA, | 2120 | TLS1_TXT_ECDHE_ECDSA_WITH_RC4_128_SHA, |
2121 | TLS1_CK_ECDHE_ECDSA_WITH_RC4_128_SHA, | 2121 | TLS1_CK_ECDHE_ECDSA_WITH_RC4_128_SHA, |
2122 | SSL_kEECDH, | 2122 | SSL_kEECDH, |
2123 | SSL_aECDSA, | 2123 | SSL_aECDSA, |
2124 | SSL_RC4, | 2124 | SSL_RC4, |
2125 | SSL_SHA1, | 2125 | SSL_SHA1, |
2126 | SSL_TLSV1, | 2126 | SSL_TLSV1, |
2127 | SSL_NOT_EXP|SSL_MEDIUM, | 2127 | SSL_NOT_EXP|SSL_MEDIUM, |
2128 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2128 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
2129 | 128, | 2129 | 128, |
2130 | 128, | 2130 | 128, |
2131 | }, | 2131 | }, |
2132 | 2132 | ||
2133 | /* Cipher C008 */ | 2133 | /* Cipher C008 */ |
2134 | { | 2134 | { |
2135 | 1, | 2135 | 1, |
2136 | TLS1_TXT_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA, | 2136 | TLS1_TXT_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA, |
2137 | TLS1_CK_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA, | 2137 | TLS1_CK_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA, |
2138 | SSL_kEECDH, | 2138 | SSL_kEECDH, |
2139 | SSL_aECDSA, | 2139 | SSL_aECDSA, |
2140 | SSL_3DES, | 2140 | SSL_3DES, |
2141 | SSL_SHA1, | 2141 | SSL_SHA1, |
2142 | SSL_TLSV1, | 2142 | SSL_TLSV1, |
2143 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2143 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
2144 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2144 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
2145 | 168, | 2145 | 168, |
2146 | 168, | 2146 | 168, |
2147 | }, | 2147 | }, |
2148 | 2148 | ||
2149 | /* Cipher C009 */ | 2149 | /* Cipher C009 */ |
2150 | { | 2150 | { |
2151 | 1, | 2151 | 1, |
2152 | TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, | 2152 | TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, |
2153 | TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, | 2153 | TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, |
2154 | SSL_kEECDH, | 2154 | SSL_kEECDH, |
2155 | SSL_aECDSA, | 2155 | SSL_aECDSA, |
2156 | SSL_AES128, | 2156 | SSL_AES128, |
2157 | SSL_SHA1, | 2157 | SSL_SHA1, |
2158 | SSL_TLSV1, | 2158 | SSL_TLSV1, |
2159 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2159 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
2160 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2160 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
2161 | 128, | 2161 | 128, |
2162 | 128, | 2162 | 128, |
2163 | }, | 2163 | }, |
2164 | 2164 | ||
2165 | /* Cipher C00A */ | 2165 | /* Cipher C00A */ |
2166 | { | 2166 | { |
2167 | 1, | 2167 | 1, |
2168 | TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, | 2168 | TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, |
2169 | TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, | 2169 | TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, |
2170 | SSL_kEECDH, | 2170 | SSL_kEECDH, |
2171 | SSL_aECDSA, | 2171 | SSL_aECDSA, |
2172 | SSL_AES256, | 2172 | SSL_AES256, |
2173 | SSL_SHA1, | 2173 | SSL_SHA1, |
2174 | SSL_TLSV1, | 2174 | SSL_TLSV1, |
2175 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2175 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
2176 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2176 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
2177 | 256, | 2177 | 256, |
2178 | 256, | 2178 | 256, |
2179 | }, | 2179 | }, |
2180 | 2180 | ||
2181 | /* Cipher C00B */ | 2181 | /* Cipher C00B */ |
2182 | { | 2182 | { |
2183 | 1, | 2183 | 1, |
2184 | TLS1_TXT_ECDH_RSA_WITH_NULL_SHA, | 2184 | TLS1_TXT_ECDH_RSA_WITH_NULL_SHA, |
2185 | TLS1_CK_ECDH_RSA_WITH_NULL_SHA, | 2185 | TLS1_CK_ECDH_RSA_WITH_NULL_SHA, |
2186 | SSL_kECDHr, | 2186 | SSL_kECDHr, |
2187 | SSL_aECDH, | 2187 | SSL_aECDH, |
2188 | SSL_eNULL, | 2188 | SSL_eNULL, |
2189 | SSL_SHA1, | 2189 | SSL_SHA1, |
2190 | SSL_TLSV1, | 2190 | SSL_TLSV1, |
2191 | SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS, | 2191 | SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS, |
2192 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2192 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
2193 | 0, | 2193 | 0, |
2194 | 0, | 2194 | 0, |
2195 | }, | 2195 | }, |
2196 | 2196 | ||
2197 | /* Cipher C00C */ | 2197 | /* Cipher C00C */ |
2198 | { | 2198 | { |
2199 | 1, | 2199 | 1, |
2200 | TLS1_TXT_ECDH_RSA_WITH_RC4_128_SHA, | 2200 | TLS1_TXT_ECDH_RSA_WITH_RC4_128_SHA, |
2201 | TLS1_CK_ECDH_RSA_WITH_RC4_128_SHA, | 2201 | TLS1_CK_ECDH_RSA_WITH_RC4_128_SHA, |
2202 | SSL_kECDHr, | 2202 | SSL_kECDHr, |
2203 | SSL_aECDH, | 2203 | SSL_aECDH, |
2204 | SSL_RC4, | 2204 | SSL_RC4, |
2205 | SSL_SHA1, | 2205 | SSL_SHA1, |
2206 | SSL_TLSV1, | 2206 | SSL_TLSV1, |
2207 | SSL_NOT_EXP|SSL_MEDIUM, | 2207 | SSL_NOT_EXP|SSL_MEDIUM, |
2208 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2208 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
2209 | 128, | 2209 | 128, |
2210 | 128, | 2210 | 128, |
2211 | }, | 2211 | }, |
2212 | 2212 | ||
2213 | /* Cipher C00D */ | 2213 | /* Cipher C00D */ |
2214 | { | 2214 | { |
2215 | 1, | 2215 | 1, |
2216 | TLS1_TXT_ECDH_RSA_WITH_DES_192_CBC3_SHA, | 2216 | TLS1_TXT_ECDH_RSA_WITH_DES_192_CBC3_SHA, |
2217 | TLS1_CK_ECDH_RSA_WITH_DES_192_CBC3_SHA, | 2217 | TLS1_CK_ECDH_RSA_WITH_DES_192_CBC3_SHA, |
2218 | SSL_kECDHr, | 2218 | SSL_kECDHr, |
2219 | SSL_aECDH, | 2219 | SSL_aECDH, |
2220 | SSL_3DES, | 2220 | SSL_3DES, |
2221 | SSL_SHA1, | 2221 | SSL_SHA1, |
2222 | SSL_TLSV1, | 2222 | SSL_TLSV1, |
2223 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2223 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
2224 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2224 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
2225 | 168, | 2225 | 168, |
2226 | 168, | 2226 | 168, |
2227 | }, | 2227 | }, |
2228 | 2228 | ||
2229 | /* Cipher C00E */ | 2229 | /* Cipher C00E */ |
2230 | { | 2230 | { |
2231 | 1, | 2231 | 1, |
2232 | TLS1_TXT_ECDH_RSA_WITH_AES_128_CBC_SHA, | 2232 | TLS1_TXT_ECDH_RSA_WITH_AES_128_CBC_SHA, |
2233 | TLS1_CK_ECDH_RSA_WITH_AES_128_CBC_SHA, | 2233 | TLS1_CK_ECDH_RSA_WITH_AES_128_CBC_SHA, |
2234 | SSL_kECDHr, | 2234 | SSL_kECDHr, |
2235 | SSL_aECDH, | 2235 | SSL_aECDH, |
2236 | SSL_AES128, | 2236 | SSL_AES128, |
2237 | SSL_SHA1, | 2237 | SSL_SHA1, |
2238 | SSL_TLSV1, | 2238 | SSL_TLSV1, |
2239 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2239 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
2240 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2240 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
2241 | 128, | 2241 | 128, |
2242 | 128, | 2242 | 128, |
2243 | }, | 2243 | }, |
2244 | 2244 | ||
2245 | /* Cipher C00F */ | 2245 | /* Cipher C00F */ |
2246 | { | 2246 | { |
2247 | 1, | 2247 | 1, |
2248 | TLS1_TXT_ECDH_RSA_WITH_AES_256_CBC_SHA, | 2248 | TLS1_TXT_ECDH_RSA_WITH_AES_256_CBC_SHA, |
2249 | TLS1_CK_ECDH_RSA_WITH_AES_256_CBC_SHA, | 2249 | TLS1_CK_ECDH_RSA_WITH_AES_256_CBC_SHA, |
2250 | SSL_kECDHr, | 2250 | SSL_kECDHr, |
2251 | SSL_aECDH, | 2251 | SSL_aECDH, |
2252 | SSL_AES256, | 2252 | SSL_AES256, |
2253 | SSL_SHA1, | 2253 | SSL_SHA1, |
2254 | SSL_TLSV1, | 2254 | SSL_TLSV1, |
2255 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2255 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
2256 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2256 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
2257 | 256, | 2257 | 256, |
2258 | 256, | 2258 | 256, |
2259 | }, | 2259 | }, |
2260 | 2260 | ||
2261 | /* Cipher C010 */ | 2261 | /* Cipher C010 */ |
2262 | { | 2262 | { |
2263 | 1, | 2263 | 1, |
2264 | TLS1_TXT_ECDHE_RSA_WITH_NULL_SHA, | 2264 | TLS1_TXT_ECDHE_RSA_WITH_NULL_SHA, |
2265 | TLS1_CK_ECDHE_RSA_WITH_NULL_SHA, | 2265 | TLS1_CK_ECDHE_RSA_WITH_NULL_SHA, |
2266 | SSL_kEECDH, | 2266 | SSL_kEECDH, |
2267 | SSL_aRSA, | 2267 | SSL_aRSA, |
2268 | SSL_eNULL, | 2268 | SSL_eNULL, |
2269 | SSL_SHA1, | 2269 | SSL_SHA1, |
2270 | SSL_TLSV1, | 2270 | SSL_TLSV1, |
2271 | SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS, | 2271 | SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS, |
2272 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2272 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
2273 | 0, | 2273 | 0, |
2274 | 0, | 2274 | 0, |
2275 | }, | 2275 | }, |
2276 | 2276 | ||
2277 | /* Cipher C011 */ | 2277 | /* Cipher C011 */ |
2278 | { | 2278 | { |
2279 | 1, | 2279 | 1, |
2280 | TLS1_TXT_ECDHE_RSA_WITH_RC4_128_SHA, | 2280 | TLS1_TXT_ECDHE_RSA_WITH_RC4_128_SHA, |
2281 | TLS1_CK_ECDHE_RSA_WITH_RC4_128_SHA, | 2281 | TLS1_CK_ECDHE_RSA_WITH_RC4_128_SHA, |
2282 | SSL_kEECDH, | 2282 | SSL_kEECDH, |
2283 | SSL_aRSA, | 2283 | SSL_aRSA, |
2284 | SSL_RC4, | 2284 | SSL_RC4, |
2285 | SSL_SHA1, | 2285 | SSL_SHA1, |
2286 | SSL_TLSV1, | 2286 | SSL_TLSV1, |
2287 | SSL_NOT_EXP|SSL_MEDIUM, | 2287 | SSL_NOT_EXP|SSL_MEDIUM, |
2288 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2288 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
2289 | 128, | 2289 | 128, |
2290 | 128, | 2290 | 128, |
2291 | }, | 2291 | }, |
2292 | 2292 | ||
2293 | /* Cipher C012 */ | 2293 | /* Cipher C012 */ |
2294 | { | 2294 | { |
2295 | 1, | 2295 | 1, |
2296 | TLS1_TXT_ECDHE_RSA_WITH_DES_192_CBC3_SHA, | 2296 | TLS1_TXT_ECDHE_RSA_WITH_DES_192_CBC3_SHA, |
2297 | TLS1_CK_ECDHE_RSA_WITH_DES_192_CBC3_SHA, | 2297 | TLS1_CK_ECDHE_RSA_WITH_DES_192_CBC3_SHA, |
2298 | SSL_kEECDH, | 2298 | SSL_kEECDH, |
2299 | SSL_aRSA, | 2299 | SSL_aRSA, |
2300 | SSL_3DES, | 2300 | SSL_3DES, |
2301 | SSL_SHA1, | 2301 | SSL_SHA1, |
2302 | SSL_TLSV1, | 2302 | SSL_TLSV1, |
2303 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2303 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
2304 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2304 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
2305 | 168, | 2305 | 168, |
2306 | 168, | 2306 | 168, |
2307 | }, | 2307 | }, |
2308 | 2308 | ||
2309 | /* Cipher C013 */ | 2309 | /* Cipher C013 */ |
2310 | { | 2310 | { |
2311 | 1, | 2311 | 1, |
2312 | TLS1_TXT_ECDHE_RSA_WITH_AES_128_CBC_SHA, | 2312 | TLS1_TXT_ECDHE_RSA_WITH_AES_128_CBC_SHA, |
2313 | TLS1_CK_ECDHE_RSA_WITH_AES_128_CBC_SHA, | 2313 | TLS1_CK_ECDHE_RSA_WITH_AES_128_CBC_SHA, |
2314 | SSL_kEECDH, | 2314 | SSL_kEECDH, |
2315 | SSL_aRSA, | 2315 | SSL_aRSA, |
2316 | SSL_AES128, | 2316 | SSL_AES128, |
2317 | SSL_SHA1, | 2317 | SSL_SHA1, |
2318 | SSL_TLSV1, | 2318 | SSL_TLSV1, |
2319 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2319 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
2320 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2320 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
2321 | 128, | 2321 | 128, |
2322 | 128, | 2322 | 128, |
2323 | }, | 2323 | }, |
2324 | 2324 | ||
2325 | /* Cipher C014 */ | 2325 | /* Cipher C014 */ |
2326 | { | 2326 | { |
2327 | 1, | 2327 | 1, |
2328 | TLS1_TXT_ECDHE_RSA_WITH_AES_256_CBC_SHA, | 2328 | TLS1_TXT_ECDHE_RSA_WITH_AES_256_CBC_SHA, |
2329 | TLS1_CK_ECDHE_RSA_WITH_AES_256_CBC_SHA, | 2329 | TLS1_CK_ECDHE_RSA_WITH_AES_256_CBC_SHA, |
2330 | SSL_kEECDH, | 2330 | SSL_kEECDH, |
2331 | SSL_aRSA, | 2331 | SSL_aRSA, |
2332 | SSL_AES256, | 2332 | SSL_AES256, |
2333 | SSL_SHA1, | 2333 | SSL_SHA1, |
2334 | SSL_TLSV1, | 2334 | SSL_TLSV1, |
2335 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2335 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
2336 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2336 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
2337 | 256, | 2337 | 256, |
2338 | 256, | 2338 | 256, |
2339 | }, | 2339 | }, |
2340 | 2340 | ||
2341 | /* Cipher C015 */ | 2341 | /* Cipher C015 */ |
2342 | { | 2342 | { |
2343 | 1, | 2343 | 1, |
2344 | TLS1_TXT_ECDH_anon_WITH_NULL_SHA, | 2344 | TLS1_TXT_ECDH_anon_WITH_NULL_SHA, |
2345 | TLS1_CK_ECDH_anon_WITH_NULL_SHA, | 2345 | TLS1_CK_ECDH_anon_WITH_NULL_SHA, |
2346 | SSL_kEECDH, | 2346 | SSL_kEECDH, |
2347 | SSL_aNULL, | 2347 | SSL_aNULL, |
2348 | SSL_eNULL, | 2348 | SSL_eNULL, |
2349 | SSL_SHA1, | 2349 | SSL_SHA1, |
2350 | SSL_TLSV1, | 2350 | SSL_TLSV1, |
2351 | SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS, | 2351 | SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS, |
2352 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2352 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
2353 | 0, | 2353 | 0, |
2354 | 0, | 2354 | 0, |
2355 | }, | 2355 | }, |
2356 | 2356 | ||
2357 | /* Cipher C016 */ | 2357 | /* Cipher C016 */ |
2358 | { | 2358 | { |
2359 | 1, | 2359 | 1, |
2360 | TLS1_TXT_ECDH_anon_WITH_RC4_128_SHA, | 2360 | TLS1_TXT_ECDH_anon_WITH_RC4_128_SHA, |
2361 | TLS1_CK_ECDH_anon_WITH_RC4_128_SHA, | 2361 | TLS1_CK_ECDH_anon_WITH_RC4_128_SHA, |
2362 | SSL_kEECDH, | 2362 | SSL_kEECDH, |
2363 | SSL_aNULL, | 2363 | SSL_aNULL, |
2364 | SSL_RC4, | 2364 | SSL_RC4, |
2365 | SSL_SHA1, | 2365 | SSL_SHA1, |
2366 | SSL_TLSV1, | 2366 | SSL_TLSV1, |
2367 | SSL_NOT_EXP|SSL_MEDIUM, | 2367 | SSL_NOT_EXP|SSL_MEDIUM, |
2368 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2368 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
2369 | 128, | 2369 | 128, |
2370 | 128, | 2370 | 128, |
2371 | }, | 2371 | }, |
2372 | 2372 | ||
2373 | /* Cipher C017 */ | 2373 | /* Cipher C017 */ |
2374 | { | 2374 | { |
2375 | 1, | 2375 | 1, |
2376 | TLS1_TXT_ECDH_anon_WITH_DES_192_CBC3_SHA, | 2376 | TLS1_TXT_ECDH_anon_WITH_DES_192_CBC3_SHA, |
2377 | TLS1_CK_ECDH_anon_WITH_DES_192_CBC3_SHA, | 2377 | TLS1_CK_ECDH_anon_WITH_DES_192_CBC3_SHA, |
2378 | SSL_kEECDH, | 2378 | SSL_kEECDH, |
2379 | SSL_aNULL, | 2379 | SSL_aNULL, |
2380 | SSL_3DES, | 2380 | SSL_3DES, |
2381 | SSL_SHA1, | 2381 | SSL_SHA1, |
2382 | SSL_TLSV1, | 2382 | SSL_TLSV1, |
2383 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2383 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
2384 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2384 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
2385 | 168, | 2385 | 168, |
2386 | 168, | 2386 | 168, |
2387 | }, | 2387 | }, |
2388 | 2388 | ||
2389 | /* Cipher C018 */ | 2389 | /* Cipher C018 */ |
2390 | { | 2390 | { |
2391 | 1, | 2391 | 1, |
2392 | TLS1_TXT_ECDH_anon_WITH_AES_128_CBC_SHA, | 2392 | TLS1_TXT_ECDH_anon_WITH_AES_128_CBC_SHA, |
2393 | TLS1_CK_ECDH_anon_WITH_AES_128_CBC_SHA, | 2393 | TLS1_CK_ECDH_anon_WITH_AES_128_CBC_SHA, |
2394 | SSL_kEECDH, | 2394 | SSL_kEECDH, |
2395 | SSL_aNULL, | 2395 | SSL_aNULL, |
2396 | SSL_AES128, | 2396 | SSL_AES128, |
2397 | SSL_SHA1, | 2397 | SSL_SHA1, |
2398 | SSL_TLSV1, | 2398 | SSL_TLSV1, |
2399 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2399 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
2400 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2400 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
2401 | 128, | 2401 | 128, |
2402 | 128, | 2402 | 128, |
2403 | }, | 2403 | }, |
2404 | 2404 | ||
2405 | /* Cipher C019 */ | 2405 | /* Cipher C019 */ |
2406 | { | 2406 | { |
2407 | 1, | 2407 | 1, |
2408 | TLS1_TXT_ECDH_anon_WITH_AES_256_CBC_SHA, | 2408 | TLS1_TXT_ECDH_anon_WITH_AES_256_CBC_SHA, |
2409 | TLS1_CK_ECDH_anon_WITH_AES_256_CBC_SHA, | 2409 | TLS1_CK_ECDH_anon_WITH_AES_256_CBC_SHA, |
2410 | SSL_kEECDH, | 2410 | SSL_kEECDH, |
2411 | SSL_aNULL, | 2411 | SSL_aNULL, |
2412 | SSL_AES256, | 2412 | SSL_AES256, |
2413 | SSL_SHA1, | 2413 | SSL_SHA1, |
2414 | SSL_TLSV1, | 2414 | SSL_TLSV1, |
2415 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2415 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
2416 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2416 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
2417 | 256, | 2417 | 256, |
2418 | 256, | 2418 | 256, |
2419 | }, | 2419 | }, |
2420 | #endif /* OPENSSL_NO_ECDH */ | 2420 | #endif /* OPENSSL_NO_ECDH */ |
2421 | 2421 | ||
2422 | #ifndef OPENSSL_NO_SRP | 2422 | #ifndef OPENSSL_NO_SRP |
2423 | /* Cipher C01A */ | 2423 | /* Cipher C01A */ |
2424 | { | 2424 | { |
2425 | 1, | 2425 | 1, |
2426 | TLS1_TXT_SRP_SHA_WITH_3DES_EDE_CBC_SHA, | 2426 | TLS1_TXT_SRP_SHA_WITH_3DES_EDE_CBC_SHA, |
2427 | TLS1_CK_SRP_SHA_WITH_3DES_EDE_CBC_SHA, | 2427 | TLS1_CK_SRP_SHA_WITH_3DES_EDE_CBC_SHA, |
2428 | SSL_kSRP, | 2428 | SSL_kSRP, |
2429 | SSL_aNULL, | 2429 | SSL_aNULL, |
2430 | SSL_3DES, | 2430 | SSL_3DES, |
2431 | SSL_SHA1, | 2431 | SSL_SHA1, |
2432 | SSL_TLSV1, | 2432 | SSL_TLSV1, |
2433 | SSL_NOT_EXP|SSL_HIGH, | 2433 | SSL_NOT_EXP|SSL_HIGH, |
2434 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2434 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
2435 | 168, | 2435 | 168, |
2436 | 168, | 2436 | 168, |
2437 | }, | 2437 | }, |
2438 | 2438 | ||
2439 | /* Cipher C01B */ | 2439 | /* Cipher C01B */ |
2440 | { | 2440 | { |
2441 | 1, | 2441 | 1, |
2442 | TLS1_TXT_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA, | 2442 | TLS1_TXT_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA, |
2443 | TLS1_CK_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA, | 2443 | TLS1_CK_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA, |
2444 | SSL_kSRP, | 2444 | SSL_kSRP, |
2445 | SSL_aRSA, | 2445 | SSL_aRSA, |
2446 | SSL_3DES, | 2446 | SSL_3DES, |
2447 | SSL_SHA1, | 2447 | SSL_SHA1, |
2448 | SSL_TLSV1, | 2448 | SSL_TLSV1, |
2449 | SSL_NOT_EXP|SSL_HIGH, | 2449 | SSL_NOT_EXP|SSL_HIGH, |
2450 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2450 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
2451 | 168, | 2451 | 168, |
2452 | 168, | 2452 | 168, |
2453 | }, | 2453 | }, |
2454 | 2454 | ||
2455 | /* Cipher C01C */ | 2455 | /* Cipher C01C */ |
2456 | { | 2456 | { |
2457 | 1, | 2457 | 1, |
2458 | TLS1_TXT_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA, | 2458 | TLS1_TXT_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA, |
2459 | TLS1_CK_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA, | 2459 | TLS1_CK_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA, |
2460 | SSL_kSRP, | 2460 | SSL_kSRP, |
2461 | SSL_aDSS, | 2461 | SSL_aDSS, |
2462 | SSL_3DES, | 2462 | SSL_3DES, |
2463 | SSL_SHA1, | 2463 | SSL_SHA1, |
2464 | SSL_TLSV1, | 2464 | SSL_TLSV1, |
2465 | SSL_NOT_EXP|SSL_HIGH, | 2465 | SSL_NOT_EXP|SSL_HIGH, |
2466 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2466 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
2467 | 168, | 2467 | 168, |
2468 | 168, | 2468 | 168, |
2469 | }, | 2469 | }, |
2470 | 2470 | ||
2471 | /* Cipher C01D */ | 2471 | /* Cipher C01D */ |
2472 | { | 2472 | { |
2473 | 1, | 2473 | 1, |
2474 | TLS1_TXT_SRP_SHA_WITH_AES_128_CBC_SHA, | 2474 | TLS1_TXT_SRP_SHA_WITH_AES_128_CBC_SHA, |
2475 | TLS1_CK_SRP_SHA_WITH_AES_128_CBC_SHA, | 2475 | TLS1_CK_SRP_SHA_WITH_AES_128_CBC_SHA, |
2476 | SSL_kSRP, | 2476 | SSL_kSRP, |
2477 | SSL_aNULL, | 2477 | SSL_aNULL, |
2478 | SSL_AES128, | 2478 | SSL_AES128, |
2479 | SSL_SHA1, | 2479 | SSL_SHA1, |
2480 | SSL_TLSV1, | 2480 | SSL_TLSV1, |
2481 | SSL_NOT_EXP|SSL_HIGH, | 2481 | SSL_NOT_EXP|SSL_HIGH, |
2482 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2482 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
2483 | 128, | 2483 | 128, |
2484 | 128, | 2484 | 128, |
2485 | }, | 2485 | }, |
2486 | 2486 | ||
2487 | /* Cipher C01E */ | 2487 | /* Cipher C01E */ |
2488 | { | 2488 | { |
2489 | 1, | 2489 | 1, |
2490 | TLS1_TXT_SRP_SHA_RSA_WITH_AES_128_CBC_SHA, | 2490 | TLS1_TXT_SRP_SHA_RSA_WITH_AES_128_CBC_SHA, |
2491 | TLS1_CK_SRP_SHA_RSA_WITH_AES_128_CBC_SHA, | 2491 | TLS1_CK_SRP_SHA_RSA_WITH_AES_128_CBC_SHA, |
2492 | SSL_kSRP, | 2492 | SSL_kSRP, |
2493 | SSL_aRSA, | 2493 | SSL_aRSA, |
2494 | SSL_AES128, | 2494 | SSL_AES128, |
2495 | SSL_SHA1, | 2495 | SSL_SHA1, |
2496 | SSL_TLSV1, | 2496 | SSL_TLSV1, |
2497 | SSL_NOT_EXP|SSL_HIGH, | 2497 | SSL_NOT_EXP|SSL_HIGH, |
2498 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2498 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
2499 | 128, | 2499 | 128, |
2500 | 128, | 2500 | 128, |
2501 | }, | 2501 | }, |
2502 | 2502 | ||
2503 | /* Cipher C01F */ | 2503 | /* Cipher C01F */ |
2504 | { | 2504 | { |
2505 | 1, | 2505 | 1, |
2506 | TLS1_TXT_SRP_SHA_DSS_WITH_AES_128_CBC_SHA, | 2506 | TLS1_TXT_SRP_SHA_DSS_WITH_AES_128_CBC_SHA, |
2507 | TLS1_CK_SRP_SHA_DSS_WITH_AES_128_CBC_SHA, | 2507 | TLS1_CK_SRP_SHA_DSS_WITH_AES_128_CBC_SHA, |
2508 | SSL_kSRP, | 2508 | SSL_kSRP, |
2509 | SSL_aDSS, | 2509 | SSL_aDSS, |
2510 | SSL_AES128, | 2510 | SSL_AES128, |
2511 | SSL_SHA1, | 2511 | SSL_SHA1, |
2512 | SSL_TLSV1, | 2512 | SSL_TLSV1, |
2513 | SSL_NOT_EXP|SSL_HIGH, | 2513 | SSL_NOT_EXP|SSL_HIGH, |
2514 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2514 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
2515 | 128, | 2515 | 128, |
2516 | 128, | 2516 | 128, |
2517 | }, | 2517 | }, |
2518 | 2518 | ||
2519 | /* Cipher C020 */ | 2519 | /* Cipher C020 */ |
2520 | { | 2520 | { |
2521 | 1, | 2521 | 1, |
2522 | TLS1_TXT_SRP_SHA_WITH_AES_256_CBC_SHA, | 2522 | TLS1_TXT_SRP_SHA_WITH_AES_256_CBC_SHA, |
2523 | TLS1_CK_SRP_SHA_WITH_AES_256_CBC_SHA, | 2523 | TLS1_CK_SRP_SHA_WITH_AES_256_CBC_SHA, |
2524 | SSL_kSRP, | 2524 | SSL_kSRP, |
2525 | SSL_aNULL, | 2525 | SSL_aNULL, |
2526 | SSL_AES256, | 2526 | SSL_AES256, |
2527 | SSL_SHA1, | 2527 | SSL_SHA1, |
2528 | SSL_TLSV1, | 2528 | SSL_TLSV1, |
2529 | SSL_NOT_EXP|SSL_HIGH, | 2529 | SSL_NOT_EXP|SSL_HIGH, |
2530 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2530 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
2531 | 256, | 2531 | 256, |
2532 | 256, | 2532 | 256, |
2533 | }, | 2533 | }, |
2534 | 2534 | ||
2535 | /* Cipher C021 */ | 2535 | /* Cipher C021 */ |
2536 | { | 2536 | { |
2537 | 1, | 2537 | 1, |
2538 | TLS1_TXT_SRP_SHA_RSA_WITH_AES_256_CBC_SHA, | 2538 | TLS1_TXT_SRP_SHA_RSA_WITH_AES_256_CBC_SHA, |
2539 | TLS1_CK_SRP_SHA_RSA_WITH_AES_256_CBC_SHA, | 2539 | TLS1_CK_SRP_SHA_RSA_WITH_AES_256_CBC_SHA, |
2540 | SSL_kSRP, | 2540 | SSL_kSRP, |
2541 | SSL_aRSA, | 2541 | SSL_aRSA, |
2542 | SSL_AES256, | 2542 | SSL_AES256, |
2543 | SSL_SHA1, | 2543 | SSL_SHA1, |
2544 | SSL_TLSV1, | 2544 | SSL_TLSV1, |
2545 | SSL_NOT_EXP|SSL_HIGH, | 2545 | SSL_NOT_EXP|SSL_HIGH, |
2546 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2546 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
2547 | 256, | 2547 | 256, |
2548 | 256, | 2548 | 256, |
2549 | }, | 2549 | }, |
2550 | 2550 | ||
2551 | /* Cipher C022 */ | 2551 | /* Cipher C022 */ |
2552 | { | 2552 | { |
2553 | 1, | 2553 | 1, |
2554 | TLS1_TXT_SRP_SHA_DSS_WITH_AES_256_CBC_SHA, | 2554 | TLS1_TXT_SRP_SHA_DSS_WITH_AES_256_CBC_SHA, |
2555 | TLS1_CK_SRP_SHA_DSS_WITH_AES_256_CBC_SHA, | 2555 | TLS1_CK_SRP_SHA_DSS_WITH_AES_256_CBC_SHA, |
2556 | SSL_kSRP, | 2556 | SSL_kSRP, |
2557 | SSL_aDSS, | 2557 | SSL_aDSS, |
2558 | SSL_AES256, | 2558 | SSL_AES256, |
2559 | SSL_SHA1, | 2559 | SSL_SHA1, |
2560 | SSL_TLSV1, | 2560 | SSL_TLSV1, |
2561 | SSL_NOT_EXP|SSL_HIGH, | 2561 | SSL_NOT_EXP|SSL_HIGH, |
2562 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2562 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
2563 | 256, | 2563 | 256, |
2564 | 256, | 2564 | 256, |
2565 | }, | 2565 | }, |
2566 | #endif /* OPENSSL_NO_SRP */ | 2566 | #endif /* OPENSSL_NO_SRP */ |
2567 | #ifndef OPENSSL_NO_ECDH | 2567 | #ifndef OPENSSL_NO_ECDH |
@@ -2570,260 +2570,260 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]={ | |||
2570 | 2570 | ||
2571 | /* Cipher C023 */ | 2571 | /* Cipher C023 */ |
2572 | { | 2572 | { |
2573 | 1, | 2573 | 1, |
2574 | TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_SHA256, | 2574 | TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_SHA256, |
2575 | TLS1_CK_ECDHE_ECDSA_WITH_AES_128_SHA256, | 2575 | TLS1_CK_ECDHE_ECDSA_WITH_AES_128_SHA256, |
2576 | SSL_kEECDH, | 2576 | SSL_kEECDH, |
2577 | SSL_aECDSA, | 2577 | SSL_aECDSA, |
2578 | SSL_AES128, | 2578 | SSL_AES128, |
2579 | SSL_SHA256, | 2579 | SSL_SHA256, |
2580 | SSL_TLSV1_2, | 2580 | SSL_TLSV1_2, |
2581 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2581 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
2582 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, | 2582 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, |
2583 | 128, | 2583 | 128, |
2584 | 128, | 2584 | 128, |
2585 | }, | 2585 | }, |
2586 | 2586 | ||
2587 | /* Cipher C024 */ | 2587 | /* Cipher C024 */ |
2588 | { | 2588 | { |
2589 | 1, | 2589 | 1, |
2590 | TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_SHA384, | 2590 | TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_SHA384, |
2591 | TLS1_CK_ECDHE_ECDSA_WITH_AES_256_SHA384, | 2591 | TLS1_CK_ECDHE_ECDSA_WITH_AES_256_SHA384, |
2592 | SSL_kEECDH, | 2592 | SSL_kEECDH, |
2593 | SSL_aECDSA, | 2593 | SSL_aECDSA, |
2594 | SSL_AES256, | 2594 | SSL_AES256, |
2595 | SSL_SHA384, | 2595 | SSL_SHA384, |
2596 | SSL_TLSV1_2, | 2596 | SSL_TLSV1_2, |
2597 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2597 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
2598 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, | 2598 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, |
2599 | 256, | 2599 | 256, |
2600 | 256, | 2600 | 256, |
2601 | }, | 2601 | }, |
2602 | 2602 | ||
2603 | /* Cipher C025 */ | 2603 | /* Cipher C025 */ |
2604 | { | 2604 | { |
2605 | 1, | 2605 | 1, |
2606 | TLS1_TXT_ECDH_ECDSA_WITH_AES_128_SHA256, | 2606 | TLS1_TXT_ECDH_ECDSA_WITH_AES_128_SHA256, |
2607 | TLS1_CK_ECDH_ECDSA_WITH_AES_128_SHA256, | 2607 | TLS1_CK_ECDH_ECDSA_WITH_AES_128_SHA256, |
2608 | SSL_kECDHe, | 2608 | SSL_kECDHe, |
2609 | SSL_aECDH, | 2609 | SSL_aECDH, |
2610 | SSL_AES128, | 2610 | SSL_AES128, |
2611 | SSL_SHA256, | 2611 | SSL_SHA256, |
2612 | SSL_TLSV1_2, | 2612 | SSL_TLSV1_2, |
2613 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2613 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
2614 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, | 2614 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, |
2615 | 128, | 2615 | 128, |
2616 | 128, | 2616 | 128, |
2617 | }, | 2617 | }, |
2618 | 2618 | ||
2619 | /* Cipher C026 */ | 2619 | /* Cipher C026 */ |
2620 | { | 2620 | { |
2621 | 1, | 2621 | 1, |
2622 | TLS1_TXT_ECDH_ECDSA_WITH_AES_256_SHA384, | 2622 | TLS1_TXT_ECDH_ECDSA_WITH_AES_256_SHA384, |
2623 | TLS1_CK_ECDH_ECDSA_WITH_AES_256_SHA384, | 2623 | TLS1_CK_ECDH_ECDSA_WITH_AES_256_SHA384, |
2624 | SSL_kECDHe, | 2624 | SSL_kECDHe, |
2625 | SSL_aECDH, | 2625 | SSL_aECDH, |
2626 | SSL_AES256, | 2626 | SSL_AES256, |
2627 | SSL_SHA384, | 2627 | SSL_SHA384, |
2628 | SSL_TLSV1_2, | 2628 | SSL_TLSV1_2, |
2629 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2629 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
2630 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, | 2630 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, |
2631 | 256, | 2631 | 256, |
2632 | 256, | 2632 | 256, |
2633 | }, | 2633 | }, |
2634 | 2634 | ||
2635 | /* Cipher C027 */ | 2635 | /* Cipher C027 */ |
2636 | { | 2636 | { |
2637 | 1, | 2637 | 1, |
2638 | TLS1_TXT_ECDHE_RSA_WITH_AES_128_SHA256, | 2638 | TLS1_TXT_ECDHE_RSA_WITH_AES_128_SHA256, |
2639 | TLS1_CK_ECDHE_RSA_WITH_AES_128_SHA256, | 2639 | TLS1_CK_ECDHE_RSA_WITH_AES_128_SHA256, |
2640 | SSL_kEECDH, | 2640 | SSL_kEECDH, |
2641 | SSL_aRSA, | 2641 | SSL_aRSA, |
2642 | SSL_AES128, | 2642 | SSL_AES128, |
2643 | SSL_SHA256, | 2643 | SSL_SHA256, |
2644 | SSL_TLSV1_2, | 2644 | SSL_TLSV1_2, |
2645 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2645 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
2646 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, | 2646 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, |
2647 | 128, | 2647 | 128, |
2648 | 128, | 2648 | 128, |
2649 | }, | 2649 | }, |
2650 | 2650 | ||
2651 | /* Cipher C028 */ | 2651 | /* Cipher C028 */ |
2652 | { | 2652 | { |
2653 | 1, | 2653 | 1, |
2654 | TLS1_TXT_ECDHE_RSA_WITH_AES_256_SHA384, | 2654 | TLS1_TXT_ECDHE_RSA_WITH_AES_256_SHA384, |
2655 | TLS1_CK_ECDHE_RSA_WITH_AES_256_SHA384, | 2655 | TLS1_CK_ECDHE_RSA_WITH_AES_256_SHA384, |
2656 | SSL_kEECDH, | 2656 | SSL_kEECDH, |
2657 | SSL_aRSA, | 2657 | SSL_aRSA, |
2658 | SSL_AES256, | 2658 | SSL_AES256, |
2659 | SSL_SHA384, | 2659 | SSL_SHA384, |
2660 | SSL_TLSV1_2, | 2660 | SSL_TLSV1_2, |
2661 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2661 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
2662 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, | 2662 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, |
2663 | 256, | 2663 | 256, |
2664 | 256, | 2664 | 256, |
2665 | }, | 2665 | }, |
2666 | 2666 | ||
2667 | /* Cipher C029 */ | 2667 | /* Cipher C029 */ |
2668 | { | 2668 | { |
2669 | 1, | 2669 | 1, |
2670 | TLS1_TXT_ECDH_RSA_WITH_AES_128_SHA256, | 2670 | TLS1_TXT_ECDH_RSA_WITH_AES_128_SHA256, |
2671 | TLS1_CK_ECDH_RSA_WITH_AES_128_SHA256, | 2671 | TLS1_CK_ECDH_RSA_WITH_AES_128_SHA256, |
2672 | SSL_kECDHr, | 2672 | SSL_kECDHr, |
2673 | SSL_aECDH, | 2673 | SSL_aECDH, |
2674 | SSL_AES128, | 2674 | SSL_AES128, |
2675 | SSL_SHA256, | 2675 | SSL_SHA256, |
2676 | SSL_TLSV1_2, | 2676 | SSL_TLSV1_2, |
2677 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2677 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
2678 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, | 2678 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, |
2679 | 128, | 2679 | 128, |
2680 | 128, | 2680 | 128, |
2681 | }, | 2681 | }, |
2682 | 2682 | ||
2683 | /* Cipher C02A */ | 2683 | /* Cipher C02A */ |
2684 | { | 2684 | { |
2685 | 1, | 2685 | 1, |
2686 | TLS1_TXT_ECDH_RSA_WITH_AES_256_SHA384, | 2686 | TLS1_TXT_ECDH_RSA_WITH_AES_256_SHA384, |
2687 | TLS1_CK_ECDH_RSA_WITH_AES_256_SHA384, | 2687 | TLS1_CK_ECDH_RSA_WITH_AES_256_SHA384, |
2688 | SSL_kECDHr, | 2688 | SSL_kECDHr, |
2689 | SSL_aECDH, | 2689 | SSL_aECDH, |
2690 | SSL_AES256, | 2690 | SSL_AES256, |
2691 | SSL_SHA384, | 2691 | SSL_SHA384, |
2692 | SSL_TLSV1_2, | 2692 | SSL_TLSV1_2, |
2693 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2693 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
2694 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, | 2694 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, |
2695 | 256, | 2695 | 256, |
2696 | 256, | 2696 | 256, |
2697 | }, | 2697 | }, |
2698 | 2698 | ||
2699 | /* GCM based TLS v1.2 ciphersuites from RFC5289 */ | 2699 | /* GCM based TLS v1.2 ciphersuites from RFC5289 */ |
2700 | 2700 | ||
2701 | /* Cipher C02B */ | 2701 | /* Cipher C02B */ |
2702 | { | 2702 | { |
2703 | 1, | 2703 | 1, |
2704 | TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, | 2704 | TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, |
2705 | TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, | 2705 | TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, |
2706 | SSL_kEECDH, | 2706 | SSL_kEECDH, |
2707 | SSL_aECDSA, | 2707 | SSL_aECDSA, |
2708 | SSL_AES128GCM, | 2708 | SSL_AES128GCM, |
2709 | SSL_AEAD, | 2709 | SSL_AEAD, |
2710 | SSL_TLSV1_2, | 2710 | SSL_TLSV1_2, |
2711 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2711 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
2712 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, | 2712 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, |
2713 | 128, | 2713 | 128, |
2714 | 128, | 2714 | 128, |
2715 | }, | 2715 | }, |
2716 | 2716 | ||
2717 | /* Cipher C02C */ | 2717 | /* Cipher C02C */ |
2718 | { | 2718 | { |
2719 | 1, | 2719 | 1, |
2720 | TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, | 2720 | TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, |
2721 | TLS1_CK_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, | 2721 | TLS1_CK_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, |
2722 | SSL_kEECDH, | 2722 | SSL_kEECDH, |
2723 | SSL_aECDSA, | 2723 | SSL_aECDSA, |
2724 | SSL_AES256GCM, | 2724 | SSL_AES256GCM, |
2725 | SSL_AEAD, | 2725 | SSL_AEAD, |
2726 | SSL_TLSV1_2, | 2726 | SSL_TLSV1_2, |
2727 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2727 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
2728 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, | 2728 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, |
2729 | 256, | 2729 | 256, |
2730 | 256, | 2730 | 256, |
2731 | }, | 2731 | }, |
2732 | 2732 | ||
2733 | /* Cipher C02D */ | 2733 | /* Cipher C02D */ |
2734 | { | 2734 | { |
2735 | 1, | 2735 | 1, |
2736 | TLS1_TXT_ECDH_ECDSA_WITH_AES_128_GCM_SHA256, | 2736 | TLS1_TXT_ECDH_ECDSA_WITH_AES_128_GCM_SHA256, |
2737 | TLS1_CK_ECDH_ECDSA_WITH_AES_128_GCM_SHA256, | 2737 | TLS1_CK_ECDH_ECDSA_WITH_AES_128_GCM_SHA256, |
2738 | SSL_kECDHe, | 2738 | SSL_kECDHe, |
2739 | SSL_aECDH, | 2739 | SSL_aECDH, |
2740 | SSL_AES128GCM, | 2740 | SSL_AES128GCM, |
2741 | SSL_AEAD, | 2741 | SSL_AEAD, |
2742 | SSL_TLSV1_2, | 2742 | SSL_TLSV1_2, |
2743 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2743 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
2744 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, | 2744 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, |
2745 | 128, | 2745 | 128, |
2746 | 128, | 2746 | 128, |
2747 | }, | 2747 | }, |
2748 | 2748 | ||
2749 | /* Cipher C02E */ | 2749 | /* Cipher C02E */ |
2750 | { | 2750 | { |
2751 | 1, | 2751 | 1, |
2752 | TLS1_TXT_ECDH_ECDSA_WITH_AES_256_GCM_SHA384, | 2752 | TLS1_TXT_ECDH_ECDSA_WITH_AES_256_GCM_SHA384, |
2753 | TLS1_CK_ECDH_ECDSA_WITH_AES_256_GCM_SHA384, | 2753 | TLS1_CK_ECDH_ECDSA_WITH_AES_256_GCM_SHA384, |
2754 | SSL_kECDHe, | 2754 | SSL_kECDHe, |
2755 | SSL_aECDH, | 2755 | SSL_aECDH, |
2756 | SSL_AES256GCM, | 2756 | SSL_AES256GCM, |
2757 | SSL_AEAD, | 2757 | SSL_AEAD, |
2758 | SSL_TLSV1_2, | 2758 | SSL_TLSV1_2, |
2759 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2759 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
2760 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, | 2760 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, |
2761 | 256, | 2761 | 256, |
2762 | 256, | 2762 | 256, |
2763 | }, | 2763 | }, |
2764 | 2764 | ||
2765 | /* Cipher C02F */ | 2765 | /* Cipher C02F */ |
2766 | { | 2766 | { |
2767 | 1, | 2767 | 1, |
2768 | TLS1_TXT_ECDHE_RSA_WITH_AES_128_GCM_SHA256, | 2768 | TLS1_TXT_ECDHE_RSA_WITH_AES_128_GCM_SHA256, |
2769 | TLS1_CK_ECDHE_RSA_WITH_AES_128_GCM_SHA256, | 2769 | TLS1_CK_ECDHE_RSA_WITH_AES_128_GCM_SHA256, |
2770 | SSL_kEECDH, | 2770 | SSL_kEECDH, |
2771 | SSL_aRSA, | 2771 | SSL_aRSA, |
2772 | SSL_AES128GCM, | 2772 | SSL_AES128GCM, |
2773 | SSL_AEAD, | 2773 | SSL_AEAD, |
2774 | SSL_TLSV1_2, | 2774 | SSL_TLSV1_2, |
2775 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2775 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
2776 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, | 2776 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, |
2777 | 128, | 2777 | 128, |
2778 | 128, | 2778 | 128, |
2779 | }, | 2779 | }, |
2780 | 2780 | ||
2781 | /* Cipher C030 */ | 2781 | /* Cipher C030 */ |
2782 | { | 2782 | { |
2783 | 1, | 2783 | 1, |
2784 | TLS1_TXT_ECDHE_RSA_WITH_AES_256_GCM_SHA384, | 2784 | TLS1_TXT_ECDHE_RSA_WITH_AES_256_GCM_SHA384, |
2785 | TLS1_CK_ECDHE_RSA_WITH_AES_256_GCM_SHA384, | 2785 | TLS1_CK_ECDHE_RSA_WITH_AES_256_GCM_SHA384, |
2786 | SSL_kEECDH, | 2786 | SSL_kEECDH, |
2787 | SSL_aRSA, | 2787 | SSL_aRSA, |
2788 | SSL_AES256GCM, | 2788 | SSL_AES256GCM, |
2789 | SSL_AEAD, | 2789 | SSL_AEAD, |
2790 | SSL_TLSV1_2, | 2790 | SSL_TLSV1_2, |
2791 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2791 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
2792 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, | 2792 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, |
2793 | 256, | 2793 | 256, |
2794 | 256, | 2794 | 256, |
2795 | }, | 2795 | }, |
2796 | 2796 | ||
2797 | /* Cipher C031 */ | 2797 | /* Cipher C031 */ |
2798 | { | 2798 | { |
2799 | 1, | 2799 | 1, |
2800 | TLS1_TXT_ECDH_RSA_WITH_AES_128_GCM_SHA256, | 2800 | TLS1_TXT_ECDH_RSA_WITH_AES_128_GCM_SHA256, |
2801 | TLS1_CK_ECDH_RSA_WITH_AES_128_GCM_SHA256, | 2801 | TLS1_CK_ECDH_RSA_WITH_AES_128_GCM_SHA256, |
2802 | SSL_kECDHr, | 2802 | SSL_kECDHr, |
2803 | SSL_aECDH, | 2803 | SSL_aECDH, |
2804 | SSL_AES128GCM, | 2804 | SSL_AES128GCM, |
2805 | SSL_AEAD, | 2805 | SSL_AEAD, |
2806 | SSL_TLSV1_2, | 2806 | SSL_TLSV1_2, |
2807 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2807 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
2808 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, | 2808 | SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256, |
2809 | 128, | 2809 | 128, |
2810 | 128, | 2810 | 128, |
2811 | }, | 2811 | }, |
2812 | 2812 | ||
2813 | /* Cipher C032 */ | 2813 | /* Cipher C032 */ |
2814 | { | 2814 | { |
2815 | 1, | 2815 | 1, |
2816 | TLS1_TXT_ECDH_RSA_WITH_AES_256_GCM_SHA384, | 2816 | TLS1_TXT_ECDH_RSA_WITH_AES_256_GCM_SHA384, |
2817 | TLS1_CK_ECDH_RSA_WITH_AES_256_GCM_SHA384, | 2817 | TLS1_CK_ECDH_RSA_WITH_AES_256_GCM_SHA384, |
2818 | SSL_kECDHr, | 2818 | SSL_kECDHr, |
2819 | SSL_aECDH, | 2819 | SSL_aECDH, |
2820 | SSL_AES256GCM, | 2820 | SSL_AES256GCM, |
2821 | SSL_AEAD, | 2821 | SSL_AEAD, |
2822 | SSL_TLSV1_2, | 2822 | SSL_TLSV1_2, |
2823 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, | 2823 | SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, |
2824 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, | 2824 | SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384, |
2825 | 256, | 2825 | 256, |
2826 | 256, | 2826 | 256, |
2827 | }, | 2827 | }, |
2828 | 2828 | ||
2829 | #endif /* OPENSSL_NO_ECDH */ | 2829 | #endif /* OPENSSL_NO_ECDH */ |
@@ -2832,135 +2832,141 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]={ | |||
2832 | #ifdef TEMP_GOST_TLS | 2832 | #ifdef TEMP_GOST_TLS |
2833 | /* Cipher FF00 */ | 2833 | /* Cipher FF00 */ |
2834 | { | 2834 | { |
2835 | 1, | 2835 | 1, |
2836 | "GOST-MD5", | 2836 | "GOST-MD5", |
2837 | 0x0300ff00, | 2837 | 0x0300ff00, |
2838 | SSL_kRSA, | 2838 | SSL_kRSA, |
2839 | SSL_aRSA, | 2839 | SSL_aRSA, |
2840 | SSL_eGOST2814789CNT, | 2840 | SSL_eGOST2814789CNT, |
2841 | SSL_MD5, | 2841 | SSL_MD5, |
2842 | SSL_TLSV1, | 2842 | SSL_TLSV1, |
2843 | SSL_NOT_EXP|SSL_HIGH, | 2843 | SSL_NOT_EXP|SSL_HIGH, |
2844 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2844 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
2845 | 256, | 2845 | 256, |
2846 | 256, | 2846 | 256, |
2847 | }, | 2847 | }, |
2848 | { | 2848 | { |
2849 | 1, | 2849 | 1, |
2850 | "GOST-GOST94", | 2850 | "GOST-GOST94", |
2851 | 0x0300ff01, | 2851 | 0x0300ff01, |
2852 | SSL_kRSA, | 2852 | SSL_kRSA, |
2853 | SSL_aRSA, | 2853 | SSL_aRSA, |
2854 | SSL_eGOST2814789CNT, | 2854 | SSL_eGOST2814789CNT, |
2855 | SSL_GOST94, | 2855 | SSL_GOST94, |
2856 | SSL_TLSV1, | 2856 | SSL_TLSV1, |
2857 | SSL_NOT_EXP|SSL_HIGH, | 2857 | SSL_NOT_EXP|SSL_HIGH, |
2858 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2858 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
2859 | 256, | 2859 | 256, |
2860 | 256 | 2860 | 256 |
2861 | }, | 2861 | }, |
2862 | { | 2862 | { |
2863 | 1, | 2863 | 1, |
2864 | "GOST-GOST89MAC", | 2864 | "GOST-GOST89MAC", |
2865 | 0x0300ff02, | 2865 | 0x0300ff02, |
2866 | SSL_kRSA, | 2866 | SSL_kRSA, |
2867 | SSL_aRSA, | 2867 | SSL_aRSA, |
2868 | SSL_eGOST2814789CNT, | 2868 | SSL_eGOST2814789CNT, |
2869 | SSL_GOST89MAC, | 2869 | SSL_GOST89MAC, |
2870 | SSL_TLSV1, | 2870 | SSL_TLSV1, |
2871 | SSL_NOT_EXP|SSL_HIGH, | 2871 | SSL_NOT_EXP|SSL_HIGH, |
2872 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, | 2872 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, |
2873 | 256, | 2873 | 256, |
2874 | 256 | 2874 | 256 |
2875 | }, | 2875 | }, |
2876 | { | 2876 | { |
2877 | 1, | 2877 | 1, |
2878 | "GOST-GOST89STREAM", | 2878 | "GOST-GOST89STREAM", |
2879 | 0x0300ff03, | 2879 | 0x0300ff03, |
2880 | SSL_kRSA, | 2880 | SSL_kRSA, |
2881 | SSL_aRSA, | 2881 | SSL_aRSA, |
2882 | SSL_eGOST2814789CNT, | 2882 | SSL_eGOST2814789CNT, |
2883 | SSL_GOST89MAC, | 2883 | SSL_GOST89MAC, |
2884 | SSL_TLSV1, | 2884 | SSL_TLSV1, |
2885 | SSL_NOT_EXP|SSL_HIGH, | 2885 | SSL_NOT_EXP|SSL_HIGH, |
2886 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF|TLS1_STREAM_MAC, | 2886 | SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF|TLS1_STREAM_MAC, |
2887 | 256, | 2887 | 256, |
2888 | 256 | 2888 | 256 |
2889 | }, | 2889 | }, |
2890 | #endif | 2890 | #endif |
2891 | 2891 | ||
2892 | /* end of list */ | 2892 | /* end of list */ |
2893 | }; | 2893 | }; |
2894 | 2894 | ||
2895 | SSL3_ENC_METHOD SSLv3_enc_data={ | 2895 | SSL3_ENC_METHOD SSLv3_enc_data = { |
2896 | ssl3_enc, | 2896 | ssl3_enc, |
2897 | n_ssl3_mac, | 2897 | n_ssl3_mac, |
2898 | ssl3_setup_key_block, | 2898 | ssl3_setup_key_block, |
2899 | ssl3_generate_master_secret, | 2899 | ssl3_generate_master_secret, |
2900 | ssl3_change_cipher_state, | 2900 | ssl3_change_cipher_state, |
2901 | ssl3_final_finish_mac, | 2901 | ssl3_final_finish_mac, |
2902 | MD5_DIGEST_LENGTH+SHA_DIGEST_LENGTH, | 2902 | MD5_DIGEST_LENGTH + SHA_DIGEST_LENGTH, |
2903 | ssl3_cert_verify_mac, | 2903 | ssl3_cert_verify_mac, |
2904 | SSL3_MD_CLIENT_FINISHED_CONST,4, | 2904 | SSL3_MD_CLIENT_FINISHED_CONST, 4, |
2905 | SSL3_MD_SERVER_FINISHED_CONST,4, | 2905 | SSL3_MD_SERVER_FINISHED_CONST, 4, |
2906 | ssl3_alert_code, | 2906 | ssl3_alert_code, |
2907 | (int (*)(SSL *, unsigned char *, size_t, const char *, | 2907 | (int (*)(SSL *, unsigned char *, size_t, const char *, |
2908 | size_t, const unsigned char *, size_t, | 2908 | size_t, const unsigned char *, size_t, |
2909 | int use_context))ssl_undefined_function, | 2909 | int use_context))ssl_undefined_function, |
2910 | }; | 2910 | }; |
2911 | 2911 | ||
2912 | long ssl3_default_timeout(void) | 2912 | long |
2913 | { | 2913 | ssl3_default_timeout(void) |
2914 | { | ||
2914 | /* 2 hours, the 24 hours mentioned in the SSLv3 spec | 2915 | /* 2 hours, the 24 hours mentioned in the SSLv3 spec |
2915 | * is way too long for http, the cache would over fill */ | 2916 | * is way too long for http, the cache would over fill */ |
2916 | return(60*60*2); | 2917 | return (60*60*2); |
2917 | } | 2918 | } |
2918 | 2919 | ||
2919 | int ssl3_num_ciphers(void) | 2920 | int |
2920 | { | 2921 | ssl3_num_ciphers(void) |
2921 | return(SSL3_NUM_CIPHERS); | 2922 | { |
2922 | } | 2923 | return (SSL3_NUM_CIPHERS); |
2923 | 2924 | } | |
2924 | const SSL_CIPHER *ssl3_get_cipher(unsigned int u) | 2925 | |
2925 | { | 2926 | const SSL_CIPHER |
2927 | *ssl3_get_cipher(unsigned int u) | ||
2928 | { | ||
2926 | if (u < SSL3_NUM_CIPHERS) | 2929 | if (u < SSL3_NUM_CIPHERS) |
2927 | return(&(ssl3_ciphers[SSL3_NUM_CIPHERS-1-u])); | 2930 | return (&(ssl3_ciphers[SSL3_NUM_CIPHERS - 1 - u])); |
2928 | else | 2931 | else |
2929 | return(NULL); | 2932 | return (NULL); |
2930 | } | 2933 | } |
2931 | 2934 | ||
2932 | int ssl3_pending(const SSL *s) | 2935 | int |
2933 | { | 2936 | ssl3_pending(const SSL *s) |
2937 | { | ||
2934 | if (s->rstate == SSL_ST_READ_BODY) | 2938 | if (s->rstate == SSL_ST_READ_BODY) |
2935 | return 0; | 2939 | return 0; |
2936 | 2940 | ||
2937 | return (s->s3->rrec.type == SSL3_RT_APPLICATION_DATA) ? s->s3->rrec.length : 0; | 2941 | return (s->s3->rrec.type == SSL3_RT_APPLICATION_DATA) ? s->s3->rrec.length : 0; |
2938 | } | 2942 | } |
2939 | 2943 | ||
2940 | int ssl3_new(SSL *s) | 2944 | int |
2941 | { | 2945 | ssl3_new(SSL *s) |
2946 | { | ||
2942 | SSL3_STATE *s3; | 2947 | SSL3_STATE *s3; |
2943 | 2948 | ||
2944 | if ((s3=OPENSSL_malloc(sizeof *s3)) == NULL) goto err; | 2949 | if ((s3 = OPENSSL_malloc(sizeof *s3)) == NULL) goto err; |
2945 | memset(s3,0,sizeof *s3); | 2950 | memset(s3, 0, sizeof *s3); |
2946 | memset(s3->rrec.seq_num,0,sizeof(s3->rrec.seq_num)); | 2951 | memset(s3->rrec.seq_num, 0, sizeof(s3->rrec.seq_num)); |
2947 | memset(s3->wrec.seq_num,0,sizeof(s3->wrec.seq_num)); | 2952 | memset(s3->wrec.seq_num, 0, sizeof(s3->wrec.seq_num)); |
2948 | 2953 | ||
2949 | s->s3=s3; | 2954 | s->s3 = s3; |
2950 | 2955 | ||
2951 | #ifndef OPENSSL_NO_SRP | 2956 | #ifndef OPENSSL_NO_SRP |
2952 | SSL_SRP_CTX_init(s); | 2957 | SSL_SRP_CTX_init(s); |
2953 | #endif | 2958 | #endif |
2954 | s->method->ssl_clear(s); | 2959 | s->method->ssl_clear(s); |
2955 | return(1); | 2960 | return (1); |
2956 | err: | 2961 | err: |
2957 | return(0); | 2962 | return (0); |
2958 | } | 2963 | } |
2959 | 2964 | ||
2960 | void ssl3_free(SSL *s) | 2965 | void |
2961 | { | 2966 | ssl3_free(SSL *s) |
2962 | if(s == NULL) | 2967 | { |
2963 | return; | 2968 | if (s == NULL) |
2969 | return; | ||
2964 | 2970 | ||
2965 | #ifdef TLSEXT_TYPE_opaque_prf_input | 2971 | #ifdef TLSEXT_TYPE_opaque_prf_input |
2966 | if (s->s3->client_opaque_prf_input != NULL) | 2972 | if (s->s3->client_opaque_prf_input != NULL) |
@@ -2986,22 +2992,24 @@ void ssl3_free(SSL *s) | |||
2986 | #endif | 2992 | #endif |
2987 | 2993 | ||
2988 | if (s->s3->tmp.ca_names != NULL) | 2994 | if (s->s3->tmp.ca_names != NULL) |
2989 | sk_X509_NAME_pop_free(s->s3->tmp.ca_names,X509_NAME_free); | 2995 | sk_X509_NAME_pop_free(s->s3->tmp.ca_names, X509_NAME_free); |
2990 | if (s->s3->handshake_buffer) { | 2996 | if (s->s3->handshake_buffer) { |
2991 | BIO_free(s->s3->handshake_buffer); | 2997 | BIO_free(s->s3->handshake_buffer); |
2992 | } | 2998 | } |
2993 | if (s->s3->handshake_dgst) ssl3_free_digest_list(s); | 2999 | if (s->s3->handshake_dgst) |
3000 | ssl3_free_digest_list(s); | ||
2994 | #ifndef OPENSSL_NO_SRP | 3001 | #ifndef OPENSSL_NO_SRP |
2995 | SSL_SRP_CTX_free(s); | 3002 | SSL_SRP_CTX_free(s); |
2996 | #endif | 3003 | #endif |
2997 | OPENSSL_cleanse(s->s3,sizeof *s->s3); | 3004 | OPENSSL_cleanse(s->s3, sizeof *s->s3); |
2998 | OPENSSL_free(s->s3); | 3005 | OPENSSL_free(s->s3); |
2999 | s->s3=NULL; | 3006 | s->s3 = NULL; |
3000 | } | 3007 | } |
3001 | 3008 | ||
3002 | void ssl3_clear(SSL *s) | 3009 | void |
3003 | { | 3010 | ssl3_clear(SSL *s) |
3004 | unsigned char *rp,*wp; | 3011 | { |
3012 | unsigned char *rp, *wp; | ||
3005 | size_t rlen, wlen; | 3013 | size_t rlen, wlen; |
3006 | int init_extra; | 3014 | int init_extra; |
3007 | 3015 | ||
@@ -3016,26 +3024,23 @@ void ssl3_clear(SSL *s) | |||
3016 | 3024 | ||
3017 | ssl3_cleanup_key_block(s); | 3025 | ssl3_cleanup_key_block(s); |
3018 | if (s->s3->tmp.ca_names != NULL) | 3026 | if (s->s3->tmp.ca_names != NULL) |
3019 | sk_X509_NAME_pop_free(s->s3->tmp.ca_names,X509_NAME_free); | 3027 | sk_X509_NAME_pop_free(s->s3->tmp.ca_names, X509_NAME_free); |
3020 | 3028 | ||
3021 | if (s->s3->rrec.comp != NULL) | 3029 | if (s->s3->rrec.comp != NULL) { |
3022 | { | ||
3023 | OPENSSL_free(s->s3->rrec.comp); | 3030 | OPENSSL_free(s->s3->rrec.comp); |
3024 | s->s3->rrec.comp=NULL; | 3031 | s->s3->rrec.comp = NULL; |
3025 | } | 3032 | } |
3026 | #ifndef OPENSSL_NO_DH | 3033 | #ifndef OPENSSL_NO_DH |
3027 | if (s->s3->tmp.dh != NULL) | 3034 | if (s->s3->tmp.dh != NULL) { |
3028 | { | ||
3029 | DH_free(s->s3->tmp.dh); | 3035 | DH_free(s->s3->tmp.dh); |
3030 | s->s3->tmp.dh = NULL; | 3036 | s->s3->tmp.dh = NULL; |
3031 | } | 3037 | } |
3032 | #endif | 3038 | #endif |
3033 | #ifndef OPENSSL_NO_ECDH | 3039 | #ifndef OPENSSL_NO_ECDH |
3034 | if (s->s3->tmp.ecdh != NULL) | 3040 | if (s->s3->tmp.ecdh != NULL) { |
3035 | { | ||
3036 | EC_KEY_free(s->s3->tmp.ecdh); | 3041 | EC_KEY_free(s->s3->tmp.ecdh); |
3037 | s->s3->tmp.ecdh = NULL; | 3042 | s->s3->tmp.ecdh = NULL; |
3038 | } | 3043 | } |
3039 | #endif | 3044 | #endif |
3040 | #ifndef OPENSSL_NO_TLSEXT | 3045 | #ifndef OPENSSL_NO_TLSEXT |
3041 | #ifndef OPENSSL_NO_EC | 3046 | #ifndef OPENSSL_NO_EC |
@@ -3046,7 +3051,7 @@ void ssl3_clear(SSL *s) | |||
3046 | rp = s->s3->rbuf.buf; | 3051 | rp = s->s3->rbuf.buf; |
3047 | wp = s->s3->wbuf.buf; | 3052 | wp = s->s3->wbuf.buf; |
3048 | rlen = s->s3->rbuf.len; | 3053 | rlen = s->s3->rbuf.len; |
3049 | wlen = s->s3->wbuf.len; | 3054 | wlen = s->s3->wbuf.len; |
3050 | init_extra = s->s3->init_extra; | 3055 | init_extra = s->s3->init_extra; |
3051 | if (s->s3->handshake_buffer) { | 3056 | if (s->s3->handshake_buffer) { |
3052 | BIO_free(s->s3->handshake_buffer); | 3057 | BIO_free(s->s3->handshake_buffer); |
@@ -3054,104 +3059,100 @@ void ssl3_clear(SSL *s) | |||
3054 | } | 3059 | } |
3055 | if (s->s3->handshake_dgst) { | 3060 | if (s->s3->handshake_dgst) { |
3056 | ssl3_free_digest_list(s); | 3061 | ssl3_free_digest_list(s); |
3057 | } | 3062 | } |
3058 | memset(s->s3,0,sizeof *s->s3); | 3063 | memset(s->s3, 0, sizeof *s->s3); |
3059 | s->s3->rbuf.buf = rp; | 3064 | s->s3->rbuf.buf = rp; |
3060 | s->s3->wbuf.buf = wp; | 3065 | s->s3->wbuf.buf = wp; |
3061 | s->s3->rbuf.len = rlen; | 3066 | s->s3->rbuf.len = rlen; |
3062 | s->s3->wbuf.len = wlen; | 3067 | s->s3->wbuf.len = wlen; |
3063 | s->s3->init_extra = init_extra; | 3068 | s->s3->init_extra = init_extra; |
3064 | 3069 | ||
3065 | ssl_free_wbio_buffer(s); | 3070 | ssl_free_wbio_buffer(s); |
3066 | 3071 | ||
3067 | s->packet_length=0; | 3072 | s->packet_length = 0; |
3068 | s->s3->renegotiate=0; | 3073 | s->s3->renegotiate = 0; |
3069 | s->s3->total_renegotiations=0; | 3074 | s->s3->total_renegotiations = 0; |
3070 | s->s3->num_renegotiations=0; | 3075 | s->s3->num_renegotiations = 0; |
3071 | s->s3->in_read_app_data=0; | 3076 | s->s3->in_read_app_data = 0; |
3072 | s->version=SSL3_VERSION; | 3077 | s->version = SSL3_VERSION; |
3073 | 3078 | ||
3074 | #if !defined(OPENSSL_NO_TLSEXT) && !defined(OPENSSL_NO_NEXTPROTONEG) | 3079 | #if !defined(OPENSSL_NO_TLSEXT) && !defined(OPENSSL_NO_NEXTPROTONEG) |
3075 | if (s->next_proto_negotiated) | 3080 | if (s->next_proto_negotiated) { |
3076 | { | ||
3077 | OPENSSL_free(s->next_proto_negotiated); | 3081 | OPENSSL_free(s->next_proto_negotiated); |
3078 | s->next_proto_negotiated = NULL; | 3082 | s->next_proto_negotiated = NULL; |
3079 | s->next_proto_negotiated_len = 0; | 3083 | s->next_proto_negotiated_len = 0; |
3080 | } | ||
3081 | #endif | ||
3082 | } | 3084 | } |
3085 | #endif | ||
3086 | } | ||
3083 | 3087 | ||
3084 | #ifndef OPENSSL_NO_SRP | 3088 | #ifndef OPENSSL_NO_SRP |
3085 | static char * srp_password_from_info_cb(SSL *s, void *arg) | 3089 | static char * |
3086 | { | 3090 | srp_password_from_info_cb(SSL *s, void *arg) |
3087 | return BUF_strdup(s->srp_ctx.info) ; | 3091 | { |
3088 | } | 3092 | return BUF_strdup(s->srp_ctx.info); |
3093 | } | ||
3089 | #endif | 3094 | #endif |
3090 | 3095 | ||
3091 | long ssl3_ctrl(SSL *s, int cmd, long larg, void *parg) | 3096 | long |
3092 | { | 3097 | ssl3_ctrl(SSL *s, int cmd, long larg, void *parg) |
3093 | int ret=0; | 3098 | { |
3099 | int ret = 0; | ||
3094 | 3100 | ||
3095 | #if !defined(OPENSSL_NO_DSA) || !defined(OPENSSL_NO_RSA) | 3101 | #if !defined(OPENSSL_NO_DSA) || !defined(OPENSSL_NO_RSA) |
3096 | if ( | 3102 | if ( |
3097 | #ifndef OPENSSL_NO_RSA | 3103 | #ifndef OPENSSL_NO_RSA |
3098 | cmd == SSL_CTRL_SET_TMP_RSA || | 3104 | cmd == SSL_CTRL_SET_TMP_RSA || |
3099 | cmd == SSL_CTRL_SET_TMP_RSA_CB || | 3105 | cmd == SSL_CTRL_SET_TMP_RSA_CB || |
3100 | #endif | 3106 | #endif |
3101 | #ifndef OPENSSL_NO_DSA | 3107 | #ifndef OPENSSL_NO_DSA |
3102 | cmd == SSL_CTRL_SET_TMP_DH || | 3108 | cmd == SSL_CTRL_SET_TMP_DH || |
3103 | cmd == SSL_CTRL_SET_TMP_DH_CB || | 3109 | cmd == SSL_CTRL_SET_TMP_DH_CB || |
3104 | #endif | 3110 | #endif |
3105 | 0) | 3111 | 0) { |
3106 | { | 3112 | if (!ssl_cert_inst(&s->cert)) { |
3107 | if (!ssl_cert_inst(&s->cert)) | ||
3108 | { | ||
3109 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_MALLOC_FAILURE); | 3113 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_MALLOC_FAILURE); |
3110 | return(0); | 3114 | return (0); |
3111 | } | ||
3112 | } | 3115 | } |
3116 | } | ||
3113 | #endif | 3117 | #endif |
3114 | 3118 | ||
3115 | switch (cmd) | 3119 | switch (cmd) { |
3116 | { | ||
3117 | case SSL_CTRL_GET_SESSION_REUSED: | 3120 | case SSL_CTRL_GET_SESSION_REUSED: |
3118 | ret=s->hit; | 3121 | ret = s->hit; |
3119 | break; | 3122 | break; |
3120 | case SSL_CTRL_GET_CLIENT_CERT_REQUEST: | 3123 | case SSL_CTRL_GET_CLIENT_CERT_REQUEST: |
3121 | break; | 3124 | break; |
3122 | case SSL_CTRL_GET_NUM_RENEGOTIATIONS: | 3125 | case SSL_CTRL_GET_NUM_RENEGOTIATIONS: |
3123 | ret=s->s3->num_renegotiations; | 3126 | ret = s->s3->num_renegotiations; |
3124 | break; | 3127 | break; |
3125 | case SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS: | 3128 | case SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS: |
3126 | ret=s->s3->num_renegotiations; | 3129 | ret = s->s3->num_renegotiations; |
3127 | s->s3->num_renegotiations=0; | 3130 | s->s3->num_renegotiations = 0; |
3128 | break; | 3131 | break; |
3129 | case SSL_CTRL_GET_TOTAL_RENEGOTIATIONS: | 3132 | case SSL_CTRL_GET_TOTAL_RENEGOTIATIONS: |
3130 | ret=s->s3->total_renegotiations; | 3133 | ret = s->s3->total_renegotiations; |
3131 | break; | 3134 | break; |
3132 | case SSL_CTRL_GET_FLAGS: | 3135 | case SSL_CTRL_GET_FLAGS: |
3133 | ret=(int)(s->s3->flags); | 3136 | ret = (int)(s->s3->flags); |
3134 | break; | 3137 | break; |
3135 | #ifndef OPENSSL_NO_RSA | 3138 | #ifndef OPENSSL_NO_RSA |
3136 | case SSL_CTRL_NEED_TMP_RSA: | 3139 | case SSL_CTRL_NEED_TMP_RSA: |
3137 | if ((s->cert != NULL) && (s->cert->rsa_tmp == NULL) && | 3140 | if ((s->cert != NULL) && (s->cert->rsa_tmp == NULL) && |
3138 | ((s->cert->pkeys[SSL_PKEY_RSA_ENC].privatekey == NULL) || | 3141 | ((s->cert->pkeys[SSL_PKEY_RSA_ENC].privatekey == NULL) || |
3139 | (EVP_PKEY_size(s->cert->pkeys[SSL_PKEY_RSA_ENC].privatekey) > (512/8)))) | 3142 | (EVP_PKEY_size(s->cert->pkeys[SSL_PKEY_RSA_ENC].privatekey) > (512 / 8)))) |
3140 | ret = 1; | 3143 | ret = 1; |
3141 | break; | 3144 | break; |
3142 | case SSL_CTRL_SET_TMP_RSA: | 3145 | case SSL_CTRL_SET_TMP_RSA: |
3143 | { | 3146 | { |
3144 | RSA *rsa = (RSA *)parg; | 3147 | RSA *rsa = (RSA *)parg; |
3145 | if (rsa == NULL) | 3148 | if (rsa == NULL) { |
3146 | { | ||
3147 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_PASSED_NULL_PARAMETER); | 3149 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_PASSED_NULL_PARAMETER); |
3148 | return(ret); | 3150 | return (ret); |
3149 | } | 3151 | } |
3150 | if ((rsa = RSAPrivateKey_dup(rsa)) == NULL) | 3152 | if ((rsa = RSAPrivateKey_dup(rsa)) == NULL) { |
3151 | { | ||
3152 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_RSA_LIB); | 3153 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_RSA_LIB); |
3153 | return(ret); | 3154 | return (ret); |
3154 | } | 3155 | } |
3155 | if (s->cert->rsa_tmp != NULL) | 3156 | if (s->cert->rsa_tmp != NULL) |
3156 | RSA_free(s->cert->rsa_tmp); | 3157 | RSA_free(s->cert->rsa_tmp); |
3157 | s->cert->rsa_tmp = rsa; | 3158 | s->cert->rsa_tmp = rsa; |
@@ -3160,8 +3161,8 @@ long ssl3_ctrl(SSL *s, int cmd, long larg, void *parg) | |||
3160 | break; | 3161 | break; |
3161 | case SSL_CTRL_SET_TMP_RSA_CB: | 3162 | case SSL_CTRL_SET_TMP_RSA_CB: |
3162 | { | 3163 | { |
3163 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); | 3164 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); |
3164 | return(ret); | 3165 | return (ret); |
3165 | } | 3166 | } |
3166 | break; | 3167 | break; |
3167 | #endif | 3168 | #endif |
@@ -3169,25 +3170,21 @@ long ssl3_ctrl(SSL *s, int cmd, long larg, void *parg) | |||
3169 | case SSL_CTRL_SET_TMP_DH: | 3170 | case SSL_CTRL_SET_TMP_DH: |
3170 | { | 3171 | { |
3171 | DH *dh = (DH *)parg; | 3172 | DH *dh = (DH *)parg; |
3172 | if (dh == NULL) | 3173 | if (dh == NULL) { |
3173 | { | ||
3174 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_PASSED_NULL_PARAMETER); | 3174 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_PASSED_NULL_PARAMETER); |
3175 | return(ret); | 3175 | return (ret); |
3176 | } | 3176 | } |
3177 | if ((dh = DHparams_dup(dh)) == NULL) | 3177 | if ((dh = DHparams_dup(dh)) == NULL) { |
3178 | { | ||
3179 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_DH_LIB); | 3178 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_DH_LIB); |
3180 | return(ret); | 3179 | return (ret); |
3181 | } | 3180 | } |
3182 | if (!(s->options & SSL_OP_SINGLE_DH_USE)) | 3181 | if (!(s->options & SSL_OP_SINGLE_DH_USE)) { |
3183 | { | 3182 | if (!DH_generate_key(dh)) { |
3184 | if (!DH_generate_key(dh)) | ||
3185 | { | ||
3186 | DH_free(dh); | 3183 | DH_free(dh); |
3187 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_DH_LIB); | 3184 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_DH_LIB); |
3188 | return(ret); | 3185 | return (ret); |
3189 | } | ||
3190 | } | 3186 | } |
3187 | } | ||
3191 | if (s->cert->dh_tmp != NULL) | 3188 | if (s->cert->dh_tmp != NULL) |
3192 | DH_free(s->cert->dh_tmp); | 3189 | DH_free(s->cert->dh_tmp); |
3193 | s->cert->dh_tmp = dh; | 3190 | s->cert->dh_tmp = dh; |
@@ -3196,79 +3193,70 @@ long ssl3_ctrl(SSL *s, int cmd, long larg, void *parg) | |||
3196 | break; | 3193 | break; |
3197 | case SSL_CTRL_SET_TMP_DH_CB: | 3194 | case SSL_CTRL_SET_TMP_DH_CB: |
3198 | { | 3195 | { |
3199 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); | 3196 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); |
3200 | return(ret); | 3197 | return (ret); |
3201 | } | 3198 | } |
3202 | break; | 3199 | break; |
3203 | #endif | 3200 | #endif |
3204 | #ifndef OPENSSL_NO_ECDH | 3201 | #ifndef OPENSSL_NO_ECDH |
3205 | case SSL_CTRL_SET_TMP_ECDH: | 3202 | case SSL_CTRL_SET_TMP_ECDH: |
3206 | { | 3203 | { |
3207 | EC_KEY *ecdh = NULL; | 3204 | EC_KEY *ecdh = NULL; |
3208 | 3205 | ||
3209 | if (parg == NULL) | 3206 | if (parg == NULL) { |
3210 | { | 3207 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_PASSED_NULL_PARAMETER); |
3211 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_PASSED_NULL_PARAMETER); | 3208 | return (ret); |
3212 | return(ret); | ||
3213 | } | 3209 | } |
3214 | if (!EC_KEY_up_ref((EC_KEY *)parg)) | 3210 | if (!EC_KEY_up_ref((EC_KEY *)parg)) { |
3215 | { | 3211 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_ECDH_LIB); |
3216 | SSLerr(SSL_F_SSL3_CTRL,ERR_R_ECDH_LIB); | 3212 | return (ret); |
3217 | return(ret); | ||
3218 | } | 3213 | } |
3219 | ecdh = (EC_KEY *)parg; | 3214 | ecdh = (EC_KEY *)parg; |
3220 | if (!(s->options & SSL_OP_SINGLE_ECDH_USE)) | 3215 | if (!(s->options & SSL_OP_SINGLE_ECDH_USE)) { |
3221 | { | 3216 | if (!EC_KEY_generate_key(ecdh)) { |
3222 | if (!EC_KEY_generate_key(ecdh)) | 3217 | EC_KEY_free(ecdh); |
3223 | { | 3218 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_ECDH_LIB); |
3224 | EC_KEY_free(ecdh); | 3219 | return (ret); |
3225 | SSLerr(SSL_F_SSL3_CTRL,ERR_R_ECDH_LIB); | ||
3226 | return(ret); | ||
3227 | } | 3220 | } |
3228 | } | 3221 | } |
3229 | if (s->cert->ecdh_tmp != NULL) | 3222 | if (s->cert->ecdh_tmp != NULL) |
3230 | EC_KEY_free(s->cert->ecdh_tmp); | 3223 | EC_KEY_free(s->cert->ecdh_tmp); |
3231 | s->cert->ecdh_tmp = ecdh; | 3224 | s->cert->ecdh_tmp = ecdh; |
3232 | ret = 1; | 3225 | ret = 1; |
3233 | } | 3226 | } |
3234 | break; | 3227 | break; |
3235 | case SSL_CTRL_SET_TMP_ECDH_CB: | 3228 | case SSL_CTRL_SET_TMP_ECDH_CB: |
3236 | { | 3229 | { |
3237 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); | 3230 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); |
3238 | return(ret); | 3231 | return (ret); |
3239 | } | 3232 | } |
3240 | break; | 3233 | break; |
3241 | #endif /* !OPENSSL_NO_ECDH */ | 3234 | #endif /* !OPENSSL_NO_ECDH */ |
3242 | #ifndef OPENSSL_NO_TLSEXT | 3235 | #ifndef OPENSSL_NO_TLSEXT |
3243 | case SSL_CTRL_SET_TLSEXT_HOSTNAME: | 3236 | case SSL_CTRL_SET_TLSEXT_HOSTNAME: |
3244 | if (larg == TLSEXT_NAMETYPE_host_name) | 3237 | if (larg == TLSEXT_NAMETYPE_host_name) { |
3245 | { | 3238 | if (s->tlsext_hostname != NULL) |
3246 | if (s->tlsext_hostname != NULL) | ||
3247 | OPENSSL_free(s->tlsext_hostname); | 3239 | OPENSSL_free(s->tlsext_hostname); |
3248 | s->tlsext_hostname = NULL; | 3240 | s->tlsext_hostname = NULL; |
3249 | 3241 | ||
3250 | ret = 1; | 3242 | ret = 1; |
3251 | if (parg == NULL) | 3243 | if (parg == NULL) |
3252 | break; | 3244 | break; |
3253 | if (strlen((char *)parg) > TLSEXT_MAXLEN_host_name) | 3245 | if (strlen((char *)parg) > TLSEXT_MAXLEN_host_name) { |
3254 | { | ||
3255 | SSLerr(SSL_F_SSL3_CTRL, SSL_R_SSL3_EXT_INVALID_SERVERNAME); | 3246 | SSLerr(SSL_F_SSL3_CTRL, SSL_R_SSL3_EXT_INVALID_SERVERNAME); |
3256 | return 0; | 3247 | return 0; |
3257 | } | 3248 | } |
3258 | if ((s->tlsext_hostname = BUF_strdup((char *)parg)) == NULL) | 3249 | if ((s->tlsext_hostname = BUF_strdup((char *)parg)) == NULL) { |
3259 | { | ||
3260 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_INTERNAL_ERROR); | 3250 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_INTERNAL_ERROR); |
3261 | return 0; | 3251 | return 0; |
3262 | } | ||
3263 | } | 3252 | } |
3264 | else | 3253 | } else { |
3265 | { | ||
3266 | SSLerr(SSL_F_SSL3_CTRL, SSL_R_SSL3_EXT_INVALID_SERVERNAME_TYPE); | 3254 | SSLerr(SSL_F_SSL3_CTRL, SSL_R_SSL3_EXT_INVALID_SERVERNAME_TYPE); |
3267 | return 0; | 3255 | return 0; |
3268 | } | 3256 | } |
3269 | break; | 3257 | break; |
3270 | case SSL_CTRL_SET_TLSEXT_DEBUG_ARG: | 3258 | case SSL_CTRL_SET_TLSEXT_DEBUG_ARG: |
3271 | s->tlsext_debug_arg=parg; | 3259 | s->tlsext_debug_arg = parg; |
3272 | ret = 1; | 3260 | ret = 1; |
3273 | break; | 3261 | break; |
3274 | 3262 | ||
@@ -3276,28 +3264,26 @@ long ssl3_ctrl(SSL *s, int cmd, long larg, void *parg) | |||
3276 | case SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT: | 3264 | case SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT: |
3277 | if (larg > 12288) /* actual internal limit is 2^16 for the complete hello message | 3265 | if (larg > 12288) /* actual internal limit is 2^16 for the complete hello message |
3278 | * (including the cert chain and everything) */ | 3266 | * (including the cert chain and everything) */ |
3279 | { | 3267 | { |
3280 | SSLerr(SSL_F_SSL3_CTRL, SSL_R_OPAQUE_PRF_INPUT_TOO_LONG); | 3268 | SSLerr(SSL_F_SSL3_CTRL, SSL_R_OPAQUE_PRF_INPUT_TOO_LONG); |
3281 | break; | 3269 | break; |
3282 | } | 3270 | } |
3283 | if (s->tlsext_opaque_prf_input != NULL) | 3271 | if (s->tlsext_opaque_prf_input != NULL) |
3284 | OPENSSL_free(s->tlsext_opaque_prf_input); | 3272 | OPENSSL_free(s->tlsext_opaque_prf_input); |
3285 | if ((size_t)larg == 0) | 3273 | if ((size_t)larg == 0) |
3286 | s->tlsext_opaque_prf_input = OPENSSL_malloc(1); /* dummy byte just to get non-NULL */ | 3274 | s->tlsext_opaque_prf_input = OPENSSL_malloc(1); /* dummy byte just to get non-NULL */ |
3287 | else | 3275 | else |
3288 | s->tlsext_opaque_prf_input = BUF_memdup(parg, (size_t)larg); | 3276 | s->tlsext_opaque_prf_input = BUF_memdup(parg, (size_t)larg); |
3289 | if (s->tlsext_opaque_prf_input != NULL) | 3277 | if (s->tlsext_opaque_prf_input != NULL) { |
3290 | { | ||
3291 | s->tlsext_opaque_prf_input_len = (size_t)larg; | 3278 | s->tlsext_opaque_prf_input_len = (size_t)larg; |
3292 | ret = 1; | 3279 | ret = 1; |
3293 | } | 3280 | } else |
3294 | else | ||
3295 | s->tlsext_opaque_prf_input_len = 0; | 3281 | s->tlsext_opaque_prf_input_len = 0; |
3296 | break; | 3282 | break; |
3297 | #endif | 3283 | #endif |
3298 | 3284 | ||
3299 | case SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE: | 3285 | case SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE: |
3300 | s->tlsext_status_type=larg; | 3286 | s->tlsext_status_type = larg; |
3301 | ret = 1; | 3287 | ret = 1; |
3302 | break; | 3288 | break; |
3303 | 3289 | ||
@@ -3324,7 +3310,7 @@ long ssl3_ctrl(SSL *s, int cmd, long larg, void *parg) | |||
3324 | case SSL_CTRL_GET_TLSEXT_STATUS_REQ_OCSP_RESP: | 3310 | case SSL_CTRL_GET_TLSEXT_STATUS_REQ_OCSP_RESP: |
3325 | *(unsigned char **)parg = s->tlsext_ocsp_resp; | 3311 | *(unsigned char **)parg = s->tlsext_ocsp_resp; |
3326 | return s->tlsext_ocsp_resplen; | 3312 | return s->tlsext_ocsp_resplen; |
3327 | 3313 | ||
3328 | case SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP: | 3314 | case SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP: |
3329 | if (s->tlsext_ocsp_resp) | 3315 | if (s->tlsext_ocsp_resp) |
3330 | OPENSSL_free(s->tlsext_ocsp_resp); | 3316 | OPENSSL_free(s->tlsext_ocsp_resp); |
@@ -3357,222 +3343,204 @@ long ssl3_ctrl(SSL *s, int cmd, long larg, void *parg) | |||
3357 | #endif /* !OPENSSL_NO_TLSEXT */ | 3343 | #endif /* !OPENSSL_NO_TLSEXT */ |
3358 | default: | 3344 | default: |
3359 | break; | 3345 | break; |
3360 | } | ||
3361 | return(ret); | ||
3362 | } | 3346 | } |
3347 | return (ret); | ||
3348 | } | ||
3363 | 3349 | ||
3364 | long ssl3_callback_ctrl(SSL *s, int cmd, void (*fp)(void)) | 3350 | long |
3365 | { | 3351 | ssl3_callback_ctrl(SSL *s, int cmd, void (*fp)(void)) |
3366 | int ret=0; | 3352 | { |
3353 | int ret = 0; | ||
3367 | 3354 | ||
3368 | #if !defined(OPENSSL_NO_DSA) || !defined(OPENSSL_NO_RSA) | 3355 | #if !defined(OPENSSL_NO_DSA) || !defined(OPENSSL_NO_RSA) |
3369 | if ( | 3356 | if ( |
3370 | #ifndef OPENSSL_NO_RSA | 3357 | #ifndef OPENSSL_NO_RSA |
3371 | cmd == SSL_CTRL_SET_TMP_RSA_CB || | 3358 | cmd == SSL_CTRL_SET_TMP_RSA_CB || |
3372 | #endif | 3359 | #endif |
3373 | #ifndef OPENSSL_NO_DSA | 3360 | #ifndef OPENSSL_NO_DSA |
3374 | cmd == SSL_CTRL_SET_TMP_DH_CB || | 3361 | cmd == SSL_CTRL_SET_TMP_DH_CB || |
3375 | #endif | 3362 | #endif |
3376 | 0) | 3363 | 0) { |
3377 | { | 3364 | if (!ssl_cert_inst(&s->cert)) { |
3378 | if (!ssl_cert_inst(&s->cert)) | ||
3379 | { | ||
3380 | SSLerr(SSL_F_SSL3_CALLBACK_CTRL, ERR_R_MALLOC_FAILURE); | 3365 | SSLerr(SSL_F_SSL3_CALLBACK_CTRL, ERR_R_MALLOC_FAILURE); |
3381 | return(0); | 3366 | return (0); |
3382 | } | ||
3383 | } | 3367 | } |
3368 | } | ||
3384 | #endif | 3369 | #endif |
3385 | 3370 | ||
3386 | switch (cmd) | 3371 | switch (cmd) { |
3387 | { | ||
3388 | #ifndef OPENSSL_NO_RSA | 3372 | #ifndef OPENSSL_NO_RSA |
3389 | case SSL_CTRL_SET_TMP_RSA_CB: | 3373 | case SSL_CTRL_SET_TMP_RSA_CB: |
3390 | { | 3374 | { |
3391 | s->cert->rsa_tmp_cb = (RSA *(*)(SSL *, int, int))fp; | 3375 | s->cert->rsa_tmp_cb = (RSA *(*)(SSL *, int, int))fp; |
3392 | } | 3376 | } |
3393 | break; | 3377 | break; |
3394 | #endif | 3378 | #endif |
3395 | #ifndef OPENSSL_NO_DH | 3379 | #ifndef OPENSSL_NO_DH |
3396 | case SSL_CTRL_SET_TMP_DH_CB: | 3380 | case SSL_CTRL_SET_TMP_DH_CB: |
3397 | { | 3381 | { |
3398 | s->cert->dh_tmp_cb = (DH *(*)(SSL *, int, int))fp; | 3382 | s->cert->dh_tmp_cb = (DH *(*)(SSL *, int, int))fp; |
3399 | } | 3383 | } |
3400 | break; | 3384 | break; |
3401 | #endif | 3385 | #endif |
3402 | #ifndef OPENSSL_NO_ECDH | 3386 | #ifndef OPENSSL_NO_ECDH |
3403 | case SSL_CTRL_SET_TMP_ECDH_CB: | 3387 | case SSL_CTRL_SET_TMP_ECDH_CB: |
3404 | { | 3388 | { |
3405 | s->cert->ecdh_tmp_cb = (EC_KEY *(*)(SSL *, int, int))fp; | 3389 | s->cert->ecdh_tmp_cb = (EC_KEY *(*)(SSL *, int, int))fp; |
3406 | } | 3390 | } |
3407 | break; | 3391 | break; |
3408 | #endif | 3392 | #endif |
3409 | #ifndef OPENSSL_NO_TLSEXT | 3393 | #ifndef OPENSSL_NO_TLSEXT |
3410 | case SSL_CTRL_SET_TLSEXT_DEBUG_CB: | 3394 | case SSL_CTRL_SET_TLSEXT_DEBUG_CB: |
3411 | s->tlsext_debug_cb=(void (*)(SSL *,int ,int, | 3395 | s->tlsext_debug_cb = (void (*)(SSL *, int , int, |
3412 | unsigned char *, int, void *))fp; | 3396 | unsigned char *, int, void *))fp; |
3413 | break; | 3397 | break; |
3414 | #endif | 3398 | #endif |
3415 | default: | 3399 | default: |
3416 | break; | 3400 | break; |
3417 | } | ||
3418 | return(ret); | ||
3419 | } | 3401 | } |
3402 | return (ret); | ||
3403 | } | ||
3420 | 3404 | ||
3421 | long ssl3_ctx_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg) | 3405 | long |
3422 | { | 3406 | ssl3_ctx_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg) |
3407 | { | ||
3423 | CERT *cert; | 3408 | CERT *cert; |
3424 | 3409 | ||
3425 | cert=ctx->cert; | 3410 | cert = ctx->cert; |
3426 | 3411 | ||
3427 | switch (cmd) | 3412 | switch (cmd) { |
3428 | { | ||
3429 | #ifndef OPENSSL_NO_RSA | 3413 | #ifndef OPENSSL_NO_RSA |
3430 | case SSL_CTRL_NEED_TMP_RSA: | 3414 | case SSL_CTRL_NEED_TMP_RSA: |
3431 | if ( (cert->rsa_tmp == NULL) && | 3415 | if ((cert->rsa_tmp == NULL) && |
3432 | ((cert->pkeys[SSL_PKEY_RSA_ENC].privatekey == NULL) || | 3416 | ((cert->pkeys[SSL_PKEY_RSA_ENC].privatekey == NULL) || |
3433 | (EVP_PKEY_size(cert->pkeys[SSL_PKEY_RSA_ENC].privatekey) > (512/8))) | 3417 | (EVP_PKEY_size(cert->pkeys[SSL_PKEY_RSA_ENC].privatekey) > (512 / 8))) |
3434 | ) | 3418 | ) |
3435 | return(1); | 3419 | return (1); |
3436 | else | 3420 | else |
3437 | return(0); | 3421 | return (0); |
3438 | /* break; */ | 3422 | /* break; */ |
3439 | case SSL_CTRL_SET_TMP_RSA: | 3423 | case SSL_CTRL_SET_TMP_RSA: |
3440 | { | 3424 | { |
3441 | RSA *rsa; | 3425 | RSA *rsa; |
3442 | int i; | 3426 | int i; |
3443 | 3427 | ||
3444 | rsa=(RSA *)parg; | 3428 | rsa = (RSA *)parg; |
3445 | i=1; | 3429 | i = 1; |
3446 | if (rsa == NULL) | 3430 | if (rsa == NULL) |
3447 | i=0; | 3431 | i = 0; |
3448 | else | 3432 | else { |
3449 | { | 3433 | if ((rsa = RSAPrivateKey_dup(rsa)) == NULL) |
3450 | if ((rsa=RSAPrivateKey_dup(rsa)) == NULL) | 3434 | i = 0; |
3451 | i=0; | ||
3452 | } | 3435 | } |
3453 | if (!i) | 3436 | if (!i) { |
3454 | { | 3437 | SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_RSA_LIB); |
3455 | SSLerr(SSL_F_SSL3_CTX_CTRL,ERR_R_RSA_LIB); | 3438 | return (0); |
3456 | return(0); | 3439 | } else { |
3457 | } | 3440 | if (cert->rsa_tmp != NULL) |
3458 | else | 3441 | RSA_free(cert->rsa_tmp); |
3459 | { | 3442 | cert->rsa_tmp = rsa; |
3460 | if (cert->rsa_tmp != NULL) | 3443 | return (1); |
3461 | RSA_free(cert->rsa_tmp); | ||
3462 | cert->rsa_tmp=rsa; | ||
3463 | return(1); | ||
3464 | } | 3444 | } |
3465 | } | 3445 | } |
3466 | /* break; */ | 3446 | /* break; */ |
3467 | case SSL_CTRL_SET_TMP_RSA_CB: | 3447 | case SSL_CTRL_SET_TMP_RSA_CB: |
3468 | { | 3448 | { |
3469 | SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); | 3449 | SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); |
3470 | return(0); | 3450 | return (0); |
3471 | } | 3451 | } |
3472 | break; | 3452 | break; |
3473 | #endif | 3453 | #endif |
3474 | #ifndef OPENSSL_NO_DH | 3454 | #ifndef OPENSSL_NO_DH |
3475 | case SSL_CTRL_SET_TMP_DH: | 3455 | case SSL_CTRL_SET_TMP_DH: |
3476 | { | 3456 | { |
3477 | DH *new=NULL,*dh; | 3457 | DH *new = NULL, *dh; |
3478 | 3458 | ||
3479 | dh=(DH *)parg; | 3459 | dh = (DH *)parg; |
3480 | if ((new=DHparams_dup(dh)) == NULL) | 3460 | if ((new = DHparams_dup(dh)) == NULL) { |
3481 | { | 3461 | SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_DH_LIB); |
3482 | SSLerr(SSL_F_SSL3_CTX_CTRL,ERR_R_DH_LIB); | ||
3483 | return 0; | ||
3484 | } | ||
3485 | if (!(ctx->options & SSL_OP_SINGLE_DH_USE)) | ||
3486 | { | ||
3487 | if (!DH_generate_key(new)) | ||
3488 | { | ||
3489 | SSLerr(SSL_F_SSL3_CTX_CTRL,ERR_R_DH_LIB); | ||
3490 | DH_free(new); | ||
3491 | return 0; | 3462 | return 0; |
3463 | } | ||
3464 | if (!(ctx->options & SSL_OP_SINGLE_DH_USE)) { | ||
3465 | if (!DH_generate_key(new)) { | ||
3466 | SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_DH_LIB); | ||
3467 | DH_free(new); | ||
3468 | return 0; | ||
3492 | } | 3469 | } |
3493 | } | 3470 | } |
3494 | if (cert->dh_tmp != NULL) | 3471 | if (cert->dh_tmp != NULL) |
3495 | DH_free(cert->dh_tmp); | 3472 | DH_free(cert->dh_tmp); |
3496 | cert->dh_tmp=new; | 3473 | cert->dh_tmp = new; |
3497 | return 1; | 3474 | return 1; |
3498 | } | 3475 | } |
3499 | /*break; */ | 3476 | /*break; */ |
3500 | case SSL_CTRL_SET_TMP_DH_CB: | 3477 | case SSL_CTRL_SET_TMP_DH_CB: |
3501 | { | 3478 | { |
3502 | SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); | 3479 | SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); |
3503 | return(0); | 3480 | return (0); |
3504 | } | 3481 | } |
3505 | break; | 3482 | break; |
3506 | #endif | 3483 | #endif |
3507 | #ifndef OPENSSL_NO_ECDH | 3484 | #ifndef OPENSSL_NO_ECDH |
3508 | case SSL_CTRL_SET_TMP_ECDH: | 3485 | case SSL_CTRL_SET_TMP_ECDH: |
3509 | { | 3486 | { |
3510 | EC_KEY *ecdh = NULL; | 3487 | EC_KEY *ecdh = NULL; |
3511 | 3488 | ||
3512 | if (parg == NULL) | 3489 | if (parg == NULL) { |
3513 | { | 3490 | SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_ECDH_LIB); |
3514 | SSLerr(SSL_F_SSL3_CTX_CTRL,ERR_R_ECDH_LIB); | 3491 | return 0; |
3515 | return 0; | ||
3516 | } | ||
3517 | ecdh = EC_KEY_dup((EC_KEY *)parg); | ||
3518 | if (ecdh == NULL) | ||
3519 | { | ||
3520 | SSLerr(SSL_F_SSL3_CTX_CTRL,ERR_R_EC_LIB); | ||
3521 | return 0; | ||
3522 | } | 3492 | } |
3523 | if (!(ctx->options & SSL_OP_SINGLE_ECDH_USE)) | 3493 | ecdh = EC_KEY_dup((EC_KEY *)parg); |
3524 | { | 3494 | if (ecdh == NULL) { |
3525 | if (!EC_KEY_generate_key(ecdh)) | 3495 | SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_EC_LIB); |
3526 | { | ||
3527 | EC_KEY_free(ecdh); | ||
3528 | SSLerr(SSL_F_SSL3_CTX_CTRL,ERR_R_ECDH_LIB); | ||
3529 | return 0; | 3496 | return 0; |
3497 | } | ||
3498 | if (!(ctx->options & SSL_OP_SINGLE_ECDH_USE)) { | ||
3499 | if (!EC_KEY_generate_key(ecdh)) { | ||
3500 | EC_KEY_free(ecdh); | ||
3501 | SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_ECDH_LIB); | ||
3502 | return 0; | ||
3530 | } | 3503 | } |
3531 | } | 3504 | } |
3532 | 3505 | ||
3533 | if (cert->ecdh_tmp != NULL) | 3506 | if (cert->ecdh_tmp != NULL) { |
3534 | { | 3507 | EC_KEY_free(cert->ecdh_tmp); |
3535 | EC_KEY_free(cert->ecdh_tmp); | ||
3536 | } | 3508 | } |
3537 | cert->ecdh_tmp = ecdh; | 3509 | cert->ecdh_tmp = ecdh; |
3538 | return 1; | 3510 | return 1; |
3539 | } | 3511 | } |
3540 | /* break; */ | 3512 | /* break; */ |
3541 | case SSL_CTRL_SET_TMP_ECDH_CB: | 3513 | case SSL_CTRL_SET_TMP_ECDH_CB: |
3542 | { | 3514 | { |
3543 | SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); | 3515 | SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); |
3544 | return(0); | 3516 | return (0); |
3545 | } | 3517 | } |
3546 | break; | 3518 | break; |
3547 | #endif /* !OPENSSL_NO_ECDH */ | 3519 | #endif /* !OPENSSL_NO_ECDH */ |
3548 | #ifndef OPENSSL_NO_TLSEXT | 3520 | #ifndef OPENSSL_NO_TLSEXT |
3549 | case SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG: | 3521 | case SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG: |
3550 | ctx->tlsext_servername_arg=parg; | 3522 | ctx->tlsext_servername_arg = parg; |
3551 | break; | 3523 | break; |
3552 | case SSL_CTRL_SET_TLSEXT_TICKET_KEYS: | 3524 | case SSL_CTRL_SET_TLSEXT_TICKET_KEYS: |
3553 | case SSL_CTRL_GET_TLSEXT_TICKET_KEYS: | 3525 | case SSL_CTRL_GET_TLSEXT_TICKET_KEYS: |
3554 | { | 3526 | { |
3555 | unsigned char *keys = parg; | 3527 | unsigned char *keys = parg; |
3556 | if (!keys) | 3528 | if (!keys) |
3557 | return 48; | 3529 | return 48; |
3558 | if (larg != 48) | 3530 | if (larg != 48) { |
3559 | { | 3531 | SSLerr(SSL_F_SSL3_CTX_CTRL, SSL_R_INVALID_TICKET_KEYS_LENGTH); |
3560 | SSLerr(SSL_F_SSL3_CTX_CTRL, SSL_R_INVALID_TICKET_KEYS_LENGTH); | 3532 | return 0; |
3561 | return 0; | ||
3562 | } | ||
3563 | if (cmd == SSL_CTRL_SET_TLSEXT_TICKET_KEYS) | ||
3564 | { | ||
3565 | memcpy(ctx->tlsext_tick_key_name, keys, 16); | ||
3566 | memcpy(ctx->tlsext_tick_hmac_key, keys + 16, 16); | ||
3567 | memcpy(ctx->tlsext_tick_aes_key, keys + 32, 16); | ||
3568 | } | 3533 | } |
3569 | else | 3534 | if (cmd == SSL_CTRL_SET_TLSEXT_TICKET_KEYS) { |
3570 | { | 3535 | memcpy(ctx->tlsext_tick_key_name, keys, 16); |
3571 | memcpy(keys, ctx->tlsext_tick_key_name, 16); | 3536 | memcpy(ctx->tlsext_tick_hmac_key, keys + 16, 16); |
3572 | memcpy(keys + 16, ctx->tlsext_tick_hmac_key, 16); | 3537 | memcpy(ctx->tlsext_tick_aes_key, keys + 32, 16); |
3573 | memcpy(keys + 32, ctx->tlsext_tick_aes_key, 16); | 3538 | } else { |
3539 | memcpy(keys, ctx->tlsext_tick_key_name, 16); | ||
3540 | memcpy(keys + 16, ctx->tlsext_tick_hmac_key, 16); | ||
3541 | memcpy(keys + 32, ctx->tlsext_tick_aes_key, 16); | ||
3574 | } | 3542 | } |
3575 | return 1; | 3543 | return 1; |
3576 | } | 3544 | } |
3577 | 3545 | ||
3578 | #ifdef TLSEXT_TYPE_opaque_prf_input | 3546 | #ifdef TLSEXT_TYPE_opaque_prf_input |
@@ -3582,7 +3550,7 @@ long ssl3_ctx_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg) | |||
3582 | #endif | 3550 | #endif |
3583 | 3551 | ||
3584 | case SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG: | 3552 | case SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG: |
3585 | ctx->tlsext_status_arg=parg; | 3553 | ctx->tlsext_status_arg = parg; |
3586 | return 1; | 3554 | return 1; |
3587 | break; | 3555 | break; |
3588 | 3556 | ||
@@ -3594,182 +3562,182 @@ long ssl3_ctx_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg) | |||
3594 | ctx->srp_ctx.login = NULL; | 3562 | ctx->srp_ctx.login = NULL; |
3595 | if (parg == NULL) | 3563 | if (parg == NULL) |
3596 | break; | 3564 | break; |
3597 | if (strlen((const char *)parg) > 255 || strlen((const char *)parg) < 1) | 3565 | if (strlen((const char *)parg) > 255 || strlen((const char *)parg) < 1) { |
3598 | { | ||
3599 | SSLerr(SSL_F_SSL3_CTX_CTRL, SSL_R_INVALID_SRP_USERNAME); | 3566 | SSLerr(SSL_F_SSL3_CTX_CTRL, SSL_R_INVALID_SRP_USERNAME); |
3600 | return 0; | 3567 | return 0; |
3601 | } | 3568 | } |
3602 | if ((ctx->srp_ctx.login = BUF_strdup((char *)parg)) == NULL) | 3569 | if ((ctx->srp_ctx.login = BUF_strdup((char *)parg)) == NULL) { |
3603 | { | ||
3604 | SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_INTERNAL_ERROR); | 3570 | SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_INTERNAL_ERROR); |
3605 | return 0; | 3571 | return 0; |
3606 | } | 3572 | } |
3607 | break; | 3573 | break; |
3608 | case SSL_CTRL_SET_TLS_EXT_SRP_PASSWORD: | 3574 | case SSL_CTRL_SET_TLS_EXT_SRP_PASSWORD: |
3609 | ctx->srp_ctx.SRP_give_srp_client_pwd_callback=srp_password_from_info_cb; | 3575 | ctx->srp_ctx.SRP_give_srp_client_pwd_callback = srp_password_from_info_cb; |
3610 | ctx->srp_ctx.info=parg; | 3576 | ctx->srp_ctx.info = parg; |
3611 | break; | 3577 | break; |
3612 | case SSL_CTRL_SET_SRP_ARG: | 3578 | case SSL_CTRL_SET_SRP_ARG: |
3613 | ctx->srp_ctx.srp_Mask|=SSL_kSRP; | 3579 | ctx->srp_ctx.srp_Mask|=SSL_kSRP; |
3614 | ctx->srp_ctx.SRP_cb_arg=parg; | 3580 | ctx->srp_ctx.SRP_cb_arg = parg; |
3615 | break; | 3581 | break; |
3616 | 3582 | ||
3617 | case SSL_CTRL_SET_TLS_EXT_SRP_STRENGTH: | 3583 | case SSL_CTRL_SET_TLS_EXT_SRP_STRENGTH: |
3618 | ctx->srp_ctx.strength=larg; | 3584 | ctx->srp_ctx.strength = larg; |
3619 | break; | 3585 | break; |
3620 | #endif | 3586 | #endif |
3621 | #endif /* !OPENSSL_NO_TLSEXT */ | 3587 | #endif /* !OPENSSL_NO_TLSEXT */ |
3622 | 3588 | ||
3623 | /* A Thawte special :-) */ | 3589 | /* A Thawte special :-) */ |
3624 | case SSL_CTRL_EXTRA_CHAIN_CERT: | 3590 | case SSL_CTRL_EXTRA_CHAIN_CERT: |
3625 | if (ctx->extra_certs == NULL) | 3591 | if (ctx->extra_certs == NULL) { |
3626 | { | 3592 | if ((ctx->extra_certs = sk_X509_new_null()) == NULL) |
3627 | if ((ctx->extra_certs=sk_X509_new_null()) == NULL) | 3593 | return (0); |
3628 | return(0); | 3594 | } |
3629 | } | ||
3630 | sk_X509_push(ctx->extra_certs,(X509 *)parg); | 3595 | sk_X509_push(ctx->extra_certs,(X509 *)parg); |
3631 | break; | 3596 | break; |
3632 | 3597 | ||
3633 | case SSL_CTRL_GET_EXTRA_CHAIN_CERTS: | 3598 | case SSL_CTRL_GET_EXTRA_CHAIN_CERTS: |
3634 | *(STACK_OF(X509) **)parg = ctx->extra_certs; | 3599 | *(STACK_OF(X509) **)parg = ctx->extra_certs; |
3635 | break; | 3600 | break; |
3636 | 3601 | ||
3637 | case SSL_CTRL_CLEAR_EXTRA_CHAIN_CERTS: | 3602 | case SSL_CTRL_CLEAR_EXTRA_CHAIN_CERTS: |
3638 | if (ctx->extra_certs) | 3603 | if (ctx->extra_certs) { |
3639 | { | ||
3640 | sk_X509_pop_free(ctx->extra_certs, X509_free); | 3604 | sk_X509_pop_free(ctx->extra_certs, X509_free); |
3641 | ctx->extra_certs = NULL; | 3605 | ctx->extra_certs = NULL; |
3642 | } | 3606 | } |
3643 | break; | 3607 | break; |
3644 | 3608 | ||
3645 | default: | 3609 | default: |
3646 | return(0); | 3610 | return (0); |
3647 | } | ||
3648 | return(1); | ||
3649 | } | 3611 | } |
3612 | return (1); | ||
3613 | } | ||
3650 | 3614 | ||
3651 | long ssl3_ctx_callback_ctrl(SSL_CTX *ctx, int cmd, void (*fp)(void)) | 3615 | long |
3652 | { | 3616 | ssl3_ctx_callback_ctrl(SSL_CTX *ctx, int cmd, void (*fp)(void)) |
3617 | { | ||
3653 | CERT *cert; | 3618 | CERT *cert; |
3654 | 3619 | ||
3655 | cert=ctx->cert; | 3620 | cert = ctx->cert; |
3656 | 3621 | ||
3657 | switch (cmd) | 3622 | switch (cmd) { |
3658 | { | ||
3659 | #ifndef OPENSSL_NO_RSA | 3623 | #ifndef OPENSSL_NO_RSA |
3660 | case SSL_CTRL_SET_TMP_RSA_CB: | 3624 | case SSL_CTRL_SET_TMP_RSA_CB: |
3661 | { | 3625 | { |
3662 | cert->rsa_tmp_cb = (RSA *(*)(SSL *, int, int))fp; | 3626 | cert->rsa_tmp_cb = (RSA *(*)(SSL *, int, int))fp; |
3663 | } | 3627 | } |
3664 | break; | 3628 | break; |
3665 | #endif | 3629 | #endif |
3666 | #ifndef OPENSSL_NO_DH | 3630 | #ifndef OPENSSL_NO_DH |
3667 | case SSL_CTRL_SET_TMP_DH_CB: | 3631 | case SSL_CTRL_SET_TMP_DH_CB: |
3668 | { | 3632 | { |
3669 | cert->dh_tmp_cb = (DH *(*)(SSL *, int, int))fp; | 3633 | cert->dh_tmp_cb = (DH *(*)(SSL *, int, int))fp; |
3670 | } | 3634 | } |
3671 | break; | 3635 | break; |
3672 | #endif | 3636 | #endif |
3673 | #ifndef OPENSSL_NO_ECDH | 3637 | #ifndef OPENSSL_NO_ECDH |
3674 | case SSL_CTRL_SET_TMP_ECDH_CB: | 3638 | case SSL_CTRL_SET_TMP_ECDH_CB: |
3675 | { | 3639 | { |
3676 | cert->ecdh_tmp_cb = (EC_KEY *(*)(SSL *, int, int))fp; | 3640 | cert->ecdh_tmp_cb = (EC_KEY *(*)(SSL *, int, int))fp; |
3677 | } | 3641 | } |
3678 | break; | 3642 | break; |
3679 | #endif | 3643 | #endif |
3680 | #ifndef OPENSSL_NO_TLSEXT | 3644 | #ifndef OPENSSL_NO_TLSEXT |
3681 | case SSL_CTRL_SET_TLSEXT_SERVERNAME_CB: | 3645 | case SSL_CTRL_SET_TLSEXT_SERVERNAME_CB: |
3682 | ctx->tlsext_servername_callback=(int (*)(SSL *,int *,void *))fp; | 3646 | ctx->tlsext_servername_callback = (int (*)(SSL *, int *, void *))fp; |
3683 | break; | 3647 | break; |
3684 | 3648 | ||
3685 | #ifdef TLSEXT_TYPE_opaque_prf_input | 3649 | #ifdef TLSEXT_TYPE_opaque_prf_input |
3686 | case SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB: | 3650 | case SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB: |
3687 | ctx->tlsext_opaque_prf_input_callback = (int (*)(SSL *,void *, size_t, void *))fp; | 3651 | ctx->tlsext_opaque_prf_input_callback = (int (*)(SSL *, void *, size_t, void *))fp; |
3688 | break; | 3652 | break; |
3689 | #endif | 3653 | #endif |
3690 | 3654 | ||
3691 | case SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB: | 3655 | case SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB: |
3692 | ctx->tlsext_status_cb=(int (*)(SSL *,void *))fp; | 3656 | ctx->tlsext_status_cb = (int (*)(SSL *, void *))fp; |
3693 | break; | 3657 | break; |
3694 | 3658 | ||
3695 | case SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB: | 3659 | case SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB: |
3696 | ctx->tlsext_ticket_key_cb=(int (*)(SSL *,unsigned char *, | 3660 | ctx->tlsext_ticket_key_cb = (int (*)(SSL *, unsigned char *, |
3697 | unsigned char *, | 3661 | unsigned char *, EVP_CIPHER_CTX *, HMAC_CTX *, int))fp; |
3698 | EVP_CIPHER_CTX *, | ||
3699 | HMAC_CTX *, int))fp; | ||
3700 | break; | 3662 | break; |
3701 | 3663 | ||
3702 | #ifndef OPENSSL_NO_SRP | 3664 | #ifndef OPENSSL_NO_SRP |
3703 | case SSL_CTRL_SET_SRP_VERIFY_PARAM_CB: | 3665 | case SSL_CTRL_SET_SRP_VERIFY_PARAM_CB: |
3704 | ctx->srp_ctx.srp_Mask|=SSL_kSRP; | 3666 | ctx->srp_ctx.srp_Mask|=SSL_kSRP; |
3705 | ctx->srp_ctx.SRP_verify_param_callback=(int (*)(SSL *,void *))fp; | 3667 | ctx->srp_ctx.SRP_verify_param_callback = |
3668 | (int (*)(SSL *, void *))fp; | ||
3706 | break; | 3669 | break; |
3707 | case SSL_CTRL_SET_TLS_EXT_SRP_USERNAME_CB: | 3670 | case SSL_CTRL_SET_TLS_EXT_SRP_USERNAME_CB: |
3708 | ctx->srp_ctx.srp_Mask|=SSL_kSRP; | 3671 | ctx->srp_ctx.srp_Mask|=SSL_kSRP; |
3709 | ctx->srp_ctx.TLS_ext_srp_username_callback=(int (*)(SSL *,int *,void *))fp; | 3672 | ctx->srp_ctx.TLS_ext_srp_username_callback = |
3673 | (int (*)(SSL *, int *, void *))fp; | ||
3710 | break; | 3674 | break; |
3711 | case SSL_CTRL_SET_SRP_GIVE_CLIENT_PWD_CB: | 3675 | case SSL_CTRL_SET_SRP_GIVE_CLIENT_PWD_CB: |
3712 | ctx->srp_ctx.srp_Mask|=SSL_kSRP; | 3676 | ctx->srp_ctx.srp_Mask|=SSL_kSRP; |
3713 | ctx->srp_ctx.SRP_give_srp_client_pwd_callback=(char *(*)(SSL *,void *))fp; | 3677 | ctx->srp_ctx.SRP_give_srp_client_pwd_callback = |
3678 | (char *(*)(SSL *, void *))fp; | ||
3714 | break; | 3679 | break; |
3715 | #endif | 3680 | #endif |
3716 | #endif | 3681 | #endif |
3717 | default: | 3682 | default: |
3718 | return(0); | 3683 | return (0); |
3719 | } | ||
3720 | return(1); | ||
3721 | } | 3684 | } |
3685 | return (1); | ||
3686 | } | ||
3722 | 3687 | ||
3723 | /* This function needs to check if the ciphers required are actually | 3688 | /* This function needs to check if the ciphers required are actually |
3724 | * available */ | 3689 | * available */ |
3725 | const SSL_CIPHER *ssl3_get_cipher_by_char(const unsigned char *p) | 3690 | const SSL_CIPHER |
3726 | { | 3691 | *ssl3_get_cipher_by_char(const unsigned char *p) |
3692 | { | ||
3727 | SSL_CIPHER c; | 3693 | SSL_CIPHER c; |
3728 | const SSL_CIPHER *cp; | 3694 | const SSL_CIPHER *cp; |
3729 | unsigned long id; | 3695 | unsigned long id; |
3730 | 3696 | ||
3731 | id=0x03000000L|((unsigned long)p[0]<<8L)|(unsigned long)p[1]; | 3697 | id = 0x03000000L | ((unsigned long)p[0] << 8L) | (unsigned long)p[1]; |
3732 | c.id=id; | 3698 | c.id = id; |
3733 | cp = OBJ_bsearch_ssl_cipher_id(&c, ssl3_ciphers, SSL3_NUM_CIPHERS); | 3699 | cp = OBJ_bsearch_ssl_cipher_id(&c, ssl3_ciphers, SSL3_NUM_CIPHERS); |
3734 | #ifdef DEBUG_PRINT_UNKNOWN_CIPHERSUITES | 3700 | #ifdef DEBUG_PRINT_UNKNOWN_CIPHERSUITES |
3735 | if (cp == NULL) fprintf(stderr, "Unknown cipher ID %x\n", (p[0] << 8) | p[1]); | 3701 | if (cp == NULL) |
3702 | fprintf(stderr, "Unknown cipher ID %x\n", (p[0] << 8) | p[1]); | ||
3736 | #endif | 3703 | #endif |
3737 | if (cp == NULL || cp->valid == 0) | 3704 | if (cp == NULL || cp->valid == 0) |
3738 | return NULL; | 3705 | return NULL; |
3739 | else | 3706 | else |
3740 | return cp; | 3707 | return cp; |
3741 | } | 3708 | } |
3742 | 3709 | ||
3743 | int ssl3_put_cipher_by_char(const SSL_CIPHER *c, unsigned char *p) | 3710 | int |
3744 | { | 3711 | ssl3_put_cipher_by_char(const SSL_CIPHER *c, unsigned char *p) |
3712 | { | ||
3745 | long l; | 3713 | long l; |
3746 | 3714 | ||
3747 | if (p != NULL) | 3715 | if (p != NULL) { |
3748 | { | 3716 | l = c->id; |
3749 | l=c->id; | 3717 | if ((l & 0xff000000) != 0x03000000) |
3750 | if ((l & 0xff000000) != 0x03000000) return(0); | 3718 | return (0); |
3751 | p[0]=((unsigned char)(l>> 8L))&0xFF; | 3719 | p[0] = ((unsigned char)(l >> 8L)) & 0xFF; |
3752 | p[1]=((unsigned char)(l ))&0xFF; | 3720 | p[1] = ((unsigned char)(l)) & 0xFF; |
3753 | } | ||
3754 | return(2); | ||
3755 | } | 3721 | } |
3722 | return (2); | ||
3723 | } | ||
3756 | 3724 | ||
3757 | SSL_CIPHER *ssl3_choose_cipher(SSL *s, STACK_OF(SSL_CIPHER) *clnt, | 3725 | SSL_CIPHER *ssl3_choose_cipher(SSL *s, STACK_OF(SSL_CIPHER) *clnt, |
3758 | STACK_OF(SSL_CIPHER) *srvr) | 3726 | STACK_OF(SSL_CIPHER) *srvr) |
3759 | { | 3727 | { |
3760 | SSL_CIPHER *c,*ret=NULL; | 3728 | SSL_CIPHER *c, *ret = NULL; |
3761 | STACK_OF(SSL_CIPHER) *prio, *allow; | 3729 | STACK_OF(SSL_CIPHER) *prio, *allow; |
3762 | int i,ii,ok; | 3730 | int i, ii, ok; |
3763 | #if !defined(OPENSSL_NO_TLSEXT) && !defined(OPENSSL_NO_EC) | 3731 | #if !defined(OPENSSL_NO_TLSEXT) && !defined(OPENSSL_NO_EC) |
3764 | unsigned int j; | 3732 | unsigned int j; |
3765 | int ec_ok, ec_nid; | 3733 | int ec_ok, ec_nid; |
3766 | unsigned char ec_search1 = 0, ec_search2 = 0; | 3734 | unsigned char ec_search1 = 0, ec_search2 = 0; |
3767 | #endif | 3735 | #endif |
3768 | CERT *cert; | 3736 | CERT *cert; |
3769 | unsigned long alg_k,alg_a,mask_k,mask_a,emask_k,emask_a; | 3737 | unsigned long alg_k, alg_a, mask_k, mask_a, emask_k, emask_a; |
3770 | 3738 | ||
3771 | /* Let's see which ciphers we can support */ | 3739 | /* Let's see which ciphers we can support */ |
3772 | cert=s->cert; | 3740 | cert = s->cert; |
3773 | 3741 | ||
3774 | #if 0 | 3742 | #if 0 |
3775 | /* Do not set the compare functions, because this may lead to a | 3743 | /* Do not set the compare functions, because this may lead to a |
@@ -3783,62 +3751,55 @@ SSL_CIPHER *ssl3_choose_cipher(SSL *s, STACK_OF(SSL_CIPHER) *clnt, | |||
3783 | 3751 | ||
3784 | #ifdef CIPHER_DEBUG | 3752 | #ifdef CIPHER_DEBUG |
3785 | printf("Server has %d from %p:\n", sk_SSL_CIPHER_num(srvr), (void *)srvr); | 3753 | printf("Server has %d from %p:\n", sk_SSL_CIPHER_num(srvr), (void *)srvr); |
3786 | for(i=0 ; i < sk_SSL_CIPHER_num(srvr) ; ++i) | 3754 | for (i = 0; i < sk_SSL_CIPHER_num(srvr); ++i) { |
3787 | { | 3755 | c = sk_SSL_CIPHER_value(srvr, i); |
3788 | c=sk_SSL_CIPHER_value(srvr,i); | 3756 | printf("%p:%s\n",(void *)c, c->name); |
3789 | printf("%p:%s\n",(void *)c,c->name); | 3757 | } |
3790 | } | ||
3791 | printf("Client sent %d from %p:\n", sk_SSL_CIPHER_num(clnt), (void *)clnt); | 3758 | printf("Client sent %d from %p:\n", sk_SSL_CIPHER_num(clnt), (void *)clnt); |
3792 | for(i=0 ; i < sk_SSL_CIPHER_num(clnt) ; ++i) | 3759 | for (i = 0; i < sk_SSL_CIPHER_num(clnt); ++i) { |
3793 | { | 3760 | c = sk_SSL_CIPHER_value(clnt, i); |
3794 | c=sk_SSL_CIPHER_value(clnt,i); | 3761 | printf("%p:%s\n",(void *)c, c->name); |
3795 | printf("%p:%s\n",(void *)c,c->name); | 3762 | } |
3796 | } | ||
3797 | #endif | 3763 | #endif |
3798 | 3764 | ||
3799 | if (s->options & SSL_OP_CIPHER_SERVER_PREFERENCE) | 3765 | if (s->options & SSL_OP_CIPHER_SERVER_PREFERENCE) { |
3800 | { | ||
3801 | prio = srvr; | 3766 | prio = srvr; |
3802 | allow = clnt; | 3767 | allow = clnt; |
3803 | } | 3768 | } else { |
3804 | else | ||
3805 | { | ||
3806 | prio = clnt; | 3769 | prio = clnt; |
3807 | allow = srvr; | 3770 | allow = srvr; |
3808 | } | 3771 | } |
3809 | 3772 | ||
3810 | for (i=0; i<sk_SSL_CIPHER_num(prio); i++) | 3773 | for (i = 0; i < sk_SSL_CIPHER_num(prio); i++) { |
3811 | { | 3774 | c = sk_SSL_CIPHER_value(prio, i); |
3812 | c=sk_SSL_CIPHER_value(prio,i); | ||
3813 | 3775 | ||
3814 | /* Skip TLS v1.2 only ciphersuites if lower than v1.2 */ | 3776 | /* Skip TLS v1.2 only ciphersuites if lower than v1.2 */ |
3815 | if ((c->algorithm_ssl & SSL_TLSV1_2) && | 3777 | if ((c->algorithm_ssl & SSL_TLSV1_2) && |
3816 | (TLS1_get_version(s) < TLS1_2_VERSION)) | 3778 | (TLS1_get_version(s) < TLS1_2_VERSION)) |
3817 | continue; | 3779 | continue; |
3818 | 3780 | ||
3819 | ssl_set_cert_masks(cert,c); | 3781 | ssl_set_cert_masks(cert, c); |
3820 | mask_k = cert->mask_k; | 3782 | mask_k = cert->mask_k; |
3821 | mask_a = cert->mask_a; | 3783 | mask_a = cert->mask_a; |
3822 | emask_k = cert->export_mask_k; | 3784 | emask_k = cert->export_mask_k; |
3823 | emask_a = cert->export_mask_a; | 3785 | emask_a = cert->export_mask_a; |
3824 | #ifndef OPENSSL_NO_SRP | 3786 | #ifndef OPENSSL_NO_SRP |
3825 | mask_k=cert->mask_k | s->srp_ctx.srp_Mask; | 3787 | mask_k = cert->mask_k | s->srp_ctx.srp_Mask; |
3826 | emask_k=cert->export_mask_k | s->srp_ctx.srp_Mask; | 3788 | emask_k = cert->export_mask_k | s->srp_ctx.srp_Mask; |
3827 | #endif | 3789 | #endif |
3828 | 3790 | ||
3829 | #ifdef KSSL_DEBUG | 3791 | #ifdef KSSL_DEBUG |
3830 | /* printf("ssl3_choose_cipher %d alg= %lx\n", i,c->algorithms);*/ | 3792 | /* printf("ssl3_choose_cipher %d alg= %lx\n", i,c->algorithms);*/ |
3831 | #endif /* KSSL_DEBUG */ | 3793 | #endif /* KSSL_DEBUG */ |
3832 | 3794 | ||
3833 | alg_k=c->algorithm_mkey; | 3795 | alg_k = c->algorithm_mkey; |
3834 | alg_a=c->algorithm_auth; | 3796 | alg_a = c->algorithm_auth; |
3835 | 3797 | ||
3836 | #ifndef OPENSSL_NO_KRB5 | 3798 | #ifndef OPENSSL_NO_KRB5 |
3837 | if (alg_k & SSL_kKRB5) | 3799 | if (alg_k & SSL_kKRB5) { |
3838 | { | 3800 | if (!kssl_keytab_is_available(s->kssl_ctx) ) |
3839 | if ( !kssl_keytab_is_available(s->kssl_ctx) ) | 3801 | continue; |
3840 | continue; | 3802 | } |
3841 | } | ||
3842 | #endif /* OPENSSL_NO_KRB5 */ | 3803 | #endif /* OPENSSL_NO_KRB5 */ |
3843 | #ifndef OPENSSL_NO_PSK | 3804 | #ifndef OPENSSL_NO_PSK |
3844 | /* with PSK there must be server callback set */ | 3805 | /* with PSK there must be server callback set */ |
@@ -3846,449 +3807,405 @@ SSL_CIPHER *ssl3_choose_cipher(SSL *s, STACK_OF(SSL_CIPHER) *clnt, | |||
3846 | continue; | 3807 | continue; |
3847 | #endif /* OPENSSL_NO_PSK */ | 3808 | #endif /* OPENSSL_NO_PSK */ |
3848 | 3809 | ||
3849 | if (SSL_C_IS_EXPORT(c)) | 3810 | if (SSL_C_IS_EXPORT(c)) { |
3850 | { | ||
3851 | ok = (alg_k & emask_k) && (alg_a & emask_a); | 3811 | ok = (alg_k & emask_k) && (alg_a & emask_a); |
3852 | #ifdef CIPHER_DEBUG | 3812 | #ifdef CIPHER_DEBUG |
3853 | printf("%d:[%08lX:%08lX:%08lX:%08lX]%p:%s (export)\n",ok,alg_k,alg_a,emask_k,emask_a, | 3813 | printf("%d:[%08lX:%08lX:%08lX:%08lX]%p:%s (export)\n", ok, alg_k, alg_a, emask_k, emask_a, |
3854 | (void *)c,c->name); | 3814 | (void *)c, c->name); |
3855 | #endif | 3815 | #endif |
3856 | } | 3816 | } else { |
3857 | else | ||
3858 | { | ||
3859 | ok = (alg_k & mask_k) && (alg_a & mask_a); | 3817 | ok = (alg_k & mask_k) && (alg_a & mask_a); |
3860 | #ifdef CIPHER_DEBUG | 3818 | #ifdef CIPHER_DEBUG |
3861 | printf("%d:[%08lX:%08lX:%08lX:%08lX]%p:%s\n",ok,alg_k,alg_a,mask_k,mask_a,(void *)c, | 3819 | printf("%d:[%08lX:%08lX:%08lX:%08lX]%p:%s\n", ok, alg_k, alg_a, mask_k, mask_a,(void *)c, |
3862 | c->name); | 3820 | c->name); |
3863 | #endif | 3821 | #endif |
3864 | } | 3822 | } |
3865 | 3823 | ||
3866 | #ifndef OPENSSL_NO_TLSEXT | 3824 | #ifndef OPENSSL_NO_TLSEXT |
3867 | #ifndef OPENSSL_NO_EC | 3825 | #ifndef OPENSSL_NO_EC |
3868 | if ( | 3826 | if ( |
3869 | /* if we are considering an ECC cipher suite that uses our certificate */ | 3827 | /* if we are considering an ECC cipher suite that uses our certificate */ |
3870 | (alg_a & SSL_aECDSA || alg_a & SSL_aECDH) | 3828 | (alg_a & SSL_aECDSA || alg_a & SSL_aECDH) |
3871 | /* and we have an ECC certificate */ | 3829 | /* and we have an ECC certificate */ |
3872 | && (s->cert->pkeys[SSL_PKEY_ECC].x509 != NULL) | 3830 | && (s->cert->pkeys[SSL_PKEY_ECC].x509 != NULL) |
3873 | /* and the client specified a Supported Point Formats extension */ | 3831 | /* and the client specified a Supported Point Formats extension */ |
3874 | && ((s->session->tlsext_ecpointformatlist_length > 0) && (s->session->tlsext_ecpointformatlist != NULL)) | 3832 | && ((s->session->tlsext_ecpointformatlist_length > 0) && (s->session->tlsext_ecpointformatlist != NULL)) |
3875 | /* and our certificate's point is compressed */ | 3833 | /* and our certificate's point is compressed */ |
3876 | && ( | 3834 | && ( |
3877 | (s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info != NULL) | 3835 | (s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info != NULL) |
3878 | && (s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info->key != NULL) | 3836 | && (s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info->key != NULL) |
3879 | && (s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info->key->public_key != NULL) | 3837 | && (s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info->key->public_key != NULL) |
3880 | && (s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info->key->public_key->data != NULL) | 3838 | && (s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info->key->public_key->data != NULL) |
3881 | && ( | 3839 | && ( |
3882 | (*(s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info->key->public_key->data) == POINT_CONVERSION_COMPRESSED) | 3840 | (*(s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info->key->public_key->data) == POINT_CONVERSION_COMPRESSED) |
3883 | || (*(s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info->key->public_key->data) == POINT_CONVERSION_COMPRESSED + 1) | 3841 | || (*(s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info->key->public_key->data) == POINT_CONVERSION_COMPRESSED + 1) |
3884 | ) | ||
3885 | ) | ||
3886 | ) | 3842 | ) |
3887 | { | 3843 | ) |
3844 | ) { | ||
3888 | ec_ok = 0; | 3845 | ec_ok = 0; |
3889 | /* if our certificate's curve is over a field type that the client does not support | 3846 | /* if our certificate's curve is over a field type that the client does not support |
3890 | * then do not allow this cipher suite to be negotiated */ | 3847 | * then do not allow this cipher suite to be negotiated */ |
3891 | if ( | 3848 | if ( |
3892 | (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec != NULL) | 3849 | (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec != NULL) |
3893 | && (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group != NULL) | 3850 | && (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group != NULL) |
3894 | && (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group->meth != NULL) | 3851 | && (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group->meth != NULL) |
3895 | && (EC_METHOD_get_field_type(s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group->meth) == NID_X9_62_prime_field) | 3852 | && (EC_METHOD_get_field_type(s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group->meth) == NID_X9_62_prime_field) |
3896 | ) | 3853 | ) { |
3897 | { | 3854 | for (j = 0; j < s->session->tlsext_ecpointformatlist_length; j++) { |
3898 | for (j = 0; j < s->session->tlsext_ecpointformatlist_length; j++) | 3855 | if (s->session->tlsext_ecpointformatlist[j] == TLSEXT_ECPOINTFORMAT_ansiX962_compressed_prime) { |
3899 | { | ||
3900 | if (s->session->tlsext_ecpointformatlist[j] == TLSEXT_ECPOINTFORMAT_ansiX962_compressed_prime) | ||
3901 | { | ||
3902 | ec_ok = 1; | 3856 | ec_ok = 1; |
3903 | break; | 3857 | break; |
3904 | } | ||
3905 | } | 3858 | } |
3906 | } | 3859 | } |
3907 | else if (EC_METHOD_get_field_type(s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group->meth) == NID_X9_62_characteristic_two_field) | 3860 | } else if (EC_METHOD_get_field_type(s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group->meth) == NID_X9_62_characteristic_two_field) { |
3908 | { | 3861 | for (j = 0; j < s->session->tlsext_ecpointformatlist_length; j++) { |
3909 | for (j = 0; j < s->session->tlsext_ecpointformatlist_length; j++) | 3862 | if (s->session->tlsext_ecpointformatlist[j] == TLSEXT_ECPOINTFORMAT_ansiX962_compressed_char2) { |
3910 | { | ||
3911 | if (s->session->tlsext_ecpointformatlist[j] == TLSEXT_ECPOINTFORMAT_ansiX962_compressed_char2) | ||
3912 | { | ||
3913 | ec_ok = 1; | 3863 | ec_ok = 1; |
3914 | break; | 3864 | break; |
3915 | } | ||
3916 | } | 3865 | } |
3917 | } | 3866 | } |
3918 | ok = ok && ec_ok; | ||
3919 | } | 3867 | } |
3868 | ok = ok && ec_ok; | ||
3869 | } | ||
3920 | if ( | 3870 | if ( |
3921 | /* if we are considering an ECC cipher suite that uses our certificate */ | 3871 | /* if we are considering an ECC cipher suite that uses our certificate */ |
3922 | (alg_a & SSL_aECDSA || alg_a & SSL_aECDH) | 3872 | (alg_a & SSL_aECDSA || alg_a & SSL_aECDH) |
3923 | /* and we have an ECC certificate */ | 3873 | /* and we have an ECC certificate */ |
3924 | && (s->cert->pkeys[SSL_PKEY_ECC].x509 != NULL) | 3874 | && (s->cert->pkeys[SSL_PKEY_ECC].x509 != NULL) |
3925 | /* and the client specified an EllipticCurves extension */ | 3875 | /* and the client specified an EllipticCurves extension */ |
3926 | && ((s->session->tlsext_ellipticcurvelist_length > 0) && (s->session->tlsext_ellipticcurvelist != NULL)) | 3876 | && ((s->session->tlsext_ellipticcurvelist_length > 0) && (s->session->tlsext_ellipticcurvelist != NULL)) |
3927 | ) | 3877 | ) { |
3928 | { | ||
3929 | ec_ok = 0; | 3878 | ec_ok = 0; |
3930 | if ( | 3879 | if ( |
3931 | (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec != NULL) | 3880 | (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec != NULL) |
3932 | && (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group != NULL) | 3881 | && (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group != NULL) |
3933 | ) | 3882 | ) { |
3934 | { | ||
3935 | ec_nid = EC_GROUP_get_curve_name(s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group); | 3883 | ec_nid = EC_GROUP_get_curve_name(s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group); |
3936 | if ((ec_nid == 0) | 3884 | if ((ec_nid == 0) |
3937 | && (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group->meth != NULL) | 3885 | && (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group->meth != NULL) |
3938 | ) | 3886 | ) { |
3939 | { | 3887 | if (EC_METHOD_get_field_type(s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group->meth) == NID_X9_62_prime_field) { |
3940 | if (EC_METHOD_get_field_type(s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group->meth) == NID_X9_62_prime_field) | ||
3941 | { | ||
3942 | ec_search1 = 0xFF; | 3888 | ec_search1 = 0xFF; |
3943 | ec_search2 = 0x01; | 3889 | ec_search2 = 0x01; |
3944 | } | 3890 | } else if (EC_METHOD_get_field_type(s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group->meth) == NID_X9_62_characteristic_two_field) { |
3945 | else if (EC_METHOD_get_field_type(s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group->meth) == NID_X9_62_characteristic_two_field) | ||
3946 | { | ||
3947 | ec_search1 = 0xFF; | 3891 | ec_search1 = 0xFF; |
3948 | ec_search2 = 0x02; | 3892 | ec_search2 = 0x02; |
3949 | } | ||
3950 | } | 3893 | } |
3951 | else | 3894 | } else { |
3952 | { | ||
3953 | ec_search1 = 0x00; | 3895 | ec_search1 = 0x00; |
3954 | ec_search2 = tls1_ec_nid2curve_id(ec_nid); | 3896 | ec_search2 = tls1_ec_nid2curve_id(ec_nid); |
3955 | } | 3897 | } |
3956 | if ((ec_search1 != 0) || (ec_search2 != 0)) | 3898 | if ((ec_search1 != 0) || (ec_search2 != 0)) { |
3957 | { | 3899 | for (j = 0; j < s->session->tlsext_ellipticcurvelist_length / 2; j++) { |
3958 | for (j = 0; j < s->session->tlsext_ellipticcurvelist_length / 2; j++) | 3900 | if ((s->session->tlsext_ellipticcurvelist[2*j] == ec_search1) && (s->session->tlsext_ellipticcurvelist[2*j + 1] == ec_search2)) { |
3959 | { | ||
3960 | if ((s->session->tlsext_ellipticcurvelist[2*j] == ec_search1) && (s->session->tlsext_ellipticcurvelist[2*j+1] == ec_search2)) | ||
3961 | { | ||
3962 | ec_ok = 1; | 3901 | ec_ok = 1; |
3963 | break; | 3902 | break; |
3964 | } | ||
3965 | } | 3903 | } |
3966 | } | 3904 | } |
3967 | } | 3905 | } |
3968 | ok = ok && ec_ok; | ||
3969 | } | 3906 | } |
3907 | ok = ok && ec_ok; | ||
3908 | } | ||
3970 | if ( | 3909 | if ( |
3971 | /* if we are considering an ECC cipher suite that uses an ephemeral EC key */ | 3910 | /* if we are considering an ECC cipher suite that uses an ephemeral EC key */ |
3972 | (alg_k & SSL_kEECDH) | 3911 | (alg_k & SSL_kEECDH) |
3973 | /* and we have an ephemeral EC key */ | 3912 | /* and we have an ephemeral EC key */ |
3974 | && (s->cert->ecdh_tmp != NULL) | 3913 | && (s->cert->ecdh_tmp != NULL) |
3975 | /* and the client specified an EllipticCurves extension */ | 3914 | /* and the client specified an EllipticCurves extension */ |
3976 | && ((s->session->tlsext_ellipticcurvelist_length > 0) && (s->session->tlsext_ellipticcurvelist != NULL)) | 3915 | && ((s->session->tlsext_ellipticcurvelist_length > 0) && (s->session->tlsext_ellipticcurvelist != NULL)) |
3977 | ) | 3916 | ) { |
3978 | { | ||
3979 | ec_ok = 0; | 3917 | ec_ok = 0; |
3980 | if (s->cert->ecdh_tmp->group != NULL) | 3918 | if (s->cert->ecdh_tmp->group != NULL) { |
3981 | { | ||
3982 | ec_nid = EC_GROUP_get_curve_name(s->cert->ecdh_tmp->group); | 3919 | ec_nid = EC_GROUP_get_curve_name(s->cert->ecdh_tmp->group); |
3983 | if ((ec_nid == 0) | 3920 | if ((ec_nid == 0) |
3984 | && (s->cert->ecdh_tmp->group->meth != NULL) | 3921 | && (s->cert->ecdh_tmp->group->meth != NULL) |
3985 | ) | 3922 | ) { |
3986 | { | 3923 | if (EC_METHOD_get_field_type(s->cert->ecdh_tmp->group->meth) == NID_X9_62_prime_field) { |
3987 | if (EC_METHOD_get_field_type(s->cert->ecdh_tmp->group->meth) == NID_X9_62_prime_field) | ||
3988 | { | ||
3989 | ec_search1 = 0xFF; | 3924 | ec_search1 = 0xFF; |
3990 | ec_search2 = 0x01; | 3925 | ec_search2 = 0x01; |
3991 | } | 3926 | } else if (EC_METHOD_get_field_type(s->cert->ecdh_tmp->group->meth) == NID_X9_62_characteristic_two_field) { |
3992 | else if (EC_METHOD_get_field_type(s->cert->ecdh_tmp->group->meth) == NID_X9_62_characteristic_two_field) | ||
3993 | { | ||
3994 | ec_search1 = 0xFF; | 3927 | ec_search1 = 0xFF; |
3995 | ec_search2 = 0x02; | 3928 | ec_search2 = 0x02; |
3996 | } | ||
3997 | } | 3929 | } |
3998 | else | 3930 | } else { |
3999 | { | ||
4000 | ec_search1 = 0x00; | 3931 | ec_search1 = 0x00; |
4001 | ec_search2 = tls1_ec_nid2curve_id(ec_nid); | 3932 | ec_search2 = tls1_ec_nid2curve_id(ec_nid); |
4002 | } | 3933 | } |
4003 | if ((ec_search1 != 0) || (ec_search2 != 0)) | 3934 | if ((ec_search1 != 0) || (ec_search2 != 0)) { |
4004 | { | 3935 | for (j = 0; j < s->session->tlsext_ellipticcurvelist_length / 2; j++) { |
4005 | for (j = 0; j < s->session->tlsext_ellipticcurvelist_length / 2; j++) | 3936 | if ((s->session->tlsext_ellipticcurvelist[2*j] == ec_search1) && (s->session->tlsext_ellipticcurvelist[2*j + 1] == ec_search2)) { |
4006 | { | ||
4007 | if ((s->session->tlsext_ellipticcurvelist[2*j] == ec_search1) && (s->session->tlsext_ellipticcurvelist[2*j+1] == ec_search2)) | ||
4008 | { | ||
4009 | ec_ok = 1; | 3937 | ec_ok = 1; |
4010 | break; | 3938 | break; |
4011 | } | ||
4012 | } | 3939 | } |
4013 | } | 3940 | } |
4014 | } | 3941 | } |
4015 | ok = ok && ec_ok; | ||
4016 | } | 3942 | } |
3943 | ok = ok && ec_ok; | ||
3944 | } | ||
4017 | #endif /* OPENSSL_NO_EC */ | 3945 | #endif /* OPENSSL_NO_EC */ |
4018 | #endif /* OPENSSL_NO_TLSEXT */ | 3946 | #endif /* OPENSSL_NO_TLSEXT */ |
4019 | 3947 | ||
4020 | if (!ok) continue; | 3948 | if (!ok) |
4021 | ii=sk_SSL_CIPHER_find(allow,c); | 3949 | continue; |
4022 | if (ii >= 0) | 3950 | ii = sk_SSL_CIPHER_find(allow, c); |
4023 | { | 3951 | if (ii >= 0) { |
4024 | #if !defined(OPENSSL_NO_EC) && !defined(OPENSSL_NO_TLSEXT) | 3952 | #if !defined(OPENSSL_NO_EC) && !defined(OPENSSL_NO_TLSEXT) |
4025 | if ((alg_k & SSL_kEECDH) && (alg_a & SSL_aECDSA) && s->s3->is_probably_safari) | 3953 | if ((alg_k & SSL_kEECDH) && (alg_a & SSL_aECDSA) && s->s3->is_probably_safari) { |
4026 | { | 3954 | if (!ret) |
4027 | if (!ret) ret=sk_SSL_CIPHER_value(allow,ii); | 3955 | ret = sk_SSL_CIPHER_value(allow, ii); |
4028 | continue; | 3956 | continue; |
4029 | } | 3957 | } |
4030 | #endif | 3958 | #endif |
4031 | ret=sk_SSL_CIPHER_value(allow,ii); | 3959 | ret = sk_SSL_CIPHER_value(allow, ii); |
4032 | break; | 3960 | break; |
4033 | } | ||
4034 | } | 3961 | } |
4035 | return(ret); | ||
4036 | } | 3962 | } |
3963 | return (ret); | ||
3964 | } | ||
4037 | 3965 | ||
4038 | int ssl3_get_req_cert_type(SSL *s, unsigned char *p) | 3966 | int |
4039 | { | 3967 | ssl3_get_req_cert_type(SSL *s, unsigned char *p) |
4040 | int ret=0; | 3968 | { |
3969 | int ret = 0; | ||
4041 | unsigned long alg_k; | 3970 | unsigned long alg_k; |
4042 | 3971 | ||
4043 | alg_k = s->s3->tmp.new_cipher->algorithm_mkey; | 3972 | alg_k = s->s3->tmp.new_cipher->algorithm_mkey; |
4044 | 3973 | ||
4045 | #ifndef OPENSSL_NO_GOST | 3974 | #ifndef OPENSSL_NO_GOST |
4046 | if (s->version >= TLS1_VERSION) | 3975 | if (s->version >= TLS1_VERSION) { |
4047 | { | 3976 | if (alg_k & SSL_kGOST) { |
4048 | if (alg_k & SSL_kGOST) | 3977 | p[ret++] = TLS_CT_GOST94_SIGN; |
4049 | { | 3978 | p[ret++] = TLS_CT_GOST01_SIGN; |
4050 | p[ret++]=TLS_CT_GOST94_SIGN; | 3979 | return (ret); |
4051 | p[ret++]=TLS_CT_GOST01_SIGN; | ||
4052 | return(ret); | ||
4053 | } | ||
4054 | } | 3980 | } |
3981 | } | ||
4055 | #endif | 3982 | #endif |
4056 | 3983 | ||
4057 | #ifndef OPENSSL_NO_DH | 3984 | #ifndef OPENSSL_NO_DH |
4058 | if (alg_k & (SSL_kDHr|SSL_kEDH)) | 3985 | if (alg_k & (SSL_kDHr|SSL_kEDH)) { |
4059 | { | ||
4060 | # ifndef OPENSSL_NO_RSA | 3986 | # ifndef OPENSSL_NO_RSA |
4061 | p[ret++]=SSL3_CT_RSA_FIXED_DH; | 3987 | p[ret++] = SSL3_CT_RSA_FIXED_DH; |
4062 | # endif | 3988 | # endif |
4063 | # ifndef OPENSSL_NO_DSA | 3989 | # ifndef OPENSSL_NO_DSA |
4064 | p[ret++]=SSL3_CT_DSS_FIXED_DH; | 3990 | p[ret++] = SSL3_CT_DSS_FIXED_DH; |
4065 | # endif | 3991 | # endif |
4066 | } | 3992 | } |
4067 | if ((s->version == SSL3_VERSION) && | 3993 | if ((s->version == SSL3_VERSION) && |
4068 | (alg_k & (SSL_kEDH|SSL_kDHd|SSL_kDHr))) | 3994 | (alg_k & (SSL_kEDH|SSL_kDHd|SSL_kDHr))) { |
4069 | { | ||
4070 | # ifndef OPENSSL_NO_RSA | 3995 | # ifndef OPENSSL_NO_RSA |
4071 | p[ret++]=SSL3_CT_RSA_EPHEMERAL_DH; | 3996 | p[ret++] = SSL3_CT_RSA_EPHEMERAL_DH; |
4072 | # endif | 3997 | # endif |
4073 | # ifndef OPENSSL_NO_DSA | 3998 | # ifndef OPENSSL_NO_DSA |
4074 | p[ret++]=SSL3_CT_DSS_EPHEMERAL_DH; | 3999 | p[ret++] = SSL3_CT_DSS_EPHEMERAL_DH; |
4075 | # endif | 4000 | # endif |
4076 | } | 4001 | } |
4077 | #endif /* !OPENSSL_NO_DH */ | 4002 | #endif /* !OPENSSL_NO_DH */ |
4078 | #ifndef OPENSSL_NO_RSA | 4003 | #ifndef OPENSSL_NO_RSA |
4079 | p[ret++]=SSL3_CT_RSA_SIGN; | 4004 | p[ret++] = SSL3_CT_RSA_SIGN; |
4080 | #endif | 4005 | #endif |
4081 | #ifndef OPENSSL_NO_DSA | 4006 | #ifndef OPENSSL_NO_DSA |
4082 | p[ret++]=SSL3_CT_DSS_SIGN; | 4007 | p[ret++] = SSL3_CT_DSS_SIGN; |
4083 | #endif | 4008 | #endif |
4084 | #ifndef OPENSSL_NO_ECDH | 4009 | #ifndef OPENSSL_NO_ECDH |
4085 | if ((alg_k & (SSL_kECDHr|SSL_kECDHe)) && (s->version >= TLS1_VERSION)) | 4010 | if ((alg_k & (SSL_kECDHr|SSL_kECDHe)) && (s->version >= TLS1_VERSION)) { |
4086 | { | 4011 | p[ret++] = TLS_CT_RSA_FIXED_ECDH; |
4087 | p[ret++]=TLS_CT_RSA_FIXED_ECDH; | 4012 | p[ret++] = TLS_CT_ECDSA_FIXED_ECDH; |
4088 | p[ret++]=TLS_CT_ECDSA_FIXED_ECDH; | 4013 | } |
4089 | } | ||
4090 | #endif | 4014 | #endif |
4091 | 4015 | ||
4092 | #ifndef OPENSSL_NO_ECDSA | 4016 | #ifndef OPENSSL_NO_ECDSA |
4093 | /* ECDSA certs can be used with RSA cipher suites as well | 4017 | /* ECDSA certs can be used with RSA cipher suites as well |
4094 | * so we don't need to check for SSL_kECDH or SSL_kEECDH | 4018 | * so we don't need to check for SSL_kECDH or SSL_kEECDH |
4095 | */ | 4019 | */ |
4096 | if (s->version >= TLS1_VERSION) | 4020 | if (s->version >= TLS1_VERSION) { |
4097 | { | 4021 | p[ret++] = TLS_CT_ECDSA_SIGN; |
4098 | p[ret++]=TLS_CT_ECDSA_SIGN; | ||
4099 | } | ||
4100 | #endif | ||
4101 | return(ret); | ||
4102 | } | 4022 | } |
4023 | #endif | ||
4024 | return (ret); | ||
4025 | } | ||
4103 | 4026 | ||
4104 | int ssl3_shutdown(SSL *s) | 4027 | int |
4105 | { | 4028 | ssl3_shutdown(SSL *s) |
4029 | { | ||
4106 | int ret; | 4030 | int ret; |
4107 | 4031 | ||
4108 | /* Don't do anything much if we have not done the handshake or | 4032 | /* Don't do anything much if we have not done the handshake or |
4109 | * we don't want to send messages :-) */ | 4033 | * we don't want to send messages :-) */ |
4110 | if ((s->quiet_shutdown) || (s->state == SSL_ST_BEFORE)) | 4034 | if ((s->quiet_shutdown) || (s->state == SSL_ST_BEFORE)) { |
4111 | { | 4035 | s->shutdown = (SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN); |
4112 | s->shutdown=(SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN); | 4036 | return (1); |
4113 | return(1); | 4037 | } |
4114 | } | ||
4115 | 4038 | ||
4116 | if (!(s->shutdown & SSL_SENT_SHUTDOWN)) | 4039 | if (!(s->shutdown & SSL_SENT_SHUTDOWN)) { |
4117 | { | ||
4118 | s->shutdown|=SSL_SENT_SHUTDOWN; | 4040 | s->shutdown|=SSL_SENT_SHUTDOWN; |
4119 | #if 1 | 4041 | #if 1 |
4120 | ssl3_send_alert(s,SSL3_AL_WARNING,SSL_AD_CLOSE_NOTIFY); | 4042 | ssl3_send_alert(s, SSL3_AL_WARNING, SSL_AD_CLOSE_NOTIFY); |
4121 | #endif | 4043 | #endif |
4122 | /* our shutdown alert has been sent now, and if it still needs | 4044 | /* our shutdown alert has been sent now, and if it still needs |
4123 | * to be written, s->s3->alert_dispatch will be true */ | 4045 | * to be written, s->s3->alert_dispatch will be true */ |
4124 | if (s->s3->alert_dispatch) | 4046 | if (s->s3->alert_dispatch) |
4125 | return(-1); /* return WANT_WRITE */ | 4047 | return(-1); /* return WANT_WRITE */ |
4126 | } | 4048 | } else if (s->s3->alert_dispatch) { |
4127 | else if (s->s3->alert_dispatch) | ||
4128 | { | ||
4129 | /* resend it if not sent */ | 4049 | /* resend it if not sent */ |
4130 | #if 1 | 4050 | #if 1 |
4131 | ret=s->method->ssl_dispatch_alert(s); | 4051 | ret = s->method->ssl_dispatch_alert(s); |
4132 | if(ret == -1) | 4052 | if (ret == -1) { |
4133 | { | ||
4134 | /* we only get to return -1 here the 2nd/Nth | 4053 | /* we only get to return -1 here the 2nd/Nth |
4135 | * invocation, we must have already signalled | 4054 | * invocation, we must have already signalled |
4136 | * return 0 upon a previous invoation, | 4055 | * return 0 upon a previous invoation, |
4137 | * return WANT_WRITE */ | 4056 | * return WANT_WRITE */ |
4138 | return(ret); | 4057 | return (ret); |
4139 | } | ||
4140 | #endif | ||
4141 | } | 4058 | } |
4142 | else if (!(s->shutdown & SSL_RECEIVED_SHUTDOWN)) | 4059 | #endif |
4143 | { | 4060 | } else if (!(s->shutdown & SSL_RECEIVED_SHUTDOWN)) { |
4144 | /* If we are waiting for a close from our peer, we are closed */ | 4061 | /* If we are waiting for a close from our peer, we are closed */ |
4145 | s->method->ssl_read_bytes(s,0,NULL,0,0); | 4062 | s->method->ssl_read_bytes(s, 0, NULL, 0, 0); |
4146 | if(!(s->shutdown & SSL_RECEIVED_SHUTDOWN)) | 4063 | if (!(s->shutdown & SSL_RECEIVED_SHUTDOWN)) { |
4147 | { | ||
4148 | return(-1); /* return WANT_READ */ | 4064 | return(-1); /* return WANT_READ */ |
4149 | } | ||
4150 | } | 4065 | } |
4066 | } | ||
4151 | 4067 | ||
4152 | if ((s->shutdown == (SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN)) && | 4068 | if ((s->shutdown == (SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN)) && |
4153 | !s->s3->alert_dispatch) | 4069 | !s->s3->alert_dispatch) |
4154 | return(1); | 4070 | return (1); |
4155 | else | 4071 | else |
4156 | return(0); | 4072 | return (0); |
4157 | } | 4073 | } |
4158 | 4074 | ||
4159 | int ssl3_write(SSL *s, const void *buf, int len) | 4075 | int |
4160 | { | 4076 | ssl3_write(SSL *s, const void *buf, int len) |
4161 | int ret,n; | 4077 | { |
4078 | int ret, n; | ||
4162 | 4079 | ||
4163 | #if 0 | 4080 | #if 0 |
4164 | if (s->shutdown & SSL_SEND_SHUTDOWN) | 4081 | if (s->shutdown & SSL_SEND_SHUTDOWN) { |
4165 | { | 4082 | s->rwstate = SSL_NOTHING; |
4166 | s->rwstate=SSL_NOTHING; | 4083 | return (0); |
4167 | return(0); | 4084 | } |
4168 | } | ||
4169 | #endif | 4085 | #endif |
4170 | errno = 0; | 4086 | errno = 0; |
4171 | if (s->s3->renegotiate) ssl3_renegotiate_check(s); | 4087 | if (s->s3->renegotiate) |
4088 | ssl3_renegotiate_check(s); | ||
4172 | 4089 | ||
4173 | /* This is an experimental flag that sends the | 4090 | /* This is an experimental flag that sends the |
4174 | * last handshake message in the same packet as the first | 4091 | * last handshake message in the same packet as the first |
4175 | * use data - used to see if it helps the TCP protocol during | 4092 | * use data - used to see if it helps the TCP protocol during |
4176 | * session-id reuse */ | 4093 | * session-id reuse */ |
4177 | /* The second test is because the buffer may have been removed */ | 4094 | /* The second test is because the buffer may have been removed */ |
4178 | if ((s->s3->flags & SSL3_FLAGS_POP_BUFFER) && (s->wbio == s->bbio)) | 4095 | if ((s->s3->flags & SSL3_FLAGS_POP_BUFFER) && (s->wbio == s->bbio)) { |
4179 | { | ||
4180 | /* First time through, we write into the buffer */ | 4096 | /* First time through, we write into the buffer */ |
4181 | if (s->s3->delay_buf_pop_ret == 0) | 4097 | if (s->s3->delay_buf_pop_ret == 0) { |
4182 | { | 4098 | ret = ssl3_write_bytes(s, SSL3_RT_APPLICATION_DATA, |
4183 | ret=ssl3_write_bytes(s,SSL3_RT_APPLICATION_DATA, | 4099 | buf, len); |
4184 | buf,len); | 4100 | if (ret <= 0) |
4185 | if (ret <= 0) return(ret); | 4101 | return (ret); |
4186 | 4102 | ||
4187 | s->s3->delay_buf_pop_ret=ret; | 4103 | s->s3->delay_buf_pop_ret = ret; |
4188 | } | 4104 | } |
4189 | 4105 | ||
4190 | s->rwstate=SSL_WRITING; | 4106 | s->rwstate = SSL_WRITING; |
4191 | n=BIO_flush(s->wbio); | 4107 | n = BIO_flush(s->wbio); |
4192 | if (n <= 0) return(n); | 4108 | if (n <= 0) |
4193 | s->rwstate=SSL_NOTHING; | 4109 | return (n); |
4110 | s->rwstate = SSL_NOTHING; | ||
4194 | 4111 | ||
4195 | /* We have flushed the buffer, so remove it */ | 4112 | /* We have flushed the buffer, so remove it */ |
4196 | ssl_free_wbio_buffer(s); | 4113 | ssl_free_wbio_buffer(s); |
4197 | s->s3->flags&= ~SSL3_FLAGS_POP_BUFFER; | 4114 | s->s3->flags&= ~SSL3_FLAGS_POP_BUFFER; |
4198 | 4115 | ||
4199 | ret=s->s3->delay_buf_pop_ret; | 4116 | ret = s->s3->delay_buf_pop_ret; |
4200 | s->s3->delay_buf_pop_ret=0; | 4117 | s->s3->delay_buf_pop_ret = 0; |
4201 | } | 4118 | } else { |
4202 | else | 4119 | ret = s->method->ssl_write_bytes(s, SSL3_RT_APPLICATION_DATA, |
4203 | { | 4120 | buf, len); |
4204 | ret=s->method->ssl_write_bytes(s,SSL3_RT_APPLICATION_DATA, | 4121 | if (ret <= 0) |
4205 | buf,len); | 4122 | return (ret); |
4206 | if (ret <= 0) return(ret); | ||
4207 | } | ||
4208 | |||
4209 | return(ret); | ||
4210 | } | 4123 | } |
4211 | 4124 | ||
4212 | static int ssl3_read_internal(SSL *s, void *buf, int len, int peek) | 4125 | return (ret); |
4213 | { | 4126 | } |
4127 | |||
4128 | static int | ||
4129 | ssl3_read_internal(SSL *s, void *buf, int len, int peek) | ||
4130 | { | ||
4214 | int ret; | 4131 | int ret; |
4215 | 4132 | ||
4216 | errno = 0; | 4133 | errno = 0; |
4217 | if (s->s3->renegotiate) ssl3_renegotiate_check(s); | 4134 | if (s->s3->renegotiate) |
4218 | s->s3->in_read_app_data=1; | 4135 | ssl3_renegotiate_check(s); |
4219 | ret=s->method->ssl_read_bytes(s,SSL3_RT_APPLICATION_DATA,buf,len,peek); | 4136 | s->s3->in_read_app_data = 1; |
4220 | if ((ret == -1) && (s->s3->in_read_app_data == 2)) | 4137 | ret = s->method->ssl_read_bytes(s, SSL3_RT_APPLICATION_DATA, buf, len, peek); |
4221 | { | 4138 | if ((ret == -1) && (s->s3->in_read_app_data == 2)) { |
4222 | /* ssl3_read_bytes decided to call s->handshake_func, which | 4139 | /* ssl3_read_bytes decided to call s->handshake_func, which |
4223 | * called ssl3_read_bytes to read handshake data. | 4140 | * called ssl3_read_bytes to read handshake data. |
4224 | * However, ssl3_read_bytes actually found application data | 4141 | * However, ssl3_read_bytes actually found application data |
4225 | * and thinks that application data makes sense here; so disable | 4142 | * and thinks that application data makes sense here; so disable |
4226 | * handshake processing and try to read application data again. */ | 4143 | * handshake processing and try to read application data again. */ |
4227 | s->in_handshake++; | 4144 | s->in_handshake++; |
4228 | ret=s->method->ssl_read_bytes(s,SSL3_RT_APPLICATION_DATA,buf,len,peek); | 4145 | ret = s->method->ssl_read_bytes(s, SSL3_RT_APPLICATION_DATA, buf, len, peek); |
4229 | s->in_handshake--; | 4146 | s->in_handshake--; |
4230 | } | 4147 | } else |
4231 | else | 4148 | s->s3->in_read_app_data = 0; |
4232 | s->s3->in_read_app_data=0; | ||
4233 | 4149 | ||
4234 | return(ret); | 4150 | return (ret); |
4235 | } | 4151 | } |
4236 | 4152 | ||
4237 | int ssl3_read(SSL *s, void *buf, int len) | 4153 | int |
4238 | { | 4154 | ssl3_read(SSL *s, void *buf, int len) |
4155 | { | ||
4239 | return ssl3_read_internal(s, buf, len, 0); | 4156 | return ssl3_read_internal(s, buf, len, 0); |
4240 | } | 4157 | } |
4241 | 4158 | ||
4242 | int ssl3_peek(SSL *s, void *buf, int len) | 4159 | int |
4243 | { | 4160 | ssl3_peek(SSL *s, void *buf, int len) |
4161 | { | ||
4244 | return ssl3_read_internal(s, buf, len, 1); | 4162 | return ssl3_read_internal(s, buf, len, 1); |
4245 | } | 4163 | } |
4246 | 4164 | ||
4247 | int ssl3_renegotiate(SSL *s) | 4165 | int |
4248 | { | 4166 | ssl3_renegotiate(SSL *s) |
4167 | { | ||
4249 | if (s->handshake_func == NULL) | 4168 | if (s->handshake_func == NULL) |
4250 | return(1); | 4169 | return (1); |
4251 | 4170 | ||
4252 | if (s->s3->flags & SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS) | 4171 | if (s->s3->flags & SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS) |
4253 | return(0); | 4172 | return (0); |
4254 | 4173 | ||
4255 | s->s3->renegotiate=1; | 4174 | s->s3->renegotiate = 1; |
4256 | return(1); | 4175 | return (1); |
4257 | } | 4176 | } |
4258 | 4177 | ||
4259 | int ssl3_renegotiate_check(SSL *s) | 4178 | int |
4260 | { | 4179 | ssl3_renegotiate_check(SSL *s) |
4261 | int ret=0; | 4180 | { |
4181 | int ret = 0; | ||
4262 | 4182 | ||
4263 | if (s->s3->renegotiate) | 4183 | if (s->s3->renegotiate) { |
4264 | { | 4184 | if ((s->s3->rbuf.left == 0) && (s->s3->wbuf.left == 0) && |
4265 | if ( (s->s3->rbuf.left == 0) && | 4185 | !SSL_in_init(s)) { |
4266 | (s->s3->wbuf.left == 0) && | ||
4267 | !SSL_in_init(s)) | ||
4268 | { | ||
4269 | /* | 4186 | /* |
4270 | if we are the server, and we have sent a 'RENEGOTIATE' message, we | 4187 | if we are the server, and we have sent a 'RENEGOTIATE' message, we |
4271 | need to go to SSL_ST_ACCEPT. | 4188 | need to go to SSL_ST_ACCEPT. |
4272 | */ | 4189 | */ |
4273 | /* SSL_ST_ACCEPT */ | 4190 | /* SSL_ST_ACCEPT */ |
4274 | s->state=SSL_ST_RENEGOTIATE; | 4191 | s->state = SSL_ST_RENEGOTIATE; |
4275 | s->s3->renegotiate=0; | 4192 | s->s3->renegotiate = 0; |
4276 | s->s3->num_renegotiations++; | 4193 | s->s3->num_renegotiations++; |
4277 | s->s3->total_renegotiations++; | 4194 | s->s3->total_renegotiations++; |
4278 | ret=1; | 4195 | ret = 1; |
4279 | } | ||
4280 | } | 4196 | } |
4281 | return(ret); | ||
4282 | } | 4197 | } |
4198 | return (ret); | ||
4199 | } | ||
4283 | /* If we are using TLS v1.2 or later and default SHA1+MD5 algorithms switch | 4200 | /* If we are using TLS v1.2 or later and default SHA1+MD5 algorithms switch |
4284 | * to new SHA256 PRF and handshake macs | 4201 | * to new SHA256 PRF and handshake macs |
4285 | */ | 4202 | */ |
4286 | long ssl_get_algorithm2(SSL *s) | 4203 | long |
4287 | { | 4204 | ssl_get_algorithm2(SSL *s) |
4205 | { | ||
4288 | long alg2 = s->s3->tmp.new_cipher->algorithm2; | 4206 | long alg2 = s->s3->tmp.new_cipher->algorithm2; |
4289 | if (s->method->version == TLS1_2_VERSION && | 4207 | if (s->method->version == TLS1_2_VERSION && |
4290 | alg2 == (SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF)) | 4208 | alg2 == (SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF)) |
4291 | return SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256; | 4209 | return SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256; |
4292 | return alg2; | 4210 | return alg2; |
4293 | } | 4211 | } |
4294 | |||
diff --git a/src/lib/libssl/src/ssl/s3_meth.c b/src/lib/libssl/src/ssl/s3_meth.c index cdddb17b62..ff3b0d3303 100644 --- a/src/lib/libssl/src/ssl/s3_meth.c +++ b/src/lib/libssl/src/ssl/s3_meth.c | |||
@@ -61,17 +61,15 @@ | |||
61 | #include "ssl_locl.h" | 61 | #include "ssl_locl.h" |
62 | 62 | ||
63 | static const SSL_METHOD *ssl3_get_method(int ver); | 63 | static const SSL_METHOD *ssl3_get_method(int ver); |
64 | static const SSL_METHOD *ssl3_get_method(int ver) | 64 | static const SSL_METHOD |
65 | { | 65 | *ssl3_get_method(int ver) |
66 | { | ||
66 | if (ver == SSL3_VERSION) | 67 | if (ver == SSL3_VERSION) |
67 | return(SSLv3_method()); | 68 | return (SSLv3_method()); |
68 | else | 69 | else |
69 | return(NULL); | 70 | return (NULL); |
70 | } | 71 | } |
71 | 72 | ||
72 | IMPLEMENT_ssl3_meth_func(SSLv3_method, | 73 | IMPLEMENT_ssl3_meth_func(SSLv3_method, |
73 | ssl3_accept, | 74 | ssl3_accept, ssl3_connect, ssl3_get_method) |
74 | ssl3_connect, | ||
75 | ssl3_get_method) | ||
76 | |||
77 | 75 | ||
diff --git a/src/lib/libssl/src/ssl/s3_pkt.c b/src/lib/libssl/src/ssl/s3_pkt.c index 6b55d21a3e..6c677d9f6b 100644 --- a/src/lib/libssl/src/ssl/s3_pkt.c +++ b/src/lib/libssl/src/ssl/s3_pkt.c | |||
@@ -118,11 +118,12 @@ | |||
118 | #include <openssl/rand.h> | 118 | #include <openssl/rand.h> |
119 | 119 | ||
120 | static int do_ssl3_write(SSL *s, int type, const unsigned char *buf, | 120 | static int do_ssl3_write(SSL *s, int type, const unsigned char *buf, |
121 | unsigned int len, int create_empty_fragment); | 121 | unsigned int len, int create_empty_fragment); |
122 | static int ssl3_get_record(SSL *s); | 122 | static int ssl3_get_record(SSL *s); |
123 | 123 | ||
124 | int ssl3_read_n(SSL *s, int n, int max, int extend) | 124 | int |
125 | { | 125 | ssl3_read_n(SSL *s, int n, int max, int extend) |
126 | { | ||
126 | /* If extend == 0, obtain new n-byte packet; if extend == 1, increase | 127 | /* If extend == 0, obtain new n-byte packet; if extend == 1, increase |
127 | * packet by another n bytes. | 128 | * packet by another n bytes. |
128 | * The packet will be in the sub-array of s->s3->rbuf.buf specified | 129 | * The packet will be in the sub-array of s->s3->rbuf.buf specified |
@@ -130,37 +131,35 @@ int ssl3_read_n(SSL *s, int n, int max, int extend) | |||
130 | * (If s->read_ahead is set, 'max' bytes may be stored in rbuf | 131 | * (If s->read_ahead is set, 'max' bytes may be stored in rbuf |
131 | * [plus s->packet_length bytes if extend == 1].) | 132 | * [plus s->packet_length bytes if extend == 1].) |
132 | */ | 133 | */ |
133 | int i,len,left; | 134 | int i, len, left; |
134 | long align=0; | 135 | long align = 0; |
135 | unsigned char *pkt; | 136 | unsigned char *pkt; |
136 | SSL3_BUFFER *rb; | 137 | SSL3_BUFFER *rb; |
137 | 138 | ||
138 | if (n <= 0) return n; | 139 | if (n <= 0) |
140 | return n; | ||
139 | 141 | ||
140 | rb = &(s->s3->rbuf); | 142 | rb = &(s->s3->rbuf); |
141 | if (rb->buf == NULL) | 143 | if (rb->buf == NULL) |
142 | if (!ssl3_setup_read_buffer(s)) | 144 | if (!ssl3_setup_read_buffer(s)) |
143 | return -1; | 145 | return -1; |
144 | 146 | ||
145 | left = rb->left; | 147 | left = rb->left; |
146 | #if defined(SSL3_ALIGN_PAYLOAD) && SSL3_ALIGN_PAYLOAD!=0 | 148 | #if defined(SSL3_ALIGN_PAYLOAD) && SSL3_ALIGN_PAYLOAD!=0 |
147 | align = (long)rb->buf + SSL3_RT_HEADER_LENGTH; | 149 | align = (long)rb->buf + SSL3_RT_HEADER_LENGTH; |
148 | align = (-align)&(SSL3_ALIGN_PAYLOAD-1); | 150 | align = (-align)&(SSL3_ALIGN_PAYLOAD - 1); |
149 | #endif | 151 | #endif |
150 | 152 | ||
151 | if (!extend) | 153 | if (!extend) { |
152 | { | ||
153 | /* start with empty packet ... */ | 154 | /* start with empty packet ... */ |
154 | if (left == 0) | 155 | if (left == 0) |
155 | rb->offset = align; | 156 | rb->offset = align; |
156 | else if (align != 0 && left >= SSL3_RT_HEADER_LENGTH) | 157 | else if (align != 0 && left >= SSL3_RT_HEADER_LENGTH) { |
157 | { | ||
158 | /* check if next packet length is large | 158 | /* check if next packet length is large |
159 | * enough to justify payload alignment... */ | 159 | * enough to justify payload alignment... */ |
160 | pkt = rb->buf + rb->offset; | 160 | pkt = rb->buf + rb->offset; |
161 | if (pkt[0] == SSL3_RT_APPLICATION_DATA | 161 | if (pkt[0] == SSL3_RT_APPLICATION_DATA |
162 | && (pkt[3]<<8|pkt[4]) >= 128) | 162 | && (pkt[3]<<8|pkt[4]) >= 128) { |
163 | { | ||
164 | /* Note that even if packet is corrupted | 163 | /* Note that even if packet is corrupted |
165 | * and its length field is insane, we can | 164 | * and its length field is insane, we can |
166 | * only be led to wrong decision about | 165 | * only be led to wrong decision about |
@@ -168,109 +167,100 @@ int ssl3_read_n(SSL *s, int n, int max, int extend) | |||
168 | * Header values has no effect on memmove | 167 | * Header values has no effect on memmove |
169 | * arguments and therefore no buffer | 168 | * arguments and therefore no buffer |
170 | * overrun can be triggered. */ | 169 | * overrun can be triggered. */ |
171 | memmove (rb->buf+align,pkt,left); | 170 | memmove (rb->buf + align, pkt, left); |
172 | rb->offset = align; | 171 | rb->offset = align; |
173 | } | ||
174 | } | 172 | } |
173 | } | ||
175 | s->packet = rb->buf + rb->offset; | 174 | s->packet = rb->buf + rb->offset; |
176 | s->packet_length = 0; | 175 | s->packet_length = 0; |
177 | /* ... now we can act as if 'extend' was set */ | 176 | /* ... now we can act as if 'extend' was set */ |
178 | } | 177 | } |
179 | 178 | ||
180 | /* For DTLS/UDP reads should not span multiple packets | 179 | /* For DTLS/UDP reads should not span multiple packets |
181 | * because the read operation returns the whole packet | 180 | * because the read operation returns the whole packet |
182 | * at once (as long as it fits into the buffer). */ | 181 | * at once (as long as it fits into the buffer). */ |
183 | if (SSL_version(s) == DTLS1_VERSION || SSL_version(s) == DTLS1_BAD_VER) | 182 | if (SSL_version(s) == DTLS1_VERSION || SSL_version(s) == DTLS1_BAD_VER) { |
184 | { | ||
185 | if (left > 0 && n > left) | 183 | if (left > 0 && n > left) |
186 | n = left; | 184 | n = left; |
187 | } | 185 | } |
188 | 186 | ||
189 | /* if there is enough in the buffer from a previous read, take some */ | 187 | /* if there is enough in the buffer from a previous read, take some */ |
190 | if (left >= n) | 188 | if (left >= n) { |
191 | { | 189 | s->packet_length += n; |
192 | s->packet_length+=n; | 190 | rb->left = left - n; |
193 | rb->left=left-n; | 191 | rb->offset += n; |
194 | rb->offset+=n; | 192 | return (n); |
195 | return(n); | 193 | } |
196 | } | ||
197 | 194 | ||
198 | /* else we need to read more data */ | 195 | /* else we need to read more data */ |
199 | 196 | ||
200 | len = s->packet_length; | 197 | len = s->packet_length; |
201 | pkt = rb->buf+align; | 198 | pkt = rb->buf + align; |
202 | /* Move any available bytes to front of buffer: | 199 | /* Move any available bytes to front of buffer: |
203 | * 'len' bytes already pointed to by 'packet', | 200 | * 'len' bytes already pointed to by 'packet', |
204 | * 'left' extra ones at the end */ | 201 | * 'left' extra ones at the end */ |
205 | if (s->packet != pkt) /* len > 0 */ | 202 | if (s->packet != pkt) /* len > 0 */ |
206 | { | 203 | { |
207 | memmove(pkt, s->packet, len+left); | 204 | memmove(pkt, s->packet, len + left); |
208 | s->packet = pkt; | 205 | s->packet = pkt; |
209 | rb->offset = len + align; | 206 | rb->offset = len + align; |
210 | } | 207 | } |
211 | 208 | ||
212 | if (n > (int)(rb->len - rb->offset)) /* does not happen */ | 209 | if (n > (int)(rb->len - rb->offset)) /* does not happen */ |
213 | { | 210 | { |
214 | SSLerr(SSL_F_SSL3_READ_N,ERR_R_INTERNAL_ERROR); | 211 | SSLerr(SSL_F_SSL3_READ_N, ERR_R_INTERNAL_ERROR); |
215 | return -1; | 212 | return -1; |
216 | } | 213 | } |
217 | 214 | ||
218 | if (!s->read_ahead) | 215 | if (!s->read_ahead) |
219 | /* ignore max parameter */ | 216 | /* ignore max parameter */ |
220 | max = n; | 217 | max = n; |
221 | else | 218 | else { |
222 | { | ||
223 | if (max < n) | 219 | if (max < n) |
224 | max = n; | 220 | max = n; |
225 | if (max > (int)(rb->len - rb->offset)) | 221 | if (max > (int)(rb->len - rb->offset)) |
226 | max = rb->len - rb->offset; | 222 | max = rb->len - rb->offset; |
227 | } | 223 | } |
228 | 224 | ||
229 | while (left < n) | 225 | while (left < n) { |
230 | { | ||
231 | /* Now we have len+left bytes at the front of s->s3->rbuf.buf | 226 | /* Now we have len+left bytes at the front of s->s3->rbuf.buf |
232 | * and need to read in more until we have len+n (up to | 227 | * and need to read in more until we have len+n (up to |
233 | * len+max if possible) */ | 228 | * len+max if possible) */ |
234 | 229 | ||
235 | errno = 0; | 230 | errno = 0; |
236 | if (s->rbio != NULL) | 231 | if (s->rbio != NULL) { |
237 | { | 232 | s->rwstate = SSL_READING; |
238 | s->rwstate=SSL_READING; | 233 | i = BIO_read(s->rbio, pkt + len + left, max - left); |
239 | i=BIO_read(s->rbio,pkt+len+left, max-left); | 234 | } else { |
240 | } | 235 | SSLerr(SSL_F_SSL3_READ_N, SSL_R_READ_BIO_NOT_SET); |
241 | else | ||
242 | { | ||
243 | SSLerr(SSL_F_SSL3_READ_N,SSL_R_READ_BIO_NOT_SET); | ||
244 | i = -1; | 236 | i = -1; |
245 | } | 237 | } |
246 | 238 | ||
247 | if (i <= 0) | 239 | if (i <= 0) { |
248 | { | ||
249 | rb->left = left; | 240 | rb->left = left; |
250 | if (s->mode & SSL_MODE_RELEASE_BUFFERS && | 241 | if (s->mode & SSL_MODE_RELEASE_BUFFERS && |
251 | SSL_version(s) != DTLS1_VERSION && SSL_version(s) != DTLS1_BAD_VER) | 242 | SSL_version(s) != DTLS1_VERSION && SSL_version(s) != DTLS1_BAD_VER) |
252 | if (len+left == 0) | 243 | if (len + left == 0) |
253 | ssl3_release_read_buffer(s); | 244 | ssl3_release_read_buffer(s); |
254 | return(i); | 245 | return (i); |
255 | } | 246 | } |
256 | left+=i; | 247 | left += i; |
257 | /* reads should *never* span multiple packets for DTLS because | 248 | /* reads should *never* span multiple packets for DTLS because |
258 | * the underlying transport protocol is message oriented as opposed | 249 | * the underlying transport protocol is message oriented as opposed |
259 | * to byte oriented as in the TLS case. */ | 250 | * to byte oriented as in the TLS case. */ |
260 | if (SSL_version(s) == DTLS1_VERSION || SSL_version(s) == DTLS1_BAD_VER) | 251 | if (SSL_version(s) == DTLS1_VERSION || SSL_version(s) == DTLS1_BAD_VER) { |
261 | { | ||
262 | if (n > left) | 252 | if (n > left) |
263 | n = left; /* makes the while condition false */ | 253 | n = left; /* makes the while condition false */ |
264 | } | ||
265 | } | 254 | } |
255 | } | ||
266 | 256 | ||
267 | /* done reading, now the book-keeping */ | 257 | /* done reading, now the book-keeping */ |
268 | rb->offset += n; | 258 | rb->offset += n; |
269 | rb->left = left - n; | 259 | rb->left = left - n; |
270 | s->packet_length += n; | 260 | s->packet_length += n; |
271 | s->rwstate=SSL_NOTHING; | 261 | s->rwstate = SSL_NOTHING; |
272 | return(n); | 262 | return (n); |
273 | } | 263 | } |
274 | 264 | ||
275 | /* Call this to get a new input record. | 265 | /* Call this to get a new input record. |
276 | * It will return <= 0 if more data is needed, normally due to an error | 266 | * It will return <= 0 if more data is needed, normally due to an error |
@@ -281,10 +271,11 @@ int ssl3_read_n(SSL *s, int n, int max, int extend) | |||
281 | * ssl->s3->rrec.length, - number of bytes | 271 | * ssl->s3->rrec.length, - number of bytes |
282 | */ | 272 | */ |
283 | /* used only by ssl3_read_bytes */ | 273 | /* used only by ssl3_read_bytes */ |
284 | static int ssl3_get_record(SSL *s) | 274 | static int |
285 | { | 275 | ssl3_get_record(SSL *s) |
286 | int ssl_major,ssl_minor,al; | 276 | { |
287 | int enc_err,n,i,ret= -1; | 277 | int ssl_major, ssl_minor, al; |
278 | int enc_err, n, i, ret = -1; | ||
288 | SSL3_RECORD *rr; | 279 | SSL3_RECORD *rr; |
289 | SSL_SESSION *sess; | 280 | SSL_SESSION *sess; |
290 | unsigned char *p; | 281 | unsigned char *p; |
@@ -293,90 +284,83 @@ static int ssl3_get_record(SSL *s) | |||
293 | unsigned mac_size, orig_len; | 284 | unsigned mac_size, orig_len; |
294 | size_t extra; | 285 | size_t extra; |
295 | 286 | ||
296 | rr= &(s->s3->rrec); | 287 | rr = &(s->s3->rrec); |
297 | sess=s->session; | 288 | sess = s->session; |
298 | 289 | ||
299 | if (s->options & SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER) | 290 | if (s->options & SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER) |
300 | extra=SSL3_RT_MAX_EXTRA; | 291 | extra = SSL3_RT_MAX_EXTRA; |
301 | else | 292 | else |
302 | extra=0; | 293 | extra = 0; |
303 | if (extra && !s->s3->init_extra) | 294 | if (extra && !s->s3->init_extra) { |
304 | { | ||
305 | /* An application error: SLS_OP_MICROSOFT_BIG_SSLV3_BUFFER | 295 | /* An application error: SLS_OP_MICROSOFT_BIG_SSLV3_BUFFER |
306 | * set after ssl3_setup_buffers() was done */ | 296 | * set after ssl3_setup_buffers() was done */ |
307 | SSLerr(SSL_F_SSL3_GET_RECORD, ERR_R_INTERNAL_ERROR); | 297 | SSLerr(SSL_F_SSL3_GET_RECORD, ERR_R_INTERNAL_ERROR); |
308 | return -1; | 298 | return -1; |
309 | } | 299 | } |
310 | 300 | ||
311 | again: | 301 | again: |
312 | /* check if we have the header */ | 302 | /* check if we have the header */ |
313 | if ( (s->rstate != SSL_ST_READ_BODY) || | 303 | if ((s->rstate != SSL_ST_READ_BODY) || |
314 | (s->packet_length < SSL3_RT_HEADER_LENGTH)) | 304 | (s->packet_length < SSL3_RT_HEADER_LENGTH)) { |
315 | { | 305 | n = ssl3_read_n(s, SSL3_RT_HEADER_LENGTH, s->s3->rbuf.len, 0); |
316 | n=ssl3_read_n(s, SSL3_RT_HEADER_LENGTH, s->s3->rbuf.len, 0); | ||
317 | if (n <= 0) return(n); /* error or non-blocking */ | 306 | if (n <= 0) return(n); /* error or non-blocking */ |
318 | s->rstate=SSL_ST_READ_BODY; | 307 | s->rstate = SSL_ST_READ_BODY; |
319 | 308 | ||
320 | p=s->packet; | 309 | p = s->packet; |
321 | 310 | ||
322 | /* Pull apart the header into the SSL3_RECORD */ | 311 | /* Pull apart the header into the SSL3_RECORD */ |
323 | rr->type= *(p++); | 312 | rr->type= *(p++); |
324 | ssl_major= *(p++); | 313 | ssl_major= *(p++); |
325 | ssl_minor= *(p++); | 314 | ssl_minor= *(p++); |
326 | version=(ssl_major<<8)|ssl_minor; | 315 | version = (ssl_major << 8)|ssl_minor; |
327 | n2s(p,rr->length); | 316 | n2s(p, rr->length); |
328 | #if 0 | 317 | #if 0 |
329 | fprintf(stderr, "Record type=%d, Length=%d\n", rr->type, rr->length); | 318 | fprintf(stderr, "Record type=%d, Length=%d\n", rr->type, rr->length); |
330 | #endif | 319 | #endif |
331 | 320 | ||
332 | /* Lets check version */ | 321 | /* Lets check version */ |
333 | if (!s->first_packet) | 322 | if (!s->first_packet) { |
334 | { | 323 | if (version != s->version) { |
335 | if (version != s->version) | 324 | SSLerr(SSL_F_SSL3_GET_RECORD, SSL_R_WRONG_VERSION_NUMBER); |
336 | { | 325 | if ((s->version & 0xFF00) == (version & 0xFF00) && !s->enc_write_ctx && !s->write_hash) |
337 | SSLerr(SSL_F_SSL3_GET_RECORD,SSL_R_WRONG_VERSION_NUMBER); | 326 | /* Send back error using their minor version number :-) */ |
338 | if ((s->version & 0xFF00) == (version & 0xFF00) && !s->enc_write_ctx && !s->write_hash) | 327 | s->version = (unsigned short)version; |
339 | /* Send back error using their minor version number :-) */ | 328 | al = SSL_AD_PROTOCOL_VERSION; |
340 | s->version = (unsigned short)version; | ||
341 | al=SSL_AD_PROTOCOL_VERSION; | ||
342 | goto f_err; | 329 | goto f_err; |
343 | } | ||
344 | } | 330 | } |
331 | } | ||
345 | 332 | ||
346 | if ((version>>8) != SSL3_VERSION_MAJOR) | 333 | if ((version >> 8) != SSL3_VERSION_MAJOR) { |
347 | { | 334 | SSLerr(SSL_F_SSL3_GET_RECORD, SSL_R_WRONG_VERSION_NUMBER); |
348 | SSLerr(SSL_F_SSL3_GET_RECORD,SSL_R_WRONG_VERSION_NUMBER); | ||
349 | goto err; | 335 | goto err; |
350 | } | 336 | } |
351 | 337 | ||
352 | if (rr->length > s->s3->rbuf.len - SSL3_RT_HEADER_LENGTH) | 338 | if (rr->length > s->s3->rbuf.len - SSL3_RT_HEADER_LENGTH) { |
353 | { | 339 | al = SSL_AD_RECORD_OVERFLOW; |
354 | al=SSL_AD_RECORD_OVERFLOW; | 340 | SSLerr(SSL_F_SSL3_GET_RECORD, SSL_R_PACKET_LENGTH_TOO_LONG); |
355 | SSLerr(SSL_F_SSL3_GET_RECORD,SSL_R_PACKET_LENGTH_TOO_LONG); | ||
356 | goto f_err; | 341 | goto f_err; |
357 | } | 342 | } |
358 | 343 | ||
359 | /* now s->rstate == SSL_ST_READ_BODY */ | 344 | /* now s->rstate == SSL_ST_READ_BODY */ |
360 | } | 345 | } |
361 | 346 | ||
362 | /* s->rstate == SSL_ST_READ_BODY, get and decode the data */ | 347 | /* s->rstate == SSL_ST_READ_BODY, get and decode the data */ |
363 | 348 | ||
364 | if (rr->length > s->packet_length-SSL3_RT_HEADER_LENGTH) | 349 | if (rr->length > s->packet_length - SSL3_RT_HEADER_LENGTH) { |
365 | { | ||
366 | /* now s->packet_length == SSL3_RT_HEADER_LENGTH */ | 350 | /* now s->packet_length == SSL3_RT_HEADER_LENGTH */ |
367 | i=rr->length; | 351 | i = rr->length; |
368 | n=ssl3_read_n(s,i,i,1); | 352 | n = ssl3_read_n(s, i, i, 1); |
369 | if (n <= 0) return(n); /* error or non-blocking io */ | 353 | if (n <= 0) return(n); /* error or non-blocking io */ |
370 | /* now n == rr->length, | 354 | /* now n == rr->length, |
371 | * and s->packet_length == SSL3_RT_HEADER_LENGTH + rr->length */ | 355 | * and s->packet_length == SSL3_RT_HEADER_LENGTH + rr->length */ |
372 | } | 356 | } |
373 | 357 | ||
374 | s->rstate=SSL_ST_READ_HEADER; /* set state for later operations */ | 358 | s->rstate=SSL_ST_READ_HEADER; /* set state for later operations */ |
375 | 359 | ||
376 | /* At this point, s->packet_length == SSL3_RT_HEADER_LNGTH + rr->length, | 360 | /* At this point, s->packet_length == SSL3_RT_HEADER_LNGTH + rr->length, |
377 | * and we have that many bytes in s->packet | 361 | * and we have that many bytes in s->packet |
378 | */ | 362 | */ |
379 | rr->input= &(s->packet[SSL3_RT_HEADER_LENGTH]); | 363 | rr->input = &(s->packet[SSL3_RT_HEADER_LENGTH]); |
380 | 364 | ||
381 | /* ok, we can now read from 's->packet' data into 'rr' | 365 | /* ok, we can now read from 's->packet' data into 'rr' |
382 | * rr->input points at rr->length bytes, which | 366 | * rr->input points at rr->length bytes, which |
@@ -389,47 +373,43 @@ fprintf(stderr, "Record type=%d, Length=%d\n", rr->type, rr->length); | |||
389 | * rr->length bytes of encrypted compressed stuff. */ | 373 | * rr->length bytes of encrypted compressed stuff. */ |
390 | 374 | ||
391 | /* check is not needed I believe */ | 375 | /* check is not needed I believe */ |
392 | if (rr->length > SSL3_RT_MAX_ENCRYPTED_LENGTH+extra) | 376 | if (rr->length > SSL3_RT_MAX_ENCRYPTED_LENGTH + extra) { |
393 | { | 377 | al = SSL_AD_RECORD_OVERFLOW; |
394 | al=SSL_AD_RECORD_OVERFLOW; | 378 | SSLerr(SSL_F_SSL3_GET_RECORD, SSL_R_ENCRYPTED_LENGTH_TOO_LONG); |
395 | SSLerr(SSL_F_SSL3_GET_RECORD,SSL_R_ENCRYPTED_LENGTH_TOO_LONG); | ||
396 | goto f_err; | 379 | goto f_err; |
397 | } | 380 | } |
398 | 381 | ||
399 | /* decrypt in place in 'rr->input' */ | 382 | /* decrypt in place in 'rr->input' */ |
400 | rr->data=rr->input; | 383 | rr->data = rr->input; |
401 | 384 | ||
402 | enc_err = s->method->ssl3_enc->enc(s,0); | 385 | enc_err = s->method->ssl3_enc->enc(s, 0); |
403 | /* enc_err is: | 386 | /* enc_err is: |
404 | * 0: (in non-constant time) if the record is publically invalid. | 387 | * 0: (in non-constant time) if the record is publically invalid. |
405 | * 1: if the padding is valid | 388 | * 1: if the padding is valid |
406 | * -1: if the padding is invalid */ | 389 | * -1: if the padding is invalid */ |
407 | if (enc_err == 0) | 390 | if (enc_err == 0) { |
408 | { | 391 | al = SSL_AD_DECRYPTION_FAILED; |
409 | al=SSL_AD_DECRYPTION_FAILED; | 392 | SSLerr(SSL_F_SSL3_GET_RECORD, SSL_R_BLOCK_CIPHER_PAD_IS_WRONG); |
410 | SSLerr(SSL_F_SSL3_GET_RECORD,SSL_R_BLOCK_CIPHER_PAD_IS_WRONG); | ||
411 | goto f_err; | 393 | goto f_err; |
412 | } | 394 | } |
413 | 395 | ||
414 | #ifdef TLS_DEBUG | 396 | #ifdef TLS_DEBUG |
415 | printf("dec %d\n",rr->length); | 397 | printf("dec %d\n", rr->length); |
416 | { unsigned int z; for (z=0; z<rr->length; z++) printf("%02X%c",rr->data[z],((z+1)%16)?' ':'\n'); } | 398 | { unsigned int z; for (z = 0; z<rr->length; z++) printf("%02X%c", rr->data[z],((z+1)%16)?' ':'\n'); } |
417 | printf("\n"); | 399 | printf("\n"); |
418 | #endif | 400 | #endif |
419 | 401 | ||
420 | /* r->length is now the compressed data plus mac */ | 402 | /* r->length is now the compressed data plus mac */ |
421 | if ((sess != NULL) && | 403 | if ((sess != NULL) && (s->enc_read_ctx != NULL) && |
422 | (s->enc_read_ctx != NULL) && | 404 | (EVP_MD_CTX_md(s->read_hash) != NULL)) { |
423 | (EVP_MD_CTX_md(s->read_hash) != NULL)) | ||
424 | { | ||
425 | /* s->read_hash != NULL => mac_size != -1 */ | 405 | /* s->read_hash != NULL => mac_size != -1 */ |
426 | unsigned char *mac = NULL; | 406 | unsigned char *mac = NULL; |
427 | unsigned char mac_tmp[EVP_MAX_MD_SIZE]; | 407 | unsigned char mac_tmp[EVP_MAX_MD_SIZE]; |
428 | mac_size=EVP_MD_CTX_size(s->read_hash); | 408 | mac_size = EVP_MD_CTX_size(s->read_hash); |
429 | OPENSSL_assert(mac_size <= EVP_MAX_MD_SIZE); | 409 | OPENSSL_assert(mac_size <= EVP_MAX_MD_SIZE); |
430 | 410 | ||
431 | /* kludge: *_cbc_remove_padding passes padding length in rr->type */ | 411 | /* kludge: *_cbc_remove_padding passes padding length in rr->type */ |
432 | orig_len = rr->length+((unsigned int)rr->type>>8); | 412 | orig_len = rr->length + ((unsigned int)rr->type >> 8); |
433 | 413 | ||
434 | /* orig_len is the length of the record before any padding was | 414 | /* orig_len is the length of the record before any padding was |
435 | * removed. This is public information, as is the MAC in use, | 415 | * removed. This is public information, as is the MAC in use, |
@@ -437,17 +417,15 @@ printf("\n"); | |||
437 | * amount of time if it's too short to possibly contain a MAC. | 417 | * amount of time if it's too short to possibly contain a MAC. |
438 | */ | 418 | */ |
439 | if (orig_len < mac_size || | 419 | if (orig_len < mac_size || |
440 | /* CBC records must have a padding length byte too. */ | 420 | /* CBC records must have a padding length byte too. */ |
441 | (EVP_CIPHER_CTX_mode(s->enc_read_ctx) == EVP_CIPH_CBC_MODE && | 421 | (EVP_CIPHER_CTX_mode(s->enc_read_ctx) == EVP_CIPH_CBC_MODE && |
442 | orig_len < mac_size+1)) | 422 | orig_len < mac_size + 1)) { |
443 | { | 423 | al = SSL_AD_DECODE_ERROR; |
444 | al=SSL_AD_DECODE_ERROR; | 424 | SSLerr(SSL_F_SSL3_GET_RECORD, SSL_R_LENGTH_TOO_SHORT); |
445 | SSLerr(SSL_F_SSL3_GET_RECORD,SSL_R_LENGTH_TOO_SHORT); | ||
446 | goto f_err; | 425 | goto f_err; |
447 | } | 426 | } |
448 | 427 | ||
449 | if (EVP_CIPHER_CTX_mode(s->enc_read_ctx) == EVP_CIPH_CBC_MODE) | 428 | if (EVP_CIPHER_CTX_mode(s->enc_read_ctx) == EVP_CIPH_CBC_MODE) { |
450 | { | ||
451 | /* We update the length so that the TLS header bytes | 429 | /* We update the length so that the TLS header bytes |
452 | * can be constructed correctly but we need to extract | 430 | * can be constructed correctly but we need to extract |
453 | * the MAC in constant time from within the record, | 431 | * the MAC in constant time from within the record, |
@@ -456,60 +434,53 @@ printf("\n"); | |||
456 | mac = mac_tmp; | 434 | mac = mac_tmp; |
457 | ssl3_cbc_copy_mac(mac_tmp, rr, mac_size, orig_len); | 435 | ssl3_cbc_copy_mac(mac_tmp, rr, mac_size, orig_len); |
458 | rr->length -= mac_size; | 436 | rr->length -= mac_size; |
459 | } | 437 | } else { |
460 | else | ||
461 | { | ||
462 | /* In this case there's no padding, so |orig_len| | 438 | /* In this case there's no padding, so |orig_len| |
463 | * equals |rec->length| and we checked that there's | 439 | * equals |rec->length| and we checked that there's |
464 | * enough bytes for |mac_size| above. */ | 440 | * enough bytes for |mac_size| above. */ |
465 | rr->length -= mac_size; | 441 | rr->length -= mac_size; |
466 | mac = &rr->data[rr->length]; | 442 | mac = &rr->data[rr->length]; |
467 | } | 443 | } |
468 | 444 | ||
469 | i=s->method->ssl3_enc->mac(s,md,0 /* not send */); | 445 | i=s->method->ssl3_enc->mac(s,md,0 /* not send */); |
470 | if (i < 0 || mac == NULL || CRYPTO_memcmp(md, mac, (size_t)mac_size) != 0) | 446 | if (i < 0 || mac == NULL || CRYPTO_memcmp(md, mac, (size_t)mac_size) != 0) |
471 | enc_err = -1; | 447 | enc_err = -1; |
472 | if (rr->length > SSL3_RT_MAX_COMPRESSED_LENGTH+extra+mac_size) | 448 | if (rr->length > SSL3_RT_MAX_COMPRESSED_LENGTH + extra + mac_size) |
473 | enc_err = -1; | 449 | enc_err = -1; |
474 | } | 450 | } |
475 | 451 | ||
476 | if (enc_err < 0) | 452 | if (enc_err < 0) { |
477 | { | ||
478 | /* A separate 'decryption_failed' alert was introduced with TLS 1.0, | 453 | /* A separate 'decryption_failed' alert was introduced with TLS 1.0, |
479 | * SSL 3.0 only has 'bad_record_mac'. But unless a decryption | 454 | * SSL 3.0 only has 'bad_record_mac'. But unless a decryption |
480 | * failure is directly visible from the ciphertext anyway, | 455 | * failure is directly visible from the ciphertext anyway, |
481 | * we should not reveal which kind of error occured -- this | 456 | * we should not reveal which kind of error occured -- this |
482 | * might become visible to an attacker (e.g. via a logfile) */ | 457 | * might become visible to an attacker (e.g. via a logfile) */ |
483 | al=SSL_AD_BAD_RECORD_MAC; | 458 | al = SSL_AD_BAD_RECORD_MAC; |
484 | SSLerr(SSL_F_SSL3_GET_RECORD,SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC); | 459 | SSLerr(SSL_F_SSL3_GET_RECORD, SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC); |
485 | goto f_err; | 460 | goto f_err; |
486 | } | 461 | } |
487 | 462 | ||
488 | /* r->length is now just compressed */ | 463 | /* r->length is now just compressed */ |
489 | if (s->expand != NULL) | 464 | if (s->expand != NULL) { |
490 | { | 465 | if (rr->length > SSL3_RT_MAX_COMPRESSED_LENGTH + extra) { |
491 | if (rr->length > SSL3_RT_MAX_COMPRESSED_LENGTH+extra) | 466 | al = SSL_AD_RECORD_OVERFLOW; |
492 | { | 467 | SSLerr(SSL_F_SSL3_GET_RECORD, SSL_R_COMPRESSED_LENGTH_TOO_LONG); |
493 | al=SSL_AD_RECORD_OVERFLOW; | ||
494 | SSLerr(SSL_F_SSL3_GET_RECORD,SSL_R_COMPRESSED_LENGTH_TOO_LONG); | ||
495 | goto f_err; | 468 | goto f_err; |
496 | } | 469 | } |
497 | if (!ssl3_do_uncompress(s)) | 470 | if (!ssl3_do_uncompress(s)) { |
498 | { | 471 | al = SSL_AD_DECOMPRESSION_FAILURE; |
499 | al=SSL_AD_DECOMPRESSION_FAILURE; | 472 | SSLerr(SSL_F_SSL3_GET_RECORD, SSL_R_BAD_DECOMPRESSION); |
500 | SSLerr(SSL_F_SSL3_GET_RECORD,SSL_R_BAD_DECOMPRESSION); | ||
501 | goto f_err; | 473 | goto f_err; |
502 | } | ||
503 | } | 474 | } |
475 | } | ||
504 | 476 | ||
505 | if (rr->length > SSL3_RT_MAX_PLAIN_LENGTH+extra) | 477 | if (rr->length > SSL3_RT_MAX_PLAIN_LENGTH + extra) { |
506 | { | 478 | al = SSL_AD_RECORD_OVERFLOW; |
507 | al=SSL_AD_RECORD_OVERFLOW; | 479 | SSLerr(SSL_F_SSL3_GET_RECORD, SSL_R_DATA_LENGTH_TOO_LONG); |
508 | SSLerr(SSL_F_SSL3_GET_RECORD,SSL_R_DATA_LENGTH_TOO_LONG); | ||
509 | goto f_err; | 480 | goto f_err; |
510 | } | 481 | } |
511 | 482 | ||
512 | rr->off=0; | 483 | rr->off = 0; |
513 | /* So at this point the following is true | 484 | /* So at this point the following is true |
514 | * ssl->s3->rrec.type is the type of record | 485 | * ssl->s3->rrec.type is the type of record |
515 | * ssl->s3->rrec.length == number of bytes in record | 486 | * ssl->s3->rrec.length == number of bytes in record |
@@ -519,178 +490,171 @@ printf("\n"); | |||
519 | */ | 490 | */ |
520 | 491 | ||
521 | /* we have pulled in a full packet so zero things */ | 492 | /* we have pulled in a full packet so zero things */ |
522 | s->packet_length=0; | 493 | s->packet_length = 0; |
523 | 494 | ||
524 | /* just read a 0 length packet */ | 495 | /* just read a 0 length packet */ |
525 | if (rr->length == 0) goto again; | 496 | if (rr->length == 0) |
497 | goto again; | ||
526 | 498 | ||
527 | #if 0 | 499 | #if 0 |
528 | fprintf(stderr, "Ultimate Record type=%d, Length=%d\n", rr->type, rr->length); | 500 | fprintf(stderr, "Ultimate Record type=%d, Length=%d\n", rr->type, rr->length); |
529 | #endif | 501 | #endif |
530 | 502 | ||
531 | return(1); | 503 | return (1); |
532 | 504 | ||
533 | f_err: | 505 | f_err: |
534 | ssl3_send_alert(s,SSL3_AL_FATAL,al); | 506 | ssl3_send_alert(s, SSL3_AL_FATAL, al); |
535 | err: | 507 | err: |
536 | return(ret); | 508 | return (ret); |
537 | } | 509 | } |
538 | 510 | ||
539 | int ssl3_do_uncompress(SSL *ssl) | 511 | int |
540 | { | 512 | ssl3_do_uncompress(SSL *ssl) |
513 | { | ||
541 | #ifndef OPENSSL_NO_COMP | 514 | #ifndef OPENSSL_NO_COMP |
542 | int i; | 515 | int i; |
543 | SSL3_RECORD *rr; | 516 | SSL3_RECORD *rr; |
544 | 517 | ||
545 | rr= &(ssl->s3->rrec); | 518 | rr = &(ssl->s3->rrec); |
546 | i=COMP_expand_block(ssl->expand,rr->comp, | 519 | i = COMP_expand_block(ssl->expand, rr->comp, |
547 | SSL3_RT_MAX_PLAIN_LENGTH,rr->data,(int)rr->length); | 520 | SSL3_RT_MAX_PLAIN_LENGTH, rr->data,(int)rr->length); |
548 | if (i < 0) | 521 | if (i < 0) |
549 | return(0); | 522 | return (0); |
550 | else | 523 | else |
551 | rr->length=i; | 524 | rr->length = i; |
552 | rr->data=rr->comp; | 525 | rr->data = rr->comp; |
553 | #endif | 526 | #endif |
554 | return(1); | 527 | return (1); |
555 | } | 528 | } |
556 | 529 | ||
557 | int ssl3_do_compress(SSL *ssl) | 530 | int |
558 | { | 531 | ssl3_do_compress(SSL *ssl) |
532 | { | ||
559 | #ifndef OPENSSL_NO_COMP | 533 | #ifndef OPENSSL_NO_COMP |
560 | int i; | 534 | int i; |
561 | SSL3_RECORD *wr; | 535 | SSL3_RECORD *wr; |
562 | 536 | ||
563 | wr= &(ssl->s3->wrec); | 537 | wr = &(ssl->s3->wrec); |
564 | i=COMP_compress_block(ssl->compress,wr->data, | 538 | i = COMP_compress_block(ssl->compress, wr->data, |
565 | SSL3_RT_MAX_COMPRESSED_LENGTH, | 539 | SSL3_RT_MAX_COMPRESSED_LENGTH, |
566 | wr->input,(int)wr->length); | 540 | wr->input,(int)wr->length); |
567 | if (i < 0) | 541 | if (i < 0) |
568 | return(0); | 542 | return (0); |
569 | else | 543 | else |
570 | wr->length=i; | 544 | wr->length = i; |
571 | 545 | ||
572 | wr->input=wr->data; | 546 | wr->input = wr->data; |
573 | #endif | 547 | #endif |
574 | return(1); | 548 | return (1); |
575 | } | 549 | } |
576 | 550 | ||
577 | /* Call this to write data in records of type 'type' | 551 | /* Call this to write data in records of type 'type' |
578 | * It will return <= 0 if not all data has been sent or non-blocking IO. | 552 | * It will return <= 0 if not all data has been sent or non-blocking IO. |
579 | */ | 553 | */ |
580 | int ssl3_write_bytes(SSL *s, int type, const void *buf_, int len) | 554 | int |
581 | { | 555 | ssl3_write_bytes(SSL *s, int type, const void *buf_, int len) |
582 | const unsigned char *buf=buf_; | 556 | { |
583 | unsigned int tot,n,nw; | 557 | const unsigned char *buf = buf_; |
558 | unsigned int tot, n, nw; | ||
584 | int i; | 559 | int i; |
585 | 560 | ||
586 | s->rwstate=SSL_NOTHING; | 561 | s->rwstate = SSL_NOTHING; |
587 | tot=s->s3->wnum; | 562 | tot = s->s3->wnum; |
588 | s->s3->wnum=0; | 563 | s->s3->wnum = 0; |
589 | 564 | ||
590 | if (SSL_in_init(s) && !s->in_handshake) | 565 | if (SSL_in_init(s) && !s->in_handshake) { |
591 | { | 566 | i = s->handshake_func(s); |
592 | i=s->handshake_func(s); | 567 | if (i < 0) |
593 | if (i < 0) return(i); | 568 | return (i); |
594 | if (i == 0) | 569 | if (i == 0) { |
595 | { | 570 | SSLerr(SSL_F_SSL3_WRITE_BYTES, SSL_R_SSL_HANDSHAKE_FAILURE); |
596 | SSLerr(SSL_F_SSL3_WRITE_BYTES,SSL_R_SSL_HANDSHAKE_FAILURE); | ||
597 | return -1; | 571 | return -1; |
598 | } | ||
599 | } | 572 | } |
573 | } | ||
600 | 574 | ||
601 | n=(len-tot); | 575 | n = (len - tot); |
602 | for (;;) | 576 | for (;;) { |
603 | { | ||
604 | if (n > s->max_send_fragment) | 577 | if (n > s->max_send_fragment) |
605 | nw=s->max_send_fragment; | 578 | nw = s->max_send_fragment; |
606 | else | 579 | else |
607 | nw=n; | 580 | nw = n; |
608 | 581 | ||
609 | i=do_ssl3_write(s, type, &(buf[tot]), nw, 0); | 582 | i = do_ssl3_write(s, type, &(buf[tot]), nw, 0); |
610 | if (i <= 0) | 583 | if (i <= 0) { |
611 | { | 584 | s->s3->wnum = tot; |
612 | s->s3->wnum=tot; | ||
613 | return i; | 585 | return i; |
614 | } | 586 | } |
615 | 587 | ||
616 | if ((i == (int)n) || | 588 | if ((i == (int)n) || (type == SSL3_RT_APPLICATION_DATA && |
617 | (type == SSL3_RT_APPLICATION_DATA && | 589 | (s->mode & SSL_MODE_ENABLE_PARTIAL_WRITE))) { |
618 | (s->mode & SSL_MODE_ENABLE_PARTIAL_WRITE))) | ||
619 | { | ||
620 | /* next chunk of data should get another prepended empty fragment | 590 | /* next chunk of data should get another prepended empty fragment |
621 | * in ciphersuites with known-IV weakness: */ | 591 | * in ciphersuites with known-IV weakness: */ |
622 | s->s3->empty_fragment_done = 0; | 592 | s->s3->empty_fragment_done = 0; |
623 | |||
624 | return tot+i; | ||
625 | } | ||
626 | 593 | ||
627 | n-=i; | 594 | return tot + i; |
628 | tot+=i; | ||
629 | } | 595 | } |
630 | } | ||
631 | 596 | ||
632 | static int do_ssl3_write(SSL *s, int type, const unsigned char *buf, | 597 | n -= i; |
633 | unsigned int len, int create_empty_fragment) | 598 | tot += i; |
634 | { | 599 | } |
635 | unsigned char *p,*plen; | 600 | } |
636 | int i,mac_size,clear=0; | 601 | |
637 | int prefix_len=0; | 602 | static int |
603 | do_ssl3_write(SSL *s, int type, const unsigned char *buf, | ||
604 | unsigned int len, int create_empty_fragment) | ||
605 | { | ||
606 | unsigned char *p, *plen; | ||
607 | int i, mac_size, clear = 0; | ||
608 | int prefix_len = 0; | ||
638 | int eivlen; | 609 | int eivlen; |
639 | long align=0; | 610 | long align = 0; |
640 | SSL3_RECORD *wr; | 611 | SSL3_RECORD *wr; |
641 | SSL3_BUFFER *wb=&(s->s3->wbuf); | 612 | SSL3_BUFFER *wb = &(s->s3->wbuf); |
642 | SSL_SESSION *sess; | 613 | SSL_SESSION *sess; |
643 | 614 | ||
644 | if (wb->buf == NULL) | 615 | if (wb->buf == NULL) |
645 | if (!ssl3_setup_write_buffer(s)) | 616 | if (!ssl3_setup_write_buffer(s)) |
646 | return -1; | 617 | return -1; |
647 | 618 | ||
648 | /* first check if there is a SSL3_BUFFER still being written | 619 | /* first check if there is a SSL3_BUFFER still being written |
649 | * out. This will happen with non blocking IO */ | 620 | * out. This will happen with non blocking IO */ |
650 | if (wb->left != 0) | 621 | if (wb->left != 0) |
651 | return(ssl3_write_pending(s,type,buf,len)); | 622 | return (ssl3_write_pending(s, type, buf, len)); |
652 | 623 | ||
653 | /* If we have an alert to send, lets send it */ | 624 | /* If we have an alert to send, lets send it */ |
654 | if (s->s3->alert_dispatch) | 625 | if (s->s3->alert_dispatch) { |
655 | { | 626 | i = s->method->ssl_dispatch_alert(s); |
656 | i=s->method->ssl_dispatch_alert(s); | ||
657 | if (i <= 0) | 627 | if (i <= 0) |
658 | return(i); | 628 | return (i); |
659 | /* if it went, fall through and send more stuff */ | 629 | /* if it went, fall through and send more stuff */ |
660 | } | 630 | } |
661 | 631 | ||
662 | if (len == 0 && !create_empty_fragment) | 632 | if (len == 0 && !create_empty_fragment) |
663 | return 0; | 633 | return 0; |
664 | 634 | ||
665 | wr= &(s->s3->wrec); | 635 | wr = &(s->s3->wrec); |
666 | sess=s->session; | 636 | sess = s->session; |
667 | 637 | ||
668 | if ( (sess == NULL) || | 638 | if ((sess == NULL) || (s->enc_write_ctx == NULL) || |
669 | (s->enc_write_ctx == NULL) || | 639 | (EVP_MD_CTX_md(s->write_hash) == NULL)) { |
670 | (EVP_MD_CTX_md(s->write_hash) == NULL)) | ||
671 | { | ||
672 | #if 1 | 640 | #if 1 |
673 | clear=s->enc_write_ctx?0:1; /* must be AEAD cipher */ | 641 | clear = s->enc_write_ctx ? 0 : 1; /* must be AEAD cipher */ |
674 | #else | 642 | #else |
675 | clear=1; | 643 | clear = 1; |
676 | #endif | 644 | #endif |
677 | mac_size=0; | 645 | mac_size = 0; |
678 | } | 646 | } else { |
679 | else | 647 | mac_size = EVP_MD_CTX_size(s->write_hash); |
680 | { | ||
681 | mac_size=EVP_MD_CTX_size(s->write_hash); | ||
682 | if (mac_size < 0) | 648 | if (mac_size < 0) |
683 | goto err; | 649 | goto err; |
684 | } | 650 | } |
685 | 651 | ||
686 | /* 'create_empty_fragment' is true only when this function calls itself */ | 652 | /* 'create_empty_fragment' is true only when this function calls itself */ |
687 | if (!clear && !create_empty_fragment && !s->s3->empty_fragment_done) | 653 | if (!clear && !create_empty_fragment && !s->s3->empty_fragment_done) { |
688 | { | ||
689 | /* countermeasure against known-IV weakness in CBC ciphersuites | 654 | /* countermeasure against known-IV weakness in CBC ciphersuites |
690 | * (see http://www.openssl.org/~bodo/tls-cbc.txt) */ | 655 | * (see http://www.openssl.org/~bodo/tls-cbc.txt) */ |
691 | 656 | ||
692 | if (s->s3->need_empty_fragments && type == SSL3_RT_APPLICATION_DATA) | 657 | if (s->s3->need_empty_fragments && type == SSL3_RT_APPLICATION_DATA) { |
693 | { | ||
694 | /* recursive function call with 'create_empty_fragment' set; | 658 | /* recursive function call with 'create_empty_fragment' set; |
695 | * this prepares and buffers the data for an empty fragment | 659 | * this prepares and buffers the data for an empty fragment |
696 | * (these 'prefix_len' bytes are sent out later | 660 | * (these 'prefix_len' bytes are sent out later |
@@ -700,216 +664,195 @@ static int do_ssl3_write(SSL *s, int type, const unsigned char *buf, | |||
700 | goto err; | 664 | goto err; |
701 | 665 | ||
702 | if (prefix_len > | 666 | if (prefix_len > |
703 | (SSL3_RT_HEADER_LENGTH + SSL3_RT_SEND_MAX_ENCRYPTED_OVERHEAD)) | 667 | (SSL3_RT_HEADER_LENGTH + SSL3_RT_SEND_MAX_ENCRYPTED_OVERHEAD)) { |
704 | { | ||
705 | /* insufficient space */ | 668 | /* insufficient space */ |
706 | SSLerr(SSL_F_DO_SSL3_WRITE, ERR_R_INTERNAL_ERROR); | 669 | SSLerr(SSL_F_DO_SSL3_WRITE, ERR_R_INTERNAL_ERROR); |
707 | goto err; | 670 | goto err; |
708 | } | ||
709 | } | 671 | } |
710 | |||
711 | s->s3->empty_fragment_done = 1; | ||
712 | } | 672 | } |
713 | 673 | ||
714 | if (create_empty_fragment) | 674 | s->s3->empty_fragment_done = 1; |
715 | { | 675 | } |
676 | |||
677 | if (create_empty_fragment) { | ||
716 | #if defined(SSL3_ALIGN_PAYLOAD) && SSL3_ALIGN_PAYLOAD!=0 | 678 | #if defined(SSL3_ALIGN_PAYLOAD) && SSL3_ALIGN_PAYLOAD!=0 |
717 | /* extra fragment would be couple of cipher blocks, | 679 | /* extra fragment would be couple of cipher blocks, |
718 | * which would be multiple of SSL3_ALIGN_PAYLOAD, so | 680 | * which would be multiple of SSL3_ALIGN_PAYLOAD, so |
719 | * if we want to align the real payload, then we can | 681 | * if we want to align the real payload, then we can |
720 | * just pretent we simply have two headers. */ | 682 | * just pretent we simply have two headers. */ |
721 | align = (long)wb->buf + 2*SSL3_RT_HEADER_LENGTH; | 683 | align = (long)wb->buf + 2*SSL3_RT_HEADER_LENGTH; |
722 | align = (-align)&(SSL3_ALIGN_PAYLOAD-1); | 684 | align = (-align)&(SSL3_ALIGN_PAYLOAD - 1); |
723 | #endif | 685 | #endif |
724 | p = wb->buf + align; | 686 | p = wb->buf + align; |
725 | wb->offset = align; | 687 | wb->offset = align; |
726 | } | 688 | } else if (prefix_len) { |
727 | else if (prefix_len) | ||
728 | { | ||
729 | p = wb->buf + wb->offset + prefix_len; | 689 | p = wb->buf + wb->offset + prefix_len; |
730 | } | 690 | } else { |
731 | else | ||
732 | { | ||
733 | #if defined(SSL3_ALIGN_PAYLOAD) && SSL3_ALIGN_PAYLOAD!=0 | 691 | #if defined(SSL3_ALIGN_PAYLOAD) && SSL3_ALIGN_PAYLOAD!=0 |
734 | align = (long)wb->buf + SSL3_RT_HEADER_LENGTH; | 692 | align = (long)wb->buf + SSL3_RT_HEADER_LENGTH; |
735 | align = (-align)&(SSL3_ALIGN_PAYLOAD-1); | 693 | align = (-align)&(SSL3_ALIGN_PAYLOAD - 1); |
736 | #endif | 694 | #endif |
737 | p = wb->buf + align; | 695 | p = wb->buf + align; |
738 | wb->offset = align; | 696 | wb->offset = align; |
739 | } | 697 | } |
740 | 698 | ||
741 | /* write the header */ | 699 | /* write the header */ |
742 | 700 | ||
743 | *(p++)=type&0xff; | 701 | *(p++) = type&0xff; |
744 | wr->type=type; | 702 | wr->type = type; |
745 | 703 | ||
746 | *(p++)=(s->version>>8); | 704 | *(p++) = (s->version >> 8); |
747 | /* Some servers hang if iniatial client hello is larger than 256 | 705 | /* Some servers hang if iniatial client hello is larger than 256 |
748 | * bytes and record version number > TLS 1.0 | 706 | * bytes and record version number > TLS 1.0 |
749 | */ | 707 | */ |
750 | if (s->state == SSL3_ST_CW_CLNT_HELLO_B | 708 | if (s->state == SSL3_ST_CW_CLNT_HELLO_B && !s->renegotiate && |
751 | && !s->renegotiate | 709 | TLS1_get_version(s) > TLS1_VERSION) |
752 | && TLS1_get_version(s) > TLS1_VERSION) | ||
753 | *(p++) = 0x1; | 710 | *(p++) = 0x1; |
754 | else | 711 | else |
755 | *(p++)=s->version&0xff; | 712 | *(p++) = s->version&0xff; |
756 | 713 | ||
757 | /* field where we are to write out packet length */ | 714 | /* field where we are to write out packet length */ |
758 | plen=p; | 715 | plen = p; |
759 | p+=2; | 716 | |
717 | p += 2; | ||
760 | /* Explicit IV length, block ciphers and TLS version 1.1 or later */ | 718 | /* Explicit IV length, block ciphers and TLS version 1.1 or later */ |
761 | if (s->enc_write_ctx && s->version >= TLS1_1_VERSION) | 719 | if (s->enc_write_ctx && s->version >= TLS1_1_VERSION) { |
762 | { | ||
763 | int mode = EVP_CIPHER_CTX_mode(s->enc_write_ctx); | 720 | int mode = EVP_CIPHER_CTX_mode(s->enc_write_ctx); |
764 | if (mode == EVP_CIPH_CBC_MODE) | 721 | if (mode == EVP_CIPH_CBC_MODE) { |
765 | { | ||
766 | eivlen = EVP_CIPHER_CTX_iv_length(s->enc_write_ctx); | 722 | eivlen = EVP_CIPHER_CTX_iv_length(s->enc_write_ctx); |
767 | if (eivlen <= 1) | 723 | if (eivlen <= 1) |
768 | eivlen = 0; | 724 | eivlen = 0; |
769 | } | 725 | } |
770 | /* Need explicit part of IV for GCM mode */ | 726 | /* Need explicit part of IV for GCM mode */ |
771 | else if (mode == EVP_CIPH_GCM_MODE) | 727 | else if (mode == EVP_CIPH_GCM_MODE) |
772 | eivlen = EVP_GCM_TLS_EXPLICIT_IV_LEN; | 728 | eivlen = EVP_GCM_TLS_EXPLICIT_IV_LEN; |
773 | else | 729 | else |
774 | eivlen = 0; | 730 | eivlen = 0; |
775 | } | 731 | } else |
776 | else | ||
777 | eivlen = 0; | 732 | eivlen = 0; |
778 | 733 | ||
779 | /* lets setup the record stuff. */ | 734 | /* lets setup the record stuff. */ |
780 | wr->data=p + eivlen; | 735 | wr->data = p + eivlen; |
781 | wr->length=(int)len; | 736 | wr->length = (int)len; |
782 | wr->input=(unsigned char *)buf; | 737 | wr->input = (unsigned char *)buf; |
783 | 738 | ||
784 | /* we now 'read' from wr->input, wr->length bytes into | 739 | /* we now 'read' from wr->input, wr->length bytes into |
785 | * wr->data */ | 740 | * wr->data */ |
786 | 741 | ||
787 | /* first we compress */ | 742 | /* first we compress */ |
788 | if (s->compress != NULL) | 743 | if (s->compress != NULL) { |
789 | { | 744 | if (!ssl3_do_compress(s)) { |
790 | if (!ssl3_do_compress(s)) | 745 | SSLerr(SSL_F_DO_SSL3_WRITE, SSL_R_COMPRESSION_FAILURE); |
791 | { | ||
792 | SSLerr(SSL_F_DO_SSL3_WRITE,SSL_R_COMPRESSION_FAILURE); | ||
793 | goto err; | 746 | goto err; |
794 | } | ||
795 | } | ||
796 | else | ||
797 | { | ||
798 | memcpy(wr->data,wr->input,wr->length); | ||
799 | wr->input=wr->data; | ||
800 | } | 747 | } |
748 | } else { | ||
749 | memcpy(wr->data, wr->input, wr->length); | ||
750 | wr->input = wr->data; | ||
751 | } | ||
801 | 752 | ||
802 | /* we should still have the output to wr->data and the input | 753 | /* we should still have the output to wr->data and the input |
803 | * from wr->input. Length should be wr->length. | 754 | * from wr->input. Length should be wr->length. |
804 | * wr->data still points in the wb->buf */ | 755 | * wr->data still points in the wb->buf */ |
805 | 756 | ||
806 | if (mac_size != 0) | 757 | if (mac_size != 0) { |
807 | { | 758 | if (s->method->ssl3_enc->mac(s, &(p[wr->length + eivlen]), 1) < 0) |
808 | if (s->method->ssl3_enc->mac(s,&(p[wr->length + eivlen]),1) < 0) | ||
809 | goto err; | 759 | goto err; |
810 | wr->length+=mac_size; | 760 | wr->length += mac_size; |
811 | } | 761 | } |
812 | 762 | ||
813 | wr->input=p; | 763 | wr->input = p; |
814 | wr->data=p; | 764 | wr->data = p; |
815 | 765 | ||
816 | if (eivlen) | 766 | if (eivlen) { |
817 | { | ||
818 | /* if (RAND_pseudo_bytes(p, eivlen) <= 0) | 767 | /* if (RAND_pseudo_bytes(p, eivlen) <= 0) |
819 | goto err; */ | 768 | goto err; |
769 | */ | ||
820 | wr->length += eivlen; | 770 | wr->length += eivlen; |
821 | } | 771 | } |
822 | 772 | ||
823 | /* ssl3_enc can only have an error on read */ | 773 | /* ssl3_enc can only have an error on read */ |
824 | s->method->ssl3_enc->enc(s,1); | 774 | s->method->ssl3_enc->enc(s, 1); |
825 | 775 | ||
826 | /* record length after mac and block padding */ | 776 | /* record length after mac and block padding */ |
827 | s2n(wr->length,plen); | 777 | s2n(wr->length, plen); |
828 | 778 | ||
829 | /* we should now have | 779 | /* we should now have |
830 | * wr->data pointing to the encrypted data, which is | 780 | * wr->data pointing to the encrypted data, which is |
831 | * wr->length long */ | 781 | * wr->length long */ |
832 | wr->type=type; /* not needed but helps for debugging */ | 782 | wr->type=type; /* not needed but helps for debugging */ |
833 | wr->length+=SSL3_RT_HEADER_LENGTH; | 783 | wr->length += SSL3_RT_HEADER_LENGTH; |
834 | 784 | ||
835 | if (create_empty_fragment) | 785 | if (create_empty_fragment) { |
836 | { | ||
837 | /* we are in a recursive call; | 786 | /* we are in a recursive call; |
838 | * just return the length, don't write out anything here | 787 | * just return the length, don't write out anything here |
839 | */ | 788 | */ |
840 | return wr->length; | 789 | return wr->length; |
841 | } | 790 | } |
842 | 791 | ||
843 | /* now let's set up wb */ | 792 | /* now let's set up wb */ |
844 | wb->left = prefix_len + wr->length; | 793 | wb->left = prefix_len + wr->length; |
845 | 794 | ||
846 | /* memorize arguments so that ssl3_write_pending can detect bad write retries later */ | 795 | /* memorize arguments so that ssl3_write_pending can detect bad write retries later */ |
847 | s->s3->wpend_tot=len; | 796 | s->s3->wpend_tot = len; |
848 | s->s3->wpend_buf=buf; | 797 | s->s3->wpend_buf = buf; |
849 | s->s3->wpend_type=type; | 798 | s->s3->wpend_type = type; |
850 | s->s3->wpend_ret=len; | 799 | s->s3->wpend_ret = len; |
851 | 800 | ||
852 | /* we now just need to write the buffer */ | 801 | /* we now just need to write the buffer */ |
853 | return ssl3_write_pending(s,type,buf,len); | 802 | return ssl3_write_pending(s, type, buf, len); |
854 | err: | 803 | err: |
855 | return -1; | 804 | return -1; |
856 | } | 805 | } |
857 | 806 | ||
858 | /* if s->s3->wbuf.left != 0, we need to call this */ | 807 | /* if s->s3->wbuf.left != 0, we need to call this */ |
859 | int ssl3_write_pending(SSL *s, int type, const unsigned char *buf, | 808 | int |
860 | unsigned int len) | 809 | ssl3_write_pending(SSL *s, int type, const unsigned char *buf, |
861 | { | 810 | unsigned int len) |
811 | { | ||
862 | int i; | 812 | int i; |
863 | SSL3_BUFFER *wb=&(s->s3->wbuf); | 813 | SSL3_BUFFER *wb = &(s->s3->wbuf); |
864 | 814 | ||
865 | /* XXXX */ | 815 | /* XXXX */ |
866 | if ((s->s3->wpend_tot > (int)len) | 816 | if ((s->s3->wpend_tot > (int)len) || ((s->s3->wpend_buf != buf) && |
867 | || ((s->s3->wpend_buf != buf) && | 817 | !(s->mode & SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER)) || |
868 | !(s->mode & SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER)) | 818 | (s->s3->wpend_type != type)) { |
869 | || (s->s3->wpend_type != type)) | 819 | SSLerr(SSL_F_SSL3_WRITE_PENDING, SSL_R_BAD_WRITE_RETRY); |
870 | { | 820 | return (-1); |
871 | SSLerr(SSL_F_SSL3_WRITE_PENDING,SSL_R_BAD_WRITE_RETRY); | 821 | } |
872 | return(-1); | ||
873 | } | ||
874 | 822 | ||
875 | for (;;) | 823 | for (;;) { |
876 | { | ||
877 | errno = 0; | 824 | errno = 0; |
878 | if (s->wbio != NULL) | 825 | if (s->wbio != NULL) { |
879 | { | 826 | s->rwstate = SSL_WRITING; |
880 | s->rwstate=SSL_WRITING; | 827 | i = BIO_write(s->wbio, |
881 | i=BIO_write(s->wbio, | 828 | (char *)&(wb->buf[wb->offset]), |
882 | (char *)&(wb->buf[wb->offset]), | 829 | (unsigned int)wb->left); |
883 | (unsigned int)wb->left); | 830 | } else { |
884 | } | 831 | SSLerr(SSL_F_SSL3_WRITE_PENDING, SSL_R_BIO_NOT_SET); |
885 | else | 832 | i = -1; |
886 | { | 833 | } |
887 | SSLerr(SSL_F_SSL3_WRITE_PENDING,SSL_R_BIO_NOT_SET); | 834 | if (i == wb->left) { |
888 | i= -1; | 835 | wb->left = 0; |
889 | } | 836 | wb->offset += i; |
890 | if (i == wb->left) | ||
891 | { | ||
892 | wb->left=0; | ||
893 | wb->offset+=i; | ||
894 | if (s->mode & SSL_MODE_RELEASE_BUFFERS && | 837 | if (s->mode & SSL_MODE_RELEASE_BUFFERS && |
895 | SSL_version(s) != DTLS1_VERSION && SSL_version(s) != DTLS1_BAD_VER) | 838 | SSL_version(s) != DTLS1_VERSION && |
839 | SSL_version(s) != DTLS1_BAD_VER) | ||
896 | ssl3_release_write_buffer(s); | 840 | ssl3_release_write_buffer(s); |
897 | s->rwstate=SSL_NOTHING; | 841 | s->rwstate = SSL_NOTHING; |
898 | return(s->s3->wpend_ret); | 842 | return (s->s3->wpend_ret); |
899 | } | 843 | } else if (i <= 0) { |
900 | else if (i <= 0) { | ||
901 | if (s->version == DTLS1_VERSION || | 844 | if (s->version == DTLS1_VERSION || |
902 | s->version == DTLS1_BAD_VER) { | 845 | s->version == DTLS1_BAD_VER) { |
903 | /* For DTLS, just drop it. That's kind of the whole | 846 | /* For DTLS, just drop it. That's kind of the whole |
904 | point in using a datagram service */ | 847 | point in using a datagram service */ |
905 | wb->left = 0; | 848 | wb->left = 0; |
906 | } | 849 | } |
907 | return(i); | 850 | return (i); |
908 | } | ||
909 | wb->offset+=i; | ||
910 | wb->left-=i; | ||
911 | } | 851 | } |
852 | wb->offset += i; | ||
853 | wb->left -= i; | ||
912 | } | 854 | } |
855 | } | ||
913 | 856 | ||
914 | /* Return up to 'len' payload bytes received in 'type' records. | 857 | /* Return up to 'len' payload bytes received in 'type' records. |
915 | * 'type' is one of the following: | 858 | * 'type' is one of the following: |
@@ -938,39 +881,40 @@ int ssl3_write_pending(SSL *s, int type, const unsigned char *buf, | |||
938 | * Application data protocol | 881 | * Application data protocol |
939 | * none of our business | 882 | * none of our business |
940 | */ | 883 | */ |
941 | int ssl3_read_bytes(SSL *s, int type, unsigned char *buf, int len, int peek) | 884 | int |
942 | { | 885 | ssl3_read_bytes(SSL *s, int type, unsigned char *buf, int len, int peek) |
943 | int al,i,j,ret; | 886 | { |
887 | int al, i, j, ret; | ||
944 | unsigned int n; | 888 | unsigned int n; |
945 | SSL3_RECORD *rr; | 889 | SSL3_RECORD *rr; |
946 | void (*cb)(const SSL *ssl,int type2,int val)=NULL; | 890 | void (*cb)(const SSL *ssl, int type2, int val) = NULL; |
947 | 891 | ||
948 | if (s->s3->rbuf.buf == NULL) /* Not initialized yet */ | 892 | if (s->s3->rbuf.buf == NULL) /* Not initialized yet */ |
949 | if (!ssl3_setup_read_buffer(s)) | 893 | if (!ssl3_setup_read_buffer(s)) |
950 | return(-1); | 894 | return (-1); |
951 | 895 | ||
952 | if ((type && (type != SSL3_RT_APPLICATION_DATA) && (type != SSL3_RT_HANDSHAKE) && type) || | 896 | if ((type && (type != SSL3_RT_APPLICATION_DATA) && |
953 | (peek && (type != SSL3_RT_APPLICATION_DATA))) | 897 | (type != SSL3_RT_HANDSHAKE) && type) || |
954 | { | 898 | (peek && (type != SSL3_RT_APPLICATION_DATA))) { |
955 | SSLerr(SSL_F_SSL3_READ_BYTES, ERR_R_INTERNAL_ERROR); | 899 | SSLerr(SSL_F_SSL3_READ_BYTES, ERR_R_INTERNAL_ERROR); |
956 | return -1; | 900 | return -1; |
957 | } | 901 | } |
958 | 902 | ||
959 | if ((type == SSL3_RT_HANDSHAKE) && (s->s3->handshake_fragment_len > 0)) | 903 | if ((type == SSL3_RT_HANDSHAKE) && (s->s3->handshake_fragment_len > 0)) |
960 | /* (partially) satisfy request from storage */ | 904 | /* (partially) satisfy request from storage */ |
961 | { | 905 | { |
962 | unsigned char *src = s->s3->handshake_fragment; | 906 | unsigned char *src = s->s3->handshake_fragment; |
963 | unsigned char *dst = buf; | 907 | unsigned char *dst = buf; |
964 | unsigned int k; | 908 | unsigned int k; |
965 | 909 | ||
966 | /* peek == 0 */ | 910 | /* peek == 0 */ |
967 | n = 0; | 911 | n = 0; |
968 | while ((len > 0) && (s->s3->handshake_fragment_len > 0)) | 912 | while ((len > 0) && (s->s3->handshake_fragment_len > 0)) { |
969 | { | ||
970 | *dst++ = *src++; | 913 | *dst++ = *src++; |
971 | len--; s->s3->handshake_fragment_len--; | 914 | len--; |
915 | s->s3->handshake_fragment_len--; | ||
972 | n++; | 916 | n++; |
973 | } | 917 | } |
974 | /* move any remaining fragment bytes: */ | 918 | /* move any remaining fragment bytes: */ |
975 | for (k = 0; k < s->s3->handshake_fragment_len; k++) | 919 | for (k = 0; k < s->s3->handshake_fragment_len; k++) |
976 | s->s3->handshake_fragment[k] = *src++; | 920 | s->s3->handshake_fragment[k] = *src++; |
@@ -979,19 +923,18 @@ int ssl3_read_bytes(SSL *s, int type, unsigned char *buf, int len, int peek) | |||
979 | 923 | ||
980 | /* Now s->s3->handshake_fragment_len == 0 if type == SSL3_RT_HANDSHAKE. */ | 924 | /* Now s->s3->handshake_fragment_len == 0 if type == SSL3_RT_HANDSHAKE. */ |
981 | 925 | ||
982 | if (!s->in_handshake && SSL_in_init(s)) | 926 | if (!s->in_handshake && SSL_in_init(s)) { |
983 | { | ||
984 | /* type == SSL3_RT_APPLICATION_DATA */ | 927 | /* type == SSL3_RT_APPLICATION_DATA */ |
985 | i=s->handshake_func(s); | 928 | i = s->handshake_func(s); |
986 | if (i < 0) return(i); | 929 | if (i < 0) |
987 | if (i == 0) | 930 | return (i); |
988 | { | 931 | if (i == 0) { |
989 | SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_SSL_HANDSHAKE_FAILURE); | 932 | SSLerr(SSL_F_SSL3_READ_BYTES, SSL_R_SSL_HANDSHAKE_FAILURE); |
990 | return(-1); | 933 | return (-1); |
991 | } | ||
992 | } | 934 | } |
935 | } | ||
993 | start: | 936 | start: |
994 | s->rwstate=SSL_NOTHING; | 937 | s->rwstate = SSL_NOTHING; |
995 | 938 | ||
996 | /* s->s3->rrec.type - is the type of record | 939 | /* s->s3->rrec.type - is the type of record |
997 | * s->s3->rrec.data, - data | 940 | * s->s3->rrec.data, - data |
@@ -1000,67 +943,63 @@ start: | |||
1000 | rr = &(s->s3->rrec); | 943 | rr = &(s->s3->rrec); |
1001 | 944 | ||
1002 | /* get new packet if necessary */ | 945 | /* get new packet if necessary */ |
1003 | if ((rr->length == 0) || (s->rstate == SSL_ST_READ_BODY)) | 946 | if ((rr->length == 0) || (s->rstate == SSL_ST_READ_BODY)) { |
1004 | { | 947 | ret = ssl3_get_record(s); |
1005 | ret=ssl3_get_record(s); | 948 | if (ret <= 0) |
1006 | if (ret <= 0) return(ret); | 949 | return (ret); |
1007 | } | 950 | } |
1008 | 951 | ||
1009 | /* we now have a packet which can be read and processed */ | 952 | /* we now have a packet which can be read and processed */ |
1010 | 953 | ||
1011 | if (s->s3->change_cipher_spec /* set when we receive ChangeCipherSpec, | 954 | if (s->s3->change_cipher_spec /* set when we receive ChangeCipherSpec, |
1012 | * reset by ssl3_get_finished */ | 955 | * reset by ssl3_get_finished */ |
1013 | && (rr->type != SSL3_RT_HANDSHAKE)) | 956 | && (rr->type != SSL3_RT_HANDSHAKE)) { |
1014 | { | 957 | al = SSL_AD_UNEXPECTED_MESSAGE; |
1015 | al=SSL_AD_UNEXPECTED_MESSAGE; | 958 | SSLerr(SSL_F_SSL3_READ_BYTES, SSL_R_DATA_BETWEEN_CCS_AND_FINISHED); |
1016 | SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_DATA_BETWEEN_CCS_AND_FINISHED); | ||
1017 | goto f_err; | 959 | goto f_err; |
1018 | } | 960 | } |
1019 | 961 | ||
1020 | /* If the other end has shut down, throw anything we read away | 962 | /* If the other end has shut down, throw anything we read away |
1021 | * (even in 'peek' mode) */ | 963 | * (even in 'peek' mode) */ |
1022 | if (s->shutdown & SSL_RECEIVED_SHUTDOWN) | 964 | if (s->shutdown & SSL_RECEIVED_SHUTDOWN) { |
1023 | { | 965 | rr->length = 0; |
1024 | rr->length=0; | 966 | s->rwstate = SSL_NOTHING; |
1025 | s->rwstate=SSL_NOTHING; | 967 | return (0); |
1026 | return(0); | 968 | } |
1027 | } | ||
1028 | 969 | ||
1029 | 970 | ||
1030 | if (type == rr->type) /* SSL3_RT_APPLICATION_DATA or SSL3_RT_HANDSHAKE */ | 971 | if (type == rr->type) /* SSL3_RT_APPLICATION_DATA or SSL3_RT_HANDSHAKE */ |
1031 | { | 972 | { |
1032 | /* make sure that we are not getting application data when we | 973 | /* make sure that we are not getting application data when we |
1033 | * are doing a handshake for the first time */ | 974 | * are doing a handshake for the first time */ |
1034 | if (SSL_in_init(s) && (type == SSL3_RT_APPLICATION_DATA) && | 975 | if (SSL_in_init(s) && (type == SSL3_RT_APPLICATION_DATA) && |
1035 | (s->enc_read_ctx == NULL)) | 976 | (s->enc_read_ctx == NULL)) { |
1036 | { | 977 | al = SSL_AD_UNEXPECTED_MESSAGE; |
1037 | al=SSL_AD_UNEXPECTED_MESSAGE; | 978 | SSLerr(SSL_F_SSL3_READ_BYTES, SSL_R_APP_DATA_IN_HANDSHAKE); |
1038 | SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_APP_DATA_IN_HANDSHAKE); | ||
1039 | goto f_err; | 979 | goto f_err; |
1040 | } | 980 | } |
1041 | 981 | ||
1042 | if (len <= 0) return(len); | 982 | if (len <= 0) |
983 | return (len); | ||
1043 | 984 | ||
1044 | if ((unsigned int)len > rr->length) | 985 | if ((unsigned int)len > rr->length) |
1045 | n = rr->length; | 986 | n = rr->length; |
1046 | else | 987 | else |
1047 | n = (unsigned int)len; | 988 | n = (unsigned int)len; |
1048 | 989 | ||
1049 | memcpy(buf,&(rr->data[rr->off]),n); | 990 | memcpy(buf, &(rr->data[rr->off]), n); |
1050 | if (!peek) | 991 | if (!peek) { |
1051 | { | 992 | rr->length -= n; |
1052 | rr->length-=n; | 993 | rr->off += n; |
1053 | rr->off+=n; | 994 | if (rr->length == 0) { |
1054 | if (rr->length == 0) | 995 | s->rstate = SSL_ST_READ_HEADER; |
1055 | { | 996 | rr->off = 0; |
1056 | s->rstate=SSL_ST_READ_HEADER; | ||
1057 | rr->off=0; | ||
1058 | if (s->mode & SSL_MODE_RELEASE_BUFFERS) | 997 | if (s->mode & SSL_MODE_RELEASE_BUFFERS) |
1059 | ssl3_release_read_buffer(s); | 998 | ssl3_release_read_buffer(s); |
1060 | } | ||
1061 | } | 999 | } |
1062 | return(n); | ||
1063 | } | 1000 | } |
1001 | return (n); | ||
1002 | } | ||
1064 | 1003 | ||
1065 | 1004 | ||
1066 | /* If we get here, then type != rr->type; if we have a handshake | 1005 | /* If we get here, then type != rr->type; if we have a handshake |
@@ -1069,137 +1008,122 @@ start: | |||
1069 | /* In case of record types for which we have 'fragment' storage, | 1008 | /* In case of record types for which we have 'fragment' storage, |
1070 | * fill that so that we can process the data at a fixed place. | 1009 | * fill that so that we can process the data at a fixed place. |
1071 | */ | 1010 | */ |
1072 | { | 1011 | { |
1073 | unsigned int dest_maxlen = 0; | 1012 | unsigned int dest_maxlen = 0; |
1074 | unsigned char *dest = NULL; | 1013 | unsigned char *dest = NULL; |
1075 | unsigned int *dest_len = NULL; | 1014 | unsigned int *dest_len = NULL; |
1076 | 1015 | ||
1077 | if (rr->type == SSL3_RT_HANDSHAKE) | 1016 | if (rr->type == SSL3_RT_HANDSHAKE) { |
1078 | { | ||
1079 | dest_maxlen = sizeof s->s3->handshake_fragment; | 1017 | dest_maxlen = sizeof s->s3->handshake_fragment; |
1080 | dest = s->s3->handshake_fragment; | 1018 | dest = s->s3->handshake_fragment; |
1081 | dest_len = &s->s3->handshake_fragment_len; | 1019 | dest_len = &s->s3->handshake_fragment_len; |
1082 | } | 1020 | } else if (rr->type == SSL3_RT_ALERT) { |
1083 | else if (rr->type == SSL3_RT_ALERT) | ||
1084 | { | ||
1085 | dest_maxlen = sizeof s->s3->alert_fragment; | 1021 | dest_maxlen = sizeof s->s3->alert_fragment; |
1086 | dest = s->s3->alert_fragment; | 1022 | dest = s->s3->alert_fragment; |
1087 | dest_len = &s->s3->alert_fragment_len; | 1023 | dest_len = &s->s3->alert_fragment_len; |
1088 | } | 1024 | } |
1089 | #ifndef OPENSSL_NO_HEARTBEATS | 1025 | #ifndef OPENSSL_NO_HEARTBEATS |
1090 | else if (rr->type == TLS1_RT_HEARTBEAT) | 1026 | else if (rr->type == TLS1_RT_HEARTBEAT) { |
1091 | { | ||
1092 | tls1_process_heartbeat(s); | 1027 | tls1_process_heartbeat(s); |
1093 | 1028 | ||
1094 | /* Exit and notify application to read again */ | 1029 | /* Exit and notify application to read again */ |
1095 | rr->length = 0; | 1030 | rr->length = 0; |
1096 | s->rwstate=SSL_READING; | 1031 | s->rwstate = SSL_READING; |
1097 | BIO_clear_retry_flags(SSL_get_rbio(s)); | 1032 | BIO_clear_retry_flags(SSL_get_rbio(s)); |
1098 | BIO_set_retry_read(SSL_get_rbio(s)); | 1033 | BIO_set_retry_read(SSL_get_rbio(s)); |
1099 | return(-1); | 1034 | return (-1); |
1100 | } | 1035 | } |
1101 | #endif | 1036 | #endif |
1102 | 1037 | ||
1103 | if (dest_maxlen > 0) | 1038 | if (dest_maxlen > 0) { |
1104 | { | ||
1105 | n = dest_maxlen - *dest_len; /* available space in 'dest' */ | 1039 | n = dest_maxlen - *dest_len; /* available space in 'dest' */ |
1106 | if (rr->length < n) | 1040 | if (rr->length < n) |
1107 | n = rr->length; /* available bytes */ | 1041 | n = rr->length; /* available bytes */ |
1108 | 1042 | ||
1109 | /* now move 'n' bytes: */ | 1043 | /* now move 'n' bytes: */ |
1110 | while (n-- > 0) | 1044 | while (n-- > 0) { |
1111 | { | ||
1112 | dest[(*dest_len)++] = rr->data[rr->off++]; | 1045 | dest[(*dest_len)++] = rr->data[rr->off++]; |
1113 | rr->length--; | 1046 | rr->length--; |
1114 | } | 1047 | } |
1115 | 1048 | ||
1116 | if (*dest_len < dest_maxlen) | 1049 | if (*dest_len < dest_maxlen) |
1117 | goto start; /* fragment was too small */ | 1050 | goto start; /* fragment was too small */ |
1118 | } | ||
1119 | } | 1051 | } |
1052 | } | ||
1120 | 1053 | ||
1121 | /* s->s3->handshake_fragment_len == 4 iff rr->type == SSL3_RT_HANDSHAKE; | 1054 | /* s->s3->handshake_fragment_len == 4 iff rr->type == SSL3_RT_HANDSHAKE; |
1122 | * s->s3->alert_fragment_len == 2 iff rr->type == SSL3_RT_ALERT. | 1055 | * s->s3->alert_fragment_len == 2 iff rr->type == SSL3_RT_ALERT. |
1123 | * (Possibly rr is 'empty' now, i.e. rr->length may be 0.) */ | 1056 | * (Possibly rr is 'empty' now, i.e. rr->length may be 0.) */ |
1124 | 1057 | ||
1125 | /* If we are a client, check for an incoming 'Hello Request': */ | 1058 | /* If we are a client, check for an incoming 'Hello Request': */ |
1126 | if ((!s->server) && | 1059 | if ((!s->server) && (s->s3->handshake_fragment_len >= 4) && |
1127 | (s->s3->handshake_fragment_len >= 4) && | 1060 | (s->s3->handshake_fragment[0] == SSL3_MT_HELLO_REQUEST) && |
1128 | (s->s3->handshake_fragment[0] == SSL3_MT_HELLO_REQUEST) && | 1061 | (s->session != NULL) && (s->session->cipher != NULL)) { |
1129 | (s->session != NULL) && (s->session->cipher != NULL)) | ||
1130 | { | ||
1131 | s->s3->handshake_fragment_len = 0; | 1062 | s->s3->handshake_fragment_len = 0; |
1132 | 1063 | ||
1133 | if ((s->s3->handshake_fragment[1] != 0) || | 1064 | if ((s->s3->handshake_fragment[1] != 0) || |
1134 | (s->s3->handshake_fragment[2] != 0) || | 1065 | (s->s3->handshake_fragment[2] != 0) || |
1135 | (s->s3->handshake_fragment[3] != 0)) | 1066 | (s->s3->handshake_fragment[3] != 0)) { |
1136 | { | 1067 | al = SSL_AD_DECODE_ERROR; |
1137 | al=SSL_AD_DECODE_ERROR; | 1068 | SSLerr(SSL_F_SSL3_READ_BYTES, SSL_R_BAD_HELLO_REQUEST); |
1138 | SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_BAD_HELLO_REQUEST); | ||
1139 | goto f_err; | 1069 | goto f_err; |
1140 | } | 1070 | } |
1141 | 1071 | ||
1142 | if (s->msg_callback) | 1072 | if (s->msg_callback) |
1143 | s->msg_callback(0, s->version, SSL3_RT_HANDSHAKE, s->s3->handshake_fragment, 4, s, s->msg_callback_arg); | 1073 | s->msg_callback(0, s->version, SSL3_RT_HANDSHAKE, s->s3->handshake_fragment, 4, s, s->msg_callback_arg); |
1144 | 1074 | ||
1145 | if (SSL_is_init_finished(s) && | 1075 | if (SSL_is_init_finished(s) && |
1146 | !(s->s3->flags & SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS) && | 1076 | !(s->s3->flags & SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS) && |
1147 | !s->s3->renegotiate) | 1077 | !s->s3->renegotiate) { |
1148 | { | ||
1149 | ssl3_renegotiate(s); | 1078 | ssl3_renegotiate(s); |
1150 | if (ssl3_renegotiate_check(s)) | 1079 | if (ssl3_renegotiate_check(s)) { |
1151 | { | 1080 | i = s->handshake_func(s); |
1152 | i=s->handshake_func(s); | 1081 | if (i < 0) |
1153 | if (i < 0) return(i); | 1082 | return (i); |
1154 | if (i == 0) | 1083 | if (i == 0) { |
1155 | { | 1084 | SSLerr(SSL_F_SSL3_READ_BYTES, SSL_R_SSL_HANDSHAKE_FAILURE); |
1156 | SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_SSL_HANDSHAKE_FAILURE); | 1085 | return (-1); |
1157 | return(-1); | 1086 | } |
1158 | } | ||
1159 | 1087 | ||
1160 | if (!(s->mode & SSL_MODE_AUTO_RETRY)) | 1088 | if (!(s->mode & SSL_MODE_AUTO_RETRY)) { |
1161 | { | ||
1162 | if (s->s3->rbuf.left == 0) /* no read-ahead left? */ | 1089 | if (s->s3->rbuf.left == 0) /* no read-ahead left? */ |
1163 | { | 1090 | { |
1164 | BIO *bio; | 1091 | BIO *bio; |
1165 | /* In the case where we try to read application data, | 1092 | /* In the case where we try to read application data, |
1166 | * but we trigger an SSL handshake, we return -1 with | 1093 | * but we trigger an SSL handshake, we return -1 with |
1167 | * the retry option set. Otherwise renegotiation may | 1094 | * the retry option set. Otherwise renegotiation may |
1168 | * cause nasty problems in the blocking world */ | 1095 | * cause nasty problems in the blocking world */ |
1169 | s->rwstate=SSL_READING; | 1096 | s->rwstate = SSL_READING; |
1170 | bio=SSL_get_rbio(s); | 1097 | bio = SSL_get_rbio(s); |
1171 | BIO_clear_retry_flags(bio); | 1098 | BIO_clear_retry_flags(bio); |
1172 | BIO_set_retry_read(bio); | 1099 | BIO_set_retry_read(bio); |
1173 | return(-1); | 1100 | return (-1); |
1174 | } | ||
1175 | } | 1101 | } |
1176 | } | 1102 | } |
1177 | } | 1103 | } |
1104 | } | ||
1178 | /* we either finished a handshake or ignored the request, | 1105 | /* we either finished a handshake or ignored the request, |
1179 | * now try again to obtain the (application) data we were asked for */ | 1106 | * now try again to obtain the (application) data we were asked for */ |
1180 | goto start; | 1107 | goto start; |
1181 | } | 1108 | } |
1182 | /* If we are a server and get a client hello when renegotiation isn't | 1109 | /* If we are a server and get a client hello when renegotiation isn't |
1183 | * allowed send back a no renegotiation alert and carry on. | 1110 | * allowed send back a no renegotiation alert and carry on. |
1184 | * WARNING: experimental code, needs reviewing (steve) | 1111 | * WARNING: experimental code, needs reviewing (steve) |
1185 | */ | 1112 | */ |
1186 | if (s->server && | 1113 | if (s->server && |
1187 | SSL_is_init_finished(s) && | 1114 | SSL_is_init_finished(s) && |
1188 | !s->s3->send_connection_binding && | 1115 | !s->s3->send_connection_binding && |
1189 | (s->version > SSL3_VERSION) && | 1116 | (s->version > SSL3_VERSION) && |
1190 | (s->s3->handshake_fragment_len >= 4) && | 1117 | (s->s3->handshake_fragment_len >= 4) && |
1191 | (s->s3->handshake_fragment[0] == SSL3_MT_CLIENT_HELLO) && | 1118 | (s->s3->handshake_fragment[0] == SSL3_MT_CLIENT_HELLO) && |
1192 | (s->session != NULL) && (s->session->cipher != NULL) && | 1119 | (s->session != NULL) && (s->session->cipher != NULL) && |
1193 | !(s->ctx->options & SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION)) | 1120 | !(s->ctx->options & SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION)) { |
1194 | |||
1195 | { | ||
1196 | /*s->s3->handshake_fragment_len = 0;*/ | 1121 | /*s->s3->handshake_fragment_len = 0;*/ |
1197 | rr->length = 0; | 1122 | rr->length = 0; |
1198 | ssl3_send_alert(s,SSL3_AL_WARNING, SSL_AD_NO_RENEGOTIATION); | 1123 | ssl3_send_alert(s, SSL3_AL_WARNING, SSL_AD_NO_RENEGOTIATION); |
1199 | goto start; | 1124 | goto start; |
1200 | } | 1125 | } |
1201 | if (s->s3->alert_fragment_len >= 2) | 1126 | if (s->s3->alert_fragment_len >= 2) { |
1202 | { | ||
1203 | int alert_level = s->s3->alert_fragment[0]; | 1127 | int alert_level = s->s3->alert_fragment[0]; |
1204 | int alert_descr = s->s3->alert_fragment[1]; | 1128 | int alert_descr = s->s3->alert_fragment[1]; |
1205 | 1129 | ||
@@ -1209,24 +1133,22 @@ start: | |||
1209 | s->msg_callback(0, s->version, SSL3_RT_ALERT, s->s3->alert_fragment, 2, s, s->msg_callback_arg); | 1133 | s->msg_callback(0, s->version, SSL3_RT_ALERT, s->s3->alert_fragment, 2, s, s->msg_callback_arg); |
1210 | 1134 | ||
1211 | if (s->info_callback != NULL) | 1135 | if (s->info_callback != NULL) |
1212 | cb=s->info_callback; | 1136 | cb = s->info_callback; |
1213 | else if (s->ctx->info_callback != NULL) | 1137 | else if (s->ctx->info_callback != NULL) |
1214 | cb=s->ctx->info_callback; | 1138 | cb = s->ctx->info_callback; |
1215 | 1139 | ||
1216 | if (cb != NULL) | 1140 | if (cb != NULL) { |
1217 | { | ||
1218 | j = (alert_level << 8) | alert_descr; | 1141 | j = (alert_level << 8) | alert_descr; |
1219 | cb(s, SSL_CB_READ_ALERT, j); | 1142 | cb(s, SSL_CB_READ_ALERT, j); |
1220 | } | 1143 | } |
1221 | 1144 | ||
1222 | if (alert_level == 1) /* warning */ | 1145 | if (alert_level == 1) /* warning */ |
1223 | { | 1146 | { |
1224 | s->s3->warn_alert = alert_descr; | 1147 | s->s3->warn_alert = alert_descr; |
1225 | if (alert_descr == SSL_AD_CLOSE_NOTIFY) | 1148 | if (alert_descr == SSL_AD_CLOSE_NOTIFY) { |
1226 | { | ||
1227 | s->shutdown |= SSL_RECEIVED_SHUTDOWN; | 1149 | s->shutdown |= SSL_RECEIVED_SHUTDOWN; |
1228 | return(0); | 1150 | return (0); |
1229 | } | 1151 | } |
1230 | /* This is a warning but we receive it if we requested | 1152 | /* This is a warning but we receive it if we requested |
1231 | * renegotiation and the peer denied it. Terminate with | 1153 | * renegotiation and the peer denied it. Terminate with |
1232 | * a fatal alert because if application tried to | 1154 | * a fatal alert because if application tried to |
@@ -1236,139 +1158,126 @@ start: | |||
1236 | * In future we might have a renegotiation where we | 1158 | * In future we might have a renegotiation where we |
1237 | * don't care if the peer refused it where we carry on. | 1159 | * don't care if the peer refused it where we carry on. |
1238 | */ | 1160 | */ |
1239 | else if (alert_descr == SSL_AD_NO_RENEGOTIATION) | 1161 | else if (alert_descr == SSL_AD_NO_RENEGOTIATION) { |
1240 | { | ||
1241 | al = SSL_AD_HANDSHAKE_FAILURE; | 1162 | al = SSL_AD_HANDSHAKE_FAILURE; |
1242 | SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_NO_RENEGOTIATION); | 1163 | SSLerr(SSL_F_SSL3_READ_BYTES, SSL_R_NO_RENEGOTIATION); |
1243 | goto f_err; | 1164 | goto f_err; |
1244 | } | 1165 | } |
1245 | #ifdef SSL_AD_MISSING_SRP_USERNAME | 1166 | #ifdef SSL_AD_MISSING_SRP_USERNAME |
1246 | else if (alert_descr == SSL_AD_MISSING_SRP_USERNAME) | 1167 | else if (alert_descr == SSL_AD_MISSING_SRP_USERNAME) |
1247 | return(0); | 1168 | return (0); |
1248 | #endif | 1169 | #endif |
1249 | } | 1170 | } else if (alert_level == 2) /* fatal */ |
1250 | else if (alert_level == 2) /* fatal */ | 1171 | { |
1251 | { | ||
1252 | char tmp[16]; | 1172 | char tmp[16]; |
1253 | 1173 | ||
1254 | s->rwstate=SSL_NOTHING; | 1174 | s->rwstate = SSL_NOTHING; |
1255 | s->s3->fatal_alert = alert_descr; | 1175 | s->s3->fatal_alert = alert_descr; |
1256 | SSLerr(SSL_F_SSL3_READ_BYTES, SSL_AD_REASON_OFFSET + alert_descr); | 1176 | SSLerr(SSL_F_SSL3_READ_BYTES, SSL_AD_REASON_OFFSET + alert_descr); |
1257 | BIO_snprintf(tmp,sizeof tmp,"%d",alert_descr); | 1177 | BIO_snprintf(tmp, sizeof tmp, "%d", alert_descr); |
1258 | ERR_add_error_data(2,"SSL alert number ",tmp); | 1178 | ERR_add_error_data(2, "SSL alert number ", tmp); |
1259 | s->shutdown|=SSL_RECEIVED_SHUTDOWN; | 1179 | s->shutdown|=SSL_RECEIVED_SHUTDOWN; |
1260 | SSL_CTX_remove_session(s->ctx,s->session); | 1180 | SSL_CTX_remove_session(s->ctx, s->session); |
1261 | return(0); | 1181 | return (0); |
1262 | } | 1182 | } else { |
1263 | else | 1183 | al = SSL_AD_ILLEGAL_PARAMETER; |
1264 | { | 1184 | SSLerr(SSL_F_SSL3_READ_BYTES, SSL_R_UNKNOWN_ALERT_TYPE); |
1265 | al=SSL_AD_ILLEGAL_PARAMETER; | ||
1266 | SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_UNKNOWN_ALERT_TYPE); | ||
1267 | goto f_err; | 1185 | goto f_err; |
1268 | } | 1186 | } |
1269 | 1187 | ||
1270 | goto start; | 1188 | goto start; |
1271 | } | 1189 | } |
1272 | 1190 | ||
1273 | if (s->shutdown & SSL_SENT_SHUTDOWN) /* but we have not received a shutdown */ | 1191 | if (s->shutdown & SSL_SENT_SHUTDOWN) /* but we have not received a shutdown */ |
1274 | { | 1192 | { |
1275 | s->rwstate=SSL_NOTHING; | 1193 | s->rwstate = SSL_NOTHING; |
1276 | rr->length=0; | 1194 | rr->length = 0; |
1277 | return(0); | 1195 | return (0); |
1278 | } | 1196 | } |
1279 | 1197 | ||
1280 | if (rr->type == SSL3_RT_CHANGE_CIPHER_SPEC) | 1198 | if (rr->type == SSL3_RT_CHANGE_CIPHER_SPEC) { |
1281 | { | ||
1282 | /* 'Change Cipher Spec' is just a single byte, so we know | 1199 | /* 'Change Cipher Spec' is just a single byte, so we know |
1283 | * exactly what the record payload has to look like */ | 1200 | * exactly what the record payload has to look like */ |
1284 | if ( (rr->length != 1) || (rr->off != 0) || | 1201 | if ((rr->length != 1) || (rr->off != 0) || |
1285 | (rr->data[0] != SSL3_MT_CCS)) | 1202 | (rr->data[0] != SSL3_MT_CCS)) { |
1286 | { | 1203 | al = SSL_AD_ILLEGAL_PARAMETER; |
1287 | al=SSL_AD_ILLEGAL_PARAMETER; | 1204 | SSLerr(SSL_F_SSL3_READ_BYTES, SSL_R_BAD_CHANGE_CIPHER_SPEC); |
1288 | SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_BAD_CHANGE_CIPHER_SPEC); | ||
1289 | goto f_err; | 1205 | goto f_err; |
1290 | } | 1206 | } |
1291 | 1207 | ||
1292 | /* Check we have a cipher to change to */ | 1208 | /* Check we have a cipher to change to */ |
1293 | if (s->s3->tmp.new_cipher == NULL) | 1209 | if (s->s3->tmp.new_cipher == NULL) { |
1294 | { | 1210 | al = SSL_AD_UNEXPECTED_MESSAGE; |
1295 | al=SSL_AD_UNEXPECTED_MESSAGE; | 1211 | SSLerr(SSL_F_SSL3_READ_BYTES, SSL_R_CCS_RECEIVED_EARLY); |
1296 | SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_CCS_RECEIVED_EARLY); | ||
1297 | goto f_err; | 1212 | goto f_err; |
1298 | } | 1213 | } |
1299 | 1214 | ||
1300 | rr->length=0; | 1215 | rr->length = 0; |
1301 | 1216 | ||
1302 | if (s->msg_callback) | 1217 | if (s->msg_callback) |
1303 | s->msg_callback(0, s->version, SSL3_RT_CHANGE_CIPHER_SPEC, rr->data, 1, s, s->msg_callback_arg); | 1218 | s->msg_callback(0, s->version, SSL3_RT_CHANGE_CIPHER_SPEC, rr->data, 1, s, s->msg_callback_arg); |
1304 | 1219 | ||
1305 | s->s3->change_cipher_spec=1; | 1220 | s->s3->change_cipher_spec = 1; |
1306 | if (!ssl3_do_change_cipher_spec(s)) | 1221 | if (!ssl3_do_change_cipher_spec(s)) |
1307 | goto err; | 1222 | goto err; |
1308 | else | 1223 | else |
1309 | goto start; | 1224 | goto start; |
1310 | } | 1225 | } |
1311 | 1226 | ||
1312 | /* Unexpected handshake message (Client Hello, or protocol violation) */ | 1227 | /* Unexpected handshake message (Client Hello, or protocol violation) */ |
1313 | if ((s->s3->handshake_fragment_len >= 4) && !s->in_handshake) | 1228 | if ((s->s3->handshake_fragment_len >= 4) && !s->in_handshake) { |
1314 | { | ||
1315 | if (((s->state&SSL_ST_MASK) == SSL_ST_OK) && | 1229 | if (((s->state&SSL_ST_MASK) == SSL_ST_OK) && |
1316 | !(s->s3->flags & SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS)) | 1230 | !(s->s3->flags & SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS)) { |
1317 | { | ||
1318 | #if 0 /* worked only because C operator preferences are not as expected (and | 1231 | #if 0 /* worked only because C operator preferences are not as expected (and |
1319 | * because this is not really needed for clients except for detecting | 1232 | * because this is not really needed for clients except for detecting |
1320 | * protocol violations): */ | 1233 | * protocol violations): */ |
1321 | s->state=SSL_ST_BEFORE|(s->server) | 1234 | s->state = SSL_ST_BEFORE | |
1322 | ?SSL_ST_ACCEPT | 1235 | (s->server) ? SSL_ST_ACCEPT : SSL_ST_CONNECT; |
1323 | :SSL_ST_CONNECT; | ||
1324 | #else | 1236 | #else |
1325 | s->state = s->server ? SSL_ST_ACCEPT : SSL_ST_CONNECT; | 1237 | s->state = s->server ? SSL_ST_ACCEPT : SSL_ST_CONNECT; |
1326 | #endif | 1238 | #endif |
1327 | s->renegotiate=1; | 1239 | s->renegotiate = 1; |
1328 | s->new_session=1; | 1240 | s->new_session = 1; |
1329 | } | 1241 | } |
1330 | i=s->handshake_func(s); | 1242 | i = s->handshake_func(s); |
1331 | if (i < 0) return(i); | 1243 | if (i < 0) |
1332 | if (i == 0) | 1244 | return (i); |
1333 | { | 1245 | if (i == 0) { |
1334 | SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_SSL_HANDSHAKE_FAILURE); | 1246 | SSLerr(SSL_F_SSL3_READ_BYTES, SSL_R_SSL_HANDSHAKE_FAILURE); |
1335 | return(-1); | 1247 | return (-1); |
1336 | } | 1248 | } |
1337 | 1249 | ||
1338 | if (!(s->mode & SSL_MODE_AUTO_RETRY)) | 1250 | if (!(s->mode & SSL_MODE_AUTO_RETRY)) { |
1339 | { | ||
1340 | if (s->s3->rbuf.left == 0) /* no read-ahead left? */ | 1251 | if (s->s3->rbuf.left == 0) /* no read-ahead left? */ |
1341 | { | 1252 | { |
1342 | BIO *bio; | 1253 | BIO *bio; |
1343 | /* In the case where we try to read application data, | 1254 | /* In the case where we try to read application data, |
1344 | * but we trigger an SSL handshake, we return -1 with | 1255 | * but we trigger an SSL handshake, we return -1 with |
1345 | * the retry option set. Otherwise renegotiation may | 1256 | * the retry option set. Otherwise renegotiation may |
1346 | * cause nasty problems in the blocking world */ | 1257 | * cause nasty problems in the blocking world */ |
1347 | s->rwstate=SSL_READING; | 1258 | s->rwstate = SSL_READING; |
1348 | bio=SSL_get_rbio(s); | 1259 | bio = SSL_get_rbio(s); |
1349 | BIO_clear_retry_flags(bio); | 1260 | BIO_clear_retry_flags(bio); |
1350 | BIO_set_retry_read(bio); | 1261 | BIO_set_retry_read(bio); |
1351 | return(-1); | 1262 | return (-1); |
1352 | } | ||
1353 | } | 1263 | } |
1354 | goto start; | ||
1355 | } | 1264 | } |
1265 | goto start; | ||
1266 | } | ||
1356 | 1267 | ||
1357 | switch (rr->type) | 1268 | switch (rr->type) { |
1358 | { | ||
1359 | default: | 1269 | default: |
1360 | #ifndef OPENSSL_NO_TLS | 1270 | #ifndef OPENSSL_NO_TLS |
1361 | /* TLS up to v1.1 just ignores unknown message types: | 1271 | /* TLS up to v1.1 just ignores unknown message types: |
1362 | * TLS v1.2 give an unexpected message alert. | 1272 | * TLS v1.2 give an unexpected message alert. |
1363 | */ | 1273 | */ |
1364 | if (s->version >= TLS1_VERSION && s->version <= TLS1_1_VERSION) | 1274 | if (s->version >= TLS1_VERSION && s->version <= TLS1_1_VERSION) { |
1365 | { | ||
1366 | rr->length = 0; | 1275 | rr->length = 0; |
1367 | goto start; | 1276 | goto start; |
1368 | } | 1277 | } |
1369 | #endif | 1278 | #endif |
1370 | al=SSL_AD_UNEXPECTED_MESSAGE; | 1279 | al = SSL_AD_UNEXPECTED_MESSAGE; |
1371 | SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_UNEXPECTED_RECORD); | 1280 | SSLerr(SSL_F_SSL3_READ_BYTES, SSL_R_UNEXPECTED_RECORD); |
1372 | goto f_err; | 1281 | goto f_err; |
1373 | case SSL3_RT_CHANGE_CIPHER_SPEC: | 1282 | case SSL3_RT_CHANGE_CIPHER_SPEC: |
1374 | case SSL3_RT_ALERT: | 1283 | case SSL3_RT_ALERT: |
@@ -1376,8 +1285,8 @@ start: | |||
1376 | /* we already handled all of these, with the possible exception | 1285 | /* we already handled all of these, with the possible exception |
1377 | * of SSL3_RT_HANDSHAKE when s->in_handshake is set, but that | 1286 | * of SSL3_RT_HANDSHAKE when s->in_handshake is set, but that |
1378 | * should not happen when type != rr->type */ | 1287 | * should not happen when type != rr->type */ |
1379 | al=SSL_AD_UNEXPECTED_MESSAGE; | 1288 | al = SSL_AD_UNEXPECTED_MESSAGE; |
1380 | SSLerr(SSL_F_SSL3_READ_BYTES,ERR_R_INTERNAL_ERROR); | 1289 | SSLerr(SSL_F_SSL3_READ_BYTES, ERR_R_INTERNAL_ERROR); |
1381 | goto f_err; | 1290 | goto f_err; |
1382 | case SSL3_RT_APPLICATION_DATA: | 1291 | case SSL3_RT_APPLICATION_DATA: |
1383 | /* At this point, we were expecting handshake data, | 1292 | /* At this point, we were expecting handshake data, |
@@ -1388,123 +1297,116 @@ start: | |||
1388 | * we will indulge it. | 1297 | * we will indulge it. |
1389 | */ | 1298 | */ |
1390 | if (s->s3->in_read_app_data && | 1299 | if (s->s3->in_read_app_data && |
1391 | (s->s3->total_renegotiations != 0) && | 1300 | (s->s3->total_renegotiations != 0) && |
1392 | (( | 1301 | (( |
1393 | (s->state & SSL_ST_CONNECT) && | 1302 | (s->state & SSL_ST_CONNECT) && |
1394 | (s->state >= SSL3_ST_CW_CLNT_HELLO_A) && | 1303 | (s->state >= SSL3_ST_CW_CLNT_HELLO_A) && |
1395 | (s->state <= SSL3_ST_CR_SRVR_HELLO_A) | 1304 | (s->state <= SSL3_ST_CR_SRVR_HELLO_A) |
1396 | ) || ( | 1305 | ) || ( |
1397 | (s->state & SSL_ST_ACCEPT) && | 1306 | (s->state & SSL_ST_ACCEPT) && |
1398 | (s->state <= SSL3_ST_SW_HELLO_REQ_A) && | 1307 | (s->state <= SSL3_ST_SW_HELLO_REQ_A) && |
1399 | (s->state >= SSL3_ST_SR_CLNT_HELLO_A) | 1308 | (s->state >= SSL3_ST_SR_CLNT_HELLO_A) |
1400 | ) | 1309 | ) |
1401 | )) | 1310 | )) { |
1402 | { | 1311 | s->s3->in_read_app_data = 2; |
1403 | s->s3->in_read_app_data=2; | 1312 | return (-1); |
1404 | return(-1); | 1313 | } else { |
1405 | } | 1314 | al = SSL_AD_UNEXPECTED_MESSAGE; |
1406 | else | 1315 | SSLerr(SSL_F_SSL3_READ_BYTES, SSL_R_UNEXPECTED_RECORD); |
1407 | { | ||
1408 | al=SSL_AD_UNEXPECTED_MESSAGE; | ||
1409 | SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_UNEXPECTED_RECORD); | ||
1410 | goto f_err; | 1316 | goto f_err; |
1411 | } | ||
1412 | } | 1317 | } |
1318 | } | ||
1413 | /* not reached */ | 1319 | /* not reached */ |
1414 | 1320 | ||
1415 | f_err: | 1321 | f_err: |
1416 | ssl3_send_alert(s,SSL3_AL_FATAL,al); | 1322 | ssl3_send_alert(s, SSL3_AL_FATAL, al); |
1417 | err: | 1323 | err: |
1418 | return(-1); | 1324 | return (-1); |
1419 | } | 1325 | } |
1420 | 1326 | ||
1421 | int ssl3_do_change_cipher_spec(SSL *s) | 1327 | int |
1422 | { | 1328 | ssl3_do_change_cipher_spec(SSL *s) |
1329 | { | ||
1423 | int i; | 1330 | int i; |
1424 | const char *sender; | 1331 | const char *sender; |
1425 | int slen; | 1332 | int slen; |
1426 | 1333 | ||
1427 | if (s->state & SSL_ST_ACCEPT) | 1334 | if (s->state & SSL_ST_ACCEPT) |
1428 | i=SSL3_CHANGE_CIPHER_SERVER_READ; | 1335 | i = SSL3_CHANGE_CIPHER_SERVER_READ; |
1429 | else | 1336 | else |
1430 | i=SSL3_CHANGE_CIPHER_CLIENT_READ; | 1337 | i = SSL3_CHANGE_CIPHER_CLIENT_READ; |
1431 | 1338 | ||
1432 | if (s->s3->tmp.key_block == NULL) | 1339 | if (s->s3->tmp.key_block == NULL) { |
1433 | { | 1340 | if (s->session == NULL) { |
1434 | if (s->session == NULL) | ||
1435 | { | ||
1436 | /* might happen if dtls1_read_bytes() calls this */ | 1341 | /* might happen if dtls1_read_bytes() calls this */ |
1437 | SSLerr(SSL_F_SSL3_DO_CHANGE_CIPHER_SPEC,SSL_R_CCS_RECEIVED_EARLY); | 1342 | SSLerr(SSL_F_SSL3_DO_CHANGE_CIPHER_SPEC, SSL_R_CCS_RECEIVED_EARLY); |
1438 | return (0); | 1343 | return (0); |
1439 | } | ||
1440 | |||
1441 | s->session->cipher=s->s3->tmp.new_cipher; | ||
1442 | if (!s->method->ssl3_enc->setup_key_block(s)) return(0); | ||
1443 | } | 1344 | } |
1444 | 1345 | ||
1445 | if (!s->method->ssl3_enc->change_cipher_state(s,i)) | 1346 | s->session->cipher = s->s3->tmp.new_cipher; |
1446 | return(0); | 1347 | if (!s->method->ssl3_enc->setup_key_block(s)) |
1348 | return (0); | ||
1349 | } | ||
1350 | |||
1351 | if (!s->method->ssl3_enc->change_cipher_state(s, i)) | ||
1352 | return (0); | ||
1447 | 1353 | ||
1448 | /* we have to record the message digest at | 1354 | /* we have to record the message digest at |
1449 | * this point so we can get it before we read | 1355 | * this point so we can get it before we read |
1450 | * the finished message */ | 1356 | * the finished message */ |
1451 | if (s->state & SSL_ST_CONNECT) | 1357 | if (s->state & SSL_ST_CONNECT) { |
1452 | { | 1358 | sender = s->method->ssl3_enc->server_finished_label; |
1453 | sender=s->method->ssl3_enc->server_finished_label; | 1359 | slen = s->method->ssl3_enc->server_finished_label_len; |
1454 | slen=s->method->ssl3_enc->server_finished_label_len; | 1360 | } else { |
1455 | } | 1361 | sender = s->method->ssl3_enc->client_finished_label; |
1456 | else | 1362 | slen = s->method->ssl3_enc->client_finished_label_len; |
1457 | { | 1363 | } |
1458 | sender=s->method->ssl3_enc->client_finished_label; | ||
1459 | slen=s->method->ssl3_enc->client_finished_label_len; | ||
1460 | } | ||
1461 | 1364 | ||
1462 | i = s->method->ssl3_enc->final_finish_mac(s, | 1365 | i = s->method->ssl3_enc->final_finish_mac(s, |
1463 | sender,slen,s->s3->tmp.peer_finish_md); | 1366 | sender, slen, s->s3->tmp.peer_finish_md); |
1464 | if (i == 0) | 1367 | if (i == 0) { |
1465 | { | ||
1466 | SSLerr(SSL_F_SSL3_DO_CHANGE_CIPHER_SPEC, ERR_R_INTERNAL_ERROR); | 1368 | SSLerr(SSL_F_SSL3_DO_CHANGE_CIPHER_SPEC, ERR_R_INTERNAL_ERROR); |
1467 | return 0; | 1369 | return 0; |
1468 | } | 1370 | } |
1469 | s->s3->tmp.peer_finish_md_len = i; | 1371 | s->s3->tmp.peer_finish_md_len = i; |
1470 | 1372 | ||
1471 | return(1); | 1373 | return (1); |
1472 | } | 1374 | } |
1473 | 1375 | ||
1474 | int ssl3_send_alert(SSL *s, int level, int desc) | 1376 | int |
1475 | { | 1377 | ssl3_send_alert(SSL *s, int level, int desc) |
1378 | { | ||
1476 | /* Map tls/ssl alert value to correct one */ | 1379 | /* Map tls/ssl alert value to correct one */ |
1477 | desc=s->method->ssl3_enc->alert_value(desc); | 1380 | desc = s->method->ssl3_enc->alert_value(desc); |
1478 | if (s->version == SSL3_VERSION && desc == SSL_AD_PROTOCOL_VERSION) | 1381 | if (s->version == SSL3_VERSION && desc == SSL_AD_PROTOCOL_VERSION) |
1479 | desc = SSL_AD_HANDSHAKE_FAILURE; /* SSL 3.0 does not have protocol_version alerts */ | 1382 | desc = SSL_AD_HANDSHAKE_FAILURE; /* SSL 3.0 does not have protocol_version alerts */ |
1480 | if (desc < 0) return -1; | 1383 | if (desc < 0) |
1384 | return -1; | ||
1481 | /* If a fatal one, remove from cache */ | 1385 | /* If a fatal one, remove from cache */ |
1482 | if ((level == 2) && (s->session != NULL)) | 1386 | if ((level == 2) && (s->session != NULL)) |
1483 | SSL_CTX_remove_session(s->ctx,s->session); | 1387 | SSL_CTX_remove_session(s->ctx, s->session); |
1484 | 1388 | ||
1485 | s->s3->alert_dispatch=1; | 1389 | s->s3->alert_dispatch = 1; |
1486 | s->s3->send_alert[0]=level; | 1390 | s->s3->send_alert[0] = level; |
1487 | s->s3->send_alert[1]=desc; | 1391 | s->s3->send_alert[1] = desc; |
1488 | if (s->s3->wbuf.left == 0) /* data still being written out? */ | 1392 | if (s->s3->wbuf.left == 0) /* data still being written out? */ |
1489 | return s->method->ssl_dispatch_alert(s); | 1393 | return s->method->ssl_dispatch_alert(s); |
1490 | /* else data is still being written out, we will get written | 1394 | /* else data is still being written out, we will get written |
1491 | * some time in the future */ | 1395 | * some time in the future */ |
1492 | return -1; | 1396 | return -1; |
1493 | } | 1397 | } |
1494 | 1398 | ||
1495 | int ssl3_dispatch_alert(SSL *s) | 1399 | int |
1496 | { | 1400 | ssl3_dispatch_alert(SSL *s) |
1497 | int i,j; | 1401 | { |
1498 | void (*cb)(const SSL *ssl,int type,int val)=NULL; | 1402 | int i, j; |
1403 | void (*cb)(const SSL *ssl, int type, int val) = NULL; | ||
1499 | 1404 | ||
1500 | s->s3->alert_dispatch=0; | 1405 | s->s3->alert_dispatch = 0; |
1501 | i = do_ssl3_write(s, SSL3_RT_ALERT, &s->s3->send_alert[0], 2, 0); | 1406 | i = do_ssl3_write(s, SSL3_RT_ALERT, &s->s3->send_alert[0], 2, 0); |
1502 | if (i <= 0) | 1407 | if (i <= 0) { |
1503 | { | 1408 | s->s3->alert_dispatch = 1; |
1504 | s->s3->alert_dispatch=1; | 1409 | } else { |
1505 | } | ||
1506 | else | ||
1507 | { | ||
1508 | /* Alert sent to BIO. If it is important, flush it now. | 1410 | /* Alert sent to BIO. If it is important, flush it now. |
1509 | * If the message does not get sent due to non-blocking IO, | 1411 | * If the message does not get sent due to non-blocking IO, |
1510 | * we will not worry too much. */ | 1412 | * we will not worry too much. */ |
@@ -1515,15 +1417,14 @@ int ssl3_dispatch_alert(SSL *s) | |||
1515 | s->msg_callback(1, s->version, SSL3_RT_ALERT, s->s3->send_alert, 2, s, s->msg_callback_arg); | 1417 | s->msg_callback(1, s->version, SSL3_RT_ALERT, s->s3->send_alert, 2, s, s->msg_callback_arg); |
1516 | 1418 | ||
1517 | if (s->info_callback != NULL) | 1419 | if (s->info_callback != NULL) |
1518 | cb=s->info_callback; | 1420 | cb = s->info_callback; |
1519 | else if (s->ctx->info_callback != NULL) | 1421 | else if (s->ctx->info_callback != NULL) |
1520 | cb=s->ctx->info_callback; | 1422 | cb = s->ctx->info_callback; |
1521 | 1423 | ||
1522 | if (cb != NULL) | 1424 | if (cb != NULL) { |
1523 | { | 1425 | j = (s->s3->send_alert[0]<<8)|s->s3->send_alert[1]; |
1524 | j=(s->s3->send_alert[0]<<8)|s->s3->send_alert[1]; | 1426 | cb(s, SSL_CB_WRITE_ALERT, j); |
1525 | cb(s,SSL_CB_WRITE_ALERT,j); | ||
1526 | } | ||
1527 | } | 1427 | } |
1528 | return(i); | ||
1529 | } | 1428 | } |
1429 | return (i); | ||
1430 | } | ||