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