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