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