Option to disable padding extension.
[openssl.git] / ssl / t1_lib.c
1 /* ssl/t1_lib.c */
2 /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3  * All rights reserved.
4  *
5  * This package is an SSL implementation written
6  * by Eric Young (eay@cryptsoft.com).
7  * The implementation was written so as to conform with Netscapes SSL.
8  * 
9  * This library is free for commercial and non-commercial use as long as
10  * the following conditions are aheared to.  The following conditions
11  * apply to all code found in this distribution, be it the RC4, RSA,
12  * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
13  * included with this distribution is covered by the same copyright terms
14  * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15  * 
16  * Copyright remains Eric Young's, and as such any Copyright notices in
17  * the code are not to be removed.
18  * If this package is used in a product, Eric Young should be given attribution
19  * as the author of the parts of the library used.
20  * This can be in the form of a textual message at program startup or
21  * in documentation (online or textual) provided with the package.
22  * 
23  * Redistribution and use in source and binary forms, with or without
24  * modification, are permitted provided that the following conditions
25  * are met:
26  * 1. Redistributions of source code must retain the copyright
27  *    notice, this list of conditions and the following disclaimer.
28  * 2. Redistributions in binary form must reproduce the above copyright
29  *    notice, this list of conditions and the following disclaimer in the
30  *    documentation and/or other materials provided with the distribution.
31  * 3. All advertising materials mentioning features or use of this software
32  *    must display the following acknowledgement:
33  *    "This product includes cryptographic software written by
34  *     Eric Young (eay@cryptsoft.com)"
35  *    The word 'cryptographic' can be left out if the rouines from the library
36  *    being used are not cryptographic related :-).
37  * 4. If you include any Windows specific code (or a derivative thereof) from 
38  *    the apps directory (application code) you must include an acknowledgement:
39  *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40  * 
41  * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
44  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
45  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
46  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
47  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
49  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
50  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51  * SUCH DAMAGE.
52  * 
53  * The licence and distribution terms for any publically available version or
54  * derivative of this code cannot be changed.  i.e. this code cannot simply be
55  * copied and put under another distribution licence
56  * [including the GNU Public Licence.]
57  */
58 /* ====================================================================
59  * Copyright (c) 1998-2007 The OpenSSL Project.  All rights reserved.
60  *
61  * Redistribution and use in source and binary forms, with or without
62  * modification, are permitted provided that the following conditions
63  * are met:
64  *
65  * 1. Redistributions of source code must retain the above copyright
66  *    notice, this list of conditions and the following disclaimer. 
67  *
68  * 2. Redistributions in binary form must reproduce the above copyright
69  *    notice, this list of conditions and the following disclaimer in
70  *    the documentation and/or other materials provided with the
71  *    distribution.
72  *
73  * 3. All advertising materials mentioning features or use of this
74  *    software must display the following acknowledgment:
75  *    "This product includes software developed by the OpenSSL Project
76  *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
77  *
78  * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
79  *    endorse or promote products derived from this software without
80  *    prior written permission. For written permission, please contact
81  *    openssl-core@openssl.org.
82  *
83  * 5. Products derived from this software may not be called "OpenSSL"
84  *    nor may "OpenSSL" appear in their names without prior written
85  *    permission of the OpenSSL Project.
86  *
87  * 6. Redistributions of any form whatsoever must retain the following
88  *    acknowledgment:
89  *    "This product includes software developed by the OpenSSL Project
90  *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
91  *
92  * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
93  * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
94  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
95  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
96  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
97  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
98  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
99  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
100  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
101  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
102  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
103  * OF THE POSSIBILITY OF SUCH DAMAGE.
104  * ====================================================================
105  *
106  * This product includes cryptographic software written by Eric Young
107  * (eay@cryptsoft.com).  This product includes software written by Tim
108  * Hudson (tjh@cryptsoft.com).
109  *
110  */
111
112 #include <stdio.h>
113 #include <openssl/objects.h>
114 #include <openssl/evp.h>
115 #include <openssl/hmac.h>
116 #include <openssl/ocsp.h>
117 #include <openssl/rand.h>
118 #ifndef OPENSSL_NO_DH
119 #include <openssl/dh.h>
120 #include <openssl/bn.h>
121 #endif
122 #include "ssl_locl.h"
123
124 const char tls1_version_str[]="TLSv1" OPENSSL_VERSION_PTEXT;
125
126 #ifndef OPENSSL_NO_TLSEXT
127 static int tls_decrypt_ticket(SSL *s, const unsigned char *tick, int ticklen,
128                                 const unsigned char *sess_id, int sesslen,
129                                 SSL_SESSION **psess);
130 static int ssl_check_clienthello_tlsext_early(SSL *s);
131 int ssl_check_serverhello_tlsext(SSL *s);
132 #endif
133
134 SSL3_ENC_METHOD TLSv1_enc_data={
135         tls1_enc,
136         tls1_mac,
137         tls1_setup_key_block,
138         tls1_generate_master_secret,
139         tls1_change_cipher_state,
140         tls1_final_finish_mac,
141         TLS1_FINISH_MAC_LENGTH,
142         tls1_cert_verify_mac,
143         TLS_MD_CLIENT_FINISH_CONST,TLS_MD_CLIENT_FINISH_CONST_SIZE,
144         TLS_MD_SERVER_FINISH_CONST,TLS_MD_SERVER_FINISH_CONST_SIZE,
145         tls1_alert_code,
146         tls1_export_keying_material,
147         0,
148         SSL3_HM_HEADER_LENGTH,
149         ssl3_set_handshake_header,
150         ssl3_handshake_write
151         };
152
153 SSL3_ENC_METHOD TLSv1_1_enc_data={
154         tls1_enc,
155         tls1_mac,
156         tls1_setup_key_block,
157         tls1_generate_master_secret,
158         tls1_change_cipher_state,
159         tls1_final_finish_mac,
160         TLS1_FINISH_MAC_LENGTH,
161         tls1_cert_verify_mac,
162         TLS_MD_CLIENT_FINISH_CONST,TLS_MD_CLIENT_FINISH_CONST_SIZE,
163         TLS_MD_SERVER_FINISH_CONST,TLS_MD_SERVER_FINISH_CONST_SIZE,
164         tls1_alert_code,
165         tls1_export_keying_material,
166         SSL_ENC_FLAG_EXPLICIT_IV,
167         SSL3_HM_HEADER_LENGTH,
168         ssl3_set_handshake_header,
169         ssl3_handshake_write
170         };
171
172 SSL3_ENC_METHOD TLSv1_2_enc_data={
173         tls1_enc,
174         tls1_mac,
175         tls1_setup_key_block,
176         tls1_generate_master_secret,
177         tls1_change_cipher_state,
178         tls1_final_finish_mac,
179         TLS1_FINISH_MAC_LENGTH,
180         tls1_cert_verify_mac,
181         TLS_MD_CLIENT_FINISH_CONST,TLS_MD_CLIENT_FINISH_CONST_SIZE,
182         TLS_MD_SERVER_FINISH_CONST,TLS_MD_SERVER_FINISH_CONST_SIZE,
183         tls1_alert_code,
184         tls1_export_keying_material,
185         SSL_ENC_FLAG_EXPLICIT_IV|SSL_ENC_FLAG_SIGALGS|SSL_ENC_FLAG_SHA256_PRF
186                 |SSL_ENC_FLAG_TLS1_2_CIPHERS,
187         SSL3_HM_HEADER_LENGTH,
188         ssl3_set_handshake_header,
189         ssl3_handshake_write
190         };
191
192 long tls1_default_timeout(void)
193         {
194         /* 2 hours, the 24 hours mentioned in the TLSv1 spec
195          * is way too long for http, the cache would over fill */
196         return(60*60*2);
197         }
198
199 int tls1_new(SSL *s)
200         {
201         if (!ssl3_new(s)) return(0);
202         s->method->ssl_clear(s);
203         return(1);
204         }
205
206 void tls1_free(SSL *s)
207         {
208 #ifndef OPENSSL_NO_TLSEXT
209         if (s->tlsext_session_ticket)
210                 {
211                 OPENSSL_free(s->tlsext_session_ticket);
212                 }
213 #endif /* OPENSSL_NO_TLSEXT */
214         ssl3_free(s);
215         }
216
217 void tls1_clear(SSL *s)
218         {
219         ssl3_clear(s);
220         s->version = s->method->version;
221         }
222
223 #ifndef OPENSSL_NO_EC
224
225 typedef struct
226         {
227         int nid;                /* Curve NID */
228         int secbits;            /* Bits of security (from SP800-57) */
229         unsigned int flags;     /* Flags: currently just field type */
230         } tls_curve_info;
231
232 #define TLS_CURVE_CHAR2         0x1
233 #define TLS_CURVE_PRIME         0x0
234
235 static tls_curve_info nid_list[] =
236         {
237                 {NID_sect163k1, 80, TLS_CURVE_CHAR2},/* sect163k1 (1) */
238                 {NID_sect163r1, 80, TLS_CURVE_CHAR2},/* sect163r1 (2) */
239                 {NID_sect163r2, 80, TLS_CURVE_CHAR2},/* sect163r2 (3) */
240                 {NID_sect193r1, 80, TLS_CURVE_CHAR2},/* sect193r1 (4) */ 
241                 {NID_sect193r2, 80, TLS_CURVE_CHAR2},/* sect193r2 (5) */ 
242                 {NID_sect233k1, 112, TLS_CURVE_CHAR2},/* sect233k1 (6) */
243                 {NID_sect233r1, 112, TLS_CURVE_CHAR2},/* sect233r1 (7) */ 
244                 {NID_sect239k1, 112, TLS_CURVE_CHAR2},/* sect239k1 (8) */ 
245                 {NID_sect283k1, 128, TLS_CURVE_CHAR2},/* sect283k1 (9) */
246                 {NID_sect283r1, 128, TLS_CURVE_CHAR2},/* sect283r1 (10) */ 
247                 {NID_sect409k1, 192, TLS_CURVE_CHAR2},/* sect409k1 (11) */ 
248                 {NID_sect409r1, 192, TLS_CURVE_CHAR2},/* sect409r1 (12) */
249                 {NID_sect571k1, 256, TLS_CURVE_CHAR2},/* sect571k1 (13) */ 
250                 {NID_sect571r1, 256, TLS_CURVE_CHAR2},/* sect571r1 (14) */ 
251                 {NID_secp160k1, 80, TLS_CURVE_PRIME},/* secp160k1 (15) */
252                 {NID_secp160r1, 80, TLS_CURVE_PRIME},/* secp160r1 (16) */ 
253                 {NID_secp160r2, 80, TLS_CURVE_PRIME},/* secp160r2 (17) */ 
254                 {NID_secp192k1, 80, TLS_CURVE_PRIME},/* secp192k1 (18) */
255                 {NID_X9_62_prime192v1, 80, TLS_CURVE_PRIME},/* secp192r1 (19) */ 
256                 {NID_secp224k1, 112, TLS_CURVE_PRIME},/* secp224k1 (20) */ 
257                 {NID_secp224r1, 112, TLS_CURVE_PRIME},/* secp224r1 (21) */
258                 {NID_secp256k1, 128, TLS_CURVE_PRIME},/* secp256k1 (22) */ 
259                 {NID_X9_62_prime256v1, 128, TLS_CURVE_PRIME},/* secp256r1 (23) */ 
260                 {NID_secp384r1, 192, TLS_CURVE_PRIME},/* secp384r1 (24) */
261                 {NID_secp521r1, 256, TLS_CURVE_PRIME},/* secp521r1 (25) */      
262                 {NID_brainpoolP256r1, 128, TLS_CURVE_PRIME}, /* brainpoolP256r1 (26) */ 
263                 {NID_brainpoolP384r1, 192, TLS_CURVE_PRIME}, /* brainpoolP384r1 (27) */ 
264                 {NID_brainpoolP512r1, 256, TLS_CURVE_PRIME},/* brainpool512r1 (28) */   
265         };
266
267
268 static const unsigned char ecformats_default[] = 
269         {
270         TLSEXT_ECPOINTFORMAT_uncompressed,
271         TLSEXT_ECPOINTFORMAT_ansiX962_compressed_prime,
272         TLSEXT_ECPOINTFORMAT_ansiX962_compressed_char2
273         };
274
275 static const unsigned char eccurves_default[] =
276         {
277                 0,14, /* sect571r1 (14) */ 
278                 0,13, /* sect571k1 (13) */ 
279                 0,25, /* secp521r1 (25) */      
280                 0,28, /* brainpool512r1 (28) */ 
281                 0,11, /* sect409k1 (11) */ 
282                 0,12, /* sect409r1 (12) */
283                 0,27, /* brainpoolP384r1 (27) */        
284                 0,24, /* secp384r1 (24) */
285                 0,9,  /* sect283k1 (9) */
286                 0,10, /* sect283r1 (10) */ 
287                 0,26, /* brainpoolP256r1 (26) */        
288                 0,22, /* secp256k1 (22) */ 
289                 0,23, /* secp256r1 (23) */ 
290                 0,8,  /* sect239k1 (8) */ 
291                 0,6,  /* sect233k1 (6) */
292                 0,7,  /* sect233r1 (7) */ 
293                 0,20, /* secp224k1 (20) */ 
294                 0,21, /* secp224r1 (21) */
295                 0,4,  /* sect193r1 (4) */ 
296                 0,5,  /* sect193r2 (5) */ 
297                 0,18, /* secp192k1 (18) */
298                 0,19, /* secp192r1 (19) */ 
299                 0,1,  /* sect163k1 (1) */
300                 0,2,  /* sect163r1 (2) */
301                 0,3,  /* sect163r2 (3) */
302                 0,15, /* secp160k1 (15) */
303                 0,16, /* secp160r1 (16) */ 
304                 0,17, /* secp160r2 (17) */ 
305         };
306
307 static const unsigned char suiteb_curves[] =
308         {
309                 0, TLSEXT_curve_P_256,
310                 0, TLSEXT_curve_P_384
311         };
312
313 int tls1_ec_curve_id2nid(int curve_id)
314         {
315         /* ECC curves from draft-ietf-tls-ecc-12.txt (Oct. 17, 2005) */
316         if ((curve_id < 1) || ((unsigned int)curve_id >
317                                 sizeof(nid_list)/sizeof(nid_list[0])))
318                 return 0;
319         return nid_list[curve_id-1].nid;
320         }
321
322 int tls1_ec_nid2curve_id(int nid)
323         {
324         /* ECC curves from draft-ietf-tls-ecc-12.txt (Oct. 17, 2005) */
325         switch (nid)
326                 {
327         case NID_sect163k1: /* sect163k1 (1) */
328                 return 1;
329         case NID_sect163r1: /* sect163r1 (2) */
330                 return 2;
331         case NID_sect163r2: /* sect163r2 (3) */
332                 return 3;
333         case NID_sect193r1: /* sect193r1 (4) */ 
334                 return 4;
335         case NID_sect193r2: /* sect193r2 (5) */ 
336                 return 5;
337         case NID_sect233k1: /* sect233k1 (6) */
338                 return 6;
339         case NID_sect233r1: /* sect233r1 (7) */ 
340                 return 7;
341         case NID_sect239k1: /* sect239k1 (8) */ 
342                 return 8;
343         case NID_sect283k1: /* sect283k1 (9) */
344                 return 9;
345         case NID_sect283r1: /* sect283r1 (10) */ 
346                 return 10;
347         case NID_sect409k1: /* sect409k1 (11) */ 
348                 return 11;
349         case NID_sect409r1: /* sect409r1 (12) */
350                 return 12;
351         case NID_sect571k1: /* sect571k1 (13) */ 
352                 return 13;
353         case NID_sect571r1: /* sect571r1 (14) */ 
354                 return 14;
355         case NID_secp160k1: /* secp160k1 (15) */
356                 return 15;
357         case NID_secp160r1: /* secp160r1 (16) */ 
358                 return 16;
359         case NID_secp160r2: /* secp160r2 (17) */ 
360                 return 17;
361         case NID_secp192k1: /* secp192k1 (18) */
362                 return 18;
363         case NID_X9_62_prime192v1: /* secp192r1 (19) */ 
364                 return 19;
365         case NID_secp224k1: /* secp224k1 (20) */ 
366                 return 20;
367         case NID_secp224r1: /* secp224r1 (21) */
368                 return 21;
369         case NID_secp256k1: /* secp256k1 (22) */ 
370                 return 22;
371         case NID_X9_62_prime256v1: /* secp256r1 (23) */ 
372                 return 23;
373         case NID_secp384r1: /* secp384r1 (24) */
374                 return 24;
375         case NID_secp521r1:  /* secp521r1 (25) */       
376                 return 25;
377         case NID_brainpoolP256r1:  /* brainpoolP256r1 (26) */
378                 return 26;
379         case NID_brainpoolP384r1:  /* brainpoolP384r1 (27) */
380                 return 27;
381         case NID_brainpoolP512r1:  /* brainpool512r1 (28) */
382                 return 28;
383         default:
384                 return 0;
385                 }
386         }
387 /* Get curves list, if "sess" is set return client curves otherwise
388  * preferred list
389  */
390 static void tls1_get_curvelist(SSL *s, int sess,
391                                         const unsigned char **pcurves,
392                                         size_t *pcurveslen)
393         {
394         if (sess)
395                 {
396                 *pcurves = s->session->tlsext_ellipticcurvelist;
397                 *pcurveslen = s->session->tlsext_ellipticcurvelist_length;
398                 return;
399                 }
400         /* For Suite B mode only include P-256, P-384 */
401         switch (tls1_suiteb(s))
402                 {
403         case SSL_CERT_FLAG_SUITEB_128_LOS:
404                 *pcurves = suiteb_curves;
405                 *pcurveslen = sizeof(suiteb_curves);
406                 break;
407
408         case SSL_CERT_FLAG_SUITEB_128_LOS_ONLY:
409                 *pcurves = suiteb_curves;
410                 *pcurveslen = 2;
411                 break;
412
413         case SSL_CERT_FLAG_SUITEB_192_LOS:
414                 *pcurves = suiteb_curves + 2;
415                 *pcurveslen = 2;
416                 break;
417         default:
418                 *pcurves = s->tlsext_ellipticcurvelist;
419                 *pcurveslen = s->tlsext_ellipticcurvelist_length;
420                 }
421         if (!*pcurves)
422                 {
423                 *pcurves = eccurves_default;
424                 *pcurveslen = sizeof(eccurves_default);
425                 }
426         }
427
428 /* See if curve is allowed by security callback */
429 static int tls_curve_allowed(SSL *s, const unsigned char *curve, int op)
430         {
431         tls_curve_info *cinfo;
432         if (curve[0])
433                 return 1;
434         if ((curve[1] < 1) || ((size_t)curve[1] >
435                                 sizeof(nid_list)/sizeof(nid_list[0])))
436                 return 0;
437         cinfo = &nid_list[curve[1]-1];
438         return ssl_security(s, op, cinfo->secbits, cinfo->nid, (void *)curve);
439         }
440
441 /* Check a curve is one of our preferences */
442 int tls1_check_curve(SSL *s, const unsigned char *p, size_t len)
443         {
444         const unsigned char *curves;
445         size_t curveslen, i;
446         unsigned int suiteb_flags = tls1_suiteb(s);
447         if (len != 3 || p[0] != NAMED_CURVE_TYPE)
448                 return 0;
449         /* Check curve matches Suite B preferences */
450         if (suiteb_flags)
451                 {
452                 unsigned long cid = s->s3->tmp.new_cipher->id;
453                 if (p[1])
454                         return 0;
455                 if (cid == TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256)
456                         {
457                         if (p[2] != TLSEXT_curve_P_256)
458                                 return 0;
459                         }
460                 else if (cid == TLS1_CK_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384)
461                         {
462                         if (p[2] != TLSEXT_curve_P_384)
463                                 return 0;
464                         }
465                 else    /* Should never happen */
466                         return 0;
467                 }
468         tls1_get_curvelist(s, 0, &curves, &curveslen);
469         for (i = 0; i < curveslen; i += 2, curves += 2)
470                 {
471                 if (p[1] == curves[0] && p[2] == curves[1])
472                         return tls_curve_allowed(s, p + 1, SSL_SECOP_CURVE_CHECK);
473                 }
474         return 0;
475         }
476
477 /* Return nth shared curve. If nmatch == -1 return number of
478  * matches. For nmatch == -2 return the NID of the curve to use for
479  * an EC tmp key.
480  */
481
482 int tls1_shared_curve(SSL *s, int nmatch)
483         {
484         const unsigned char *pref, *supp;
485         size_t preflen, supplen, i, j;
486         int k;
487         /* Can't do anything on client side */
488         if (s->server == 0)
489                 return -1;
490         if (nmatch == -2)
491                 {
492                 if (tls1_suiteb(s))
493                         {
494                         /* For Suite B ciphersuite determines curve: we 
495                          * already know these are acceptable due to previous
496                          * checks.
497                          */
498                         unsigned long cid = s->s3->tmp.new_cipher->id;
499                         if (cid == TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256)
500                                 return NID_X9_62_prime256v1; /* P-256 */
501                         if (cid == TLS1_CK_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384)
502                                 return NID_secp384r1; /* P-384 */
503                         /* Should never happen */
504                         return NID_undef;
505                         }
506                 /* If not Suite B just return first preference shared curve */
507                 nmatch = 0;
508                 }
509         tls1_get_curvelist(s, !!(s->options & SSL_OP_CIPHER_SERVER_PREFERENCE),
510                                 &supp, &supplen);
511         tls1_get_curvelist(s, !(s->options & SSL_OP_CIPHER_SERVER_PREFERENCE),
512                                 &pref, &preflen);
513         preflen /= 2;
514         supplen /= 2;
515         k = 0;
516         for (i = 0; i < preflen; i++, pref+=2)
517                 {
518                 const unsigned char *tsupp = supp;
519                 for (j = 0; j < supplen; j++, tsupp+=2)
520                         {
521                         if (pref[0] == tsupp[0] && pref[1] == tsupp[1])
522                                 {
523                                 if (!tls_curve_allowed(s, pref, SSL_SECOP_CURVE_SHARED))
524                                         continue;
525                                 if (nmatch == k)
526                                         {
527                                         int id = (pref[0] << 8) | pref[1];
528                                         return tls1_ec_curve_id2nid(id);
529                                         }
530                                 k++;
531                                 }
532                         }
533                 }
534         if (nmatch == -1)
535                 return k;
536         return 0;
537         }
538
539 int tls1_set_curves(unsigned char **pext, size_t *pextlen,
540                         int *curves, size_t ncurves)
541         {
542         unsigned char *clist, *p;
543         size_t i;
544         /* Bitmap of curves included to detect duplicates: only works
545          * while curve ids < 32 
546          */
547         unsigned long dup_list = 0;
548         clist = OPENSSL_malloc(ncurves * 2);
549         if (!clist)
550                 return 0;
551         for (i = 0, p = clist; i < ncurves; i++)
552                 {
553                 unsigned long idmask;
554                 int id;
555                 id = tls1_ec_nid2curve_id(curves[i]);
556                 idmask = 1L << id;
557                 if (!id || (dup_list & idmask))
558                         {
559                         OPENSSL_free(clist);
560                         return 0;
561                         }
562                 dup_list |= idmask;
563                 s2n(id, p);
564                 }
565         if (*pext)
566                 OPENSSL_free(*pext);
567         *pext = clist;
568         *pextlen = ncurves * 2;
569         return 1;
570         }
571
572 #define MAX_CURVELIST   28
573
574 typedef struct
575         {
576         size_t nidcnt;
577         int nid_arr[MAX_CURVELIST];
578         } nid_cb_st;
579
580 static int nid_cb(const char *elem, int len, void *arg)
581         {
582         nid_cb_st *narg = arg;
583         size_t i;
584         int nid;
585         char etmp[20];
586         if (narg->nidcnt == MAX_CURVELIST)
587                 return 0;
588         if (len > (int)(sizeof(etmp) - 1))
589                 return 0;
590         memcpy(etmp, elem, len);
591         etmp[len] = 0;
592         nid = EC_curve_nist2nid(etmp);
593         if (nid == NID_undef)
594                 nid = OBJ_sn2nid(etmp);
595         if (nid == NID_undef)
596                 nid = OBJ_ln2nid(etmp);
597         if (nid == NID_undef)
598                 return 0;
599         for (i = 0; i < narg->nidcnt; i++)
600                 if (narg->nid_arr[i] == nid)
601                         return 0;
602         narg->nid_arr[narg->nidcnt++] = nid;
603         return 1;
604         }
605 /* Set curves based on a colon separate list */
606 int tls1_set_curves_list(unsigned char **pext, size_t *pextlen, 
607                                 const char *str)
608         {
609         nid_cb_st ncb;
610         ncb.nidcnt = 0;
611         if (!CONF_parse_list(str, ':', 1, nid_cb, &ncb))
612                 return 0;
613         if (pext == NULL)
614                 return 1;
615         return tls1_set_curves(pext, pextlen, ncb.nid_arr, ncb.nidcnt);
616         }
617 /* For an EC key set TLS id and required compression based on parameters */
618 static int tls1_set_ec_id(unsigned char *curve_id, unsigned char *comp_id,
619                                 EC_KEY *ec)
620         {
621         int is_prime, id;
622         const EC_GROUP *grp;
623         const EC_METHOD *meth;
624         if (!ec)
625                 return 0;
626         /* Determine if it is a prime field */
627         grp = EC_KEY_get0_group(ec);
628         if (!grp)
629                 return 0;
630         meth = EC_GROUP_method_of(grp);
631         if (!meth)
632                 return 0;
633         if (EC_METHOD_get_field_type(meth) == NID_X9_62_prime_field)
634                 is_prime = 1;
635         else
636                 is_prime = 0;
637         /* Determine curve ID */
638         id = EC_GROUP_get_curve_name(grp);
639         id = tls1_ec_nid2curve_id(id);
640         /* If we have an ID set it, otherwise set arbitrary explicit curve */
641         if (id)
642                 {
643                 curve_id[0] = 0;
644                 curve_id[1] = (unsigned char)id;
645                 }
646         else
647                 {
648                 curve_id[0] = 0xff;
649                 if (is_prime)
650                         curve_id[1] = 0x01;
651                 else
652                         curve_id[1] = 0x02;
653                 }
654         if (comp_id)
655                 {
656                 if (EC_KEY_get0_public_key(ec) == NULL)
657                         return 0;
658                 if (EC_KEY_get_conv_form(ec) == POINT_CONVERSION_COMPRESSED)
659                         {
660                         if (is_prime)
661                                 *comp_id = TLSEXT_ECPOINTFORMAT_ansiX962_compressed_prime;
662                         else
663                                 *comp_id = TLSEXT_ECPOINTFORMAT_ansiX962_compressed_char2;
664                         }
665                 else
666                         *comp_id = TLSEXT_ECPOINTFORMAT_uncompressed;
667                 }
668         return 1;
669         }
670 /* Check an EC key is compatible with extensions */
671 static int tls1_check_ec_key(SSL *s,
672                         unsigned char *curve_id, unsigned char *comp_id)
673         {
674         const unsigned char *p;
675         size_t plen, i;
676         int j;
677         /* If point formats extension present check it, otherwise everything
678          * is supported (see RFC4492).
679          */
680         if (comp_id && s->session->tlsext_ecpointformatlist)
681                 {
682                 p = s->session->tlsext_ecpointformatlist;
683                 plen = s->session->tlsext_ecpointformatlist_length;
684                 for (i = 0; i < plen; i++, p++)
685                         {
686                         if (*comp_id == *p)
687                                 break;
688                         }
689                 if (i == plen)
690                         return 0;
691                 }
692         if (!curve_id)
693                 return 1;
694         /* Check curve is consistent with client and server preferences */
695         for (j = 0; j <= 1; j++)
696                 {
697                 tls1_get_curvelist(s, j, &p, &plen);
698                 for (i = 0; i < plen; i+=2, p+=2)
699                         {
700                         if (p[0] == curve_id[0] && p[1] == curve_id[1])
701                                 break;
702                         }
703                 if (i == plen)
704                         return 0;
705                 /* For clients can only check sent curve list */
706                 if (!s->server)
707                         break;
708                 }
709         return 1;
710         }
711
712 static void tls1_get_formatlist(SSL *s, const unsigned char **pformats,
713                                         size_t *pformatslen)
714         {
715         /* If we have a custom point format list use it otherwise
716          * use default */
717         if (s->tlsext_ecpointformatlist)
718                 {
719                 *pformats = s->tlsext_ecpointformatlist;
720                 *pformatslen = s->tlsext_ecpointformatlist_length;
721                 }
722         else
723                 {
724                 *pformats = ecformats_default;
725                 /* For Suite B we don't support char2 fields */
726                 if (tls1_suiteb(s))
727                         *pformatslen = sizeof(ecformats_default) - 1;
728                 else
729                         *pformatslen = sizeof(ecformats_default);
730                 }
731         }
732
733 /* Check cert parameters compatible with extensions: currently just checks
734  * EC certificates have compatible curves and compression.
735  */
736 static int tls1_check_cert_param(SSL *s, X509 *x, int set_ee_md)
737         {
738         unsigned char comp_id, curve_id[2];
739         EVP_PKEY *pkey;
740         int rv;
741         pkey = X509_get_pubkey(x);
742         if (!pkey)
743                 return 0;
744         /* If not EC nothing to do */
745         if (pkey->type != EVP_PKEY_EC)
746                 {
747                 EVP_PKEY_free(pkey);
748                 return 1;
749                 }
750         rv = tls1_set_ec_id(curve_id, &comp_id, pkey->pkey.ec);
751         EVP_PKEY_free(pkey);
752         if (!rv)
753                 return 0;
754         /* Can't check curve_id for client certs as we don't have a
755          * supported curves extension.
756          */
757         rv = tls1_check_ec_key(s, s->server ? curve_id : NULL, &comp_id);
758         if (!rv)
759                 return 0;
760         /* Special case for suite B. We *MUST* sign using SHA256+P-256 or
761          * SHA384+P-384, adjust digest if necessary.
762          */
763         if (set_ee_md && tls1_suiteb(s))
764                 {
765                 int check_md;
766                 size_t i;
767                 CERT *c = s->cert;
768                 if (curve_id[0])
769                         return 0;
770                 /* Check to see we have necessary signing algorithm */
771                 if (curve_id[1] == TLSEXT_curve_P_256)
772                         check_md = NID_ecdsa_with_SHA256;
773                 else if (curve_id[1] == TLSEXT_curve_P_384)
774                         check_md = NID_ecdsa_with_SHA384;
775                 else
776                         return 0; /* Should never happen */
777                 for (i = 0; i < c->shared_sigalgslen; i++)
778                         if (check_md == c->shared_sigalgs[i].signandhash_nid)
779                                 break;
780                 if (i == c->shared_sigalgslen)
781                         return 0;
782                 if (set_ee_md == 2)
783                         {
784                         if (check_md == NID_ecdsa_with_SHA256)
785                                 c->pkeys[SSL_PKEY_ECC].digest = EVP_sha256();
786                         else
787                                 c->pkeys[SSL_PKEY_ECC].digest = EVP_sha384();
788                         }
789                 }
790         return rv;
791         }
792 /* Check EC temporary key is compatible with client extensions */
793 int tls1_check_ec_tmp_key(SSL *s, unsigned long cid)
794         {
795         unsigned char curve_id[2];
796         EC_KEY *ec = s->cert->ecdh_tmp;
797 #ifdef OPENSSL_SSL_DEBUG_BROKEN_PROTOCOL
798         /* Allow any curve: not just those peer supports */
799         if (s->cert->cert_flags & SSL_CERT_FLAG_BROKEN_PROTOCOL)
800                 return 1;
801 #endif
802         /* If Suite B, AES128 MUST use P-256 and AES256 MUST use P-384,
803          * no other curves permitted.
804          */
805         if (tls1_suiteb(s))
806                 {
807                 /* Curve to check determined by ciphersuite */
808                 if (cid == TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256)
809                         curve_id[1] = TLSEXT_curve_P_256;
810                 else if (cid == TLS1_CK_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384)
811                         curve_id[1] = TLSEXT_curve_P_384;
812                 else
813                         return 0;
814                 curve_id[0] = 0;
815                 /* Check this curve is acceptable */
816                 if (!tls1_check_ec_key(s, curve_id, NULL))
817                         return 0;
818                 /* If auto or setting curve from callback assume OK */
819                 if (s->cert->ecdh_tmp_auto || s->cert->ecdh_tmp_cb)
820                         return 1;
821                 /* Otherwise check curve is acceptable */
822                 else 
823                         {
824                         unsigned char curve_tmp[2];
825                         if (!ec)
826                                 return 0;
827                         if (!tls1_set_ec_id(curve_tmp, NULL, ec))
828                                 return 0;
829                         if (!curve_tmp[0] || curve_tmp[1] == curve_id[1])
830                                 return 1;
831                         return 0;
832                         }
833                         
834                 }
835         if (s->cert->ecdh_tmp_auto)
836                 {
837                 /* Need a shared curve */
838                 if (tls1_shared_curve(s, 0))
839                         return 1;
840                 else return 0;
841                 }
842         if (!ec)
843                 {
844                 if (s->cert->ecdh_tmp_cb)
845                         return 1;
846                 else
847                         return 0;
848                 }
849         if (!tls1_set_ec_id(curve_id, NULL, ec))
850                 return 0;
851 /* Set this to allow use of invalid curves for testing */
852 #if 0
853         return 1;
854 #else
855         return tls1_check_ec_key(s, curve_id, NULL);
856 #endif
857         }
858
859 #else
860
861 static int tls1_check_cert_param(SSL *s, X509 *x, int set_ee_md)
862         {
863         return 1;
864         }
865
866 #endif /* OPENSSL_NO_EC */
867
868 #ifndef OPENSSL_NO_TLSEXT
869
870 /* List of supported signature algorithms and hashes. Should make this
871  * customisable at some point, for now include everything we support.
872  */
873
874 #ifdef OPENSSL_NO_RSA
875 #define tlsext_sigalg_rsa(md) /* */
876 #else
877 #define tlsext_sigalg_rsa(md) md, TLSEXT_signature_rsa,
878 #endif
879
880 #ifdef OPENSSL_NO_DSA
881 #define tlsext_sigalg_dsa(md) /* */
882 #else
883 #define tlsext_sigalg_dsa(md) md, TLSEXT_signature_dsa,
884 #endif
885
886 #ifdef OPENSSL_NO_ECDSA
887 #define tlsext_sigalg_ecdsa(md) /* */
888 #else
889 #define tlsext_sigalg_ecdsa(md) md, TLSEXT_signature_ecdsa,
890 #endif
891
892 #define tlsext_sigalg(md) \
893                 tlsext_sigalg_rsa(md) \
894                 tlsext_sigalg_dsa(md) \
895                 tlsext_sigalg_ecdsa(md)
896
897 static unsigned char tls12_sigalgs[] = {
898 #ifndef OPENSSL_NO_SHA512
899         tlsext_sigalg(TLSEXT_hash_sha512)
900         tlsext_sigalg(TLSEXT_hash_sha384)
901 #endif
902 #ifndef OPENSSL_NO_SHA256
903         tlsext_sigalg(TLSEXT_hash_sha256)
904         tlsext_sigalg(TLSEXT_hash_sha224)
905 #endif
906 #ifndef OPENSSL_NO_SHA
907         tlsext_sigalg(TLSEXT_hash_sha1)
908 #endif
909 };
910 #ifndef OPENSSL_NO_ECDSA
911 static unsigned char suiteb_sigalgs[] = {
912         tlsext_sigalg_ecdsa(TLSEXT_hash_sha256)
913         tlsext_sigalg_ecdsa(TLSEXT_hash_sha384)
914 };
915 #endif
916 size_t tls12_get_psigalgs(SSL *s, const unsigned char **psigs)
917         {
918         /* If Suite B mode use Suite B sigalgs only, ignore any other
919          * preferences.
920          */
921 #ifndef OPENSSL_NO_EC
922         switch (tls1_suiteb(s))
923                 {
924         case SSL_CERT_FLAG_SUITEB_128_LOS:
925                 *psigs = suiteb_sigalgs;
926                 return sizeof(suiteb_sigalgs);
927
928         case SSL_CERT_FLAG_SUITEB_128_LOS_ONLY:
929                 *psigs = suiteb_sigalgs;
930                 return 2;
931
932         case SSL_CERT_FLAG_SUITEB_192_LOS:
933                 *psigs = suiteb_sigalgs + 2;
934                 return 2;
935                 }
936 #endif
937         /* If server use client authentication sigalgs if not NULL */
938         if (s->server && s->cert->client_sigalgs)
939                 {
940                 *psigs = s->cert->client_sigalgs;
941                 return s->cert->client_sigalgslen;
942                 }
943         else if (s->cert->conf_sigalgs)
944                 {
945                 *psigs = s->cert->conf_sigalgs;
946                 return s->cert->conf_sigalgslen;
947                 }
948         else
949                 {
950                 *psigs = tls12_sigalgs;
951                 return sizeof(tls12_sigalgs);
952                 }
953         }
954 /* Check signature algorithm is consistent with sent supported signature
955  * algorithms and if so return relevant digest.
956  */
957 int tls12_check_peer_sigalg(const EVP_MD **pmd, SSL *s,
958                                 const unsigned char *sig, EVP_PKEY *pkey)
959         {
960         const unsigned char *sent_sigs;
961         size_t sent_sigslen, i;
962         int sigalg = tls12_get_sigid(pkey);
963         /* Should never happen */
964         if (sigalg == -1)
965                 return -1;
966         /* Check key type is consistent with signature */
967         if (sigalg != (int)sig[1])
968                 {
969                 SSLerr(SSL_F_TLS12_CHECK_PEER_SIGALG,SSL_R_WRONG_SIGNATURE_TYPE);
970                 return 0;
971                 }
972 #ifndef OPENSSL_NO_EC
973         if (pkey->type == EVP_PKEY_EC)
974                 {
975                 unsigned char curve_id[2], comp_id;
976                 /* Check compression and curve matches extensions */
977                 if (!tls1_set_ec_id(curve_id, &comp_id, pkey->pkey.ec))
978                         return 0;
979                 if (!s->server && !tls1_check_ec_key(s, curve_id, &comp_id))
980                         {
981                         SSLerr(SSL_F_TLS12_CHECK_PEER_SIGALG,SSL_R_WRONG_CURVE);
982                         return 0;
983                         }
984                 /* If Suite B only P-384+SHA384 or P-256+SHA-256 allowed */
985                 if (tls1_suiteb(s))
986                         {
987                         if (curve_id[0])
988                                 return 0;
989                         if (curve_id[1] == TLSEXT_curve_P_256)
990                                 {
991                                 if (sig[0] != TLSEXT_hash_sha256)
992                                         {
993                                         SSLerr(SSL_F_TLS12_CHECK_PEER_SIGALG,
994                                                 SSL_R_ILLEGAL_SUITEB_DIGEST);
995                                         return 0;
996                                         }
997                                 }
998                         else if (curve_id[1] == TLSEXT_curve_P_384)
999                                 {
1000                                 if (sig[0] != TLSEXT_hash_sha384)
1001                                         {
1002                                         SSLerr(SSL_F_TLS12_CHECK_PEER_SIGALG,
1003                                                 SSL_R_ILLEGAL_SUITEB_DIGEST);
1004                                         return 0;
1005                                         }
1006                                 }
1007                         else
1008                                 return 0;
1009                         }
1010                 }
1011         else if (tls1_suiteb(s))
1012                 return 0;
1013 #endif
1014
1015         /* Check signature matches a type we sent */
1016         sent_sigslen = tls12_get_psigalgs(s, &sent_sigs);
1017         for (i = 0; i < sent_sigslen; i+=2, sent_sigs+=2)
1018                 {
1019                 if (sig[0] == sent_sigs[0] && sig[1] == sent_sigs[1])
1020                         break;
1021                 }
1022         /* Allow fallback to SHA1 if not strict mode */
1023         if (i == sent_sigslen && (sig[0] != TLSEXT_hash_sha1 || s->cert->cert_flags & SSL_CERT_FLAGS_CHECK_TLS_STRICT))
1024                 {
1025                 SSLerr(SSL_F_TLS12_CHECK_PEER_SIGALG,SSL_R_WRONG_SIGNATURE_TYPE);
1026                 return 0;
1027                 }
1028         *pmd = tls12_get_hash(sig[0]);
1029         if (*pmd == NULL)
1030                 {
1031                 SSLerr(SSL_F_TLS12_CHECK_PEER_SIGALG,SSL_R_UNKNOWN_DIGEST);
1032                 return 0;
1033                 }
1034         /* Make sure security callback allows algorithm */
1035         if (!ssl_security(s, SSL_SECOP_SIGALG_CHECK,
1036                                 EVP_MD_size(*pmd) * 4, EVP_MD_type(*pmd),
1037                                                                 (void *)sig))
1038                 {
1039                 SSLerr(SSL_F_TLS12_CHECK_PEER_SIGALG,SSL_R_WRONG_SIGNATURE_TYPE);
1040                 return 0;
1041                 }
1042         /* Store the digest used so applications can retrieve it if they
1043          * wish.
1044          */
1045         if (s->session && s->session->sess_cert)
1046                 s->session->sess_cert->peer_key->digest = *pmd;
1047         return 1;
1048         }
1049
1050 /* Get a mask of disabled algorithms: an algorithm is disabled
1051  * if it isn't supported or doesn't appear in supported signature
1052  * algorithms. Unlike ssl_cipher_get_disabled this applies to a specific
1053  * session and not global settings.
1054  * 
1055  */
1056 void ssl_set_client_disabled(SSL *s)
1057         {
1058         CERT *c = s->cert;
1059         c->mask_a = 0;
1060         c->mask_k = 0;
1061         /* Don't allow TLS 1.2 only ciphers if we don't suppport them */
1062         if (!SSL_CLIENT_USE_TLS1_2_CIPHERS(s))
1063                 c->mask_ssl = SSL_TLSV1_2;
1064         else
1065                 c->mask_ssl = 0;
1066         ssl_set_sig_mask(&c->mask_a, s, SSL_SECOP_SIGALG_MASK);
1067         /* Disable static DH if we don't include any appropriate
1068          * signature algorithms.
1069          */
1070         if (c->mask_a & SSL_aRSA)
1071                 c->mask_k |= SSL_kDHr|SSL_kECDHr;
1072         if (c->mask_a & SSL_aDSS)
1073                 c->mask_k |= SSL_kDHd;
1074         if (c->mask_a & SSL_aECDSA)
1075                 c->mask_k |= SSL_kECDHe;
1076 #ifndef OPENSSL_NO_KRB5
1077         if (!kssl_tgt_is_available(s->kssl_ctx))
1078                 {
1079                 c->mask_a |= SSL_aKRB5;
1080                 c->mask_k |= SSL_kKRB5;
1081                 }
1082 #endif
1083 #ifndef OPENSSL_NO_PSK
1084         /* with PSK there must be client callback set */
1085         if (!s->psk_client_callback)
1086                 {
1087                 c->mask_a |= SSL_aPSK;
1088                 c->mask_k |= SSL_kPSK;
1089                 }
1090 #endif /* OPENSSL_NO_PSK */
1091         c->valid = 1;
1092         }
1093
1094 int ssl_cipher_disabled(SSL *s, const SSL_CIPHER *c, int op)
1095         {
1096         CERT *ct = s->cert;
1097         if (c->algorithm_ssl & ct->mask_ssl || c->algorithm_mkey & ct->mask_k || c->algorithm_auth & ct->mask_a)
1098                 return 1;
1099         return !ssl_security(s, op, c->strength_bits, 0, (void *)c);
1100         }
1101
1102 static int tls_use_ticket(SSL *s)
1103         {
1104         if (s->options & SSL_OP_NO_TICKET)
1105                 return 0;
1106         return ssl_security(s, SSL_SECOP_TICKET, 0, 0, NULL);
1107         }
1108
1109 unsigned char *ssl_add_clienthello_tlsext(SSL *s, unsigned char *p, unsigned char *limit, int *al)
1110         {
1111         int extdatalen=0;
1112         unsigned char *ret = p;
1113 #ifndef OPENSSL_NO_EC
1114         /* See if we support any ECC ciphersuites */
1115         int using_ecc = 0;
1116         if (s->version >= TLS1_VERSION || SSL_IS_DTLS(s))
1117                 {
1118                 int i;
1119                 unsigned long alg_k, alg_a;
1120                 STACK_OF(SSL_CIPHER) *cipher_stack = SSL_get_ciphers(s);
1121
1122                 for (i = 0; i < sk_SSL_CIPHER_num(cipher_stack); i++)
1123                         {
1124                         SSL_CIPHER *c = sk_SSL_CIPHER_value(cipher_stack, i);
1125
1126                         alg_k = c->algorithm_mkey;
1127                         alg_a = c->algorithm_auth;
1128                         if ((alg_k & (SSL_kECDHE|SSL_kECDHr|SSL_kECDHe)
1129                                 || (alg_a & SSL_aECDSA)))
1130                                 {
1131                                 using_ecc = 1;
1132                                 break;
1133                                 }
1134                         }
1135                 }
1136 #endif
1137
1138         /* don't add extensions for SSLv3 unless doing secure renegotiation */
1139         if (s->client_version == SSL3_VERSION
1140                                         && !s->s3->send_connection_binding)
1141                 return p;
1142
1143         ret+=2;
1144
1145         if (ret>=limit) return NULL; /* this really never occurs, but ... */
1146
1147         if (s->tlsext_hostname != NULL)
1148                 { 
1149                 /* Add TLS extension servername to the Client Hello message */
1150                 unsigned long size_str;
1151                 long lenmax; 
1152
1153                 /* check for enough space.
1154                    4 for the servername type and entension length
1155                    2 for servernamelist length
1156                    1 for the hostname type
1157                    2 for hostname length
1158                    + hostname length 
1159                 */
1160                    
1161                 if ((lenmax = limit - ret - 9) < 0 
1162                     || (size_str = strlen(s->tlsext_hostname)) > (unsigned long)lenmax) 
1163                         return NULL;
1164                         
1165                 /* extension type and length */
1166                 s2n(TLSEXT_TYPE_server_name,ret); 
1167                 s2n(size_str+5,ret);
1168                 
1169                 /* length of servername list */
1170                 s2n(size_str+3,ret);
1171         
1172                 /* hostname type, length and hostname */
1173                 *(ret++) = (unsigned char) TLSEXT_NAMETYPE_host_name;
1174                 s2n(size_str,ret);
1175                 memcpy(ret, s->tlsext_hostname, size_str);
1176                 ret+=size_str;
1177                 }
1178
1179         /* Add RI if renegotiating */
1180         if (s->renegotiate)
1181           {
1182           int el;
1183           
1184           if(!ssl_add_clienthello_renegotiate_ext(s, 0, &el, 0))
1185               {
1186               SSLerr(SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT, ERR_R_INTERNAL_ERROR);
1187               return NULL;
1188               }
1189
1190           if((limit - p - 4 - el) < 0) return NULL;
1191           
1192           s2n(TLSEXT_TYPE_renegotiate,ret);
1193           s2n(el,ret);
1194
1195           if(!ssl_add_clienthello_renegotiate_ext(s, ret, &el, el))
1196               {
1197               SSLerr(SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT, ERR_R_INTERNAL_ERROR);
1198               return NULL;
1199               }
1200
1201           ret += el;
1202         }
1203
1204 #ifndef OPENSSL_NO_SRP
1205         /* Add SRP username if there is one */
1206         if (s->srp_ctx.login != NULL)
1207                 { /* Add TLS extension SRP username to the Client Hello message */
1208
1209                 int login_len = strlen(s->srp_ctx.login);       
1210                 if (login_len > 255 || login_len == 0)
1211                         {
1212                         SSLerr(SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT, ERR_R_INTERNAL_ERROR);
1213                         return NULL;
1214                         } 
1215
1216                 /* check for enough space.
1217                    4 for the srp type type and entension length
1218                    1 for the srp user identity
1219                    + srp user identity length 
1220                 */
1221                 if ((limit - ret - 5 - login_len) < 0) return NULL; 
1222
1223                 /* fill in the extension */
1224                 s2n(TLSEXT_TYPE_srp,ret);
1225                 s2n(login_len+1,ret);
1226                 (*ret++) = (unsigned char) login_len;
1227                 memcpy(ret, s->srp_ctx.login, login_len);
1228                 ret+=login_len;
1229                 }
1230 #endif
1231
1232 #ifndef OPENSSL_NO_EC
1233         if (using_ecc)
1234                 {
1235                 /* Add TLS extension ECPointFormats to the ClientHello message */
1236                 long lenmax; 
1237                 const unsigned char *plist;
1238                 size_t plistlen;
1239                 size_t i;
1240                 unsigned char *etmp;
1241
1242                 tls1_get_formatlist(s, &plist, &plistlen);
1243
1244                 if ((lenmax = limit - ret - 5) < 0) return NULL; 
1245                 if (plistlen > (size_t)lenmax) return NULL;
1246                 if (plistlen > 255)
1247                         {
1248                         SSLerr(SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT, ERR_R_INTERNAL_ERROR);
1249                         return NULL;
1250                         }
1251                 
1252                 s2n(TLSEXT_TYPE_ec_point_formats,ret);
1253                 s2n(plistlen + 1,ret);
1254                 *(ret++) = (unsigned char)plistlen ;
1255                 memcpy(ret, plist, plistlen);
1256                 ret+=plistlen;
1257
1258                 /* Add TLS extension EllipticCurves to the ClientHello message */
1259                 plist = s->tlsext_ellipticcurvelist;
1260                 tls1_get_curvelist(s, 0, &plist, &plistlen);
1261
1262                 if ((lenmax = limit - ret - 6) < 0) return NULL; 
1263                 if (plistlen > (size_t)lenmax) return NULL;
1264                 if (plistlen > 65532)
1265                         {
1266                         SSLerr(SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT, ERR_R_INTERNAL_ERROR);
1267                         return NULL;
1268                         }
1269
1270                 
1271                 s2n(TLSEXT_TYPE_elliptic_curves,ret);
1272                 etmp = ret + 4;
1273                 /* Copy curve ID if supported */
1274                 for (i = 0; i < plistlen; i += 2, plist += 2)
1275                         {
1276                         if (tls_curve_allowed(s, plist, SSL_SECOP_CURVE_SUPPORTED))
1277                                 {
1278                                 *etmp++ = plist[0];
1279                                 *etmp++ = plist[1];
1280                                 }
1281                         }
1282
1283                 plistlen = etmp - ret - 4;
1284
1285                 /* NB: draft-ietf-tls-ecc-12.txt uses a one-byte prefix for
1286                  * elliptic_curve_list, but the examples use two bytes.
1287                  * http://www1.ietf.org/mail-archive/web/tls/current/msg00538.html
1288                  * resolves this to two bytes.
1289                  */
1290                 s2n(plistlen + 2, ret);
1291                 s2n(plistlen, ret);
1292                 ret+=plistlen;
1293                 }
1294 #endif /* OPENSSL_NO_EC */
1295
1296         if (tls_use_ticket(s))
1297                 {
1298                 int ticklen;
1299                 if (!s->new_session && s->session && s->session->tlsext_tick)
1300                         ticklen = s->session->tlsext_ticklen;
1301                 else if (s->session && s->tlsext_session_ticket &&
1302                          s->tlsext_session_ticket->data)
1303                         {
1304                         ticklen = s->tlsext_session_ticket->length;
1305                         s->session->tlsext_tick = OPENSSL_malloc(ticklen);
1306                         if (!s->session->tlsext_tick)
1307                                 return NULL;
1308                         memcpy(s->session->tlsext_tick,
1309                                s->tlsext_session_ticket->data,
1310                                ticklen);
1311                         s->session->tlsext_ticklen = ticklen;
1312                         }
1313                 else
1314                         ticklen = 0;
1315                 if (ticklen == 0 && s->tlsext_session_ticket &&
1316                     s->tlsext_session_ticket->data == NULL)
1317                         goto skip_ext;
1318                 /* Check for enough room 2 for extension type, 2 for len
1319                  * rest for ticket
1320                  */
1321                 if ((long)(limit - ret - 4 - ticklen) < 0) return NULL;
1322                 s2n(TLSEXT_TYPE_session_ticket,ret); 
1323                 s2n(ticklen,ret);
1324                 if (ticklen)
1325                         {
1326                         memcpy(ret, s->session->tlsext_tick, ticklen);
1327                         ret += ticklen;
1328                         }
1329                 }
1330                 skip_ext:
1331
1332         if (SSL_USE_SIGALGS(s))
1333                 {
1334                 size_t salglen;
1335                 const unsigned char *salg;
1336                 unsigned char *etmp;
1337                 salglen = tls12_get_psigalgs(s, &salg);
1338                 if ((size_t)(limit - ret) < salglen + 6)
1339                         return NULL; 
1340                 s2n(TLSEXT_TYPE_signature_algorithms,ret);
1341                 etmp = ret;
1342                 /* Skip over lengths for now */
1343                 ret += 4;
1344                 salglen = tls12_copy_sigalgs(s, ret, salg, salglen);
1345                 /* Fill in lengths */
1346                 s2n(salglen + 2, etmp);
1347                 s2n(salglen, etmp);
1348                 ret += salglen;
1349                 }
1350
1351 #ifdef TLSEXT_TYPE_opaque_prf_input
1352         if (s->s3->client_opaque_prf_input != NULL)
1353                 {
1354                 size_t col = s->s3->client_opaque_prf_input_len;
1355                 
1356                 if ((long)(limit - ret - 6 - col) < 0)
1357                         return NULL;
1358                 if (col > 0xFFFD) /* can't happen */
1359                         return NULL;
1360
1361                 s2n(TLSEXT_TYPE_opaque_prf_input, ret); 
1362                 s2n(col + 2, ret);
1363                 s2n(col, ret);
1364                 memcpy(ret, s->s3->client_opaque_prf_input, col);
1365                 ret += col;
1366                 }
1367 #endif
1368
1369         if (s->tlsext_status_type == TLSEXT_STATUSTYPE_ocsp)
1370                 {
1371                 int i;
1372                 long extlen, idlen, itmp;
1373                 OCSP_RESPID *id;
1374
1375                 idlen = 0;
1376                 for (i = 0; i < sk_OCSP_RESPID_num(s->tlsext_ocsp_ids); i++)
1377                         {
1378                         id = sk_OCSP_RESPID_value(s->tlsext_ocsp_ids, i);
1379                         itmp = i2d_OCSP_RESPID(id, NULL);
1380                         if (itmp <= 0)
1381                                 return NULL;
1382                         idlen += itmp + 2;
1383                         }
1384
1385                 if (s->tlsext_ocsp_exts)
1386                         {
1387                         extlen = i2d_X509_EXTENSIONS(s->tlsext_ocsp_exts, NULL);
1388                         if (extlen < 0)
1389                                 return NULL;
1390                         }
1391                 else
1392                         extlen = 0;
1393                         
1394                 if ((long)(limit - ret - 7 - extlen - idlen) < 0) return NULL;
1395                 s2n(TLSEXT_TYPE_status_request, ret);
1396                 if (extlen + idlen > 0xFFF0)
1397                         return NULL;
1398                 s2n(extlen + idlen + 5, ret);
1399                 *(ret++) = TLSEXT_STATUSTYPE_ocsp;
1400                 s2n(idlen, ret);
1401                 for (i = 0; i < sk_OCSP_RESPID_num(s->tlsext_ocsp_ids); i++)
1402                         {
1403                         /* save position of id len */
1404                         unsigned char *q = ret;
1405                         id = sk_OCSP_RESPID_value(s->tlsext_ocsp_ids, i);
1406                         /* skip over id len */
1407                         ret += 2;
1408                         itmp = i2d_OCSP_RESPID(id, &ret);
1409                         /* write id len */
1410                         s2n(itmp, q);
1411                         }
1412                 s2n(extlen, ret);
1413                 if (extlen > 0)
1414                         i2d_X509_EXTENSIONS(s->tlsext_ocsp_exts, &ret);
1415                 }
1416
1417 #ifndef OPENSSL_NO_HEARTBEATS
1418         /* Add Heartbeat extension */
1419         s2n(TLSEXT_TYPE_heartbeat,ret);
1420         s2n(1,ret);
1421         /* Set mode:
1422          * 1: peer may send requests
1423          * 2: peer not allowed to send requests
1424          */
1425         if (s->tlsext_heartbeat & SSL_TLSEXT_HB_DONT_RECV_REQUESTS)
1426                 *(ret++) = SSL_TLSEXT_HB_DONT_SEND_REQUESTS;
1427         else
1428                 *(ret++) = SSL_TLSEXT_HB_ENABLED;
1429 #endif
1430
1431 #ifndef OPENSSL_NO_NEXTPROTONEG
1432         if (s->ctx->next_proto_select_cb && !s->s3->tmp.finish_md_len)
1433                 {
1434                 /* The client advertises an emtpy extension to indicate its
1435                  * support for Next Protocol Negotiation */
1436                 if (limit - ret - 4 < 0)
1437                         return NULL;
1438                 s2n(TLSEXT_TYPE_next_proto_neg,ret);
1439                 s2n(0,ret);
1440                 }
1441 #endif
1442
1443         if (s->alpn_client_proto_list && !s->s3->tmp.finish_md_len)
1444                 {
1445                 if ((size_t)(limit - ret) < 6 + s->alpn_client_proto_list_len)
1446                         return NULL;
1447                 s2n(TLSEXT_TYPE_application_layer_protocol_negotiation,ret);
1448                 s2n(2 + s->alpn_client_proto_list_len,ret);
1449                 s2n(s->alpn_client_proto_list_len,ret);
1450                 memcpy(ret, s->alpn_client_proto_list,
1451                        s->alpn_client_proto_list_len);
1452                 ret += s->alpn_client_proto_list_len;
1453                 }
1454
1455         if(SSL_get_srtp_profiles(s))
1456                 {
1457                 int el;
1458
1459                 ssl_add_clienthello_use_srtp_ext(s, 0, &el, 0);
1460                 
1461                 if((limit - p - 4 - el) < 0) return NULL;
1462
1463                 s2n(TLSEXT_TYPE_use_srtp,ret);
1464                 s2n(el,ret);
1465
1466                 if(ssl_add_clienthello_use_srtp_ext(s, ret, &el, el))
1467                         {
1468                         SSLerr(SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT, ERR_R_INTERNAL_ERROR);
1469                         return NULL;
1470                         }
1471                 ret += el;
1472                 }
1473
1474         /* Add custom TLS Extensions to ClientHello */
1475         if (s->ctx->custom_cli_ext_records_count)
1476                 {
1477                 size_t i;
1478                 custom_cli_ext_record* record;
1479
1480                 for (i = 0; i < s->ctx->custom_cli_ext_records_count; i++)
1481                         {
1482                         const unsigned char* out = NULL;
1483                         unsigned short outlen = 0;
1484
1485                         record = &s->ctx->custom_cli_ext_records[i];
1486                         /* NULL callback sends empty extension */ 
1487                         /* -1 from callback omits extension */
1488                         if (record->fn1)
1489                                 {
1490                                 int cb_retval = 0;
1491                                 cb_retval = record->fn1(s, record->ext_type,
1492                                                         &out, &outlen, al,
1493                                                         record->arg);
1494                                 if (cb_retval == 0)
1495                                         return NULL; /* error */
1496                                 if (cb_retval == -1)
1497                                         continue; /* skip this extension */
1498                                 }
1499                         if (limit < ret + 4 + outlen)
1500                                 return NULL;
1501                         s2n(record->ext_type, ret);
1502                         s2n(outlen, ret);
1503                         memcpy(ret, out, outlen);
1504                         ret += outlen;
1505                         }
1506                 }
1507 #ifdef TLSEXT_TYPE_encrypt_then_mac
1508         s2n(TLSEXT_TYPE_encrypt_then_mac,ret);
1509         s2n(0,ret);
1510 #endif
1511
1512         /* Add padding to workaround bugs in F5 terminators.
1513          * See https://tools.ietf.org/html/draft-agl-tls-padding-03
1514          *
1515          * NB: because this code works out the length of all existing
1516          * extensions it MUST always appear last.
1517          */
1518         if (s->options & SSL_OP_TLSEXT_PADDING)
1519                 {
1520                 int hlen = ret - (unsigned char *)s->init_buf->data;
1521                 /* The code in s23_clnt.c to build ClientHello messages
1522                  * includes the 5-byte record header in the buffer, while
1523                  * the code in s3_clnt.c does not.
1524                  */
1525                 if (s->state == SSL23_ST_CW_CLNT_HELLO_A)
1526                         hlen -= 5;
1527                 if (hlen > 0xff && hlen < 0x200)
1528                         {
1529                         hlen = 0x200 - hlen;
1530                         if (hlen >= 4)
1531                                 hlen -= 4;
1532                         else
1533                                 hlen = 0;
1534
1535                         s2n(TLSEXT_TYPE_padding, ret);
1536                         s2n(hlen, ret);
1537                         memset(ret, 0, hlen);
1538                         ret += hlen;
1539                         }
1540                 }
1541
1542         if ((extdatalen = ret-p-2) == 0)
1543                 return p;
1544
1545         s2n(extdatalen,p);
1546         return ret;
1547         }
1548
1549 unsigned char *ssl_add_serverhello_tlsext(SSL *s, unsigned char *p, unsigned char *limit, int *al)
1550         {
1551         int extdatalen=0;
1552         unsigned char *ret = p;
1553         size_t i;
1554         custom_srv_ext_record *record;
1555 #ifndef OPENSSL_NO_NEXTPROTONEG
1556         int next_proto_neg_seen;
1557 #endif
1558 #ifndef OPENSSL_NO_EC
1559         unsigned long alg_k = s->s3->tmp.new_cipher->algorithm_mkey;
1560         unsigned long alg_a = s->s3->tmp.new_cipher->algorithm_auth;
1561         int using_ecc = (alg_k & (SSL_kECDHE|SSL_kECDHr|SSL_kECDHe)) || (alg_a & SSL_aECDSA);
1562         using_ecc = using_ecc && (s->session->tlsext_ecpointformatlist != NULL);
1563 #endif
1564         /* don't add extensions for SSLv3, unless doing secure renegotiation */
1565         if (s->version == SSL3_VERSION && !s->s3->send_connection_binding)
1566                 return p;
1567         
1568         ret+=2;
1569         if (ret>=limit) return NULL; /* this really never occurs, but ... */
1570
1571         if (!s->hit && s->servername_done == 1 && s->session->tlsext_hostname != NULL)
1572                 { 
1573                 if ((long)(limit - ret - 4) < 0) return NULL; 
1574
1575                 s2n(TLSEXT_TYPE_server_name,ret);
1576                 s2n(0,ret);
1577                 }
1578
1579         if(s->s3->send_connection_binding)
1580         {
1581           int el;
1582           
1583           if(!ssl_add_serverhello_renegotiate_ext(s, 0, &el, 0))
1584               {
1585               SSLerr(SSL_F_SSL_ADD_SERVERHELLO_TLSEXT, ERR_R_INTERNAL_ERROR);
1586               return NULL;
1587               }
1588
1589           if((limit - p - 4 - el) < 0) return NULL;
1590           
1591           s2n(TLSEXT_TYPE_renegotiate,ret);
1592           s2n(el,ret);
1593
1594           if(!ssl_add_serverhello_renegotiate_ext(s, ret, &el, el))
1595               {
1596               SSLerr(SSL_F_SSL_ADD_SERVERHELLO_TLSEXT, ERR_R_INTERNAL_ERROR);
1597               return NULL;
1598               }
1599
1600           ret += el;
1601         }
1602
1603 #ifndef OPENSSL_NO_EC
1604         if (using_ecc)
1605                 {
1606                 const unsigned char *plist;
1607                 size_t plistlen;
1608                 /* Add TLS extension ECPointFormats to the ServerHello message */
1609                 long lenmax; 
1610
1611                 tls1_get_formatlist(s, &plist, &plistlen);
1612
1613                 if ((lenmax = limit - ret - 5) < 0) return NULL; 
1614                 if (plistlen > (size_t)lenmax) return NULL;
1615                 if (plistlen > 255)
1616                         {
1617                         SSLerr(SSL_F_SSL_ADD_SERVERHELLO_TLSEXT, ERR_R_INTERNAL_ERROR);
1618                         return NULL;
1619                         }
1620                 
1621                 s2n(TLSEXT_TYPE_ec_point_formats,ret);
1622                 s2n(plistlen + 1,ret);
1623                 *(ret++) = (unsigned char) plistlen;
1624                 memcpy(ret, plist, plistlen);
1625                 ret+=plistlen;
1626
1627                 }
1628         /* Currently the server should not respond with a SupportedCurves extension */
1629 #endif /* OPENSSL_NO_EC */
1630
1631         if (s->tlsext_ticket_expected && tls_use_ticket(s))
1632                 { 
1633                 if ((long)(limit - ret - 4) < 0) return NULL; 
1634                 s2n(TLSEXT_TYPE_session_ticket,ret);
1635                 s2n(0,ret);
1636                 }
1637
1638         if (s->tlsext_status_expected)
1639                 { 
1640                 if ((long)(limit - ret - 4) < 0) return NULL; 
1641                 s2n(TLSEXT_TYPE_status_request,ret);
1642                 s2n(0,ret);
1643                 }
1644
1645 #ifdef TLSEXT_TYPE_opaque_prf_input
1646         if (s->s3->server_opaque_prf_input != NULL)
1647                 {
1648                 size_t sol = s->s3->server_opaque_prf_input_len;
1649                 
1650                 if ((long)(limit - ret - 6 - sol) < 0)
1651                         return NULL;
1652                 if (sol > 0xFFFD) /* can't happen */
1653                         return NULL;
1654
1655                 s2n(TLSEXT_TYPE_opaque_prf_input, ret); 
1656                 s2n(sol + 2, ret);
1657                 s2n(sol, ret);
1658                 memcpy(ret, s->s3->server_opaque_prf_input, sol);
1659                 ret += sol;
1660                 }
1661 #endif
1662
1663         if(s->srtp_profile)
1664                 {
1665                 int el;
1666
1667                 ssl_add_serverhello_use_srtp_ext(s, 0, &el, 0);
1668                 
1669                 if((limit - p - 4 - el) < 0) return NULL;
1670
1671                 s2n(TLSEXT_TYPE_use_srtp,ret);
1672                 s2n(el,ret);
1673
1674                 if(ssl_add_serverhello_use_srtp_ext(s, ret, &el, el))
1675                         {
1676                         SSLerr(SSL_F_SSL_ADD_SERVERHELLO_TLSEXT, ERR_R_INTERNAL_ERROR);
1677                         return NULL;
1678                         }
1679                 ret+=el;
1680                 }
1681
1682         if (((s->s3->tmp.new_cipher->id & 0xFFFF)==0x80 || (s->s3->tmp.new_cipher->id & 0xFFFF)==0x81) 
1683                 && (SSL_get_options(s) & SSL_OP_CRYPTOPRO_TLSEXT_BUG))
1684                 { const unsigned char cryptopro_ext[36] = {
1685                         0xfd, 0xe8, /*65000*/
1686                         0x00, 0x20, /*32 bytes length*/
1687                         0x30, 0x1e, 0x30, 0x08, 0x06, 0x06, 0x2a, 0x85, 
1688                         0x03,   0x02, 0x02, 0x09, 0x30, 0x08, 0x06, 0x06, 
1689                         0x2a, 0x85, 0x03, 0x02, 0x02, 0x16, 0x30, 0x08, 
1690                         0x06, 0x06, 0x2a, 0x85, 0x03, 0x02, 0x02, 0x17};
1691                         if (limit-ret<36) return NULL;
1692                         memcpy(ret,cryptopro_ext,36);
1693                         ret+=36;
1694
1695                 }
1696
1697 #ifndef OPENSSL_NO_HEARTBEATS
1698         /* Add Heartbeat extension if we've received one */
1699         if (s->tlsext_heartbeat & SSL_TLSEXT_HB_ENABLED)
1700                 {
1701                 s2n(TLSEXT_TYPE_heartbeat,ret);
1702                 s2n(1,ret);
1703                 /* Set mode:
1704                  * 1: peer may send requests
1705                  * 2: peer not allowed to send requests
1706                  */
1707                 if (s->tlsext_heartbeat & SSL_TLSEXT_HB_DONT_RECV_REQUESTS)
1708                         *(ret++) = SSL_TLSEXT_HB_DONT_SEND_REQUESTS;
1709                 else
1710                         *(ret++) = SSL_TLSEXT_HB_ENABLED;
1711
1712                 }
1713 #endif
1714
1715 #ifndef OPENSSL_NO_NEXTPROTONEG
1716         next_proto_neg_seen = s->s3->next_proto_neg_seen;
1717         s->s3->next_proto_neg_seen = 0;
1718         if (next_proto_neg_seen && s->ctx->next_protos_advertised_cb)
1719                 {
1720                 const unsigned char *npa;
1721                 unsigned int npalen;
1722                 int r;
1723
1724                 r = s->ctx->next_protos_advertised_cb(s, &npa, &npalen, s->ctx->next_protos_advertised_cb_arg);
1725                 if (r == SSL_TLSEXT_ERR_OK)
1726                         {
1727                         if ((long)(limit - ret - 4 - npalen) < 0) return NULL;
1728                         s2n(TLSEXT_TYPE_next_proto_neg,ret);
1729                         s2n(npalen,ret);
1730                         memcpy(ret, npa, npalen);
1731                         ret += npalen;
1732                         s->s3->next_proto_neg_seen = 1;
1733                         }
1734                 }
1735 #endif
1736
1737         for (i = 0; i < s->ctx->custom_srv_ext_records_count; i++)
1738                 {
1739                 const unsigned char *out = NULL;
1740                 unsigned short outlen = 0;
1741                 int cb_retval = 0;
1742
1743                 record = &s->ctx->custom_srv_ext_records[i];
1744
1745                 /* NULL callback or -1 omits extension */
1746                 if (!record->fn2)
1747                         continue;
1748                 cb_retval = record->fn2(s, record->ext_type,
1749                                                                 &out, &outlen, al,
1750                                                                 record->arg);
1751                 if (cb_retval == 0)
1752                         return NULL; /* error */
1753                 if (cb_retval == -1)
1754                         continue; /* skip this extension */
1755                 if (limit < ret + 4 + outlen)
1756                         return NULL;
1757                 s2n(record->ext_type, ret);
1758                 s2n(outlen, ret);
1759                 memcpy(ret, out, outlen);
1760                 ret += outlen;
1761                 }
1762 #ifdef TLSEXT_TYPE_encrypt_then_mac
1763         if (s->s3->flags & TLS1_FLAGS_ENCRYPT_THEN_MAC)
1764                 {
1765                 /* Don't use encrypt_then_mac if AEAD: might want
1766                  * to disable for other ciphersuites too.
1767                  */
1768                 if (s->s3->tmp.new_cipher->algorithm_mac == SSL_AEAD)
1769                         s->s3->flags &= ~TLS1_FLAGS_ENCRYPT_THEN_MAC;
1770                 else
1771                         {
1772                         s2n(TLSEXT_TYPE_encrypt_then_mac,ret);
1773                         s2n(0,ret);
1774                         }
1775                 }
1776 #endif
1777
1778         if (s->s3->alpn_selected)
1779                 {
1780                 const unsigned char *selected = s->s3->alpn_selected;
1781                 unsigned len = s->s3->alpn_selected_len;
1782
1783                 if ((long)(limit - ret - 4 - 2 - 1 - len) < 0)
1784                         return NULL;
1785                 s2n(TLSEXT_TYPE_application_layer_protocol_negotiation,ret);
1786                 s2n(3 + len,ret);
1787                 s2n(1 + len,ret);
1788                 *ret++ = len;
1789                 memcpy(ret, selected, len);
1790                 ret += len;
1791                 }
1792
1793         if ((extdatalen = ret-p-2)== 0) 
1794                 return p;
1795
1796         s2n(extdatalen,p);
1797         return ret;
1798         }
1799
1800 /* tls1_alpn_handle_client_hello is called to process the ALPN extension in a
1801  * ClientHello.
1802  *   data: the contents of the extension, not including the type and length.
1803  *   data_len: the number of bytes in |data|
1804  *   al: a pointer to the alert value to send in the event of a non-zero
1805  *       return.
1806  *
1807  *   returns: 0 on success. */
1808 static int tls1_alpn_handle_client_hello(SSL *s, const unsigned char *data,
1809                                          unsigned data_len, int *al)
1810         {
1811         unsigned i;
1812         unsigned proto_len;
1813         const unsigned char *selected;
1814         unsigned char selected_len;
1815         int r;
1816
1817         if (s->ctx->alpn_select_cb == NULL)
1818                 return 0;
1819
1820         if (data_len < 2)
1821                 goto parse_error;
1822
1823         /* data should contain a uint16 length followed by a series of 8-bit,
1824          * length-prefixed strings. */
1825         i = ((unsigned) data[0]) << 8 |
1826             ((unsigned) data[1]);
1827         data_len -= 2;
1828         data += 2;
1829         if (data_len != i)
1830                 goto parse_error;
1831
1832         if (data_len < 2)
1833                 goto parse_error;
1834
1835         for (i = 0; i < data_len;)
1836                 {
1837                 proto_len = data[i];
1838                 i++;
1839
1840                 if (proto_len == 0)
1841                         goto parse_error;
1842
1843                 if (i + proto_len < i || i + proto_len > data_len)
1844                         goto parse_error;
1845
1846                 i += proto_len;
1847                 }
1848
1849         r = s->ctx->alpn_select_cb(s, &selected, &selected_len, data, data_len,
1850                                    s->ctx->alpn_select_cb_arg);
1851         if (r == SSL_TLSEXT_ERR_OK) {
1852                 if (s->s3->alpn_selected)
1853                         OPENSSL_free(s->s3->alpn_selected);
1854                 s->s3->alpn_selected = OPENSSL_malloc(selected_len);
1855                 if (!s->s3->alpn_selected)
1856                         {
1857                         *al = SSL_AD_INTERNAL_ERROR;
1858                         return -1;
1859                         }
1860                 memcpy(s->s3->alpn_selected, selected, selected_len);
1861                 s->s3->alpn_selected_len = selected_len;
1862         }
1863         return 0;
1864
1865 parse_error:
1866         *al = SSL_AD_DECODE_ERROR;
1867         return -1;
1868         }
1869
1870 #ifndef OPENSSL_NO_EC
1871 /* ssl_check_for_safari attempts to fingerprint Safari using OS X
1872  * SecureTransport using the TLS extension block in |d|, of length |n|.
1873  * Safari, since 10.6, sends exactly these extensions, in this order:
1874  *   SNI,
1875  *   elliptic_curves
1876  *   ec_point_formats
1877  *
1878  * We wish to fingerprint Safari because they broke ECDHE-ECDSA support in 10.8,
1879  * but they advertise support. So enabling ECDHE-ECDSA ciphers breaks them.
1880  * Sadly we cannot differentiate 10.6, 10.7 and 10.8.4 (which work), from
1881  * 10.8..10.8.3 (which don't work).
1882  */
1883 static void ssl_check_for_safari(SSL *s, const unsigned char *data, const unsigned char *d, int n) {
1884         unsigned short type, size;
1885         static const unsigned char kSafariExtensionsBlock[] = {
1886                 0x00, 0x0a,  /* elliptic_curves extension */
1887                 0x00, 0x08,  /* 8 bytes */
1888                 0x00, 0x06,  /* 6 bytes of curve ids */
1889                 0x00, 0x17,  /* P-256 */
1890                 0x00, 0x18,  /* P-384 */
1891                 0x00, 0x19,  /* P-521 */
1892
1893                 0x00, 0x0b,  /* ec_point_formats */
1894                 0x00, 0x02,  /* 2 bytes */
1895                 0x01,        /* 1 point format */
1896                 0x00,        /* uncompressed */
1897         };
1898
1899         /* The following is only present in TLS 1.2 */
1900         static const unsigned char kSafariTLS12ExtensionsBlock[] = {
1901                 0x00, 0x0d,  /* signature_algorithms */
1902                 0x00, 0x0c,  /* 12 bytes */
1903                 0x00, 0x0a,  /* 10 bytes */
1904                 0x05, 0x01,  /* SHA-384/RSA */
1905                 0x04, 0x01,  /* SHA-256/RSA */
1906                 0x02, 0x01,  /* SHA-1/RSA */
1907                 0x04, 0x03,  /* SHA-256/ECDSA */
1908                 0x02, 0x03,  /* SHA-1/ECDSA */
1909         };
1910
1911         if (data >= (d+n-2))
1912                 return;
1913         data += 2;
1914
1915         if (data > (d+n-4))
1916                 return;
1917         n2s(data,type);
1918         n2s(data,size);
1919
1920         if (type != TLSEXT_TYPE_server_name)
1921                 return;
1922
1923         if (data+size > d+n)
1924                 return;
1925         data += size;
1926
1927         if (TLS1_get_client_version(s) >= TLS1_2_VERSION)
1928                 {
1929                 const size_t len1 = sizeof(kSafariExtensionsBlock);
1930                 const size_t len2 = sizeof(kSafariTLS12ExtensionsBlock);
1931
1932                 if (data + len1 + len2 != d+n)
1933                         return;
1934                 if (memcmp(data, kSafariExtensionsBlock, len1) != 0)
1935                         return;
1936                 if (memcmp(data + len1, kSafariTLS12ExtensionsBlock, len2) != 0)
1937                         return;
1938                 }
1939         else
1940                 {
1941                 const size_t len = sizeof(kSafariExtensionsBlock);
1942
1943                 if (data + len != d+n)
1944                         return;
1945                 if (memcmp(data, kSafariExtensionsBlock, len) != 0)
1946                         return;
1947                 }
1948
1949         s->s3->is_probably_safari = 1;
1950 }
1951 #endif /* !OPENSSL_NO_EC */
1952
1953 static int ssl_scan_clienthello_tlsext(SSL *s, unsigned char **p, unsigned char *d, int n, int *al) 
1954         {       
1955         unsigned short type;
1956         unsigned short size;
1957         unsigned short len;
1958         unsigned char *data = *p;
1959         int renegotiate_seen = 0;
1960         size_t i;
1961
1962         s->servername_done = 0;
1963         s->tlsext_status_type = -1;
1964 #ifndef OPENSSL_NO_NEXTPROTONEG
1965         s->s3->next_proto_neg_seen = 0;
1966 #endif
1967
1968         if (s->s3->alpn_selected)
1969                 {
1970                 OPENSSL_free(s->s3->alpn_selected);
1971                 s->s3->alpn_selected = NULL;
1972                 }
1973
1974         /* Clear observed custom extensions */
1975         s->s3->serverinfo_client_tlsext_custom_types_count = 0;
1976         if (s->s3->serverinfo_client_tlsext_custom_types != NULL)
1977                 {
1978                 OPENSSL_free(s->s3->serverinfo_client_tlsext_custom_types);
1979                 s->s3->serverinfo_client_tlsext_custom_types = NULL;
1980                 }
1981
1982 #ifndef OPENSSL_NO_HEARTBEATS
1983         s->tlsext_heartbeat &= ~(SSL_TLSEXT_HB_ENABLED |
1984                                SSL_TLSEXT_HB_DONT_SEND_REQUESTS);
1985 #endif
1986
1987 #ifndef OPENSSL_NO_EC
1988         if (s->options & SSL_OP_SAFARI_ECDHE_ECDSA_BUG)
1989                 ssl_check_for_safari(s, data, d, n);
1990 #endif /* !OPENSSL_NO_EC */
1991
1992         /* Clear any signature algorithms extension received */
1993         if (s->cert->peer_sigalgs)
1994                 {
1995                 OPENSSL_free(s->cert->peer_sigalgs);
1996                 s->cert->peer_sigalgs = NULL;
1997                 }
1998         /* Clear any shared sigtnature algorithms */
1999         if (s->cert->shared_sigalgs)
2000                 {
2001                 OPENSSL_free(s->cert->shared_sigalgs);
2002                 s->cert->shared_sigalgs = NULL;
2003                 }
2004         /* Clear certificate digests and validity flags */
2005         for (i = 0; i < SSL_PKEY_NUM; i++)
2006                 {
2007                 s->cert->pkeys[i].digest = NULL;
2008                 s->cert->pkeys[i].valid_flags = 0;
2009                 }
2010
2011 #ifdef TLSEXT_TYPE_encrypt_then_mac
2012         s->s3->flags &= ~TLS1_FLAGS_ENCRYPT_THEN_MAC;
2013 #endif
2014
2015         if (data >= (d+n-2))
2016                 goto ri_check;
2017         n2s(data,len);
2018
2019         if (data > (d+n-len)) 
2020                 goto ri_check;
2021
2022         while (data <= (d+n-4))
2023                 {
2024                 n2s(data,type);
2025                 n2s(data,size);
2026
2027                 if (data+size > (d+n))
2028                         goto ri_check;
2029 #if 0
2030                 fprintf(stderr,"Received extension type %d size %d\n",type,size);
2031 #endif
2032                 if (s->tlsext_debug_cb)
2033                         s->tlsext_debug_cb(s, 0, type, data, size,
2034                                                 s->tlsext_debug_arg);
2035 /* The servername extension is treated as follows:
2036
2037    - Only the hostname type is supported with a maximum length of 255.
2038    - The servername is rejected if too long or if it contains zeros,
2039      in which case an fatal alert is generated.
2040    - The servername field is maintained together with the session cache.
2041    - When a session is resumed, the servername call back invoked in order
2042      to allow the application to position itself to the right context. 
2043    - The servername is acknowledged if it is new for a session or when 
2044      it is identical to a previously used for the same session. 
2045      Applications can control the behaviour.  They can at any time
2046      set a 'desirable' servername for a new SSL object. This can be the
2047      case for example with HTTPS when a Host: header field is received and
2048      a renegotiation is requested. In this case, a possible servername
2049      presented in the new client hello is only acknowledged if it matches
2050      the value of the Host: field. 
2051    - Applications must  use SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION
2052      if they provide for changing an explicit servername context for the session,
2053      i.e. when the session has been established with a servername extension. 
2054    - On session reconnect, the servername extension may be absent. 
2055
2056 */      
2057
2058                 if (type == TLSEXT_TYPE_server_name)
2059                         {
2060                         unsigned char *sdata;
2061                         int servname_type;
2062                         int dsize; 
2063                 
2064                         if (size < 2) 
2065                                 {
2066                                 *al = SSL_AD_DECODE_ERROR;
2067                                 return 0;
2068                                 }
2069                         n2s(data,dsize);  
2070                         size -= 2;
2071                         if (dsize > size  ) 
2072                                 {
2073                                 *al = SSL_AD_DECODE_ERROR;
2074                                 return 0;
2075                                 } 
2076
2077                         sdata = data;
2078                         while (dsize > 3) 
2079                                 {
2080                                 servname_type = *(sdata++); 
2081                                 n2s(sdata,len);
2082                                 dsize -= 3;
2083
2084                                 if (len > dsize) 
2085                                         {
2086                                         *al = SSL_AD_DECODE_ERROR;
2087                                         return 0;
2088                                         }
2089                                 if (s->servername_done == 0)
2090                                 switch (servname_type)
2091                                         {
2092                                 case TLSEXT_NAMETYPE_host_name:
2093                                         if (!s->hit)
2094                                                 {
2095                                                 if(s->session->tlsext_hostname)
2096                                                         {
2097                                                         *al = SSL_AD_DECODE_ERROR;
2098                                                         return 0;
2099                                                         }
2100                                                 if (len > TLSEXT_MAXLEN_host_name)
2101                                                         {
2102                                                         *al = TLS1_AD_UNRECOGNIZED_NAME;
2103                                                         return 0;
2104                                                         }
2105                                                 if ((s->session->tlsext_hostname = OPENSSL_malloc(len+1)) == NULL)
2106                                                         {
2107                                                         *al = TLS1_AD_INTERNAL_ERROR;
2108                                                         return 0;
2109                                                         }
2110                                                 memcpy(s->session->tlsext_hostname, sdata, len);
2111                                                 s->session->tlsext_hostname[len]='\0';
2112                                                 if (strlen(s->session->tlsext_hostname) != len) {
2113                                                         OPENSSL_free(s->session->tlsext_hostname);
2114                                                         s->session->tlsext_hostname = NULL;
2115                                                         *al = TLS1_AD_UNRECOGNIZED_NAME;
2116                                                         return 0;
2117                                                 }
2118                                                 s->servername_done = 1; 
2119
2120                                                 }
2121                                         else 
2122                                                 s->servername_done = s->session->tlsext_hostname
2123                                                         && strlen(s->session->tlsext_hostname) == len 
2124                                                         && strncmp(s->session->tlsext_hostname, (char *)sdata, len) == 0;
2125                                         
2126                                         break;
2127
2128                                 default:
2129                                         break;
2130                                         }
2131                                  
2132                                 dsize -= len;
2133                                 }
2134                         if (dsize != 0) 
2135                                 {
2136                                 *al = SSL_AD_DECODE_ERROR;
2137                                 return 0;
2138                                 }
2139
2140                         }
2141 #ifndef OPENSSL_NO_SRP
2142                 else if (type == TLSEXT_TYPE_srp)
2143                         {
2144                         if (size <= 0 || ((len = data[0])) != (size -1))
2145                                 {
2146                                 *al = SSL_AD_DECODE_ERROR;
2147                                 return 0;
2148                                 }
2149                         if (s->srp_ctx.login != NULL)
2150                                 {
2151                                 *al = SSL_AD_DECODE_ERROR;
2152                                 return 0;
2153                                 }
2154                         if ((s->srp_ctx.login = OPENSSL_malloc(len+1)) == NULL)
2155                                 return -1;
2156                         memcpy(s->srp_ctx.login, &data[1], len);
2157                         s->srp_ctx.login[len]='\0';
2158   
2159                         if (strlen(s->srp_ctx.login) != len) 
2160                                 {
2161                                 *al = SSL_AD_DECODE_ERROR;
2162                                 return 0;
2163                                 }
2164                         }
2165 #endif
2166
2167 #ifndef OPENSSL_NO_EC
2168                 else if (type == TLSEXT_TYPE_ec_point_formats)
2169                         {
2170                         unsigned char *sdata = data;
2171                         int ecpointformatlist_length = *(sdata++);
2172
2173                         if (ecpointformatlist_length != size - 1 || 
2174                                 ecpointformatlist_length < 1)
2175                                 {
2176                                 *al = TLS1_AD_DECODE_ERROR;
2177                                 return 0;
2178                                 }
2179                         if (!s->hit)
2180                                 {
2181                                 if(s->session->tlsext_ecpointformatlist)
2182                                         {
2183                                         OPENSSL_free(s->session->tlsext_ecpointformatlist);
2184                                         s->session->tlsext_ecpointformatlist = NULL;
2185                                         }
2186                                 s->session->tlsext_ecpointformatlist_length = 0;
2187                                 if ((s->session->tlsext_ecpointformatlist = OPENSSL_malloc(ecpointformatlist_length)) == NULL)
2188                                         {
2189                                         *al = TLS1_AD_INTERNAL_ERROR;
2190                                         return 0;
2191                                         }
2192                                 s->session->tlsext_ecpointformatlist_length = ecpointformatlist_length;
2193                                 memcpy(s->session->tlsext_ecpointformatlist, sdata, ecpointformatlist_length);
2194                                 }
2195 #if 0
2196                         fprintf(stderr,"ssl_parse_clienthello_tlsext s->session->tlsext_ecpointformatlist (length=%i) ", s->session->tlsext_ecpointformatlist_length);
2197                         sdata = s->session->tlsext_ecpointformatlist;
2198                         for (i = 0; i < s->session->tlsext_ecpointformatlist_length; i++)
2199                                 fprintf(stderr,"%i ",*(sdata++));
2200                         fprintf(stderr,"\n");
2201 #endif
2202                         }
2203                 else if (type == TLSEXT_TYPE_elliptic_curves)
2204                         {
2205                         unsigned char *sdata = data;
2206                         int ellipticcurvelist_length = (*(sdata++) << 8);
2207                         ellipticcurvelist_length += (*(sdata++));
2208
2209                         if (ellipticcurvelist_length != size - 2 ||
2210                                 ellipticcurvelist_length < 1)
2211                                 {
2212                                 *al = TLS1_AD_DECODE_ERROR;
2213                                 return 0;
2214                                 }
2215                         if (!s->hit)
2216                                 {
2217                                 if(s->session->tlsext_ellipticcurvelist)
2218                                         {
2219                                         *al = TLS1_AD_DECODE_ERROR;
2220                                         return 0;
2221                                         }
2222                                 s->session->tlsext_ellipticcurvelist_length = 0;
2223                                 if ((s->session->tlsext_ellipticcurvelist = OPENSSL_malloc(ellipticcurvelist_length)) == NULL)
2224                                         {
2225                                         *al = TLS1_AD_INTERNAL_ERROR;
2226                                         return 0;
2227                                         }
2228                                 s->session->tlsext_ellipticcurvelist_length = ellipticcurvelist_length;
2229                                 memcpy(s->session->tlsext_ellipticcurvelist, sdata, ellipticcurvelist_length);
2230                                 }
2231 #if 0
2232                         fprintf(stderr,"ssl_parse_clienthello_tlsext s->session->tlsext_ellipticcurvelist (length=%i) ", s->session->tlsext_ellipticcurvelist_length);
2233                         sdata = s->session->tlsext_ellipticcurvelist;
2234                         for (i = 0; i < s->session->tlsext_ellipticcurvelist_length; i++)
2235                                 fprintf(stderr,"%i ",*(sdata++));
2236                         fprintf(stderr,"\n");
2237 #endif
2238                         }
2239 #endif /* OPENSSL_NO_EC */
2240 #ifdef TLSEXT_TYPE_opaque_prf_input
2241                 else if (type == TLSEXT_TYPE_opaque_prf_input)
2242                         {
2243                         unsigned char *sdata = data;
2244
2245                         if (size < 2)
2246                                 {
2247                                 *al = SSL_AD_DECODE_ERROR;
2248                                 return 0;
2249                                 }
2250                         n2s(sdata, s->s3->client_opaque_prf_input_len);
2251                         if (s->s3->client_opaque_prf_input_len != size - 2)
2252                                 {
2253                                 *al = SSL_AD_DECODE_ERROR;
2254                                 return 0;
2255                                 }
2256
2257                         if (s->s3->client_opaque_prf_input != NULL) /* shouldn't really happen */
2258                                 OPENSSL_free(s->s3->client_opaque_prf_input);
2259                         if (s->s3->client_opaque_prf_input_len == 0)
2260                                 s->s3->client_opaque_prf_input = OPENSSL_malloc(1); /* dummy byte just to get non-NULL */
2261                         else
2262                                 s->s3->client_opaque_prf_input = BUF_memdup(sdata, s->s3->client_opaque_prf_input_len);
2263                         if (s->s3->client_opaque_prf_input == NULL)
2264                                 {
2265                                 *al = TLS1_AD_INTERNAL_ERROR;
2266                                 return 0;
2267                                 }
2268                         }
2269 #endif
2270                 else if (type == TLSEXT_TYPE_session_ticket)
2271                         {
2272                         if (s->tls_session_ticket_ext_cb &&
2273                             !s->tls_session_ticket_ext_cb(s, data, size, s->tls_session_ticket_ext_cb_arg))
2274                                 {
2275                                 *al = TLS1_AD_INTERNAL_ERROR;
2276                                 return 0;
2277                                 }
2278                         }
2279                 else if (type == TLSEXT_TYPE_renegotiate)
2280                         {
2281                         if(!ssl_parse_clienthello_renegotiate_ext(s, data, size, al))
2282                                 return 0;
2283                         renegotiate_seen = 1;
2284                         }
2285                 else if (type == TLSEXT_TYPE_signature_algorithms)
2286                         {
2287                         int dsize;
2288                         if (s->cert->peer_sigalgs || size < 2) 
2289                                 {
2290                                 *al = SSL_AD_DECODE_ERROR;
2291                                 return 0;
2292                                 }
2293                         n2s(data,dsize);
2294                         size -= 2;
2295                         if (dsize != size || dsize & 1 || !dsize) 
2296                                 {
2297                                 *al = SSL_AD_DECODE_ERROR;
2298                                 return 0;
2299                                 }
2300                         if (!tls1_process_sigalgs(s, data, dsize))
2301                                 {
2302                                 *al = SSL_AD_DECODE_ERROR;
2303                                 return 0;
2304                                 }
2305                         /* If sigalgs received and no shared algorithms fatal
2306                          * error.
2307                          */
2308                         if (s->cert->peer_sigalgs && !s->cert->shared_sigalgs)
2309                                 {
2310                                 SSLerr(SSL_F_SSL_SCAN_CLIENTHELLO_TLSEXT,
2311                                         SSL_R_NO_SHARED_SIGATURE_ALGORITHMS);
2312                                 *al = SSL_AD_ILLEGAL_PARAMETER;
2313                                 return 0;
2314                                 }
2315                         }
2316                 else if (type == TLSEXT_TYPE_status_request)
2317                         {
2318                 
2319                         if (size < 5) 
2320                                 {
2321                                 *al = SSL_AD_DECODE_ERROR;
2322                                 return 0;
2323                                 }
2324
2325                         s->tlsext_status_type = *data++;
2326                         size--;
2327                         if (s->tlsext_status_type == TLSEXT_STATUSTYPE_ocsp)
2328                                 {
2329                                 const unsigned char *sdata;
2330                                 int dsize;
2331                                 /* Read in responder_id_list */
2332                                 n2s(data,dsize);
2333                                 size -= 2;
2334                                 if (dsize > size  ) 
2335                                         {
2336                                         *al = SSL_AD_DECODE_ERROR;
2337                                         return 0;
2338                                         }
2339                                 while (dsize > 0)
2340                                         {
2341                                         OCSP_RESPID *id;
2342                                         int idsize;
2343                                         if (dsize < 4)
2344                                                 {
2345                                                 *al = SSL_AD_DECODE_ERROR;
2346                                                 return 0;
2347                                                 }
2348                                         n2s(data, idsize);
2349                                         dsize -= 2 + idsize;
2350                                         size -= 2 + idsize;
2351                                         if (dsize < 0)
2352                                                 {
2353                                                 *al = SSL_AD_DECODE_ERROR;
2354                                                 return 0;
2355                                                 }
2356                                         sdata = data;
2357                                         data += idsize;
2358                                         id = d2i_OCSP_RESPID(NULL,
2359                                                                 &sdata, idsize);
2360                                         if (!id)
2361                                                 {
2362                                                 *al = SSL_AD_DECODE_ERROR;
2363                                                 return 0;
2364                                                 }
2365                                         if (data != sdata)
2366                                                 {
2367                                                 OCSP_RESPID_free(id);
2368                                                 *al = SSL_AD_DECODE_ERROR;
2369                                                 return 0;
2370                                                 }
2371                                         if (!s->tlsext_ocsp_ids
2372                                                 && !(s->tlsext_ocsp_ids =
2373                                                 sk_OCSP_RESPID_new_null()))
2374                                                 {
2375                                                 OCSP_RESPID_free(id);
2376                                                 *al = SSL_AD_INTERNAL_ERROR;
2377                                                 return 0;
2378                                                 }
2379                                         if (!sk_OCSP_RESPID_push(
2380                                                         s->tlsext_ocsp_ids, id))
2381                                                 {
2382                                                 OCSP_RESPID_free(id);
2383                                                 *al = SSL_AD_INTERNAL_ERROR;
2384                                                 return 0;
2385                                                 }
2386                                         }
2387
2388                                 /* Read in request_extensions */
2389                                 if (size < 2)
2390                                         {
2391                                         *al = SSL_AD_DECODE_ERROR;
2392                                         return 0;
2393                                         }
2394                                 n2s(data,dsize);
2395                                 size -= 2;
2396                                 if (dsize != size)
2397                                         {
2398                                         *al = SSL_AD_DECODE_ERROR;
2399                                         return 0;
2400                                         }
2401                                 sdata = data;
2402                                 if (dsize > 0)
2403                                         {
2404                                         if (s->tlsext_ocsp_exts)
2405                                                 {
2406                                                 sk_X509_EXTENSION_pop_free(s->tlsext_ocsp_exts,
2407                                                                            X509_EXTENSION_free);
2408                                                 }
2409
2410                                         s->tlsext_ocsp_exts =
2411                                                 d2i_X509_EXTENSIONS(NULL,
2412                                                         &sdata, dsize);
2413                                         if (!s->tlsext_ocsp_exts
2414                                                 || (data + dsize != sdata))
2415                                                 {
2416                                                 *al = SSL_AD_DECODE_ERROR;
2417                                                 return 0;
2418                                                 }
2419                                         }
2420                                 }
2421                                 /* We don't know what to do with any other type
2422                                 * so ignore it.
2423                                 */
2424                                 else
2425                                         s->tlsext_status_type = -1;
2426                         }
2427 #ifndef OPENSSL_NO_HEARTBEATS
2428                 else if (type == TLSEXT_TYPE_heartbeat)
2429                         {
2430                         switch(data[0])
2431                                 {
2432                                 case 0x01:      /* Client allows us to send HB requests */
2433                                                         s->tlsext_heartbeat |= SSL_TLSEXT_HB_ENABLED;
2434                                                         break;
2435                                 case 0x02:      /* Client doesn't accept HB requests */
2436                                                         s->tlsext_heartbeat |= SSL_TLSEXT_HB_ENABLED;
2437                                                         s->tlsext_heartbeat |= SSL_TLSEXT_HB_DONT_SEND_REQUESTS;
2438                                                         break;
2439                                 default:        *al = SSL_AD_ILLEGAL_PARAMETER;
2440                                                         return 0;
2441                                 }
2442                         }
2443 #endif
2444 #ifndef OPENSSL_NO_NEXTPROTONEG
2445                 else if (type == TLSEXT_TYPE_next_proto_neg &&
2446                          s->s3->tmp.finish_md_len == 0 &&
2447                          s->s3->alpn_selected == NULL)
2448                         {
2449                         /* We shouldn't accept this extension on a
2450                          * renegotiation.
2451                          *
2452                          * s->new_session will be set on renegotiation, but we
2453                          * probably shouldn't rely that it couldn't be set on
2454                          * the initial renegotation too in certain cases (when
2455                          * there's some other reason to disallow resuming an
2456                          * earlier session -- the current code won't be doing
2457                          * anything like that, but this might change).
2458
2459                          * A valid sign that there's been a previous handshake
2460                          * in this connection is if s->s3->tmp.finish_md_len >
2461                          * 0.  (We are talking about a check that will happen
2462                          * in the Hello protocol round, well before a new
2463                          * Finished message could have been computed.) */
2464                         s->s3->next_proto_neg_seen = 1;
2465                         }
2466 #endif
2467
2468                 else if (type == TLSEXT_TYPE_application_layer_protocol_negotiation &&
2469                          s->ctx->alpn_select_cb &&
2470                          s->s3->tmp.finish_md_len == 0)
2471                         {
2472                         if (tls1_alpn_handle_client_hello(s, data, size, al) != 0)
2473                                 return 0;
2474 #ifndef OPENSSL_NO_NEXTPROTONEG
2475                         /* ALPN takes precedence over NPN. */
2476                         s->s3->next_proto_neg_seen = 0;
2477 #endif
2478                         }
2479
2480                 /* session ticket processed earlier */
2481                 else if (type == TLSEXT_TYPE_use_srtp)
2482                         {
2483                         if(ssl_parse_clienthello_use_srtp_ext(s, data, size,
2484                                                               al))
2485                                 return 0;
2486                         }
2487                 /* If this ClientHello extension was unhandled and this is 
2488                  * a nonresumed connection, check whether the extension is a 
2489                  * custom TLS Extension (has a custom_srv_ext_record), and if
2490                  * so call the callback and record the extension number so that
2491                  * an appropriate ServerHello may be later returned.
2492                  */
2493                 else if (!s->hit && s->ctx->custom_srv_ext_records_count)
2494                         {
2495                         custom_srv_ext_record *record;
2496
2497                         for (i=0; i < s->ctx->custom_srv_ext_records_count; i++)
2498                                 {
2499                                 record = &s->ctx->custom_srv_ext_records[i];
2500                                 if (type == record->ext_type)
2501                                         {
2502                                         if (record->fn1 && !record->fn1(s, type, data, size, al, record->arg))
2503                                                 return 0;
2504                                         }                                               
2505                                 }
2506                         }
2507 #ifdef TLSEXT_TYPE_encrypt_then_mac
2508                 else if (type == TLSEXT_TYPE_encrypt_then_mac)
2509                         s->s3->flags |= TLS1_FLAGS_ENCRYPT_THEN_MAC;
2510 #endif
2511
2512                 data+=size;
2513                 }
2514
2515         *p = data;
2516
2517         ri_check:
2518
2519         /* Need RI if renegotiating */
2520
2521         if (!renegotiate_seen && s->renegotiate &&
2522                 !(s->options & SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION))
2523                 {
2524                 *al = SSL_AD_HANDSHAKE_FAILURE;
2525                 SSLerr(SSL_F_SSL_SCAN_CLIENTHELLO_TLSEXT,
2526                                 SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED);
2527                 return 0;
2528                 }
2529         /* If no signature algorithms extension set default values */
2530         if (!s->cert->peer_sigalgs)
2531                 ssl_cert_set_default_md(s->cert);
2532
2533         return 1;
2534         }
2535
2536 int ssl_parse_clienthello_tlsext(SSL *s, unsigned char **p, unsigned char *d, int n) 
2537         {
2538         int al = -1;
2539         if (ssl_scan_clienthello_tlsext(s, p, d, n, &al) <= 0) 
2540                 {
2541                 ssl3_send_alert(s,SSL3_AL_FATAL,al); 
2542                 return 0;
2543                 }
2544
2545         if (ssl_check_clienthello_tlsext_early(s) <= 0) 
2546                 {
2547                 SSLerr(SSL_F_SSL_PARSE_CLIENTHELLO_TLSEXT,SSL_R_CLIENTHELLO_TLSEXT);
2548                 return 0;
2549                 }
2550         return 1;
2551 }
2552
2553 #ifndef OPENSSL_NO_NEXTPROTONEG
2554 /* ssl_next_proto_validate validates a Next Protocol Negotiation block. No
2555  * elements of zero length are allowed and the set of elements must exactly fill
2556  * the length of the block. */
2557 static char ssl_next_proto_validate(unsigned char *d, unsigned len)
2558         {
2559         unsigned int off = 0;
2560
2561         while (off < len)
2562                 {
2563                 if (d[off] == 0)
2564                         return 0;
2565                 off += d[off];
2566                 off++;
2567                 }
2568
2569         return off == len;
2570         }
2571 #endif
2572
2573 static int ssl_scan_serverhello_tlsext(SSL *s, unsigned char **p, unsigned char *d, int n, int *al)
2574         {
2575         unsigned short length;
2576         unsigned short type;
2577         unsigned short size;
2578         unsigned char *data = *p;
2579         int tlsext_servername = 0;
2580         int renegotiate_seen = 0;
2581
2582 #ifndef OPENSSL_NO_NEXTPROTONEG
2583         s->s3->next_proto_neg_seen = 0;
2584 #endif
2585
2586         if (s->s3->alpn_selected)
2587                 {
2588                 OPENSSL_free(s->s3->alpn_selected);
2589                 s->s3->alpn_selected = NULL;
2590                 }
2591
2592 #ifndef OPENSSL_NO_HEARTBEATS
2593         s->tlsext_heartbeat &= ~(SSL_TLSEXT_HB_ENABLED |
2594                                SSL_TLSEXT_HB_DONT_SEND_REQUESTS);
2595 #endif
2596
2597 #ifdef TLSEXT_TYPE_encrypt_then_mac
2598         s->s3->flags &= ~TLS1_FLAGS_ENCRYPT_THEN_MAC;
2599 #endif
2600
2601         if (data >= (d+n-2))
2602                 goto ri_check;
2603
2604         n2s(data,length);
2605         if (data+length != d+n)
2606                 {
2607                 *al = SSL_AD_DECODE_ERROR;
2608                 return 0;
2609                 }
2610
2611         while(data <= (d+n-4))
2612                 {
2613                 n2s(data,type);
2614                 n2s(data,size);
2615
2616                 if (data+size > (d+n))
2617                         goto ri_check;
2618
2619                 if (s->tlsext_debug_cb)
2620                         s->tlsext_debug_cb(s, 1, type, data, size,
2621                                                 s->tlsext_debug_arg);
2622
2623                 if (type == TLSEXT_TYPE_server_name)
2624                         {
2625                         if (s->tlsext_hostname == NULL || size > 0)
2626                                 {
2627                                 *al = TLS1_AD_UNRECOGNIZED_NAME;
2628                                 return 0;
2629                                 }
2630                         tlsext_servername = 1;   
2631                         }
2632
2633 #ifndef OPENSSL_NO_EC
2634                 else if (type == TLSEXT_TYPE_ec_point_formats)
2635                         {
2636                         unsigned char *sdata = data;
2637                         int ecpointformatlist_length = *(sdata++);
2638
2639                         if (ecpointformatlist_length != size - 1)
2640                                 {
2641                                 *al = TLS1_AD_DECODE_ERROR;
2642                                 return 0;
2643                                 }
2644                         s->session->tlsext_ecpointformatlist_length = 0;
2645                         if (s->session->tlsext_ecpointformatlist != NULL) OPENSSL_free(s->session->tlsext_ecpointformatlist);
2646                         if ((s->session->tlsext_ecpointformatlist = OPENSSL_malloc(ecpointformatlist_length)) == NULL)
2647                                 {
2648                                 *al = TLS1_AD_INTERNAL_ERROR;
2649                                 return 0;
2650                                 }
2651                         s->session->tlsext_ecpointformatlist_length = ecpointformatlist_length;
2652                         memcpy(s->session->tlsext_ecpointformatlist, sdata, ecpointformatlist_length);
2653 #if 0
2654                         fprintf(stderr,"ssl_parse_serverhello_tlsext s->session->tlsext_ecpointformatlist ");
2655                         sdata = s->session->tlsext_ecpointformatlist;
2656                         for (i = 0; i < s->session->tlsext_ecpointformatlist_length; i++)
2657                                 fprintf(stderr,"%i ",*(sdata++));
2658                         fprintf(stderr,"\n");
2659 #endif
2660                         }
2661 #endif /* OPENSSL_NO_EC */
2662
2663                 else if (type == TLSEXT_TYPE_session_ticket)
2664                         {
2665                         if (s->tls_session_ticket_ext_cb &&
2666                             !s->tls_session_ticket_ext_cb(s, data, size, s->tls_session_ticket_ext_cb_arg))
2667                                 {
2668                                 *al = TLS1_AD_INTERNAL_ERROR;
2669                                 return 0;
2670                                 }
2671                         if (!tls_use_ticket(s) || (size > 0))
2672                                 {
2673                                 *al = TLS1_AD_UNSUPPORTED_EXTENSION;
2674                                 return 0;
2675                                 }
2676                         s->tlsext_ticket_expected = 1;
2677                         }
2678 #ifdef TLSEXT_TYPE_opaque_prf_input
2679                 else if (type == TLSEXT_TYPE_opaque_prf_input)
2680                         {
2681                         unsigned char *sdata = data;
2682
2683                         if (size < 2)
2684                                 {
2685                                 *al = SSL_AD_DECODE_ERROR;
2686                                 return 0;
2687                                 }
2688                         n2s(sdata, s->s3->server_opaque_prf_input_len);
2689                         if (s->s3->server_opaque_prf_input_len != size - 2)
2690                                 {
2691                                 *al = SSL_AD_DECODE_ERROR;
2692                                 return 0;
2693                                 }
2694                         
2695                         if (s->s3->server_opaque_prf_input != NULL) /* shouldn't really happen */
2696                                 OPENSSL_free(s->s3->server_opaque_prf_input);
2697                         if (s->s3->server_opaque_prf_input_len == 0)
2698                                 s->s3->server_opaque_prf_input = OPENSSL_malloc(1); /* dummy byte just to get non-NULL */
2699                         else
2700                                 s->s3->server_opaque_prf_input = BUF_memdup(sdata, s->s3->server_opaque_prf_input_len);
2701
2702                         if (s->s3->server_opaque_prf_input == NULL)
2703                                 {
2704                                 *al = TLS1_AD_INTERNAL_ERROR;
2705                                 return 0;
2706                                 }
2707                         }
2708 #endif
2709                 else if (type == TLSEXT_TYPE_status_request)
2710                         {
2711                         /* MUST be empty and only sent if we've requested
2712                          * a status request message.
2713                          */ 
2714                         if ((s->tlsext_status_type == -1) || (size > 0))
2715                                 {
2716                                 *al = TLS1_AD_UNSUPPORTED_EXTENSION;
2717                                 return 0;
2718                                 }
2719                         /* Set flag to expect CertificateStatus message */
2720                         s->tlsext_status_expected = 1;
2721                         }
2722 #ifndef OPENSSL_NO_NEXTPROTONEG
2723                 else if (type == TLSEXT_TYPE_next_proto_neg &&
2724                          s->s3->tmp.finish_md_len == 0)
2725                         {
2726                         unsigned char *selected;
2727                         unsigned char selected_len;
2728
2729                         /* We must have requested it. */
2730                         if (s->ctx->next_proto_select_cb == NULL)
2731                                 {
2732                                 *al = TLS1_AD_UNSUPPORTED_EXTENSION;
2733                                 return 0;
2734                                 }
2735                         /* The data must be valid */
2736                         if (!ssl_next_proto_validate(data, size))
2737                                 {
2738                                 *al = TLS1_AD_DECODE_ERROR;
2739                                 return 0;
2740                                 }
2741                         if (s->ctx->next_proto_select_cb(s, &selected, &selected_len, data, size, s->ctx->next_proto_select_cb_arg) != SSL_TLSEXT_ERR_OK)
2742                                 {
2743                                 *al = TLS1_AD_INTERNAL_ERROR;
2744                                 return 0;
2745                                 }
2746                         s->next_proto_negotiated = OPENSSL_malloc(selected_len);
2747                         if (!s->next_proto_negotiated)
2748                                 {
2749                                 *al = TLS1_AD_INTERNAL_ERROR;
2750                                 return 0;
2751                                 }
2752                         memcpy(s->next_proto_negotiated, selected, selected_len);
2753                         s->next_proto_negotiated_len = selected_len;
2754                         s->s3->next_proto_neg_seen = 1;
2755                         }
2756 #endif
2757
2758                 else if (type == TLSEXT_TYPE_application_layer_protocol_negotiation)
2759                         {
2760                         unsigned len;
2761
2762                         /* We must have requested it. */
2763                         if (s->alpn_client_proto_list == NULL)
2764                                 {
2765                                 *al = TLS1_AD_UNSUPPORTED_EXTENSION;
2766                                 return 0;
2767                                 }
2768                         if (size < 4)
2769                                 {
2770                                 *al = TLS1_AD_DECODE_ERROR;
2771                                 return 0;
2772                                 }
2773                         /* The extension data consists of:
2774                          *   uint16 list_length
2775                          *   uint8 proto_length;
2776                          *   uint8 proto[proto_length]; */
2777                         len = data[0];
2778                         len <<= 8;
2779                         len |= data[1];
2780                         if (len != (unsigned) size - 2)
2781                                 {
2782                                 *al = TLS1_AD_DECODE_ERROR;
2783                                 return 0;
2784                                 }
2785                         len = data[2];
2786                         if (len != (unsigned) size - 3)
2787                                 {
2788                                 *al = TLS1_AD_DECODE_ERROR;
2789                                 return 0;
2790                                 }
2791                         if (s->s3->alpn_selected)
2792                                 OPENSSL_free(s->s3->alpn_selected);
2793                         s->s3->alpn_selected = OPENSSL_malloc(len);
2794                         if (!s->s3->alpn_selected)
2795                                 {
2796                                 *al = TLS1_AD_INTERNAL_ERROR;
2797                                 return 0;
2798                                 }
2799                         memcpy(s->s3->alpn_selected, data + 3, len);
2800                         s->s3->alpn_selected_len = len;
2801                         }
2802
2803                 else if (type == TLSEXT_TYPE_renegotiate)
2804                         {
2805                         if(!ssl_parse_serverhello_renegotiate_ext(s, data, size, al))
2806                                 return 0;
2807                         renegotiate_seen = 1;
2808                         }
2809 #ifndef OPENSSL_NO_HEARTBEATS
2810                 else if (type == TLSEXT_TYPE_heartbeat)
2811                         {
2812                         switch(data[0])
2813                                 {
2814                                 case 0x01:      /* Server allows us to send HB requests */
2815                                                         s->tlsext_heartbeat |= SSL_TLSEXT_HB_ENABLED;
2816                                                         break;
2817                                 case 0x02:      /* Server doesn't accept HB requests */
2818                                                         s->tlsext_heartbeat |= SSL_TLSEXT_HB_ENABLED;
2819                                                         s->tlsext_heartbeat |= SSL_TLSEXT_HB_DONT_SEND_REQUESTS;
2820                                                         break;
2821                                 default:        *al = SSL_AD_ILLEGAL_PARAMETER;
2822                                                         return 0;
2823                                 }
2824                         }
2825 #endif
2826                 else if (type == TLSEXT_TYPE_use_srtp)
2827                         {
2828                         if(ssl_parse_serverhello_use_srtp_ext(s, data, size,
2829                                                               al))
2830                                 return 0;
2831                         }
2832                 /* If this extension type was not otherwise handled, but 
2833                  * matches a custom_cli_ext_record, then send it to the c
2834                  * callback */
2835                 else if (s->ctx->custom_cli_ext_records_count)
2836                         {
2837                         size_t i;
2838                         custom_cli_ext_record* record;
2839
2840                         for (i = 0; i < s->ctx->custom_cli_ext_records_count; i++)
2841                                 {
2842                                 record = &s->ctx->custom_cli_ext_records[i];
2843                                 if (record->ext_type == type)
2844                                         {
2845                                         if (record->fn2 && !record->fn2(s, type, data, size, al, record->arg))
2846                                                 return 0;
2847                                         break;
2848                                         }
2849                                 }                       
2850                         }
2851 #ifdef TLSEXT_TYPE_encrypt_then_mac
2852                 else if (type == TLSEXT_TYPE_encrypt_then_mac)
2853                         {
2854                         /* Ignore if inappropriate ciphersuite */
2855                         if (s->s3->tmp.new_cipher->algorithm_mac != SSL_AEAD)
2856                                 s->s3->flags |= TLS1_FLAGS_ENCRYPT_THEN_MAC;
2857                         }
2858 #endif
2859  
2860                 data += size;
2861                 }
2862
2863         if (data != d+n)
2864                 {
2865                 *al = SSL_AD_DECODE_ERROR;
2866                 return 0;
2867                 }
2868
2869         if (!s->hit && tlsext_servername == 1)
2870                 {
2871                 if (s->tlsext_hostname)
2872                         {
2873                         if (s->session->tlsext_hostname == NULL)
2874                                 {
2875                                 s->session->tlsext_hostname = BUF_strdup(s->tlsext_hostname);   
2876                                 if (!s->session->tlsext_hostname)
2877                                         {
2878                                         *al = SSL_AD_UNRECOGNIZED_NAME;
2879                                         return 0;
2880                                         }
2881                                 }
2882                         else 
2883                                 {
2884                                 *al = SSL_AD_DECODE_ERROR;
2885                                 return 0;
2886                                 }
2887                         }
2888                 }
2889
2890         *p = data;
2891
2892         ri_check:
2893
2894         /* Determine if we need to see RI. Strictly speaking if we want to
2895          * avoid an attack we should *always* see RI even on initial server
2896          * hello because the client doesn't see any renegotiation during an
2897          * attack. However this would mean we could not connect to any server
2898          * which doesn't support RI so for the immediate future tolerate RI
2899          * absence on initial connect only.
2900          */
2901         if (!renegotiate_seen
2902                 && !(s->options & SSL_OP_LEGACY_SERVER_CONNECT)
2903                 && !(s->options & SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION))
2904                 {
2905                 *al = SSL_AD_HANDSHAKE_FAILURE;
2906                 SSLerr(SSL_F_SSL_SCAN_SERVERHELLO_TLSEXT,
2907                                 SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED);
2908                 return 0;
2909                 }
2910
2911         return 1;
2912         }
2913
2914
2915 int ssl_prepare_clienthello_tlsext(SSL *s)
2916         {
2917
2918 #ifdef TLSEXT_TYPE_opaque_prf_input
2919         {
2920                 int r = 1;
2921         
2922                 if (s->ctx->tlsext_opaque_prf_input_callback != 0)
2923                         {
2924                         r = s->ctx->tlsext_opaque_prf_input_callback(s, NULL, 0, s->ctx->tlsext_opaque_prf_input_callback_arg);
2925                         if (!r)
2926                                 return -1;
2927                         }
2928
2929                 if (s->tlsext_opaque_prf_input != NULL)
2930                         {
2931                         if (s->s3->client_opaque_prf_input != NULL) /* shouldn't really happen */
2932                                 OPENSSL_free(s->s3->client_opaque_prf_input);
2933
2934                         if (s->tlsext_opaque_prf_input_len == 0)
2935                                 s->s3->client_opaque_prf_input = OPENSSL_malloc(1); /* dummy byte just to get non-NULL */
2936                         else
2937                                 s->s3->client_opaque_prf_input = BUF_memdup(s->tlsext_opaque_prf_input, s->tlsext_opaque_prf_input_len);
2938                         if (s->s3->client_opaque_prf_input == NULL)
2939                                 {
2940                                 SSLerr(SSL_F_SSL_PREPARE_CLIENTHELLO_TLSEXT,ERR_R_MALLOC_FAILURE);
2941                                 return -1;
2942                                 }
2943                         s->s3->client_opaque_prf_input_len = s->tlsext_opaque_prf_input_len;
2944                         }
2945
2946                 if (r == 2)
2947                         /* at callback's request, insist on receiving an appropriate server opaque PRF input */
2948                         s->s3->server_opaque_prf_input_len = s->tlsext_opaque_prf_input_len;
2949         }
2950 #endif
2951
2952         return 1;
2953         }
2954
2955 int ssl_prepare_serverhello_tlsext(SSL *s)
2956         {
2957         return 1;
2958         }
2959
2960 static int ssl_check_clienthello_tlsext_early(SSL *s)
2961         {
2962         int ret=SSL_TLSEXT_ERR_NOACK;
2963         int al = SSL_AD_UNRECOGNIZED_NAME;
2964
2965 #ifndef OPENSSL_NO_EC
2966         /* The handling of the ECPointFormats extension is done elsewhere, namely in 
2967          * ssl3_choose_cipher in s3_lib.c.
2968          */
2969         /* The handling of the EllipticCurves extension is done elsewhere, namely in 
2970          * ssl3_choose_cipher in s3_lib.c.
2971          */
2972 #endif
2973
2974         if (s->ctx != NULL && s->ctx->tlsext_servername_callback != 0) 
2975                 ret = s->ctx->tlsext_servername_callback(s, &al, s->ctx->tlsext_servername_arg);
2976         else if (s->initial_ctx != NULL && s->initial_ctx->tlsext_servername_callback != 0)             
2977                 ret = s->initial_ctx->tlsext_servername_callback(s, &al, s->initial_ctx->tlsext_servername_arg);
2978
2979 #ifdef TLSEXT_TYPE_opaque_prf_input
2980         {
2981                 /* This sort of belongs into ssl_prepare_serverhello_tlsext(),
2982                  * but we might be sending an alert in response to the client hello,
2983                  * so this has to happen here in
2984                  * ssl_check_clienthello_tlsext_early(). */
2985
2986                 int r = 1;
2987         
2988                 if (s->ctx->tlsext_opaque_prf_input_callback != 0)
2989                         {
2990                         r = s->ctx->tlsext_opaque_prf_input_callback(s, NULL, 0, s->ctx->tlsext_opaque_prf_input_callback_arg);
2991                         if (!r)
2992                                 {
2993                                 ret = SSL_TLSEXT_ERR_ALERT_FATAL;
2994                                 al = SSL_AD_INTERNAL_ERROR;
2995                                 goto err;
2996                                 }
2997                         }
2998
2999                 if (s->s3->server_opaque_prf_input != NULL) /* shouldn't really happen */
3000                         OPENSSL_free(s->s3->server_opaque_prf_input);
3001                 s->s3->server_opaque_prf_input = NULL;
3002
3003                 if (s->tlsext_opaque_prf_input != NULL)
3004                         {
3005                         if (s->s3->client_opaque_prf_input != NULL &&
3006                                 s->s3->client_opaque_prf_input_len == s->tlsext_opaque_prf_input_len)
3007                                 {
3008                                 /* can only use this extension if we have a server opaque PRF input
3009                                  * of the same length as the client opaque PRF input! */
3010
3011                                 if (s->tlsext_opaque_prf_input_len == 0)
3012                                         s->s3->server_opaque_prf_input = OPENSSL_malloc(1); /* dummy byte just to get non-NULL */
3013                                 else
3014                                         s->s3->server_opaque_prf_input = BUF_memdup(s->tlsext_opaque_prf_input, s->tlsext_opaque_prf_input_len);
3015                                 if (s->s3->server_opaque_prf_input == NULL)
3016                                         {
3017                                         ret = SSL_TLSEXT_ERR_ALERT_FATAL;
3018                                         al = SSL_AD_INTERNAL_ERROR;
3019                                         goto err;
3020                                         }
3021                                 s->s3->server_opaque_prf_input_len = s->tlsext_opaque_prf_input_len;
3022                                 }
3023                         }
3024
3025                 if (r == 2 && s->s3->server_opaque_prf_input == NULL)
3026                         {
3027                         /* The callback wants to enforce use of the extension,
3028                          * but we can't do that with the client opaque PRF input;
3029                          * abort the handshake.
3030                          */
3031                         ret = SSL_TLSEXT_ERR_ALERT_FATAL;
3032                         al = SSL_AD_HANDSHAKE_FAILURE;
3033                         }
3034         }
3035
3036  err:
3037 #endif
3038         switch (ret)
3039                 {
3040                 case SSL_TLSEXT_ERR_ALERT_FATAL:
3041                         ssl3_send_alert(s,SSL3_AL_FATAL,al); 
3042                         return -1;
3043
3044                 case SSL_TLSEXT_ERR_ALERT_WARNING:
3045                         ssl3_send_alert(s,SSL3_AL_WARNING,al);
3046                         return 1; 
3047                                         
3048                 case SSL_TLSEXT_ERR_NOACK:
3049                         s->servername_done=0;
3050                         default:
3051                 return 1;
3052                 }
3053         }
3054
3055 int ssl_check_clienthello_tlsext_late(SSL *s)
3056         {
3057         int ret = SSL_TLSEXT_ERR_OK;
3058         int al;
3059
3060         /* If status request then ask callback what to do.
3061          * Note: this must be called after servername callbacks in case
3062          * the certificate has changed, and must be called after the cipher
3063          * has been chosen because this may influence which certificate is sent
3064          */
3065         if ((s->tlsext_status_type != -1) && s->ctx && s->ctx->tlsext_status_cb)
3066                 {
3067                 int r;
3068                 CERT_PKEY *certpkey;
3069                 certpkey = ssl_get_server_send_pkey(s);
3070                 /* If no certificate can't return certificate status */
3071                 if (certpkey == NULL)
3072                         {
3073                         s->tlsext_status_expected = 0;
3074                         return 1;
3075                         }
3076                 /* Set current certificate to one we will use so
3077                  * SSL_get_certificate et al can pick it up.
3078                  */
3079                 s->cert->key = certpkey;
3080                 r = s->ctx->tlsext_status_cb(s, s->ctx->tlsext_status_arg);
3081                 switch (r)
3082                         {
3083                         /* We don't want to send a status request response */
3084                         case SSL_TLSEXT_ERR_NOACK:
3085                                 s->tlsext_status_expected = 0;
3086                                 break;
3087                         /* status request response should be sent */
3088                         case SSL_TLSEXT_ERR_OK:
3089                                 if (s->tlsext_ocsp_resp)
3090                                         s->tlsext_status_expected = 1;
3091                                 else
3092                                         s->tlsext_status_expected = 0;
3093                                 break;
3094                         /* something bad happened */
3095                         case SSL_TLSEXT_ERR_ALERT_FATAL:
3096                                 ret = SSL_TLSEXT_ERR_ALERT_FATAL;
3097                                 al = SSL_AD_INTERNAL_ERROR;
3098                                 goto err;
3099                         }
3100                 }
3101         else
3102                 s->tlsext_status_expected = 0;
3103
3104  err:
3105         switch (ret)
3106                 {
3107                 case SSL_TLSEXT_ERR_ALERT_FATAL:
3108                         ssl3_send_alert(s, SSL3_AL_FATAL, al);
3109                         return -1;
3110
3111                 case SSL_TLSEXT_ERR_ALERT_WARNING:
3112                         ssl3_send_alert(s, SSL3_AL_WARNING, al);
3113                         return 1; 
3114
3115                 default:
3116                         return 1;
3117                 }
3118         }
3119
3120 int ssl_check_serverhello_tlsext(SSL *s)
3121         {
3122         int ret=SSL_TLSEXT_ERR_NOACK;
3123         int al = SSL_AD_UNRECOGNIZED_NAME;
3124
3125 #ifndef OPENSSL_NO_EC
3126         /* If we are client and using an elliptic curve cryptography cipher
3127          * suite, then if server returns an EC point formats lists extension
3128          * it must contain uncompressed.
3129          */
3130         unsigned long alg_k = s->s3->tmp.new_cipher->algorithm_mkey;
3131         unsigned long alg_a = s->s3->tmp.new_cipher->algorithm_auth;
3132         if ((s->tlsext_ecpointformatlist != NULL) && (s->tlsext_ecpointformatlist_length > 0) && 
3133             (s->session->tlsext_ecpointformatlist != NULL) && (s->session->tlsext_ecpointformatlist_length > 0) && 
3134             ((alg_k & (SSL_kECDHE|SSL_kECDHr|SSL_kECDHe)) || (alg_a & SSL_aECDSA)))
3135                 {
3136                 /* we are using an ECC cipher */
3137                 size_t i;
3138                 unsigned char *list;
3139                 int found_uncompressed = 0;
3140                 list = s->session->tlsext_ecpointformatlist;
3141                 for (i = 0; i < s->session->tlsext_ecpointformatlist_length; i++)
3142                         {
3143                         if (*(list++) == TLSEXT_ECPOINTFORMAT_uncompressed)
3144                                 {
3145                                 found_uncompressed = 1;
3146                                 break;
3147                                 }
3148                         }
3149                 if (!found_uncompressed)
3150                         {
3151                         SSLerr(SSL_F_SSL_CHECK_SERVERHELLO_TLSEXT,SSL_R_TLS_INVALID_ECPOINTFORMAT_LIST);
3152                         return -1;
3153                         }
3154                 }
3155         ret = SSL_TLSEXT_ERR_OK;
3156 #endif /* OPENSSL_NO_EC */
3157
3158         if (s->ctx != NULL && s->ctx->tlsext_servername_callback != 0) 
3159                 ret = s->ctx->tlsext_servername_callback(s, &al, s->ctx->tlsext_servername_arg);
3160         else if (s->initial_ctx != NULL && s->initial_ctx->tlsext_servername_callback != 0)             
3161                 ret = s->initial_ctx->tlsext_servername_callback(s, &al, s->initial_ctx->tlsext_servername_arg);
3162
3163 #ifdef TLSEXT_TYPE_opaque_prf_input
3164         if (s->s3->server_opaque_prf_input_len > 0)
3165                 {
3166                 /* This case may indicate that we, as a client, want to insist on using opaque PRF inputs.
3167                  * So first verify that we really have a value from the server too. */
3168
3169                 if (s->s3->server_opaque_prf_input == NULL)
3170                         {
3171                         ret = SSL_TLSEXT_ERR_ALERT_FATAL;
3172                         al = SSL_AD_HANDSHAKE_FAILURE;
3173                         }
3174                 
3175                 /* Anytime the server *has* sent an opaque PRF input, we need to check
3176                  * that we have a client opaque PRF input of the same size. */
3177                 if (s->s3->client_opaque_prf_input == NULL ||
3178                     s->s3->client_opaque_prf_input_len != s->s3->server_opaque_prf_input_len)
3179                         {
3180                         ret = SSL_TLSEXT_ERR_ALERT_FATAL;
3181                         al = SSL_AD_ILLEGAL_PARAMETER;
3182                         }
3183                 }
3184 #endif
3185
3186         /* If we've requested certificate status and we wont get one
3187          * tell the callback
3188          */
3189         if ((s->tlsext_status_type != -1) && !(s->tlsext_status_expected)
3190                         && s->ctx && s->ctx->tlsext_status_cb)
3191                 {
3192                 int r;
3193                 /* Set resp to NULL, resplen to -1 so callback knows
3194                  * there is no response.
3195                  */
3196                 if (s->tlsext_ocsp_resp)
3197                         {
3198                         OPENSSL_free(s->tlsext_ocsp_resp);
3199                         s->tlsext_ocsp_resp = NULL;
3200                         }
3201                 s->tlsext_ocsp_resplen = -1;
3202                 r = s->ctx->tlsext_status_cb(s, s->ctx->tlsext_status_arg);
3203                 if (r == 0)
3204                         {
3205                         al = SSL_AD_BAD_CERTIFICATE_STATUS_RESPONSE;
3206                         ret = SSL_TLSEXT_ERR_ALERT_FATAL;
3207                         }
3208                 if (r < 0)
3209                         {
3210                         al = SSL_AD_INTERNAL_ERROR;
3211                         ret = SSL_TLSEXT_ERR_ALERT_FATAL;
3212                         }
3213                 }
3214
3215         switch (ret)
3216                 {
3217                 case SSL_TLSEXT_ERR_ALERT_FATAL:
3218                         ssl3_send_alert(s,SSL3_AL_FATAL,al); 
3219                         return -1;
3220
3221                 case SSL_TLSEXT_ERR_ALERT_WARNING:
3222                         ssl3_send_alert(s,SSL3_AL_WARNING,al);
3223                         return 1; 
3224                                         
3225                 case SSL_TLSEXT_ERR_NOACK:
3226                         s->servername_done=0;
3227                         default:
3228                 return 1;
3229                 }
3230         }
3231
3232 int ssl_parse_serverhello_tlsext(SSL *s, unsigned char **p, unsigned char *d, int n) 
3233         {
3234         int al = -1;
3235         if (s->version < SSL3_VERSION)
3236                 return 1;
3237         if (ssl_scan_serverhello_tlsext(s, p, d, n, &al) <= 0) 
3238                 {
3239                 ssl3_send_alert(s,SSL3_AL_FATAL,al); 
3240                 return 0;
3241                 }
3242
3243         if (ssl_check_serverhello_tlsext(s) <= 0) 
3244                 {
3245                 SSLerr(SSL_F_SSL_PARSE_SERVERHELLO_TLSEXT,SSL_R_SERVERHELLO_TLSEXT);
3246                 return 0;
3247                 }
3248         return 1;
3249 }
3250
3251 /* Since the server cache lookup is done early on in the processing of the
3252  * ClientHello, and other operations depend on the result, we need to handle
3253  * any TLS session ticket extension at the same time.
3254  *
3255  *   session_id: points at the session ID in the ClientHello. This code will
3256  *       read past the end of this in order to parse out the session ticket
3257  *       extension, if any.
3258  *   len: the length of the session ID.
3259  *   limit: a pointer to the first byte after the ClientHello.
3260  *   ret: (output) on return, if a ticket was decrypted, then this is set to
3261  *       point to the resulting session.
3262  *
3263  * If s->tls_session_secret_cb is set then we are expecting a pre-shared key
3264  * ciphersuite, in which case we have no use for session tickets and one will
3265  * never be decrypted, nor will s->tlsext_ticket_expected be set to 1.
3266  *
3267  * Returns:
3268  *   -1: fatal error, either from parsing or decrypting the ticket.
3269  *    0: no ticket was found (or was ignored, based on settings).
3270  *    1: a zero length extension was found, indicating that the client supports
3271  *       session tickets but doesn't currently have one to offer.
3272  *    2: either s->tls_session_secret_cb was set, or a ticket was offered but
3273  *       couldn't be decrypted because of a non-fatal error.
3274  *    3: a ticket was successfully decrypted and *ret was set.
3275  *
3276  * Side effects:
3277  *   Sets s->tlsext_ticket_expected to 1 if the server will have to issue
3278  *   a new session ticket to the client because the client indicated support
3279  *   (and s->tls_session_secret_cb is NULL) but the client either doesn't have
3280  *   a session ticket or we couldn't use the one it gave us, or if
3281  *   s->ctx->tlsext_ticket_key_cb asked to renew the client's ticket.
3282  *   Otherwise, s->tlsext_ticket_expected is set to 0.
3283  */
3284 int tls1_process_ticket(SSL *s, unsigned char *session_id, int len,
3285                         const unsigned char *limit, SSL_SESSION **ret)
3286         {
3287         /* Point after session ID in client hello */
3288         const unsigned char *p = session_id + len;
3289         unsigned short i;
3290
3291         *ret = NULL;
3292         s->tlsext_ticket_expected = 0;
3293
3294         /* If tickets disabled behave as if no ticket present
3295          * to permit stateful resumption.
3296          */
3297         if (!tls_use_ticket(s))
3298                 return 0;
3299         if ((s->version <= SSL3_VERSION) || !limit)
3300                 return 0;
3301         if (p >= limit)
3302                 return -1;
3303         /* Skip past DTLS cookie */
3304         if (SSL_IS_DTLS(s))
3305                 {
3306                 i = *(p++);
3307                 p+= i;
3308                 if (p >= limit)
3309                         return -1;
3310                 }
3311         /* Skip past cipher list */
3312         n2s(p, i);
3313         p+= i;
3314         if (p >= limit)
3315                 return -1;
3316         /* Skip past compression algorithm list */
3317         i = *(p++);
3318         p += i;
3319         if (p > limit)
3320                 return -1;
3321         /* Now at start of extensions */
3322         if ((p + 2) >= limit)
3323                 return 0;
3324         n2s(p, i);
3325         while ((p + 4) <= limit)
3326                 {
3327                 unsigned short type, size;
3328                 n2s(p, type);
3329                 n2s(p, size);
3330                 if (p + size > limit)
3331                         return 0;
3332                 if (type == TLSEXT_TYPE_session_ticket)
3333                         {
3334                         int r;
3335                         if (size == 0)
3336                                 {
3337                                 /* The client will accept a ticket but doesn't
3338                                  * currently have one. */
3339                                 s->tlsext_ticket_expected = 1;
3340                                 return 1;
3341                                 }
3342                         if (s->tls_session_secret_cb)
3343                                 {
3344                                 /* Indicate that the ticket couldn't be
3345                                  * decrypted rather than generating the session
3346                                  * from ticket now, trigger abbreviated
3347                                  * handshake based on external mechanism to
3348                                  * calculate the master secret later. */
3349                                 return 2;
3350                                 }
3351                         r = tls_decrypt_ticket(s, p, size, session_id, len, ret);
3352                         switch (r)
3353                                 {
3354                                 case 2: /* ticket couldn't be decrypted */
3355                                         s->tlsext_ticket_expected = 1;
3356                                         return 2;
3357                                 case 3: /* ticket was decrypted */
3358                                         return r;
3359                                 case 4: /* ticket decrypted but need to renew */
3360                                         s->tlsext_ticket_expected = 1;
3361                                         return 3;
3362                                 default: /* fatal error */
3363                                         return -1;
3364                                 }
3365                         }
3366                 p += size;
3367                 }
3368         return 0;
3369         }
3370
3371 /* tls_decrypt_ticket attempts to decrypt a session ticket.
3372  *
3373  *   etick: points to the body of the session ticket extension.
3374  *   eticklen: the length of the session tickets extenion.
3375  *   sess_id: points at the session ID.
3376  *   sesslen: the length of the session ID.
3377  *   psess: (output) on return, if a ticket was decrypted, then this is set to
3378  *       point to the resulting session.
3379  *
3380  * Returns:
3381  *   -1: fatal error, either from parsing or decrypting the ticket.
3382  *    2: the ticket couldn't be decrypted.
3383  *    3: a ticket was successfully decrypted and *psess was set.
3384  *    4: same as 3, but the ticket needs to be renewed.
3385  */
3386 static int tls_decrypt_ticket(SSL *s, const unsigned char *etick, int eticklen,
3387                                 const unsigned char *sess_id, int sesslen,
3388                                 SSL_SESSION **psess)
3389         {
3390         SSL_SESSION *sess;
3391         unsigned char *sdec;
3392         const unsigned char *p;
3393         int slen, mlen, renew_ticket = 0;
3394         unsigned char tick_hmac[EVP_MAX_MD_SIZE];
3395         HMAC_CTX hctx;
3396         EVP_CIPHER_CTX ctx;
3397         SSL_CTX *tctx = s->initial_ctx;
3398         /* Need at least keyname + iv + some encrypted data */
3399         if (eticklen < 48)
3400                 return 2;
3401         /* Initialize session ticket encryption and HMAC contexts */
3402         HMAC_CTX_init(&hctx);
3403         EVP_CIPHER_CTX_init(&ctx);
3404         if (tctx->tlsext_ticket_key_cb)
3405                 {
3406                 unsigned char *nctick = (unsigned char *)etick;
3407                 int rv = tctx->tlsext_ticket_key_cb(s, nctick, nctick + 16,
3408                                                         &ctx, &hctx, 0);
3409                 if (rv < 0)
3410                         return -1;
3411                 if (rv == 0)
3412                         return 2;
3413                 if (rv == 2)
3414                         renew_ticket = 1;
3415                 }
3416         else
3417                 {
3418                 /* Check key name matches */
3419                 if (memcmp(etick, tctx->tlsext_tick_key_name, 16))
3420                         return 2;
3421                 HMAC_Init_ex(&hctx, tctx->tlsext_tick_hmac_key, 16,
3422                                         tlsext_tick_md(), NULL);
3423                 EVP_DecryptInit_ex(&ctx, EVP_aes_128_cbc(), NULL,
3424                                 tctx->tlsext_tick_aes_key, etick + 16);
3425                 }
3426         /* Attempt to process session ticket, first conduct sanity and
3427          * integrity checks on ticket.
3428          */
3429         mlen = HMAC_size(&hctx);
3430         if (mlen < 0)
3431                 {
3432                 EVP_CIPHER_CTX_cleanup(&ctx);
3433                 return -1;
3434                 }
3435         eticklen -= mlen;
3436         /* Check HMAC of encrypted ticket */
3437         HMAC_Update(&hctx, etick, eticklen);
3438         HMAC_Final(&hctx, tick_hmac, NULL);
3439         HMAC_CTX_cleanup(&hctx);
3440         if (CRYPTO_memcmp(tick_hmac, etick + eticklen, mlen))
3441                 return 2;
3442         /* Attempt to decrypt session data */
3443         /* Move p after IV to start of encrypted ticket, update length */
3444         p = etick + 16 + EVP_CIPHER_CTX_iv_length(&ctx);
3445         eticklen -= 16 + EVP_CIPHER_CTX_iv_length(&ctx);
3446         sdec = OPENSSL_malloc(eticklen);
3447         if (!sdec)
3448                 {
3449                 EVP_CIPHER_CTX_cleanup(&ctx);
3450                 return -1;
3451                 }
3452         EVP_DecryptUpdate(&ctx, sdec, &slen, p, eticklen);
3453         if (EVP_DecryptFinal(&ctx, sdec + slen, &mlen) <= 0)
3454                 return 2;
3455         slen += mlen;
3456         EVP_CIPHER_CTX_cleanup(&ctx);
3457         p = sdec;
3458
3459         sess = d2i_SSL_SESSION(NULL, &p, slen);
3460         OPENSSL_free(sdec);
3461         if (sess)
3462                 {
3463                 /* The session ID, if non-empty, is used by some clients to
3464                  * detect that the ticket has been accepted. So we copy it to
3465                  * the session structure. If it is empty set length to zero
3466                  * as required by standard.
3467                  */
3468                 if (sesslen)
3469                         memcpy(sess->session_id, sess_id, sesslen);
3470                 sess->session_id_length = sesslen;
3471                 *psess = sess;
3472                 if (renew_ticket)
3473                         return 4;
3474                 else
3475                         return 3;
3476                 }
3477         ERR_clear_error();
3478         /* For session parse failure, indicate that we need to send a new
3479          * ticket. */
3480         return 2;
3481         }
3482
3483 /* Tables to translate from NIDs to TLS v1.2 ids */
3484
3485 typedef struct 
3486         {
3487         int nid;
3488         int id;
3489         } tls12_lookup;
3490
3491 static tls12_lookup tls12_md[] = {
3492         {NID_md5, TLSEXT_hash_md5},
3493         {NID_sha1, TLSEXT_hash_sha1},
3494         {NID_sha224, TLSEXT_hash_sha224},
3495         {NID_sha256, TLSEXT_hash_sha256},
3496         {NID_sha384, TLSEXT_hash_sha384},
3497         {NID_sha512, TLSEXT_hash_sha512}
3498 };
3499
3500 static tls12_lookup tls12_sig[] = {
3501         {EVP_PKEY_RSA, TLSEXT_signature_rsa},
3502         {EVP_PKEY_DSA, TLSEXT_signature_dsa},
3503         {EVP_PKEY_EC, TLSEXT_signature_ecdsa}
3504 };
3505
3506 static int tls12_find_id(int nid, tls12_lookup *table, size_t tlen)
3507         {
3508         size_t i;
3509         for (i = 0; i < tlen; i++)
3510                 {
3511                 if (table[i].nid == nid)
3512                         return table[i].id;
3513                 }
3514         return -1;
3515         }
3516
3517 static int tls12_find_nid(int id, tls12_lookup *table, size_t tlen)
3518         {
3519         size_t i;
3520         for (i = 0; i < tlen; i++)
3521                 {
3522                 if ((table[i].id) == id)
3523                         return table[i].nid;
3524                 }
3525         return NID_undef;
3526         }
3527
3528 int tls12_get_sigandhash(unsigned char *p, const EVP_PKEY *pk, const EVP_MD *md)
3529         {
3530         int sig_id, md_id;
3531         if (!md)
3532                 return 0;
3533         md_id = tls12_find_id(EVP_MD_type(md), tls12_md,
3534                                 sizeof(tls12_md)/sizeof(tls12_lookup));
3535         if (md_id == -1)
3536                 return 0;
3537         sig_id = tls12_get_sigid(pk);
3538         if (sig_id == -1)
3539                 return 0;
3540         p[0] = (unsigned char)md_id;
3541         p[1] = (unsigned char)sig_id;
3542         return 1;
3543         }
3544
3545 int tls12_get_sigid(const EVP_PKEY *pk)
3546         {
3547         return tls12_find_id(pk->type, tls12_sig,
3548                                 sizeof(tls12_sig)/sizeof(tls12_lookup));
3549         }
3550
3551 typedef struct 
3552         {
3553         int nid;
3554         int secbits;
3555         const EVP_MD *(*mfunc)(void);
3556         } tls12_hash_info;
3557
3558 static const tls12_hash_info tls12_md_info[] = {
3559 #ifdef OPENSSL_NO_MD5
3560         {NID_md5, 64, 0},
3561 #else
3562         {NID_md5, 64, EVP_md5},
3563 #endif
3564 #ifdef OPENSSL_NO_SHA
3565         {NID_sha1, 80, 0},
3566 #else
3567         {NID_sha1, 80, EVP_sha1},
3568 #endif
3569 #ifdef OPENSSL_NO_SHA256
3570         {NID_sha224, 112, 0},
3571         {NID_sha256, 128, 0},
3572 #else
3573         {NID_sha224, 112, EVP_sha224},
3574         {NID_sha256, 128, EVP_sha256},
3575 #endif
3576 #ifdef OPENSSL_NO_SHA512
3577         {NID_sha384, 192, 0},
3578         {NID_sha512, 256, 0}
3579 #else
3580         {NID_sha384, 192, EVP_sha384},
3581         {NID_sha512, 256, EVP_sha512}
3582 #endif
3583 };
3584
3585 static const tls12_hash_info *tls12_get_hash_info(unsigned char hash_alg)
3586         {
3587         if (hash_alg == 0)
3588                 return NULL;
3589         if (hash_alg > sizeof(tls12_md_info)/sizeof(tls12_md_info[0]))
3590                 return NULL;
3591         return tls12_md_info + hash_alg - 1;
3592         }
3593
3594 const EVP_MD *tls12_get_hash(unsigned char hash_alg)
3595         {
3596         const tls12_hash_info *inf;
3597 #ifndef OPENSSL_FIPS
3598         if (hash_alg == TLSEXT_hash_md5 && FIPS_mode())
3599                 return NULL;
3600 #endif
3601         inf = tls12_get_hash_info(hash_alg);
3602         if (!inf || !inf->mfunc)
3603                 return NULL; 
3604         return inf->mfunc();
3605         }
3606
3607 static int tls12_get_pkey_idx(unsigned char sig_alg)
3608         {
3609         switch(sig_alg)
3610                 {
3611 #ifndef OPENSSL_NO_RSA
3612         case TLSEXT_signature_rsa:
3613                 return SSL_PKEY_RSA_SIGN;
3614 #endif
3615 #ifndef OPENSSL_NO_DSA
3616         case TLSEXT_signature_dsa:
3617                 return SSL_PKEY_DSA_SIGN;
3618 #endif
3619 #ifndef OPENSSL_NO_ECDSA
3620         case TLSEXT_signature_ecdsa:
3621                 return SSL_PKEY_ECC;
3622 #endif
3623                 }
3624         return -1;
3625         }
3626
3627 /* Convert TLS 1.2 signature algorithm extension values into NIDs */
3628 static void tls1_lookup_sigalg(int *phash_nid, int *psign_nid,
3629                         int *psignhash_nid, const unsigned char *data)
3630         {
3631         int sign_nid = 0, hash_nid = 0;
3632         if (!phash_nid && !psign_nid && !psignhash_nid)
3633                 return;
3634         if (phash_nid || psignhash_nid)
3635                 {
3636                 hash_nid = tls12_find_nid(data[0], tls12_md,
3637                                         sizeof(tls12_md)/sizeof(tls12_lookup));
3638                 if (phash_nid)
3639                         *phash_nid = hash_nid;
3640                 }
3641         if (psign_nid || psignhash_nid)
3642                 {
3643                 sign_nid = tls12_find_nid(data[1], tls12_sig,
3644                                         sizeof(tls12_sig)/sizeof(tls12_lookup));
3645                 if (psign_nid)
3646                         *psign_nid = sign_nid;
3647                 }
3648         if (psignhash_nid)
3649                 {
3650                 if (sign_nid && hash_nid)
3651                         OBJ_find_sigid_by_algs(psignhash_nid,
3652                                                         hash_nid, sign_nid);
3653                 else
3654                         *psignhash_nid = NID_undef;
3655                 }
3656         }
3657 /* Check to see if a signature algorithm is allowed */
3658 static int tls12_sigalg_allowed(SSL *s, int op, const unsigned char *ptmp)
3659         {
3660         /* See if we have an entry in the hash table and it is enabled */
3661         const tls12_hash_info *hinf = tls12_get_hash_info(ptmp[0]);
3662         if (!hinf || !hinf->mfunc)
3663                 return 0;
3664         /* See if public key algorithm allowed */
3665         if (tls12_get_pkey_idx(ptmp[1]) == -1)
3666                 return 0;
3667         /* Finally see if security callback allows it */
3668         return ssl_security(s, op, hinf->secbits, hinf->nid, (void *)ptmp);
3669         }
3670
3671 /* Get a mask of disabled public key algorithms based on supported
3672  * signature algorithms. For example if no signature algorithm supports RSA
3673  * then RSA is disabled.
3674  */
3675
3676 void ssl_set_sig_mask(unsigned long *pmask_a, SSL *s, int op)
3677         {
3678         const unsigned char *sigalgs;
3679         size_t i, sigalgslen;
3680         int have_rsa = 0, have_dsa = 0, have_ecdsa = 0;
3681         /* Now go through all signature algorithms seeing if we support
3682          * any for RSA, DSA, ECDSA. Do this for all versions not just
3683          * TLS 1.2. To keep down calls to security callback only check
3684          * if we have to.
3685          */
3686         sigalgslen = tls12_get_psigalgs(s, &sigalgs);
3687         for (i = 0; i < sigalgslen; i += 2, sigalgs += 2)
3688                 {
3689                 switch(sigalgs[1])
3690                         {
3691 #ifndef OPENSSL_NO_RSA
3692                 case TLSEXT_signature_rsa:
3693                         if (!have_rsa && tls12_sigalg_allowed(s, op, sigalgs))
3694                                 have_rsa = 1;
3695                         break;
3696 #endif
3697 #ifndef OPENSSL_NO_DSA
3698                 case TLSEXT_signature_dsa:
3699                         if (!have_dsa && tls12_sigalg_allowed(s, op, sigalgs))
3700                                 have_dsa = 1;
3701                         break;
3702 #endif
3703 #ifndef OPENSSL_NO_ECDSA
3704                 case TLSEXT_signature_ecdsa:
3705                         if (!have_ecdsa && tls12_sigalg_allowed(s, op, sigalgs))
3706                                 have_ecdsa = 1;
3707                         break;
3708 #endif
3709                         }
3710                 }
3711         if (!have_rsa)
3712                 *pmask_a |= SSL_aRSA;
3713         if (!have_dsa)
3714                 *pmask_a |= SSL_aDSS;
3715         if (!have_ecdsa)
3716                 *pmask_a |= SSL_aECDSA;
3717         }
3718
3719 size_t tls12_copy_sigalgs(SSL *s, unsigned char *out,
3720                                 const unsigned char *psig, size_t psiglen)
3721         {
3722         unsigned char *tmpout = out;
3723         size_t i;
3724         for (i = 0; i < psiglen; i += 2, psig += 2)
3725                 {
3726                 if (tls12_sigalg_allowed(s, SSL_SECOP_SIGALG_SUPPORTED, psig))
3727                         {
3728                         *tmpout++ = psig[0];
3729                         *tmpout++ = psig[1];
3730                         }
3731                 }
3732         return tmpout - out;
3733         }
3734
3735 /* Given preference and allowed sigalgs set shared sigalgs */
3736 static int tls12_shared_sigalgs(SSL *s, TLS_SIGALGS *shsig,
3737                                 const unsigned char *pref, size_t preflen,
3738                                 const unsigned char *allow, size_t allowlen)
3739         {
3740         const unsigned char *ptmp, *atmp;
3741         size_t i, j, nmatch = 0;
3742         for (i = 0, ptmp = pref; i < preflen; i+=2, ptmp+=2)
3743                 {
3744                 /* Skip disabled hashes or signature algorithms */
3745                 if (!tls12_sigalg_allowed(s, SSL_SECOP_SIGALG_SHARED, ptmp))
3746                         continue;
3747                 for (j = 0, atmp = allow; j < allowlen; j+=2, atmp+=2)
3748                         {
3749                         if (ptmp[0] == atmp[0] && ptmp[1] == atmp[1])
3750                                 {
3751                                 nmatch++;
3752                                 if (shsig)
3753                                         {
3754                                         shsig->rhash = ptmp[0];
3755                                         shsig->rsign = ptmp[1];
3756                                         tls1_lookup_sigalg(&shsig->hash_nid,
3757                                                 &shsig->sign_nid,
3758                                                 &shsig->signandhash_nid,
3759                                                 ptmp);
3760                                         shsig++;
3761                                         }
3762                                 break;
3763                                 }
3764                         }
3765                 }
3766         return nmatch;
3767         }
3768
3769 /* Set shared signature algorithms for SSL structures */
3770 static int tls1_set_shared_sigalgs(SSL *s)
3771         {
3772         const unsigned char *pref, *allow, *conf;
3773         size_t preflen, allowlen, conflen;
3774         size_t nmatch;
3775         TLS_SIGALGS *salgs = NULL;
3776         CERT *c = s->cert;
3777         unsigned int is_suiteb = tls1_suiteb(s);
3778         if (c->shared_sigalgs)
3779                 {
3780                 OPENSSL_free(c->shared_sigalgs);
3781                 c->shared_sigalgs = NULL;
3782                 }
3783         /* If client use client signature algorithms if not NULL */
3784         if (!s->server && c->client_sigalgs && !is_suiteb)
3785                 {
3786                 conf = c->client_sigalgs;
3787                 conflen = c->client_sigalgslen;
3788                 }
3789         else if (c->conf_sigalgs && !is_suiteb)
3790                 {
3791                 conf = c->conf_sigalgs;
3792                 conflen = c->conf_sigalgslen;
3793                 }
3794         else
3795                 conflen = tls12_get_psigalgs(s, &conf);
3796         if(s->options & SSL_OP_CIPHER_SERVER_PREFERENCE || is_suiteb)
3797                 {
3798                 pref = conf;
3799                 preflen = conflen;
3800                 allow = c->peer_sigalgs;
3801                 allowlen = c->peer_sigalgslen;
3802                 }
3803         else
3804                 {
3805                 allow = conf;
3806                 allowlen = conflen;
3807                 pref = c->peer_sigalgs;
3808                 preflen = c->peer_sigalgslen;
3809                 }
3810         nmatch = tls12_shared_sigalgs(s, NULL, pref, preflen, allow, allowlen);
3811         if (!nmatch)
3812                 return 1;
3813         salgs = OPENSSL_malloc(nmatch * sizeof(TLS_SIGALGS));
3814         if (!salgs)
3815                 return 0;
3816         nmatch = tls12_shared_sigalgs(s, salgs, pref, preflen, allow, allowlen);
3817         c->shared_sigalgs = salgs;
3818         c->shared_sigalgslen = nmatch;
3819         return 1;
3820         }
3821                 
3822
3823 /* Set preferred digest for each key type */
3824
3825 int tls1_process_sigalgs(SSL *s, const unsigned char *data, int dsize)
3826         {
3827         int idx;
3828         size_t i;
3829         const EVP_MD *md;
3830         CERT *c = s->cert;
3831         TLS_SIGALGS *sigptr;
3832         /* Extension ignored for inappropriate versions */
3833         if (!SSL_USE_SIGALGS(s))
3834                 return 1;
3835         /* Should never happen */
3836         if (!c)
3837                 return 0;
3838
3839         if (c->peer_sigalgs)
3840                 OPENSSL_free(c->peer_sigalgs);
3841         c->peer_sigalgs = OPENSSL_malloc(dsize);
3842         if (!c->peer_sigalgs)
3843                 return 0;
3844         c->peer_sigalgslen = dsize;
3845         memcpy(c->peer_sigalgs, data, dsize);
3846
3847         tls1_set_shared_sigalgs(s);
3848
3849 #ifdef OPENSSL_SSL_DEBUG_BROKEN_PROTOCOL
3850         if (s->cert->cert_flags & SSL_CERT_FLAG_BROKEN_PROTOCOL)
3851                 {
3852                 /* Use first set signature preference to force message
3853                  * digest, ignoring any peer preferences.
3854                  */
3855                 const unsigned char *sigs = NULL;
3856                 if (s->server)
3857                         sigs = c->conf_sigalgs;
3858                 else
3859                         sigs = c->client_sigalgs;
3860                 if (sigs)
3861                         {
3862                         idx = tls12_get_pkey_idx(sigs[1]);
3863                         md = tls12_get_hash(sigs[0]);
3864                         c->pkeys[idx].digest = md;
3865                         c->pkeys[idx].valid_flags = CERT_PKEY_EXPLICIT_SIGN;
3866                         if (idx == SSL_PKEY_RSA_SIGN)
3867                                 {
3868                                 c->pkeys[SSL_PKEY_RSA_ENC].valid_flags = CERT_PKEY_EXPLICIT_SIGN;
3869                                 c->pkeys[SSL_PKEY_RSA_ENC].digest = md;
3870                                 }
3871                         }
3872                 }
3873 #endif
3874
3875         for (i = 0, sigptr = c->shared_sigalgs;
3876                         i < c->shared_sigalgslen; i++, sigptr++)
3877                 {
3878                 idx = tls12_get_pkey_idx(sigptr->rsign);
3879                 if (idx > 0 && c->pkeys[idx].digest == NULL)
3880                         {
3881                         md = tls12_get_hash(sigptr->rhash);
3882                         c->pkeys[idx].digest = md;
3883                         c->pkeys[idx].valid_flags = CERT_PKEY_EXPLICIT_SIGN;
3884                         if (idx == SSL_PKEY_RSA_SIGN)
3885                                 {
3886                                 c->pkeys[SSL_PKEY_RSA_ENC].valid_flags = CERT_PKEY_EXPLICIT_SIGN;
3887                                 c->pkeys[SSL_PKEY_RSA_ENC].digest = md;
3888                                 }
3889                         }
3890
3891                 }
3892         /* In strict mode leave unset digests as NULL to indicate we can't
3893          * use the certificate for signing.
3894          */
3895         if (!(s->cert->cert_flags & SSL_CERT_FLAGS_CHECK_TLS_STRICT))
3896                 {
3897                 /* Set any remaining keys to default values. NOTE: if alg is
3898                  * not supported it stays as NULL.
3899                  */
3900 #ifndef OPENSSL_NO_DSA
3901                 if (!c->pkeys[SSL_PKEY_DSA_SIGN].digest)
3902                         c->pkeys[SSL_PKEY_DSA_SIGN].digest = EVP_sha1();
3903 #endif
3904 #ifndef OPENSSL_NO_RSA
3905                 if (!c->pkeys[SSL_PKEY_RSA_SIGN].digest)
3906                         {
3907                         c->pkeys[SSL_PKEY_RSA_SIGN].digest = EVP_sha1();
3908                         c->pkeys[SSL_PKEY_RSA_ENC].digest = EVP_sha1();
3909                         }
3910 #endif
3911 #ifndef OPENSSL_NO_ECDSA
3912                 if (!c->pkeys[SSL_PKEY_ECC].digest)
3913                         c->pkeys[SSL_PKEY_ECC].digest = EVP_sha1();
3914 #endif
3915                 }
3916         return 1;
3917         }
3918
3919
3920 int SSL_get_sigalgs(SSL *s, int idx,
3921                         int *psign, int *phash, int *psignhash,
3922                         unsigned char *rsig, unsigned char *rhash)
3923         {
3924         const unsigned char *psig = s->cert->peer_sigalgs;
3925         if (psig == NULL)
3926                 return 0;
3927         if (idx >= 0)
3928                 {
3929                 idx <<= 1;
3930                 if (idx >= (int)s->cert->peer_sigalgslen)
3931                         return 0;
3932                 psig += idx;
3933                 if (rhash)
3934                         *rhash = psig[0];
3935                 if (rsig)
3936                         *rsig = psig[1];
3937                 tls1_lookup_sigalg(phash, psign, psignhash, psig);
3938                 }
3939         return s->cert->peer_sigalgslen / 2;
3940         }
3941
3942 int SSL_get_shared_sigalgs(SSL *s, int idx,
3943                         int *psign, int *phash, int *psignhash,
3944                         unsigned char *rsig, unsigned char *rhash)
3945         {
3946         TLS_SIGALGS *shsigalgs = s->cert->shared_sigalgs;
3947         if (!shsigalgs || idx >= (int)s->cert->shared_sigalgslen)
3948                 return 0;
3949         shsigalgs += idx;
3950         if (phash)
3951                 *phash = shsigalgs->hash_nid;
3952         if (psign)
3953                 *psign = shsigalgs->sign_nid;
3954         if (psignhash)
3955                 *psignhash = shsigalgs->signandhash_nid;
3956         if (rsig)
3957                 *rsig = shsigalgs->rsign;
3958         if (rhash)
3959                 *rhash = shsigalgs->rhash;
3960         return s->cert->shared_sigalgslen;
3961         }
3962         
3963
3964 #ifndef OPENSSL_NO_HEARTBEATS
3965 int
3966 tls1_process_heartbeat(SSL *s)
3967         {
3968         unsigned char *p = &s->s3->rrec.data[0], *pl;
3969         unsigned short hbtype;
3970         unsigned int payload;
3971         unsigned int padding = 16; /* Use minimum padding */
3972
3973         if (s->msg_callback)
3974                 s->msg_callback(0, s->version, TLS1_RT_HEARTBEAT,
3975                         &s->s3->rrec.data[0], s->s3->rrec.length,
3976                         s, s->msg_callback_arg);
3977
3978         /* Read type and payload length first */
3979         if (1 + 2 + 16 > s->s3->rrec.length)
3980                 return 0; /* silently discard */
3981         hbtype = *p++;
3982         n2s(p, payload);
3983         if (1 + 2 + payload + 16 > s->s3->rrec.length)
3984                 return 0; /* silently discard per RFC 6520 sec. 4 */
3985         pl = p;
3986
3987         if (hbtype == TLS1_HB_REQUEST)
3988                 {
3989                 unsigned char *buffer, *bp;
3990                 int r;
3991
3992                 /* Allocate memory for the response, size is 1 bytes
3993                  * message type, plus 2 bytes payload length, plus
3994                  * payload, plus padding
3995                  */
3996                 buffer = OPENSSL_malloc(1 + 2 + payload + padding);
3997                 bp = buffer;
3998                 
3999                 /* Enter response type, length and copy payload */
4000                 *bp++ = TLS1_HB_RESPONSE;
4001                 s2n(payload, bp);
4002                 memcpy(bp, pl, payload);
4003                 bp += payload;
4004                 /* Random padding */
4005                 RAND_pseudo_bytes(bp, padding);
4006
4007                 r = ssl3_write_bytes(s, TLS1_RT_HEARTBEAT, buffer, 3 + payload + padding);
4008
4009                 if (r >= 0 && s->msg_callback)
4010                         s->msg_callback(1, s->version, TLS1_RT_HEARTBEAT,
4011                                 buffer, 3 + payload + padding,
4012                                 s, s->msg_callback_arg);
4013
4014                 OPENSSL_free(buffer);
4015
4016                 if (r < 0)
4017                         return r;
4018                 }
4019         else if (hbtype == TLS1_HB_RESPONSE)
4020                 {
4021                 unsigned int seq;
4022                 
4023                 /* We only send sequence numbers (2 bytes unsigned int),
4024                  * and 16 random bytes, so we just try to read the
4025                  * sequence number */
4026                 n2s(pl, seq);
4027                 
4028                 if (payload == 18 && seq == s->tlsext_hb_seq)
4029                         {
4030                         s->tlsext_hb_seq++;
4031                         s->tlsext_hb_pending = 0;
4032                         }
4033                 }
4034
4035         return 0;
4036         }
4037
4038 int
4039 tls1_heartbeat(SSL *s)
4040         {
4041         unsigned char *buf, *p;
4042         int ret;
4043         unsigned int payload = 18; /* Sequence number + random bytes */
4044         unsigned int padding = 16; /* Use minimum padding */
4045
4046         /* Only send if peer supports and accepts HB requests... */
4047         if (!(s->tlsext_heartbeat & SSL_TLSEXT_HB_ENABLED) ||
4048             s->tlsext_heartbeat & SSL_TLSEXT_HB_DONT_SEND_REQUESTS)
4049                 {
4050                 SSLerr(SSL_F_TLS1_HEARTBEAT,SSL_R_TLS_HEARTBEAT_PEER_DOESNT_ACCEPT);
4051                 return -1;
4052                 }
4053
4054         /* ...and there is none in flight yet... */
4055         if (s->tlsext_hb_pending)
4056                 {
4057                 SSLerr(SSL_F_TLS1_HEARTBEAT,SSL_R_TLS_HEARTBEAT_PENDING);
4058                 return -1;
4059                 }
4060                 
4061         /* ...and no handshake in progress. */
4062         if (SSL_in_init(s) || s->in_handshake)
4063                 {
4064                 SSLerr(SSL_F_TLS1_HEARTBEAT,SSL_R_UNEXPECTED_MESSAGE);
4065                 return -1;
4066                 }
4067                 
4068         /* Check if padding is too long, payload and padding
4069          * must not exceed 2^14 - 3 = 16381 bytes in total.
4070          */
4071         OPENSSL_assert(payload + padding <= 16381);
4072
4073         /* Create HeartBeat message, we just use a sequence number
4074          * as payload to distuingish different messages and add
4075          * some random stuff.
4076          *  - Message Type, 1 byte
4077          *  - Payload Length, 2 bytes (unsigned int)
4078          *  - Payload, the sequence number (2 bytes uint)
4079          *  - Payload, random bytes (16 bytes uint)
4080          *  - Padding
4081          */
4082         buf = OPENSSL_malloc(1 + 2 + payload + padding);
4083         p = buf;
4084         /* Message Type */
4085         *p++ = TLS1_HB_REQUEST;
4086         /* Payload length (18 bytes here) */
4087         s2n(payload, p);
4088         /* Sequence number */
4089         s2n(s->tlsext_hb_seq, p);
4090         /* 16 random bytes */
4091         RAND_pseudo_bytes(p, 16);
4092         p += 16;
4093         /* Random padding */
4094         RAND_pseudo_bytes(p, padding);
4095
4096         ret = ssl3_write_bytes(s, TLS1_RT_HEARTBEAT, buf, 3 + payload + padding);
4097         if (ret >= 0)
4098                 {
4099                 if (s->msg_callback)
4100                         s->msg_callback(1, s->version, TLS1_RT_HEARTBEAT,
4101                                 buf, 3 + payload + padding,
4102                                 s, s->msg_callback_arg);
4103
4104                 s->tlsext_hb_pending = 1;
4105                 }
4106                 
4107         OPENSSL_free(buf);
4108
4109         return ret;
4110         }
4111 #endif
4112
4113 #define MAX_SIGALGLEN   (TLSEXT_hash_num * TLSEXT_signature_num * 2)
4114
4115 typedef struct
4116         {
4117         size_t sigalgcnt;
4118         int sigalgs[MAX_SIGALGLEN];
4119         } sig_cb_st;
4120
4121 static int sig_cb(const char *elem, int len, void *arg)
4122         {
4123         sig_cb_st *sarg = arg;
4124         size_t i;
4125         char etmp[20], *p;
4126         int sig_alg, hash_alg;
4127         if (sarg->sigalgcnt == MAX_SIGALGLEN)
4128                 return 0;
4129         if (len > (int)(sizeof(etmp) - 1))
4130                 return 0;
4131         memcpy(etmp, elem, len);
4132         etmp[len] = 0;
4133         p = strchr(etmp, '+');
4134         if (!p)
4135                 return 0;
4136         *p = 0;
4137         p++;
4138         if (!*p)
4139                 return 0;
4140
4141         if (!strcmp(etmp, "RSA"))
4142                 sig_alg = EVP_PKEY_RSA;
4143         else if (!strcmp(etmp, "DSA"))
4144                 sig_alg = EVP_PKEY_DSA;
4145         else if (!strcmp(etmp, "ECDSA"))
4146                 sig_alg = EVP_PKEY_EC;
4147         else return 0;
4148
4149         hash_alg = OBJ_sn2nid(p);
4150         if (hash_alg == NID_undef)
4151                 hash_alg = OBJ_ln2nid(p);
4152         if (hash_alg == NID_undef)
4153                 return 0;
4154
4155         for (i = 0; i < sarg->sigalgcnt; i+=2)
4156                 {
4157                 if (sarg->sigalgs[i] == sig_alg
4158                         && sarg->sigalgs[i + 1] == hash_alg)
4159                         return 0;
4160                 }
4161         sarg->sigalgs[sarg->sigalgcnt++] = hash_alg;
4162         sarg->sigalgs[sarg->sigalgcnt++] = sig_alg;
4163         return 1;
4164         }
4165
4166 /* Set suppored signature algorithms based on a colon separated list
4167  * of the form sig+hash e.g. RSA+SHA512:DSA+SHA512 */
4168 int tls1_set_sigalgs_list(CERT *c, const char *str, int client)
4169         {
4170         sig_cb_st sig;
4171         sig.sigalgcnt = 0;
4172         if (!CONF_parse_list(str, ':', 1, sig_cb, &sig))
4173                 return 0;
4174         if (c == NULL)
4175                 return 1;
4176         return tls1_set_sigalgs(c, sig.sigalgs, sig.sigalgcnt, client);
4177         }
4178
4179 int tls1_set_sigalgs(CERT *c, const int *psig_nids, size_t salglen, int client)
4180         {
4181         unsigned char *sigalgs, *sptr;
4182         int rhash, rsign;
4183         size_t i;
4184         if (salglen & 1)
4185                 return 0;
4186         sigalgs = OPENSSL_malloc(salglen);
4187         if (sigalgs == NULL)
4188                 return 0;
4189         for (i = 0, sptr = sigalgs; i < salglen; i+=2)
4190                 {
4191                 rhash = tls12_find_id(*psig_nids++, tls12_md,
4192                                         sizeof(tls12_md)/sizeof(tls12_lookup));
4193                 rsign = tls12_find_id(*psig_nids++, tls12_sig,
4194                                 sizeof(tls12_sig)/sizeof(tls12_lookup));
4195
4196                 if (rhash == -1 || rsign == -1)
4197                         goto err;
4198                 *sptr++ = rhash;
4199                 *sptr++ = rsign;
4200                 }
4201
4202         if (client)
4203                 {
4204                 if (c->client_sigalgs)
4205                         OPENSSL_free(c->client_sigalgs);
4206                 c->client_sigalgs = sigalgs;
4207                 c->client_sigalgslen = salglen;
4208                 }
4209         else
4210                 {
4211                 if (c->conf_sigalgs)
4212                         OPENSSL_free(c->conf_sigalgs);
4213                 c->conf_sigalgs = sigalgs;
4214                 c->conf_sigalgslen = salglen;
4215                 }
4216
4217         return 1;
4218
4219         err:
4220         OPENSSL_free(sigalgs);
4221         return 0;
4222         }
4223
4224 static int tls1_check_sig_alg(CERT *c, X509 *x, int default_nid)
4225         {
4226         int sig_nid;
4227         size_t i;
4228         if (default_nid == -1)
4229                 return 1;
4230         sig_nid = X509_get_signature_nid(x);
4231         if (default_nid)
4232                 return sig_nid == default_nid ? 1 : 0;
4233         for (i = 0; i < c->shared_sigalgslen; i++)
4234                 if (sig_nid == c->shared_sigalgs[i].signandhash_nid)
4235                         return 1;
4236         return 0;
4237         }
4238 /* Check to see if a certificate issuer name matches list of CA names */
4239 static int ssl_check_ca_name(STACK_OF(X509_NAME) *names, X509 *x)
4240         {
4241         X509_NAME *nm;
4242         int i;
4243         nm = X509_get_issuer_name(x);
4244         for (i = 0; i < sk_X509_NAME_num(names); i++)
4245                 {
4246                 if(!X509_NAME_cmp(nm, sk_X509_NAME_value(names, i)))
4247                         return 1;
4248                 }
4249         return 0;
4250         }
4251
4252 /* Check certificate chain is consistent with TLS extensions and is
4253  * usable by server. This servers two purposes: it allows users to 
4254  * check chains before passing them to the server and it allows the
4255  * server to check chains before attempting to use them.
4256  */
4257
4258 /* Flags which need to be set for a certificate when stict mode not set */
4259
4260 #define CERT_PKEY_VALID_FLAGS \
4261         (CERT_PKEY_EE_SIGNATURE|CERT_PKEY_EE_PARAM)
4262 /* Strict mode flags */
4263 #define CERT_PKEY_STRICT_FLAGS \
4264          (CERT_PKEY_VALID_FLAGS|CERT_PKEY_CA_SIGNATURE|CERT_PKEY_CA_PARAM \
4265          | CERT_PKEY_ISSUER_NAME|CERT_PKEY_CERT_TYPE)
4266
4267 int tls1_check_chain(SSL *s, X509 *x, EVP_PKEY *pk, STACK_OF(X509) *chain,
4268                                                                         int idx)
4269         {
4270         int i;
4271         int rv = 0;
4272         int check_flags = 0, strict_mode;
4273         CERT_PKEY *cpk = NULL;
4274         CERT *c = s->cert;
4275         unsigned int suiteb_flags = tls1_suiteb(s);
4276         /* idx == -1 means checking server chains */
4277         if (idx != -1)
4278                 {
4279                 /* idx == -2 means checking client certificate chains */
4280                 if (idx == -2)
4281                         {
4282                         cpk = c->key;
4283                         idx = cpk - c->pkeys;
4284                         }
4285                 else
4286                         cpk = c->pkeys + idx;
4287                 x = cpk->x509;
4288                 pk = cpk->privatekey;
4289                 chain = cpk->chain;
4290                 strict_mode = c->cert_flags & SSL_CERT_FLAGS_CHECK_TLS_STRICT;
4291                 /* If no cert or key, forget it */
4292                 if (!x || !pk)
4293                         goto end;
4294 #ifdef OPENSSL_SSL_DEBUG_BROKEN_PROTOCOL
4295                 /* Allow any certificate to pass test */
4296                 if (s->cert->cert_flags & SSL_CERT_FLAG_BROKEN_PROTOCOL)
4297                         {
4298                         rv = CERT_PKEY_STRICT_FLAGS|CERT_PKEY_EXPLICIT_SIGN|CERT_PKEY_VALID|CERT_PKEY_SIGN;
4299                         cpk->valid_flags = rv;
4300                         return rv;
4301                         }
4302 #endif
4303                 }
4304         else
4305                 {
4306                 if (!x || !pk)
4307                         goto end;
4308                 idx = ssl_cert_type(x, pk);
4309                 if (idx == -1)
4310                         goto end;
4311                 cpk = c->pkeys + idx;
4312                 if (c->cert_flags & SSL_CERT_FLAGS_CHECK_TLS_STRICT)
4313                         check_flags = CERT_PKEY_STRICT_FLAGS;
4314                 else
4315                         check_flags = CERT_PKEY_VALID_FLAGS;
4316                 strict_mode = 1;
4317                 }
4318
4319         if (suiteb_flags)
4320                 {
4321                 int ok;
4322                 if (check_flags)
4323                         check_flags |= CERT_PKEY_SUITEB;
4324                 ok = X509_chain_check_suiteb(NULL, x, chain, suiteb_flags);
4325                 if (ok != X509_V_OK)
4326                         {
4327                         if (check_flags)
4328                                 rv |= CERT_PKEY_SUITEB;
4329                         else
4330                                 goto end;
4331                         }
4332                 }
4333
4334         /* Check all signature algorithms are consistent with
4335          * signature algorithms extension if TLS 1.2 or later
4336          * and strict mode.
4337          */
4338         if (TLS1_get_version(s) >= TLS1_2_VERSION && strict_mode)
4339                 {
4340                 int default_nid;
4341                 unsigned char rsign = 0;
4342                 if (c->peer_sigalgs)
4343                         default_nid = 0;
4344                 /* If no sigalgs extension use defaults from RFC5246 */
4345                 else
4346                         {
4347                         switch(idx)
4348                                 {       
4349                         case SSL_PKEY_RSA_ENC:
4350                         case SSL_PKEY_RSA_SIGN:
4351                         case SSL_PKEY_DH_RSA:
4352                                 rsign = TLSEXT_signature_rsa;
4353                                 default_nid = NID_sha1WithRSAEncryption;
4354                                 break;
4355
4356                         case SSL_PKEY_DSA_SIGN:
4357                         case SSL_PKEY_DH_DSA:
4358                                 rsign = TLSEXT_signature_dsa;
4359                                 default_nid = NID_dsaWithSHA1;
4360                                 break;
4361
4362                         case SSL_PKEY_ECC:
4363                                 rsign = TLSEXT_signature_ecdsa;
4364                                 default_nid = NID_ecdsa_with_SHA1;
4365                                 break;
4366
4367                         default:
4368                                 default_nid = -1;
4369                                 break;
4370                                 }
4371                         }
4372                 /* If peer sent no signature algorithms extension and we
4373                  * have set preferred signature algorithms check we support
4374                  * sha1.
4375                  */
4376                 if (default_nid > 0 && c->conf_sigalgs)
4377                         {
4378                         size_t j;
4379                         const unsigned char *p = c->conf_sigalgs;
4380                         for (j = 0; j < c->conf_sigalgslen; j += 2, p += 2)
4381                                 {
4382                                 if (p[0] == TLSEXT_hash_sha1 && p[1] == rsign)
4383                                         break;
4384                                 }
4385                         if (j == c->conf_sigalgslen)
4386                                 {
4387                                 if (check_flags)
4388                                         goto skip_sigs;
4389                                 else
4390                                         goto end;
4391                                 }
4392                         }
4393                 /* Check signature algorithm of each cert in chain */
4394                 if (!tls1_check_sig_alg(c, x, default_nid))
4395                         {
4396                         if (!check_flags) goto end;
4397                         }
4398                 else
4399                         rv |= CERT_PKEY_EE_SIGNATURE;
4400                 rv |= CERT_PKEY_CA_SIGNATURE;
4401                 for (i = 0; i < sk_X509_num(chain); i++)
4402                         {
4403                         if (!tls1_check_sig_alg(c, sk_X509_value(chain, i),
4404                                                         default_nid))
4405                                 {
4406                                 if (check_flags)
4407                                         {
4408                                         rv &= ~CERT_PKEY_CA_SIGNATURE;
4409                                         break;
4410                                         }
4411                                 else
4412                                         goto end;
4413                                 }
4414                         }
4415                 }
4416         /* Else not TLS 1.2, so mark EE and CA signing algorithms OK */
4417         else if(check_flags)
4418                 rv |= CERT_PKEY_EE_SIGNATURE|CERT_PKEY_CA_SIGNATURE;
4419         skip_sigs:
4420         /* Check cert parameters are consistent */
4421         if (tls1_check_cert_param(s, x, check_flags ? 1 : 2))
4422                 rv |= CERT_PKEY_EE_PARAM;
4423         else if (!check_flags)
4424                 goto end;
4425         if (!s->server)
4426                 rv |= CERT_PKEY_CA_PARAM;
4427         /* In strict mode check rest of chain too */
4428         else if (strict_mode)
4429                 {
4430                 rv |= CERT_PKEY_CA_PARAM;
4431                 for (i = 0; i < sk_X509_num(chain); i++)
4432                         {
4433                         X509 *ca = sk_X509_value(chain, i);
4434                         if (!tls1_check_cert_param(s, ca, 0))
4435                                 {
4436                                 if (check_flags)
4437                                         {
4438                                         rv &= ~CERT_PKEY_CA_PARAM;
4439                                         break;
4440                                         }
4441                                 else
4442                                         goto end;
4443                                 }
4444                         }
4445                 }
4446         if (!s->server && strict_mode)
4447                 {
4448                 STACK_OF(X509_NAME) *ca_dn;
4449                 int check_type = 0;
4450                 switch (pk->type)
4451                         {
4452                 case EVP_PKEY_RSA:
4453                         check_type = TLS_CT_RSA_SIGN;
4454                         break;
4455                 case EVP_PKEY_DSA:
4456                         check_type = TLS_CT_DSS_SIGN;
4457                         break;
4458                 case EVP_PKEY_EC:
4459                         check_type = TLS_CT_ECDSA_SIGN;
4460                         break;
4461                 case EVP_PKEY_DH:
4462                 case EVP_PKEY_DHX:
4463                                 {
4464                                 int cert_type = X509_certificate_type(x, pk);
4465                                 if (cert_type & EVP_PKS_RSA)
4466                                         check_type = TLS_CT_RSA_FIXED_DH;
4467                                 if (cert_type & EVP_PKS_DSA)
4468                                         check_type = TLS_CT_DSS_FIXED_DH;
4469                                 }
4470                         }
4471                 if (check_type)
4472                         {
4473                         const unsigned char *ctypes;
4474                         int ctypelen;
4475                         if (c->ctypes)
4476                                 {
4477                                 ctypes = c->ctypes;
4478                                 ctypelen = (int)c->ctype_num;
4479                                 }
4480                         else
4481                                 {
4482                                 ctypes = (unsigned char *)s->s3->tmp.ctype;
4483                                 ctypelen = s->s3->tmp.ctype_num;
4484                                 }
4485                         for (i = 0; i < ctypelen; i++)
4486                                 {
4487                                 if (ctypes[i] == check_type)
4488                                         {
4489                                         rv |= CERT_PKEY_CERT_TYPE;
4490                                         break;
4491                                         }
4492                                 }
4493                         if (!(rv & CERT_PKEY_CERT_TYPE) && !check_flags)
4494                                 goto end;
4495                         }
4496                 else
4497                         rv |= CERT_PKEY_CERT_TYPE;
4498
4499
4500                 ca_dn = s->s3->tmp.ca_names;
4501
4502                 if (!sk_X509_NAME_num(ca_dn))
4503                         rv |= CERT_PKEY_ISSUER_NAME;
4504
4505                 if (!(rv & CERT_PKEY_ISSUER_NAME))
4506                         {
4507                         if (ssl_check_ca_name(ca_dn, x))
4508                                 rv |= CERT_PKEY_ISSUER_NAME;
4509                         }
4510                 if (!(rv & CERT_PKEY_ISSUER_NAME))
4511                         {
4512                         for (i = 0; i < sk_X509_num(chain); i++)
4513                                 {
4514                                 X509 *xtmp = sk_X509_value(chain, i);
4515                                 if (ssl_check_ca_name(ca_dn, xtmp))
4516                                         {
4517                                         rv |= CERT_PKEY_ISSUER_NAME;
4518                                         break;
4519                                         }
4520                                 }
4521                         }
4522                 if (!check_flags && !(rv & CERT_PKEY_ISSUER_NAME))
4523                         goto end;
4524                 }
4525         else
4526                 rv |= CERT_PKEY_ISSUER_NAME|CERT_PKEY_CERT_TYPE;
4527
4528         if (!check_flags || (rv & check_flags) == check_flags)
4529                 rv |= CERT_PKEY_VALID;
4530
4531         end:
4532
4533         if (TLS1_get_version(s) >= TLS1_2_VERSION)
4534                 {
4535                 if (cpk->valid_flags & CERT_PKEY_EXPLICIT_SIGN)
4536                         rv |= CERT_PKEY_EXPLICIT_SIGN|CERT_PKEY_SIGN;
4537                 else if (cpk->digest)
4538                         rv |= CERT_PKEY_SIGN;
4539                 }
4540         else
4541                 rv |= CERT_PKEY_SIGN|CERT_PKEY_EXPLICIT_SIGN;
4542
4543         /* When checking a CERT_PKEY structure all flags are irrelevant
4544          * if the chain is invalid.
4545          */
4546         if (!check_flags)
4547                 {
4548                 if (rv & CERT_PKEY_VALID)
4549                         cpk->valid_flags = rv;
4550                 else
4551                         {
4552                         /* Preserve explicit sign flag, clear rest */
4553                         cpk->valid_flags &= CERT_PKEY_EXPLICIT_SIGN;
4554                         return 0;
4555                         }
4556                 }
4557         return rv;
4558         }
4559
4560 /* Set validity of certificates in an SSL structure */
4561 void tls1_set_cert_validity(SSL *s)
4562         {
4563         tls1_check_chain(s, NULL, NULL, NULL, SSL_PKEY_RSA_ENC);
4564         tls1_check_chain(s, NULL, NULL, NULL, SSL_PKEY_RSA_SIGN);
4565         tls1_check_chain(s, NULL, NULL, NULL, SSL_PKEY_DSA_SIGN);
4566         tls1_check_chain(s, NULL, NULL, NULL, SSL_PKEY_DH_RSA);
4567         tls1_check_chain(s, NULL, NULL, NULL, SSL_PKEY_DH_DSA);
4568         tls1_check_chain(s, NULL, NULL, NULL, SSL_PKEY_ECC);
4569         }
4570 /* User level utiity function to check a chain is suitable */
4571 int SSL_check_chain(SSL *s, X509 *x, EVP_PKEY *pk, STACK_OF(X509) *chain)
4572         {
4573         return tls1_check_chain(s, x, pk, chain, -1);
4574         }
4575
4576 #endif
4577
4578 #ifndef OPENSSL_NO_DH
4579 DH *ssl_get_auto_dh(SSL *s)
4580         {
4581         int dh_secbits = 80;
4582         if (s->cert->dh_tmp_auto == 2)
4583                 return DH_get_1024_160();
4584         if (s->s3->tmp.new_cipher->algorithm_auth & SSL_aNULL)
4585                 {
4586                 if (s->s3->tmp.new_cipher->strength_bits == 256)
4587                         dh_secbits = 128;
4588                 else
4589                         dh_secbits = 80;
4590                 }
4591         else
4592                 {
4593                 CERT_PKEY *cpk = ssl_get_server_send_pkey(s);
4594                 dh_secbits = EVP_PKEY_security_bits(cpk->privatekey);
4595                 }
4596
4597         if (dh_secbits >= 128)
4598                 {
4599                 DH *dhp = DH_new();
4600                 if (!dhp)
4601                         return NULL;
4602                 dhp->g = BN_new();
4603                 if (dhp->g)
4604                         BN_set_word(dhp->g, 2);
4605                 if (dh_secbits >= 192)
4606                         dhp->p = get_rfc3526_prime_8192(NULL);
4607                 else
4608                         dhp->p = get_rfc3526_prime_3072(NULL);
4609                 if (!dhp->p || !dhp->g)
4610                         {
4611                         DH_free(dhp);
4612                         return NULL;
4613                         }
4614                 return dhp;
4615                 }
4616         if (dh_secbits >= 112)
4617                 return DH_get_2048_224();
4618         return DH_get_1024_160();
4619         }
4620 #endif
4621
4622 static int ssl_security_cert_key(SSL *s, SSL_CTX *ctx, X509 *x, int op)
4623         {
4624         int secbits;
4625         EVP_PKEY *pkey = X509_get_pubkey(x);
4626         if (pkey)
4627                 {
4628                 secbits = EVP_PKEY_security_bits(pkey);
4629                 EVP_PKEY_free(pkey);
4630                 }
4631         else
4632                 secbits = -1;
4633         if (s)
4634                 return ssl_security(s, op, secbits, 0, x);
4635         else
4636                 return ssl_ctx_security(ctx, op, secbits, 0, x);
4637         }
4638
4639 static int ssl_security_cert_sig(SSL *s, SSL_CTX *ctx, X509 *x, int op)
4640         {
4641         /* Lookup signature algorithm digest */
4642         int secbits = -1, md_nid = NID_undef, sig_nid;
4643         sig_nid = X509_get_signature_nid(x);
4644         if (sig_nid && OBJ_find_sigid_algs(sig_nid, &md_nid, NULL))
4645                 {
4646                 const EVP_MD *md;
4647                 if (md_nid && (md = EVP_get_digestbynid(md_nid)))
4648                                 secbits = EVP_MD_size(md) * 4;
4649                 }
4650         if (s)
4651                 return ssl_security(s, op, secbits, md_nid, x);
4652         else
4653                 return ssl_ctx_security(ctx, op, secbits, md_nid, x);
4654         }
4655
4656 int ssl_security_cert(SSL *s, SSL_CTX *ctx, X509 *x, int vfy, int is_ee)
4657         {
4658         if (vfy)
4659                 vfy = SSL_SECOP_PEER;
4660         if (is_ee)
4661                 {
4662                 if (!ssl_security_cert_key(s, ctx, x, SSL_SECOP_EE_KEY | vfy))
4663                         return SSL_R_EE_KEY_TOO_SMALL;
4664                 }
4665         else
4666                 {
4667                 if (!ssl_security_cert_key(s, ctx, x, SSL_SECOP_CA_KEY | vfy))
4668                         return SSL_R_CA_KEY_TOO_SMALL;
4669                 }
4670         if (!ssl_security_cert_sig(s, ctx, x, SSL_SECOP_CA_MD | vfy))
4671                 return SSL_R_CA_MD_TOO_WEAK;
4672         return 1;
4673         }
4674
4675 /* Check security of a chain, if sk includes the end entity certificate
4676  * then x is NULL. If vfy is 1 then we are verifying a peer chain and
4677  * not sending one to the peer.
4678  * Return values: 1 if ok otherwise error code to use
4679  */
4680
4681 int ssl_security_cert_chain(SSL *s, STACK_OF(X509) *sk, X509 *x, int vfy)
4682         {
4683         int rv, start_idx, i;
4684         if (x == NULL)
4685                 {
4686                 x = sk_X509_value(sk, 0);
4687                 start_idx = 1;
4688                 }
4689         else
4690                 start_idx = 0;
4691
4692         rv = ssl_security_cert(s, NULL, x, vfy, 1);
4693         if (rv != 1)
4694                 return rv;
4695
4696         for (i = start_idx; i < sk_X509_num(sk); i++)
4697                 {
4698                 x = sk_X509_value(sk, i);
4699                 rv = ssl_security_cert(s, NULL, x, vfy, 0);
4700                 if (rv != 1)
4701                         return rv;
4702                 }
4703         return 1;
4704         }