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