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