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