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