GCC Code Coverage Report
Directory: ./ Exec Total Coverage
File: lib/libssl/t1_lib.c Lines: 250 512 48.8 %
Date: 2017-11-13 Branches: 144 342 42.1 %

Line Branch Exec Source
1
/* $OpenBSD: t1_lib.c,v 1.139 2017/10/11 17:35:00 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
#include <stdio.h>
113
114
#include <openssl/evp.h>
115
#include <openssl/hmac.h>
116
#include <openssl/objects.h>
117
#include <openssl/ocsp.h>
118
119
#include "ssl_locl.h"
120
121
#include "bytestring.h"
122
#include "ssl_tlsext.h"
123
124
static int tls_decrypt_ticket(SSL *s, const unsigned char *tick, int ticklen,
125
    const unsigned char *sess_id, int sesslen,
126
    SSL_SESSION **psess);
127
128
SSL3_ENC_METHOD TLSv1_enc_data = {
129
	.enc = tls1_enc,
130
	.enc_flags = 0,
131
};
132
133
SSL3_ENC_METHOD TLSv1_1_enc_data = {
134
	.enc = tls1_enc,
135
	.enc_flags = SSL_ENC_FLAG_EXPLICIT_IV,
136
};
137
138
SSL3_ENC_METHOD TLSv1_2_enc_data = {
139
	.enc = tls1_enc,
140
	.enc_flags = SSL_ENC_FLAG_EXPLICIT_IV|SSL_ENC_FLAG_SIGALGS|
141
	    SSL_ENC_FLAG_SHA256_PRF|SSL_ENC_FLAG_TLS1_2_CIPHERS,
142
};
143
144
long
145
tls1_default_timeout(void)
146
{
147
	/* 2 hours, the 24 hours mentioned in the TLSv1 spec
148
	 * is way too long for http, the cache would over fill */
149
1316
	return (60 * 60 * 2);
150
}
151
152
int
153
tls1_new(SSL *s)
154
{
155
3222
	if (!ssl3_new(s))
156
		return (0);
157
1611
	s->method->internal->ssl_clear(s);
158
1611
	return (1);
159
1611
}
160
161
void
162
tls1_free(SSL *s)
163
{
164
3186
	if (s == NULL)
165
		return;
166
167
1593
	free(s->internal->tlsext_session_ticket);
168
1593
	ssl3_free(s);
169
3186
}
170
171
void
172
tls1_clear(SSL *s)
173
{
174
41720
	ssl3_clear(s);
175
20860
	s->version = s->method->internal->version;
176
20860
}
177
178
static int nid_list[] = {
179
	NID_sect163k1,		/* sect163k1 (1) */
180
	NID_sect163r1,		/* sect163r1 (2) */
181
	NID_sect163r2,		/* sect163r2 (3) */
182
	NID_sect193r1,		/* sect193r1 (4) */
183
	NID_sect193r2,		/* sect193r2 (5) */
184
	NID_sect233k1,		/* sect233k1 (6) */
185
	NID_sect233r1,		/* sect233r1 (7) */
186
	NID_sect239k1,		/* sect239k1 (8) */
187
	NID_sect283k1,		/* sect283k1 (9) */
188
	NID_sect283r1,		/* sect283r1 (10) */
189
	NID_sect409k1,		/* sect409k1 (11) */
190
	NID_sect409r1,		/* sect409r1 (12) */
191
	NID_sect571k1,		/* sect571k1 (13) */
192
	NID_sect571r1,		/* sect571r1 (14) */
193
	NID_secp160k1,		/* secp160k1 (15) */
194
	NID_secp160r1,		/* secp160r1 (16) */
195
	NID_secp160r2,		/* secp160r2 (17) */
196
	NID_secp192k1,		/* secp192k1 (18) */
197
	NID_X9_62_prime192v1,	/* secp192r1 (19) */
198
	NID_secp224k1,		/* secp224k1 (20) */
199
	NID_secp224r1,		/* secp224r1 (21) */
200
	NID_secp256k1,		/* secp256k1 (22) */
201
	NID_X9_62_prime256v1,	/* secp256r1 (23) */
202
	NID_secp384r1,		/* secp384r1 (24) */
203
	NID_secp521r1,		/* secp521r1 (25) */
204
	NID_brainpoolP256r1,	/* brainpoolP256r1 (26) */
205
	NID_brainpoolP384r1,	/* brainpoolP384r1 (27) */
206
	NID_brainpoolP512r1,	/* brainpoolP512r1 (28) */
207
	NID_X25519,		/* X25519 (29) */
208
};
209
210
#if 0
211
static const uint8_t ecformats_list[] = {
212
	TLSEXT_ECPOINTFORMAT_uncompressed,
213
	TLSEXT_ECPOINTFORMAT_ansiX962_compressed_prime,
214
	TLSEXT_ECPOINTFORMAT_ansiX962_compressed_char2
215
};
216
#endif
217
218
static const uint8_t ecformats_default[] = {
219
	TLSEXT_ECPOINTFORMAT_uncompressed,
220
};
221
222
#if 0
223
static const uint16_t eccurves_list[] = {
224
	29,			/* X25519 (29) */
225
	14,			/* sect571r1 (14) */
226
	13,			/* sect571k1 (13) */
227
	25,			/* secp521r1 (25) */
228
	28,			/* brainpoolP512r1 (28) */
229
	11,			/* sect409k1 (11) */
230
	12,			/* sect409r1 (12) */
231
	27,			/* brainpoolP384r1 (27) */
232
	24,			/* secp384r1 (24) */
233
	9,			/* sect283k1 (9) */
234
	10,			/* sect283r1 (10) */
235
	26,			/* brainpoolP256r1 (26) */
236
	22,			/* secp256k1 (22) */
237
	23,			/* secp256r1 (23) */
238
	8,			/* sect239k1 (8) */
239
	6,			/* sect233k1 (6) */
240
	7,			/* sect233r1 (7) */
241
	20,			/* secp224k1 (20) */
242
	21,			/* secp224r1 (21) */
243
	4,			/* sect193r1 (4) */
244
	5,			/* sect193r2 (5) */
245
	18,			/* secp192k1 (18) */
246
	19,			/* secp192r1 (19) */
247
	1,			/* sect163k1 (1) */
248
	2,			/* sect163r1 (2) */
249
	3,			/* sect163r2 (3) */
250
	15,			/* secp160k1 (15) */
251
	16,			/* secp160r1 (16) */
252
	17,			/* secp160r2 (17) */
253
};
254
#endif
255
256
static const uint16_t eccurves_default[] = {
257
	29,			/* X25519 (29) */
258
	23,			/* secp256r1 (23) */
259
	24,			/* secp384r1 (24) */
260
};
261
262
int
263
tls1_ec_curve_id2nid(const uint16_t curve_id)
264
{
265
	/* ECC curves from draft-ietf-tls-ecc-12.txt (Oct. 17, 2005) */
266

4080
	if ((curve_id < 1) ||
267
1360
	    ((unsigned int)curve_id > sizeof(nid_list) / sizeof(nid_list[0])))
268
		return 0;
269
1360
	return nid_list[curve_id - 1];
270
1360
}
271
272
uint16_t
273
tls1_ec_nid2curve_id(const int nid)
274
{
275
	/* ECC curves from draft-ietf-tls-ecc-12.txt (Oct. 17, 2005) */
276







834
	switch (nid) {
277
	case NID_sect163k1: /* sect163k1 (1) */
278
		return 1;
279
	case NID_sect163r1: /* sect163r1 (2) */
280
		return 2;
281
	case NID_sect163r2: /* sect163r2 (3) */
282
		return 3;
283
	case NID_sect193r1: /* sect193r1 (4) */
284
		return 4;
285
	case NID_sect193r2: /* sect193r2 (5) */
286
		return 5;
287
	case NID_sect233k1: /* sect233k1 (6) */
288
		return 6;
289
	case NID_sect233r1: /* sect233r1 (7) */
290
		return 7;
291
	case NID_sect239k1: /* sect239k1 (8) */
292
		return 8;
293
	case NID_sect283k1: /* sect283k1 (9) */
294
		return 9;
295
	case NID_sect283r1: /* sect283r1 (10) */
296
		return 10;
297
	case NID_sect409k1: /* sect409k1 (11) */
298
		return 11;
299
	case NID_sect409r1: /* sect409r1 (12) */
300
		return 12;
301
	case NID_sect571k1: /* sect571k1 (13) */
302
		return 13;
303
	case NID_sect571r1: /* sect571r1 (14) */
304
		return 14;
305
	case NID_secp160k1: /* secp160k1 (15) */
306
		return 15;
307
	case NID_secp160r1: /* secp160r1 (16) */
308
		return 16;
309
	case NID_secp160r2: /* secp160r2 (17) */
310
		return 17;
311
	case NID_secp192k1: /* secp192k1 (18) */
312
		return 18;
313
	case NID_X9_62_prime192v1: /* secp192r1 (19) */
314
3
		return 19;
315
	case NID_secp224k1: /* secp224k1 (20) */
316
		return 20;
317
	case NID_secp224r1: /* secp224r1 (21) */
318
3
		return 21;
319
	case NID_secp256k1: /* secp256k1 (22) */
320
		return 22;
321
	case NID_X9_62_prime256v1: /* secp256r1 (23) */
322
345
		return 23;
323
	case NID_secp384r1: /* secp384r1 (24) */
324
27
		return 24;
325
	case NID_secp521r1: /* secp521r1 (25) */
326
		return 25;
327
	case NID_brainpoolP256r1: /* brainpoolP256r1 (26) */
328
		return 26;
329
	case NID_brainpoolP384r1: /* brainpoolP384r1 (27) */
330
		return 27;
331
	case NID_brainpoolP512r1: /* brainpoolP512r1 (28) */
332
		return 28;
333
	case NID_X25519:		/* X25519 (29) */
334
39
		return 29;
335
	default:
336
		return 0;
337
	}
338
417
}
339
340
/*
341
 * Return the appropriate format list. If client_formats is non-zero, return
342
 * the client/session formats. Otherwise return the custom format list if one
343
 * exists, or the default formats if a custom list has not been specified.
344
 */
345
void
346
tls1_get_formatlist(SSL *s, int client_formats, const uint8_t **pformats,
347
    size_t *pformatslen)
348
{
349
31778
	if (client_formats != 0) {
350
		*pformats = SSI(s)->tlsext_ecpointformatlist;
351
		*pformatslen = SSI(s)->tlsext_ecpointformatlist_length;
352
		return;
353
	}
354
355
15889
	*pformats = s->internal->tlsext_ecpointformatlist;
356
15889
	*pformatslen = s->internal->tlsext_ecpointformatlist_length;
357
15889
	if (*pformats == NULL) {
358
15883
		*pformats = ecformats_default;
359
15883
		*pformatslen = sizeof(ecformats_default);
360
15883
	}
361
15889
}
362
363
/*
364
 * Return the appropriate curve list. If client_curves is non-zero, return
365
 * the client/session curves. Otherwise return the custom curve list if one
366
 * exists, or the default curves if a custom list has not been specified.
367
 */
368
void
369
tls1_get_curvelist(SSL *s, int client_curves, const uint16_t **pcurves,
370
    size_t *pcurveslen)
371
{
372
34702
	if (client_curves != 0) {
373
180
		*pcurves = SSI(s)->tlsext_supportedgroups;
374
180
		*pcurveslen = SSI(s)->tlsext_supportedgroups_length;
375
180
		return;
376
	}
377
378
17171
	*pcurves = s->internal->tlsext_supportedgroups;
379
17171
	*pcurveslen = s->internal->tlsext_supportedgroups_length;
380
17171
	if (*pcurves == NULL) {
381
16970
		*pcurves = eccurves_default;
382
16970
		*pcurveslen = sizeof(eccurves_default) / 2;
383
16970
	}
384
17351
}
385
386
int
387
tls1_set_groups(uint16_t **out_group_ids, size_t *out_group_ids_len,
388
    const int *groups, size_t ngroups)
389
{
390
	uint16_t *group_ids;
391
	size_t i;
392
393
552
	group_ids = calloc(ngroups, sizeof(uint16_t));
394
276
	if (group_ids == NULL)
395
		return 0;
396
397
1200
	for (i = 0; i < ngroups; i++) {
398
324
		group_ids[i] = tls1_ec_nid2curve_id(groups[i]);
399
324
		if (group_ids[i] == 0) {
400
			free(group_ids);
401
			return 0;
402
		}
403
	}
404
405
276
	free(*out_group_ids);
406
276
	*out_group_ids = group_ids;
407
276
	*out_group_ids_len = ngroups;
408
409
276
	return 1;
410
276
}
411
412
int
413
tls1_set_groups_list(uint16_t **out_group_ids, size_t *out_group_ids_len,
414
    const char *groups)
415
{
416
	uint16_t *new_group_ids, *group_ids = NULL;
417
	size_t ngroups = 0;
418
	char *gs, *p, *q;
419
	int nid;
420
421
	if ((gs = strdup(groups)) == NULL)
422
		return 0;
423
424
	q = gs;
425
	while ((p = strsep(&q, ":")) != NULL) {
426
		nid = OBJ_sn2nid(p);
427
		if (nid == NID_undef)
428
			nid = OBJ_ln2nid(p);
429
		if (nid == NID_undef)
430
			nid = EC_curve_nist2nid(p);
431
		if (nid == NID_undef)
432
			goto err;
433
434
		if ((new_group_ids = reallocarray(group_ids, ngroups + 1,
435
		    sizeof(uint16_t))) == NULL)
436
			goto err;
437
		group_ids = new_group_ids;
438
439
		group_ids[ngroups] = tls1_ec_nid2curve_id(nid);
440
		if (group_ids[ngroups] == 0)
441
			goto err;
442
443
		ngroups++;
444
	}
445
446
	free(gs);
447
	free(*out_group_ids);
448
	*out_group_ids = group_ids;
449
	*out_group_ids_len = ngroups;
450
451
	return 1;
452
453
 err:
454
	free(gs);
455
	free(group_ids);
456
457
	return 0;
458
}
459
460
/* Check that a curve is one of our preferences. */
461
int
462
tls1_check_curve(SSL *s, const uint16_t curve_id)
463
{
464
2384
	const uint16_t *curves;
465
1192
	size_t curveslen, i;
466
467
1192
	tls1_get_curvelist(s, 0, &curves, &curveslen);
468
469
4738
	for (i = 0; i < curveslen; i++) {
470
2369
		if (curves[i] == curve_id)
471
1192
			return (1);
472
	}
473
	return (0);
474
1192
}
475
476
int
477
tls1_get_shared_curve(SSL *s)
478
{
479
360
	size_t preflen, supplen, i, j;
480
180
	const uint16_t *pref, *supp;
481
	unsigned long server_pref;
482
483
	/* Cannot do anything on the client side. */
484
180
	if (s->server == 0)
485
		return (NID_undef);
486
487
	/* Return first preference shared curve. */
488
180
	server_pref = (s->internal->options & SSL_OP_CIPHER_SERVER_PREFERENCE);
489
180
	tls1_get_curvelist(s, (server_pref == 0), &pref, &preflen);
490
180
	tls1_get_curvelist(s, (server_pref != 0), &supp, &supplen);
491
492
636
	for (i = 0; i < preflen; i++) {
493
888
		for (j = 0; j < supplen; j++) {
494
306
			if (pref[i] == supp[j])
495
168
				return (tls1_ec_curve_id2nid(pref[i]));
496
		}
497
	}
498
12
	return (NID_undef);
499
180
}
500
501
/* For an EC key set TLS ID and required compression based on parameters. */
502
static int
503
tls1_set_ec_id(uint16_t *curve_id, uint8_t *comp_id, EC_KEY *ec)
504
{
505
	const EC_GROUP *grp;
506
	const EC_METHOD *meth;
507
	int is_prime = 0;
508
	int nid, id;
509
510
	if (ec == NULL)
511
		return (0);
512
513
	/* Determine if it is a prime field. */
514
	if ((grp = EC_KEY_get0_group(ec)) == NULL)
515
		return (0);
516
	if ((meth = EC_GROUP_method_of(grp)) == NULL)
517
		return (0);
518
	if (EC_METHOD_get_field_type(meth) == NID_X9_62_prime_field)
519
		is_prime = 1;
520
521
	/* Determine curve ID. */
522
	nid = EC_GROUP_get_curve_name(grp);
523
	id = tls1_ec_nid2curve_id(nid);
524
525
	/* If we have an ID set it, otherwise set arbitrary explicit curve. */
526
	if (id != 0)
527
		*curve_id = id;
528
	else
529
		*curve_id = is_prime ? 0xff01 : 0xff02;
530
531
	/* Specify the compression identifier. */
532
	if (comp_id != NULL) {
533
		if (EC_KEY_get0_public_key(ec) == NULL)
534
			return (0);
535
536
		if (EC_KEY_get_conv_form(ec) == POINT_CONVERSION_COMPRESSED) {
537
			*comp_id = is_prime ?
538
			    TLSEXT_ECPOINTFORMAT_ansiX962_compressed_prime :
539
			    TLSEXT_ECPOINTFORMAT_ansiX962_compressed_char2;
540
		} else {
541
			*comp_id = TLSEXT_ECPOINTFORMAT_uncompressed;
542
		}
543
	}
544
	return (1);
545
}
546
547
/* Check that an EC key is compatible with extensions. */
548
static int
549
tls1_check_ec_key(SSL *s, const uint16_t *curve_id, const uint8_t *comp_id)
550
{
551
	size_t curveslen, formatslen, i;
552
	const uint16_t *curves;
553
	const uint8_t *formats;
554
555
	/*
556
	 * Check point formats extension if present, otherwise everything
557
	 * is supported (see RFC4492).
558
	 */
559
	tls1_get_formatlist(s, 1, &formats, &formatslen);
560
	if (comp_id != NULL && formats != NULL) {
561
		for (i = 0; i < formatslen; i++) {
562
			if (formats[i] == *comp_id)
563
				break;
564
		}
565
		if (i == formatslen)
566
			return (0);
567
	}
568
569
	/*
570
	 * Check curve list if present, otherwise everything is supported.
571
	 */
572
	tls1_get_curvelist(s, 1, &curves, &curveslen);
573
	if (curve_id != NULL && curves != NULL) {
574
		for (i = 0; i < curveslen; i++) {
575
			if (curves[i] == *curve_id)
576
				break;
577
		}
578
		if (i == curveslen)
579
			return (0);
580
	}
581
582
	return (1);
583
}
584
585
/* Check EC server key is compatible with client extensions. */
586
int
587
tls1_check_ec_server_key(SSL *s)
588
{
589
	CERT_PKEY *cpk = s->cert->pkeys + SSL_PKEY_ECC;
590
	uint16_t curve_id;
591
	uint8_t comp_id;
592
	EVP_PKEY *pkey;
593
	int rv;
594
595
	if (cpk->x509 == NULL || cpk->privatekey == NULL)
596
		return (0);
597
	if ((pkey = X509_get_pubkey(cpk->x509)) == NULL)
598
		return (0);
599
	rv = tls1_set_ec_id(&curve_id, &comp_id, pkey->pkey.ec);
600
	EVP_PKEY_free(pkey);
601
	if (rv != 1)
602
		return (0);
603
604
	return tls1_check_ec_key(s, &curve_id, &comp_id);
605
}
606
607
/* Check EC temporary key is compatible with client extensions. */
608
int
609
tls1_check_ec_tmp_key(SSL *s)
610
{
611
192
	EC_KEY *ec = s->cert->ecdh_tmp;
612
96
	uint16_t curve_id;
613
614
	/* Need a shared curve. */
615
96
	if (tls1_get_shared_curve(s) != NID_undef)
616
84
		return (1);
617
618
12
	if (ec == NULL)
619
12
		return (0);
620
621
	if (tls1_set_ec_id(&curve_id, NULL, ec) != 1)
622
		return (0);
623
624
	return tls1_check_ec_key(s, &curve_id, NULL);
625
96
}
626
627
/*
628
 * List of supported signature algorithms and hashes. Should make this
629
 * customisable at some point, for now include everything we support.
630
 */
631
632
static unsigned char tls12_sigalgs[] = {
633
	TLSEXT_hash_sha512, TLSEXT_signature_rsa,
634
	TLSEXT_hash_sha512, TLSEXT_signature_ecdsa,
635
#ifndef OPENSSL_NO_GOST
636
	TLSEXT_hash_streebog_512, TLSEXT_signature_gostr12_512,
637
#endif
638
639
	TLSEXT_hash_sha384, TLSEXT_signature_rsa,
640
	TLSEXT_hash_sha384, TLSEXT_signature_ecdsa,
641
642
	TLSEXT_hash_sha256, TLSEXT_signature_rsa,
643
	TLSEXT_hash_sha256, TLSEXT_signature_ecdsa,
644
645
#ifndef OPENSSL_NO_GOST
646
	TLSEXT_hash_streebog_256, TLSEXT_signature_gostr12_256,
647
	TLSEXT_hash_gost94, TLSEXT_signature_gostr01,
648
#endif
649
650
	TLSEXT_hash_sha224, TLSEXT_signature_rsa,
651
	TLSEXT_hash_sha224, TLSEXT_signature_ecdsa,
652
653
	TLSEXT_hash_sha1, TLSEXT_signature_rsa,
654
	TLSEXT_hash_sha1, TLSEXT_signature_ecdsa,
655
};
656
657
void
658
tls12_get_req_sig_algs(SSL *s, unsigned char **sigalgs, size_t *sigalgs_len)
659
{
660
31622
	*sigalgs = tls12_sigalgs;
661
15811
	*sigalgs_len = sizeof(tls12_sigalgs);
662
15811
}
663
664
int
665
ssl_parse_clienthello_tlsext(SSL *s, unsigned char **p, unsigned char *d,
666
    int n, int *al)
667
{
668
	unsigned short type;
669
	unsigned short size;
670
	unsigned short len;
671
528
	unsigned char *data = *p;
672
264
	unsigned char *end = d + n;
673
264
	CBS cbs;
674
675
264
	s->internal->servername_done = 0;
676
264
	s->tlsext_status_type = -1;
677
264
	S3I(s)->renegotiate_seen = 0;
678
264
	free(S3I(s)->alpn_selected);
679
264
	S3I(s)->alpn_selected = NULL;
680
264
	s->internal->srtp_profile = NULL;
681
682
264
	if (data == end)
683
		goto ri_check;
684
685
258
	if (end - data < 2)
686
		goto err;
687
255
	n2s(data, len);
688
689
255
	if (end - data != len)
690
		goto err;
691
692
1488
	while (end - data >= 4) {
693
534
		n2s(data, type);
694
534
		n2s(data, size);
695
696
534
		if (end - data < size)
697
			goto err;
698
699
531
		if (s->internal->tlsext_debug_cb)
700
			s->internal->tlsext_debug_cb(s, 0, type, data, size,
701
			    s->internal->tlsext_debug_arg);
702
703
531
		CBS_init(&cbs, data, size);
704
531
		if (!tlsext_clienthello_parse_one(s, &cbs, type, al))
705
21
			return 0;
706
707
510
		data += size;
708
	}
709
710
	/* Spurious data on the end */
711
210
	if (data != end)
712
		goto err;
713
714
207
	*p = data;
715
716
ri_check:
717
718
	/* Need RI if renegotiating */
719
720

426
	if (!S3I(s)->renegotiate_seen && s->internal->renegotiate) {
721
		*al = SSL_AD_HANDSHAKE_FAILURE;
722
		SSLerror(s, SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED);
723
		return 0;
724
	}
725
726
213
	return 1;
727
728
err:
729
30
	*al = SSL_AD_DECODE_ERROR;
730
30
	return 0;
731
264
}
732
733
int
734
ssl_parse_serverhello_tlsext(SSL *s, unsigned char **p, size_t n, int *al)
735
{
736
	unsigned short type;
737
	unsigned short size;
738
	unsigned short len;
739
31874
	unsigned char *data = *p;
740
15937
	unsigned char *end = *p + n;
741
15937
	CBS cbs;
742
743
15937
	S3I(s)->renegotiate_seen = 0;
744
15937
	free(S3I(s)->alpn_selected);
745
15937
	S3I(s)->alpn_selected = NULL;
746
747
15937
	if (data == end)
748
		goto ri_check;
749
750
15937
	if (end - data < 2)
751
		goto err;
752
15934
	n2s(data, len);
753
754
15934
	if (end - data != len)
755
		goto err;
756
757
68598
	while (end - data >= 4) {
758
18419
		n2s(data, type);
759
18419
		n2s(data, size);
760
761
18419
		if (end - data < size)
762
			goto err;
763
764
18416
		if (s->internal->tlsext_debug_cb)
765
			s->internal->tlsext_debug_cb(s, 1, type, data, size,
766
			    s->internal->tlsext_debug_arg);
767
768
18416
		CBS_init(&cbs, data, size);
769
18416
		if (!tlsext_serverhello_parse_one(s, &cbs, type, al))
770
30
			return 0;
771
772
18386
		data += size;
773
774
	}
775
776
15880
	if (data != end) {
777
3
		*al = SSL_AD_DECODE_ERROR;
778
3
		return 0;
779
	}
780
781
15877
	*p = data;
782
783
ri_check:
784
785
	/* Determine if we need to see RI. Strictly speaking if we want to
786
	 * avoid an attack we should *always* see RI even on initial server
787
	 * hello because the client doesn't see any renegotiation during an
788
	 * attack. However this would mean we could not connect to any server
789
	 * which doesn't support RI so for the immediate future tolerate RI
790
	 * absence on initial connect only.
791
	 */
792

15883
	if (!S3I(s)->renegotiate_seen &&
793
6
	    !(s->internal->options & SSL_OP_LEGACY_SERVER_CONNECT)) {
794
		*al = SSL_AD_HANDSHAKE_FAILURE;
795
		SSLerror(s, SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED);
796
		return 0;
797
	}
798
799
15877
	return 1;
800
801
err:
802
27
	*al = SSL_AD_DECODE_ERROR;
803
27
	return 0;
804
15937
}
805
806
int
807
ssl_check_clienthello_tlsext_early(SSL *s)
808
{
809
	int ret = SSL_TLSEXT_ERR_NOACK;
810
396
	int al = SSL_AD_UNRECOGNIZED_NAME;
811
812
	/* The handling of the ECPointFormats extension is done elsewhere, namely in
813
	 * ssl3_choose_cipher in s3_lib.c.
814
	 */
815
	/* The handling of the EllipticCurves extension is done elsewhere, namely in
816
	 * ssl3_choose_cipher in s3_lib.c.
817
	 */
818
819

396
	if (s->ctx != NULL && s->ctx->internal->tlsext_servername_callback != 0)
820
12
		ret = s->ctx->internal->tlsext_servername_callback(s, &al,
821
12
		    s->ctx->internal->tlsext_servername_arg);
822

372
	else if (s->initial_ctx != NULL && s->initial_ctx->internal->tlsext_servername_callback != 0)
823
		ret = s->initial_ctx->internal->tlsext_servername_callback(s, &al,
824
		    s->initial_ctx->internal->tlsext_servername_arg);
825
826

384
	switch (ret) {
827
	case SSL_TLSEXT_ERR_ALERT_FATAL:
828
		ssl3_send_alert(s, SSL3_AL_FATAL, al);
829
		return -1;
830
	case SSL_TLSEXT_ERR_ALERT_WARNING:
831
		ssl3_send_alert(s, SSL3_AL_WARNING, al);
832
		return 1;
833
	case SSL_TLSEXT_ERR_NOACK:
834
186
		s->internal->servername_done = 0;
835
	default:
836
198
		return 1;
837
	}
838
198
}
839
840
int
841
ssl_check_clienthello_tlsext_late(SSL *s)
842
{
843
	int ret = SSL_TLSEXT_ERR_OK;
844
	int al = 0;	/* XXX gcc3 */
845
846
	/* If status request then ask callback what to do.
847
 	 * Note: this must be called after servername callbacks in case
848
 	 * the certificate has changed, and must be called after the cipher
849
	 * has been chosen because this may influence which certificate is sent
850
 	 */
851

408
	if ((s->tlsext_status_type != -1) &&
852
24
	    s->ctx && s->ctx->internal->tlsext_status_cb) {
853
		int r;
854
		CERT_PKEY *certpkey;
855
12
		certpkey = ssl_get_server_send_pkey(s);
856
		/* If no certificate can't return certificate status */
857
12
		if (certpkey == NULL) {
858
			s->internal->tlsext_status_expected = 0;
859
			return 1;
860
		}
861
		/* Set current certificate to one we will use so
862
		 * SSL_get_certificate et al can pick it up.
863
		 */
864
24
		s->cert->key = certpkey;
865
48
		r = s->ctx->internal->tlsext_status_cb(s,
866
24
		    s->ctx->internal->tlsext_status_arg);
867

24
		switch (r) {
868
			/* We don't want to send a status request response */
869
		case SSL_TLSEXT_ERR_NOACK:
870
12
			s->internal->tlsext_status_expected = 0;
871
12
			break;
872
			/* status request response should be sent */
873
		case SSL_TLSEXT_ERR_OK:
874
			if (s->internal->tlsext_ocsp_resp)
875
				s->internal->tlsext_status_expected = 1;
876
			else
877
				s->internal->tlsext_status_expected = 0;
878
			break;
879
			/* something bad happened */
880
		case SSL_TLSEXT_ERR_ALERT_FATAL:
881
			ret = SSL_TLSEXT_ERR_ALERT_FATAL;
882
			al = SSL_AD_INTERNAL_ERROR;
883
			goto err;
884
		}
885
12
	} else
886
186
		s->internal->tlsext_status_expected = 0;
887
888
err:
889
198
	switch (ret) {
890
	case SSL_TLSEXT_ERR_ALERT_FATAL:
891
		ssl3_send_alert(s, SSL3_AL_FATAL, al);
892
		return -1;
893
	case SSL_TLSEXT_ERR_ALERT_WARNING:
894
		ssl3_send_alert(s, SSL3_AL_WARNING, al);
895
		return 1;
896
	default:
897
198
		return 1;
898
	}
899
198
}
900
901
int
902
ssl_check_serverhello_tlsext(SSL *s)
903
{
904
	int ret = SSL_TLSEXT_ERR_NOACK;
905
31742
	int al = SSL_AD_UNRECOGNIZED_NAME;
906
907
	ret = SSL_TLSEXT_ERR_OK;
908
909

31742
	if (s->ctx != NULL && s->ctx->internal->tlsext_servername_callback != 0)
910
		ret = s->ctx->internal->tlsext_servername_callback(s, &al,
911
		    s->ctx->internal->tlsext_servername_arg);
912

31742
	else if (s->initial_ctx != NULL && s->initial_ctx->internal->tlsext_servername_callback != 0)
913
		ret = s->initial_ctx->internal->tlsext_servername_callback(s, &al,
914
		    s->initial_ctx->internal->tlsext_servername_arg);
915
916
	/* If we've requested certificate status and we wont get one
917
 	 * tell the callback
918
 	 */
919

15895
	if ((s->tlsext_status_type != -1) && !(s->internal->tlsext_status_expected) &&
920
24
	    s->ctx && s->ctx->internal->tlsext_status_cb) {
921
		int r;
922
		/* Set resp to NULL, resplen to -1 so callback knows
923
 		 * there is no response.
924
 		 */
925
12
		free(s->internal->tlsext_ocsp_resp);
926
12
		s->internal->tlsext_ocsp_resp = NULL;
927
12
		s->internal->tlsext_ocsp_resplen = -1;
928
24
		r = s->ctx->internal->tlsext_status_cb(s,
929
12
		    s->ctx->internal->tlsext_status_arg);
930
12
		if (r == 0) {
931
			al = SSL_AD_BAD_CERTIFICATE_STATUS_RESPONSE;
932
			ret = SSL_TLSEXT_ERR_ALERT_FATAL;
933
		}
934
12
		if (r < 0) {
935
			al = SSL_AD_INTERNAL_ERROR;
936
			ret = SSL_TLSEXT_ERR_ALERT_FATAL;
937
		}
938
12
	}
939
940

15871
	switch (ret) {
941
	case SSL_TLSEXT_ERR_ALERT_FATAL:
942
		ssl3_send_alert(s, SSL3_AL_FATAL, al);
943
944
		return -1;
945
	case SSL_TLSEXT_ERR_ALERT_WARNING:
946
		ssl3_send_alert(s, SSL3_AL_WARNING, al);
947
948
		return 1;
949
	case SSL_TLSEXT_ERR_NOACK:
950
		s->internal->servername_done = 0;
951
	default:
952
15871
		return 1;
953
	}
954
15871
}
955
956
/* Since the server cache lookup is done early on in the processing of the
957
 * ClientHello, and other operations depend on the result, we need to handle
958
 * any TLS session ticket extension at the same time.
959
 *
960
 *   session_id: points at the session ID in the ClientHello. This code will
961
 *       read past the end of this in order to parse out the session ticket
962
 *       extension, if any.
963
 *   len: the length of the session ID.
964
 *   limit: a pointer to the first byte after the ClientHello.
965
 *   ret: (output) on return, if a ticket was decrypted, then this is set to
966
 *       point to the resulting session.
967
 *
968
 * If s->internal->tls_session_secret_cb is set then we are expecting a pre-shared key
969
 * ciphersuite, in which case we have no use for session tickets and one will
970
 * never be decrypted, nor will s->internal->tlsext_ticket_expected be set to 1.
971
 *
972
 * Returns:
973
 *   -1: fatal error, either from parsing or decrypting the ticket.
974
 *    0: no ticket was found (or was ignored, based on settings).
975
 *    1: a zero length extension was found, indicating that the client supports
976
 *       session tickets but doesn't currently have one to offer.
977
 *    2: either s->internal->tls_session_secret_cb was set, or a ticket was offered but
978
 *       couldn't be decrypted because of a non-fatal error.
979
 *    3: a ticket was successfully decrypted and *ret was set.
980
 *
981
 * Side effects:
982
 *   Sets s->internal->tlsext_ticket_expected to 1 if the server will have to issue
983
 *   a new session ticket to the client because the client indicated support
984
 *   (and s->internal->tls_session_secret_cb is NULL) but the client either doesn't have
985
 *   a session ticket or we couldn't use the one it gave us, or if
986
 *   s->ctx->tlsext_ticket_key_cb asked to renew the client's ticket.
987
 *   Otherwise, s->internal->tlsext_ticket_expected is set to 0.
988
 */
989
int
990
tls1_process_ticket(SSL *s, const unsigned char *session, int session_len,
991
    const unsigned char *limit, SSL_SESSION **ret)
992
{
993
	/* Point after session ID in client hello */
994
396
	CBS session_id, cookie, cipher_list, compress_algo, extensions;
995
996
198
	*ret = NULL;
997
198
	s->internal->tlsext_ticket_expected = 0;
998
999
	/* If tickets disabled behave as if no ticket present
1000
	 * to permit stateful resumption.
1001
	 */
1002
198
	if (SSL_get_options(s) & SSL_OP_NO_TICKET)
1003
12
		return 0;
1004
186
	if (!limit)
1005
		return 0;
1006
1007
186
	if (limit < session)
1008
		return -1;
1009
1010
186
	CBS_init(&session_id, session, limit - session);
1011
1012
	/* Skip past the session id */
1013
186
	if (!CBS_skip(&session_id, session_len))
1014
		return -1;
1015
1016
	/* Skip past DTLS cookie */
1017
186
	if (SSL_IS_DTLS(s)) {
1018
36
		if (!CBS_get_u8_length_prefixed(&session_id, &cookie))
1019
			return -1;
1020
	}
1021
1022
	/* Skip past cipher list */
1023
186
	if (!CBS_get_u16_length_prefixed(&session_id, &cipher_list))
1024
		return -1;
1025
1026
	/* Skip past compression algorithm list */
1027
186
	if (!CBS_get_u8_length_prefixed(&session_id, &compress_algo))
1028
		return -1;
1029
1030
	/* Now at start of extensions */
1031
186
	if (CBS_len(&session_id) == 0)
1032
6
		return 0;
1033
180
	if (!CBS_get_u16_length_prefixed(&session_id, &extensions))
1034
		return -1;
1035
1036
648
	while (CBS_len(&extensions) > 0) {
1037
324
		CBS ext_data;
1038
324
		uint16_t ext_type;
1039
1040

648
		if (!CBS_get_u16(&extensions, &ext_type) ||
1041
324
		    !CBS_get_u16_length_prefixed(&extensions, &ext_data))
1042
			return -1;
1043
1044
324
		if (ext_type == TLSEXT_TYPE_session_ticket) {
1045
			int r;
1046
180
			if (CBS_len(&ext_data) == 0) {
1047
				/* The client will accept a ticket but doesn't
1048
				 * currently have one. */
1049
180
				s->internal->tlsext_ticket_expected = 1;
1050
180
				return 1;
1051
			}
1052
			if (s->internal->tls_session_secret_cb) {
1053
				/* Indicate that the ticket couldn't be
1054
				 * decrypted rather than generating the session
1055
				 * from ticket now, trigger abbreviated
1056
				 * handshake based on external mechanism to
1057
				 * calculate the master secret later. */
1058
				return 2;
1059
			}
1060
1061
			r = tls_decrypt_ticket(s, CBS_data(&ext_data),
1062
			    CBS_len(&ext_data), session, session_len, ret);
1063
1064
			switch (r) {
1065
			case 2: /* ticket couldn't be decrypted */
1066
				s->internal->tlsext_ticket_expected = 1;
1067
				return 2;
1068
			case 3: /* ticket was decrypted */
1069
				return r;
1070
			case 4: /* ticket decrypted but need to renew */
1071
				s->internal->tlsext_ticket_expected = 1;
1072
				return 3;
1073
			default: /* fatal error */
1074
				return -1;
1075
			}
1076
		}
1077
468
	}
1078
	return 0;
1079
198
}
1080
1081
/* tls_decrypt_ticket attempts to decrypt a session ticket.
1082
 *
1083
 *   etick: points to the body of the session ticket extension.
1084
 *   eticklen: the length of the session tickets extenion.
1085
 *   sess_id: points at the session ID.
1086
 *   sesslen: the length of the session ID.
1087
 *   psess: (output) on return, if a ticket was decrypted, then this is set to
1088
 *       point to the resulting session.
1089
 *
1090
 * Returns:
1091
 *   -1: fatal error, either from parsing or decrypting the ticket.
1092
 *    2: the ticket couldn't be decrypted.
1093
 *    3: a ticket was successfully decrypted and *psess was set.
1094
 *    4: same as 3, but the ticket needs to be renewed.
1095
 */
1096
static int
1097
tls_decrypt_ticket(SSL *s, const unsigned char *etick, int eticklen,
1098
    const unsigned char *sess_id, int sesslen, SSL_SESSION **psess)
1099
{
1100
	SSL_SESSION *sess;
1101
	unsigned char *sdec;
1102
	const unsigned char *p;
1103
	int slen, mlen, renew_ticket = 0;
1104
	unsigned char tick_hmac[EVP_MAX_MD_SIZE];
1105
	HMAC_CTX hctx;
1106
	EVP_CIPHER_CTX ctx;
1107
	SSL_CTX *tctx = s->initial_ctx;
1108
1109
	/*
1110
	 * The API guarantees EVP_MAX_IV_LENGTH bytes of space for
1111
	 * the iv to tlsext_ticket_key_cb().  Since the total space
1112
	 * required for a session cookie is never less than this,
1113
	 * this check isn't too strict.  The exact check comes later.
1114
	 */
1115
	if (eticklen < 16 + EVP_MAX_IV_LENGTH)
1116
		return 2;
1117
1118
	/* Initialize session ticket encryption and HMAC contexts */
1119
	HMAC_CTX_init(&hctx);
1120
	EVP_CIPHER_CTX_init(&ctx);
1121
	if (tctx->internal->tlsext_ticket_key_cb) {
1122
		unsigned char *nctick = (unsigned char *)etick;
1123
		int rv = tctx->internal->tlsext_ticket_key_cb(s,
1124
		    nctick, nctick + 16, &ctx, &hctx, 0);
1125
		if (rv < 0) {
1126
			HMAC_CTX_cleanup(&hctx);
1127
			EVP_CIPHER_CTX_cleanup(&ctx);
1128
			return -1;
1129
		}
1130
		if (rv == 0) {
1131
			HMAC_CTX_cleanup(&hctx);
1132
			EVP_CIPHER_CTX_cleanup(&ctx);
1133
			return 2;
1134
		}
1135
		if (rv == 2)
1136
			renew_ticket = 1;
1137
	} else {
1138
		/* Check key name matches */
1139
		if (timingsafe_memcmp(etick,
1140
		    tctx->internal->tlsext_tick_key_name, 16))
1141
			return 2;
1142
		HMAC_Init_ex(&hctx, tctx->internal->tlsext_tick_hmac_key,
1143
		    16, tlsext_tick_md(), NULL);
1144
		EVP_DecryptInit_ex(&ctx, EVP_aes_128_cbc(), NULL,
1145
		    tctx->internal->tlsext_tick_aes_key, etick + 16);
1146
	}
1147
1148
	/*
1149
	 * Attempt to process session ticket, first conduct sanity and
1150
	 * integrity checks on ticket.
1151
	 */
1152
	mlen = HMAC_size(&hctx);
1153
	if (mlen < 0) {
1154
		HMAC_CTX_cleanup(&hctx);
1155
		EVP_CIPHER_CTX_cleanup(&ctx);
1156
		return -1;
1157
	}
1158
1159
	/* Sanity check ticket length: must exceed keyname + IV + HMAC */
1160
	if (eticklen <= 16 + EVP_CIPHER_CTX_iv_length(&ctx) + mlen) {
1161
		HMAC_CTX_cleanup(&hctx);
1162
		EVP_CIPHER_CTX_cleanup(&ctx);
1163
		return 2;
1164
	}
1165
	eticklen -= mlen;
1166
1167
	/* Check HMAC of encrypted ticket */
1168
	if (HMAC_Update(&hctx, etick, eticklen) <= 0 ||
1169
	    HMAC_Final(&hctx, tick_hmac, NULL) <= 0) {
1170
		HMAC_CTX_cleanup(&hctx);
1171
		EVP_CIPHER_CTX_cleanup(&ctx);
1172
		return -1;
1173
	}
1174
1175
	HMAC_CTX_cleanup(&hctx);
1176
	if (timingsafe_memcmp(tick_hmac, etick + eticklen, mlen)) {
1177
		EVP_CIPHER_CTX_cleanup(&ctx);
1178
		return 2;
1179
	}
1180
1181
	/* Attempt to decrypt session data */
1182
	/* Move p after IV to start of encrypted ticket, update length */
1183
	p = etick + 16 + EVP_CIPHER_CTX_iv_length(&ctx);
1184
	eticklen -= 16 + EVP_CIPHER_CTX_iv_length(&ctx);
1185
	sdec = malloc(eticklen);
1186
	if (sdec == NULL ||
1187
	    EVP_DecryptUpdate(&ctx, sdec, &slen, p, eticklen) <= 0) {
1188
		free(sdec);
1189
		EVP_CIPHER_CTX_cleanup(&ctx);
1190
		return -1;
1191
	}
1192
	if (EVP_DecryptFinal_ex(&ctx, sdec + slen, &mlen) <= 0) {
1193
		free(sdec);
1194
		EVP_CIPHER_CTX_cleanup(&ctx);
1195
		return 2;
1196
	}
1197
	slen += mlen;
1198
	EVP_CIPHER_CTX_cleanup(&ctx);
1199
	p = sdec;
1200
1201
	sess = d2i_SSL_SESSION(NULL, &p, slen);
1202
	free(sdec);
1203
	if (sess) {
1204
		/* The session ID, if non-empty, is used by some clients to
1205
		 * detect that the ticket has been accepted. So we copy it to
1206
		 * the session structure. If it is empty set length to zero
1207
		 * as required by standard.
1208
		 */
1209
		if (sesslen)
1210
			memcpy(sess->session_id, sess_id, sesslen);
1211
		sess->session_id_length = sesslen;
1212
		*psess = sess;
1213
		if (renew_ticket)
1214
			return 4;
1215
		else
1216
			return 3;
1217
	}
1218
	ERR_clear_error();
1219
	/* For session parse failure, indicate that we need to send a new
1220
	 * ticket. */
1221
	return 2;
1222
}
1223
1224
/* Tables to translate from NIDs to TLS v1.2 ids */
1225
1226
typedef struct {
1227
	int nid;
1228
	int id;
1229
} tls12_lookup;
1230
1231
static tls12_lookup tls12_md[] = {
1232
	{NID_md5, TLSEXT_hash_md5},
1233
	{NID_sha1, TLSEXT_hash_sha1},
1234
	{NID_sha224, TLSEXT_hash_sha224},
1235
	{NID_sha256, TLSEXT_hash_sha256},
1236
	{NID_sha384, TLSEXT_hash_sha384},
1237
	{NID_sha512, TLSEXT_hash_sha512},
1238
	{NID_id_GostR3411_94, TLSEXT_hash_gost94},
1239
	{NID_id_tc26_gost3411_2012_256, TLSEXT_hash_streebog_256},
1240
	{NID_id_tc26_gost3411_2012_512, TLSEXT_hash_streebog_512}
1241
};
1242
1243
static tls12_lookup tls12_sig[] = {
1244
	{EVP_PKEY_RSA, TLSEXT_signature_rsa},
1245
	{EVP_PKEY_EC, TLSEXT_signature_ecdsa},
1246
	{EVP_PKEY_GOSTR01, TLSEXT_signature_gostr01},
1247
};
1248
1249
static int
1250
tls12_find_id(int nid, tls12_lookup *table, size_t tlen)
1251
{
1252
	size_t i;
1253
5172
	for (i = 0; i < tlen; i++) {
1254
1885
		if (table[i].nid == nid)
1255
1402
			return table[i].id;
1256
	}
1257
	return -1;
1258
1402
}
1259
1260
int
1261
tls12_get_sigandhash(unsigned char *p, const EVP_PKEY *pk, const EVP_MD *md)
1262
{
1263
	int sig_id, md_id;
1264
198
	if (!md)
1265
		return 0;
1266
99
	md_id = tls12_find_id(EVP_MD_type(md), tls12_md,
1267
	    sizeof(tls12_md) / sizeof(tls12_lookup));
1268
99
	if (md_id == -1)
1269
		return 0;
1270
99
	sig_id = tls12_get_sigid(pk);
1271
99
	if (sig_id == -1)
1272
		return 0;
1273
99
	p[0] = (unsigned char)md_id;
1274
99
	p[1] = (unsigned char)sig_id;
1275
99
	return 1;
1276
99
}
1277
1278
int
1279
tls12_get_sigid(const EVP_PKEY *pk)
1280
{
1281
2606
	return tls12_find_id(pk->type, tls12_sig,
1282
	    sizeof(tls12_sig) / sizeof(tls12_lookup));
1283
}
1284
1285
const EVP_MD *
1286
tls12_get_hash(unsigned char hash_alg)
1287
{
1288


3128
	switch (hash_alg) {
1289
	case TLSEXT_hash_sha1:
1290
		return EVP_sha1();
1291
	case TLSEXT_hash_sha224:
1292
		return EVP_sha224();
1293
	case TLSEXT_hash_sha256:
1294
		return EVP_sha256();
1295
	case TLSEXT_hash_sha384:
1296
		return EVP_sha384();
1297
	case TLSEXT_hash_sha512:
1298
1444
		return EVP_sha512();
1299
#ifndef OPENSSL_NO_GOST
1300
	case TLSEXT_hash_gost94:
1301
		return EVP_gostr341194();
1302
	case TLSEXT_hash_streebog_256:
1303
		return EVP_streebog256();
1304
	case TLSEXT_hash_streebog_512:
1305
120
		return EVP_streebog512();
1306
#endif
1307
	default:
1308
		return NULL;
1309
	}
1310
1564
}
1311
1312
/* Set preferred digest for each key type */
1313
1314
int
1315
tls1_process_sigalgs(SSL *s, CBS *cbs)
1316
{
1317
	const EVP_MD *md;
1318
240
	CERT *c = s->cert;
1319
	int idx;
1320
1321
	/* Extension ignored for inappropriate versions */
1322
120
	if (!SSL_USE_SIGALGS(s))
1323
		return 1;
1324
1325
	/* Should never happen */
1326
120
	if (c == NULL)
1327
		return 0;
1328
1329
120
	c->pkeys[SSL_PKEY_RSA_SIGN].digest = NULL;
1330
120
	c->pkeys[SSL_PKEY_RSA_ENC].digest = NULL;
1331
120
	c->pkeys[SSL_PKEY_ECC].digest = NULL;
1332
120
	c->pkeys[SSL_PKEY_GOST01].digest = NULL;
1333
1334
3360
	while (CBS_len(cbs) > 0) {
1335
1560
		uint8_t hash_alg, sig_alg;
1336
1337

3120
		if (!CBS_get_u8(cbs, &hash_alg) || !CBS_get_u8(cbs, &sig_alg))
1338
			return 0;
1339
1340

1560
		switch (sig_alg) {
1341
		case TLSEXT_signature_rsa:
1342
			idx = SSL_PKEY_RSA_SIGN;
1343
600
			break;
1344
		case TLSEXT_signature_ecdsa:
1345
			idx = SSL_PKEY_ECC;
1346
600
			break;
1347
		case TLSEXT_signature_gostr01:
1348
		case TLSEXT_signature_gostr12_256:
1349
		case TLSEXT_signature_gostr12_512:
1350
			idx = SSL_PKEY_GOST01;
1351
360
			break;
1352
		default:
1353
			continue;
1354
		}
1355
1356
1560
		if (c->pkeys[idx].digest == NULL) {
1357
360
			md = tls12_get_hash(hash_alg);
1358
360
			if (md) {
1359
360
				c->pkeys[idx].digest = md;
1360
360
				if (idx == SSL_PKEY_RSA_SIGN)
1361
120
					c->pkeys[SSL_PKEY_RSA_ENC].digest = md;
1362
			}
1363
		}
1364
1365
4824
	}
1366
1367
	/*
1368
	 * Set any remaining keys to default values. NOTE: if alg is not
1369
	 * supported it stays as NULL.
1370
	 */
1371
120
	if (!c->pkeys[SSL_PKEY_RSA_SIGN].digest) {
1372
		c->pkeys[SSL_PKEY_RSA_SIGN].digest = EVP_sha1();
1373
		c->pkeys[SSL_PKEY_RSA_ENC].digest = EVP_sha1();
1374
	}
1375
120
	if (!c->pkeys[SSL_PKEY_ECC].digest)
1376
		c->pkeys[SSL_PKEY_ECC].digest = EVP_sha1();
1377
#ifndef OPENSSL_NO_GOST
1378
120
	if (!c->pkeys[SSL_PKEY_GOST01].digest)
1379
		c->pkeys[SSL_PKEY_GOST01].digest = EVP_gostr341194();
1380
#endif
1381
120
	return 1;
1382
120
}