]> CyberLeo.Net >> Repos - FreeBSD/releng/10.2.git/blob - crypto/openssl/ssl/t1_lib.c
Fix multiple OpenSSL vulnerabilitites.
[FreeBSD/releng/10.2.git] / crypto / openssl / 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 #include "ssl_locl.h"
119
120 const char tls1_version_str[] = "TLSv1" OPENSSL_VERSION_PTEXT;
121
122 #ifndef OPENSSL_NO_TLSEXT
123 static int tls_decrypt_ticket(SSL *s, const unsigned char *tick, int ticklen,
124                               const unsigned char *sess_id, int sesslen,
125                               SSL_SESSION **psess);
126 #endif
127
128 SSL3_ENC_METHOD TLSv1_enc_data = {
129     tls1_enc,
130     tls1_mac,
131     tls1_setup_key_block,
132     tls1_generate_master_secret,
133     tls1_change_cipher_state,
134     tls1_final_finish_mac,
135     TLS1_FINISH_MAC_LENGTH,
136     tls1_cert_verify_mac,
137     TLS_MD_CLIENT_FINISH_CONST, TLS_MD_CLIENT_FINISH_CONST_SIZE,
138     TLS_MD_SERVER_FINISH_CONST, TLS_MD_SERVER_FINISH_CONST_SIZE,
139     tls1_alert_code,
140     tls1_export_keying_material,
141 };
142
143 long tls1_default_timeout(void)
144 {
145     /*
146      * 2 hours, the 24 hours mentioned in the TLSv1 spec is way too long for
147      * http, the cache would over fill
148      */
149     return (60 * 60 * 2);
150 }
151
152 int tls1_new(SSL *s)
153 {
154     if (!ssl3_new(s))
155         return (0);
156     s->method->ssl_clear(s);
157     return (1);
158 }
159
160 void tls1_free(SSL *s)
161 {
162 #ifndef OPENSSL_NO_TLSEXT
163     if (s->tlsext_session_ticket) {
164         OPENSSL_free(s->tlsext_session_ticket);
165     }
166 #endif                          /* OPENSSL_NO_TLSEXT */
167     ssl3_free(s);
168 }
169
170 void tls1_clear(SSL *s)
171 {
172     ssl3_clear(s);
173     s->version = s->method->version;
174 }
175
176 #ifndef OPENSSL_NO_EC
177
178 static int nid_list[] = {
179     NID_sect163k1,              /* sect163k1 (1) */
180     NID_sect163r1,              /* sect163r1 (2) */
181     NID_sect163r2,              /* sect163r2 (3) */
182     NID_sect193r1,              /* sect193r1 (4) */
183     NID_sect193r2,              /* sect193r2 (5) */
184     NID_sect233k1,              /* sect233k1 (6) */
185     NID_sect233r1,              /* sect233r1 (7) */
186     NID_sect239k1,              /* sect239k1 (8) */
187     NID_sect283k1,              /* sect283k1 (9) */
188     NID_sect283r1,              /* sect283r1 (10) */
189     NID_sect409k1,              /* sect409k1 (11) */
190     NID_sect409r1,              /* sect409r1 (12) */
191     NID_sect571k1,              /* sect571k1 (13) */
192     NID_sect571r1,              /* sect571r1 (14) */
193     NID_secp160k1,              /* secp160k1 (15) */
194     NID_secp160r1,              /* secp160r1 (16) */
195     NID_secp160r2,              /* secp160r2 (17) */
196     NID_secp192k1,              /* secp192k1 (18) */
197     NID_X9_62_prime192v1,       /* secp192r1 (19) */
198     NID_secp224k1,              /* secp224k1 (20) */
199     NID_secp224r1,              /* secp224r1 (21) */
200     NID_secp256k1,              /* secp256k1 (22) */
201     NID_X9_62_prime256v1,       /* secp256r1 (23) */
202     NID_secp384r1,              /* secp384r1 (24) */
203     NID_secp521r1               /* secp521r1 (25) */
204 };
205
206 static int pref_list[] = {
207 # ifndef OPENSSL_NO_EC2M
208     NID_sect571r1,              /* sect571r1 (14) */
209     NID_sect571k1,              /* sect571k1 (13) */
210 # endif
211     NID_secp521r1,              /* secp521r1 (25) */
212 # ifndef OPENSSL_NO_EC2M
213     NID_sect409k1,              /* sect409k1 (11) */
214     NID_sect409r1,              /* sect409r1 (12) */
215 # endif
216     NID_secp384r1,              /* secp384r1 (24) */
217 # ifndef OPENSSL_NO_EC2M
218     NID_sect283k1,              /* sect283k1 (9) */
219     NID_sect283r1,              /* sect283r1 (10) */
220 # endif
221     NID_secp256k1,              /* secp256k1 (22) */
222     NID_X9_62_prime256v1,       /* secp256r1 (23) */
223 # ifndef OPENSSL_NO_EC2M
224     NID_sect239k1,              /* sect239k1 (8) */
225     NID_sect233k1,              /* sect233k1 (6) */
226     NID_sect233r1,              /* sect233r1 (7) */
227 # endif
228     NID_secp224k1,              /* secp224k1 (20) */
229     NID_secp224r1,              /* secp224r1 (21) */
230 # ifndef OPENSSL_NO_EC2M
231     NID_sect193r1,              /* sect193r1 (4) */
232     NID_sect193r2,              /* sect193r2 (5) */
233 # endif
234     NID_secp192k1,              /* secp192k1 (18) */
235     NID_X9_62_prime192v1,       /* secp192r1 (19) */
236 # ifndef OPENSSL_NO_EC2M
237     NID_sect163k1,              /* sect163k1 (1) */
238     NID_sect163r1,              /* sect163r1 (2) */
239     NID_sect163r2,              /* sect163r2 (3) */
240 # endif
241     NID_secp160k1,              /* secp160k1 (15) */
242     NID_secp160r1,              /* secp160r1 (16) */
243     NID_secp160r2,              /* secp160r2 (17) */
244 };
245
246 int tls1_ec_curve_id2nid(int curve_id)
247 {
248     /* ECC curves from RFC 4492 */
249     if ((curve_id < 1) || ((unsigned int)curve_id >
250                            sizeof(nid_list) / sizeof(nid_list[0])))
251         return 0;
252     return nid_list[curve_id - 1];
253 }
254
255 int tls1_ec_nid2curve_id(int nid)
256 {
257     /* ECC curves from RFC 4492 */
258     switch (nid) {
259     case NID_sect163k1:        /* sect163k1 (1) */
260         return 1;
261     case NID_sect163r1:        /* sect163r1 (2) */
262         return 2;
263     case NID_sect163r2:        /* sect163r2 (3) */
264         return 3;
265     case NID_sect193r1:        /* sect193r1 (4) */
266         return 4;
267     case NID_sect193r2:        /* sect193r2 (5) */
268         return 5;
269     case NID_sect233k1:        /* sect233k1 (6) */
270         return 6;
271     case NID_sect233r1:        /* sect233r1 (7) */
272         return 7;
273     case NID_sect239k1:        /* sect239k1 (8) */
274         return 8;
275     case NID_sect283k1:        /* sect283k1 (9) */
276         return 9;
277     case NID_sect283r1:        /* sect283r1 (10) */
278         return 10;
279     case NID_sect409k1:        /* sect409k1 (11) */
280         return 11;
281     case NID_sect409r1:        /* sect409r1 (12) */
282         return 12;
283     case NID_sect571k1:        /* sect571k1 (13) */
284         return 13;
285     case NID_sect571r1:        /* sect571r1 (14) */
286         return 14;
287     case NID_secp160k1:        /* secp160k1 (15) */
288         return 15;
289     case NID_secp160r1:        /* secp160r1 (16) */
290         return 16;
291     case NID_secp160r2:        /* secp160r2 (17) */
292         return 17;
293     case NID_secp192k1:        /* secp192k1 (18) */
294         return 18;
295     case NID_X9_62_prime192v1: /* secp192r1 (19) */
296         return 19;
297     case NID_secp224k1:        /* secp224k1 (20) */
298         return 20;
299     case NID_secp224r1:        /* secp224r1 (21) */
300         return 21;
301     case NID_secp256k1:        /* secp256k1 (22) */
302         return 22;
303     case NID_X9_62_prime256v1: /* secp256r1 (23) */
304         return 23;
305     case NID_secp384r1:        /* secp384r1 (24) */
306         return 24;
307     case NID_secp521r1:        /* secp521r1 (25) */
308         return 25;
309     default:
310         return 0;
311     }
312 }
313 #endif                          /* OPENSSL_NO_EC */
314
315 #ifndef OPENSSL_NO_TLSEXT
316
317 /*
318  * List of supported signature algorithms and hashes. Should make this
319  * customisable at some point, for now include everything we support.
320  */
321
322 # ifdef OPENSSL_NO_RSA
323 #  define tlsext_sigalg_rsa(md) /* */
324 # else
325 #  define tlsext_sigalg_rsa(md) md, TLSEXT_signature_rsa,
326 # endif
327
328 # ifdef OPENSSL_NO_DSA
329 #  define tlsext_sigalg_dsa(md) /* */
330 # else
331 #  define tlsext_sigalg_dsa(md) md, TLSEXT_signature_dsa,
332 # endif
333
334 # ifdef OPENSSL_NO_ECDSA
335 #  define tlsext_sigalg_ecdsa(md)
336                                 /* */
337 # else
338 #  define tlsext_sigalg_ecdsa(md) md, TLSEXT_signature_ecdsa,
339 # endif
340
341 # define tlsext_sigalg(md) \
342                 tlsext_sigalg_rsa(md) \
343                 tlsext_sigalg_dsa(md) \
344                 tlsext_sigalg_ecdsa(md)
345
346 static unsigned char tls12_sigalgs[] = {
347 # ifndef OPENSSL_NO_SHA512
348     tlsext_sigalg(TLSEXT_hash_sha512)
349         tlsext_sigalg(TLSEXT_hash_sha384)
350 # endif
351 # ifndef OPENSSL_NO_SHA256
352         tlsext_sigalg(TLSEXT_hash_sha256)
353         tlsext_sigalg(TLSEXT_hash_sha224)
354 # endif
355 # ifndef OPENSSL_NO_SHA
356         tlsext_sigalg(TLSEXT_hash_sha1)
357 # endif
358 };
359
360 int tls12_get_req_sig_algs(SSL *s, unsigned char *p)
361 {
362     size_t slen = sizeof(tls12_sigalgs);
363     if (p)
364         memcpy(p, tls12_sigalgs, slen);
365     return (int)slen;
366 }
367
368 unsigned char *ssl_add_clienthello_tlsext(SSL *s, unsigned char *buf,
369                                           unsigned char *limit)
370 {
371     int extdatalen = 0;
372     unsigned char *orig = buf;
373     unsigned char *ret = buf;
374
375     /* don't add extensions for SSLv3 unless doing secure renegotiation */
376     if (s->client_version == SSL3_VERSION && !s->s3->send_connection_binding)
377         return orig;
378
379     ret += 2;
380
381     if (ret >= limit)
382         return NULL;            /* this really never occurs, but ... */
383
384     if (s->tlsext_hostname != NULL) {
385         /* Add TLS extension servername to the Client Hello message */
386         unsigned long size_str;
387         long lenmax;
388
389         /*-
390          * check for enough space.
391          * 4 for the servername type and entension length
392          * 2 for servernamelist length
393          * 1 for the hostname type
394          * 2 for hostname length
395          * + hostname length
396          */
397
398         if ((lenmax = limit - ret - 9) < 0
399             || (size_str =
400                 strlen(s->tlsext_hostname)) > (unsigned long)lenmax)
401             return NULL;
402
403         /* extension type and length */
404         s2n(TLSEXT_TYPE_server_name, ret);
405         s2n(size_str + 5, ret);
406
407         /* length of servername list */
408         s2n(size_str + 3, ret);
409
410         /* hostname type, length and hostname */
411         *(ret++) = (unsigned char)TLSEXT_NAMETYPE_host_name;
412         s2n(size_str, ret);
413         memcpy(ret, s->tlsext_hostname, size_str);
414         ret += size_str;
415     }
416
417     /* Add RI if renegotiating */
418     if (s->renegotiate) {
419         int el;
420
421         if (!ssl_add_clienthello_renegotiate_ext(s, 0, &el, 0)) {
422             SSLerr(SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT, ERR_R_INTERNAL_ERROR);
423             return NULL;
424         }
425
426         if ((limit - ret - 4 - el) < 0)
427             return NULL;
428
429         s2n(TLSEXT_TYPE_renegotiate, ret);
430         s2n(el, ret);
431
432         if (!ssl_add_clienthello_renegotiate_ext(s, ret, &el, el)) {
433             SSLerr(SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT, ERR_R_INTERNAL_ERROR);
434             return NULL;
435         }
436
437         ret += el;
438     }
439 # ifndef OPENSSL_NO_SRP
440     /* Add SRP username if there is one */
441     if (s->srp_ctx.login != NULL) { /* Add TLS extension SRP username to the
442                                      * Client Hello message */
443
444         int login_len = strlen(s->srp_ctx.login);
445         if (login_len > 255 || login_len == 0) {
446             SSLerr(SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT, ERR_R_INTERNAL_ERROR);
447             return NULL;
448         }
449
450         /*-
451          * check for enough space.
452          * 4 for the srp type type and entension length
453          * 1 for the srp user identity
454          * + srp user identity length
455          */
456         if ((limit - ret - 5 - login_len) < 0)
457             return NULL;
458
459         /* fill in the extension */
460         s2n(TLSEXT_TYPE_srp, ret);
461         s2n(login_len + 1, ret);
462         (*ret++) = (unsigned char)login_len;
463         memcpy(ret, s->srp_ctx.login, login_len);
464         ret += login_len;
465     }
466 # endif
467
468 # ifndef OPENSSL_NO_EC
469     if (s->tlsext_ecpointformatlist != NULL) {
470         /*
471          * Add TLS extension ECPointFormats to the ClientHello message
472          */
473         long lenmax;
474
475         if ((lenmax = limit - ret - 5) < 0)
476             return NULL;
477         if (s->tlsext_ecpointformatlist_length > (unsigned long)lenmax)
478             return NULL;
479         if (s->tlsext_ecpointformatlist_length > 255) {
480             SSLerr(SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT, ERR_R_INTERNAL_ERROR);
481             return NULL;
482         }
483
484         s2n(TLSEXT_TYPE_ec_point_formats, ret);
485         s2n(s->tlsext_ecpointformatlist_length + 1, ret);
486         *(ret++) = (unsigned char)s->tlsext_ecpointformatlist_length;
487         memcpy(ret, s->tlsext_ecpointformatlist,
488                s->tlsext_ecpointformatlist_length);
489         ret += s->tlsext_ecpointformatlist_length;
490     }
491     if (s->tlsext_ellipticcurvelist != NULL) {
492         /*
493          * Add TLS extension EllipticCurves to the ClientHello message
494          */
495         long lenmax;
496
497         if ((lenmax = limit - ret - 6) < 0)
498             return NULL;
499         if (s->tlsext_ellipticcurvelist_length > (unsigned long)lenmax)
500             return NULL;
501         if (s->tlsext_ellipticcurvelist_length > 65532) {
502             SSLerr(SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT, ERR_R_INTERNAL_ERROR);
503             return NULL;
504         }
505
506         s2n(TLSEXT_TYPE_elliptic_curves, ret);
507         s2n(s->tlsext_ellipticcurvelist_length + 2, ret);
508
509         s2n(s->tlsext_ellipticcurvelist_length, ret);
510         memcpy(ret, s->tlsext_ellipticcurvelist,
511                s->tlsext_ellipticcurvelist_length);
512         ret += s->tlsext_ellipticcurvelist_length;
513     }
514 # endif                         /* OPENSSL_NO_EC */
515
516     if (!(SSL_get_options(s) & SSL_OP_NO_TICKET)) {
517         int ticklen;
518         if (!s->new_session && s->session && s->session->tlsext_tick)
519             ticklen = s->session->tlsext_ticklen;
520         else if (s->session && s->tlsext_session_ticket &&
521                  s->tlsext_session_ticket->data) {
522             ticklen = s->tlsext_session_ticket->length;
523             s->session->tlsext_tick = OPENSSL_malloc(ticklen);
524             if (!s->session->tlsext_tick)
525                 return NULL;
526             memcpy(s->session->tlsext_tick,
527                    s->tlsext_session_ticket->data, ticklen);
528             s->session->tlsext_ticklen = ticklen;
529         } else
530             ticklen = 0;
531         if (ticklen == 0 && s->tlsext_session_ticket &&
532             s->tlsext_session_ticket->data == NULL)
533             goto skip_ext;
534         /*
535          * Check for enough room 2 for extension type, 2 for len rest for
536          * ticket
537          */
538         if ((long)(limit - ret - 4 - ticklen) < 0)
539             return NULL;
540         s2n(TLSEXT_TYPE_session_ticket, ret);
541         s2n(ticklen, ret);
542         if (ticklen) {
543             memcpy(ret, s->session->tlsext_tick, ticklen);
544             ret += ticklen;
545         }
546     }
547  skip_ext:
548
549     if (TLS1_get_client_version(s) >= TLS1_2_VERSION) {
550         if ((size_t)(limit - ret) < sizeof(tls12_sigalgs) + 6)
551             return NULL;
552         s2n(TLSEXT_TYPE_signature_algorithms, ret);
553         s2n(sizeof(tls12_sigalgs) + 2, ret);
554         s2n(sizeof(tls12_sigalgs), ret);
555         memcpy(ret, tls12_sigalgs, sizeof(tls12_sigalgs));
556         ret += sizeof(tls12_sigalgs);
557     }
558 # ifdef TLSEXT_TYPE_opaque_prf_input
559     if (s->s3->client_opaque_prf_input != NULL && s->version != DTLS1_VERSION) {
560         size_t col = s->s3->client_opaque_prf_input_len;
561
562         if ((long)(limit - ret - 6 - col < 0))
563             return NULL;
564         if (col > 0xFFFD)       /* can't happen */
565             return NULL;
566
567         s2n(TLSEXT_TYPE_opaque_prf_input, ret);
568         s2n(col + 2, ret);
569         s2n(col, ret);
570         memcpy(ret, s->s3->client_opaque_prf_input, col);
571         ret += col;
572     }
573 # endif
574
575     if (s->tlsext_status_type == TLSEXT_STATUSTYPE_ocsp &&
576         s->version != DTLS1_VERSION) {
577         int i;
578         long extlen, idlen, itmp;
579         OCSP_RESPID *id;
580
581         idlen = 0;
582         for (i = 0; i < sk_OCSP_RESPID_num(s->tlsext_ocsp_ids); i++) {
583             id = sk_OCSP_RESPID_value(s->tlsext_ocsp_ids, i);
584             itmp = i2d_OCSP_RESPID(id, NULL);
585             if (itmp <= 0)
586                 return NULL;
587             idlen += itmp + 2;
588         }
589
590         if (s->tlsext_ocsp_exts) {
591             extlen = i2d_X509_EXTENSIONS(s->tlsext_ocsp_exts, NULL);
592             if (extlen < 0)
593                 return NULL;
594         } else
595             extlen = 0;
596
597         if ((long)(limit - ret - 7 - extlen - idlen) < 0)
598             return NULL;
599         s2n(TLSEXT_TYPE_status_request, ret);
600         if (extlen + idlen > 0xFFF0)
601             return NULL;
602         s2n(extlen + idlen + 5, ret);
603         *(ret++) = TLSEXT_STATUSTYPE_ocsp;
604         s2n(idlen, ret);
605         for (i = 0; i < sk_OCSP_RESPID_num(s->tlsext_ocsp_ids); i++) {
606             /* save position of id len */
607             unsigned char *q = ret;
608             id = sk_OCSP_RESPID_value(s->tlsext_ocsp_ids, i);
609             /* skip over id len */
610             ret += 2;
611             itmp = i2d_OCSP_RESPID(id, &ret);
612             /* write id len */
613             s2n(itmp, q);
614         }
615         s2n(extlen, ret);
616         if (extlen > 0)
617             i2d_X509_EXTENSIONS(s->tlsext_ocsp_exts, &ret);
618     }
619 # ifndef OPENSSL_NO_HEARTBEATS
620     /* Add Heartbeat extension */
621     if ((limit - ret - 4 - 1) < 0)
622         return NULL;
623     s2n(TLSEXT_TYPE_heartbeat, ret);
624     s2n(1, ret);
625     /*-
626      * Set mode:
627      * 1: peer may send requests
628      * 2: peer not allowed to send requests
629      */
630     if (s->tlsext_heartbeat & SSL_TLSEXT_HB_DONT_RECV_REQUESTS)
631         *(ret++) = SSL_TLSEXT_HB_DONT_SEND_REQUESTS;
632     else
633         *(ret++) = SSL_TLSEXT_HB_ENABLED;
634 # endif
635
636 # ifndef OPENSSL_NO_NEXTPROTONEG
637     if (s->ctx->next_proto_select_cb && !s->s3->tmp.finish_md_len) {
638         /*
639          * The client advertises an emtpy extension to indicate its support
640          * for Next Protocol Negotiation
641          */
642         if (limit - ret - 4 < 0)
643             return NULL;
644         s2n(TLSEXT_TYPE_next_proto_neg, ret);
645         s2n(0, ret);
646     }
647 # endif
648
649 # ifndef OPENSSL_NO_SRTP
650     if (SSL_IS_DTLS(s) && SSL_get_srtp_profiles(s)) {
651         int el;
652
653         ssl_add_clienthello_use_srtp_ext(s, 0, &el, 0);
654
655         if ((limit - ret - 4 - el) < 0)
656             return NULL;
657
658         s2n(TLSEXT_TYPE_use_srtp, ret);
659         s2n(el, ret);
660
661         if (ssl_add_clienthello_use_srtp_ext(s, ret, &el, el)) {
662             SSLerr(SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT, ERR_R_INTERNAL_ERROR);
663             return NULL;
664         }
665         ret += el;
666     }
667 # endif
668     /*
669      * Add padding to workaround bugs in F5 terminators. See
670      * https://tools.ietf.org/html/draft-agl-tls-padding-03 NB: because this
671      * code works out the length of all existing extensions it MUST always
672      * appear last.
673      */
674     if (s->options & SSL_OP_TLSEXT_PADDING) {
675         int hlen = ret - (unsigned char *)s->init_buf->data;
676         /*
677          * The code in s23_clnt.c to build ClientHello messages includes the
678          * 5-byte record header in the buffer, while the code in s3_clnt.c
679          * does not.
680          */
681         if (s->state == SSL23_ST_CW_CLNT_HELLO_A)
682             hlen -= 5;
683         if (hlen > 0xff && hlen < 0x200) {
684             hlen = 0x200 - hlen;
685             if (hlen >= 4)
686                 hlen -= 4;
687             else
688                 hlen = 0;
689
690             s2n(TLSEXT_TYPE_padding, ret);
691             s2n(hlen, ret);
692             memset(ret, 0, hlen);
693             ret += hlen;
694         }
695     }
696
697     if ((extdatalen = ret - orig - 2) == 0)
698         return orig;
699
700     s2n(extdatalen, orig);
701     return ret;
702 }
703
704 unsigned char *ssl_add_serverhello_tlsext(SSL *s, unsigned char *buf,
705                                           unsigned char *limit)
706 {
707     int extdatalen = 0;
708     unsigned char *orig = buf;
709     unsigned char *ret = buf;
710 # ifndef OPENSSL_NO_NEXTPROTONEG
711     int next_proto_neg_seen;
712 # endif
713
714     /*
715      * don't add extensions for SSLv3, unless doing secure renegotiation
716      */
717     if (s->version == SSL3_VERSION && !s->s3->send_connection_binding)
718         return orig;
719
720     ret += 2;
721     if (ret >= limit)
722         return NULL;            /* this really never occurs, but ... */
723
724     if (!s->hit && s->servername_done == 1
725         && s->session->tlsext_hostname != NULL) {
726         if ((long)(limit - ret - 4) < 0)
727             return NULL;
728
729         s2n(TLSEXT_TYPE_server_name, ret);
730         s2n(0, ret);
731     }
732
733     if (s->s3->send_connection_binding) {
734         int el;
735
736         if (!ssl_add_serverhello_renegotiate_ext(s, 0, &el, 0)) {
737             SSLerr(SSL_F_SSL_ADD_SERVERHELLO_TLSEXT, ERR_R_INTERNAL_ERROR);
738             return NULL;
739         }
740
741         if ((limit - ret - 4 - el) < 0)
742             return NULL;
743
744         s2n(TLSEXT_TYPE_renegotiate, ret);
745         s2n(el, ret);
746
747         if (!ssl_add_serverhello_renegotiate_ext(s, ret, &el, el)) {
748             SSLerr(SSL_F_SSL_ADD_SERVERHELLO_TLSEXT, ERR_R_INTERNAL_ERROR);
749             return NULL;
750         }
751
752         ret += el;
753     }
754 # ifndef OPENSSL_NO_EC
755     if (s->tlsext_ecpointformatlist != NULL) {
756         /*
757          * Add TLS extension ECPointFormats to the ServerHello message
758          */
759         long lenmax;
760
761         if ((lenmax = limit - ret - 5) < 0)
762             return NULL;
763         if (s->tlsext_ecpointformatlist_length > (unsigned long)lenmax)
764             return NULL;
765         if (s->tlsext_ecpointformatlist_length > 255) {
766             SSLerr(SSL_F_SSL_ADD_SERVERHELLO_TLSEXT, ERR_R_INTERNAL_ERROR);
767             return NULL;
768         }
769
770         s2n(TLSEXT_TYPE_ec_point_formats, ret);
771         s2n(s->tlsext_ecpointformatlist_length + 1, ret);
772         *(ret++) = (unsigned char)s->tlsext_ecpointformatlist_length;
773         memcpy(ret, s->tlsext_ecpointformatlist,
774                s->tlsext_ecpointformatlist_length);
775         ret += s->tlsext_ecpointformatlist_length;
776
777     }
778     /*
779      * Currently the server should not respond with a SupportedCurves
780      * extension
781      */
782 # endif                         /* OPENSSL_NO_EC */
783
784     if (s->tlsext_ticket_expected && !(SSL_get_options(s) & SSL_OP_NO_TICKET)) {
785         if ((long)(limit - ret - 4) < 0)
786             return NULL;
787         s2n(TLSEXT_TYPE_session_ticket, ret);
788         s2n(0, ret);
789     }
790
791     if (s->tlsext_status_expected) {
792         if ((long)(limit - ret - 4) < 0)
793             return NULL;
794         s2n(TLSEXT_TYPE_status_request, ret);
795         s2n(0, ret);
796     }
797 # ifdef TLSEXT_TYPE_opaque_prf_input
798     if (s->s3->server_opaque_prf_input != NULL && s->version != DTLS1_VERSION) {
799         size_t sol = s->s3->server_opaque_prf_input_len;
800
801         if ((long)(limit - ret - 6 - sol) < 0)
802             return NULL;
803         if (sol > 0xFFFD)       /* can't happen */
804             return NULL;
805
806         s2n(TLSEXT_TYPE_opaque_prf_input, ret);
807         s2n(sol + 2, ret);
808         s2n(sol, ret);
809         memcpy(ret, s->s3->server_opaque_prf_input, sol);
810         ret += sol;
811     }
812 # endif
813
814 # ifndef OPENSSL_NO_SRTP
815     if (SSL_IS_DTLS(s) && s->srtp_profile) {
816         int el;
817
818         ssl_add_serverhello_use_srtp_ext(s, 0, &el, 0);
819
820         if ((limit - ret - 4 - el) < 0)
821             return NULL;
822
823         s2n(TLSEXT_TYPE_use_srtp, ret);
824         s2n(el, ret);
825
826         if (ssl_add_serverhello_use_srtp_ext(s, ret, &el, el)) {
827             SSLerr(SSL_F_SSL_ADD_SERVERHELLO_TLSEXT, ERR_R_INTERNAL_ERROR);
828             return NULL;
829         }
830         ret += el;
831     }
832 # endif
833
834     if (((s->s3->tmp.new_cipher->id & 0xFFFF) == 0x80
835          || (s->s3->tmp.new_cipher->id & 0xFFFF) == 0x81)
836         && (SSL_get_options(s) & SSL_OP_CRYPTOPRO_TLSEXT_BUG)) {
837         const unsigned char cryptopro_ext[36] = {
838             0xfd, 0xe8,         /* 65000 */
839             0x00, 0x20,         /* 32 bytes length */
840             0x30, 0x1e, 0x30, 0x08, 0x06, 0x06, 0x2a, 0x85,
841             0x03, 0x02, 0x02, 0x09, 0x30, 0x08, 0x06, 0x06,
842             0x2a, 0x85, 0x03, 0x02, 0x02, 0x16, 0x30, 0x08,
843             0x06, 0x06, 0x2a, 0x85, 0x03, 0x02, 0x02, 0x17
844         };
845         if (limit - ret < 36)
846             return NULL;
847         memcpy(ret, cryptopro_ext, 36);
848         ret += 36;
849
850     }
851 # ifndef OPENSSL_NO_HEARTBEATS
852     /* Add Heartbeat extension if we've received one */
853     if (s->tlsext_heartbeat & SSL_TLSEXT_HB_ENABLED) {
854         if ((limit - ret - 4 - 1) < 0)
855             return NULL;
856         s2n(TLSEXT_TYPE_heartbeat, ret);
857         s2n(1, ret);
858         /*-
859          * Set mode:
860          * 1: peer may send requests
861          * 2: peer not allowed to send requests
862          */
863         if (s->tlsext_heartbeat & SSL_TLSEXT_HB_DONT_RECV_REQUESTS)
864             *(ret++) = SSL_TLSEXT_HB_DONT_SEND_REQUESTS;
865         else
866             *(ret++) = SSL_TLSEXT_HB_ENABLED;
867
868     }
869 # endif
870
871 # ifndef OPENSSL_NO_NEXTPROTONEG
872     next_proto_neg_seen = s->s3->next_proto_neg_seen;
873     s->s3->next_proto_neg_seen = 0;
874     if (next_proto_neg_seen && s->ctx->next_protos_advertised_cb) {
875         const unsigned char *npa;
876         unsigned int npalen;
877         int r;
878
879         r = s->ctx->next_protos_advertised_cb(s, &npa, &npalen,
880                                               s->
881                                               ctx->next_protos_advertised_cb_arg);
882         if (r == SSL_TLSEXT_ERR_OK) {
883             if ((long)(limit - ret - 4 - npalen) < 0)
884                 return NULL;
885             s2n(TLSEXT_TYPE_next_proto_neg, ret);
886             s2n(npalen, ret);
887             memcpy(ret, npa, npalen);
888             ret += npalen;
889             s->s3->next_proto_neg_seen = 1;
890         }
891     }
892 # endif
893
894     if ((extdatalen = ret - orig - 2) == 0)
895         return orig;
896
897     s2n(extdatalen, orig);
898     return ret;
899 }
900
901 # ifndef OPENSSL_NO_EC
902 /*-
903  * ssl_check_for_safari attempts to fingerprint Safari using OS X
904  * SecureTransport using the TLS extension block in |d|, of length |n|.
905  * Safari, since 10.6, sends exactly these extensions, in this order:
906  *   SNI,
907  *   elliptic_curves
908  *   ec_point_formats
909  *
910  * We wish to fingerprint Safari because they broke ECDHE-ECDSA support in 10.8,
911  * but they advertise support. So enabling ECDHE-ECDSA ciphers breaks them.
912  * Sadly we cannot differentiate 10.6, 10.7 and 10.8.4 (which work), from
913  * 10.8..10.8.3 (which don't work).
914  */
915 static void ssl_check_for_safari(SSL *s, const unsigned char *data,
916                                  const unsigned char *limit)
917 {
918     unsigned short type, size;
919     static const unsigned char kSafariExtensionsBlock[] = {
920         0x00, 0x0a,             /* elliptic_curves extension */
921         0x00, 0x08,             /* 8 bytes */
922         0x00, 0x06,             /* 6 bytes of curve ids */
923         0x00, 0x17,             /* P-256 */
924         0x00, 0x18,             /* P-384 */
925         0x00, 0x19,             /* P-521 */
926
927         0x00, 0x0b,             /* ec_point_formats */
928         0x00, 0x02,             /* 2 bytes */
929         0x01,                   /* 1 point format */
930         0x00,                   /* uncompressed */
931     };
932
933     /* The following is only present in TLS 1.2 */
934     static const unsigned char kSafariTLS12ExtensionsBlock[] = {
935         0x00, 0x0d,             /* signature_algorithms */
936         0x00, 0x0c,             /* 12 bytes */
937         0x00, 0x0a,             /* 10 bytes */
938         0x05, 0x01,             /* SHA-384/RSA */
939         0x04, 0x01,             /* SHA-256/RSA */
940         0x02, 0x01,             /* SHA-1/RSA */
941         0x04, 0x03,             /* SHA-256/ECDSA */
942         0x02, 0x03,             /* SHA-1/ECDSA */
943     };
944
945     if (limit - data <= 2)
946         return;
947     data += 2;
948
949     if (limit - data < 4)
950         return;
951     n2s(data, type);
952     n2s(data, size);
953
954     if (type != TLSEXT_TYPE_server_name)
955         return;
956
957     if (limit - data < size)
958         return;
959     data += size;
960
961     if (TLS1_get_client_version(s) >= TLS1_2_VERSION) {
962         const size_t len1 = sizeof(kSafariExtensionsBlock);
963         const size_t len2 = sizeof(kSafariTLS12ExtensionsBlock);
964
965         if (limit - data != (int)(len1 + len2))
966             return;
967         if (memcmp(data, kSafariExtensionsBlock, len1) != 0)
968             return;
969         if (memcmp(data + len1, kSafariTLS12ExtensionsBlock, len2) != 0)
970             return;
971     } else {
972         const size_t len = sizeof(kSafariExtensionsBlock);
973
974         if (limit - data != (int)(len))
975             return;
976         if (memcmp(data, kSafariExtensionsBlock, len) != 0)
977             return;
978     }
979
980     s->s3->is_probably_safari = 1;
981 }
982 # endif                         /* !OPENSSL_NO_EC */
983
984 int ssl_parse_clienthello_tlsext(SSL *s, unsigned char **p,
985                                  unsigned char *limit, int *al)
986 {
987     unsigned short type;
988     unsigned short size;
989     unsigned short len;
990     unsigned char *data = *p;
991     int renegotiate_seen = 0;
992     int sigalg_seen = 0;
993
994     s->servername_done = 0;
995     s->tlsext_status_type = -1;
996 # ifndef OPENSSL_NO_NEXTPROTONEG
997     s->s3->next_proto_neg_seen = 0;
998 # endif
999
1000 # ifndef OPENSSL_NO_HEARTBEATS
1001     s->tlsext_heartbeat &= ~(SSL_TLSEXT_HB_ENABLED |
1002                              SSL_TLSEXT_HB_DONT_SEND_REQUESTS);
1003 # endif
1004
1005 # ifndef OPENSSL_NO_EC
1006     if (s->options & SSL_OP_SAFARI_ECDHE_ECDSA_BUG)
1007         ssl_check_for_safari(s, data, limit);
1008 # endif                         /* !OPENSSL_NO_EC */
1009
1010 # ifndef OPENSSL_NO_SRP
1011     if (s->srp_ctx.login != NULL) {
1012         OPENSSL_free(s->srp_ctx.login);
1013         s->srp_ctx.login = NULL;
1014     }
1015 # endif
1016
1017     s->srtp_profile = NULL;
1018
1019     if (data == limit)
1020         goto ri_check;
1021
1022     if (limit - data < 2)
1023         goto err;
1024
1025     n2s(data, len);
1026
1027     if (limit - data != len)
1028         goto err;
1029
1030     while (limit - data >= 4) {
1031         n2s(data, type);
1032         n2s(data, size);
1033
1034         if (limit - data < size)
1035             goto err;
1036 # if 0
1037         fprintf(stderr, "Received extension type %d size %d\n", type, size);
1038 # endif
1039         if (s->tlsext_debug_cb)
1040             s->tlsext_debug_cb(s, 0, type, data, size, s->tlsext_debug_arg);
1041 /*-
1042  * The servername extension is treated as follows:
1043  *
1044  * - Only the hostname type is supported with a maximum length of 255.
1045  * - The servername is rejected if too long or if it contains zeros,
1046  *   in which case an fatal alert is generated.
1047  * - The servername field is maintained together with the session cache.
1048  * - When a session is resumed, the servername call back invoked in order
1049  *   to allow the application to position itself to the right context.
1050  * - The servername is acknowledged if it is new for a session or when
1051  *   it is identical to a previously used for the same session.
1052  *   Applications can control the behaviour.  They can at any time
1053  *   set a 'desirable' servername for a new SSL object. This can be the
1054  *   case for example with HTTPS when a Host: header field is received and
1055  *   a renegotiation is requested. In this case, a possible servername
1056  *   presented in the new client hello is only acknowledged if it matches
1057  *   the value of the Host: field.
1058  * - Applications must  use SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION
1059  *   if they provide for changing an explicit servername context for the
1060  *   session, i.e. when the session has been established with a servername
1061  *   extension.
1062  * - On session reconnect, the servername extension may be absent.
1063  *
1064  */
1065
1066         if (type == TLSEXT_TYPE_server_name) {
1067             unsigned char *sdata;
1068             int servname_type;
1069             int dsize;
1070
1071             if (size < 2)
1072                 goto err;
1073             n2s(data, dsize);
1074             size -= 2;
1075             if (dsize > size)
1076                 goto err;
1077
1078             sdata = data;
1079             while (dsize > 3) {
1080                 servname_type = *(sdata++);
1081                 n2s(sdata, len);
1082                 dsize -= 3;
1083
1084                 if (len > dsize)
1085                     goto err;
1086
1087                 if (s->servername_done == 0)
1088                     switch (servname_type) {
1089                     case TLSEXT_NAMETYPE_host_name:
1090                         if (!s->hit) {
1091                             if (s->session->tlsext_hostname)
1092                                 goto err;
1093
1094                             if (len > TLSEXT_MAXLEN_host_name) {
1095                                 *al = TLS1_AD_UNRECOGNIZED_NAME;
1096                                 return 0;
1097                             }
1098                             if ((s->session->tlsext_hostname =
1099                                  OPENSSL_malloc(len + 1)) == NULL) {
1100                                 *al = TLS1_AD_INTERNAL_ERROR;
1101                                 return 0;
1102                             }
1103                             memcpy(s->session->tlsext_hostname, sdata, len);
1104                             s->session->tlsext_hostname[len] = '\0';
1105                             if (strlen(s->session->tlsext_hostname) != len) {
1106                                 OPENSSL_free(s->session->tlsext_hostname);
1107                                 s->session->tlsext_hostname = NULL;
1108                                 *al = TLS1_AD_UNRECOGNIZED_NAME;
1109                                 return 0;
1110                             }
1111                             s->servername_done = 1;
1112
1113                         } else
1114                             s->servername_done = s->session->tlsext_hostname
1115                                 && strlen(s->session->tlsext_hostname) == len
1116                                 && strncmp(s->session->tlsext_hostname,
1117                                            (char *)sdata, len) == 0;
1118
1119                         break;
1120
1121                     default:
1122                         break;
1123                     }
1124
1125                 dsize -= len;
1126             }
1127             if (dsize != 0)
1128                 goto err;
1129
1130         }
1131 # ifndef OPENSSL_NO_SRP
1132         else if (type == TLSEXT_TYPE_srp) {
1133             if (size == 0 || ((len = data[0])) != (size - 1))
1134                 goto err;
1135             if (s->srp_ctx.login != NULL)
1136                 goto err;
1137             if ((s->srp_ctx.login = OPENSSL_malloc(len + 1)) == NULL)
1138                 return -1;
1139             memcpy(s->srp_ctx.login, &data[1], len);
1140             s->srp_ctx.login[len] = '\0';
1141
1142             if (strlen(s->srp_ctx.login) != len)
1143                 goto err;
1144         }
1145 # endif
1146
1147 # ifndef OPENSSL_NO_EC
1148         else if (type == TLSEXT_TYPE_ec_point_formats) {
1149             unsigned char *sdata = data;
1150             int ecpointformatlist_length = *(sdata++);
1151
1152             if (ecpointformatlist_length != size - 1)
1153                 goto err;
1154             if (!s->hit) {
1155                 if (s->session->tlsext_ecpointformatlist) {
1156                     OPENSSL_free(s->session->tlsext_ecpointformatlist);
1157                     s->session->tlsext_ecpointformatlist = NULL;
1158                 }
1159                 s->session->tlsext_ecpointformatlist_length = 0;
1160                 if ((s->session->tlsext_ecpointformatlist =
1161                      OPENSSL_malloc(ecpointformatlist_length)) == NULL) {
1162                     *al = TLS1_AD_INTERNAL_ERROR;
1163                     return 0;
1164                 }
1165                 s->session->tlsext_ecpointformatlist_length =
1166                     ecpointformatlist_length;
1167                 memcpy(s->session->tlsext_ecpointformatlist, sdata,
1168                        ecpointformatlist_length);
1169             }
1170 #  if 0
1171             fprintf(stderr,
1172                     "ssl_parse_clienthello_tlsext s->session->tlsext_ecpointformatlist (length=%i) ",
1173                     s->session->tlsext_ecpointformatlist_length);
1174             sdata = s->session->tlsext_ecpointformatlist;
1175             for (i = 0; i < s->session->tlsext_ecpointformatlist_length; i++)
1176                 fprintf(stderr, "%i ", *(sdata++));
1177             fprintf(stderr, "\n");
1178 #  endif
1179         } else if (type == TLSEXT_TYPE_elliptic_curves) {
1180             unsigned char *sdata = data;
1181             int ellipticcurvelist_length = (*(sdata++) << 8);
1182             ellipticcurvelist_length += (*(sdata++));
1183
1184             if (ellipticcurvelist_length != size - 2 ||
1185                 ellipticcurvelist_length < 1 ||
1186                 /* Each NamedCurve is 2 bytes. */
1187                 ellipticcurvelist_length & 1)
1188                     goto err;
1189
1190             if (!s->hit) {
1191                 if (s->session->tlsext_ellipticcurvelist)
1192                     goto err;
1193
1194                 s->session->tlsext_ellipticcurvelist_length = 0;
1195                 if ((s->session->tlsext_ellipticcurvelist =
1196                      OPENSSL_malloc(ellipticcurvelist_length)) == NULL) {
1197                     *al = TLS1_AD_INTERNAL_ERROR;
1198                     return 0;
1199                 }
1200                 s->session->tlsext_ellipticcurvelist_length =
1201                     ellipticcurvelist_length;
1202                 memcpy(s->session->tlsext_ellipticcurvelist, sdata,
1203                        ellipticcurvelist_length);
1204             }
1205 #  if 0
1206             fprintf(stderr,
1207                     "ssl_parse_clienthello_tlsext s->session->tlsext_ellipticcurvelist (length=%i) ",
1208                     s->session->tlsext_ellipticcurvelist_length);
1209             sdata = s->session->tlsext_ellipticcurvelist;
1210             for (i = 0; i < s->session->tlsext_ellipticcurvelist_length; i++)
1211                 fprintf(stderr, "%i ", *(sdata++));
1212             fprintf(stderr, "\n");
1213 #  endif
1214         }
1215 # endif                         /* OPENSSL_NO_EC */
1216 # ifdef TLSEXT_TYPE_opaque_prf_input
1217         else if (type == TLSEXT_TYPE_opaque_prf_input &&
1218                  s->version != DTLS1_VERSION) {
1219             unsigned char *sdata = data;
1220
1221             if (size < 2) {
1222                 *al = SSL_AD_DECODE_ERROR;
1223                 return 0;
1224             }
1225             n2s(sdata, s->s3->client_opaque_prf_input_len);
1226             if (s->s3->client_opaque_prf_input_len != size - 2) {
1227                 *al = SSL_AD_DECODE_ERROR;
1228                 return 0;
1229             }
1230
1231             if (s->s3->client_opaque_prf_input != NULL) {
1232                 /* shouldn't really happen */
1233                 OPENSSL_free(s->s3->client_opaque_prf_input);
1234             }
1235
1236             /* dummy byte just to get non-NULL */
1237             if (s->s3->client_opaque_prf_input_len == 0)
1238                 s->s3->client_opaque_prf_input = OPENSSL_malloc(1);
1239             else
1240                 s->s3->client_opaque_prf_input =
1241                     BUF_memdup(sdata, s->s3->client_opaque_prf_input_len);
1242             if (s->s3->client_opaque_prf_input == NULL) {
1243                 *al = TLS1_AD_INTERNAL_ERROR;
1244                 return 0;
1245             }
1246         }
1247 # endif
1248         else if (type == TLSEXT_TYPE_session_ticket) {
1249             if (s->tls_session_ticket_ext_cb &&
1250                 !s->tls_session_ticket_ext_cb(s, data, size,
1251                                               s->tls_session_ticket_ext_cb_arg))
1252             {
1253                 *al = TLS1_AD_INTERNAL_ERROR;
1254                 return 0;
1255             }
1256         } else if (type == TLSEXT_TYPE_renegotiate) {
1257             if (!ssl_parse_clienthello_renegotiate_ext(s, data, size, al))
1258                 return 0;
1259             renegotiate_seen = 1;
1260         } else if (type == TLSEXT_TYPE_signature_algorithms) {
1261             int dsize;
1262             if (sigalg_seen || size < 2)
1263                 goto err;
1264             sigalg_seen = 1;
1265             n2s(data, dsize);
1266             size -= 2;
1267             if (dsize != size || dsize & 1)
1268                 goto err;
1269             if (!tls1_process_sigalgs(s, data, dsize))
1270                 goto err;
1271         } else if (type == TLSEXT_TYPE_status_request &&
1272                    s->version != DTLS1_VERSION) {
1273
1274             if (size < 5)
1275                 goto err;
1276
1277             s->tlsext_status_type = *data++;
1278             size--;
1279             if (s->tlsext_status_type == TLSEXT_STATUSTYPE_ocsp) {
1280                 const unsigned char *sdata;
1281                 int dsize;
1282                 /* Read in responder_id_list */
1283                 n2s(data, dsize);
1284                 size -= 2;
1285                 if (dsize > size)
1286                     goto err;
1287
1288                 /*
1289                  * We remove any OCSP_RESPIDs from a previous handshake
1290                  * to prevent unbounded memory growth - CVE-2016-6304
1291                  */
1292                 sk_OCSP_RESPID_pop_free(s->tlsext_ocsp_ids,
1293                                         OCSP_RESPID_free);
1294                 if (dsize > 0) {
1295                     s->tlsext_ocsp_ids = sk_OCSP_RESPID_new_null();
1296                     if (s->tlsext_ocsp_ids == NULL) {
1297                         *al = SSL_AD_INTERNAL_ERROR;
1298                         return 0;
1299                     }
1300                 } else {
1301                     s->tlsext_ocsp_ids = NULL;
1302                 }
1303
1304                 while (dsize > 0) {
1305                     OCSP_RESPID *id;
1306                     int idsize;
1307                     if (dsize < 4)
1308                         goto err;
1309                     n2s(data, idsize);
1310                     dsize -= 2 + idsize;
1311                     size -= 2 + idsize;
1312                     if (dsize < 0)
1313                         goto err;
1314                     sdata = data;
1315                     data += idsize;
1316                     id = d2i_OCSP_RESPID(NULL, &sdata, idsize);
1317                     if (!id)
1318                         goto err;
1319                     if (data != sdata) {
1320                         OCSP_RESPID_free(id);
1321                         goto err;
1322                     }
1323                     if (!sk_OCSP_RESPID_push(s->tlsext_ocsp_ids, id)) {
1324                         OCSP_RESPID_free(id);
1325                         *al = SSL_AD_INTERNAL_ERROR;
1326                         return 0;
1327                     }
1328                 }
1329
1330                 /* Read in request_extensions */
1331                 if (size < 2)
1332                     goto err;
1333                 n2s(data, dsize);
1334                 size -= 2;
1335                 if (dsize != size)
1336                     goto err;
1337                 sdata = data;
1338                 if (dsize > 0) {
1339                     if (s->tlsext_ocsp_exts) {
1340                         sk_X509_EXTENSION_pop_free(s->tlsext_ocsp_exts,
1341                                                    X509_EXTENSION_free);
1342                     }
1343
1344                     s->tlsext_ocsp_exts =
1345                         d2i_X509_EXTENSIONS(NULL, &sdata, dsize);
1346                     if (!s->tlsext_ocsp_exts || (data + dsize != sdata))
1347                         goto err;
1348                 }
1349             }
1350             /*
1351              * We don't know what to do with any other type * so ignore it.
1352              */
1353             else
1354                 s->tlsext_status_type = -1;
1355         }
1356 # ifndef OPENSSL_NO_HEARTBEATS
1357         else if (type == TLSEXT_TYPE_heartbeat) {
1358             switch (data[0]) {
1359             case 0x01:         /* Client allows us to send HB requests */
1360                 s->tlsext_heartbeat |= SSL_TLSEXT_HB_ENABLED;
1361                 break;
1362             case 0x02:         /* Client doesn't accept HB requests */
1363                 s->tlsext_heartbeat |= SSL_TLSEXT_HB_ENABLED;
1364                 s->tlsext_heartbeat |= SSL_TLSEXT_HB_DONT_SEND_REQUESTS;
1365                 break;
1366             default:
1367                 *al = SSL_AD_ILLEGAL_PARAMETER;
1368                 return 0;
1369             }
1370         }
1371 # endif
1372 # ifndef OPENSSL_NO_NEXTPROTONEG
1373         else if (type == TLSEXT_TYPE_next_proto_neg &&
1374                  s->s3->tmp.finish_md_len == 0) {
1375             /*-
1376              * We shouldn't accept this extension on a
1377              * renegotiation.
1378              *
1379              * s->new_session will be set on renegotiation, but we
1380              * probably shouldn't rely that it couldn't be set on
1381              * the initial renegotation too in certain cases (when
1382              * there's some other reason to disallow resuming an
1383              * earlier session -- the current code won't be doing
1384              * anything like that, but this might change).
1385              *
1386              * A valid sign that there's been a previous handshake
1387              * in this connection is if s->s3->tmp.finish_md_len >
1388              * 0.  (We are talking about a check that will happen
1389              * in the Hello protocol round, well before a new
1390              * Finished message could have been computed.)
1391              */
1392             s->s3->next_proto_neg_seen = 1;
1393         }
1394 # endif
1395
1396         /* session ticket processed earlier */
1397 # ifndef OPENSSL_NO_SRTP
1398         else if (SSL_IS_DTLS(s) && SSL_get_srtp_profiles(s)
1399                  && type == TLSEXT_TYPE_use_srtp) {
1400             if (ssl_parse_clienthello_use_srtp_ext(s, data, size, al))
1401                 return 0;
1402         }
1403 # endif
1404
1405         data += size;
1406     }
1407
1408     /* Spurious data on the end */
1409     if (data != limit)
1410         goto err;
1411
1412     *p = data;
1413
1414  ri_check:
1415
1416     /* Need RI if renegotiating */
1417
1418     if (!renegotiate_seen && s->renegotiate &&
1419         !(s->options & SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION)) {
1420         *al = SSL_AD_HANDSHAKE_FAILURE;
1421         SSLerr(SSL_F_SSL_PARSE_CLIENTHELLO_TLSEXT,
1422                SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED);
1423         return 0;
1424     }
1425
1426     return 1;
1427 err:
1428     *al = SSL_AD_DECODE_ERROR;
1429     return 0;
1430 }
1431
1432 # ifndef OPENSSL_NO_NEXTPROTONEG
1433 /*
1434  * ssl_next_proto_validate validates a Next Protocol Negotiation block. No
1435  * elements of zero length are allowed and the set of elements must exactly
1436  * fill the length of the block.
1437  */
1438 static char ssl_next_proto_validate(unsigned char *d, unsigned len)
1439 {
1440     unsigned int off = 0;
1441
1442     while (off < len) {
1443         if (d[off] == 0)
1444             return 0;
1445         off += d[off];
1446         off++;
1447     }
1448
1449     return off == len;
1450 }
1451 # endif
1452
1453 int ssl_parse_serverhello_tlsext(SSL *s, unsigned char **p, unsigned char *d,
1454                                  int n, int *al)
1455 {
1456     unsigned short length;
1457     unsigned short type;
1458     unsigned short size;
1459     unsigned char *data = *p;
1460     int tlsext_servername = 0;
1461     int renegotiate_seen = 0;
1462
1463 # ifndef OPENSSL_NO_NEXTPROTONEG
1464     s->s3->next_proto_neg_seen = 0;
1465 # endif
1466     s->tlsext_ticket_expected = 0;
1467
1468 # ifndef OPENSSL_NO_HEARTBEATS
1469     s->tlsext_heartbeat &= ~(SSL_TLSEXT_HB_ENABLED |
1470                              SSL_TLSEXT_HB_DONT_SEND_REQUESTS);
1471 # endif
1472
1473     if ((d + n) - data <= 2)
1474         goto ri_check;
1475
1476     n2s(data, length);
1477     if ((d + n) - data != length) {
1478         *al = SSL_AD_DECODE_ERROR;
1479         return 0;
1480     }
1481
1482     while ((d + n) - data >= 4) {
1483         n2s(data, type);
1484         n2s(data, size);
1485
1486         if ((d + n) - data < size)
1487             goto ri_check;
1488
1489         if (s->tlsext_debug_cb)
1490             s->tlsext_debug_cb(s, 1, type, data, size, s->tlsext_debug_arg);
1491
1492         if (type == TLSEXT_TYPE_server_name) {
1493             if (s->tlsext_hostname == NULL || size > 0) {
1494                 *al = TLS1_AD_UNRECOGNIZED_NAME;
1495                 return 0;
1496             }
1497             tlsext_servername = 1;
1498         }
1499 # ifndef OPENSSL_NO_EC
1500         else if (type == TLSEXT_TYPE_ec_point_formats) {
1501             unsigned char *sdata = data;
1502             int ecpointformatlist_length = *(sdata++);
1503
1504             if (ecpointformatlist_length != size - 1 ||
1505                 ecpointformatlist_length < 1) {
1506                 *al = TLS1_AD_DECODE_ERROR;
1507                 return 0;
1508             }
1509             if (!s->hit) {
1510                 s->session->tlsext_ecpointformatlist_length = 0;
1511                 if (s->session->tlsext_ecpointformatlist != NULL)
1512                     OPENSSL_free(s->session->tlsext_ecpointformatlist);
1513                 if ((s->session->tlsext_ecpointformatlist =
1514                      OPENSSL_malloc(ecpointformatlist_length)) == NULL) {
1515                     *al = TLS1_AD_INTERNAL_ERROR;
1516                     return 0;
1517                 }
1518                 s->session->tlsext_ecpointformatlist_length =
1519                     ecpointformatlist_length;
1520                 memcpy(s->session->tlsext_ecpointformatlist, sdata,
1521                        ecpointformatlist_length);
1522             }
1523 #  if 0
1524             fprintf(stderr,
1525                     "ssl_parse_serverhello_tlsext s->session->tlsext_ecpointformatlist ");
1526             sdata = s->session->tlsext_ecpointformatlist;
1527             for (i = 0; i < s->session->tlsext_ecpointformatlist_length; i++)
1528                 fprintf(stderr, "%i ", *(sdata++));
1529             fprintf(stderr, "\n");
1530 #  endif
1531         }
1532 # endif                         /* OPENSSL_NO_EC */
1533
1534         else if (type == TLSEXT_TYPE_session_ticket) {
1535             if (s->tls_session_ticket_ext_cb &&
1536                 !s->tls_session_ticket_ext_cb(s, data, size,
1537                                               s->tls_session_ticket_ext_cb_arg))
1538             {
1539                 *al = TLS1_AD_INTERNAL_ERROR;
1540                 return 0;
1541             }
1542             if ((SSL_get_options(s) & SSL_OP_NO_TICKET)
1543                 || (size > 0)) {
1544                 *al = TLS1_AD_UNSUPPORTED_EXTENSION;
1545                 return 0;
1546             }
1547             s->tlsext_ticket_expected = 1;
1548         }
1549 # ifdef TLSEXT_TYPE_opaque_prf_input
1550         else if (type == TLSEXT_TYPE_opaque_prf_input &&
1551                  s->version != DTLS1_VERSION) {
1552             unsigned char *sdata = data;
1553
1554             if (size < 2) {
1555                 *al = SSL_AD_DECODE_ERROR;
1556                 return 0;
1557             }
1558             n2s(sdata, s->s3->server_opaque_prf_input_len);
1559             if (s->s3->server_opaque_prf_input_len != size - 2) {
1560                 *al = SSL_AD_DECODE_ERROR;
1561                 return 0;
1562             }
1563
1564             if (s->s3->server_opaque_prf_input != NULL) {
1565                 /* shouldn't really happen */
1566                 OPENSSL_free(s->s3->server_opaque_prf_input);
1567             }
1568             if (s->s3->server_opaque_prf_input_len == 0) {
1569                 /* dummy byte just to get non-NULL */
1570                 s->s3->server_opaque_prf_input = OPENSSL_malloc(1);
1571             } else {
1572                 s->s3->server_opaque_prf_input =
1573                     BUF_memdup(sdata, s->s3->server_opaque_prf_input_len);
1574             }
1575
1576             if (s->s3->server_opaque_prf_input == NULL) {
1577                 *al = TLS1_AD_INTERNAL_ERROR;
1578                 return 0;
1579             }
1580         }
1581 # endif
1582         else if (type == TLSEXT_TYPE_status_request &&
1583                  s->version != DTLS1_VERSION) {
1584             /*
1585              * MUST be empty and only sent if we've requested a status
1586              * request message.
1587              */
1588             if ((s->tlsext_status_type == -1) || (size > 0)) {
1589                 *al = TLS1_AD_UNSUPPORTED_EXTENSION;
1590                 return 0;
1591             }
1592             /* Set flag to expect CertificateStatus message */
1593             s->tlsext_status_expected = 1;
1594         }
1595 # ifndef OPENSSL_NO_NEXTPROTONEG
1596         else if (type == TLSEXT_TYPE_next_proto_neg &&
1597                  s->s3->tmp.finish_md_len == 0) {
1598             unsigned char *selected;
1599             unsigned char selected_len;
1600
1601             /* We must have requested it. */
1602             if (s->ctx->next_proto_select_cb == NULL) {
1603                 *al = TLS1_AD_UNSUPPORTED_EXTENSION;
1604                 return 0;
1605             }
1606             /* The data must be valid */
1607             if (!ssl_next_proto_validate(data, size)) {
1608                 *al = TLS1_AD_DECODE_ERROR;
1609                 return 0;
1610             }
1611             if (s->
1612                 ctx->next_proto_select_cb(s, &selected, &selected_len, data,
1613                                           size,
1614                                           s->ctx->next_proto_select_cb_arg) !=
1615                 SSL_TLSEXT_ERR_OK) {
1616                 *al = TLS1_AD_INTERNAL_ERROR;
1617                 return 0;
1618             }
1619             s->next_proto_negotiated = OPENSSL_malloc(selected_len);
1620             if (!s->next_proto_negotiated) {
1621                 *al = TLS1_AD_INTERNAL_ERROR;
1622                 return 0;
1623             }
1624             memcpy(s->next_proto_negotiated, selected, selected_len);
1625             s->next_proto_negotiated_len = selected_len;
1626             s->s3->next_proto_neg_seen = 1;
1627         }
1628 # endif
1629         else if (type == TLSEXT_TYPE_renegotiate) {
1630             if (!ssl_parse_serverhello_renegotiate_ext(s, data, size, al))
1631                 return 0;
1632             renegotiate_seen = 1;
1633         }
1634 # ifndef OPENSSL_NO_HEARTBEATS
1635         else if (type == TLSEXT_TYPE_heartbeat) {
1636             switch (data[0]) {
1637             case 0x01:         /* Server allows us to send HB requests */
1638                 s->tlsext_heartbeat |= SSL_TLSEXT_HB_ENABLED;
1639                 break;
1640             case 0x02:         /* Server doesn't accept HB requests */
1641                 s->tlsext_heartbeat |= SSL_TLSEXT_HB_ENABLED;
1642                 s->tlsext_heartbeat |= SSL_TLSEXT_HB_DONT_SEND_REQUESTS;
1643                 break;
1644             default:
1645                 *al = SSL_AD_ILLEGAL_PARAMETER;
1646                 return 0;
1647             }
1648         }
1649 # endif
1650 # ifndef OPENSSL_NO_SRTP
1651         else if (SSL_IS_DTLS(s) && type == TLSEXT_TYPE_use_srtp) {
1652             if (ssl_parse_serverhello_use_srtp_ext(s, data, size, al))
1653                 return 0;
1654         }
1655 # endif
1656
1657         data += size;
1658     }
1659
1660     if (data != d + n) {
1661         *al = SSL_AD_DECODE_ERROR;
1662         return 0;
1663     }
1664
1665     if (!s->hit && tlsext_servername == 1) {
1666         if (s->tlsext_hostname) {
1667             if (s->session->tlsext_hostname == NULL) {
1668                 s->session->tlsext_hostname = BUF_strdup(s->tlsext_hostname);
1669                 if (!s->session->tlsext_hostname) {
1670                     *al = SSL_AD_UNRECOGNIZED_NAME;
1671                     return 0;
1672                 }
1673             } else {
1674                 *al = SSL_AD_DECODE_ERROR;
1675                 return 0;
1676             }
1677         }
1678     }
1679
1680     *p = data;
1681
1682  ri_check:
1683
1684     /*
1685      * Determine if we need to see RI. Strictly speaking if we want to avoid
1686      * an attack we should *always* see RI even on initial server hello
1687      * because the client doesn't see any renegotiation during an attack.
1688      * However this would mean we could not connect to any server which
1689      * doesn't support RI so for the immediate future tolerate RI absence on
1690      * initial connect only.
1691      */
1692     if (!renegotiate_seen && !(s->options & SSL_OP_LEGACY_SERVER_CONNECT)
1693         && !(s->options & SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION)) {
1694         *al = SSL_AD_HANDSHAKE_FAILURE;
1695         SSLerr(SSL_F_SSL_PARSE_SERVERHELLO_TLSEXT,
1696                SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED);
1697         return 0;
1698     }
1699
1700     return 1;
1701 }
1702
1703 int ssl_prepare_clienthello_tlsext(SSL *s)
1704 {
1705 # ifndef OPENSSL_NO_EC
1706     /*
1707      * If we are client and using an elliptic curve cryptography cipher
1708      * suite, send the point formats and elliptic curves we support.
1709      */
1710     int using_ecc = 0;
1711     int i;
1712     unsigned char *j;
1713     unsigned long alg_k, alg_a;
1714     STACK_OF(SSL_CIPHER) *cipher_stack = SSL_get_ciphers(s);
1715
1716     for (i = 0; i < sk_SSL_CIPHER_num(cipher_stack); i++) {
1717         SSL_CIPHER *c = sk_SSL_CIPHER_value(cipher_stack, i);
1718
1719         alg_k = c->algorithm_mkey;
1720         alg_a = c->algorithm_auth;
1721         if ((alg_k & (SSL_kEECDH | SSL_kECDHr | SSL_kECDHe)
1722              || (alg_a & SSL_aECDSA))) {
1723             using_ecc = 1;
1724             break;
1725         }
1726     }
1727     using_ecc = using_ecc && (s->version >= TLS1_VERSION);
1728     if (using_ecc) {
1729         if (s->tlsext_ecpointformatlist != NULL)
1730             OPENSSL_free(s->tlsext_ecpointformatlist);
1731         if ((s->tlsext_ecpointformatlist = OPENSSL_malloc(3)) == NULL) {
1732             SSLerr(SSL_F_SSL_PREPARE_CLIENTHELLO_TLSEXT,
1733                    ERR_R_MALLOC_FAILURE);
1734             return -1;
1735         }
1736         s->tlsext_ecpointformatlist_length = 3;
1737         s->tlsext_ecpointformatlist[0] = TLSEXT_ECPOINTFORMAT_uncompressed;
1738         s->tlsext_ecpointformatlist[1] =
1739             TLSEXT_ECPOINTFORMAT_ansiX962_compressed_prime;
1740         s->tlsext_ecpointformatlist[2] =
1741             TLSEXT_ECPOINTFORMAT_ansiX962_compressed_char2;
1742
1743         /* we support all named elliptic curves in RFC 4492 */
1744         if (s->tlsext_ellipticcurvelist != NULL)
1745             OPENSSL_free(s->tlsext_ellipticcurvelist);
1746         s->tlsext_ellipticcurvelist_length =
1747             sizeof(pref_list) / sizeof(pref_list[0]) * 2;
1748         if ((s->tlsext_ellipticcurvelist =
1749              OPENSSL_malloc(s->tlsext_ellipticcurvelist_length)) == NULL) {
1750             s->tlsext_ellipticcurvelist_length = 0;
1751             SSLerr(SSL_F_SSL_PREPARE_CLIENTHELLO_TLSEXT,
1752                    ERR_R_MALLOC_FAILURE);
1753             return -1;
1754         }
1755         for (i = 0, j = s->tlsext_ellipticcurvelist; (unsigned int)i <
1756              sizeof(pref_list) / sizeof(pref_list[0]); i++) {
1757             int id = tls1_ec_nid2curve_id(pref_list[i]);
1758             s2n(id, j);
1759         }
1760     }
1761 # endif                         /* OPENSSL_NO_EC */
1762
1763 # ifdef TLSEXT_TYPE_opaque_prf_input
1764     {
1765         int r = 1;
1766
1767         if (s->ctx->tlsext_opaque_prf_input_callback != 0) {
1768             r = s->ctx->tlsext_opaque_prf_input_callback(s, NULL, 0,
1769                                                          s->
1770                                                          ctx->tlsext_opaque_prf_input_callback_arg);
1771             if (!r)
1772                 return -1;
1773         }
1774
1775         if (s->tlsext_opaque_prf_input != NULL) {
1776             if (s->s3->client_opaque_prf_input != NULL) {
1777                 /* shouldn't really happen */
1778                 OPENSSL_free(s->s3->client_opaque_prf_input);
1779             }
1780
1781             if (s->tlsext_opaque_prf_input_len == 0) {
1782                 /* dummy byte just to get non-NULL */
1783                 s->s3->client_opaque_prf_input = OPENSSL_malloc(1);
1784             } else {
1785                 s->s3->client_opaque_prf_input =
1786                     BUF_memdup(s->tlsext_opaque_prf_input,
1787                                s->tlsext_opaque_prf_input_len);
1788             }
1789             if (s->s3->client_opaque_prf_input == NULL) {
1790                 SSLerr(SSL_F_SSL_PREPARE_CLIENTHELLO_TLSEXT,
1791                        ERR_R_MALLOC_FAILURE);
1792                 return -1;
1793             }
1794             s->s3->client_opaque_prf_input_len =
1795                 s->tlsext_opaque_prf_input_len;
1796         }
1797
1798         if (r == 2)
1799             /*
1800              * at callback's request, insist on receiving an appropriate
1801              * server opaque PRF input
1802              */
1803             s->s3->server_opaque_prf_input_len =
1804                 s->tlsext_opaque_prf_input_len;
1805     }
1806 # endif
1807
1808     return 1;
1809 }
1810
1811 int ssl_prepare_serverhello_tlsext(SSL *s)
1812 {
1813 # ifndef OPENSSL_NO_EC
1814     /*
1815      * If we are server and using an ECC cipher suite, send the point formats
1816      * we support if the client sent us an ECPointsFormat extension.  Note
1817      * that the server is not supposed to send an EllipticCurves extension.
1818      */
1819
1820     unsigned long alg_k = s->s3->tmp.new_cipher->algorithm_mkey;
1821     unsigned long alg_a = s->s3->tmp.new_cipher->algorithm_auth;
1822     int using_ecc = (alg_k & (SSL_kEECDH | SSL_kECDHr | SSL_kECDHe))
1823         || (alg_a & SSL_aECDSA);
1824     using_ecc = using_ecc && (s->session->tlsext_ecpointformatlist != NULL);
1825
1826     if (using_ecc) {
1827         if (s->tlsext_ecpointformatlist != NULL)
1828             OPENSSL_free(s->tlsext_ecpointformatlist);
1829         if ((s->tlsext_ecpointformatlist = OPENSSL_malloc(3)) == NULL) {
1830             SSLerr(SSL_F_SSL_PREPARE_SERVERHELLO_TLSEXT,
1831                    ERR_R_MALLOC_FAILURE);
1832             return -1;
1833         }
1834         s->tlsext_ecpointformatlist_length = 3;
1835         s->tlsext_ecpointformatlist[0] = TLSEXT_ECPOINTFORMAT_uncompressed;
1836         s->tlsext_ecpointformatlist[1] =
1837             TLSEXT_ECPOINTFORMAT_ansiX962_compressed_prime;
1838         s->tlsext_ecpointformatlist[2] =
1839             TLSEXT_ECPOINTFORMAT_ansiX962_compressed_char2;
1840     }
1841 # endif                         /* OPENSSL_NO_EC */
1842
1843     return 1;
1844 }
1845
1846 int ssl_check_clienthello_tlsext_early(SSL *s)
1847 {
1848     int ret = SSL_TLSEXT_ERR_NOACK;
1849     int al = SSL_AD_UNRECOGNIZED_NAME;
1850
1851 # ifndef OPENSSL_NO_EC
1852     /*
1853      * The handling of the ECPointFormats extension is done elsewhere, namely
1854      * in ssl3_choose_cipher in s3_lib.c.
1855      */
1856     /*
1857      * The handling of the EllipticCurves extension is done elsewhere, namely
1858      * in ssl3_choose_cipher in s3_lib.c.
1859      */
1860 # endif
1861
1862     if (s->ctx != NULL && s->ctx->tlsext_servername_callback != 0)
1863         ret =
1864             s->ctx->tlsext_servername_callback(s, &al,
1865                                                s->ctx->tlsext_servername_arg);
1866     else if (s->initial_ctx != NULL
1867              && s->initial_ctx->tlsext_servername_callback != 0)
1868         ret =
1869             s->initial_ctx->tlsext_servername_callback(s, &al,
1870                                                        s->
1871                                                        initial_ctx->tlsext_servername_arg);
1872
1873 # ifdef TLSEXT_TYPE_opaque_prf_input
1874     {
1875         /*
1876          * This sort of belongs into ssl_prepare_serverhello_tlsext(), but we
1877          * might be sending an alert in response to the client hello, so this
1878          * has to happen here in ssl_check_clienthello_tlsext_early().
1879          */
1880
1881         int r = 1;
1882
1883         if (s->ctx->tlsext_opaque_prf_input_callback != 0) {
1884             r = s->ctx->tlsext_opaque_prf_input_callback(s, NULL, 0,
1885                                                          s->
1886                                                          ctx->tlsext_opaque_prf_input_callback_arg);
1887             if (!r) {
1888                 ret = SSL_TLSEXT_ERR_ALERT_FATAL;
1889                 al = SSL_AD_INTERNAL_ERROR;
1890                 goto err;
1891             }
1892         }
1893
1894         if (s->s3->server_opaque_prf_input != NULL) {
1895             /* shouldn't really happen */
1896             OPENSSL_free(s->s3->server_opaque_prf_input);
1897         }
1898         s->s3->server_opaque_prf_input = NULL;
1899
1900         if (s->tlsext_opaque_prf_input != NULL) {
1901             if (s->s3->client_opaque_prf_input != NULL &&
1902                 s->s3->client_opaque_prf_input_len ==
1903                 s->tlsext_opaque_prf_input_len) {
1904                 /*
1905                  * can only use this extension if we have a server opaque PRF
1906                  * input of the same length as the client opaque PRF input!
1907                  */
1908
1909                 if (s->tlsext_opaque_prf_input_len == 0) {
1910                     /* dummy byte just to get non-NULL */
1911                     s->s3->server_opaque_prf_input = OPENSSL_malloc(1);
1912                 } else {
1913                     s->s3->server_opaque_prf_input =
1914                         BUF_memdup(s->tlsext_opaque_prf_input,
1915                                    s->tlsext_opaque_prf_input_len);
1916                 }
1917                 if (s->s3->server_opaque_prf_input == NULL) {
1918                     ret = SSL_TLSEXT_ERR_ALERT_FATAL;
1919                     al = SSL_AD_INTERNAL_ERROR;
1920                     goto err;
1921                 }
1922                 s->s3->server_opaque_prf_input_len =
1923                     s->tlsext_opaque_prf_input_len;
1924             }
1925         }
1926
1927         if (r == 2 && s->s3->server_opaque_prf_input == NULL) {
1928             /*
1929              * The callback wants to enforce use of the extension, but we
1930              * can't do that with the client opaque PRF input; abort the
1931              * handshake.
1932              */
1933             ret = SSL_TLSEXT_ERR_ALERT_FATAL;
1934             al = SSL_AD_HANDSHAKE_FAILURE;
1935         }
1936     }
1937
1938  err:
1939 # endif
1940     switch (ret) {
1941     case SSL_TLSEXT_ERR_ALERT_FATAL:
1942         ssl3_send_alert(s, SSL3_AL_FATAL, al);
1943         return -1;
1944
1945     case SSL_TLSEXT_ERR_ALERT_WARNING:
1946         ssl3_send_alert(s, SSL3_AL_WARNING, al);
1947         return 1;
1948
1949     case SSL_TLSEXT_ERR_NOACK:
1950         s->servername_done = 0;
1951     default:
1952         return 1;
1953     }
1954 }
1955
1956 int ssl_check_clienthello_tlsext_late(SSL *s)
1957 {
1958     int ret = SSL_TLSEXT_ERR_OK;
1959     int al;
1960
1961     /*
1962      * If status request then ask callback what to do. Note: this must be
1963      * called after servername callbacks in case the certificate has
1964      * changed, and must be called after the cipher has been chosen because
1965      * this may influence which certificate is sent
1966      */
1967     if ((s->tlsext_status_type != -1) && s->ctx && s->ctx->tlsext_status_cb) {
1968         int r;
1969         CERT_PKEY *certpkey;
1970         certpkey = ssl_get_server_send_pkey(s);
1971         /* If no certificate can't return certificate status */
1972         if (certpkey == NULL) {
1973             s->tlsext_status_expected = 0;
1974             return 1;
1975         }
1976         /*
1977          * Set current certificate to one we will use so SSL_get_certificate
1978          * et al can pick it up.
1979          */
1980         s->cert->key = certpkey;
1981         r = s->ctx->tlsext_status_cb(s, s->ctx->tlsext_status_arg);
1982         switch (r) {
1983             /* We don't want to send a status request response */
1984         case SSL_TLSEXT_ERR_NOACK:
1985             s->tlsext_status_expected = 0;
1986             break;
1987             /* status request response should be sent */
1988         case SSL_TLSEXT_ERR_OK:
1989             if (s->tlsext_ocsp_resp)
1990                 s->tlsext_status_expected = 1;
1991             else
1992                 s->tlsext_status_expected = 0;
1993             break;
1994             /* something bad happened */
1995         case SSL_TLSEXT_ERR_ALERT_FATAL:
1996             ret = SSL_TLSEXT_ERR_ALERT_FATAL;
1997             al = SSL_AD_INTERNAL_ERROR;
1998             goto err;
1999         }
2000     } else
2001         s->tlsext_status_expected = 0;
2002
2003  err:
2004     switch (ret) {
2005     case SSL_TLSEXT_ERR_ALERT_FATAL:
2006         ssl3_send_alert(s, SSL3_AL_FATAL, al);
2007         return -1;
2008
2009     case SSL_TLSEXT_ERR_ALERT_WARNING:
2010         ssl3_send_alert(s, SSL3_AL_WARNING, al);
2011         return 1;
2012
2013     default:
2014         return 1;
2015     }
2016 }
2017
2018 int ssl_check_serverhello_tlsext(SSL *s)
2019 {
2020     int ret = SSL_TLSEXT_ERR_NOACK;
2021     int al = SSL_AD_UNRECOGNIZED_NAME;
2022
2023 # ifndef OPENSSL_NO_EC
2024     /*
2025      * If we are client and using an elliptic curve cryptography cipher
2026      * suite, then if server returns an EC point formats lists extension it
2027      * must contain uncompressed.
2028      */
2029     unsigned long alg_k = s->s3->tmp.new_cipher->algorithm_mkey;
2030     unsigned long alg_a = s->s3->tmp.new_cipher->algorithm_auth;
2031     if ((s->tlsext_ecpointformatlist != NULL)
2032         && (s->tlsext_ecpointformatlist_length > 0)
2033         && (s->session->tlsext_ecpointformatlist != NULL)
2034         && (s->session->tlsext_ecpointformatlist_length > 0)
2035         && ((alg_k & (SSL_kEECDH | SSL_kECDHr | SSL_kECDHe))
2036             || (alg_a & SSL_aECDSA))) {
2037         /* we are using an ECC cipher */
2038         size_t i;
2039         unsigned char *list;
2040         int found_uncompressed = 0;
2041         list = s->session->tlsext_ecpointformatlist;
2042         for (i = 0; i < s->session->tlsext_ecpointformatlist_length; i++) {
2043             if (*(list++) == TLSEXT_ECPOINTFORMAT_uncompressed) {
2044                 found_uncompressed = 1;
2045                 break;
2046             }
2047         }
2048         if (!found_uncompressed) {
2049             SSLerr(SSL_F_SSL_CHECK_SERVERHELLO_TLSEXT,
2050                    SSL_R_TLS_INVALID_ECPOINTFORMAT_LIST);
2051             return -1;
2052         }
2053     }
2054     ret = SSL_TLSEXT_ERR_OK;
2055 # endif                         /* OPENSSL_NO_EC */
2056
2057     if (s->ctx != NULL && s->ctx->tlsext_servername_callback != 0)
2058         ret =
2059             s->ctx->tlsext_servername_callback(s, &al,
2060                                                s->ctx->tlsext_servername_arg);
2061     else if (s->initial_ctx != NULL
2062              && s->initial_ctx->tlsext_servername_callback != 0)
2063         ret =
2064             s->initial_ctx->tlsext_servername_callback(s, &al,
2065                                                        s->
2066                                                        initial_ctx->tlsext_servername_arg);
2067
2068 # ifdef TLSEXT_TYPE_opaque_prf_input
2069     if (s->s3->server_opaque_prf_input_len > 0) {
2070         /*
2071          * This case may indicate that we, as a client, want to insist on
2072          * using opaque PRF inputs. So first verify that we really have a
2073          * value from the server too.
2074          */
2075
2076         if (s->s3->server_opaque_prf_input == NULL) {
2077             ret = SSL_TLSEXT_ERR_ALERT_FATAL;
2078             al = SSL_AD_HANDSHAKE_FAILURE;
2079         }
2080
2081         /*
2082          * Anytime the server *has* sent an opaque PRF input, we need to
2083          * check that we have a client opaque PRF input of the same size.
2084          */
2085         if (s->s3->client_opaque_prf_input == NULL ||
2086             s->s3->client_opaque_prf_input_len !=
2087             s->s3->server_opaque_prf_input_len) {
2088             ret = SSL_TLSEXT_ERR_ALERT_FATAL;
2089             al = SSL_AD_ILLEGAL_PARAMETER;
2090         }
2091     }
2092 # endif
2093
2094     /*
2095      * If we've requested certificate status and we wont get one tell the
2096      * callback
2097      */
2098     if ((s->tlsext_status_type != -1) && !(s->tlsext_status_expected)
2099         && s->ctx && s->ctx->tlsext_status_cb) {
2100         int r;
2101         /*
2102          * Set resp to NULL, resplen to -1 so callback knows there is no
2103          * response.
2104          */
2105         if (s->tlsext_ocsp_resp) {
2106             OPENSSL_free(s->tlsext_ocsp_resp);
2107             s->tlsext_ocsp_resp = NULL;
2108         }
2109         s->tlsext_ocsp_resplen = -1;
2110         r = s->ctx->tlsext_status_cb(s, s->ctx->tlsext_status_arg);
2111         if (r == 0) {
2112             al = SSL_AD_BAD_CERTIFICATE_STATUS_RESPONSE;
2113             ret = SSL_TLSEXT_ERR_ALERT_FATAL;
2114         }
2115         if (r < 0) {
2116             al = SSL_AD_INTERNAL_ERROR;
2117             ret = SSL_TLSEXT_ERR_ALERT_FATAL;
2118         }
2119     }
2120
2121     switch (ret) {
2122     case SSL_TLSEXT_ERR_ALERT_FATAL:
2123         ssl3_send_alert(s, SSL3_AL_FATAL, al);
2124         return -1;
2125
2126     case SSL_TLSEXT_ERR_ALERT_WARNING:
2127         ssl3_send_alert(s, SSL3_AL_WARNING, al);
2128         return 1;
2129
2130     case SSL_TLSEXT_ERR_NOACK:
2131         s->servername_done = 0;
2132     default:
2133         return 1;
2134     }
2135 }
2136
2137 /*-
2138  * Since the server cache lookup is done early on in the processing of the
2139  * ClientHello, and other operations depend on the result, we need to handle
2140  * any TLS session ticket extension at the same time.
2141  *
2142  *   session_id: points at the session ID in the ClientHello. This code will
2143  *       read past the end of this in order to parse out the session ticket
2144  *       extension, if any.
2145  *   len: the length of the session ID.
2146  *   limit: a pointer to the first byte after the ClientHello.
2147  *   ret: (output) on return, if a ticket was decrypted, then this is set to
2148  *       point to the resulting session.
2149  *
2150  * If s->tls_session_secret_cb is set then we are expecting a pre-shared key
2151  * ciphersuite, in which case we have no use for session tickets and one will
2152  * never be decrypted, nor will s->tlsext_ticket_expected be set to 1.
2153  *
2154  * Returns:
2155  *   -1: fatal error, either from parsing or decrypting the ticket.
2156  *    0: no ticket was found (or was ignored, based on settings).
2157  *    1: a zero length extension was found, indicating that the client supports
2158  *       session tickets but doesn't currently have one to offer.
2159  *    2: either s->tls_session_secret_cb was set, or a ticket was offered but
2160  *       couldn't be decrypted because of a non-fatal error.
2161  *    3: a ticket was successfully decrypted and *ret was set.
2162  *
2163  * Side effects:
2164  *   Sets s->tlsext_ticket_expected to 1 if the server will have to issue
2165  *   a new session ticket to the client because the client indicated support
2166  *   (and s->tls_session_secret_cb is NULL) but the client either doesn't have
2167  *   a session ticket or we couldn't use the one it gave us, or if
2168  *   s->ctx->tlsext_ticket_key_cb asked to renew the client's ticket.
2169  *   Otherwise, s->tlsext_ticket_expected is set to 0.
2170  */
2171 int tls1_process_ticket(SSL *s, unsigned char *session_id, int len,
2172                         const unsigned char *limit, SSL_SESSION **ret)
2173 {
2174     /* Point after session ID in client hello */
2175     const unsigned char *p = session_id + len;
2176     unsigned short i;
2177
2178     *ret = NULL;
2179     s->tlsext_ticket_expected = 0;
2180
2181     /*
2182      * If tickets disabled behave as if no ticket present to permit stateful
2183      * resumption.
2184      */
2185     if (SSL_get_options(s) & SSL_OP_NO_TICKET)
2186         return 0;
2187     if ((s->version <= SSL3_VERSION) || !limit)
2188         return 0;
2189     if (p >= limit)
2190         return -1;
2191     /* Skip past DTLS cookie */
2192     if (s->version == DTLS1_VERSION || s->version == DTLS1_BAD_VER) {
2193         i = *(p++);
2194
2195         if (limit - p <= i)
2196             return -1;
2197
2198         p += i;
2199     }
2200     /* Skip past cipher list */
2201     n2s(p, i);
2202     if (limit - p <= i)
2203         return -1;
2204     p += i;
2205
2206     /* Skip past compression algorithm list */
2207     i = *(p++);
2208     if (limit - p < i)
2209         return -1;
2210     p += i;
2211
2212     /* Now at start of extensions */
2213     if (limit - p <= 2)
2214         return 0;
2215     n2s(p, i);
2216     while (limit - p >= 4) {
2217         unsigned short type, size;
2218         n2s(p, type);
2219         n2s(p, size);
2220         if (limit - p < size)
2221             return 0;
2222         if (type == TLSEXT_TYPE_session_ticket) {
2223             int r;
2224             if (size == 0) {
2225                 /*
2226                  * The client will accept a ticket but doesn't currently have
2227                  * one.
2228                  */
2229                 s->tlsext_ticket_expected = 1;
2230                 return 1;
2231             }
2232             if (s->tls_session_secret_cb) {
2233                 /*
2234                  * Indicate that the ticket couldn't be decrypted rather than
2235                  * generating the session from ticket now, trigger
2236                  * abbreviated handshake based on external mechanism to
2237                  * calculate the master secret later.
2238                  */
2239                 return 2;
2240             }
2241             r = tls_decrypt_ticket(s, p, size, session_id, len, ret);
2242             switch (r) {
2243             case 2:            /* ticket couldn't be decrypted */
2244                 s->tlsext_ticket_expected = 1;
2245                 return 2;
2246             case 3:            /* ticket was decrypted */
2247                 return r;
2248             case 4:            /* ticket decrypted but need to renew */
2249                 s->tlsext_ticket_expected = 1;
2250                 return 3;
2251             default:           /* fatal error */
2252                 return -1;
2253             }
2254         }
2255         p += size;
2256     }
2257     return 0;
2258 }
2259
2260 /*-
2261  * tls_decrypt_ticket attempts to decrypt a session ticket.
2262  *
2263  *   etick: points to the body of the session ticket extension.
2264  *   eticklen: the length of the session tickets extenion.
2265  *   sess_id: points at the session ID.
2266  *   sesslen: the length of the session ID.
2267  *   psess: (output) on return, if a ticket was decrypted, then this is set to
2268  *       point to the resulting session.
2269  *
2270  * Returns:
2271  *   -1: fatal error, either from parsing or decrypting the ticket.
2272  *    2: the ticket couldn't be decrypted.
2273  *    3: a ticket was successfully decrypted and *psess was set.
2274  *    4: same as 3, but the ticket needs to be renewed.
2275  */
2276 static int tls_decrypt_ticket(SSL *s, const unsigned char *etick,
2277                               int eticklen, const unsigned char *sess_id,
2278                               int sesslen, SSL_SESSION **psess)
2279 {
2280     SSL_SESSION *sess;
2281     unsigned char *sdec;
2282     const unsigned char *p;
2283     int slen, mlen, renew_ticket = 0;
2284     unsigned char tick_hmac[EVP_MAX_MD_SIZE];
2285     HMAC_CTX hctx;
2286     EVP_CIPHER_CTX ctx;
2287     SSL_CTX *tctx = s->initial_ctx;
2288
2289     /* Initialize session ticket encryption and HMAC contexts */
2290     HMAC_CTX_init(&hctx);
2291     EVP_CIPHER_CTX_init(&ctx);
2292     if (tctx->tlsext_ticket_key_cb) {
2293         unsigned char *nctick = (unsigned char *)etick;
2294         int rv = tctx->tlsext_ticket_key_cb(s, nctick, nctick + 16,
2295                                             &ctx, &hctx, 0);
2296         if (rv < 0)
2297             return -1;
2298         if (rv == 0)
2299             return 2;
2300         if (rv == 2)
2301             renew_ticket = 1;
2302     } else {
2303         /* Check key name matches */
2304         if (memcmp(etick, tctx->tlsext_tick_key_name, 16))
2305             return 2;
2306         HMAC_Init_ex(&hctx, tctx->tlsext_tick_hmac_key, 16,
2307                      tlsext_tick_md(), NULL);
2308         EVP_DecryptInit_ex(&ctx, EVP_aes_128_cbc(), NULL,
2309                            tctx->tlsext_tick_aes_key, etick + 16);
2310     }
2311     /*
2312      * Attempt to process session ticket, first conduct sanity and integrity
2313      * checks on ticket.
2314      */
2315     mlen = HMAC_size(&hctx);
2316     if (mlen < 0) {
2317         EVP_CIPHER_CTX_cleanup(&ctx);
2318         return -1;
2319     }
2320     /* Sanity check ticket length: must exceed keyname + IV + HMAC */
2321     if (eticklen <= 16 + EVP_CIPHER_CTX_iv_length(&ctx) + mlen) {
2322         HMAC_CTX_cleanup(&hctx);
2323         EVP_CIPHER_CTX_cleanup(&ctx);
2324         return 2;
2325     }
2326
2327     eticklen -= mlen;
2328     /* Check HMAC of encrypted ticket */
2329     HMAC_Update(&hctx, etick, eticklen);
2330     HMAC_Final(&hctx, tick_hmac, NULL);
2331     HMAC_CTX_cleanup(&hctx);
2332     if (CRYPTO_memcmp(tick_hmac, etick + eticklen, mlen)) {
2333         EVP_CIPHER_CTX_cleanup(&ctx);
2334         return 2;
2335     }
2336     /* Attempt to decrypt session data */
2337     /* Move p after IV to start of encrypted ticket, update length */
2338     p = etick + 16 + EVP_CIPHER_CTX_iv_length(&ctx);
2339     eticklen -= 16 + EVP_CIPHER_CTX_iv_length(&ctx);
2340     sdec = OPENSSL_malloc(eticklen);
2341     if (!sdec) {
2342         EVP_CIPHER_CTX_cleanup(&ctx);
2343         return -1;
2344     }
2345     EVP_DecryptUpdate(&ctx, sdec, &slen, p, eticklen);
2346     if (EVP_DecryptFinal(&ctx, sdec + slen, &mlen) <= 0) {
2347         EVP_CIPHER_CTX_cleanup(&ctx);
2348         OPENSSL_free(sdec);
2349         return 2;
2350     }
2351     slen += mlen;
2352     EVP_CIPHER_CTX_cleanup(&ctx);
2353     p = sdec;
2354
2355     sess = d2i_SSL_SESSION(NULL, &p, slen);
2356     OPENSSL_free(sdec);
2357     if (sess) {
2358         /*
2359          * The session ID, if non-empty, is used by some clients to detect
2360          * that the ticket has been accepted. So we copy it to the session
2361          * structure. If it is empty set length to zero as required by
2362          * standard.
2363          */
2364         if (sesslen)
2365             memcpy(sess->session_id, sess_id, sesslen);
2366         sess->session_id_length = sesslen;
2367         *psess = sess;
2368         if (renew_ticket)
2369             return 4;
2370         else
2371             return 3;
2372     }
2373     ERR_clear_error();
2374     /*
2375      * For session parse failure, indicate that we need to send a new ticket.
2376      */
2377     return 2;
2378 }
2379
2380 /* Tables to translate from NIDs to TLS v1.2 ids */
2381
2382 typedef struct {
2383     int nid;
2384     int id;
2385 } tls12_lookup;
2386
2387 static tls12_lookup tls12_md[] = {
2388 # ifndef OPENSSL_NO_MD5
2389     {NID_md5, TLSEXT_hash_md5},
2390 # endif
2391 # ifndef OPENSSL_NO_SHA
2392     {NID_sha1, TLSEXT_hash_sha1},
2393 # endif
2394 # ifndef OPENSSL_NO_SHA256
2395     {NID_sha224, TLSEXT_hash_sha224},
2396     {NID_sha256, TLSEXT_hash_sha256},
2397 # endif
2398 # ifndef OPENSSL_NO_SHA512
2399     {NID_sha384, TLSEXT_hash_sha384},
2400     {NID_sha512, TLSEXT_hash_sha512}
2401 # endif
2402 };
2403
2404 static tls12_lookup tls12_sig[] = {
2405 # ifndef OPENSSL_NO_RSA
2406     {EVP_PKEY_RSA, TLSEXT_signature_rsa},
2407 # endif
2408 # ifndef OPENSSL_NO_DSA
2409     {EVP_PKEY_DSA, TLSEXT_signature_dsa},
2410 # endif
2411 # ifndef OPENSSL_NO_ECDSA
2412     {EVP_PKEY_EC, TLSEXT_signature_ecdsa}
2413 # endif
2414 };
2415
2416 static int tls12_find_id(int nid, tls12_lookup *table, size_t tlen)
2417 {
2418     size_t i;
2419     for (i = 0; i < tlen; i++) {
2420         if (table[i].nid == nid)
2421             return table[i].id;
2422     }
2423     return -1;
2424 }
2425
2426 # if 0
2427 static int tls12_find_nid(int id, tls12_lookup *table, size_t tlen)
2428 {
2429     size_t i;
2430     for (i = 0; i < tlen; i++) {
2431         if (table[i].id == id)
2432             return table[i].nid;
2433     }
2434     return -1;
2435 }
2436 # endif
2437
2438 int tls12_get_sigandhash(unsigned char *p, const EVP_PKEY *pk,
2439                          const EVP_MD *md)
2440 {
2441     int sig_id, md_id;
2442     if (!md)
2443         return 0;
2444     md_id = tls12_find_id(EVP_MD_type(md), tls12_md,
2445                           sizeof(tls12_md) / sizeof(tls12_lookup));
2446     if (md_id == -1)
2447         return 0;
2448     sig_id = tls12_get_sigid(pk);
2449     if (sig_id == -1)
2450         return 0;
2451     p[0] = (unsigned char)md_id;
2452     p[1] = (unsigned char)sig_id;
2453     return 1;
2454 }
2455
2456 int tls12_get_sigid(const EVP_PKEY *pk)
2457 {
2458     return tls12_find_id(pk->type, tls12_sig,
2459                          sizeof(tls12_sig) / sizeof(tls12_lookup));
2460 }
2461
2462 const EVP_MD *tls12_get_hash(unsigned char hash_alg)
2463 {
2464     switch (hash_alg) {
2465 # ifndef OPENSSL_NO_SHA
2466     case TLSEXT_hash_sha1:
2467         return EVP_sha1();
2468 # endif
2469 # ifndef OPENSSL_NO_SHA256
2470     case TLSEXT_hash_sha224:
2471         return EVP_sha224();
2472
2473     case TLSEXT_hash_sha256:
2474         return EVP_sha256();
2475 # endif
2476 # ifndef OPENSSL_NO_SHA512
2477     case TLSEXT_hash_sha384:
2478         return EVP_sha384();
2479
2480     case TLSEXT_hash_sha512:
2481         return EVP_sha512();
2482 # endif
2483     default:
2484         return NULL;
2485
2486     }
2487 }
2488
2489 /* Set preferred digest for each key type */
2490
2491 int tls1_process_sigalgs(SSL *s, const unsigned char *data, int dsize)
2492 {
2493     int i, idx;
2494     const EVP_MD *md;
2495     CERT *c = s->cert;
2496     /* Extension ignored for TLS versions below 1.2 */
2497     if (TLS1_get_version(s) < TLS1_2_VERSION)
2498         return 1;
2499     /* Should never happen */
2500     if (!c)
2501         return 0;
2502
2503     c->pkeys[SSL_PKEY_DSA_SIGN].digest = NULL;
2504     c->pkeys[SSL_PKEY_RSA_SIGN].digest = NULL;
2505     c->pkeys[SSL_PKEY_RSA_ENC].digest = NULL;
2506     c->pkeys[SSL_PKEY_ECC].digest = NULL;
2507
2508     for (i = 0; i < dsize; i += 2) {
2509         unsigned char hash_alg = data[i], sig_alg = data[i + 1];
2510
2511         switch (sig_alg) {
2512 # ifndef OPENSSL_NO_RSA
2513         case TLSEXT_signature_rsa:
2514             idx = SSL_PKEY_RSA_SIGN;
2515             break;
2516 # endif
2517 # ifndef OPENSSL_NO_DSA
2518         case TLSEXT_signature_dsa:
2519             idx = SSL_PKEY_DSA_SIGN;
2520             break;
2521 # endif
2522 # ifndef OPENSSL_NO_ECDSA
2523         case TLSEXT_signature_ecdsa:
2524             idx = SSL_PKEY_ECC;
2525             break;
2526 # endif
2527         default:
2528             continue;
2529         }
2530
2531         if (c->pkeys[idx].digest == NULL) {
2532             md = tls12_get_hash(hash_alg);
2533             if (md) {
2534                 c->pkeys[idx].digest = md;
2535                 if (idx == SSL_PKEY_RSA_SIGN)
2536                     c->pkeys[SSL_PKEY_RSA_ENC].digest = md;
2537             }
2538         }
2539
2540     }
2541
2542     /*
2543      * Set any remaining keys to default values. NOTE: if alg is not
2544      * supported it stays as NULL.
2545      */
2546 # ifndef OPENSSL_NO_DSA
2547     if (!c->pkeys[SSL_PKEY_DSA_SIGN].digest)
2548         c->pkeys[SSL_PKEY_DSA_SIGN].digest = EVP_sha1();
2549 # endif
2550 # ifndef OPENSSL_NO_RSA
2551     if (!c->pkeys[SSL_PKEY_RSA_SIGN].digest) {
2552         c->pkeys[SSL_PKEY_RSA_SIGN].digest = EVP_sha1();
2553         c->pkeys[SSL_PKEY_RSA_ENC].digest = EVP_sha1();
2554     }
2555 # endif
2556 # ifndef OPENSSL_NO_ECDSA
2557     if (!c->pkeys[SSL_PKEY_ECC].digest)
2558         c->pkeys[SSL_PKEY_ECC].digest = EVP_sha1();
2559 # endif
2560     return 1;
2561 }
2562
2563 #endif
2564
2565 #ifndef OPENSSL_NO_HEARTBEATS
2566 int tls1_process_heartbeat(SSL *s)
2567 {
2568     unsigned char *p = &s->s3->rrec.data[0], *pl;
2569     unsigned short hbtype;
2570     unsigned int payload;
2571     unsigned int padding = 16;  /* Use minimum padding */
2572
2573     if (s->msg_callback)
2574         s->msg_callback(0, s->version, TLS1_RT_HEARTBEAT,
2575                         &s->s3->rrec.data[0], s->s3->rrec.length,
2576                         s, s->msg_callback_arg);
2577
2578     /* Read type and payload length first */
2579     if (1 + 2 + 16 > s->s3->rrec.length)
2580         return 0;               /* silently discard */
2581     hbtype = *p++;
2582     n2s(p, payload);
2583     if (1 + 2 + payload + 16 > s->s3->rrec.length)
2584         return 0;               /* silently discard per RFC 6520 sec. 4 */
2585     pl = p;
2586
2587     if (hbtype == TLS1_HB_REQUEST) {
2588         unsigned char *buffer, *bp;
2589         int r;
2590
2591         /*
2592          * Allocate memory for the response, size is 1 bytes message type,
2593          * plus 2 bytes payload length, plus payload, plus padding
2594          */
2595         buffer = OPENSSL_malloc(1 + 2 + payload + padding);
2596         bp = buffer;
2597
2598         /* Enter response type, length and copy payload */
2599         *bp++ = TLS1_HB_RESPONSE;
2600         s2n(payload, bp);
2601         memcpy(bp, pl, payload);
2602         bp += payload;
2603         /* Random padding */
2604         if (RAND_pseudo_bytes(bp, padding) < 0) {
2605             OPENSSL_free(buffer);
2606             return -1;
2607         }
2608
2609         r = ssl3_write_bytes(s, TLS1_RT_HEARTBEAT, buffer,
2610                              3 + payload + padding);
2611
2612         if (r >= 0 && s->msg_callback)
2613             s->msg_callback(1, s->version, TLS1_RT_HEARTBEAT,
2614                             buffer, 3 + payload + padding,
2615                             s, s->msg_callback_arg);
2616
2617         OPENSSL_free(buffer);
2618
2619         if (r < 0)
2620             return r;
2621     } else if (hbtype == TLS1_HB_RESPONSE) {
2622         unsigned int seq;
2623
2624         /*
2625          * We only send sequence numbers (2 bytes unsigned int), and 16
2626          * random bytes, so we just try to read the sequence number
2627          */
2628         n2s(pl, seq);
2629
2630         if (payload == 18 && seq == s->tlsext_hb_seq) {
2631             s->tlsext_hb_seq++;
2632             s->tlsext_hb_pending = 0;
2633         }
2634     }
2635
2636     return 0;
2637 }
2638
2639 int tls1_heartbeat(SSL *s)
2640 {
2641     unsigned char *buf, *p;
2642     int ret = -1;
2643     unsigned int payload = 18;  /* Sequence number + random bytes */
2644     unsigned int padding = 16;  /* Use minimum padding */
2645
2646     /* Only send if peer supports and accepts HB requests... */
2647     if (!(s->tlsext_heartbeat & SSL_TLSEXT_HB_ENABLED) ||
2648         s->tlsext_heartbeat & SSL_TLSEXT_HB_DONT_SEND_REQUESTS) {
2649         SSLerr(SSL_F_TLS1_HEARTBEAT, SSL_R_TLS_HEARTBEAT_PEER_DOESNT_ACCEPT);
2650         return -1;
2651     }
2652
2653     /* ...and there is none in flight yet... */
2654     if (s->tlsext_hb_pending) {
2655         SSLerr(SSL_F_TLS1_HEARTBEAT, SSL_R_TLS_HEARTBEAT_PENDING);
2656         return -1;
2657     }
2658
2659     /* ...and no handshake in progress. */
2660     if (SSL_in_init(s) || s->in_handshake) {
2661         SSLerr(SSL_F_TLS1_HEARTBEAT, SSL_R_UNEXPECTED_MESSAGE);
2662         return -1;
2663     }
2664
2665     /*
2666      * Check if padding is too long, payload and padding must not exceed 2^14
2667      * - 3 = 16381 bytes in total.
2668      */
2669     OPENSSL_assert(payload + padding <= 16381);
2670
2671     /*-
2672      * Create HeartBeat message, we just use a sequence number
2673      * as payload to distuingish different messages and add
2674      * some random stuff.
2675      *  - Message Type, 1 byte
2676      *  - Payload Length, 2 bytes (unsigned int)
2677      *  - Payload, the sequence number (2 bytes uint)
2678      *  - Payload, random bytes (16 bytes uint)
2679      *  - Padding
2680      */
2681     buf = OPENSSL_malloc(1 + 2 + payload + padding);
2682     p = buf;
2683     /* Message Type */
2684     *p++ = TLS1_HB_REQUEST;
2685     /* Payload length (18 bytes here) */
2686     s2n(payload, p);
2687     /* Sequence number */
2688     s2n(s->tlsext_hb_seq, p);
2689     /* 16 random bytes */
2690     if (RAND_pseudo_bytes(p, 16) < 0) {
2691         SSLerr(SSL_F_TLS1_HEARTBEAT, ERR_R_INTERNAL_ERROR);
2692         goto err;
2693     }
2694     p += 16;
2695     /* Random padding */
2696     if (RAND_pseudo_bytes(p, padding) < 0) {
2697         SSLerr(SSL_F_TLS1_HEARTBEAT, ERR_R_INTERNAL_ERROR);
2698         goto err;
2699     }
2700
2701     ret = ssl3_write_bytes(s, TLS1_RT_HEARTBEAT, buf, 3 + payload + padding);
2702     if (ret >= 0) {
2703         if (s->msg_callback)
2704             s->msg_callback(1, s->version, TLS1_RT_HEARTBEAT,
2705                             buf, 3 + payload + padding,
2706                             s, s->msg_callback_arg);
2707
2708         s->tlsext_hb_pending = 1;
2709     }
2710
2711 err:
2712     OPENSSL_free(buf);
2713
2714     return ret;
2715 }
2716 #endif