1 /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
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.
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).
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.
22 * Redistribution and use in source and binary forms, with or without
23 * modification, are permitted provided that the following conditions
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)"
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
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.]
57 /* ====================================================================
58 * Copyright (c) 1998-2007 The OpenSSL Project. All rights reserved.
60 * Redistribution and use in source and binary forms, with or without
61 * modification, are permitted provided that the following conditions
64 * 1. Redistributions of source code must retain the above copyright
65 * notice, this list of conditions and the following disclaimer.
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
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/)"
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.
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.
86 * 6. Redistributions of any form whatsoever must retain the following
88 * "This product includes software developed by the OpenSSL Project
89 * for use in the OpenSSL Toolkit (http://www.openssl.org/)"
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 * ====================================================================
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).
113 #include <openssl/objects.h>
114 #include <openssl/evp.h>
115 #include <openssl/hmac.h>
116 #include <openssl/ocsp.h>
117 #include <openssl/rand.h>
118 #include <openssl/dh.h>
119 #include <openssl/bn.h>
120 #include "ssl_locl.h"
121 #include <openssl/ct.h>
123 static int tls_decrypt_ticket(SSL *s, const unsigned char *tick, int ticklen,
124 const unsigned char *sess_id, int sesslen,
125 SSL_SESSION **psess);
126 static int ssl_check_clienthello_tlsext_early(SSL *s);
127 static int ssl_check_serverhello_tlsext(SSL *s);
129 SSL3_ENC_METHOD const TLSv1_enc_data = {
132 tls1_setup_key_block,
133 tls1_generate_master_secret,
134 tls1_change_cipher_state,
135 tls1_final_finish_mac,
136 TLS1_FINISH_MAC_LENGTH,
137 TLS_MD_CLIENT_FINISH_CONST, TLS_MD_CLIENT_FINISH_CONST_SIZE,
138 TLS_MD_SERVER_FINISH_CONST, TLS_MD_SERVER_FINISH_CONST_SIZE,
140 tls1_export_keying_material,
142 SSL3_HM_HEADER_LENGTH,
143 ssl3_set_handshake_header,
147 SSL3_ENC_METHOD const TLSv1_1_enc_data = {
150 tls1_setup_key_block,
151 tls1_generate_master_secret,
152 tls1_change_cipher_state,
153 tls1_final_finish_mac,
154 TLS1_FINISH_MAC_LENGTH,
155 TLS_MD_CLIENT_FINISH_CONST, TLS_MD_CLIENT_FINISH_CONST_SIZE,
156 TLS_MD_SERVER_FINISH_CONST, TLS_MD_SERVER_FINISH_CONST_SIZE,
158 tls1_export_keying_material,
159 SSL_ENC_FLAG_EXPLICIT_IV,
160 SSL3_HM_HEADER_LENGTH,
161 ssl3_set_handshake_header,
165 SSL3_ENC_METHOD const TLSv1_2_enc_data = {
168 tls1_setup_key_block,
169 tls1_generate_master_secret,
170 tls1_change_cipher_state,
171 tls1_final_finish_mac,
172 TLS1_FINISH_MAC_LENGTH,
173 TLS_MD_CLIENT_FINISH_CONST, TLS_MD_CLIENT_FINISH_CONST_SIZE,
174 TLS_MD_SERVER_FINISH_CONST, TLS_MD_SERVER_FINISH_CONST_SIZE,
176 tls1_export_keying_material,
177 SSL_ENC_FLAG_EXPLICIT_IV | SSL_ENC_FLAG_SIGALGS | SSL_ENC_FLAG_SHA256_PRF
178 | SSL_ENC_FLAG_TLS1_2_CIPHERS,
179 SSL3_HM_HEADER_LENGTH,
180 ssl3_set_handshake_header,
184 long tls1_default_timeout(void)
187 * 2 hours, the 24 hours mentioned in the TLSv1 spec is way too long for
188 * http, the cache would over fill
190 return (60 * 60 * 2);
197 s->method->ssl_clear(s);
201 void tls1_free(SSL *s)
203 OPENSSL_free(s->tlsext_session_ticket);
207 void tls1_clear(SSL *s)
210 if (s->method->version == TLS_ANY_VERSION)
211 s->version = TLS_MAX_VERSION;
213 s->version = s->method->version;
216 #ifndef OPENSSL_NO_EC
219 int nid; /* Curve NID */
220 int secbits; /* Bits of security (from SP800-57) */
221 unsigned int flags; /* Flags: currently just field type */
224 /* Mask for curve type */
225 # define TLS_CURVE_TYPE 0x3
226 # define TLS_CURVE_PRIME 0x0
227 # define TLS_CURVE_CHAR2 0x1
228 # define TLS_CURVE_CUSTOM 0x2
231 * Table of curve information.
232 * Do not delete entries or reorder this array! It is used as a lookup
233 * table: the index of each entry is one less than the TLS curve id.
235 static const tls_curve_info nid_list[] = {
236 {NID_sect163k1, 80, TLS_CURVE_CHAR2}, /* sect163k1 (1) */
237 {NID_sect163r1, 80, TLS_CURVE_CHAR2}, /* sect163r1 (2) */
238 {NID_sect163r2, 80, TLS_CURVE_CHAR2}, /* sect163r2 (3) */
239 {NID_sect193r1, 80, TLS_CURVE_CHAR2}, /* sect193r1 (4) */
240 {NID_sect193r2, 80, TLS_CURVE_CHAR2}, /* sect193r2 (5) */
241 {NID_sect233k1, 112, TLS_CURVE_CHAR2}, /* sect233k1 (6) */
242 {NID_sect233r1, 112, TLS_CURVE_CHAR2}, /* sect233r1 (7) */
243 {NID_sect239k1, 112, TLS_CURVE_CHAR2}, /* sect239k1 (8) */
244 {NID_sect283k1, 128, TLS_CURVE_CHAR2}, /* sect283k1 (9) */
245 {NID_sect283r1, 128, TLS_CURVE_CHAR2}, /* sect283r1 (10) */
246 {NID_sect409k1, 192, TLS_CURVE_CHAR2}, /* sect409k1 (11) */
247 {NID_sect409r1, 192, TLS_CURVE_CHAR2}, /* sect409r1 (12) */
248 {NID_sect571k1, 256, TLS_CURVE_CHAR2}, /* sect571k1 (13) */
249 {NID_sect571r1, 256, TLS_CURVE_CHAR2}, /* sect571r1 (14) */
250 {NID_secp160k1, 80, TLS_CURVE_PRIME}, /* secp160k1 (15) */
251 {NID_secp160r1, 80, TLS_CURVE_PRIME}, /* secp160r1 (16) */
252 {NID_secp160r2, 80, TLS_CURVE_PRIME}, /* secp160r2 (17) */
253 {NID_secp192k1, 80, TLS_CURVE_PRIME}, /* secp192k1 (18) */
254 {NID_X9_62_prime192v1, 80, TLS_CURVE_PRIME}, /* secp192r1 (19) */
255 {NID_secp224k1, 112, TLS_CURVE_PRIME}, /* secp224k1 (20) */
256 {NID_secp224r1, 112, TLS_CURVE_PRIME}, /* secp224r1 (21) */
257 {NID_secp256k1, 128, TLS_CURVE_PRIME}, /* secp256k1 (22) */
258 {NID_X9_62_prime256v1, 128, TLS_CURVE_PRIME}, /* secp256r1 (23) */
259 {NID_secp384r1, 192, TLS_CURVE_PRIME}, /* secp384r1 (24) */
260 {NID_secp521r1, 256, TLS_CURVE_PRIME}, /* secp521r1 (25) */
261 {NID_brainpoolP256r1, 128, TLS_CURVE_PRIME}, /* brainpoolP256r1 (26) */
262 {NID_brainpoolP384r1, 192, TLS_CURVE_PRIME}, /* brainpoolP384r1 (27) */
263 {NID_brainpoolP512r1, 256, TLS_CURVE_PRIME}, /* brainpool512r1 (28) */
265 {NID_X25519, 128, TLS_CURVE_CUSTOM},
268 static const unsigned char ecformats_default[] = {
269 TLSEXT_ECPOINTFORMAT_uncompressed,
270 TLSEXT_ECPOINTFORMAT_ansiX962_compressed_prime,
271 TLSEXT_ECPOINTFORMAT_ansiX962_compressed_char2
274 /* The default curves */
275 static const unsigned char eccurves_default[] = {
276 0, 29, /* X25519 (29) */
277 0, 23, /* secp256r1 (23) */
278 0, 25, /* secp521r1 (25) */
279 0, 24, /* secp384r1 (24) */
282 static const unsigned char eccurves_all[] = {
283 0, 29, /* X25519 (29) */
284 0, 23, /* secp256r1 (23) */
285 0, 25, /* secp521r1 (25) */
286 0, 24, /* secp384r1 (24) */
287 0, 26, /* brainpoolP256r1 (26) */
288 0, 27, /* brainpoolP384r1 (27) */
289 0, 28, /* brainpool512r1 (28) */
292 * Remaining curves disabled by default but still permitted if set
293 * via an explicit callback or parameters.
295 0, 22, /* secp256k1 (22) */
296 0, 14, /* sect571r1 (14) */
297 0, 13, /* sect571k1 (13) */
298 0, 11, /* sect409k1 (11) */
299 0, 12, /* sect409r1 (12) */
300 0, 9, /* sect283k1 (9) */
301 0, 10, /* sect283r1 (10) */
302 0, 20, /* secp224k1 (20) */
303 0, 21, /* secp224r1 (21) */
304 0, 18, /* secp192k1 (18) */
305 0, 19, /* secp192r1 (19) */
306 0, 15, /* secp160k1 (15) */
307 0, 16, /* secp160r1 (16) */
308 0, 17, /* secp160r2 (17) */
309 0, 8, /* sect239k1 (8) */
310 0, 6, /* sect233k1 (6) */
311 0, 7, /* sect233r1 (7) */
312 0, 4, /* sect193r1 (4) */
313 0, 5, /* sect193r2 (5) */
314 0, 1, /* sect163k1 (1) */
315 0, 2, /* sect163r1 (2) */
316 0, 3, /* sect163r2 (3) */
320 static const unsigned char suiteb_curves[] = {
321 0, TLSEXT_curve_P_256,
322 0, TLSEXT_curve_P_384
325 int tls1_ec_curve_id2nid(int curve_id)
327 /* ECC curves from RFC 4492 and RFC 7027 */
328 if ((curve_id < 1) || ((unsigned int)curve_id > OSSL_NELEM(nid_list)))
330 return nid_list[curve_id - 1].nid;
333 int tls1_ec_nid2curve_id(int nid)
336 for (i = 0; i < OSSL_NELEM(nid_list); i++) {
337 if (nid_list[i].nid == nid)
344 * Get curves list, if "sess" is set return client curves otherwise
346 * Sets |num_curves| to the number of curves in the list, i.e.,
347 * the length of |pcurves| is 2 * num_curves.
348 * Returns 1 on success and 0 if the client curves list has invalid format.
349 * The latter indicates an internal error: we should not be accepting such
350 * lists in the first place.
351 * TODO(emilia): we should really be storing the curves list in explicitly
352 * parsed form instead. (However, this would affect binary compatibility
353 * so cannot happen in the 1.0.x series.)
355 static int tls1_get_curvelist(SSL *s, int sess,
356 const unsigned char **pcurves,
359 size_t pcurveslen = 0;
361 *pcurves = s->session->tlsext_ellipticcurvelist;
362 pcurveslen = s->session->tlsext_ellipticcurvelist_length;
364 /* For Suite B mode only include P-256, P-384 */
365 switch (tls1_suiteb(s)) {
366 case SSL_CERT_FLAG_SUITEB_128_LOS:
367 *pcurves = suiteb_curves;
368 pcurveslen = sizeof(suiteb_curves);
371 case SSL_CERT_FLAG_SUITEB_128_LOS_ONLY:
372 *pcurves = suiteb_curves;
376 case SSL_CERT_FLAG_SUITEB_192_LOS:
377 *pcurves = suiteb_curves + 2;
381 *pcurves = s->tlsext_ellipticcurvelist;
382 pcurveslen = s->tlsext_ellipticcurvelist_length;
385 *pcurves = eccurves_default;
386 pcurveslen = sizeof(eccurves_default);
390 /* We do not allow odd length arrays to enter the system. */
391 if (pcurveslen & 1) {
392 SSLerr(SSL_F_TLS1_GET_CURVELIST, ERR_R_INTERNAL_ERROR);
396 *num_curves = pcurveslen / 2;
401 /* See if curve is allowed by security callback */
402 static int tls_curve_allowed(SSL *s, const unsigned char *curve, int op)
404 const tls_curve_info *cinfo;
407 if ((curve[1] < 1) || ((size_t)curve[1] > OSSL_NELEM(nid_list)))
409 cinfo = &nid_list[curve[1] - 1];
410 # ifdef OPENSSL_NO_EC2M
411 if (cinfo->flags & TLS_CURVE_CHAR2)
414 return ssl_security(s, op, cinfo->secbits, cinfo->nid, (void *)curve);
417 /* Check a curve is one of our preferences */
418 int tls1_check_curve(SSL *s, const unsigned char *p, size_t len)
420 const unsigned char *curves;
421 size_t num_curves, i;
422 unsigned int suiteb_flags = tls1_suiteb(s);
423 if (len != 3 || p[0] != NAMED_CURVE_TYPE)
425 /* Check curve matches Suite B preferences */
427 unsigned long cid = s->s3->tmp.new_cipher->id;
430 if (cid == TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256) {
431 if (p[2] != TLSEXT_curve_P_256)
433 } else if (cid == TLS1_CK_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384) {
434 if (p[2] != TLSEXT_curve_P_384)
436 } else /* Should never happen */
439 if (!tls1_get_curvelist(s, 0, &curves, &num_curves))
441 for (i = 0; i < num_curves; i++, curves += 2) {
442 if (p[1] == curves[0] && p[2] == curves[1])
443 return tls_curve_allowed(s, p + 1, SSL_SECOP_CURVE_CHECK);
449 * For nmatch >= 0, return the NID of the |nmatch|th shared curve or NID_undef
450 * if there is no match.
451 * For nmatch == -1, return number of matches
452 * For nmatch == -2, return the NID of the curve to use for
453 * an EC tmp key, or NID_undef if there is no match.
455 int tls1_shared_curve(SSL *s, int nmatch)
457 const unsigned char *pref, *supp;
458 size_t num_pref, num_supp, i, j;
460 /* Can't do anything on client side */
464 if (tls1_suiteb(s)) {
466 * For Suite B ciphersuite determines curve: we already know
467 * these are acceptable due to previous checks.
469 unsigned long cid = s->s3->tmp.new_cipher->id;
470 if (cid == TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256)
471 return NID_X9_62_prime256v1; /* P-256 */
472 if (cid == TLS1_CK_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384)
473 return NID_secp384r1; /* P-384 */
474 /* Should never happen */
477 /* If not Suite B just return first preference shared curve */
481 * Avoid truncation. tls1_get_curvelist takes an int
482 * but s->options is a long...
484 if (!tls1_get_curvelist
485 (s, (s->options & SSL_OP_CIPHER_SERVER_PREFERENCE) != 0, &supp,
487 /* In practice, NID_undef == 0 but let's be precise. */
488 return nmatch == -1 ? 0 : NID_undef;
489 if (!tls1_get_curvelist
490 (s, !(s->options & SSL_OP_CIPHER_SERVER_PREFERENCE), &pref,
492 return nmatch == -1 ? 0 : NID_undef;
495 * If the client didn't send the elliptic_curves extension all of them
498 if (num_supp == 0 && (s->options & SSL_OP_CIPHER_SERVER_PREFERENCE) != 0) {
500 num_supp = sizeof(eccurves_all) / 2;
501 } else if (num_pref == 0 &&
502 (s->options & SSL_OP_CIPHER_SERVER_PREFERENCE) == 0) {
504 num_pref = sizeof(eccurves_all) / 2;
508 for (i = 0; i < num_pref; i++, pref += 2) {
509 const unsigned char *tsupp = supp;
510 for (j = 0; j < num_supp; j++, tsupp += 2) {
511 if (pref[0] == tsupp[0] && pref[1] == tsupp[1]) {
512 if (!tls_curve_allowed(s, pref, SSL_SECOP_CURVE_SHARED))
515 int id = (pref[0] << 8) | pref[1];
516 return tls1_ec_curve_id2nid(id);
524 /* Out of range (nmatch > k). */
528 int tls1_set_curves(unsigned char **pext, size_t *pextlen,
529 int *curves, size_t ncurves)
531 unsigned char *clist, *p;
534 * Bitmap of curves included to detect duplicates: only works while curve
537 unsigned long dup_list = 0;
538 clist = OPENSSL_malloc(ncurves * 2);
541 for (i = 0, p = clist; i < ncurves; i++) {
542 unsigned long idmask;
544 id = tls1_ec_nid2curve_id(curves[i]);
546 if (!id || (dup_list & idmask)) {
555 *pextlen = ncurves * 2;
559 # define MAX_CURVELIST 28
563 int nid_arr[MAX_CURVELIST];
566 static int nid_cb(const char *elem, int len, void *arg)
568 nid_cb_st *narg = arg;
574 if (narg->nidcnt == MAX_CURVELIST)
576 if (len > (int)(sizeof(etmp) - 1))
578 memcpy(etmp, elem, len);
580 nid = EC_curve_nist2nid(etmp);
581 if (nid == NID_undef)
582 nid = OBJ_sn2nid(etmp);
583 if (nid == NID_undef)
584 nid = OBJ_ln2nid(etmp);
585 if (nid == NID_undef)
587 for (i = 0; i < narg->nidcnt; i++)
588 if (narg->nid_arr[i] == nid)
590 narg->nid_arr[narg->nidcnt++] = nid;
594 /* Set curves based on a colon separate list */
595 int tls1_set_curves_list(unsigned char **pext, size_t *pextlen,
600 if (!CONF_parse_list(str, ':', 1, nid_cb, &ncb))
604 return tls1_set_curves(pext, pextlen, ncb.nid_arr, ncb.nidcnt);
607 /* For an EC key set TLS id and required compression based on parameters */
608 static int tls1_set_ec_id(unsigned char *curve_id, unsigned char *comp_id,
615 /* Determine if it is a prime field */
616 grp = EC_KEY_get0_group(ec);
619 /* Determine curve ID */
620 id = EC_GROUP_get_curve_name(grp);
621 id = tls1_ec_nid2curve_id(id);
622 /* If no id return error: we don't support arbitrary explicit curves */
626 curve_id[1] = (unsigned char)id;
628 if (EC_KEY_get0_public_key(ec) == NULL)
630 if (EC_KEY_get_conv_form(ec) == POINT_CONVERSION_UNCOMPRESSED) {
631 *comp_id = TLSEXT_ECPOINTFORMAT_uncompressed;
633 if ((nid_list[id - 1].flags & TLS_CURVE_TYPE) == TLS_CURVE_PRIME)
634 *comp_id = TLSEXT_ECPOINTFORMAT_ansiX962_compressed_prime;
636 *comp_id = TLSEXT_ECPOINTFORMAT_ansiX962_compressed_char2;
642 /* Check an EC key is compatible with extensions */
643 static int tls1_check_ec_key(SSL *s,
644 unsigned char *curve_id, unsigned char *comp_id)
646 const unsigned char *pformats, *pcurves;
647 size_t num_formats, num_curves, i;
650 * If point formats extension present check it, otherwise everything is
651 * supported (see RFC4492).
653 if (comp_id && s->session->tlsext_ecpointformatlist) {
654 pformats = s->session->tlsext_ecpointformatlist;
655 num_formats = s->session->tlsext_ecpointformatlist_length;
656 for (i = 0; i < num_formats; i++, pformats++) {
657 if (*comp_id == *pformats)
660 if (i == num_formats)
665 /* Check curve is consistent with client and server preferences */
666 for (j = 0; j <= 1; j++) {
667 if (!tls1_get_curvelist(s, j, &pcurves, &num_curves))
669 if (j == 1 && num_curves == 0) {
671 * If we've not received any curves then skip this check.
672 * RFC 4492 does not require the supported elliptic curves extension
673 * so if it is not sent we can just choose any curve.
674 * It is invalid to send an empty list in the elliptic curves
675 * extension, so num_curves == 0 always means no extension.
679 for (i = 0; i < num_curves; i++, pcurves += 2) {
680 if (pcurves[0] == curve_id[0] && pcurves[1] == curve_id[1])
685 /* For clients can only check sent curve list */
692 static void tls1_get_formatlist(SSL *s, const unsigned char **pformats,
696 * If we have a custom point format list use it otherwise use default
698 if (s->tlsext_ecpointformatlist) {
699 *pformats = s->tlsext_ecpointformatlist;
700 *num_formats = s->tlsext_ecpointformatlist_length;
702 *pformats = ecformats_default;
703 /* For Suite B we don't support char2 fields */
705 *num_formats = sizeof(ecformats_default) - 1;
707 *num_formats = sizeof(ecformats_default);
712 * Check cert parameters compatible with extensions: currently just checks EC
713 * certificates have compatible curves and compression.
715 static int tls1_check_cert_param(SSL *s, X509 *x, int set_ee_md)
717 unsigned char comp_id, curve_id[2];
720 pkey = X509_get0_pubkey(x);
723 /* If not EC nothing to do */
724 if (EVP_PKEY_id(pkey) != EVP_PKEY_EC)
726 rv = tls1_set_ec_id(curve_id, &comp_id, EVP_PKEY_get0_EC_KEY(pkey));
730 * Can't check curve_id for client certs as we don't have a supported
733 rv = tls1_check_ec_key(s, s->server ? curve_id : NULL, &comp_id);
737 * Special case for suite B. We *MUST* sign using SHA256+P-256 or
738 * SHA384+P-384, adjust digest if necessary.
740 if (set_ee_md && tls1_suiteb(s)) {
746 /* Check to see we have necessary signing algorithm */
747 if (curve_id[1] == TLSEXT_curve_P_256)
748 check_md = NID_ecdsa_with_SHA256;
749 else if (curve_id[1] == TLSEXT_curve_P_384)
750 check_md = NID_ecdsa_with_SHA384;
752 return 0; /* Should never happen */
753 for (i = 0; i < c->shared_sigalgslen; i++)
754 if (check_md == c->shared_sigalgs[i].signandhash_nid)
756 if (i == c->shared_sigalgslen)
758 if (set_ee_md == 2) {
759 if (check_md == NID_ecdsa_with_SHA256)
760 s->s3->tmp.md[SSL_PKEY_ECC] = EVP_sha256();
762 s->s3->tmp.md[SSL_PKEY_ECC] = EVP_sha384();
768 # ifndef OPENSSL_NO_EC
770 * tls1_check_ec_tmp_key - Check EC temporary key compatiblity
772 * @cid: Cipher ID we're considering using
774 * Checks that the kECDHE cipher suite we're considering using
775 * is compatible with the client extensions.
777 * Returns 0 when the cipher can't be used or 1 when it can.
779 int tls1_check_ec_tmp_key(SSL *s, unsigned long cid)
782 * If Suite B, AES128 MUST use P-256 and AES256 MUST use P-384, no other
785 if (tls1_suiteb(s)) {
786 unsigned char curve_id[2];
787 /* Curve to check determined by ciphersuite */
788 if (cid == TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256)
789 curve_id[1] = TLSEXT_curve_P_256;
790 else if (cid == TLS1_CK_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384)
791 curve_id[1] = TLSEXT_curve_P_384;
795 /* Check this curve is acceptable */
796 if (!tls1_check_ec_key(s, curve_id, NULL))
800 /* Need a shared curve */
801 if (tls1_shared_curve(s, 0))
805 # endif /* OPENSSL_NO_EC */
809 static int tls1_check_cert_param(SSL *s, X509 *x, int set_ee_md)
814 #endif /* OPENSSL_NO_EC */
817 * List of supported signature algorithms and hashes. Should make this
818 * customisable at some point, for now include everything we support.
821 #ifdef OPENSSL_NO_RSA
822 # define tlsext_sigalg_rsa(md) /* */
824 # define tlsext_sigalg_rsa(md) md, TLSEXT_signature_rsa,
827 #ifdef OPENSSL_NO_DSA
828 # define tlsext_sigalg_dsa(md) /* */
830 # define tlsext_sigalg_dsa(md) md, TLSEXT_signature_dsa,
834 # define tlsext_sigalg_ecdsa(md) /* */
836 # define tlsext_sigalg_ecdsa(md) md, TLSEXT_signature_ecdsa,
839 #define tlsext_sigalg(md) \
840 tlsext_sigalg_rsa(md) \
841 tlsext_sigalg_dsa(md) \
842 tlsext_sigalg_ecdsa(md)
844 static const unsigned char tls12_sigalgs[] = {
845 tlsext_sigalg(TLSEXT_hash_sha512)
846 tlsext_sigalg(TLSEXT_hash_sha384)
847 tlsext_sigalg(TLSEXT_hash_sha256)
848 tlsext_sigalg(TLSEXT_hash_sha224)
849 tlsext_sigalg(TLSEXT_hash_sha1)
850 #ifndef OPENSSL_NO_GOST
851 TLSEXT_hash_gostr3411, TLSEXT_signature_gostr34102001,
852 TLSEXT_hash_gostr34112012_256, TLSEXT_signature_gostr34102012_256,
853 TLSEXT_hash_gostr34112012_512, TLSEXT_signature_gostr34102012_512
857 #ifndef OPENSSL_NO_EC
858 static const unsigned char suiteb_sigalgs[] = {
859 tlsext_sigalg_ecdsa(TLSEXT_hash_sha256)
860 tlsext_sigalg_ecdsa(TLSEXT_hash_sha384)
863 size_t tls12_get_psigalgs(SSL *s, const unsigned char **psigs)
866 * If Suite B mode use Suite B sigalgs only, ignore any other
869 #ifndef OPENSSL_NO_EC
870 switch (tls1_suiteb(s)) {
871 case SSL_CERT_FLAG_SUITEB_128_LOS:
872 *psigs = suiteb_sigalgs;
873 return sizeof(suiteb_sigalgs);
875 case SSL_CERT_FLAG_SUITEB_128_LOS_ONLY:
876 *psigs = suiteb_sigalgs;
879 case SSL_CERT_FLAG_SUITEB_192_LOS:
880 *psigs = suiteb_sigalgs + 2;
884 /* If server use client authentication sigalgs if not NULL */
885 if (s->server && s->cert->client_sigalgs) {
886 *psigs = s->cert->client_sigalgs;
887 return s->cert->client_sigalgslen;
888 } else if (s->cert->conf_sigalgs) {
889 *psigs = s->cert->conf_sigalgs;
890 return s->cert->conf_sigalgslen;
892 *psigs = tls12_sigalgs;
893 return sizeof(tls12_sigalgs);
898 * Check signature algorithm is consistent with sent supported signature
899 * algorithms and if so return relevant digest.
901 int tls12_check_peer_sigalg(const EVP_MD **pmd, SSL *s,
902 const unsigned char *sig, EVP_PKEY *pkey)
904 const unsigned char *sent_sigs;
905 size_t sent_sigslen, i;
906 int sigalg = tls12_get_sigid(pkey);
907 /* Should never happen */
910 /* Check key type is consistent with signature */
911 if (sigalg != (int)sig[1]) {
912 SSLerr(SSL_F_TLS12_CHECK_PEER_SIGALG, SSL_R_WRONG_SIGNATURE_TYPE);
915 #ifndef OPENSSL_NO_EC
916 if (EVP_PKEY_id(pkey) == EVP_PKEY_EC) {
917 unsigned char curve_id[2], comp_id;
918 /* Check compression and curve matches extensions */
919 if (!tls1_set_ec_id(curve_id, &comp_id, EVP_PKEY_get0_EC_KEY(pkey)))
921 if (!s->server && !tls1_check_ec_key(s, curve_id, &comp_id)) {
922 SSLerr(SSL_F_TLS12_CHECK_PEER_SIGALG, SSL_R_WRONG_CURVE);
925 /* If Suite B only P-384+SHA384 or P-256+SHA-256 allowed */
926 if (tls1_suiteb(s)) {
929 if (curve_id[1] == TLSEXT_curve_P_256) {
930 if (sig[0] != TLSEXT_hash_sha256) {
931 SSLerr(SSL_F_TLS12_CHECK_PEER_SIGALG,
932 SSL_R_ILLEGAL_SUITEB_DIGEST);
935 } else if (curve_id[1] == TLSEXT_curve_P_384) {
936 if (sig[0] != TLSEXT_hash_sha384) {
937 SSLerr(SSL_F_TLS12_CHECK_PEER_SIGALG,
938 SSL_R_ILLEGAL_SUITEB_DIGEST);
944 } else if (tls1_suiteb(s))
948 /* Check signature matches a type we sent */
949 sent_sigslen = tls12_get_psigalgs(s, &sent_sigs);
950 for (i = 0; i < sent_sigslen; i += 2, sent_sigs += 2) {
951 if (sig[0] == sent_sigs[0] && sig[1] == sent_sigs[1])
954 /* Allow fallback to SHA1 if not strict mode */
955 if (i == sent_sigslen
956 && (sig[0] != TLSEXT_hash_sha1
957 || s->cert->cert_flags & SSL_CERT_FLAGS_CHECK_TLS_STRICT)) {
958 SSLerr(SSL_F_TLS12_CHECK_PEER_SIGALG, SSL_R_WRONG_SIGNATURE_TYPE);
961 *pmd = tls12_get_hash(sig[0]);
963 SSLerr(SSL_F_TLS12_CHECK_PEER_SIGALG, SSL_R_UNKNOWN_DIGEST);
966 /* Make sure security callback allows algorithm */
967 if (!ssl_security(s, SSL_SECOP_SIGALG_CHECK,
968 EVP_MD_size(*pmd) * 4, EVP_MD_type(*pmd),
970 SSLerr(SSL_F_TLS12_CHECK_PEER_SIGALG, SSL_R_WRONG_SIGNATURE_TYPE);
974 * Store the digest used so applications can retrieve it if they wish.
976 s->s3->tmp.peer_md = *pmd;
981 * Set a mask of disabled algorithms: an algorithm is disabled if it isn't
982 * supported, doesn't appear in supported signature algorithms, isn't supported
983 * by the enabled protocol versions or by the security level.
985 * This function should only be used for checking which ciphers are supported
988 * Call ssl_cipher_disabled() to check that it's enabled or not.
990 void ssl_set_client_disabled(SSL *s)
992 s->s3->tmp.mask_a = 0;
993 s->s3->tmp.mask_k = 0;
994 ssl_set_sig_mask(&s->s3->tmp.mask_a, s, SSL_SECOP_SIGALG_MASK);
995 ssl_get_client_min_max_version(s, &s->s3->tmp.min_ver, &s->s3->tmp.max_ver);
996 # ifndef OPENSSL_NO_PSK
997 /* with PSK there must be client callback set */
998 if (!s->psk_client_callback) {
999 s->s3->tmp.mask_a |= SSL_aPSK;
1000 s->s3->tmp.mask_k |= SSL_PSK;
1002 #endif /* OPENSSL_NO_PSK */
1003 #ifndef OPENSSL_NO_SRP
1004 if (!(s->srp_ctx.srp_Mask & SSL_kSRP)) {
1005 s->s3->tmp.mask_a |= SSL_aSRP;
1006 s->s3->tmp.mask_k |= SSL_kSRP;
1012 * ssl_cipher_disabled - check that a cipher is disabled or not
1013 * @s: SSL connection that you want to use the cipher on
1014 * @c: cipher to check
1015 * @op: Security check that you want to do
1017 * Returns 1 when it's disabled, 0 when enabled.
1019 int ssl_cipher_disabled(SSL *s, const SSL_CIPHER *c, int op)
1021 if (c->algorithm_mkey & s->s3->tmp.mask_k
1022 || c->algorithm_auth & s->s3->tmp.mask_a)
1024 if (s->s3->tmp.max_ver == 0)
1026 if (!SSL_IS_DTLS(s) && ((c->min_tls > s->s3->tmp.max_ver)
1027 || (c->max_tls < s->s3->tmp.min_ver)))
1029 if (SSL_IS_DTLS(s) && (DTLS_VERSION_GT(c->min_dtls, s->s3->tmp.max_ver)
1030 || DTLS_VERSION_LT(c->max_dtls, s->s3->tmp.min_ver)))
1033 return !ssl_security(s, op, c->strength_bits, 0, (void *)c);
1036 static int tls_use_ticket(SSL *s)
1038 if (s->options & SSL_OP_NO_TICKET)
1040 return ssl_security(s, SSL_SECOP_TICKET, 0, 0, NULL);
1043 static int compare_uint(const void *p1, const void *p2) {
1044 unsigned int u1 = *((const unsigned int *)p1);
1045 unsigned int u2 = *((const unsigned int *)p2);
1055 * Per http://tools.ietf.org/html/rfc5246#section-7.4.1.4, there may not be
1056 * more than one extension of the same type in a ClientHello or ServerHello.
1057 * This function does an initial scan over the extensions block to filter those
1058 * out. It returns 1 if all extensions are unique, and 0 if the extensions
1059 * contain duplicates, could not be successfully parsed, or an internal error
1062 static int tls1_check_duplicate_extensions(const PACKET *packet) {
1063 PACKET extensions = *packet;
1064 size_t num_extensions = 0, i = 0;
1065 unsigned int *extension_types = NULL;
1068 /* First pass: count the extensions. */
1069 while (PACKET_remaining(&extensions) > 0) {
1072 if (!PACKET_get_net_2(&extensions, &type) ||
1073 !PACKET_get_length_prefixed_2(&extensions, &extension)) {
1079 if (num_extensions <= 1)
1082 extension_types = OPENSSL_malloc(sizeof(unsigned int) * num_extensions);
1083 if (extension_types == NULL) {
1084 SSLerr(SSL_F_TLS1_CHECK_DUPLICATE_EXTENSIONS, ERR_R_MALLOC_FAILURE);
1088 /* Second pass: gather the extension types. */
1089 extensions = *packet;
1090 for (i = 0; i < num_extensions; i++) {
1092 if (!PACKET_get_net_2(&extensions, &extension_types[i]) ||
1093 !PACKET_get_length_prefixed_2(&extensions, &extension)) {
1094 /* This should not happen. */
1095 SSLerr(SSL_F_TLS1_CHECK_DUPLICATE_EXTENSIONS, ERR_R_INTERNAL_ERROR);
1100 if (PACKET_remaining(&extensions) != 0) {
1101 SSLerr(SSL_F_TLS1_CHECK_DUPLICATE_EXTENSIONS, ERR_R_INTERNAL_ERROR);
1104 /* Sort the extensions and make sure there are no duplicates. */
1105 qsort(extension_types, num_extensions, sizeof(unsigned int), compare_uint);
1106 for (i = 1; i < num_extensions; i++) {
1107 if (extension_types[i - 1] == extension_types[i])
1112 OPENSSL_free(extension_types);
1116 unsigned char *ssl_add_clienthello_tlsext(SSL *s, unsigned char *buf,
1117 unsigned char *limit, int *al)
1120 unsigned char *orig = buf;
1121 unsigned char *ret = buf;
1122 #ifndef OPENSSL_NO_EC
1123 /* See if we support any ECC ciphersuites */
1125 if (s->version >= TLS1_VERSION || SSL_IS_DTLS(s)) {
1127 unsigned long alg_k, alg_a;
1128 STACK_OF(SSL_CIPHER) *cipher_stack = SSL_get_ciphers(s);
1130 for (i = 0; i < sk_SSL_CIPHER_num(cipher_stack); i++) {
1131 const SSL_CIPHER *c = sk_SSL_CIPHER_value(cipher_stack, i);
1133 alg_k = c->algorithm_mkey;
1134 alg_a = c->algorithm_auth;
1135 if ((alg_k & (SSL_kECDHE | SSL_kECDHEPSK))
1136 || (alg_a & SSL_aECDSA)) {
1147 return NULL; /* this really never occurs, but ... */
1149 /* Add RI if renegotiating */
1150 if (s->renegotiate) {
1153 if (!ssl_add_clienthello_renegotiate_ext(s, 0, &el, 0)) {
1154 SSLerr(SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT, ERR_R_INTERNAL_ERROR);
1158 if ((limit - ret - 4 - el) < 0)
1161 s2n(TLSEXT_TYPE_renegotiate, ret);
1164 if (!ssl_add_clienthello_renegotiate_ext(s, ret, &el, el)) {
1165 SSLerr(SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT, ERR_R_INTERNAL_ERROR);
1171 /* Only add RI for SSLv3 */
1172 if (s->client_version == SSL3_VERSION)
1175 if (s->tlsext_hostname != NULL) {
1176 /* Add TLS extension servername to the Client Hello message */
1177 unsigned long size_str;
1181 * check for enough space.
1182 * 4 for the servername type and entension length
1183 * 2 for servernamelist length
1184 * 1 for the hostname type
1185 * 2 for hostname length
1189 if ((lenmax = limit - ret - 9) < 0
1191 strlen(s->tlsext_hostname)) > (unsigned long)lenmax)
1194 /* extension type and length */
1195 s2n(TLSEXT_TYPE_server_name, ret);
1196 s2n(size_str + 5, ret);
1198 /* length of servername list */
1199 s2n(size_str + 3, ret);
1201 /* hostname type, length and hostname */
1202 *(ret++) = (unsigned char)TLSEXT_NAMETYPE_host_name;
1204 memcpy(ret, s->tlsext_hostname, size_str);
1207 #ifndef OPENSSL_NO_SRP
1208 /* Add SRP username if there is one */
1209 if (s->srp_ctx.login != NULL) { /* Add TLS extension SRP username to the
1210 * Client Hello message */
1212 int login_len = strlen(s->srp_ctx.login);
1213 if (login_len > 255 || login_len == 0) {
1214 SSLerr(SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT, ERR_R_INTERNAL_ERROR);
1219 * check for enough space.
1220 * 4 for the srp type type and entension length
1221 * 1 for the srp user identity
1222 * + srp user identity length
1224 if ((limit - ret - 5 - login_len) < 0)
1227 /* fill in the extension */
1228 s2n(TLSEXT_TYPE_srp, ret);
1229 s2n(login_len + 1, ret);
1230 (*ret++) = (unsigned char)login_len;
1231 memcpy(ret, s->srp_ctx.login, login_len);
1236 #ifndef OPENSSL_NO_EC
1239 * Add TLS extension ECPointFormats to the ClientHello message
1242 const unsigned char *pcurves, *pformats;
1243 size_t num_curves, num_formats, curves_list_len;
1245 unsigned char *etmp;
1247 tls1_get_formatlist(s, &pformats, &num_formats);
1249 if ((lenmax = limit - ret - 5) < 0)
1251 if (num_formats > (size_t)lenmax)
1253 if (num_formats > 255) {
1254 SSLerr(SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT, ERR_R_INTERNAL_ERROR);
1258 s2n(TLSEXT_TYPE_ec_point_formats, ret);
1259 /* The point format list has 1-byte length. */
1260 s2n(num_formats + 1, ret);
1261 *(ret++) = (unsigned char)num_formats;
1262 memcpy(ret, pformats, num_formats);
1266 * Add TLS extension EllipticCurves to the ClientHello message
1268 pcurves = s->tlsext_ellipticcurvelist;
1269 if (!tls1_get_curvelist(s, 0, &pcurves, &num_curves))
1272 if ((lenmax = limit - ret - 6) < 0)
1274 if (num_curves > (size_t)lenmax / 2)
1276 if (num_curves > 65532 / 2) {
1277 SSLerr(SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT, ERR_R_INTERNAL_ERROR);
1281 s2n(TLSEXT_TYPE_elliptic_curves, ret);
1283 /* Copy curve ID if supported */
1284 for (i = 0; i < num_curves; i++, pcurves += 2) {
1285 if (tls_curve_allowed(s, pcurves, SSL_SECOP_CURVE_SUPPORTED)) {
1286 *etmp++ = pcurves[0];
1287 *etmp++ = pcurves[1];
1291 curves_list_len = etmp - ret - 4;
1293 s2n(curves_list_len + 2, ret);
1294 s2n(curves_list_len, ret);
1295 ret += curves_list_len;
1297 #endif /* OPENSSL_NO_EC */
1299 if (tls_use_ticket(s)) {
1301 if (!s->new_session && s->session && s->session->tlsext_tick)
1302 ticklen = s->session->tlsext_ticklen;
1303 else if (s->session && s->tlsext_session_ticket &&
1304 s->tlsext_session_ticket->data) {
1305 ticklen = s->tlsext_session_ticket->length;
1306 s->session->tlsext_tick = OPENSSL_malloc(ticklen);
1307 if (s->session->tlsext_tick == NULL)
1309 memcpy(s->session->tlsext_tick,
1310 s->tlsext_session_ticket->data, ticklen);
1311 s->session->tlsext_ticklen = ticklen;
1314 if (ticklen == 0 && s->tlsext_session_ticket &&
1315 s->tlsext_session_ticket->data == NULL)
1318 * Check for enough room 2 for extension type, 2 for len rest for
1321 if ((long)(limit - ret - 4 - ticklen) < 0)
1323 s2n(TLSEXT_TYPE_session_ticket, ret);
1326 memcpy(ret, s->session->tlsext_tick, ticklen);
1332 if (SSL_USE_SIGALGS(s)) {
1334 const unsigned char *salg;
1335 unsigned char *etmp;
1336 salglen = tls12_get_psigalgs(s, &salg);
1337 if ((size_t)(limit - ret) < salglen + 6)
1339 s2n(TLSEXT_TYPE_signature_algorithms, ret);
1341 /* Skip over lengths for now */
1343 salglen = tls12_copy_sigalgs(s, ret, salg, salglen);
1344 /* Fill in lengths */
1345 s2n(salglen + 2, etmp);
1350 if (s->tlsext_status_type == TLSEXT_STATUSTYPE_ocsp) {
1352 long extlen, idlen, itmp;
1356 for (i = 0; i < sk_OCSP_RESPID_num(s->tlsext_ocsp_ids); i++) {
1357 id = sk_OCSP_RESPID_value(s->tlsext_ocsp_ids, i);
1358 itmp = i2d_OCSP_RESPID(id, NULL);
1364 if (s->tlsext_ocsp_exts) {
1365 extlen = i2d_X509_EXTENSIONS(s->tlsext_ocsp_exts, NULL);
1371 if ((long)(limit - ret - 7 - extlen - idlen) < 0)
1373 s2n(TLSEXT_TYPE_status_request, ret);
1374 if (extlen + idlen > 0xFFF0)
1376 s2n(extlen + idlen + 5, ret);
1377 *(ret++) = TLSEXT_STATUSTYPE_ocsp;
1379 for (i = 0; i < sk_OCSP_RESPID_num(s->tlsext_ocsp_ids); i++) {
1380 /* save position of id len */
1381 unsigned char *q = ret;
1382 id = sk_OCSP_RESPID_value(s->tlsext_ocsp_ids, i);
1383 /* skip over id len */
1385 itmp = i2d_OCSP_RESPID(id, &ret);
1391 i2d_X509_EXTENSIONS(s->tlsext_ocsp_exts, &ret);
1393 #ifndef OPENSSL_NO_HEARTBEATS
1394 if (SSL_IS_DTLS(s)) {
1395 /* Add Heartbeat extension */
1396 if ((limit - ret - 4 - 1) < 0)
1398 s2n(TLSEXT_TYPE_heartbeat, ret);
1402 * 1: peer may send requests
1403 * 2: peer not allowed to send requests
1405 if (s->tlsext_heartbeat & SSL_DTLSEXT_HB_DONT_RECV_REQUESTS)
1406 *(ret++) = SSL_DTLSEXT_HB_DONT_SEND_REQUESTS;
1408 *(ret++) = SSL_DTLSEXT_HB_ENABLED;
1412 #ifndef OPENSSL_NO_NEXTPROTONEG
1413 if (s->ctx->next_proto_select_cb && !s->s3->tmp.finish_md_len) {
1415 * The client advertises an emtpy extension to indicate its support
1416 * for Next Protocol Negotiation
1418 if (limit - ret - 4 < 0)
1420 s2n(TLSEXT_TYPE_next_proto_neg, ret);
1426 * finish_md_len is non-zero during a renegotiation, so
1427 * this avoids sending ALPN during the renegotiation
1428 * (see longer comment below)
1430 if (s->alpn_client_proto_list && !s->s3->tmp.finish_md_len) {
1431 if ((size_t)(limit - ret) < 6 + s->alpn_client_proto_list_len)
1433 s2n(TLSEXT_TYPE_application_layer_protocol_negotiation, ret);
1434 s2n(2 + s->alpn_client_proto_list_len, ret);
1435 s2n(s->alpn_client_proto_list_len, ret);
1436 memcpy(ret, s->alpn_client_proto_list, s->alpn_client_proto_list_len);
1437 ret += s->alpn_client_proto_list_len;
1438 s->s3->alpn_sent = 1;
1440 #ifndef OPENSSL_NO_SRTP
1441 if (SSL_IS_DTLS(s) && SSL_get_srtp_profiles(s)) {
1444 /* Returns 0 on success!! */
1445 if (ssl_add_clienthello_use_srtp_ext(s, 0, &el, 0)) {
1446 SSLerr(SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT, ERR_R_INTERNAL_ERROR);
1450 if ((limit - ret - 4 - el) < 0)
1453 s2n(TLSEXT_TYPE_use_srtp, ret);
1456 if (ssl_add_clienthello_use_srtp_ext(s, ret, &el, el)) {
1457 SSLerr(SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT, ERR_R_INTERNAL_ERROR);
1463 custom_ext_init(&s->cert->cli_ext);
1464 /* Add custom TLS Extensions to ClientHello */
1465 if (!custom_ext_add(s, 0, &ret, limit, al))
1467 #ifdef TLSEXT_TYPE_encrypt_then_mac
1468 s2n(TLSEXT_TYPE_encrypt_then_mac, ret);
1471 #ifndef OPENSSL_NO_CT
1472 if (s->ct_validation_callback != NULL) {
1473 s2n(TLSEXT_TYPE_signed_certificate_timestamp, ret);
1477 s2n(TLSEXT_TYPE_extended_master_secret, ret);
1481 * Add padding to workaround bugs in F5 terminators. See
1482 * https://tools.ietf.org/html/draft-agl-tls-padding-03 NB: because this
1483 * code works out the length of all existing extensions it MUST always
1486 if (s->options & SSL_OP_TLSEXT_PADDING) {
1487 int hlen = ret - (unsigned char *)s->init_buf->data;
1489 if (hlen > 0xff && hlen < 0x200) {
1490 hlen = 0x200 - hlen;
1496 s2n(TLSEXT_TYPE_padding, ret);
1498 memset(ret, 0, hlen);
1505 if ((extdatalen = ret - orig - 2) == 0)
1508 s2n(extdatalen, orig);
1512 unsigned char *ssl_add_serverhello_tlsext(SSL *s, unsigned char *buf,
1513 unsigned char *limit, int *al)
1516 unsigned char *orig = buf;
1517 unsigned char *ret = buf;
1518 #ifndef OPENSSL_NO_NEXTPROTONEG
1519 int next_proto_neg_seen;
1521 #ifndef OPENSSL_NO_EC
1522 unsigned long alg_k = s->s3->tmp.new_cipher->algorithm_mkey;
1523 unsigned long alg_a = s->s3->tmp.new_cipher->algorithm_auth;
1524 int using_ecc = (alg_k & SSL_kECDHE) || (alg_a & SSL_aECDSA);
1525 using_ecc = using_ecc && (s->session->tlsext_ecpointformatlist != NULL);
1530 return NULL; /* this really never occurs, but ... */
1532 if (s->s3->send_connection_binding) {
1535 if (!ssl_add_serverhello_renegotiate_ext(s, 0, &el, 0)) {
1536 SSLerr(SSL_F_SSL_ADD_SERVERHELLO_TLSEXT, ERR_R_INTERNAL_ERROR);
1540 if ((limit - ret - 4 - el) < 0)
1543 s2n(TLSEXT_TYPE_renegotiate, ret);
1546 if (!ssl_add_serverhello_renegotiate_ext(s, ret, &el, el)) {
1547 SSLerr(SSL_F_SSL_ADD_SERVERHELLO_TLSEXT, ERR_R_INTERNAL_ERROR);
1554 /* Only add RI for SSLv3 */
1555 if (s->version == SSL3_VERSION)
1558 if (!s->hit && s->servername_done == 1
1559 && s->session->tlsext_hostname != NULL) {
1560 if ((long)(limit - ret - 4) < 0)
1563 s2n(TLSEXT_TYPE_server_name, ret);
1566 #ifndef OPENSSL_NO_EC
1568 const unsigned char *plist;
1571 * Add TLS extension ECPointFormats to the ServerHello message
1575 tls1_get_formatlist(s, &plist, &plistlen);
1577 if ((lenmax = limit - ret - 5) < 0)
1579 if (plistlen > (size_t)lenmax)
1581 if (plistlen > 255) {
1582 SSLerr(SSL_F_SSL_ADD_SERVERHELLO_TLSEXT, ERR_R_INTERNAL_ERROR);
1586 s2n(TLSEXT_TYPE_ec_point_formats, ret);
1587 s2n(plistlen + 1, ret);
1588 *(ret++) = (unsigned char)plistlen;
1589 memcpy(ret, plist, plistlen);
1594 * Currently the server should not respond with a SupportedCurves
1597 #endif /* OPENSSL_NO_EC */
1599 if (s->tlsext_ticket_expected && tls_use_ticket(s)) {
1600 if ((long)(limit - ret - 4) < 0)
1602 s2n(TLSEXT_TYPE_session_ticket, ret);
1606 if (s->tlsext_status_expected) {
1607 if ((long)(limit - ret - 4) < 0)
1609 s2n(TLSEXT_TYPE_status_request, ret);
1613 #ifndef OPENSSL_NO_SRTP
1614 if (SSL_IS_DTLS(s) && s->srtp_profile) {
1617 /* Returns 0 on success!! */
1618 if (ssl_add_serverhello_use_srtp_ext(s, 0, &el, 0)) {
1619 SSLerr(SSL_F_SSL_ADD_SERVERHELLO_TLSEXT, ERR_R_INTERNAL_ERROR);
1622 if ((limit - ret - 4 - el) < 0)
1625 s2n(TLSEXT_TYPE_use_srtp, ret);
1628 if (ssl_add_serverhello_use_srtp_ext(s, ret, &el, el)) {
1629 SSLerr(SSL_F_SSL_ADD_SERVERHELLO_TLSEXT, ERR_R_INTERNAL_ERROR);
1636 if (((s->s3->tmp.new_cipher->id & 0xFFFF) == 0x80
1637 || (s->s3->tmp.new_cipher->id & 0xFFFF) == 0x81)
1638 && (SSL_get_options(s) & SSL_OP_CRYPTOPRO_TLSEXT_BUG)) {
1639 const unsigned char cryptopro_ext[36] = {
1640 0xfd, 0xe8, /* 65000 */
1641 0x00, 0x20, /* 32 bytes length */
1642 0x30, 0x1e, 0x30, 0x08, 0x06, 0x06, 0x2a, 0x85,
1643 0x03, 0x02, 0x02, 0x09, 0x30, 0x08, 0x06, 0x06,
1644 0x2a, 0x85, 0x03, 0x02, 0x02, 0x16, 0x30, 0x08,
1645 0x06, 0x06, 0x2a, 0x85, 0x03, 0x02, 0x02, 0x17
1647 if (limit - ret < 36)
1649 memcpy(ret, cryptopro_ext, 36);
1653 #ifndef OPENSSL_NO_HEARTBEATS
1654 /* Add Heartbeat extension if we've received one */
1655 if (SSL_IS_DTLS(s) && (s->tlsext_heartbeat & SSL_DTLSEXT_HB_ENABLED)) {
1656 if ((limit - ret - 4 - 1) < 0)
1658 s2n(TLSEXT_TYPE_heartbeat, ret);
1662 * 1: peer may send requests
1663 * 2: peer not allowed to send requests
1665 if (s->tlsext_heartbeat & SSL_DTLSEXT_HB_DONT_RECV_REQUESTS)
1666 *(ret++) = SSL_DTLSEXT_HB_DONT_SEND_REQUESTS;
1668 *(ret++) = SSL_DTLSEXT_HB_ENABLED;
1673 #ifndef OPENSSL_NO_NEXTPROTONEG
1674 next_proto_neg_seen = s->s3->next_proto_neg_seen;
1675 s->s3->next_proto_neg_seen = 0;
1676 if (next_proto_neg_seen && s->ctx->next_protos_advertised_cb) {
1677 const unsigned char *npa;
1678 unsigned int npalen;
1681 r = s->ctx->next_protos_advertised_cb(s, &npa, &npalen,
1683 ctx->next_protos_advertised_cb_arg);
1684 if (r == SSL_TLSEXT_ERR_OK) {
1685 if ((long)(limit - ret - 4 - npalen) < 0)
1687 s2n(TLSEXT_TYPE_next_proto_neg, ret);
1689 memcpy(ret, npa, npalen);
1691 s->s3->next_proto_neg_seen = 1;
1695 if (!custom_ext_add(s, 1, &ret, limit, al))
1697 #ifdef TLSEXT_TYPE_encrypt_then_mac
1698 if (s->s3->flags & TLS1_FLAGS_ENCRYPT_THEN_MAC) {
1700 * Don't use encrypt_then_mac if AEAD or RC4 might want to disable
1701 * for other cases too.
1703 if (s->s3->tmp.new_cipher->algorithm_mac == SSL_AEAD
1704 || s->s3->tmp.new_cipher->algorithm_enc == SSL_RC4
1705 || s->s3->tmp.new_cipher->algorithm_enc == SSL_eGOST2814789CNT
1706 || s->s3->tmp.new_cipher->algorithm_enc == SSL_eGOST2814789CNT12)
1707 s->s3->flags &= ~TLS1_FLAGS_ENCRYPT_THEN_MAC;
1709 s2n(TLSEXT_TYPE_encrypt_then_mac, ret);
1714 if (s->s3->flags & TLS1_FLAGS_RECEIVED_EXTMS) {
1715 s2n(TLSEXT_TYPE_extended_master_secret, ret);
1719 if (s->s3->alpn_selected != NULL) {
1720 const unsigned char *selected = s->s3->alpn_selected;
1721 unsigned int len = s->s3->alpn_selected_len;
1723 if ((long)(limit - ret - 4 - 2 - 1 - len) < 0)
1725 s2n(TLSEXT_TYPE_application_layer_protocol_negotiation, ret);
1729 memcpy(ret, selected, len);
1735 if ((extdatalen = ret - orig - 2) == 0)
1738 s2n(extdatalen, orig);
1743 * Save the ALPN extension in a ClientHello.
1744 * pkt: the contents of the ALPN extension, not including type and length.
1745 * al: a pointer to the alert value to send in the event of a failure.
1746 * returns: 1 on success, 0 on error.
1748 static int tls1_alpn_handle_client_hello(SSL *s, PACKET *pkt, int *al)
1750 PACKET protocol_list, save_protocol_list, protocol;
1752 *al = SSL_AD_DECODE_ERROR;
1754 if (!PACKET_as_length_prefixed_2(pkt, &protocol_list)
1755 || PACKET_remaining(&protocol_list) < 2) {
1759 save_protocol_list = protocol_list;
1761 /* Protocol names can't be empty. */
1762 if (!PACKET_get_length_prefixed_1(&protocol_list, &protocol)
1763 || PACKET_remaining(&protocol) == 0) {
1766 } while (PACKET_remaining(&protocol_list) != 0);
1768 if (!PACKET_memdup(&save_protocol_list,
1769 &s->s3->alpn_proposed,
1770 &s->s3->alpn_proposed_len)) {
1771 *al = TLS1_AD_INTERNAL_ERROR;
1779 * Process the ALPN extension in a ClientHello.
1780 * ret: a pointer to the TLSEXT return value: SSL_TLSEXT_ERR_*
1781 * al: a pointer to the alert value to send in the event of a failure.
1782 * returns 1 on success, 0
1784 static int tls1_alpn_handle_client_hello_late(SSL *s, int *ret, int *al)
1786 const unsigned char *selected = NULL;
1787 unsigned char selected_len = 0;
1789 if (s->ctx->alpn_select_cb != NULL && s->s3->alpn_proposed != NULL) {
1790 int r = s->ctx->alpn_select_cb(s, &selected, &selected_len,
1791 s->s3->alpn_proposed,
1792 s->s3->alpn_proposed_len,
1793 s->ctx->alpn_select_cb_arg);
1795 if (r == SSL_TLSEXT_ERR_OK) {
1796 OPENSSL_free(s->s3->alpn_selected);
1797 s->s3->alpn_selected = OPENSSL_memdup(selected, selected_len);
1798 if (s->s3->alpn_selected == NULL) {
1799 *al = SSL_AD_INTERNAL_ERROR;
1800 *ret = SSL_TLSEXT_ERR_ALERT_FATAL;
1803 s->s3->alpn_selected_len = selected_len;
1805 *al = SSL_AD_NO_APPLICATION_PROTOCOL;
1806 *ret = SSL_TLSEXT_ERR_ALERT_FATAL;
1814 #ifndef OPENSSL_NO_EC
1816 * ssl_check_for_safari attempts to fingerprint Safari using OS X
1817 * SecureTransport using the TLS extension block in |pkt|.
1818 * Safari, since 10.6, sends exactly these extensions, in this order:
1823 * We wish to fingerprint Safari because they broke ECDHE-ECDSA support in 10.8,
1824 * but they advertise support. So enabling ECDHE-ECDSA ciphers breaks them.
1825 * Sadly we cannot differentiate 10.6, 10.7 and 10.8.4 (which work), from
1826 * 10.8..10.8.3 (which don't work).
1828 static void ssl_check_for_safari(SSL *s, const PACKET *pkt)
1834 static const unsigned char kSafariExtensionsBlock[] = {
1835 0x00, 0x0a, /* elliptic_curves extension */
1836 0x00, 0x08, /* 8 bytes */
1837 0x00, 0x06, /* 6 bytes of curve ids */
1838 0x00, 0x17, /* P-256 */
1839 0x00, 0x18, /* P-384 */
1840 0x00, 0x19, /* P-521 */
1842 0x00, 0x0b, /* ec_point_formats */
1843 0x00, 0x02, /* 2 bytes */
1844 0x01, /* 1 point format */
1845 0x00, /* uncompressed */
1846 /* The following is only present in TLS 1.2 */
1847 0x00, 0x0d, /* signature_algorithms */
1848 0x00, 0x0c, /* 12 bytes */
1849 0x00, 0x0a, /* 10 bytes */
1850 0x05, 0x01, /* SHA-384/RSA */
1851 0x04, 0x01, /* SHA-256/RSA */
1852 0x02, 0x01, /* SHA-1/RSA */
1853 0x04, 0x03, /* SHA-256/ECDSA */
1854 0x02, 0x03, /* SHA-1/ECDSA */
1857 /* Length of the common prefix (first two extensions). */
1858 static const size_t kSafariCommonExtensionsLength = 18;
1862 if (!PACKET_forward(&tmppkt, 2)
1863 || !PACKET_get_net_2(&tmppkt, &type)
1864 || !PACKET_get_length_prefixed_2(&tmppkt, &sni)) {
1868 if (type != TLSEXT_TYPE_server_name)
1871 ext_len = TLS1_get_client_version(s) >= TLS1_2_VERSION ?
1872 sizeof(kSafariExtensionsBlock) : kSafariCommonExtensionsLength;
1874 s->s3->is_probably_safari = PACKET_equal(&tmppkt, kSafariExtensionsBlock,
1877 #endif /* !OPENSSL_NO_EC */
1880 * Parse ClientHello extensions and stash extension info in various parts of
1881 * the SSL object. Verify that there are no duplicate extensions.
1883 * Behaviour upon resumption is extension-specific. If the extension has no
1884 * effect during resumption, it is parsed (to verify its format) but otherwise
1887 * Consumes the entire packet in |pkt|. Returns 1 on success and 0 on failure.
1888 * Upon failure, sets |al| to the appropriate alert.
1890 static int ssl_scan_clienthello_tlsext(SSL *s, PACKET *pkt, int *al)
1893 int renegotiate_seen = 0;
1896 *al = SSL_AD_DECODE_ERROR;
1897 s->servername_done = 0;
1898 s->tlsext_status_type = -1;
1899 #ifndef OPENSSL_NO_NEXTPROTONEG
1900 s->s3->next_proto_neg_seen = 0;
1903 OPENSSL_free(s->s3->alpn_selected);
1904 s->s3->alpn_selected = NULL;
1905 #ifndef OPENSSL_NO_HEARTBEATS
1906 s->tlsext_heartbeat &= ~(SSL_DTLSEXT_HB_ENABLED |
1907 SSL_DTLSEXT_HB_DONT_SEND_REQUESTS);
1910 #ifndef OPENSSL_NO_EC
1911 if (s->options & SSL_OP_SAFARI_ECDHE_ECDSA_BUG)
1912 ssl_check_for_safari(s, pkt);
1913 # endif /* !OPENSSL_NO_EC */
1915 /* Clear any signature algorithms extension received */
1916 OPENSSL_free(s->s3->tmp.peer_sigalgs);
1917 s->s3->tmp.peer_sigalgs = NULL;
1918 #ifdef TLSEXT_TYPE_encrypt_then_mac
1919 s->s3->flags &= ~TLS1_FLAGS_ENCRYPT_THEN_MAC;
1922 #ifndef OPENSSL_NO_SRP
1923 OPENSSL_free(s->srp_ctx.login);
1924 s->srp_ctx.login = NULL;
1927 s->srtp_profile = NULL;
1929 if (PACKET_remaining(pkt) == 0)
1932 if (!PACKET_as_length_prefixed_2(pkt, &extensions))
1935 if (!tls1_check_duplicate_extensions(&extensions))
1939 * We parse all extensions to ensure the ClientHello is well-formed but,
1940 * unless an extension specifies otherwise, we ignore extensions upon
1943 while (PACKET_get_net_2(&extensions, &type)) {
1945 if (!PACKET_get_length_prefixed_2(&extensions, &extension))
1948 if (s->tlsext_debug_cb)
1949 s->tlsext_debug_cb(s, 0, type, PACKET_data(&extension),
1950 PACKET_remaining(&extension),
1951 s->tlsext_debug_arg);
1953 if (type == TLSEXT_TYPE_renegotiate) {
1954 if (!ssl_parse_clienthello_renegotiate_ext(s, &extension, al))
1956 renegotiate_seen = 1;
1957 } else if (s->version == SSL3_VERSION) {
1960 * The servername extension is treated as follows:
1962 * - Only the hostname type is supported with a maximum length of 255.
1963 * - The servername is rejected if too long or if it contains zeros,
1964 * in which case an fatal alert is generated.
1965 * - The servername field is maintained together with the session cache.
1966 * - When a session is resumed, the servername call back invoked in order
1967 * to allow the application to position itself to the right context.
1968 * - The servername is acknowledged if it is new for a session or when
1969 * it is identical to a previously used for the same session.
1970 * Applications can control the behaviour. They can at any time
1971 * set a 'desirable' servername for a new SSL object. This can be the
1972 * case for example with HTTPS when a Host: header field is received and
1973 * a renegotiation is requested. In this case, a possible servername
1974 * presented in the new client hello is only acknowledged if it matches
1975 * the value of the Host: field.
1976 * - Applications must use SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION
1977 * if they provide for changing an explicit servername context for the
1978 * session, i.e. when the session has been established with a servername
1980 * - On session reconnect, the servername extension may be absent.
1984 else if (type == TLSEXT_TYPE_server_name) {
1985 unsigned int servname_type;
1986 PACKET sni, hostname;
1988 if (!PACKET_as_length_prefixed_2(&extension, &sni)
1989 /* ServerNameList must be at least 1 byte long. */
1990 || PACKET_remaining(&sni) == 0) {
1995 * Although the server_name extension was intended to be
1996 * extensible to new name types, RFC 4366 defined the
1997 * syntax inextensibly and OpenSSL 1.0.x parses it as
1999 * RFC 6066 corrected the mistake but adding new name types
2000 * is nevertheless no longer feasible, so act as if no other
2001 * SNI types can exist, to simplify parsing.
2003 * Also note that the RFC permits only one SNI value per type,
2004 * i.e., we can only have a single hostname.
2006 if (!PACKET_get_1(&sni, &servname_type)
2007 || servname_type != TLSEXT_NAMETYPE_host_name
2008 || !PACKET_as_length_prefixed_2(&sni, &hostname)) {
2013 if (PACKET_remaining(&hostname) > TLSEXT_MAXLEN_host_name) {
2014 *al = TLS1_AD_UNRECOGNIZED_NAME;
2018 if (PACKET_contains_zero_byte(&hostname)) {
2019 *al = TLS1_AD_UNRECOGNIZED_NAME;
2023 if (!PACKET_strndup(&hostname, &s->session->tlsext_hostname)) {
2024 *al = TLS1_AD_INTERNAL_ERROR;
2028 s->servername_done = 1;
2031 * TODO(openssl-team): if the SNI doesn't match, we MUST
2032 * fall back to a full handshake.
2034 s->servername_done = s->session->tlsext_hostname
2035 && PACKET_equal(&hostname, s->session->tlsext_hostname,
2036 strlen(s->session->tlsext_hostname));
2039 #ifndef OPENSSL_NO_SRP
2040 else if (type == TLSEXT_TYPE_srp) {
2043 if (!PACKET_as_length_prefixed_1(&extension, &srp_I))
2046 if (PACKET_contains_zero_byte(&srp_I))
2050 * TODO(openssl-team): currently, we re-authenticate the user
2051 * upon resumption. Instead, we MUST ignore the login.
2053 if (!PACKET_strndup(&srp_I, &s->srp_ctx.login)) {
2054 *al = TLS1_AD_INTERNAL_ERROR;
2060 #ifndef OPENSSL_NO_EC
2061 else if (type == TLSEXT_TYPE_ec_point_formats) {
2062 PACKET ec_point_format_list;
2064 if (!PACKET_as_length_prefixed_1(&extension,
2065 &ec_point_format_list)
2066 || PACKET_remaining(&ec_point_format_list) == 0) {
2071 if (!PACKET_memdup(&ec_point_format_list,
2072 &s->session->tlsext_ecpointformatlist,
2073 &s->session->tlsext_ecpointformatlist_length)) {
2074 *al = TLS1_AD_INTERNAL_ERROR;
2078 } else if (type == TLSEXT_TYPE_elliptic_curves) {
2079 PACKET elliptic_curve_list;
2081 /* Each NamedCurve is 2 bytes and we must have at least 1. */
2082 if (!PACKET_as_length_prefixed_2(&extension,
2083 &elliptic_curve_list)
2084 || PACKET_remaining(&elliptic_curve_list) == 0
2085 || (PACKET_remaining(&elliptic_curve_list) % 2) != 0) {
2090 if (!PACKET_memdup(&elliptic_curve_list,
2091 &s->session->tlsext_ellipticcurvelist,
2092 &s->session->tlsext_ellipticcurvelist_length)) {
2093 *al = TLS1_AD_INTERNAL_ERROR;
2098 #endif /* OPENSSL_NO_EC */
2099 else if (type == TLSEXT_TYPE_session_ticket) {
2100 if (s->tls_session_ticket_ext_cb &&
2101 !s->tls_session_ticket_ext_cb(s, PACKET_data(&extension),
2102 PACKET_remaining(&extension),
2103 s->tls_session_ticket_ext_cb_arg)) {
2104 *al = TLS1_AD_INTERNAL_ERROR;
2107 } else if (type == TLSEXT_TYPE_signature_algorithms) {
2108 PACKET supported_sig_algs;
2110 if (!PACKET_as_length_prefixed_2(&extension, &supported_sig_algs)
2111 || (PACKET_remaining(&supported_sig_algs) % 2) != 0
2112 || PACKET_remaining(&supported_sig_algs) == 0) {
2117 if (!tls1_save_sigalgs(s, PACKET_data(&supported_sig_algs),
2118 PACKET_remaining(&supported_sig_algs))) {
2122 } else if (type == TLSEXT_TYPE_status_request) {
2123 const unsigned char *ext_data;
2125 if (!PACKET_get_1(&extension,
2126 (unsigned int *)&s->tlsext_status_type)) {
2130 if (s->tlsext_status_type == TLSEXT_STATUSTYPE_ocsp) {
2131 PACKET responder_id_list, exts;
2132 if (!PACKET_get_length_prefixed_2(&extension, &responder_id_list))
2135 while (PACKET_remaining(&responder_id_list) > 0) {
2137 PACKET responder_id;
2138 const unsigned char *id_data;
2140 if (!PACKET_get_length_prefixed_2(&responder_id_list,
2142 || PACKET_remaining(&responder_id) == 0) {
2146 if (s->tlsext_ocsp_ids == NULL
2147 && (s->tlsext_ocsp_ids =
2148 sk_OCSP_RESPID_new_null()) == NULL) {
2149 *al = SSL_AD_INTERNAL_ERROR;
2153 id_data = PACKET_data(&responder_id);
2154 id = d2i_OCSP_RESPID(NULL, &id_data,
2155 PACKET_remaining(&responder_id));
2159 if (id_data != PACKET_end(&responder_id)) {
2160 OCSP_RESPID_free(id);
2164 if (!sk_OCSP_RESPID_push(s->tlsext_ocsp_ids, id)) {
2165 OCSP_RESPID_free(id);
2166 *al = SSL_AD_INTERNAL_ERROR;
2171 /* Read in request_extensions */
2172 if (!PACKET_as_length_prefixed_2(&extension, &exts))
2175 if (PACKET_remaining(&exts) > 0) {
2176 ext_data = PACKET_data(&exts);
2177 sk_X509_EXTENSION_pop_free(s->tlsext_ocsp_exts,
2178 X509_EXTENSION_free);
2179 s->tlsext_ocsp_exts =
2180 d2i_X509_EXTENSIONS(NULL, &ext_data,
2181 PACKET_remaining(&exts));
2182 if (s->tlsext_ocsp_exts == NULL
2183 || ext_data != PACKET_end(&exts)) {
2188 * We don't know what to do with any other type * so ignore it.
2191 s->tlsext_status_type = -1;
2194 #ifndef OPENSSL_NO_HEARTBEATS
2195 else if (SSL_IS_DTLS(s) && type == TLSEXT_TYPE_heartbeat) {
2196 unsigned int hbtype;
2198 if (!PACKET_get_1(&extension, &hbtype)
2199 || PACKET_remaining(&extension)) {
2200 *al = SSL_AD_DECODE_ERROR;
2204 case 0x01: /* Client allows us to send HB requests */
2205 s->tlsext_heartbeat |= SSL_DTLSEXT_HB_ENABLED;
2207 case 0x02: /* Client doesn't accept HB requests */
2208 s->tlsext_heartbeat |= SSL_DTLSEXT_HB_ENABLED;
2209 s->tlsext_heartbeat |= SSL_DTLSEXT_HB_DONT_SEND_REQUESTS;
2212 *al = SSL_AD_ILLEGAL_PARAMETER;
2217 #ifndef OPENSSL_NO_NEXTPROTONEG
2218 else if (type == TLSEXT_TYPE_next_proto_neg &&
2219 s->s3->tmp.finish_md_len == 0 &&
2220 s->s3->alpn_selected == NULL) {
2222 * We shouldn't accept this extension on a
2225 * s->new_session will be set on renegotiation, but we
2226 * probably shouldn't rely that it couldn't be set on
2227 * the initial renegotation too in certain cases (when
2228 * there's some other reason to disallow resuming an
2229 * earlier session -- the current code won't be doing
2230 * anything like that, but this might change).
2232 * A valid sign that there's been a previous handshake
2233 * in this connection is if s->s3->tmp.finish_md_len >
2234 * 0. (We are talking about a check that will happen
2235 * in the Hello protocol round, well before a new
2236 * Finished message could have been computed.)
2238 s->s3->next_proto_neg_seen = 1;
2242 else if (type == TLSEXT_TYPE_application_layer_protocol_negotiation &&
2243 s->s3->tmp.finish_md_len == 0) {
2244 if (!tls1_alpn_handle_client_hello(s, &extension, al))
2246 #ifndef OPENSSL_NO_NEXTPROTONEG
2247 /* ALPN takes precedence over NPN. */
2248 s->s3->next_proto_neg_seen = 0;
2252 /* session ticket processed earlier */
2253 #ifndef OPENSSL_NO_SRTP
2254 else if (SSL_IS_DTLS(s) && SSL_get_srtp_profiles(s)
2255 && type == TLSEXT_TYPE_use_srtp) {
2256 if (ssl_parse_clienthello_use_srtp_ext(s, &extension, al))
2260 #ifdef TLSEXT_TYPE_encrypt_then_mac
2261 else if (type == TLSEXT_TYPE_encrypt_then_mac)
2262 s->s3->flags |= TLS1_FLAGS_ENCRYPT_THEN_MAC;
2265 * Note: extended master secret extension handled in
2266 * tls_check_serverhello_tlsext_early()
2270 * If this ClientHello extension was unhandled and this is a
2271 * nonresumed connection, check whether the extension is a custom
2272 * TLS Extension (has a custom_srv_ext_record), and if so call the
2273 * callback and record the extension number so that an appropriate
2274 * ServerHello may be later returned.
2277 if (custom_ext_parse(s, 1, type, PACKET_data(&extension),
2278 PACKET_remaining(&extension), al) <= 0)
2283 if (PACKET_remaining(pkt) != 0) {
2284 /* tls1_check_duplicate_extensions should ensure this never happens. */
2285 *al = SSL_AD_INTERNAL_ERROR;
2291 /* Need RI if renegotiating */
2293 if (!renegotiate_seen && s->renegotiate &&
2294 !(s->options & SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION)) {
2295 *al = SSL_AD_HANDSHAKE_FAILURE;
2296 SSLerr(SSL_F_SSL_SCAN_CLIENTHELLO_TLSEXT,
2297 SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED);
2302 * This function currently has no state to clean up, so it returns directly.
2303 * If parsing fails at any point, the function returns early.
2304 * The SSL object may be left with partial data from extensions, but it must
2305 * then no longer be used, and clearing it up will free the leftovers.
2310 int ssl_parse_clienthello_tlsext(SSL *s, PACKET *pkt)
2313 custom_ext_init(&s->cert->srv_ext);
2314 if (ssl_scan_clienthello_tlsext(s, pkt, &al) <= 0) {
2315 ssl3_send_alert(s, SSL3_AL_FATAL, al);
2318 if (ssl_check_clienthello_tlsext_early(s) <= 0) {
2319 SSLerr(SSL_F_SSL_PARSE_CLIENTHELLO_TLSEXT, SSL_R_CLIENTHELLO_TLSEXT);
2325 #ifndef OPENSSL_NO_NEXTPROTONEG
2327 * ssl_next_proto_validate validates a Next Protocol Negotiation block. No
2328 * elements of zero length are allowed and the set of elements must exactly
2329 * fill the length of the block.
2331 static char ssl_next_proto_validate(PACKET *pkt)
2335 while (PACKET_remaining(pkt)) {
2336 if (!PACKET_get_1(pkt, &len)
2337 || !PACKET_forward(pkt, len))
2345 static int ssl_scan_serverhello_tlsext(SSL *s, PACKET *pkt, int *al)
2347 unsigned int length, type, size;
2348 int tlsext_servername = 0;
2349 int renegotiate_seen = 0;
2351 #ifndef OPENSSL_NO_NEXTPROTONEG
2352 s->s3->next_proto_neg_seen = 0;
2354 s->tlsext_ticket_expected = 0;
2356 OPENSSL_free(s->s3->alpn_selected);
2357 s->s3->alpn_selected = NULL;
2358 #ifndef OPENSSL_NO_HEARTBEATS
2359 s->tlsext_heartbeat &= ~(SSL_DTLSEXT_HB_ENABLED |
2360 SSL_DTLSEXT_HB_DONT_SEND_REQUESTS);
2363 #ifdef TLSEXT_TYPE_encrypt_then_mac
2364 s->s3->flags &= ~TLS1_FLAGS_ENCRYPT_THEN_MAC;
2367 s->s3->flags &= ~TLS1_FLAGS_RECEIVED_EXTMS;
2369 if (!PACKET_get_net_2(pkt, &length))
2372 if (PACKET_remaining(pkt) != length) {
2373 *al = SSL_AD_DECODE_ERROR;
2377 if (!tls1_check_duplicate_extensions(pkt)) {
2378 *al = SSL_AD_DECODE_ERROR;
2382 while (PACKET_get_net_2(pkt, &type) && PACKET_get_net_2(pkt, &size)) {
2383 const unsigned char *data;
2386 if (!PACKET_get_sub_packet(pkt, &spkt, size)
2387 || !PACKET_peek_bytes(&spkt, &data, size))
2390 if (s->tlsext_debug_cb)
2391 s->tlsext_debug_cb(s, 1, type, data, size, s->tlsext_debug_arg);
2393 if (type == TLSEXT_TYPE_renegotiate) {
2394 if (!ssl_parse_serverhello_renegotiate_ext(s, &spkt, al))
2396 renegotiate_seen = 1;
2397 } else if (s->version == SSL3_VERSION) {
2398 } else if (type == TLSEXT_TYPE_server_name) {
2399 if (s->tlsext_hostname == NULL || size > 0) {
2400 *al = TLS1_AD_UNRECOGNIZED_NAME;
2403 tlsext_servername = 1;
2405 #ifndef OPENSSL_NO_EC
2406 else if (type == TLSEXT_TYPE_ec_point_formats) {
2407 unsigned int ecpointformatlist_length;
2408 if (!PACKET_get_1(&spkt, &ecpointformatlist_length)
2409 || ecpointformatlist_length != size - 1) {
2410 *al = TLS1_AD_DECODE_ERROR;
2414 s->session->tlsext_ecpointformatlist_length = 0;
2415 OPENSSL_free(s->session->tlsext_ecpointformatlist);
2416 if ((s->session->tlsext_ecpointformatlist =
2417 OPENSSL_malloc(ecpointformatlist_length)) == NULL) {
2418 *al = TLS1_AD_INTERNAL_ERROR;
2421 s->session->tlsext_ecpointformatlist_length =
2422 ecpointformatlist_length;
2423 if (!PACKET_copy_bytes(&spkt,
2424 s->session->tlsext_ecpointformatlist,
2425 ecpointformatlist_length)) {
2426 *al = TLS1_AD_DECODE_ERROR;
2432 #endif /* OPENSSL_NO_EC */
2434 else if (type == TLSEXT_TYPE_session_ticket) {
2435 if (s->tls_session_ticket_ext_cb &&
2436 !s->tls_session_ticket_ext_cb(s, data, size,
2437 s->tls_session_ticket_ext_cb_arg))
2439 *al = TLS1_AD_INTERNAL_ERROR;
2442 if (!tls_use_ticket(s) || (size > 0)) {
2443 *al = TLS1_AD_UNSUPPORTED_EXTENSION;
2446 s->tlsext_ticket_expected = 1;
2448 else if (type == TLSEXT_TYPE_status_request) {
2450 * MUST be empty and only sent if we've requested a status
2453 if ((s->tlsext_status_type == -1) || (size > 0)) {
2454 *al = TLS1_AD_UNSUPPORTED_EXTENSION;
2457 /* Set flag to expect CertificateStatus message */
2458 s->tlsext_status_expected = 1;
2460 #ifndef OPENSSL_NO_CT
2462 * Only take it if we asked for it - i.e if there is no CT validation
2463 * callback set, then a custom extension MAY be processing it, so we
2464 * need to let control continue to flow to that.
2466 else if (type == TLSEXT_TYPE_signed_certificate_timestamp &&
2467 s->ct_validation_callback != NULL) {
2468 /* Simply copy it off for later processing */
2469 if (s->tlsext_scts != NULL) {
2470 OPENSSL_free(s->tlsext_scts);
2471 s->tlsext_scts = NULL;
2473 s->tlsext_scts_len = size;
2475 s->tlsext_scts = OPENSSL_malloc(size);
2476 if (s->tlsext_scts == NULL) {
2477 *al = TLS1_AD_INTERNAL_ERROR;
2480 memcpy(s->tlsext_scts, data, size);
2484 #ifndef OPENSSL_NO_NEXTPROTONEG
2485 else if (type == TLSEXT_TYPE_next_proto_neg &&
2486 s->s3->tmp.finish_md_len == 0) {
2487 unsigned char *selected;
2488 unsigned char selected_len;
2489 /* We must have requested it. */
2490 if (s->ctx->next_proto_select_cb == NULL) {
2491 *al = TLS1_AD_UNSUPPORTED_EXTENSION;
2494 /* The data must be valid */
2495 if (!ssl_next_proto_validate(&spkt)) {
2496 *al = TLS1_AD_DECODE_ERROR;
2500 ctx->next_proto_select_cb(s, &selected, &selected_len, data,
2502 s->ctx->next_proto_select_cb_arg) !=
2503 SSL_TLSEXT_ERR_OK) {
2504 *al = TLS1_AD_INTERNAL_ERROR;
2507 s->next_proto_negotiated = OPENSSL_malloc(selected_len);
2508 if (s->next_proto_negotiated == NULL) {
2509 *al = TLS1_AD_INTERNAL_ERROR;
2512 memcpy(s->next_proto_negotiated, selected, selected_len);
2513 s->next_proto_negotiated_len = selected_len;
2514 s->s3->next_proto_neg_seen = 1;
2518 else if (type == TLSEXT_TYPE_application_layer_protocol_negotiation) {
2520 /* We must have requested it. */
2521 if (!s->s3->alpn_sent) {
2522 *al = TLS1_AD_UNSUPPORTED_EXTENSION;
2526 * The extension data consists of:
2527 * uint16 list_length
2528 * uint8 proto_length;
2529 * uint8 proto[proto_length];
2531 if (!PACKET_get_net_2(&spkt, &len)
2532 || PACKET_remaining(&spkt) != len
2533 || !PACKET_get_1(&spkt, &len)
2534 || PACKET_remaining(&spkt) != len) {
2535 *al = TLS1_AD_DECODE_ERROR;
2538 OPENSSL_free(s->s3->alpn_selected);
2539 s->s3->alpn_selected = OPENSSL_malloc(len);
2540 if (s->s3->alpn_selected == NULL) {
2541 *al = TLS1_AD_INTERNAL_ERROR;
2544 if (!PACKET_copy_bytes(&spkt, s->s3->alpn_selected, len)) {
2545 *al = TLS1_AD_DECODE_ERROR;
2548 s->s3->alpn_selected_len = len;
2550 #ifndef OPENSSL_NO_HEARTBEATS
2551 else if (SSL_IS_DTLS(s) && type == TLSEXT_TYPE_heartbeat) {
2552 unsigned int hbtype;
2553 if (!PACKET_get_1(&spkt, &hbtype)) {
2554 *al = SSL_AD_DECODE_ERROR;
2558 case 0x01: /* Server allows us to send HB requests */
2559 s->tlsext_heartbeat |= SSL_DTLSEXT_HB_ENABLED;
2561 case 0x02: /* Server doesn't accept HB requests */
2562 s->tlsext_heartbeat |= SSL_DTLSEXT_HB_ENABLED;
2563 s->tlsext_heartbeat |= SSL_DTLSEXT_HB_DONT_SEND_REQUESTS;
2566 *al = SSL_AD_ILLEGAL_PARAMETER;
2571 #ifndef OPENSSL_NO_SRTP
2572 else if (SSL_IS_DTLS(s) && type == TLSEXT_TYPE_use_srtp) {
2573 if (ssl_parse_serverhello_use_srtp_ext(s, &spkt, al))
2577 #ifdef TLSEXT_TYPE_encrypt_then_mac
2578 else if (type == TLSEXT_TYPE_encrypt_then_mac) {
2579 /* Ignore if inappropriate ciphersuite */
2580 if (s->s3->tmp.new_cipher->algorithm_mac != SSL_AEAD
2581 && s->s3->tmp.new_cipher->algorithm_enc != SSL_RC4)
2582 s->s3->flags |= TLS1_FLAGS_ENCRYPT_THEN_MAC;
2585 else if (type == TLSEXT_TYPE_extended_master_secret) {
2586 s->s3->flags |= TLS1_FLAGS_RECEIVED_EXTMS;
2588 s->session->flags |= SSL_SESS_FLAG_EXTMS;
2591 * If this extension type was not otherwise handled, but matches a
2592 * custom_cli_ext_record, then send it to the c callback
2594 else if (custom_ext_parse(s, 0, type, data, size, al) <= 0)
2598 if (PACKET_remaining(pkt) != 0) {
2599 *al = SSL_AD_DECODE_ERROR;
2603 if (!s->hit && tlsext_servername == 1) {
2604 if (s->tlsext_hostname) {
2605 if (s->session->tlsext_hostname == NULL) {
2606 s->session->tlsext_hostname = OPENSSL_strdup(s->tlsext_hostname);
2607 if (!s->session->tlsext_hostname) {
2608 *al = SSL_AD_UNRECOGNIZED_NAME;
2612 *al = SSL_AD_DECODE_ERROR;
2621 * Determine if we need to see RI. Strictly speaking if we want to avoid
2622 * an attack we should *always* see RI even on initial server hello
2623 * because the client doesn't see any renegotiation during an attack.
2624 * However this would mean we could not connect to any server which
2625 * doesn't support RI so for the immediate future tolerate RI absence on
2626 * initial connect only.
2628 if (!renegotiate_seen && !(s->options & SSL_OP_LEGACY_SERVER_CONNECT)
2629 && !(s->options & SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION)) {
2630 *al = SSL_AD_HANDSHAKE_FAILURE;
2631 SSLerr(SSL_F_SSL_SCAN_SERVERHELLO_TLSEXT,
2632 SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED);
2638 * Check extended master secret extension is consistent with
2641 if (!(s->s3->flags & TLS1_FLAGS_RECEIVED_EXTMS) !=
2642 !(s->session->flags & SSL_SESS_FLAG_EXTMS)) {
2643 *al = SSL_AD_HANDSHAKE_FAILURE;
2644 SSLerr(SSL_F_SSL_SCAN_SERVERHELLO_TLSEXT, SSL_R_INCONSISTENT_EXTMS);
2652 int ssl_prepare_clienthello_tlsext(SSL *s)
2654 s->s3->alpn_sent = 0;
2658 int ssl_prepare_serverhello_tlsext(SSL *s)
2663 static int ssl_check_clienthello_tlsext_early(SSL *s)
2665 int ret = SSL_TLSEXT_ERR_NOACK;
2666 int al = SSL_AD_UNRECOGNIZED_NAME;
2668 #ifndef OPENSSL_NO_EC
2670 * The handling of the ECPointFormats extension is done elsewhere, namely
2671 * in ssl3_choose_cipher in s3_lib.c.
2674 * The handling of the EllipticCurves extension is done elsewhere, namely
2675 * in ssl3_choose_cipher in s3_lib.c.
2679 if (s->ctx != NULL && s->ctx->tlsext_servername_callback != 0)
2681 s->ctx->tlsext_servername_callback(s, &al,
2682 s->ctx->tlsext_servername_arg);
2683 else if (s->initial_ctx != NULL
2684 && s->initial_ctx->tlsext_servername_callback != 0)
2686 s->initial_ctx->tlsext_servername_callback(s, &al,
2688 initial_ctx->tlsext_servername_arg);
2691 case SSL_TLSEXT_ERR_ALERT_FATAL:
2692 ssl3_send_alert(s, SSL3_AL_FATAL, al);
2695 case SSL_TLSEXT_ERR_ALERT_WARNING:
2696 ssl3_send_alert(s, SSL3_AL_WARNING, al);
2699 case SSL_TLSEXT_ERR_NOACK:
2700 s->servername_done = 0;
2705 /* Initialise digests to default values */
2706 void ssl_set_default_md(SSL *s)
2708 const EVP_MD **pmd = s->s3->tmp.md;
2709 #ifndef OPENSSL_NO_DSA
2710 pmd[SSL_PKEY_DSA_SIGN] = ssl_md(SSL_MD_SHA1_IDX);
2712 #ifndef OPENSSL_NO_RSA
2713 if (SSL_USE_SIGALGS(s))
2714 pmd[SSL_PKEY_RSA_SIGN] = ssl_md(SSL_MD_SHA1_IDX);
2716 pmd[SSL_PKEY_RSA_SIGN] = ssl_md(SSL_MD_MD5_SHA1_IDX);
2717 pmd[SSL_PKEY_RSA_ENC] = pmd[SSL_PKEY_RSA_SIGN];
2719 #ifndef OPENSSL_NO_EC
2720 pmd[SSL_PKEY_ECC] = ssl_md(SSL_MD_SHA1_IDX);
2722 #ifndef OPENSSL_NO_GOST
2723 pmd[SSL_PKEY_GOST01] = ssl_md(SSL_MD_GOST94_IDX);
2724 pmd[SSL_PKEY_GOST12_256] = ssl_md(SSL_MD_GOST12_256_IDX);
2725 pmd[SSL_PKEY_GOST12_512] = ssl_md(SSL_MD_GOST12_512_IDX);
2729 int tls1_set_server_sigalgs(SSL *s)
2733 /* Clear any shared sigtnature algorithms */
2734 OPENSSL_free(s->cert->shared_sigalgs);
2735 s->cert->shared_sigalgs = NULL;
2736 s->cert->shared_sigalgslen = 0;
2737 /* Clear certificate digests and validity flags */
2738 for (i = 0; i < SSL_PKEY_NUM; i++) {
2739 s->s3->tmp.md[i] = NULL;
2740 s->s3->tmp.valid_flags[i] = 0;
2743 /* If sigalgs received process it. */
2744 if (s->s3->tmp.peer_sigalgs) {
2745 if (!tls1_process_sigalgs(s)) {
2746 SSLerr(SSL_F_TLS1_SET_SERVER_SIGALGS, ERR_R_MALLOC_FAILURE);
2747 al = SSL_AD_INTERNAL_ERROR;
2750 /* Fatal error is no shared signature algorithms */
2751 if (!s->cert->shared_sigalgs) {
2752 SSLerr(SSL_F_TLS1_SET_SERVER_SIGALGS,
2753 SSL_R_NO_SHARED_SIGATURE_ALGORITHMS);
2754 al = SSL_AD_ILLEGAL_PARAMETER;
2758 ssl_set_default_md(s);
2762 ssl3_send_alert(s, SSL3_AL_FATAL, al);
2766 int ssl_check_clienthello_tlsext_late(SSL *s)
2768 int ret = SSL_TLSEXT_ERR_OK;
2769 int al = SSL_AD_INTERNAL_ERROR;
2772 * If status request then ask callback what to do. Note: this must be
2773 * called after servername callbacks in case the certificate has changed,
2774 * and must be called after the cipher has been chosen because this may
2775 * influence which certificate is sent
2777 if ((s->tlsext_status_type != -1) && s->ctx && s->ctx->tlsext_status_cb) {
2779 CERT_PKEY *certpkey;
2780 certpkey = ssl_get_server_send_pkey(s);
2781 /* If no certificate can't return certificate status */
2782 if (certpkey == NULL) {
2783 s->tlsext_status_expected = 0;
2787 * Set current certificate to one we will use so SSL_get_certificate
2788 * et al can pick it up.
2790 s->cert->key = certpkey;
2791 r = s->ctx->tlsext_status_cb(s, s->ctx->tlsext_status_arg);
2793 /* We don't want to send a status request response */
2794 case SSL_TLSEXT_ERR_NOACK:
2795 s->tlsext_status_expected = 0;
2797 /* status request response should be sent */
2798 case SSL_TLSEXT_ERR_OK:
2799 if (s->tlsext_ocsp_resp)
2800 s->tlsext_status_expected = 1;
2802 s->tlsext_status_expected = 0;
2804 /* something bad happened */
2805 case SSL_TLSEXT_ERR_ALERT_FATAL:
2806 ret = SSL_TLSEXT_ERR_ALERT_FATAL;
2807 al = SSL_AD_INTERNAL_ERROR;
2811 s->tlsext_status_expected = 0;
2813 if (!tls1_alpn_handle_client_hello_late(s, &ret, &al)) {
2819 case SSL_TLSEXT_ERR_ALERT_FATAL:
2820 ssl3_send_alert(s, SSL3_AL_FATAL, al);
2823 case SSL_TLSEXT_ERR_ALERT_WARNING:
2824 ssl3_send_alert(s, SSL3_AL_WARNING, al);
2832 int ssl_check_serverhello_tlsext(SSL *s)
2834 int ret = SSL_TLSEXT_ERR_NOACK;
2835 int al = SSL_AD_UNRECOGNIZED_NAME;
2837 #ifndef OPENSSL_NO_EC
2839 * If we are client and using an elliptic curve cryptography cipher
2840 * suite, then if server returns an EC point formats lists extension it
2841 * must contain uncompressed.
2843 unsigned long alg_k = s->s3->tmp.new_cipher->algorithm_mkey;
2844 unsigned long alg_a = s->s3->tmp.new_cipher->algorithm_auth;
2845 if ((s->tlsext_ecpointformatlist != NULL)
2846 && (s->tlsext_ecpointformatlist_length > 0)
2847 && (s->session->tlsext_ecpointformatlist != NULL)
2848 && (s->session->tlsext_ecpointformatlist_length > 0)
2849 && ((alg_k & SSL_kECDHE) || (alg_a & SSL_aECDSA))) {
2850 /* we are using an ECC cipher */
2852 unsigned char *list;
2853 int found_uncompressed = 0;
2854 list = s->session->tlsext_ecpointformatlist;
2855 for (i = 0; i < s->session->tlsext_ecpointformatlist_length; i++) {
2856 if (*(list++) == TLSEXT_ECPOINTFORMAT_uncompressed) {
2857 found_uncompressed = 1;
2861 if (!found_uncompressed) {
2862 SSLerr(SSL_F_SSL_CHECK_SERVERHELLO_TLSEXT,
2863 SSL_R_TLS_INVALID_ECPOINTFORMAT_LIST);
2867 ret = SSL_TLSEXT_ERR_OK;
2868 #endif /* OPENSSL_NO_EC */
2870 if (s->ctx != NULL && s->ctx->tlsext_servername_callback != 0)
2872 s->ctx->tlsext_servername_callback(s, &al,
2873 s->ctx->tlsext_servername_arg);
2874 else if (s->initial_ctx != NULL
2875 && s->initial_ctx->tlsext_servername_callback != 0)
2877 s->initial_ctx->tlsext_servername_callback(s, &al,
2879 initial_ctx->tlsext_servername_arg);
2882 * Ensure we get sensible values passed to tlsext_status_cb in the event
2883 * that we don't receive a status message
2885 OPENSSL_free(s->tlsext_ocsp_resp);
2886 s->tlsext_ocsp_resp = NULL;
2887 s->tlsext_ocsp_resplen = -1;
2890 case SSL_TLSEXT_ERR_ALERT_FATAL:
2891 ssl3_send_alert(s, SSL3_AL_FATAL, al);
2894 case SSL_TLSEXT_ERR_ALERT_WARNING:
2895 ssl3_send_alert(s, SSL3_AL_WARNING, al);
2898 case SSL_TLSEXT_ERR_NOACK:
2899 s->servername_done = 0;
2905 int ssl_parse_serverhello_tlsext(SSL *s, PACKET *pkt)
2908 if (s->version < SSL3_VERSION)
2910 if (ssl_scan_serverhello_tlsext(s, pkt, &al) <= 0) {
2911 ssl3_send_alert(s, SSL3_AL_FATAL, al);
2915 if (ssl_check_serverhello_tlsext(s) <= 0) {
2916 SSLerr(SSL_F_SSL_PARSE_SERVERHELLO_TLSEXT, SSL_R_SERVERHELLO_TLSEXT);
2923 * Since the server cache lookup is done early on in the processing of the
2924 * ClientHello and other operations depend on the result some extensions
2925 * need to be handled at the same time.
2927 * Two extensions are currently handled, session ticket and extended master
2930 * session_id: ClientHello session ID.
2931 * ext: ClientHello extensions (including length prefix)
2932 * ret: (output) on return, if a ticket was decrypted, then this is set to
2933 * point to the resulting session.
2935 * If s->tls_session_secret_cb is set then we are expecting a pre-shared key
2936 * ciphersuite, in which case we have no use for session tickets and one will
2937 * never be decrypted, nor will s->tlsext_ticket_expected be set to 1.
2940 * -1: fatal error, either from parsing or decrypting the ticket.
2941 * 0: no ticket was found (or was ignored, based on settings).
2942 * 1: a zero length extension was found, indicating that the client supports
2943 * session tickets but doesn't currently have one to offer.
2944 * 2: either s->tls_session_secret_cb was set, or a ticket was offered but
2945 * couldn't be decrypted because of a non-fatal error.
2946 * 3: a ticket was successfully decrypted and *ret was set.
2949 * Sets s->tlsext_ticket_expected to 1 if the server will have to issue
2950 * a new session ticket to the client because the client indicated support
2951 * (and s->tls_session_secret_cb is NULL) but the client either doesn't have
2952 * a session ticket or we couldn't use the one it gave us, or if
2953 * s->ctx->tlsext_ticket_key_cb asked to renew the client's ticket.
2954 * Otherwise, s->tlsext_ticket_expected is set to 0.
2956 * For extended master secret flag is set if the extension is present.
2959 int tls_check_serverhello_tlsext_early(SSL *s, const PACKET *ext,
2960 const PACKET *session_id,
2964 PACKET local_ext = *ext;
2967 int have_ticket = 0;
2968 int use_ticket = tls_use_ticket(s);
2971 s->tlsext_ticket_expected = 0;
2972 s->s3->flags &= ~TLS1_FLAGS_RECEIVED_EXTMS;
2975 * If tickets disabled behave as if no ticket present to permit stateful
2978 if ((s->version <= SSL3_VERSION))
2981 if (!PACKET_get_net_2(&local_ext, &i)) {
2985 while (PACKET_remaining(&local_ext) >= 4) {
2986 unsigned int type, size;
2988 if (!PACKET_get_net_2(&local_ext, &type)
2989 || !PACKET_get_net_2(&local_ext, &size)) {
2990 /* Shouldn't ever happen */
2994 if (PACKET_remaining(&local_ext) < size) {
2998 if (type == TLSEXT_TYPE_session_ticket && use_ticket) {
3000 const unsigned char *etick;
3002 /* Duplicate extension */
3003 if (have_ticket != 0) {
3011 * The client will accept a ticket but doesn't currently have
3014 s->tlsext_ticket_expected = 1;
3018 if (s->tls_session_secret_cb) {
3020 * Indicate that the ticket couldn't be decrypted rather than
3021 * generating the session from ticket now, trigger
3022 * abbreviated handshake based on external mechanism to
3023 * calculate the master secret later.
3028 if (!PACKET_get_bytes(&local_ext, &etick, size)) {
3029 /* Shouldn't ever happen */
3033 r = tls_decrypt_ticket(s, etick, size, PACKET_data(session_id),
3034 PACKET_remaining(session_id), ret);
3036 case 2: /* ticket couldn't be decrypted */
3037 s->tlsext_ticket_expected = 1;
3040 case 3: /* ticket was decrypted */
3043 case 4: /* ticket decrypted but need to renew */
3044 s->tlsext_ticket_expected = 1;
3047 default: /* fatal error */
3053 if (type == TLSEXT_TYPE_extended_master_secret)
3054 s->s3->flags |= TLS1_FLAGS_RECEIVED_EXTMS;
3055 if (!PACKET_forward(&local_ext, size)) {
3061 if (have_ticket == 0)
3068 * tls_decrypt_ticket attempts to decrypt a session ticket.
3070 * etick: points to the body of the session ticket extension.
3071 * eticklen: the length of the session tickets extenion.
3072 * sess_id: points at the session ID.
3073 * sesslen: the length of the session ID.
3074 * psess: (output) on return, if a ticket was decrypted, then this is set to
3075 * point to the resulting session.
3078 * -2: fatal error, malloc failure.
3079 * -1: fatal error, either from parsing or decrypting the ticket.
3080 * 2: the ticket couldn't be decrypted.
3081 * 3: a ticket was successfully decrypted and *psess was set.
3082 * 4: same as 3, but the ticket needs to be renewed.
3084 static int tls_decrypt_ticket(SSL *s, const unsigned char *etick,
3085 int eticklen, const unsigned char *sess_id,
3086 int sesslen, SSL_SESSION **psess)
3089 unsigned char *sdec;
3090 const unsigned char *p;
3091 int slen, mlen, renew_ticket = 0, ret = -1;
3092 unsigned char tick_hmac[EVP_MAX_MD_SIZE];
3093 HMAC_CTX *hctx = NULL;
3094 EVP_CIPHER_CTX *ctx;
3095 SSL_CTX *tctx = s->initial_ctx;
3096 /* Need at least keyname + iv + some encrypted data */
3099 /* Initialize session ticket encryption and HMAC contexts */
3100 hctx = HMAC_CTX_new();
3103 ctx = EVP_CIPHER_CTX_new();
3108 if (tctx->tlsext_ticket_key_cb) {
3109 unsigned char *nctick = (unsigned char *)etick;
3110 int rv = tctx->tlsext_ticket_key_cb(s, nctick, nctick + 16,
3121 /* Check key name matches */
3122 if (memcmp(etick, tctx->tlsext_tick_key_name, 16)) {
3126 if (HMAC_Init_ex(hctx, tctx->tlsext_tick_hmac_key, 16,
3127 EVP_sha256(), NULL) <= 0
3128 || EVP_DecryptInit_ex(ctx, EVP_aes_128_cbc(), NULL,
3129 tctx->tlsext_tick_aes_key,
3135 * Attempt to process session ticket, first conduct sanity and integrity
3138 mlen = HMAC_size(hctx);
3143 /* Check HMAC of encrypted ticket */
3144 if (HMAC_Update(hctx, etick, eticklen) <= 0
3145 || HMAC_Final(hctx, tick_hmac, NULL) <= 0) {
3148 HMAC_CTX_free(hctx);
3149 if (CRYPTO_memcmp(tick_hmac, etick + eticklen, mlen)) {
3150 EVP_CIPHER_CTX_free(ctx);
3153 /* Attempt to decrypt session data */
3154 /* Move p after IV to start of encrypted ticket, update length */
3155 p = etick + 16 + EVP_CIPHER_CTX_iv_length(ctx);
3156 eticklen -= 16 + EVP_CIPHER_CTX_iv_length(ctx);
3157 sdec = OPENSSL_malloc(eticklen);
3159 || EVP_DecryptUpdate(ctx, sdec, &slen, p, eticklen) <= 0) {
3160 EVP_CIPHER_CTX_free(ctx);
3164 if (EVP_DecryptFinal(ctx, sdec + slen, &mlen) <= 0) {
3165 EVP_CIPHER_CTX_free(ctx);
3170 EVP_CIPHER_CTX_free(ctx);
3174 sess = d2i_SSL_SESSION(NULL, &p, slen);
3178 * The session ID, if non-empty, is used by some clients to detect
3179 * that the ticket has been accepted. So we copy it to the session
3180 * structure. If it is empty set length to zero as required by
3184 memcpy(sess->session_id, sess_id, sesslen);
3185 sess->session_id_length = sesslen;
3194 * For session parse failure, indicate that we need to send a new ticket.
3198 EVP_CIPHER_CTX_free(ctx);
3199 HMAC_CTX_free(hctx);
3203 /* Tables to translate from NIDs to TLS v1.2 ids */
3210 static const tls12_lookup tls12_md[] = {
3211 {NID_md5, TLSEXT_hash_md5},
3212 {NID_sha1, TLSEXT_hash_sha1},
3213 {NID_sha224, TLSEXT_hash_sha224},
3214 {NID_sha256, TLSEXT_hash_sha256},
3215 {NID_sha384, TLSEXT_hash_sha384},
3216 {NID_sha512, TLSEXT_hash_sha512},
3217 {NID_id_GostR3411_94, TLSEXT_hash_gostr3411},
3218 {NID_id_GostR3411_2012_256, TLSEXT_hash_gostr34112012_256},
3219 {NID_id_GostR3411_2012_512, TLSEXT_hash_gostr34112012_512},
3222 static const tls12_lookup tls12_sig[] = {
3223 {EVP_PKEY_RSA, TLSEXT_signature_rsa},
3224 {EVP_PKEY_DSA, TLSEXT_signature_dsa},
3225 {EVP_PKEY_EC, TLSEXT_signature_ecdsa},
3226 {NID_id_GostR3410_2001, TLSEXT_signature_gostr34102001},
3227 {NID_id_GostR3410_2012_256, TLSEXT_signature_gostr34102012_256},
3228 {NID_id_GostR3410_2012_512, TLSEXT_signature_gostr34102012_512}
3231 static int tls12_find_id(int nid, const tls12_lookup *table, size_t tlen)
3234 for (i = 0; i < tlen; i++) {
3235 if (table[i].nid == nid)
3241 static int tls12_find_nid(int id, const tls12_lookup *table, size_t tlen)
3244 for (i = 0; i < tlen; i++) {
3245 if ((table[i].id) == id)
3246 return table[i].nid;
3251 int tls12_get_sigandhash(unsigned char *p, const EVP_PKEY *pk,
3257 md_id = tls12_find_id(EVP_MD_type(md), tls12_md, OSSL_NELEM(tls12_md));
3260 sig_id = tls12_get_sigid(pk);
3263 p[0] = (unsigned char)md_id;
3264 p[1] = (unsigned char)sig_id;
3268 int tls12_get_sigid(const EVP_PKEY *pk)
3270 return tls12_find_id(EVP_PKEY_id(pk), tls12_sig, OSSL_NELEM(tls12_sig));
3277 unsigned char tlsext_hash;
3280 static const tls12_hash_info tls12_md_info[] = {
3281 {NID_md5, 64, SSL_MD_MD5_IDX, TLSEXT_hash_md5},
3282 {NID_sha1, 80, SSL_MD_SHA1_IDX, TLSEXT_hash_sha1},
3283 {NID_sha224, 112, SSL_MD_SHA224_IDX, TLSEXT_hash_sha224},
3284 {NID_sha256, 128, SSL_MD_SHA256_IDX, TLSEXT_hash_sha256},
3285 {NID_sha384, 192, SSL_MD_SHA384_IDX, TLSEXT_hash_sha384},
3286 {NID_sha512, 256, SSL_MD_SHA512_IDX, TLSEXT_hash_sha512},
3287 {NID_id_GostR3411_94, 128, SSL_MD_GOST94_IDX, TLSEXT_hash_gostr3411},
3288 {NID_id_GostR3411_2012_256, 128, SSL_MD_GOST12_256_IDX, TLSEXT_hash_gostr34112012_256},
3289 {NID_id_GostR3411_2012_512, 256, SSL_MD_GOST12_512_IDX, TLSEXT_hash_gostr34112012_512},
3292 static const tls12_hash_info *tls12_get_hash_info(unsigned char hash_alg)
3298 for (i=0; i < OSSL_NELEM(tls12_md_info); i++)
3300 if (tls12_md_info[i].tlsext_hash == hash_alg)
3301 return tls12_md_info + i;
3307 const EVP_MD *tls12_get_hash(unsigned char hash_alg)
3309 const tls12_hash_info *inf;
3310 if (hash_alg == TLSEXT_hash_md5 && FIPS_mode())
3312 inf = tls12_get_hash_info(hash_alg);
3315 return ssl_md(inf->md_idx);
3318 static int tls12_get_pkey_idx(unsigned char sig_alg)
3321 #ifndef OPENSSL_NO_RSA
3322 case TLSEXT_signature_rsa:
3323 return SSL_PKEY_RSA_SIGN;
3325 #ifndef OPENSSL_NO_DSA
3326 case TLSEXT_signature_dsa:
3327 return SSL_PKEY_DSA_SIGN;
3329 #ifndef OPENSSL_NO_EC
3330 case TLSEXT_signature_ecdsa:
3331 return SSL_PKEY_ECC;
3333 # ifndef OPENSSL_NO_GOST
3334 case TLSEXT_signature_gostr34102001:
3335 return SSL_PKEY_GOST01;
3337 case TLSEXT_signature_gostr34102012_256:
3338 return SSL_PKEY_GOST12_256;
3340 case TLSEXT_signature_gostr34102012_512:
3341 return SSL_PKEY_GOST12_512;
3347 /* Convert TLS 1.2 signature algorithm extension values into NIDs */
3348 static void tls1_lookup_sigalg(int *phash_nid, int *psign_nid,
3349 int *psignhash_nid, const unsigned char *data)
3351 int sign_nid = NID_undef, hash_nid = NID_undef;
3352 if (!phash_nid && !psign_nid && !psignhash_nid)
3354 if (phash_nid || psignhash_nid) {
3355 hash_nid = tls12_find_nid(data[0], tls12_md, OSSL_NELEM(tls12_md));
3357 *phash_nid = hash_nid;
3359 if (psign_nid || psignhash_nid) {
3360 sign_nid = tls12_find_nid(data[1], tls12_sig, OSSL_NELEM(tls12_sig));
3362 *psign_nid = sign_nid;
3364 if (psignhash_nid) {
3365 if (sign_nid == NID_undef || hash_nid == NID_undef
3366 || OBJ_find_sigid_by_algs(psignhash_nid, hash_nid,
3368 *psignhash_nid = NID_undef;
3372 /* Check to see if a signature algorithm is allowed */
3373 static int tls12_sigalg_allowed(SSL *s, int op, const unsigned char *ptmp)
3375 /* See if we have an entry in the hash table and it is enabled */
3376 const tls12_hash_info *hinf = tls12_get_hash_info(ptmp[0]);
3377 if (hinf == NULL || ssl_md(hinf->md_idx) == NULL)
3379 /* See if public key algorithm allowed */
3380 if (tls12_get_pkey_idx(ptmp[1]) == -1)
3382 /* Finally see if security callback allows it */
3383 return ssl_security(s, op, hinf->secbits, hinf->nid, (void *)ptmp);
3387 * Get a mask of disabled public key algorithms based on supported signature
3388 * algorithms. For example if no signature algorithm supports RSA then RSA is
3392 void ssl_set_sig_mask(uint32_t *pmask_a, SSL *s, int op)
3394 const unsigned char *sigalgs;
3395 size_t i, sigalgslen;
3396 int have_rsa = 0, have_dsa = 0, have_ecdsa = 0;
3398 * Now go through all signature algorithms seeing if we support any for
3399 * RSA, DSA, ECDSA. Do this for all versions not just TLS 1.2. To keep
3400 * down calls to security callback only check if we have to.
3402 sigalgslen = tls12_get_psigalgs(s, &sigalgs);
3403 for (i = 0; i < sigalgslen; i += 2, sigalgs += 2) {
3404 switch (sigalgs[1]) {
3405 #ifndef OPENSSL_NO_RSA
3406 case TLSEXT_signature_rsa:
3407 if (!have_rsa && tls12_sigalg_allowed(s, op, sigalgs))
3411 #ifndef OPENSSL_NO_DSA
3412 case TLSEXT_signature_dsa:
3413 if (!have_dsa && tls12_sigalg_allowed(s, op, sigalgs))
3417 #ifndef OPENSSL_NO_EC
3418 case TLSEXT_signature_ecdsa:
3419 if (!have_ecdsa && tls12_sigalg_allowed(s, op, sigalgs))
3426 *pmask_a |= SSL_aRSA;
3428 *pmask_a |= SSL_aDSS;
3430 *pmask_a |= SSL_aECDSA;
3433 size_t tls12_copy_sigalgs(SSL *s, unsigned char *out,
3434 const unsigned char *psig, size_t psiglen)
3436 unsigned char *tmpout = out;
3438 for (i = 0; i < psiglen; i += 2, psig += 2) {
3439 if (tls12_sigalg_allowed(s, SSL_SECOP_SIGALG_SUPPORTED, psig)) {
3440 *tmpout++ = psig[0];
3441 *tmpout++ = psig[1];
3444 return tmpout - out;
3447 /* Given preference and allowed sigalgs set shared sigalgs */
3448 static int tls12_shared_sigalgs(SSL *s, TLS_SIGALGS *shsig,
3449 const unsigned char *pref, size_t preflen,
3450 const unsigned char *allow, size_t allowlen)
3452 const unsigned char *ptmp, *atmp;
3453 size_t i, j, nmatch = 0;
3454 for (i = 0, ptmp = pref; i < preflen; i += 2, ptmp += 2) {
3455 /* Skip disabled hashes or signature algorithms */
3456 if (!tls12_sigalg_allowed(s, SSL_SECOP_SIGALG_SHARED, ptmp))
3458 for (j = 0, atmp = allow; j < allowlen; j += 2, atmp += 2) {
3459 if (ptmp[0] == atmp[0] && ptmp[1] == atmp[1]) {
3462 shsig->rhash = ptmp[0];
3463 shsig->rsign = ptmp[1];
3464 tls1_lookup_sigalg(&shsig->hash_nid,
3466 &shsig->signandhash_nid, ptmp);
3476 /* Set shared signature algorithms for SSL structures */
3477 static int tls1_set_shared_sigalgs(SSL *s)
3479 const unsigned char *pref, *allow, *conf;
3480 size_t preflen, allowlen, conflen;
3482 TLS_SIGALGS *salgs = NULL;
3484 unsigned int is_suiteb = tls1_suiteb(s);
3486 OPENSSL_free(c->shared_sigalgs);
3487 c->shared_sigalgs = NULL;
3488 c->shared_sigalgslen = 0;
3489 /* If client use client signature algorithms if not NULL */
3490 if (!s->server && c->client_sigalgs && !is_suiteb) {
3491 conf = c->client_sigalgs;
3492 conflen = c->client_sigalgslen;
3493 } else if (c->conf_sigalgs && !is_suiteb) {
3494 conf = c->conf_sigalgs;
3495 conflen = c->conf_sigalgslen;
3497 conflen = tls12_get_psigalgs(s, &conf);
3498 if (s->options & SSL_OP_CIPHER_SERVER_PREFERENCE || is_suiteb) {
3501 allow = s->s3->tmp.peer_sigalgs;
3502 allowlen = s->s3->tmp.peer_sigalgslen;
3506 pref = s->s3->tmp.peer_sigalgs;
3507 preflen = s->s3->tmp.peer_sigalgslen;
3509 nmatch = tls12_shared_sigalgs(s, NULL, pref, preflen, allow, allowlen);
3511 salgs = OPENSSL_malloc(nmatch * sizeof(TLS_SIGALGS));
3514 nmatch = tls12_shared_sigalgs(s, salgs, pref, preflen, allow, allowlen);
3518 c->shared_sigalgs = salgs;
3519 c->shared_sigalgslen = nmatch;
3523 /* Set preferred digest for each key type */
3525 int tls1_save_sigalgs(SSL *s, const unsigned char *data, int dsize)
3528 /* Extension ignored for inappropriate versions */
3529 if (!SSL_USE_SIGALGS(s))
3531 /* Should never happen */
3535 OPENSSL_free(s->s3->tmp.peer_sigalgs);
3536 s->s3->tmp.peer_sigalgs = OPENSSL_malloc(dsize);
3537 if (s->s3->tmp.peer_sigalgs == NULL)
3539 s->s3->tmp.peer_sigalgslen = dsize;
3540 memcpy(s->s3->tmp.peer_sigalgs, data, dsize);
3544 int tls1_process_sigalgs(SSL *s)
3549 const EVP_MD **pmd = s->s3->tmp.md;
3550 uint32_t *pvalid = s->s3->tmp.valid_flags;
3552 TLS_SIGALGS *sigptr;
3553 if (!tls1_set_shared_sigalgs(s))
3556 for (i = 0, sigptr = c->shared_sigalgs;
3557 i < c->shared_sigalgslen; i++, sigptr++) {
3558 idx = tls12_get_pkey_idx(sigptr->rsign);
3559 if (idx > 0 && pmd[idx] == NULL) {
3560 md = tls12_get_hash(sigptr->rhash);
3562 pvalid[idx] = CERT_PKEY_EXPLICIT_SIGN;
3563 if (idx == SSL_PKEY_RSA_SIGN) {
3564 pvalid[SSL_PKEY_RSA_ENC] = CERT_PKEY_EXPLICIT_SIGN;
3565 pmd[SSL_PKEY_RSA_ENC] = md;
3571 * In strict mode leave unset digests as NULL to indicate we can't use
3572 * the certificate for signing.
3574 if (!(s->cert->cert_flags & SSL_CERT_FLAGS_CHECK_TLS_STRICT)) {
3576 * Set any remaining keys to default values. NOTE: if alg is not
3577 * supported it stays as NULL.
3579 #ifndef OPENSSL_NO_DSA
3580 if (pmd[SSL_PKEY_DSA_SIGN] == NULL)
3581 pmd[SSL_PKEY_DSA_SIGN] = EVP_sha1();
3583 #ifndef OPENSSL_NO_RSA
3584 if (pmd[SSL_PKEY_RSA_SIGN] == NULL) {
3585 pmd[SSL_PKEY_RSA_SIGN] = EVP_sha1();
3586 pmd[SSL_PKEY_RSA_ENC] = EVP_sha1();
3589 #ifndef OPENSSL_NO_EC
3590 if (pmd[SSL_PKEY_ECC] == NULL)
3591 pmd[SSL_PKEY_ECC] = EVP_sha1();
3593 # ifndef OPENSSL_NO_GOST
3594 if (pmd[SSL_PKEY_GOST01] == NULL)
3595 pmd[SSL_PKEY_GOST01] = EVP_get_digestbynid(NID_id_GostR3411_94);
3596 if (pmd[SSL_PKEY_GOST12_256] == NULL)
3597 pmd[SSL_PKEY_GOST12_256] = EVP_get_digestbynid(NID_id_GostR3411_2012_256);
3598 if (pmd[SSL_PKEY_GOST12_512] == NULL)
3599 pmd[SSL_PKEY_GOST12_512] = EVP_get_digestbynid(NID_id_GostR3411_2012_512);
3605 int SSL_get_sigalgs(SSL *s, int idx,
3606 int *psign, int *phash, int *psignhash,
3607 unsigned char *rsig, unsigned char *rhash)
3609 const unsigned char *psig = s->s3->tmp.peer_sigalgs;
3614 if (idx >= (int)s->s3->tmp.peer_sigalgslen)
3621 tls1_lookup_sigalg(phash, psign, psignhash, psig);
3623 return s->s3->tmp.peer_sigalgslen / 2;
3626 int SSL_get_shared_sigalgs(SSL *s, int idx,
3627 int *psign, int *phash, int *psignhash,
3628 unsigned char *rsig, unsigned char *rhash)
3630 TLS_SIGALGS *shsigalgs = s->cert->shared_sigalgs;
3631 if (!shsigalgs || idx >= (int)s->cert->shared_sigalgslen)
3635 *phash = shsigalgs->hash_nid;
3637 *psign = shsigalgs->sign_nid;
3639 *psignhash = shsigalgs->signandhash_nid;
3641 *rsig = shsigalgs->rsign;
3643 *rhash = shsigalgs->rhash;
3644 return s->cert->shared_sigalgslen;
3647 #define MAX_SIGALGLEN (TLSEXT_hash_num * TLSEXT_signature_num * 2)
3651 int sigalgs[MAX_SIGALGLEN];
3654 static void get_sigorhash(int *psig, int *phash, const char *str)
3656 if (strcmp(str, "RSA") == 0) {
3657 *psig = EVP_PKEY_RSA;
3658 } else if (strcmp(str, "DSA") == 0) {
3659 *psig = EVP_PKEY_DSA;
3660 } else if (strcmp(str, "ECDSA") == 0) {
3661 *psig = EVP_PKEY_EC;
3663 *phash = OBJ_sn2nid(str);
3664 if (*phash == NID_undef)
3665 *phash = OBJ_ln2nid(str);
3669 static int sig_cb(const char *elem, int len, void *arg)
3671 sig_cb_st *sarg = arg;
3674 int sig_alg = NID_undef, hash_alg = NID_undef;
3677 if (sarg->sigalgcnt == MAX_SIGALGLEN)
3679 if (len > (int)(sizeof(etmp) - 1))
3681 memcpy(etmp, elem, len);
3683 p = strchr(etmp, '+');
3691 get_sigorhash(&sig_alg, &hash_alg, etmp);
3692 get_sigorhash(&sig_alg, &hash_alg, p);
3694 if (sig_alg == NID_undef || hash_alg == NID_undef)
3697 for (i = 0; i < sarg->sigalgcnt; i += 2) {
3698 if (sarg->sigalgs[i] == sig_alg && sarg->sigalgs[i + 1] == hash_alg)
3701 sarg->sigalgs[sarg->sigalgcnt++] = hash_alg;
3702 sarg->sigalgs[sarg->sigalgcnt++] = sig_alg;
3707 * Set suppored signature algorithms based on a colon separated list of the
3708 * form sig+hash e.g. RSA+SHA512:DSA+SHA512
3710 int tls1_set_sigalgs_list(CERT *c, const char *str, int client)
3714 if (!CONF_parse_list(str, ':', 1, sig_cb, &sig))
3718 return tls1_set_sigalgs(c, sig.sigalgs, sig.sigalgcnt, client);
3721 int tls1_set_sigalgs(CERT *c, const int *psig_nids, size_t salglen,
3724 unsigned char *sigalgs, *sptr;
3729 sigalgs = OPENSSL_malloc(salglen);
3730 if (sigalgs == NULL)
3732 for (i = 0, sptr = sigalgs; i < salglen; i += 2) {
3733 rhash = tls12_find_id(*psig_nids++, tls12_md, OSSL_NELEM(tls12_md));
3734 rsign = tls12_find_id(*psig_nids++, tls12_sig, OSSL_NELEM(tls12_sig));
3736 if (rhash == -1 || rsign == -1)
3743 OPENSSL_free(c->client_sigalgs);
3744 c->client_sigalgs = sigalgs;
3745 c->client_sigalgslen = salglen;
3747 OPENSSL_free(c->conf_sigalgs);
3748 c->conf_sigalgs = sigalgs;
3749 c->conf_sigalgslen = salglen;
3755 OPENSSL_free(sigalgs);
3759 static int tls1_check_sig_alg(CERT *c, X509 *x, int default_nid)
3763 if (default_nid == -1)
3765 sig_nid = X509_get_signature_nid(x);
3767 return sig_nid == default_nid ? 1 : 0;
3768 for (i = 0; i < c->shared_sigalgslen; i++)
3769 if (sig_nid == c->shared_sigalgs[i].signandhash_nid)
3774 /* Check to see if a certificate issuer name matches list of CA names */
3775 static int ssl_check_ca_name(STACK_OF(X509_NAME) *names, X509 *x)
3779 nm = X509_get_issuer_name(x);
3780 for (i = 0; i < sk_X509_NAME_num(names); i++) {
3781 if (!X509_NAME_cmp(nm, sk_X509_NAME_value(names, i)))
3788 * Check certificate chain is consistent with TLS extensions and is usable by
3789 * server. This servers two purposes: it allows users to check chains before
3790 * passing them to the server and it allows the server to check chains before
3791 * attempting to use them.
3794 /* Flags which need to be set for a certificate when stict mode not set */
3796 #define CERT_PKEY_VALID_FLAGS \
3797 (CERT_PKEY_EE_SIGNATURE|CERT_PKEY_EE_PARAM)
3798 /* Strict mode flags */
3799 #define CERT_PKEY_STRICT_FLAGS \
3800 (CERT_PKEY_VALID_FLAGS|CERT_PKEY_CA_SIGNATURE|CERT_PKEY_CA_PARAM \
3801 | CERT_PKEY_ISSUER_NAME|CERT_PKEY_CERT_TYPE)
3803 int tls1_check_chain(SSL *s, X509 *x, EVP_PKEY *pk, STACK_OF(X509) *chain,
3808 int check_flags = 0, strict_mode;
3809 CERT_PKEY *cpk = NULL;
3812 unsigned int suiteb_flags = tls1_suiteb(s);
3813 /* idx == -1 means checking server chains */
3815 /* idx == -2 means checking client certificate chains */
3818 idx = cpk - c->pkeys;
3820 cpk = c->pkeys + idx;
3821 pvalid = s->s3->tmp.valid_flags + idx;
3823 pk = cpk->privatekey;
3825 strict_mode = c->cert_flags & SSL_CERT_FLAGS_CHECK_TLS_STRICT;
3826 /* If no cert or key, forget it */
3832 idx = ssl_cert_type(x, pk);
3835 pvalid = s->s3->tmp.valid_flags + idx;
3837 if (c->cert_flags & SSL_CERT_FLAGS_CHECK_TLS_STRICT)
3838 check_flags = CERT_PKEY_STRICT_FLAGS;
3840 check_flags = CERT_PKEY_VALID_FLAGS;
3847 check_flags |= CERT_PKEY_SUITEB;
3848 ok = X509_chain_check_suiteb(NULL, x, chain, suiteb_flags);
3849 if (ok == X509_V_OK)
3850 rv |= CERT_PKEY_SUITEB;
3851 else if (!check_flags)
3856 * Check all signature algorithms are consistent with signature
3857 * algorithms extension if TLS 1.2 or later and strict mode.
3859 if (TLS1_get_version(s) >= TLS1_2_VERSION && strict_mode) {
3861 unsigned char rsign = 0;
3862 if (s->s3->tmp.peer_sigalgs)
3864 /* If no sigalgs extension use defaults from RFC5246 */
3867 case SSL_PKEY_RSA_ENC:
3868 case SSL_PKEY_RSA_SIGN:
3869 rsign = TLSEXT_signature_rsa;
3870 default_nid = NID_sha1WithRSAEncryption;
3873 case SSL_PKEY_DSA_SIGN:
3874 rsign = TLSEXT_signature_dsa;
3875 default_nid = NID_dsaWithSHA1;
3879 rsign = TLSEXT_signature_ecdsa;
3880 default_nid = NID_ecdsa_with_SHA1;
3883 case SSL_PKEY_GOST01:
3884 rsign = TLSEXT_signature_gostr34102001;
3885 default_nid = NID_id_GostR3411_94_with_GostR3410_2001;
3888 case SSL_PKEY_GOST12_256:
3889 rsign = TLSEXT_signature_gostr34102012_256;
3890 default_nid = NID_id_tc26_signwithdigest_gost3410_2012_256;
3893 case SSL_PKEY_GOST12_512:
3894 rsign = TLSEXT_signature_gostr34102012_512;
3895 default_nid = NID_id_tc26_signwithdigest_gost3410_2012_512;
3904 * If peer sent no signature algorithms extension and we have set
3905 * preferred signature algorithms check we support sha1.
3907 if (default_nid > 0 && c->conf_sigalgs) {
3909 const unsigned char *p = c->conf_sigalgs;
3910 for (j = 0; j < c->conf_sigalgslen; j += 2, p += 2) {
3911 if (p[0] == TLSEXT_hash_sha1 && p[1] == rsign)
3914 if (j == c->conf_sigalgslen) {
3921 /* Check signature algorithm of each cert in chain */
3922 if (!tls1_check_sig_alg(c, x, default_nid)) {
3926 rv |= CERT_PKEY_EE_SIGNATURE;
3927 rv |= CERT_PKEY_CA_SIGNATURE;
3928 for (i = 0; i < sk_X509_num(chain); i++) {
3929 if (!tls1_check_sig_alg(c, sk_X509_value(chain, i), default_nid)) {
3931 rv &= ~CERT_PKEY_CA_SIGNATURE;
3938 /* Else not TLS 1.2, so mark EE and CA signing algorithms OK */
3939 else if (check_flags)
3940 rv |= CERT_PKEY_EE_SIGNATURE | CERT_PKEY_CA_SIGNATURE;
3942 /* Check cert parameters are consistent */
3943 if (tls1_check_cert_param(s, x, check_flags ? 1 : 2))
3944 rv |= CERT_PKEY_EE_PARAM;
3945 else if (!check_flags)
3948 rv |= CERT_PKEY_CA_PARAM;
3949 /* In strict mode check rest of chain too */
3950 else if (strict_mode) {
3951 rv |= CERT_PKEY_CA_PARAM;
3952 for (i = 0; i < sk_X509_num(chain); i++) {
3953 X509 *ca = sk_X509_value(chain, i);
3954 if (!tls1_check_cert_param(s, ca, 0)) {
3956 rv &= ~CERT_PKEY_CA_PARAM;
3963 if (!s->server && strict_mode) {
3964 STACK_OF(X509_NAME) *ca_dn;
3966 switch (EVP_PKEY_id(pk)) {
3968 check_type = TLS_CT_RSA_SIGN;
3971 check_type = TLS_CT_DSS_SIGN;
3974 check_type = TLS_CT_ECDSA_SIGN;
3978 const unsigned char *ctypes;
3982 ctypelen = (int)c->ctype_num;
3984 ctypes = (unsigned char *)s->s3->tmp.ctype;
3985 ctypelen = s->s3->tmp.ctype_num;
3987 for (i = 0; i < ctypelen; i++) {
3988 if (ctypes[i] == check_type) {
3989 rv |= CERT_PKEY_CERT_TYPE;
3993 if (!(rv & CERT_PKEY_CERT_TYPE) && !check_flags)
3996 rv |= CERT_PKEY_CERT_TYPE;
3998 ca_dn = s->s3->tmp.ca_names;
4000 if (!sk_X509_NAME_num(ca_dn))
4001 rv |= CERT_PKEY_ISSUER_NAME;
4003 if (!(rv & CERT_PKEY_ISSUER_NAME)) {
4004 if (ssl_check_ca_name(ca_dn, x))
4005 rv |= CERT_PKEY_ISSUER_NAME;
4007 if (!(rv & CERT_PKEY_ISSUER_NAME)) {
4008 for (i = 0; i < sk_X509_num(chain); i++) {
4009 X509 *xtmp = sk_X509_value(chain, i);
4010 if (ssl_check_ca_name(ca_dn, xtmp)) {
4011 rv |= CERT_PKEY_ISSUER_NAME;
4016 if (!check_flags && !(rv & CERT_PKEY_ISSUER_NAME))
4019 rv |= CERT_PKEY_ISSUER_NAME | CERT_PKEY_CERT_TYPE;
4021 if (!check_flags || (rv & check_flags) == check_flags)
4022 rv |= CERT_PKEY_VALID;
4026 if (TLS1_get_version(s) >= TLS1_2_VERSION) {
4027 if (*pvalid & CERT_PKEY_EXPLICIT_SIGN)
4028 rv |= CERT_PKEY_EXPLICIT_SIGN | CERT_PKEY_SIGN;
4029 else if (s->s3->tmp.md[idx] != NULL)
4030 rv |= CERT_PKEY_SIGN;
4032 rv |= CERT_PKEY_SIGN | CERT_PKEY_EXPLICIT_SIGN;
4035 * When checking a CERT_PKEY structure all flags are irrelevant if the
4039 if (rv & CERT_PKEY_VALID)
4042 /* Preserve explicit sign flag, clear rest */
4043 *pvalid &= CERT_PKEY_EXPLICIT_SIGN;
4050 /* Set validity of certificates in an SSL structure */
4051 void tls1_set_cert_validity(SSL *s)
4053 tls1_check_chain(s, NULL, NULL, NULL, SSL_PKEY_RSA_ENC);
4054 tls1_check_chain(s, NULL, NULL, NULL, SSL_PKEY_RSA_SIGN);
4055 tls1_check_chain(s, NULL, NULL, NULL, SSL_PKEY_DSA_SIGN);
4056 tls1_check_chain(s, NULL, NULL, NULL, SSL_PKEY_ECC);
4057 tls1_check_chain(s, NULL, NULL, NULL, SSL_PKEY_GOST01);
4058 tls1_check_chain(s, NULL, NULL, NULL, SSL_PKEY_GOST12_256);
4059 tls1_check_chain(s, NULL, NULL, NULL, SSL_PKEY_GOST12_512);
4062 /* User level utiity function to check a chain is suitable */
4063 int SSL_check_chain(SSL *s, X509 *x, EVP_PKEY *pk, STACK_OF(X509) *chain)
4065 return tls1_check_chain(s, x, pk, chain, -1);
4069 #ifndef OPENSSL_NO_DH
4070 DH *ssl_get_auto_dh(SSL *s)
4072 int dh_secbits = 80;
4073 if (s->cert->dh_tmp_auto == 2)
4074 return DH_get_1024_160();
4075 if (s->s3->tmp.new_cipher->algorithm_auth & (SSL_aNULL | SSL_aPSK)) {
4076 if (s->s3->tmp.new_cipher->strength_bits == 256)
4081 CERT_PKEY *cpk = ssl_get_server_send_pkey(s);
4082 dh_secbits = EVP_PKEY_security_bits(cpk->privatekey);
4085 if (dh_secbits >= 128) {
4091 BN_set_word(dhp->g, 2);
4092 if (dh_secbits >= 192)
4093 dhp->p = get_rfc3526_prime_8192(NULL);
4095 dhp->p = get_rfc3526_prime_3072(NULL);
4096 if (dhp->p == NULL || dhp->g == NULL) {
4102 if (dh_secbits >= 112)
4103 return DH_get_2048_224();
4104 return DH_get_1024_160();
4108 static int ssl_security_cert_key(SSL *s, SSL_CTX *ctx, X509 *x, int op)
4111 EVP_PKEY *pkey = X509_get0_pubkey(x);
4114 * If no parameters this will return -1 and fail using the default
4115 * security callback for any non-zero security level. This will
4116 * reject keys which omit parameters but this only affects DSA and
4117 * omission of parameters is never (?) done in practice.
4119 secbits = EVP_PKEY_security_bits(pkey);
4122 return ssl_security(s, op, secbits, 0, x);
4124 return ssl_ctx_security(ctx, op, secbits, 0, x);
4127 static int ssl_security_cert_sig(SSL *s, SSL_CTX *ctx, X509 *x, int op)
4129 /* Lookup signature algorithm digest */
4130 int secbits = -1, md_nid = NID_undef, sig_nid;
4131 /* Don't check signature if self signed */
4132 if ((X509_get_extension_flags(x) & EXFLAG_SS) != 0)
4134 sig_nid = X509_get_signature_nid(x);
4135 if (sig_nid && OBJ_find_sigid_algs(sig_nid, &md_nid, NULL)) {
4137 if (md_nid && (md = EVP_get_digestbynid(md_nid)))
4138 secbits = EVP_MD_size(md) * 4;
4141 return ssl_security(s, op, secbits, md_nid, x);
4143 return ssl_ctx_security(ctx, op, secbits, md_nid, x);
4146 int ssl_security_cert(SSL *s, SSL_CTX *ctx, X509 *x, int vfy, int is_ee)
4149 vfy = SSL_SECOP_PEER;
4151 if (!ssl_security_cert_key(s, ctx, x, SSL_SECOP_EE_KEY | vfy))
4152 return SSL_R_EE_KEY_TOO_SMALL;
4154 if (!ssl_security_cert_key(s, ctx, x, SSL_SECOP_CA_KEY | vfy))
4155 return SSL_R_CA_KEY_TOO_SMALL;
4157 if (!ssl_security_cert_sig(s, ctx, x, SSL_SECOP_CA_MD | vfy))
4158 return SSL_R_CA_MD_TOO_WEAK;
4163 * Check security of a chain, if sk includes the end entity certificate then
4164 * x is NULL. If vfy is 1 then we are verifying a peer chain and not sending
4165 * one to the peer. Return values: 1 if ok otherwise error code to use
4168 int ssl_security_cert_chain(SSL *s, STACK_OF(X509) *sk, X509 *x, int vfy)
4170 int rv, start_idx, i;
4172 x = sk_X509_value(sk, 0);
4177 rv = ssl_security_cert(s, NULL, x, vfy, 1);
4181 for (i = start_idx; i < sk_X509_num(sk); i++) {
4182 x = sk_X509_value(sk, i);
4183 rv = ssl_security_cert(s, NULL, x, vfy, 0);