Home | History | Annotate | Line # | Download | only in ssl
t1_lib.c revision 1.5.4.3
      1 /* ssl/t1_lib.c */
      2 /* Copyright (C) 1995-1998 Eric Young (eay (at) cryptsoft.com)
      3  * All rights reserved.
      4  *
      5  * This package is an SSL implementation written
      6  * by Eric Young (eay (at) 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 (at) 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 (at) 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 (at) 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 (at) 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 (at) cryptsoft.com).  This product includes software written by Tim
    108  * Hudson (tjh (at) 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 
    120 const char tls1_version_str[]="TLSv1" OPENSSL_VERSION_PTEXT;
    121 
    122 #ifndef OPENSSL_NO_TLSEXT
    123 static 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 
    128 SSL3_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 
    143 long 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 
    150 int tls1_new(SSL *s)
    151 	{
    152 	if (!ssl3_new(s)) return(0);
    153 	s->method->ssl_clear(s);
    154 	return(1);
    155 	}
    156 
    157 void 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 
    168 void tls1_clear(SSL *s)
    169 	{
    170 	ssl3_clear(s);
    171 	s->version = s->method->version;
    172 	}
    173 
    174 #ifndef OPENSSL_NO_EC
    175 
    176 static 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 
    205 static 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 
    234 int 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 
    243 int 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 
    333 static 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 
    347 int 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 
    355 unsigned char *ssl_add_clienthello_tlsext(SSL *s, unsigned char *p, unsigned char *limit)
    356 	{
    357 	int extdatalen=0;
    358 	unsigned char *ret = p;
    359 
    360 	/* don't add extensions for SSLv3 unless doing secure renegotiation */
    361 	if (s->client_version == SSL3_VERSION
    362 					&& !s->s3->send_connection_binding)
    363 		return p;
    364 
    365 	ret+=2;
    366 
    367 	if (ret>=limit) return NULL; /* this really never occurs, but ... */
    368 
    369  	if (s->tlsext_hostname != NULL)
    370 		{
    371 		/* Add TLS extension servername to the Client Hello message */
    372 		unsigned long size_str;
    373 		long lenmax;
    374 
    375 		/* check for enough space.
    376 		   4 for the servername type and entension length
    377 		   2 for servernamelist length
    378 		   1 for the hostname type
    379 		   2 for hostname length
    380 		   + hostname length
    381 		*/
    382 
    383 		if ((lenmax = limit - ret - 9) < 0
    384 		    || (size_str = strlen(s->tlsext_hostname)) > (unsigned long)lenmax)
    385 			return NULL;
    386 
    387 		/* extension type and length */
    388 		s2n(TLSEXT_TYPE_server_name,ret);
    389 		s2n(size_str+5,ret);
    390 
    391 		/* length of servername list */
    392 		s2n(size_str+3,ret);
    393 
    394 		/* hostname type, length and hostname */
    395 		*(ret++) = (unsigned char) TLSEXT_NAMETYPE_host_name;
    396 		s2n(size_str,ret);
    397 		memcpy(ret, s->tlsext_hostname, size_str);
    398 		ret+=size_str;
    399 		}
    400 
    401         /* Add RI if renegotiating */
    402         if (s->renegotiate)
    403           {
    404           int el;
    405 
    406           if(!ssl_add_clienthello_renegotiate_ext(s, 0, &el, 0))
    407               {
    408               SSLerr(SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT, ERR_R_INTERNAL_ERROR);
    409               return NULL;
    410               }
    411 
    412           if((limit - p - 4 - el) < 0) return NULL;
    413 
    414           s2n(TLSEXT_TYPE_renegotiate,ret);
    415           s2n(el,ret);
    416 
    417           if(!ssl_add_clienthello_renegotiate_ext(s, ret, &el, el))
    418               {
    419               SSLerr(SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT, ERR_R_INTERNAL_ERROR);
    420               return NULL;
    421               }
    422 
    423           ret += el;
    424         }
    425 
    426 #ifndef OPENSSL_NO_SRP
    427 	/* Add SRP username if there is one */
    428 	if (s->srp_ctx.login != NULL)
    429 		{ /* Add TLS extension SRP username to the Client Hello message */
    430 
    431 		int login_len = strlen(s->srp_ctx.login);
    432 		if (login_len > 255 || login_len == 0)
    433 			{
    434 			SSLerr(SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT, ERR_R_INTERNAL_ERROR);
    435 			return NULL;
    436 			}
    437 
    438 		/* check for enough space.
    439 		   4 for the srp type type and entension length
    440 		   1 for the srp user identity
    441 		   + srp user identity length
    442 		*/
    443 		if ((limit - ret - 5 - login_len) < 0) return NULL;
    444 
    445 		/* fill in the extension */
    446 		s2n(TLSEXT_TYPE_srp,ret);
    447 		s2n(login_len+1,ret);
    448 		(*ret++) = (unsigned char) login_len;
    449 		memcpy(ret, s->srp_ctx.login, login_len);
    450 		ret+=login_len;
    451 		}
    452 #endif
    453 
    454 #ifndef OPENSSL_NO_EC
    455 	if (s->tlsext_ecpointformatlist != NULL &&
    456 	    s->version != DTLS1_VERSION)
    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 	    s->version != DTLS1_VERSION)
    477 		{
    478 		/* Add TLS extension EllipticCurves to the ClientHello message */
    479 		long lenmax;
    480 
    481 		if ((lenmax = limit - ret - 6) < 0) return NULL;
    482 		if (s->tlsext_ellipticcurvelist_length > (unsigned long)lenmax) return NULL;
    483 		if (s->tlsext_ellipticcurvelist_length > 65532)
    484 			{
    485 			SSLerr(SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT, ERR_R_INTERNAL_ERROR);
    486 			return NULL;
    487 			}
    488 
    489 		s2n(TLSEXT_TYPE_elliptic_curves,ret);
    490 		s2n(s->tlsext_ellipticcurvelist_length + 2, ret);
    491 
    492 		/* NB: draft-ietf-tls-ecc-12.txt uses a one-byte prefix for
    493 		 * elliptic_curve_list, but the examples use two bytes.
    494 		 * http://www1.ietf.org/mail-archive/web/tls/current/msg00538.html
    495 		 * resolves this to two bytes.
    496 		 */
    497 		s2n(s->tlsext_ellipticcurvelist_length, ret);
    498 		memcpy(ret, s->tlsext_ellipticcurvelist, s->tlsext_ellipticcurvelist_length);
    499 		ret+=s->tlsext_ellipticcurvelist_length;
    500 		}
    501 #endif /* OPENSSL_NO_EC */
    502 
    503 	if (!(SSL_get_options(s) & SSL_OP_NO_TICKET))
    504 		{
    505 		int ticklen;
    506 		if (!s->new_session && s->session && s->session->tlsext_tick)
    507 			ticklen = s->session->tlsext_ticklen;
    508 		else if (s->session && s->tlsext_session_ticket &&
    509 			 s->tlsext_session_ticket->data)
    510 			{
    511 			ticklen = s->tlsext_session_ticket->length;
    512 			s->session->tlsext_tick = OPENSSL_malloc(ticklen);
    513 			if (!s->session->tlsext_tick)
    514 				return NULL;
    515 			memcpy(s->session->tlsext_tick,
    516 			       s->tlsext_session_ticket->data,
    517 			       ticklen);
    518 			s->session->tlsext_ticklen = ticklen;
    519 			}
    520 		else
    521 			ticklen = 0;
    522 		if (ticklen == 0 && s->tlsext_session_ticket &&
    523 		    s->tlsext_session_ticket->data == NULL)
    524 			goto skip_ext;
    525 		/* Check for enough room 2 for extension type, 2 for len
    526  		 * rest for ticket
    527   		 */
    528 		if ((long)(limit - ret - 4 - ticklen) < 0) return NULL;
    529 		s2n(TLSEXT_TYPE_session_ticket,ret);
    530 		s2n(ticklen,ret);
    531 		if (ticklen)
    532 			{
    533 			memcpy(ret, s->session->tlsext_tick, ticklen);
    534 			ret += ticklen;
    535 			}
    536 		}
    537 		skip_ext:
    538 
    539 	if (TLS1_get_client_version(s) >= TLS1_2_VERSION)
    540 		{
    541 		if ((size_t)(limit - ret) < sizeof(tls12_sigalgs) + 6)
    542 			return NULL;
    543 		s2n(TLSEXT_TYPE_signature_algorithms,ret);
    544 		s2n(sizeof(tls12_sigalgs) + 2, ret);
    545 		s2n(sizeof(tls12_sigalgs), ret);
    546 		memcpy(ret, tls12_sigalgs, sizeof(tls12_sigalgs));
    547 		ret += sizeof(tls12_sigalgs);
    548 		}
    549 
    550 #ifdef TLSEXT_TYPE_opaque_prf_input
    551 	if (s->s3->client_opaque_prf_input != NULL &&
    552 	    s->version != DTLS1_VERSION)
    553 		{
    554 		size_t col = s->s3->client_opaque_prf_input_len;
    555 
    556 		if ((long)(limit - ret - 6 - col < 0))
    557 			return NULL;
    558 		if (col > 0xFFFD) /* can't happen */
    559 			return NULL;
    560 
    561 		s2n(TLSEXT_TYPE_opaque_prf_input, ret);
    562 		s2n(col + 2, ret);
    563 		s2n(col, ret);
    564 		memcpy(ret, s->s3->client_opaque_prf_input, col);
    565 		ret += col;
    566 		}
    567 #endif
    568 
    569 	if (s->tlsext_status_type == TLSEXT_STATUSTYPE_ocsp &&
    570 	    s->version != DTLS1_VERSION)
    571 		{
    572 		int i;
    573 		long extlen, idlen, itmp;
    574 		OCSP_RESPID *id;
    575 
    576 		idlen = 0;
    577 		for (i = 0; i < sk_OCSP_RESPID_num(s->tlsext_ocsp_ids); i++)
    578 			{
    579 			id = sk_OCSP_RESPID_value(s->tlsext_ocsp_ids, i);
    580 			itmp = i2d_OCSP_RESPID(id, NULL);
    581 			if (itmp <= 0)
    582 				return NULL;
    583 			idlen += itmp + 2;
    584 			}
    585 
    586 		if (s->tlsext_ocsp_exts)
    587 			{
    588 			extlen = i2d_X509_EXTENSIONS(s->tlsext_ocsp_exts, NULL);
    589 			if (extlen < 0)
    590 				return NULL;
    591 			}
    592 		else
    593 			extlen = 0;
    594 
    595 		if ((long)(limit - ret - 7 - extlen - idlen) < 0) return NULL;
    596 		s2n(TLSEXT_TYPE_status_request, ret);
    597 		if (extlen + idlen > 0xFFF0)
    598 			return NULL;
    599 		s2n(extlen + idlen + 5, ret);
    600 		*(ret++) = TLSEXT_STATUSTYPE_ocsp;
    601 		s2n(idlen, ret);
    602 		for (i = 0; i < sk_OCSP_RESPID_num(s->tlsext_ocsp_ids); i++)
    603 			{
    604 			/* save position of id len */
    605 			unsigned char *q = ret;
    606 			id = sk_OCSP_RESPID_value(s->tlsext_ocsp_ids, i);
    607 			/* skip over id len */
    608 			ret += 2;
    609 			itmp = i2d_OCSP_RESPID(id, &ret);
    610 			/* write id len */
    611 			s2n(itmp, q);
    612 			}
    613 		s2n(extlen, ret);
    614 		if (extlen > 0)
    615 			i2d_X509_EXTENSIONS(s->tlsext_ocsp_exts, &ret);
    616 		}
    617 
    618 #ifndef OPENSSL_NO_HEARTBEATS
    619 	/* Add Heartbeat extension */
    620 	if ((limit - ret - 4 - 1) < 0)
    621 		return NULL;
    622 	s2n(TLSEXT_TYPE_heartbeat,ret);
    623 	s2n(1,ret);
    624 	/* Set mode:
    625 	 * 1: peer may send requests
    626 	 * 2: peer not allowed to send requests
    627 	 */
    628 	if (s->tlsext_heartbeat & SSL_TLSEXT_HB_DONT_RECV_REQUESTS)
    629 		*(ret++) = SSL_TLSEXT_HB_DONT_SEND_REQUESTS;
    630 	else
    631 		*(ret++) = SSL_TLSEXT_HB_ENABLED;
    632 #endif
    633 
    634 #ifndef OPENSSL_NO_NEXTPROTONEG
    635 	if (s->ctx->next_proto_select_cb && !s->s3->tmp.finish_md_len)
    636 		{
    637 		/* The client advertises an emtpy extension to indicate its
    638 		 * support for Next Protocol Negotiation */
    639 		if (limit - ret - 4 < 0)
    640 			return NULL;
    641 		s2n(TLSEXT_TYPE_next_proto_neg,ret);
    642 		s2n(0,ret);
    643 		}
    644 #endif
    645 
    646 #ifndef OPENSSL_NO_SRTP
    647         if(SSL_get_srtp_profiles(s))
    648                 {
    649                 int el;
    650 
    651                 ssl_add_clienthello_use_srtp_ext(s, 0, &el, 0);
    652 
    653                 if((limit - p - 4 - el) < 0) return NULL;
    654 
    655                 s2n(TLSEXT_TYPE_use_srtp,ret);
    656                 s2n(el,ret);
    657 
    658                 if(ssl_add_clienthello_use_srtp_ext(s, ret, &el, el))
    659 			{
    660 			SSLerr(SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT, ERR_R_INTERNAL_ERROR);
    661 			return NULL;
    662 			}
    663                 ret += el;
    664                 }
    665 #endif
    666 	/* Add padding to workaround bugs in F5 terminators.
    667 	 * See https://tools.ietf.org/html/draft-agl-tls-padding-03
    668 	 *
    669 	 * NB: because this code works out the length of all existing
    670 	 * extensions it MUST always appear last.
    671 	 */
    672 	if (s->options & SSL_OP_TLSEXT_PADDING)
    673 	{
    674 	int hlen = ret - (unsigned char *)s->init_buf->data;
    675 		/* The code in s23_clnt.c to build ClientHello messages
    676 		 * includes the 5-byte record header in the buffer, while
    677 		 * the code in s3_clnt.c does not.
    678 		 */
    679 	if (s->state == SSL23_ST_CW_CLNT_HELLO_A)
    680 		hlen -= 5;
    681 	if (hlen > 0xff && hlen < 0x200)
    682 		{
    683 		hlen = 0x200 - hlen;
    684 		if (hlen >= 4)
    685 			hlen -= 4;
    686 		else
    687 			hlen = 0;
    688 
    689 		s2n(TLSEXT_TYPE_padding, ret);
    690 		s2n(hlen, ret);
    691 		memset(ret, 0, hlen);
    692 		ret += hlen;
    693 		}
    694 	}
    695 
    696 	if ((extdatalen = ret-p-2)== 0)
    697 		return p;
    698 
    699 	s2n(extdatalen,p);
    700 	return ret;
    701 	}
    702 
    703 unsigned char *ssl_add_serverhello_tlsext(SSL *s, unsigned char *p, unsigned char *limit)
    704 	{
    705 	int extdatalen=0;
    706 	unsigned char *ret = p;
    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 p;
    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 - p - 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 	    s->version != DTLS1_VERSION)
    753 		{
    754 		/* Add TLS extension ECPointFormats to the ServerHello message */
    755 		long lenmax;
    756 
    757 		if ((lenmax = limit - ret - 5) < 0) return NULL;
    758 		if (s->tlsext_ecpointformatlist_length > (unsigned long)lenmax) return NULL;
    759 		if (s->tlsext_ecpointformatlist_length > 255)
    760 			{
    761 			SSLerr(SSL_F_SSL_ADD_SERVERHELLO_TLSEXT, ERR_R_INTERNAL_ERROR);
    762 			return NULL;
    763 			}
    764 
    765 		s2n(TLSEXT_TYPE_ec_point_formats,ret);
    766 		s2n(s->tlsext_ecpointformatlist_length + 1,ret);
    767 		*(ret++) = (unsigned char) s->tlsext_ecpointformatlist_length;
    768 		memcpy(ret, s->tlsext_ecpointformatlist, s->tlsext_ecpointformatlist_length);
    769 		ret+=s->tlsext_ecpointformatlist_length;
    770 
    771 		}
    772 	/* Currently the server should not respond with a SupportedCurves extension */
    773 #endif /* OPENSSL_NO_EC */
    774 
    775 	if (s->tlsext_ticket_expected
    776 		&& !(SSL_get_options(s) & SSL_OP_NO_TICKET))
    777 		{
    778 		if ((long)(limit - ret - 4) < 0) return NULL;
    779 		s2n(TLSEXT_TYPE_session_ticket,ret);
    780 		s2n(0,ret);
    781 		}
    782 
    783 	if (s->tlsext_status_expected)
    784 		{
    785 		if ((long)(limit - ret - 4) < 0) return NULL;
    786 		s2n(TLSEXT_TYPE_status_request,ret);
    787 		s2n(0,ret);
    788 		}
    789 
    790 #ifdef TLSEXT_TYPE_opaque_prf_input
    791 	if (s->s3->server_opaque_prf_input != NULL &&
    792 	    s->version != DTLS1_VERSION)
    793 		{
    794 		size_t sol = s->s3->server_opaque_prf_input_len;
    795 
    796 		if ((long)(limit - ret - 6 - sol) < 0)
    797 			return NULL;
    798 		if (sol > 0xFFFD) /* can't happen */
    799 			return NULL;
    800 
    801 		s2n(TLSEXT_TYPE_opaque_prf_input, ret);
    802 		s2n(sol + 2, ret);
    803 		s2n(sol, ret);
    804 		memcpy(ret, s->s3->server_opaque_prf_input, sol);
    805 		ret += sol;
    806 		}
    807 #endif
    808 
    809 #ifndef OPENSSL_NO_SRTP
    810         if(s->srtp_profile)
    811                 {
    812                 int el;
    813 
    814                 ssl_add_serverhello_use_srtp_ext(s, 0, &el, 0);
    815 
    816                 if((limit - p - 4 - el) < 0) return NULL;
    817 
    818                 s2n(TLSEXT_TYPE_use_srtp,ret);
    819                 s2n(el,ret);
    820 
    821                 if(ssl_add_serverhello_use_srtp_ext(s, ret, &el, el))
    822 			{
    823 			SSLerr(SSL_F_SSL_ADD_SERVERHELLO_TLSEXT, ERR_R_INTERNAL_ERROR);
    824 			return NULL;
    825 			}
    826                 ret+=el;
    827                 }
    828 #endif
    829 
    830 	if (((s->s3->tmp.new_cipher->id & 0xFFFF)==0x80 || (s->s3->tmp.new_cipher->id & 0xFFFF)==0x81)
    831 		&& (SSL_get_options(s) & SSL_OP_CRYPTOPRO_TLSEXT_BUG))
    832 		{ const unsigned char cryptopro_ext[36] = {
    833 			0xfd, 0xe8, /*65000*/
    834 			0x00, 0x20, /*32 bytes length*/
    835 			0x30, 0x1e, 0x30, 0x08, 0x06, 0x06, 0x2a, 0x85,
    836 			0x03,   0x02, 0x02, 0x09, 0x30, 0x08, 0x06, 0x06,
    837 			0x2a, 0x85, 0x03, 0x02, 0x02, 0x16, 0x30, 0x08,
    838 			0x06, 0x06, 0x2a, 0x85, 0x03, 0x02, 0x02, 0x17};
    839 			if (limit-ret<36) return NULL;
    840 			memcpy(ret,cryptopro_ext,36);
    841 			ret+=36;
    842 
    843 		}
    844 
    845 #ifndef OPENSSL_NO_HEARTBEATS
    846 	/* Add Heartbeat extension if we've received one */
    847 	if (s->tlsext_heartbeat & SSL_TLSEXT_HB_ENABLED)
    848 		{
    849 		if ((limit - ret - 4 - 1) < 0)
    850 			return NULL;
    851 		s2n(TLSEXT_TYPE_heartbeat,ret);
    852 		s2n(1,ret);
    853 		/* Set mode:
    854 		 * 1: peer may send requests
    855 		 * 2: peer not allowed to send requests
    856 		 */
    857 		if (s->tlsext_heartbeat & SSL_TLSEXT_HB_DONT_RECV_REQUESTS)
    858 			*(ret++) = SSL_TLSEXT_HB_DONT_SEND_REQUESTS;
    859 		else
    860 			*(ret++) = SSL_TLSEXT_HB_ENABLED;
    861 
    862 		}
    863 #endif
    864 
    865 #ifndef OPENSSL_NO_NEXTPROTONEG
    866 	next_proto_neg_seen = s->s3->next_proto_neg_seen;
    867 	s->s3->next_proto_neg_seen = 0;
    868 	if (next_proto_neg_seen && s->ctx->next_protos_advertised_cb)
    869 		{
    870 		const unsigned char *npa;
    871 		unsigned int npalen;
    872 		int r;
    873 
    874 		r = s->ctx->next_protos_advertised_cb(s, &npa, &npalen, s->ctx->next_protos_advertised_cb_arg);
    875 		if (r == SSL_TLSEXT_ERR_OK)
    876 			{
    877 			if ((long)(limit - ret - 4 - npalen) < 0) return NULL;
    878 			s2n(TLSEXT_TYPE_next_proto_neg,ret);
    879 			s2n(npalen,ret);
    880 			memcpy(ret, npa, npalen);
    881 			ret += npalen;
    882 			s->s3->next_proto_neg_seen = 1;
    883 			}
    884 		}
    885 #endif
    886 
    887 	if ((extdatalen = ret-p-2)== 0)
    888 		return p;
    889 
    890 	s2n(extdatalen,p);
    891 	return ret;
    892 	}
    893 
    894 #ifndef OPENSSL_NO_EC
    895 /* ssl_check_for_safari attempts to fingerprint Safari using OS X
    896  * SecureTransport using the TLS extension block in |d|, of length |n|.
    897  * Safari, since 10.6, sends exactly these extensions, in this order:
    898  *   SNI,
    899  *   elliptic_curves
    900  *   ec_point_formats
    901  *
    902  * We wish to fingerprint Safari because they broke ECDHE-ECDSA support in 10.8,
    903  * but they advertise support. So enabling ECDHE-ECDSA ciphers breaks them.
    904  * Sadly we cannot differentiate 10.6, 10.7 and 10.8.4 (which work), from
    905  * 10.8..10.8.3 (which don't work).
    906  */
    907 static void ssl_check_for_safari(SSL *s, const unsigned char *data, const unsigned char *d, int n) {
    908 	unsigned short type, size;
    909 	static const unsigned char kSafariExtensionsBlock[] = {
    910 		0x00, 0x0a,  /* elliptic_curves extension */
    911 		0x00, 0x08,  /* 8 bytes */
    912 		0x00, 0x06,  /* 6 bytes of curve ids */
    913 		0x00, 0x17,  /* P-256 */
    914 		0x00, 0x18,  /* P-384 */
    915 		0x00, 0x19,  /* P-521 */
    916 
    917 		0x00, 0x0b,  /* ec_point_formats */
    918 		0x00, 0x02,  /* 2 bytes */
    919 		0x01,        /* 1 point format */
    920 		0x00,        /* uncompressed */
    921 	};
    922 
    923 	/* The following is only present in TLS 1.2 */
    924 	static const unsigned char kSafariTLS12ExtensionsBlock[] = {
    925 		0x00, 0x0d,  /* signature_algorithms */
    926 		0x00, 0x0c,  /* 12 bytes */
    927 		0x00, 0x0a,  /* 10 bytes */
    928 		0x05, 0x01,  /* SHA-384/RSA */
    929 		0x04, 0x01,  /* SHA-256/RSA */
    930 		0x02, 0x01,  /* SHA-1/RSA */
    931 		0x04, 0x03,  /* SHA-256/ECDSA */
    932 		0x02, 0x03,  /* SHA-1/ECDSA */
    933 	};
    934 
    935 	if (data >= (d+n-2))
    936 		return;
    937 	data += 2;
    938 
    939 	if (data > (d+n-4))
    940 		return;
    941 	n2s(data,type);
    942 	n2s(data,size);
    943 
    944 	if (type != TLSEXT_TYPE_server_name)
    945 		return;
    946 
    947 	if (data+size > d+n)
    948 		return;
    949 	data += size;
    950 
    951 	if (TLS1_get_client_version(s) >= TLS1_2_VERSION)
    952 		{
    953 		const size_t len1 = sizeof(kSafariExtensionsBlock);
    954 		const size_t len2 = sizeof(kSafariTLS12ExtensionsBlock);
    955 
    956 		if (data + len1 + len2 != d+n)
    957 			return;
    958 		if (memcmp(data, kSafariExtensionsBlock, len1) != 0)
    959 			return;
    960 		if (memcmp(data + len1, kSafariTLS12ExtensionsBlock, len2) != 0)
    961 			return;
    962 		}
    963 	else
    964 		{
    965 		const size_t len = sizeof(kSafariExtensionsBlock);
    966 
    967 		if (data + len != d+n)
    968 			return;
    969 		if (memcmp(data, kSafariExtensionsBlock, len) != 0)
    970 			return;
    971 		}
    972 
    973 	s->s3->is_probably_safari = 1;
    974 }
    975 #endif /* !OPENSSL_NO_EC */
    976 
    977 int ssl_parse_clienthello_tlsext(SSL *s, unsigned char **p, unsigned char *d, int n, int *al)
    978 	{
    979 	unsigned short type;
    980 	unsigned short size;
    981 	unsigned short len;
    982 	unsigned char *data = *p;
    983 	int renegotiate_seen = 0;
    984 	int sigalg_seen = 0;
    985 
    986 	s->servername_done = 0;
    987 	s->tlsext_status_type = -1;
    988 #ifndef OPENSSL_NO_NEXTPROTONEG
    989 	s->s3->next_proto_neg_seen = 0;
    990 #endif
    991 
    992 #ifndef OPENSSL_NO_HEARTBEATS
    993 	s->tlsext_heartbeat &= ~(SSL_TLSEXT_HB_ENABLED |
    994 	                       SSL_TLSEXT_HB_DONT_SEND_REQUESTS);
    995 #endif
    996 
    997 #ifndef OPENSSL_NO_EC
    998 	if (s->options & SSL_OP_SAFARI_ECDHE_ECDSA_BUG)
    999 		ssl_check_for_safari(s, data, d, n);
   1000 #endif /* !OPENSSL_NO_EC */
   1001 
   1002 	if (data >= (d+n-2))
   1003 		goto ri_check;
   1004 	n2s(data,len);
   1005 
   1006 	if (data > (d+n-len))
   1007 		goto ri_check;
   1008 
   1009 	while (data <= (d+n-4))
   1010 		{
   1011 		n2s(data,type);
   1012 		n2s(data,size);
   1013 
   1014 		if (data+size > (d+n))
   1015 	   		goto ri_check;
   1016 #if 0
   1017 		fprintf(stderr,"Received extension type %d size %d\n",type,size);
   1018 #endif
   1019 		if (s->tlsext_debug_cb)
   1020 			s->tlsext_debug_cb(s, 0, type, data, size,
   1021 						s->tlsext_debug_arg);
   1022 /* The servername extension is treated as follows:
   1023 
   1024    - Only the hostname type is supported with a maximum length of 255.
   1025    - The servername is rejected if too long or if it contains zeros,
   1026      in which case an fatal alert is generated.
   1027    - The servername field is maintained together with the session cache.
   1028    - When a session is resumed, the servername call back invoked in order
   1029      to allow the application to position itself to the right context.
   1030    - The servername is acknowledged if it is new for a session or when
   1031      it is identical to a previously used for the same session.
   1032      Applications can control the behaviour.  They can at any time
   1033      set a 'desirable' servername for a new SSL object. This can be the
   1034      case for example with HTTPS when a Host: header field is received and
   1035      a renegotiation is requested. In this case, a possible servername
   1036      presented in the new client hello is only acknowledged if it matches
   1037      the value of the Host: field.
   1038    - Applications must  use SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION
   1039      if they provide for changing an explicit servername context for the session,
   1040      i.e. when the session has been established with a servername extension.
   1041    - On session reconnect, the servername extension may be absent.
   1042 
   1043 */
   1044 
   1045 		if (type == TLSEXT_TYPE_server_name)
   1046 			{
   1047 			unsigned char *sdata;
   1048 			int servname_type;
   1049 			int dsize;
   1050 
   1051 			if (size < 2)
   1052 				{
   1053 				*al = SSL_AD_DECODE_ERROR;
   1054 				return 0;
   1055 				}
   1056 			n2s(data,dsize);
   1057 			size -= 2;
   1058 			if (dsize > size  )
   1059 				{
   1060 				*al = SSL_AD_DECODE_ERROR;
   1061 				return 0;
   1062 				}
   1063 
   1064 			sdata = data;
   1065 			while (dsize > 3)
   1066 				{
   1067 	 			servname_type = *(sdata++);
   1068 				n2s(sdata,len);
   1069 				dsize -= 3;
   1070 
   1071 				if (len > dsize)
   1072 					{
   1073 					*al = SSL_AD_DECODE_ERROR;
   1074 					return 0;
   1075 					}
   1076 				if (s->servername_done == 0)
   1077 				switch (servname_type)
   1078 					{
   1079 				case TLSEXT_NAMETYPE_host_name:
   1080 					if (!s->hit)
   1081 						{
   1082 						if(s->session->tlsext_hostname)
   1083 							{
   1084 							*al = SSL_AD_DECODE_ERROR;
   1085 							return 0;
   1086 							}
   1087 						if (len > TLSEXT_MAXLEN_host_name)
   1088 							{
   1089 							*al = TLS1_AD_UNRECOGNIZED_NAME;
   1090 							return 0;
   1091 							}
   1092 						if ((s->session->tlsext_hostname = OPENSSL_malloc(len+1)) == NULL)
   1093 							{
   1094 							*al = TLS1_AD_INTERNAL_ERROR;
   1095 							return 0;
   1096 							}
   1097 						memcpy(s->session->tlsext_hostname, sdata, len);
   1098 						s->session->tlsext_hostname[len]='\0';
   1099 						if (strlen(s->session->tlsext_hostname) != len) {
   1100 							OPENSSL_free(s->session->tlsext_hostname);
   1101 							s->session->tlsext_hostname = NULL;
   1102 							*al = TLS1_AD_UNRECOGNIZED_NAME;
   1103 							return 0;
   1104 						}
   1105 						s->servername_done = 1;
   1106 
   1107 						}
   1108 					else
   1109 						s->servername_done = s->session->tlsext_hostname
   1110 							&& strlen(s->session->tlsext_hostname) == len
   1111 							&& strncmp(s->session->tlsext_hostname, (char *)sdata, len) == 0;
   1112 
   1113 					break;
   1114 
   1115 				default:
   1116 					break;
   1117 					}
   1118 
   1119 				dsize -= len;
   1120 				}
   1121 			if (dsize != 0)
   1122 				{
   1123 				*al = SSL_AD_DECODE_ERROR;
   1124 				return 0;
   1125 				}
   1126 
   1127 			}
   1128 #ifndef OPENSSL_NO_SRP
   1129 		else if (type == TLSEXT_TYPE_srp)
   1130 			{
   1131 			if (size <= 0 || ((len = data[0])) != (size -1))
   1132 				{
   1133 				*al = SSL_AD_DECODE_ERROR;
   1134 				return 0;
   1135 				}
   1136 			if (s->srp_ctx.login != NULL)
   1137 				{
   1138 				*al = SSL_AD_DECODE_ERROR;
   1139 				return 0;
   1140 				}
   1141 			if ((s->srp_ctx.login = OPENSSL_malloc(len+1)) == NULL)
   1142 				return -1;
   1143 			memcpy(s->srp_ctx.login, &data[1], len);
   1144 			s->srp_ctx.login[len]='\0';
   1145 
   1146 			if (strlen(s->srp_ctx.login) != len)
   1147 				{
   1148 				*al = SSL_AD_DECODE_ERROR;
   1149 				return 0;
   1150 				}
   1151 			}
   1152 #endif
   1153 
   1154 #ifndef OPENSSL_NO_EC
   1155 		else if (type == TLSEXT_TYPE_ec_point_formats &&
   1156 	             s->version != DTLS1_VERSION)
   1157 			{
   1158 			unsigned char *sdata = data;
   1159 			int ecpointformatlist_length = *(sdata++);
   1160 
   1161 			if (ecpointformatlist_length != size - 1)
   1162 				{
   1163 				*al = TLS1_AD_DECODE_ERROR;
   1164 				return 0;
   1165 				}
   1166 			if (!s->hit)
   1167 				{
   1168 				if(s->session->tlsext_ecpointformatlist)
   1169 					{
   1170 					OPENSSL_free(s->session->tlsext_ecpointformatlist);
   1171 					s->session->tlsext_ecpointformatlist = NULL;
   1172 					}
   1173 				s->session->tlsext_ecpointformatlist_length = 0;
   1174 				if ((s->session->tlsext_ecpointformatlist = OPENSSL_malloc(ecpointformatlist_length)) == NULL)
   1175 					{
   1176 					*al = TLS1_AD_INTERNAL_ERROR;
   1177 					return 0;
   1178 					}
   1179 				s->session->tlsext_ecpointformatlist_length = ecpointformatlist_length;
   1180 				memcpy(s->session->tlsext_ecpointformatlist, sdata, ecpointformatlist_length);
   1181 				}
   1182 #if 0
   1183 			fprintf(stderr,"ssl_parse_clienthello_tlsext s->session->tlsext_ecpointformatlist (length=%i) ", s->session->tlsext_ecpointformatlist_length);
   1184 			sdata = s->session->tlsext_ecpointformatlist;
   1185 			for (i = 0; i < s->session->tlsext_ecpointformatlist_length; i++)
   1186 				fprintf(stderr,"%i ",*(sdata++));
   1187 			fprintf(stderr,"\n");
   1188 #endif
   1189 			}
   1190 		else if (type == TLSEXT_TYPE_elliptic_curves &&
   1191 	             s->version != DTLS1_VERSION)
   1192 			{
   1193 			unsigned char *sdata = data;
   1194 			int ellipticcurvelist_length = (*(sdata++) << 8);
   1195 			ellipticcurvelist_length += (*(sdata++));
   1196 
   1197 			if (ellipticcurvelist_length != size - 2 ||
   1198 				ellipticcurvelist_length < 1)
   1199 				{
   1200 				*al = TLS1_AD_DECODE_ERROR;
   1201 				return 0;
   1202 				}
   1203 			if (!s->hit)
   1204 				{
   1205 				if(s->session->tlsext_ellipticcurvelist)
   1206 					{
   1207 					*al = TLS1_AD_DECODE_ERROR;
   1208 					return 0;
   1209 					}
   1210 				s->session->tlsext_ellipticcurvelist_length = 0;
   1211 				if ((s->session->tlsext_ellipticcurvelist = OPENSSL_malloc(ellipticcurvelist_length)) == NULL)
   1212 					{
   1213 					*al = TLS1_AD_INTERNAL_ERROR;
   1214 					return 0;
   1215 					}
   1216 				s->session->tlsext_ellipticcurvelist_length = ellipticcurvelist_length;
   1217 				memcpy(s->session->tlsext_ellipticcurvelist, sdata, ellipticcurvelist_length);
   1218 				}
   1219 #if 0
   1220 			fprintf(stderr,"ssl_parse_clienthello_tlsext s->session->tlsext_ellipticcurvelist (length=%i) ", s->session->tlsext_ellipticcurvelist_length);
   1221 			sdata = s->session->tlsext_ellipticcurvelist;
   1222 			for (i = 0; i < s->session->tlsext_ellipticcurvelist_length; i++)
   1223 				fprintf(stderr,"%i ",*(sdata++));
   1224 			fprintf(stderr,"\n");
   1225 #endif
   1226 			}
   1227 #endif /* OPENSSL_NO_EC */
   1228 #ifdef TLSEXT_TYPE_opaque_prf_input
   1229 		else if (type == TLSEXT_TYPE_opaque_prf_input &&
   1230 	             s->version != DTLS1_VERSION)
   1231 			{
   1232 			unsigned char *sdata = data;
   1233 
   1234 			if (size < 2)
   1235 				{
   1236 				*al = SSL_AD_DECODE_ERROR;
   1237 				return 0;
   1238 				}
   1239 			n2s(sdata, s->s3->client_opaque_prf_input_len);
   1240 			if (s->s3->client_opaque_prf_input_len != size - 2)
   1241 				{
   1242 				*al = SSL_AD_DECODE_ERROR;
   1243 				return 0;
   1244 				}
   1245 
   1246 			if (s->s3->client_opaque_prf_input != NULL) /* shouldn't really happen */
   1247 				OPENSSL_free(s->s3->client_opaque_prf_input);
   1248 			if (s->s3->client_opaque_prf_input_len == 0)
   1249 				s->s3->client_opaque_prf_input = OPENSSL_malloc(1); /* dummy byte just to get non-NULL */
   1250 			else
   1251 				s->s3->client_opaque_prf_input = BUF_memdup(sdata, s->s3->client_opaque_prf_input_len);
   1252 			if (s->s3->client_opaque_prf_input == NULL)
   1253 				{
   1254 				*al = TLS1_AD_INTERNAL_ERROR;
   1255 				return 0;
   1256 				}
   1257 			}
   1258 #endif
   1259 		else if (type == TLSEXT_TYPE_session_ticket)
   1260 			{
   1261 			if (s->tls_session_ticket_ext_cb &&
   1262 			    !s->tls_session_ticket_ext_cb(s, data, size, s->tls_session_ticket_ext_cb_arg))
   1263 				{
   1264 				*al = TLS1_AD_INTERNAL_ERROR;
   1265 				return 0;
   1266 				}
   1267 			}
   1268 		else if (type == TLSEXT_TYPE_renegotiate)
   1269 			{
   1270 			if(!ssl_parse_clienthello_renegotiate_ext(s, data, size, al))
   1271 				return 0;
   1272 			renegotiate_seen = 1;
   1273 			}
   1274 		else if (type == TLSEXT_TYPE_signature_algorithms)
   1275 			{
   1276 			int dsize;
   1277 			if (sigalg_seen || size < 2)
   1278 				{
   1279 				*al = SSL_AD_DECODE_ERROR;
   1280 				return 0;
   1281 				}
   1282 			sigalg_seen = 1;
   1283 			n2s(data,dsize);
   1284 			size -= 2;
   1285 			if (dsize != size || dsize & 1)
   1286 				{
   1287 				*al = SSL_AD_DECODE_ERROR;
   1288 				return 0;
   1289 				}
   1290 			if (!tls1_process_sigalgs(s, data, dsize))
   1291 				{
   1292 				*al = SSL_AD_DECODE_ERROR;
   1293 				return 0;
   1294 				}
   1295 			}
   1296 		else if (type == TLSEXT_TYPE_status_request &&
   1297 		         s->version != DTLS1_VERSION)
   1298 			{
   1299 
   1300 			if (size < 5)
   1301 				{
   1302 				*al = SSL_AD_DECODE_ERROR;
   1303 				return 0;
   1304 				}
   1305 
   1306 			s->tlsext_status_type = *data++;
   1307 			size--;
   1308 			if (s->tlsext_status_type == TLSEXT_STATUSTYPE_ocsp)
   1309 				{
   1310 				const unsigned char *sdata;
   1311 				int dsize;
   1312 				/* Read in responder_id_list */
   1313 				n2s(data,dsize);
   1314 				size -= 2;
   1315 				if (dsize > size  )
   1316 					{
   1317 					*al = SSL_AD_DECODE_ERROR;
   1318 					return 0;
   1319 					}
   1320 				while (dsize > 0)
   1321 					{
   1322 					OCSP_RESPID *id;
   1323 					int idsize;
   1324 					if (dsize < 4)
   1325 						{
   1326 						*al = SSL_AD_DECODE_ERROR;
   1327 						return 0;
   1328 						}
   1329 					n2s(data, idsize);
   1330 					dsize -= 2 + idsize;
   1331 					size -= 2 + idsize;
   1332 					if (dsize < 0)
   1333 						{
   1334 						*al = SSL_AD_DECODE_ERROR;
   1335 						return 0;
   1336 						}
   1337 					sdata = data;
   1338 					data += idsize;
   1339 					id = d2i_OCSP_RESPID(NULL,
   1340 								&sdata, idsize);
   1341 					if (!id)
   1342 						{
   1343 						*al = SSL_AD_DECODE_ERROR;
   1344 						return 0;
   1345 						}
   1346 					if (data != sdata)
   1347 						{
   1348 						OCSP_RESPID_free(id);
   1349 						*al = SSL_AD_DECODE_ERROR;
   1350 						return 0;
   1351 						}
   1352 					if (!s->tlsext_ocsp_ids
   1353 						&& !(s->tlsext_ocsp_ids =
   1354 						sk_OCSP_RESPID_new_null()))
   1355 						{
   1356 						OCSP_RESPID_free(id);
   1357 						*al = SSL_AD_INTERNAL_ERROR;
   1358 						return 0;
   1359 						}
   1360 					if (!sk_OCSP_RESPID_push(
   1361 							s->tlsext_ocsp_ids, id))
   1362 						{
   1363 						OCSP_RESPID_free(id);
   1364 						*al = SSL_AD_INTERNAL_ERROR;
   1365 						return 0;
   1366 						}
   1367 					}
   1368 
   1369 				/* Read in request_extensions */
   1370 				if (size < 2)
   1371 					{
   1372 					*al = SSL_AD_DECODE_ERROR;
   1373 					return 0;
   1374 					}
   1375 				n2s(data,dsize);
   1376 				size -= 2;
   1377 				if (dsize != size)
   1378 					{
   1379 					*al = SSL_AD_DECODE_ERROR;
   1380 					return 0;
   1381 					}
   1382 				sdata = data;
   1383 				if (dsize > 0)
   1384 					{
   1385 					if (s->tlsext_ocsp_exts)
   1386 						{
   1387 						sk_X509_EXTENSION_pop_free(s->tlsext_ocsp_exts,
   1388 									   X509_EXTENSION_free);
   1389 						}
   1390 
   1391 					s->tlsext_ocsp_exts =
   1392 						d2i_X509_EXTENSIONS(NULL,
   1393 							&sdata, dsize);
   1394 					if (!s->tlsext_ocsp_exts
   1395 						|| (data + dsize != sdata))
   1396 						{
   1397 						*al = SSL_AD_DECODE_ERROR;
   1398 						return 0;
   1399 						}
   1400 					}
   1401 				}
   1402 				/* We don't know what to do with any other type
   1403  			 	* so ignore it.
   1404  			 	*/
   1405 				else
   1406 					s->tlsext_status_type = -1;
   1407 			}
   1408 #ifndef OPENSSL_NO_HEARTBEATS
   1409 		else if (type == TLSEXT_TYPE_heartbeat)
   1410 			{
   1411 			switch(data[0])
   1412 				{
   1413 				case 0x01:	/* Client allows us to send HB requests */
   1414 							s->tlsext_heartbeat |= SSL_TLSEXT_HB_ENABLED;
   1415 							break;
   1416 				case 0x02:	/* Client doesn't accept HB requests */
   1417 							s->tlsext_heartbeat |= SSL_TLSEXT_HB_ENABLED;
   1418 							s->tlsext_heartbeat |= SSL_TLSEXT_HB_DONT_SEND_REQUESTS;
   1419 							break;
   1420 				default:	*al = SSL_AD_ILLEGAL_PARAMETER;
   1421 							return 0;
   1422 				}
   1423 			}
   1424 #endif
   1425 #ifndef OPENSSL_NO_NEXTPROTONEG
   1426 		else if (type == TLSEXT_TYPE_next_proto_neg &&
   1427 			 s->s3->tmp.finish_md_len == 0)
   1428 			{
   1429 			/* We shouldn't accept this extension on a
   1430 			 * renegotiation.
   1431 			 *
   1432 			 * s->new_session will be set on renegotiation, but we
   1433 			 * probably shouldn't rely that it couldn't be set on
   1434 			 * the initial renegotation too in certain cases (when
   1435 			 * there's some other reason to disallow resuming an
   1436 			 * earlier session -- the current code won't be doing
   1437 			 * anything like that, but this might change).
   1438 
   1439 			 * A valid sign that there's been a previous handshake
   1440 			 * in this connection is if s->s3->tmp.finish_md_len >
   1441 			 * 0.  (We are talking about a check that will happen
   1442 			 * in the Hello protocol round, well before a new
   1443 			 * Finished message could have been computed.) */
   1444 			s->s3->next_proto_neg_seen = 1;
   1445 			}
   1446 #endif
   1447 
   1448 		/* session ticket processed earlier */
   1449 #ifndef OPENSSL_NO_SRTP
   1450 		else if (type == TLSEXT_TYPE_use_srtp)
   1451                         {
   1452 			if(ssl_parse_clienthello_use_srtp_ext(s, data, size,
   1453 							      al))
   1454 				return 0;
   1455                         }
   1456 #endif
   1457 
   1458 		data+=size;
   1459 		}
   1460 
   1461 	*p = data;
   1462 
   1463 	ri_check:
   1464 
   1465 	/* Need RI if renegotiating */
   1466 
   1467 	if (!renegotiate_seen && s->renegotiate &&
   1468 		!(s->options & SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION))
   1469 		{
   1470 		*al = SSL_AD_HANDSHAKE_FAILURE;
   1471 	 	SSLerr(SSL_F_SSL_PARSE_CLIENTHELLO_TLSEXT,
   1472 				SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED);
   1473 		return 0;
   1474 		}
   1475 
   1476 	return 1;
   1477 	}
   1478 
   1479 #ifndef OPENSSL_NO_NEXTPROTONEG
   1480 /* ssl_next_proto_validate validates a Next Protocol Negotiation block. No
   1481  * elements of zero length are allowed and the set of elements must exactly fill
   1482  * the length of the block. */
   1483 static char ssl_next_proto_validate(unsigned char *d, unsigned len)
   1484 	{
   1485 	unsigned int off = 0;
   1486 
   1487 	while (off < len)
   1488 		{
   1489 		if (d[off] == 0)
   1490 			return 0;
   1491 		off += d[off];
   1492 		off++;
   1493 		}
   1494 
   1495 	return off == len;
   1496 	}
   1497 #endif
   1498 
   1499 int ssl_parse_serverhello_tlsext(SSL *s, unsigned char **p, unsigned char *d, int n, int *al)
   1500 	{
   1501 	unsigned short length;
   1502 	unsigned short type;
   1503 	unsigned short size;
   1504 	unsigned char *data = *p;
   1505 	int tlsext_servername = 0;
   1506 	int renegotiate_seen = 0;
   1507 
   1508 #ifndef OPENSSL_NO_NEXTPROTONEG
   1509 	s->s3->next_proto_neg_seen = 0;
   1510 #endif
   1511 
   1512 #ifndef OPENSSL_NO_HEARTBEATS
   1513 	s->tlsext_heartbeat &= ~(SSL_TLSEXT_HB_ENABLED |
   1514 	                       SSL_TLSEXT_HB_DONT_SEND_REQUESTS);
   1515 #endif
   1516 
   1517 	if (data >= (d+n-2))
   1518 		goto ri_check;
   1519 
   1520 	n2s(data,length);
   1521 	if (data+length != d+n)
   1522 		{
   1523 		*al = SSL_AD_DECODE_ERROR;
   1524 		return 0;
   1525 		}
   1526 
   1527 	while(data <= (d+n-4))
   1528 		{
   1529 		n2s(data,type);
   1530 		n2s(data,size);
   1531 
   1532 		if (data+size > (d+n))
   1533 	   		goto ri_check;
   1534 
   1535 		if (s->tlsext_debug_cb)
   1536 			s->tlsext_debug_cb(s, 1, type, data, size,
   1537 						s->tlsext_debug_arg);
   1538 
   1539 		if (type == TLSEXT_TYPE_server_name)
   1540 			{
   1541 			if (s->tlsext_hostname == NULL || size > 0)
   1542 				{
   1543 				*al = TLS1_AD_UNRECOGNIZED_NAME;
   1544 				return 0;
   1545 				}
   1546 			tlsext_servername = 1;
   1547 			}
   1548 
   1549 #ifndef OPENSSL_NO_EC
   1550 		else if (type == TLSEXT_TYPE_ec_point_formats &&
   1551 	             s->version != DTLS1_VERSION)
   1552 			{
   1553 			unsigned char *sdata = data;
   1554 			int ecpointformatlist_length = *(sdata++);
   1555 
   1556 			if (ecpointformatlist_length != size - 1 ||
   1557 				ecpointformatlist_length < 1)
   1558 				{
   1559 				*al = TLS1_AD_DECODE_ERROR;
   1560 				return 0;
   1561 				}
   1562 			s->session->tlsext_ecpointformatlist_length = 0;
   1563 			if (s->session->tlsext_ecpointformatlist != NULL) OPENSSL_free(s->session->tlsext_ecpointformatlist);
   1564 			if ((s->session->tlsext_ecpointformatlist = OPENSSL_malloc(ecpointformatlist_length)) == NULL)
   1565 				{
   1566 				*al = TLS1_AD_INTERNAL_ERROR;
   1567 				return 0;
   1568 				}
   1569 			s->session->tlsext_ecpointformatlist_length = ecpointformatlist_length;
   1570 			memcpy(s->session->tlsext_ecpointformatlist, sdata, ecpointformatlist_length);
   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 (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 
   1765 int 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 
   1858 int 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 
   1889 int 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 
   1984 int 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 
   2049 int 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  */
   2194 int 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  */
   2296 static 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 		return 2;
   2352 	/* Attempt to decrypt session data */
   2353 	/* Move p after IV to start of encrypted ticket, update length */
   2354 	p = etick + 16 + EVP_CIPHER_CTX_iv_length(&ctx);
   2355 	eticklen -= 16 + EVP_CIPHER_CTX_iv_length(&ctx);
   2356 	sdec = OPENSSL_malloc(eticklen);
   2357 	if (!sdec)
   2358 		{
   2359 		EVP_CIPHER_CTX_cleanup(&ctx);
   2360 		return -1;
   2361 		}
   2362 	EVP_DecryptUpdate(&ctx, sdec, &slen, p, eticklen);
   2363 	if (EVP_DecryptFinal(&ctx, sdec + slen, &mlen) <= 0)
   2364 		return 2;
   2365 	slen += mlen;
   2366 	EVP_CIPHER_CTX_cleanup(&ctx);
   2367 	p = sdec;
   2368 
   2369 	sess = d2i_SSL_SESSION(NULL, &p, slen);
   2370 	OPENSSL_free(sdec);
   2371 	if (sess)
   2372 		{
   2373 		/* The session ID, if non-empty, is used by some clients to
   2374 		 * detect that the ticket has been accepted. So we copy it to
   2375 		 * the session structure. If it is empty set length to zero
   2376 		 * as required by standard.
   2377 		 */
   2378 		if (sesslen)
   2379 			memcpy(sess->session_id, sess_id, sesslen);
   2380 		sess->session_id_length = sesslen;
   2381 		*psess = sess;
   2382 		if (renew_ticket)
   2383 			return 4;
   2384 		else
   2385 			return 3;
   2386 		}
   2387         ERR_clear_error();
   2388 	/* For session parse failure, indicate that we need to send a new
   2389 	 * ticket. */
   2390 	return 2;
   2391 	}
   2392 
   2393 /* Tables to translate from NIDs to TLS v1.2 ids */
   2394 
   2395 typedef struct
   2396 	{
   2397 	int nid;
   2398 	int id;
   2399 	} tls12_lookup;
   2400 
   2401 static tls12_lookup tls12_md[] = {
   2402 #ifndef OPENSSL_NO_MD5
   2403 	{NID_md5, TLSEXT_hash_md5},
   2404 #endif
   2405 #ifndef OPENSSL_NO_SHA
   2406 	{NID_sha1, TLSEXT_hash_sha1},
   2407 #endif
   2408 #ifndef OPENSSL_NO_SHA256
   2409 	{NID_sha224, TLSEXT_hash_sha224},
   2410 	{NID_sha256, TLSEXT_hash_sha256},
   2411 #endif
   2412 #ifndef OPENSSL_NO_SHA512
   2413 	{NID_sha384, TLSEXT_hash_sha384},
   2414 	{NID_sha512, TLSEXT_hash_sha512}
   2415 #endif
   2416 };
   2417 
   2418 static tls12_lookup tls12_sig[] = {
   2419 #ifndef OPENSSL_NO_RSA
   2420 	{EVP_PKEY_RSA, TLSEXT_signature_rsa},
   2421 #endif
   2422 #ifndef OPENSSL_NO_DSA
   2423 	{EVP_PKEY_DSA, TLSEXT_signature_dsa},
   2424 #endif
   2425 #ifndef OPENSSL_NO_ECDSA
   2426 	{EVP_PKEY_EC, TLSEXT_signature_ecdsa}
   2427 #endif
   2428 };
   2429 
   2430 static int tls12_find_id(int nid, tls12_lookup *table, size_t tlen)
   2431 	{
   2432 	size_t i;
   2433 	for (i = 0; i < tlen; i++)
   2434 		{
   2435 		if (table[i].nid == nid)
   2436 			return table[i].id;
   2437 		}
   2438 	return -1;
   2439 	}
   2440 #if 0
   2441 static int tls12_find_nid(int id, tls12_lookup *table, size_t tlen)
   2442 	{
   2443 	size_t i;
   2444 	for (i = 0; i < tlen; i++)
   2445 		{
   2446 		if (table[i].id == id)
   2447 			return table[i].nid;
   2448 		}
   2449 	return -1;
   2450 	}
   2451 #endif
   2452 
   2453 int tls12_get_sigandhash(unsigned char *p, const EVP_PKEY *pk, const EVP_MD *md)
   2454 	{
   2455 	int sig_id, md_id;
   2456 	if (!md)
   2457 		return 0;
   2458 	md_id = tls12_find_id(EVP_MD_type(md), tls12_md,
   2459 				sizeof(tls12_md)/sizeof(tls12_lookup));
   2460 	if (md_id == -1)
   2461 		return 0;
   2462 	sig_id = tls12_get_sigid(pk);
   2463 	if (sig_id == -1)
   2464 		return 0;
   2465 	p[0] = (unsigned char)md_id;
   2466 	p[1] = (unsigned char)sig_id;
   2467 	return 1;
   2468 	}
   2469 
   2470 int tls12_get_sigid(const EVP_PKEY *pk)
   2471 	{
   2472 	return tls12_find_id(pk->type, tls12_sig,
   2473 				sizeof(tls12_sig)/sizeof(tls12_lookup));
   2474 	}
   2475 
   2476 const EVP_MD *tls12_get_hash(unsigned char hash_alg)
   2477 	{
   2478 	switch(hash_alg)
   2479 		{
   2480 #ifndef OPENSSL_NO_SHA
   2481 		case TLSEXT_hash_sha1:
   2482 		return EVP_sha1();
   2483 #endif
   2484 #ifndef OPENSSL_NO_SHA256
   2485 		case TLSEXT_hash_sha224:
   2486 		return EVP_sha224();
   2487 
   2488 		case TLSEXT_hash_sha256:
   2489 		return EVP_sha256();
   2490 #endif
   2491 #ifndef OPENSSL_NO_SHA512
   2492 		case TLSEXT_hash_sha384:
   2493 		return EVP_sha384();
   2494 
   2495 		case TLSEXT_hash_sha512:
   2496 		return EVP_sha512();
   2497 #endif
   2498 		default:
   2499 		return NULL;
   2500 
   2501 		}
   2502 	}
   2503 
   2504 /* Set preferred digest for each key type */
   2505 
   2506 int tls1_process_sigalgs(SSL *s, const unsigned char *data, int dsize)
   2507 	{
   2508 	int i, idx;
   2509 	const EVP_MD *md;
   2510 	CERT *c = s->cert;
   2511 	/* Extension ignored for TLS versions below 1.2 */
   2512 	if (TLS1_get_version(s) < TLS1_2_VERSION)
   2513 		return 1;
   2514 	/* Should never happen */
   2515 	if (!c)
   2516 		return 0;
   2517 
   2518 	c->pkeys[SSL_PKEY_DSA_SIGN].digest = NULL;
   2519 	c->pkeys[SSL_PKEY_RSA_SIGN].digest = NULL;
   2520 	c->pkeys[SSL_PKEY_RSA_ENC].digest = NULL;
   2521 	c->pkeys[SSL_PKEY_ECC].digest = NULL;
   2522 
   2523 	for (i = 0; i < dsize; i += 2)
   2524 		{
   2525 		unsigned char hash_alg = data[i], sig_alg = data[i+1];
   2526 
   2527 		switch(sig_alg)
   2528 			{
   2529 #ifndef OPENSSL_NO_RSA
   2530 			case TLSEXT_signature_rsa:
   2531 			idx = SSL_PKEY_RSA_SIGN;
   2532 			break;
   2533 #endif
   2534 #ifndef OPENSSL_NO_DSA
   2535 			case TLSEXT_signature_dsa:
   2536 			idx = SSL_PKEY_DSA_SIGN;
   2537 			break;
   2538 #endif
   2539 #ifndef OPENSSL_NO_ECDSA
   2540 			case TLSEXT_signature_ecdsa:
   2541 			idx = SSL_PKEY_ECC;
   2542 			break;
   2543 #endif
   2544 			default:
   2545 			continue;
   2546 			}
   2547 
   2548 		if (c->pkeys[idx].digest == NULL)
   2549 			{
   2550 			md = tls12_get_hash(hash_alg);
   2551 			if (md)
   2552 				{
   2553 				c->pkeys[idx].digest = md;
   2554 				if (idx == SSL_PKEY_RSA_SIGN)
   2555 					c->pkeys[SSL_PKEY_RSA_ENC].digest = md;
   2556 				}
   2557 			}
   2558 
   2559 		}
   2560 
   2561 
   2562 	/* Set any remaining keys to default values. NOTE: if alg is not
   2563 	 * supported it stays as NULL.
   2564 	 */
   2565 #ifndef OPENSSL_NO_DSA
   2566 	if (!c->pkeys[SSL_PKEY_DSA_SIGN].digest)
   2567 		c->pkeys[SSL_PKEY_DSA_SIGN].digest = EVP_sha1();
   2568 #endif
   2569 #ifndef OPENSSL_NO_RSA
   2570 	if (!c->pkeys[SSL_PKEY_RSA_SIGN].digest)
   2571 		{
   2572 		c->pkeys[SSL_PKEY_RSA_SIGN].digest = EVP_sha1();
   2573 		c->pkeys[SSL_PKEY_RSA_ENC].digest = EVP_sha1();
   2574 		}
   2575 #endif
   2576 #ifndef OPENSSL_NO_ECDSA
   2577 	if (!c->pkeys[SSL_PKEY_ECC].digest)
   2578 		c->pkeys[SSL_PKEY_ECC].digest = EVP_sha1();
   2579 #endif
   2580 	return 1;
   2581 	}
   2582 
   2583 #endif
   2584 
   2585 #ifndef OPENSSL_NO_HEARTBEATS
   2586 int
   2587 tls1_process_heartbeat(SSL *s)
   2588 	{
   2589 	unsigned char *p = &s->s3->rrec.data[0], *pl;
   2590 	unsigned short hbtype;
   2591 	unsigned int payload;
   2592 	unsigned int padding = 16; /* Use minimum padding */
   2593 
   2594 	if (s->msg_callback)
   2595 		s->msg_callback(0, s->version, TLS1_RT_HEARTBEAT,
   2596 			&s->s3->rrec.data[0], s->s3->rrec.length,
   2597 			s, s->msg_callback_arg);
   2598 
   2599 	/* Read type and payload length first */
   2600 	if (1 + 2 + 16 > s->s3->rrec.length)
   2601 		return 0; /* silently discard */
   2602 	hbtype = *p++;
   2603 	n2s(p, payload);
   2604 	if (1 + 2 + payload + 16 > s->s3->rrec.length)
   2605 		return 0; /* silently discard per RFC 6520 sec. 4 */
   2606 	pl = p;
   2607 
   2608 	if (hbtype == TLS1_HB_REQUEST)
   2609 		{
   2610 		unsigned char *buffer, *bp;
   2611 		int r;
   2612 
   2613 		/* Allocate memory for the response, size is 1 bytes
   2614 		 * message type, plus 2 bytes payload length, plus
   2615 		 * payload, plus padding
   2616 		 */
   2617 		buffer = OPENSSL_malloc(1 + 2 + payload + padding);
   2618 		bp = buffer;
   2619 
   2620 		/* Enter response type, length and copy payload */
   2621 		*bp++ = TLS1_HB_RESPONSE;
   2622 		s2n(payload, bp);
   2623 		memcpy(bp, pl, payload);
   2624 		bp += payload;
   2625 		/* Random padding */
   2626 		RAND_pseudo_bytes(bp, padding);
   2627 
   2628 		r = ssl3_write_bytes(s, TLS1_RT_HEARTBEAT, buffer, 3 + payload + padding);
   2629 
   2630 		if (r >= 0 && s->msg_callback)
   2631 			s->msg_callback(1, s->version, TLS1_RT_HEARTBEAT,
   2632 				buffer, 3 + payload + padding,
   2633 				s, s->msg_callback_arg);
   2634 
   2635 		OPENSSL_free(buffer);
   2636 
   2637 		if (r < 0)
   2638 			return r;
   2639 		}
   2640 	else if (hbtype == TLS1_HB_RESPONSE)
   2641 		{
   2642 		unsigned int seq;
   2643 
   2644 		/* We only send sequence numbers (2 bytes unsigned int),
   2645 		 * and 16 random bytes, so we just try to read the
   2646 		 * sequence number */
   2647 		n2s(pl, seq);
   2648 
   2649 		if (payload == 18 && seq == s->tlsext_hb_seq)
   2650 			{
   2651 			s->tlsext_hb_seq++;
   2652 			s->tlsext_hb_pending = 0;
   2653 			}
   2654 		}
   2655 
   2656 	return 0;
   2657 	}
   2658 
   2659 int
   2660 tls1_heartbeat(SSL *s)
   2661 	{
   2662 	unsigned char *buf, *p;
   2663 	int ret;
   2664 	unsigned int payload = 18; /* Sequence number + random bytes */
   2665 	unsigned int padding = 16; /* Use minimum padding */
   2666 
   2667 	/* Only send if peer supports and accepts HB requests... */
   2668 	if (!(s->tlsext_heartbeat & SSL_TLSEXT_HB_ENABLED) ||
   2669 	    s->tlsext_heartbeat & SSL_TLSEXT_HB_DONT_SEND_REQUESTS)
   2670 		{
   2671 		SSLerr(SSL_F_TLS1_HEARTBEAT,SSL_R_TLS_HEARTBEAT_PEER_DOESNT_ACCEPT);
   2672 		return -1;
   2673 		}
   2674 
   2675 	/* ...and there is none in flight yet... */
   2676 	if (s->tlsext_hb_pending)
   2677 		{
   2678 		SSLerr(SSL_F_TLS1_HEARTBEAT,SSL_R_TLS_HEARTBEAT_PENDING);
   2679 		return -1;
   2680 		}
   2681 
   2682 	/* ...and no handshake in progress. */
   2683 	if (SSL_in_init(s) || s->in_handshake)
   2684 		{
   2685 		SSLerr(SSL_F_TLS1_HEARTBEAT,SSL_R_UNEXPECTED_MESSAGE);
   2686 		return -1;
   2687 		}
   2688 
   2689 	/* Check if padding is too long, payload and padding
   2690 	 * must not exceed 2^14 - 3 = 16381 bytes in total.
   2691 	 */
   2692 	OPENSSL_assert(payload + padding <= 16381);
   2693 
   2694 	/* Create HeartBeat message, we just use a sequence number
   2695 	 * as payload to distuingish different messages and add
   2696 	 * some random stuff.
   2697 	 *  - Message Type, 1 byte
   2698 	 *  - Payload Length, 2 bytes (unsigned int)
   2699 	 *  - Payload, the sequence number (2 bytes uint)
   2700 	 *  - Payload, random bytes (16 bytes uint)
   2701 	 *  - Padding
   2702 	 */
   2703 	buf = OPENSSL_malloc(1 + 2 + payload + padding);
   2704 	p = buf;
   2705 	/* Message Type */
   2706 	*p++ = TLS1_HB_REQUEST;
   2707 	/* Payload length (18 bytes here) */
   2708 	s2n(payload, p);
   2709 	/* Sequence number */
   2710 	s2n(s->tlsext_hb_seq, p);
   2711 	/* 16 random bytes */
   2712 	RAND_pseudo_bytes(p, 16);
   2713 	p += 16;
   2714 	/* Random padding */
   2715 	RAND_pseudo_bytes(p, padding);
   2716 
   2717 	ret = ssl3_write_bytes(s, TLS1_RT_HEARTBEAT, buf, 3 + payload + padding);
   2718 	if (ret >= 0)
   2719 		{
   2720 		if (s->msg_callback)
   2721 			s->msg_callback(1, s->version, TLS1_RT_HEARTBEAT,
   2722 				buf, 3 + payload + padding,
   2723 				s, s->msg_callback_arg);
   2724 
   2725 		s->tlsext_hb_pending = 1;
   2726 		}
   2727 
   2728 	OPENSSL_free(buf);
   2729 
   2730 	return ret;
   2731 	}
   2732 #endif
   2733