Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(156)

Side by Side Diff: openssl/ssl/ssl_lib.c

Issue 9254031: Upgrade chrome's OpenSSL to same version Android ships with. (Closed) Base URL: http://src.chromium.org/svn/trunk/deps/third_party/openssl/
Patch Set: '' Created 8 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « openssl/ssl/ssl_err.c ('k') | openssl/ssl/ssl_locl.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /*! \file ssl/ssl_lib.c 1 /*! \file ssl/ssl_lib.c
2 * \brief Version independent SSL functions. 2 * \brief Version independent SSL functions.
3 */ 3 */
4 /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 4 /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
5 * All rights reserved. 5 * All rights reserved.
6 * 6 *
7 * This package is an SSL implementation written 7 * This package is an SSL implementation written
8 * by Eric Young (eay@cryptsoft.com). 8 * by Eric Young (eay@cryptsoft.com).
9 * The implementation was written so as to conform with Netscapes SSL. 9 * The implementation was written so as to conform with Netscapes SSL.
10 * 10 *
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
51 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 51 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
52 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 52 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
53 * SUCH DAMAGE. 53 * SUCH DAMAGE.
54 * 54 *
55 * The licence and distribution terms for any publically available version or 55 * The licence and distribution terms for any publically available version or
56 * derivative of this code cannot be changed. i.e. this code cannot simply be 56 * derivative of this code cannot be changed. i.e. this code cannot simply be
57 * copied and put under another distribution licence 57 * copied and put under another distribution licence
58 * [including the GNU Public Licence.] 58 * [including the GNU Public Licence.]
59 */ 59 */
60 /* ==================================================================== 60 /* ====================================================================
61 * Copyright (c) 1998-2001 The OpenSSL Project. All rights reserved. 61 * Copyright (c) 1998-2007 The OpenSSL Project. All rights reserved.
62 * 62 *
63 * Redistribution and use in source and binary forms, with or without 63 * Redistribution and use in source and binary forms, with or without
64 * modification, are permitted provided that the following conditions 64 * modification, are permitted provided that the following conditions
65 * are met: 65 * are met:
66 * 66 *
67 * 1. Redistributions of source code must retain the above copyright 67 * 1. Redistributions of source code must retain the above copyright
68 * notice, this list of conditions and the following disclaimer. 68 * notice, this list of conditions and the following disclaimer.
69 * 69 *
70 * 2. Redistributions in binary form must reproduce the above copyright 70 * 2. Redistributions in binary form must reproduce the above copyright
71 * notice, this list of conditions and the following disclaimer in 71 * notice, this list of conditions and the following disclaimer in
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
108 * This product includes cryptographic software written by Eric Young 108 * This product includes cryptographic software written by Eric Young
109 * (eay@cryptsoft.com). This product includes software written by Tim 109 * (eay@cryptsoft.com). This product includes software written by Tim
110 * Hudson (tjh@cryptsoft.com). 110 * Hudson (tjh@cryptsoft.com).
111 * 111 *
112 */ 112 */
113 /* ==================================================================== 113 /* ====================================================================
114 * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. 114 * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.
115 * ECC cipher suite support in OpenSSL originally developed by 115 * ECC cipher suite support in OpenSSL originally developed by
116 * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project. 116 * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project.
117 */ 117 */
118 /* ====================================================================
119 * Copyright 2005 Nokia. All rights reserved.
120 *
121 * The portions of the attached software ("Contribution") is developed by
122 * Nokia Corporation and is licensed pursuant to the OpenSSL open source
123 * license.
124 *
125 * The Contribution, originally written by Mika Kousa and Pasi Eronen of
126 * Nokia Corporation, consists of the "PSK" (Pre-Shared Key) ciphersuites
127 * support (see RFC 4279) to OpenSSL.
128 *
129 * No patent licenses or other rights except those expressly stated in
130 * the OpenSSL open source license shall be deemed granted or received
131 * expressly, by implication, estoppel, or otherwise.
132 *
133 * No assurances are provided by Nokia that the Contribution does not
134 * infringe the patent or other intellectual property rights of any third
135 * party or that the license provides you with all the necessary rights
136 * to make use of the Contribution.
137 *
138 * THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. IN
139 * ADDITION TO THE DISCLAIMERS INCLUDED IN THE LICENSE, NOKIA
140 * SPECIFICALLY DISCLAIMS ANY LIABILITY FOR CLAIMS BROUGHT BY YOU OR ANY
141 * OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS OR
142 * OTHERWISE.
143 */
118 144
119 #ifdef REF_CHECK 145 #ifdef REF_CHECK
120 # include <assert.h> 146 # include <assert.h>
121 #endif 147 #endif
122 #include <stdio.h> 148 #include <stdio.h>
123 #include "ssl_locl.h" 149 #include "ssl_locl.h"
124 #include "kssl_lcl.h" 150 #include "kssl_lcl.h"
125 #include <openssl/objects.h> 151 #include <openssl/objects.h>
126 #include <openssl/lhash.h> 152 #include <openssl/lhash.h>
127 #include <openssl/x509v3.h> 153 #include <openssl/x509v3.h>
128 #include <openssl/rand.h> 154 #include <openssl/rand.h>
129 #include <openssl/ocsp.h> 155 #include <openssl/ocsp.h>
130 #ifndef OPENSSL_NO_DH 156 #ifndef OPENSSL_NO_DH
131 #include <openssl/dh.h> 157 #include <openssl/dh.h>
132 #endif 158 #endif
133 #ifndef OPENSSL_NO_ENGINE 159 #ifndef OPENSSL_NO_ENGINE
134 #include <openssl/engine.h> 160 #include <openssl/engine.h>
135 #endif 161 #endif
136 162
137 const char *SSL_version_str=OPENSSL_VERSION_TEXT; 163 const char *SSL_version_str=OPENSSL_VERSION_TEXT;
138 164
139 SSL3_ENC_METHOD ssl3_undef_enc_method={ 165 SSL3_ENC_METHOD ssl3_undef_enc_method={
140 /* evil casts, but these functions are only called if there's a library bug */ 166 /* evil casts, but these functions are only called if there's a library bug */
141 (int (*)(SSL *,int))ssl_undefined_function, 167 (int (*)(SSL *,int))ssl_undefined_function,
142 (int (*)(SSL *, unsigned char *, int))ssl_undefined_function, 168 (int (*)(SSL *, unsigned char *, int))ssl_undefined_function,
143 ssl_undefined_function, 169 ssl_undefined_function,
144 (int (*)(SSL *, unsigned char *, unsigned char *, int))ssl_undefined_fun ction, 170 (int (*)(SSL *, unsigned char *, unsigned char *, int))ssl_undefined_fun ction,
145 (int (*)(SSL*, int))ssl_undefined_function, 171 (int (*)(SSL*, int))ssl_undefined_function,
146 » (int (*)(SSL *, EVP_MD_CTX *, EVP_MD_CTX *, const char*, int, unsigned c har *))ssl_undefined_function, 172 » (int (*)(SSL *, const char*, int, unsigned char *))ssl_undefined_functi on,
147 0, /* finish_mac_length */ 173 0, /* finish_mac_length */
148 » (int (*)(SSL *, EVP_MD_CTX *, unsigned char *))ssl_undefined_function, 174 » (int (*)(SSL *, int, unsigned char *))ssl_undefined_function,
149 NULL, /* client_finished_label */ 175 NULL, /* client_finished_label */
150 0, /* client_finished_label_len */ 176 0, /* client_finished_label_len */
151 NULL, /* server_finished_label */ 177 NULL, /* server_finished_label */
152 0, /* server_finished_label_len */ 178 0, /* server_finished_label_len */
153 (int (*)(int))ssl_undefined_function 179 (int (*)(int))ssl_undefined_function
154 }; 180 };
155 181
156 int SSL_clear(SSL *s) 182 int SSL_clear(SSL *s)
157 { 183 {
158 184
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
197 s->read_ahead=s->ctx->read_ahead; 223 s->read_ahead=s->ctx->read_ahead;
198 #endif 224 #endif
199 225
200 if (s->init_buf != NULL) 226 if (s->init_buf != NULL)
201 { 227 {
202 BUF_MEM_free(s->init_buf); 228 BUF_MEM_free(s->init_buf);
203 s->init_buf=NULL; 229 s->init_buf=NULL;
204 } 230 }
205 231
206 ssl_clear_cipher_ctx(s); 232 ssl_clear_cipher_ctx(s);
233 ssl_clear_hash_ctx(&s->read_hash);
234 ssl_clear_hash_ctx(&s->write_hash);
207 235
208 s->first_packet=0; 236 s->first_packet=0;
209 237
210 #if 1 238 #if 1
211 /* Check to see if we were changed into a different method, if 239 /* Check to see if we were changed into a different method, if
212 * so, revert back if we are not doing session-id reuse. */ 240 * so, revert back if we are not doing session-id reuse. */
213 if (!s->in_handshake && (s->session == NULL) && (s->method != s->ctx->me thod)) 241 if (!s->in_handshake && (s->session == NULL) && (s->method != s->ctx->me thod))
214 { 242 {
215 s->method->ssl_free(s); 243 s->method->ssl_free(s);
216 s->method=s->ctx->method; 244 s->method=s->ctx->method;
217 if (!s->method->ssl_new(s)) 245 if (!s->method->ssl_new(s))
218 return(0); 246 return(0);
219 } 247 }
220 else 248 else
221 #endif 249 #endif
222 s->method->ssl_clear(s); 250 s->method->ssl_clear(s);
223 return(1); 251 return(1);
224 } 252 }
225 253
226 /** Used to change an SSL_CTXs default SSL method type */ 254 /** Used to change an SSL_CTXs default SSL method type */
227 int SSL_CTX_set_ssl_version(SSL_CTX *ctx,SSL_METHOD *meth) 255 int SSL_CTX_set_ssl_version(SSL_CTX *ctx,const SSL_METHOD *meth)
228 { 256 {
229 STACK_OF(SSL_CIPHER) *sk; 257 STACK_OF(SSL_CIPHER) *sk;
230 258
231 ctx->method=meth; 259 ctx->method=meth;
232 260
233 sk=ssl_create_cipher_list(ctx->method,&(ctx->cipher_list), 261 sk=ssl_create_cipher_list(ctx->method,&(ctx->cipher_list),
234 » » &(ctx->cipher_list_by_id),SSL_DEFAULT_CIPHER_LIST); 262 » » &(ctx->cipher_list_by_id),
263 » » meth->version == SSL2_VERSION ? "SSLv2" : SSL_DEFAULT_CIPHER_LIS T);
235 if ((sk == NULL) || (sk_SSL_CIPHER_num(sk) <= 0)) 264 if ((sk == NULL) || (sk_SSL_CIPHER_num(sk) <= 0))
236 { 265 {
237 SSLerr(SSL_F_SSL_CTX_SET_SSL_VERSION,SSL_R_SSL_LIBRARY_HAS_NO_CI PHERS); 266 SSLerr(SSL_F_SSL_CTX_SET_SSL_VERSION,SSL_R_SSL_LIBRARY_HAS_NO_CI PHERS);
238 return(0); 267 return(0);
239 } 268 }
240 return(1); 269 return(1);
241 } 270 }
242 271
243 SSL *SSL_new(SSL_CTX *ctx) 272 SSL *SSL_new(SSL_CTX *ctx)
244 { 273 {
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
290 s->msg_callback=ctx->msg_callback; 319 s->msg_callback=ctx->msg_callback;
291 s->msg_callback_arg=ctx->msg_callback_arg; 320 s->msg_callback_arg=ctx->msg_callback_arg;
292 s->verify_mode=ctx->verify_mode; 321 s->verify_mode=ctx->verify_mode;
293 #if 0 322 #if 0
294 s->verify_depth=ctx->verify_depth; 323 s->verify_depth=ctx->verify_depth;
295 #endif 324 #endif
296 s->sid_ctx_length=ctx->sid_ctx_length; 325 s->sid_ctx_length=ctx->sid_ctx_length;
297 OPENSSL_assert(s->sid_ctx_length <= sizeof s->sid_ctx); 326 OPENSSL_assert(s->sid_ctx_length <= sizeof s->sid_ctx);
298 memcpy(&s->sid_ctx,&ctx->sid_ctx,sizeof(s->sid_ctx)); 327 memcpy(&s->sid_ctx,&ctx->sid_ctx,sizeof(s->sid_ctx));
299 s->verify_callback=ctx->default_verify_callback; 328 s->verify_callback=ctx->default_verify_callback;
329 s->session_creation_enabled=1;
300 s->generate_session_id=ctx->generate_session_id; 330 s->generate_session_id=ctx->generate_session_id;
301 331
302 s->param = X509_VERIFY_PARAM_new(); 332 s->param = X509_VERIFY_PARAM_new();
303 if (!s->param) 333 if (!s->param)
304 goto err; 334 goto err;
305 X509_VERIFY_PARAM_inherit(s->param, ctx->param); 335 X509_VERIFY_PARAM_inherit(s->param, ctx->param);
306 #if 0 336 #if 0
307 s->purpose = ctx->purpose; 337 s->purpose = ctx->purpose;
308 s->trust = ctx->trust; 338 s->trust = ctx->trust;
309 #endif 339 #endif
310 s->quiet_shutdown=ctx->quiet_shutdown; 340 s->quiet_shutdown=ctx->quiet_shutdown;
341 s->max_send_fragment = ctx->max_send_fragment;
311 342
312 CRYPTO_add(&ctx->references,1,CRYPTO_LOCK_SSL_CTX); 343 CRYPTO_add(&ctx->references,1,CRYPTO_LOCK_SSL_CTX);
313 s->ctx=ctx; 344 s->ctx=ctx;
314 #ifndef OPENSSL_NO_TLSEXT 345 #ifndef OPENSSL_NO_TLSEXT
315 s->tlsext_debug_cb = 0; 346 s->tlsext_debug_cb = 0;
316 s->tlsext_debug_arg = NULL; 347 s->tlsext_debug_arg = NULL;
317 s->tlsext_ticket_expected = 0; 348 s->tlsext_ticket_expected = 0;
318 s->tlsext_status_type = -1; 349 s->tlsext_status_type = -1;
319 s->tlsext_status_expected = 0; 350 s->tlsext_status_expected = 0;
320 s->tlsext_ocsp_ids = NULL; 351 s->tlsext_ocsp_ids = NULL;
321 s->tlsext_ocsp_exts = NULL; 352 s->tlsext_ocsp_exts = NULL;
322 s->tlsext_ocsp_resp = NULL; 353 s->tlsext_ocsp_resp = NULL;
323 s->tlsext_ocsp_resplen = -1; 354 s->tlsext_ocsp_resplen = -1;
324 CRYPTO_add(&ctx->references,1,CRYPTO_LOCK_SSL_CTX); 355 CRYPTO_add(&ctx->references,1,CRYPTO_LOCK_SSL_CTX);
325 s->initial_ctx=ctx; 356 s->initial_ctx=ctx;
357 # ifndef OPENSSL_NO_NEXTPROTONEG
326 s->next_proto_negotiated = NULL; 358 s->next_proto_negotiated = NULL;
359 # endif
327 #endif 360 #endif
361
328 s->verify_result=X509_V_OK; 362 s->verify_result=X509_V_OK;
329 363
330 s->method=ctx->method; 364 s->method=ctx->method;
331 365
332 if (!s->method->ssl_new(s)) 366 if (!s->method->ssl_new(s))
333 goto err; 367 goto err;
334 368
335 s->references=1; 369 s->references=1;
336 s->server=(ctx->method->ssl_accept == ssl_undefined_function)?0:1; 370 s->server=(ctx->method->ssl_accept == ssl_undefined_function)?0:1;
337 371
338 SSL_clear(s); 372 SSL_clear(s);
339 373
340 CRYPTO_new_ex_data(CRYPTO_EX_INDEX_SSL, s, &s->ex_data); 374 CRYPTO_new_ex_data(CRYPTO_EX_INDEX_SSL, s, &s->ex_data);
341 375
376 #ifndef OPENSSL_NO_PSK
377 s->psk_client_callback=ctx->psk_client_callback;
378 s->psk_server_callback=ctx->psk_server_callback;
379 #endif
380
342 return(s); 381 return(s);
343 err: 382 err:
344 if (s != NULL) 383 if (s != NULL)
345 { 384 {
346 if (s->cert != NULL) 385 if (s->cert != NULL)
347 ssl_cert_free(s->cert); 386 ssl_cert_free(s->cert);
348 if (s->ctx != NULL) 387 if (s->ctx != NULL)
349 SSL_CTX_free(s->ctx); /* decrement reference count */ 388 SSL_CTX_free(s->ctx); /* decrement reference count */
350 OPENSSL_free(s); 389 OPENSSL_free(s);
351 } 390 }
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
419 * converted to when the callback has finished choosing it. */ 458 * converted to when the callback has finished choosing it. */
420 if((r.ssl_version == SSL2_VERSION) && 459 if((r.ssl_version == SSL2_VERSION) &&
421 (id_len < SSL2_SSL_SESSION_ID_LENGTH)) 460 (id_len < SSL2_SSL_SESSION_ID_LENGTH))
422 { 461 {
423 memset(r.session_id + id_len, 0, 462 memset(r.session_id + id_len, 0,
424 SSL2_SSL_SESSION_ID_LENGTH - id_len); 463 SSL2_SSL_SESSION_ID_LENGTH - id_len);
425 r.session_id_length = SSL2_SSL_SESSION_ID_LENGTH; 464 r.session_id_length = SSL2_SSL_SESSION_ID_LENGTH;
426 } 465 }
427 466
428 CRYPTO_r_lock(CRYPTO_LOCK_SSL_CTX); 467 CRYPTO_r_lock(CRYPTO_LOCK_SSL_CTX);
429 » p = (SSL_SESSION *)lh_retrieve(ssl->ctx->sessions, &r); 468 » p = lh_SSL_SESSION_retrieve(ssl->ctx->sessions, &r);
430 CRYPTO_r_unlock(CRYPTO_LOCK_SSL_CTX); 469 CRYPTO_r_unlock(CRYPTO_LOCK_SSL_CTX);
431 return (p != NULL); 470 return (p != NULL);
432 } 471 }
433 472
434 int SSL_CTX_set_purpose(SSL_CTX *s, int purpose) 473 int SSL_CTX_set_purpose(SSL_CTX *s, int purpose)
435 { 474 {
436 return X509_VERIFY_PARAM_set_purpose(s->param, purpose); 475 return X509_VERIFY_PARAM_set_purpose(s->param, purpose);
437 } 476 }
438 477
439 int SSL_set_purpose(SSL *s, int purpose) 478 int SSL_set_purpose(SSL *s, int purpose)
440 { 479 {
441 return X509_VERIFY_PARAM_set_purpose(s->param, purpose); 480 return X509_VERIFY_PARAM_set_purpose(s->param, purpose);
442 } 481 }
443 482
444 int SSL_CTX_set_trust(SSL_CTX *s, int trust) 483 int SSL_CTX_set_trust(SSL_CTX *s, int trust)
445 { 484 {
446 return X509_VERIFY_PARAM_set_trust(s->param, trust); 485 return X509_VERIFY_PARAM_set_trust(s->param, trust);
447 } 486 }
448 487
449 int SSL_set_trust(SSL *s, int trust) 488 int SSL_set_trust(SSL *s, int trust)
450 { 489 {
451 return X509_VERIFY_PARAM_set_trust(s->param, trust); 490 return X509_VERIFY_PARAM_set_trust(s->param, trust);
452 } 491 }
453 492
493 int SSL_CTX_set1_param(SSL_CTX *ctx, X509_VERIFY_PARAM *vpm)
494 {
495 return X509_VERIFY_PARAM_set1(ctx->param, vpm);
496 }
497
498 int SSL_set1_param(SSL *ssl, X509_VERIFY_PARAM *vpm)
499 {
500 return X509_VERIFY_PARAM_set1(ssl->param, vpm);
501 }
502
454 void SSL_free(SSL *s) 503 void SSL_free(SSL *s)
455 { 504 {
456 int i; 505 int i;
457 506
458 if(s == NULL) 507 if(s == NULL)
459 return; 508 return;
460 509
461 i=CRYPTO_add(&s->references,-1,CRYPTO_LOCK_SSL); 510 i=CRYPTO_add(&s->references,-1,CRYPTO_LOCK_SSL);
462 #ifdef REF_PRINT 511 #ifdef REF_PRINT
463 REF_PRINT("SSL",s); 512 REF_PRINT("SSL",s);
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
498 if (s->cipher_list_by_id != NULL) sk_SSL_CIPHER_free(s->cipher_list_by_i d); 547 if (s->cipher_list_by_id != NULL) sk_SSL_CIPHER_free(s->cipher_list_by_i d);
499 548
500 /* Make the next call work :-) */ 549 /* Make the next call work :-) */
501 if (s->session != NULL) 550 if (s->session != NULL)
502 { 551 {
503 ssl_clear_bad_session(s); 552 ssl_clear_bad_session(s);
504 SSL_SESSION_free(s->session); 553 SSL_SESSION_free(s->session);
505 } 554 }
506 555
507 ssl_clear_cipher_ctx(s); 556 ssl_clear_cipher_ctx(s);
557 ssl_clear_hash_ctx(&s->read_hash);
558 ssl_clear_hash_ctx(&s->write_hash);
508 559
509 if (s->cert != NULL) ssl_cert_free(s->cert); 560 if (s->cert != NULL) ssl_cert_free(s->cert);
510 /* Free up if allocated */ 561 /* Free up if allocated */
511 562
512 #ifndef OPENSSL_NO_TLSEXT 563 #ifndef OPENSSL_NO_TLSEXT
513 if (s->tlsext_hostname) 564 if (s->tlsext_hostname)
514 OPENSSL_free(s->tlsext_hostname); 565 OPENSSL_free(s->tlsext_hostname);
515 if (s->initial_ctx) SSL_CTX_free(s->initial_ctx); 566 if (s->initial_ctx) SSL_CTX_free(s->initial_ctx);
567 #ifndef OPENSSL_NO_EC
568 if (s->tlsext_ecpointformatlist) OPENSSL_free(s->tlsext_ecpointformatlis t);
569 if (s->tlsext_ellipticcurvelist) OPENSSL_free(s->tlsext_ellipticcurvelis t);
570 #endif /* OPENSSL_NO_EC */
571 if (s->tlsext_opaque_prf_input) OPENSSL_free(s->tlsext_opaque_prf_input) ;
516 if (s->tlsext_ocsp_exts) 572 if (s->tlsext_ocsp_exts)
517 sk_X509_EXTENSION_pop_free(s->tlsext_ocsp_exts, 573 sk_X509_EXTENSION_pop_free(s->tlsext_ocsp_exts,
518 X509_EXTENSION_free); 574 X509_EXTENSION_free);
519 if (s->tlsext_ocsp_ids) 575 if (s->tlsext_ocsp_ids)
520 sk_OCSP_RESPID_pop_free(s->tlsext_ocsp_ids, OCSP_RESPID_free); 576 sk_OCSP_RESPID_pop_free(s->tlsext_ocsp_ids, OCSP_RESPID_free);
521 if (s->tlsext_ocsp_resp) 577 if (s->tlsext_ocsp_resp)
522 OPENSSL_free(s->tlsext_ocsp_resp); 578 OPENSSL_free(s->tlsext_ocsp_resp);
523 #endif 579 #endif
580
524 if (s->client_CA != NULL) 581 if (s->client_CA != NULL)
525 sk_X509_NAME_pop_free(s->client_CA,X509_NAME_free); 582 sk_X509_NAME_pop_free(s->client_CA,X509_NAME_free);
526 583
527 if (s->method != NULL) s->method->ssl_free(s); 584 if (s->method != NULL) s->method->ssl_free(s);
528 585
529 if (s->ctx) SSL_CTX_free(s->ctx); 586 if (s->ctx) SSL_CTX_free(s->ctx);
530 587
531 #ifndef OPENSSL_NO_KRB5 588 #ifndef OPENSSL_NO_KRB5
532 if (s->kssl_ctx != NULL) 589 if (s->kssl_ctx != NULL)
533 kssl_ctx_free(s->kssl_ctx); 590 kssl_ctx_free(s->kssl_ctx);
534 #endif /* OPENSSL_NO_KRB5 */ 591 #endif /* OPENSSL_NO_KRB5 */
535 592
536 #ifndef OPENSSL_NO_TLSEXT 593 #if !defined(OPENSSL_NO_TLSEXT) && !defined(OPENSSL_NO_NEXTPROTONEG)
537 if (s->next_proto_negotiated) 594 if (s->next_proto_negotiated)
538 OPENSSL_free(s->next_proto_negotiated); 595 OPENSSL_free(s->next_proto_negotiated);
539 #endif 596 #endif
540 597
541 OPENSSL_free(s); 598 OPENSSL_free(s);
542 } 599 }
543 600
544 void SSL_set_bio(SSL *s,BIO *rbio,BIO *wbio) 601 void SSL_set_bio(SSL *s,BIO *rbio,BIO *wbio)
545 { 602 {
546 /* If the output buffering BIO is still in place, remove it 603 /* If the output buffering BIO is still in place, remove it
(...skipping 296 matching lines...) Expand 10 before | Expand all | Expand 10 after
843 /* Fix this function so that it takes an optional type parameter */ 900 /* Fix this function so that it takes an optional type parameter */
844 int SSL_check_private_key(const SSL *ssl) 901 int SSL_check_private_key(const SSL *ssl)
845 { 902 {
846 if (ssl == NULL) 903 if (ssl == NULL)
847 { 904 {
848 SSLerr(SSL_F_SSL_CHECK_PRIVATE_KEY,ERR_R_PASSED_NULL_PARAMETER); 905 SSLerr(SSL_F_SSL_CHECK_PRIVATE_KEY,ERR_R_PASSED_NULL_PARAMETER);
849 return(0); 906 return(0);
850 } 907 }
851 if (ssl->cert == NULL) 908 if (ssl->cert == NULL)
852 { 909 {
853 SSLerr(SSL_F_SSL_CHECK_PRIVATE_KEY,SSL_R_NO_CERTIFICATE_ASSIGNED ); 910 » » SSLerr(SSL_F_SSL_CHECK_PRIVATE_KEY,SSL_R_NO_CERTIFICATE_ASSIGNED );
854 return 0; 911 return 0;
855 } 912 }
856 if (ssl->cert->key->x509 == NULL) 913 if (ssl->cert->key->x509 == NULL)
857 { 914 {
858 SSLerr(SSL_F_SSL_CHECK_PRIVATE_KEY,SSL_R_NO_CERTIFICATE_ASSIGNED ); 915 SSLerr(SSL_F_SSL_CHECK_PRIVATE_KEY,SSL_R_NO_CERTIFICATE_ASSIGNED );
859 return(0); 916 return(0);
860 } 917 }
861 if (ssl->cert->key->privatekey == NULL) 918 if (ssl->cert->key->privatekey == NULL)
862 { 919 {
863 SSLerr(SSL_F_SSL_CHECK_PRIVATE_KEY,SSL_R_NO_PRIVATE_KEY_ASSIGNED ); 920 SSLerr(SSL_F_SSL_CHECK_PRIVATE_KEY,SSL_R_NO_PRIVATE_KEY_ASSIGNED );
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
999 return(s->mode|=larg); 1056 return(s->mode|=larg);
1000 case SSL_CTRL_CLEAR_MODE: 1057 case SSL_CTRL_CLEAR_MODE:
1001 return(s->mode &=~larg); 1058 return(s->mode &=~larg);
1002 case SSL_CTRL_GET_MAX_CERT_LIST: 1059 case SSL_CTRL_GET_MAX_CERT_LIST:
1003 return(s->max_cert_list); 1060 return(s->max_cert_list);
1004 case SSL_CTRL_SET_MAX_CERT_LIST: 1061 case SSL_CTRL_SET_MAX_CERT_LIST:
1005 l=s->max_cert_list; 1062 l=s->max_cert_list;
1006 s->max_cert_list=larg; 1063 s->max_cert_list=larg;
1007 return(l); 1064 return(l);
1008 case SSL_CTRL_SET_MTU: 1065 case SSL_CTRL_SET_MTU:
1066 #ifndef OPENSSL_NO_DTLS1
1067 if (larg < (long)dtls1_min_mtu())
1068 return 0;
1069 #endif
1070
1009 if (SSL_version(s) == DTLS1_VERSION || 1071 if (SSL_version(s) == DTLS1_VERSION ||
1010 SSL_version(s) == DTLS1_BAD_VER) 1072 SSL_version(s) == DTLS1_BAD_VER)
1011 { 1073 {
1012 s->d1->mtu = larg; 1074 s->d1->mtu = larg;
1013 return larg; 1075 return larg;
1014 } 1076 }
1015 return 0; 1077 return 0;
1078 case SSL_CTRL_SET_MAX_SEND_FRAGMENT:
1079 if (larg < 512 || larg > SSL3_RT_MAX_PLAIN_LENGTH)
1080 return 0;
1081 s->max_send_fragment = larg;
1082 return 1;
1016 case SSL_CTRL_GET_RI_SUPPORT: 1083 case SSL_CTRL_GET_RI_SUPPORT:
1017 if (s->s3) 1084 if (s->s3)
1018 return s->s3->send_connection_binding; 1085 return s->s3->send_connection_binding;
1019 else return 0; 1086 else return 0;
1020 default: 1087 default:
1021 return(s->method->ssl_ctrl(s,cmd,larg,parg)); 1088 return(s->method->ssl_ctrl(s,cmd,larg,parg));
1022 } 1089 }
1023 } 1090 }
1024 1091
1025 long SSL_callback_ctrl(SSL *s, int cmd, void (*fp)(void)) 1092 long SSL_callback_ctrl(SSL *s, int cmd, void (*fp)(void))
1026 { 1093 {
1027 switch(cmd) 1094 switch(cmd)
1028 { 1095 {
1029 case SSL_CTRL_SET_MSG_CALLBACK: 1096 case SSL_CTRL_SET_MSG_CALLBACK:
1030 s->msg_callback = (void (*)(int write_p, int version, int conten t_type, const void *buf, size_t len, SSL *ssl, void *arg))(fp); 1097 s->msg_callback = (void (*)(int write_p, int version, int conten t_type, const void *buf, size_t len, SSL *ssl, void *arg))(fp);
1031 return 1; 1098 return 1;
1032 1099
1033 default: 1100 default:
1034 return(s->method->ssl_callback_ctrl(s,cmd,fp)); 1101 return(s->method->ssl_callback_ctrl(s,cmd,fp));
1035 } 1102 }
1036 } 1103 }
1037 1104
1038 struct lhash_st *SSL_CTX_sessions(SSL_CTX *ctx) 1105 LHASH_OF(SSL_SESSION) *SSL_CTX_sessions(SSL_CTX *ctx)
1039 { 1106 {
1040 return ctx->sessions; 1107 return ctx->sessions;
1041 } 1108 }
1042 1109
1043 long SSL_CTX_ctrl(SSL_CTX *ctx,int cmd,long larg,void *parg) 1110 long SSL_CTX_ctrl(SSL_CTX *ctx,int cmd,long larg,void *parg)
1044 { 1111 {
1045 long l; 1112 long l;
1046 1113
1047 switch (cmd) 1114 switch (cmd)
1048 { 1115 {
(...skipping 22 matching lines...) Expand all
1071 case SSL_CTRL_GET_SESS_CACHE_SIZE: 1138 case SSL_CTRL_GET_SESS_CACHE_SIZE:
1072 return(ctx->session_cache_size); 1139 return(ctx->session_cache_size);
1073 case SSL_CTRL_SET_SESS_CACHE_MODE: 1140 case SSL_CTRL_SET_SESS_CACHE_MODE:
1074 l=ctx->session_cache_mode; 1141 l=ctx->session_cache_mode;
1075 ctx->session_cache_mode=larg; 1142 ctx->session_cache_mode=larg;
1076 return(l); 1143 return(l);
1077 case SSL_CTRL_GET_SESS_CACHE_MODE: 1144 case SSL_CTRL_GET_SESS_CACHE_MODE:
1078 return(ctx->session_cache_mode); 1145 return(ctx->session_cache_mode);
1079 1146
1080 case SSL_CTRL_SESS_NUMBER: 1147 case SSL_CTRL_SESS_NUMBER:
1081 » » return(ctx->sessions->num_items); 1148 » » return(lh_SSL_SESSION_num_items(ctx->sessions));
1082 case SSL_CTRL_SESS_CONNECT: 1149 case SSL_CTRL_SESS_CONNECT:
1083 return(ctx->stats.sess_connect); 1150 return(ctx->stats.sess_connect);
1084 case SSL_CTRL_SESS_CONNECT_GOOD: 1151 case SSL_CTRL_SESS_CONNECT_GOOD:
1085 return(ctx->stats.sess_connect_good); 1152 return(ctx->stats.sess_connect_good);
1086 case SSL_CTRL_SESS_CONNECT_RENEGOTIATE: 1153 case SSL_CTRL_SESS_CONNECT_RENEGOTIATE:
1087 return(ctx->stats.sess_connect_renegotiate); 1154 return(ctx->stats.sess_connect_renegotiate);
1088 case SSL_CTRL_SESS_ACCEPT: 1155 case SSL_CTRL_SESS_ACCEPT:
1089 return(ctx->stats.sess_accept); 1156 return(ctx->stats.sess_accept);
1090 case SSL_CTRL_SESS_ACCEPT_GOOD: 1157 case SSL_CTRL_SESS_ACCEPT_GOOD:
1091 return(ctx->stats.sess_accept_good); 1158 return(ctx->stats.sess_accept_good);
(...skipping 10 matching lines...) Expand all
1102 case SSL_CTRL_SESS_CACHE_FULL: 1169 case SSL_CTRL_SESS_CACHE_FULL:
1103 return(ctx->stats.sess_cache_full); 1170 return(ctx->stats.sess_cache_full);
1104 case SSL_CTRL_OPTIONS: 1171 case SSL_CTRL_OPTIONS:
1105 return(ctx->options|=larg); 1172 return(ctx->options|=larg);
1106 case SSL_CTRL_CLEAR_OPTIONS: 1173 case SSL_CTRL_CLEAR_OPTIONS:
1107 return(ctx->options&=~larg); 1174 return(ctx->options&=~larg);
1108 case SSL_CTRL_MODE: 1175 case SSL_CTRL_MODE:
1109 return(ctx->mode|=larg); 1176 return(ctx->mode|=larg);
1110 case SSL_CTRL_CLEAR_MODE: 1177 case SSL_CTRL_CLEAR_MODE:
1111 return(ctx->mode&=~larg); 1178 return(ctx->mode&=~larg);
1179 case SSL_CTRL_SET_MAX_SEND_FRAGMENT:
1180 if (larg < 512 || larg > SSL3_RT_MAX_PLAIN_LENGTH)
1181 return 0;
1182 ctx->max_send_fragment = larg;
1183 return 1;
1112 default: 1184 default:
1113 return(ctx->method->ssl_ctx_ctrl(ctx,cmd,larg,parg)); 1185 return(ctx->method->ssl_ctx_ctrl(ctx,cmd,larg,parg));
1114 } 1186 }
1115 } 1187 }
1116 1188
1117 long SSL_CTX_callback_ctrl(SSL_CTX *ctx, int cmd, void (*fp)(void)) 1189 long SSL_CTX_callback_ctrl(SSL_CTX *ctx, int cmd, void (*fp)(void))
1118 { 1190 {
1119 switch(cmd) 1191 switch(cmd)
1120 { 1192 {
1121 case SSL_CTRL_SET_MSG_CALLBACK: 1193 case SSL_CTRL_SET_MSG_CALLBACK:
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
1206 /** specify the ciphers to be used by default by the SSL_CTX */ 1278 /** specify the ciphers to be used by default by the SSL_CTX */
1207 int SSL_CTX_set_cipher_list(SSL_CTX *ctx, const char *str) 1279 int SSL_CTX_set_cipher_list(SSL_CTX *ctx, const char *str)
1208 { 1280 {
1209 STACK_OF(SSL_CIPHER) *sk; 1281 STACK_OF(SSL_CIPHER) *sk;
1210 1282
1211 sk=ssl_create_cipher_list(ctx->method,&ctx->cipher_list, 1283 sk=ssl_create_cipher_list(ctx->method,&ctx->cipher_list,
1212 &ctx->cipher_list_by_id,str); 1284 &ctx->cipher_list_by_id,str);
1213 /* ssl_create_cipher_list may return an empty stack if it 1285 /* ssl_create_cipher_list may return an empty stack if it
1214 * was unable to find a cipher matching the given rule string 1286 * was unable to find a cipher matching the given rule string
1215 * (for example if the rule string specifies a cipher which 1287 * (for example if the rule string specifies a cipher which
1216 » * has been disabled). This is not an error as far as 1288 » * has been disabled). This is not an error as far as
1217 » * ssl_create_cipher_list is concerned, and hence 1289 » * ssl_create_cipher_list is concerned, and hence
1218 * ctx->cipher_list and ctx->cipher_list_by_id has been 1290 * ctx->cipher_list and ctx->cipher_list_by_id has been
1219 * updated. */ 1291 * updated. */
1220 if (sk == NULL) 1292 if (sk == NULL)
1221 return 0; 1293 return 0;
1222 else if (sk_SSL_CIPHER_num(sk) == 0) 1294 else if (sk_SSL_CIPHER_num(sk) == 0)
1223 { 1295 {
1224 SSLerr(SSL_F_SSL_CTX_SET_CIPHER_LIST, SSL_R_NO_CIPHER_MATCH); 1296 SSLerr(SSL_F_SSL_CTX_SET_CIPHER_LIST, SSL_R_NO_CIPHER_MATCH);
1225 return 0; 1297 return 0;
1226 } 1298 }
1227 return 1; 1299 return 1;
(...skipping 10 matching lines...) Expand all
1238 if (sk == NULL) 1310 if (sk == NULL)
1239 return 0; 1311 return 0;
1240 else if (sk_SSL_CIPHER_num(sk) == 0) 1312 else if (sk_SSL_CIPHER_num(sk) == 0)
1241 { 1313 {
1242 SSLerr(SSL_F_SSL_SET_CIPHER_LIST, SSL_R_NO_CIPHER_MATCH); 1314 SSLerr(SSL_F_SSL_SET_CIPHER_LIST, SSL_R_NO_CIPHER_MATCH);
1243 return 0; 1315 return 0;
1244 } 1316 }
1245 return 1; 1317 return 1;
1246 } 1318 }
1247 1319
1320 /** specify the ciphers to be used by the SSL */
1321 int SSL_set_cipher_lists(SSL *s,STACK_OF(SSL_CIPHER) *sk)
1322 {
1323 STACK_OF(SSL_CIPHER) *tmp_cipher_list;
1324
1325 if (sk == NULL)
1326 return 0;
1327
1328 /* Based on end of ssl_create_cipher_list */
1329 tmp_cipher_list = sk_SSL_CIPHER_dup(sk);
1330 if (tmp_cipher_list == NULL)
1331 {
1332 return 0;
1333 }
1334 if (s->cipher_list != NULL)
1335 sk_SSL_CIPHER_free(s->cipher_list);
1336 s->cipher_list = sk;
1337 if (s->cipher_list_by_id != NULL)
1338 sk_SSL_CIPHER_free(s->cipher_list_by_id);
1339 s->cipher_list_by_id = tmp_cipher_list;
1340 (void)sk_SSL_CIPHER_set_cmp_func(s->cipher_list_by_id,ssl_cipher_ptr_id_ cmp);
1341
1342 sk_SSL_CIPHER_sort(s->cipher_list_by_id);
1343 return 1;
1344 }
1345
1248 /* works well for SSLv2, not so good for SSLv3 */ 1346 /* works well for SSLv2, not so good for SSLv3 */
1249 char *SSL_get_shared_ciphers(const SSL *s,char *buf,int len) 1347 char *SSL_get_shared_ciphers(const SSL *s,char *buf,int len)
1250 { 1348 {
1251 char *p; 1349 char *p;
1252 STACK_OF(SSL_CIPHER) *sk; 1350 STACK_OF(SSL_CIPHER) *sk;
1253 SSL_CIPHER *c; 1351 SSL_CIPHER *c;
1254 int i; 1352 int i;
1255 1353
1256 if ((s->session == NULL) || (s->session->ciphers == NULL) || 1354 if ((s->session == NULL) || (s->session->ciphers == NULL) ||
1257 (len < 2)) 1355 (len < 2))
(...skipping 17 matching lines...) Expand all
1275 strcpy(p,c->name); 1373 strcpy(p,c->name);
1276 p+=n; 1374 p+=n;
1277 *(p++)=':'; 1375 *(p++)=':';
1278 len-=n+1; 1376 len-=n+1;
1279 } 1377 }
1280 p[-1]='\0'; 1378 p[-1]='\0';
1281 return(buf); 1379 return(buf);
1282 } 1380 }
1283 1381
1284 int ssl_cipher_list_to_bytes(SSL *s,STACK_OF(SSL_CIPHER) *sk,unsigned char *p, 1382 int ssl_cipher_list_to_bytes(SSL *s,STACK_OF(SSL_CIPHER) *sk,unsigned char *p,
1285 int (*put_cb)(const SSL_CIPHER *, unsigned char *)) 1383 » » » int (*put_cb)(const SSL_CIPHER *, unsigned char *))
1286 { 1384 {
1287 int i,j=0; 1385 int i,j=0;
1288 SSL_CIPHER *c; 1386 SSL_CIPHER *c;
1289 unsigned char *q; 1387 unsigned char *q;
1290 #ifndef OPENSSL_NO_KRB5 1388 #ifndef OPENSSL_NO_KRB5
1291 int nokrb5 = !kssl_tgt_is_available(s->kssl_ctx); 1389 » int nokrb5 = !kssl_tgt_is_available(s->kssl_ctx);
1292 #endif /* OPENSSL_NO_KRB5 */ 1390 #endif /* OPENSSL_NO_KRB5 */
1293 1391
1294 if (sk == NULL) return(0); 1392 if (sk == NULL) return(0);
1295 q=p; 1393 q=p;
1296 1394
1297 for (i=0; i<sk_SSL_CIPHER_num(sk); i++) 1395 for (i=0; i<sk_SSL_CIPHER_num(sk); i++)
1298 { 1396 {
1299 c=sk_SSL_CIPHER_value(sk,i); 1397 c=sk_SSL_CIPHER_value(sk,i);
1300 #ifndef OPENSSL_NO_KRB5 1398 #ifndef OPENSSL_NO_KRB5
1301 if ((c->algorithms & SSL_KRB5) && nokrb5) 1399 » » if (((c->algorithm_mkey & SSL_kKRB5) || (c->algorithm_auth & SSL _aKRB5)) &&
1302 continue; 1400 » » nokrb5)
1303 #endif /* OPENSSL_NO_KRB5 */ 1401 » » continue;
1304 1402 #endif /* OPENSSL_NO_KRB5 */
1403 #ifndef OPENSSL_NO_PSK
1404 » » /* with PSK there must be client callback set */
1405 » » if (((c->algorithm_mkey & SSL_kPSK) || (c->algorithm_auth & SSL_ aPSK)) &&
1406 » » s->psk_client_callback == NULL)
1407 » » » continue;
1408 #endif /* OPENSSL_NO_PSK */
1305 j = put_cb ? put_cb(c,p) : ssl_put_cipher_by_char(s,c,p); 1409 j = put_cb ? put_cb(c,p) : ssl_put_cipher_by_char(s,c,p);
1306 p+=j; 1410 p+=j;
1307 } 1411 }
1308 /* If p == q, no ciphers and caller indicates an error. Otherwise 1412 /* If p == q, no ciphers and caller indicates an error. Otherwise
1309 * add SCSV if not renegotiating. 1413 * add SCSV if not renegotiating.
1310 */ 1414 */
1311 if (p != q && !s->new_session) 1415 if (p != q && !s->new_session)
1312 { 1416 {
1313 static SSL_CIPHER scsv = 1417 static SSL_CIPHER scsv =
1314 { 1418 {
1315 » » » 0, NULL, SSL3_CK_SCSV, 0, 0, 0, 0, 0, 0, 0, 1419 » » » 0, NULL, SSL3_CK_SCSV, 0, 0, 0, 0, 0, 0, 0, 0, 0
1316 }; 1420 };
1317 j = put_cb ? put_cb(&scsv,p) : ssl_put_cipher_by_char(s,&scsv,p) ; 1421 j = put_cb ? put_cb(&scsv,p) : ssl_put_cipher_by_char(s,&scsv,p) ;
1318 p+=j; 1422 p+=j;
1319 #ifdef OPENSSL_RI_DEBUG 1423 #ifdef OPENSSL_RI_DEBUG
1320 fprintf(stderr, "SCSV sent by client\n"); 1424 fprintf(stderr, "SCSV sent by client\n");
1321 #endif 1425 #endif
1322 } 1426 }
1323 1427
1324 return(p-q); 1428 return(p-q);
1325 } 1429 }
1326 1430
1327 STACK_OF(SSL_CIPHER) *ssl_bytes_to_cipher_list(SSL *s,unsigned char *p,int num, 1431 STACK_OF(SSL_CIPHER) *ssl_bytes_to_cipher_list(SSL *s,unsigned char *p,int num,
1328 STACK_OF(SSL_CIPHER) **skp) 1432 STACK_OF(SSL_CIPHER) **skp)
1329 { 1433 {
1330 » SSL_CIPHER *c; 1434 » const SSL_CIPHER *c;
1331 STACK_OF(SSL_CIPHER) *sk; 1435 STACK_OF(SSL_CIPHER) *sk;
1332 int i,n; 1436 int i,n;
1333 if (s->s3) 1437 if (s->s3)
1334 s->s3->send_connection_binding = 0; 1438 s->s3->send_connection_binding = 0;
1335 1439
1336 n=ssl_put_cipher_by_char(s,NULL,NULL); 1440 n=ssl_put_cipher_by_char(s,NULL,NULL);
1337 if ((num%n) != 0) 1441 if ((num%n) != 0)
1338 { 1442 {
1339 SSLerr(SSL_F_SSL_BYTES_TO_CIPHER_LIST,SSL_R_ERROR_IN_RECEIVED_CI PHER_LIST); 1443 SSLerr(SSL_F_SSL_BYTES_TO_CIPHER_LIST,SSL_R_ERROR_IN_RECEIVED_CI PHER_LIST);
1340 return(NULL); 1444 return(NULL);
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
1383 1487
1384 if (skp != NULL) 1488 if (skp != NULL)
1385 *skp=sk; 1489 *skp=sk;
1386 return(sk); 1490 return(sk);
1387 err: 1491 err:
1388 if ((skp == NULL) || (*skp == NULL)) 1492 if ((skp == NULL) || (*skp == NULL))
1389 sk_SSL_CIPHER_free(sk); 1493 sk_SSL_CIPHER_free(sk);
1390 return(NULL); 1494 return(NULL);
1391 } 1495 }
1392 1496
1497
1393 #ifndef OPENSSL_NO_TLSEXT 1498 #ifndef OPENSSL_NO_TLSEXT
1394 /** return a servername extension value if provided in Client Hello, or NULL. 1499 /** return a servername extension value if provided in Client Hello, or NULL.
1395 * So far, only host_name types are defined (RFC 3546). 1500 * So far, only host_name types are defined (RFC 3546).
1396 */ 1501 */
1397 1502
1398 const char *SSL_get_servername(const SSL *s, const int type) 1503 const char *SSL_get_servername(const SSL *s, const int type)
1399 { 1504 {
1400 if (type != TLSEXT_NAMETYPE_host_name) 1505 if (type != TLSEXT_NAMETYPE_host_name)
1401 return NULL; 1506 return NULL;
1402 1507
1403 return s->session && !s->tlsext_hostname ? 1508 return s->session && !s->tlsext_hostname ?
1404 s->session->tlsext_hostname : 1509 s->session->tlsext_hostname :
1405 s->tlsext_hostname; 1510 s->tlsext_hostname;
1406 } 1511 }
1407 1512
1408 int SSL_get_servername_type(const SSL *s) 1513 int SSL_get_servername_type(const SSL *s)
1409 { 1514 {
1410 if (s->session && (!s->tlsext_hostname ? s->session->tlsext_hostname : s ->tlsext_hostname)) 1515 if (s->session && (!s->tlsext_hostname ? s->session->tlsext_hostname : s ->tlsext_hostname))
1411 return TLSEXT_NAMETYPE_host_name; 1516 return TLSEXT_NAMETYPE_host_name;
1412 return -1; 1517 return -1;
1413 } 1518 }
1519
1520 # ifndef OPENSSL_NO_NEXTPROTONEG
1521 /* SSL_select_next_proto implements the standard protocol selection. It is
1522 * expected that this function is called from the callback set by
1523 * SSL_CTX_set_next_proto_select_cb.
1524 *
1525 * The protocol data is assumed to be a vector of 8-bit, length prefixed byte
1526 * strings. The length byte itself is not included in the length. A byte
1527 * string of length 0 is invalid. No byte string may be truncated.
1528 *
1529 * The current, but experimental algorithm for selecting the protocol is:
1530 *
1531 * 1) If the server doesn't support NPN then this is indicated to the
1532 * callback. In this case, the client application has to abort the connection
1533 * or have a default application level protocol.
1534 *
1535 * 2) If the server supports NPN, but advertises an empty list then the
1536 * client selects the first protcol in its list, but indicates via the
1537 * API that this fallback case was enacted.
1538 *
1539 * 3) Otherwise, the client finds the first protocol in the server's list
1540 * that it supports and selects this protocol. This is because it's
1541 * assumed that the server has better information about which protocol
1542 * a client should use.
1543 *
1544 * 4) If the client doesn't support any of the server's advertised
1545 * protocols, then this is treated the same as case 2.
1546 *
1547 * It returns either
1548 * OPENSSL_NPN_NEGOTIATED if a common protocol was found, or
1549 * OPENSSL_NPN_NO_OVERLAP if the fallback case was reached.
1550 */
1551 int SSL_select_next_proto(unsigned char **out, unsigned char *outlen, const unsi gned char *server, unsigned int server_len, const unsigned char *client, unsigne d int client_len)
1552 {
1553 unsigned int i, j;
1554 const unsigned char *result;
1555 int status = OPENSSL_NPN_UNSUPPORTED;
1556
1557 /* For each protocol in server preference order, see if we support it. * /
1558 for (i = 0; i < server_len; )
1559 {
1560 for (j = 0; j < client_len; )
1561 {
1562 if (server[i] == client[j] &&
1563 memcmp(&server[i+1], &client[j+1], server[i]) == 0)
1564 {
1565 /* We found a match */
1566 result = &server[i];
1567 status = OPENSSL_NPN_NEGOTIATED;
1568 goto found;
1569 }
1570 j += client[j];
1571 j++;
1572 }
1573 i += server[i];
1574 i++;
1575 }
1576
1577 /* There's no overlap between our protocols and the server's list. */
1578 result = client;
1579 status = OPENSSL_NPN_NO_OVERLAP;
1580
1581 found:
1582 *out = (unsigned char *) result + 1;
1583 *outlen = result[0];
1584 return status;
1585 }
1586
1587 /* SSL_get0_next_proto_negotiated sets *data and *len to point to the client's
1588 * requested protocol for this connection and returns 0. If the client didn't
1589 * request any protocol, then *data is set to NULL.
1590 *
1591 * Note that the client can request any protocol it chooses. The value returned
1592 * from this function need not be a member of the list of supported protocols
1593 * provided by the callback.
1594 */
1595 void SSL_get0_next_proto_negotiated(const SSL *s, const unsigned char **data, un signed *len)
1596 {
1597 *data = s->next_proto_negotiated;
1598 if (!*data) {
1599 *len = 0;
1600 } else {
1601 *len = s->next_proto_negotiated_len;
1602 }
1603 }
1604
1605 /* SSL_CTX_set_next_protos_advertised_cb sets a callback that is called when a
1606 * TLS server needs a list of supported protocols for Next Protocol
1607 * Negotiation. The returned list must be in wire format. The list is returned
1608 * by setting |out| to point to it and |outlen| to its length. This memory will
1609 * not be modified, but one should assume that the SSL* keeps a reference to
1610 * it.
1611 *
1612 * The callback should return SSL_TLSEXT_ERR_OK if it wishes to advertise. Other wise, no
1613 * such extension will be included in the ServerHello. */
1614 void SSL_CTX_set_next_protos_advertised_cb(SSL_CTX *ctx, int (*cb) (SSL *ssl, co nst unsigned char **out, unsigned int *outlen, void *arg), void *arg)
1615 {
1616 ctx->next_protos_advertised_cb = cb;
1617 ctx->next_protos_advertised_cb_arg = arg;
1618 }
1619
1620 /* SSL_CTX_set_next_proto_select_cb sets a callback that is called when a
1621 * client needs to select a protocol from the server's provided list. |out|
1622 * must be set to point to the selected protocol (which may be within |in|).
1623 * The length of the protocol name must be written into |outlen|. The server's
1624 * advertised protocols are provided in |in| and |inlen|. The callback can
1625 * assume that |in| is syntactically valid.
1626 *
1627 * The client must select a protocol. It is fatal to the connection if this
1628 * callback returns a value other than SSL_TLSEXT_ERR_OK.
1629 */
1630 void SSL_CTX_set_next_proto_select_cb(SSL_CTX *ctx, int (*cb) (SSL *s, unsigned char **out, unsigned char *outlen, const unsigned char *in, unsigned int inlen, void *arg), void *arg)
1631 {
1632 ctx->next_proto_select_cb = cb;
1633 ctx->next_proto_select_cb_arg = arg;
1634 }
1635
1636 # endif
1414 #endif 1637 #endif
1415 1638
1416 unsigned long SSL_SESSION_hash(const SSL_SESSION *a) 1639 static unsigned long ssl_session_hash(const SSL_SESSION *a)
1417 { 1640 {
1418 unsigned long l; 1641 unsigned long l;
1419 1642
1420 l=(unsigned long) 1643 l=(unsigned long)
1421 ((unsigned int) a->session_id[0] )| 1644 ((unsigned int) a->session_id[0] )|
1422 ((unsigned int) a->session_id[1]<< 8L)| 1645 ((unsigned int) a->session_id[1]<< 8L)|
1423 ((unsigned long)a->session_id[2]<<16L)| 1646 ((unsigned long)a->session_id[2]<<16L)|
1424 ((unsigned long)a->session_id[3]<<24L); 1647 ((unsigned long)a->session_id[3]<<24L);
1425 return(l); 1648 return(l);
1426 } 1649 }
1427 1650
1428 /* NB: If this function (or indeed the hash function which uses a sort of 1651 /* NB: If this function (or indeed the hash function which uses a sort of
1429 * coarser function than this one) is changed, ensure 1652 * coarser function than this one) is changed, ensure
1430 * SSL_CTX_has_matching_session_id() is checked accordingly. It relies on being 1653 * SSL_CTX_has_matching_session_id() is checked accordingly. It relies on being
1431 * able to construct an SSL_SESSION that will collide with any existing session 1654 * able to construct an SSL_SESSION that will collide with any existing session
1432 * with a matching session ID. */ 1655 * with a matching session ID. */
1433 int SSL_SESSION_cmp(const SSL_SESSION *a,const SSL_SESSION *b) 1656 static int ssl_session_cmp(const SSL_SESSION *a,const SSL_SESSION *b)
1434 { 1657 {
1435 if (a->ssl_version != b->ssl_version) 1658 if (a->ssl_version != b->ssl_version)
1436 return(1); 1659 return(1);
1437 if (a->session_id_length != b->session_id_length) 1660 if (a->session_id_length != b->session_id_length)
1438 return(1); 1661 return(1);
1439 return(memcmp(a->session_id,b->session_id,a->session_id_length)); 1662 return(memcmp(a->session_id,b->session_id,a->session_id_length));
1440 } 1663 }
1441 1664
1442 /* These wrapper functions should remain rather than redeclaring 1665 /* These wrapper functions should remain rather than redeclaring
1443 * SSL_SESSION_hash and SSL_SESSION_cmp for void* types and casting each 1666 * SSL_SESSION_hash and SSL_SESSION_cmp for void* types and casting each
1444 * variable. The reason is that the functions aren't static, they're exposed via 1667 * variable. The reason is that the functions aren't static, they're exposed via
1445 * ssl.h. */ 1668 * ssl.h. */
1446 static IMPLEMENT_LHASH_HASH_FN(SSL_SESSION_hash, SSL_SESSION *) 1669 static IMPLEMENT_LHASH_HASH_FN(ssl_session, SSL_SESSION)
1447 static IMPLEMENT_LHASH_COMP_FN(SSL_SESSION_cmp, SSL_SESSION *) 1670 static IMPLEMENT_LHASH_COMP_FN(ssl_session, SSL_SESSION)
1448 1671
1449 SSL_CTX *SSL_CTX_new(SSL_METHOD *meth) 1672 SSL_CTX *SSL_CTX_new(const SSL_METHOD *meth)
1450 { 1673 {
1451 SSL_CTX *ret=NULL; 1674 SSL_CTX *ret=NULL;
1452 » 1675
1453 if (meth == NULL) 1676 if (meth == NULL)
1454 { 1677 {
1455 SSLerr(SSL_F_SSL_CTX_NEW,SSL_R_NULL_SSL_METHOD_PASSED); 1678 SSLerr(SSL_F_SSL_CTX_NEW,SSL_R_NULL_SSL_METHOD_PASSED);
1456 return(NULL); 1679 return(NULL);
1457 } 1680 }
1458 1681
1459 #ifdef OPENSSL_FIPS
1460 if (FIPS_mode() && (meth->version < TLS1_VERSION))
1461 {
1462 SSLerr(SSL_F_SSL_CTX_NEW, SSL_R_ONLY_TLS_ALLOWED_IN_FIPS_MODE);
1463 return NULL;
1464 }
1465 #endif
1466
1467 if (SSL_get_ex_data_X509_STORE_CTX_idx() < 0) 1682 if (SSL_get_ex_data_X509_STORE_CTX_idx() < 0)
1468 { 1683 {
1469 SSLerr(SSL_F_SSL_CTX_NEW,SSL_R_X509_VERIFICATION_SETUP_PROBLEMS) ; 1684 SSLerr(SSL_F_SSL_CTX_NEW,SSL_R_X509_VERIFICATION_SETUP_PROBLEMS) ;
1470 goto err; 1685 goto err;
1471 } 1686 }
1472 ret=(SSL_CTX *)OPENSSL_malloc(sizeof(SSL_CTX)); 1687 ret=(SSL_CTX *)OPENSSL_malloc(sizeof(SSL_CTX));
1473 if (ret == NULL) 1688 if (ret == NULL)
1474 goto err; 1689 goto err;
1475 1690
1476 memset(ret,0,sizeof(SSL_CTX)); 1691 memset(ret,0,sizeof(SSL_CTX));
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
1519 ret->default_verify_callback=NULL; 1734 ret->default_verify_callback=NULL;
1520 if ((ret->cert=ssl_cert_new()) == NULL) 1735 if ((ret->cert=ssl_cert_new()) == NULL)
1521 goto err; 1736 goto err;
1522 1737
1523 ret->default_passwd_callback=0; 1738 ret->default_passwd_callback=0;
1524 ret->default_passwd_callback_userdata=NULL; 1739 ret->default_passwd_callback_userdata=NULL;
1525 ret->client_cert_cb=0; 1740 ret->client_cert_cb=0;
1526 ret->app_gen_cookie_cb=0; 1741 ret->app_gen_cookie_cb=0;
1527 ret->app_verify_cookie_cb=0; 1742 ret->app_verify_cookie_cb=0;
1528 1743
1529 » ret->sessions=lh_new(LHASH_HASH_FN(SSL_SESSION_hash), 1744 » ret->sessions=lh_SSL_SESSION_new();
1530 » » » LHASH_COMP_FN(SSL_SESSION_cmp));
1531 if (ret->sessions == NULL) goto err; 1745 if (ret->sessions == NULL) goto err;
1532 ret->cert_store=X509_STORE_new(); 1746 ret->cert_store=X509_STORE_new();
1533 if (ret->cert_store == NULL) goto err; 1747 if (ret->cert_store == NULL) goto err;
1534 1748
1535 ssl_create_cipher_list(ret->method, 1749 ssl_create_cipher_list(ret->method,
1536 &ret->cipher_list,&ret->cipher_list_by_id, 1750 &ret->cipher_list,&ret->cipher_list_by_id,
1537 » » SSL_DEFAULT_CIPHER_LIST); 1751 » » meth->version == SSL2_VERSION ? "SSLv2" : SSL_DEFAULT_CIPHER_LIS T);
1538 if (ret->cipher_list == NULL 1752 if (ret->cipher_list == NULL
1539 || sk_SSL_CIPHER_num(ret->cipher_list) <= 0) 1753 || sk_SSL_CIPHER_num(ret->cipher_list) <= 0)
1540 { 1754 {
1541 SSLerr(SSL_F_SSL_CTX_NEW,SSL_R_LIBRARY_HAS_NO_CIPHERS); 1755 SSLerr(SSL_F_SSL_CTX_NEW,SSL_R_LIBRARY_HAS_NO_CIPHERS);
1542 goto err2; 1756 goto err2;
1543 } 1757 }
1544 1758
1545 ret->param = X509_VERIFY_PARAM_new(); 1759 ret->param = X509_VERIFY_PARAM_new();
1546 if (!ret->param) 1760 if (!ret->param)
1547 goto err; 1761 goto err;
(...skipping 15 matching lines...) Expand all
1563 } 1777 }
1564 1778
1565 if ((ret->client_CA=sk_X509_NAME_new_null()) == NULL) 1779 if ((ret->client_CA=sk_X509_NAME_new_null()) == NULL)
1566 goto err; 1780 goto err;
1567 1781
1568 CRYPTO_new_ex_data(CRYPTO_EX_INDEX_SSL_CTX, ret, &ret->ex_data); 1782 CRYPTO_new_ex_data(CRYPTO_EX_INDEX_SSL_CTX, ret, &ret->ex_data);
1569 1783
1570 ret->extra_certs=NULL; 1784 ret->extra_certs=NULL;
1571 ret->comp_methods=SSL_COMP_get_compression_methods(); 1785 ret->comp_methods=SSL_COMP_get_compression_methods();
1572 1786
1787 ret->max_send_fragment = SSL3_RT_MAX_PLAIN_LENGTH;
1788
1573 #ifndef OPENSSL_NO_TLSEXT 1789 #ifndef OPENSSL_NO_TLSEXT
1574 ret->tlsext_servername_callback = 0; 1790 ret->tlsext_servername_callback = 0;
1575 ret->tlsext_servername_arg = NULL; 1791 ret->tlsext_servername_arg = NULL;
1576 /* Setup RFC4507 ticket keys */ 1792 /* Setup RFC4507 ticket keys */
1577 if ((RAND_pseudo_bytes(ret->tlsext_tick_key_name, 16) <= 0) 1793 if ((RAND_pseudo_bytes(ret->tlsext_tick_key_name, 16) <= 0)
1578 || (RAND_bytes(ret->tlsext_tick_hmac_key, 16) <= 0) 1794 || (RAND_bytes(ret->tlsext_tick_hmac_key, 16) <= 0)
1579 || (RAND_bytes(ret->tlsext_tick_aes_key, 16) <= 0)) 1795 || (RAND_bytes(ret->tlsext_tick_aes_key, 16) <= 0))
1580 ret->options |= SSL_OP_NO_TICKET; 1796 ret->options |= SSL_OP_NO_TICKET;
1581 1797
1582 ret->tlsext_status_cb = 0; 1798 ret->tlsext_status_cb = 0;
1583 ret->tlsext_status_arg = NULL; 1799 ret->tlsext_status_arg = NULL;
1584 1800
1801 # ifndef OPENSSL_NO_NEXTPROTONEG
1585 ret->next_protos_advertised_cb = 0; 1802 ret->next_protos_advertised_cb = 0;
1586 ret->next_proto_select_cb = 0; 1803 ret->next_proto_select_cb = 0;
1804 # endif
1587 #endif 1805 #endif
1588 1806 #ifndef OPENSSL_NO_PSK
1807 » ret->psk_identity_hint=NULL;
1808 » ret->psk_client_callback=NULL;
1809 » ret->psk_server_callback=NULL;
1810 #endif
1811 #ifndef OPENSSL_NO_BUF_FREELISTS
1812 » ret->freelist_max_len = SSL_MAX_BUF_FREELIST_LEN_DEFAULT;
1813 » ret->rbuf_freelist = OPENSSL_malloc(sizeof(SSL3_BUF_FREELIST));
1814 » if (!ret->rbuf_freelist)
1815 » » goto err;
1816 » ret->rbuf_freelist->chunklen = 0;
1817 » ret->rbuf_freelist->len = 0;
1818 » ret->rbuf_freelist->head = NULL;
1819 » ret->wbuf_freelist = OPENSSL_malloc(sizeof(SSL3_BUF_FREELIST));
1820 » if (!ret->wbuf_freelist)
1821 » » {
1822 » » OPENSSL_free(ret->rbuf_freelist);
1823 » » goto err;
1824 » » }
1825 » ret->wbuf_freelist->chunklen = 0;
1826 » ret->wbuf_freelist->len = 0;
1827 » ret->wbuf_freelist->head = NULL;
1828 #endif
1589 #ifndef OPENSSL_NO_ENGINE 1829 #ifndef OPENSSL_NO_ENGINE
1590 ret->client_cert_engine = NULL; 1830 ret->client_cert_engine = NULL;
1591 #ifdef OPENSSL_SSL_CLIENT_ENGINE_AUTO 1831 #ifdef OPENSSL_SSL_CLIENT_ENGINE_AUTO
1592 #define eng_strx(x) #x 1832 #define eng_strx(x) #x
1593 #define eng_str(x) eng_strx(x) 1833 #define eng_str(x) eng_strx(x)
1594 /* Use specific client engine automatically... ignore errors */ 1834 /* Use specific client engine automatically... ignore errors */
1595 { 1835 {
1596 ENGINE *eng; 1836 ENGINE *eng;
1597 eng = ENGINE_by_id(eng_str(OPENSSL_SSL_CLIENT_ENGINE_AUTO)); 1837 eng = ENGINE_by_id(eng_str(OPENSSL_SSL_CLIENT_ENGINE_AUTO));
1598 if (!eng) 1838 if (!eng)
(...skipping 18 matching lines...) Expand all
1617 err2: 1857 err2:
1618 if (ret != NULL) SSL_CTX_free(ret); 1858 if (ret != NULL) SSL_CTX_free(ret);
1619 return(NULL); 1859 return(NULL);
1620 } 1860 }
1621 1861
1622 #if 0 1862 #if 0
1623 static void SSL_COMP_free(SSL_COMP *comp) 1863 static void SSL_COMP_free(SSL_COMP *comp)
1624 { OPENSSL_free(comp); } 1864 { OPENSSL_free(comp); }
1625 #endif 1865 #endif
1626 1866
1867 #ifndef OPENSSL_NO_BUF_FREELISTS
1868 static void
1869 ssl_buf_freelist_free(SSL3_BUF_FREELIST *list)
1870 {
1871 SSL3_BUF_FREELIST_ENTRY *ent, *next;
1872 for (ent = list->head; ent; ent = next)
1873 {
1874 next = ent->next;
1875 OPENSSL_free(ent);
1876 }
1877 OPENSSL_free(list);
1878 }
1879 #endif
1880
1627 void SSL_CTX_free(SSL_CTX *a) 1881 void SSL_CTX_free(SSL_CTX *a)
1628 { 1882 {
1629 int i; 1883 int i;
1630 1884
1631 if (a == NULL) return; 1885 if (a == NULL) return;
1632 1886
1633 i=CRYPTO_add(&a->references,-1,CRYPTO_LOCK_SSL_CTX); 1887 i=CRYPTO_add(&a->references,-1,CRYPTO_LOCK_SSL_CTX);
1634 #ifdef REF_PRINT 1888 #ifdef REF_PRINT
1635 REF_PRINT("SSL_CTX",a); 1889 REF_PRINT("SSL_CTX",a);
1636 #endif 1890 #endif
(...skipping 17 matching lines...) Expand all
1654 * the most secure solution seems to be: empty (flush) the cache, then 1908 * the most secure solution seems to be: empty (flush) the cache, then
1655 * free ex_data, then finally free the cache. 1909 * free ex_data, then finally free the cache.
1656 * (See ticket [openssl.org #212].) 1910 * (See ticket [openssl.org #212].)
1657 */ 1911 */
1658 if (a->sessions != NULL) 1912 if (a->sessions != NULL)
1659 SSL_CTX_flush_sessions(a,0); 1913 SSL_CTX_flush_sessions(a,0);
1660 1914
1661 CRYPTO_free_ex_data(CRYPTO_EX_INDEX_SSL_CTX, a, &a->ex_data); 1915 CRYPTO_free_ex_data(CRYPTO_EX_INDEX_SSL_CTX, a, &a->ex_data);
1662 1916
1663 if (a->sessions != NULL) 1917 if (a->sessions != NULL)
1664 » » lh_free(a->sessions); 1918 » » lh_SSL_SESSION_free(a->sessions);
1665 1919
1666 if (a->cert_store != NULL) 1920 if (a->cert_store != NULL)
1667 X509_STORE_free(a->cert_store); 1921 X509_STORE_free(a->cert_store);
1668 if (a->cipher_list != NULL) 1922 if (a->cipher_list != NULL)
1669 sk_SSL_CIPHER_free(a->cipher_list); 1923 sk_SSL_CIPHER_free(a->cipher_list);
1670 if (a->cipher_list_by_id != NULL) 1924 if (a->cipher_list_by_id != NULL)
1671 sk_SSL_CIPHER_free(a->cipher_list_by_id); 1925 sk_SSL_CIPHER_free(a->cipher_list_by_id);
1672 if (a->cert != NULL) 1926 if (a->cert != NULL)
1673 ssl_cert_free(a->cert); 1927 ssl_cert_free(a->cert);
1674 if (a->client_CA != NULL) 1928 if (a->client_CA != NULL)
1675 sk_X509_NAME_pop_free(a->client_CA,X509_NAME_free); 1929 sk_X509_NAME_pop_free(a->client_CA,X509_NAME_free);
1676 if (a->extra_certs != NULL) 1930 if (a->extra_certs != NULL)
1677 sk_X509_pop_free(a->extra_certs,X509_free); 1931 sk_X509_pop_free(a->extra_certs,X509_free);
1678 #if 0 /* This should never be done, since it removes a global database */ 1932 #if 0 /* This should never be done, since it removes a global database */
1679 if (a->comp_methods != NULL) 1933 if (a->comp_methods != NULL)
1680 sk_SSL_COMP_pop_free(a->comp_methods,SSL_COMP_free); 1934 sk_SSL_COMP_pop_free(a->comp_methods,SSL_COMP_free);
1681 #else 1935 #else
1682 a->comp_methods = NULL; 1936 a->comp_methods = NULL;
1683 #endif 1937 #endif
1938
1939 #ifndef OPENSSL_NO_PSK
1940 if (a->psk_identity_hint)
1941 OPENSSL_free(a->psk_identity_hint);
1942 #endif
1684 #ifndef OPENSSL_NO_ENGINE 1943 #ifndef OPENSSL_NO_ENGINE
1685 if (a->client_cert_engine) 1944 if (a->client_cert_engine)
1686 ENGINE_finish(a->client_cert_engine); 1945 ENGINE_finish(a->client_cert_engine);
1687 #endif 1946 #endif
1688 1947
1948 #ifndef OPENSSL_NO_BUF_FREELISTS
1949 if (a->wbuf_freelist)
1950 ssl_buf_freelist_free(a->wbuf_freelist);
1951 if (a->rbuf_freelist)
1952 ssl_buf_freelist_free(a->rbuf_freelist);
1953 #endif
1954
1689 OPENSSL_free(a); 1955 OPENSSL_free(a);
1690 } 1956 }
1691 1957
1692 void SSL_CTX_set_default_passwd_cb(SSL_CTX *ctx, pem_password_cb *cb) 1958 void SSL_CTX_set_default_passwd_cb(SSL_CTX *ctx, pem_password_cb *cb)
1693 { 1959 {
1694 ctx->default_passwd_callback=cb; 1960 ctx->default_passwd_callback=cb;
1695 } 1961 }
1696 1962
1697 void SSL_CTX_set_default_passwd_cb_userdata(SSL_CTX *ctx,void *u) 1963 void SSL_CTX_set_default_passwd_cb_userdata(SSL_CTX *ctx,void *u)
1698 { 1964 {
(...skipping 10 matching lines...) Expand all
1709 { 1975 {
1710 ctx->verify_mode=mode; 1976 ctx->verify_mode=mode;
1711 ctx->default_verify_callback=cb; 1977 ctx->default_verify_callback=cb;
1712 } 1978 }
1713 1979
1714 void SSL_CTX_set_verify_depth(SSL_CTX *ctx,int depth) 1980 void SSL_CTX_set_verify_depth(SSL_CTX *ctx,int depth)
1715 { 1981 {
1716 X509_VERIFY_PARAM_set_depth(ctx->param, depth); 1982 X509_VERIFY_PARAM_set_depth(ctx->param, depth);
1717 } 1983 }
1718 1984
1719 void ssl_set_cert_masks(CERT *c, SSL_CIPHER *cipher) 1985 void ssl_set_cert_masks(CERT *c, const SSL_CIPHER *cipher)
1720 { 1986 {
1721 CERT_PKEY *cpk; 1987 CERT_PKEY *cpk;
1722 int rsa_enc,rsa_tmp,rsa_sign,dh_tmp,dh_rsa,dh_dsa,dsa_sign; 1988 int rsa_enc,rsa_tmp,rsa_sign,dh_tmp,dh_rsa,dh_dsa,dsa_sign;
1723 int rsa_enc_export,dh_rsa_export,dh_dsa_export; 1989 int rsa_enc_export,dh_rsa_export,dh_dsa_export;
1724 int rsa_tmp_export,dh_tmp_export,kl; 1990 int rsa_tmp_export,dh_tmp_export,kl;
1725 » unsigned long mask,emask; 1991 » unsigned long mask_k,mask_a,emask_k,emask_a;
1726 int have_ecc_cert, ecdh_ok, ecdsa_ok, ecc_pkey_size; 1992 int have_ecc_cert, ecdh_ok, ecdsa_ok, ecc_pkey_size;
1727 #ifndef OPENSSL_NO_ECDH 1993 #ifndef OPENSSL_NO_ECDH
1728 int have_ecdh_tmp; 1994 int have_ecdh_tmp;
1729 #endif 1995 #endif
1730 X509 *x = NULL; 1996 X509 *x = NULL;
1731 EVP_PKEY *ecc_pkey = NULL; 1997 EVP_PKEY *ecc_pkey = NULL;
1732 » int signature_nid = 0; 1998 » int signature_nid = 0, pk_nid = 0, md_nid = 0;
1733 1999
1734 if (c == NULL) return; 2000 if (c == NULL) return;
1735 2001
1736 kl=SSL_C_EXPORT_PKEYLENGTH(cipher); 2002 kl=SSL_C_EXPORT_PKEYLENGTH(cipher);
1737 2003
1738 #ifndef OPENSSL_NO_RSA 2004 #ifndef OPENSSL_NO_RSA
1739 rsa_tmp=(c->rsa_tmp != NULL || c->rsa_tmp_cb != NULL); 2005 rsa_tmp=(c->rsa_tmp != NULL || c->rsa_tmp_cb != NULL);
1740 rsa_tmp_export=(c->rsa_tmp_cb != NULL || 2006 rsa_tmp_export=(c->rsa_tmp_cb != NULL ||
1741 (rsa_tmp && RSA_size(c->rsa_tmp)*8 <= kl)); 2007 (rsa_tmp && RSA_size(c->rsa_tmp)*8 <= kl));
1742 #else 2008 #else
(...skipping 19 matching lines...) Expand all
1762 dsa_sign=(cpk->x509 != NULL && cpk->privatekey != NULL); 2028 dsa_sign=(cpk->x509 != NULL && cpk->privatekey != NULL);
1763 cpk= &(c->pkeys[SSL_PKEY_DH_RSA]); 2029 cpk= &(c->pkeys[SSL_PKEY_DH_RSA]);
1764 dh_rsa= (cpk->x509 != NULL && cpk->privatekey != NULL); 2030 dh_rsa= (cpk->x509 != NULL && cpk->privatekey != NULL);
1765 dh_rsa_export=(dh_rsa && EVP_PKEY_size(cpk->privatekey)*8 <= kl); 2031 dh_rsa_export=(dh_rsa && EVP_PKEY_size(cpk->privatekey)*8 <= kl);
1766 cpk= &(c->pkeys[SSL_PKEY_DH_DSA]); 2032 cpk= &(c->pkeys[SSL_PKEY_DH_DSA]);
1767 /* FIX THIS EAY EAY EAY */ 2033 /* FIX THIS EAY EAY EAY */
1768 dh_dsa= (cpk->x509 != NULL && cpk->privatekey != NULL); 2034 dh_dsa= (cpk->x509 != NULL && cpk->privatekey != NULL);
1769 dh_dsa_export=(dh_dsa && EVP_PKEY_size(cpk->privatekey)*8 <= kl); 2035 dh_dsa_export=(dh_dsa && EVP_PKEY_size(cpk->privatekey)*8 <= kl);
1770 cpk= &(c->pkeys[SSL_PKEY_ECC]); 2036 cpk= &(c->pkeys[SSL_PKEY_ECC]);
1771 have_ecc_cert= (cpk->x509 != NULL && cpk->privatekey != NULL); 2037 have_ecc_cert= (cpk->x509 != NULL && cpk->privatekey != NULL);
1772 » mask=0; 2038 » mask_k=0;
1773 » emask=0; 2039 » mask_a=0;
2040 » emask_k=0;
2041 » emask_a=0;
2042
2043 »
1774 2044
1775 #ifdef CIPHER_DEBUG 2045 #ifdef CIPHER_DEBUG
1776 » printf("rt=%d rte=%d dht=%d re=%d ree=%d rs=%d ds=%d dhr=%d dhd=%d\n", 2046 » printf("rt=%d rte=%d dht=%d ecdht=%d re=%d ree=%d rs=%d ds=%d dhr=%d dhd =%d\n",
1777 » » rsa_tmp,rsa_tmp_export,dh_tmp, 2047 » rsa_tmp,rsa_tmp_export,dh_tmp,have_ecdh_tmp,
1778 rsa_enc,rsa_enc_export,rsa_sign,dsa_sign,dh_rsa,dh_dsa); 2048 rsa_enc,rsa_enc_export,rsa_sign,dsa_sign,dh_rsa,dh_dsa);
1779 #endif 2049 #endif
2050
2051 cpk = &(c->pkeys[SSL_PKEY_GOST01]);
2052 if (cpk->x509 != NULL && cpk->privatekey !=NULL) {
2053 mask_k |= SSL_kGOST;
2054 mask_a |= SSL_aGOST01;
2055 }
2056 cpk = &(c->pkeys[SSL_PKEY_GOST94]);
2057 if (cpk->x509 != NULL && cpk->privatekey !=NULL) {
2058 mask_k |= SSL_kGOST;
2059 mask_a |= SSL_aGOST94;
2060 }
1780 2061
1781 if (rsa_enc || (rsa_tmp && rsa_sign)) 2062 if (rsa_enc || (rsa_tmp && rsa_sign))
1782 » » mask|=SSL_kRSA; 2063 » » mask_k|=SSL_kRSA;
1783 if (rsa_enc_export || (rsa_tmp_export && (rsa_sign || rsa_enc))) 2064 if (rsa_enc_export || (rsa_tmp_export && (rsa_sign || rsa_enc)))
1784 » » emask|=SSL_kRSA; 2065 » » emask_k|=SSL_kRSA;
1785 2066
1786 #if 0 2067 #if 0
1787 /* The match needs to be both kEDH and aRSA or aDSA, so don't worry */ 2068 /* The match needs to be both kEDH and aRSA or aDSA, so don't worry */
1788 » if (» (dh_tmp || dh_rsa || dh_dsa) && 2069 » if (» (dh_tmp || dh_rsa || dh_dsa) &&
1789 (rsa_enc || rsa_sign || dsa_sign)) 2070 (rsa_enc || rsa_sign || dsa_sign))
1790 » » mask|=SSL_kEDH; 2071 » » mask_k|=SSL_kEDH;
1791 if ((dh_tmp_export || dh_rsa_export || dh_dsa_export) && 2072 if ((dh_tmp_export || dh_rsa_export || dh_dsa_export) &&
1792 (rsa_enc || rsa_sign || dsa_sign)) 2073 (rsa_enc || rsa_sign || dsa_sign))
1793 » » emask|=SSL_kEDH; 2074 » » emask_k|=SSL_kEDH;
1794 #endif 2075 #endif
1795 2076
1796 » if (dh_tmp_export) 2077 » if (dh_tmp_export)
1797 » » emask|=SSL_kEDH; 2078 » » emask_k|=SSL_kEDH;
1798 2079
1799 if (dh_tmp) 2080 if (dh_tmp)
1800 » » mask|=SSL_kEDH; 2081 » » mask_k|=SSL_kEDH;
1801 2082
1802 » if (dh_rsa) mask|=SSL_kDHr; 2083 » if (dh_rsa) mask_k|=SSL_kDHr;
1803 » if (dh_rsa_export) emask|=SSL_kDHr; 2084 » if (dh_rsa_export) emask_k|=SSL_kDHr;
1804 2085
1805 » if (dh_dsa) mask|=SSL_kDHd; 2086 » if (dh_dsa) mask_k|=SSL_kDHd;
1806 » if (dh_dsa_export) emask|=SSL_kDHd; 2087 » if (dh_dsa_export) emask_k|=SSL_kDHd;
1807 2088
1808 if (rsa_enc || rsa_sign) 2089 if (rsa_enc || rsa_sign)
1809 { 2090 {
1810 » » mask|=SSL_aRSA; 2091 » » mask_a|=SSL_aRSA;
1811 » » emask|=SSL_aRSA; 2092 » » emask_a|=SSL_aRSA;
1812 } 2093 }
1813 2094
1814 if (dsa_sign) 2095 if (dsa_sign)
1815 { 2096 {
1816 » » mask|=SSL_aDSS; 2097 » » mask_a|=SSL_aDSS;
1817 » » emask|=SSL_aDSS; 2098 » » emask_a|=SSL_aDSS;
1818 } 2099 }
1819 2100
1820 » mask|=SSL_aNULL; 2101 » mask_a|=SSL_aNULL;
1821 » emask|=SSL_aNULL; 2102 » emask_a|=SSL_aNULL;
1822 2103
1823 #ifndef OPENSSL_NO_KRB5 2104 #ifndef OPENSSL_NO_KRB5
1824 » mask|=SSL_kKRB5|SSL_aKRB5; 2105 » mask_k|=SSL_kKRB5;
1825 » emask|=SSL_kKRB5|SSL_aKRB5; 2106 » mask_a|=SSL_aKRB5;
2107 » emask_k|=SSL_kKRB5;
2108 » emask_a|=SSL_aKRB5;
1826 #endif 2109 #endif
1827 2110
1828 /* An ECC certificate may be usable for ECDH and/or 2111 /* An ECC certificate may be usable for ECDH and/or
1829 * ECDSA cipher suites depending on the key usage extension. 2112 * ECDSA cipher suites depending on the key usage extension.
1830 */ 2113 */
1831 if (have_ecc_cert) 2114 if (have_ecc_cert)
1832 { 2115 {
1833 /* This call populates extension flags (ex_flags) */ 2116 » » /* This call populates extension flags (ex_flags) */
1834 x = (c->pkeys[SSL_PKEY_ECC]).x509; 2117 x = (c->pkeys[SSL_PKEY_ECC]).x509;
1835 X509_check_purpose(x, -1, 0); 2118 X509_check_purpose(x, -1, 0);
1836 ecdh_ok = (x->ex_flags & EXFLAG_KUSAGE) ? 2119 ecdh_ok = (x->ex_flags & EXFLAG_KUSAGE) ?
1837 (x->ex_kusage & X509v3_KU_KEY_AGREEMENT) : 1; 2120 (x->ex_kusage & X509v3_KU_KEY_AGREEMENT) : 1;
1838 ecdsa_ok = (x->ex_flags & EXFLAG_KUSAGE) ? 2121 ecdsa_ok = (x->ex_flags & EXFLAG_KUSAGE) ?
1839 (x->ex_kusage & X509v3_KU_DIGITAL_SIGNATURE) : 1; 2122 (x->ex_kusage & X509v3_KU_DIGITAL_SIGNATURE) : 1;
1840 ecc_pkey = X509_get_pubkey(x); 2123 ecc_pkey = X509_get_pubkey(x);
1841 » » ecc_pkey_size = (ecc_pkey != NULL) ? 2124 » » ecc_pkey_size = (ecc_pkey != NULL) ?
1842 EVP_PKEY_bits(ecc_pkey) : 0; 2125 EVP_PKEY_bits(ecc_pkey) : 0;
1843 EVP_PKEY_free(ecc_pkey); 2126 EVP_PKEY_free(ecc_pkey);
1844 if ((x->sig_alg) && (x->sig_alg->algorithm)) 2127 if ((x->sig_alg) && (x->sig_alg->algorithm))
2128 {
1845 signature_nid = OBJ_obj2nid(x->sig_alg->algorithm); 2129 signature_nid = OBJ_obj2nid(x->sig_alg->algorithm);
2130 OBJ_find_sigid_algs(signature_nid, &md_nid, &pk_nid);
2131 }
1846 #ifndef OPENSSL_NO_ECDH 2132 #ifndef OPENSSL_NO_ECDH
1847 if (ecdh_ok) 2133 if (ecdh_ok)
1848 { 2134 {
1849 » » » if ((signature_nid == NID_md5WithRSAEncryption) || 2135
1850 » » » (signature_nid == NID_md4WithRSAEncryption) || 2136 » » » if (pk_nid == NID_rsaEncryption || pk_nid == NID_rsa)
1851 » » » (signature_nid == NID_md2WithRSAEncryption))
1852 { 2137 {
1853 » » » » mask|=SSL_kECDH|SSL_aRSA; 2138 » » » » mask_k|=SSL_kECDHr;
2139 » » » » mask_a|=SSL_aECDH;
1854 if (ecc_pkey_size <= 163) 2140 if (ecc_pkey_size <= 163)
1855 » » » » » emask|=SSL_kECDH|SSL_aRSA; 2141 » » » » » {
2142 » » » » » emask_k|=SSL_kECDHr;
2143 » » » » » emask_a|=SSL_aECDH;
2144 » » » » » }
1856 } 2145 }
1857 » » » if (signature_nid == NID_ecdsa_with_SHA1) 2146
2147 » » » if (pk_nid == NID_X9_62_id_ecPublicKey)
1858 { 2148 {
1859 » » » » mask|=SSL_kECDH|SSL_aECDSA; 2149 » » » » mask_k|=SSL_kECDHe;
2150 » » » » mask_a|=SSL_aECDH;
1860 if (ecc_pkey_size <= 163) 2151 if (ecc_pkey_size <= 163)
1861 » » » » » emask|=SSL_kECDH|SSL_aECDSA; 2152 » » » » » {
2153 » » » » » emask_k|=SSL_kECDHe;
2154 » » » » » emask_a|=SSL_aECDH;
2155 » » » » » }
1862 } 2156 }
1863 } 2157 }
1864 #endif 2158 #endif
1865 #ifndef OPENSSL_NO_ECDSA 2159 #ifndef OPENSSL_NO_ECDSA
1866 if (ecdsa_ok) 2160 if (ecdsa_ok)
1867 { 2161 {
1868 » » » mask|=SSL_aECDSA; 2162 » » » mask_a|=SSL_aECDSA;
1869 » » » emask|=SSL_aECDSA; 2163 » » » emask_a|=SSL_aECDSA;
1870 } 2164 }
1871 #endif 2165 #endif
1872 } 2166 }
1873 2167
1874 #ifndef OPENSSL_NO_ECDH 2168 #ifndef OPENSSL_NO_ECDH
1875 if (have_ecdh_tmp) 2169 if (have_ecdh_tmp)
1876 { 2170 {
1877 » » mask|=SSL_kECDHE; 2171 » » mask_k|=SSL_kEECDH;
1878 » » emask|=SSL_kECDHE; 2172 » » emask_k|=SSL_kEECDH;
1879 } 2173 }
1880 #endif 2174 #endif
1881 » c->mask=mask; 2175
1882 » c->export_mask=emask; 2176 #ifndef OPENSSL_NO_PSK
2177 » mask_k |= SSL_kPSK;
2178 » mask_a |= SSL_aPSK;
2179 » emask_k |= SSL_kPSK;
2180 » emask_a |= SSL_aPSK;
2181 #endif
2182
2183 » c->mask_k=mask_k;
2184 » c->mask_a=mask_a;
2185 » c->export_mask_k=emask_k;
2186 » c->export_mask_a=emask_a;
1883 c->valid=1; 2187 c->valid=1;
1884 } 2188 }
1885 2189
1886 /* This handy macro borrowed from crypto/x509v3/v3_purp.c */ 2190 /* This handy macro borrowed from crypto/x509v3/v3_purp.c */
1887 #define ku_reject(x, usage) \ 2191 #define ku_reject(x, usage) \
1888 (((x)->ex_flags & EXFLAG_KUSAGE) && !((x)->ex_kusage & (usage))) 2192 (((x)->ex_flags & EXFLAG_KUSAGE) && !((x)->ex_kusage & (usage)))
1889 2193
1890 int check_srvr_ecc_cert_and_alg(X509 *x, SSL_CIPHER *cs) 2194 #ifndef OPENSSL_NO_EC
2195
2196 int ssl_check_srvr_ecc_cert_and_alg(X509 *x, const SSL_CIPHER *cs)
1891 { 2197 {
1892 » unsigned long alg = cs->algorithms; 2198 » unsigned long alg_k, alg_a;
1893 EVP_PKEY *pkey = NULL; 2199 EVP_PKEY *pkey = NULL;
1894 int keysize = 0; 2200 int keysize = 0;
1895 » int signature_nid = 0; 2201 » int signature_nid = 0, md_nid = 0, pk_nid = 0;
2202
2203 » alg_k = cs->algorithm_mkey;
2204 » alg_a = cs->algorithm_auth;
1896 2205
1897 if (SSL_C_IS_EXPORT(cs)) 2206 if (SSL_C_IS_EXPORT(cs))
1898 { 2207 {
1899 /* ECDH key length in export ciphers must be <= 163 bits */ 2208 /* ECDH key length in export ciphers must be <= 163 bits */
1900 pkey = X509_get_pubkey(x); 2209 pkey = X509_get_pubkey(x);
1901 if (pkey == NULL) return 0; 2210 if (pkey == NULL) return 0;
1902 keysize = EVP_PKEY_bits(pkey); 2211 keysize = EVP_PKEY_bits(pkey);
1903 EVP_PKEY_free(pkey); 2212 EVP_PKEY_free(pkey);
1904 if (keysize > 163) return 0; 2213 if (keysize > 163) return 0;
1905 } 2214 }
1906 2215
1907 /* This call populates the ex_flags field correctly */ 2216 /* This call populates the ex_flags field correctly */
1908 X509_check_purpose(x, -1, 0); 2217 X509_check_purpose(x, -1, 0);
1909 if ((x->sig_alg) && (x->sig_alg->algorithm)) 2218 if ((x->sig_alg) && (x->sig_alg->algorithm))
2219 {
1910 signature_nid = OBJ_obj2nid(x->sig_alg->algorithm); 2220 signature_nid = OBJ_obj2nid(x->sig_alg->algorithm);
1911 » if (alg & SSL_kECDH) 2221 » » OBJ_find_sigid_algs(signature_nid, &md_nid, &pk_nid);
2222 » » }
2223 » if (alg_k & SSL_kECDHe || alg_k & SSL_kECDHr)
1912 { 2224 {
1913 /* key usage, if present, must allow key agreement */ 2225 /* key usage, if present, must allow key agreement */
1914 if (ku_reject(x, X509v3_KU_KEY_AGREEMENT)) 2226 if (ku_reject(x, X509v3_KU_KEY_AGREEMENT))
1915 { 2227 {
2228 SSLerr(SSL_F_SSL_CHECK_SRVR_ECC_CERT_AND_ALG, SSL_R_ECC_ CERT_NOT_FOR_KEY_AGREEMENT);
1916 return 0; 2229 return 0;
1917 } 2230 }
1918 » » if (alg & SSL_aECDSA) 2231 » » if (alg_k & SSL_kECDHe)
1919 { 2232 {
1920 /* signature alg must be ECDSA */ 2233 /* signature alg must be ECDSA */
1921 » » » if (signature_nid != NID_ecdsa_with_SHA1) 2234 » » » if (pk_nid != NID_X9_62_id_ecPublicKey)
1922 { 2235 {
2236 SSLerr(SSL_F_SSL_CHECK_SRVR_ECC_CERT_AND_ALG, SS L_R_ECC_CERT_SHOULD_HAVE_SHA1_SIGNATURE);
1923 return 0; 2237 return 0;
1924 } 2238 }
1925 } 2239 }
1926 » » if (alg & SSL_aRSA) 2240 » » if (alg_k & SSL_kECDHr)
1927 { 2241 {
1928 /* signature alg must be RSA */ 2242 /* signature alg must be RSA */
1929 » » » if ((signature_nid != NID_md5WithRSAEncryption) && 2243
1930 » » » (signature_nid != NID_md4WithRSAEncryption) && 2244 » » » if (pk_nid != NID_rsaEncryption && pk_nid != NID_rsa)
1931 » » » (signature_nid != NID_md2WithRSAEncryption))
1932 { 2245 {
2246 SSLerr(SSL_F_SSL_CHECK_SRVR_ECC_CERT_AND_ALG, SS L_R_ECC_CERT_SHOULD_HAVE_RSA_SIGNATURE);
1933 return 0; 2247 return 0;
1934 } 2248 }
1935 } 2249 }
1936 » » } 2250 » » }
1937 » else if (alg & SSL_aECDSA) 2251 » if (alg_a & SSL_aECDSA)
1938 { 2252 {
1939 /* key usage, if present, must allow signing */ 2253 /* key usage, if present, must allow signing */
1940 if (ku_reject(x, X509v3_KU_DIGITAL_SIGNATURE)) 2254 if (ku_reject(x, X509v3_KU_DIGITAL_SIGNATURE))
1941 { 2255 {
2256 SSLerr(SSL_F_SSL_CHECK_SRVR_ECC_CERT_AND_ALG, SSL_R_ECC_ CERT_NOT_FOR_SIGNING);
1942 return 0; 2257 return 0;
1943 } 2258 }
1944 } 2259 }
1945 2260
1946 return 1; /* all checks are ok */ 2261 return 1; /* all checks are ok */
1947 } 2262 }
1948 2263
2264 #endif
2265
1949 /* THIS NEEDS CLEANING UP */ 2266 /* THIS NEEDS CLEANING UP */
1950 X509 *ssl_get_server_send_cert(SSL *s) 2267 X509 *ssl_get_server_send_cert(SSL *s)
1951 { 2268 {
1952 » unsigned long alg,mask,kalg; 2269 » unsigned long alg_k,alg_a;
1953 CERT *c; 2270 CERT *c;
1954 » int i,is_export; 2271 » int i;
1955 2272
1956 c=s->cert; 2273 c=s->cert;
1957 ssl_set_cert_masks(c, s->s3->tmp.new_cipher); 2274 ssl_set_cert_masks(c, s->s3->tmp.new_cipher);
1958 » alg=s->s3->tmp.new_cipher->algorithms; 2275 »
1959 » is_export=SSL_C_IS_EXPORT(s->s3->tmp.new_cipher); 2276 » alg_k = s->s3->tmp.new_cipher->algorithm_mkey;
1960 » mask=is_export?c->export_mask:c->mask; 2277 » alg_a = s->s3->tmp.new_cipher->algorithm_auth;
1961 » kalg=alg&(SSL_MKEY_MASK|SSL_AUTH_MASK);
1962 2278
1963 » if (kalg & SSL_kECDH) 2279 » if (alg_k & (SSL_kECDHr|SSL_kECDHe))
1964 { 2280 {
1965 » » /* we don't need to look at SSL_kECDHE 2281 » » /* we don't need to look at SSL_kEECDH
1966 * since no certificate is needed for 2282 * since no certificate is needed for
1967 * anon ECDH and for authenticated 2283 * anon ECDH and for authenticated
1968 » » * ECDHE, the check for the auth 2284 » » * EECDH, the check for the auth
1969 * algorithm will set i correctly 2285 * algorithm will set i correctly
1970 * NOTE: For ECDH-RSA, we need an ECC 2286 * NOTE: For ECDH-RSA, we need an ECC
1971 » » * not an RSA cert but for ECDHE-RSA 2287 » » * not an RSA cert but for EECDH-RSA
1972 * we need an RSA cert. Placing the 2288 * we need an RSA cert. Placing the
1973 * checks for SSL_kECDH before RSA 2289 * checks for SSL_kECDH before RSA
1974 * checks ensures the correct cert is chosen. 2290 * checks ensures the correct cert is chosen.
1975 */ 2291 */
1976 i=SSL_PKEY_ECC; 2292 i=SSL_PKEY_ECC;
1977 } 2293 }
1978 » else if (kalg & SSL_aECDSA) 2294 » else if (alg_a & SSL_aECDSA)
1979 { 2295 {
1980 i=SSL_PKEY_ECC; 2296 i=SSL_PKEY_ECC;
1981 } 2297 }
1982 » else if (kalg & SSL_kDHr) 2298 » else if (alg_k & SSL_kDHr)
1983 i=SSL_PKEY_DH_RSA; 2299 i=SSL_PKEY_DH_RSA;
1984 » else if (kalg & SSL_kDHd) 2300 » else if (alg_k & SSL_kDHd)
1985 i=SSL_PKEY_DH_DSA; 2301 i=SSL_PKEY_DH_DSA;
1986 » else if (kalg & SSL_aDSS) 2302 » else if (alg_a & SSL_aDSS)
1987 i=SSL_PKEY_DSA_SIGN; 2303 i=SSL_PKEY_DSA_SIGN;
1988 » else if (kalg & SSL_aRSA) 2304 » else if (alg_a & SSL_aRSA)
1989 { 2305 {
1990 if (c->pkeys[SSL_PKEY_RSA_ENC].x509 == NULL) 2306 if (c->pkeys[SSL_PKEY_RSA_ENC].x509 == NULL)
1991 i=SSL_PKEY_RSA_SIGN; 2307 i=SSL_PKEY_RSA_SIGN;
1992 else 2308 else
1993 i=SSL_PKEY_RSA_ENC; 2309 i=SSL_PKEY_RSA_ENC;
1994 } 2310 }
1995 » else if (kalg & SSL_aKRB5) 2311 » else if (alg_a & SSL_aKRB5)
1996 { 2312 {
1997 /* VRS something else here? */ 2313 /* VRS something else here? */
1998 return(NULL); 2314 return(NULL);
1999 } 2315 }
2000 » else /* if (kalg & SSL_aNULL) */ 2316 » else if (alg_a & SSL_aGOST94)
2317 » » i=SSL_PKEY_GOST94;
2318 » else if (alg_a & SSL_aGOST01)
2319 » » i=SSL_PKEY_GOST01;
2320 » else /* if (alg_a & SSL_aNULL) */
2001 { 2321 {
2002 SSLerr(SSL_F_SSL_GET_SERVER_SEND_CERT,ERR_R_INTERNAL_ERROR); 2322 SSLerr(SSL_F_SSL_GET_SERVER_SEND_CERT,ERR_R_INTERNAL_ERROR);
2003 return(NULL); 2323 return(NULL);
2004 } 2324 }
2005 if (c->pkeys[i].x509 == NULL) return(NULL); 2325 if (c->pkeys[i].x509 == NULL) return(NULL);
2006 2326
2007 return(c->pkeys[i].x509); 2327 return(c->pkeys[i].x509);
2008 } 2328 }
2009 2329
2010 EVP_PKEY *ssl_get_sign_pkey(SSL *s,SSL_CIPHER *cipher) 2330 EVP_PKEY *ssl_get_sign_pkey(SSL *s,const SSL_CIPHER *cipher)
2011 { 2331 {
2012 » unsigned long alg; 2332 » unsigned long alg_a;
2013 CERT *c; 2333 CERT *c;
2014 2334
2015 » alg=cipher->algorithms; 2335 » alg_a = cipher->algorithm_auth;
2016 c=s->cert; 2336 c=s->cert;
2017 2337
2018 » if ((alg & SSL_aDSS) && 2338 » if ((alg_a & SSL_aDSS) &&
2019 (c->pkeys[SSL_PKEY_DSA_SIGN].privatekey != NULL)) 2339 (c->pkeys[SSL_PKEY_DSA_SIGN].privatekey != NULL))
2020 return(c->pkeys[SSL_PKEY_DSA_SIGN].privatekey); 2340 return(c->pkeys[SSL_PKEY_DSA_SIGN].privatekey);
2021 » else if (alg & SSL_aRSA) 2341 » else if (alg_a & SSL_aRSA)
2022 { 2342 {
2023 if (c->pkeys[SSL_PKEY_RSA_SIGN].privatekey != NULL) 2343 if (c->pkeys[SSL_PKEY_RSA_SIGN].privatekey != NULL)
2024 return(c->pkeys[SSL_PKEY_RSA_SIGN].privatekey); 2344 return(c->pkeys[SSL_PKEY_RSA_SIGN].privatekey);
2025 else if (c->pkeys[SSL_PKEY_RSA_ENC].privatekey != NULL) 2345 else if (c->pkeys[SSL_PKEY_RSA_ENC].privatekey != NULL)
2026 return(c->pkeys[SSL_PKEY_RSA_ENC].privatekey); 2346 return(c->pkeys[SSL_PKEY_RSA_ENC].privatekey);
2027 else 2347 else
2028 return(NULL); 2348 return(NULL);
2029 } 2349 }
2030 » else if ((alg & SSL_aECDSA) && 2350 » else if ((alg_a & SSL_aECDSA) &&
2031 (c->pkeys[SSL_PKEY_ECC].privatekey != NULL)) 2351 (c->pkeys[SSL_PKEY_ECC].privatekey != NULL))
2032 return(c->pkeys[SSL_PKEY_ECC].privatekey); 2352 return(c->pkeys[SSL_PKEY_ECC].privatekey);
2033 » else /* if (alg & SSL_aNULL) */ 2353 » else /* if (alg_a & SSL_aNULL) */
2034 { 2354 {
2035 SSLerr(SSL_F_SSL_GET_SIGN_PKEY,ERR_R_INTERNAL_ERROR); 2355 SSLerr(SSL_F_SSL_GET_SIGN_PKEY,ERR_R_INTERNAL_ERROR);
2036 return(NULL); 2356 return(NULL);
2037 } 2357 }
2038 } 2358 }
2039 2359
2040 void ssl_update_cache(SSL *s,int mode) 2360 void ssl_update_cache(SSL *s,int mode)
2041 { 2361 {
2042 int i; 2362 int i;
2043 2363
2044 /* If the session_id_length is 0, we are not supposed to cache it, 2364 /* If the session_id_length is 0, we are not supposed to cache it,
2045 * and it would be rather hard to do anyway :-) */ 2365 * and it would be rather hard to do anyway :-) */
2046 if (s->session->session_id_length == 0) return; 2366 if (s->session->session_id_length == 0) return;
2047 2367
2048 » i=s->ctx->session_cache_mode; 2368 » i=s->session_ctx->session_cache_mode;
2049 if ((i & mode) && (!s->hit) 2369 if ((i & mode) && (!s->hit)
2050 && ((i & SSL_SESS_CACHE_NO_INTERNAL_STORE) 2370 && ((i & SSL_SESS_CACHE_NO_INTERNAL_STORE)
2051 » » || SSL_CTX_add_session(s->ctx,s->session)) 2371 » » || SSL_CTX_add_session(s->session_ctx,s->session))
2052 » » && (s->ctx->new_session_cb != NULL)) 2372 » » && (s->session_ctx->new_session_cb != NULL))
2053 { 2373 {
2054 CRYPTO_add(&s->session->references,1,CRYPTO_LOCK_SSL_SESSION); 2374 CRYPTO_add(&s->session->references,1,CRYPTO_LOCK_SSL_SESSION);
2055 » » if (!s->ctx->new_session_cb(s,s->session)) 2375 » » if (!s->session_ctx->new_session_cb(s,s->session))
2056 SSL_SESSION_free(s->session); 2376 SSL_SESSION_free(s->session);
2057 } 2377 }
2058 2378
2059 /* auto flush every 255 connections */ 2379 /* auto flush every 255 connections */
2060 if ((!(i & SSL_SESS_CACHE_NO_AUTO_CLEAR)) && 2380 if ((!(i & SSL_SESS_CACHE_NO_AUTO_CLEAR)) &&
2061 ((i & mode) == mode)) 2381 ((i & mode) == mode))
2062 { 2382 {
2063 if ( (((mode & SSL_SESS_CACHE_CLIENT) 2383 if ( (((mode & SSL_SESS_CACHE_CLIENT)
2064 » » » ?s->ctx->stats.sess_connect_good 2384 » » » ?s->session_ctx->stats.sess_connect_good
2065 » » » :s->ctx->stats.sess_accept_good) & 0xff) == 0xff) 2385 » » » :s->session_ctx->stats.sess_accept_good) & 0xff) == 0xff )
2066 { 2386 {
2067 » » » SSL_CTX_flush_sessions(s->ctx,(unsigned long)time(NULL)) ; 2387 » » » SSL_CTX_flush_sessions(s->session_ctx,(unsigned long)tim e(NULL));
2068 } 2388 }
2069 } 2389 }
2070 } 2390 }
2071 2391
2072 SSL_METHOD *SSL_get_ssl_method(SSL *s) 2392 const SSL_METHOD *SSL_get_ssl_method(SSL *s)
2073 { 2393 {
2074 return(s->method); 2394 return(s->method);
2075 } 2395 }
2076 2396
2077 int SSL_set_ssl_method(SSL *s,SSL_METHOD *meth) 2397 int SSL_set_ssl_method(SSL *s, const SSL_METHOD *meth)
2078 { 2398 {
2079 int conn= -1; 2399 int conn= -1;
2080 int ret=1; 2400 int ret=1;
2081 2401
2082 if (s->method != meth) 2402 if (s->method != meth)
2083 { 2403 {
2084 if (s->handshake_func != NULL) 2404 if (s->handshake_func != NULL)
2085 conn=(s->handshake_func == s->method->ssl_connect); 2405 conn=(s->handshake_func == s->method->ssl_connect);
2086 2406
2087 if (s->method->version == meth->version) 2407 if (s->method->version == meth->version)
(...skipping 24 matching lines...) Expand all
2112 /* Make things return SSL_ERROR_SYSCALL when doing SSL_do_handshake 2432 /* Make things return SSL_ERROR_SYSCALL when doing SSL_do_handshake
2113 * etc, where we do encode the error */ 2433 * etc, where we do encode the error */
2114 if ((l=ERR_peek_error()) != 0) 2434 if ((l=ERR_peek_error()) != 0)
2115 { 2435 {
2116 if (ERR_GET_LIB(l) == ERR_LIB_SYS) 2436 if (ERR_GET_LIB(l) == ERR_LIB_SYS)
2117 return(SSL_ERROR_SYSCALL); 2437 return(SSL_ERROR_SYSCALL);
2118 else 2438 else
2119 return(SSL_ERROR_SSL); 2439 return(SSL_ERROR_SSL);
2120 } 2440 }
2121 2441
2122 if ((i < 0) && SSL_want_server_random_validation(s))
2123 return(SSL_ERROR_SERVER_RANDOM_VALIDATION_PENDING);
2124
2125 if ((i < 0) && SSL_want_read(s)) 2442 if ((i < 0) && SSL_want_read(s))
2126 { 2443 {
2127 bio=SSL_get_rbio(s); 2444 bio=SSL_get_rbio(s);
2128 if (BIO_should_read(bio)) 2445 if (BIO_should_read(bio))
2129 return(SSL_ERROR_WANT_READ); 2446 return(SSL_ERROR_WANT_READ);
2130 else if (BIO_should_write(bio)) 2447 else if (BIO_should_write(bio))
2131 /* This one doesn't make too much sense ... We never try 2448 /* This one doesn't make too much sense ... We never try
2132 * to write to the rbio, and an application program wher e 2449 * to write to the rbio, and an application program wher e
2133 * rbio and wbio are separate couldn't even know what it 2450 * rbio and wbio are separate couldn't even know what it
2134 * should wait for. 2451 * should wait for.
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
2213 /* For the next 2 functions, SSL_clear() sets shutdown and so 2530 /* For the next 2 functions, SSL_clear() sets shutdown and so
2214 * one of these calls will reset it */ 2531 * one of these calls will reset it */
2215 void SSL_set_accept_state(SSL *s) 2532 void SSL_set_accept_state(SSL *s)
2216 { 2533 {
2217 s->server=1; 2534 s->server=1;
2218 s->shutdown=0; 2535 s->shutdown=0;
2219 s->state=SSL_ST_ACCEPT|SSL_ST_BEFORE; 2536 s->state=SSL_ST_ACCEPT|SSL_ST_BEFORE;
2220 s->handshake_func=s->method->ssl_accept; 2537 s->handshake_func=s->method->ssl_accept;
2221 /* clear the current cipher */ 2538 /* clear the current cipher */
2222 ssl_clear_cipher_ctx(s); 2539 ssl_clear_cipher_ctx(s);
2540 ssl_clear_hash_ctx(&s->read_hash);
2541 ssl_clear_hash_ctx(&s->write_hash);
2223 } 2542 }
2224 2543
2225 void SSL_set_connect_state(SSL *s) 2544 void SSL_set_connect_state(SSL *s)
2226 { 2545 {
2227 s->server=0; 2546 s->server=0;
2228 s->shutdown=0; 2547 s->shutdown=0;
2229 s->state=SSL_ST_CONNECT|SSL_ST_BEFORE; 2548 s->state=SSL_ST_CONNECT|SSL_ST_BEFORE;
2230 s->handshake_func=s->method->ssl_connect; 2549 s->handshake_func=s->method->ssl_connect;
2231 /* clear the current cipher */ 2550 /* clear the current cipher */
2232 ssl_clear_cipher_ctx(s); 2551 ssl_clear_cipher_ctx(s);
2552 ssl_clear_hash_ctx(&s->read_hash);
2553 ssl_clear_hash_ctx(&s->write_hash);
2233 } 2554 }
2234 2555
2235 int ssl_undefined_function(SSL *s) 2556 int ssl_undefined_function(SSL *s)
2236 { 2557 {
2237 SSLerr(SSL_F_SSL_UNDEFINED_FUNCTION,ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); 2558 SSLerr(SSL_F_SSL_UNDEFINED_FUNCTION,ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
2238 return(0); 2559 return(0);
2239 } 2560 }
2240 2561
2241 int ssl_undefined_void_function(void) 2562 int ssl_undefined_void_function(void)
2242 { 2563 {
2243 SSLerr(SSL_F_SSL_UNDEFINED_VOID_FUNCTION,ERR_R_SHOULD_NOT_HAVE_BEEN_CALL ED); 2564 SSLerr(SSL_F_SSL_UNDEFINED_VOID_FUNCTION,ERR_R_SHOULD_NOT_HAVE_BEEN_CALL ED);
2244 return(0); 2565 return(0);
2245 } 2566 }
2246 2567
2247 int ssl_undefined_const_function(const SSL *s) 2568 int ssl_undefined_const_function(const SSL *s)
2248 { 2569 {
2249 SSLerr(SSL_F_SSL_UNDEFINED_CONST_FUNCTION,ERR_R_SHOULD_NOT_HAVE_BEEN_CAL LED); 2570 SSLerr(SSL_F_SSL_UNDEFINED_CONST_FUNCTION,ERR_R_SHOULD_NOT_HAVE_BEEN_CAL LED);
2250 return(0); 2571 return(0);
2251 } 2572 }
2252 2573
2253 SSL_METHOD *ssl_bad_method(int ver) 2574 SSL_METHOD *ssl_bad_method(int ver)
2254 { 2575 {
2255 SSLerr(SSL_F_SSL_BAD_METHOD,ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); 2576 SSLerr(SSL_F_SSL_BAD_METHOD,ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
2256 return(NULL); 2577 return(NULL);
2257 } 2578 }
2258 2579
2580 static const char *ssl_get_version(int version)
2581 {
2582 if (version == TLS1_VERSION)
2583 return("TLSv1");
2584 else if (version == SSL3_VERSION)
2585 return("SSLv3");
2586 else if (version == SSL2_VERSION)
2587 return("SSLv2");
2588 else
2589 return("unknown");
2590 }
2591
2259 const char *SSL_get_version(const SSL *s) 2592 const char *SSL_get_version(const SSL *s)
2260 { 2593 {
2261 » if (s->version == TLS1_VERSION) 2594 » » return ssl_get_version(s->version);
2262 » » return("TLSv1"); 2595 » }
2263 » else if (s->version == SSL3_VERSION) 2596
2264 » » return("SSLv3"); 2597 const char *SSL_SESSION_get_version(const SSL_SESSION *s)
2265 » else if (s->version == SSL2_VERSION) 2598 » {
2266 » » return("SSLv2"); 2599 » » return ssl_get_version(s->ssl_version);
2267 » else 2600 » }
2268 » » return("unknown"); 2601
2602 const char* SSL_authentication_method(const SSL* ssl)
2603 » {
2604 » if (ssl->cert != NULL && ssl->cert->rsa_tmp != NULL)
2605 » » return SSL_TXT_RSA "_" SSL_TXT_EXPORT;
2606 » switch (ssl->version)
2607 » » {
2608 » case SSL2_VERSION:
2609 » » return SSL_TXT_RSA;
2610 » case SSL3_VERSION:
2611 » case TLS1_VERSION:
2612 » case DTLS1_VERSION:
2613 » » return SSL_CIPHER_authentication_method(ssl->s3->tmp.new_cipher) ;
2614 » default:
2615 » » return "UNKNOWN";
2616 » » }
2269 } 2617 }
2270 2618
2271 SSL *SSL_dup(SSL *s) 2619 SSL *SSL_dup(SSL *s)
2272 { 2620 {
2273 STACK_OF(X509_NAME) *sk; 2621 STACK_OF(X509_NAME) *sk;
2274 X509_NAME *xn; 2622 X509_NAME *xn;
2275 SSL *ret; 2623 SSL *ret;
2276 int i; 2624 int i;
2277 » » 2625 »
2278 if ((ret=SSL_new(SSL_get_SSL_CTX(s))) == NULL) 2626 if ((ret=SSL_new(SSL_get_SSL_CTX(s))) == NULL)
2279 return(NULL); 2627 return(NULL);
2280 2628
2281 ret->version = s->version; 2629 ret->version = s->version;
2282 ret->type = s->type; 2630 ret->type = s->type;
2283 ret->method = s->method; 2631 ret->method = s->method;
2284 2632
2285 if (s->session != NULL) 2633 if (s->session != NULL)
2286 { 2634 {
2287 /* This copies session-id, SSL_METHOD, sid_ctx, and 'cert' */ 2635 /* This copies session-id, SSL_METHOD, sid_ctx, and 'cert' */
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
2437 2785
2438 /* Fix this function so that it takes an optional type parameter */ 2786 /* Fix this function so that it takes an optional type parameter */
2439 EVP_PKEY *SSL_get_privatekey(SSL *s) 2787 EVP_PKEY *SSL_get_privatekey(SSL *s)
2440 { 2788 {
2441 if (s->cert != NULL) 2789 if (s->cert != NULL)
2442 return(s->cert->key->privatekey); 2790 return(s->cert->key->privatekey);
2443 else 2791 else
2444 return(NULL); 2792 return(NULL);
2445 } 2793 }
2446 2794
2447 SSL_CIPHER *SSL_get_current_cipher(const SSL *s) 2795 const SSL_CIPHER *SSL_get_current_cipher(const SSL *s)
2448 { 2796 {
2449 if ((s->session != NULL) && (s->session->cipher != NULL)) 2797 if ((s->session != NULL) && (s->session->cipher != NULL))
2450 return(s->session->cipher); 2798 return(s->session->cipher);
2451 return(NULL); 2799 return(NULL);
2452 } 2800 }
2453 #ifdef OPENSSL_NO_COMP 2801 #ifdef OPENSSL_NO_COMP
2454 const void *SSL_get_current_compression(SSL *s) 2802 const void *SSL_get_current_compression(SSL *s)
2455 { 2803 {
2456 return NULL; 2804 return NULL;
2457 } 2805 }
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
2515 void ssl_free_wbio_buffer(SSL *s) 2863 void ssl_free_wbio_buffer(SSL *s)
2516 { 2864 {
2517 if (s->bbio == NULL) return; 2865 if (s->bbio == NULL) return;
2518 2866
2519 if (s->bbio == s->wbio) 2867 if (s->bbio == s->wbio)
2520 { 2868 {
2521 /* remove buffering */ 2869 /* remove buffering */
2522 s->wbio=BIO_pop(s->wbio); 2870 s->wbio=BIO_pop(s->wbio);
2523 #ifdef REF_CHECK /* not the usual REF_CHECK, but this avoids adding one more pre processor symbol */ 2871 #ifdef REF_CHECK /* not the usual REF_CHECK, but this avoids adding one more pre processor symbol */
2524 assert(s->wbio != NULL); 2872 assert(s->wbio != NULL);
2525 #endif» 2873 #endif
2526 } 2874 }
2527 BIO_free(s->bbio); 2875 BIO_free(s->bbio);
2528 s->bbio=NULL; 2876 s->bbio=NULL;
2529 } 2877 }
2530 2878
2531 void SSL_CTX_set_quiet_shutdown(SSL_CTX *ctx,int mode) 2879 void SSL_CTX_set_quiet_shutdown(SSL_CTX *ctx,int mode)
2532 { 2880 {
2533 ctx->quiet_shutdown=mode; 2881 ctx->quiet_shutdown=mode;
2534 } 2882 }
2535 2883
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
2600 #endif 2948 #endif
2601 2949
2602 void SSL_set_info_callback(SSL *ssl, 2950 void SSL_set_info_callback(SSL *ssl,
2603 void (*cb)(const SSL *ssl,int type,int val)) 2951 void (*cb)(const SSL *ssl,int type,int val))
2604 { 2952 {
2605 ssl->info_callback=cb; 2953 ssl->info_callback=cb;
2606 } 2954 }
2607 2955
2608 /* One compiler (Diab DCC) doesn't like argument names in returned 2956 /* One compiler (Diab DCC) doesn't like argument names in returned
2609 function pointer. */ 2957 function pointer. */
2610 void (*SSL_get_info_callback(const SSL *ssl))(const SSL * /*ssl*/,int /*type*/,i nt /*val*/) 2958 void (*SSL_get_info_callback(const SSL *ssl))(const SSL * /*ssl*/,int /*type*/,i nt /*val*/)
2611 { 2959 {
2612 return ssl->info_callback; 2960 return ssl->info_callback;
2613 } 2961 }
2614 2962
2615 int SSL_state(const SSL *ssl) 2963 int SSL_state(const SSL *ssl)
2616 { 2964 {
2617 return(ssl->state); 2965 return(ssl->state);
2618 } 2966 }
2619 2967
2620 void SSL_set_verify_result(SSL *ssl,long arg) 2968 void SSL_set_verify_result(SSL *ssl,long arg)
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
2721 #endif 3069 #endif
2722 3070
2723 /*! 3071 /*!
2724 * \brief Set the callback for generating temporary DH keys. 3072 * \brief Set the callback for generating temporary DH keys.
2725 * \param ctx the SSL context. 3073 * \param ctx the SSL context.
2726 * \param dh the callback 3074 * \param dh the callback
2727 */ 3075 */
2728 3076
2729 #ifndef OPENSSL_NO_DH 3077 #ifndef OPENSSL_NO_DH
2730 void SSL_CTX_set_tmp_dh_callback(SSL_CTX *ctx,DH *(*dh)(SSL *ssl,int is_export, 3078 void SSL_CTX_set_tmp_dh_callback(SSL_CTX *ctx,DH *(*dh)(SSL *ssl,int is_export,
2731 » » » » » » » int keylength)) 3079 int keylength))
2732 { 3080 {
2733 SSL_CTX_callback_ctrl(ctx,SSL_CTRL_SET_TMP_DH_CB,(void (*)(void))dh); 3081 SSL_CTX_callback_ctrl(ctx,SSL_CTRL_SET_TMP_DH_CB,(void (*)(void))dh);
2734 } 3082 }
2735 3083
2736 void SSL_set_tmp_dh_callback(SSL *ssl,DH *(*dh)(SSL *ssl,int is_export, 3084 void SSL_set_tmp_dh_callback(SSL *ssl,DH *(*dh)(SSL *ssl,int is_export,
2737 » » » » » » int keylength)) 3085 int keylength))
2738 { 3086 {
2739 SSL_callback_ctrl(ssl,SSL_CTRL_SET_TMP_DH_CB,(void (*)(void))dh); 3087 SSL_callback_ctrl(ssl,SSL_CTRL_SET_TMP_DH_CB,(void (*)(void))dh);
2740 } 3088 }
2741 #endif 3089 #endif
2742 3090
2743 #ifndef OPENSSL_NO_ECDH 3091 #ifndef OPENSSL_NO_ECDH
2744 void SSL_CTX_set_tmp_ecdh_callback(SSL_CTX *ctx,EC_KEY *(*ecdh)(SSL *ssl,int is_ export, 3092 void SSL_CTX_set_tmp_ecdh_callback(SSL_CTX *ctx,EC_KEY *(*ecdh)(SSL *ssl,int is_ export,
2745 » » » » » » » int keylength)) 3093 int keylength))
2746 { 3094 {
2747 SSL_CTX_callback_ctrl(ctx,SSL_CTRL_SET_TMP_ECDH_CB,(void (*)(void))ecdh) ; 3095 SSL_CTX_callback_ctrl(ctx,SSL_CTRL_SET_TMP_ECDH_CB,(void (*)(void))ecdh) ;
2748 } 3096 }
2749 3097
2750 void SSL_set_tmp_ecdh_callback(SSL *ssl,EC_KEY *(*ecdh)(SSL *ssl,int is_export, 3098 void SSL_set_tmp_ecdh_callback(SSL *ssl,EC_KEY *(*ecdh)(SSL *ssl,int is_export,
2751 » » » » » » int keylength)) 3099 int keylength))
2752 { 3100 {
2753 SSL_callback_ctrl(ssl,SSL_CTRL_SET_TMP_ECDH_CB,(void (*)(void))ecdh); 3101 SSL_callback_ctrl(ssl,SSL_CTRL_SET_TMP_ECDH_CB,(void (*)(void))ecdh);
2754 } 3102 }
2755 #endif 3103 #endif
2756 3104
3105 #ifndef OPENSSL_NO_PSK
3106 int SSL_CTX_use_psk_identity_hint(SSL_CTX *ctx, const char *identity_hint)
3107 {
3108 if (identity_hint != NULL && strlen(identity_hint) > PSK_MAX_IDENTITY_LE N)
3109 {
3110 SSLerr(SSL_F_SSL_CTX_USE_PSK_IDENTITY_HINT, SSL_R_DATA_LENGTH_TO O_LONG);
3111 return 0;
3112 }
3113 if (ctx->psk_identity_hint != NULL)
3114 OPENSSL_free(ctx->psk_identity_hint);
3115 if (identity_hint != NULL)
3116 {
3117 ctx->psk_identity_hint = BUF_strdup(identity_hint);
3118 if (ctx->psk_identity_hint == NULL)
3119 return 0;
3120 }
3121 else
3122 ctx->psk_identity_hint = NULL;
3123 return 1;
3124 }
3125
3126 int SSL_use_psk_identity_hint(SSL *s, const char *identity_hint)
3127 {
3128 if (s == NULL)
3129 return 0;
3130
3131 if (s->session == NULL)
3132 return 1; /* session not created yet, ignored */
3133
3134 if (identity_hint != NULL && strlen(identity_hint) > PSK_MAX_IDENTITY_LE N)
3135 {
3136 SSLerr(SSL_F_SSL_USE_PSK_IDENTITY_HINT, SSL_R_DATA_LENGTH_TOO_LO NG);
3137 return 0;
3138 }
3139 if (s->session->psk_identity_hint != NULL)
3140 OPENSSL_free(s->session->psk_identity_hint);
3141 if (identity_hint != NULL)
3142 {
3143 s->session->psk_identity_hint = BUF_strdup(identity_hint);
3144 if (s->session->psk_identity_hint == NULL)
3145 return 0;
3146 }
3147 else
3148 s->session->psk_identity_hint = NULL;
3149 return 1;
3150 }
3151
3152 const char *SSL_get_psk_identity_hint(const SSL *s)
3153 {
3154 if (s == NULL || s->session == NULL)
3155 return NULL;
3156 return(s->session->psk_identity_hint);
3157 }
3158
3159 const char *SSL_get_psk_identity(const SSL *s)
3160 {
3161 if (s == NULL || s->session == NULL)
3162 return NULL;
3163 return(s->session->psk_identity);
3164 }
3165
3166 void SSL_set_psk_client_callback(SSL *s,
3167 unsigned int (*cb)(SSL *ssl, const char *hint,
3168 char *identity, unsigned int max_identity_len, unsigned c har *psk,
3169 unsigned int max_psk_len))
3170 {
3171 s->psk_client_callback = cb;
3172 }
3173
3174 void SSL_CTX_set_psk_client_callback(SSL_CTX *ctx,
3175 unsigned int (*cb)(SSL *ssl, const char *hint,
3176 char *identity, unsigned int max_identity_len, unsigned c har *psk,
3177 unsigned int max_psk_len))
3178 {
3179 ctx->psk_client_callback = cb;
3180 }
3181
3182 void SSL_set_psk_server_callback(SSL *s,
3183 unsigned int (*cb)(SSL *ssl, const char *identity,
3184 unsigned char *psk, unsigned int max_psk_len))
3185 {
3186 s->psk_server_callback = cb;
3187 }
3188
3189 void SSL_CTX_set_psk_server_callback(SSL_CTX *ctx,
3190 unsigned int (*cb)(SSL *ssl, const char *identity,
3191 unsigned char *psk, unsigned int max_psk_len))
3192 {
3193 ctx->psk_server_callback = cb;
3194 }
3195 #endif
2757 3196
2758 void SSL_CTX_set_msg_callback(SSL_CTX *ctx, void (*cb)(int write_p, int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg)) 3197 void SSL_CTX_set_msg_callback(SSL_CTX *ctx, void (*cb)(int write_p, int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg))
2759 { 3198 {
2760 SSL_CTX_callback_ctrl(ctx, SSL_CTRL_SET_MSG_CALLBACK, (void (*)(void))cb ); 3199 SSL_CTX_callback_ctrl(ctx, SSL_CTRL_SET_MSG_CALLBACK, (void (*)(void))cb );
2761 } 3200 }
2762 void SSL_set_msg_callback(SSL *ssl, void (*cb)(int write_p, int version, int con tent_type, const void *buf, size_t len, SSL *ssl, void *arg)) 3201 void SSL_set_msg_callback(SSL *ssl, void (*cb)(int write_p, int version, int con tent_type, const void *buf, size_t len, SSL *ssl, void *arg))
2763 { 3202 {
2764 SSL_callback_ctrl(ssl, SSL_CTRL_SET_MSG_CALLBACK, (void (*)(void))cb); 3203 SSL_callback_ctrl(ssl, SSL_CTRL_SET_MSG_CALLBACK, (void (*)(void))cb);
2765 } 3204 }
2766 3205
2767 #ifndef OPENSSL_NO_TLSEXT
2768 /* SSL_select_next_proto implements the standard protocol selection. It is
2769 * expected that this function is called from the callback set by
2770 * SSL_CTX_set_next_proto_select_cb.
2771 *
2772 * The protocol data is assumed to be a vector of 8-bit, length prefixed byte
2773 * strings. The length byte itself is not included in the length. A byte
2774 * string of length 0 is invalid. No byte string may be truncated.
2775 *
2776 * The current, but experimental algorithm for selecting the protocol is:
2777 *
2778 * 1) If the server doesn't support NPN then this is indicated to the
2779 * callback. In this case, the client application has to abort the connection
2780 * or have a default application level protocol.
2781 *
2782 * 2) If the server supports NPN, but advertises an empty list then the
2783 * client selects the first protcol in its list, but indicates via the
2784 * API that this fallback case was enacted.
2785 *
2786 * 3) Otherwise, the client finds the first protocol in the server's list
2787 * that it supports and selects this protocol. This is because it's
2788 * assumed that the server has better information about which protocol
2789 * a client should use.
2790 *
2791 * 4) If the client doesn't support any of the server's advertised
2792 * protocols, then this is treated the same as case 2.
2793 *
2794 * It returns either
2795 * OPENSSL_NPN_NEGOTIATED if a common protocol was found, or
2796 * OPENSSL_NPN_NO_OVERLAP if the fallback case was reached.
2797 */
2798 int SSL_select_next_proto(unsigned char **out, unsigned char *outlen, const unsi gned char *server, unsigned int server_len, const unsigned char *client, unsigne d int client_len)
2799 {
2800 unsigned int i, j;
2801 const unsigned char *result;
2802 int status = OPENSSL_NPN_UNSUPPORTED;
2803
2804 /* For each protocol in server preference order, see if we support it. * /
2805 for (i = 0; i < server_len; )
2806 {
2807 for (j = 0; j < client_len; )
2808 {
2809 if (server[i] == client[j] &&
2810 memcmp(&server[i+1], &client[j+1], server[i]) == 0)
2811 {
2812 /* We found a match */
2813 result = &server[i];
2814 status = OPENSSL_NPN_NEGOTIATED;
2815 goto found;
2816 }
2817 j += client[j];
2818 j++;
2819 }
2820 i += server[i];
2821 i++;
2822 }
2823
2824 /* There's no overlap between our protocols and the server's list. */
2825 result = client;
2826 status = OPENSSL_NPN_NO_OVERLAP;
2827
2828 found:
2829 *out = (unsigned char *) result + 1;
2830 *outlen = result[0];
2831 return status;
2832 }
2833
2834 /* SSL_get0_next_proto_negotiated sets *data and *len to point to the client's
2835 * requested protocol for this connection and returns 0. If the client didn't
2836 * request any protocol, then *data is set to NULL.
2837 *
2838 * Note that the client can request any protocol it chooses. The value returned
2839 * from this function need not be a member of the list of supported protocols
2840 * provided by the callback.
2841 */
2842 void SSL_get0_next_proto_negotiated(const SSL *s, const unsigned char **data, un signed *len)
2843 {
2844 *data = s->next_proto_negotiated;
2845 if (!*data) {
2846 *len = 0;
2847 } else {
2848 *len = s->next_proto_negotiated_len;
2849 }
2850 }
2851
2852 /* SSL_CTX_set_next_protos_advertised_cb sets a callback that is called when a
2853 * TLS server needs a list of supported protocols for Next Protocol
2854 * Negotiation. The returned list must be in wire format. The list is returned
2855 * by setting |out| to point to it and |outlen| to its length. This memory will
2856 * not be modified, but one should assume that the SSL* keeps a reference to
2857 * it.
2858 *
2859 * The callback should return SSL_TLSEXT_ERR_OK if it wishes to advertise. Other wise, no
2860 * such extension will be included in the ServerHello. */
2861 void SSL_CTX_set_next_protos_advertised_cb(SSL_CTX *ctx, int (*cb) (SSL *ssl, co nst unsigned char **out, unsigned int *outlen, void *arg), void *arg)
2862 {
2863 ctx->next_protos_advertised_cb = cb;
2864 ctx->next_protos_advertised_cb_arg = arg;
2865 }
2866
2867 /* SSL_CTX_set_next_proto_select_cb sets a callback that is called when a
2868 * client needs to select a protocol from the server's provided list. |out|
2869 * must be set to point to the selected protocol (which may be within |in|).
2870 * The length of the protocol name must be written into |outlen|. The server's
2871 * advertised protocols are provided in |in| and |inlen|. The callback can
2872 * assume that |in| is syntactically valid.
2873 *
2874 * The client must select a protocol. It is fatal to the connection if this
2875 * callback returns a value other than SSL_TLSEXT_ERR_OK.
2876 */
2877 void SSL_CTX_set_next_proto_select_cb(SSL_CTX *ctx, int (*cb) (SSL *s, unsigned char **out, unsigned char *outlen, const unsigned char *in, unsigned int inlen, void *arg), void *arg)
2878 {
2879 ctx->next_proto_select_cb = cb;
2880 ctx->next_proto_select_cb_arg = arg;
2881 }
2882
2883 /* SSL_CTX_set_snap_start_orbit sets the orbit value which will be echoed back
2884 * to the client and enables Snap Start for this context.
2885 *
2886 * An orbit value can be used to spatially partition the state needed to support
2887 * Snap Start. See the comments above SSL_set_suggested_server_random_validity
2888 * (below). */
2889 void SSL_CTX_set_snap_start_orbit(SSL_CTX *ctx, const unsigned char orbit[8])
2890 {
2891 memcpy(ctx->snap_start_orbit, orbit, sizeof(ctx->snap_start_orbit));
2892 ctx->snap_start_orbit_valid = 1;
2893 }
2894
2895 /* Once SSL_accept has returned with SSL_SERVER_RANDOM_VALIDATE, then one can
2896 * call this function in order to get the client's suggested server random
2897 * value. */
2898 void SSL_get0_suggested_server_random(const SSL* s, const unsigned char **data, unsigned *length)
2899 {
2900 if (!s->s3->snap_start_requested)
2901 {
2902 *data = NULL;
2903 *length = 0;
2904 return;
2905 }
2906 *length = 32;
2907 *data = s->s3->server_random;
2908 }
2909
2910 /* SSL_set_suggested_server_random_validity passes judgement on a
2911 * client-suggested random value (obtained from
2912 * SSL_get0_suggested_server_random). Rejecting the value triggers a recovery,
2913 * while accepting the value /may/ result in a successful Snap Start, as long
2914 * as the client predicted the handshake correctly.
2915 *
2916 * In order to accept a random value the user must ensure that it has NEVER
2917 * been used before by this server, or any server configured with any of the
2918 * same certificates. It may reject more if necessary.
2919 *
2920 * The first four bytes of the random value contain a timestamp (UNIX seconds
2921 * since the epoch) which can be used to manage a time window. Additionally,
2922 * the following eight bytes contain the orbit which which can also bound the
2923 * state required if geographically separate servers share certificates.
2924 *
2925 * It's recommended that the time window have a maximum size, independent of
2926 * the resources available, in order to prevent an attacker from arbitrarily
2927 * delaying a Snap Start handshake.
2928 */
2929 void SSL_set_suggested_server_random_validity(SSL *s, char is_valid)
2930 {
2931 if (is_valid)
2932 s->s3->server_random_suggestion_valid = 1;
2933 else
2934 ssl3_snap_start_reset_for_recovery(s);
2935 }
2936
2937 #endif
2938
2939 int SSL_cutthrough_complete(const SSL *s) 3206 int SSL_cutthrough_complete(const SSL *s)
2940 { 3207 {
2941 return (!s->server && /* cutthrough only applies to clie nts */ 3208 return (!s->server && /* cutthrough only applies to clie nts */
2942 !s->hit && /* full-handshake */ 3209 !s->hit && /* full-handshake */
2943 s->version >= SSL3_VERSION && 3210 s->version >= SSL3_VERSION &&
2944 s->s3->in_read_app_data == 0 && /* cutthrough only applies to write() */ 3211 s->s3->in_read_app_data == 0 && /* cutthrough only applies to write() */
2945 (SSL_get_mode((SSL*)s) & SSL_MODE_HANDSHAKE_CUTTHROUGH) && /* c utthrough enabled */ 3212 (SSL_get_mode((SSL*)s) & SSL_MODE_HANDSHAKE_CUTTHROUGH) && /* c utthrough enabled */
2946 SSL_get_cipher_bits(s, NULL) >= 128 && /* s trong cipher choosen */ 3213 SSL_get_cipher_bits(s, NULL) >= 128 && /* s trong cipher choosen */
2947 s->s3->previous_server_finished_len == 0 && /* n ot a renegotiation handshake */ 3214 s->s3->previous_server_finished_len == 0 && /* n ot a renegotiation handshake */
2948 (s->state == SSL3_ST_CR_SESSION_TICKET_A || /* r eady to write app-data*/ 3215 (s->state == SSL3_ST_CR_SESSION_TICKET_A || /* r eady to write app-data*/
2949 s->state == SSL3_ST_CR_FINISHED_A)); 3216 s->state == SSL3_ST_CR_FINISHED_A));
2950 } 3217 }
2951 3218
3219 /* Allocates new EVP_MD_CTX and sets pointer to it into given pointer
3220 * vairable, freeing EVP_MD_CTX previously stored in that variable, if
3221 * any. If EVP_MD pointer is passed, initializes ctx with this md
3222 * Returns newly allocated ctx;
3223 */
3224
3225 EVP_MD_CTX *ssl_replace_hash(EVP_MD_CTX **hash,const EVP_MD *md)
3226 {
3227 ssl_clear_hash_ctx(hash);
3228 *hash = EVP_MD_CTX_create();
3229 if (md) EVP_DigestInit_ex(*hash,md,NULL);
3230 return *hash;
3231 }
3232 void ssl_clear_hash_ctx(EVP_MD_CTX **hash)
3233 {
3234
3235 if (*hash) EVP_MD_CTX_destroy(*hash);
3236 *hash=NULL;
3237 }
3238
2952 #if defined(_WINDLL) && defined(OPENSSL_SYS_WIN16) 3239 #if defined(_WINDLL) && defined(OPENSSL_SYS_WIN16)
2953 #include "../crypto/bio/bss_file.c" 3240 #include "../crypto/bio/bss_file.c"
2954 #endif 3241 #endif
2955 3242
2956 IMPLEMENT_STACK_OF(SSL_CIPHER) 3243 IMPLEMENT_STACK_OF(SSL_CIPHER)
2957 IMPLEMENT_STACK_OF(SSL_COMP) 3244 IMPLEMENT_STACK_OF(SSL_COMP)
3245 IMPLEMENT_OBJ_BSEARCH_GLOBAL_CMP_FN(SSL_CIPHER, SSL_CIPHER,
3246 ssl_cipher_id);
3247
OLDNEW
« no previous file with comments | « openssl/ssl/ssl_err.c ('k') | openssl/ssl/ssl_locl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698