1 /* Copyright (C) 1995-1998 Eric Young (eay (at) cryptsoft.com) 2 * All rights reserved. 3 * 4 * This package is an SSL implementation written 5 * by Eric Young (eay (at) cryptsoft.com). 6 * The implementation was written so as to conform with Netscapes SSL. 7 * 8 * This library is free for commercial and non-commercial use as long as 9 * the following conditions are aheared to. The following conditions 10 * apply to all code found in this distribution, be it the RC4, RSA, 11 * lhash, DES, etc., code; not just the SSL code. The SSL documentation 12 * included with this distribution is covered by the same copyright terms 13 * except that the holder is Tim Hudson (tjh (at) cryptsoft.com). 14 * 15 * Copyright remains Eric Young's, and as such any Copyright notices in 16 * the code are not to be removed. 17 * If this package is used in a product, Eric Young should be given attribution 18 * as the author of the parts of the library used. 19 * This can be in the form of a textual message at program startup or 20 * in documentation (online or textual) provided with the package. 21 * 22 * Redistribution and use in source and binary forms, with or without 23 * modification, are permitted provided that the following conditions 24 * are met: 25 * 1. Redistributions of source code must retain the copyright 26 * notice, this list of conditions and the following disclaimer. 27 * 2. Redistributions in binary form must reproduce the above copyright 28 * notice, this list of conditions and the following disclaimer in the 29 * documentation and/or other materials provided with the distribution. 30 * 3. All advertising materials mentioning features or use of this software 31 * must display the following acknowledgement: 32 * "This product includes cryptographic software written by 33 * Eric Young (eay (at) cryptsoft.com)" 34 * The word 'cryptographic' can be left out if the rouines from the library 35 * being used are not cryptographic related :-). 36 * 4. If you include any Windows specific code (or a derivative thereof) from 37 * the apps directory (application code) you must include an acknowledgement: 38 * "This product includes software written by Tim Hudson (tjh (at) cryptsoft.com)" 39 * 40 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND 41 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 42 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 43 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 44 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 45 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 46 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 47 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 48 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 49 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 50 * SUCH DAMAGE. 51 * 52 * The licence and distribution terms for any publically available version or 53 * derivative of this code cannot be changed. i.e. this code cannot simply be 54 * copied and put under another distribution licence 55 * [including the GNU Public Licence.] 56 */ 57 /* ==================================================================== 58 * Copyright (c) 1998-2007 The OpenSSL Project. All rights reserved. 59 * 60 * Redistribution and use in source and binary forms, with or without 61 * modification, are permitted provided that the following conditions 62 * are met: 63 * 64 * 1. Redistributions of source code must retain the above copyright 65 * notice, this list of conditions and the following disclaimer. 66 * 67 * 2. Redistributions in binary form must reproduce the above copyright 68 * notice, this list of conditions and the following disclaimer in 69 * the documentation and/or other materials provided with the 70 * distribution. 71 * 72 * 3. All advertising materials mentioning features or use of this 73 * software must display the following acknowledgment: 74 * "This product includes software developed by the OpenSSL Project 75 * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" 76 * 77 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to 78 * endorse or promote products derived from this software without 79 * prior written permission. For written permission, please contact 80 * openssl-core (at) openssl.org. 81 * 82 * 5. Products derived from this software may not be called "OpenSSL" 83 * nor may "OpenSSL" appear in their names without prior written 84 * permission of the OpenSSL Project. 85 * 86 * 6. Redistributions of any form whatsoever must retain the following 87 * acknowledgment: 88 * "This product includes software developed by the OpenSSL Project 89 * for use in the OpenSSL Toolkit (http://www.openssl.org/)" 90 * 91 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY 92 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 93 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 94 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR 95 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 96 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 97 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 98 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 99 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 100 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 101 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 102 * OF THE POSSIBILITY OF SUCH DAMAGE. 103 * ==================================================================== 104 * 105 * This product includes cryptographic software written by Eric Young 106 * (eay (at) cryptsoft.com). This product includes software written by Tim 107 * Hudson (tjh (at) cryptsoft.com). 108 * 109 */ 110 /* ==================================================================== 111 * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. 112 * ECC cipher suite support in OpenSSL originally developed by 113 * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project. 114 */ 115 /* ==================================================================== 116 * Copyright 2005 Nokia. All rights reserved. 117 * 118 * The portions of the attached software ("Contribution") is developed by 119 * Nokia Corporation and is licensed pursuant to the OpenSSL open source 120 * license. 121 * 122 * The Contribution, originally written by Mika Kousa and Pasi Eronen of 123 * Nokia Corporation, consists of the "PSK" (Pre-Shared Key) ciphersuites 124 * support (see RFC 4279) to OpenSSL. 125 * 126 * No patent licenses or other rights except those expressly stated in 127 * the OpenSSL open source license shall be deemed granted or received 128 * expressly, by implication, estoppel, or otherwise. 129 * 130 * No assurances are provided by Nokia that the Contribution does not 131 * infringe the patent or other intellectual property rights of any third 132 * party or that the license provides you with all the necessary rights 133 * to make use of the Contribution. 134 * 135 * THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. IN 136 * ADDITION TO THE DISCLAIMERS INCLUDED IN THE LICENSE, NOKIA 137 * SPECIFICALLY DISCLAIMS ANY LIABILITY FOR CLAIMS BROUGHT BY YOU OR ANY 138 * OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS OR 139 * OTHERWISE. */ 140 141 #include <stdio.h> 142 #include <assert.h> 143 144 #include <openssl/bytestring.h> 145 #include <openssl/dh.h> 146 #include <openssl/engine.h> 147 #include <openssl/lhash.h> 148 #include <openssl/mem.h> 149 #include <openssl/obj.h> 150 #include <openssl/rand.h> 151 #include <openssl/x509v3.h> 152 153 #include "ssl_locl.h" 154 155 SSL3_ENC_METHOD ssl3_undef_enc_method={ 156 /* evil casts, but these functions are only called if there's a library bug */ 157 (int (*)(SSL *,int))ssl_undefined_function, 158 (int (*)(SSL *, unsigned char *, int))ssl_undefined_function, 159 ssl_undefined_function, 160 (int (*)(SSL *, unsigned char *, unsigned char *, int))ssl_undefined_function, 161 (int (*)(SSL*, int))ssl_undefined_function, 162 (int (*)(SSL *, const char*, int, unsigned char *))ssl_undefined_function, 163 0, /* finish_mac_length */ 164 (int (*)(SSL *, int, unsigned char *))ssl_undefined_function, 165 NULL, /* client_finished_label */ 166 0, /* client_finished_label_len */ 167 NULL, /* server_finished_label */ 168 0, /* server_finished_label_len */ 169 (int (*)(int))ssl_undefined_function, 170 (int (*)(SSL *, unsigned char *, size_t, const char *, 171 size_t, const unsigned char *, size_t, 172 int use_context)) ssl_undefined_function, 173 }; 174 175 /* Some error codes are special. Ensure the make_errors.go script 176 * never regresses this. */ 177 OPENSSL_COMPILE_ASSERT( 178 SSL_R_TLSV1_ALERT_NO_RENEGOTIATION == 179 SSL_AD_NO_RENEGOTIATION + SSL_AD_REASON_OFFSET, 180 ssl_alert_reason_code_mismatch); 181 182 int SSL_clear(SSL *s) 183 { 184 185 if (s->method == NULL) 186 { 187 OPENSSL_PUT_ERROR(SSL, SSL_clear, SSL_R_NO_METHOD_SPECIFIED); 188 return(0); 189 } 190 191 if (ssl_clear_bad_session(s)) 192 { 193 SSL_SESSION_free(s->session); 194 s->session=NULL; 195 } 196 197 s->hit=0; 198 s->shutdown=0; 199 200 #if 0 /* Disabled since version 1.10 of this file (early return not 201 * needed because SSL_clear is not called when doing renegotiation) */ 202 /* This is set if we are doing dynamic renegotiation so keep 203 * the old cipher. It is sort of a SSL_clear_lite :-) */ 204 if (s->renegotiate) return(1); 205 #else 206 if (s->renegotiate) 207 { 208 OPENSSL_PUT_ERROR(SSL, SSL_clear, ERR_R_INTERNAL_ERROR); 209 return 0; 210 } 211 #endif 212 213 s->type=0; 214 215 s->state=SSL_ST_BEFORE|((s->server)?SSL_ST_ACCEPT:SSL_ST_CONNECT); 216 217 s->version=s->method->version; 218 s->client_version=s->version; 219 s->rwstate=SSL_NOTHING; 220 s->rstate=SSL_ST_READ_HEADER; 221 #if 0 222 s->read_ahead=s->ctx->read_ahead; 223 #endif 224 225 if (s->init_buf != NULL) 226 { 227 BUF_MEM_free(s->init_buf); 228 s->init_buf=NULL; 229 } 230 231 ssl_clear_cipher_ctx(s); 232 ssl_clear_hash_ctx(&s->read_hash); 233 ssl_clear_hash_ctx(&s->write_hash); 234 235 s->first_packet=0; 236 237 #if 1 238 /* Check to see if we were changed into a different method, if 239 * so, revert back if we are not doing session-id reuse. */ 240 if (!s->in_handshake && (s->session == NULL) && (s->method != s->ctx->method)) 241 { 242 s->method->ssl_free(s); 243 s->method=s->ctx->method; 244 if (!s->method->ssl_new(s)) 245 return(0); 246 } 247 else 248 #endif 249 s->method->ssl_clear(s); 250 return(1); 251 } 252 253 /** Used to change an SSL_CTXs default SSL method type */ 254 int SSL_CTX_set_ssl_version(SSL_CTX *ctx,const SSL_METHOD *meth) 255 { 256 STACK_OF(SSL_CIPHER) *sk; 257 258 ctx->method=meth; 259 260 sk=ssl_create_cipher_list( 261 ctx->method, &ctx->cipher_list, &ctx->cipher_list_by_id, 262 meth->version == SSL2_VERSION ? 263 "SSLv2" : 264 SSL_DEFAULT_CIPHER_LIST, 265 ctx->cert); 266 267 if ((sk == NULL) || (sk_SSL_CIPHER_num(sk) <= 0)) 268 { 269 OPENSSL_PUT_ERROR(SSL, SSL_CTX_set_ssl_version, SSL_R_SSL_LIBRARY_HAS_NO_CIPHERS); 270 return(0); 271 } 272 return(1); 273 } 274 275 SSL *SSL_new(SSL_CTX *ctx) 276 { 277 SSL *s; 278 279 if (ctx == NULL) 280 { 281 OPENSSL_PUT_ERROR(SSL, SSL_new, SSL_R_NULL_SSL_CTX); 282 return(NULL); 283 } 284 if (ctx->method == NULL) 285 { 286 OPENSSL_PUT_ERROR(SSL, SSL_new, SSL_R_SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION); 287 return(NULL); 288 } 289 290 s=(SSL *)OPENSSL_malloc(sizeof(SSL)); 291 if (s == NULL) goto err; 292 memset(s,0,sizeof(SSL)); 293 294 s->options=ctx->options; 295 s->mode=ctx->mode; 296 s->max_cert_list=ctx->max_cert_list; 297 298 if (ctx->cert != NULL) 299 { 300 /* Earlier library versions used to copy the pointer to 301 * the CERT, not its contents; only when setting new 302 * parameters for the per-SSL copy, ssl_cert_new would be 303 * called (and the direct reference to the per-SSL_CTX 304 * settings would be lost, but those still were indirectly 305 * accessed for various purposes, and for that reason they 306 * used to be known as s->ctx->default_cert). 307 * Now we don't look at the SSL_CTX's CERT after having 308 * duplicated it once. */ 309 310 s->cert = ssl_cert_dup(ctx->cert); 311 if (s->cert == NULL) 312 goto err; 313 } 314 else 315 s->cert=NULL; /* Cannot really happen (see SSL_CTX_new) */ 316 317 s->read_ahead=ctx->read_ahead; 318 s->msg_callback=ctx->msg_callback; 319 s->msg_callback_arg=ctx->msg_callback_arg; 320 s->verify_mode=ctx->verify_mode; 321 #if 0 322 s->verify_depth=ctx->verify_depth; 323 #endif 324 s->sid_ctx_length=ctx->sid_ctx_length; 325 assert(s->sid_ctx_length <= sizeof s->sid_ctx); 326 memcpy(&s->sid_ctx,&ctx->sid_ctx,sizeof(s->sid_ctx)); 327 s->verify_callback=ctx->default_verify_callback; 328 s->generate_session_id=ctx->generate_session_id; 329 330 s->param = X509_VERIFY_PARAM_new(); 331 if (!s->param) 332 goto err; 333 X509_VERIFY_PARAM_inherit(s->param, ctx->param); 334 #if 0 335 s->purpose = ctx->purpose; 336 s->trust = ctx->trust; 337 #endif 338 s->quiet_shutdown=ctx->quiet_shutdown; 339 s->max_send_fragment = ctx->max_send_fragment; 340 341 CRYPTO_add(&ctx->references,1,CRYPTO_LOCK_SSL_CTX); 342 s->ctx=ctx; 343 s->tlsext_debug_cb = 0; 344 s->tlsext_debug_arg = NULL; 345 s->tlsext_ticket_expected = 0; 346 CRYPTO_add(&ctx->references,1,CRYPTO_LOCK_SSL_CTX); 347 s->initial_ctx=ctx; 348 if (ctx->tlsext_ecpointformatlist) 349 { 350 s->tlsext_ecpointformatlist = 351 BUF_memdup(ctx->tlsext_ecpointformatlist, 352 ctx->tlsext_ecpointformatlist_length); 353 if (!s->tlsext_ecpointformatlist) 354 goto err; 355 s->tlsext_ecpointformatlist_length = 356 ctx->tlsext_ecpointformatlist_length; 357 } 358 if (ctx->tlsext_ellipticcurvelist) 359 { 360 s->tlsext_ellipticcurvelist = 361 BUF_memdup(ctx->tlsext_ellipticcurvelist, 362 ctx->tlsext_ellipticcurvelist_length * 2); 363 if (!s->tlsext_ellipticcurvelist) 364 goto err; 365 s->tlsext_ellipticcurvelist_length = 366 ctx->tlsext_ellipticcurvelist_length; 367 } 368 s->next_proto_negotiated = NULL; 369 370 if (s->ctx->alpn_client_proto_list) 371 { 372 s->alpn_client_proto_list = BUF_memdup( 373 s->ctx->alpn_client_proto_list, 374 s->ctx->alpn_client_proto_list_len); 375 if (s->alpn_client_proto_list == NULL) 376 goto err; 377 s->alpn_client_proto_list_len = s->ctx->alpn_client_proto_list_len; 378 } 379 380 s->verify_result=X509_V_OK; 381 382 s->method=ctx->method; 383 384 if (!s->method->ssl_new(s)) 385 goto err; 386 387 s->references=1; 388 s->server=(ctx->method->ssl_accept == ssl_undefined_function)?0:1; 389 390 SSL_clear(s); 391 392 CRYPTO_new_ex_data(CRYPTO_EX_INDEX_SSL, s, &s->ex_data); 393 394 s->psk_identity_hint = NULL; 395 if (ctx->psk_identity_hint) 396 { 397 s->psk_identity_hint = BUF_strdup(ctx->psk_identity_hint); 398 if (s->psk_identity_hint == NULL) 399 goto err; 400 } 401 s->psk_client_callback=ctx->psk_client_callback; 402 s->psk_server_callback=ctx->psk_server_callback; 403 404 if (!s->server) 405 { 406 s->signed_cert_timestamps_enabled = s->ctx->signed_cert_timestamps_enabled; 407 s->ocsp_stapling_enabled = s->ctx->ocsp_stapling_enabled; 408 } 409 410 return(s); 411 err: 412 if (s != NULL) 413 { 414 if (s->cert != NULL) 415 ssl_cert_free(s->cert); 416 if (s->ctx != NULL) 417 SSL_CTX_free(s->ctx); /* decrement reference count */ 418 OPENSSL_free(s); 419 } 420 OPENSSL_PUT_ERROR(SSL, SSL_new, ERR_R_MALLOC_FAILURE); 421 return(NULL); 422 } 423 424 int SSL_CTX_set_session_id_context(SSL_CTX *ctx,const unsigned char *sid_ctx, 425 unsigned int sid_ctx_len) 426 { 427 if(sid_ctx_len > sizeof ctx->sid_ctx) 428 { 429 OPENSSL_PUT_ERROR(SSL, SSL_CTX_set_session_id_context, SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG); 430 return 0; 431 } 432 ctx->sid_ctx_length=sid_ctx_len; 433 memcpy(ctx->sid_ctx,sid_ctx,sid_ctx_len); 434 435 return 1; 436 } 437 438 int SSL_set_session_id_context(SSL *ssl,const unsigned char *sid_ctx, 439 unsigned int sid_ctx_len) 440 { 441 if(sid_ctx_len > SSL_MAX_SID_CTX_LENGTH) 442 { 443 OPENSSL_PUT_ERROR(SSL, SSL_set_session_id_context, SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG); 444 return 0; 445 } 446 ssl->sid_ctx_length=sid_ctx_len; 447 memcpy(ssl->sid_ctx,sid_ctx,sid_ctx_len); 448 449 return 1; 450 } 451 452 int SSL_CTX_set_generate_session_id(SSL_CTX *ctx, GEN_SESSION_CB cb) 453 { 454 CRYPTO_w_lock(CRYPTO_LOCK_SSL_CTX); 455 ctx->generate_session_id = cb; 456 CRYPTO_w_unlock(CRYPTO_LOCK_SSL_CTX); 457 return 1; 458 } 459 460 int SSL_set_generate_session_id(SSL *ssl, GEN_SESSION_CB cb) 461 { 462 CRYPTO_w_lock(CRYPTO_LOCK_SSL); 463 ssl->generate_session_id = cb; 464 CRYPTO_w_unlock(CRYPTO_LOCK_SSL); 465 return 1; 466 } 467 468 int SSL_has_matching_session_id(const SSL *ssl, const unsigned char *id, 469 unsigned int id_len) 470 { 471 /* A quick examination of SSL_SESSION_hash and SSL_SESSION_cmp shows how 472 * we can "construct" a session to give us the desired check - ie. to 473 * find if there's a session in the hash table that would conflict with 474 * any new session built out of this id/id_len and the ssl_version in 475 * use by this SSL. */ 476 SSL_SESSION r, *p; 477 478 if(id_len > sizeof r.session_id) 479 return 0; 480 481 r.ssl_version = ssl->version; 482 r.session_id_length = id_len; 483 memcpy(r.session_id, id, id_len); 484 /* NB: SSLv2 always uses a fixed 16-byte session ID, so even if a 485 * callback is calling us to check the uniqueness of a shorter ID, it 486 * must be compared as a padded-out ID because that is what it will be 487 * converted to when the callback has finished choosing it. */ 488 if((r.ssl_version == SSL2_VERSION) && 489 (id_len < SSL2_SSL_SESSION_ID_LENGTH)) 490 { 491 memset(r.session_id + id_len, 0, 492 SSL2_SSL_SESSION_ID_LENGTH - id_len); 493 r.session_id_length = SSL2_SSL_SESSION_ID_LENGTH; 494 } 495 496 CRYPTO_r_lock(CRYPTO_LOCK_SSL_CTX); 497 p = lh_SSL_SESSION_retrieve(ssl->ctx->sessions, &r); 498 CRYPTO_r_unlock(CRYPTO_LOCK_SSL_CTX); 499 return (p != NULL); 500 } 501 502 int SSL_CTX_set_purpose(SSL_CTX *s, int purpose) 503 { 504 return X509_VERIFY_PARAM_set_purpose(s->param, purpose); 505 } 506 507 int SSL_set_purpose(SSL *s, int purpose) 508 { 509 return X509_VERIFY_PARAM_set_purpose(s->param, purpose); 510 } 511 512 int SSL_CTX_set_trust(SSL_CTX *s, int trust) 513 { 514 return X509_VERIFY_PARAM_set_trust(s->param, trust); 515 } 516 517 int SSL_set_trust(SSL *s, int trust) 518 { 519 return X509_VERIFY_PARAM_set_trust(s->param, trust); 520 } 521 522 int SSL_CTX_set1_param(SSL_CTX *ctx, X509_VERIFY_PARAM *vpm) 523 { 524 return X509_VERIFY_PARAM_set1(ctx->param, vpm); 525 } 526 527 int SSL_set1_param(SSL *ssl, X509_VERIFY_PARAM *vpm) 528 { 529 return X509_VERIFY_PARAM_set1(ssl->param, vpm); 530 } 531 532 void ssl_cipher_preference_list_free( 533 struct ssl_cipher_preference_list_st *cipher_list) 534 { 535 sk_SSL_CIPHER_free(cipher_list->ciphers); 536 OPENSSL_free(cipher_list->in_group_flags); 537 OPENSSL_free(cipher_list); 538 } 539 540 struct ssl_cipher_preference_list_st* 541 ssl_cipher_preference_list_dup( 542 struct ssl_cipher_preference_list_st *cipher_list) 543 { 544 struct ssl_cipher_preference_list_st* ret = NULL; 545 size_t n = sk_SSL_CIPHER_num(cipher_list->ciphers); 546 547 ret = OPENSSL_malloc(sizeof(struct ssl_cipher_preference_list_st)); 548 if (!ret) 549 goto err; 550 ret->ciphers = NULL; 551 ret->in_group_flags = NULL; 552 ret->ciphers = sk_SSL_CIPHER_dup(cipher_list->ciphers); 553 if (!ret->ciphers) 554 goto err; 555 ret->in_group_flags = BUF_memdup(cipher_list->in_group_flags, n); 556 if (!ret->in_group_flags) 557 goto err; 558 return ret; 559 560 err: 561 if (ret && ret->ciphers) 562 sk_SSL_CIPHER_free(ret->ciphers); 563 if (ret) 564 OPENSSL_free(ret); 565 return NULL; 566 } 567 568 struct ssl_cipher_preference_list_st* 569 ssl_cipher_preference_list_from_ciphers(STACK_OF(SSL_CIPHER) *ciphers) 570 { 571 struct ssl_cipher_preference_list_st* ret = NULL; 572 size_t n = sk_SSL_CIPHER_num(ciphers); 573 574 ret = OPENSSL_malloc(sizeof(struct ssl_cipher_preference_list_st)); 575 if (!ret) 576 goto err; 577 ret->ciphers = NULL; 578 ret->in_group_flags = NULL; 579 ret->ciphers = sk_SSL_CIPHER_dup(ciphers); 580 if (!ret->ciphers) 581 goto err; 582 ret->in_group_flags = OPENSSL_malloc(n); 583 if (!ret->in_group_flags) 584 goto err; 585 memset(ret->in_group_flags, 0, n); 586 return ret; 587 588 err: 589 if (ret && ret->ciphers) 590 sk_SSL_CIPHER_free(ret->ciphers); 591 if (ret) 592 OPENSSL_free(ret); 593 return NULL; 594 } 595 596 X509_VERIFY_PARAM *SSL_CTX_get0_param(SSL_CTX *ctx) 597 { 598 return ctx->param; 599 } 600 601 X509_VERIFY_PARAM *SSL_get0_param(SSL *ssl) 602 { 603 return ssl->param; 604 } 605 606 void SSL_certs_clear(SSL *s) 607 { 608 ssl_cert_clear_certs(s->cert); 609 } 610 611 void SSL_free(SSL *s) 612 { 613 int i; 614 615 if(s == NULL) 616 return; 617 618 i=CRYPTO_add(&s->references,-1,CRYPTO_LOCK_SSL); 619 #ifdef REF_PRINT 620 REF_PRINT("SSL",s); 621 #endif 622 if (i > 0) return; 623 #ifdef REF_CHECK 624 if (i < 0) 625 { 626 fprintf(stderr,"SSL_free, bad reference count\n"); 627 abort(); /* ok */ 628 } 629 #endif 630 631 if (s->param) 632 X509_VERIFY_PARAM_free(s->param); 633 634 CRYPTO_free_ex_data(CRYPTO_EX_INDEX_SSL, s, &s->ex_data); 635 636 if (s->bbio != NULL) 637 { 638 /* If the buffering BIO is in place, pop it off */ 639 if (s->bbio == s->wbio) 640 { 641 s->wbio=BIO_pop(s->wbio); 642 } 643 BIO_free(s->bbio); 644 s->bbio=NULL; 645 } 646 if (s->rbio != NULL) 647 BIO_free_all(s->rbio); 648 if ((s->wbio != NULL) && (s->wbio != s->rbio)) 649 BIO_free_all(s->wbio); 650 651 if (s->init_buf != NULL) BUF_MEM_free(s->init_buf); 652 653 /* add extra stuff */ 654 if (s->cipher_list != NULL) 655 ssl_cipher_preference_list_free(s->cipher_list); 656 if (s->cipher_list_by_id != NULL) sk_SSL_CIPHER_free(s->cipher_list_by_id); 657 658 /* Make the next call work :-) */ 659 if (s->session != NULL) 660 { 661 ssl_clear_bad_session(s); 662 SSL_SESSION_free(s->session); 663 } 664 665 ssl_clear_cipher_ctx(s); 666 ssl_clear_hash_ctx(&s->read_hash); 667 ssl_clear_hash_ctx(&s->write_hash); 668 669 if (s->cert != NULL) ssl_cert_free(s->cert); 670 /* Free up if allocated */ 671 672 if (s->tlsext_hostname) 673 OPENSSL_free(s->tlsext_hostname); 674 if (s->initial_ctx) SSL_CTX_free(s->initial_ctx); 675 if (s->tlsext_ecpointformatlist) OPENSSL_free(s->tlsext_ecpointformatlist); 676 if (s->tlsext_ellipticcurvelist) OPENSSL_free(s->tlsext_ellipticcurvelist); 677 if (s->alpn_client_proto_list) 678 OPENSSL_free(s->alpn_client_proto_list); 679 if (s->tlsext_channel_id_private) 680 EVP_PKEY_free(s->tlsext_channel_id_private); 681 682 if (s->psk_identity_hint) 683 OPENSSL_free(s->psk_identity_hint); 684 685 if (s->client_CA != NULL) 686 sk_X509_NAME_pop_free(s->client_CA,X509_NAME_free); 687 688 if (s->method != NULL) s->method->ssl_free(s); 689 690 if (s->ctx) SSL_CTX_free(s->ctx); 691 692 if (s->next_proto_negotiated) 693 OPENSSL_free(s->next_proto_negotiated); 694 695 if (s->srtp_profiles) 696 sk_SRTP_PROTECTION_PROFILE_free(s->srtp_profiles); 697 698 if (s->tlsext_session_ticket) 699 { 700 OPENSSL_free(s->tlsext_session_ticket); 701 } 702 703 OPENSSL_free(s); 704 } 705 706 void SSL_set_bio(SSL *s,BIO *rbio,BIO *wbio) 707 { 708 /* If the output buffering BIO is still in place, remove it 709 */ 710 if (s->bbio != NULL) 711 { 712 if (s->wbio == s->bbio) 713 { 714 s->wbio=s->wbio->next_bio; 715 s->bbio->next_bio=NULL; 716 } 717 } 718 if ((s->rbio != NULL) && (s->rbio != rbio)) 719 BIO_free_all(s->rbio); 720 if ((s->wbio != NULL) && (s->wbio != wbio) && (s->rbio != s->wbio)) 721 BIO_free_all(s->wbio); 722 s->rbio=rbio; 723 s->wbio=wbio; 724 } 725 726 BIO *SSL_get_rbio(const SSL *s) 727 { return(s->rbio); } 728 729 BIO *SSL_get_wbio(const SSL *s) 730 { return(s->wbio); } 731 732 int SSL_get_fd(const SSL *s) 733 { 734 return(SSL_get_rfd(s)); 735 } 736 737 int SSL_get_rfd(const SSL *s) 738 { 739 int ret= -1; 740 BIO *b,*r; 741 742 b=SSL_get_rbio(s); 743 r=BIO_find_type(b,BIO_TYPE_DESCRIPTOR); 744 if (r != NULL) 745 BIO_get_fd(r,&ret); 746 return(ret); 747 } 748 749 int SSL_get_wfd(const SSL *s) 750 { 751 int ret= -1; 752 BIO *b,*r; 753 754 b=SSL_get_wbio(s); 755 r=BIO_find_type(b,BIO_TYPE_DESCRIPTOR); 756 if (r != NULL) 757 BIO_get_fd(r,&ret); 758 return(ret); 759 } 760 761 #ifndef OPENSSL_NO_SOCK 762 int SSL_set_fd(SSL *s,int fd) 763 { 764 int ret=0; 765 BIO *bio=NULL; 766 767 bio=BIO_new(BIO_s_fd()); 768 769 if (bio == NULL) 770 { 771 OPENSSL_PUT_ERROR(SSL, SSL_set_fd, ERR_R_BUF_LIB); 772 goto err; 773 } 774 BIO_set_fd(bio,fd,BIO_NOCLOSE); 775 SSL_set_bio(s,bio,bio); 776 ret=1; 777 err: 778 return(ret); 779 } 780 781 int SSL_set_wfd(SSL *s,int fd) 782 { 783 int ret=0; 784 BIO *bio=NULL; 785 786 if ((s->rbio == NULL) || (BIO_method_type(s->rbio) != BIO_TYPE_FD) 787 || ((int)BIO_get_fd(s->rbio,NULL) != fd)) 788 { 789 bio=BIO_new(BIO_s_fd()); 790 791 if (bio == NULL) 792 { 793 OPENSSL_PUT_ERROR(SSL, SSL_set_wfd, ERR_R_BUF_LIB); 794 goto err; 795 } 796 BIO_set_fd(bio,fd,BIO_NOCLOSE); 797 SSL_set_bio(s,SSL_get_rbio(s),bio); 798 } 799 else 800 SSL_set_bio(s,SSL_get_rbio(s),SSL_get_rbio(s)); 801 ret=1; 802 err: 803 return(ret); 804 } 805 806 int SSL_set_rfd(SSL *s,int fd) 807 { 808 int ret=0; 809 BIO *bio=NULL; 810 811 if ((s->wbio == NULL) || (BIO_method_type(s->wbio) != BIO_TYPE_FD) 812 || ((int)BIO_get_fd(s->wbio,NULL) != fd)) 813 { 814 bio=BIO_new(BIO_s_fd()); 815 816 if (bio == NULL) 817 { 818 OPENSSL_PUT_ERROR(SSL, SSL_set_rfd, ERR_R_BUF_LIB); 819 goto err; 820 } 821 BIO_set_fd(bio,fd,BIO_NOCLOSE); 822 SSL_set_bio(s,bio,SSL_get_wbio(s)); 823 } 824 else 825 SSL_set_bio(s,SSL_get_wbio(s),SSL_get_wbio(s)); 826 ret=1; 827 err: 828 return(ret); 829 } 830 #endif 831 832 833 /* return length of latest Finished message we sent, copy to 'buf' */ 834 size_t SSL_get_finished(const SSL *s, void *buf, size_t count) 835 { 836 size_t ret = 0; 837 838 if (s->s3 != NULL) 839 { 840 ret = s->s3->tmp.finish_md_len; 841 if (count > ret) 842 count = ret; 843 memcpy(buf, s->s3->tmp.finish_md, count); 844 } 845 return ret; 846 } 847 848 /* return length of latest Finished message we expected, copy to 'buf' */ 849 size_t SSL_get_peer_finished(const SSL *s, void *buf, size_t count) 850 { 851 size_t ret = 0; 852 853 if (s->s3 != NULL) 854 { 855 ret = s->s3->tmp.peer_finish_md_len; 856 if (count > ret) 857 count = ret; 858 memcpy(buf, s->s3->tmp.peer_finish_md, count); 859 } 860 return ret; 861 } 862 863 864 int SSL_get_verify_mode(const SSL *s) 865 { 866 return(s->verify_mode); 867 } 868 869 int SSL_get_verify_depth(const SSL *s) 870 { 871 return X509_VERIFY_PARAM_get_depth(s->param); 872 } 873 874 int (*SSL_get_verify_callback(const SSL *s))(int,X509_STORE_CTX *) 875 { 876 return(s->verify_callback); 877 } 878 879 int SSL_CTX_get_verify_mode(const SSL_CTX *ctx) 880 { 881 return(ctx->verify_mode); 882 } 883 884 int SSL_CTX_get_verify_depth(const SSL_CTX *ctx) 885 { 886 return X509_VERIFY_PARAM_get_depth(ctx->param); 887 } 888 889 int (*SSL_CTX_get_verify_callback(const SSL_CTX *ctx))(int,X509_STORE_CTX *) 890 { 891 return(ctx->default_verify_callback); 892 } 893 894 void SSL_set_verify(SSL *s,int mode, 895 int (*callback)(int ok,X509_STORE_CTX *ctx)) 896 { 897 s->verify_mode=mode; 898 if (callback != NULL) 899 s->verify_callback=callback; 900 } 901 902 void SSL_set_verify_depth(SSL *s,int depth) 903 { 904 X509_VERIFY_PARAM_set_depth(s->param, depth); 905 } 906 907 void SSL_set_read_ahead(SSL *s,int yes) 908 { 909 s->read_ahead=yes; 910 } 911 912 int SSL_get_read_ahead(const SSL *s) 913 { 914 return(s->read_ahead); 915 } 916 917 int SSL_pending(const SSL *s) 918 { 919 /* SSL_pending cannot work properly if read-ahead is enabled 920 * (SSL_[CTX_]ctrl(..., SSL_CTRL_SET_READ_AHEAD, 1, NULL)), 921 * and it is impossible to fix since SSL_pending cannot report 922 * errors that may be observed while scanning the new data. 923 * (Note that SSL_pending() is often used as a boolean value, 924 * so we'd better not return -1.) 925 */ 926 return(s->method->ssl_pending(s)); 927 } 928 929 X509 *SSL_get_peer_certificate(const SSL *s) 930 { 931 X509 *r; 932 933 if ((s == NULL) || (s->session == NULL)) 934 r=NULL; 935 else 936 r=s->session->peer; 937 938 if (r == NULL) 939 return NULL; 940 941 return X509_up_ref(r); 942 } 943 944 STACK_OF(X509) *SSL_get_peer_cert_chain(const SSL *s) 945 { 946 STACK_OF(X509) *r; 947 948 if ((s == NULL) || (s->session == NULL) || (s->session->sess_cert == NULL)) 949 r=NULL; 950 else 951 r=s->session->sess_cert->cert_chain; 952 953 /* If we are a client, cert_chain includes the peer's own 954 * certificate; if we are a server, it does not. */ 955 956 return(r); 957 } 958 959 /* Fix this so it checks all the valid key/cert options */ 960 int SSL_CTX_check_private_key(const SSL_CTX *ctx) 961 { 962 if ( (ctx == NULL) || 963 (ctx->cert == NULL) || 964 (ctx->cert->key->x509 == NULL)) 965 { 966 OPENSSL_PUT_ERROR(SSL, SSL_CTX_check_private_key, SSL_R_NO_CERTIFICATE_ASSIGNED); 967 return(0); 968 } 969 if (ctx->cert->key->privatekey == NULL) 970 { 971 OPENSSL_PUT_ERROR(SSL, SSL_CTX_check_private_key, SSL_R_NO_PRIVATE_KEY_ASSIGNED); 972 return(0); 973 } 974 return(X509_check_private_key(ctx->cert->key->x509, ctx->cert->key->privatekey)); 975 } 976 977 /* Fix this function so that it takes an optional type parameter */ 978 int SSL_check_private_key(const SSL *ssl) 979 { 980 if (ssl == NULL) 981 { 982 OPENSSL_PUT_ERROR(SSL, SSL_check_private_key, ERR_R_PASSED_NULL_PARAMETER); 983 return(0); 984 } 985 if (ssl->cert == NULL) 986 { 987 OPENSSL_PUT_ERROR(SSL, SSL_check_private_key, SSL_R_NO_CERTIFICATE_ASSIGNED); 988 return 0; 989 } 990 if (ssl->cert->key->x509 == NULL) 991 { 992 OPENSSL_PUT_ERROR(SSL, SSL_check_private_key, SSL_R_NO_CERTIFICATE_ASSIGNED); 993 return(0); 994 } 995 if (ssl->cert->key->privatekey == NULL) 996 { 997 OPENSSL_PUT_ERROR(SSL, SSL_check_private_key, SSL_R_NO_PRIVATE_KEY_ASSIGNED); 998 return(0); 999 } 1000 return(X509_check_private_key(ssl->cert->key->x509, 1001 ssl->cert->key->privatekey)); 1002 } 1003 1004 int SSL_accept(SSL *s) 1005 { 1006 if (s->handshake_func == 0) 1007 /* Not properly initialized yet */ 1008 SSL_set_accept_state(s); 1009 1010 return(s->method->ssl_accept(s)); 1011 } 1012 1013 int SSL_connect(SSL *s) 1014 { 1015 if (s->handshake_func == 0) 1016 /* Not properly initialized yet */ 1017 SSL_set_connect_state(s); 1018 1019 return(s->method->ssl_connect(s)); 1020 } 1021 1022 long SSL_get_default_timeout(const SSL *s) 1023 { 1024 return SSL_DEFAULT_SESSION_TIMEOUT; 1025 } 1026 1027 int SSL_read(SSL *s,void *buf,int num) 1028 { 1029 if (s->handshake_func == 0) 1030 { 1031 OPENSSL_PUT_ERROR(SSL, SSL_read, SSL_R_UNINITIALIZED); 1032 return -1; 1033 } 1034 1035 if (s->shutdown & SSL_RECEIVED_SHUTDOWN) 1036 { 1037 s->rwstate=SSL_NOTHING; 1038 return(0); 1039 } 1040 return(s->method->ssl_read(s,buf,num)); 1041 } 1042 1043 int SSL_peek(SSL *s,void *buf,int num) 1044 { 1045 if (s->handshake_func == 0) 1046 { 1047 OPENSSL_PUT_ERROR(SSL, SSL_peek, SSL_R_UNINITIALIZED); 1048 return -1; 1049 } 1050 1051 if (s->shutdown & SSL_RECEIVED_SHUTDOWN) 1052 { 1053 return(0); 1054 } 1055 return(s->method->ssl_peek(s,buf,num)); 1056 } 1057 1058 int SSL_write(SSL *s,const void *buf,int num) 1059 { 1060 if (s->handshake_func == 0) 1061 { 1062 OPENSSL_PUT_ERROR(SSL, SSL_write, SSL_R_UNINITIALIZED); 1063 return -1; 1064 } 1065 1066 if (s->shutdown & SSL_SENT_SHUTDOWN) 1067 { 1068 s->rwstate=SSL_NOTHING; 1069 OPENSSL_PUT_ERROR(SSL, SSL_write, SSL_R_PROTOCOL_IS_SHUTDOWN); 1070 return(-1); 1071 } 1072 return(s->method->ssl_write(s,buf,num)); 1073 } 1074 1075 int SSL_shutdown(SSL *s) 1076 { 1077 /* Note that this function behaves differently from what one might 1078 * expect. Return values are 0 for no success (yet), 1079 * 1 for success; but calling it once is usually not enough, 1080 * even if blocking I/O is used (see ssl3_shutdown). 1081 */ 1082 1083 if (s->handshake_func == 0) 1084 { 1085 OPENSSL_PUT_ERROR(SSL, SSL_shutdown, SSL_R_UNINITIALIZED); 1086 return -1; 1087 } 1088 1089 if (!SSL_in_init(s)) 1090 return(s->method->ssl_shutdown(s)); 1091 else 1092 return(1); 1093 } 1094 1095 int SSL_renegotiate(SSL *s) 1096 { 1097 if (s->renegotiate == 0) 1098 s->renegotiate=1; 1099 1100 s->new_session=1; 1101 1102 return(s->method->ssl_renegotiate(s)); 1103 } 1104 1105 int SSL_renegotiate_abbreviated(SSL *s) 1106 { 1107 if (s->renegotiate == 0) 1108 s->renegotiate=1; 1109 1110 s->new_session=0; 1111 1112 return(s->method->ssl_renegotiate(s)); 1113 } 1114 1115 int SSL_renegotiate_pending(SSL *s) 1116 { 1117 /* becomes true when negotiation is requested; 1118 * false again once a handshake has finished */ 1119 return (s->renegotiate != 0); 1120 } 1121 1122 long SSL_ctrl(SSL *s,int cmd,long larg,void *parg) 1123 { 1124 long l; 1125 1126 switch (cmd) 1127 { 1128 case SSL_CTRL_GET_READ_AHEAD: 1129 return(s->read_ahead); 1130 case SSL_CTRL_SET_READ_AHEAD: 1131 l=s->read_ahead; 1132 s->read_ahead=larg; 1133 return(l); 1134 1135 case SSL_CTRL_SET_MSG_CALLBACK_ARG: 1136 s->msg_callback_arg = parg; 1137 return 1; 1138 1139 case SSL_CTRL_OPTIONS: 1140 return(s->options|=larg); 1141 case SSL_CTRL_CLEAR_OPTIONS: 1142 return(s->options&=~larg); 1143 case SSL_CTRL_MODE: 1144 return(s->mode|=larg); 1145 case SSL_CTRL_CLEAR_MODE: 1146 return(s->mode &=~larg); 1147 case SSL_CTRL_GET_MAX_CERT_LIST: 1148 return(s->max_cert_list); 1149 case SSL_CTRL_SET_MAX_CERT_LIST: 1150 l=s->max_cert_list; 1151 s->max_cert_list=larg; 1152 return(l); 1153 case SSL_CTRL_SET_MTU: 1154 if (larg < (long)dtls1_min_mtu()) 1155 return 0; 1156 if (SSL_IS_DTLS(s)) 1157 { 1158 s->d1->mtu = larg; 1159 return larg; 1160 } 1161 return 0; 1162 case SSL_CTRL_SET_MAX_SEND_FRAGMENT: 1163 if (larg < 512 || larg > SSL3_RT_MAX_PLAIN_LENGTH) 1164 return 0; 1165 s->max_send_fragment = larg; 1166 return 1; 1167 case SSL_CTRL_GET_RI_SUPPORT: 1168 if (s->s3) 1169 return s->s3->send_connection_binding; 1170 else return 0; 1171 case SSL_CTRL_CERT_FLAGS: 1172 return(s->cert->cert_flags|=larg); 1173 case SSL_CTRL_CLEAR_CERT_FLAGS: 1174 return(s->cert->cert_flags &=~larg); 1175 1176 case SSL_CTRL_GET_RAW_CIPHERLIST: 1177 if (parg) 1178 { 1179 if (s->cert->ciphers_raw == NULL) 1180 return 0; 1181 *(unsigned char **)parg = s->cert->ciphers_raw; 1182 return (int)s->cert->ciphers_rawlen; 1183 } 1184 else 1185 { 1186 /* Passing a NULL |parg| returns the size of a single 1187 * cipher suite value. */ 1188 return 2; 1189 } 1190 default: 1191 return(s->method->ssl_ctrl(s,cmd,larg,parg)); 1192 } 1193 } 1194 1195 long SSL_callback_ctrl(SSL *s, int cmd, void (*fp)(void)) 1196 { 1197 switch(cmd) 1198 { 1199 case SSL_CTRL_SET_MSG_CALLBACK: 1200 s->msg_callback = (void (*)(int write_p, int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg))(fp); 1201 return 1; 1202 1203 default: 1204 return(s->method->ssl_callback_ctrl(s,cmd,fp)); 1205 } 1206 } 1207 1208 LHASH_OF(SSL_SESSION) *SSL_CTX_sessions(SSL_CTX *ctx) 1209 { 1210 return ctx->sessions; 1211 } 1212 1213 long SSL_CTX_ctrl(SSL_CTX *ctx,int cmd,long larg,void *parg) 1214 { 1215 long l; 1216 1217 switch (cmd) 1218 { 1219 case SSL_CTRL_GET_READ_AHEAD: 1220 return(ctx->read_ahead); 1221 case SSL_CTRL_SET_READ_AHEAD: 1222 l=ctx->read_ahead; 1223 ctx->read_ahead=larg; 1224 return(l); 1225 1226 case SSL_CTRL_SET_MSG_CALLBACK_ARG: 1227 ctx->msg_callback_arg = parg; 1228 return 1; 1229 1230 case SSL_CTRL_GET_MAX_CERT_LIST: 1231 return(ctx->max_cert_list); 1232 case SSL_CTRL_SET_MAX_CERT_LIST: 1233 l=ctx->max_cert_list; 1234 ctx->max_cert_list=larg; 1235 return(l); 1236 1237 case SSL_CTRL_SET_SESS_CACHE_SIZE: 1238 l=ctx->session_cache_size; 1239 ctx->session_cache_size=larg; 1240 return(l); 1241 case SSL_CTRL_GET_SESS_CACHE_SIZE: 1242 return(ctx->session_cache_size); 1243 case SSL_CTRL_SET_SESS_CACHE_MODE: 1244 l=ctx->session_cache_mode; 1245 ctx->session_cache_mode=larg; 1246 return(l); 1247 case SSL_CTRL_GET_SESS_CACHE_MODE: 1248 return(ctx->session_cache_mode); 1249 1250 case SSL_CTRL_SESS_NUMBER: 1251 return(lh_SSL_SESSION_num_items(ctx->sessions)); 1252 case SSL_CTRL_SESS_CONNECT: 1253 return(ctx->stats.sess_connect); 1254 case SSL_CTRL_SESS_CONNECT_GOOD: 1255 return(ctx->stats.sess_connect_good); 1256 case SSL_CTRL_SESS_CONNECT_RENEGOTIATE: 1257 return(ctx->stats.sess_connect_renegotiate); 1258 case SSL_CTRL_SESS_ACCEPT: 1259 return(ctx->stats.sess_accept); 1260 case SSL_CTRL_SESS_ACCEPT_GOOD: 1261 return(ctx->stats.sess_accept_good); 1262 case SSL_CTRL_SESS_ACCEPT_RENEGOTIATE: 1263 return(ctx->stats.sess_accept_renegotiate); 1264 case SSL_CTRL_SESS_HIT: 1265 return(ctx->stats.sess_hit); 1266 case SSL_CTRL_SESS_CB_HIT: 1267 return(ctx->stats.sess_cb_hit); 1268 case SSL_CTRL_SESS_MISSES: 1269 return(ctx->stats.sess_miss); 1270 case SSL_CTRL_SESS_TIMEOUTS: 1271 return(ctx->stats.sess_timeout); 1272 case SSL_CTRL_SESS_CACHE_FULL: 1273 return(ctx->stats.sess_cache_full); 1274 case SSL_CTRL_OPTIONS: 1275 return(ctx->options|=larg); 1276 case SSL_CTRL_CLEAR_OPTIONS: 1277 return(ctx->options&=~larg); 1278 case SSL_CTRL_MODE: 1279 return(ctx->mode|=larg); 1280 case SSL_CTRL_CLEAR_MODE: 1281 return(ctx->mode&=~larg); 1282 case SSL_CTRL_SET_MAX_SEND_FRAGMENT: 1283 if (larg < 512 || larg > SSL3_RT_MAX_PLAIN_LENGTH) 1284 return 0; 1285 ctx->max_send_fragment = larg; 1286 return 1; 1287 case SSL_CTRL_CERT_FLAGS: 1288 return(ctx->cert->cert_flags|=larg); 1289 case SSL_CTRL_CLEAR_CERT_FLAGS: 1290 return(ctx->cert->cert_flags &=~larg); 1291 default: 1292 return(ctx->method->ssl_ctx_ctrl(ctx,cmd,larg,parg)); 1293 } 1294 } 1295 1296 long SSL_CTX_callback_ctrl(SSL_CTX *ctx, int cmd, void (*fp)(void)) 1297 { 1298 switch(cmd) 1299 { 1300 case SSL_CTRL_SET_MSG_CALLBACK: 1301 ctx->msg_callback = (void (*)(int write_p, int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg))(fp); 1302 return 1; 1303 1304 default: 1305 return(ctx->method->ssl_ctx_callback_ctrl(ctx,cmd,fp)); 1306 } 1307 } 1308 1309 int ssl_cipher_id_cmp(const void *in_a, const void *in_b) 1310 { 1311 long l; 1312 const SSL_CIPHER *a = in_a; 1313 const SSL_CIPHER *b = in_b; 1314 const long a_id = a->id; 1315 const long b_id = b->id; 1316 1317 l = a_id - b_id; 1318 if (l == 0L) 1319 return(0); 1320 else 1321 return((l > 0)?1:-1); 1322 } 1323 1324 int ssl_cipher_ptr_id_cmp(const SSL_CIPHER **ap, const SSL_CIPHER **bp) 1325 { 1326 long l; 1327 const long a_id = (*ap)->id; 1328 const long b_id = (*bp)->id; 1329 1330 l = a_id - b_id; 1331 if (l == 0) 1332 return(0); 1333 else 1334 return((l > 0)?1:-1); 1335 } 1336 1337 /** return a STACK of the ciphers available for the SSL and in order of 1338 * preference */ 1339 STACK_OF(SSL_CIPHER) *SSL_get_ciphers(const SSL *s) 1340 { 1341 if (s == NULL) 1342 return NULL; 1343 1344 if (s->cipher_list != NULL) 1345 { 1346 return(s->cipher_list->ciphers); 1347 } 1348 1349 if (s->version >= TLS1_1_VERSION) 1350 { 1351 if (s->ctx != NULL && s->ctx->cipher_list_tls11 != NULL) 1352 return s->ctx->cipher_list_tls11->ciphers; 1353 } 1354 1355 if ((s->ctx != NULL) && 1356 (s->ctx->cipher_list != NULL)) 1357 { 1358 return(s->ctx->cipher_list->ciphers); 1359 } 1360 1361 return(NULL); 1362 } 1363 1364 /** return a STACK of the ciphers available for the SSL and in order of 1365 * algorithm id */ 1366 STACK_OF(SSL_CIPHER) *ssl_get_ciphers_by_id(SSL *s) 1367 { 1368 if (s != NULL) 1369 { 1370 if (s->cipher_list_by_id != NULL) 1371 { 1372 return(s->cipher_list_by_id); 1373 } 1374 else if ((s->ctx != NULL) && 1375 (s->ctx->cipher_list_by_id != NULL)) 1376 { 1377 return(s->ctx->cipher_list_by_id); 1378 } 1379 } 1380 return(NULL); 1381 } 1382 1383 /** The old interface to get the same thing as SSL_get_ciphers() */ 1384 const char *SSL_get_cipher_list(const SSL *s,int n) 1385 { 1386 const SSL_CIPHER *c; 1387 STACK_OF(SSL_CIPHER) *sk; 1388 1389 if (s == NULL) return(NULL); 1390 sk=SSL_get_ciphers(s); 1391 if ((sk == NULL) || (sk_SSL_CIPHER_num(sk) <= n)) 1392 return(NULL); 1393 c=sk_SSL_CIPHER_value(sk,n); 1394 if (c == NULL) return(NULL); 1395 return(c->name); 1396 } 1397 1398 /** specify the ciphers to be used by default by the SSL_CTX */ 1399 int SSL_CTX_set_cipher_list(SSL_CTX *ctx, const char *str) 1400 { 1401 STACK_OF(SSL_CIPHER) *sk; 1402 1403 sk=ssl_create_cipher_list(ctx->method,&ctx->cipher_list, 1404 &ctx->cipher_list_by_id,str, ctx->cert); 1405 /* ssl_create_cipher_list may return an empty stack if it 1406 * was unable to find a cipher matching the given rule string 1407 * (for example if the rule string specifies a cipher which 1408 * has been disabled). This is not an error as far as 1409 * ssl_create_cipher_list is concerned, and hence 1410 * ctx->cipher_list and ctx->cipher_list_by_id has been 1411 * updated. */ 1412 if (sk == NULL) 1413 return 0; 1414 else if (sk_SSL_CIPHER_num(sk) == 0) 1415 { 1416 OPENSSL_PUT_ERROR(SSL, SSL_CTX_set_cipher_list, SSL_R_NO_CIPHER_MATCH); 1417 return 0; 1418 } 1419 return 1; 1420 } 1421 1422 int SSL_CTX_set_cipher_list_tls11(SSL_CTX *ctx, const char *str) 1423 { 1424 STACK_OF(SSL_CIPHER) *sk; 1425 1426 sk = ssl_create_cipher_list(ctx->method, &ctx->cipher_list_tls11, NULL, str, ctx->cert); 1427 if (sk == NULL) 1428 return 0; 1429 else if (sk_SSL_CIPHER_num(sk) == 0) 1430 { 1431 OPENSSL_PUT_ERROR(SSL, SSL_CTX_set_cipher_list_tls11, SSL_R_NO_CIPHER_MATCH); 1432 return 0; 1433 } 1434 return 1; 1435 } 1436 1437 /** specify the ciphers to be used by the SSL */ 1438 int SSL_set_cipher_list(SSL *s,const char *str) 1439 { 1440 STACK_OF(SSL_CIPHER) *sk; 1441 1442 sk=ssl_create_cipher_list(s->ctx->method,&s->cipher_list, 1443 &s->cipher_list_by_id,str, s->cert); 1444 /* see comment in SSL_CTX_set_cipher_list */ 1445 if (sk == NULL) 1446 return 0; 1447 else if (sk_SSL_CIPHER_num(sk) == 0) 1448 { 1449 OPENSSL_PUT_ERROR(SSL, SSL_set_cipher_list, SSL_R_NO_CIPHER_MATCH); 1450 return 0; 1451 } 1452 return 1; 1453 } 1454 1455 /* works well for SSLv2, not so good for SSLv3 */ 1456 char *SSL_get_shared_ciphers(const SSL *s,char *buf,int len) 1457 { 1458 char *p; 1459 STACK_OF(SSL_CIPHER) *sk; 1460 const SSL_CIPHER *c; 1461 int i; 1462 1463 if ((s->session == NULL) || (s->session->ciphers == NULL) || 1464 (len < 2)) 1465 return(NULL); 1466 1467 p=buf; 1468 sk=s->session->ciphers; 1469 1470 if (sk_SSL_CIPHER_num(sk) == 0) 1471 return NULL; 1472 1473 for (i=0; i<sk_SSL_CIPHER_num(sk); i++) 1474 { 1475 int n; 1476 1477 c=sk_SSL_CIPHER_value(sk,i); 1478 n=strlen(c->name); 1479 if (n+1 > len) 1480 { 1481 if (p != buf) 1482 --p; 1483 *p='\0'; 1484 return buf; 1485 } 1486 strcpy(p,c->name); 1487 p+=n; 1488 *(p++)=':'; 1489 len-=n+1; 1490 } 1491 p[-1]='\0'; 1492 return(buf); 1493 } 1494 1495 int ssl_cipher_list_to_bytes(SSL *s,STACK_OF(SSL_CIPHER) *sk,unsigned char *p) 1496 { 1497 int i; 1498 const SSL_CIPHER *c; 1499 CERT *ct = s->cert; 1500 unsigned char *q; 1501 int no_scsv = s->renegotiate; 1502 /* Set disabled masks for this session */ 1503 ssl_set_client_disabled(s); 1504 1505 if (sk == NULL) return(0); 1506 q=p; 1507 1508 for (i=0; i<sk_SSL_CIPHER_num(sk); i++) 1509 { 1510 c=sk_SSL_CIPHER_value(sk,i); 1511 /* Skip disabled ciphers */ 1512 if (c->algorithm_ssl & ct->mask_ssl || 1513 c->algorithm_mkey & ct->mask_k || 1514 c->algorithm_auth & ct->mask_a) 1515 continue; 1516 #ifdef OPENSSL_SSL_DEBUG_BROKEN_PROTOCOL 1517 if (c->id == SSL3_CK_SCSV) 1518 { 1519 if (no_scsv) 1520 continue; 1521 else 1522 no_scsv = 1; 1523 } 1524 #endif 1525 s2n(ssl3_get_cipher_value(c), p); 1526 } 1527 /* If p == q, no ciphers and caller indicates an error. Otherwise 1528 * add SCSV if not renegotiating. 1529 */ 1530 if (p != q) 1531 { 1532 if (!no_scsv) 1533 { 1534 static const SSL_CIPHER scsv = 1535 { 1536 0, NULL, SSL3_CK_SCSV, 0, 0, 0, 0, 0, 0, 0, 0, 0 1537 }; 1538 s2n(ssl3_get_cipher_value(&scsv), p); 1539 #ifdef OPENSSL_RI_DEBUG 1540 fprintf(stderr, "SCSV sent by client\n"); 1541 #endif 1542 } 1543 if (s->fallback_scsv) 1544 { 1545 static const SSL_CIPHER fallback_scsv = 1546 { 1547 0, NULL, SSL3_CK_FALLBACK_SCSV, 0, 0, 0, 0, 0, 0, 0, 0, 0 1548 }; 1549 s2n(ssl3_get_cipher_value(&fallback_scsv), p); 1550 } 1551 } 1552 1553 return(p-q); 1554 } 1555 1556 STACK_OF(SSL_CIPHER) *ssl_bytes_to_cipher_list(SSL *s, const CBS *cbs, 1557 STACK_OF(SSL_CIPHER) **skp) 1558 { 1559 CBS cipher_suites = *cbs; 1560 const SSL_CIPHER *c; 1561 STACK_OF(SSL_CIPHER) *sk; 1562 1563 if (s->s3) 1564 s->s3->send_connection_binding = 0; 1565 1566 if (CBS_len(&cipher_suites) % 2 != 0) 1567 { 1568 OPENSSL_PUT_ERROR(SSL, ssl_bytes_to_cipher_list, SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST); 1569 return(NULL); 1570 } 1571 if ((skp == NULL) || (*skp == NULL)) 1572 sk=sk_SSL_CIPHER_new_null(); /* change perhaps later */ 1573 else 1574 { 1575 sk= *skp; 1576 sk_SSL_CIPHER_zero(sk); 1577 } 1578 1579 if (!CBS_stow(&cipher_suites, 1580 &s->cert->ciphers_raw, &s->cert->ciphers_rawlen)) 1581 { 1582 OPENSSL_PUT_ERROR(SSL, ssl_bytes_to_cipher_list, ERR_R_MALLOC_FAILURE); 1583 goto err; 1584 } 1585 1586 while (CBS_len(&cipher_suites) > 0) 1587 { 1588 uint16_t cipher_suite; 1589 1590 if (!CBS_get_u16(&cipher_suites, &cipher_suite)) 1591 { 1592 OPENSSL_PUT_ERROR(SSL, ssl_bytes_to_cipher_list, ERR_R_INTERNAL_ERROR); 1593 goto err; 1594 } 1595 1596 /* Check for SCSV */ 1597 if (s->s3 && cipher_suite == (SSL3_CK_SCSV & 0xffff)) 1598 { 1599 /* SCSV fatal if renegotiating */ 1600 if (s->renegotiate) 1601 { 1602 OPENSSL_PUT_ERROR(SSL, ssl_bytes_to_cipher_list, SSL_R_SCSV_RECEIVED_WHEN_RENEGOTIATING); 1603 ssl3_send_alert(s,SSL3_AL_FATAL,SSL_AD_HANDSHAKE_FAILURE); 1604 goto err; 1605 } 1606 s->s3->send_connection_binding = 1; 1607 #ifdef OPENSSL_RI_DEBUG 1608 fprintf(stderr, "SCSV received by server\n"); 1609 #endif 1610 continue; 1611 } 1612 1613 /* Check for FALLBACK_SCSV */ 1614 if (s->s3 && cipher_suite == (SSL3_CK_FALLBACK_SCSV & 0xffff) && 1615 s->version < ssl_get_max_version(s)) 1616 { 1617 OPENSSL_PUT_ERROR(SSL, ssl_bytes_to_cipher_list, SSL_R_INAPPROPRIATE_FALLBACK); 1618 ssl3_send_alert(s,SSL3_AL_FATAL,SSL3_AD_INAPPROPRIATE_FALLBACK); 1619 goto err; 1620 } 1621 1622 c = ssl3_get_cipher_by_value(cipher_suite); 1623 if (c != NULL) 1624 { 1625 if (!sk_SSL_CIPHER_push(sk,c)) 1626 { 1627 OPENSSL_PUT_ERROR(SSL, ssl_bytes_to_cipher_list, ERR_R_MALLOC_FAILURE); 1628 goto err; 1629 } 1630 } 1631 } 1632 1633 if (skp != NULL) 1634 *skp=sk; 1635 return(sk); 1636 err: 1637 if ((skp == NULL) || (*skp == NULL)) 1638 sk_SSL_CIPHER_free(sk); 1639 return(NULL); 1640 } 1641 1642 1643 /** return a servername extension value if provided in Client Hello, or NULL. 1644 * So far, only host_name types are defined (RFC 3546). 1645 */ 1646 1647 const char *SSL_get_servername(const SSL *s, const int type) 1648 { 1649 if (type != TLSEXT_NAMETYPE_host_name) 1650 return NULL; 1651 1652 return s->session && !s->tlsext_hostname ? 1653 s->session->tlsext_hostname : 1654 s->tlsext_hostname; 1655 } 1656 1657 int SSL_get_servername_type(const SSL *s) 1658 { 1659 if (s->session && (!s->tlsext_hostname ? s->session->tlsext_hostname : s->tlsext_hostname)) 1660 return TLSEXT_NAMETYPE_host_name; 1661 return -1; 1662 } 1663 1664 void SSL_CTX_enable_signed_cert_timestamps(SSL_CTX *ctx) 1665 { 1666 ctx->signed_cert_timestamps_enabled = 1; 1667 } 1668 1669 int SSL_enable_signed_cert_timestamps(SSL *ssl) 1670 { 1671 /* Currently not implemented server-side. */ 1672 if (ssl->server) 1673 return 0; 1674 1675 ssl->signed_cert_timestamps_enabled = 1; 1676 return 1; 1677 } 1678 1679 void SSL_CTX_enable_ocsp_stapling(SSL_CTX *ctx) 1680 { 1681 ctx->ocsp_stapling_enabled = 1; 1682 } 1683 1684 int SSL_enable_ocsp_stapling(SSL *ssl) 1685 { 1686 /* Currently not implemented server-side. */ 1687 if (ssl->server) 1688 return 0; 1689 ssl->ocsp_stapling_enabled = 1; 1690 return 1; 1691 } 1692 1693 void SSL_get0_signed_cert_timestamp_list(const SSL *ssl, uint8_t **out, size_t *out_len) 1694 { 1695 SSL_SESSION *session = ssl->session; 1696 1697 *out_len = 0; 1698 *out = NULL; 1699 if (ssl->server) 1700 return; 1701 if (!session || !session->tlsext_signed_cert_timestamp_list) 1702 return; 1703 *out = session->tlsext_signed_cert_timestamp_list; 1704 *out_len = session->tlsext_signed_cert_timestamp_list_length; 1705 } 1706 1707 void SSL_get0_ocsp_response(const SSL *ssl, uint8_t **out, size_t *out_len) 1708 { 1709 SSL_SESSION *session = ssl->session; 1710 1711 *out_len = 0; 1712 *out = NULL; 1713 if (ssl->server) 1714 return; 1715 if (!session || !session->ocsp_response) 1716 return; 1717 *out = session->ocsp_response; 1718 *out_len = session->ocsp_response_length; 1719 } 1720 1721 /* SSL_select_next_proto implements the standard protocol selection. It is 1722 * expected that this function is called from the callback set by 1723 * SSL_CTX_set_next_proto_select_cb. 1724 * 1725 * The protocol data is assumed to be a vector of 8-bit, length prefixed byte 1726 * strings. The length byte itself is not included in the length. A byte 1727 * string of length 0 is invalid. No byte string may be truncated. 1728 * 1729 * The current, but experimental algorithm for selecting the protocol is: 1730 * 1731 * 1) If the server doesn't support NPN then this is indicated to the 1732 * callback. In this case, the client application has to abort the connection 1733 * or have a default application level protocol. 1734 * 1735 * 2) If the server supports NPN, but advertises an empty list then the 1736 * client selects the first protcol in its list, but indicates via the 1737 * API that this fallback case was enacted. 1738 * 1739 * 3) Otherwise, the client finds the first protocol in the server's list 1740 * that it supports and selects this protocol. This is because it's 1741 * assumed that the server has better information about which protocol 1742 * a client should use. 1743 * 1744 * 4) If the client doesn't support any of the server's advertised 1745 * protocols, then this is treated the same as case 2. 1746 * 1747 * It returns either 1748 * OPENSSL_NPN_NEGOTIATED if a common protocol was found, or 1749 * OPENSSL_NPN_NO_OVERLAP if the fallback case was reached. 1750 */ 1751 int SSL_select_next_proto(unsigned char **out, unsigned char *outlen, const unsigned char *server, unsigned int server_len, const unsigned char *client, unsigned int client_len) 1752 { 1753 unsigned int i, j; 1754 const unsigned char *result; 1755 int status = OPENSSL_NPN_UNSUPPORTED; 1756 1757 /* For each protocol in server preference order, see if we support it. */ 1758 for (i = 0; i < server_len; ) 1759 { 1760 for (j = 0; j < client_len; ) 1761 { 1762 if (server[i] == client[j] && 1763 memcmp(&server[i+1], &client[j+1], server[i]) == 0) 1764 { 1765 /* We found a match */ 1766 result = &server[i]; 1767 status = OPENSSL_NPN_NEGOTIATED; 1768 goto found; 1769 } 1770 j += client[j]; 1771 j++; 1772 } 1773 i += server[i]; 1774 i++; 1775 } 1776 1777 /* There's no overlap between our protocols and the server's list. */ 1778 result = client; 1779 status = OPENSSL_NPN_NO_OVERLAP; 1780 1781 found: 1782 *out = (unsigned char *) result + 1; 1783 *outlen = result[0]; 1784 return status; 1785 } 1786 1787 /* SSL_get0_next_proto_negotiated sets *data and *len to point to the client's 1788 * requested protocol for this connection and returns 0. If the client didn't 1789 * request any protocol, then *data is set to NULL. 1790 * 1791 * Note that the client can request any protocol it chooses. The value returned 1792 * from this function need not be a member of the list of supported protocols 1793 * provided by the callback. 1794 */ 1795 void SSL_get0_next_proto_negotiated(const SSL *s, const uint8_t **data, unsigned *len) 1796 { 1797 *data = s->next_proto_negotiated; 1798 if (!*data) { 1799 *len = 0; 1800 } else { 1801 *len = s->next_proto_negotiated_len; 1802 } 1803 } 1804 1805 /* SSL_CTX_set_next_protos_advertised_cb sets a callback that is called when a 1806 * TLS server needs a list of supported protocols for Next Protocol 1807 * Negotiation. The returned list must be in wire format. The list is returned 1808 * by setting |out| to point to it and |outlen| to its length. This memory will 1809 * not be modified, but one should assume that the SSL* keeps a reference to 1810 * it. 1811 * 1812 * The callback should return SSL_TLSEXT_ERR_OK if it wishes to advertise. Otherwise, no 1813 * such extension will be included in the ServerHello. */ 1814 void SSL_CTX_set_next_protos_advertised_cb(SSL_CTX *ctx, int (*cb) (SSL *ssl, const unsigned char **out, unsigned int *outlen, void *arg), void *arg) 1815 { 1816 ctx->next_protos_advertised_cb = cb; 1817 ctx->next_protos_advertised_cb_arg = arg; 1818 } 1819 1820 /* SSL_CTX_set_next_proto_select_cb sets a callback that is called when a 1821 * client needs to select a protocol from the server's provided list. |out| 1822 * must be set to point to the selected protocol (which may be within |in|). 1823 * The length of the protocol name must be written into |outlen|. The server's 1824 * advertised protocols are provided in |in| and |inlen|. The callback can 1825 * assume that |in| is syntactically valid. 1826 * 1827 * The client must select a protocol. It is fatal to the connection if this 1828 * callback returns a value other than SSL_TLSEXT_ERR_OK. 1829 */ 1830 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) 1831 { 1832 ctx->next_proto_select_cb = cb; 1833 ctx->next_proto_select_cb_arg = arg; 1834 } 1835 1836 /* SSL_CTX_set_alpn_protos sets the ALPN protocol list on |ctx| to |protos|. 1837 * |protos| must be in wire-format (i.e. a series of non-empty, 8-bit 1838 * length-prefixed strings). 1839 * 1840 * Returns 0 on success. */ 1841 int SSL_CTX_set_alpn_protos(SSL_CTX *ctx, const unsigned char* protos, 1842 unsigned protos_len) 1843 { 1844 if (ctx->alpn_client_proto_list) 1845 OPENSSL_free(ctx->alpn_client_proto_list); 1846 1847 ctx->alpn_client_proto_list = BUF_memdup(protos, protos_len); 1848 if (!ctx->alpn_client_proto_list) 1849 return 1; 1850 ctx->alpn_client_proto_list_len = protos_len; 1851 1852 return 0; 1853 } 1854 1855 /* SSL_set_alpn_protos sets the ALPN protocol list on |ssl| to |protos|. 1856 * |protos| must be in wire-format (i.e. a series of non-empty, 8-bit 1857 * length-prefixed strings). 1858 * 1859 * Returns 0 on success. */ 1860 int SSL_set_alpn_protos(SSL *ssl, const unsigned char* protos, 1861 unsigned protos_len) 1862 { 1863 if (ssl->alpn_client_proto_list) 1864 OPENSSL_free(ssl->alpn_client_proto_list); 1865 1866 ssl->alpn_client_proto_list = BUF_memdup(protos, protos_len); 1867 if (!ssl->alpn_client_proto_list) 1868 return 1; 1869 ssl->alpn_client_proto_list_len = protos_len; 1870 1871 return 0; 1872 } 1873 1874 /* SSL_CTX_set_alpn_select_cb sets a callback function on |ctx| that is called 1875 * during ClientHello processing in order to select an ALPN protocol from the 1876 * client's list of offered protocols. */ 1877 void SSL_CTX_set_alpn_select_cb(SSL_CTX* ctx, 1878 int (*cb) (SSL *ssl, 1879 const unsigned char **out, 1880 unsigned char *outlen, 1881 const unsigned char *in, 1882 unsigned int inlen, 1883 void *arg), 1884 void *arg) 1885 { 1886 ctx->alpn_select_cb = cb; 1887 ctx->alpn_select_cb_arg = arg; 1888 } 1889 1890 /* SSL_get0_alpn_selected gets the selected ALPN protocol (if any) from |ssl|. 1891 * On return it sets |*data| to point to |*len| bytes of protocol name (not 1892 * including the leading length-prefix byte). If the server didn't respond with 1893 * a negotiated protocol then |*len| will be zero. */ 1894 void SSL_get0_alpn_selected(const SSL *ssl, const unsigned char **data, 1895 unsigned *len) 1896 { 1897 *data = NULL; 1898 if (ssl->s3) 1899 *data = ssl->s3->alpn_selected; 1900 if (*data == NULL) 1901 *len = 0; 1902 else 1903 *len = ssl->s3->alpn_selected_len; 1904 } 1905 1906 int SSL_export_keying_material(SSL *s, unsigned char *out, size_t olen, 1907 const char *label, size_t llen, const unsigned char *p, size_t plen, 1908 int use_context) 1909 { 1910 if (s->version < TLS1_VERSION) 1911 return -1; 1912 1913 return s->method->ssl3_enc->export_keying_material(s, out, olen, label, 1914 llen, p, plen, 1915 use_context); 1916 } 1917 1918 static uint32_t ssl_session_hash(const SSL_SESSION *a) 1919 { 1920 uint32_t hash = ((uint32_t) a->session_id[0]) || 1921 ((uint32_t) a->session_id[1] << 8) || 1922 ((uint32_t) a->session_id[2] << 16) || 1923 ((uint32_t) a->session_id[3] << 24); 1924 1925 return hash; 1926 } 1927 1928 /* NB: If this function (or indeed the hash function which uses a sort of 1929 * coarser function than this one) is changed, ensure 1930 * SSL_CTX_has_matching_session_id() is checked accordingly. It relies on being 1931 * able to construct an SSL_SESSION that will collide with any existing session 1932 * with a matching session ID. */ 1933 static int ssl_session_cmp(const SSL_SESSION *a, const SSL_SESSION *b) 1934 { 1935 if (a->ssl_version != b->ssl_version) 1936 return(1); 1937 if (a->session_id_length != b->session_id_length) 1938 return(1); 1939 return(memcmp(a->session_id,b->session_id,a->session_id_length)); 1940 } 1941 1942 SSL_CTX *SSL_CTX_new(const SSL_METHOD *meth) 1943 { 1944 SSL_CTX *ret=NULL; 1945 1946 if (meth == NULL) 1947 { 1948 OPENSSL_PUT_ERROR(SSL, SSL_CTX_new, SSL_R_NULL_SSL_METHOD_PASSED); 1949 return(NULL); 1950 } 1951 1952 if (SSL_get_ex_data_X509_STORE_CTX_idx() < 0) 1953 { 1954 OPENSSL_PUT_ERROR(SSL, SSL_CTX_new, SSL_R_X509_VERIFICATION_SETUP_PROBLEMS); 1955 goto err; 1956 } 1957 ret=(SSL_CTX *)OPENSSL_malloc(sizeof(SSL_CTX)); 1958 if (ret == NULL) 1959 goto err; 1960 1961 memset(ret,0,sizeof(SSL_CTX)); 1962 1963 ret->method=meth; 1964 1965 ret->cert_store=NULL; 1966 ret->session_cache_mode=SSL_SESS_CACHE_SERVER; 1967 ret->session_cache_size=SSL_SESSION_CACHE_MAX_SIZE_DEFAULT; 1968 ret->session_cache_head=NULL; 1969 ret->session_cache_tail=NULL; 1970 1971 /* We take the system default */ 1972 ret->session_timeout = SSL_DEFAULT_SESSION_TIMEOUT; 1973 1974 ret->new_session_cb=0; 1975 ret->remove_session_cb=0; 1976 ret->get_session_cb=0; 1977 ret->generate_session_id=0; 1978 1979 memset((char *)&ret->stats,0,sizeof(ret->stats)); 1980 1981 ret->references=1; 1982 ret->quiet_shutdown=0; 1983 1984 ret->info_callback=NULL; 1985 1986 ret->app_verify_callback=0; 1987 ret->app_verify_arg=NULL; 1988 1989 ret->max_cert_list=SSL_MAX_CERT_LIST_DEFAULT; 1990 ret->read_ahead=0; 1991 ret->msg_callback=0; 1992 ret->msg_callback_arg=NULL; 1993 ret->verify_mode=SSL_VERIFY_NONE; 1994 #if 0 1995 ret->verify_depth=-1; /* Don't impose a limit (but x509_lu.c does) */ 1996 #endif 1997 ret->sid_ctx_length=0; 1998 ret->default_verify_callback=NULL; 1999 if ((ret->cert=ssl_cert_new()) == NULL) 2000 goto err; 2001 2002 ret->default_passwd_callback=0; 2003 ret->default_passwd_callback_userdata=NULL; 2004 ret->client_cert_cb=0; 2005 ret->app_gen_cookie_cb=0; 2006 ret->app_verify_cookie_cb=0; 2007 2008 ret->sessions=lh_SSL_SESSION_new(ssl_session_hash, ssl_session_cmp); 2009 if (ret->sessions == NULL) goto err; 2010 ret->cert_store=X509_STORE_new(); 2011 if (ret->cert_store == NULL) goto err; 2012 2013 ssl_create_cipher_list(ret->method, 2014 &ret->cipher_list,&ret->cipher_list_by_id, 2015 meth->version == SSL2_VERSION ? "SSLv2" : SSL_DEFAULT_CIPHER_LIST, ret->cert); 2016 if (ret->cipher_list == NULL 2017 || sk_SSL_CIPHER_num(ret->cipher_list->ciphers) <= 0) 2018 { 2019 OPENSSL_PUT_ERROR(SSL, SSL_CTX_new, SSL_R_LIBRARY_HAS_NO_CIPHERS); 2020 goto err2; 2021 } 2022 2023 ret->param = X509_VERIFY_PARAM_new(); 2024 if (!ret->param) 2025 goto err; 2026 2027 if ((ret->client_CA=sk_X509_NAME_new_null()) == NULL) 2028 goto err; 2029 2030 CRYPTO_new_ex_data(CRYPTO_EX_INDEX_SSL_CTX, ret, &ret->ex_data); 2031 2032 ret->extra_certs=NULL; 2033 2034 ret->max_send_fragment = SSL3_RT_MAX_PLAIN_LENGTH; 2035 2036 ret->tlsext_servername_callback = 0; 2037 ret->tlsext_servername_arg = NULL; 2038 /* Setup RFC4507 ticket keys */ 2039 if ((RAND_pseudo_bytes(ret->tlsext_tick_key_name, 16) <= 0) 2040 || (RAND_bytes(ret->tlsext_tick_hmac_key, 16) <= 0) 2041 || (RAND_bytes(ret->tlsext_tick_aes_key, 16) <= 0)) 2042 ret->options |= SSL_OP_NO_TICKET; 2043 2044 ret->tlsext_status_cb = 0; 2045 ret->tlsext_status_arg = NULL; 2046 2047 ret->next_protos_advertised_cb = 0; 2048 ret->next_proto_select_cb = 0; 2049 ret->psk_identity_hint=NULL; 2050 ret->psk_client_callback=NULL; 2051 ret->psk_server_callback=NULL; 2052 2053 /* Default is to connect to non-RI servers. When RI is more widely 2054 * deployed might change this. 2055 */ 2056 ret->options |= SSL_OP_LEGACY_SERVER_CONNECT; 2057 2058 return(ret); 2059 err: 2060 OPENSSL_PUT_ERROR(SSL, SSL_CTX_new, ERR_R_MALLOC_FAILURE); 2061 err2: 2062 if (ret != NULL) SSL_CTX_free(ret); 2063 return(NULL); 2064 } 2065 2066 2067 void SSL_CTX_free(SSL_CTX *a) 2068 { 2069 int i; 2070 2071 if (a == NULL) return; 2072 2073 i=CRYPTO_add(&a->references,-1,CRYPTO_LOCK_SSL_CTX); 2074 #ifdef REF_PRINT 2075 REF_PRINT("SSL_CTX",a); 2076 #endif 2077 if (i > 0) return; 2078 #ifdef REF_CHECK 2079 if (i < 0) 2080 { 2081 fprintf(stderr,"SSL_CTX_free, bad reference count\n"); 2082 abort(); /* ok */ 2083 } 2084 #endif 2085 2086 if (a->param) 2087 X509_VERIFY_PARAM_free(a->param); 2088 2089 /* 2090 * Free internal session cache. However: the remove_cb() may reference 2091 * the ex_data of SSL_CTX, thus the ex_data store can only be removed 2092 * after the sessions were flushed. 2093 * As the ex_data handling routines might also touch the session cache, 2094 * the most secure solution seems to be: empty (flush) the cache, then 2095 * free ex_data, then finally free the cache. 2096 * (See ticket [openssl.org #212].) 2097 */ 2098 if (a->sessions != NULL) 2099 SSL_CTX_flush_sessions(a,0); 2100 2101 CRYPTO_free_ex_data(CRYPTO_EX_INDEX_SSL_CTX, a, &a->ex_data); 2102 2103 if (a->sessions != NULL) 2104 lh_SSL_SESSION_free(a->sessions); 2105 2106 if (a->cert_store != NULL) 2107 X509_STORE_free(a->cert_store); 2108 if (a->cipher_list != NULL) 2109 ssl_cipher_preference_list_free(a->cipher_list); 2110 if (a->cipher_list_by_id != NULL) 2111 sk_SSL_CIPHER_free(a->cipher_list_by_id); 2112 if (a->cipher_list_tls11 != NULL) 2113 ssl_cipher_preference_list_free(a->cipher_list_tls11); 2114 if (a->cert != NULL) 2115 ssl_cert_free(a->cert); 2116 if (a->client_CA != NULL) 2117 sk_X509_NAME_pop_free(a->client_CA,X509_NAME_free); 2118 if (a->extra_certs != NULL) 2119 sk_X509_pop_free(a->extra_certs,X509_free); 2120 2121 if (a->srtp_profiles) 2122 sk_SRTP_PROTECTION_PROFILE_free(a->srtp_profiles); 2123 2124 if (a->psk_identity_hint) 2125 OPENSSL_free(a->psk_identity_hint); 2126 2127 if (a->tlsext_ecpointformatlist) 2128 OPENSSL_free(a->tlsext_ecpointformatlist); 2129 if (a->tlsext_ellipticcurvelist) 2130 OPENSSL_free(a->tlsext_ellipticcurvelist); 2131 if (a->alpn_client_proto_list != NULL) 2132 OPENSSL_free(a->alpn_client_proto_list); 2133 2134 if (a->tlsext_channel_id_private) 2135 EVP_PKEY_free(a->tlsext_channel_id_private); 2136 2137 if (a->keylog_bio) 2138 BIO_free(a->keylog_bio); 2139 2140 OPENSSL_free(a); 2141 } 2142 2143 void SSL_CTX_set_default_passwd_cb(SSL_CTX *ctx, pem_password_cb *cb) 2144 { 2145 ctx->default_passwd_callback=cb; 2146 } 2147 2148 void SSL_CTX_set_default_passwd_cb_userdata(SSL_CTX *ctx,void *u) 2149 { 2150 ctx->default_passwd_callback_userdata=u; 2151 } 2152 2153 void SSL_CTX_set_cert_verify_callback(SSL_CTX *ctx, int (*cb)(X509_STORE_CTX *,void *), void *arg) 2154 { 2155 ctx->app_verify_callback=cb; 2156 ctx->app_verify_arg=arg; 2157 } 2158 2159 void SSL_CTX_set_verify(SSL_CTX *ctx,int mode,int (*cb)(int, X509_STORE_CTX *)) 2160 { 2161 ctx->verify_mode=mode; 2162 ctx->default_verify_callback=cb; 2163 } 2164 2165 void SSL_CTX_set_verify_depth(SSL_CTX *ctx,int depth) 2166 { 2167 X509_VERIFY_PARAM_set_depth(ctx->param, depth); 2168 } 2169 2170 void SSL_CTX_set_cert_cb(SSL_CTX *c, int (*cb)(SSL *ssl, void *arg), void *arg) 2171 { 2172 ssl_cert_set_cert_cb(c->cert, cb, arg); 2173 } 2174 2175 void SSL_set_cert_cb(SSL *s, int (*cb)(SSL *ssl, void *arg), void *arg) 2176 { 2177 ssl_cert_set_cert_cb(s->cert, cb, arg); 2178 } 2179 2180 void ssl_set_cert_masks(CERT *c, const SSL_CIPHER *cipher) 2181 { 2182 CERT_PKEY *cpk; 2183 int rsa_enc,rsa_sign,dh_tmp; 2184 unsigned long mask_k,mask_a; 2185 int have_ecc_cert, ecdsa_ok; 2186 int have_ecdh_tmp; 2187 X509 *x = NULL; 2188 if (c == NULL) return; 2189 2190 dh_tmp=(c->dh_tmp != NULL || c->dh_tmp_cb != NULL); 2191 2192 have_ecdh_tmp=(c->ecdh_tmp || c->ecdh_tmp_cb || c->ecdh_tmp_auto); 2193 cpk= &(c->pkeys[SSL_PKEY_RSA_ENC]); 2194 rsa_enc= cpk->valid_flags & CERT_PKEY_VALID; 2195 cpk= &(c->pkeys[SSL_PKEY_RSA_SIGN]); 2196 rsa_sign= cpk->valid_flags & CERT_PKEY_SIGN; 2197 cpk= &(c->pkeys[SSL_PKEY_ECC]); 2198 have_ecc_cert= cpk->valid_flags & CERT_PKEY_VALID; 2199 mask_k=0; 2200 mask_a=0; 2201 2202 #ifdef CIPHER_DEBUG 2203 printf("rt=%d rte=%d dht=%d ecdht=%d re=%d ree=%d rs=%d ds=%d dhr=%d dhd=%d\n", 2204 rsa_tmp,rsa_tmp_export,dh_tmp,have_ecdh_tmp, 2205 rsa_enc,rsa_enc_export,rsa_sign,dsa_sign,dh_rsa,dh_dsa); 2206 #endif 2207 2208 if (rsa_enc) 2209 mask_k|=SSL_kRSA; 2210 2211 if (dh_tmp) 2212 mask_k|=SSL_kEDH; 2213 2214 if (rsa_enc || rsa_sign) 2215 { 2216 mask_a|=SSL_aRSA; 2217 } 2218 2219 mask_a|=SSL_aNULL; 2220 2221 /* An ECC certificate may be usable for ECDSA cipher suites depending on 2222 * the key usage extension. */ 2223 if (have_ecc_cert) 2224 { 2225 cpk = &c->pkeys[SSL_PKEY_ECC]; 2226 x = cpk->x509; 2227 /* This call populates extension flags (ex_flags) */ 2228 X509_check_purpose(x, -1, 0); 2229 ecdsa_ok = (x->ex_flags & EXFLAG_KUSAGE) ? 2230 (x->ex_kusage & X509v3_KU_DIGITAL_SIGNATURE) : 1; 2231 if (!(cpk->valid_flags & CERT_PKEY_SIGN)) 2232 ecdsa_ok = 0; 2233 if (ecdsa_ok) 2234 { 2235 mask_a|=SSL_aECDSA; 2236 } 2237 } 2238 2239 if (have_ecdh_tmp) 2240 { 2241 mask_k|=SSL_kEECDH; 2242 } 2243 2244 mask_k |= SSL_kPSK; 2245 mask_a |= SSL_aPSK; 2246 2247 c->mask_k=mask_k; 2248 c->mask_a=mask_a; 2249 c->valid=1; 2250 } 2251 2252 /* This handy macro borrowed from crypto/x509v3/v3_purp.c */ 2253 #define ku_reject(x, usage) \ 2254 (((x)->ex_flags & EXFLAG_KUSAGE) && !((x)->ex_kusage & (usage))) 2255 2256 2257 int ssl_check_srvr_ecc_cert_and_alg(X509 *x, SSL *s) 2258 { 2259 unsigned long alg_a; 2260 int signature_nid = 0, md_nid = 0, pk_nid = 0; 2261 const SSL_CIPHER *cs = s->s3->tmp.new_cipher; 2262 2263 alg_a = cs->algorithm_auth; 2264 2265 /* This call populates the ex_flags field correctly */ 2266 X509_check_purpose(x, -1, 0); 2267 if ((x->sig_alg) && (x->sig_alg->algorithm)) 2268 { 2269 signature_nid = OBJ_obj2nid(x->sig_alg->algorithm); 2270 OBJ_find_sigid_algs(signature_nid, &md_nid, &pk_nid); 2271 } 2272 if (alg_a & SSL_aECDSA) 2273 { 2274 /* key usage, if present, must allow signing */ 2275 if (ku_reject(x, X509v3_KU_DIGITAL_SIGNATURE)) 2276 { 2277 OPENSSL_PUT_ERROR(SSL, ssl_check_srvr_ecc_cert_and_alg, SSL_R_ECC_CERT_NOT_FOR_SIGNING); 2278 return 0; 2279 } 2280 } 2281 2282 return 1; /* all checks are ok */ 2283 } 2284 2285 2286 static int ssl_get_server_cert_index(const SSL *s) 2287 { 2288 int idx; 2289 idx = ssl_cipher_get_cert_index(s->s3->tmp.new_cipher); 2290 if (idx == SSL_PKEY_RSA_ENC && !s->cert->pkeys[SSL_PKEY_RSA_ENC].x509) 2291 idx = SSL_PKEY_RSA_SIGN; 2292 if (idx == -1) 2293 OPENSSL_PUT_ERROR(SSL, ssl_get_server_cert_index, ERR_R_INTERNAL_ERROR); 2294 return idx; 2295 } 2296 2297 CERT_PKEY *ssl_get_server_send_pkey(const SSL *s) 2298 { 2299 CERT *c; 2300 int i; 2301 2302 c = s->cert; 2303 ssl_set_cert_masks(c, s->s3->tmp.new_cipher); 2304 2305 #ifdef OPENSSL_SSL_DEBUG_BROKEN_PROTOCOL 2306 /* Broken protocol test: return last used certificate: which may 2307 * mismatch the one expected. 2308 */ 2309 if (c->cert_flags & SSL_CERT_FLAG_BROKEN_PROTOCOL) 2310 return c->key; 2311 #endif 2312 2313 i = ssl_get_server_cert_index(s); 2314 2315 /* This may or may not be an error. */ 2316 if (i < 0) 2317 return NULL; 2318 2319 /* May be NULL. */ 2320 return &c->pkeys[i]; 2321 } 2322 2323 EVP_PKEY *ssl_get_sign_pkey(SSL *s,const SSL_CIPHER *cipher, const EVP_MD **pmd) 2324 { 2325 unsigned long alg_a; 2326 CERT *c; 2327 int idx = -1; 2328 2329 alg_a = cipher->algorithm_auth; 2330 c=s->cert; 2331 2332 #ifdef OPENSSL_SSL_DEBUG_BROKEN_PROTOCOL 2333 /* Broken protocol test: use last key: which may 2334 * mismatch the one expected. 2335 */ 2336 if (c->cert_flags & SSL_CERT_FLAG_BROKEN_PROTOCOL) 2337 idx = c->key - c->pkeys; 2338 else 2339 #endif 2340 2341 if (alg_a & SSL_aRSA) 2342 { 2343 if (c->pkeys[SSL_PKEY_RSA_SIGN].privatekey != NULL) 2344 idx = SSL_PKEY_RSA_SIGN; 2345 else if (c->pkeys[SSL_PKEY_RSA_ENC].privatekey != NULL) 2346 idx = SSL_PKEY_RSA_ENC; 2347 } 2348 else if ((alg_a & SSL_aECDSA) && 2349 (c->pkeys[SSL_PKEY_ECC].privatekey != NULL)) 2350 idx = SSL_PKEY_ECC; 2351 if (idx == -1) 2352 { 2353 OPENSSL_PUT_ERROR(SSL, ssl_get_sign_pkey, ERR_R_INTERNAL_ERROR); 2354 return(NULL); 2355 } 2356 if (pmd) 2357 *pmd = c->pkeys[idx].digest; 2358 return c->pkeys[idx].privatekey; 2359 } 2360 2361 void ssl_update_cache(SSL *s,int mode) 2362 { 2363 int i; 2364 2365 /* If the session_id_length is 0, we are not supposed to cache it, 2366 * and it would be rather hard to do anyway :-) */ 2367 if (s->session->session_id_length == 0) return; 2368 2369 i=s->initial_ctx->session_cache_mode; 2370 if ((i & mode) && (!s->hit) 2371 && ((i & SSL_SESS_CACHE_NO_INTERNAL_STORE) 2372 || SSL_CTX_add_session(s->initial_ctx,s->session)) 2373 && (s->initial_ctx->new_session_cb != NULL)) 2374 { 2375 CRYPTO_add(&s->session->references,1,CRYPTO_LOCK_SSL_SESSION); 2376 if (!s->initial_ctx->new_session_cb(s,s->session)) 2377 SSL_SESSION_free(s->session); 2378 } 2379 2380 /* auto flush every 255 connections */ 2381 if ((!(i & SSL_SESS_CACHE_NO_AUTO_CLEAR)) && 2382 ((i & mode) == mode)) 2383 { 2384 if ( (((mode & SSL_SESS_CACHE_CLIENT) 2385 ?s->initial_ctx->stats.sess_connect_good 2386 :s->initial_ctx->stats.sess_accept_good) & 0xff) == 0xff) 2387 { 2388 SSL_CTX_flush_sessions(s->initial_ctx,(unsigned long)time(NULL)); 2389 } 2390 } 2391 } 2392 2393 const SSL_METHOD *SSL_CTX_get_ssl_method(SSL_CTX *ctx) 2394 { 2395 return ctx->method; 2396 } 2397 2398 const SSL_METHOD *SSL_get_ssl_method(SSL *s) 2399 { 2400 return(s->method); 2401 } 2402 2403 int SSL_set_ssl_method(SSL *s, const SSL_METHOD *meth) 2404 { 2405 int conn= -1; 2406 int ret=1; 2407 2408 if (s->method != meth) 2409 { 2410 if (s->handshake_func != NULL) 2411 conn=(s->handshake_func == s->method->ssl_connect); 2412 2413 if (s->method->version == meth->version) 2414 s->method=meth; 2415 else 2416 { 2417 s->method->ssl_free(s); 2418 s->method=meth; 2419 ret=s->method->ssl_new(s); 2420 } 2421 2422 if (conn == 1) 2423 s->handshake_func=meth->ssl_connect; 2424 else if (conn == 0) 2425 s->handshake_func=meth->ssl_accept; 2426 } 2427 return(ret); 2428 } 2429 2430 int SSL_get_error(const SSL *s,int i) 2431 { 2432 int reason; 2433 unsigned long l; 2434 BIO *bio; 2435 2436 if (i > 0) return(SSL_ERROR_NONE); 2437 2438 /* Make things return SSL_ERROR_SYSCALL when doing SSL_do_handshake 2439 * etc, where we do encode the error */ 2440 if ((l=ERR_peek_error()) != 0) 2441 { 2442 if (ERR_GET_LIB(l) == ERR_LIB_SYS) 2443 return(SSL_ERROR_SYSCALL); 2444 else 2445 return(SSL_ERROR_SSL); 2446 } 2447 2448 if ((i < 0) && SSL_want_session(s)) 2449 return(SSL_ERROR_PENDING_SESSION); 2450 2451 if ((i < 0) && SSL_want_certificate(s)) 2452 return(SSL_ERROR_PENDING_CERTIFICATE); 2453 2454 if ((i < 0) && SSL_want_read(s)) 2455 { 2456 bio=SSL_get_rbio(s); 2457 if (BIO_should_read(bio)) 2458 return(SSL_ERROR_WANT_READ); 2459 else if (BIO_should_write(bio)) 2460 /* This one doesn't make too much sense ... We never try 2461 * to write to the rbio, and an application program where 2462 * rbio and wbio are separate couldn't even know what it 2463 * should wait for. 2464 * However if we ever set s->rwstate incorrectly 2465 * (so that we have SSL_want_read(s) instead of 2466 * SSL_want_write(s)) and rbio and wbio *are* the same, 2467 * this test works around that bug; so it might be safer 2468 * to keep it. */ 2469 return(SSL_ERROR_WANT_WRITE); 2470 else if (BIO_should_io_special(bio)) 2471 { 2472 reason=BIO_get_retry_reason(bio); 2473 if (reason == BIO_RR_CONNECT) 2474 return(SSL_ERROR_WANT_CONNECT); 2475 else if (reason == BIO_RR_ACCEPT) 2476 return(SSL_ERROR_WANT_ACCEPT); 2477 else 2478 return(SSL_ERROR_SYSCALL); /* unknown */ 2479 } 2480 } 2481 2482 if ((i < 0) && SSL_want_write(s)) 2483 { 2484 bio=SSL_get_wbio(s); 2485 if (BIO_should_write(bio)) 2486 return(SSL_ERROR_WANT_WRITE); 2487 else if (BIO_should_read(bio)) 2488 /* See above (SSL_want_read(s) with BIO_should_write(bio)) */ 2489 return(SSL_ERROR_WANT_READ); 2490 else if (BIO_should_io_special(bio)) 2491 { 2492 reason=BIO_get_retry_reason(bio); 2493 if (reason == BIO_RR_CONNECT) 2494 return(SSL_ERROR_WANT_CONNECT); 2495 else if (reason == BIO_RR_ACCEPT) 2496 return(SSL_ERROR_WANT_ACCEPT); 2497 else 2498 return(SSL_ERROR_SYSCALL); 2499 } 2500 } 2501 if ((i < 0) && SSL_want_x509_lookup(s)) 2502 { 2503 return(SSL_ERROR_WANT_X509_LOOKUP); 2504 } 2505 if ((i < 0) && SSL_want_channel_id_lookup(s)) 2506 { 2507 return(SSL_ERROR_WANT_CHANNEL_ID_LOOKUP); 2508 } 2509 2510 if (i == 0) 2511 { 2512 if (s->version == SSL2_VERSION) 2513 { 2514 /* assume it is the socket being closed */ 2515 return(SSL_ERROR_ZERO_RETURN); 2516 } 2517 else 2518 { 2519 if ((s->shutdown & SSL_RECEIVED_SHUTDOWN) && 2520 (s->s3->warn_alert == SSL_AD_CLOSE_NOTIFY)) 2521 return(SSL_ERROR_ZERO_RETURN); 2522 } 2523 } 2524 return(SSL_ERROR_SYSCALL); 2525 } 2526 2527 int SSL_do_handshake(SSL *s) 2528 { 2529 int ret=1; 2530 2531 if (s->handshake_func == NULL) 2532 { 2533 OPENSSL_PUT_ERROR(SSL, SSL_do_handshake, SSL_R_CONNECTION_TYPE_NOT_SET); 2534 return(-1); 2535 } 2536 2537 s->method->ssl_renegotiate_check(s); 2538 2539 if (SSL_in_init(s) || SSL_in_before(s)) 2540 { 2541 ret=s->handshake_func(s); 2542 } 2543 return(ret); 2544 } 2545 2546 /* For the next 2 functions, SSL_clear() sets shutdown and so 2547 * one of these calls will reset it */ 2548 void SSL_set_accept_state(SSL *s) 2549 { 2550 s->server=1; 2551 s->shutdown=0; 2552 s->state=SSL_ST_ACCEPT|SSL_ST_BEFORE; 2553 s->handshake_func=s->method->ssl_accept; 2554 /* clear the current cipher */ 2555 ssl_clear_cipher_ctx(s); 2556 ssl_clear_hash_ctx(&s->read_hash); 2557 ssl_clear_hash_ctx(&s->write_hash); 2558 } 2559 2560 void SSL_set_connect_state(SSL *s) 2561 { 2562 s->server=0; 2563 s->shutdown=0; 2564 s->state=SSL_ST_CONNECT|SSL_ST_BEFORE; 2565 s->handshake_func=s->method->ssl_connect; 2566 /* clear the current cipher */ 2567 ssl_clear_cipher_ctx(s); 2568 ssl_clear_hash_ctx(&s->read_hash); 2569 ssl_clear_hash_ctx(&s->write_hash); 2570 } 2571 2572 int ssl_undefined_function(SSL *s) 2573 { 2574 OPENSSL_PUT_ERROR(SSL, ssl_undefined_function, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); 2575 return(0); 2576 } 2577 2578 int ssl_undefined_void_function(void) 2579 { 2580 OPENSSL_PUT_ERROR(SSL, ssl_undefined_void_function, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); 2581 return(0); 2582 } 2583 2584 int ssl_undefined_const_function(const SSL *s) 2585 { 2586 OPENSSL_PUT_ERROR(SSL, ssl_undefined_const_function, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); 2587 return(0); 2588 } 2589 2590 SSL_METHOD *ssl_bad_method(int ver) 2591 { 2592 OPENSSL_PUT_ERROR(SSL, ssl_bad_method, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); 2593 return(NULL); 2594 } 2595 2596 static const char *ssl_get_version(int version) 2597 { 2598 if (version == TLS1_2_VERSION) 2599 return("TLSv1.2"); 2600 else if (version == TLS1_1_VERSION) 2601 return("TLSv1.1"); 2602 else if (version == TLS1_VERSION) 2603 return("TLSv1"); 2604 else if (version == SSL3_VERSION) 2605 return("SSLv3"); 2606 else if (version == SSL2_VERSION) 2607 return("SSLv2"); 2608 else 2609 return("unknown"); 2610 } 2611 2612 const char *SSL_get_version(const SSL *s) 2613 { 2614 return ssl_get_version(s->version); 2615 } 2616 2617 const char *SSL_SESSION_get_version(const SSL_SESSION *sess) 2618 { 2619 return ssl_get_version(sess->ssl_version); 2620 } 2621 2622 void ssl_clear_cipher_ctx(SSL *s) 2623 { 2624 if (s->enc_read_ctx != NULL) 2625 { 2626 EVP_CIPHER_CTX_cleanup(s->enc_read_ctx); 2627 OPENSSL_free(s->enc_read_ctx); 2628 s->enc_read_ctx=NULL; 2629 } 2630 if (s->enc_write_ctx != NULL) 2631 { 2632 EVP_CIPHER_CTX_cleanup(s->enc_write_ctx); 2633 OPENSSL_free(s->enc_write_ctx); 2634 s->enc_write_ctx=NULL; 2635 } 2636 if (s->aead_read_ctx != NULL) 2637 { 2638 EVP_AEAD_CTX_cleanup(&s->aead_read_ctx->ctx); 2639 OPENSSL_free(s->aead_read_ctx); 2640 s->aead_read_ctx = NULL; 2641 } 2642 if (s->aead_write_ctx != NULL) 2643 { 2644 EVP_AEAD_CTX_cleanup(&s->aead_write_ctx->ctx); 2645 OPENSSL_free(s->aead_write_ctx); 2646 s->aead_write_ctx = NULL; 2647 } 2648 } 2649 2650 X509 *SSL_get_certificate(const SSL *s) 2651 { 2652 if (s->cert != NULL) 2653 return(s->cert->key->x509); 2654 else 2655 return(NULL); 2656 } 2657 2658 EVP_PKEY *SSL_get_privatekey(const SSL *s) 2659 { 2660 if (s->cert != NULL) 2661 return(s->cert->key->privatekey); 2662 else 2663 return(NULL); 2664 } 2665 2666 X509 *SSL_CTX_get0_certificate(const SSL_CTX *ctx) 2667 { 2668 if (ctx->cert != NULL) 2669 return ctx->cert->key->x509; 2670 else 2671 return NULL; 2672 } 2673 2674 EVP_PKEY *SSL_CTX_get0_privatekey(const SSL_CTX *ctx) 2675 { 2676 if (ctx->cert != NULL) 2677 return ctx->cert->key->privatekey; 2678 else 2679 return NULL ; 2680 } 2681 2682 const SSL_CIPHER *SSL_get_current_cipher(const SSL *s) 2683 { 2684 if ((s->session != NULL) && (s->session->cipher != NULL)) 2685 return(s->session->cipher); 2686 return(NULL); 2687 } 2688 const void *SSL_get_current_compression(SSL *s) 2689 { 2690 return NULL; 2691 } 2692 const void *SSL_get_current_expansion(SSL *s) 2693 { 2694 return NULL; 2695 } 2696 2697 int ssl_init_wbio_buffer(SSL *s,int push) 2698 { 2699 BIO *bbio; 2700 2701 if (s->bbio == NULL) 2702 { 2703 bbio=BIO_new(BIO_f_buffer()); 2704 if (bbio == NULL) return(0); 2705 s->bbio=bbio; 2706 } 2707 else 2708 { 2709 bbio=s->bbio; 2710 if (s->bbio == s->wbio) 2711 s->wbio=BIO_pop(s->wbio); 2712 } 2713 (void)BIO_reset(bbio); 2714 /* if (!BIO_set_write_buffer_size(bbio,16*1024)) */ 2715 if (!BIO_set_read_buffer_size(bbio,1)) 2716 { 2717 OPENSSL_PUT_ERROR(SSL, ssl_init_wbio_buffer, ERR_R_BUF_LIB); 2718 return(0); 2719 } 2720 if (push) 2721 { 2722 if (s->wbio != bbio) 2723 s->wbio=BIO_push(bbio,s->wbio); 2724 } 2725 else 2726 { 2727 if (s->wbio == bbio) 2728 s->wbio=BIO_pop(bbio); 2729 } 2730 return(1); 2731 } 2732 2733 void ssl_free_wbio_buffer(SSL *s) 2734 { 2735 if (s->bbio == NULL) return; 2736 2737 if (s->bbio == s->wbio) 2738 { 2739 /* remove buffering */ 2740 s->wbio=BIO_pop(s->wbio); 2741 #ifdef REF_CHECK /* not the usual REF_CHECK, but this avoids adding one more preprocessor symbol */ 2742 assert(s->wbio != NULL); 2743 #endif 2744 } 2745 BIO_free(s->bbio); 2746 s->bbio=NULL; 2747 } 2748 2749 void SSL_CTX_set_quiet_shutdown(SSL_CTX *ctx,int mode) 2750 { 2751 ctx->quiet_shutdown=mode; 2752 } 2753 2754 int SSL_CTX_get_quiet_shutdown(const SSL_CTX *ctx) 2755 { 2756 return(ctx->quiet_shutdown); 2757 } 2758 2759 void SSL_set_quiet_shutdown(SSL *s,int mode) 2760 { 2761 s->quiet_shutdown=mode; 2762 } 2763 2764 int SSL_get_quiet_shutdown(const SSL *s) 2765 { 2766 return(s->quiet_shutdown); 2767 } 2768 2769 void SSL_set_shutdown(SSL *s,int mode) 2770 { 2771 s->shutdown=mode; 2772 } 2773 2774 int SSL_get_shutdown(const SSL *s) 2775 { 2776 return(s->shutdown); 2777 } 2778 2779 int SSL_version(const SSL *s) 2780 { 2781 return(s->version); 2782 } 2783 2784 SSL_CTX *SSL_get_SSL_CTX(const SSL *ssl) 2785 { 2786 return(ssl->ctx); 2787 } 2788 2789 SSL_CTX *SSL_set_SSL_CTX(SSL *ssl, SSL_CTX* ctx) 2790 { 2791 if (ssl->ctx == ctx) 2792 return ssl->ctx; 2793 if (ctx == NULL) 2794 ctx = ssl->initial_ctx; 2795 if (ssl->cert != NULL) 2796 ssl_cert_free(ssl->cert); 2797 ssl->cert = ssl_cert_dup(ctx->cert); 2798 CRYPTO_add(&ctx->references,1,CRYPTO_LOCK_SSL_CTX); 2799 if (ssl->ctx != NULL) 2800 SSL_CTX_free(ssl->ctx); /* decrement reference count */ 2801 ssl->ctx = ctx; 2802 2803 ssl->sid_ctx_length = ctx->sid_ctx_length; 2804 assert(ssl->sid_ctx_length <= sizeof(ssl->sid_ctx)); 2805 memcpy(ssl->sid_ctx, ctx->sid_ctx, sizeof(ssl->sid_ctx)); 2806 2807 return(ssl->ctx); 2808 } 2809 2810 #ifndef OPENSSL_NO_STDIO 2811 int SSL_CTX_set_default_verify_paths(SSL_CTX *ctx) 2812 { 2813 return(X509_STORE_set_default_paths(ctx->cert_store)); 2814 } 2815 2816 int SSL_CTX_load_verify_locations(SSL_CTX *ctx, const char *CAfile, 2817 const char *CApath) 2818 { 2819 return(X509_STORE_load_locations(ctx->cert_store,CAfile,CApath)); 2820 } 2821 #endif 2822 2823 void SSL_set_info_callback(SSL *ssl, 2824 void (*cb)(const SSL *ssl,int type,int val)) 2825 { 2826 ssl->info_callback=cb; 2827 } 2828 2829 /* One compiler (Diab DCC) doesn't like argument names in returned 2830 function pointer. */ 2831 void (*SSL_get_info_callback(const SSL *ssl))(const SSL * /*ssl*/,int /*type*/,int /*val*/) 2832 { 2833 return ssl->info_callback; 2834 } 2835 2836 int SSL_state(const SSL *ssl) 2837 { 2838 return(ssl->state); 2839 } 2840 2841 void SSL_set_state(SSL *ssl, int state) 2842 { 2843 ssl->state = state; 2844 } 2845 2846 void SSL_set_verify_result(SSL *ssl,long arg) 2847 { 2848 ssl->verify_result=arg; 2849 } 2850 2851 long SSL_get_verify_result(const SSL *ssl) 2852 { 2853 return(ssl->verify_result); 2854 } 2855 2856 int SSL_get_ex_new_index(long argl,void *argp,CRYPTO_EX_new *new_func, 2857 CRYPTO_EX_dup *dup_func,CRYPTO_EX_free *free_func) 2858 { 2859 return CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_SSL, argl, argp, 2860 new_func, dup_func, free_func); 2861 } 2862 2863 int SSL_set_ex_data(SSL *s,int idx,void *arg) 2864 { 2865 return(CRYPTO_set_ex_data(&s->ex_data,idx,arg)); 2866 } 2867 2868 void *SSL_get_ex_data(const SSL *s,int idx) 2869 { 2870 return(CRYPTO_get_ex_data(&s->ex_data,idx)); 2871 } 2872 2873 int SSL_CTX_get_ex_new_index(long argl,void *argp,CRYPTO_EX_new *new_func, 2874 CRYPTO_EX_dup *dup_func,CRYPTO_EX_free *free_func) 2875 { 2876 return CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_SSL_CTX, argl, argp, 2877 new_func, dup_func, free_func); 2878 } 2879 2880 int SSL_CTX_set_ex_data(SSL_CTX *s,int idx,void *arg) 2881 { 2882 return(CRYPTO_set_ex_data(&s->ex_data,idx,arg)); 2883 } 2884 2885 void *SSL_CTX_get_ex_data(const SSL_CTX *s,int idx) 2886 { 2887 return(CRYPTO_get_ex_data(&s->ex_data,idx)); 2888 } 2889 2890 int ssl_ok(SSL *s) 2891 { 2892 return(1); 2893 } 2894 2895 X509_STORE *SSL_CTX_get_cert_store(const SSL_CTX *ctx) 2896 { 2897 return(ctx->cert_store); 2898 } 2899 2900 void SSL_CTX_set_cert_store(SSL_CTX *ctx,X509_STORE *store) 2901 { 2902 if (ctx->cert_store != NULL) 2903 X509_STORE_free(ctx->cert_store); 2904 ctx->cert_store=store; 2905 } 2906 2907 int SSL_want(const SSL *s) 2908 { 2909 return(s->rwstate); 2910 } 2911 2912 /*! 2913 * \brief Set the callback for generating temporary RSA keys. 2914 * \param ctx the SSL context. 2915 * \param cb the callback 2916 */ 2917 2918 void SSL_CTX_set_tmp_rsa_callback(SSL_CTX *ctx,RSA *(*cb)(SSL *ssl, 2919 int is_export, 2920 int keylength)) 2921 { 2922 SSL_CTX_callback_ctrl(ctx,SSL_CTRL_SET_TMP_RSA_CB,(void (*)(void))cb); 2923 } 2924 2925 void SSL_set_tmp_rsa_callback(SSL *ssl,RSA *(*cb)(SSL *ssl, 2926 int is_export, 2927 int keylength)) 2928 { 2929 SSL_callback_ctrl(ssl,SSL_CTRL_SET_TMP_RSA_CB,(void (*)(void))cb); 2930 } 2931 2932 #ifdef DOXYGEN 2933 /*! 2934 * \brief The RSA temporary key callback function. 2935 * \param ssl the SSL session. 2936 * \param is_export \c TRUE if the temp RSA key is for an export ciphersuite. 2937 * \param keylength if \c is_export is \c TRUE, then \c keylength is the size 2938 * of the required key in bits. 2939 * \return the temporary RSA key. 2940 * \sa SSL_CTX_set_tmp_rsa_callback, SSL_set_tmp_rsa_callback 2941 */ 2942 2943 RSA *cb(SSL *ssl,int is_export,int keylength) 2944 {} 2945 #endif 2946 2947 /*! 2948 * \brief Set the callback for generating temporary DH keys. 2949 * \param ctx the SSL context. 2950 * \param dh the callback 2951 */ 2952 2953 void SSL_CTX_set_tmp_dh_callback(SSL_CTX *ctx,DH *(*dh)(SSL *ssl,int is_export, 2954 int keylength)) 2955 { 2956 SSL_CTX_callback_ctrl(ctx,SSL_CTRL_SET_TMP_DH_CB,(void (*)(void))dh); 2957 } 2958 2959 void SSL_set_tmp_dh_callback(SSL *ssl,DH *(*dh)(SSL *ssl,int is_export, 2960 int keylength)) 2961 { 2962 SSL_callback_ctrl(ssl,SSL_CTRL_SET_TMP_DH_CB,(void (*)(void))dh); 2963 } 2964 2965 void SSL_CTX_set_tmp_ecdh_callback(SSL_CTX *ctx,EC_KEY *(*ecdh)(SSL *ssl,int is_export, 2966 int keylength)) 2967 { 2968 SSL_CTX_callback_ctrl(ctx,SSL_CTRL_SET_TMP_ECDH_CB,(void (*)(void))ecdh); 2969 } 2970 2971 void SSL_set_tmp_ecdh_callback(SSL *ssl,EC_KEY *(*ecdh)(SSL *ssl,int is_export, 2972 int keylength)) 2973 { 2974 SSL_callback_ctrl(ssl,SSL_CTRL_SET_TMP_ECDH_CB,(void (*)(void))ecdh); 2975 } 2976 2977 int SSL_CTX_use_psk_identity_hint(SSL_CTX *ctx, const char *identity_hint) 2978 { 2979 if (identity_hint != NULL && strlen(identity_hint) > PSK_MAX_IDENTITY_LEN) 2980 { 2981 OPENSSL_PUT_ERROR(SSL, SSL_CTX_use_psk_identity_hint, SSL_R_DATA_LENGTH_TOO_LONG); 2982 return 0; 2983 } 2984 if (ctx->psk_identity_hint != NULL) 2985 OPENSSL_free(ctx->psk_identity_hint); 2986 if (identity_hint != NULL) 2987 { 2988 ctx->psk_identity_hint = BUF_strdup(identity_hint); 2989 if (ctx->psk_identity_hint == NULL) 2990 return 0; 2991 } 2992 else 2993 ctx->psk_identity_hint = NULL; 2994 return 1; 2995 } 2996 2997 int SSL_use_psk_identity_hint(SSL *s, const char *identity_hint) 2998 { 2999 if (s == NULL) 3000 return 0; 3001 3002 if (identity_hint != NULL && strlen(identity_hint) > PSK_MAX_IDENTITY_LEN) 3003 { 3004 OPENSSL_PUT_ERROR(SSL, SSL_use_psk_identity_hint, SSL_R_DATA_LENGTH_TOO_LONG); 3005 return 0; 3006 } 3007 3008 /* Clear hint in SSL and associated SSL_SESSION (if any). */ 3009 if (s->psk_identity_hint != NULL) 3010 { 3011 OPENSSL_free(s->psk_identity_hint); 3012 s->psk_identity_hint = NULL; 3013 } 3014 if (s->session != NULL && s->session->psk_identity_hint != NULL) 3015 { 3016 OPENSSL_free(s->session->psk_identity_hint); 3017 s->session->psk_identity_hint = NULL; 3018 } 3019 3020 if (identity_hint != NULL) 3021 { 3022 /* The hint is stored in SSL and SSL_SESSION with the one in 3023 * SSL_SESSION taking precedence. Thus, if SSL_SESSION is avaiable, 3024 * we store the hint there, otherwise we store it in SSL. */ 3025 if (s->session != NULL) 3026 { 3027 s->session->psk_identity_hint = BUF_strdup(identity_hint); 3028 if (s->session->psk_identity_hint == NULL) 3029 return 0; 3030 } 3031 else 3032 { 3033 s->psk_identity_hint = BUF_strdup(identity_hint); 3034 if (s->psk_identity_hint == NULL) 3035 return 0; 3036 } 3037 } 3038 return 1; 3039 } 3040 3041 const char *SSL_get_psk_identity_hint(const SSL *s) 3042 { 3043 if (s == NULL) 3044 return NULL; 3045 /* The hint is stored in SSL and SSL_SESSION with the one in SSL_SESSION 3046 * taking precedence. */ 3047 if (s->session != NULL) 3048 return(s->session->psk_identity_hint); 3049 return(s->psk_identity_hint); 3050 } 3051 3052 const char *SSL_get_psk_identity(const SSL *s) 3053 { 3054 if (s == NULL || s->session == NULL) 3055 return NULL; 3056 return(s->session->psk_identity); 3057 } 3058 3059 void SSL_set_psk_client_callback(SSL *s, 3060 unsigned int (*cb)(SSL *ssl, const char *hint, 3061 char *identity, unsigned int max_identity_len, unsigned char *psk, 3062 unsigned int max_psk_len)) 3063 { 3064 s->psk_client_callback = cb; 3065 } 3066 3067 void SSL_CTX_set_psk_client_callback(SSL_CTX *ctx, 3068 unsigned int (*cb)(SSL *ssl, const char *hint, 3069 char *identity, unsigned int max_identity_len, unsigned char *psk, 3070 unsigned int max_psk_len)) 3071 { 3072 ctx->psk_client_callback = cb; 3073 } 3074 3075 void SSL_set_psk_server_callback(SSL *s, 3076 unsigned int (*cb)(SSL *ssl, const char *identity, 3077 unsigned char *psk, unsigned int max_psk_len)) 3078 { 3079 s->psk_server_callback = cb; 3080 } 3081 3082 void SSL_CTX_set_psk_server_callback(SSL_CTX *ctx, 3083 unsigned int (*cb)(SSL *ssl, const char *identity, 3084 unsigned char *psk, unsigned int max_psk_len)) 3085 { 3086 ctx->psk_server_callback = cb; 3087 } 3088 3089 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)) 3090 { 3091 SSL_CTX_callback_ctrl(ctx, SSL_CTRL_SET_MSG_CALLBACK, (void (*)(void))cb); 3092 } 3093 void SSL_set_msg_callback(SSL *ssl, void (*cb)(int write_p, int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg)) 3094 { 3095 SSL_callback_ctrl(ssl, SSL_CTRL_SET_MSG_CALLBACK, (void (*)(void))cb); 3096 } 3097 3098 void SSL_CTX_set_keylog_bio(SSL_CTX *ctx, BIO *keylog_bio) 3099 { 3100 if (ctx->keylog_bio != NULL) 3101 BIO_free(ctx->keylog_bio); 3102 ctx->keylog_bio = keylog_bio; 3103 } 3104 3105 static int cbb_add_hex(CBB *cbb, const uint8_t *in, size_t in_len) 3106 { 3107 static const char hextable[] = "0123456789abcdef"; 3108 uint8_t *out; 3109 size_t i; 3110 3111 if (!CBB_add_space(cbb, &out, in_len * 2)) 3112 { 3113 return 0; 3114 } 3115 3116 for (i = 0; i < in_len; i++) 3117 { 3118 *(out++) = (uint8_t)hextable[in[i] >> 4]; 3119 *(out++) = (uint8_t)hextable[in[i] & 0xf]; 3120 } 3121 return 1; 3122 } 3123 3124 int ssl_ctx_log_rsa_client_key_exchange(SSL_CTX *ctx, 3125 const uint8_t *encrypted_premaster, size_t encrypted_premaster_len, 3126 const uint8_t *premaster, size_t premaster_len) 3127 { 3128 BIO *bio = ctx->keylog_bio; 3129 CBB cbb; 3130 uint8_t *out; 3131 size_t out_len; 3132 int ret; 3133 3134 if (bio == NULL) 3135 { 3136 return 1; 3137 } 3138 3139 if (encrypted_premaster_len < 8) 3140 { 3141 OPENSSL_PUT_ERROR(SSL, ssl_ctx_log_rsa_client_key_exchange, ERR_R_INTERNAL_ERROR); 3142 return 0; 3143 } 3144 3145 if (!CBB_init(&cbb, 4 + 16 + 1 + premaster_len*2 + 1)) 3146 { 3147 return 0; 3148 } 3149 if (!CBB_add_bytes(&cbb, (const uint8_t*)"RSA ", 4) || 3150 /* Only the first 8 bytes of the encrypted premaster secret are 3151 * logged. */ 3152 !cbb_add_hex(&cbb, encrypted_premaster, 8) || 3153 !CBB_add_bytes(&cbb, (const uint8_t*)" ", 1) || 3154 !cbb_add_hex(&cbb, premaster, premaster_len) || 3155 !CBB_add_bytes(&cbb, (const uint8_t*)"\n", 1) || 3156 !CBB_finish(&cbb, &out, &out_len)) 3157 { 3158 CBB_cleanup(&cbb); 3159 return 0; 3160 } 3161 3162 CRYPTO_w_lock(CRYPTO_LOCK_SSL_CTX); 3163 ret = BIO_write(bio, out, out_len) >= 0 && BIO_flush(bio); 3164 CRYPTO_w_unlock(CRYPTO_LOCK_SSL_CTX); 3165 3166 OPENSSL_free(out); 3167 return ret; 3168 } 3169 3170 int ssl_ctx_log_master_secret(SSL_CTX *ctx, 3171 const uint8_t *client_random, size_t client_random_len, 3172 const uint8_t *master, size_t master_len) 3173 { 3174 BIO *bio = ctx->keylog_bio; 3175 CBB cbb; 3176 uint8_t *out; 3177 size_t out_len; 3178 int ret; 3179 3180 if (bio == NULL) 3181 { 3182 return 1; 3183 } 3184 3185 if (client_random_len != 32) 3186 { 3187 OPENSSL_PUT_ERROR(SSL, ssl_ctx_log_master_secret, ERR_R_INTERNAL_ERROR); 3188 return 0; 3189 } 3190 3191 if (!CBB_init(&cbb, 14 + 64 + 1 + master_len*2 + 1)) 3192 { 3193 return 0; 3194 } 3195 if (!CBB_add_bytes(&cbb, (const uint8_t*)"CLIENT_RANDOM ", 14) || 3196 !cbb_add_hex(&cbb, client_random, 32) || 3197 !CBB_add_bytes(&cbb, (const uint8_t*)" ", 1) || 3198 !cbb_add_hex(&cbb, master, master_len) || 3199 !CBB_add_bytes(&cbb, (const uint8_t*)"\n", 1) || 3200 !CBB_finish(&cbb, &out, &out_len)) 3201 { 3202 CBB_cleanup(&cbb); 3203 return 0; 3204 } 3205 3206 CRYPTO_w_lock(CRYPTO_LOCK_SSL_CTX); 3207 ret = BIO_write(bio, out, out_len) >= 0 && BIO_flush(bio); 3208 CRYPTO_w_unlock(CRYPTO_LOCK_SSL_CTX); 3209 3210 OPENSSL_free(out); 3211 return ret; 3212 } 3213 3214 int SSL_cutthrough_complete(const SSL *s) 3215 { 3216 return (!s->server && /* cutthrough only applies to clients */ 3217 !s->hit && /* full-handshake */ 3218 s->version >= SSL3_VERSION && 3219 s->s3->in_read_app_data == 0 && /* cutthrough only applies to write() */ 3220 (SSL_get_mode((SSL*)s) & SSL_MODE_HANDSHAKE_CUTTHROUGH) && /* cutthrough enabled */ 3221 ssl3_can_cutthrough(s) && /* cutthrough allowed */ 3222 s->s3->previous_server_finished_len == 0 && /* not a renegotiation handshake */ 3223 (s->state == SSL3_ST_CR_SESSION_TICKET_A || /* ready to write app-data*/ 3224 s->state == SSL3_ST_CR_CHANGE || 3225 s->state == SSL3_ST_CR_FINISHED_A)); 3226 } 3227 3228 void SSL_get_structure_sizes(size_t* ssl_size, size_t* ssl_ctx_size, 3229 size_t* ssl_session_size) 3230 { 3231 *ssl_size = sizeof(SSL); 3232 *ssl_ctx_size = sizeof(SSL_CTX); 3233 *ssl_session_size = sizeof(SSL_SESSION); 3234 } 3235 3236 int ssl3_can_cutthrough(const SSL *s) 3237 { 3238 const SSL_CIPHER *c; 3239 3240 /* require a strong enough cipher */ 3241 if (SSL_get_cipher_bits(s, NULL) < 128) 3242 return 0; 3243 3244 /* require ALPN or NPN extension */ 3245 if (!s->s3->alpn_selected && !s->s3->next_proto_neg_seen) 3246 { 3247 return 0; 3248 } 3249 3250 /* require a forward-secret cipher */ 3251 c = SSL_get_current_cipher(s); 3252 if (!c || (c->algorithm_mkey != SSL_kEDH && 3253 c->algorithm_mkey != SSL_kEECDH)) 3254 { 3255 return 0; 3256 } 3257 3258 return 1; 3259 } 3260 3261 /* ssl_get_max_version returns the maximum SSL/TLS version number supported by 3262 * |s|, or zero if all versions are disabled. */ 3263 int ssl_get_max_version(const SSL *s) 3264 { 3265 /* Only one version supported for DTLS. */ 3266 if (s->version == DTLS1_VERSION) 3267 return DTLS1_VERSION; 3268 3269 if (!(s->options & SSL_OP_NO_TLSv1_2)) 3270 return TLS1_2_VERSION; 3271 if (!(s->options & SSL_OP_NO_TLSv1_1)) 3272 return TLS1_1_VERSION; 3273 if (!(s->options & SSL_OP_NO_TLSv1)) 3274 return TLS1_VERSION; 3275 if (!(s->options & SSL_OP_NO_SSLv3)) 3276 return SSL3_VERSION; 3277 if (!(s->options & SSL_OP_NO_SSLv2)) 3278 return SSL2_VERSION; 3279 return 0; 3280 } 3281 3282 /* Allocates new EVP_MD_CTX and sets pointer to it into given pointer 3283 * vairable, freeing EVP_MD_CTX previously stored in that variable, if 3284 * any. If EVP_MD pointer is passed, initializes ctx with this md 3285 * Returns newly allocated ctx; 3286 */ 3287 3288 EVP_MD_CTX *ssl_replace_hash(EVP_MD_CTX **hash,const EVP_MD *md) 3289 { 3290 ssl_clear_hash_ctx(hash); 3291 *hash = EVP_MD_CTX_create(); 3292 if (md) EVP_DigestInit_ex(*hash,md,NULL); 3293 return *hash; 3294 } 3295 void ssl_clear_hash_ctx(EVP_MD_CTX **hash) 3296 { 3297 3298 if (*hash) EVP_MD_CTX_destroy(*hash); 3299 *hash=NULL; 3300 } 3301 3302 void SSL_set_debug(SSL *s, int debug) 3303 { 3304 s->debug = debug; 3305 } 3306 3307 int SSL_cache_hit(SSL *s) 3308 { 3309 return s->hit; 3310 } 3311 3312 int SSL_is_server(SSL *s) 3313 { 3314 return s->server; 3315 } 3316