Fix gcc-7 warnings about missing fall thru comments.
[oweals/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     if (SSL_CLIENT_USE_SIGALGS(s)) {
1201         size_t salglen;
1202         const unsigned char *salg;
1203         unsigned char *etmp;
1204         salglen = tls12_get_psigalgs(s, 1, &salg);
1205
1206         /*-
1207          * check for enough space.
1208          * 4 bytes for the sigalgs type and extension length
1209          * 2 bytes for the sigalg list length
1210          * + sigalg list length
1211          */
1212         if (CHECKLEN(ret, salglen + 6, limit))
1213             return NULL;
1214         s2n(TLSEXT_TYPE_signature_algorithms, ret);
1215         etmp = ret;
1216         /* Skip over lengths for now */
1217         ret += 4;
1218         salglen = tls12_copy_sigalgs(s, ret, salg, salglen);
1219         /* Fill in lengths */
1220         s2n(salglen + 2, etmp);
1221         s2n(salglen, etmp);
1222         ret += salglen;
1223     }
1224 #ifndef OPENSSL_NO_OCSP
1225     if (s->tlsext_status_type == TLSEXT_STATUSTYPE_ocsp) {
1226         int i;
1227         size_t extlen, idlen;
1228         int lentmp;
1229         OCSP_RESPID *id;
1230
1231         idlen = 0;
1232         for (i = 0; i < sk_OCSP_RESPID_num(s->tlsext_ocsp_ids); i++) {
1233             id = sk_OCSP_RESPID_value(s->tlsext_ocsp_ids, i);
1234             lentmp = i2d_OCSP_RESPID(id, NULL);
1235             if (lentmp <= 0)
1236                 return NULL;
1237             idlen += (size_t)lentmp + 2;
1238         }
1239
1240         if (s->tlsext_ocsp_exts) {
1241             lentmp = i2d_X509_EXTENSIONS(s->tlsext_ocsp_exts, NULL);
1242             if (lentmp < 0)
1243                 return NULL;
1244             extlen = (size_t)lentmp;
1245         } else
1246             extlen = 0;
1247
1248         if (extlen + idlen > 0xFFF0)
1249             return NULL;
1250         /*
1251          * 2 bytes for status request type
1252          * 2 bytes for status request len
1253          * 1 byte for OCSP request type
1254          * 2 bytes for length of ids
1255          * 2 bytes for length of extensions
1256          * + length of ids
1257          * + length of extensions
1258          */
1259         if (CHECKLEN(ret, 9 + idlen + extlen, limit))
1260             return NULL;
1261
1262         s2n(TLSEXT_TYPE_status_request, ret);
1263         s2n(extlen + idlen + 5, ret);
1264         *(ret++) = TLSEXT_STATUSTYPE_ocsp;
1265         s2n(idlen, ret);
1266         for (i = 0; i < sk_OCSP_RESPID_num(s->tlsext_ocsp_ids); i++) {
1267             /* save position of id len */
1268             unsigned char *q = ret;
1269             id = sk_OCSP_RESPID_value(s->tlsext_ocsp_ids, i);
1270             /* skip over id len */
1271             ret += 2;
1272             lentmp = i2d_OCSP_RESPID(id, &ret);
1273             /* write id len */
1274             s2n(lentmp, q);
1275         }
1276         s2n(extlen, ret);
1277         if (extlen > 0)
1278             i2d_X509_EXTENSIONS(s->tlsext_ocsp_exts, &ret);
1279     }
1280 #endif
1281 #ifndef OPENSSL_NO_HEARTBEATS
1282     if (SSL_IS_DTLS(s)) {
1283         /* Add Heartbeat extension */
1284
1285         /*-
1286          * check for enough space.
1287          * 4 bytes for the heartbeat ext type and extension length
1288          * 1 byte for the mode
1289          */
1290         if (CHECKLEN(ret, 5, limit))
1291             return NULL;
1292
1293         s2n(TLSEXT_TYPE_heartbeat, ret);
1294         s2n(1, ret);
1295         /*-
1296          * Set mode:
1297          * 1: peer may send requests
1298          * 2: peer not allowed to send requests
1299          */
1300         if (s->tlsext_heartbeat & SSL_DTLSEXT_HB_DONT_RECV_REQUESTS)
1301             *(ret++) = SSL_DTLSEXT_HB_DONT_SEND_REQUESTS;
1302         else
1303             *(ret++) = SSL_DTLSEXT_HB_ENABLED;
1304     }
1305 #endif
1306
1307 #ifndef OPENSSL_NO_NEXTPROTONEG
1308     if (s->ctx->next_proto_select_cb && !s->s3->tmp.finish_md_len) {
1309         /*
1310          * The client advertises an empty extension to indicate its support
1311          * for Next Protocol Negotiation
1312          */
1313
1314         /*-
1315          * check for enough space.
1316          * 4 bytes for the NPN ext type and extension length
1317          */
1318         if (CHECKLEN(ret, 4, limit))
1319             return NULL;
1320         s2n(TLSEXT_TYPE_next_proto_neg, ret);
1321         s2n(0, ret);
1322     }
1323 #endif
1324
1325     /*
1326      * finish_md_len is non-zero during a renegotiation, so
1327      * this avoids sending ALPN during the renegotiation
1328      * (see longer comment below)
1329      */
1330     if (s->alpn_client_proto_list && !s->s3->tmp.finish_md_len) {
1331         /*-
1332          * check for enough space.
1333          * 4 bytes for the ALPN type and extension length
1334          * 2 bytes for the ALPN protocol list length
1335          * + ALPN protocol list length
1336          */
1337         if (CHECKLEN(ret, 6 + s->alpn_client_proto_list_len, limit))
1338             return NULL;
1339         s2n(TLSEXT_TYPE_application_layer_protocol_negotiation, ret);
1340         s2n(2 + s->alpn_client_proto_list_len, ret);
1341         s2n(s->alpn_client_proto_list_len, ret);
1342         memcpy(ret, s->alpn_client_proto_list, s->alpn_client_proto_list_len);
1343         ret += s->alpn_client_proto_list_len;
1344         s->s3->alpn_sent = 1;
1345     }
1346 #ifndef OPENSSL_NO_SRTP
1347     if (SSL_IS_DTLS(s) && SSL_get_srtp_profiles(s)) {
1348         int el;
1349
1350         /* Returns 0 on success!! */
1351         if (ssl_add_clienthello_use_srtp_ext(s, 0, &el, 0)) {
1352             SSLerr(SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT, ERR_R_INTERNAL_ERROR);
1353             return NULL;
1354         }
1355
1356         /*-
1357          * check for enough space.
1358          * 4 bytes for the SRTP type and extension length
1359          * + SRTP profiles length
1360          */
1361         if (CHECKLEN(ret, 4 + el, limit))
1362             return NULL;
1363
1364         s2n(TLSEXT_TYPE_use_srtp, ret);
1365         s2n(el, ret);
1366
1367         if (ssl_add_clienthello_use_srtp_ext(s, ret, &el, el)) {
1368             SSLerr(SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT, ERR_R_INTERNAL_ERROR);
1369             return NULL;
1370         }
1371         ret += el;
1372     }
1373 #endif
1374     custom_ext_init(&s->cert->cli_ext);
1375     /* Add custom TLS Extensions to ClientHello */
1376     if (!custom_ext_add(s, 0, &ret, limit, al))
1377         return NULL;
1378     /*
1379      * In 1.1.0 before 1.1.0c we negotiated EtM with DTLS, then just
1380      * silently failed to actually do it. It is fixed in 1.1.1 but to
1381      * ease the transition especially from 1.1.0b to 1.1.0c, we just
1382      * disable it in 1.1.0.
1383      */
1384     if (!SSL_IS_DTLS(s)) {
1385         /*-
1386          * check for enough space.
1387          * 4 bytes for the ETM type and extension length
1388          */
1389         if (CHECKLEN(ret, 4, limit))
1390             return NULL;
1391         s2n(TLSEXT_TYPE_encrypt_then_mac, ret);
1392         s2n(0, ret);
1393     }
1394
1395 #ifndef OPENSSL_NO_CT
1396     if (s->ct_validation_callback != NULL) {
1397         /*-
1398          * check for enough space.
1399          * 4 bytes for the SCT type and extension length
1400          */
1401         if (CHECKLEN(ret, 4, limit))
1402             return NULL;
1403
1404         s2n(TLSEXT_TYPE_signed_certificate_timestamp, ret);
1405         s2n(0, ret);
1406     }
1407 #endif
1408
1409     /*-
1410      * check for enough space.
1411      * 4 bytes for the EMS type and extension length
1412      */
1413     if (CHECKLEN(ret, 4, limit))
1414         return NULL;
1415     s2n(TLSEXT_TYPE_extended_master_secret, ret);
1416     s2n(0, ret);
1417
1418     /*
1419      * Add padding to workaround bugs in F5 terminators. See
1420      * https://tools.ietf.org/html/draft-agl-tls-padding-03 NB: because this
1421      * code works out the length of all existing extensions it MUST always
1422      * appear last.
1423      */
1424     if (s->options & SSL_OP_TLSEXT_PADDING) {
1425         int hlen = ret - (unsigned char *)s->init_buf->data;
1426
1427         if (hlen > 0xff && hlen < 0x200) {
1428             hlen = 0x200 - hlen;
1429             if (hlen >= 4)
1430                 hlen -= 4;
1431             else
1432                 hlen = 0;
1433
1434             /*-
1435              * check for enough space. Strictly speaking we know we've already
1436              * got enough space because to get here the message size is < 0x200,
1437              * but we know that we've allocated far more than that in the buffer
1438              * - but for consistency and robustness we're going to check anyway.
1439              *
1440              * 4 bytes for the padding type and extension length
1441              * + padding length
1442              */
1443             if (CHECKLEN(ret, 4 + hlen, limit))
1444                 return NULL;
1445             s2n(TLSEXT_TYPE_padding, ret);
1446             s2n(hlen, ret);
1447             memset(ret, 0, hlen);
1448             ret += hlen;
1449         }
1450     }
1451
1452  done:
1453
1454     if ((extdatalen = ret - orig - 2) == 0)
1455         return orig;
1456
1457     s2n(extdatalen, orig);
1458     return ret;
1459 }
1460
1461 unsigned char *ssl_add_serverhello_tlsext(SSL *s, unsigned char *buf,
1462                                           unsigned char *limit, int *al)
1463 {
1464     int extdatalen = 0;
1465     unsigned char *orig = buf;
1466     unsigned char *ret = buf;
1467 #ifndef OPENSSL_NO_NEXTPROTONEG
1468     int next_proto_neg_seen;
1469 #endif
1470 #ifndef OPENSSL_NO_EC
1471     unsigned long alg_k = s->s3->tmp.new_cipher->algorithm_mkey;
1472     unsigned long alg_a = s->s3->tmp.new_cipher->algorithm_auth;
1473     int using_ecc = (alg_k & SSL_kECDHE) || (alg_a & SSL_aECDSA);
1474     using_ecc = using_ecc && (s->session->tlsext_ecpointformatlist != NULL);
1475 #endif
1476
1477     ret += 2;
1478     if (ret >= limit)
1479         return NULL;            /* this really never occurs, but ... */
1480
1481     if (s->s3->send_connection_binding) {
1482         int el;
1483
1484         if (!ssl_add_serverhello_renegotiate_ext(s, 0, &el, 0)) {
1485             SSLerr(SSL_F_SSL_ADD_SERVERHELLO_TLSEXT, ERR_R_INTERNAL_ERROR);
1486             return NULL;
1487         }
1488
1489         /*-
1490          * check for enough space.
1491          * 4 bytes for the reneg type and extension length
1492          * + reneg data length
1493          */
1494         if (CHECKLEN(ret, 4 + el, limit))
1495             return NULL;
1496
1497         s2n(TLSEXT_TYPE_renegotiate, ret);
1498         s2n(el, ret);
1499
1500         if (!ssl_add_serverhello_renegotiate_ext(s, ret, &el, el)) {
1501             SSLerr(SSL_F_SSL_ADD_SERVERHELLO_TLSEXT, ERR_R_INTERNAL_ERROR);
1502             return NULL;
1503         }
1504
1505         ret += el;
1506     }
1507
1508     /* Only add RI for SSLv3 */
1509     if (s->version == SSL3_VERSION)
1510         goto done;
1511
1512     if (!s->hit && s->servername_done == 1
1513         && s->session->tlsext_hostname != NULL) {
1514         /*-
1515          * check for enough space.
1516          * 4 bytes for the server name type and extension length
1517          */
1518         if (CHECKLEN(ret, 4, limit))
1519             return NULL;
1520
1521         s2n(TLSEXT_TYPE_server_name, ret);
1522         s2n(0, ret);
1523     }
1524 #ifndef OPENSSL_NO_EC
1525     if (using_ecc) {
1526         const unsigned char *plist;
1527         size_t plistlen;
1528         /*
1529          * Add TLS extension ECPointFormats to the ServerHello message
1530          */
1531
1532         tls1_get_formatlist(s, &plist, &plistlen);
1533
1534         if (plistlen > 255) {
1535             SSLerr(SSL_F_SSL_ADD_SERVERHELLO_TLSEXT, ERR_R_INTERNAL_ERROR);
1536             return NULL;
1537         }
1538
1539         /*-
1540          * check for enough space.
1541          * 4 bytes for the ec points format type and extension length
1542          * 1 byte for the points format list length
1543          * + length of points format list
1544          */
1545         if (CHECKLEN(ret, 5 + plistlen, limit))
1546             return NULL;
1547
1548         s2n(TLSEXT_TYPE_ec_point_formats, ret);
1549         s2n(plistlen + 1, ret);
1550         *(ret++) = (unsigned char)plistlen;
1551         memcpy(ret, plist, plistlen);
1552         ret += plistlen;
1553
1554     }
1555     /*
1556      * Currently the server should not respond with a SupportedCurves
1557      * extension
1558      */
1559 #endif                          /* OPENSSL_NO_EC */
1560
1561     if (s->tlsext_ticket_expected && tls_use_ticket(s)) {
1562         /*-
1563          * check for enough space.
1564          * 4 bytes for the Ticket type and extension length
1565          */
1566         if (CHECKLEN(ret, 4, limit))
1567             return NULL;
1568         s2n(TLSEXT_TYPE_session_ticket, ret);
1569         s2n(0, ret);
1570     } else {
1571         /*
1572          * if we don't add the above TLSEXT, we can't add a session ticket
1573          * later
1574          */
1575         s->tlsext_ticket_expected = 0;
1576     }
1577
1578     if (s->tlsext_status_expected) {
1579         /*-
1580          * check for enough space.
1581          * 4 bytes for the Status request type and extension length
1582          */
1583         if (CHECKLEN(ret, 4, limit))
1584             return NULL;
1585         s2n(TLSEXT_TYPE_status_request, ret);
1586         s2n(0, ret);
1587     }
1588 #ifndef OPENSSL_NO_SRTP
1589     if (SSL_IS_DTLS(s) && s->srtp_profile) {
1590         int el;
1591
1592         /* Returns 0 on success!! */
1593         if (ssl_add_serverhello_use_srtp_ext(s, 0, &el, 0)) {
1594             SSLerr(SSL_F_SSL_ADD_SERVERHELLO_TLSEXT, ERR_R_INTERNAL_ERROR);
1595             return NULL;
1596         }
1597         /*-
1598          * check for enough space.
1599          * 4 bytes for the SRTP profiles type and extension length
1600          * + length of the SRTP profiles list
1601          */
1602         if (CHECKLEN(ret, 4 + el, limit))
1603             return NULL;
1604
1605         s2n(TLSEXT_TYPE_use_srtp, ret);
1606         s2n(el, ret);
1607
1608         if (ssl_add_serverhello_use_srtp_ext(s, ret, &el, el)) {
1609             SSLerr(SSL_F_SSL_ADD_SERVERHELLO_TLSEXT, ERR_R_INTERNAL_ERROR);
1610             return NULL;
1611         }
1612         ret += el;
1613     }
1614 #endif
1615
1616     if (((s->s3->tmp.new_cipher->id & 0xFFFF) == 0x80
1617          || (s->s3->tmp.new_cipher->id & 0xFFFF) == 0x81)
1618         && (SSL_get_options(s) & SSL_OP_CRYPTOPRO_TLSEXT_BUG)) {
1619         const unsigned char cryptopro_ext[36] = {
1620             0xfd, 0xe8,         /* 65000 */
1621             0x00, 0x20,         /* 32 bytes length */
1622             0x30, 0x1e, 0x30, 0x08, 0x06, 0x06, 0x2a, 0x85,
1623             0x03, 0x02, 0x02, 0x09, 0x30, 0x08, 0x06, 0x06,
1624             0x2a, 0x85, 0x03, 0x02, 0x02, 0x16, 0x30, 0x08,
1625             0x06, 0x06, 0x2a, 0x85, 0x03, 0x02, 0x02, 0x17
1626         };
1627
1628         /* check for enough space. */
1629         if (CHECKLEN(ret, sizeof(cryptopro_ext), limit))
1630             return NULL;
1631         memcpy(ret, cryptopro_ext, sizeof(cryptopro_ext));
1632         ret += sizeof(cryptopro_ext);
1633
1634     }
1635 #ifndef OPENSSL_NO_HEARTBEATS
1636     /* Add Heartbeat extension if we've received one */
1637     if (SSL_IS_DTLS(s) && (s->tlsext_heartbeat & SSL_DTLSEXT_HB_ENABLED)) {
1638         /*-
1639          * check for enough space.
1640          * 4 bytes for the Heartbeat type and extension length
1641          * 1 byte for the mode
1642          */
1643         if (CHECKLEN(ret, 5, limit))
1644             return NULL;
1645         s2n(TLSEXT_TYPE_heartbeat, ret);
1646         s2n(1, ret);
1647         /*-
1648          * Set mode:
1649          * 1: peer may send requests
1650          * 2: peer not allowed to send requests
1651          */
1652         if (s->tlsext_heartbeat & SSL_DTLSEXT_HB_DONT_RECV_REQUESTS)
1653             *(ret++) = SSL_DTLSEXT_HB_DONT_SEND_REQUESTS;
1654         else
1655             *(ret++) = SSL_DTLSEXT_HB_ENABLED;
1656
1657     }
1658 #endif
1659
1660 #ifndef OPENSSL_NO_NEXTPROTONEG
1661     next_proto_neg_seen = s->s3->next_proto_neg_seen;
1662     s->s3->next_proto_neg_seen = 0;
1663     if (next_proto_neg_seen && s->ctx->next_protos_advertised_cb) {
1664         const unsigned char *npa;
1665         unsigned int npalen;
1666         int r;
1667
1668         r = s->ctx->next_protos_advertised_cb(s, &npa, &npalen,
1669                                               s->
1670                                               ctx->next_protos_advertised_cb_arg);
1671         if (r == SSL_TLSEXT_ERR_OK) {
1672             /*-
1673              * check for enough space.
1674              * 4 bytes for the NPN type and extension length
1675              * + length of protocols list
1676              */
1677             if (CHECKLEN(ret, 4 + npalen, limit))
1678                 return NULL;
1679             s2n(TLSEXT_TYPE_next_proto_neg, ret);
1680             s2n(npalen, ret);
1681             memcpy(ret, npa, npalen);
1682             ret += npalen;
1683             s->s3->next_proto_neg_seen = 1;
1684         }
1685     }
1686 #endif
1687     if (!custom_ext_add(s, 1, &ret, limit, al))
1688         return NULL;
1689     if (s->tlsext_use_etm) {
1690         /*
1691          * Don't use encrypt_then_mac if AEAD or RC4 might want to disable
1692          * for other cases too.
1693          */
1694         if (SSL_IS_DTLS(s) || s->s3->tmp.new_cipher->algorithm_mac == SSL_AEAD
1695             || s->s3->tmp.new_cipher->algorithm_enc == SSL_RC4
1696             || s->s3->tmp.new_cipher->algorithm_enc == SSL_eGOST2814789CNT
1697             || s->s3->tmp.new_cipher->algorithm_enc == SSL_eGOST2814789CNT12)
1698             s->tlsext_use_etm = 0;
1699         else {
1700             /*-
1701              * check for enough space.
1702              * 4 bytes for the ETM type and extension length
1703              */
1704             if (CHECKLEN(ret, 4, limit))
1705                 return NULL;
1706             s2n(TLSEXT_TYPE_encrypt_then_mac, ret);
1707             s2n(0, ret);
1708         }
1709     }
1710     if (s->s3->flags & TLS1_FLAGS_RECEIVED_EXTMS) {
1711         /*-
1712          * check for enough space.
1713          * 4 bytes for the EMS type and extension length
1714          */
1715         if (CHECKLEN(ret, 4, limit))
1716             return NULL;
1717         s2n(TLSEXT_TYPE_extended_master_secret, ret);
1718         s2n(0, ret);
1719     }
1720
1721     if (s->s3->alpn_selected != NULL) {
1722         const unsigned char *selected = s->s3->alpn_selected;
1723         size_t len = s->s3->alpn_selected_len;
1724
1725         /*-
1726          * check for enough space.
1727          * 4 bytes for the ALPN type and extension length
1728          * 2 bytes for ALPN data length
1729          * 1 byte for selected protocol length
1730          * + length of the selected protocol
1731          */
1732         if (CHECKLEN(ret, 7 + len, limit))
1733             return NULL;
1734         s2n(TLSEXT_TYPE_application_layer_protocol_negotiation, ret);
1735         s2n(3 + len, ret);
1736         s2n(1 + len, ret);
1737         *ret++ = len;
1738         memcpy(ret, selected, len);
1739         ret += len;
1740     }
1741
1742  done:
1743
1744     if ((extdatalen = ret - orig - 2) == 0)
1745         return orig;
1746
1747     s2n(extdatalen, orig);
1748     return ret;
1749 }
1750
1751 /*
1752  * Save the ALPN extension in a ClientHello.
1753  * pkt: the contents of the ALPN extension, not including type and length.
1754  * al: a pointer to the  alert value to send in the event of a failure.
1755  * returns: 1 on success, 0 on error.
1756  */
1757 static int tls1_alpn_handle_client_hello(SSL *s, PACKET *pkt, int *al)
1758 {
1759     PACKET protocol_list, save_protocol_list, protocol;
1760
1761     *al = SSL_AD_DECODE_ERROR;
1762
1763     if (!PACKET_as_length_prefixed_2(pkt, &protocol_list)
1764         || PACKET_remaining(&protocol_list) < 2) {
1765         return 0;
1766     }
1767
1768     save_protocol_list = protocol_list;
1769     do {
1770         /* Protocol names can't be empty. */
1771         if (!PACKET_get_length_prefixed_1(&protocol_list, &protocol)
1772             || PACKET_remaining(&protocol) == 0) {
1773             return 0;
1774         }
1775     } while (PACKET_remaining(&protocol_list) != 0);
1776
1777     if (!PACKET_memdup(&save_protocol_list,
1778                        &s->s3->alpn_proposed, &s->s3->alpn_proposed_len)) {
1779         *al = TLS1_AD_INTERNAL_ERROR;
1780         return 0;
1781     }
1782
1783     return 1;
1784 }
1785
1786 /*
1787  * Process the ALPN extension in a ClientHello.
1788  * al: a pointer to the alert value to send in the event of a failure.
1789  * returns 1 on success, 0 on error.
1790  */
1791 static int tls1_alpn_handle_client_hello_late(SSL *s, int *al)
1792 {
1793     const unsigned char *selected = NULL;
1794     unsigned char selected_len = 0;
1795
1796     if (s->ctx->alpn_select_cb != NULL && s->s3->alpn_proposed != NULL) {
1797         int r = s->ctx->alpn_select_cb(s, &selected, &selected_len,
1798                                        s->s3->alpn_proposed,
1799                                        s->s3->alpn_proposed_len,
1800                                        s->ctx->alpn_select_cb_arg);
1801
1802         if (r == SSL_TLSEXT_ERR_OK) {
1803             OPENSSL_free(s->s3->alpn_selected);
1804             s->s3->alpn_selected = OPENSSL_memdup(selected, selected_len);
1805             if (s->s3->alpn_selected == NULL) {
1806                 *al = SSL_AD_INTERNAL_ERROR;
1807                 return 0;
1808             }
1809             s->s3->alpn_selected_len = selected_len;
1810 #ifndef OPENSSL_NO_NEXTPROTONEG
1811             /* ALPN takes precedence over NPN. */
1812             s->s3->next_proto_neg_seen = 0;
1813 #endif
1814         } else if (r == SSL_TLSEXT_ERR_NOACK) {
1815             /* Behave as if no callback was present. */
1816             return 1;
1817         } else {
1818             *al = SSL_AD_NO_APPLICATION_PROTOCOL;
1819             return 0;
1820         }
1821     }
1822
1823     return 1;
1824 }
1825
1826 #ifndef OPENSSL_NO_EC
1827 /*-
1828  * ssl_check_for_safari attempts to fingerprint Safari using OS X
1829  * SecureTransport using the TLS extension block in |pkt|.
1830  * Safari, since 10.6, sends exactly these extensions, in this order:
1831  *   SNI,
1832  *   elliptic_curves
1833  *   ec_point_formats
1834  *
1835  * We wish to fingerprint Safari because they broke ECDHE-ECDSA support in 10.8,
1836  * but they advertise support. So enabling ECDHE-ECDSA ciphers breaks them.
1837  * Sadly we cannot differentiate 10.6, 10.7 and 10.8.4 (which work), from
1838  * 10.8..10.8.3 (which don't work).
1839  */
1840 static void ssl_check_for_safari(SSL *s, const PACKET *pkt)
1841 {
1842     unsigned int type;
1843     PACKET sni, tmppkt;
1844     size_t ext_len;
1845
1846     static const unsigned char kSafariExtensionsBlock[] = {
1847         0x00, 0x0a,             /* elliptic_curves extension */
1848         0x00, 0x08,             /* 8 bytes */
1849         0x00, 0x06,             /* 6 bytes of curve ids */
1850         0x00, 0x17,             /* P-256 */
1851         0x00, 0x18,             /* P-384 */
1852         0x00, 0x19,             /* P-521 */
1853
1854         0x00, 0x0b,             /* ec_point_formats */
1855         0x00, 0x02,             /* 2 bytes */
1856         0x01,                   /* 1 point format */
1857         0x00,                   /* uncompressed */
1858         /* The following is only present in TLS 1.2 */
1859         0x00, 0x0d,             /* signature_algorithms */
1860         0x00, 0x0c,             /* 12 bytes */
1861         0x00, 0x0a,             /* 10 bytes */
1862         0x05, 0x01,             /* SHA-384/RSA */
1863         0x04, 0x01,             /* SHA-256/RSA */
1864         0x02, 0x01,             /* SHA-1/RSA */
1865         0x04, 0x03,             /* SHA-256/ECDSA */
1866         0x02, 0x03,             /* SHA-1/ECDSA */
1867     };
1868
1869     /* Length of the common prefix (first two extensions). */
1870     static const size_t kSafariCommonExtensionsLength = 18;
1871
1872     tmppkt = *pkt;
1873
1874     if (!PACKET_forward(&tmppkt, 2)
1875         || !PACKET_get_net_2(&tmppkt, &type)
1876         || !PACKET_get_length_prefixed_2(&tmppkt, &sni)) {
1877         return;
1878     }
1879
1880     if (type != TLSEXT_TYPE_server_name)
1881         return;
1882
1883     ext_len = TLS1_get_client_version(s) >= TLS1_2_VERSION ?
1884         sizeof(kSafariExtensionsBlock) : kSafariCommonExtensionsLength;
1885
1886     s->s3->is_probably_safari = PACKET_equal(&tmppkt, kSafariExtensionsBlock,
1887                                              ext_len);
1888 }
1889 #endif                          /* !OPENSSL_NO_EC */
1890
1891 /*
1892  * Parse ClientHello extensions and stash extension info in various parts of
1893  * the SSL object. Verify that there are no duplicate extensions.
1894  *
1895  * Behaviour upon resumption is extension-specific. If the extension has no
1896  * effect during resumption, it is parsed (to verify its format) but otherwise
1897  * ignored.
1898  *
1899  * Consumes the entire packet in |pkt|. Returns 1 on success and 0 on failure.
1900  * Upon failure, sets |al| to the appropriate alert.
1901  */
1902 static int ssl_scan_clienthello_tlsext(SSL *s, PACKET *pkt, int *al)
1903 {
1904     unsigned int type;
1905     int renegotiate_seen = 0;
1906     PACKET extensions;
1907
1908     *al = SSL_AD_DECODE_ERROR;
1909     s->servername_done = 0;
1910     s->tlsext_status_type = -1;
1911 #ifndef OPENSSL_NO_NEXTPROTONEG
1912     s->s3->next_proto_neg_seen = 0;
1913 #endif
1914
1915     OPENSSL_free(s->s3->alpn_selected);
1916     s->s3->alpn_selected = NULL;
1917     s->s3->alpn_selected_len = 0;
1918     OPENSSL_free(s->s3->alpn_proposed);
1919     s->s3->alpn_proposed = NULL;
1920     s->s3->alpn_proposed_len = 0;
1921 #ifndef OPENSSL_NO_HEARTBEATS
1922     s->tlsext_heartbeat &= ~(SSL_DTLSEXT_HB_ENABLED |
1923                              SSL_DTLSEXT_HB_DONT_SEND_REQUESTS);
1924 #endif
1925
1926 #ifndef OPENSSL_NO_EC
1927     if (s->options & SSL_OP_SAFARI_ECDHE_ECDSA_BUG)
1928         ssl_check_for_safari(s, pkt);
1929 #endif                          /* !OPENSSL_NO_EC */
1930
1931     /* Clear any signature algorithms extension received */
1932     OPENSSL_free(s->s3->tmp.peer_sigalgs);
1933     s->s3->tmp.peer_sigalgs = NULL;
1934     s->tlsext_use_etm = 0;
1935
1936 #ifndef OPENSSL_NO_SRP
1937     OPENSSL_free(s->srp_ctx.login);
1938     s->srp_ctx.login = NULL;
1939 #endif
1940
1941     s->srtp_profile = NULL;
1942
1943     if (PACKET_remaining(pkt) == 0)
1944         goto ri_check;
1945
1946     if (!PACKET_as_length_prefixed_2(pkt, &extensions))
1947         return 0;
1948
1949     if (!tls1_check_duplicate_extensions(&extensions))
1950         return 0;
1951
1952     /*
1953      * We parse all extensions to ensure the ClientHello is well-formed but,
1954      * unless an extension specifies otherwise, we ignore extensions upon
1955      * resumption.
1956      */
1957     while (PACKET_get_net_2(&extensions, &type)) {
1958         PACKET extension;
1959         if (!PACKET_get_length_prefixed_2(&extensions, &extension))
1960             return 0;
1961
1962         if (s->tlsext_debug_cb)
1963             s->tlsext_debug_cb(s, 0, type, PACKET_data(&extension),
1964                                PACKET_remaining(&extension),
1965                                s->tlsext_debug_arg);
1966
1967         if (type == TLSEXT_TYPE_renegotiate) {
1968             if (!ssl_parse_clienthello_renegotiate_ext(s, &extension, al))
1969                 return 0;
1970             renegotiate_seen = 1;
1971         } else if (s->version == SSL3_VERSION) {
1972         }
1973 /*-
1974  * The servername extension is treated as follows:
1975  *
1976  * - Only the hostname type is supported with a maximum length of 255.
1977  * - The servername is rejected if too long or if it contains zeros,
1978  *   in which case an fatal alert is generated.
1979  * - The servername field is maintained together with the session cache.
1980  * - When a session is resumed, the servername call back invoked in order
1981  *   to allow the application to position itself to the right context.
1982  * - The servername is acknowledged if it is new for a session or when
1983  *   it is identical to a previously used for the same session.
1984  *   Applications can control the behaviour.  They can at any time
1985  *   set a 'desirable' servername for a new SSL object. This can be the
1986  *   case for example with HTTPS when a Host: header field is received and
1987  *   a renegotiation is requested. In this case, a possible servername
1988  *   presented in the new client hello is only acknowledged if it matches
1989  *   the value of the Host: field.
1990  * - Applications must  use SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION
1991  *   if they provide for changing an explicit servername context for the
1992  *   session, i.e. when the session has been established with a servername
1993  *   extension.
1994  * - On session reconnect, the servername extension may be absent.
1995  *
1996  */
1997
1998         else if (type == TLSEXT_TYPE_server_name) {
1999             unsigned int servname_type;
2000             PACKET sni, hostname;
2001
2002             if (!PACKET_as_length_prefixed_2(&extension, &sni)
2003                 /* ServerNameList must be at least 1 byte long. */
2004                 || PACKET_remaining(&sni) == 0) {
2005                 return 0;
2006             }
2007
2008             /*
2009              * Although the server_name extension was intended to be
2010              * extensible to new name types, RFC 4366 defined the
2011              * syntax inextensibility and OpenSSL 1.0.x parses it as
2012              * such.
2013              * RFC 6066 corrected the mistake but adding new name types
2014              * is nevertheless no longer feasible, so act as if no other
2015              * SNI types can exist, to simplify parsing.
2016              *
2017              * Also note that the RFC permits only one SNI value per type,
2018              * i.e., we can only have a single hostname.
2019              */
2020             if (!PACKET_get_1(&sni, &servname_type)
2021                 || servname_type != TLSEXT_NAMETYPE_host_name
2022                 || !PACKET_as_length_prefixed_2(&sni, &hostname)) {
2023                 return 0;
2024             }
2025
2026             if (!s->hit) {
2027                 if (PACKET_remaining(&hostname) > TLSEXT_MAXLEN_host_name) {
2028                     *al = TLS1_AD_UNRECOGNIZED_NAME;
2029                     return 0;
2030                 }
2031
2032                 if (PACKET_contains_zero_byte(&hostname)) {
2033                     *al = TLS1_AD_UNRECOGNIZED_NAME;
2034                     return 0;
2035                 }
2036
2037                 if (!PACKET_strndup(&hostname, &s->session->tlsext_hostname)) {
2038                     *al = TLS1_AD_INTERNAL_ERROR;
2039                     return 0;
2040                 }
2041
2042                 s->servername_done = 1;
2043             } else {
2044                 /*
2045                  * TODO(openssl-team): if the SNI doesn't match, we MUST
2046                  * fall back to a full handshake.
2047                  */
2048                 s->servername_done = s->session->tlsext_hostname
2049                     && PACKET_equal(&hostname, s->session->tlsext_hostname,
2050                                     strlen(s->session->tlsext_hostname));
2051             }
2052         }
2053 #ifndef OPENSSL_NO_SRP
2054         else if (type == TLSEXT_TYPE_srp) {
2055             PACKET srp_I;
2056
2057             if (!PACKET_as_length_prefixed_1(&extension, &srp_I))
2058                 return 0;
2059
2060             if (PACKET_contains_zero_byte(&srp_I))
2061                 return 0;
2062
2063             /*
2064              * TODO(openssl-team): currently, we re-authenticate the user
2065              * upon resumption. Instead, we MUST ignore the login.
2066              */
2067             if (!PACKET_strndup(&srp_I, &s->srp_ctx.login)) {
2068                 *al = TLS1_AD_INTERNAL_ERROR;
2069                 return 0;
2070             }
2071         }
2072 #endif
2073
2074 #ifndef OPENSSL_NO_EC
2075         else if (type == TLSEXT_TYPE_ec_point_formats) {
2076             PACKET ec_point_format_list;
2077
2078             if (!PACKET_as_length_prefixed_1(&extension, &ec_point_format_list)
2079                 || PACKET_remaining(&ec_point_format_list) == 0) {
2080                 return 0;
2081             }
2082
2083             if (!s->hit) {
2084                 if (!PACKET_memdup(&ec_point_format_list,
2085                                    &s->session->tlsext_ecpointformatlist,
2086                                    &s->
2087                                    session->tlsext_ecpointformatlist_length)) {
2088                     *al = TLS1_AD_INTERNAL_ERROR;
2089                     return 0;
2090                 }
2091             }
2092         } else if (type == TLSEXT_TYPE_elliptic_curves) {
2093             PACKET elliptic_curve_list;
2094
2095             /* Each NamedCurve is 2 bytes and we must have at least 1. */
2096             if (!PACKET_as_length_prefixed_2(&extension, &elliptic_curve_list)
2097                 || PACKET_remaining(&elliptic_curve_list) == 0
2098                 || (PACKET_remaining(&elliptic_curve_list) % 2) != 0) {
2099                 return 0;
2100             }
2101
2102             if (!s->hit) {
2103                 if (!PACKET_memdup(&elliptic_curve_list,
2104                                    &s->session->tlsext_ellipticcurvelist,
2105                                    &s->
2106                                    session->tlsext_ellipticcurvelist_length)) {
2107                     *al = TLS1_AD_INTERNAL_ERROR;
2108                     return 0;
2109                 }
2110             }
2111         }
2112 #endif                          /* OPENSSL_NO_EC */
2113         else if (type == TLSEXT_TYPE_session_ticket) {
2114             if (s->tls_session_ticket_ext_cb &&
2115                 !s->tls_session_ticket_ext_cb(s, PACKET_data(&extension),
2116                                               PACKET_remaining(&extension),
2117                                               s->tls_session_ticket_ext_cb_arg))
2118             {
2119                 *al = TLS1_AD_INTERNAL_ERROR;
2120                 return 0;
2121             }
2122         } else if (type == TLSEXT_TYPE_signature_algorithms) {
2123             PACKET supported_sig_algs;
2124
2125             if (!PACKET_as_length_prefixed_2(&extension, &supported_sig_algs)
2126                 || (PACKET_remaining(&supported_sig_algs) % 2) != 0
2127                 || PACKET_remaining(&supported_sig_algs) == 0) {
2128                 return 0;
2129             }
2130
2131             if (!s->hit) {
2132                 if (!tls1_save_sigalgs(s, PACKET_data(&supported_sig_algs),
2133                                        PACKET_remaining(&supported_sig_algs))) {
2134                     return 0;
2135                 }
2136             }
2137         } else if (type == TLSEXT_TYPE_status_request) {
2138             if (!PACKET_get_1(&extension,
2139                               (unsigned int *)&s->tlsext_status_type)) {
2140                 return 0;
2141             }
2142 #ifndef OPENSSL_NO_OCSP
2143             if (s->tlsext_status_type == TLSEXT_STATUSTYPE_ocsp) {
2144                 const unsigned char *ext_data;
2145                 PACKET responder_id_list, exts;
2146                 if (!PACKET_get_length_prefixed_2
2147                     (&extension, &responder_id_list))
2148                     return 0;
2149
2150                 /*
2151                  * We remove any OCSP_RESPIDs from a previous handshake
2152                  * to prevent unbounded memory growth - CVE-2016-6304
2153                  */
2154                 sk_OCSP_RESPID_pop_free(s->tlsext_ocsp_ids,
2155                                         OCSP_RESPID_free);
2156                 if (PACKET_remaining(&responder_id_list) > 0) {
2157                     s->tlsext_ocsp_ids = sk_OCSP_RESPID_new_null();
2158                     if (s->tlsext_ocsp_ids == NULL) {
2159                         *al = SSL_AD_INTERNAL_ERROR;
2160                         return 0;
2161                     }
2162                 } else {
2163                     s->tlsext_ocsp_ids = NULL;
2164                 }
2165
2166                 while (PACKET_remaining(&responder_id_list) > 0) {
2167                     OCSP_RESPID *id;
2168                     PACKET responder_id;
2169                     const unsigned char *id_data;
2170
2171                     if (!PACKET_get_length_prefixed_2(&responder_id_list,
2172                                                       &responder_id)
2173                         || PACKET_remaining(&responder_id) == 0) {
2174                         return 0;
2175                     }
2176
2177                     id_data = PACKET_data(&responder_id);
2178                     id = d2i_OCSP_RESPID(NULL, &id_data,
2179                                          PACKET_remaining(&responder_id));
2180                     if (id == NULL)
2181                         return 0;
2182
2183                     if (id_data != PACKET_end(&responder_id)) {
2184                         OCSP_RESPID_free(id);
2185                         return 0;
2186                     }
2187
2188                     if (!sk_OCSP_RESPID_push(s->tlsext_ocsp_ids, id)) {
2189                         OCSP_RESPID_free(id);
2190                         *al = SSL_AD_INTERNAL_ERROR;
2191                         return 0;
2192                     }
2193                 }
2194
2195                 /* Read in request_extensions */
2196                 if (!PACKET_as_length_prefixed_2(&extension, &exts))
2197                     return 0;
2198
2199                 if (PACKET_remaining(&exts) > 0) {
2200                     ext_data = PACKET_data(&exts);
2201                     sk_X509_EXTENSION_pop_free(s->tlsext_ocsp_exts,
2202                                                X509_EXTENSION_free);
2203                     s->tlsext_ocsp_exts =
2204                         d2i_X509_EXTENSIONS(NULL, &ext_data,
2205                                             PACKET_remaining(&exts));
2206                     if (s->tlsext_ocsp_exts == NULL
2207                         || ext_data != PACKET_end(&exts)) {
2208                         return 0;
2209                     }
2210                 }
2211             } else
2212 #endif
2213             {
2214                 /*
2215                  * We don't know what to do with any other type so ignore it.
2216                  */
2217                 s->tlsext_status_type = -1;
2218             }
2219         }
2220 #ifndef OPENSSL_NO_HEARTBEATS
2221         else if (SSL_IS_DTLS(s) && type == TLSEXT_TYPE_heartbeat) {
2222             unsigned int hbtype;
2223
2224             if (!PACKET_get_1(&extension, &hbtype)
2225                 || PACKET_remaining(&extension)) {
2226                 *al = SSL_AD_DECODE_ERROR;
2227                 return 0;
2228             }
2229             switch (hbtype) {
2230             case 0x01:         /* Client allows us to send HB requests */
2231                 s->tlsext_heartbeat |= SSL_DTLSEXT_HB_ENABLED;
2232                 break;
2233             case 0x02:         /* Client doesn't accept HB requests */
2234                 s->tlsext_heartbeat |= SSL_DTLSEXT_HB_ENABLED;
2235                 s->tlsext_heartbeat |= SSL_DTLSEXT_HB_DONT_SEND_REQUESTS;
2236                 break;
2237             default:
2238                 *al = SSL_AD_ILLEGAL_PARAMETER;
2239                 return 0;
2240             }
2241         }
2242 #endif
2243 #ifndef OPENSSL_NO_NEXTPROTONEG
2244         else if (type == TLSEXT_TYPE_next_proto_neg &&
2245                  s->s3->tmp.finish_md_len == 0) {
2246             /*-
2247              * We shouldn't accept this extension on a
2248              * renegotiation.
2249              *
2250              * s->new_session will be set on renegotiation, but we
2251              * probably shouldn't rely that it couldn't be set on
2252              * the initial renegotiation too in certain cases (when
2253              * there's some other reason to disallow resuming an
2254              * earlier session -- the current code won't be doing
2255              * anything like that, but this might change).
2256              *
2257              * A valid sign that there's been a previous handshake
2258              * in this connection is if s->s3->tmp.finish_md_len >
2259              * 0.  (We are talking about a check that will happen
2260              * in the Hello protocol round, well before a new
2261              * Finished message could have been computed.)
2262              */
2263             s->s3->next_proto_neg_seen = 1;
2264         }
2265 #endif
2266
2267         else if (type == TLSEXT_TYPE_application_layer_protocol_negotiation &&
2268                  s->s3->tmp.finish_md_len == 0) {
2269             if (!tls1_alpn_handle_client_hello(s, &extension, al))
2270                 return 0;
2271         }
2272
2273         /* session ticket processed earlier */
2274 #ifndef OPENSSL_NO_SRTP
2275         else if (SSL_IS_DTLS(s) && SSL_get_srtp_profiles(s)
2276                  && type == TLSEXT_TYPE_use_srtp) {
2277             if (ssl_parse_clienthello_use_srtp_ext(s, &extension, al))
2278                 return 0;
2279         }
2280 #endif
2281         else if (type == TLSEXT_TYPE_encrypt_then_mac)
2282             s->tlsext_use_etm = 1;
2283         /*
2284          * Note: extended master secret extension handled in
2285          * tls_check_serverhello_tlsext_early()
2286          */
2287
2288         /*
2289          * If this ClientHello extension was unhandled and this is a
2290          * nonresumed connection, check whether the extension is a custom
2291          * TLS Extension (has a custom_srv_ext_record), and if so call the
2292          * callback and record the extension number so that an appropriate
2293          * ServerHello may be later returned.
2294          */
2295         else if (!s->hit) {
2296             if (custom_ext_parse(s, 1, type, PACKET_data(&extension),
2297                                  PACKET_remaining(&extension), al) <= 0)
2298                 return 0;
2299         }
2300     }
2301
2302     if (PACKET_remaining(pkt) != 0) {
2303         /*
2304          * tls1_check_duplicate_extensions should ensure this never happens.
2305          */
2306         *al = SSL_AD_INTERNAL_ERROR;
2307         return 0;
2308     }
2309
2310  ri_check:
2311
2312     /* Need RI if renegotiating */
2313
2314     if (!renegotiate_seen && s->renegotiate &&
2315         !(s->options & SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION)) {
2316         *al = SSL_AD_HANDSHAKE_FAILURE;
2317         SSLerr(SSL_F_SSL_SCAN_CLIENTHELLO_TLSEXT,
2318                SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED);
2319         return 0;
2320     }
2321
2322     /*
2323      * This function currently has no state to clean up, so it returns directly.
2324      * If parsing fails at any point, the function returns early.
2325      * The SSL object may be left with partial data from extensions, but it must
2326      * then no longer be used, and clearing it up will free the leftovers.
2327      */
2328     return 1;
2329 }
2330
2331 int ssl_parse_clienthello_tlsext(SSL *s, PACKET *pkt)
2332 {
2333     int al = -1;
2334     custom_ext_init(&s->cert->srv_ext);
2335     if (ssl_scan_clienthello_tlsext(s, pkt, &al) <= 0) {
2336         ssl3_send_alert(s, SSL3_AL_FATAL, al);
2337         return 0;
2338     }
2339     if (ssl_check_clienthello_tlsext_early(s) <= 0) {
2340         SSLerr(SSL_F_SSL_PARSE_CLIENTHELLO_TLSEXT, SSL_R_CLIENTHELLO_TLSEXT);
2341         return 0;
2342     }
2343     return 1;
2344 }
2345
2346 #ifndef OPENSSL_NO_NEXTPROTONEG
2347 /*
2348  * ssl_next_proto_validate validates a Next Protocol Negotiation block. No
2349  * elements of zero length are allowed and the set of elements must exactly
2350  * fill the length of the block.
2351  */
2352 static char ssl_next_proto_validate(PACKET *pkt)
2353 {
2354     PACKET tmp_protocol;
2355
2356     while (PACKET_remaining(pkt)) {
2357         if (!PACKET_get_length_prefixed_1(pkt, &tmp_protocol)
2358             || PACKET_remaining(&tmp_protocol) == 0)
2359             return 0;
2360     }
2361
2362     return 1;
2363 }
2364 #endif
2365
2366 static int ssl_scan_serverhello_tlsext(SSL *s, PACKET *pkt, int *al)
2367 {
2368     unsigned int length, type, size;
2369     int tlsext_servername = 0;
2370     int renegotiate_seen = 0;
2371
2372 #ifndef OPENSSL_NO_NEXTPROTONEG
2373     s->s3->next_proto_neg_seen = 0;
2374 #endif
2375     s->tlsext_ticket_expected = 0;
2376
2377     OPENSSL_free(s->s3->alpn_selected);
2378     s->s3->alpn_selected = NULL;
2379 #ifndef OPENSSL_NO_HEARTBEATS
2380     s->tlsext_heartbeat &= ~(SSL_DTLSEXT_HB_ENABLED |
2381                              SSL_DTLSEXT_HB_DONT_SEND_REQUESTS);
2382 #endif
2383
2384     s->tlsext_use_etm = 0;
2385
2386     s->s3->flags &= ~TLS1_FLAGS_RECEIVED_EXTMS;
2387
2388     if (!PACKET_get_net_2(pkt, &length))
2389         goto ri_check;
2390
2391     if (PACKET_remaining(pkt) != length) {
2392         *al = SSL_AD_DECODE_ERROR;
2393         return 0;
2394     }
2395
2396     if (!tls1_check_duplicate_extensions(pkt)) {
2397         *al = SSL_AD_DECODE_ERROR;
2398         return 0;
2399     }
2400
2401     while (PACKET_get_net_2(pkt, &type) && PACKET_get_net_2(pkt, &size)) {
2402         const unsigned char *data;
2403         PACKET spkt;
2404
2405         if (!PACKET_get_sub_packet(pkt, &spkt, size)
2406             || !PACKET_peek_bytes(&spkt, &data, size))
2407             goto ri_check;
2408
2409         if (s->tlsext_debug_cb)
2410             s->tlsext_debug_cb(s, 1, type, data, size, s->tlsext_debug_arg);
2411
2412         if (type == TLSEXT_TYPE_renegotiate) {
2413             if (!ssl_parse_serverhello_renegotiate_ext(s, &spkt, al))
2414                 return 0;
2415             renegotiate_seen = 1;
2416         } else if (s->version == SSL3_VERSION) {
2417         } else if (type == TLSEXT_TYPE_server_name) {
2418             if (s->tlsext_hostname == NULL || size > 0) {
2419                 *al = TLS1_AD_UNRECOGNIZED_NAME;
2420                 return 0;
2421             }
2422             tlsext_servername = 1;
2423         }
2424 #ifndef OPENSSL_NO_EC
2425         else if (type == TLSEXT_TYPE_ec_point_formats) {
2426             unsigned int ecpointformatlist_length;
2427             if (!PACKET_get_1(&spkt, &ecpointformatlist_length)
2428                 || ecpointformatlist_length != size - 1) {
2429                 *al = TLS1_AD_DECODE_ERROR;
2430                 return 0;
2431             }
2432             if (!s->hit) {
2433                 s->session->tlsext_ecpointformatlist_length = 0;
2434                 OPENSSL_free(s->session->tlsext_ecpointformatlist);
2435                 if ((s->session->tlsext_ecpointformatlist =
2436                      OPENSSL_malloc(ecpointformatlist_length)) == NULL) {
2437                     *al = TLS1_AD_INTERNAL_ERROR;
2438                     return 0;
2439                 }
2440                 s->session->tlsext_ecpointformatlist_length =
2441                     ecpointformatlist_length;
2442                 if (!PACKET_copy_bytes(&spkt,
2443                                        s->session->tlsext_ecpointformatlist,
2444                                        ecpointformatlist_length)) {
2445                     *al = TLS1_AD_DECODE_ERROR;
2446                     return 0;
2447                 }
2448
2449             }
2450         }
2451 #endif                          /* OPENSSL_NO_EC */
2452
2453         else if (type == TLSEXT_TYPE_session_ticket) {
2454             if (s->tls_session_ticket_ext_cb &&
2455                 !s->tls_session_ticket_ext_cb(s, data, size,
2456                                               s->tls_session_ticket_ext_cb_arg))
2457             {
2458                 *al = TLS1_AD_INTERNAL_ERROR;
2459                 return 0;
2460             }
2461             if (!tls_use_ticket(s) || (size > 0)) {
2462                 *al = TLS1_AD_UNSUPPORTED_EXTENSION;
2463                 return 0;
2464             }
2465             s->tlsext_ticket_expected = 1;
2466         } else if (type == TLSEXT_TYPE_status_request) {
2467             /*
2468              * MUST be empty and only sent if we've requested a status
2469              * request message.
2470              */
2471             if ((s->tlsext_status_type == -1) || (size > 0)) {
2472                 *al = TLS1_AD_UNSUPPORTED_EXTENSION;
2473                 return 0;
2474             }
2475             /* Set flag to expect CertificateStatus message */
2476             s->tlsext_status_expected = 1;
2477         }
2478 #ifndef OPENSSL_NO_CT
2479         /*
2480          * Only take it if we asked for it - i.e if there is no CT validation
2481          * callback set, then a custom extension MAY be processing it, so we
2482          * need to let control continue to flow to that.
2483          */
2484         else if (type == TLSEXT_TYPE_signed_certificate_timestamp &&
2485                  s->ct_validation_callback != NULL) {
2486             /* Simply copy it off for later processing */
2487             if (s->tlsext_scts != NULL) {
2488                 OPENSSL_free(s->tlsext_scts);
2489                 s->tlsext_scts = NULL;
2490             }
2491             s->tlsext_scts_len = size;
2492             if (size > 0) {
2493                 s->tlsext_scts = OPENSSL_malloc(size);
2494                 if (s->tlsext_scts == NULL) {
2495                     *al = TLS1_AD_INTERNAL_ERROR;
2496                     return 0;
2497                 }
2498                 memcpy(s->tlsext_scts, data, size);
2499             }
2500         }
2501 #endif
2502 #ifndef OPENSSL_NO_NEXTPROTONEG
2503         else if (type == TLSEXT_TYPE_next_proto_neg &&
2504                  s->s3->tmp.finish_md_len == 0) {
2505             unsigned char *selected;
2506             unsigned char selected_len;
2507             /* We must have requested it. */
2508             if (s->ctx->next_proto_select_cb == NULL) {
2509                 *al = TLS1_AD_UNSUPPORTED_EXTENSION;
2510                 return 0;
2511             }
2512             /* The data must be valid */
2513             if (!ssl_next_proto_validate(&spkt)) {
2514                 *al = TLS1_AD_DECODE_ERROR;
2515                 return 0;
2516             }
2517             if (s->ctx->next_proto_select_cb(s, &selected, &selected_len, data,
2518                                              size,
2519                                              s->
2520                                              ctx->next_proto_select_cb_arg) !=
2521                 SSL_TLSEXT_ERR_OK) {
2522                 *al = TLS1_AD_INTERNAL_ERROR;
2523                 return 0;
2524             }
2525             /*
2526              * Could be non-NULL if server has sent multiple NPN extensions in
2527              * a single Serverhello
2528              */
2529             OPENSSL_free(s->next_proto_negotiated);
2530             s->next_proto_negotiated = OPENSSL_malloc(selected_len);
2531             if (s->next_proto_negotiated == NULL) {
2532                 *al = TLS1_AD_INTERNAL_ERROR;
2533                 return 0;
2534             }
2535             memcpy(s->next_proto_negotiated, selected, selected_len);
2536             s->next_proto_negotiated_len = selected_len;
2537             s->s3->next_proto_neg_seen = 1;
2538         }
2539 #endif
2540
2541         else if (type == TLSEXT_TYPE_application_layer_protocol_negotiation) {
2542             unsigned len;
2543             /* We must have requested it. */
2544             if (!s->s3->alpn_sent) {
2545                 *al = TLS1_AD_UNSUPPORTED_EXTENSION;
2546                 return 0;
2547             }
2548             /*-
2549              * The extension data consists of:
2550              *   uint16 list_length
2551              *   uint8 proto_length;
2552              *   uint8 proto[proto_length];
2553              */
2554             if (!PACKET_get_net_2(&spkt, &len)
2555                 || PACKET_remaining(&spkt) != len || !PACKET_get_1(&spkt, &len)
2556                 || PACKET_remaining(&spkt) != len) {
2557                 *al = TLS1_AD_DECODE_ERROR;
2558                 return 0;
2559             }
2560             OPENSSL_free(s->s3->alpn_selected);
2561             s->s3->alpn_selected = OPENSSL_malloc(len);
2562             if (s->s3->alpn_selected == NULL) {
2563                 *al = TLS1_AD_INTERNAL_ERROR;
2564                 return 0;
2565             }
2566             if (!PACKET_copy_bytes(&spkt, s->s3->alpn_selected, len)) {
2567                 *al = TLS1_AD_DECODE_ERROR;
2568                 return 0;
2569             }
2570             s->s3->alpn_selected_len = len;
2571         }
2572 #ifndef OPENSSL_NO_HEARTBEATS
2573         else if (SSL_IS_DTLS(s) && type == TLSEXT_TYPE_heartbeat) {
2574             unsigned int hbtype;
2575             if (!PACKET_get_1(&spkt, &hbtype)) {
2576                 *al = SSL_AD_DECODE_ERROR;
2577                 return 0;
2578             }
2579             switch (hbtype) {
2580             case 0x01:         /* Server allows us to send HB requests */
2581                 s->tlsext_heartbeat |= SSL_DTLSEXT_HB_ENABLED;
2582                 break;
2583             case 0x02:         /* Server doesn't accept HB requests */
2584                 s->tlsext_heartbeat |= SSL_DTLSEXT_HB_ENABLED;
2585                 s->tlsext_heartbeat |= SSL_DTLSEXT_HB_DONT_SEND_REQUESTS;
2586                 break;
2587             default:
2588                 *al = SSL_AD_ILLEGAL_PARAMETER;
2589                 return 0;
2590             }
2591         }
2592 #endif
2593 #ifndef OPENSSL_NO_SRTP
2594         else if (SSL_IS_DTLS(s) && type == TLSEXT_TYPE_use_srtp) {
2595             if (ssl_parse_serverhello_use_srtp_ext(s, &spkt, al))
2596                 return 0;
2597         }
2598 #endif
2599         else if (type == TLSEXT_TYPE_encrypt_then_mac) {
2600             /* Ignore if inappropriate ciphersuite */
2601             if (s->s3->tmp.new_cipher->algorithm_mac != SSL_AEAD
2602                 && s->s3->tmp.new_cipher->algorithm_enc != SSL_RC4)
2603                 s->tlsext_use_etm = 1;
2604         } else if (type == TLSEXT_TYPE_extended_master_secret) {
2605             s->s3->flags |= TLS1_FLAGS_RECEIVED_EXTMS;
2606             if (!s->hit)
2607                 s->session->flags |= SSL_SESS_FLAG_EXTMS;
2608         }
2609         /*
2610          * If this extension type was not otherwise handled, but matches a
2611          * custom_cli_ext_record, then send it to the c callback
2612          */
2613         else if (custom_ext_parse(s, 0, type, data, size, al) <= 0)
2614             return 0;
2615     }
2616
2617     if (PACKET_remaining(pkt) != 0) {
2618         *al = SSL_AD_DECODE_ERROR;
2619         return 0;
2620     }
2621
2622     if (!s->hit && tlsext_servername == 1) {
2623         if (s->tlsext_hostname) {
2624             if (s->session->tlsext_hostname == NULL) {
2625                 s->session->tlsext_hostname =
2626                     OPENSSL_strdup(s->tlsext_hostname);
2627                 if (!s->session->tlsext_hostname) {
2628                     *al = SSL_AD_UNRECOGNIZED_NAME;
2629                     return 0;
2630                 }
2631             } else {
2632                 *al = SSL_AD_DECODE_ERROR;
2633                 return 0;
2634             }
2635         }
2636     }
2637
2638  ri_check:
2639
2640     /*
2641      * Determine if we need to see RI. Strictly speaking if we want to avoid
2642      * an attack we should *always* see RI even on initial server hello
2643      * because the client doesn't see any renegotiation during an attack.
2644      * However this would mean we could not connect to any server which
2645      * doesn't support RI so for the immediate future tolerate RI absence
2646      */
2647     if (!renegotiate_seen && !(s->options & SSL_OP_LEGACY_SERVER_CONNECT)
2648         && !(s->options & SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION)) {
2649         *al = SSL_AD_HANDSHAKE_FAILURE;
2650         SSLerr(SSL_F_SSL_SCAN_SERVERHELLO_TLSEXT,
2651                SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED);
2652         return 0;
2653     }
2654
2655     if (s->hit) {
2656         /*
2657          * Check extended master secret extension is consistent with
2658          * original session.
2659          */
2660         if (!(s->s3->flags & TLS1_FLAGS_RECEIVED_EXTMS) !=
2661             !(s->session->flags & SSL_SESS_FLAG_EXTMS)) {
2662             *al = SSL_AD_HANDSHAKE_FAILURE;
2663             SSLerr(SSL_F_SSL_SCAN_SERVERHELLO_TLSEXT, SSL_R_INCONSISTENT_EXTMS);
2664             return 0;
2665         }
2666     }
2667
2668     return 1;
2669 }
2670
2671 int ssl_prepare_clienthello_tlsext(SSL *s)
2672 {
2673     s->s3->alpn_sent = 0;
2674     return 1;
2675 }
2676
2677 int ssl_prepare_serverhello_tlsext(SSL *s)
2678 {
2679     return 1;
2680 }
2681
2682 static int ssl_check_clienthello_tlsext_early(SSL *s)
2683 {
2684     int ret = SSL_TLSEXT_ERR_NOACK;
2685     int al = SSL_AD_UNRECOGNIZED_NAME;
2686
2687 #ifndef OPENSSL_NO_EC
2688     /*
2689      * The handling of the ECPointFormats extension is done elsewhere, namely
2690      * in ssl3_choose_cipher in s3_lib.c.
2691      */
2692     /*
2693      * The handling of the EllipticCurves extension is done elsewhere, namely
2694      * in ssl3_choose_cipher in s3_lib.c.
2695      */
2696 #endif
2697
2698     if (s->ctx != NULL && s->ctx->tlsext_servername_callback != 0)
2699         ret =
2700             s->ctx->tlsext_servername_callback(s, &al,
2701                                                s->ctx->tlsext_servername_arg);
2702     else if (s->session_ctx != NULL
2703              && s->session_ctx->tlsext_servername_callback != 0)
2704         ret =
2705             s->session_ctx->tlsext_servername_callback(s, &al,
2706                                                        s->
2707                                                        session_ctx->tlsext_servername_arg);
2708
2709     switch (ret) {
2710     case SSL_TLSEXT_ERR_ALERT_FATAL:
2711         ssl3_send_alert(s, SSL3_AL_FATAL, al);
2712         return -1;
2713
2714     case SSL_TLSEXT_ERR_ALERT_WARNING:
2715         ssl3_send_alert(s, SSL3_AL_WARNING, al);
2716         return 1;
2717
2718     case SSL_TLSEXT_ERR_NOACK:
2719         s->servername_done = 0;
2720         /* fall thru */
2721     default:
2722         return 1;
2723     }
2724 }
2725
2726 /* Initialise digests to default values */
2727 void ssl_set_default_md(SSL *s)
2728 {
2729     const EVP_MD **pmd = s->s3->tmp.md;
2730 #ifndef OPENSSL_NO_DSA
2731     pmd[SSL_PKEY_DSA_SIGN] = ssl_md(SSL_MD_SHA1_IDX);
2732 #endif
2733 #ifndef OPENSSL_NO_RSA
2734     if (SSL_USE_SIGALGS(s))
2735         pmd[SSL_PKEY_RSA_SIGN] = ssl_md(SSL_MD_SHA1_IDX);
2736     else
2737         pmd[SSL_PKEY_RSA_SIGN] = ssl_md(SSL_MD_MD5_SHA1_IDX);
2738     pmd[SSL_PKEY_RSA_ENC] = pmd[SSL_PKEY_RSA_SIGN];
2739 #endif
2740 #ifndef OPENSSL_NO_EC
2741     pmd[SSL_PKEY_ECC] = ssl_md(SSL_MD_SHA1_IDX);
2742 #endif
2743 #ifndef OPENSSL_NO_GOST
2744     pmd[SSL_PKEY_GOST01] = ssl_md(SSL_MD_GOST94_IDX);
2745     pmd[SSL_PKEY_GOST12_256] = ssl_md(SSL_MD_GOST12_256_IDX);
2746     pmd[SSL_PKEY_GOST12_512] = ssl_md(SSL_MD_GOST12_512_IDX);
2747 #endif
2748 }
2749
2750 int tls1_set_server_sigalgs(SSL *s)
2751 {
2752     int al;
2753     size_t i;
2754
2755     /* Clear any shared signature algorithms */
2756     OPENSSL_free(s->cert->shared_sigalgs);
2757     s->cert->shared_sigalgs = NULL;
2758     s->cert->shared_sigalgslen = 0;
2759     /* Clear certificate digests and validity flags */
2760     for (i = 0; i < SSL_PKEY_NUM; i++) {
2761         s->s3->tmp.md[i] = NULL;
2762         s->s3->tmp.valid_flags[i] = 0;
2763     }
2764
2765     /* If sigalgs received process it. */
2766     if (s->s3->tmp.peer_sigalgs) {
2767         if (!tls1_process_sigalgs(s)) {
2768             SSLerr(SSL_F_TLS1_SET_SERVER_SIGALGS, ERR_R_MALLOC_FAILURE);
2769             al = SSL_AD_INTERNAL_ERROR;
2770             goto err;
2771         }
2772         /* Fatal error is no shared signature algorithms */
2773         if (!s->cert->shared_sigalgs) {
2774             SSLerr(SSL_F_TLS1_SET_SERVER_SIGALGS,
2775                    SSL_R_NO_SHARED_SIGNATURE_ALGORITHMS);
2776             al = SSL_AD_ILLEGAL_PARAMETER;
2777             goto err;
2778         }
2779     } else {
2780         ssl_set_default_md(s);
2781     }
2782     return 1;
2783  err:
2784     ssl3_send_alert(s, SSL3_AL_FATAL, al);
2785     return 0;
2786 }
2787
2788 /*
2789  * Upon success, returns 1.
2790  * Upon failure, returns 0 and sets |al| to the appropriate fatal alert.
2791  */
2792 int ssl_check_clienthello_tlsext_late(SSL *s, int *al)
2793 {
2794     s->tlsext_status_expected = 0;
2795
2796     /*
2797      * If status request then ask callback what to do. Note: this must be
2798      * called after servername callbacks in case the certificate has changed,
2799      * and must be called after the cipher has been chosen because this may
2800      * influence which certificate is sent
2801      */
2802     if ((s->tlsext_status_type != -1) && s->ctx && s->ctx->tlsext_status_cb) {
2803         int ret;
2804         CERT_PKEY *certpkey;
2805         certpkey = ssl_get_server_send_pkey(s);
2806         /* If no certificate can't return certificate status */
2807         if (certpkey != NULL) {
2808             /*
2809              * Set current certificate to one we will use so SSL_get_certificate
2810              * et al can pick it up.
2811              */
2812             s->cert->key = certpkey;
2813             ret = s->ctx->tlsext_status_cb(s, s->ctx->tlsext_status_arg);
2814             switch (ret) {
2815                 /* We don't want to send a status request response */
2816             case SSL_TLSEXT_ERR_NOACK:
2817                 s->tlsext_status_expected = 0;
2818                 break;
2819                 /* status request response should be sent */
2820             case SSL_TLSEXT_ERR_OK:
2821                 if (s->tlsext_ocsp_resp)
2822                     s->tlsext_status_expected = 1;
2823                 break;
2824                 /* something bad happened */
2825             case SSL_TLSEXT_ERR_ALERT_FATAL:
2826             default:
2827                 *al = SSL_AD_INTERNAL_ERROR;
2828                 return 0;
2829             }
2830         }
2831     }
2832
2833     if (!tls1_alpn_handle_client_hello_late(s, al)) {
2834         return 0;
2835     }
2836
2837     return 1;
2838 }
2839
2840 int ssl_check_serverhello_tlsext(SSL *s)
2841 {
2842     int ret = SSL_TLSEXT_ERR_NOACK;
2843     int al = SSL_AD_UNRECOGNIZED_NAME;
2844
2845 #ifndef OPENSSL_NO_EC
2846     /*
2847      * If we are client and using an elliptic curve cryptography cipher
2848      * suite, then if server returns an EC point formats lists extension it
2849      * must contain uncompressed.
2850      */
2851     unsigned long alg_k = s->s3->tmp.new_cipher->algorithm_mkey;
2852     unsigned long alg_a = s->s3->tmp.new_cipher->algorithm_auth;
2853     if ((s->tlsext_ecpointformatlist != NULL)
2854         && (s->tlsext_ecpointformatlist_length > 0)
2855         && (s->session->tlsext_ecpointformatlist != NULL)
2856         && (s->session->tlsext_ecpointformatlist_length > 0)
2857         && ((alg_k & SSL_kECDHE) || (alg_a & SSL_aECDSA))) {
2858         /* we are using an ECC cipher */
2859         size_t i;
2860         unsigned char *list;
2861         int found_uncompressed = 0;
2862         list = s->session->tlsext_ecpointformatlist;
2863         for (i = 0; i < s->session->tlsext_ecpointformatlist_length; i++) {
2864             if (*(list++) == TLSEXT_ECPOINTFORMAT_uncompressed) {
2865                 found_uncompressed = 1;
2866                 break;
2867             }
2868         }
2869         if (!found_uncompressed) {
2870             SSLerr(SSL_F_SSL_CHECK_SERVERHELLO_TLSEXT,
2871                    SSL_R_TLS_INVALID_ECPOINTFORMAT_LIST);
2872             return -1;
2873         }
2874     }
2875     ret = SSL_TLSEXT_ERR_OK;
2876 #endif                          /* OPENSSL_NO_EC */
2877
2878     if (s->ctx != NULL && s->ctx->tlsext_servername_callback != 0)
2879         ret =
2880             s->ctx->tlsext_servername_callback(s, &al,
2881                                                s->ctx->tlsext_servername_arg);
2882     else if (s->session_ctx != NULL
2883              && s->session_ctx->tlsext_servername_callback != 0)
2884         ret =
2885             s->session_ctx->tlsext_servername_callback(s, &al,
2886                                                        s->
2887                                                        session_ctx->tlsext_servername_arg);
2888
2889     /*
2890      * Ensure we get sensible values passed to tlsext_status_cb in the event
2891      * that we don't receive a status message
2892      */
2893     OPENSSL_free(s->tlsext_ocsp_resp);
2894     s->tlsext_ocsp_resp = NULL;
2895     s->tlsext_ocsp_resplen = -1;
2896
2897     switch (ret) {
2898     case SSL_TLSEXT_ERR_ALERT_FATAL:
2899         ssl3_send_alert(s, SSL3_AL_FATAL, al);
2900         return -1;
2901
2902     case SSL_TLSEXT_ERR_ALERT_WARNING:
2903         ssl3_send_alert(s, SSL3_AL_WARNING, al);
2904         return 1;
2905
2906     case SSL_TLSEXT_ERR_NOACK:
2907         s->servername_done = 0;
2908         /* fall thru */
2909     default:
2910         return 1;
2911     }
2912 }
2913
2914 int ssl_parse_serverhello_tlsext(SSL *s, PACKET *pkt)
2915 {
2916     int al = -1;
2917     if (s->version < SSL3_VERSION)
2918         return 1;
2919     if (ssl_scan_serverhello_tlsext(s, pkt, &al) <= 0) {
2920         ssl3_send_alert(s, SSL3_AL_FATAL, al);
2921         return 0;
2922     }
2923
2924     if (ssl_check_serverhello_tlsext(s) <= 0) {
2925         SSLerr(SSL_F_SSL_PARSE_SERVERHELLO_TLSEXT, SSL_R_SERVERHELLO_TLSEXT);
2926         return 0;
2927     }
2928     return 1;
2929 }
2930
2931 /*-
2932  * Since the server cache lookup is done early on in the processing of the
2933  * ClientHello and other operations depend on the result some extensions
2934  * need to be handled at the same time.
2935  *
2936  * Two extensions are currently handled, session ticket and extended master
2937  * secret.
2938  *
2939  *   session_id: ClientHello session ID.
2940  *   ext: ClientHello extensions (including length prefix)
2941  *   ret: (output) on return, if a ticket was decrypted, then this is set to
2942  *       point to the resulting session.
2943  *
2944  * If s->tls_session_secret_cb is set then we are expecting a pre-shared key
2945  * ciphersuite, in which case we have no use for session tickets and one will
2946  * never be decrypted, nor will s->tlsext_ticket_expected be set to 1.
2947  *
2948  * Returns:
2949  *   -1: fatal error, either from parsing or decrypting the ticket.
2950  *    0: no ticket was found (or was ignored, based on settings).
2951  *    1: a zero length extension was found, indicating that the client supports
2952  *       session tickets but doesn't currently have one to offer.
2953  *    2: either s->tls_session_secret_cb was set, or a ticket was offered but
2954  *       couldn't be decrypted because of a non-fatal error.
2955  *    3: a ticket was successfully decrypted and *ret was set.
2956  *
2957  * Side effects:
2958  *   Sets s->tlsext_ticket_expected to 1 if the server will have to issue
2959  *   a new session ticket to the client because the client indicated support
2960  *   (and s->tls_session_secret_cb is NULL) but the client either doesn't have
2961  *   a session ticket or we couldn't use the one it gave us, or if
2962  *   s->ctx->tlsext_ticket_key_cb asked to renew the client's ticket.
2963  *   Otherwise, s->tlsext_ticket_expected is set to 0.
2964  *
2965  *   For extended master secret flag is set if the extension is present.
2966  *
2967  */
2968 int tls_check_serverhello_tlsext_early(SSL *s, const PACKET *ext,
2969                                        const PACKET *session_id,
2970                                        SSL_SESSION **ret)
2971 {
2972     unsigned int i;
2973     PACKET local_ext = *ext;
2974     int retv = -1;
2975
2976     int have_ticket = 0;
2977     int use_ticket = tls_use_ticket(s);
2978
2979     *ret = NULL;
2980     s->tlsext_ticket_expected = 0;
2981     s->s3->flags &= ~TLS1_FLAGS_RECEIVED_EXTMS;
2982
2983     /*
2984      * If tickets disabled behave as if no ticket present to permit stateful
2985      * resumption.
2986      */
2987     if ((s->version <= SSL3_VERSION))
2988         return 0;
2989
2990     if (!PACKET_get_net_2(&local_ext, &i)) {
2991         retv = 0;
2992         goto end;
2993     }
2994     while (PACKET_remaining(&local_ext) >= 4) {
2995         unsigned int type, size;
2996
2997         if (!PACKET_get_net_2(&local_ext, &type)
2998             || !PACKET_get_net_2(&local_ext, &size)) {
2999             /* Shouldn't ever happen */
3000             retv = -1;
3001             goto end;
3002         }
3003         if (PACKET_remaining(&local_ext) < size) {
3004             retv = 0;
3005             goto end;
3006         }
3007         if (type == TLSEXT_TYPE_session_ticket && use_ticket) {
3008             int r;
3009             const unsigned char *etick;
3010
3011             /* Duplicate extension */
3012             if (have_ticket != 0) {
3013                 retv = -1;
3014                 goto end;
3015             }
3016             have_ticket = 1;
3017
3018             if (size == 0) {
3019                 /*
3020                  * The client will accept a ticket but doesn't currently have
3021                  * one.
3022                  */
3023                 s->tlsext_ticket_expected = 1;
3024                 retv = 1;
3025                 continue;
3026             }
3027             if (s->tls_session_secret_cb) {
3028                 /*
3029                  * Indicate that the ticket couldn't be decrypted rather than
3030                  * generating the session from ticket now, trigger
3031                  * abbreviated handshake based on external mechanism to
3032                  * calculate the master secret later.
3033                  */
3034                 retv = 2;
3035                 continue;
3036             }
3037             if (!PACKET_get_bytes(&local_ext, &etick, size)) {
3038                 /* Shouldn't ever happen */
3039                 retv = -1;
3040                 goto end;
3041             }
3042             r = tls_decrypt_ticket(s, etick, size, PACKET_data(session_id),
3043                                    PACKET_remaining(session_id), ret);
3044             switch (r) {
3045             case 2:            /* ticket couldn't be decrypted */
3046                 s->tlsext_ticket_expected = 1;
3047                 retv = 2;
3048                 break;
3049             case 3:            /* ticket was decrypted */
3050                 retv = r;
3051                 break;
3052             case 4:            /* ticket decrypted but need to renew */
3053                 s->tlsext_ticket_expected = 1;
3054                 retv = 3;
3055                 break;
3056             default:           /* fatal error */
3057                 retv = -1;
3058                 break;
3059             }
3060             continue;
3061         } else {
3062             if (type == TLSEXT_TYPE_extended_master_secret)
3063                 s->s3->flags |= TLS1_FLAGS_RECEIVED_EXTMS;
3064             if (!PACKET_forward(&local_ext, size)) {
3065                 retv = -1;
3066                 goto end;
3067             }
3068         }
3069     }
3070     if (have_ticket == 0)
3071         retv = 0;
3072  end:
3073     return retv;
3074 }
3075
3076 /*-
3077  * tls_decrypt_ticket attempts to decrypt a session ticket.
3078  *
3079  *   etick: points to the body of the session ticket extension.
3080  *   eticklen: the length of the session tickets extension.
3081  *   sess_id: points at the session ID.
3082  *   sesslen: the length of the session ID.
3083  *   psess: (output) on return, if a ticket was decrypted, then this is set to
3084  *       point to the resulting session.
3085  *
3086  * Returns:
3087  *   -2: fatal error, malloc failure.
3088  *   -1: fatal error, either from parsing or decrypting the ticket.
3089  *    2: the ticket couldn't be decrypted.
3090  *    3: a ticket was successfully decrypted and *psess was set.
3091  *    4: same as 3, but the ticket needs to be renewed.
3092  */
3093 static int tls_decrypt_ticket(SSL *s, const unsigned char *etick,
3094                               int eticklen, const unsigned char *sess_id,
3095                               int sesslen, SSL_SESSION **psess)
3096 {
3097     SSL_SESSION *sess;
3098     unsigned char *sdec;
3099     const unsigned char *p;
3100     int slen, mlen, renew_ticket = 0, ret = -1;
3101     unsigned char tick_hmac[EVP_MAX_MD_SIZE];
3102     HMAC_CTX *hctx = NULL;
3103     EVP_CIPHER_CTX *ctx;
3104     SSL_CTX *tctx = s->session_ctx;
3105
3106     /* Initialize session ticket encryption and HMAC contexts */
3107     hctx = HMAC_CTX_new();
3108     if (hctx == NULL)
3109         return -2;
3110     ctx = EVP_CIPHER_CTX_new();
3111     if (ctx == NULL) {
3112         ret = -2;
3113         goto err;
3114     }
3115     if (tctx->tlsext_ticket_key_cb) {
3116         unsigned char *nctick = (unsigned char *)etick;
3117         int rv = tctx->tlsext_ticket_key_cb(s, nctick, nctick + 16,
3118                                             ctx, hctx, 0);
3119         if (rv < 0)
3120             goto err;
3121         if (rv == 0) {
3122             ret = 2;
3123             goto err;
3124         }
3125         if (rv == 2)
3126             renew_ticket = 1;
3127     } else {
3128         /* Check key name matches */
3129         if (memcmp(etick, tctx->tlsext_tick_key_name,
3130                    sizeof(tctx->tlsext_tick_key_name)) != 0) {
3131             ret = 2;
3132             goto err;
3133         }
3134         if (HMAC_Init_ex(hctx, tctx->tlsext_tick_hmac_key,
3135                          sizeof(tctx->tlsext_tick_hmac_key),
3136                          EVP_sha256(), NULL) <= 0
3137             || EVP_DecryptInit_ex(ctx, EVP_aes_256_cbc(), NULL,
3138                                   tctx->tlsext_tick_aes_key,
3139                                   etick + sizeof(tctx->tlsext_tick_key_name)) <=
3140             0) {
3141             goto err;
3142         }
3143     }
3144     /*
3145      * Attempt to process session ticket, first conduct sanity and integrity
3146      * checks on ticket.
3147      */
3148     mlen = HMAC_size(hctx);
3149     if (mlen < 0) {
3150         goto err;
3151     }
3152     /* Sanity check ticket length: must exceed keyname + IV + HMAC */
3153     if (eticklen <=
3154         TLSEXT_KEYNAME_LENGTH + EVP_CIPHER_CTX_iv_length(ctx) + mlen) {
3155         ret = 2;
3156         goto err;
3157     }
3158     eticklen -= mlen;
3159     /* Check HMAC of encrypted ticket */
3160     if (HMAC_Update(hctx, etick, eticklen) <= 0
3161         || HMAC_Final(hctx, tick_hmac, NULL) <= 0) {
3162         goto err;
3163     }
3164     HMAC_CTX_free(hctx);
3165     if (CRYPTO_memcmp(tick_hmac, etick + eticklen, mlen)) {
3166         EVP_CIPHER_CTX_free(ctx);
3167         return 2;
3168     }
3169     /* Attempt to decrypt session data */
3170     /* Move p after IV to start of encrypted ticket, update length */
3171     p = etick + TLSEXT_KEYNAME_LENGTH + EVP_CIPHER_CTX_iv_length(ctx);
3172     eticklen -= TLSEXT_KEYNAME_LENGTH + EVP_CIPHER_CTX_iv_length(ctx);
3173     sdec = OPENSSL_malloc(eticklen);
3174     if (sdec == NULL || EVP_DecryptUpdate(ctx, sdec, &slen, p, eticklen) <= 0) {
3175         EVP_CIPHER_CTX_free(ctx);
3176         OPENSSL_free(sdec);
3177         return -1;
3178     }
3179     if (EVP_DecryptFinal(ctx, sdec + slen, &mlen) <= 0) {
3180         EVP_CIPHER_CTX_free(ctx);
3181         OPENSSL_free(sdec);
3182         return 2;
3183     }
3184     slen += mlen;
3185     EVP_CIPHER_CTX_free(ctx);
3186     ctx = NULL;
3187     p = sdec;
3188
3189     sess = d2i_SSL_SESSION(NULL, &p, slen);
3190     slen -= p - sdec;
3191     OPENSSL_free(sdec);
3192     if (sess) {
3193         /* Some additional consistency checks */
3194         if (slen != 0 || sess->session_id_length != 0) {
3195             SSL_SESSION_free(sess);
3196             return 2;
3197         }
3198         /*
3199          * The session ID, if non-empty, is used by some clients to detect
3200          * that the ticket has been accepted. So we copy it to the session
3201          * structure. If it is empty set length to zero as required by
3202          * standard.
3203          */
3204         if (sesslen)
3205             memcpy(sess->session_id, sess_id, sesslen);
3206         sess->session_id_length = sesslen;
3207         *psess = sess;
3208         if (renew_ticket)
3209             return 4;
3210         else
3211             return 3;
3212     }
3213     ERR_clear_error();
3214     /*
3215      * For session parse failure, indicate that we need to send a new ticket.
3216      */
3217     return 2;
3218  err:
3219     EVP_CIPHER_CTX_free(ctx);
3220     HMAC_CTX_free(hctx);
3221     return ret;
3222 }
3223
3224 /* Tables to translate from NIDs to TLS v1.2 ids */
3225
3226 typedef struct {
3227     int nid;
3228     int id;
3229 } tls12_lookup;
3230
3231 static const tls12_lookup tls12_md[] = {
3232     {NID_md5, TLSEXT_hash_md5},
3233     {NID_sha1, TLSEXT_hash_sha1},
3234     {NID_sha224, TLSEXT_hash_sha224},
3235     {NID_sha256, TLSEXT_hash_sha256},
3236     {NID_sha384, TLSEXT_hash_sha384},
3237     {NID_sha512, TLSEXT_hash_sha512},
3238     {NID_id_GostR3411_94, TLSEXT_hash_gostr3411},
3239     {NID_id_GostR3411_2012_256, TLSEXT_hash_gostr34112012_256},
3240     {NID_id_GostR3411_2012_512, TLSEXT_hash_gostr34112012_512},
3241 };
3242
3243 static const tls12_lookup tls12_sig[] = {
3244     {EVP_PKEY_RSA, TLSEXT_signature_rsa},
3245     {EVP_PKEY_DSA, TLSEXT_signature_dsa},
3246     {EVP_PKEY_EC, TLSEXT_signature_ecdsa},
3247     {NID_id_GostR3410_2001, TLSEXT_signature_gostr34102001},
3248     {NID_id_GostR3410_2012_256, TLSEXT_signature_gostr34102012_256},
3249     {NID_id_GostR3410_2012_512, TLSEXT_signature_gostr34102012_512}
3250 };
3251
3252 static int tls12_find_id(int nid, const tls12_lookup *table, size_t tlen)
3253 {
3254     size_t i;
3255     for (i = 0; i < tlen; i++) {
3256         if (table[i].nid == nid)
3257             return table[i].id;
3258     }
3259     return -1;
3260 }
3261
3262 static int tls12_find_nid(int id, const tls12_lookup *table, size_t tlen)
3263 {
3264     size_t i;
3265     for (i = 0; i < tlen; i++) {
3266         if ((table[i].id) == id)
3267             return table[i].nid;
3268     }
3269     return NID_undef;
3270 }
3271
3272 int tls12_get_sigandhash(unsigned char *p, const EVP_PKEY *pk, const EVP_MD *md)
3273 {
3274     int sig_id, md_id;
3275     if (!md)
3276         return 0;
3277     md_id = tls12_find_id(EVP_MD_type(md), tls12_md, OSSL_NELEM(tls12_md));
3278     if (md_id == -1)
3279         return 0;
3280     sig_id = tls12_get_sigid(pk);
3281     if (sig_id == -1)
3282         return 0;
3283     p[0] = (unsigned char)md_id;
3284     p[1] = (unsigned char)sig_id;
3285     return 1;
3286 }
3287
3288 int tls12_get_sigid(const EVP_PKEY *pk)
3289 {
3290     return tls12_find_id(EVP_PKEY_id(pk), tls12_sig, OSSL_NELEM(tls12_sig));
3291 }
3292
3293 typedef struct {
3294     int nid;
3295     int secbits;
3296     int md_idx;
3297     unsigned char tlsext_hash;
3298 } tls12_hash_info;
3299
3300 static const tls12_hash_info tls12_md_info[] = {
3301     {NID_md5, 64, SSL_MD_MD5_IDX, TLSEXT_hash_md5},
3302     {NID_sha1, 80, SSL_MD_SHA1_IDX, TLSEXT_hash_sha1},
3303     {NID_sha224, 112, SSL_MD_SHA224_IDX, TLSEXT_hash_sha224},
3304     {NID_sha256, 128, SSL_MD_SHA256_IDX, TLSEXT_hash_sha256},
3305     {NID_sha384, 192, SSL_MD_SHA384_IDX, TLSEXT_hash_sha384},
3306     {NID_sha512, 256, SSL_MD_SHA512_IDX, TLSEXT_hash_sha512},
3307     {NID_id_GostR3411_94, 128, SSL_MD_GOST94_IDX, TLSEXT_hash_gostr3411},
3308     {NID_id_GostR3411_2012_256, 128, SSL_MD_GOST12_256_IDX,
3309      TLSEXT_hash_gostr34112012_256},
3310     {NID_id_GostR3411_2012_512, 256, SSL_MD_GOST12_512_IDX,
3311      TLSEXT_hash_gostr34112012_512},
3312 };
3313
3314 static const tls12_hash_info *tls12_get_hash_info(unsigned char hash_alg)
3315 {
3316     unsigned int i;
3317     if (hash_alg == 0)
3318         return NULL;
3319
3320     for (i = 0; i < OSSL_NELEM(tls12_md_info); i++) {
3321         if (tls12_md_info[i].tlsext_hash == hash_alg)
3322             return tls12_md_info + i;
3323     }
3324
3325     return NULL;
3326 }
3327
3328 const EVP_MD *tls12_get_hash(unsigned char hash_alg)
3329 {
3330     const tls12_hash_info *inf;
3331     if (hash_alg == TLSEXT_hash_md5 && FIPS_mode())
3332         return NULL;
3333     inf = tls12_get_hash_info(hash_alg);
3334     if (!inf)
3335         return NULL;
3336     return ssl_md(inf->md_idx);
3337 }
3338
3339 static int tls12_get_pkey_idx(unsigned char sig_alg)
3340 {
3341     switch (sig_alg) {
3342 #ifndef OPENSSL_NO_RSA
3343     case TLSEXT_signature_rsa:
3344         return SSL_PKEY_RSA_SIGN;
3345 #endif
3346 #ifndef OPENSSL_NO_DSA
3347     case TLSEXT_signature_dsa:
3348         return SSL_PKEY_DSA_SIGN;
3349 #endif
3350 #ifndef OPENSSL_NO_EC
3351     case TLSEXT_signature_ecdsa:
3352         return SSL_PKEY_ECC;
3353 #endif
3354 #ifndef OPENSSL_NO_GOST
3355     case TLSEXT_signature_gostr34102001:
3356         return SSL_PKEY_GOST01;
3357
3358     case TLSEXT_signature_gostr34102012_256:
3359         return SSL_PKEY_GOST12_256;
3360
3361     case TLSEXT_signature_gostr34102012_512:
3362         return SSL_PKEY_GOST12_512;
3363 #endif
3364     }
3365     return -1;
3366 }
3367
3368 /* Convert TLS 1.2 signature algorithm extension values into NIDs */
3369 static void tls1_lookup_sigalg(int *phash_nid, int *psign_nid,
3370                                int *psignhash_nid, const unsigned char *data)
3371 {
3372     int sign_nid = NID_undef, hash_nid = NID_undef;
3373     if (!phash_nid && !psign_nid && !psignhash_nid)
3374         return;
3375     if (phash_nid || psignhash_nid) {
3376         hash_nid = tls12_find_nid(data[0], tls12_md, OSSL_NELEM(tls12_md));
3377         if (phash_nid)
3378             *phash_nid = hash_nid;
3379     }
3380     if (psign_nid || psignhash_nid) {
3381         sign_nid = tls12_find_nid(data[1], tls12_sig, OSSL_NELEM(tls12_sig));
3382         if (psign_nid)
3383             *psign_nid = sign_nid;
3384     }
3385     if (psignhash_nid) {
3386         if (sign_nid == NID_undef || hash_nid == NID_undef
3387             || OBJ_find_sigid_by_algs(psignhash_nid, hash_nid, sign_nid) <= 0)
3388             *psignhash_nid = NID_undef;
3389     }
3390 }
3391
3392 /* Check to see if a signature algorithm is allowed */
3393 static int tls12_sigalg_allowed(SSL *s, int op, const unsigned char *ptmp)
3394 {
3395     /* See if we have an entry in the hash table and it is enabled */
3396     const tls12_hash_info *hinf = tls12_get_hash_info(ptmp[0]);
3397     if (hinf == NULL || ssl_md(hinf->md_idx) == NULL)
3398         return 0;
3399     /* See if public key algorithm allowed */
3400     if (tls12_get_pkey_idx(ptmp[1]) == -1)
3401         return 0;
3402     /* Finally see if security callback allows it */
3403     return ssl_security(s, op, hinf->secbits, hinf->nid, (void *)ptmp);
3404 }
3405
3406 /*
3407  * Get a mask of disabled public key algorithms based on supported signature
3408  * algorithms. For example if no signature algorithm supports RSA then RSA is
3409  * disabled.
3410  */
3411
3412 void ssl_set_sig_mask(uint32_t *pmask_a, SSL *s, int op)
3413 {
3414     const unsigned char *sigalgs;
3415     size_t i, sigalgslen;
3416     int have_rsa = 0, have_dsa = 0, have_ecdsa = 0;
3417     /*
3418      * Now go through all signature algorithms seeing if we support any for
3419      * RSA, DSA, ECDSA. Do this for all versions not just TLS 1.2. To keep
3420      * down calls to security callback only check if we have to.
3421      */
3422     sigalgslen = tls12_get_psigalgs(s, 1, &sigalgs);
3423     for (i = 0; i < sigalgslen; i += 2, sigalgs += 2) {
3424         switch (sigalgs[1]) {
3425 #ifndef OPENSSL_NO_RSA
3426         case TLSEXT_signature_rsa:
3427             if (!have_rsa && tls12_sigalg_allowed(s, op, sigalgs))
3428                 have_rsa = 1;
3429             break;
3430 #endif
3431 #ifndef OPENSSL_NO_DSA
3432         case TLSEXT_signature_dsa:
3433             if (!have_dsa && tls12_sigalg_allowed(s, op, sigalgs))
3434                 have_dsa = 1;
3435             break;
3436 #endif
3437 #ifndef OPENSSL_NO_EC
3438         case TLSEXT_signature_ecdsa:
3439             if (!have_ecdsa && tls12_sigalg_allowed(s, op, sigalgs))
3440                 have_ecdsa = 1;
3441             break;
3442 #endif
3443         }
3444     }
3445     if (!have_rsa)
3446         *pmask_a |= SSL_aRSA;
3447     if (!have_dsa)
3448         *pmask_a |= SSL_aDSS;
3449     if (!have_ecdsa)
3450         *pmask_a |= SSL_aECDSA;
3451 }
3452
3453 size_t tls12_copy_sigalgs(SSL *s, unsigned char *out,
3454                           const unsigned char *psig, size_t psiglen)
3455 {
3456     unsigned char *tmpout = out;
3457     size_t i;
3458     for (i = 0; i < psiglen; i += 2, psig += 2) {
3459         if (tls12_sigalg_allowed(s, SSL_SECOP_SIGALG_SUPPORTED, psig)) {
3460             *tmpout++ = psig[0];
3461             *tmpout++ = psig[1];
3462         }
3463     }
3464     return tmpout - out;
3465 }
3466
3467 /* Given preference and allowed sigalgs set shared sigalgs */
3468 static int tls12_shared_sigalgs(SSL *s, TLS_SIGALGS *shsig,
3469                                 const unsigned char *pref, size_t preflen,
3470                                 const unsigned char *allow, size_t allowlen)
3471 {
3472     const unsigned char *ptmp, *atmp;
3473     size_t i, j, nmatch = 0;
3474     for (i = 0, ptmp = pref; i < preflen; i += 2, ptmp += 2) {
3475         /* Skip disabled hashes or signature algorithms */
3476         if (!tls12_sigalg_allowed(s, SSL_SECOP_SIGALG_SHARED, ptmp))
3477             continue;
3478         for (j = 0, atmp = allow; j < allowlen; j += 2, atmp += 2) {
3479             if (ptmp[0] == atmp[0] && ptmp[1] == atmp[1]) {
3480                 nmatch++;
3481                 if (shsig) {
3482                     shsig->rhash = ptmp[0];
3483                     shsig->rsign = ptmp[1];
3484                     tls1_lookup_sigalg(&shsig->hash_nid,
3485                                        &shsig->sign_nid,
3486                                        &shsig->signandhash_nid, ptmp);
3487                     shsig++;
3488                 }
3489                 break;
3490             }
3491         }
3492     }
3493     return nmatch;
3494 }
3495
3496 /* Set shared signature algorithms for SSL structures */
3497 static int tls1_set_shared_sigalgs(SSL *s)
3498 {
3499     const unsigned char *pref, *allow, *conf;
3500     size_t preflen, allowlen, conflen;
3501     size_t nmatch;
3502     TLS_SIGALGS *salgs = NULL;
3503     CERT *c = s->cert;
3504     unsigned int is_suiteb = tls1_suiteb(s);
3505
3506     OPENSSL_free(c->shared_sigalgs);
3507     c->shared_sigalgs = NULL;
3508     c->shared_sigalgslen = 0;
3509     /* If client use client signature algorithms if not NULL */
3510     if (!s->server && c->client_sigalgs && !is_suiteb) {
3511         conf = c->client_sigalgs;
3512         conflen = c->client_sigalgslen;
3513     } else if (c->conf_sigalgs && !is_suiteb) {
3514         conf = c->conf_sigalgs;
3515         conflen = c->conf_sigalgslen;
3516     } else
3517         conflen = tls12_get_psigalgs(s, 0, &conf);
3518     if (s->options & SSL_OP_CIPHER_SERVER_PREFERENCE || is_suiteb) {
3519         pref = conf;
3520         preflen = conflen;
3521         allow = s->s3->tmp.peer_sigalgs;
3522         allowlen = s->s3->tmp.peer_sigalgslen;
3523     } else {
3524         allow = conf;
3525         allowlen = conflen;
3526         pref = s->s3->tmp.peer_sigalgs;
3527         preflen = s->s3->tmp.peer_sigalgslen;
3528     }
3529     nmatch = tls12_shared_sigalgs(s, NULL, pref, preflen, allow, allowlen);
3530     if (nmatch) {
3531         salgs = OPENSSL_malloc(nmatch * sizeof(TLS_SIGALGS));
3532         if (salgs == NULL)
3533             return 0;
3534         nmatch = tls12_shared_sigalgs(s, salgs, pref, preflen, allow, allowlen);
3535     } else {
3536         salgs = NULL;
3537     }
3538     c->shared_sigalgs = salgs;
3539     c->shared_sigalgslen = nmatch;
3540     return 1;
3541 }
3542
3543 /* Set preferred digest for each key type */
3544
3545 int tls1_save_sigalgs(SSL *s, const unsigned char *data, int dsize)
3546 {
3547     CERT *c = s->cert;
3548     /* Extension ignored for inappropriate versions */
3549     if (!SSL_USE_SIGALGS(s))
3550         return 1;
3551     /* Should never happen */
3552     if (!c)
3553         return 0;
3554
3555     OPENSSL_free(s->s3->tmp.peer_sigalgs);
3556     s->s3->tmp.peer_sigalgs = OPENSSL_malloc(dsize);
3557     if (s->s3->tmp.peer_sigalgs == NULL)
3558         return 0;
3559     s->s3->tmp.peer_sigalgslen = dsize;
3560     memcpy(s->s3->tmp.peer_sigalgs, data, dsize);
3561     return 1;
3562 }
3563
3564 int tls1_process_sigalgs(SSL *s)
3565 {
3566     int idx;
3567     size_t i;
3568     const EVP_MD *md;
3569     const EVP_MD **pmd = s->s3->tmp.md;
3570     uint32_t *pvalid = s->s3->tmp.valid_flags;
3571     CERT *c = s->cert;
3572     TLS_SIGALGS *sigptr;
3573     if (!tls1_set_shared_sigalgs(s))
3574         return 0;
3575
3576     for (i = 0, sigptr = c->shared_sigalgs;
3577          i < c->shared_sigalgslen; i++, sigptr++) {
3578         idx = tls12_get_pkey_idx(sigptr->rsign);
3579         if (idx > 0 && pmd[idx] == NULL) {
3580             md = tls12_get_hash(sigptr->rhash);
3581             pmd[idx] = md;
3582             pvalid[idx] = CERT_PKEY_EXPLICIT_SIGN;
3583             if (idx == SSL_PKEY_RSA_SIGN) {
3584                 pvalid[SSL_PKEY_RSA_ENC] = CERT_PKEY_EXPLICIT_SIGN;
3585                 pmd[SSL_PKEY_RSA_ENC] = md;
3586             }
3587         }
3588
3589     }
3590     /*
3591      * In strict mode leave unset digests as NULL to indicate we can't use
3592      * the certificate for signing.
3593      */
3594     if (!(s->cert->cert_flags & SSL_CERT_FLAGS_CHECK_TLS_STRICT)) {
3595         /*
3596          * Set any remaining keys to default values. NOTE: if alg is not
3597          * supported it stays as NULL.
3598          */
3599 #ifndef OPENSSL_NO_DSA
3600         if (pmd[SSL_PKEY_DSA_SIGN] == NULL)
3601             pmd[SSL_PKEY_DSA_SIGN] = EVP_sha1();
3602 #endif
3603 #ifndef OPENSSL_NO_RSA
3604         if (pmd[SSL_PKEY_RSA_SIGN] == NULL) {
3605             pmd[SSL_PKEY_RSA_SIGN] = EVP_sha1();
3606             pmd[SSL_PKEY_RSA_ENC] = EVP_sha1();
3607         }
3608 #endif
3609 #ifndef OPENSSL_NO_EC
3610         if (pmd[SSL_PKEY_ECC] == NULL)
3611             pmd[SSL_PKEY_ECC] = EVP_sha1();
3612 #endif
3613 #ifndef OPENSSL_NO_GOST
3614         if (pmd[SSL_PKEY_GOST01] == NULL)
3615             pmd[SSL_PKEY_GOST01] = EVP_get_digestbynid(NID_id_GostR3411_94);
3616         if (pmd[SSL_PKEY_GOST12_256] == NULL)
3617             pmd[SSL_PKEY_GOST12_256] =
3618                 EVP_get_digestbynid(NID_id_GostR3411_2012_256);
3619         if (pmd[SSL_PKEY_GOST12_512] == NULL)
3620             pmd[SSL_PKEY_GOST12_512] =
3621                 EVP_get_digestbynid(NID_id_GostR3411_2012_512);
3622 #endif
3623     }
3624     return 1;
3625 }
3626
3627 int SSL_get_sigalgs(SSL *s, int idx,
3628                     int *psign, int *phash, int *psignhash,
3629                     unsigned char *rsig, unsigned char *rhash)
3630 {
3631     const unsigned char *psig = s->s3->tmp.peer_sigalgs;
3632     if (psig == NULL)
3633         return 0;
3634     if (idx >= 0) {
3635         idx <<= 1;
3636         if (idx >= (int)s->s3->tmp.peer_sigalgslen)
3637             return 0;
3638         psig += idx;
3639         if (rhash)
3640             *rhash = psig[0];
3641         if (rsig)
3642             *rsig = psig[1];
3643         tls1_lookup_sigalg(phash, psign, psignhash, psig);
3644     }
3645     return s->s3->tmp.peer_sigalgslen / 2;
3646 }
3647
3648 int SSL_get_shared_sigalgs(SSL *s, int idx,
3649                            int *psign, int *phash, int *psignhash,
3650                            unsigned char *rsig, unsigned char *rhash)
3651 {
3652     TLS_SIGALGS *shsigalgs = s->cert->shared_sigalgs;
3653     if (!shsigalgs || idx >= (int)s->cert->shared_sigalgslen)
3654         return 0;
3655     shsigalgs += idx;
3656     if (phash)
3657         *phash = shsigalgs->hash_nid;
3658     if (psign)
3659         *psign = shsigalgs->sign_nid;
3660     if (psignhash)
3661         *psignhash = shsigalgs->signandhash_nid;
3662     if (rsig)
3663         *rsig = shsigalgs->rsign;
3664     if (rhash)
3665         *rhash = shsigalgs->rhash;
3666     return s->cert->shared_sigalgslen;
3667 }
3668
3669 #define MAX_SIGALGLEN   (TLSEXT_hash_num * TLSEXT_signature_num * 2)
3670
3671 typedef struct {
3672     size_t sigalgcnt;
3673     int sigalgs[MAX_SIGALGLEN];
3674 } sig_cb_st;
3675
3676 static void get_sigorhash(int *psig, int *phash, const char *str)
3677 {
3678     if (strcmp(str, "RSA") == 0) {
3679         *psig = EVP_PKEY_RSA;
3680     } else if (strcmp(str, "DSA") == 0) {
3681         *psig = EVP_PKEY_DSA;
3682     } else if (strcmp(str, "ECDSA") == 0) {
3683         *psig = EVP_PKEY_EC;
3684     } else {
3685         *phash = OBJ_sn2nid(str);
3686         if (*phash == NID_undef)
3687             *phash = OBJ_ln2nid(str);
3688     }
3689 }
3690
3691 static int sig_cb(const char *elem, int len, void *arg)
3692 {
3693     sig_cb_st *sarg = arg;
3694     size_t i;
3695     char etmp[20], *p;
3696     int sig_alg = NID_undef, hash_alg = NID_undef;
3697     if (elem == NULL)
3698         return 0;
3699     if (sarg->sigalgcnt == MAX_SIGALGLEN)
3700         return 0;
3701     if (len > (int)(sizeof(etmp) - 1))
3702         return 0;
3703     memcpy(etmp, elem, len);
3704     etmp[len] = 0;
3705     p = strchr(etmp, '+');
3706     if (!p)
3707         return 0;
3708     *p = 0;
3709     p++;
3710     if (!*p)
3711         return 0;
3712
3713     get_sigorhash(&sig_alg, &hash_alg, etmp);
3714     get_sigorhash(&sig_alg, &hash_alg, p);
3715
3716     if (sig_alg == NID_undef || hash_alg == NID_undef)
3717         return 0;
3718
3719     for (i = 0; i < sarg->sigalgcnt; i += 2) {
3720         if (sarg->sigalgs[i] == sig_alg && sarg->sigalgs[i + 1] == hash_alg)
3721             return 0;
3722     }
3723     sarg->sigalgs[sarg->sigalgcnt++] = hash_alg;
3724     sarg->sigalgs[sarg->sigalgcnt++] = sig_alg;
3725     return 1;
3726 }
3727
3728 /*
3729  * Set supported signature algorithms based on a colon separated list of the
3730  * form sig+hash e.g. RSA+SHA512:DSA+SHA512
3731  */
3732 int tls1_set_sigalgs_list(CERT *c, const char *str, int client)
3733 {
3734     sig_cb_st sig;
3735     sig.sigalgcnt = 0;
3736     if (!CONF_parse_list(str, ':', 1, sig_cb, &sig))
3737         return 0;
3738     if (c == NULL)
3739         return 1;
3740     return tls1_set_sigalgs(c, sig.sigalgs, sig.sigalgcnt, client);
3741 }
3742
3743 int tls1_set_sigalgs(CERT *c, const int *psig_nids, size_t salglen, int client)
3744 {
3745     unsigned char *sigalgs, *sptr;
3746     int rhash, rsign;
3747     size_t i;
3748     if (salglen & 1)
3749         return 0;
3750     sigalgs = OPENSSL_malloc(salglen);
3751     if (sigalgs == NULL)
3752         return 0;
3753     for (i = 0, sptr = sigalgs; i < salglen; i += 2) {
3754         rhash = tls12_find_id(*psig_nids++, tls12_md, OSSL_NELEM(tls12_md));
3755         rsign = tls12_find_id(*psig_nids++, tls12_sig, OSSL_NELEM(tls12_sig));
3756
3757         if (rhash == -1 || rsign == -1)
3758             goto err;
3759         *sptr++ = rhash;
3760         *sptr++ = rsign;
3761     }
3762
3763     if (client) {
3764         OPENSSL_free(c->client_sigalgs);
3765         c->client_sigalgs = sigalgs;
3766         c->client_sigalgslen = salglen;
3767     } else {
3768         OPENSSL_free(c->conf_sigalgs);
3769         c->conf_sigalgs = sigalgs;
3770         c->conf_sigalgslen = salglen;
3771     }
3772
3773     return 1;
3774
3775  err:
3776     OPENSSL_free(sigalgs);
3777     return 0;
3778 }
3779
3780 static int tls1_check_sig_alg(CERT *c, X509 *x, int default_nid)
3781 {
3782     int sig_nid;
3783     size_t i;
3784     if (default_nid == -1)
3785         return 1;
3786     sig_nid = X509_get_signature_nid(x);
3787     if (default_nid)
3788         return sig_nid == default_nid ? 1 : 0;
3789     for (i = 0; i < c->shared_sigalgslen; i++)
3790         if (sig_nid == c->shared_sigalgs[i].signandhash_nid)
3791             return 1;
3792     return 0;
3793 }
3794
3795 /* Check to see if a certificate issuer name matches list of CA names */
3796 static int ssl_check_ca_name(STACK_OF(X509_NAME) *names, X509 *x)
3797 {
3798     X509_NAME *nm;
3799     int i;
3800     nm = X509_get_issuer_name(x);
3801     for (i = 0; i < sk_X509_NAME_num(names); i++) {
3802         if (!X509_NAME_cmp(nm, sk_X509_NAME_value(names, i)))
3803             return 1;
3804     }
3805     return 0;
3806 }
3807
3808 /*
3809  * Check certificate chain is consistent with TLS extensions and is usable by
3810  * server. This servers two purposes: it allows users to check chains before
3811  * passing them to the server and it allows the server to check chains before
3812  * attempting to use them.
3813  */
3814
3815 /* Flags which need to be set for a certificate when strict mode not set */
3816
3817 #define CERT_PKEY_VALID_FLAGS \
3818         (CERT_PKEY_EE_SIGNATURE|CERT_PKEY_EE_PARAM)
3819 /* Strict mode flags */
3820 #define CERT_PKEY_STRICT_FLAGS \
3821          (CERT_PKEY_VALID_FLAGS|CERT_PKEY_CA_SIGNATURE|CERT_PKEY_CA_PARAM \
3822          | CERT_PKEY_ISSUER_NAME|CERT_PKEY_CERT_TYPE)
3823
3824 int tls1_check_chain(SSL *s, X509 *x, EVP_PKEY *pk, STACK_OF(X509) *chain,
3825                      int idx)
3826 {
3827     int i;
3828     int rv = 0;
3829     int check_flags = 0, strict_mode;
3830     CERT_PKEY *cpk = NULL;
3831     CERT *c = s->cert;
3832     uint32_t *pvalid;
3833     unsigned int suiteb_flags = tls1_suiteb(s);
3834     /* idx == -1 means checking server chains */
3835     if (idx != -1) {
3836         /* idx == -2 means checking client certificate chains */
3837         if (idx == -2) {
3838             cpk = c->key;
3839             idx = cpk - c->pkeys;
3840         } else
3841             cpk = c->pkeys + idx;
3842         pvalid = s->s3->tmp.valid_flags + idx;
3843         x = cpk->x509;
3844         pk = cpk->privatekey;
3845         chain = cpk->chain;
3846         strict_mode = c->cert_flags & SSL_CERT_FLAGS_CHECK_TLS_STRICT;
3847         /* If no cert or key, forget it */
3848         if (!x || !pk)
3849             goto end;
3850     } else {
3851         if (!x || !pk)
3852             return 0;
3853         idx = ssl_cert_type(x, pk);
3854         if (idx == -1)
3855             return 0;
3856         pvalid = s->s3->tmp.valid_flags + idx;
3857
3858         if (c->cert_flags & SSL_CERT_FLAGS_CHECK_TLS_STRICT)
3859             check_flags = CERT_PKEY_STRICT_FLAGS;
3860         else
3861             check_flags = CERT_PKEY_VALID_FLAGS;
3862         strict_mode = 1;
3863     }
3864
3865     if (suiteb_flags) {
3866         int ok;
3867         if (check_flags)
3868             check_flags |= CERT_PKEY_SUITEB;
3869         ok = X509_chain_check_suiteb(NULL, x, chain, suiteb_flags);
3870         if (ok == X509_V_OK)
3871             rv |= CERT_PKEY_SUITEB;
3872         else if (!check_flags)
3873             goto end;
3874     }
3875
3876     /*
3877      * Check all signature algorithms are consistent with signature
3878      * algorithms extension if TLS 1.2 or later and strict mode.
3879      */
3880     if (TLS1_get_version(s) >= TLS1_2_VERSION && strict_mode) {
3881         int default_nid;
3882         unsigned char rsign = 0;
3883         if (s->s3->tmp.peer_sigalgs)
3884             default_nid = 0;
3885         /* If no sigalgs extension use defaults from RFC5246 */
3886         else {
3887             switch (idx) {
3888             case SSL_PKEY_RSA_ENC:
3889             case SSL_PKEY_RSA_SIGN:
3890                 rsign = TLSEXT_signature_rsa;
3891                 default_nid = NID_sha1WithRSAEncryption;
3892                 break;
3893
3894             case SSL_PKEY_DSA_SIGN:
3895                 rsign = TLSEXT_signature_dsa;
3896                 default_nid = NID_dsaWithSHA1;
3897                 break;
3898
3899             case SSL_PKEY_ECC:
3900                 rsign = TLSEXT_signature_ecdsa;
3901                 default_nid = NID_ecdsa_with_SHA1;
3902                 break;
3903
3904             case SSL_PKEY_GOST01:
3905                 rsign = TLSEXT_signature_gostr34102001;
3906                 default_nid = NID_id_GostR3411_94_with_GostR3410_2001;
3907                 break;
3908
3909             case SSL_PKEY_GOST12_256:
3910                 rsign = TLSEXT_signature_gostr34102012_256;
3911                 default_nid = NID_id_tc26_signwithdigest_gost3410_2012_256;
3912                 break;
3913
3914             case SSL_PKEY_GOST12_512:
3915                 rsign = TLSEXT_signature_gostr34102012_512;
3916                 default_nid = NID_id_tc26_signwithdigest_gost3410_2012_512;
3917                 break;
3918
3919             default:
3920                 default_nid = -1;
3921                 break;
3922             }
3923         }
3924         /*
3925          * If peer sent no signature algorithms extension and we have set
3926          * preferred signature algorithms check we support sha1.
3927          */
3928         if (default_nid > 0 && c->conf_sigalgs) {
3929             size_t j;
3930             const unsigned char *p = c->conf_sigalgs;
3931             for (j = 0; j < c->conf_sigalgslen; j += 2, p += 2) {
3932                 if (p[0] == TLSEXT_hash_sha1 && p[1] == rsign)
3933                     break;
3934             }
3935             if (j == c->conf_sigalgslen) {
3936                 if (check_flags)
3937                     goto skip_sigs;
3938                 else
3939                     goto end;
3940             }
3941         }
3942         /* Check signature algorithm of each cert in chain */
3943         if (!tls1_check_sig_alg(c, x, default_nid)) {
3944             if (!check_flags)
3945                 goto end;
3946         } else
3947             rv |= CERT_PKEY_EE_SIGNATURE;
3948         rv |= CERT_PKEY_CA_SIGNATURE;
3949         for (i = 0; i < sk_X509_num(chain); i++) {
3950             if (!tls1_check_sig_alg(c, sk_X509_value(chain, i), default_nid)) {
3951                 if (check_flags) {
3952                     rv &= ~CERT_PKEY_CA_SIGNATURE;
3953                     break;
3954                 } else
3955                     goto end;
3956             }
3957         }
3958     }
3959     /* Else not TLS 1.2, so mark EE and CA signing algorithms OK */
3960     else if (check_flags)
3961         rv |= CERT_PKEY_EE_SIGNATURE | CERT_PKEY_CA_SIGNATURE;
3962  skip_sigs:
3963     /* Check cert parameters are consistent */
3964     if (tls1_check_cert_param(s, x, check_flags ? 1 : 2))
3965         rv |= CERT_PKEY_EE_PARAM;
3966     else if (!check_flags)
3967         goto end;
3968     if (!s->server)
3969         rv |= CERT_PKEY_CA_PARAM;
3970     /* In strict mode check rest of chain too */
3971     else if (strict_mode) {
3972         rv |= CERT_PKEY_CA_PARAM;
3973         for (i = 0; i < sk_X509_num(chain); i++) {
3974             X509 *ca = sk_X509_value(chain, i);
3975             if (!tls1_check_cert_param(s, ca, 0)) {
3976                 if (check_flags) {
3977                     rv &= ~CERT_PKEY_CA_PARAM;
3978                     break;
3979                 } else
3980                     goto end;
3981             }
3982         }
3983     }
3984     if (!s->server && strict_mode) {
3985         STACK_OF(X509_NAME) *ca_dn;
3986         int check_type = 0;
3987         switch (EVP_PKEY_id(pk)) {
3988         case EVP_PKEY_RSA:
3989             check_type = TLS_CT_RSA_SIGN;
3990             break;
3991         case EVP_PKEY_DSA:
3992             check_type = TLS_CT_DSS_SIGN;
3993             break;
3994         case EVP_PKEY_EC:
3995             check_type = TLS_CT_ECDSA_SIGN;
3996             break;
3997         }
3998         if (check_type) {
3999             const unsigned char *ctypes;
4000             int ctypelen;
4001             if (c->ctypes) {
4002                 ctypes = c->ctypes;
4003                 ctypelen = (int)c->ctype_num;
4004             } else {
4005                 ctypes = (unsigned char *)s->s3->tmp.ctype;
4006                 ctypelen = s->s3->tmp.ctype_num;
4007             }
4008             for (i = 0; i < ctypelen; i++) {
4009                 if (ctypes[i] == check_type) {
4010                     rv |= CERT_PKEY_CERT_TYPE;
4011                     break;
4012                 }
4013             }
4014             if (!(rv & CERT_PKEY_CERT_TYPE) && !check_flags)
4015                 goto end;
4016         } else
4017             rv |= CERT_PKEY_CERT_TYPE;
4018
4019         ca_dn = s->s3->tmp.ca_names;
4020
4021         if (!sk_X509_NAME_num(ca_dn))
4022             rv |= CERT_PKEY_ISSUER_NAME;
4023
4024         if (!(rv & CERT_PKEY_ISSUER_NAME)) {
4025             if (ssl_check_ca_name(ca_dn, x))
4026                 rv |= CERT_PKEY_ISSUER_NAME;
4027         }
4028         if (!(rv & CERT_PKEY_ISSUER_NAME)) {
4029             for (i = 0; i < sk_X509_num(chain); i++) {
4030                 X509 *xtmp = sk_X509_value(chain, i);
4031                 if (ssl_check_ca_name(ca_dn, xtmp)) {
4032                     rv |= CERT_PKEY_ISSUER_NAME;
4033                     break;
4034                 }
4035             }
4036         }
4037         if (!check_flags && !(rv & CERT_PKEY_ISSUER_NAME))
4038             goto end;
4039     } else
4040         rv |= CERT_PKEY_ISSUER_NAME | CERT_PKEY_CERT_TYPE;
4041
4042     if (!check_flags || (rv & check_flags) == check_flags)
4043         rv |= CERT_PKEY_VALID;
4044
4045  end:
4046
4047     if (TLS1_get_version(s) >= TLS1_2_VERSION) {
4048         if (*pvalid & CERT_PKEY_EXPLICIT_SIGN)
4049             rv |= CERT_PKEY_EXPLICIT_SIGN | CERT_PKEY_SIGN;
4050         else if (s->s3->tmp.md[idx] != NULL)
4051             rv |= CERT_PKEY_SIGN;
4052     } else
4053         rv |= CERT_PKEY_SIGN | CERT_PKEY_EXPLICIT_SIGN;
4054
4055     /*
4056      * When checking a CERT_PKEY structure all flags are irrelevant if the
4057      * chain is invalid.
4058      */
4059     if (!check_flags) {
4060         if (rv & CERT_PKEY_VALID)
4061             *pvalid = rv;
4062         else {
4063             /* Preserve explicit sign flag, clear rest */
4064             *pvalid &= CERT_PKEY_EXPLICIT_SIGN;
4065             return 0;
4066         }
4067     }
4068     return rv;
4069 }
4070
4071 /* Set validity of certificates in an SSL structure */
4072 void tls1_set_cert_validity(SSL *s)
4073 {
4074     tls1_check_chain(s, NULL, NULL, NULL, SSL_PKEY_RSA_ENC);
4075     tls1_check_chain(s, NULL, NULL, NULL, SSL_PKEY_RSA_SIGN);
4076     tls1_check_chain(s, NULL, NULL, NULL, SSL_PKEY_DSA_SIGN);
4077     tls1_check_chain(s, NULL, NULL, NULL, SSL_PKEY_ECC);
4078     tls1_check_chain(s, NULL, NULL, NULL, SSL_PKEY_GOST01);
4079     tls1_check_chain(s, NULL, NULL, NULL, SSL_PKEY_GOST12_256);
4080     tls1_check_chain(s, NULL, NULL, NULL, SSL_PKEY_GOST12_512);
4081 }
4082
4083 /* User level utility function to check a chain is suitable */
4084 int SSL_check_chain(SSL *s, X509 *x, EVP_PKEY *pk, STACK_OF(X509) *chain)
4085 {
4086     return tls1_check_chain(s, x, pk, chain, -1);
4087 }
4088
4089 #ifndef OPENSSL_NO_DH
4090 DH *ssl_get_auto_dh(SSL *s)
4091 {
4092     int dh_secbits = 80;
4093     if (s->cert->dh_tmp_auto == 2)
4094         return DH_get_1024_160();
4095     if (s->s3->tmp.new_cipher->algorithm_auth & (SSL_aNULL | SSL_aPSK)) {
4096         if (s->s3->tmp.new_cipher->strength_bits == 256)
4097             dh_secbits = 128;
4098         else
4099             dh_secbits = 80;
4100     } else {
4101         CERT_PKEY *cpk = ssl_get_server_send_pkey(s);
4102         dh_secbits = EVP_PKEY_security_bits(cpk->privatekey);
4103     }
4104
4105     if (dh_secbits >= 128) {
4106         DH *dhp = DH_new();
4107         BIGNUM *p, *g;
4108         if (dhp == NULL)
4109             return NULL;
4110         g = BN_new();
4111         if (g != NULL)
4112             BN_set_word(g, 2);
4113         if (dh_secbits >= 192)
4114             p = BN_get_rfc3526_prime_8192(NULL);
4115         else
4116             p = BN_get_rfc3526_prime_3072(NULL);
4117         if (p == NULL || g == NULL || !DH_set0_pqg(dhp, p, NULL, g)) {
4118             DH_free(dhp);
4119             BN_free(p);
4120             BN_free(g);
4121             return NULL;
4122         }
4123         return dhp;
4124     }
4125     if (dh_secbits >= 112)
4126         return DH_get_2048_224();
4127     return DH_get_1024_160();
4128 }
4129 #endif
4130
4131 static int ssl_security_cert_key(SSL *s, SSL_CTX *ctx, X509 *x, int op)
4132 {
4133     int secbits = -1;
4134     EVP_PKEY *pkey = X509_get0_pubkey(x);
4135     if (pkey) {
4136         /*
4137          * If no parameters this will return -1 and fail using the default
4138          * security callback for any non-zero security level. This will
4139          * reject keys which omit parameters but this only affects DSA and
4140          * omission of parameters is never (?) done in practice.
4141          */
4142         secbits = EVP_PKEY_security_bits(pkey);
4143     }
4144     if (s)
4145         return ssl_security(s, op, secbits, 0, x);
4146     else
4147         return ssl_ctx_security(ctx, op, secbits, 0, x);
4148 }
4149
4150 static int ssl_security_cert_sig(SSL *s, SSL_CTX *ctx, X509 *x, int op)
4151 {
4152     /* Lookup signature algorithm digest */
4153     int secbits = -1, md_nid = NID_undef, sig_nid;
4154     /* Don't check signature if self signed */
4155     if ((X509_get_extension_flags(x) & EXFLAG_SS) != 0)
4156         return 1;
4157     sig_nid = X509_get_signature_nid(x);
4158     if (sig_nid && OBJ_find_sigid_algs(sig_nid, &md_nid, NULL)) {
4159         const EVP_MD *md;
4160         if (md_nid && (md = EVP_get_digestbynid(md_nid)))
4161             secbits = EVP_MD_size(md) * 4;
4162     }
4163     if (s)
4164         return ssl_security(s, op, secbits, md_nid, x);
4165     else
4166         return ssl_ctx_security(ctx, op, secbits, md_nid, x);
4167 }
4168
4169 int ssl_security_cert(SSL *s, SSL_CTX *ctx, X509 *x, int vfy, int is_ee)
4170 {
4171     if (vfy)
4172         vfy = SSL_SECOP_PEER;
4173     if (is_ee) {
4174         if (!ssl_security_cert_key(s, ctx, x, SSL_SECOP_EE_KEY | vfy))
4175             return SSL_R_EE_KEY_TOO_SMALL;
4176     } else {
4177         if (!ssl_security_cert_key(s, ctx, x, SSL_SECOP_CA_KEY | vfy))
4178             return SSL_R_CA_KEY_TOO_SMALL;
4179     }
4180     if (!ssl_security_cert_sig(s, ctx, x, SSL_SECOP_CA_MD | vfy))
4181         return SSL_R_CA_MD_TOO_WEAK;
4182     return 1;
4183 }
4184
4185 /*
4186  * Check security of a chain, if |sk| includes the end entity certificate then
4187  * |x| is NULL. If |vfy| is 1 then we are verifying a peer chain and not sending
4188  * one to the peer. Return values: 1 if ok otherwise error code to use
4189  */
4190
4191 int ssl_security_cert_chain(SSL *s, STACK_OF(X509) *sk, X509 *x, int vfy)
4192 {
4193     int rv, start_idx, i;
4194     if (x == NULL) {
4195         x = sk_X509_value(sk, 0);
4196         start_idx = 1;
4197     } else
4198         start_idx = 0;
4199
4200     rv = ssl_security_cert(s, NULL, x, vfy, 1);
4201     if (rv != 1)
4202         return rv;
4203
4204     for (i = start_idx; i < sk_X509_num(sk); i++) {
4205         x = sk_X509_value(sk, i);
4206         rv = ssl_security_cert(s, NULL, x, vfy, 0);
4207         if (rv != 1)
4208             return rv;
4209     }
4210     return 1;
4211 }