xref: /openbsd-src/lib/libssl/t1_lib.c (revision cb39b41371628601fbe4c618205356d538b9d08a)
1 /* $OpenBSD: t1_lib.c,v 1.75 2015/03/02 13:43:09 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 static int tls_decrypt_ticket(SSL *s, const unsigned char *tick, int ticklen,
122     const unsigned char *sess_id, int sesslen,
123     SSL_SESSION **psess);
124 
125 SSL3_ENC_METHOD TLSv1_enc_data = {
126 	.enc = tls1_enc,
127 	.mac = tls1_mac,
128 	.setup_key_block = tls1_setup_key_block,
129 	.generate_master_secret = tls1_generate_master_secret,
130 	.change_cipher_state = tls1_change_cipher_state,
131 	.final_finish_mac = tls1_final_finish_mac,
132 	.finish_mac_length = TLS1_FINISH_MAC_LENGTH,
133 	.cert_verify_mac = tls1_cert_verify_mac,
134 	.client_finished_label = TLS_MD_CLIENT_FINISH_CONST,
135 	.client_finished_label_len = TLS_MD_CLIENT_FINISH_CONST_SIZE,
136 	.server_finished_label = TLS_MD_SERVER_FINISH_CONST,
137 	.server_finished_label_len = TLS_MD_SERVER_FINISH_CONST_SIZE,
138 	.alert_value = tls1_alert_code,
139 	.export_keying_material = tls1_export_keying_material,
140 	.enc_flags = 0,
141 };
142 
143 SSL3_ENC_METHOD TLSv1_1_enc_data = {
144 	.enc = tls1_enc,
145 	.mac = tls1_mac,
146 	.setup_key_block = tls1_setup_key_block,
147 	.generate_master_secret = tls1_generate_master_secret,
148 	.change_cipher_state = tls1_change_cipher_state,
149 	.final_finish_mac = tls1_final_finish_mac,
150 	.finish_mac_length = TLS1_FINISH_MAC_LENGTH,
151 	.cert_verify_mac = tls1_cert_verify_mac,
152 	.client_finished_label = TLS_MD_CLIENT_FINISH_CONST,
153 	.client_finished_label_len = TLS_MD_CLIENT_FINISH_CONST_SIZE,
154 	.server_finished_label = TLS_MD_SERVER_FINISH_CONST,
155 	.server_finished_label_len = TLS_MD_SERVER_FINISH_CONST_SIZE,
156 	.alert_value = tls1_alert_code,
157 	.export_keying_material = tls1_export_keying_material,
158 	.enc_flags = SSL_ENC_FLAG_EXPLICIT_IV,
159 };
160 
161 SSL3_ENC_METHOD TLSv1_2_enc_data = {
162 	.enc = tls1_enc,
163 	.mac = tls1_mac,
164 	.setup_key_block = tls1_setup_key_block,
165 	.generate_master_secret = tls1_generate_master_secret,
166 	.change_cipher_state = tls1_change_cipher_state,
167 	.final_finish_mac = tls1_final_finish_mac,
168 	.finish_mac_length = TLS1_FINISH_MAC_LENGTH,
169 	.cert_verify_mac = tls1_cert_verify_mac,
170 	.client_finished_label = TLS_MD_CLIENT_FINISH_CONST,
171 	.client_finished_label_len = TLS_MD_CLIENT_FINISH_CONST_SIZE,
172 	.server_finished_label = TLS_MD_SERVER_FINISH_CONST,
173 	.server_finished_label_len = TLS_MD_SERVER_FINISH_CONST_SIZE,
174 	.alert_value = tls1_alert_code,
175 	.export_keying_material = tls1_export_keying_material,
176 	.enc_flags = SSL_ENC_FLAG_EXPLICIT_IV|SSL_ENC_FLAG_SIGALGS|
177 	    SSL_ENC_FLAG_SHA256_PRF|SSL_ENC_FLAG_TLS1_2_CIPHERS,
178 };
179 
180 long
181 tls1_default_timeout(void)
182 {
183 	/* 2 hours, the 24 hours mentioned in the TLSv1 spec
184 	 * is way too long for http, the cache would over fill */
185 	return (60 * 60 * 2);
186 }
187 
188 int
189 tls1_new(SSL *s)
190 {
191 	if (!ssl3_new(s))
192 		return (0);
193 	s->method->ssl_clear(s);
194 	return (1);
195 }
196 
197 void
198 tls1_free(SSL *s)
199 {
200 	free(s->tlsext_session_ticket);
201 	ssl3_free(s);
202 }
203 
204 void
205 tls1_clear(SSL *s)
206 {
207 	ssl3_clear(s);
208 	s->version = s->method->version;
209 }
210 
211 
212 static int nid_list[] = {
213 	NID_sect163k1,		/* sect163k1 (1) */
214 	NID_sect163r1,		/* sect163r1 (2) */
215 	NID_sect163r2,		/* sect163r2 (3) */
216 	NID_sect193r1,		/* sect193r1 (4) */
217 	NID_sect193r2,		/* sect193r2 (5) */
218 	NID_sect233k1,		/* sect233k1 (6) */
219 	NID_sect233r1,		/* sect233r1 (7) */
220 	NID_sect239k1,		/* sect239k1 (8) */
221 	NID_sect283k1,		/* sect283k1 (9) */
222 	NID_sect283r1,		/* sect283r1 (10) */
223 	NID_sect409k1,		/* sect409k1 (11) */
224 	NID_sect409r1,		/* sect409r1 (12) */
225 	NID_sect571k1,		/* sect571k1 (13) */
226 	NID_sect571r1,		/* sect571r1 (14) */
227 	NID_secp160k1,		/* secp160k1 (15) */
228 	NID_secp160r1,		/* secp160r1 (16) */
229 	NID_secp160r2,		/* secp160r2 (17) */
230 	NID_secp192k1,		/* secp192k1 (18) */
231 	NID_X9_62_prime192v1,	/* secp192r1 (19) */
232 	NID_secp224k1,		/* secp224k1 (20) */
233 	NID_secp224r1,		/* secp224r1 (21) */
234 	NID_secp256k1,		/* secp256k1 (22) */
235 	NID_X9_62_prime256v1,	/* secp256r1 (23) */
236 	NID_secp384r1,		/* secp384r1 (24) */
237 	NID_secp521r1,		/* secp521r1 (25) */
238 	NID_brainpoolP256r1,	/* brainpoolP256r1 (26) */
239 	NID_brainpoolP384r1,	/* brainpoolP384r1 (27) */
240 	NID_brainpoolP512r1	/* brainpoolP512r1 (28) */
241 };
242 
243 static const uint8_t ecformats_default[] = {
244 	TLSEXT_ECPOINTFORMAT_uncompressed,
245 	TLSEXT_ECPOINTFORMAT_ansiX962_compressed_prime,
246 	TLSEXT_ECPOINTFORMAT_ansiX962_compressed_char2
247 };
248 
249 static const uint16_t eccurves_default[] = {
250 	14,			/* sect571r1 (14) */
251 	13,			/* sect571k1 (13) */
252 	25,			/* secp521r1 (25) */
253 	28,			/* brainpool512r1 (28) */
254 	11,			/* sect409k1 (11) */
255 	12,			/* sect409r1 (12) */
256 	27,			/* brainpoolP384r1 (27) */
257 	24,			/* secp384r1 (24) */
258 	9,			/* sect283k1 (9) */
259 	10,			/* sect283r1 (10) */
260 	26,			/* brainpoolP256r1 (26) */
261 	22,			/* secp256k1 (22) */
262 	23,			/* secp256r1 (23) */
263 	8,			/* sect239k1 (8) */
264 	6,			/* sect233k1 (6) */
265 	7,			/* sect233r1 (7) */
266 	20,			/* secp224k1 (20) */
267 	21,			/* secp224r1 (21) */
268 	4,			/* sect193r1 (4) */
269 	5,			/* sect193r2 (5) */
270 	18,			/* secp192k1 (18) */
271 	19,			/* secp192r1 (19) */
272 	1,			/* sect163k1 (1) */
273 	2,			/* sect163r1 (2) */
274 	3,			/* sect163r2 (3) */
275 	15,			/* secp160k1 (15) */
276 	16,			/* secp160r1 (16) */
277 	17,			/* secp160r2 (17) */
278 };
279 
280 int
281 tls1_ec_curve_id2nid(uint16_t curve_id)
282 {
283 	/* ECC curves from draft-ietf-tls-ecc-12.txt (Oct. 17, 2005) */
284 	if ((curve_id < 1) ||
285 	    ((unsigned int)curve_id > sizeof(nid_list) / sizeof(nid_list[0])))
286 		return 0;
287 	return nid_list[curve_id - 1];
288 }
289 
290 uint16_t
291 tls1_ec_nid2curve_id(int nid)
292 {
293 	/* ECC curves from draft-ietf-tls-ecc-12.txt (Oct. 17, 2005) */
294 	switch (nid) {
295 	case NID_sect163k1: /* sect163k1 (1) */
296 		return 1;
297 	case NID_sect163r1: /* sect163r1 (2) */
298 		return 2;
299 	case NID_sect163r2: /* sect163r2 (3) */
300 		return 3;
301 	case NID_sect193r1: /* sect193r1 (4) */
302 		return 4;
303 	case NID_sect193r2: /* sect193r2 (5) */
304 		return 5;
305 	case NID_sect233k1: /* sect233k1 (6) */
306 		return 6;
307 	case NID_sect233r1: /* sect233r1 (7) */
308 		return 7;
309 	case NID_sect239k1: /* sect239k1 (8) */
310 		return 8;
311 	case NID_sect283k1: /* sect283k1 (9) */
312 		return 9;
313 	case NID_sect283r1: /* sect283r1 (10) */
314 		return 10;
315 	case NID_sect409k1: /* sect409k1 (11) */
316 		return 11;
317 	case NID_sect409r1: /* sect409r1 (12) */
318 		return 12;
319 	case NID_sect571k1: /* sect571k1 (13) */
320 		return 13;
321 	case NID_sect571r1: /* sect571r1 (14) */
322 		return 14;
323 	case NID_secp160k1: /* secp160k1 (15) */
324 		return 15;
325 	case NID_secp160r1: /* secp160r1 (16) */
326 		return 16;
327 	case NID_secp160r2: /* secp160r2 (17) */
328 		return 17;
329 	case NID_secp192k1: /* secp192k1 (18) */
330 		return 18;
331 	case NID_X9_62_prime192v1: /* secp192r1 (19) */
332 		return 19;
333 	case NID_secp224k1: /* secp224k1 (20) */
334 		return 20;
335 	case NID_secp224r1: /* secp224r1 (21) */
336 		return 21;
337 	case NID_secp256k1: /* secp256k1 (22) */
338 		return 22;
339 	case NID_X9_62_prime256v1: /* secp256r1 (23) */
340 		return 23;
341 	case NID_secp384r1: /* secp384r1 (24) */
342 		return 24;
343 	case NID_secp521r1: /* secp521r1 (25) */
344 		return 25;
345 	case NID_brainpoolP256r1: /* brainpoolP256r1 (26) */
346 		return 26;
347 	case NID_brainpoolP384r1: /* brainpoolP384r1 (27) */
348 		return 27;
349 	case NID_brainpoolP512r1: /* brainpoolP512r1 (28) */
350 		return 28;
351 	default:
352 		return 0;
353 	}
354 }
355 
356 /*
357  * Return the appropriate format list. If client_formats is non-zero, return
358  * the client/session formats. Otherwise return the custom format list if one
359  * exists, or the default formats if a custom list has not been specified.
360  */
361 static void
362 tls1_get_formatlist(SSL *s, int client_formats, const uint8_t **pformats,
363     size_t *pformatslen)
364 {
365 	if (client_formats != 0) {
366 		*pformats = s->session->tlsext_ecpointformatlist;
367 		*pformatslen = s->session->tlsext_ecpointformatlist_length;
368 		return;
369 	}
370 
371 	*pformats = s->tlsext_ecpointformatlist;
372 	*pformatslen = s->tlsext_ecpointformatlist_length;
373 	if (*pformats == NULL) {
374 		*pformats = ecformats_default;
375 		*pformatslen = sizeof(ecformats_default);
376 	}
377 }
378 
379 /*
380  * Return the appropriate curve list. If client_curves is non-zero, return
381  * the client/session curves. Otherwise return the custom curve list if one
382  * exists, or the default curves if a custom list has not been specified.
383  */
384 static void
385 tls1_get_curvelist(SSL *s, int client_curves, const uint16_t **pcurves,
386     size_t *pcurveslen)
387 {
388 	if (client_curves != 0) {
389 		*pcurves = s->session->tlsext_ellipticcurvelist;
390 		*pcurveslen = s->session->tlsext_ellipticcurvelist_length;
391 		return;
392 	}
393 
394 	*pcurves = s->tlsext_ellipticcurvelist;
395 	*pcurveslen = s->tlsext_ellipticcurvelist_length;
396 	if (*pcurves == NULL) {
397 		*pcurves = eccurves_default;
398 		*pcurveslen = sizeof(eccurves_default) / 2;
399 	}
400 }
401 
402 /* Check that a curve is one of our preferences. */
403 int
404 tls1_check_curve(SSL *s, const unsigned char *p, size_t len)
405 {
406 	const uint16_t *curves;
407 	size_t curveslen, i;
408 	uint16_t cid;
409 
410 	/* Only named curves are supported. */
411 	if (len != 3 || p[0] != NAMED_CURVE_TYPE)
412 		return (0);
413 
414 	cid = (p[1] << 8) | p[2];
415 
416 	tls1_get_curvelist(s, 0, &curves, &curveslen);
417 
418 	for (i = 0; i < curveslen; i++) {
419 		if (curves[i] == cid)
420 			return (1);
421 	}
422 	return (0);
423 }
424 
425 int
426 tls1_get_shared_curve(SSL *s)
427 {
428 	size_t preflen, supplen, i, j;
429 	const uint16_t *pref, *supp;
430 	unsigned long server_pref;
431 
432 	/* Cannot do anything on the client side. */
433 	if (s->server == 0)
434 		return (NID_undef);
435 
436 	/* Return first preference shared curve. */
437 	server_pref = (s->options & SSL_OP_CIPHER_SERVER_PREFERENCE);
438 	tls1_get_curvelist(s, (server_pref == 0), &pref, &preflen);
439 	tls1_get_curvelist(s, (server_pref != 0), &supp, &supplen);
440 
441 	for (i = 0; i < preflen; i++) {
442 		for (j = 0; j < supplen; j++) {
443 			if (pref[i] == supp[j])
444 				return (tls1_ec_curve_id2nid(pref[i]));
445 		}
446 	}
447 	return (NID_undef);
448 }
449 
450 /* For an EC key set TLS ID and required compression based on parameters. */
451 static int
452 tls1_set_ec_id(uint16_t *curve_id, uint8_t *comp_id, EC_KEY *ec)
453 {
454 	const EC_GROUP *grp;
455 	const EC_METHOD *meth;
456 	int is_prime = 0;
457 	int nid, id;
458 
459 	if (ec == NULL)
460 		return (0);
461 
462 	/* Determine if it is a prime field. */
463 	if ((grp = EC_KEY_get0_group(ec)) == NULL)
464 		return (0);
465 	if ((meth = EC_GROUP_method_of(grp)) == NULL)
466 		return (0);
467 	if (EC_METHOD_get_field_type(meth) == NID_X9_62_prime_field)
468 		is_prime = 1;
469 
470 	/* Determine curve ID. */
471 	nid = EC_GROUP_get_curve_name(grp);
472 	id = tls1_ec_nid2curve_id(nid);
473 
474 	/* If we have an ID set it, otherwise set arbitrary explicit curve. */
475 	if (id != 0)
476 		*curve_id = id;
477 	else
478 		*curve_id = is_prime ? 0xff01 : 0xff02;
479 
480 	/* Specify the compression identifier. */
481 	if (comp_id != NULL) {
482 		if (EC_KEY_get0_public_key(ec) == NULL)
483 			return (0);
484 
485 		if (EC_KEY_get_conv_form(ec) == POINT_CONVERSION_COMPRESSED) {
486 			*comp_id = is_prime ?
487 			    TLSEXT_ECPOINTFORMAT_ansiX962_compressed_prime :
488 			    TLSEXT_ECPOINTFORMAT_ansiX962_compressed_char2;
489 		} else {
490 			*comp_id = TLSEXT_ECPOINTFORMAT_uncompressed;
491 		}
492 	}
493 	return (1);
494 }
495 
496 /* Check that an EC key is compatible with extensions. */
497 static int
498 tls1_check_ec_key(SSL *s, const uint16_t *curve_id, const uint8_t *comp_id)
499 {
500 	size_t curveslen, formatslen, i;
501 	const uint16_t *curves;
502 	const uint8_t *formats;
503 
504 	/*
505 	 * Check point formats extension if present, otherwise everything
506 	 * is supported (see RFC4492).
507 	 */
508 	tls1_get_formatlist(s, 1, &formats, &formatslen);
509 	if (comp_id != NULL && formats != NULL) {
510 		for (i = 0; i < formatslen; i++) {
511 			if (formats[i] == *comp_id)
512 				break;
513 		}
514 		if (i == formatslen)
515 			return (0);
516 	}
517 
518 	/*
519 	 * Check curve list if present, otherwise everything is supported.
520 	 */
521 	tls1_get_curvelist(s, 1, &curves, &curveslen);
522 	if (curve_id != NULL && curves != NULL) {
523 		for (i = 0; i < curveslen; i++) {
524 			if (curves[i] == *curve_id)
525 				break;
526 		}
527 		if (i == curveslen)
528 			return (0);
529 	}
530 
531 	return (1);
532 }
533 
534 /* Check EC server key is compatible with client extensions. */
535 int
536 tls1_check_ec_server_key(SSL *s)
537 {
538 	CERT_PKEY *cpk = s->cert->pkeys + SSL_PKEY_ECC;
539 	uint16_t curve_id;
540 	uint8_t comp_id;
541 	EVP_PKEY *pkey;
542 	int rv;
543 
544 	if (cpk->x509 == NULL || cpk->privatekey == NULL)
545 		return (0);
546 	if ((pkey = X509_get_pubkey(cpk->x509)) == NULL)
547 		return (0);
548 	rv = tls1_set_ec_id(&curve_id, &comp_id, pkey->pkey.ec);
549 	EVP_PKEY_free(pkey);
550 	if (rv != 1)
551 		return (0);
552 
553 	return tls1_check_ec_key(s, &curve_id, &comp_id);
554 }
555 
556 /* Check EC temporary key is compatible with client extensions. */
557 int
558 tls1_check_ec_tmp_key(SSL *s)
559 {
560 	EC_KEY *ec = s->cert->ecdh_tmp;
561 	uint16_t curve_id;
562 
563 	if (s->cert->ecdh_tmp_auto != 0) {
564 		/* Need a shared curve. */
565 		if (tls1_get_shared_curve(s) != NID_undef)
566 			return (1);
567 		return (0);
568 	}
569 
570 	if (ec == NULL) {
571 		if (s->cert->ecdh_tmp_cb != NULL)
572 			return (1);
573 		return (0);
574 	}
575 	if (tls1_set_ec_id(&curve_id, NULL, ec) != 1)
576 		return (0);
577 
578 	return tls1_check_ec_key(s, &curve_id, NULL);
579 }
580 
581 /*
582  * List of supported signature algorithms and hashes. Should make this
583  * customisable at some point, for now include everything we support.
584  */
585 
586 static unsigned char tls12_sigalgs[] = {
587 	TLSEXT_hash_sha512, TLSEXT_signature_rsa,
588 	TLSEXT_hash_sha512, TLSEXT_signature_dsa,
589 	TLSEXT_hash_sha512, TLSEXT_signature_ecdsa,
590 #ifndef OPENSSL_NO_GOST
591 	TLSEXT_hash_streebog_512, TLSEXT_signature_gostr12_512,
592 #endif
593 
594 	TLSEXT_hash_sha384, TLSEXT_signature_rsa,
595 	TLSEXT_hash_sha384, TLSEXT_signature_dsa,
596 	TLSEXT_hash_sha384, TLSEXT_signature_ecdsa,
597 
598 	TLSEXT_hash_sha256, TLSEXT_signature_rsa,
599 	TLSEXT_hash_sha256, TLSEXT_signature_dsa,
600 	TLSEXT_hash_sha256, TLSEXT_signature_ecdsa,
601 
602 #ifndef OPENSSL_NO_GOST
603 	TLSEXT_hash_streebog_256, TLSEXT_signature_gostr12_256,
604 	TLSEXT_hash_gost94, TLSEXT_signature_gostr01,
605 #endif
606 
607 	TLSEXT_hash_sha224, TLSEXT_signature_rsa,
608 	TLSEXT_hash_sha224, TLSEXT_signature_dsa,
609 	TLSEXT_hash_sha224, TLSEXT_signature_ecdsa,
610 
611 	TLSEXT_hash_sha1, TLSEXT_signature_rsa,
612 	TLSEXT_hash_sha1, TLSEXT_signature_dsa,
613 	TLSEXT_hash_sha1, TLSEXT_signature_ecdsa,
614 };
615 
616 int
617 tls12_get_req_sig_algs(SSL *s, unsigned char *p)
618 {
619 	size_t slen = sizeof(tls12_sigalgs);
620 
621 	if (p)
622 		memcpy(p, tls12_sigalgs, slen);
623 	return (int)slen;
624 }
625 
626 unsigned char *
627 ssl_add_clienthello_tlsext(SSL *s, unsigned char *p, unsigned char *limit)
628 {
629 	int extdatalen = 0;
630 	unsigned char *ret = p;
631 	int using_ecc = 0;
632 
633 	/* See if we support any ECC ciphersuites. */
634 	if (s->version != DTLS1_VERSION && s->version >= TLS1_VERSION) {
635 		STACK_OF(SSL_CIPHER) *cipher_stack = SSL_get_ciphers(s);
636 		unsigned long alg_k, alg_a;
637 		int i;
638 
639 		for (i = 0; i < sk_SSL_CIPHER_num(cipher_stack); i++) {
640 			SSL_CIPHER *c = sk_SSL_CIPHER_value(cipher_stack, i);
641 
642 			alg_k = c->algorithm_mkey;
643 			alg_a = c->algorithm_auth;
644 
645 			if ((alg_k & (SSL_kECDHE|SSL_kECDHr|SSL_kECDHe) ||
646 			    (alg_a & SSL_aECDSA))) {
647 				using_ecc = 1;
648 				break;
649 			}
650 		}
651 	}
652 
653 	/* don't add extensions for SSLv3 unless doing secure renegotiation */
654 	if (s->client_version == SSL3_VERSION &&
655 	    !s->s3->send_connection_binding)
656 		return p;
657 
658 	ret += 2;
659 
660 	if (ret >= limit)
661 		return NULL; /* this really never occurs, but ... */
662 
663 	if (s->tlsext_hostname != NULL) {
664 		/* Add TLS extension servername to the Client Hello message */
665 		size_t size_str, lenmax;
666 
667 		/* check for enough space.
668 		   4 for the servername type and extension length
669 		   2 for servernamelist length
670 		   1 for the hostname type
671 		   2 for hostname length
672 		   + hostname length
673 		*/
674 
675 		if ((size_t)(limit - ret) < 9)
676 			return NULL;
677 
678 		lenmax = limit - ret - 9;
679 		if ((size_str = strlen(s->tlsext_hostname)) > lenmax)
680 			return NULL;
681 
682 		/* extension type and length */
683 		s2n(TLSEXT_TYPE_server_name, ret);
684 
685 		s2n(size_str + 5, ret);
686 
687 		/* length of servername list */
688 		s2n(size_str + 3, ret);
689 
690 		/* hostname type, length and hostname */
691 		*(ret++) = (unsigned char) TLSEXT_NAMETYPE_host_name;
692 		s2n(size_str, ret);
693 		memcpy(ret, s->tlsext_hostname, size_str);
694 		ret += size_str;
695 	}
696 
697 	/* Add RI if renegotiating */
698 	if (s->renegotiate) {
699 		int el;
700 
701 		if (!ssl_add_clienthello_renegotiate_ext(s, 0, &el, 0)) {
702 			SSLerr(SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT,
703 			    ERR_R_INTERNAL_ERROR);
704 			return NULL;
705 		}
706 
707 		if ((size_t)(limit - ret) < 4 + el)
708 			return NULL;
709 
710 		s2n(TLSEXT_TYPE_renegotiate, ret);
711 		s2n(el, ret);
712 
713 		if (!ssl_add_clienthello_renegotiate_ext(s, ret, &el, el)) {
714 			SSLerr(SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT,
715 			    ERR_R_INTERNAL_ERROR);
716 			return NULL;
717 		}
718 
719 		ret += el;
720 	}
721 
722 	if (using_ecc) {
723 		size_t curveslen, formatslen, lenmax;
724 		const uint16_t *curves;
725 		const uint8_t *formats;
726 		int i;
727 
728 		/*
729 		 * Add TLS extension ECPointFormats to the ClientHello message.
730 		 */
731 		tls1_get_formatlist(s, 0, &formats, &formatslen);
732 
733 		if ((size_t)(limit - ret) < 5)
734 			return NULL;
735 
736 		lenmax = limit - ret - 5;
737 		if (formatslen > lenmax)
738 			return NULL;
739 		if (formatslen > 255) {
740 			SSLerr(SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT,
741 			    ERR_R_INTERNAL_ERROR);
742 			return NULL;
743 		}
744 
745 		s2n(TLSEXT_TYPE_ec_point_formats, ret);
746 		s2n(formatslen + 1, ret);
747 		*(ret++) = (unsigned char)formatslen;
748 		memcpy(ret, formats, formatslen);
749 		ret += formatslen;
750 
751 		/*
752 		 * Add TLS extension EllipticCurves to the ClientHello message.
753 		 */
754 		tls1_get_curvelist(s, 0, &curves, &curveslen);
755 
756 		if ((size_t)(limit - ret) < 6)
757 			return NULL;
758 
759 		lenmax = limit - ret - 6;
760 		if (curveslen > lenmax)
761 			return NULL;
762 		if (curveslen > 65532) {
763 			SSLerr(SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT,
764 			    ERR_R_INTERNAL_ERROR);
765 			return NULL;
766 		}
767 
768 		s2n(TLSEXT_TYPE_elliptic_curves, ret);
769 		s2n((curveslen * 2) + 2, ret);
770 
771 		/* NB: draft-ietf-tls-ecc-12.txt uses a one-byte prefix for
772 		 * elliptic_curve_list, but the examples use two bytes.
773 		 * http://www1.ietf.org/mail-archive/web/tls/current/msg00538.html
774 		 * resolves this to two bytes.
775 		 */
776 		s2n(curveslen * 2, ret);
777 		for (i = 0; i < curveslen; i++)
778 			s2n(curves[i], ret);
779 	}
780 
781 	if (!(SSL_get_options(s) & SSL_OP_NO_TICKET)) {
782 		int ticklen;
783 		if (!s->new_session && s->session && s->session->tlsext_tick)
784 			ticklen = s->session->tlsext_ticklen;
785 		else if (s->session && s->tlsext_session_ticket &&
786 		    s->tlsext_session_ticket->data) {
787 			ticklen = s->tlsext_session_ticket->length;
788 			s->session->tlsext_tick = malloc(ticklen);
789 			if (!s->session->tlsext_tick)
790 				return NULL;
791 			memcpy(s->session->tlsext_tick,
792 			    s->tlsext_session_ticket->data, ticklen);
793 			s->session->tlsext_ticklen = ticklen;
794 		} else
795 			ticklen = 0;
796 		if (ticklen == 0 && s->tlsext_session_ticket &&
797 		    s->tlsext_session_ticket->data == NULL)
798 			goto skip_ext;
799 		/* Check for enough room 2 for extension type, 2 for len
800  		 * rest for ticket
801   		 */
802 		if ((size_t)(limit - ret) < 4 + ticklen)
803 			return NULL;
804 		s2n(TLSEXT_TYPE_session_ticket, ret);
805 
806 		s2n(ticklen, ret);
807 		if (ticklen) {
808 			memcpy(ret, s->session->tlsext_tick, ticklen);
809 			ret += ticklen;
810 		}
811 	}
812 skip_ext:
813 
814 	if (TLS1_get_client_version(s) >= TLS1_2_VERSION) {
815 		if ((size_t)(limit - ret) < sizeof(tls12_sigalgs) + 6)
816 			return NULL;
817 
818 		s2n(TLSEXT_TYPE_signature_algorithms, ret);
819 		s2n(sizeof(tls12_sigalgs) + 2, ret);
820 		s2n(sizeof(tls12_sigalgs), ret);
821 		memcpy(ret, tls12_sigalgs, sizeof(tls12_sigalgs));
822 		ret += sizeof(tls12_sigalgs);
823 	}
824 
825 	if (s->tlsext_status_type == TLSEXT_STATUSTYPE_ocsp &&
826 	    s->version != DTLS1_VERSION) {
827 		int i;
828 		long extlen, idlen, itmp;
829 		OCSP_RESPID *id;
830 
831 		idlen = 0;
832 		for (i = 0; i < sk_OCSP_RESPID_num(s->tlsext_ocsp_ids); i++) {
833 			id = sk_OCSP_RESPID_value(s->tlsext_ocsp_ids, i);
834 			itmp = i2d_OCSP_RESPID(id, NULL);
835 			if (itmp <= 0)
836 				return NULL;
837 			idlen += itmp + 2;
838 		}
839 
840 		if (s->tlsext_ocsp_exts) {
841 			extlen = i2d_X509_EXTENSIONS(s->tlsext_ocsp_exts, NULL);
842 			if (extlen < 0)
843 				return NULL;
844 		} else
845 			extlen = 0;
846 
847 		if ((size_t)(limit - ret) < 7 + extlen + idlen)
848 			return NULL;
849 		s2n(TLSEXT_TYPE_status_request, ret);
850 		if (extlen + idlen > 0xFFF0)
851 			return NULL;
852 		s2n(extlen + idlen + 5, ret);
853 		*(ret++) = TLSEXT_STATUSTYPE_ocsp;
854 		s2n(idlen, ret);
855 		for (i = 0; i < sk_OCSP_RESPID_num(s->tlsext_ocsp_ids); i++) {
856 			/* save position of id len */
857 			unsigned char *q = ret;
858 			id = sk_OCSP_RESPID_value(s->tlsext_ocsp_ids, i);
859 			/* skip over id len */
860 			ret += 2;
861 			itmp = i2d_OCSP_RESPID(id, &ret);
862 			/* write id len */
863 			s2n(itmp, q);
864 		}
865 		s2n(extlen, ret);
866 		if (extlen > 0)
867 			i2d_X509_EXTENSIONS(s->tlsext_ocsp_exts, &ret);
868 	}
869 
870 	if (s->ctx->next_proto_select_cb && !s->s3->tmp.finish_md_len) {
871 		/* The client advertises an emtpy extension to indicate its
872 		 * support for Next Protocol Negotiation */
873 		if ((size_t)(limit - ret) < 4)
874 			return NULL;
875 		s2n(TLSEXT_TYPE_next_proto_neg, ret);
876 		s2n(0, ret);
877 	}
878 
879 	if (s->alpn_client_proto_list != NULL &&
880 	    s->s3->tmp.finish_md_len == 0) {
881 		if ((size_t)(limit - ret) < 6 + s->alpn_client_proto_list_len)
882 			return (NULL);
883 		s2n(TLSEXT_TYPE_application_layer_protocol_negotiation, ret);
884 		s2n(2 + s->alpn_client_proto_list_len, ret);
885 		s2n(s->alpn_client_proto_list_len, ret);
886 		memcpy(ret, s->alpn_client_proto_list,
887 		    s->alpn_client_proto_list_len);
888 		ret += s->alpn_client_proto_list_len;
889 	}
890 
891 #ifndef OPENSSL_NO_SRTP
892 	if (SSL_IS_DTLS(s) && SSL_get_srtp_profiles(s)) {
893 		int el;
894 
895 		ssl_add_clienthello_use_srtp_ext(s, 0, &el, 0);
896 
897 		if ((size_t)(limit - ret) < 4 + el)
898 			return NULL;
899 
900 		s2n(TLSEXT_TYPE_use_srtp, ret);
901 		s2n(el, ret);
902 
903 		if (ssl_add_clienthello_use_srtp_ext(s, ret, &el, el)) {
904 			SSLerr(SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT,
905 			    ERR_R_INTERNAL_ERROR);
906 			return NULL;
907 		}
908 		ret += el;
909 	}
910 #endif
911 
912 	/*
913 	 * Add padding to workaround bugs in F5 terminators.
914 	 * See https://tools.ietf.org/html/draft-agl-tls-padding-03
915 	 *
916 	 * Note that this seems to trigger issues with IronPort SMTP
917 	 * appliances.
918 	 *
919 	 * NB: because this code works out the length of all existing
920 	 * extensions it MUST always appear last.
921 	 */
922 	if (s->options & SSL_OP_TLSEXT_PADDING) {
923 		int hlen = ret - (unsigned char *)s->init_buf->data;
924 
925 		/*
926 		 * The code in s23_clnt.c to build ClientHello messages
927 		 * includes the 5-byte record header in the buffer, while the
928 		 * code in s3_clnt.c does not.
929 		 */
930 		if (s->state == SSL23_ST_CW_CLNT_HELLO_A)
931 			hlen -= 5;
932 		if (hlen > 0xff && hlen < 0x200) {
933 			hlen = 0x200 - hlen;
934 			if (hlen >= 4)
935 				hlen -= 4;
936 			else
937 				hlen = 0;
938 
939 			s2n(TLSEXT_TYPE_padding, ret);
940 			s2n(hlen, ret);
941 			memset(ret, 0, hlen);
942 			ret += hlen;
943 		}
944 	}
945 
946 	if ((extdatalen = ret - p - 2) == 0)
947 		return p;
948 
949 	s2n(extdatalen, p);
950 	return ret;
951 }
952 
953 unsigned char *
954 ssl_add_serverhello_tlsext(SSL *s, unsigned char *p, unsigned char *limit)
955 {
956 	int using_ecc, extdatalen = 0;
957 	unsigned long alg_a, alg_k;
958 	unsigned char *ret = p;
959 	int next_proto_neg_seen;
960 
961 	alg_a = s->s3->tmp.new_cipher->algorithm_auth;
962 	alg_k = s->s3->tmp.new_cipher->algorithm_mkey;
963 	using_ecc = (alg_k & (SSL_kECDHE|SSL_kECDHr|SSL_kECDHe) ||
964 	    alg_a & SSL_aECDSA) &&
965 	    s->session->tlsext_ecpointformatlist != NULL;
966 
967 	/* don't add extensions for SSLv3, unless doing secure renegotiation */
968 	if (s->version == SSL3_VERSION && !s->s3->send_connection_binding)
969 		return p;
970 
971 	ret += 2;
972 	if (ret >= limit)
973 		return NULL; /* this really never occurs, but ... */
974 
975 	if (!s->hit && s->servername_done == 1 &&
976 	    s->session->tlsext_hostname != NULL) {
977 		if ((size_t)(limit - ret) < 4)
978 			return NULL;
979 
980 		s2n(TLSEXT_TYPE_server_name, ret);
981 		s2n(0, ret);
982 	}
983 
984 	if (s->s3->send_connection_binding) {
985 		int el;
986 
987 		if (!ssl_add_serverhello_renegotiate_ext(s, 0, &el, 0)) {
988 			SSLerr(SSL_F_SSL_ADD_SERVERHELLO_TLSEXT,
989 			    ERR_R_INTERNAL_ERROR);
990 			return NULL;
991 		}
992 
993 		if ((size_t)(limit - ret) < 4 + el)
994 			return NULL;
995 
996 		s2n(TLSEXT_TYPE_renegotiate, ret);
997 		s2n(el, ret);
998 
999 		if (!ssl_add_serverhello_renegotiate_ext(s, ret, &el, el)) {
1000 			SSLerr(SSL_F_SSL_ADD_SERVERHELLO_TLSEXT,
1001 			    ERR_R_INTERNAL_ERROR);
1002 			return NULL;
1003 		}
1004 
1005 		ret += el;
1006 	}
1007 
1008 	if (using_ecc && s->version != DTLS1_VERSION) {
1009 		const unsigned char *formats;
1010 		size_t formatslen, lenmax;
1011 
1012 		/*
1013 		 * Add TLS extension ECPointFormats to the ServerHello message.
1014 		 */
1015 		tls1_get_formatlist(s, 0, &formats, &formatslen);
1016 
1017 		if ((size_t)(limit - ret) < 5)
1018 			return NULL;
1019 
1020 		lenmax = limit - ret - 5;
1021 		if (formatslen > lenmax)
1022 			return NULL;
1023 		if (formatslen > 255) {
1024 			SSLerr(SSL_F_SSL_ADD_SERVERHELLO_TLSEXT,
1025 			    ERR_R_INTERNAL_ERROR);
1026 			return NULL;
1027 		}
1028 
1029 		s2n(TLSEXT_TYPE_ec_point_formats, ret);
1030 		s2n(formatslen + 1, ret);
1031 		*(ret++) = (unsigned char)formatslen;
1032 		memcpy(ret, formats, formatslen);
1033 		ret += formatslen;
1034 	}
1035 
1036 	/*
1037 	 * Currently the server should not respond with a SupportedCurves
1038 	 * extension.
1039 	 */
1040 
1041 	if (s->tlsext_ticket_expected &&
1042 	    !(SSL_get_options(s) & SSL_OP_NO_TICKET)) {
1043 		if ((size_t)(limit - ret) < 4)
1044 			return NULL;
1045 
1046 		s2n(TLSEXT_TYPE_session_ticket, ret);
1047 		s2n(0, ret);
1048 	}
1049 
1050 	if (s->tlsext_status_expected) {
1051 		if ((size_t)(limit - ret) < 4)
1052 			return NULL;
1053 
1054 		s2n(TLSEXT_TYPE_status_request, ret);
1055 		s2n(0, ret);
1056 	}
1057 
1058 #ifndef OPENSSL_NO_SRTP
1059 	if (SSL_IS_DTLS(s) && s->srtp_profile) {
1060 		int el;
1061 
1062 		ssl_add_serverhello_use_srtp_ext(s, 0, &el, 0);
1063 
1064 		if ((size_t)(limit - ret) < 4 + el)
1065 			return NULL;
1066 
1067 		s2n(TLSEXT_TYPE_use_srtp, ret);
1068 		s2n(el, ret);
1069 
1070 		if (ssl_add_serverhello_use_srtp_ext(s, ret, &el, el)) {
1071 			SSLerr(SSL_F_SSL_ADD_SERVERHELLO_TLSEXT,
1072 			    ERR_R_INTERNAL_ERROR);
1073 			return NULL;
1074 		}
1075 		ret += el;
1076 	}
1077 #endif
1078 
1079 	if (((s->s3->tmp.new_cipher->id & 0xFFFF) == 0x80 ||
1080 	    (s->s3->tmp.new_cipher->id & 0xFFFF) == 0x81) &&
1081 	    (SSL_get_options(s) & SSL_OP_CRYPTOPRO_TLSEXT_BUG)) {
1082 		static const unsigned char cryptopro_ext[36] = {
1083 			0xfd, 0xe8, /*65000*/
1084 			0x00, 0x20, /*32 bytes length*/
1085 			0x30, 0x1e, 0x30, 0x08, 0x06, 0x06, 0x2a, 0x85,
1086 			0x03, 0x02, 0x02, 0x09, 0x30, 0x08, 0x06, 0x06,
1087 			0x2a, 0x85, 0x03, 0x02, 0x02, 0x16, 0x30, 0x08,
1088 			0x06, 0x06, 0x2a, 0x85, 0x03, 0x02, 0x02, 0x17
1089 		};
1090 		if ((size_t)(limit - ret) < sizeof(cryptopro_ext))
1091 			return NULL;
1092 		memcpy(ret, cryptopro_ext, sizeof(cryptopro_ext));
1093 		ret += sizeof(cryptopro_ext);
1094 	}
1095 
1096 	next_proto_neg_seen = s->s3->next_proto_neg_seen;
1097 	s->s3->next_proto_neg_seen = 0;
1098 	if (next_proto_neg_seen && s->ctx->next_protos_advertised_cb) {
1099 		const unsigned char *npa;
1100 		unsigned int npalen;
1101 		int r;
1102 
1103 		r = s->ctx->next_protos_advertised_cb(s, &npa, &npalen,
1104 		    s->ctx->next_protos_advertised_cb_arg);
1105 		if (r == SSL_TLSEXT_ERR_OK) {
1106 			if ((size_t)(limit - ret) < 4 + npalen)
1107 				return NULL;
1108 			s2n(TLSEXT_TYPE_next_proto_neg, ret);
1109 			s2n(npalen, ret);
1110 			memcpy(ret, npa, npalen);
1111 			ret += npalen;
1112 			s->s3->next_proto_neg_seen = 1;
1113 		}
1114 	}
1115 
1116 	if (s->s3->alpn_selected != NULL) {
1117 		const unsigned char *selected = s->s3->alpn_selected;
1118 		unsigned int len = s->s3->alpn_selected_len;
1119 
1120 		if ((long)(limit - ret - 4 - 2 - 1 - len) < 0)
1121 			return (NULL);
1122 		s2n(TLSEXT_TYPE_application_layer_protocol_negotiation, ret);
1123 		s2n(3 + len, ret);
1124 		s2n(1 + len, ret);
1125 		*ret++ = len;
1126 		memcpy(ret, selected, len);
1127 		ret += len;
1128 	}
1129 
1130 	if ((extdatalen = ret - p - 2) == 0)
1131 		return p;
1132 
1133 	s2n(extdatalen, p);
1134 	return ret;
1135 }
1136 
1137 /*
1138  * tls1_alpn_handle_client_hello is called to process the ALPN extension in a
1139  * ClientHello.
1140  *   data: the contents of the extension, not including the type and length.
1141  *   data_len: the number of bytes in data.
1142  *   al: a pointer to the alert value to send in the event of a non-zero
1143  *       return.
1144  *   returns: 1 on success.
1145  */
1146 static int
1147 tls1_alpn_handle_client_hello(SSL *s, const unsigned char *data,
1148     unsigned int data_len, int *al)
1149 {
1150 	const unsigned char *selected;
1151 	unsigned char selected_len;
1152 	unsigned int proto_len;
1153 	unsigned int i;
1154 	int r;
1155 
1156 	if (s->ctx->alpn_select_cb == NULL)
1157 		return (1);
1158 
1159 	if (data_len < 2)
1160 		goto parse_error;
1161 
1162 	/*
1163 	 * data should contain a uint16 length followed by a series of 8-bit,
1164 	 * length-prefixed strings.
1165 	 */
1166 	i = ((unsigned int)data[0]) << 8 | ((unsigned int)data[1]);
1167 	data_len -= 2;
1168 	data += 2;
1169 	if (data_len != i)
1170 		goto parse_error;
1171 
1172 	if (data_len < 2)
1173 		goto parse_error;
1174 
1175 	for (i = 0; i < data_len; ) {
1176 		proto_len = data[i];
1177 		i++;
1178 
1179 		if (proto_len == 0)
1180 			goto parse_error;
1181 
1182 		if (i + proto_len < i || i + proto_len > data_len)
1183 			goto parse_error;
1184 
1185 		i += proto_len;
1186 	}
1187 
1188 	r = s->ctx->alpn_select_cb(s, &selected, &selected_len,
1189 	    data, data_len, s->ctx->alpn_select_cb_arg);
1190 	if (r == SSL_TLSEXT_ERR_OK) {
1191 		free(s->s3->alpn_selected);
1192 		if ((s->s3->alpn_selected = malloc(selected_len)) == NULL) {
1193 			*al = SSL_AD_INTERNAL_ERROR;
1194 			return (-1);
1195 		}
1196 		memcpy(s->s3->alpn_selected, selected, selected_len);
1197 		s->s3->alpn_selected_len = selected_len;
1198 	}
1199 
1200 	return (1);
1201 
1202 parse_error:
1203 	*al = SSL_AD_DECODE_ERROR;
1204 	return (0);
1205 }
1206 
1207 /* ssl_check_for_safari attempts to fingerprint Safari using OS X
1208  * SecureTransport using the TLS extension block in |d|, of length |n|.
1209  * Safari, since 10.6, sends exactly these extensions, in this order:
1210  *   SNI,
1211  *   elliptic_curves
1212  *   ec_point_formats
1213  *
1214  * We wish to fingerprint Safari because they broke ECDHE-ECDSA support in 10.8,
1215  * but they advertise support. So enabling ECDHE-ECDSA ciphers breaks them.
1216  * Sadly we cannot differentiate 10.6, 10.7 and 10.8.4 (which work), from
1217  * 10.8..10.8.3 (which don't work).
1218  */
1219 static void
1220 ssl_check_for_safari(SSL *s, const unsigned char *data, const unsigned char *d,
1221     int n)
1222 {
1223 	unsigned short type, size;
1224 	static const unsigned char kSafariExtensionsBlock[] = {
1225 		0x00, 0x0a,  /* elliptic_curves extension */
1226 		0x00, 0x08,  /* 8 bytes */
1227 		0x00, 0x06,  /* 6 bytes of curve ids */
1228 		0x00, 0x17,  /* P-256 */
1229 		0x00, 0x18,  /* P-384 */
1230 		0x00, 0x19,  /* P-521 */
1231 
1232 		0x00, 0x0b,  /* ec_point_formats */
1233 		0x00, 0x02,  /* 2 bytes */
1234 		0x01,        /* 1 point format */
1235 		0x00,        /* uncompressed */
1236 	};
1237 
1238 	/* The following is only present in TLS 1.2 */
1239 	static const unsigned char kSafariTLS12ExtensionsBlock[] = {
1240 		0x00, 0x0d,  /* signature_algorithms */
1241 		0x00, 0x0c,  /* 12 bytes */
1242 		0x00, 0x0a,  /* 10 bytes */
1243 		0x05, 0x01,  /* SHA-384/RSA */
1244 		0x04, 0x01,  /* SHA-256/RSA */
1245 		0x02, 0x01,  /* SHA-1/RSA */
1246 		0x04, 0x03,  /* SHA-256/ECDSA */
1247 		0x02, 0x03,  /* SHA-1/ECDSA */
1248 	};
1249 
1250 	if (data >= (d + n - 2))
1251 		return;
1252 	data += 2;
1253 
1254 	if (data > (d + n - 4))
1255 		return;
1256 	n2s(data, type);
1257 	n2s(data, size);
1258 
1259 	if (type != TLSEXT_TYPE_server_name)
1260 		return;
1261 
1262 	if (data + size > d + n)
1263 		return;
1264 	data += size;
1265 
1266 	if (TLS1_get_client_version(s) >= TLS1_2_VERSION) {
1267 		const size_t len1 = sizeof(kSafariExtensionsBlock);
1268 		const size_t len2 = sizeof(kSafariTLS12ExtensionsBlock);
1269 
1270 		if (data + len1 + len2 != d + n)
1271 			return;
1272 		if (memcmp(data, kSafariExtensionsBlock, len1) != 0)
1273 			return;
1274 		if (memcmp(data + len1, kSafariTLS12ExtensionsBlock, len2) != 0)
1275 			return;
1276 	} else {
1277 		const size_t len = sizeof(kSafariExtensionsBlock);
1278 
1279 		if (data + len != d + n)
1280 			return;
1281 		if (memcmp(data, kSafariExtensionsBlock, len) != 0)
1282 			return;
1283 	}
1284 
1285 	s->s3->is_probably_safari = 1;
1286 }
1287 
1288 int
1289 ssl_parse_clienthello_tlsext(SSL *s, unsigned char **p, unsigned char *d,
1290     int n, int *al)
1291 {
1292 	unsigned short type;
1293 	unsigned short size;
1294 	unsigned short len;
1295 	unsigned char *data = *p;
1296 	int renegotiate_seen = 0;
1297 	int sigalg_seen = 0;
1298 
1299 	s->servername_done = 0;
1300 	s->tlsext_status_type = -1;
1301 	s->s3->next_proto_neg_seen = 0;
1302 	free(s->s3->alpn_selected);
1303 	s->s3->alpn_selected = NULL;
1304 
1305 	if (s->options & SSL_OP_SAFARI_ECDHE_ECDSA_BUG)
1306 		ssl_check_for_safari(s, data, d, n);
1307 
1308 	if (data >= (d + n - 2))
1309 		goto ri_check;
1310 	n2s(data, len);
1311 
1312 	if (data > (d + n - len))
1313 		goto ri_check;
1314 
1315 	while (data <= (d + n - 4)) {
1316 		n2s(data, type);
1317 		n2s(data, size);
1318 
1319 		if (data + size > (d + n))
1320 			goto ri_check;
1321 		if (s->tlsext_debug_cb)
1322 			s->tlsext_debug_cb(s, 0, type, data, size,
1323 			    s->tlsext_debug_arg);
1324 /* The servername extension is treated as follows:
1325 
1326    - Only the hostname type is supported with a maximum length of 255.
1327    - The servername is rejected if too long or if it contains zeros,
1328      in which case an fatal alert is generated.
1329    - The servername field is maintained together with the session cache.
1330    - When a session is resumed, the servername call back invoked in order
1331      to allow the application to position itself to the right context.
1332    - The servername is acknowledged if it is new for a session or when
1333      it is identical to a previously used for the same session.
1334      Applications can control the behaviour.  They can at any time
1335      set a 'desirable' servername for a new SSL object. This can be the
1336      case for example with HTTPS when a Host: header field is received and
1337      a renegotiation is requested. In this case, a possible servername
1338      presented in the new client hello is only acknowledged if it matches
1339      the value of the Host: field.
1340    - Applications must  use SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION
1341      if they provide for changing an explicit servername context for the session,
1342      i.e. when the session has been established with a servername extension.
1343    - On session reconnect, the servername extension may be absent.
1344 
1345 */
1346 
1347 		if (type == TLSEXT_TYPE_server_name) {
1348 			unsigned char *sdata;
1349 			int servname_type;
1350 			int dsize;
1351 
1352 			if (size < 2) {
1353 				*al = SSL_AD_DECODE_ERROR;
1354 				return 0;
1355 			}
1356 			n2s(data, dsize);
1357 
1358 			size -= 2;
1359 			if (dsize > size) {
1360 				*al = SSL_AD_DECODE_ERROR;
1361 				return 0;
1362 			}
1363 
1364 			sdata = data;
1365 			while (dsize > 3) {
1366 				servname_type = *(sdata++);
1367 
1368 				n2s(sdata, len);
1369 				dsize -= 3;
1370 
1371 				if (len > dsize) {
1372 					*al = SSL_AD_DECODE_ERROR;
1373 					return 0;
1374 				}
1375 				if (s->servername_done == 0)
1376 					switch (servname_type) {
1377 					case TLSEXT_NAMETYPE_host_name:
1378 						if (!s->hit) {
1379 							if (s->session->tlsext_hostname) {
1380 								*al = SSL_AD_DECODE_ERROR;
1381 								return 0;
1382 							}
1383 							if (len > TLSEXT_MAXLEN_host_name) {
1384 								*al = TLS1_AD_UNRECOGNIZED_NAME;
1385 								return 0;
1386 							}
1387 							if ((s->session->tlsext_hostname =
1388 							    malloc(len + 1)) == NULL) {
1389 								*al = TLS1_AD_INTERNAL_ERROR;
1390 								return 0;
1391 							}
1392 							memcpy(s->session->tlsext_hostname, sdata, len);
1393 							s->session->tlsext_hostname[len] = '\0';
1394 							if (strlen(s->session->tlsext_hostname) != len) {
1395 								free(s->session->tlsext_hostname);
1396 								s->session->tlsext_hostname = NULL;
1397 								*al = TLS1_AD_UNRECOGNIZED_NAME;
1398 								return 0;
1399 							}
1400 							s->servername_done = 1;
1401 
1402 
1403 						} else {
1404 							s->servername_done = s->session->tlsext_hostname &&
1405 							    strlen(s->session->tlsext_hostname) == len &&
1406 							    strncmp(s->session->tlsext_hostname, (char *)sdata, len) == 0;
1407 						}
1408 						break;
1409 
1410 					default:
1411 						break;
1412 					}
1413 
1414 				dsize -= len;
1415 			}
1416 			if (dsize != 0) {
1417 				*al = SSL_AD_DECODE_ERROR;
1418 				return 0;
1419 			}
1420 
1421 		}
1422 
1423 		else if (type == TLSEXT_TYPE_ec_point_formats &&
1424 		    s->version != DTLS1_VERSION) {
1425 			unsigned char *sdata = data;
1426 			size_t formatslen;
1427 			uint8_t *formats;
1428 
1429 			if (size < 1) {
1430 				*al = TLS1_AD_DECODE_ERROR;
1431 				return 0;
1432 			}
1433 			formatslen = *(sdata++);
1434 			if (formatslen != size - 1) {
1435 				*al = TLS1_AD_DECODE_ERROR;
1436 				return 0;
1437 			}
1438 
1439 			if (!s->hit) {
1440 				free(s->session->tlsext_ecpointformatlist);
1441 				s->session->tlsext_ecpointformatlist = NULL;
1442 				s->session->tlsext_ecpointformatlist_length = 0;
1443 
1444 				if ((formats = reallocarray(NULL, formatslen,
1445 				    sizeof(uint8_t))) == NULL) {
1446 					*al = TLS1_AD_INTERNAL_ERROR;
1447 					return 0;
1448 				}
1449 				memcpy(formats, sdata, formatslen);
1450 				s->session->tlsext_ecpointformatlist = formats;
1451 				s->session->tlsext_ecpointformatlist_length =
1452 				    formatslen;
1453 			}
1454 		} else if (type == TLSEXT_TYPE_elliptic_curves &&
1455 		    s->version != DTLS1_VERSION) {
1456 			unsigned char *sdata = data;
1457 			size_t curveslen, i;
1458 			uint16_t *curves;
1459 
1460 			if (size < 2) {
1461 				*al = TLS1_AD_DECODE_ERROR;
1462 				return 0;
1463 			}
1464 			n2s(sdata, curveslen);
1465 			if (curveslen != size - 2 || curveslen % 2 != 0) {
1466 				*al = TLS1_AD_DECODE_ERROR;
1467 				return 0;
1468 			}
1469 			curveslen /= 2;
1470 
1471 			if (!s->hit) {
1472 				if (s->session->tlsext_ellipticcurvelist) {
1473 					*al = TLS1_AD_DECODE_ERROR;
1474 					return 0;
1475 				}
1476 				s->session->tlsext_ellipticcurvelist_length = 0;
1477 				if ((curves = reallocarray(NULL, curveslen,
1478 				    sizeof(uint16_t))) == NULL) {
1479 					*al = TLS1_AD_INTERNAL_ERROR;
1480 					return 0;
1481 				}
1482 				for (i = 0; i < curveslen; i++)
1483 					n2s(sdata, curves[i]);
1484 				s->session->tlsext_ellipticcurvelist = curves;
1485 				s->session->tlsext_ellipticcurvelist_length = curveslen;
1486 			}
1487 		}
1488 		else if (type == TLSEXT_TYPE_session_ticket) {
1489 			if (s->tls_session_ticket_ext_cb &&
1490 			    !s->tls_session_ticket_ext_cb(s, data, size, s->tls_session_ticket_ext_cb_arg)) {
1491 				*al = TLS1_AD_INTERNAL_ERROR;
1492 				return 0;
1493 			}
1494 		} else if (type == TLSEXT_TYPE_renegotiate) {
1495 			if (!ssl_parse_clienthello_renegotiate_ext(s, data, size, al))
1496 				return 0;
1497 			renegotiate_seen = 1;
1498 		} else if (type == TLSEXT_TYPE_signature_algorithms) {
1499 			int dsize;
1500 			if (sigalg_seen || size < 2) {
1501 				*al = SSL_AD_DECODE_ERROR;
1502 				return 0;
1503 			}
1504 			sigalg_seen = 1;
1505 			n2s(data, dsize);
1506 			size -= 2;
1507 			if (dsize != size || dsize & 1) {
1508 				*al = SSL_AD_DECODE_ERROR;
1509 				return 0;
1510 			}
1511 			if (!tls1_process_sigalgs(s, data, dsize)) {
1512 				*al = SSL_AD_DECODE_ERROR;
1513 				return 0;
1514 			}
1515 		} else if (type == TLSEXT_TYPE_status_request &&
1516 		    s->version != DTLS1_VERSION) {
1517 
1518 			if (size < 5) {
1519 				*al = SSL_AD_DECODE_ERROR;
1520 				return 0;
1521 			}
1522 
1523 			s->tlsext_status_type = *data++;
1524 			size--;
1525 			if (s->tlsext_status_type == TLSEXT_STATUSTYPE_ocsp) {
1526 				const unsigned char *sdata;
1527 				int dsize;
1528 				/* Read in responder_id_list */
1529 				n2s(data, dsize);
1530 				size -= 2;
1531 				if (dsize > size  ) {
1532 					*al = SSL_AD_DECODE_ERROR;
1533 					return 0;
1534 				}
1535 				while (dsize > 0) {
1536 					OCSP_RESPID *id;
1537 					int idsize;
1538 					if (dsize < 4) {
1539 						*al = SSL_AD_DECODE_ERROR;
1540 						return 0;
1541 					}
1542 					n2s(data, idsize);
1543 					dsize -= 2 + idsize;
1544 					size -= 2 + idsize;
1545 					if (dsize < 0) {
1546 						*al = SSL_AD_DECODE_ERROR;
1547 						return 0;
1548 					}
1549 					sdata = data;
1550 					data += idsize;
1551 					id = d2i_OCSP_RESPID(NULL,
1552 					    &sdata, idsize);
1553 					if (!id) {
1554 						*al = SSL_AD_DECODE_ERROR;
1555 						return 0;
1556 					}
1557 					if (data != sdata) {
1558 						OCSP_RESPID_free(id);
1559 						*al = SSL_AD_DECODE_ERROR;
1560 						return 0;
1561 					}
1562 					if (!s->tlsext_ocsp_ids &&
1563 					    !(s->tlsext_ocsp_ids =
1564 					    sk_OCSP_RESPID_new_null())) {
1565 						OCSP_RESPID_free(id);
1566 						*al = SSL_AD_INTERNAL_ERROR;
1567 						return 0;
1568 					}
1569 					if (!sk_OCSP_RESPID_push(
1570 					    s->tlsext_ocsp_ids, id)) {
1571 						OCSP_RESPID_free(id);
1572 						*al = SSL_AD_INTERNAL_ERROR;
1573 						return 0;
1574 					}
1575 				}
1576 
1577 				/* Read in request_extensions */
1578 				if (size < 2) {
1579 					*al = SSL_AD_DECODE_ERROR;
1580 					return 0;
1581 				}
1582 				n2s(data, dsize);
1583 				size -= 2;
1584 				if (dsize != size) {
1585 					*al = SSL_AD_DECODE_ERROR;
1586 					return 0;
1587 				}
1588 				sdata = data;
1589 				if (dsize > 0) {
1590 					if (s->tlsext_ocsp_exts) {
1591 						sk_X509_EXTENSION_pop_free(s->tlsext_ocsp_exts,
1592 						    X509_EXTENSION_free);
1593 					}
1594 
1595 					s->tlsext_ocsp_exts =
1596 					    d2i_X509_EXTENSIONS(NULL,
1597 					    &sdata, dsize);
1598 					if (!s->tlsext_ocsp_exts ||
1599 						    (data + dsize != sdata)) {
1600 						*al = SSL_AD_DECODE_ERROR;
1601 						return 0;
1602 					}
1603 				}
1604 			} else {
1605 				/* We don't know what to do with any other type
1606  			 	* so ignore it.
1607  			 	*/
1608 				s->tlsext_status_type = -1;
1609 			}
1610 		}
1611 		else if (type == TLSEXT_TYPE_next_proto_neg &&
1612 		    s->s3->tmp.finish_md_len == 0 &&
1613 		    s->s3->alpn_selected == NULL) {
1614 			/* We shouldn't accept this extension on a
1615 			 * renegotiation.
1616 			 *
1617 			 * s->new_session will be set on renegotiation, but we
1618 			 * probably shouldn't rely that it couldn't be set on
1619 			 * the initial renegotation too in certain cases (when
1620 			 * there's some other reason to disallow resuming an
1621 			 * earlier session -- the current code won't be doing
1622 			 * anything like that, but this might change).
1623 
1624 			 * A valid sign that there's been a previous handshake
1625 			 * in this connection is if s->s3->tmp.finish_md_len >
1626 			 * 0.  (We are talking about a check that will happen
1627 			 * in the Hello protocol round, well before a new
1628 			 * Finished message could have been computed.) */
1629 			s->s3->next_proto_neg_seen = 1;
1630 		}
1631 		else if (type ==
1632 		    TLSEXT_TYPE_application_layer_protocol_negotiation &&
1633 		    s->ctx->alpn_select_cb != NULL &&
1634 		    s->s3->tmp.finish_md_len == 0) {
1635 			if (tls1_alpn_handle_client_hello(s, data,
1636 			    size, al) != 1)
1637 				return (0);
1638 			/* ALPN takes precedence over NPN. */
1639 			s->s3->next_proto_neg_seen = 0;
1640 		}
1641 
1642 		/* session ticket processed earlier */
1643 #ifndef OPENSSL_NO_SRTP
1644 		else if (SSL_IS_DTLS(s) && type == TLSEXT_TYPE_use_srtp) {
1645 			if (ssl_parse_clienthello_use_srtp_ext(s, data, size, al))
1646 				return 0;
1647 		}
1648 #endif
1649 
1650 		data += size;
1651 	}
1652 
1653 	*p = data;
1654 
1655 ri_check:
1656 
1657 	/* Need RI if renegotiating */
1658 
1659 	if (!renegotiate_seen && s->renegotiate) {
1660 		*al = SSL_AD_HANDSHAKE_FAILURE;
1661 		SSLerr(SSL_F_SSL_PARSE_CLIENTHELLO_TLSEXT,
1662 		    SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED);
1663 		return 0;
1664 	}
1665 
1666 	return 1;
1667 }
1668 
1669 /* ssl_next_proto_validate validates a Next Protocol Negotiation block. No
1670  * elements of zero length are allowed and the set of elements must exactly fill
1671  * the length of the block. */
1672 static char
1673 ssl_next_proto_validate(unsigned char *d, unsigned len)
1674 {
1675 	unsigned int off = 0;
1676 
1677 	while (off < len) {
1678 		if (d[off] == 0)
1679 			return 0;
1680 		off += d[off];
1681 		off++;
1682 	}
1683 
1684 	return off == len;
1685 }
1686 
1687 int
1688 ssl_parse_serverhello_tlsext(SSL *s, unsigned char **p, unsigned char *d,
1689     int n, int *al)
1690 {
1691 	unsigned short length;
1692 	unsigned short type;
1693 	unsigned short size;
1694 	unsigned char *data = *p;
1695 	int tlsext_servername = 0;
1696 	int renegotiate_seen = 0;
1697 
1698 	s->s3->next_proto_neg_seen = 0;
1699 	free(s->s3->alpn_selected);
1700 	s->s3->alpn_selected = NULL;
1701 
1702 	if (data >= (d + n - 2))
1703 		goto ri_check;
1704 
1705 	n2s(data, length);
1706 	if (data + length != d + n) {
1707 		*al = SSL_AD_DECODE_ERROR;
1708 		return 0;
1709 	}
1710 
1711 	while (data <= (d + n - 4)) {
1712 		n2s(data, type);
1713 		n2s(data, size);
1714 
1715 		if (data + size > (d + n))
1716 			goto ri_check;
1717 
1718 		if (s->tlsext_debug_cb)
1719 			s->tlsext_debug_cb(s, 1, type, data, size,
1720 			    s->tlsext_debug_arg);
1721 
1722 		if (type == TLSEXT_TYPE_server_name) {
1723 			if (s->tlsext_hostname == NULL || size > 0) {
1724 				*al = TLS1_AD_UNRECOGNIZED_NAME;
1725 				return 0;
1726 			}
1727 			tlsext_servername = 1;
1728 
1729 		}
1730 		else if (type == TLSEXT_TYPE_ec_point_formats &&
1731 		    s->version != DTLS1_VERSION) {
1732 			unsigned char *sdata = data;
1733 			size_t formatslen;
1734 			uint8_t *formats;
1735 
1736 			if (size < 1) {
1737 				*al = TLS1_AD_DECODE_ERROR;
1738 				return 0;
1739 			}
1740 			formatslen = *(sdata++);
1741 			if (formatslen != size - 1) {
1742 				*al = TLS1_AD_DECODE_ERROR;
1743 				return 0;
1744 			}
1745 
1746 			if (!s->hit) {
1747 				free(s->session->tlsext_ecpointformatlist);
1748 				s->session->tlsext_ecpointformatlist = NULL;
1749 				s->session->tlsext_ecpointformatlist_length = 0;
1750 
1751 				if ((formats = reallocarray(NULL, formatslen,
1752 				    sizeof(uint8_t))) == NULL) {
1753 					*al = TLS1_AD_INTERNAL_ERROR;
1754 					return 0;
1755 				}
1756 				memcpy(formats, sdata, formatslen);
1757 				s->session->tlsext_ecpointformatlist = formats;
1758 				s->session->tlsext_ecpointformatlist_length =
1759 				    formatslen;
1760 			}
1761 		}
1762 		else if (type == TLSEXT_TYPE_session_ticket) {
1763 			if (s->tls_session_ticket_ext_cb &&
1764 			    !s->tls_session_ticket_ext_cb(s, data, size, s->tls_session_ticket_ext_cb_arg)) {
1765 				*al = TLS1_AD_INTERNAL_ERROR;
1766 				return 0;
1767 			}
1768 			if ((SSL_get_options(s) & SSL_OP_NO_TICKET) || (size > 0)) {
1769 				*al = TLS1_AD_UNSUPPORTED_EXTENSION;
1770 				return 0;
1771 			}
1772 			s->tlsext_ticket_expected = 1;
1773 		}
1774 		else if (type == TLSEXT_TYPE_status_request &&
1775 		    s->version != DTLS1_VERSION) {
1776 			/* MUST be empty and only sent if we've requested
1777 			 * a status request message.
1778 			 */
1779 			if ((s->tlsext_status_type == -1) || (size > 0)) {
1780 				*al = TLS1_AD_UNSUPPORTED_EXTENSION;
1781 				return 0;
1782 			}
1783 			/* Set flag to expect CertificateStatus message */
1784 			s->tlsext_status_expected = 1;
1785 		}
1786 		else if (type == TLSEXT_TYPE_next_proto_neg &&
1787 		    s->s3->tmp.finish_md_len == 0) {
1788 			unsigned char *selected;
1789 			unsigned char selected_len;
1790 
1791 			/* We must have requested it. */
1792 			if (s->ctx->next_proto_select_cb == NULL) {
1793 				*al = TLS1_AD_UNSUPPORTED_EXTENSION;
1794 				return 0;
1795 			}
1796 			/* The data must be valid */
1797 			if (!ssl_next_proto_validate(data, size)) {
1798 				*al = TLS1_AD_DECODE_ERROR;
1799 				return 0;
1800 			}
1801 			if (s->ctx->next_proto_select_cb(s, &selected, &selected_len, data, size, s->ctx->next_proto_select_cb_arg) != SSL_TLSEXT_ERR_OK) {
1802 				*al = TLS1_AD_INTERNAL_ERROR;
1803 				return 0;
1804 			}
1805 			s->next_proto_negotiated = malloc(selected_len);
1806 			if (!s->next_proto_negotiated) {
1807 				*al = TLS1_AD_INTERNAL_ERROR;
1808 				return 0;
1809 			}
1810 			memcpy(s->next_proto_negotiated, selected, selected_len);
1811 			s->next_proto_negotiated_len = selected_len;
1812 			s->s3->next_proto_neg_seen = 1;
1813 		}
1814 		else if (type ==
1815 		    TLSEXT_TYPE_application_layer_protocol_negotiation) {
1816 			unsigned int len;
1817 
1818 			/* We must have requested it. */
1819 			if (s->alpn_client_proto_list == NULL) {
1820 				*al = TLS1_AD_UNSUPPORTED_EXTENSION;
1821 				return 0;
1822 			}
1823 			if (size < 4) {
1824 				*al = TLS1_AD_DECODE_ERROR;
1825 				return (0);
1826 			}
1827 
1828 			/* The extension data consists of:
1829 			 *   uint16 list_length
1830 			 *   uint8 proto_length;
1831 			 *   uint8 proto[proto_length]; */
1832 			len = ((unsigned int)data[0]) << 8 |
1833 			    ((unsigned int)data[1]);
1834 			if (len != (unsigned int)size - 2) {
1835 				*al = TLS1_AD_DECODE_ERROR;
1836 				return (0);
1837 			}
1838 			len = data[2];
1839 			if (len != (unsigned int)size - 3) {
1840 				*al = TLS1_AD_DECODE_ERROR;
1841 				return (0);
1842 			}
1843 			free(s->s3->alpn_selected);
1844 			s->s3->alpn_selected = malloc(len);
1845 			if (s->s3->alpn_selected == NULL) {
1846 				*al = TLS1_AD_INTERNAL_ERROR;
1847 				return (0);
1848 			}
1849 			memcpy(s->s3->alpn_selected, data + 3, len);
1850 			s->s3->alpn_selected_len = len;
1851 
1852 		} else if (type == TLSEXT_TYPE_renegotiate) {
1853 			if (!ssl_parse_serverhello_renegotiate_ext(s, data, size, al))
1854 				return 0;
1855 			renegotiate_seen = 1;
1856 		}
1857 #ifndef OPENSSL_NO_SRTP
1858 		else if (SSL_IS_DTLS(s) && type == TLSEXT_TYPE_use_srtp) {
1859 			if (ssl_parse_serverhello_use_srtp_ext(s, data,
1860 			    size, al))
1861 				return 0;
1862 		}
1863 #endif
1864 
1865 		data += size;
1866 
1867 	}
1868 
1869 	if (data != d + n) {
1870 		*al = SSL_AD_DECODE_ERROR;
1871 		return 0;
1872 	}
1873 
1874 	if (!s->hit && tlsext_servername == 1) {
1875 		if (s->tlsext_hostname) {
1876 			if (s->session->tlsext_hostname == NULL) {
1877 				s->session->tlsext_hostname =
1878 				    strdup(s->tlsext_hostname);
1879 
1880 				if (!s->session->tlsext_hostname) {
1881 					*al = SSL_AD_UNRECOGNIZED_NAME;
1882 					return 0;
1883 				}
1884 			} else {
1885 				*al = SSL_AD_DECODE_ERROR;
1886 				return 0;
1887 			}
1888 		}
1889 	}
1890 
1891 	*p = data;
1892 
1893 ri_check:
1894 
1895 	/* Determine if we need to see RI. Strictly speaking if we want to
1896 	 * avoid an attack we should *always* see RI even on initial server
1897 	 * hello because the client doesn't see any renegotiation during an
1898 	 * attack. However this would mean we could not connect to any server
1899 	 * which doesn't support RI so for the immediate future tolerate RI
1900 	 * absence on initial connect only.
1901 	 */
1902 	if (!renegotiate_seen && !(s->options & SSL_OP_LEGACY_SERVER_CONNECT)) {
1903 		*al = SSL_AD_HANDSHAKE_FAILURE;
1904 		SSLerr(SSL_F_SSL_PARSE_SERVERHELLO_TLSEXT,
1905 		    SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED);
1906 		return 0;
1907 	}
1908 
1909 	return 1;
1910 }
1911 
1912 int
1913 ssl_prepare_clienthello_tlsext(SSL *s)
1914 {
1915 	return 1;
1916 }
1917 
1918 int
1919 ssl_prepare_serverhello_tlsext(SSL *s)
1920 {
1921 	return 1;
1922 }
1923 
1924 int
1925 ssl_check_clienthello_tlsext_early(SSL *s)
1926 {
1927 	int ret = SSL_TLSEXT_ERR_NOACK;
1928 	int al = SSL_AD_UNRECOGNIZED_NAME;
1929 
1930 	/* The handling of the ECPointFormats extension is done elsewhere, namely in
1931 	 * ssl3_choose_cipher in s3_lib.c.
1932 	 */
1933 	/* The handling of the EllipticCurves extension is done elsewhere, namely in
1934 	 * ssl3_choose_cipher in s3_lib.c.
1935 	 */
1936 
1937 	if (s->ctx != NULL && s->ctx->tlsext_servername_callback != 0)
1938 		ret = s->ctx->tlsext_servername_callback(s, &al, s->ctx->tlsext_servername_arg);
1939 	else if (s->initial_ctx != NULL && s->initial_ctx->tlsext_servername_callback != 0)
1940 		ret = s->initial_ctx->tlsext_servername_callback(s, &al, s->initial_ctx->tlsext_servername_arg);
1941 
1942 	switch (ret) {
1943 	case SSL_TLSEXT_ERR_ALERT_FATAL:
1944 		ssl3_send_alert(s, SSL3_AL_FATAL, al);
1945 		return -1;
1946 	case SSL_TLSEXT_ERR_ALERT_WARNING:
1947 		ssl3_send_alert(s, SSL3_AL_WARNING, al);
1948 		return 1;
1949 	case SSL_TLSEXT_ERR_NOACK:
1950 		s->servername_done = 0;
1951 	default:
1952 		return 1;
1953 	}
1954 }
1955 
1956 int
1957 ssl_check_clienthello_tlsext_late(SSL *s)
1958 {
1959 	int ret = SSL_TLSEXT_ERR_OK;
1960 	int al = 0;	/* XXX gcc3 */
1961 
1962 	/* If status request then ask callback what to do.
1963  	 * Note: this must be called after servername callbacks in case
1964  	 * the certificate has changed, and must be called after the cipher
1965 	 * has been chosen because this may influence which certificate is sent
1966  	 */
1967 	if ((s->tlsext_status_type != -1) &&
1968 	    s->ctx && s->ctx->tlsext_status_cb) {
1969 		int r;
1970 		CERT_PKEY *certpkey;
1971 		certpkey = ssl_get_server_send_pkey(s);
1972 		/* If no certificate can't return certificate status */
1973 		if (certpkey == NULL) {
1974 			s->tlsext_status_expected = 0;
1975 			return 1;
1976 		}
1977 		/* Set current certificate to one we will use so
1978 		 * SSL_get_certificate et al can pick it up.
1979 		 */
1980 		s->cert->key = certpkey;
1981 		r = s->ctx->tlsext_status_cb(s, s->ctx->tlsext_status_arg);
1982 		switch (r) {
1983 			/* We don't want to send a status request response */
1984 		case SSL_TLSEXT_ERR_NOACK:
1985 			s->tlsext_status_expected = 0;
1986 			break;
1987 			/* status request response should be sent */
1988 		case SSL_TLSEXT_ERR_OK:
1989 			if (s->tlsext_ocsp_resp)
1990 				s->tlsext_status_expected = 1;
1991 			else
1992 				s->tlsext_status_expected = 0;
1993 			break;
1994 			/* something bad happened */
1995 		case SSL_TLSEXT_ERR_ALERT_FATAL:
1996 			ret = SSL_TLSEXT_ERR_ALERT_FATAL;
1997 			al = SSL_AD_INTERNAL_ERROR;
1998 			goto err;
1999 		}
2000 	} else
2001 		s->tlsext_status_expected = 0;
2002 
2003 err:
2004 	switch (ret) {
2005 	case SSL_TLSEXT_ERR_ALERT_FATAL:
2006 		ssl3_send_alert(s, SSL3_AL_FATAL, al);
2007 		return -1;
2008 	case SSL_TLSEXT_ERR_ALERT_WARNING:
2009 		ssl3_send_alert(s, SSL3_AL_WARNING, al);
2010 		return 1;
2011 	default:
2012 		return 1;
2013 	}
2014 }
2015 
2016 int
2017 ssl_check_serverhello_tlsext(SSL *s)
2018 {
2019 	int ret = SSL_TLSEXT_ERR_NOACK;
2020 	int al = SSL_AD_UNRECOGNIZED_NAME;
2021 
2022 	/* If we are client and using an elliptic curve cryptography cipher
2023 	 * suite, then if server returns an EC point formats lists extension
2024 	 * it must contain uncompressed.
2025 	 */
2026 	unsigned long alg_k = s->s3->tmp.new_cipher->algorithm_mkey;
2027 	unsigned long alg_a = s->s3->tmp.new_cipher->algorithm_auth;
2028 	if ((s->tlsext_ecpointformatlist != NULL) &&
2029 	    (s->tlsext_ecpointformatlist_length > 0) &&
2030 	    (s->session->tlsext_ecpointformatlist != NULL) &&
2031 	    (s->session->tlsext_ecpointformatlist_length > 0) &&
2032 	    ((alg_k & (SSL_kECDHE|SSL_kECDHr|SSL_kECDHe)) || (alg_a & SSL_aECDSA))) {
2033 		/* we are using an ECC cipher */
2034 		size_t i;
2035 		unsigned char *list;
2036 		int found_uncompressed = 0;
2037 		list = s->session->tlsext_ecpointformatlist;
2038 		for (i = 0; i < s->session->tlsext_ecpointformatlist_length; i++) {
2039 			if (*(list++) == TLSEXT_ECPOINTFORMAT_uncompressed) {
2040 				found_uncompressed = 1;
2041 				break;
2042 			}
2043 		}
2044 		if (!found_uncompressed) {
2045 			SSLerr(SSL_F_SSL_CHECK_SERVERHELLO_TLSEXT, SSL_R_TLS_INVALID_ECPOINTFORMAT_LIST);
2046 			return -1;
2047 		}
2048 	}
2049 	ret = SSL_TLSEXT_ERR_OK;
2050 
2051 	if (s->ctx != NULL && s->ctx->tlsext_servername_callback != 0)
2052 		ret = s->ctx->tlsext_servername_callback(s, &al, s->ctx->tlsext_servername_arg);
2053 	else if (s->initial_ctx != NULL && s->initial_ctx->tlsext_servername_callback != 0)
2054 		ret = s->initial_ctx->tlsext_servername_callback(s, &al, s->initial_ctx->tlsext_servername_arg);
2055 
2056 	/* If we've requested certificate status and we wont get one
2057  	 * tell the callback
2058  	 */
2059 	if ((s->tlsext_status_type != -1) && !(s->tlsext_status_expected) &&
2060 	    s->ctx && s->ctx->tlsext_status_cb) {
2061 		int r;
2062 		/* Set resp to NULL, resplen to -1 so callback knows
2063  		 * there is no response.
2064  		 */
2065 		free(s->tlsext_ocsp_resp);
2066 		s->tlsext_ocsp_resp = NULL;
2067 		s->tlsext_ocsp_resplen = -1;
2068 		r = s->ctx->tlsext_status_cb(s, s->ctx->tlsext_status_arg);
2069 		if (r == 0) {
2070 			al = SSL_AD_BAD_CERTIFICATE_STATUS_RESPONSE;
2071 			ret = SSL_TLSEXT_ERR_ALERT_FATAL;
2072 		}
2073 		if (r < 0) {
2074 			al = SSL_AD_INTERNAL_ERROR;
2075 			ret = SSL_TLSEXT_ERR_ALERT_FATAL;
2076 		}
2077 	}
2078 
2079 	switch (ret) {
2080 	case SSL_TLSEXT_ERR_ALERT_FATAL:
2081 		ssl3_send_alert(s, SSL3_AL_FATAL, al);
2082 
2083 		return -1;
2084 	case SSL_TLSEXT_ERR_ALERT_WARNING:
2085 		ssl3_send_alert(s, SSL3_AL_WARNING, al);
2086 
2087 		return 1;
2088 	case SSL_TLSEXT_ERR_NOACK:
2089 		s->servername_done = 0;
2090 	default:
2091 		return 1;
2092 	}
2093 }
2094 
2095 /* Since the server cache lookup is done early on in the processing of the
2096  * ClientHello, and other operations depend on the result, we need to handle
2097  * any TLS session ticket extension at the same time.
2098  *
2099  *   session_id: points at the session ID in the ClientHello. This code will
2100  *       read past the end of this in order to parse out the session ticket
2101  *       extension, if any.
2102  *   len: the length of the session ID.
2103  *   limit: a pointer to the first byte after the ClientHello.
2104  *   ret: (output) on return, if a ticket was decrypted, then this is set to
2105  *       point to the resulting session.
2106  *
2107  * If s->tls_session_secret_cb is set then we are expecting a pre-shared key
2108  * ciphersuite, in which case we have no use for session tickets and one will
2109  * never be decrypted, nor will s->tlsext_ticket_expected be set to 1.
2110  *
2111  * Returns:
2112  *   -1: fatal error, either from parsing or decrypting the ticket.
2113  *    0: no ticket was found (or was ignored, based on settings).
2114  *    1: a zero length extension was found, indicating that the client supports
2115  *       session tickets but doesn't currently have one to offer.
2116  *    2: either s->tls_session_secret_cb was set, or a ticket was offered but
2117  *       couldn't be decrypted because of a non-fatal error.
2118  *    3: a ticket was successfully decrypted and *ret was set.
2119  *
2120  * Side effects:
2121  *   Sets s->tlsext_ticket_expected to 1 if the server will have to issue
2122  *   a new session ticket to the client because the client indicated support
2123  *   (and s->tls_session_secret_cb is NULL) but the client either doesn't have
2124  *   a session ticket or we couldn't use the one it gave us, or if
2125  *   s->ctx->tlsext_ticket_key_cb asked to renew the client's ticket.
2126  *   Otherwise, s->tlsext_ticket_expected is set to 0.
2127  */
2128 int
2129 tls1_process_ticket(SSL *s, unsigned char *session_id, int len,
2130     const unsigned char *limit, SSL_SESSION **ret)
2131 {
2132 	/* Point after session ID in client hello */
2133 	const unsigned char *p = session_id + len;
2134 	unsigned short i;
2135 
2136 	*ret = NULL;
2137 	s->tlsext_ticket_expected = 0;
2138 
2139 	/* If tickets disabled behave as if no ticket present
2140 	 * to permit stateful resumption.
2141 	 */
2142 	if (SSL_get_options(s) & SSL_OP_NO_TICKET)
2143 		return 0;
2144 	if ((s->version <= SSL3_VERSION) || !limit)
2145 		return 0;
2146 	if (p >= limit)
2147 		return -1;
2148 	/* Skip past DTLS cookie */
2149 	if (SSL_IS_DTLS(s)) {
2150 		i = *(p++);
2151 		p += i;
2152 		if (p >= limit)
2153 			return -1;
2154 	}
2155 	/* Skip past cipher list */
2156 	n2s(p, i);
2157 	p += i;
2158 	if (p >= limit)
2159 		return -1;
2160 	/* Skip past compression algorithm list */
2161 	i = *(p++);
2162 	p += i;
2163 	if (p > limit)
2164 		return -1;
2165 	/* Now at start of extensions */
2166 	if ((p + 2) >= limit)
2167 		return 0;
2168 	n2s(p, i);
2169 	while ((p + 4) <= limit) {
2170 		unsigned short type, size;
2171 		n2s(p, type);
2172 		n2s(p, size);
2173 		if (p + size > limit)
2174 			return 0;
2175 		if (type == TLSEXT_TYPE_session_ticket) {
2176 			int r;
2177 			if (size == 0) {
2178 				/* The client will accept a ticket but doesn't
2179 				 * currently have one. */
2180 				s->tlsext_ticket_expected = 1;
2181 				return 1;
2182 			}
2183 			if (s->tls_session_secret_cb) {
2184 				/* Indicate that the ticket couldn't be
2185 				 * decrypted rather than generating the session
2186 				 * from ticket now, trigger abbreviated
2187 				 * handshake based on external mechanism to
2188 				 * calculate the master secret later. */
2189 				return 2;
2190 			}
2191 			r = tls_decrypt_ticket(s, p, size, session_id, len, ret);
2192 			switch (r) {
2193 			case 2: /* ticket couldn't be decrypted */
2194 				s->tlsext_ticket_expected = 1;
2195 				return 2;
2196 			case 3: /* ticket was decrypted */
2197 				return r;
2198 			case 4: /* ticket decrypted but need to renew */
2199 				s->tlsext_ticket_expected = 1;
2200 				return 3;
2201 			default: /* fatal error */
2202 				return -1;
2203 			}
2204 		}
2205 		p += size;
2206 	}
2207 	return 0;
2208 }
2209 
2210 /* tls_decrypt_ticket attempts to decrypt a session ticket.
2211  *
2212  *   etick: points to the body of the session ticket extension.
2213  *   eticklen: the length of the session tickets extenion.
2214  *   sess_id: points at the session ID.
2215  *   sesslen: the length of the session ID.
2216  *   psess: (output) on return, if a ticket was decrypted, then this is set to
2217  *       point to the resulting session.
2218  *
2219  * Returns:
2220  *   -1: fatal error, either from parsing or decrypting the ticket.
2221  *    2: the ticket couldn't be decrypted.
2222  *    3: a ticket was successfully decrypted and *psess was set.
2223  *    4: same as 3, but the ticket needs to be renewed.
2224  */
2225 static int
2226 tls_decrypt_ticket(SSL *s, const unsigned char *etick, int eticklen,
2227     const unsigned char *sess_id, int sesslen, SSL_SESSION **psess)
2228 {
2229 	SSL_SESSION *sess;
2230 	unsigned char *sdec;
2231 	const unsigned char *p;
2232 	int slen, mlen, renew_ticket = 0;
2233 	unsigned char tick_hmac[EVP_MAX_MD_SIZE];
2234 	HMAC_CTX hctx;
2235 	EVP_CIPHER_CTX ctx;
2236 	SSL_CTX *tctx = s->initial_ctx;
2237 	/* Need at least keyname + iv + some encrypted data */
2238 	if (eticklen < 48)
2239 		return 2;
2240 	/* Initialize session ticket encryption and HMAC contexts */
2241 	HMAC_CTX_init(&hctx);
2242 	EVP_CIPHER_CTX_init(&ctx);
2243 	if (tctx->tlsext_ticket_key_cb) {
2244 		unsigned char *nctick = (unsigned char *)etick;
2245 		int rv = tctx->tlsext_ticket_key_cb(s, nctick, nctick + 16,
2246 		    &ctx, &hctx, 0);
2247 		if (rv < 0) {
2248 			EVP_CIPHER_CTX_cleanup(&ctx);
2249 			return -1;
2250 		}
2251 		if (rv == 0) {
2252 			EVP_CIPHER_CTX_cleanup(&ctx);
2253 			return 2;
2254 		}
2255 		if (rv == 2)
2256 			renew_ticket = 1;
2257 	} else {
2258 		/* Check key name matches */
2259 		if (timingsafe_memcmp(etick, tctx->tlsext_tick_key_name, 16))
2260 			return 2;
2261 		HMAC_Init_ex(&hctx, tctx->tlsext_tick_hmac_key, 16,
2262 		    tlsext_tick_md(), NULL);
2263 		EVP_DecryptInit_ex(&ctx, EVP_aes_128_cbc(), NULL,
2264 		    tctx->tlsext_tick_aes_key, etick + 16);
2265 	}
2266 	/* Attempt to process session ticket, first conduct sanity and
2267 	 * integrity checks on ticket.
2268 	 */
2269 	mlen = HMAC_size(&hctx);
2270 	if (mlen < 0) {
2271 		EVP_CIPHER_CTX_cleanup(&ctx);
2272 		return -1;
2273 	}
2274 	eticklen -= mlen;
2275 	/* Check HMAC of encrypted ticket */
2276 	HMAC_Update(&hctx, etick, eticklen);
2277 	HMAC_Final(&hctx, tick_hmac, NULL);
2278 	HMAC_CTX_cleanup(&hctx);
2279 	if (timingsafe_memcmp(tick_hmac, etick + eticklen, mlen)) {
2280 		EVP_CIPHER_CTX_cleanup(&ctx);
2281 		return 2;
2282 	}
2283 	/* Attempt to decrypt session data */
2284 	/* Move p after IV to start of encrypted ticket, update length */
2285 	p = etick + 16 + EVP_CIPHER_CTX_iv_length(&ctx);
2286 	eticklen -= 16 + EVP_CIPHER_CTX_iv_length(&ctx);
2287 	sdec = malloc(eticklen);
2288 	if (!sdec) {
2289 		EVP_CIPHER_CTX_cleanup(&ctx);
2290 		return -1;
2291 	}
2292 	EVP_DecryptUpdate(&ctx, sdec, &slen, p, eticklen);
2293 	if (EVP_DecryptFinal(&ctx, sdec + slen, &mlen) <= 0) {
2294 		free(sdec);
2295 		EVP_CIPHER_CTX_cleanup(&ctx);
2296 		return 2;
2297 	}
2298 	slen += mlen;
2299 	EVP_CIPHER_CTX_cleanup(&ctx);
2300 	p = sdec;
2301 
2302 	sess = d2i_SSL_SESSION(NULL, &p, slen);
2303 	free(sdec);
2304 	if (sess) {
2305 		/* The session ID, if non-empty, is used by some clients to
2306 		 * detect that the ticket has been accepted. So we copy it to
2307 		 * the session structure. If it is empty set length to zero
2308 		 * as required by standard.
2309 		 */
2310 		if (sesslen)
2311 			memcpy(sess->session_id, sess_id, sesslen);
2312 		sess->session_id_length = sesslen;
2313 		*psess = sess;
2314 		if (renew_ticket)
2315 			return 4;
2316 		else
2317 			return 3;
2318 	}
2319 	ERR_clear_error();
2320 	/* For session parse failure, indicate that we need to send a new
2321 	 * ticket. */
2322 	return 2;
2323 }
2324 
2325 /* Tables to translate from NIDs to TLS v1.2 ids */
2326 
2327 typedef struct {
2328 	int nid;
2329 	int id;
2330 } tls12_lookup;
2331 
2332 static tls12_lookup tls12_md[] = {
2333 	{NID_md5, TLSEXT_hash_md5},
2334 	{NID_sha1, TLSEXT_hash_sha1},
2335 	{NID_sha224, TLSEXT_hash_sha224},
2336 	{NID_sha256, TLSEXT_hash_sha256},
2337 	{NID_sha384, TLSEXT_hash_sha384},
2338 	{NID_sha512, TLSEXT_hash_sha512},
2339 	{NID_id_GostR3411_94, TLSEXT_hash_gost94},
2340 	{NID_id_tc26_gost3411_2012_256, TLSEXT_hash_streebog_256},
2341 	{NID_id_tc26_gost3411_2012_512, TLSEXT_hash_streebog_512}
2342 };
2343 
2344 static tls12_lookup tls12_sig[] = {
2345 	{EVP_PKEY_RSA, TLSEXT_signature_rsa},
2346 	{EVP_PKEY_DSA, TLSEXT_signature_dsa},
2347 	{EVP_PKEY_EC, TLSEXT_signature_ecdsa},
2348 	{EVP_PKEY_GOSTR01, TLSEXT_signature_gostr01},
2349 };
2350 
2351 static int
2352 tls12_find_id(int nid, tls12_lookup *table, size_t tlen)
2353 {
2354 	size_t i;
2355 	for (i = 0; i < tlen; i++) {
2356 		if (table[i].nid == nid)
2357 			return table[i].id;
2358 	}
2359 	return -1;
2360 }
2361 
2362 int
2363 tls12_get_sigandhash(unsigned char *p, const EVP_PKEY *pk, const EVP_MD *md)
2364 {
2365 	int sig_id, md_id;
2366 	if (!md)
2367 		return 0;
2368 	md_id = tls12_find_id(EVP_MD_type(md), tls12_md,
2369 	    sizeof(tls12_md) / sizeof(tls12_lookup));
2370 	if (md_id == -1)
2371 		return 0;
2372 	sig_id = tls12_get_sigid(pk);
2373 	if (sig_id == -1)
2374 		return 0;
2375 	p[0] = (unsigned char)md_id;
2376 	p[1] = (unsigned char)sig_id;
2377 	return 1;
2378 }
2379 
2380 int
2381 tls12_get_sigid(const EVP_PKEY *pk)
2382 {
2383 	return tls12_find_id(pk->type, tls12_sig,
2384 	    sizeof(tls12_sig) / sizeof(tls12_lookup));
2385 }
2386 
2387 const EVP_MD *
2388 tls12_get_hash(unsigned char hash_alg)
2389 {
2390 	switch (hash_alg) {
2391 	case TLSEXT_hash_sha1:
2392 		return EVP_sha1();
2393 	case TLSEXT_hash_sha224:
2394 		return EVP_sha224();
2395 	case TLSEXT_hash_sha256:
2396 		return EVP_sha256();
2397 	case TLSEXT_hash_sha384:
2398 		return EVP_sha384();
2399 	case TLSEXT_hash_sha512:
2400 		return EVP_sha512();
2401 #ifndef OPENSSL_NO_GOST
2402 	case TLSEXT_hash_gost94:
2403 		return EVP_gostr341194();
2404 	case TLSEXT_hash_streebog_256:
2405 		return EVP_streebog256();
2406 	case TLSEXT_hash_streebog_512:
2407 		return EVP_streebog512();
2408 #endif
2409 	default:
2410 		return NULL;
2411 	}
2412 }
2413 
2414 /* Set preferred digest for each key type */
2415 
2416 int
2417 tls1_process_sigalgs(SSL *s, const unsigned char *data, int dsize)
2418 {
2419 	int i, idx;
2420 	const EVP_MD *md;
2421 	CERT *c = s->cert;
2422 
2423 	/* Extension ignored for inappropriate versions */
2424 	if (!SSL_USE_SIGALGS(s))
2425 		return 1;
2426 
2427 	/* Should never happen */
2428 	if (!c)
2429 		return 0;
2430 
2431 	c->pkeys[SSL_PKEY_DSA_SIGN].digest = NULL;
2432 	c->pkeys[SSL_PKEY_RSA_SIGN].digest = NULL;
2433 	c->pkeys[SSL_PKEY_RSA_ENC].digest = NULL;
2434 	c->pkeys[SSL_PKEY_ECC].digest = NULL;
2435 	c->pkeys[SSL_PKEY_GOST01].digest = NULL;
2436 
2437 	for (i = 0; i < dsize; i += 2) {
2438 		unsigned char hash_alg = data[i], sig_alg = data[i + 1];
2439 
2440 		switch (sig_alg) {
2441 		case TLSEXT_signature_rsa:
2442 			idx = SSL_PKEY_RSA_SIGN;
2443 			break;
2444 		case TLSEXT_signature_dsa:
2445 			idx = SSL_PKEY_DSA_SIGN;
2446 			break;
2447 		case TLSEXT_signature_ecdsa:
2448 			idx = SSL_PKEY_ECC;
2449 			break;
2450 		case TLSEXT_signature_gostr01:
2451 		case TLSEXT_signature_gostr12_256:
2452 		case TLSEXT_signature_gostr12_512:
2453 			idx = SSL_PKEY_GOST01;
2454 			break;
2455 		default:
2456 			continue;
2457 		}
2458 
2459 		if (c->pkeys[idx].digest == NULL) {
2460 			md = tls12_get_hash(hash_alg);
2461 			if (md) {
2462 				c->pkeys[idx].digest = md;
2463 				if (idx == SSL_PKEY_RSA_SIGN)
2464 					c->pkeys[SSL_PKEY_RSA_ENC].digest = md;
2465 			}
2466 		}
2467 
2468 	}
2469 
2470 	/* Set any remaining keys to default values. NOTE: if alg is not
2471 	 * supported it stays as NULL.
2472 	 */
2473 	if (!c->pkeys[SSL_PKEY_DSA_SIGN].digest)
2474 		c->pkeys[SSL_PKEY_DSA_SIGN].digest = EVP_sha1();
2475 	if (!c->pkeys[SSL_PKEY_RSA_SIGN].digest) {
2476 		c->pkeys[SSL_PKEY_RSA_SIGN].digest = EVP_sha1();
2477 		c->pkeys[SSL_PKEY_RSA_ENC].digest = EVP_sha1();
2478 	}
2479 	if (!c->pkeys[SSL_PKEY_ECC].digest)
2480 		c->pkeys[SSL_PKEY_ECC].digest = EVP_sha1();
2481 #ifndef OPENSSL_NO_GOST
2482 	if (!c->pkeys[SSL_PKEY_GOST01].digest)
2483 		c->pkeys[SSL_PKEY_GOST01].digest = EVP_gostr341194();
2484 #endif
2485 	return 1;
2486 }
2487