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