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