• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
2  * All rights reserved.
3  *
4  * This package is an SSL implementation written
5  * by Eric Young (eay@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@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@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@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@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@cryptsoft.com).  This product includes software written by Tim
107  * Hudson (tjh@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 
SSL_clear(SSL * s)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 */
SSL_CTX_set_ssl_version(SSL_CTX * ctx,const SSL_METHOD * meth)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 
SSL_new(SSL_CTX * ctx)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 
SSL_CTX_set_session_id_context(SSL_CTX * ctx,const unsigned char * sid_ctx,unsigned int sid_ctx_len)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 
SSL_set_session_id_context(SSL * ssl,const unsigned char * sid_ctx,unsigned int sid_ctx_len)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 
SSL_CTX_set_generate_session_id(SSL_CTX * ctx,GEN_SESSION_CB cb)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 
SSL_set_generate_session_id(SSL * ssl,GEN_SESSION_CB cb)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 
SSL_has_matching_session_id(const SSL * ssl,const unsigned char * id,unsigned int id_len)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 
SSL_CTX_set_purpose(SSL_CTX * s,int purpose)502 int SSL_CTX_set_purpose(SSL_CTX *s, int purpose)
503 	{
504 	return X509_VERIFY_PARAM_set_purpose(s->param, purpose);
505 	}
506 
SSL_set_purpose(SSL * s,int purpose)507 int SSL_set_purpose(SSL *s, int purpose)
508 	{
509 	return X509_VERIFY_PARAM_set_purpose(s->param, purpose);
510 	}
511 
SSL_CTX_set_trust(SSL_CTX * s,int trust)512 int SSL_CTX_set_trust(SSL_CTX *s, int trust)
513 	{
514 	return X509_VERIFY_PARAM_set_trust(s->param, trust);
515 	}
516 
SSL_set_trust(SSL * s,int trust)517 int SSL_set_trust(SSL *s, int trust)
518 	{
519 	return X509_VERIFY_PARAM_set_trust(s->param, trust);
520 	}
521 
SSL_CTX_set1_param(SSL_CTX * ctx,X509_VERIFY_PARAM * vpm)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 
SSL_set1_param(SSL * ssl,X509_VERIFY_PARAM * vpm)527 int SSL_set1_param(SSL *ssl, X509_VERIFY_PARAM *vpm)
528 	{
529 	return X509_VERIFY_PARAM_set1(ssl->param, vpm);
530 	}
531 
ssl_cipher_preference_list_free(struct ssl_cipher_preference_list_st * cipher_list)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*
ssl_cipher_preference_list_dup(struct ssl_cipher_preference_list_st * cipher_list)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*
ssl_cipher_preference_list_from_ciphers(STACK_OF (SSL_CIPHER)* ciphers)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 
SSL_CTX_get0_param(SSL_CTX * ctx)596 X509_VERIFY_PARAM *SSL_CTX_get0_param(SSL_CTX *ctx)
597 	{
598 	return ctx->param;
599 	}
600 
SSL_get0_param(SSL * ssl)601 X509_VERIFY_PARAM *SSL_get0_param(SSL *ssl)
602 	{
603 	return ssl->param;
604 	}
605 
SSL_certs_clear(SSL * s)606 void SSL_certs_clear(SSL *s)
607 	{
608 	ssl_cert_clear_certs(s->cert);
609 	}
610 
SSL_free(SSL * s)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 
SSL_set_bio(SSL * s,BIO * rbio,BIO * wbio)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 
SSL_get_rbio(const SSL * s)726 BIO *SSL_get_rbio(const SSL *s)
727 	{ return(s->rbio); }
728 
SSL_get_wbio(const SSL * s)729 BIO *SSL_get_wbio(const SSL *s)
730 	{ return(s->wbio); }
731 
SSL_get_fd(const SSL * s)732 int SSL_get_fd(const SSL *s)
733 	{
734 	return(SSL_get_rfd(s));
735 	}
736 
SSL_get_rfd(const SSL * s)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 
SSL_get_wfd(const SSL * s)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
SSL_set_fd(SSL * s,int fd)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 
SSL_set_wfd(SSL * s,int fd)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 
SSL_set_rfd(SSL * s,int fd)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' */
SSL_get_finished(const SSL * s,void * buf,size_t count)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' */
SSL_get_peer_finished(const SSL * s,void * buf,size_t count)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 
SSL_get_verify_mode(const SSL * s)864 int SSL_get_verify_mode(const SSL *s)
865 	{
866 	return(s->verify_mode);
867 	}
868 
SSL_get_verify_depth(const SSL * s)869 int SSL_get_verify_depth(const SSL *s)
870 	{
871 	return X509_VERIFY_PARAM_get_depth(s->param);
872 	}
873 
SSL_get_verify_callback(const SSL * s)874 int (*SSL_get_verify_callback(const SSL *s))(int,X509_STORE_CTX *)
875 	{
876 	return(s->verify_callback);
877 	}
878 
SSL_CTX_get_verify_mode(const SSL_CTX * ctx)879 int SSL_CTX_get_verify_mode(const SSL_CTX *ctx)
880 	{
881 	return(ctx->verify_mode);
882 	}
883 
SSL_CTX_get_verify_depth(const SSL_CTX * ctx)884 int SSL_CTX_get_verify_depth(const SSL_CTX *ctx)
885 	{
886 	return X509_VERIFY_PARAM_get_depth(ctx->param);
887 	}
888 
SSL_CTX_get_verify_callback(const SSL_CTX * ctx)889 int (*SSL_CTX_get_verify_callback(const SSL_CTX *ctx))(int,X509_STORE_CTX *)
890 	{
891 	return(ctx->default_verify_callback);
892 	}
893 
SSL_set_verify(SSL * s,int mode,int (* callback)(int ok,X509_STORE_CTX * ctx))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 
SSL_set_verify_depth(SSL * s,int depth)902 void SSL_set_verify_depth(SSL *s,int depth)
903 	{
904 	X509_VERIFY_PARAM_set_depth(s->param, depth);
905 	}
906 
SSL_set_read_ahead(SSL * s,int yes)907 void SSL_set_read_ahead(SSL *s,int yes)
908 	{
909 	s->read_ahead=yes;
910 	}
911 
SSL_get_read_ahead(const SSL * s)912 int SSL_get_read_ahead(const SSL *s)
913 	{
914 	return(s->read_ahead);
915 	}
916 
SSL_pending(const SSL * s)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 
SSL_get_peer_certificate(const SSL * s)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 
STACK_OF(X509)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 */
SSL_CTX_check_private_key(const SSL_CTX * ctx)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 */
SSL_check_private_key(const SSL * ssl)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 
SSL_accept(SSL * s)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 
SSL_connect(SSL * s)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 
SSL_get_default_timeout(const SSL * s)1022 long SSL_get_default_timeout(const SSL *s)
1023 	{
1024 	return SSL_DEFAULT_SESSION_TIMEOUT;
1025 	}
1026 
SSL_read(SSL * s,void * buf,int num)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 
SSL_peek(SSL * s,void * buf,int num)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 
SSL_write(SSL * s,const void * buf,int num)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 
SSL_shutdown(SSL * s)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 
SSL_renegotiate(SSL * s)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 
SSL_renegotiate_abbreviated(SSL * s)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 
SSL_renegotiate_pending(SSL * s)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 
SSL_ctrl(SSL * s,int cmd,long larg,void * parg)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 
SSL_callback_ctrl(SSL * s,int cmd,void (* fp)(void))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 
LHASH_OF(SSL_SESSION)1208 LHASH_OF(SSL_SESSION) *SSL_CTX_sessions(SSL_CTX *ctx)
1209 	{
1210 	return ctx->sessions;
1211 	}
1212 
SSL_CTX_ctrl(SSL_CTX * ctx,int cmd,long larg,void * parg)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 
SSL_CTX_callback_ctrl(SSL_CTX * ctx,int cmd,void (* fp)(void))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 
ssl_cipher_id_cmp(const void * in_a,const void * in_b)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 
ssl_cipher_ptr_id_cmp(const SSL_CIPHER ** ap,const SSL_CIPHER ** bp)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 */
STACK_OF(SSL_CIPHER)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 */
STACK_OF(SSL_CIPHER)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() */
SSL_get_cipher_list(const SSL * s,int n)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 */
SSL_CTX_set_cipher_list(SSL_CTX * ctx,const char * str)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 
SSL_CTX_set_cipher_list_tls11(SSL_CTX * ctx,const char * str)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 */
SSL_set_cipher_list(SSL * s,const char * str)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 */
SSL_get_shared_ciphers(const SSL * s,char * buf,int len)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 
ssl_cipher_list_to_bytes(SSL * s,STACK_OF (SSL_CIPHER)* sk,unsigned char * p)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 
STACK_OF(SSL_CIPHER)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 
SSL_get_servername(const SSL * s,const int type)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 
SSL_get_servername_type(const SSL * s)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 
SSL_CTX_enable_signed_cert_timestamps(SSL_CTX * ctx)1664 void SSL_CTX_enable_signed_cert_timestamps(SSL_CTX *ctx)
1665 	{
1666 	ctx->signed_cert_timestamps_enabled = 1;
1667 	}
1668 
SSL_enable_signed_cert_timestamps(SSL * ssl)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 
SSL_CTX_enable_ocsp_stapling(SSL_CTX * ctx)1679 void SSL_CTX_enable_ocsp_stapling(SSL_CTX *ctx)
1680 	{
1681 	ctx->ocsp_stapling_enabled = 1;
1682 	}
1683 
SSL_enable_ocsp_stapling(SSL * ssl)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 
SSL_get0_signed_cert_timestamp_list(const SSL * ssl,uint8_t ** out,size_t * out_len)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 
SSL_get0_ocsp_response(const SSL * ssl,uint8_t ** out,size_t * out_len)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  */
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)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  */
SSL_get0_next_proto_negotiated(const SSL * s,const uint8_t ** data,unsigned * len)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. */
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)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  */
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)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. */
SSL_CTX_set_alpn_protos(SSL_CTX * ctx,const unsigned char * protos,unsigned protos_len)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. */
SSL_set_alpn_protos(SSL * ssl,const unsigned char * protos,unsigned protos_len)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. */
SSL_CTX_set_alpn_select_cb(SSL_CTX * ctx,int (* cb)(SSL * ssl,const unsigned char ** out,unsigned char * outlen,const unsigned char * in,unsigned int inlen,void * arg),void * arg)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. */
SSL_get0_alpn_selected(const SSL * ssl,const unsigned char ** data,unsigned * len)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 
SSL_export_keying_material(SSL * s,unsigned char * out,size_t olen,const char * label,size_t llen,const unsigned char * p,size_t plen,int use_context)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 
ssl_session_hash(const SSL_SESSION * a)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. */
ssl_session_cmp(const SSL_SESSION * a,const SSL_SESSION * b)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 
SSL_CTX_new(const SSL_METHOD * meth)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 
SSL_CTX_free(SSL_CTX * a)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 
SSL_CTX_set_default_passwd_cb(SSL_CTX * ctx,pem_password_cb * cb)2143 void SSL_CTX_set_default_passwd_cb(SSL_CTX *ctx, pem_password_cb *cb)
2144 	{
2145 	ctx->default_passwd_callback=cb;
2146 	}
2147 
SSL_CTX_set_default_passwd_cb_userdata(SSL_CTX * ctx,void * u)2148 void SSL_CTX_set_default_passwd_cb_userdata(SSL_CTX *ctx,void *u)
2149 	{
2150 	ctx->default_passwd_callback_userdata=u;
2151 	}
2152 
SSL_CTX_set_cert_verify_callback(SSL_CTX * ctx,int (* cb)(X509_STORE_CTX *,void *),void * arg)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 
SSL_CTX_set_verify(SSL_CTX * ctx,int mode,int (* cb)(int,X509_STORE_CTX *))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 
SSL_CTX_set_verify_depth(SSL_CTX * ctx,int depth)2165 void SSL_CTX_set_verify_depth(SSL_CTX *ctx,int depth)
2166 	{
2167 	X509_VERIFY_PARAM_set_depth(ctx->param, depth);
2168 	}
2169 
SSL_CTX_set_cert_cb(SSL_CTX * c,int (* cb)(SSL * ssl,void * arg),void * arg)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 
SSL_set_cert_cb(SSL * s,int (* cb)(SSL * ssl,void * arg),void * arg)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 
ssl_set_cert_masks(CERT * c,const SSL_CIPHER * cipher)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 
ssl_check_srvr_ecc_cert_and_alg(X509 * x,SSL * s)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 
ssl_get_server_cert_index(const SSL * s)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 
ssl_get_server_send_pkey(const SSL * s)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 
ssl_get_sign_pkey(SSL * s,const SSL_CIPHER * cipher,const EVP_MD ** pmd)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 
ssl_update_cache(SSL * s,int mode)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 
SSL_CTX_get_ssl_method(SSL_CTX * ctx)2393 const SSL_METHOD *SSL_CTX_get_ssl_method(SSL_CTX *ctx)
2394 	{
2395 	return ctx->method;
2396 	}
2397 
SSL_get_ssl_method(SSL * s)2398 const SSL_METHOD *SSL_get_ssl_method(SSL *s)
2399 	{
2400 	return(s->method);
2401 	}
2402 
SSL_set_ssl_method(SSL * s,const SSL_METHOD * meth)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 
SSL_get_error(const SSL * s,int i)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 
SSL_do_handshake(SSL * s)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 */
SSL_set_accept_state(SSL * s)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 
SSL_set_connect_state(SSL * s)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 
ssl_undefined_function(SSL * s)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 
ssl_undefined_void_function(void)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 
ssl_undefined_const_function(const SSL * s)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 
ssl_bad_method(int ver)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 
ssl_get_version(int version)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 
SSL_get_version(const SSL * s)2612 const char *SSL_get_version(const SSL *s)
2613 	{
2614 	return ssl_get_version(s->version);
2615 	}
2616 
SSL_SESSION_get_version(const SSL_SESSION * sess)2617 const char *SSL_SESSION_get_version(const SSL_SESSION *sess)
2618 	{
2619 	return ssl_get_version(sess->ssl_version);
2620 	}
2621 
ssl_clear_cipher_ctx(SSL * s)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 
SSL_get_certificate(const SSL * s)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 
SSL_get_privatekey(const SSL * s)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 
SSL_CTX_get0_certificate(const SSL_CTX * ctx)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 
SSL_CTX_get0_privatekey(const SSL_CTX * ctx)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 
SSL_get_current_cipher(const SSL * s)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 	}
SSL_get_current_compression(SSL * s)2688 const void *SSL_get_current_compression(SSL *s)
2689 	{
2690 	return NULL;
2691 	}
SSL_get_current_expansion(SSL * s)2692 const void *SSL_get_current_expansion(SSL *s)
2693 	{
2694 	return NULL;
2695 	}
2696 
ssl_init_wbio_buffer(SSL * s,int push)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 
ssl_free_wbio_buffer(SSL * s)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 
SSL_CTX_set_quiet_shutdown(SSL_CTX * ctx,int mode)2749 void SSL_CTX_set_quiet_shutdown(SSL_CTX *ctx,int mode)
2750 	{
2751 	ctx->quiet_shutdown=mode;
2752 	}
2753 
SSL_CTX_get_quiet_shutdown(const SSL_CTX * ctx)2754 int SSL_CTX_get_quiet_shutdown(const SSL_CTX *ctx)
2755 	{
2756 	return(ctx->quiet_shutdown);
2757 	}
2758 
SSL_set_quiet_shutdown(SSL * s,int mode)2759 void SSL_set_quiet_shutdown(SSL *s,int mode)
2760 	{
2761 	s->quiet_shutdown=mode;
2762 	}
2763 
SSL_get_quiet_shutdown(const SSL * s)2764 int SSL_get_quiet_shutdown(const SSL *s)
2765 	{
2766 	return(s->quiet_shutdown);
2767 	}
2768 
SSL_set_shutdown(SSL * s,int mode)2769 void SSL_set_shutdown(SSL *s,int mode)
2770 	{
2771 	s->shutdown=mode;
2772 	}
2773 
SSL_get_shutdown(const SSL * s)2774 int SSL_get_shutdown(const SSL *s)
2775 	{
2776 	return(s->shutdown);
2777 	}
2778 
SSL_version(const SSL * s)2779 int SSL_version(const SSL *s)
2780 	{
2781 	return(s->version);
2782 	}
2783 
SSL_get_SSL_CTX(const SSL * ssl)2784 SSL_CTX *SSL_get_SSL_CTX(const SSL *ssl)
2785 	{
2786 	return(ssl->ctx);
2787 	}
2788 
SSL_set_SSL_CTX(SSL * ssl,SSL_CTX * ctx)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
SSL_CTX_set_default_verify_paths(SSL_CTX * ctx)2811 int SSL_CTX_set_default_verify_paths(SSL_CTX *ctx)
2812 	{
2813 	return(X509_STORE_set_default_paths(ctx->cert_store));
2814 	}
2815 
SSL_CTX_load_verify_locations(SSL_CTX * ctx,const char * CAfile,const char * CApath)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 
SSL_set_info_callback(SSL * ssl,void (* cb)(const SSL * ssl,int type,int val))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.  */
SSL_get_info_callback(const SSL * ssl)2831 void (*SSL_get_info_callback(const SSL *ssl))(const SSL * /*ssl*/,int /*type*/,int /*val*/)
2832 	{
2833 	return ssl->info_callback;
2834 	}
2835 
SSL_state(const SSL * ssl)2836 int SSL_state(const SSL *ssl)
2837 	{
2838 	return(ssl->state);
2839 	}
2840 
SSL_set_state(SSL * ssl,int state)2841 void SSL_set_state(SSL *ssl, int state)
2842 	{
2843 	ssl->state = state;
2844 	}
2845 
SSL_set_verify_result(SSL * ssl,long arg)2846 void SSL_set_verify_result(SSL *ssl,long arg)
2847 	{
2848 	ssl->verify_result=arg;
2849 	}
2850 
SSL_get_verify_result(const SSL * ssl)2851 long SSL_get_verify_result(const SSL *ssl)
2852 	{
2853 	return(ssl->verify_result);
2854 	}
2855 
SSL_get_ex_new_index(long argl,void * argp,CRYPTO_EX_new * new_func,CRYPTO_EX_dup * dup_func,CRYPTO_EX_free * free_func)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 
SSL_set_ex_data(SSL * s,int idx,void * arg)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 
SSL_get_ex_data(const SSL * s,int idx)2868 void *SSL_get_ex_data(const SSL *s,int idx)
2869 	{
2870 	return(CRYPTO_get_ex_data(&s->ex_data,idx));
2871 	}
2872 
SSL_CTX_get_ex_new_index(long argl,void * argp,CRYPTO_EX_new * new_func,CRYPTO_EX_dup * dup_func,CRYPTO_EX_free * free_func)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 
SSL_CTX_set_ex_data(SSL_CTX * s,int idx,void * arg)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 
SSL_CTX_get_ex_data(const SSL_CTX * s,int idx)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 
ssl_ok(SSL * s)2890 int ssl_ok(SSL *s)
2891 	{
2892 	return(1);
2893 	}
2894 
SSL_CTX_get_cert_store(const SSL_CTX * ctx)2895 X509_STORE *SSL_CTX_get_cert_store(const SSL_CTX *ctx)
2896 	{
2897 	return(ctx->cert_store);
2898 	}
2899 
SSL_CTX_set_cert_store(SSL_CTX * ctx,X509_STORE * store)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 
SSL_want(const SSL * s)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 
SSL_CTX_set_tmp_rsa_callback(SSL_CTX * ctx,RSA * (* cb)(SSL * ssl,int is_export,int keylength))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 
SSL_set_tmp_rsa_callback(SSL * ssl,RSA * (* cb)(SSL * ssl,int is_export,int keylength))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 
cb(SSL * ssl,int is_export,int keylength)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 
SSL_CTX_set_tmp_dh_callback(SSL_CTX * ctx,DH * (* dh)(SSL * ssl,int is_export,int keylength))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 
SSL_set_tmp_dh_callback(SSL * ssl,DH * (* dh)(SSL * ssl,int is_export,int keylength))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 
SSL_CTX_set_tmp_ecdh_callback(SSL_CTX * ctx,EC_KEY * (* ecdh)(SSL * ssl,int is_export,int keylength))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 
SSL_set_tmp_ecdh_callback(SSL * ssl,EC_KEY * (* ecdh)(SSL * ssl,int is_export,int keylength))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 
SSL_CTX_use_psk_identity_hint(SSL_CTX * ctx,const char * identity_hint)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 
SSL_use_psk_identity_hint(SSL * s,const char * identity_hint)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 
SSL_get_psk_identity_hint(const SSL * s)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 
SSL_get_psk_identity(const SSL * s)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 
SSL_set_psk_client_callback(SSL * s,unsigned int (* cb)(SSL * ssl,const char * hint,char * identity,unsigned int max_identity_len,unsigned char * psk,unsigned int max_psk_len))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 
SSL_CTX_set_psk_client_callback(SSL_CTX * ctx,unsigned int (* cb)(SSL * ssl,const char * hint,char * identity,unsigned int max_identity_len,unsigned char * psk,unsigned int max_psk_len))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 
SSL_set_psk_server_callback(SSL * s,unsigned int (* cb)(SSL * ssl,const char * identity,unsigned char * psk,unsigned int max_psk_len))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 
SSL_CTX_set_psk_server_callback(SSL_CTX * ctx,unsigned int (* cb)(SSL * ssl,const char * identity,unsigned char * psk,unsigned int max_psk_len))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 
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))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 	}
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))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 
SSL_CTX_set_keylog_bio(SSL_CTX * ctx,BIO * keylog_bio)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 
cbb_add_hex(CBB * cbb,const uint8_t * in,size_t in_len)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 
ssl_ctx_log_rsa_client_key_exchange(SSL_CTX * ctx,const uint8_t * encrypted_premaster,size_t encrypted_premaster_len,const uint8_t * premaster,size_t premaster_len)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 
ssl_ctx_log_master_secret(SSL_CTX * ctx,const uint8_t * client_random,size_t client_random_len,const uint8_t * master,size_t master_len)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 
SSL_cutthrough_complete(const SSL * s)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 
SSL_get_structure_sizes(size_t * ssl_size,size_t * ssl_ctx_size,size_t * ssl_session_size)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 
ssl3_can_cutthrough(const SSL * s)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. */
ssl_get_max_version(const SSL * s)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 
ssl_replace_hash(EVP_MD_CTX ** hash,const EVP_MD * md)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 }
ssl_clear_hash_ctx(EVP_MD_CTX ** hash)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 
SSL_set_debug(SSL * s,int debug)3302 void SSL_set_debug(SSL *s, int debug)
3303 	{
3304 	s->debug = debug;
3305 	}
3306 
SSL_cache_hit(SSL * s)3307 int SSL_cache_hit(SSL *s)
3308 	{
3309 	return s->hit;
3310 	}
3311 
SSL_is_server(SSL * s)3312 int SSL_is_server(SSL *s)
3313 	{
3314 	return s->server;
3315 	}
3316