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