GCC Code Coverage Report
Directory: ./ Exec Total Coverage
File: lib/libssl/ssl_lib.c Lines: 677 1205 56.2 %
Date: 2017-11-07 Branches: 262 661 39.6 %

Line Branch Exec Source
1
/* $OpenBSD: ssl_lib.c,v 1.170 2017/08/30 16:24:21 jsing Exp $ */
2
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3
 * All rights reserved.
4
 *
5
 * This package is an SSL implementation written
6
 * by Eric Young (eay@cryptsoft.com).
7
 * The implementation was written so as to conform with Netscapes SSL.
8
 *
9
 * This library is free for commercial and non-commercial use as long as
10
 * the following conditions are aheared to.  The following conditions
11
 * apply to all code found in this distribution, be it the RC4, RSA,
12
 * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
13
 * included with this distribution is covered by the same copyright terms
14
 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15
 *
16
 * Copyright remains Eric Young's, and as such any Copyright notices in
17
 * the code are not to be removed.
18
 * If this package is used in a product, Eric Young should be given attribution
19
 * as the author of the parts of the library used.
20
 * This can be in the form of a textual message at program startup or
21
 * in documentation (online or textual) provided with the package.
22
 *
23
 * Redistribution and use in source and binary forms, with or without
24
 * modification, are permitted provided that the following conditions
25
 * are met:
26
 * 1. Redistributions of source code must retain the copyright
27
 *    notice, this list of conditions and the following disclaimer.
28
 * 2. Redistributions in binary form must reproduce the above copyright
29
 *    notice, this list of conditions and the following disclaimer in the
30
 *    documentation and/or other materials provided with the distribution.
31
 * 3. All advertising materials mentioning features or use of this software
32
 *    must display the following acknowledgement:
33
 *    "This product includes cryptographic software written by
34
 *     Eric Young (eay@cryptsoft.com)"
35
 *    The word 'cryptographic' can be left out if the rouines from the library
36
 *    being used are not cryptographic related :-).
37
 * 4. If you include any Windows specific code (or a derivative thereof) from
38
 *    the apps directory (application code) you must include an acknowledgement:
39
 *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40
 *
41
 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
44
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
45
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
46
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
47
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
49
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
50
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51
 * SUCH DAMAGE.
52
 *
53
 * The licence and distribution terms for any publically available version or
54
 * derivative of this code cannot be changed.  i.e. this code cannot simply be
55
 * copied and put under another distribution licence
56
 * [including the GNU Public Licence.]
57
 */
58
/* ====================================================================
59
 * Copyright (c) 1998-2007 The OpenSSL Project.  All rights reserved.
60
 *
61
 * Redistribution and use in source and binary forms, with or without
62
 * modification, are permitted provided that the following conditions
63
 * are met:
64
 *
65
 * 1. Redistributions of source code must retain the above copyright
66
 *    notice, this list of conditions and the following disclaimer.
67
 *
68
 * 2. Redistributions in binary form must reproduce the above copyright
69
 *    notice, this list of conditions and the following disclaimer in
70
 *    the documentation and/or other materials provided with the
71
 *    distribution.
72
 *
73
 * 3. All advertising materials mentioning features or use of this
74
 *    software must display the following acknowledgment:
75
 *    "This product includes software developed by the OpenSSL Project
76
 *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
77
 *
78
 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
79
 *    endorse or promote products derived from this software without
80
 *    prior written permission. For written permission, please contact
81
 *    openssl-core@openssl.org.
82
 *
83
 * 5. Products derived from this software may not be called "OpenSSL"
84
 *    nor may "OpenSSL" appear in their names without prior written
85
 *    permission of the OpenSSL Project.
86
 *
87
 * 6. Redistributions of any form whatsoever must retain the following
88
 *    acknowledgment:
89
 *    "This product includes software developed by the OpenSSL Project
90
 *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
91
 *
92
 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
93
 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
94
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
95
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
96
 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
97
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
98
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
99
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
100
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
101
 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
102
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
103
 * OF THE POSSIBILITY OF SUCH DAMAGE.
104
 * ====================================================================
105
 *
106
 * This product includes cryptographic software written by Eric Young
107
 * (eay@cryptsoft.com).  This product includes software written by Tim
108
 * Hudson (tjh@cryptsoft.com).
109
 *
110
 */
111
/* ====================================================================
112
 * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.
113
 * ECC cipher suite support in OpenSSL originally developed by
114
 * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project.
115
 */
116
/* ====================================================================
117
 * Copyright 2005 Nokia. All rights reserved.
118
 *
119
 * The portions of the attached software ("Contribution") is developed by
120
 * Nokia Corporation and is licensed pursuant to the OpenSSL open source
121
 * license.
122
 *
123
 * The Contribution, originally written by Mika Kousa and Pasi Eronen of
124
 * Nokia Corporation, consists of the "PSK" (Pre-Shared Key) ciphersuites
125
 * support (see RFC 4279) to OpenSSL.
126
 *
127
 * No patent licenses or other rights except those expressly stated in
128
 * the OpenSSL open source license shall be deemed granted or received
129
 * expressly, by implication, estoppel, or otherwise.
130
 *
131
 * No assurances are provided by Nokia that the Contribution does not
132
 * infringe the patent or other intellectual property rights of any third
133
 * party or that the license provides you with all the necessary rights
134
 * to make use of the Contribution.
135
 *
136
 * THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. IN
137
 * ADDITION TO THE DISCLAIMERS INCLUDED IN THE LICENSE, NOKIA
138
 * SPECIFICALLY DISCLAIMS ANY LIABILITY FOR CLAIMS BROUGHT BY YOU OR ANY
139
 * OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS OR
140
 * OTHERWISE.
141
 */
142
143
#include <stdio.h>
144
145
#include "ssl_locl.h"
146
147
#include <openssl/bn.h>
148
#include <openssl/dh.h>
149
#include <openssl/lhash.h>
150
#include <openssl/objects.h>
151
#include <openssl/ocsp.h>
152
#include <openssl/x509v3.h>
153
154
#ifndef OPENSSL_NO_ENGINE
155
#include <openssl/engine.h>
156
#endif
157
158
#include "bytestring.h"
159
160
const char *SSL_version_str = OPENSSL_VERSION_TEXT;
161
162
int
163
SSL_clear(SSL *s)
164
{
165
20090
	if (s->method == NULL) {
166
		SSLerror(s, SSL_R_NO_METHOD_SPECIFIED);
167
		return (0);
168
	}
169
170
10045
	if (ssl_clear_bad_session(s)) {
171
		SSL_SESSION_free(s->session);
172
		s->session = NULL;
173
	}
174
175
10045
	s->error = 0;
176
10045
	s->internal->hit = 0;
177
10045
	s->internal->shutdown = 0;
178
179
10045
	if (s->internal->renegotiate) {
180
		SSLerror(s, ERR_R_INTERNAL_ERROR);
181
		return (0);
182
	}
183
184
10045
	s->internal->type = 0;
185
186
10045
	s->version = s->method->internal->version;
187
10045
	s->client_version = s->version;
188
10045
	s->internal->rwstate = SSL_NOTHING;
189
10045
	s->internal->rstate = SSL_ST_READ_HEADER;
190
191
10045
	BUF_MEM_free(s->internal->init_buf);
192
10045
	s->internal->init_buf = NULL;
193
194
10045
	ssl_clear_cipher_ctx(s);
195
10045
	ssl_clear_hash_ctx(&s->read_hash);
196
10045
	ssl_clear_hash_ctx(&s->internal->write_hash);
197
198
10045
	s->internal->first_packet = 0;
199
200
	/*
201
	 * Check to see if we were changed into a different method, if
202
	 * so, revert back if we are not doing session-id reuse.
203
	 */
204

13165
	if (!s->internal->in_handshake && (s->session == NULL) &&
205
1560
	    (s->method != s->ctx->method)) {
206
		s->method->internal->ssl_free(s);
207
		s->method = s->ctx->method;
208
		if (!s->method->internal->ssl_new(s))
209
			return (0);
210
	} else
211
10045
		s->method->internal->ssl_clear(s);
212
213
10045
	S3I(s)->hs.state = SSL_ST_BEFORE|((s->server) ? SSL_ST_ACCEPT : SSL_ST_CONNECT);
214
215
10045
	return (1);
216
10045
}
217
218
/* Used to change an SSL_CTXs default SSL method type */
219
int
220
SSL_CTX_set_ssl_version(SSL_CTX *ctx, const SSL_METHOD *meth)
221
{
222
	STACK_OF(SSL_CIPHER)	*sk;
223
224
	ctx->method = meth;
225
226
	sk = ssl_create_cipher_list(ctx->method, &(ctx->cipher_list),
227
	    &(ctx->internal->cipher_list_by_id), SSL_DEFAULT_CIPHER_LIST);
228
	if ((sk == NULL) || (sk_SSL_CIPHER_num(sk) <= 0)) {
229
		SSLerrorx(SSL_R_SSL_LIBRARY_HAS_NO_CIPHERS);
230
		return (0);
231
	}
232
	return (1);
233
}
234
235
SSL *
236
SSL_new(SSL_CTX *ctx)
237
{
238
	SSL	*s;
239
240
3120
	if (ctx == NULL) {
241
		SSLerrorx(SSL_R_NULL_SSL_CTX);
242
		return (NULL);
243
	}
244
1560
	if (ctx->method == NULL) {
245
		SSLerrorx(SSL_R_SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION);
246
		return (NULL);
247
	}
248
249
1560
	if ((s = calloc(1, sizeof(*s))) == NULL) {
250
		SSLerrorx(ERR_R_MALLOC_FAILURE);
251
		return (NULL);
252
	}
253
1560
	if ((s->internal = calloc(1, sizeof(*s->internal))) == NULL) {
254
		free(s);
255
		SSLerrorx(ERR_R_MALLOC_FAILURE);
256
		return (NULL);
257
	}
258
259
1560
	s->internal->min_version = ctx->internal->min_version;
260
1560
	s->internal->max_version = ctx->internal->max_version;
261
262
1560
	s->internal->options = ctx->internal->options;
263
1560
	s->internal->mode = ctx->internal->mode;
264
1560
	s->internal->max_cert_list = ctx->internal->max_cert_list;
265
266
1560
	if (ctx->internal->cert != NULL) {
267
		/*
268
		 * Earlier library versions used to copy the pointer to
269
		 * the CERT, not its contents; only when setting new
270
		 * parameters for the per-SSL copy, ssl_cert_new would be
271
		 * called (and the direct reference to the per-SSL_CTX
272
		 * settings would be lost, but those still were indirectly
273
		 * accessed for various purposes, and for that reason they
274
		 * used to be known as s->ctx->default_cert).
275
		 * Now we don't look at the SSL_CTX's CERT after having
276
		 * duplicated it once.
277
		*/
278
1560
		s->cert = ssl_cert_dup(ctx->internal->cert);
279
1560
		if (s->cert == NULL)
280
			goto err;
281
	} else
282
		s->cert=NULL; /* Cannot really happen (see SSL_CTX_new) */
283
284
1560
	s->internal->read_ahead = ctx->internal->read_ahead;
285
1560
	s->internal->msg_callback = ctx->internal->msg_callback;
286
1560
	s->internal->msg_callback_arg = ctx->internal->msg_callback_arg;
287
1560
	s->verify_mode = ctx->verify_mode;
288
1560
	s->sid_ctx_length = ctx->sid_ctx_length;
289
1560
	OPENSSL_assert(s->sid_ctx_length <= sizeof s->sid_ctx);
290
1560
	memcpy(&s->sid_ctx, &ctx->sid_ctx, sizeof(s->sid_ctx));
291
1560
	s->internal->verify_callback = ctx->internal->default_verify_callback;
292
1560
	s->internal->generate_session_id = ctx->internal->generate_session_id;
293
294
1560
	s->param = X509_VERIFY_PARAM_new();
295
1560
	if (!s->param)
296
		goto err;
297
1560
	X509_VERIFY_PARAM_inherit(s->param, ctx->param);
298
1560
	s->internal->quiet_shutdown = ctx->internal->quiet_shutdown;
299
1560
	s->max_send_fragment = ctx->internal->max_send_fragment;
300
301
1560
	CRYPTO_add(&ctx->references, 1, CRYPTO_LOCK_SSL_CTX);
302
1560
	s->ctx = ctx;
303
1560
	s->internal->tlsext_debug_cb = 0;
304
1560
	s->internal->tlsext_debug_arg = NULL;
305
1560
	s->internal->tlsext_ticket_expected = 0;
306
1560
	s->tlsext_status_type = -1;
307
1560
	s->internal->tlsext_status_expected = 0;
308
1560
	s->internal->tlsext_ocsp_ids = NULL;
309
1560
	s->internal->tlsext_ocsp_exts = NULL;
310
1560
	s->internal->tlsext_ocsp_resp = NULL;
311
1560
	s->internal->tlsext_ocsp_resplen = -1;
312
1560
	CRYPTO_add(&ctx->references, 1, CRYPTO_LOCK_SSL_CTX);
313
1560
	s->initial_ctx = ctx;
314
315
1560
	if (ctx->internal->tlsext_ecpointformatlist != NULL) {
316
		s->internal->tlsext_ecpointformatlist =
317
		    calloc(ctx->internal->tlsext_ecpointformatlist_length,
318
			sizeof(ctx->internal->tlsext_ecpointformatlist[0]));
319
		if (s->internal->tlsext_ecpointformatlist == NULL)
320
			goto err;
321
		memcpy(s->internal->tlsext_ecpointformatlist,
322
		    ctx->internal->tlsext_ecpointformatlist,
323
		    ctx->internal->tlsext_ecpointformatlist_length *
324
		    sizeof(ctx->internal->tlsext_ecpointformatlist[0]));
325
		s->internal->tlsext_ecpointformatlist_length =
326
		    ctx->internal->tlsext_ecpointformatlist_length;
327
	}
328
1560
	if (ctx->internal->tlsext_supportedgroups != NULL) {
329
232
		s->internal->tlsext_supportedgroups =
330
232
		    calloc(ctx->internal->tlsext_supportedgroups_length,
331
			sizeof(ctx->internal->tlsext_supportedgroups));
332
232
		if (s->internal->tlsext_supportedgroups == NULL)
333
			goto err;
334
696
		memcpy(s->internal->tlsext_supportedgroups,
335
232
		    ctx->internal->tlsext_supportedgroups,
336
232
		    ctx->internal->tlsext_supportedgroups_length *
337
		    sizeof(ctx->internal->tlsext_supportedgroups[0]));
338
232
		s->internal->tlsext_supportedgroups_length =
339
232
		    ctx->internal->tlsext_supportedgroups_length;
340
232
	}
341
342
1560
	if (s->ctx->internal->alpn_client_proto_list != NULL) {
343
34
		s->internal->alpn_client_proto_list =
344
34
		    malloc(s->ctx->internal->alpn_client_proto_list_len);
345
34
		if (s->internal->alpn_client_proto_list == NULL)
346
			goto err;
347
34
		memcpy(s->internal->alpn_client_proto_list,
348
34
		    s->ctx->internal->alpn_client_proto_list,
349
34
		    s->ctx->internal->alpn_client_proto_list_len);
350
34
		s->internal->alpn_client_proto_list_len =
351
34
		    s->ctx->internal->alpn_client_proto_list_len;
352
34
	}
353
354
1560
	s->verify_result = X509_V_OK;
355
356
1560
	s->method = ctx->method;
357
358
1560
	if (!s->method->internal->ssl_new(s))
359
		goto err;
360
361
1560
	s->references = 1;
362
1560
	s->server = (ctx->method->internal->ssl_accept == ssl_undefined_function) ? 0 : 1;
363
364
1560
	SSL_clear(s);
365
366
1560
	CRYPTO_new_ex_data(CRYPTO_EX_INDEX_SSL, s, &s->internal->ex_data);
367
368
1560
	return (s);
369
370
 err:
371
	SSL_free(s);
372
	SSLerrorx(ERR_R_MALLOC_FAILURE);
373
	return (NULL);
374
1560
}
375
376
int
377
SSL_CTX_set_session_id_context(SSL_CTX *ctx, const unsigned char *sid_ctx,
378
    unsigned int sid_ctx_len)
379
{
380
448
	if (sid_ctx_len > sizeof ctx->sid_ctx) {
381
		SSLerrorx(SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG);
382
		return (0);
383
	}
384
224
	ctx->sid_ctx_length = sid_ctx_len;
385
224
	memcpy(ctx->sid_ctx, sid_ctx, sid_ctx_len);
386
387
224
	return (1);
388
224
}
389
390
int
391
SSL_set_session_id_context(SSL *ssl, const unsigned char *sid_ctx,
392
    unsigned int sid_ctx_len)
393
{
394
	if (sid_ctx_len > SSL_MAX_SID_CTX_LENGTH) {
395
		SSLerror(ssl, SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG);
396
		return (0);
397
	}
398
	ssl->sid_ctx_length = sid_ctx_len;
399
	memcpy(ssl->sid_ctx, sid_ctx, sid_ctx_len);
400
401
	return (1);
402
}
403
404
int
405
SSL_CTX_set_generate_session_id(SSL_CTX *ctx, GEN_SESSION_CB cb)
406
{
407
	CRYPTO_w_lock(CRYPTO_LOCK_SSL_CTX);
408
	ctx->internal->generate_session_id = cb;
409
	CRYPTO_w_unlock(CRYPTO_LOCK_SSL_CTX);
410
	return (1);
411
}
412
413
int
414
SSL_set_generate_session_id(SSL *ssl, GEN_SESSION_CB cb)
415
{
416
	CRYPTO_w_lock(CRYPTO_LOCK_SSL);
417
	ssl->internal->generate_session_id = cb;
418
	CRYPTO_w_unlock(CRYPTO_LOCK_SSL);
419
	return (1);
420
}
421
422
int
423
SSL_has_matching_session_id(const SSL *ssl, const unsigned char *id,
424
    unsigned int id_len)
425
{
426
	/*
427
	 * A quick examination of SSL_SESSION_hash and SSL_SESSION_cmp
428
	 * shows how we can "construct" a session to give us the desired
429
	 * check - ie. to find if there's a session in the hash table
430
	 * that would conflict with any new session built out of this
431
	 * id/id_len and the ssl_version in use by this SSL.
432
	 */
433
96
	SSL_SESSION r, *p;
434
435
48
	if (id_len > sizeof r.session_id)
436
		return (0);
437
438
48
	r.ssl_version = ssl->version;
439
48
	r.session_id_length = id_len;
440
48
	memcpy(r.session_id, id, id_len);
441
442
48
	CRYPTO_r_lock(CRYPTO_LOCK_SSL_CTX);
443
48
	p = lh_SSL_SESSION_retrieve(ssl->ctx->internal->sessions, &r);
444
48
	CRYPTO_r_unlock(CRYPTO_LOCK_SSL_CTX);
445
48
	return (p != NULL);
446
48
}
447
448
int
449
SSL_CTX_set_purpose(SSL_CTX *s, int purpose)
450
{
451
	return (X509_VERIFY_PARAM_set_purpose(s->param, purpose));
452
}
453
454
int
455
SSL_set_purpose(SSL *s, int purpose)
456
{
457
	return (X509_VERIFY_PARAM_set_purpose(s->param, purpose));
458
}
459
460
int
461
SSL_CTX_set_trust(SSL_CTX *s, int trust)
462
{
463
	return (X509_VERIFY_PARAM_set_trust(s->param, trust));
464
}
465
466
int
467
SSL_set_trust(SSL *s, int trust)
468
{
469
	return (X509_VERIFY_PARAM_set_trust(s->param, trust));
470
}
471
472
int
473
SSL_CTX_set1_param(SSL_CTX *ctx, X509_VERIFY_PARAM *vpm)
474
{
475
4
	return (X509_VERIFY_PARAM_set1(ctx->param, vpm));
476
}
477
478
int
479
SSL_set1_param(SSL *ssl, X509_VERIFY_PARAM *vpm)
480
{
481
	return (X509_VERIFY_PARAM_set1(ssl->param, vpm));
482
}
483
484
void
485
SSL_free(SSL *s)
486
{
487
	int	i;
488
489
3676
	if (s == NULL)
490
285
		return;
491
492
1553
	i = CRYPTO_add(&s->references, -1, CRYPTO_LOCK_SSL);
493
1553
	if (i > 0)
494
		return;
495
496
1553
	X509_VERIFY_PARAM_free(s->param);
497
498
1553
	CRYPTO_free_ex_data(CRYPTO_EX_INDEX_SSL, s, &s->internal->ex_data);
499
500
1553
	if (s->bbio != NULL) {
501
		/* If the buffering BIO is in place, pop it off */
502
52
		if (s->bbio == s->wbio) {
503
52
			s->wbio = BIO_pop(s->wbio);
504
52
		}
505
52
		BIO_free(s->bbio);
506
52
		s->bbio = NULL;
507
52
	}
508
509
1553
	if (s->rbio != s->wbio)
510
60
		BIO_free_all(s->rbio);
511
1553
	BIO_free_all(s->wbio);
512
513
1553
	BUF_MEM_free(s->internal->init_buf);
514
515
	/* add extra stuff */
516
1553
	sk_SSL_CIPHER_free(s->cipher_list);
517
1553
	sk_SSL_CIPHER_free(s->internal->cipher_list_by_id);
518
519
	/* Make the next call work :-) */
520
1553
	if (s->session != NULL) {
521
1399
		ssl_clear_bad_session(s);
522
1399
		SSL_SESSION_free(s->session);
523
1399
	}
524
525
1553
	ssl_clear_cipher_ctx(s);
526
1553
	ssl_clear_hash_ctx(&s->read_hash);
527
1553
	ssl_clear_hash_ctx(&s->internal->write_hash);
528
529
1553
	ssl_cert_free(s->cert);
530
531
1553
	free(s->tlsext_hostname);
532
1553
	SSL_CTX_free(s->initial_ctx);
533
534
1553
	free(s->internal->tlsext_ecpointformatlist);
535
1553
	free(s->internal->tlsext_supportedgroups);
536
537
1553
	sk_X509_EXTENSION_pop_free(s->internal->tlsext_ocsp_exts,
538
	    X509_EXTENSION_free);
539
1553
	sk_OCSP_RESPID_pop_free(s->internal->tlsext_ocsp_ids, OCSP_RESPID_free);
540
1553
	free(s->internal->tlsext_ocsp_resp);
541
542
1553
	sk_X509_NAME_pop_free(s->internal->client_CA, X509_NAME_free);
543
544
1553
	if (s->method != NULL)
545
1553
		s->method->internal->ssl_free(s);
546
547
1553
	SSL_CTX_free(s->ctx);
548
549
1553
	free(s->internal->alpn_client_proto_list);
550
551
#ifndef OPENSSL_NO_SRTP
552
1553
	sk_SRTP_PROTECTION_PROFILE_free(s->internal->srtp_profiles);
553
#endif
554
555
1553
	free(s->internal);
556
1553
	free(s);
557
3391
}
558
559
void
560
SSL_set_bio(SSL *s, BIO *rbio, BIO *wbio)
561
{
562
	/* If the output buffering BIO is still in place, remove it */
563
17002
	if (s->bbio != NULL) {
564
		if (s->wbio == s->bbio) {
565
			s->wbio = s->wbio->next_bio;
566
			s->bbio->next_bio = NULL;
567
		}
568
	}
569
570

16986
	if (s->rbio != rbio && s->rbio != s->wbio)
571
		BIO_free_all(s->rbio);
572
8501
	if (s->wbio != wbio)
573
8485
		BIO_free_all(s->wbio);
574
8501
	s->rbio = rbio;
575
8501
	s->wbio = wbio;
576
8501
}
577
578
BIO *
579
SSL_get_rbio(const SSL *s)
580
{
581
52748
	return (s->rbio);
582
}
583
584
BIO *
585
SSL_get_wbio(const SSL *s)
586
{
587
6160
	return (s->wbio);
588
}
589
590
int
591
SSL_get_fd(const SSL *s)
592
{
593
31692
	return (SSL_get_rfd(s));
594
}
595
596
int
597
SSL_get_rfd(const SSL *s)
598
{
599
31692
	int	 ret = -1;
600
	BIO	*b, *r;
601
602
15846
	b = SSL_get_rbio(s);
603
15846
	r = BIO_find_type(b, BIO_TYPE_DESCRIPTOR);
604
15846
	if (r != NULL)
605
15846
		BIO_get_fd(r, &ret);
606
31692
	return (ret);
607
15846
}
608
609
int
610
SSL_get_wfd(const SSL *s)
611
{
612
	int	 ret = -1;
613
	BIO	*b, *r;
614
615
	b = SSL_get_wbio(s);
616
	r = BIO_find_type(b, BIO_TYPE_DESCRIPTOR);
617
	if (r != NULL)
618
		BIO_get_fd(r, &ret);
619
	return (ret);
620
}
621
622
int
623
SSL_set_fd(SSL *s, int fd)
624
{
625
	int	 ret = 0;
626
	BIO	*bio = NULL;
627
628
	bio = BIO_new(BIO_s_socket());
629
630
	if (bio == NULL) {
631
		SSLerror(s, ERR_R_BUF_LIB);
632
		goto err;
633
	}
634
	BIO_set_fd(bio, fd, BIO_NOCLOSE);
635
	SSL_set_bio(s, bio, bio);
636
	ret = 1;
637
err:
638
	return (ret);
639
}
640
641
int
642
SSL_set_wfd(SSL *s, int fd)
643
{
644
	int	 ret = 0;
645
	BIO	*bio = NULL;
646
647

64
	if ((s->rbio == NULL) || (BIO_method_type(s->rbio) != BIO_TYPE_SOCKET)
648
32
	    || ((int)BIO_get_fd(s->rbio, NULL) != fd)) {
649
8
		bio = BIO_new(BIO_s_socket());
650
651
8
		if (bio == NULL) {
652
			SSLerror(s, ERR_R_BUF_LIB);
653
			goto err;
654
		}
655
8
		BIO_set_fd(bio, fd, BIO_NOCLOSE);
656
8
		SSL_set_bio(s, SSL_get_rbio(s), bio);
657
8
	} else
658
8
		SSL_set_bio(s, SSL_get_rbio(s), SSL_get_rbio(s));
659
16
	ret = 1;
660
err:
661
16
	return (ret);
662
}
663
664
int
665
SSL_set_rfd(SSL *s, int fd)
666
{
667
	int	 ret = 0;
668
	BIO	*bio = NULL;
669
670

32
	if ((s->wbio == NULL) || (BIO_method_type(s->wbio) != BIO_TYPE_SOCKET)
671
	    || ((int)BIO_get_fd(s->wbio, NULL) != fd)) {
672
16
		bio = BIO_new(BIO_s_socket());
673
674
16
		if (bio == NULL) {
675
			SSLerror(s, ERR_R_BUF_LIB);
676
			goto err;
677
		}
678
16
		BIO_set_fd(bio, fd, BIO_NOCLOSE);
679
16
		SSL_set_bio(s, bio, SSL_get_wbio(s));
680
16
	} else
681
		SSL_set_bio(s, SSL_get_wbio(s), SSL_get_wbio(s));
682
16
	ret = 1;
683
err:
684
16
	return (ret);
685
}
686
687
688
/* return length of latest Finished message we sent, copy to 'buf' */
689
size_t
690
SSL_get_finished(const SSL *s, void *buf, size_t count)
691
{
692
	size_t	ret = 0;
693
694
	if (s->s3 != NULL) {
695
		ret = S3I(s)->tmp.finish_md_len;
696
		if (count > ret)
697
			count = ret;
698
		memcpy(buf, S3I(s)->tmp.finish_md, count);
699
	}
700
	return (ret);
701
}
702
703
/* return length of latest Finished message we expected, copy to 'buf' */
704
size_t
705
SSL_get_peer_finished(const SSL *s, void *buf, size_t count)
706
{
707
	size_t	ret = 0;
708
709
	if (s->s3 != NULL) {
710
		ret = S3I(s)->tmp.peer_finish_md_len;
711
		if (count > ret)
712
			count = ret;
713
		memcpy(buf, S3I(s)->tmp.peer_finish_md, count);
714
	}
715
	return (ret);
716
}
717
718
719
int
720
SSL_get_verify_mode(const SSL *s)
721
{
722
	return (s->verify_mode);
723
}
724
725
int
726
SSL_get_verify_depth(const SSL *s)
727
{
728
	return (X509_VERIFY_PARAM_get_depth(s->param));
729
}
730
731
int
732
(*SSL_get_verify_callback(const SSL *s))(int, X509_STORE_CTX *)
733
{
734
	return (s->internal->verify_callback);
735
}
736
737
int
738
SSL_CTX_get_verify_mode(const SSL_CTX *ctx)
739
{
740
	return (ctx->verify_mode);
741
}
742
743
int
744
SSL_CTX_get_verify_depth(const SSL_CTX *ctx)
745
{
746
	return (X509_VERIFY_PARAM_get_depth(ctx->param));
747
}
748
749
int (*SSL_CTX_get_verify_callback(const SSL_CTX *ctx))(int, X509_STORE_CTX *)
750
{
751
	return (ctx->internal->default_verify_callback);
752
}
753
754
void
755
SSL_set_verify(SSL *s, int mode,
756
    int (*callback)(int ok, X509_STORE_CTX *ctx))
757
{
758
	s->verify_mode = mode;
759
	if (callback != NULL)
760
		s->internal->verify_callback = callback;
761
}
762
763
void
764
SSL_set_verify_depth(SSL *s, int depth)
765
{
766
	X509_VERIFY_PARAM_set_depth(s->param, depth);
767
}
768
769
void
770
SSL_set_read_ahead(SSL *s, int yes)
771
{
772
	s->internal->read_ahead = yes;
773
}
774
775
int
776
SSL_get_read_ahead(const SSL *s)
777
{
778
	return (s->internal->read_ahead);
779
}
780
781
int
782
SSL_pending(const SSL *s)
783
{
784
	/*
785
	 * SSL_pending cannot work properly if read-ahead is enabled
786
	 * (SSL_[CTX_]ctrl(..., SSL_CTRL_SET_READ_AHEAD, 1, NULL)),
787
	 * and it is impossible to fix since SSL_pending cannot report
788
	 * errors that may be observed while scanning the new data.
789
	 * (Note that SSL_pending() is often used as a boolean value,
790
	 * so we'd better not return -1.)
791
	 */
792
4616
	return (s->method->internal->ssl_pending(s));
793
}
794
795
X509 *
796
SSL_get_peer_certificate(const SSL *s)
797
{
798
	X509	*r;
799
800

924
	if ((s == NULL) || (s->session == NULL))
801
		r = NULL;
802
	else
803
308
		r = s->session->peer;
804
805
308
	if (r == NULL)
806
72
		return (r);
807
808
236
	CRYPTO_add(&r->references, 1, CRYPTO_LOCK_X509);
809
810
236
	return (r);
811
308
}
812
813
STACK_OF(X509) *
814
SSL_get_peer_cert_chain(const SSL *s)
815
{
816
	STACK_OF(X509)	*r;
817
818

272
	if ((s == NULL) || (s->session == NULL) ||
819
68
	    (SSI(s)->sess_cert == NULL))
820
32
		r = NULL;
821
	else
822
36
		r = SSI(s)->sess_cert->cert_chain;
823
824
	/*
825
	 * If we are a client, cert_chain includes the peer's own
826
	 * certificate;
827
	 * if we are a server, it does not.
828
	 */
829
68
	return (r);
830
}
831
832
/*
833
 * Now in theory, since the calling process own 't' it should be safe to
834
 * modify.  We need to be able to read f without being hassled
835
 */
836
void
837
SSL_copy_session_id(SSL *t, const SSL *f)
838
{
839
	CERT	*tmp;
840
841
	/* Do we need to to SSL locking? */
842
	SSL_set_session(t, SSL_get_session(f));
843
844
	/*
845
	 * What if we are setup as SSLv2 but want to talk SSLv3 or
846
	 * vice-versa.
847
	 */
848
	if (t->method != f->method) {
849
		t->method->internal->ssl_free(t);	/* cleanup current */
850
		t->method = f->method;	/* change method */
851
		t->method->internal->ssl_new(t);	/* setup new */
852
	}
853
854
	tmp = t->cert;
855
	if (f->cert != NULL) {
856
		CRYPTO_add(&f->cert->references, 1, CRYPTO_LOCK_SSL_CERT);
857
		t->cert = f->cert;
858
	} else
859
		t->cert = NULL;
860
	ssl_cert_free(tmp);
861
	SSL_set_session_id_context(t, f->sid_ctx, f->sid_ctx_length);
862
}
863
864
/* Fix this so it checks all the valid key/cert options */
865
int
866
SSL_CTX_check_private_key(const SSL_CTX *ctx)
867
{
868

64
	if ((ctx == NULL) || (ctx->internal->cert == NULL) ||
869
16
	    (ctx->internal->cert->key->x509 == NULL)) {
870
		SSLerrorx(SSL_R_NO_CERTIFICATE_ASSIGNED);
871
		return (0);
872
	}
873
16
	if (ctx->internal->cert->key->privatekey == NULL) {
874
		SSLerrorx(SSL_R_NO_PRIVATE_KEY_ASSIGNED);
875
		return (0);
876
	}
877
16
	return (X509_check_private_key(ctx->internal->cert->key->x509,
878
	    ctx->internal->cert->key->privatekey));
879
16
}
880
881
/* Fix this function so that it takes an optional type parameter */
882
int
883
SSL_check_private_key(const SSL *ssl)
884
{
885
	if (ssl == NULL) {
886
		SSLerrorx(ERR_R_PASSED_NULL_PARAMETER);
887
		return (0);
888
	}
889
	if (ssl->cert == NULL) {
890
		SSLerror(ssl, SSL_R_NO_CERTIFICATE_ASSIGNED);
891
		return (0);
892
	}
893
	if (ssl->cert->key->x509 == NULL) {
894
		SSLerror(ssl, SSL_R_NO_CERTIFICATE_ASSIGNED);
895
		return (0);
896
	}
897
	if (ssl->cert->key->privatekey == NULL) {
898
		SSLerror(ssl, SSL_R_NO_PRIVATE_KEY_ASSIGNED);
899
		return (0);
900
	}
901
	return (X509_check_private_key(ssl->cert->key->x509,
902
	    ssl->cert->key->privatekey));
903
}
904
905
int
906
SSL_accept(SSL *s)
907
{
908
112
	if (s->internal->handshake_func == NULL)
909
24
		SSL_set_accept_state(s); /* Not properly initialized yet */
910
911
56
	return (s->method->internal->ssl_accept(s));
912
}
913
914
int
915
SSL_connect(SSL *s)
916
{
917
16054
	if (s->internal->handshake_func == NULL)
918
937
		SSL_set_connect_state(s); /* Not properly initialized yet */
919
920
8027
	return (s->method->internal->ssl_connect(s));
921
}
922
923
long
924
SSL_get_default_timeout(const SSL *s)
925
{
926
	return (s->method->internal->get_timeout());
927
}
928
929
int
930
SSL_read(SSL *s, void *buf, int num)
931
{
932
12816
	if (s->internal->handshake_func == NULL) {
933
		SSLerror(s, SSL_R_UNINITIALIZED);
934
		return (-1);
935
	}
936
937
6408
	if (s->internal->shutdown & SSL_RECEIVED_SHUTDOWN) {
938
		s->internal->rwstate = SSL_NOTHING;
939
		return (0);
940
	}
941
6408
	return (s->method->internal->ssl_read(s, buf, num));
942
6408
}
943
944
int
945
SSL_peek(SSL *s, void *buf, int num)
946
{
947
	if (s->internal->handshake_func == NULL) {
948
		SSLerror(s, SSL_R_UNINITIALIZED);
949
		return (-1);
950
	}
951
952
	if (s->internal->shutdown & SSL_RECEIVED_SHUTDOWN) {
953
		return (0);
954
	}
955
	return (s->method->internal->ssl_peek(s, buf, num));
956
}
957
958
int
959
SSL_write(SSL *s, const void *buf, int num)
960
{
961
12244
	if (s->internal->handshake_func == NULL) {
962
		SSLerror(s, SSL_R_UNINITIALIZED);
963
		return (-1);
964
	}
965
966
6122
	if (s->internal->shutdown & SSL_SENT_SHUTDOWN) {
967
		s->internal->rwstate = SSL_NOTHING;
968
		SSLerror(s, SSL_R_PROTOCOL_IS_SHUTDOWN);
969
		return (-1);
970
	}
971
6122
	return (s->method->internal->ssl_write(s, buf, num));
972
6122
}
973
974
int
975
SSL_shutdown(SSL *s)
976
{
977
	/*
978
	 * Note that this function behaves differently from what one might
979
	 * expect.  Return values are 0 for no success (yet),
980
	 * 1 for success; but calling it once is usually not enough,
981
	 * even if blocking I/O is used (see ssl3_shutdown).
982
	 */
983
984
16866
	if (s->internal->handshake_func == NULL) {
985
		SSLerror(s, SSL_R_UNINITIALIZED);
986
		return (-1);
987
	}
988
989

16866
	if ((s != NULL) && !SSL_in_init(s))
990
8433
		return (s->method->internal->ssl_shutdown(s));
991
	else
992
		return (1);
993
8433
}
994
995
int
996
SSL_renegotiate(SSL *s)
997
{
998
8
	if (s->internal->renegotiate == 0)
999
4
		s->internal->renegotiate = 1;
1000
1001
4
	s->internal->new_session = 1;
1002
1003
4
	return (s->method->internal->ssl_renegotiate(s));
1004
}
1005
1006
int
1007
SSL_renegotiate_abbreviated(SSL *s)
1008
{
1009
	if (s->internal->renegotiate == 0)
1010
		s->internal->renegotiate = 1;
1011
1012
	s->internal->new_session = 0;
1013
1014
	return (s->method->internal->ssl_renegotiate(s));
1015
}
1016
1017
int
1018
SSL_renegotiate_pending(SSL *s)
1019
{
1020
	/*
1021
	 * Becomes true when negotiation is requested;
1022
	 * false again once a handshake has finished.
1023
	 */
1024
	return (s->internal->renegotiate != 0);
1025
}
1026
1027
long
1028
SSL_ctrl(SSL *s, int cmd, long larg, void *parg)
1029
{
1030
	long	l;
1031
1032



37086
	switch (cmd) {
1033
	case SSL_CTRL_GET_READ_AHEAD:
1034
		return (s->internal->read_ahead);
1035
	case SSL_CTRL_SET_READ_AHEAD:
1036
		l = s->internal->read_ahead;
1037
		s->internal->read_ahead = larg;
1038
		return (l);
1039
1040
	case SSL_CTRL_SET_MSG_CALLBACK_ARG:
1041
		s->internal->msg_callback_arg = parg;
1042
		return (1);
1043
1044
	case SSL_CTRL_OPTIONS:
1045
10515
		return (s->internal->options|=larg);
1046
	case SSL_CTRL_CLEAR_OPTIONS:
1047
41
		return (s->internal->options&=~larg);
1048
	case SSL_CTRL_MODE:
1049
		return (s->internal->mode|=larg);
1050
	case SSL_CTRL_CLEAR_MODE:
1051
		return (s->internal->mode &=~larg);
1052
	case SSL_CTRL_GET_MAX_CERT_LIST:
1053
		return (s->internal->max_cert_list);
1054
	case SSL_CTRL_SET_MAX_CERT_LIST:
1055
		l = s->internal->max_cert_list;
1056
		s->internal->max_cert_list = larg;
1057
		return (l);
1058
	case SSL_CTRL_SET_MTU:
1059
#ifndef OPENSSL_NO_DTLS1
1060
		if (larg < (long)dtls1_min_mtu())
1061
			return (0);
1062
#endif
1063
		if (SSL_IS_DTLS(s)) {
1064
			D1I(s)->mtu = larg;
1065
			return (larg);
1066
		}
1067
		return (0);
1068
	case SSL_CTRL_SET_MAX_SEND_FRAGMENT:
1069
		if (larg < 512 || larg > SSL3_RT_MAX_PLAIN_LENGTH)
1070
			return (0);
1071
		s->max_send_fragment = larg;
1072
		return (1);
1073
	case SSL_CTRL_GET_RI_SUPPORT:
1074
4
		if (s->s3)
1075
4
			return (S3I(s)->send_connection_binding);
1076
		else return (0);
1077
	default:
1078
7983
		if (SSL_IS_DTLS(s))
1079
			return dtls1_ctrl(s, cmd, larg, parg);
1080
7983
		return ssl3_ctrl(s, cmd, larg, parg);
1081
	}
1082
18543
}
1083
1084
long
1085
SSL_callback_ctrl(SSL *s, int cmd, void (*fp)(void))
1086
{
1087
	switch (cmd) {
1088
	case SSL_CTRL_SET_MSG_CALLBACK:
1089
		s->internal->msg_callback = (void (*)(int write_p, int version,
1090
		    int content_type, const void *buf, size_t len,
1091
		    SSL *ssl, void *arg))(fp);
1092
		return (1);
1093
1094
	default:
1095
		return (ssl3_callback_ctrl(s, cmd, fp));
1096
	}
1097
}
1098
1099
struct lhash_st_SSL_SESSION *
1100
SSL_CTX_sessions(SSL_CTX *ctx)
1101
{
1102
	return (ctx->internal->sessions);
1103
}
1104
1105
long
1106
SSL_CTX_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg)
1107
{
1108
	long	l;
1109
1110






3240
	switch (cmd) {
1111
	case SSL_CTRL_GET_READ_AHEAD:
1112
		return (ctx->internal->read_ahead);
1113
	case SSL_CTRL_SET_READ_AHEAD:
1114
		l = ctx->internal->read_ahead;
1115
		ctx->internal->read_ahead = larg;
1116
		return (l);
1117
1118
	case SSL_CTRL_SET_MSG_CALLBACK_ARG:
1119
		ctx->internal->msg_callback_arg = parg;
1120
		return (1);
1121
1122
	case SSL_CTRL_GET_MAX_CERT_LIST:
1123
		return (ctx->internal->max_cert_list);
1124
	case SSL_CTRL_SET_MAX_CERT_LIST:
1125
		l = ctx->internal->max_cert_list;
1126
		ctx->internal->max_cert_list = larg;
1127
		return (l);
1128
1129
	case SSL_CTRL_SET_SESS_CACHE_SIZE:
1130
		l = ctx->internal->session_cache_size;
1131
		ctx->internal->session_cache_size = larg;
1132
		return (l);
1133
	case SSL_CTRL_GET_SESS_CACHE_SIZE:
1134
		return (ctx->internal->session_cache_size);
1135
	case SSL_CTRL_SET_SESS_CACHE_MODE:
1136
32
		l = ctx->internal->session_cache_mode;
1137
32
		ctx->internal->session_cache_mode = larg;
1138
32
		return (l);
1139
	case SSL_CTRL_GET_SESS_CACHE_MODE:
1140
		return (ctx->internal->session_cache_mode);
1141
1142
	case SSL_CTRL_SESS_NUMBER:
1143
		return (lh_SSL_SESSION_num_items(ctx->internal->sessions));
1144
	case SSL_CTRL_SESS_CONNECT:
1145
		return (ctx->internal->stats.sess_connect);
1146
	case SSL_CTRL_SESS_CONNECT_GOOD:
1147
		return (ctx->internal->stats.sess_connect_good);
1148
	case SSL_CTRL_SESS_CONNECT_RENEGOTIATE:
1149
		return (ctx->internal->stats.sess_connect_renegotiate);
1150
	case SSL_CTRL_SESS_ACCEPT:
1151
		return (ctx->internal->stats.sess_accept);
1152
	case SSL_CTRL_SESS_ACCEPT_GOOD:
1153
		return (ctx->internal->stats.sess_accept_good);
1154
	case SSL_CTRL_SESS_ACCEPT_RENEGOTIATE:
1155
		return (ctx->internal->stats.sess_accept_renegotiate);
1156
	case SSL_CTRL_SESS_HIT:
1157
		return (ctx->internal->stats.sess_hit);
1158
	case SSL_CTRL_SESS_CB_HIT:
1159
		return (ctx->internal->stats.sess_cb_hit);
1160
	case SSL_CTRL_SESS_MISSES:
1161
		return (ctx->internal->stats.sess_miss);
1162
	case SSL_CTRL_SESS_TIMEOUTS:
1163
		return (ctx->internal->stats.sess_timeout);
1164
	case SSL_CTRL_SESS_CACHE_FULL:
1165
		return (ctx->internal->stats.sess_cache_full);
1166
	case SSL_CTRL_OPTIONS:
1167
560
		return (ctx->internal->options|=larg);
1168
	case SSL_CTRL_CLEAR_OPTIONS:
1169
198
		return (ctx->internal->options&=~larg);
1170
	case SSL_CTRL_MODE:
1171
170
		return (ctx->internal->mode|=larg);
1172
	case SSL_CTRL_CLEAR_MODE:
1173
		return (ctx->internal->mode&=~larg);
1174
	case SSL_CTRL_SET_MAX_SEND_FRAGMENT:
1175
		if (larg < 512 || larg > SSL3_RT_MAX_PLAIN_LENGTH)
1176
			return (0);
1177
		ctx->internal->max_send_fragment = larg;
1178
		return (1);
1179
	default:
1180
660
		return (ssl3_ctx_ctrl(ctx, cmd, larg, parg));
1181
	}
1182
1620
}
1183
1184
long
1185
SSL_CTX_callback_ctrl(SSL_CTX *ctx, int cmd, void (*fp)(void))
1186
{
1187
504
	switch (cmd) {
1188
	case SSL_CTRL_SET_MSG_CALLBACK:
1189
		ctx->internal->msg_callback = (void (*)(int write_p, int version,
1190
		    int content_type, const void *buf, size_t len, SSL *ssl,
1191
		    void *arg))(fp);
1192
		return (1);
1193
1194
	default:
1195
252
		return (ssl3_ctx_callback_ctrl(ctx, cmd, fp));
1196
	}
1197
252
}
1198
1199
int
1200
ssl_cipher_id_cmp(const SSL_CIPHER *a, const SSL_CIPHER *b)
1201
{
1202
	long	l;
1203
1204
157720
	l = a->id - b->id;
1205
78860
	if (l == 0L)
1206
15153
		return (0);
1207
	else
1208
63707
		return ((l > 0) ? 1:-1);
1209
78860
}
1210
1211
int
1212
ssl_cipher_ptr_id_cmp(const SSL_CIPHER * const *ap,
1213
    const SSL_CIPHER * const *bp)
1214
{
1215
	long	l;
1216
1217
585804
	l = (*ap)->id - (*bp)->id;
1218
292902
	if (l == 0L)
1219
8177
		return (0);
1220
	else
1221
284725
		return ((l > 0) ? 1:-1);
1222
292902
}
1223
1224
/*
1225
 * Return a STACK of the ciphers available for the SSL and in order of
1226
 * preference.
1227
 */
1228
STACK_OF(SSL_CIPHER) *
1229
SSL_get_ciphers(const SSL *s)
1230
{
1231
49866
	if (s != NULL) {
1232
24933
		if (s->cipher_list != NULL) {
1233
28
			return (s->cipher_list);
1234

49810
		} else if ((s->ctx != NULL) && (s->ctx->cipher_list != NULL)) {
1235
24905
			return (s->ctx->cipher_list);
1236
		}
1237
	}
1238
	return (NULL);
1239
24933
}
1240
1241
/*
1242
 * Return a STACK of the ciphers available for the SSL and in order of
1243
 * algorithm id.
1244
 */
1245
STACK_OF(SSL_CIPHER) *
1246
ssl_get_ciphers_by_id(SSL *s)
1247
{
1248
16354
	if (s != NULL) {
1249
8177
		if (s->internal->cipher_list_by_id != NULL) {
1250
			return (s->internal->cipher_list_by_id);
1251

16354
		} else if ((s->ctx != NULL) &&
1252
8177
		    (s->ctx->internal->cipher_list_by_id != NULL)) {
1253
8177
			return (s->ctx->internal->cipher_list_by_id);
1254
		}
1255
	}
1256
	return (NULL);
1257
8177
}
1258
1259
/* See if we have any ECC cipher suites. */
1260
int
1261
ssl_has_ecc_ciphers(SSL *s)
1262
{
1263
	STACK_OF(SSL_CIPHER) *ciphers;
1264
	unsigned long alg_k, alg_a;
1265
	SSL_CIPHER *cipher;
1266
	int i;
1267
1268
32956
	if (s->version == DTLS1_VERSION)
1269
104
		return 0;
1270
16374
	if ((ciphers = SSL_get_ciphers(s)) == NULL)
1271
		return 0;
1272
1273
35548
	for (i = 0; i < sk_SSL_CIPHER_num(ciphers); i++) {
1274
17574
		cipher = sk_SSL_CIPHER_value(ciphers, i);
1275
1276
17574
		alg_k = cipher->algorithm_mkey;
1277
17574
		alg_a = cipher->algorithm_auth;
1278
1279

18974
		if ((alg_k & SSL_kECDHE) || (alg_a & SSL_aECDSA))
1280
16174
			return 1;
1281
	}
1282
1283
200
	return 0;
1284
16478
}
1285
1286
/* The old interface to get the same thing as SSL_get_ciphers(). */
1287
const char *
1288
SSL_get_cipher_list(const SSL *s, int n)
1289
{
1290
	SSL_CIPHER		*c;
1291
	STACK_OF(SSL_CIPHER)	*sk;
1292
1293
	if (s == NULL)
1294
		return (NULL);
1295
	sk = SSL_get_ciphers(s);
1296
	if ((sk == NULL) || (sk_SSL_CIPHER_num(sk) <= n))
1297
		return (NULL);
1298
	c = sk_SSL_CIPHER_value(sk, n);
1299
	if (c == NULL)
1300
		return (NULL);
1301
	return (c->name);
1302
}
1303
1304
/* Specify the ciphers to be used by default by the SSL_CTX. */
1305
int
1306
SSL_CTX_set_cipher_list(SSL_CTX *ctx, const char *str)
1307
{
1308
	STACK_OF(SSL_CIPHER)	*sk;
1309
1310
1230
	sk = ssl_create_cipher_list(ctx->method, &ctx->cipher_list,
1311
410
	    &ctx->internal->cipher_list_by_id, str);
1312
	/*
1313
	 * ssl_create_cipher_list may return an empty stack if it
1314
	 * was unable to find a cipher matching the given rule string
1315
	 * (for example if the rule string specifies a cipher which
1316
	 * has been disabled). This is not an error as far as
1317
	 * ssl_create_cipher_list is concerned, and hence
1318
	 * ctx->cipher_list and ctx->internal->cipher_list_by_id has been
1319
	 * updated.
1320
	 */
1321
410
	if (sk == NULL)
1322
		return (0);
1323
410
	else if (sk_SSL_CIPHER_num(sk) == 0) {
1324
		SSLerrorx(SSL_R_NO_CIPHER_MATCH);
1325
		return (0);
1326
	}
1327
410
	return (1);
1328
410
}
1329
1330
/* Specify the ciphers to be used by the SSL. */
1331
int
1332
SSL_set_cipher_list(SSL *s, const char *str)
1333
{
1334
	STACK_OF(SSL_CIPHER)	*sk;
1335
1336
48
	sk = ssl_create_cipher_list(s->ctx->method, &s->cipher_list,
1337
16
	&s->internal->cipher_list_by_id, str);
1338
	/* see comment in SSL_CTX_set_cipher_list */
1339
16
	if (sk == NULL)
1340
		return (0);
1341
16
	else if (sk_SSL_CIPHER_num(sk) == 0) {
1342
		SSLerror(s, SSL_R_NO_CIPHER_MATCH);
1343
		return (0);
1344
	}
1345
16
	return (1);
1346
16
}
1347
1348
/* works well for SSLv2, not so good for SSLv3 */
1349
char *
1350
SSL_get_shared_ciphers(const SSL *s, char *buf, int len)
1351
{
1352
	char			*end;
1353
	STACK_OF(SSL_CIPHER)	*sk;
1354
	SSL_CIPHER		*c;
1355
	size_t			 curlen = 0;
1356
	int			 i;
1357
1358

12
	if (s->session == NULL || s->session->ciphers == NULL || len < 2)
1359
4
		return (NULL);
1360
1361
	sk = s->session->ciphers;
1362
	if (sk_SSL_CIPHER_num(sk) == 0)
1363
		return (NULL);
1364
1365
	buf[0] = '\0';
1366
	for (i = 0; i < sk_SSL_CIPHER_num(sk); i++) {
1367
		c = sk_SSL_CIPHER_value(sk, i);
1368
		end = buf + curlen;
1369
		if (strlcat(buf, c->name, len) >= len ||
1370
		    (curlen = strlcat(buf, ":", len)) >= len) {
1371
			/* remove truncated cipher from list */
1372
			*end = '\0';
1373
			break;
1374
		}
1375
	}
1376
	/* remove trailing colon */
1377
	if ((end = strrchr(buf, ':')) != NULL)
1378
		*end = '\0';
1379
	return (buf);
1380
4
}
1381
1382
int
1383
ssl_cipher_list_to_bytes(SSL *s, STACK_OF(SSL_CIPHER) *sk, unsigned char *p,
1384
    size_t maxlen, size_t *outlen)
1385
{
1386
	SSL_CIPHER *cipher;
1387
	int ciphers = 0;
1388
16446
	CBB cbb;
1389
	int i;
1390
1391
8223
	*outlen = 0;
1392
1393
8223
	if (sk == NULL)
1394
		return (0);
1395
1396
8223
	if (!CBB_init_fixed(&cbb, p, maxlen))
1397
		goto err;
1398
1399
775212
	for (i = 0; i < sk_SSL_CIPHER_num(sk); i++) {
1400
379383
		cipher = sk_SSL_CIPHER_value(sk, i);
1401
1402
		/* Skip TLS v1.2 only ciphersuites if lower than v1.2 */
1403

565164
		if ((cipher->algorithm_ssl & SSL_TLSV1_2) &&
1404
556883
		    (TLS1_get_client_version(s) < TLS1_2_VERSION))
1405
			continue;
1406
1407
377395
		if (!CBB_add_u16(&cbb, ssl3_cipher_get_value(cipher)))
1408
			goto err;
1409
1410
377395
		ciphers++;
1411
377395
	}
1412
1413
	/* Add SCSV if there are other ciphers and we're not renegotiating. */
1414

16446
	if (ciphers > 0 && !s->internal->renegotiate) {
1415
8222
		if (!CBB_add_u16(&cbb, SSL3_CK_SCSV & SSL3_CK_VALUE_MASK))
1416
			goto err;
1417
	}
1418
1419
8223
	if (!CBB_finish(&cbb, NULL, outlen))
1420
		goto err;
1421
1422
8223
	return 1;
1423
1424
 err:
1425
	CBB_cleanup(&cbb);
1426
1427
	return 0;
1428
8223
}
1429
1430
STACK_OF(SSL_CIPHER) *
1431
ssl_bytes_to_cipher_list(SSL *s, const unsigned char *p, int num)
1432
{
1433
538
	CBS			 cbs;
1434
	const SSL_CIPHER	*c;
1435
	STACK_OF(SSL_CIPHER)	*sk = NULL;
1436
	unsigned long		 cipher_id;
1437
269
	uint16_t		 cipher_value, max_version;
1438
1439
269
	if (s->s3)
1440
269
		S3I(s)->send_connection_binding = 0;
1441
1442
	/*
1443
	 * RFC 5246 section 7.4.1.2 defines the interval as [2,2^16-2].
1444
	 */
1445
269
	if (num < 2 || num > 0x10000 - 2) {
1446
3
		SSLerror(s, SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST);
1447
3
		return (NULL);
1448
	}
1449
1450
266
	if ((sk = sk_SSL_CIPHER_new_null()) == NULL) {
1451
		SSLerror(s, ERR_R_MALLOC_FAILURE);
1452
		goto err;
1453
	}
1454
1455
266
	CBS_init(&cbs, p, num);
1456
4811
	while (CBS_len(&cbs) > 0) {
1457
4280
		if (!CBS_get_u16(&cbs, &cipher_value)) {
1458
1
			SSLerror(s, SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST);
1459
1
			goto err;
1460
		}
1461
1462
4279
		cipher_id = SSL3_CK_ID | cipher_value;
1463
1464
4279
		if (s->s3 != NULL && cipher_id == SSL3_CK_SCSV) {
1465
			/*
1466
			 * TLS_EMPTY_RENEGOTIATION_INFO_SCSV is fatal if
1467
			 * renegotiating.
1468
			 */
1469
260
			if (s->internal->renegotiate) {
1470
				SSLerror(s, SSL_R_SCSV_RECEIVED_WHEN_RENEGOTIATING);
1471
				ssl3_send_alert(s, SSL3_AL_FATAL,
1472
				    SSL_AD_HANDSHAKE_FAILURE);
1473
1474
				goto err;
1475
			}
1476
260
			S3I(s)->send_connection_binding = 1;
1477
260
			continue;
1478
		}
1479
1480
4019
		if (cipher_id == SSL3_CK_FALLBACK_SCSV) {
1481
			/*
1482
			 * TLS_FALLBACK_SCSV indicates that the client
1483
			 * previously tried a higher protocol version.
1484
			 * Fail if the current version is an unexpected
1485
			 * downgrade.
1486
			 */
1487
			max_version = ssl_max_server_version(s);
1488
			if (max_version == 0 || s->version < max_version) {
1489
				SSLerror(s, SSL_R_INAPPROPRIATE_FALLBACK);
1490
				if (s->s3 != NULL)
1491
					ssl3_send_alert(s, SSL3_AL_FATAL,
1492
					    SSL_AD_INAPPROPRIATE_FALLBACK);
1493
				goto err;
1494
			}
1495
			continue;
1496
		}
1497
1498
4019
		if ((c = ssl3_get_cipher_by_value(cipher_value)) != NULL) {
1499
3819
			if (!sk_SSL_CIPHER_push(sk, c)) {
1500
				SSLerror(s, ERR_R_MALLOC_FAILURE);
1501
				goto err;
1502
			}
1503
		}
1504
	}
1505
1506
265
	return (sk);
1507
1508
err:
1509
1
	sk_SSL_CIPHER_free(sk);
1510
1511
1
	return (NULL);
1512
269
}
1513
1514
1515
/*
1516
 * Return a servername extension value if provided in Client Hello, or NULL.
1517
 * So far, only host_name types are defined (RFC 3546).
1518
 */
1519
const char *
1520
SSL_get_servername(const SSL *s, const int type)
1521
{
1522
32
	if (type != TLSEXT_NAMETYPE_host_name)
1523
		return (NULL);
1524
1525

64
	return (s->session && !s->tlsext_hostname ?
1526
16
	    s->session->tlsext_hostname :
1527
	    s->tlsext_hostname);
1528
16
}
1529
1530
int
1531
SSL_get_servername_type(const SSL *s)
1532
{
1533
	if (s->session &&
1534
	    (!s->tlsext_hostname ?
1535
	    s->session->tlsext_hostname : s->tlsext_hostname))
1536
		return (TLSEXT_NAMETYPE_host_name);
1537
	return (-1);
1538
}
1539
1540
/*
1541
 * SSL_select_next_proto implements standard protocol selection. It is
1542
 * expected that this function is called from the callback set by
1543
 * SSL_CTX_set_alpn_select_cb.
1544
 *
1545
 * The protocol data is assumed to be a vector of 8-bit, length prefixed byte
1546
 * strings. The length byte itself is not included in the length. A byte
1547
 * string of length 0 is invalid. No byte string may be truncated.
1548
 *
1549
 * It returns either:
1550
 * OPENSSL_NPN_NEGOTIATED if a common protocol was found, or
1551
 * OPENSSL_NPN_NO_OVERLAP if the fallback case was reached.
1552
 */
1553
int
1554
SSL_select_next_proto(unsigned char **out, unsigned char *outlen,
1555
    const unsigned char *server, unsigned int server_len,
1556
    const unsigned char *client, unsigned int client_len)
1557
{
1558
	unsigned int		 i, j;
1559
	const unsigned char	*result;
1560
	int			 status = OPENSSL_NPN_UNSUPPORTED;
1561
1562
	/*
1563
	 * For each protocol in server preference order,
1564
	 * see if we support it.
1565
	 */
1566
120
	for (i = 0; i < server_len; ) {
1567
120
		for (j = 0; j < client_len; ) {
1568

96
			if (server[i] == client[j] &&
1569
96
			    memcmp(&server[i + 1],
1570
96
			    &client[j + 1], server[i]) == 0) {
1571
				/* We found a match */
1572
				result = &server[i];
1573
				status = OPENSSL_NPN_NEGOTIATED;
1574
24
				goto found;
1575
			}
1576
24
			j += client[j];
1577
24
			j++;
1578
		}
1579
12
		i += server[i];
1580
12
		i++;
1581
	}
1582
1583
	/* There's no overlap between our protocols and the server's list. */
1584
	result = client;
1585
8
	status = OPENSSL_NPN_NO_OVERLAP;
1586
1587
found:
1588
32
	*out = (unsigned char *) result + 1;
1589
32
	*outlen = result[0];
1590
32
	return (status);
1591
}
1592
1593
/* SSL_get0_next_proto_negotiated is deprecated. */
1594
void
1595
SSL_get0_next_proto_negotiated(const SSL *s, const unsigned char **data,
1596
    unsigned *len)
1597
{
1598
	*data = NULL;
1599
	*len = 0;
1600
}
1601
1602
/* SSL_CTX_set_next_protos_advertised_cb is deprecated. */
1603
void
1604
SSL_CTX_set_next_protos_advertised_cb(SSL_CTX *ctx, int (*cb) (SSL *ssl,
1605
    const unsigned char **out, unsigned int *outlen, void *arg), void *arg)
1606
{
1607
}
1608
1609
/* SSL_CTX_set_next_proto_select_cb is deprecated. */
1610
void
1611
SSL_CTX_set_next_proto_select_cb(SSL_CTX *ctx, int (*cb) (SSL *s,
1612
    unsigned char **out, unsigned char *outlen, const unsigned char *in,
1613
    unsigned int inlen, void *arg), void *arg)
1614
{
1615
}
1616
1617
/*
1618
 * SSL_CTX_set_alpn_protos sets the ALPN protocol list to the specified
1619
 * protocols, which must be in wire-format (i.e. a series of non-empty,
1620
 * 8-bit length-prefixed strings). Returns 0 on success.
1621
 */
1622
int
1623
SSL_CTX_set_alpn_protos(SSL_CTX *ctx, const unsigned char *protos,
1624
    unsigned int protos_len)
1625
{
1626
	int failed = 1;
1627
1628
68
	if (protos == NULL || protos_len == 0)
1629
		goto err;
1630
1631
34
	free(ctx->internal->alpn_client_proto_list);
1632
34
	ctx->internal->alpn_client_proto_list = NULL;
1633
34
	ctx->internal->alpn_client_proto_list_len = 0;
1634
1635
68
	if ((ctx->internal->alpn_client_proto_list = malloc(protos_len))
1636
34
	    == NULL)
1637
		goto err;
1638
34
	ctx->internal->alpn_client_proto_list_len = protos_len;
1639
1640
34
	memcpy(ctx->internal->alpn_client_proto_list, protos, protos_len);
1641
1642
34
	failed = 0;
1643
1644
 err:
1645
	/* NOTE: Return values are the reverse of what you expect. */
1646
34
	return (failed);
1647
}
1648
1649
/*
1650
 * SSL_set_alpn_protos sets the ALPN protocol list to the specified
1651
 * protocols, which must be in wire-format (i.e. a series of non-empty,
1652
 * 8-bit length-prefixed strings). Returns 0 on success.
1653
 */
1654
int
1655
SSL_set_alpn_protos(SSL *ssl, const unsigned char *protos,
1656
    unsigned int protos_len)
1657
{
1658
	int failed = 1;
1659
1660
28
	if (protos == NULL || protos_len == 0)
1661
		goto err;
1662
1663
14
	free(ssl->internal->alpn_client_proto_list);
1664
14
	ssl->internal->alpn_client_proto_list = NULL;
1665
14
	ssl->internal->alpn_client_proto_list_len = 0;
1666
1667
28
	if ((ssl->internal->alpn_client_proto_list = malloc(protos_len))
1668
14
	    == NULL)
1669
		goto err;
1670
14
	ssl->internal->alpn_client_proto_list_len = protos_len;
1671
1672
14
	memcpy(ssl->internal->alpn_client_proto_list, protos, protos_len);
1673
1674
14
	failed = 0;
1675
1676
 err:
1677
	/* NOTE: Return values are the reverse of what you expect. */
1678
14
	return (failed);
1679
}
1680
1681
/*
1682
 * SSL_CTX_set_alpn_select_cb sets a callback function that is called during
1683
 * ClientHello processing in order to select an ALPN protocol from the
1684
 * client's list of offered protocols.
1685
 */
1686
void
1687
SSL_CTX_set_alpn_select_cb(SSL_CTX* ctx,
1688
    int (*cb) (SSL *ssl, const unsigned char **out, unsigned char *outlen,
1689
    const unsigned char *in, unsigned int inlen, void *arg), void *arg)
1690
{
1691
68
	ctx->internal->alpn_select_cb = cb;
1692
34
	ctx->internal->alpn_select_cb_arg = arg;
1693
34
}
1694
1695
/*
1696
 * SSL_get0_alpn_selected gets the selected ALPN protocol (if any). On return
1697
 * it sets data to point to len bytes of protocol name (not including the
1698
 * leading length-prefix byte). If the server didn't respond with* a negotiated
1699
 * protocol then len will be zero.
1700
 */
1701
void
1702
SSL_get0_alpn_selected(const SSL *ssl, const unsigned char **data,
1703
    unsigned *len)
1704
{
1705
1032
	*data = NULL;
1706
516
	*len = 0;
1707
1708
516
	if (ssl->s3 != NULL) {
1709
516
		*data = ssl->s3->internal->alpn_selected;
1710
516
		*len = ssl->s3->internal->alpn_selected_len;
1711
516
	}
1712
516
}
1713
1714
int
1715
SSL_export_keying_material(SSL *s, unsigned char *out, size_t olen,
1716
    const char *label, size_t llen, const unsigned char *p, size_t plen,
1717
    int use_context)
1718
{
1719
	return (tls1_export_keying_material(s, out, olen,
1720
	    label, llen, p, plen, use_context));
1721
}
1722
1723
static unsigned long
1724
ssl_session_hash(const SSL_SESSION *a)
1725
{
1726
	unsigned long	l;
1727
1728
48
	l = (unsigned long)
1729
144
	    ((unsigned int) a->session_id[0]     )|
1730
96
	    ((unsigned int) a->session_id[1]<< 8L)|
1731
96
	    ((unsigned long)a->session_id[2]<<16L)|
1732
48
	    ((unsigned long)a->session_id[3]<<24L);
1733
48
	return (l);
1734
}
1735
1736
/*
1737
 * NB: If this function (or indeed the hash function which uses a sort of
1738
 * coarser function than this one) is changed, ensure
1739
 * SSL_CTX_has_matching_session_id() is checked accordingly. It relies on being
1740
 * able to construct an SSL_SESSION that will collide with any existing session
1741
 * with a matching session ID.
1742
 */
1743
static int
1744
ssl_session_cmp(const SSL_SESSION *a, const SSL_SESSION *b)
1745
{
1746
	if (a->ssl_version != b->ssl_version)
1747
		return (1);
1748
	if (a->session_id_length != b->session_id_length)
1749
		return (1);
1750
	if (timingsafe_memcmp(a->session_id, b->session_id, a->session_id_length) != 0)
1751
		return (1);
1752
	return (0);
1753
}
1754
1755
/*
1756
 * These wrapper functions should remain rather than redeclaring
1757
 * SSL_SESSION_hash and SSL_SESSION_cmp for void* types and casting each
1758
 * variable. The reason is that the functions aren't static, they're exposed via
1759
 * ssl.h.
1760
 */
1761
static unsigned long
1762
ssl_session_LHASH_HASH(const void *arg)
1763
{
1764
96
	const SSL_SESSION *a = arg;
1765
1766
48
	return ssl_session_hash(a);
1767
}
1768
1769
static int
1770
ssl_session_LHASH_COMP(const void *arg1, const void *arg2)
1771
{
1772
	const SSL_SESSION *a = arg1;
1773
	const SSL_SESSION *b = arg2;
1774
1775
	return ssl_session_cmp(a, b);
1776
}
1777
1778
SSL_CTX *
1779
SSL_CTX_new(const SSL_METHOD *meth)
1780
{
1781
	SSL_CTX	*ret;
1782
1783
1672
	if (meth == NULL) {
1784
		SSLerrorx(SSL_R_NULL_SSL_METHOD_PASSED);
1785
		return (NULL);
1786
	}
1787
1788
836
	if ((ret = calloc(1, sizeof(*ret))) == NULL) {
1789
		SSLerrorx(ERR_R_MALLOC_FAILURE);
1790
		return (NULL);
1791
	}
1792
836
	if ((ret->internal = calloc(1, sizeof(*ret->internal))) == NULL) {
1793
		free(ret);
1794
		SSLerrorx(ERR_R_MALLOC_FAILURE);
1795
		return (NULL);
1796
	}
1797
1798
836
	if (SSL_get_ex_data_X509_STORE_CTX_idx() < 0) {
1799
		SSLerrorx(SSL_R_X509_VERIFICATION_SETUP_PROBLEMS);
1800
		goto err;
1801
	}
1802
1803
836
	ret->method = meth;
1804
836
	ret->internal->min_version = meth->internal->min_version;
1805
836
	ret->internal->max_version = meth->internal->max_version;
1806
1807
836
	ret->cert_store = NULL;
1808
836
	ret->internal->session_cache_mode = SSL_SESS_CACHE_SERVER;
1809
836
	ret->internal->session_cache_size = SSL_SESSION_CACHE_MAX_SIZE_DEFAULT;
1810
836
	ret->internal->session_cache_head = NULL;
1811
836
	ret->internal->session_cache_tail = NULL;
1812
1813
	/* We take the system default */
1814
836
	ret->session_timeout = meth->internal->get_timeout();
1815
1816
836
	ret->internal->new_session_cb = 0;
1817
836
	ret->internal->remove_session_cb = 0;
1818
836
	ret->internal->get_session_cb = 0;
1819
836
	ret->internal->generate_session_id = 0;
1820
1821
836
	memset((char *)&ret->internal->stats, 0, sizeof(ret->internal->stats));
1822
1823
836
	ret->references = 1;
1824
836
	ret->internal->quiet_shutdown = 0;
1825
1826
836
	ret->internal->info_callback = NULL;
1827
1828
836
	ret->internal->app_verify_callback = 0;
1829
836
	ret->internal->app_verify_arg = NULL;
1830
1831
836
	ret->internal->max_cert_list = SSL_MAX_CERT_LIST_DEFAULT;
1832
836
	ret->internal->read_ahead = 0;
1833
836
	ret->internal->msg_callback = 0;
1834
836
	ret->internal->msg_callback_arg = NULL;
1835
836
	ret->verify_mode = SSL_VERIFY_NONE;
1836
836
	ret->sid_ctx_length = 0;
1837
836
	ret->internal->default_verify_callback = NULL;
1838
836
	if ((ret->internal->cert = ssl_cert_new()) == NULL)
1839
		goto err;
1840
1841
836
	ret->default_passwd_callback = 0;
1842
836
	ret->default_passwd_callback_userdata = NULL;
1843
836
	ret->internal->client_cert_cb = 0;
1844
836
	ret->internal->app_gen_cookie_cb = 0;
1845
836
	ret->internal->app_verify_cookie_cb = 0;
1846
1847
836
	ret->internal->sessions = lh_SSL_SESSION_new();
1848
836
	if (ret->internal->sessions == NULL)
1849
		goto err;
1850
836
	ret->cert_store = X509_STORE_new();
1851
836
	if (ret->cert_store == NULL)
1852
		goto err;
1853
1854
1672
	ssl_create_cipher_list(ret->method, &ret->cipher_list,
1855
836
	    &ret->internal->cipher_list_by_id, SSL_DEFAULT_CIPHER_LIST);
1856

1672
	if (ret->cipher_list == NULL ||
1857
836
	    sk_SSL_CIPHER_num(ret->cipher_list) <= 0) {
1858
		SSLerrorx(SSL_R_LIBRARY_HAS_NO_CIPHERS);
1859
		goto err2;
1860
	}
1861
1862
836
	ret->param = X509_VERIFY_PARAM_new();
1863
836
	if (!ret->param)
1864
		goto err;
1865
1866
836
	if ((ret->internal->client_CA = sk_X509_NAME_new_null()) == NULL)
1867
		goto err;
1868
1869
836
	CRYPTO_new_ex_data(CRYPTO_EX_INDEX_SSL_CTX, ret, &ret->internal->ex_data);
1870
1871
836
	ret->extra_certs = NULL;
1872
1873
836
	ret->internal->max_send_fragment = SSL3_RT_MAX_PLAIN_LENGTH;
1874
1875
836
	ret->internal->tlsext_servername_callback = 0;
1876
836
	ret->internal->tlsext_servername_arg = NULL;
1877
1878
	/* Setup RFC4507 ticket keys */
1879
836
	arc4random_buf(ret->internal->tlsext_tick_key_name, 16);
1880
836
	arc4random_buf(ret->internal->tlsext_tick_hmac_key, 16);
1881
836
	arc4random_buf(ret->internal->tlsext_tick_aes_key, 16);
1882
1883
836
	ret->internal->tlsext_status_cb = 0;
1884
836
	ret->internal->tlsext_status_arg = NULL;
1885
1886
#ifndef OPENSSL_NO_ENGINE
1887
836
	ret->internal->client_cert_engine = NULL;
1888
#ifdef OPENSSL_SSL_CLIENT_ENGINE_AUTO
1889
#define eng_strx(x)	#x
1890
#define eng_str(x)	eng_strx(x)
1891
	/* Use specific client engine automatically... ignore errors */
1892
	{
1893
		ENGINE *eng;
1894
		eng = ENGINE_by_id(eng_str(OPENSSL_SSL_CLIENT_ENGINE_AUTO));
1895
		if (!eng) {
1896
			ERR_clear_error();
1897
			ENGINE_load_builtin_engines();
1898
			eng = ENGINE_by_id(eng_str(
1899
			    OPENSSL_SSL_CLIENT_ENGINE_AUTO));
1900
		}
1901
		if (!eng || !SSL_CTX_set_client_cert_engine(ret, eng))
1902
			ERR_clear_error();
1903
	}
1904
#endif
1905
#endif
1906
	/*
1907
	 * Default is to connect to non-RI servers. When RI is more widely
1908
	 * deployed might change this.
1909
	 */
1910
836
	ret->internal->options |= SSL_OP_LEGACY_SERVER_CONNECT;
1911
1912
836
	return (ret);
1913
err:
1914
	SSLerrorx(ERR_R_MALLOC_FAILURE);
1915
err2:
1916
	SSL_CTX_free(ret);
1917
	return (NULL);
1918
836
}
1919
1920
void
1921
SSL_CTX_free(SSL_CTX *ctx)
1922
{
1923
	int	i;
1924
1925
8462
	if (ctx == NULL)
1926
296
		return;
1927
1928
3935
	i = CRYPTO_add(&ctx->references, -1, CRYPTO_LOCK_SSL_CTX);
1929
3935
	if (i > 0)
1930
3106
		return;
1931
1932
829
	X509_VERIFY_PARAM_free(ctx->param);
1933
1934
	/*
1935
	 * Free internal session cache. However: the remove_cb() may reference
1936
	 * the ex_data of SSL_CTX, thus the ex_data store can only be removed
1937
	 * after the sessions were flushed.
1938
	 * As the ex_data handling routines might also touch the session cache,
1939
	 * the most secure solution seems to be: empty (flush) the cache, then
1940
	 * free ex_data, then finally free the cache.
1941
	 * (See ticket [openssl.org #212].)
1942
	 */
1943
829
	if (ctx->internal->sessions != NULL)
1944
829
		SSL_CTX_flush_sessions(ctx, 0);
1945
1946
829
	CRYPTO_free_ex_data(CRYPTO_EX_INDEX_SSL_CTX, ctx, &ctx->internal->ex_data);
1947
1948
829
	lh_SSL_SESSION_free(ctx->internal->sessions);
1949
1950
829
	X509_STORE_free(ctx->cert_store);
1951
829
	sk_SSL_CIPHER_free(ctx->cipher_list);
1952
829
	sk_SSL_CIPHER_free(ctx->internal->cipher_list_by_id);
1953
829
	ssl_cert_free(ctx->internal->cert);
1954
829
	sk_X509_NAME_pop_free(ctx->internal->client_CA, X509_NAME_free);
1955
829
	sk_X509_pop_free(ctx->extra_certs, X509_free);
1956
1957
#ifndef OPENSSL_NO_SRTP
1958
829
	if (ctx->internal->srtp_profiles)
1959
		sk_SRTP_PROTECTION_PROFILE_free(ctx->internal->srtp_profiles);
1960
#endif
1961
1962
#ifndef OPENSSL_NO_ENGINE
1963
829
	if (ctx->internal->client_cert_engine)
1964
		ENGINE_finish(ctx->internal->client_cert_engine);
1965
#endif
1966
1967
829
	free(ctx->internal->tlsext_ecpointformatlist);
1968
829
	free(ctx->internal->tlsext_supportedgroups);
1969
1970
829
	free(ctx->internal->alpn_client_proto_list);
1971
1972
829
	free(ctx->internal);
1973
829
	free(ctx);
1974
5060
}
1975
1976
void
1977
SSL_CTX_set_default_passwd_cb(SSL_CTX *ctx, pem_password_cb *cb)
1978
{
1979
	ctx->default_passwd_callback = cb;
1980
}
1981
1982
void
1983
SSL_CTX_set_default_passwd_cb_userdata(SSL_CTX *ctx, void *u)
1984
{
1985
	ctx->default_passwd_callback_userdata = u;
1986
}
1987
1988
void
1989
SSL_CTX_set_cert_verify_callback(SSL_CTX *ctx, int (*cb)(X509_STORE_CTX *,
1990
    void *), void *arg)
1991
{
1992
144
	ctx->internal->app_verify_callback = cb;
1993
72
	ctx->internal->app_verify_arg = arg;
1994
72
}
1995
1996
void
1997
SSL_CTX_set_verify(SSL_CTX *ctx, int mode, int (*cb)(int, X509_STORE_CTX *))
1998
{
1999
372
	ctx->verify_mode = mode;
2000
186
	ctx->internal->default_verify_callback = cb;
2001
186
}
2002
2003
void
2004
SSL_CTX_set_verify_depth(SSL_CTX *ctx, int depth)
2005
{
2006
32
	X509_VERIFY_PARAM_set_depth(ctx->param, depth);
2007
16
}
2008
2009
void
2010
ssl_set_cert_masks(CERT *c, const SSL_CIPHER *cipher)
2011
{
2012
	int		 rsa_enc, rsa_sign, dh_tmp;
2013
	int		 have_ecc_cert;
2014
	unsigned long	 mask_k, mask_a;
2015
	X509		*x = NULL;
2016
	CERT_PKEY	*cpk;
2017
2018
1088
	if (c == NULL)
2019
		return;
2020
2021

1248
	dh_tmp = (c->dh_tmp != NULL || c->dh_tmp_cb != NULL ||
2022
80
	    c->dh_tmp_auto != 0);
2023
2024
544
	cpk = &(c->pkeys[SSL_PKEY_RSA_ENC]);
2025
1632
	rsa_enc = (cpk->x509 != NULL && cpk->privatekey != NULL);
2026
544
	cpk = &(c->pkeys[SSL_PKEY_RSA_SIGN]);
2027
1088
	rsa_sign = (cpk->x509 != NULL && cpk->privatekey != NULL);
2028
544
	cpk = &(c->pkeys[SSL_PKEY_ECC]);
2029
1088
	have_ecc_cert = (cpk->x509 != NULL && cpk->privatekey != NULL);
2030
2031
	mask_k = 0;
2032
	mask_a = 0;
2033
2034
544
	cpk = &(c->pkeys[SSL_PKEY_GOST01]);
2035

544
	if (cpk->x509 != NULL && cpk->privatekey !=NULL) {
2036
		mask_k |= SSL_kGOST;
2037
		mask_a |= SSL_aGOST01;
2038
	}
2039
2040
544
	if (rsa_enc)
2041
544
		mask_k |= SSL_kRSA;
2042
2043
544
	if (dh_tmp)
2044
488
		mask_k |= SSL_kDHE;
2045
2046
544
	if (rsa_enc || rsa_sign)
2047
544
		mask_a |= SSL_aRSA;
2048
2049
544
	mask_a |= SSL_aNULL;
2050
2051
	/*
2052
	 * An ECC certificate may be usable for ECDH and/or
2053
	 * ECDSA cipher suites depending on the key usage extension.
2054
	 */
2055
544
	if (have_ecc_cert) {
2056
		x = (c->pkeys[SSL_PKEY_ECC]).x509;
2057
2058
		/* This call populates extension flags (ex_flags). */
2059
		X509_check_purpose(x, -1, 0);
2060
2061
		/* Key usage, if present, must allow signing. */
2062
		if ((x->ex_flags & EXFLAG_KUSAGE) == 0 ||
2063
		    (x->ex_kusage & X509v3_KU_DIGITAL_SIGNATURE))
2064
			mask_a |= SSL_aECDSA;
2065
	}
2066
2067
544
	mask_k |= SSL_kECDHE;
2068
2069
544
	c->mask_k = mask_k;
2070
544
	c->mask_a = mask_a;
2071
544
	c->valid = 1;
2072
1088
}
2073
2074
/* See if this handshake is using an ECC cipher suite. */
2075
int
2076
ssl_using_ecc_cipher(SSL *s)
2077
{
2078
	unsigned long alg_a, alg_k;
2079
2080
448
	alg_a = S3I(s)->hs.new_cipher->algorithm_auth;
2081
224
	alg_k = S3I(s)->hs.new_cipher->algorithm_mkey;
2082
2083
448
	return SSI(s)->tlsext_ecpointformatlist != NULL &&
2084
344
	    SSI(s)->tlsext_ecpointformatlist_length > 0 &&
2085
120
	    ((alg_k & SSL_kECDHE) || (alg_a & SSL_aECDSA));
2086
}
2087
2088
int
2089
ssl_check_srvr_ecc_cert_and_alg(X509 *x, SSL *s)
2090
{
2091
	const SSL_CIPHER	*cs = S3I(s)->hs.new_cipher;
2092
	unsigned long		 alg_a;
2093
2094
	alg_a = cs->algorithm_auth;
2095
2096
	if (alg_a & SSL_aECDSA) {
2097
		/* This call populates extension flags (ex_flags). */
2098
		X509_check_purpose(x, -1, 0);
2099
2100
		/* Key usage, if present, must allow signing. */
2101
		if ((x->ex_flags & EXFLAG_KUSAGE) &&
2102
		    ((x->ex_kusage & X509v3_KU_DIGITAL_SIGNATURE) == 0)) {
2103
			SSLerror(s, SSL_R_ECC_CERT_NOT_FOR_SIGNING);
2104
			return (0);
2105
		}
2106
	}
2107
2108
	return (1);
2109
}
2110
2111
CERT_PKEY *
2112
ssl_get_server_send_pkey(const SSL *s)
2113
{
2114
	unsigned long	 alg_a;
2115
	CERT		*c;
2116
	int		 i;
2117
2118
496
	c = s->cert;
2119
248
	ssl_set_cert_masks(c, S3I(s)->hs.new_cipher);
2120
2121
248
	alg_a = S3I(s)->hs.new_cipher->algorithm_auth;
2122
2123
248
	if (alg_a & SSL_aECDSA) {
2124
		i = SSL_PKEY_ECC;
2125
248
	} else if (alg_a & SSL_aRSA) {
2126
248
		if (c->pkeys[SSL_PKEY_RSA_ENC].x509 == NULL)
2127
			i = SSL_PKEY_RSA_SIGN;
2128
		else
2129
			i = SSL_PKEY_RSA_ENC;
2130
	} else if (alg_a & SSL_aGOST01) {
2131
		i = SSL_PKEY_GOST01;
2132
	} else { /* if (alg_a & SSL_aNULL) */
2133
		SSLerror(s, ERR_R_INTERNAL_ERROR);
2134
		return (NULL);
2135
	}
2136
2137
248
	return (c->pkeys + i);
2138
248
}
2139
2140
X509 *
2141
ssl_get_server_send_cert(const SSL *s)
2142
{
2143
	CERT_PKEY	*cpk;
2144
2145
448
	cpk = ssl_get_server_send_pkey(s);
2146
224
	if (!cpk)
2147
		return (NULL);
2148
224
	return (cpk->x509);
2149
224
}
2150
2151
EVP_PKEY *
2152
ssl_get_sign_pkey(SSL *s, const SSL_CIPHER *cipher, const EVP_MD **pmd)
2153
{
2154
	unsigned long	 alg_a;
2155
	CERT		*c;
2156
	int		 idx = -1;
2157
2158
328
	alg_a = cipher->algorithm_auth;
2159
164
	c = s->cert;
2160
2161
164
	if (alg_a & SSL_aRSA) {
2162
164
		if (c->pkeys[SSL_PKEY_RSA_SIGN].privatekey != NULL)
2163
			idx = SSL_PKEY_RSA_SIGN;
2164
164
		else if (c->pkeys[SSL_PKEY_RSA_ENC].privatekey != NULL)
2165
164
			idx = SSL_PKEY_RSA_ENC;
2166
	} else if ((alg_a & SSL_aECDSA) &&
2167
	    (c->pkeys[SSL_PKEY_ECC].privatekey != NULL))
2168
		idx = SSL_PKEY_ECC;
2169
164
	if (idx == -1) {
2170
		SSLerror(s, ERR_R_INTERNAL_ERROR);
2171
		return (NULL);
2172
	}
2173
164
	if (pmd)
2174
164
		*pmd = c->pkeys[idx].digest;
2175
164
	return (c->pkeys[idx].privatekey);
2176
164
}
2177
2178
DH *
2179
ssl_get_auto_dh(SSL *s)
2180
{
2181
	CERT_PKEY *cpk;
2182
	int keylen;
2183
	DH *dhp;
2184
2185
16
	if (s->cert->dh_tmp_auto == 2) {
2186
		keylen = 1024;
2187
8
	} else if (S3I(s)->hs.new_cipher->algorithm_auth & SSL_aNULL) {
2188
		keylen = 1024;
2189
		if (S3I(s)->hs.new_cipher->strength_bits == 256)
2190
			keylen = 3072;
2191
	} else {
2192
8
		if ((cpk = ssl_get_server_send_pkey(s)) == NULL)
2193
			return (NULL);
2194

16
		if (cpk->privatekey == NULL || cpk->privatekey->pkey.dh == NULL)
2195
			return (NULL);
2196
8
		keylen = EVP_PKEY_bits(cpk->privatekey);
2197
	}
2198
2199
8
	if ((dhp = DH_new()) == NULL)
2200
		return (NULL);
2201
2202
8
	dhp->g = BN_new();
2203
8
	if (dhp->g != NULL)
2204
8
		BN_set_word(dhp->g, 2);
2205
2206
8
	if (keylen >= 8192)
2207
		dhp->p = get_rfc3526_prime_8192(NULL);
2208
8
	else if (keylen >= 4096)
2209
		dhp->p = get_rfc3526_prime_4096(NULL);
2210
8
	else if (keylen >= 3072)
2211
		dhp->p = get_rfc3526_prime_3072(NULL);
2212
8
	else if (keylen >= 2048)
2213
8
		dhp->p = get_rfc3526_prime_2048(NULL);
2214
	else if (keylen >= 1536)
2215
		dhp->p = get_rfc3526_prime_1536(NULL);
2216
	else
2217
		dhp->p = get_rfc2409_prime_1024(NULL);
2218
2219

16
	if (dhp->p == NULL || dhp->g == NULL) {
2220
		DH_free(dhp);
2221
		return (NULL);
2222
	}
2223
8
	return (dhp);
2224
8
}
2225
2226
void
2227
ssl_update_cache(SSL *s, int mode)
2228
{
2229
	int	i;
2230
2231
	/*
2232
	 * If the session_id_length is 0, we are not supposed to cache it,
2233
	 * and it would be rather hard to do anyway :-)
2234
	 */
2235
16866
	if (s->session->session_id_length == 0)
2236
272
		return;
2237
2238
8161
	i = s->session_ctx->internal->session_cache_mode;
2239

8161
	if ((i & mode) && (!s->internal->hit) && ((i & SSL_SESS_CACHE_NO_INTERNAL_STORE)
2240
	    || SSL_CTX_add_session(s->session_ctx, s->session))
2241
	    && (s->session_ctx->internal->new_session_cb != NULL)) {
2242
		CRYPTO_add(&s->session->references, 1, CRYPTO_LOCK_SSL_SESSION);
2243
		if (!s->session_ctx->internal->new_session_cb(s, s->session))
2244
			SSL_SESSION_free(s->session);
2245
	}
2246
2247
	/* auto flush every 255 connections */
2248

16322
	if ((!(i & SSL_SESS_CACHE_NO_AUTO_CLEAR)) &&
2249
8161
	    ((i & mode) == mode)) {
2250
		if ((((mode & SSL_SESS_CACHE_CLIENT) ?
2251
		    s->session_ctx->internal->stats.sess_connect_good :
2252
		    s->session_ctx->internal->stats.sess_accept_good) & 0xff) == 0xff) {
2253
			SSL_CTX_flush_sessions(s->session_ctx, time(NULL));
2254
		}
2255
	}
2256
16594
}
2257
2258
const SSL_METHOD *
2259
SSL_get_ssl_method(SSL *s)
2260
{
2261
	return (s->method);
2262
}
2263
2264
int
2265
SSL_set_ssl_method(SSL *s, const SSL_METHOD *meth)
2266
{
2267
	int	conn = -1;
2268
	int	ret = 1;
2269
2270
72
	if (s->method != meth) {
2271
36
		if (s->internal->handshake_func != NULL)
2272
36
			conn = (s->internal->handshake_func == s->method->internal->ssl_connect);
2273
2274
36
		if (s->method->internal->version == meth->internal->version)
2275
36
			s->method = meth;
2276
		else {
2277
			s->method->internal->ssl_free(s);
2278
			s->method = meth;
2279
			ret = s->method->internal->ssl_new(s);
2280
		}
2281
2282
36
		if (conn == 1)
2283
36
			s->internal->handshake_func = meth->internal->ssl_connect;
2284
		else if (conn == 0)
2285
			s->internal->handshake_func = meth->internal->ssl_accept;
2286
	}
2287
36
	return (ret);
2288
}
2289
2290
int
2291
SSL_get_error(const SSL *s, int i)
2292
{
2293
	int		 reason;
2294
	unsigned long	 l;
2295
	BIO		*bio;
2296
2297
25220
	if (i > 0)
2298
960
		return (SSL_ERROR_NONE);
2299
2300
	/* Make things return SSL_ERROR_SYSCALL when doing SSL_do_handshake
2301
	 * etc, where we do encode the error */
2302
11650
	if ((l = ERR_peek_error()) != 0) {
2303
		if (ERR_GET_LIB(l) == ERR_LIB_SYS)
2304
			return (SSL_ERROR_SYSCALL);
2305
		else
2306
			return (SSL_ERROR_SSL);
2307
	}
2308
2309

23298
	if ((i < 0) && SSL_want_read(s)) {
2310
9400
		bio = SSL_get_rbio(s);
2311
9400
		if (BIO_should_read(bio)) {
2312
9400
			return (SSL_ERROR_WANT_READ);
2313
		} else if (BIO_should_write(bio)) {
2314
			/*
2315
			 * This one doesn't make too much sense...  We never
2316
			 * try to write to the rbio, and an application
2317
			 * program where rbio and wbio are separate couldn't
2318
			 * even know what it should wait for.  However if we
2319
			 * ever set s->internal->rwstate incorrectly (so that we have
2320
			 * SSL_want_read(s) instead of SSL_want_write(s))
2321
			 * and rbio and wbio *are* the same, this test works
2322
			 * around that bug; so it might be safer to keep it.
2323
			 */
2324
			return (SSL_ERROR_WANT_WRITE);
2325
		} else if (BIO_should_io_special(bio)) {
2326
			reason = BIO_get_retry_reason(bio);
2327
			if (reason == BIO_RR_CONNECT)
2328
				return (SSL_ERROR_WANT_CONNECT);
2329
			else if (reason == BIO_RR_ACCEPT)
2330
				return (SSL_ERROR_WANT_ACCEPT);
2331
			else
2332
				return (SSL_ERROR_SYSCALL); /* unknown */
2333
		}
2334
	}
2335
2336

4498
	if ((i < 0) && SSL_want_write(s)) {
2337
2248
		bio = SSL_get_wbio(s);
2338
2248
		if (BIO_should_write(bio)) {
2339
2248
			return (SSL_ERROR_WANT_WRITE);
2340
		} else if (BIO_should_read(bio)) {
2341
			/*
2342
			 * See above (SSL_want_read(s) with
2343
			 * BIO_should_write(bio))
2344
			 */
2345
			return (SSL_ERROR_WANT_READ);
2346
		} else if (BIO_should_io_special(bio)) {
2347
			reason = BIO_get_retry_reason(bio);
2348
			if (reason == BIO_RR_CONNECT)
2349
				return (SSL_ERROR_WANT_CONNECT);
2350
			else if (reason == BIO_RR_ACCEPT)
2351
				return (SSL_ERROR_WANT_ACCEPT);
2352
			else
2353
				return (SSL_ERROR_SYSCALL);
2354
		}
2355
	}
2356

2
	if ((i < 0) && SSL_want_x509_lookup(s)) {
2357
		return (SSL_ERROR_WANT_X509_LOOKUP);
2358
	}
2359
2360
2
	if (i == 0) {
2361

2
		if ((s->internal->shutdown & SSL_RECEIVED_SHUTDOWN) &&
2362
		    (S3I(s)->warn_alert == SSL_AD_CLOSE_NOTIFY))
2363
		return (SSL_ERROR_ZERO_RETURN);
2364
	}
2365
2
	return (SSL_ERROR_SYSCALL);
2366
12610
}
2367
2368
int
2369
SSL_do_handshake(SSL *s)
2370
{
2371
	int	ret = 1;
2372
2373
	if (s->internal->handshake_func == NULL) {
2374
		SSLerror(s, SSL_R_CONNECTION_TYPE_NOT_SET);
2375
		return (-1);
2376
	}
2377
2378
	s->method->internal->ssl_renegotiate_check(s);
2379
2380
	if (SSL_in_init(s) || SSL_in_before(s)) {
2381
		ret = s->internal->handshake_func(s);
2382
	}
2383
	return (ret);
2384
}
2385
2386
/*
2387
 * For the next 2 functions, SSL_clear() sets shutdown and so
2388
 * one of these calls will reset it
2389
 */
2390
void
2391
SSL_set_accept_state(SSL *s)
2392
{
2393
528
	s->server = 1;
2394
264
	s->internal->shutdown = 0;
2395
264
	S3I(s)->hs.state = SSL_ST_ACCEPT|SSL_ST_BEFORE;
2396
264
	s->internal->handshake_func = s->method->internal->ssl_accept;
2397
	/* clear the current cipher */
2398
264
	ssl_clear_cipher_ctx(s);
2399
264
	ssl_clear_hash_ctx(&s->read_hash);
2400
264
	ssl_clear_hash_ctx(&s->internal->write_hash);
2401
264
}
2402
2403
void
2404
SSL_set_connect_state(SSL *s)
2405
{
2406
16442
	s->server = 0;
2407
8221
	s->internal->shutdown = 0;
2408
8221
	S3I(s)->hs.state = SSL_ST_CONNECT|SSL_ST_BEFORE;
2409
8221
	s->internal->handshake_func = s->method->internal->ssl_connect;
2410
	/* clear the current cipher */
2411
8221
	ssl_clear_cipher_ctx(s);
2412
8221
	ssl_clear_hash_ctx(&s->read_hash);
2413
8221
	ssl_clear_hash_ctx(&s->internal->write_hash);
2414
8221
}
2415
2416
int
2417
ssl_undefined_function(SSL *s)
2418
{
2419
	SSLerror(s, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
2420
	return (0);
2421
}
2422
2423
int
2424
ssl_undefined_void_function(void)
2425
{
2426
	SSLerrorx(ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
2427
	return (0);
2428
}
2429
2430
int
2431
ssl_undefined_const_function(const SSL *s)
2432
{
2433
	SSLerror(s, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
2434
	return (0);
2435
}
2436
2437
const char *
2438
ssl_version_string(int ver)
2439
{
2440

556
	switch (ver) {
2441
	case DTLS1_VERSION:
2442
48
		return (SSL_TXT_DTLS1);
2443
	case TLS1_VERSION:
2444
72
		return (SSL_TXT_TLSV1);
2445
	case TLS1_1_VERSION:
2446
		return (SSL_TXT_TLSV1_1);
2447
	case TLS1_2_VERSION:
2448
158
		return (SSL_TXT_TLSV1_2);
2449
	default:
2450
		return ("unknown");
2451
	}
2452
278
}
2453
2454
const char *
2455
SSL_get_version(const SSL *s)
2456
{
2457
544
	return ssl_version_string(s->version);
2458
}
2459
2460
SSL *
2461
SSL_dup(SSL *s)
2462
{
2463
	STACK_OF(X509_NAME) *sk;
2464
	X509_NAME *xn;
2465
	SSL *ret;
2466
	int i;
2467
2468
	if ((ret = SSL_new(SSL_get_SSL_CTX(s))) == NULL)
2469
		return (NULL);
2470
2471
	ret->version = s->version;
2472
	ret->internal->type = s->internal->type;
2473
	ret->method = s->method;
2474
2475
	if (s->session != NULL) {
2476
		/* This copies session-id, SSL_METHOD, sid_ctx, and 'cert' */
2477
		SSL_copy_session_id(ret, s);
2478
	} else {
2479
		/*
2480
		 * No session has been established yet, so we have to expect
2481
		 * that s->cert or ret->cert will be changed later --
2482
		 * they should not both point to the same object,
2483
		 * and thus we can't use SSL_copy_session_id.
2484
		 */
2485
2486
		ret->method->internal->ssl_free(ret);
2487
		ret->method = s->method;
2488
		ret->method->internal->ssl_new(ret);
2489
2490
		if (s->cert != NULL) {
2491
			ssl_cert_free(ret->cert);
2492
			ret->cert = ssl_cert_dup(s->cert);
2493
			if (ret->cert == NULL)
2494
				goto err;
2495
		}
2496
2497
		SSL_set_session_id_context(ret,
2498
		s->sid_ctx, s->sid_ctx_length);
2499
	}
2500
2501
	ret->internal->options = s->internal->options;
2502
	ret->internal->mode = s->internal->mode;
2503
	SSL_set_max_cert_list(ret, SSL_get_max_cert_list(s));
2504
	SSL_set_read_ahead(ret, SSL_get_read_ahead(s));
2505
	ret->internal->msg_callback = s->internal->msg_callback;
2506
	ret->internal->msg_callback_arg = s->internal->msg_callback_arg;
2507
	SSL_set_verify(ret, SSL_get_verify_mode(s),
2508
	SSL_get_verify_callback(s));
2509
	SSL_set_verify_depth(ret, SSL_get_verify_depth(s));
2510
	ret->internal->generate_session_id = s->internal->generate_session_id;
2511
2512
	SSL_set_info_callback(ret, SSL_get_info_callback(s));
2513
2514
	ret->internal->debug = s->internal->debug;
2515
2516
	/* copy app data, a little dangerous perhaps */
2517
	if (!CRYPTO_dup_ex_data(CRYPTO_EX_INDEX_SSL,
2518
	    &ret->internal->ex_data, &s->internal->ex_data))
2519
		goto err;
2520
2521
	/* setup rbio, and wbio */
2522
	if (s->rbio != NULL) {
2523
		if (!BIO_dup_state(s->rbio,(char *)&ret->rbio))
2524
			goto err;
2525
	}
2526
	if (s->wbio != NULL) {
2527
		if (s->wbio != s->rbio) {
2528
			if (!BIO_dup_state(s->wbio,(char *)&ret->wbio))
2529
				goto err;
2530
		} else
2531
			ret->wbio = ret->rbio;
2532
	}
2533
	ret->internal->rwstate = s->internal->rwstate;
2534
	ret->internal->in_handshake = s->internal->in_handshake;
2535
	ret->internal->handshake_func = s->internal->handshake_func;
2536
	ret->server = s->server;
2537
	ret->internal->renegotiate = s->internal->renegotiate;
2538
	ret->internal->new_session = s->internal->new_session;
2539
	ret->internal->quiet_shutdown = s->internal->quiet_shutdown;
2540
	ret->internal->shutdown = s->internal->shutdown;
2541
	/* SSL_dup does not really work at any state, though */
2542
	S3I(ret)->hs.state = S3I(s)->hs.state;
2543
	ret->internal->rstate = s->internal->rstate;
2544
2545
	/*
2546
	 * Would have to copy ret->init_buf, ret->init_msg, ret->init_num,
2547
	 * ret->init_off
2548
	 */
2549
	ret->internal->init_num = 0;
2550
2551
	ret->internal->hit = s->internal->hit;
2552
2553
	X509_VERIFY_PARAM_inherit(ret->param, s->param);
2554
2555
	/* dup the cipher_list and cipher_list_by_id stacks */
2556
	if (s->cipher_list != NULL) {
2557
		if ((ret->cipher_list =
2558
		    sk_SSL_CIPHER_dup(s->cipher_list)) == NULL)
2559
			goto err;
2560
	}
2561
	if (s->internal->cipher_list_by_id != NULL) {
2562
		if ((ret->internal->cipher_list_by_id =
2563
		    sk_SSL_CIPHER_dup(s->internal->cipher_list_by_id)) == NULL)
2564
			goto err;
2565
	}
2566
2567
	/* Dup the client_CA list */
2568
	if (s->internal->client_CA != NULL) {
2569
		if ((sk = sk_X509_NAME_dup(s->internal->client_CA)) == NULL) goto err;
2570
			ret->internal->client_CA = sk;
2571
		for (i = 0; i < sk_X509_NAME_num(sk); i++) {
2572
			xn = sk_X509_NAME_value(sk, i);
2573
			if (sk_X509_NAME_set(sk, i,
2574
			    X509_NAME_dup(xn)) == NULL) {
2575
				X509_NAME_free(xn);
2576
				goto err;
2577
			}
2578
		}
2579
	}
2580
2581
	if (0) {
2582
err:
2583
		if (ret != NULL)
2584
			SSL_free(ret);
2585
		ret = NULL;
2586
	}
2587
	return (ret);
2588
}
2589
2590
void
2591
ssl_clear_cipher_ctx(SSL *s)
2592
{
2593
40166
	EVP_CIPHER_CTX_free(s->enc_read_ctx);
2594
20083
	s->enc_read_ctx = NULL;
2595
20083
	EVP_CIPHER_CTX_free(s->internal->enc_write_ctx);
2596
20083
	s->internal->enc_write_ctx = NULL;
2597
2598
20083
	if (s->internal->aead_read_ctx != NULL) {
2599
8105
		EVP_AEAD_CTX_cleanup(&s->internal->aead_read_ctx->ctx);
2600
8105
		free(s->internal->aead_read_ctx);
2601
8105
		s->internal->aead_read_ctx = NULL;
2602
8105
	}
2603
20083
	if (s->internal->aead_write_ctx != NULL) {
2604
8105
		EVP_AEAD_CTX_cleanup(&s->internal->aead_write_ctx->ctx);
2605
8105
		free(s->internal->aead_write_ctx);
2606
8105
		s->internal->aead_write_ctx = NULL;
2607
8105
	}
2608
2609
20083
}
2610
2611
/* Fix this function so that it takes an optional type parameter */
2612
X509 *
2613
SSL_get_certificate(const SSL *s)
2614
{
2615
	if (s->cert != NULL)
2616
		return (s->cert->key->x509);
2617
	else
2618
		return (NULL);
2619
}
2620
2621
/* Fix this function so that it takes an optional type parameter */
2622
EVP_PKEY *
2623
SSL_get_privatekey(SSL *s)
2624
{
2625
	if (s->cert != NULL)
2626
		return (s->cert->key->privatekey);
2627
	else
2628
		return (NULL);
2629
}
2630
2631
const SSL_CIPHER *
2632
SSL_get_current_cipher(const SSL *s)
2633
{
2634

828
	if ((s->session != NULL) && (s->session->cipher != NULL))
2635
276
		return (s->session->cipher);
2636
	return (NULL);
2637
276
}
2638
const void *
2639
SSL_get_current_compression(SSL *s)
2640
{
2641
	return (NULL);
2642
}
2643
2644
const void *
2645
SSL_get_current_expansion(SSL *s)
2646
{
2647
	return (NULL);
2648
}
2649
2650
int
2651
ssl_init_wbio_buffer(SSL *s, int push)
2652
{
2653
	BIO	*bbio;
2654
2655
16970
	if (s->bbio == NULL) {
2656
8485
		bbio = BIO_new(BIO_f_buffer());
2657
8485
		if (bbio == NULL)
2658
			return (0);
2659
8485
		s->bbio = bbio;
2660
8485
	} else {
2661
		bbio = s->bbio;
2662
		if (s->bbio == s->wbio)
2663
			s->wbio = BIO_pop(s->wbio);
2664
	}
2665
8485
	(void)BIO_reset(bbio);
2666
/*	if (!BIO_set_write_buffer_size(bbio,16*1024)) */
2667
8485
	if (!BIO_set_read_buffer_size(bbio, 1)) {
2668
		SSLerror(s, ERR_R_BUF_LIB);
2669
		return (0);
2670
	}
2671
8485
	if (push) {
2672
264
		if (s->wbio != bbio)
2673
264
			s->wbio = BIO_push(bbio, s->wbio);
2674
	} else {
2675
8221
		if (s->wbio == bbio)
2676
			s->wbio = BIO_pop(bbio);
2677
	}
2678
8485
	return (1);
2679
8485
}
2680
2681
void
2682
ssl_free_wbio_buffer(SSL *s)
2683
{
2684
43196
	if (s == NULL)
2685
		return;
2686
2687
21598
	if (s->bbio == NULL)
2688
		return;
2689
2690
8433
	if (s->bbio == s->wbio) {
2691
		/* remove buffering */
2692
8433
		s->wbio = BIO_pop(s->wbio);
2693
8433
	}
2694
8433
	BIO_free(s->bbio);
2695
8433
	s->bbio = NULL;
2696
30031
}
2697
2698
void
2699
SSL_CTX_set_quiet_shutdown(SSL_CTX *ctx, int mode)
2700
{
2701
4
	ctx->internal->quiet_shutdown = mode;
2702
2
}
2703
2704
int
2705
SSL_CTX_get_quiet_shutdown(const SSL_CTX *ctx)
2706
{
2707
	return (ctx->internal->quiet_shutdown);
2708
}
2709
2710
void
2711
SSL_set_quiet_shutdown(SSL *s, int mode)
2712
{
2713
	s->internal->quiet_shutdown = mode;
2714
}
2715
2716
int
2717
SSL_get_quiet_shutdown(const SSL *s)
2718
{
2719
	return (s->internal->quiet_shutdown);
2720
}
2721
2722
void
2723
SSL_set_shutdown(SSL *s, int mode)
2724
{
2725
	s->internal->shutdown = mode;
2726
}
2727
2728
int
2729
SSL_get_shutdown(const SSL *s)
2730
{
2731
	return (s->internal->shutdown);
2732
}
2733
2734
int
2735
SSL_version(const SSL *s)
2736
{
2737
1770
	return (s->version);
2738
}
2739
2740
SSL_CTX *
2741
SSL_get_SSL_CTX(const SSL *ssl)
2742
{
2743
	return (ssl->ctx);
2744
}
2745
2746
SSL_CTX *
2747
SSL_set_SSL_CTX(SSL *ssl, SSL_CTX* ctx)
2748
{
2749
	CERT *ocert = ssl->cert;
2750
2751
	if (ssl->ctx == ctx)
2752
		return (ssl->ctx);
2753
	if (ctx == NULL)
2754
		ctx = ssl->initial_ctx;
2755
	ssl->cert = ssl_cert_dup(ctx->internal->cert);
2756
	if (ocert != NULL) {
2757
		int i;
2758
		/* Copy negotiated digests from original certificate. */
2759
		for (i = 0; i < SSL_PKEY_NUM; i++)
2760
			ssl->cert->pkeys[i].digest = ocert->pkeys[i].digest;
2761
		ssl_cert_free(ocert);
2762
	}
2763
	CRYPTO_add(&ctx->references, 1, CRYPTO_LOCK_SSL_CTX);
2764
	SSL_CTX_free(ssl->ctx); /* decrement reference count */
2765
	ssl->ctx = ctx;
2766
	return (ssl->ctx);
2767
}
2768
2769
int
2770
SSL_CTX_set_default_verify_paths(SSL_CTX *ctx)
2771
{
2772
168
	return (X509_STORE_set_default_paths(ctx->cert_store));
2773
}
2774
2775
int
2776
SSL_CTX_load_verify_locations(SSL_CTX *ctx, const char *CAfile,
2777
    const char *CApath)
2778
{
2779
708
	return (X509_STORE_load_locations(ctx->cert_store, CAfile, CApath));
2780
}
2781
2782
int
2783
SSL_CTX_load_verify_mem(SSL_CTX *ctx, void *buf, int len)
2784
{
2785
32
	return (X509_STORE_load_mem(ctx->cert_store, buf, len));
2786
}
2787
2788
void
2789
SSL_set_info_callback(SSL *ssl, void (*cb)(const SSL *ssl, int type, int val))
2790
{
2791
	ssl->internal->info_callback = cb;
2792
}
2793
2794
void (*SSL_get_info_callback(const SSL *ssl))(const SSL *ssl, int type, int val)
2795
{
2796
	return (ssl->internal->info_callback);
2797
}
2798
2799
int
2800
SSL_state(const SSL *ssl)
2801
{
2802
269308
	return (S3I(ssl)->hs.state);
2803
}
2804
2805
void
2806
SSL_set_state(SSL *ssl, int state)
2807
{
2808
	S3I(ssl)->hs.state = state;
2809
}
2810
2811
void
2812
SSL_set_verify_result(SSL *ssl, long arg)
2813
{
2814
	ssl->verify_result = arg;
2815
}
2816
2817
long
2818
SSL_get_verify_result(const SSL *ssl)
2819
{
2820
	return (ssl->verify_result);
2821
}
2822
2823
int
2824
SSL_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,
2825
    CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func)
2826
{
2827
	return (CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_SSL, argl, argp,
2828
	    new_func, dup_func, free_func));
2829
}
2830
2831
int
2832
SSL_set_ex_data(SSL *s, int idx, void *arg)
2833
{
2834
64
	return (CRYPTO_set_ex_data(&s->internal->ex_data, idx, arg));
2835
}
2836
2837
void *
2838
SSL_get_ex_data(const SSL *s, int idx)
2839
{
2840
96
	return (CRYPTO_get_ex_data(&s->internal->ex_data, idx));
2841
}
2842
2843
int
2844
SSL_CTX_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,
2845
    CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func)
2846
{
2847
	return (CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_SSL_CTX, argl, argp,
2848
	    new_func, dup_func, free_func));
2849
}
2850
2851
int
2852
SSL_CTX_set_ex_data(SSL_CTX *s, int idx, void *arg)
2853
{
2854
	return (CRYPTO_set_ex_data(&s->internal->ex_data, idx, arg));
2855
}
2856
2857
void *
2858
SSL_CTX_get_ex_data(const SSL_CTX *s, int idx)
2859
{
2860
	return (CRYPTO_get_ex_data(&s->internal->ex_data, idx));
2861
}
2862
2863
int
2864
ssl_ok(SSL *s)
2865
{
2866
	return (1);
2867
}
2868
2869
X509_STORE *
2870
SSL_CTX_get_cert_store(const SSL_CTX *ctx)
2871
{
2872
212
	return (ctx->cert_store);
2873
}
2874
2875
void
2876
SSL_CTX_set_cert_store(SSL_CTX *ctx, X509_STORE *store)
2877
{
2878
	X509_STORE_free(ctx->cert_store);
2879
	ctx->cert_store = store;
2880
}
2881
2882
int
2883
SSL_want(const SSL *s)
2884
{
2885
27792
	return (s->internal->rwstate);
2886
}
2887
2888
void
2889
SSL_CTX_set_tmp_rsa_callback(SSL_CTX *ctx, RSA *(*cb)(SSL *ssl, int is_export,
2890
    int keylength))
2891
{
2892
408
	SSL_CTX_callback_ctrl(ctx, SSL_CTRL_SET_TMP_RSA_CB,(void (*)(void))cb);
2893
204
}
2894
2895
void
2896
SSL_set_tmp_rsa_callback(SSL *ssl, RSA *(*cb)(SSL *ssl, int is_export,
2897
    int keylength))
2898
{
2899
	SSL_callback_ctrl(ssl, SSL_CTRL_SET_TMP_RSA_CB,(void (*)(void))cb);
2900
}
2901
2902
void
2903
SSL_CTX_set_tmp_dh_callback(SSL_CTX *ctx, DH *(*dh)(SSL *ssl, int is_export,
2904
    int keylength))
2905
{
2906
	SSL_CTX_callback_ctrl(ctx, SSL_CTRL_SET_TMP_DH_CB,(void (*)(void))dh);
2907
}
2908
2909
void
2910
SSL_set_tmp_dh_callback(SSL *ssl, DH *(*dh)(SSL *ssl, int is_export,
2911
    int keylength))
2912
{
2913
	SSL_callback_ctrl(ssl, SSL_CTRL_SET_TMP_DH_CB,(void (*)(void))dh);
2914
}
2915
2916
void
2917
SSL_CTX_set_tmp_ecdh_callback(SSL_CTX *ctx, EC_KEY *(*ecdh)(SSL *ssl,
2918
    int is_export, int keylength))
2919
{
2920
	SSL_CTX_callback_ctrl(ctx, SSL_CTRL_SET_TMP_ECDH_CB,
2921
	    (void (*)(void))ecdh);
2922
}
2923
2924
void
2925
SSL_set_tmp_ecdh_callback(SSL *ssl, EC_KEY *(*ecdh)(SSL *ssl, int is_export,
2926
    int keylength))
2927
{
2928
	SSL_callback_ctrl(ssl, SSL_CTRL_SET_TMP_ECDH_CB,(void (*)(void))ecdh);
2929
}
2930
2931
2932
void
2933
SSL_CTX_set_msg_callback(SSL_CTX *ctx, void (*cb)(int write_p, int version,
2934
    int content_type, const void *buf, size_t len, SSL *ssl, void *arg))
2935
{
2936
	SSL_CTX_callback_ctrl(ctx, SSL_CTRL_SET_MSG_CALLBACK,
2937
	    (void (*)(void))cb);
2938
}
2939
2940
void
2941
SSL_set_msg_callback(SSL *ssl, void (*cb)(int write_p, int version,
2942
    int content_type, const void *buf, size_t len, SSL *ssl, void *arg))
2943
{
2944
	SSL_callback_ctrl(ssl, SSL_CTRL_SET_MSG_CALLBACK, (void (*)(void))cb);
2945
}
2946
2947
void
2948
ssl_clear_hash_ctx(EVP_MD_CTX **hash)
2949
{
2950
80332
	if (*hash)
2951
656
		EVP_MD_CTX_destroy(*hash);
2952
40166
	*hash = NULL;
2953
40166
}
2954
2955
void
2956
SSL_set_debug(SSL *s, int debug)
2957
{
2958
4
	s->internal->debug = debug;
2959
2
}
2960
2961
int
2962
SSL_cache_hit(SSL *s)
2963
{
2964
8
	return (s->internal->hit);
2965
}
2966
2967
int
2968
SSL_CTX_set_min_proto_version(SSL_CTX *ctx, uint16_t version)
2969
{
2970
60
	return ssl_version_set_min(ctx->method, version,
2971
20
	    ctx->internal->max_version, &ctx->internal->min_version);
2972
}
2973
2974
int
2975
SSL_CTX_set_max_proto_version(SSL_CTX *ctx, uint16_t version)
2976
{
2977
54
	return ssl_version_set_max(ctx->method, version,
2978
18
	    ctx->internal->min_version, &ctx->internal->max_version);
2979
}
2980
2981
int
2982
SSL_set_min_proto_version(SSL *ssl, uint16_t version)
2983
{
2984
45
	return ssl_version_set_min(ssl->method, version,
2985
15
	    ssl->internal->max_version, &ssl->internal->min_version);
2986
}
2987
2988
int
2989
SSL_set_max_proto_version(SSL *ssl, uint16_t version)
2990
{
2991
45
	return ssl_version_set_max(ssl->method, version,
2992
15
	    ssl->internal->min_version, &ssl->internal->max_version);
2993
}
2994
2995
static int
2996
ssl_cipher_id_cmp_BSEARCH_CMP_FN(const void *a_, const void *b_)
2997
{
2998
157720
	SSL_CIPHER const *a = a_;
2999
78860
	SSL_CIPHER const *b = b_;
3000
78860
	return ssl_cipher_id_cmp(a, b);
3001
}
3002
3003
SSL_CIPHER *
3004
OBJ_bsearch_ssl_cipher_id(SSL_CIPHER *key, SSL_CIPHER const *base, int num)
3005
{
3006
30706
	return (SSL_CIPHER *)OBJ_bsearch_(key, base, num, sizeof(SSL_CIPHER),
3007
	    ssl_cipher_id_cmp_BSEARCH_CMP_FN);
3008
}