]> git.ipfire.org Git - thirdparty/openssl.git/blame - ssl/statem/statem_lib.c
Add documentation for CMS_EnvelopedData_create()
[thirdparty/openssl.git] / ssl / statem / statem_lib.c
CommitLineData
846e33c7 1/*
33388b44 2 * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved.
aa8f3d76 3 * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved
3813046d 4 *
2c18d164 5 * Licensed under the Apache License 2.0 (the "License"). You may not use
846e33c7
RS
6 * this file except in compliance with the License. You can obtain a copy
7 * in the file LICENSE in the source distribution or at
8 * https://www.openssl.org/source/license.html
3813046d 9 */
846e33c7 10
48948d53 11#include <limits.h>
f2d9a32c 12#include <string.h>
d02b48c6 13#include <stdio.h>
706457b7
DMSP
14#include "../ssl_local.h"
15#include "statem_local.h"
67dc995e 16#include "internal/cryptlib.h"
c2041da8 17#include "internal/evp.h"
ec577822 18#include <openssl/buffer.h>
ec577822
BM
19#include <openssl/objects.h>
20#include <openssl/evp.h>
21#include <openssl/x509.h>
49b26f54 22#include <openssl/trace.h>
d02b48c6 23
852c2ed2
RS
24DEFINE_STACK_OF(X509)
25DEFINE_STACK_OF(X509_NAME)
26DEFINE_STACK_OF_CONST(SSL_CIPHER)
27
c6d38183
RS
28/*
29 * Map error codes to TLS/SSL alart types.
30 */
31typedef struct x509err2alert_st {
32 int x509err;
33 int alert;
34} X509ERR2ALERT;
35
597c51bc
MC
36/* Fixed value used in the ServerHello random field to identify an HRR */
37const unsigned char hrrrandom[] = {
38 0xcf, 0x21, 0xad, 0x74, 0xe5, 0x9a, 0x61, 0x11, 0xbe, 0x1d, 0x8c, 0x02,
39 0x1e, 0x65, 0xb8, 0x91, 0xc2, 0xa2, 0x11, 0x16, 0x7a, 0xbb, 0x8c, 0x5e,
40 0x07, 0x9e, 0x09, 0xe2, 0xc8, 0xa8, 0x33, 0x9c
41};
42
0f113f3e
MC
43/*
44 * send s->init_buf in records of type 'type' (SSL3_RT_HANDSHAKE or
45 * SSL3_RT_CHANGE_CIPHER_SPEC)
46 */
e7ecc7d4 47int ssl3_do_write(SSL *s, int type)
0f113f3e
MC
48{
49 int ret;
7ee8627f 50 size_t written = 0;
0f113f3e
MC
51
52 ret = ssl3_write_bytes(s, type, &s->init_buf->data[s->init_off],
7ee8627f 53 s->init_num, &written);
0f113f3e 54 if (ret < 0)
26a7d938 55 return -1;
0f113f3e
MC
56 if (type == SSL3_RT_HANDSHAKE)
57 /*
58 * should not be done for 'Hello Request's, but in that case we'll
59 * ignore the result anyway
9d75dce3 60 * TLS1.3 KeyUpdate and NewSessionTicket do not need to be added
0f113f3e 61 */
9d75dce3
TS
62 if (!SSL_IS_TLS13(s) || (s->statem.hand_state != TLS_ST_SW_SESSION_TICKET
63 && s->statem.hand_state != TLS_ST_CW_KEY_UPDATE
64 && s->statem.hand_state != TLS_ST_SW_KEY_UPDATE))
65 if (!ssl3_finish_mac(s,
66 (unsigned char *)&s->init_buf->data[s->init_off],
67 written))
68 return -1;
7ee8627f 69 if (written == s->init_num) {
0f113f3e
MC
70 if (s->msg_callback)
71 s->msg_callback(1, s->version, type, s->init_buf->data,
72 (size_t)(s->init_off + s->init_num), s,
73 s->msg_callback_arg);
208fb891 74 return 1;
0f113f3e 75 }
7ee8627f
MC
76 s->init_off += written;
77 s->init_num -= written;
26a7d938 78 return 0;
0f113f3e 79}
e7ecc7d4 80
4a01c59f 81int tls_close_construct_packet(SSL *s, WPACKET *pkt, int htype)
2c7b4dbc
MC
82{
83 size_t msglen;
84
4a01c59f 85 if ((htype != SSL3_MT_CHANGE_CIPHER_SPEC && !WPACKET_close(pkt))
f1ec23c0 86 || !WPACKET_get_length(pkt, &msglen)
7cea05dc 87 || msglen > INT_MAX)
2c7b4dbc
MC
88 return 0;
89 s->init_num = (int)msglen;
90 s->init_off = 0;
91
92 return 1;
93}
94
1f5b44e9
MC
95int tls_setup_handshake(SSL *s)
96{
f63a17d6
MC
97 if (!ssl3_init_finished_mac(s)) {
98 /* SSLfatal() already called */
c7f47786 99 return 0;
f63a17d6 100 }
c7f47786 101
b186a592
MC
102 /* Reset any extension flags */
103 memset(s->ext.extflags, 0, sizeof(s->ext.extflags));
104
c7f47786 105 if (s->server) {
38a73150
MC
106 STACK_OF(SSL_CIPHER) *ciphers = SSL_get_ciphers(s);
107 int i, ver_min, ver_max, ok = 0;
108
109 /*
110 * Sanity check that the maximum version we accept has ciphers
111 * enabled. For clients we do this check during construction of the
112 * ClientHello.
113 */
b5b993b2 114 if (ssl_get_min_max_version(s, &ver_min, &ver_max, NULL) != 0) {
4752c5de
MC
115 SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_SETUP_HANDSHAKE,
116 ERR_R_INTERNAL_ERROR);
38a73150
MC
117 return 0;
118 }
119 for (i = 0; i < sk_SSL_CIPHER_num(ciphers); i++) {
120 const SSL_CIPHER *c = sk_SSL_CIPHER_value(ciphers, i);
121
122 if (SSL_IS_DTLS(s)) {
123 if (DTLS_VERSION_GE(ver_max, c->min_dtls) &&
124 DTLS_VERSION_LE(ver_max, c->max_dtls))
125 ok = 1;
126 } else if (ver_max >= c->min_tls && ver_max <= c->max_tls) {
127 ok = 1;
128 }
129 if (ok)
130 break;
131 }
132 if (!ok) {
4752c5de
MC
133 SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_F_TLS_SETUP_HANDSHAKE,
134 SSL_R_NO_CIPHERS_AVAILABLE);
38a73150
MC
135 ERR_add_error_data(1, "No ciphers enabled for max supported "
136 "SSL/TLS version");
38a73150
MC
137 return 0;
138 }
c7f47786 139 if (SSL_IS_FIRST_HANDSHAKE(s)) {
0e6161bc 140 /* N.B. s->session_ctx == s->ctx here */
9ef9088c 141 tsan_counter(&s->session_ctx->stats.sess_accept);
c7f47786 142 } else {
0e6161bc 143 /* N.B. s->ctx may not equal s->session_ctx */
9ef9088c 144 tsan_counter(&s->ctx->stats.sess_accept_renegotiate);
c7f47786 145
555cbb32 146 s->s3.tmp.cert_request = 0;
c7f47786
MC
147 }
148 } else {
149 if (SSL_IS_FIRST_HANDSHAKE(s))
9ef9088c 150 tsan_counter(&s->session_ctx->stats.sess_connect);
c7f47786 151 else
9ef9088c 152 tsan_counter(&s->session_ctx->stats.sess_connect_renegotiate);
c7f47786
MC
153
154 /* mark client_random uninitialized */
555cbb32 155 memset(s->s3.client_random, 0, sizeof(s->s3.client_random));
c7f47786
MC
156 s->hit = 0;
157
555cbb32 158 s->s3.tmp.cert_req = 0;
c7f47786 159
1f5b44e9 160 if (SSL_IS_DTLS(s))
c7f47786 161 s->statem.use_timer = 1;
c7f47786
MC
162 }
163
164 return 1;
165}
166
2c5dfdc3
MC
167/*
168 * Size of the to-be-signed TLS13 data, without the hash size itself:
169 * 64 bytes of value 32, 33 context bytes, 1 byte separator
170 */
171#define TLS13_TBS_START_SIZE 64
172#define TLS13_TBS_PREAMBLE_SIZE (TLS13_TBS_START_SIZE + 33 + 1)
173
174static int get_cert_verify_tbs_data(SSL *s, unsigned char *tls13tbs,
175 void **hdata, size_t *hdatalen)
176{
48102247 177#ifdef CHARSET_EBCDIC
99435164 178 static const char servercontext[] = { 0x54, 0x4c, 0x53, 0x20, 0x31, 0x2e,
48102247 179 0x33, 0x2c, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x43, 0x65,
180 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72,
181 0x69, 0x66, 0x79, 0x00 };
99435164 182 static const char clientcontext[] = { 0x54, 0x4c, 0x53, 0x20, 0x31, 0x2e,
48102247 183 0x33, 0x2c, 0x20, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x20, 0x43, 0x65,
184 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72,
185 0x69, 0x66, 0x79, 0x00 };
186#else
99435164
AV
187 static const char servercontext[] = "TLS 1.3, server CertificateVerify";
188 static const char clientcontext[] = "TLS 1.3, client CertificateVerify";
48102247 189#endif
2c5dfdc3
MC
190 if (SSL_IS_TLS13(s)) {
191 size_t hashlen;
192
193 /* Set the first 64 bytes of to-be-signed data to octet 32 */
194 memset(tls13tbs, 32, TLS13_TBS_START_SIZE);
195 /* This copies the 33 bytes of context plus the 0 separator byte */
196 if (s->statem.hand_state == TLS_ST_CR_CERT_VRFY
197 || s->statem.hand_state == TLS_ST_SW_CERT_VRFY)
198 strcpy((char *)tls13tbs + TLS13_TBS_START_SIZE, servercontext);
199 else
200 strcpy((char *)tls13tbs + TLS13_TBS_START_SIZE, clientcontext);
201
202 /*
203 * If we're currently reading then we need to use the saved handshake
204 * hash value. We can't use the current handshake hash state because
205 * that includes the CertVerify itself.
206 */
207 if (s->statem.hand_state == TLS_ST_CR_CERT_VRFY
208 || s->statem.hand_state == TLS_ST_SR_CERT_VRFY) {
209 memcpy(tls13tbs + TLS13_TBS_PREAMBLE_SIZE, s->cert_verify_hash,
210 s->cert_verify_hash_len);
211 hashlen = s->cert_verify_hash_len;
212 } else if (!ssl_handshake_hash(s, tls13tbs + TLS13_TBS_PREAMBLE_SIZE,
213 EVP_MAX_MD_SIZE, &hashlen)) {
f63a17d6 214 /* SSLfatal() already called */
2c5dfdc3
MC
215 return 0;
216 }
217
218 *hdata = tls13tbs;
219 *hdatalen = TLS13_TBS_PREAMBLE_SIZE + hashlen;
220 } else {
221 size_t retlen;
60690b5b 222 long retlen_l;
2c5dfdc3 223
555cbb32 224 retlen = retlen_l = BIO_get_mem_data(s->s3.handshake_buffer, hdata);
60690b5b 225 if (retlen_l <= 0) {
f63a17d6
MC
226 SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_GET_CERT_VERIFY_TBS_DATA,
227 ERR_R_INTERNAL_ERROR);
2c5dfdc3 228 return 0;
f63a17d6 229 }
2c5dfdc3
MC
230 *hdatalen = retlen;
231 }
232
233 return 1;
234}
235
d8bc1399
MC
236int tls_construct_cert_verify(SSL *s, WPACKET *pkt)
237{
ad4dd362
DSH
238 EVP_PKEY *pkey = NULL;
239 const EVP_MD *md = NULL;
d8bc1399 240 EVP_MD_CTX *mctx = NULL;
5f9b64a2
MC
241 EVP_PKEY_CTX *pctx = NULL;
242 size_t hdatalen = 0, siglen = 0;
d8bc1399
MC
243 void *hdata;
244 unsigned char *sig = NULL;
2c5dfdc3 245 unsigned char tls13tbs[TLS13_TBS_PREAMBLE_SIZE + EVP_MAX_MD_SIZE];
555cbb32 246 const SIGALG_LOOKUP *lu = s->s3.tmp.sigalg;
2c5dfdc3 247
555cbb32 248 if (lu == NULL || s->s3.tmp.cert == NULL) {
d4d2f3a4
MC
249 SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CERT_VERIFY,
250 ERR_R_INTERNAL_ERROR);
ad4dd362
DSH
251 goto err;
252 }
555cbb32 253 pkey = s->s3.tmp.cert->privatekey;
ad4dd362 254
c8f6c28a 255 if (pkey == NULL || !tls1_lookup_md(s->ctx, lu, &md)) {
d4d2f3a4
MC
256 SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CERT_VERIFY,
257 ERR_R_INTERNAL_ERROR);
ad4dd362
DSH
258 goto err;
259 }
d8bc1399
MC
260
261 mctx = EVP_MD_CTX_new();
262 if (mctx == NULL) {
d4d2f3a4
MC
263 SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CERT_VERIFY,
264 ERR_R_MALLOC_FAILURE);
d8bc1399
MC
265 goto err;
266 }
d8bc1399 267
2c5dfdc3
MC
268 /* Get the data to be signed */
269 if (!get_cert_verify_tbs_data(s, tls13tbs, &hdata, &hdatalen)) {
f63a17d6 270 /* SSLfatal() already called */
d8bc1399
MC
271 goto err;
272 }
273
ad4dd362 274 if (SSL_USE_SIGALGS(s) && !WPACKET_put_bytes_u16(pkt, lu->sigalg)) {
d4d2f3a4
MC
275 SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CERT_VERIFY,
276 ERR_R_INTERNAL_ERROR);
d8bc1399
MC
277 goto err;
278 }
5f9b64a2 279
fc69f32c
MC
280 if (EVP_DigestSignInit_ex(mctx, &pctx,
281 md == NULL ? NULL : EVP_MD_name(md),
282 s->ctx->propq, pkey, s->ctx->libctx) <= 0) {
d4d2f3a4
MC
283 SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CERT_VERIFY,
284 ERR_R_EVP_LIB);
5f9b64a2
MC
285 goto err;
286 }
287
ad4dd362 288 if (lu->sig == EVP_PKEY_RSA_PSS) {
5f9b64a2 289 if (EVP_PKEY_CTX_set_rsa_padding(pctx, RSA_PKCS1_PSS_PADDING) <= 0
968ae5b3
DSH
290 || EVP_PKEY_CTX_set_rsa_pss_saltlen(pctx,
291 RSA_PSS_SALTLEN_DIGEST) <= 0) {
d4d2f3a4
MC
292 SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CERT_VERIFY,
293 ERR_R_EVP_LIB);
5f9b64a2
MC
294 goto err;
295 }
caf2b6b5
DSH
296 }
297 if (s->version == SSL3_VERSION) {
bddbfae1
MC
298 /*
299 * Here we use EVP_DigestSignUpdate followed by EVP_DigestSignFinal
300 * in order to add the EVP_CTRL_SSL3_MASTER_SECRET call between them.
301 */
caf2b6b5 302 if (EVP_DigestSignUpdate(mctx, hdata, hdatalen) <= 0
83b4a243
SL
303 /*
304 * TODO(3.0) Replace this when EVP_MD_CTX_ctrl() is deprecated
305 * with a call to ssl3_digest_master_key_set_params()
306 */
307 || EVP_MD_CTX_ctrl(mctx, EVP_CTRL_SSL3_MASTER_SECRET,
308 (int)s->session->master_key_length,
309 s->session->master_key) <= 0
bddbfae1 310 || EVP_DigestSignFinal(mctx, NULL, &siglen) <= 0) {
caf2b6b5 311
d4d2f3a4
MC
312 SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CERT_VERIFY,
313 ERR_R_EVP_LIB);
5f9b64a2
MC
314 goto err;
315 }
bddbfae1
MC
316 sig = OPENSSL_malloc(siglen);
317 if (sig == NULL
318 || EVP_DigestSignFinal(mctx, sig, &siglen) <= 0) {
319 SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CERT_VERIFY,
320 ERR_R_EVP_LIB);
321 goto err;
322 }
323 } else {
324 /*
325 * Here we *must* use EVP_DigestSign() because Ed25519/Ed448 does not
326 * support streaming via EVP_DigestSignUpdate/EVP_DigestSignFinal
327 */
328 if (EVP_DigestSign(mctx, NULL, &siglen, hdata, hdatalen) <= 0) {
329 SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CERT_VERIFY,
330 ERR_R_EVP_LIB);
331 goto err;
332 }
333 sig = OPENSSL_malloc(siglen);
334 if (sig == NULL
335 || EVP_DigestSign(mctx, sig, &siglen, hdata, hdatalen) <= 0) {
336 SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CERT_VERIFY,
337 ERR_R_EVP_LIB);
338 goto err;
339 }
d8bc1399 340 }
5f9b64a2 341
d8bc1399
MC
342#ifndef OPENSSL_NO_GOST
343 {
ad4dd362
DSH
344 int pktype = lu->sig;
345
d8bc1399
MC
346 if (pktype == NID_id_GostR3410_2001
347 || pktype == NID_id_GostR3410_2012_256
348 || pktype == NID_id_GostR3410_2012_512)
5f9b64a2 349 BUF_reverse(sig, NULL, siglen);
d8bc1399
MC
350 }
351#endif
352
5f9b64a2 353 if (!WPACKET_sub_memcpy_u16(pkt, sig, siglen)) {
d4d2f3a4
MC
354 SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CERT_VERIFY,
355 ERR_R_INTERNAL_ERROR);
d8bc1399
MC
356 goto err;
357 }
358
359 /* Digest cached records and discard handshake buffer */
d4d2f3a4
MC
360 if (!ssl3_digest_cached_records(s, 0)) {
361 /* SSLfatal() already called */
d8bc1399 362 goto err;
d4d2f3a4 363 }
d8bc1399
MC
364
365 OPENSSL_free(sig);
366 EVP_MD_CTX_free(mctx);
367 return 1;
368 err:
369 OPENSSL_free(sig);
370 EVP_MD_CTX_free(mctx);
d8bc1399
MC
371 return 0;
372}
373
374MSG_PROCESS_RETURN tls_process_cert_verify(SSL *s, PACKET *pkt)
375{
376 EVP_PKEY *pkey = NULL;
703bcee0 377 const unsigned char *data;
d8bc1399
MC
378#ifndef OPENSSL_NO_GOST
379 unsigned char *gost_data = NULL;
380#endif
eb5fd03b 381 MSG_PROCESS_RETURN ret = MSG_PROCESS_ERROR;
dd24857b 382 int j;
d8bc1399
MC
383 unsigned int len;
384 X509 *peer;
385 const EVP_MD *md = NULL;
2c5dfdc3 386 size_t hdatalen = 0;
d8bc1399 387 void *hdata;
2c5dfdc3 388 unsigned char tls13tbs[TLS13_TBS_PREAMBLE_SIZE + EVP_MAX_MD_SIZE];
d8bc1399 389 EVP_MD_CTX *mctx = EVP_MD_CTX_new();
5f9b64a2 390 EVP_PKEY_CTX *pctx = NULL;
d8bc1399
MC
391
392 if (mctx == NULL) {
f63a17d6
MC
393 SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_CERT_VERIFY,
394 ERR_R_MALLOC_FAILURE);
395 goto err;
d8bc1399
MC
396 }
397
398 peer = s->session->peer;
399 pkey = X509_get0_pubkey(peer);
f63a17d6
MC
400 if (pkey == NULL) {
401 SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_CERT_VERIFY,
402 ERR_R_INTERNAL_ERROR);
403 goto err;
404 }
83b4049a 405
dd24857b 406 if (ssl_cert_lookup_by_pkey(pkey, NULL) == NULL) {
f63a17d6
MC
407 SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_F_TLS_PROCESS_CERT_VERIFY,
408 SSL_R_SIGNATURE_FOR_NON_SIGNING_CERTIFICATE);
409 goto err;
d8bc1399
MC
410 }
411
f464f9c0 412 if (SSL_USE_SIGALGS(s)) {
f464f9c0
PD
413 unsigned int sigalg;
414
415 if (!PACKET_get_net_2(pkt, &sigalg)) {
f63a17d6
MC
416 SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PROCESS_CERT_VERIFY,
417 SSL_R_BAD_PACKET);
418 goto err;
f464f9c0 419 }
f63a17d6
MC
420 if (tls12_check_peer_sigalg(s, sigalg, pkey) <= 0) {
421 /* SSLfatal() already called */
422 goto err;
f464f9c0 423 }
f464f9c0 424 } else if (!tls1_set_peer_legacy_sigalg(s, pkey)) {
f63a17d6
MC
425 SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_CERT_VERIFY,
426 ERR_R_INTERNAL_ERROR);
427 goto err;
f464f9c0
PD
428 }
429
c8f6c28a 430 if (!tls1_lookup_md(s->ctx, s->s3.tmp.peer_sigalg, &md)) {
f63a17d6
MC
431 SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_CERT_VERIFY,
432 ERR_R_INTERNAL_ERROR);
433 goto err;
168067b6 434 }
f464f9c0 435
572fa024 436 if (SSL_USE_SIGALGS(s))
49b26f54
RL
437 OSSL_TRACE1(TLS, "USING TLSv1.2 HASH %s\n",
438 md == NULL ? "n/a" : EVP_MD_name(md));
572fa024 439
d8bc1399
MC
440 /* Check for broken implementations of GOST ciphersuites */
441 /*
f464f9c0
PD
442 * If key is GOST and len is exactly 64 or 128, it is signature without
443 * length field (CryptoPro implementations at least till TLS 1.2)
d8bc1399
MC
444 */
445#ifndef OPENSSL_NO_GOST
f464f9c0
PD
446 if (!SSL_USE_SIGALGS(s)
447 && ((PACKET_remaining(pkt) == 64
448 && (EVP_PKEY_id(pkey) == NID_id_GostR3410_2001
449 || EVP_PKEY_id(pkey) == NID_id_GostR3410_2012_256))
450 || (PACKET_remaining(pkt) == 128
451 && EVP_PKEY_id(pkey) == NID_id_GostR3410_2012_512))) {
452 len = PACKET_remaining(pkt);
d8bc1399
MC
453 } else
454#endif
f464f9c0 455 if (!PACKET_get_net_2(pkt, &len)) {
f63a17d6
MC
456 SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PROCESS_CERT_VERIFY,
457 SSL_R_LENGTH_MISMATCH);
458 goto err;
d8bc1399 459 }
f464f9c0 460
d8bc1399 461 if (!PACKET_get_bytes(pkt, &data, len)) {
f63a17d6
MC
462 SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PROCESS_CERT_VERIFY,
463 SSL_R_LENGTH_MISMATCH);
464 goto err;
d8bc1399
MC
465 }
466
2c5dfdc3 467 if (!get_cert_verify_tbs_data(s, tls13tbs, &hdata, &hdatalen)) {
f63a17d6
MC
468 /* SSLfatal() already called */
469 goto err;
d8bc1399
MC
470 }
471
49b26f54
RL
472 OSSL_TRACE1(TLS, "Using client verify alg %s\n",
473 md == NULL ? "n/a" : EVP_MD_name(md));
474
fc69f32c
MC
475 if (EVP_DigestVerifyInit_ex(mctx, &pctx,
476 md == NULL ? NULL : EVP_MD_name(md),
477 s->ctx->propq, pkey, s->ctx->libctx) <= 0) {
f63a17d6
MC
478 SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_CERT_VERIFY,
479 ERR_R_EVP_LIB);
480 goto err;
d8bc1399
MC
481 }
482#ifndef OPENSSL_NO_GOST
483 {
dc8da7b1 484 int pktype = EVP_PKEY_id(pkey);
d8bc1399
MC
485 if (pktype == NID_id_GostR3410_2001
486 || pktype == NID_id_GostR3410_2012_256
487 || pktype == NID_id_GostR3410_2012_512) {
488 if ((gost_data = OPENSSL_malloc(len)) == NULL) {
f63a17d6
MC
489 SSLfatal(s, SSL_AD_INTERNAL_ERROR,
490 SSL_F_TLS_PROCESS_CERT_VERIFY, ERR_R_MALLOC_FAILURE);
491 goto err;
d8bc1399
MC
492 }
493 BUF_reverse(gost_data, data, len);
494 data = gost_data;
495 }
496 }
497#endif
498
5554facb 499 if (SSL_USE_PSS(s)) {
5f9b64a2 500 if (EVP_PKEY_CTX_set_rsa_padding(pctx, RSA_PKCS1_PSS_PADDING) <= 0
968ae5b3
DSH
501 || EVP_PKEY_CTX_set_rsa_pss_saltlen(pctx,
502 RSA_PSS_SALTLEN_DIGEST) <= 0) {
f63a17d6
MC
503 SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_CERT_VERIFY,
504 ERR_R_EVP_LIB);
505 goto err;
5f9b64a2 506 }
d8bc1399 507 }
caf2b6b5 508 if (s->version == SSL3_VERSION) {
83b4a243
SL
509 /*
510 * TODO(3.0) Replace this when EVP_MD_CTX_ctrl() is deprecated
511 * with a call to ssl3_digest_master_key_set_params()
512 */
caf2b6b5 513 if (EVP_DigestVerifyUpdate(mctx, hdata, hdatalen) <= 0
83b4a243
SL
514 || EVP_MD_CTX_ctrl(mctx, EVP_CTRL_SSL3_MASTER_SECRET,
515 (int)s->session->master_key_length,
516 s->session->master_key) <= 0) {
f63a17d6
MC
517 SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_CERT_VERIFY,
518 ERR_R_EVP_LIB);
519 goto err;
caf2b6b5
DSH
520 }
521 if (EVP_DigestVerifyFinal(mctx, data, len) <= 0) {
f63a17d6
MC
522 SSLfatal(s, SSL_AD_DECRYPT_ERROR, SSL_F_TLS_PROCESS_CERT_VERIFY,
523 SSL_R_BAD_SIGNATURE);
524 goto err;
caf2b6b5
DSH
525 }
526 } else {
527 j = EVP_DigestVerify(mctx, data, len, hdata, hdatalen);
25ffeb11 528 if (j <= 0) {
f63a17d6
MC
529 SSLfatal(s, SSL_AD_DECRYPT_ERROR, SSL_F_TLS_PROCESS_CERT_VERIFY,
530 SSL_R_BAD_SIGNATURE);
531 goto err;
caf2b6b5 532 }
d8bc1399
MC
533 }
534
e4562014
MC
535 /*
536 * In TLSv1.3 on the client side we make sure we prepare the client
537 * certificate after the CertVerify instead of when we get the
538 * CertificateRequest. This is because in TLSv1.3 the CertificateRequest
539 * comes *before* the Certificate message. In TLSv1.2 it comes after. We
540 * want to make sure that SSL_get_peer_certificate() will return the actual
541 * server certificate from the client_cert_cb callback.
542 */
555cbb32 543 if (!s->server && SSL_IS_TLS13(s) && s->s3.tmp.cert_req == 1)
e4562014
MC
544 ret = MSG_PROCESS_CONTINUE_PROCESSING;
545 else
546 ret = MSG_PROCESS_CONTINUE_READING;
f63a17d6 547 err:
555cbb32
TS
548 BIO_free(s->s3.handshake_buffer);
549 s->s3.handshake_buffer = NULL;
d8bc1399
MC
550 EVP_MD_CTX_free(mctx);
551#ifndef OPENSSL_NO_GOST
552 OPENSSL_free(gost_data);
553#endif
554 return ret;
555}
556
229185e6 557int tls_construct_finished(SSL *s, WPACKET *pkt)
0f113f3e 558{
12472b45 559 size_t finish_md_len;
229185e6 560 const char *sender;
8b0e934a 561 size_t slen;
229185e6 562
f7e393be 563 /* This is a real handshake so make sure we clean it up at the end */
9d75dce3 564 if (!s->server && s->post_handshake_auth != SSL_PHA_REQUESTED)
f7e393be
MC
565 s->statem.cleanuphand = 1;
566
567 /*
568 * We only change the keys if we didn't already do this when we sent the
569 * client certificate
570 */
571 if (SSL_IS_TLS13(s)
572 && !s->server
555cbb32 573 && s->s3.tmp.cert_req == 0
f7e393be 574 && (!s->method->ssl3_enc->change_cipher_state(s,
d4d2f3a4
MC
575 SSL3_CC_HANDSHAKE | SSL3_CHANGE_CIPHER_CLIENT_WRITE))) {;
576 /* SSLfatal() already called */
b43c3765 577 return 0;
f7e393be
MC
578 }
579
229185e6
MC
580 if (s->server) {
581 sender = s->method->ssl3_enc->server_finished_label;
582 slen = s->method->ssl3_enc->server_finished_label_len;
583 } else {
584 sender = s->method->ssl3_enc->client_finished_label;
585 slen = s->method->ssl3_enc->client_finished_label_len;
586 }
0f113f3e 587
12472b45
MC
588 finish_md_len = s->method->ssl3_enc->final_finish_mac(s,
589 sender, slen,
555cbb32 590 s->s3.tmp.finish_md);
12472b45 591 if (finish_md_len == 0) {
d4d2f3a4
MC
592 /* SSLfatal() already called */
593 return 0;
4f89bfbf
MC
594 }
595
555cbb32 596 s->s3.tmp.finish_md_len = finish_md_len;
4f89bfbf 597
555cbb32 598 if (!WPACKET_memcpy(pkt, s->s3.tmp.finish_md, finish_md_len)) {
d4d2f3a4
MC
599 SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_FINISHED,
600 ERR_R_INTERNAL_ERROR);
601 return 0;
4f89bfbf 602 }
0f113f3e 603
2c7bd692
CB
604 /*
605 * Log the master secret, if logging is enabled. We don't log it for
606 * TLSv1.3: there's a different key schedule for that.
607 */
608 if (!SSL_IS_TLS13(s) && !ssl_log_secret(s, MASTER_SECRET_LABEL,
609 s->session->master_key,
380a522f 610 s->session->master_key_length)) {
d4d2f3a4
MC
611 /* SSLfatal() already called */
612 return 0;
380a522f 613 }
2faa1b48 614
b9908bf9
MC
615 /*
616 * Copy the finished so we can use it for renegotiation checks
617 */
380a522f 618 if (!ossl_assert(finish_md_len <= EVP_MAX_MD_SIZE)) {
d4d2f3a4
MC
619 SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_FINISHED,
620 ERR_R_INTERNAL_ERROR);
621 return 0;
380a522f 622 }
23a635c0 623 if (!s->server) {
555cbb32 624 memcpy(s->s3.previous_client_finished, s->s3.tmp.finish_md,
12472b45 625 finish_md_len);
555cbb32 626 s->s3.previous_client_finished_len = finish_md_len;
b9908bf9 627 } else {
555cbb32 628 memcpy(s->s3.previous_server_finished, s->s3.tmp.finish_md,
12472b45 629 finish_md_len);
555cbb32 630 s->s3.previous_server_finished_len = finish_md_len;
b9908bf9 631 }
0f113f3e 632
b9908bf9 633 return 1;
0f113f3e 634}
d02b48c6 635
44c04a2e
MC
636int tls_construct_key_update(SSL *s, WPACKET *pkt)
637{
638 if (!WPACKET_put_bytes_u8(pkt, s->key_update)) {
d4d2f3a4
MC
639 SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_KEY_UPDATE,
640 ERR_R_INTERNAL_ERROR);
641 return 0;
44c04a2e
MC
642 }
643
9412b3ad 644 s->key_update = SSL_KEY_UPDATE_NONE;
44c04a2e 645 return 1;
44c04a2e
MC
646}
647
e1c3de44
MC
648MSG_PROCESS_RETURN tls_process_key_update(SSL *s, PACKET *pkt)
649{
650 unsigned int updatetype;
651
524420d8
MC
652 /*
653 * A KeyUpdate message signals a key change so the end of the message must
654 * be on a record boundary.
655 */
656 if (RECORD_LAYER_processed_read_pending(&s->rlayer)) {
f63a17d6
MC
657 SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_F_TLS_PROCESS_KEY_UPDATE,
658 SSL_R_NOT_ON_RECORD_BOUNDARY);
659 return MSG_PROCESS_ERROR;
524420d8
MC
660 }
661
e1c3de44 662 if (!PACKET_get_1(pkt, &updatetype)
2d871227 663 || PACKET_remaining(pkt) != 0) {
f63a17d6
MC
664 SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PROCESS_KEY_UPDATE,
665 SSL_R_BAD_KEY_UPDATE);
666 return MSG_PROCESS_ERROR;
e1c3de44
MC
667 }
668
9010b7bc
MC
669 /*
670 * There are only two defined key update types. Fail if we get a value we
671 * didn't recognise.
672 */
2d871227
MC
673 if (updatetype != SSL_KEY_UPDATE_NOT_REQUESTED
674 && updatetype != SSL_KEY_UPDATE_REQUESTED) {
f63a17d6
MC
675 SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_F_TLS_PROCESS_KEY_UPDATE,
676 SSL_R_BAD_KEY_UPDATE);
677 return MSG_PROCESS_ERROR;
2d871227
MC
678 }
679
5bf47933
MC
680 /*
681 * If we get a request for us to update our sending keys too then, we need
682 * to additionally send a KeyUpdate message. However that message should
feb9e31c 683 * not also request an update (otherwise we get into an infinite loop).
5bf47933 684 */
feb9e31c 685 if (updatetype == SSL_KEY_UPDATE_REQUESTED)
5bf47933
MC
686 s->key_update = SSL_KEY_UPDATE_NOT_REQUESTED;
687
57389a32 688 if (!tls13_update_key(s, 0)) {
f63a17d6
MC
689 /* SSLfatal() already called */
690 return MSG_PROCESS_ERROR;
57389a32
MC
691 }
692
e1c3de44
MC
693 return MSG_PROCESS_FINISHED_READING;
694}
695
0f113f3e
MC
696/*
697 * ssl3_take_mac calculates the Finished MAC for the handshakes messages seen
698 * to far.
699 */
5d671101 700int ssl3_take_mac(SSL *s)
0f113f3e
MC
701{
702 const char *sender;
8b0e934a 703 size_t slen;
5d671101 704
49ae7423 705 if (!s->server) {
0f113f3e
MC
706 sender = s->method->ssl3_enc->server_finished_label;
707 slen = s->method->ssl3_enc->server_finished_label_len;
708 } else {
709 sender = s->method->ssl3_enc->client_finished_label;
710 slen = s->method->ssl3_enc->client_finished_label_len;
711 }
712
555cbb32 713 s->s3.tmp.peer_finish_md_len =
5d671101 714 s->method->ssl3_enc->final_finish_mac(s, sender, slen,
555cbb32 715 s->s3.tmp.peer_finish_md);
5d671101 716
555cbb32 717 if (s->s3.tmp.peer_finish_md_len == 0) {
5d671101
MC
718 /* SSLfatal() already called */
719 return 0;
720 }
721
722 return 1;
0f113f3e 723}
ee2ffc27 724
be3583fa 725MSG_PROCESS_RETURN tls_process_change_cipher_spec(SSL *s, PACKET *pkt)
b9908bf9 726{
348240c6 727 size_t remain;
4fa52141 728
73999b62 729 remain = PACKET_remaining(pkt);
657da85e
MC
730 /*
731 * 'Change Cipher Spec' is just a single byte, which should already have
c69f2adf
MC
732 * been consumed by ssl_get_message() so there should be no bytes left,
733 * unless we're using DTLS1_BAD_VER, which has an extra 2 bytes
657da85e 734 */
c69f2adf 735 if (SSL_IS_DTLS(s)) {
73999b62 736 if ((s->version == DTLS1_BAD_VER
a230b26e
EK
737 && remain != DTLS1_CCS_HEADER_LENGTH + 1)
738 || (s->version != DTLS1_BAD_VER
739 && remain != DTLS1_CCS_HEADER_LENGTH - 1)) {
f63a17d6
MC
740 SSLfatal(s, SSL_AD_DECODE_ERROR,
741 SSL_F_TLS_PROCESS_CHANGE_CIPHER_SPEC,
742 SSL_R_BAD_CHANGE_CIPHER_SPEC);
743 return MSG_PROCESS_ERROR;
c69f2adf
MC
744 }
745 } else {
73999b62 746 if (remain != 0) {
f63a17d6
MC
747 SSLfatal(s, SSL_AD_DECODE_ERROR,
748 SSL_F_TLS_PROCESS_CHANGE_CIPHER_SPEC,
749 SSL_R_BAD_CHANGE_CIPHER_SPEC);
750 return MSG_PROCESS_ERROR;
c69f2adf 751 }
657da85e
MC
752 }
753
754 /* Check we have a cipher to change to */
555cbb32 755 if (s->s3.tmp.new_cipher == NULL) {
f63a17d6
MC
756 SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE,
757 SSL_F_TLS_PROCESS_CHANGE_CIPHER_SPEC, SSL_R_CCS_RECEIVED_EARLY);
758 return MSG_PROCESS_ERROR;
657da85e
MC
759 }
760
555cbb32 761 s->s3.change_cipher_spec = 1;
657da85e 762 if (!ssl3_do_change_cipher_spec(s)) {
f63a17d6
MC
763 SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_CHANGE_CIPHER_SPEC,
764 ERR_R_INTERNAL_ERROR);
765 return MSG_PROCESS_ERROR;
657da85e
MC
766 }
767
c69f2adf
MC
768 if (SSL_IS_DTLS(s)) {
769 dtls1_reset_seq_numbers(s, SSL3_CC_READ);
770
771 if (s->version == DTLS1_BAD_VER)
772 s->d1->handshake_read_seq++;
773
774#ifndef OPENSSL_NO_SCTP
775 /*
776 * Remember that a CCS has been received, so that an old key of
777 * SCTP-Auth can be deleted when a CCS is sent. Will be ignored if no
778 * SCTP is used
779 */
780 BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_SCTP_AUTH_CCS_RCVD, 1, NULL);
781#endif
782 }
783
b9908bf9 784 return MSG_PROCESS_CONTINUE_READING;
657da85e
MC
785}
786
be3583fa 787MSG_PROCESS_RETURN tls_process_finished(SSL *s, PACKET *pkt)
b9908bf9 788{
12472b45 789 size_t md_len;
b9908bf9 790
d781d247
MC
791
792 /* This is a real handshake so make sure we clean it up at the end */
9d75dce3 793 if (s->server) {
de9e884b
MC
794 /*
795 * To get this far we must have read encrypted data from the client. We
796 * no longer tolerate unencrypted alerts. This value is ignored if less
797 * than TLSv1.3
798 */
799 s->statem.enc_read_state = ENC_READ_STATE_VALID;
9d75dce3
TS
800 if (s->post_handshake_auth != SSL_PHA_REQUESTED)
801 s->statem.cleanuphand = 1;
802 if (SSL_IS_TLS13(s) && !tls13_save_handshake_digest_for_pha(s)) {
803 /* SSLfatal() already called */
804 return MSG_PROCESS_ERROR;
805 }
806 }
d781d247 807
524420d8
MC
808 /*
809 * In TLSv1.3 a Finished message signals a key change so the end of the
810 * message must be on a record boundary.
811 */
812 if (SSL_IS_TLS13(s) && RECORD_LAYER_processed_read_pending(&s->rlayer)) {
f63a17d6
MC
813 SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_F_TLS_PROCESS_FINISHED,
814 SSL_R_NOT_ON_RECORD_BOUNDARY);
815 return MSG_PROCESS_ERROR;
524420d8
MC
816 }
817
0f113f3e 818 /* If this occurs, we have missed a message */
555cbb32 819 if (!SSL_IS_TLS13(s) && !s->s3.change_cipher_spec) {
f63a17d6
MC
820 SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_F_TLS_PROCESS_FINISHED,
821 SSL_R_GOT_A_FIN_BEFORE_A_CCS);
822 return MSG_PROCESS_ERROR;
0f113f3e 823 }
555cbb32 824 s->s3.change_cipher_spec = 0;
0f113f3e 825
555cbb32 826 md_len = s->s3.tmp.peer_finish_md_len;
0f113f3e 827
12472b45 828 if (md_len != PACKET_remaining(pkt)) {
f63a17d6
MC
829 SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PROCESS_FINISHED,
830 SSL_R_BAD_DIGEST_LENGTH);
831 return MSG_PROCESS_ERROR;
0f113f3e
MC
832 }
833
555cbb32 834 if (CRYPTO_memcmp(PACKET_data(pkt), s->s3.tmp.peer_finish_md,
12472b45 835 md_len) != 0) {
f63a17d6
MC
836 SSLfatal(s, SSL_AD_DECRYPT_ERROR, SSL_F_TLS_PROCESS_FINISHED,
837 SSL_R_DIGEST_CHECK_FAILED);
838 return MSG_PROCESS_ERROR;
0f113f3e
MC
839 }
840
841 /*
842 * Copy the finished so we can use it for renegotiation checks
843 */
380a522f 844 if (!ossl_assert(md_len <= EVP_MAX_MD_SIZE)) {
f63a17d6
MC
845 SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_FINISHED,
846 ERR_R_INTERNAL_ERROR);
847 return MSG_PROCESS_ERROR;
380a522f 848 }
23a635c0 849 if (s->server) {
555cbb32 850 memcpy(s->s3.previous_client_finished, s->s3.tmp.peer_finish_md,
12472b45 851 md_len);
555cbb32 852 s->s3.previous_client_finished_len = md_len;
0f113f3e 853 } else {
555cbb32 854 memcpy(s->s3.previous_server_finished, s->s3.tmp.peer_finish_md,
12472b45 855 md_len);
555cbb32 856 s->s3.previous_server_finished_len = md_len;
0f113f3e
MC
857 }
858
7776a36c
MC
859 /*
860 * In TLS1.3 we also have to change cipher state and do any final processing
861 * of the initial server flight (if we are a client)
862 */
92760c21
MC
863 if (SSL_IS_TLS13(s)) {
864 if (s->server) {
9d75dce3
TS
865 if (s->post_handshake_auth != SSL_PHA_REQUESTED &&
866 !s->method->ssl3_enc->change_cipher_state(s,
92760c21 867 SSL3_CC_APPLICATION | SSL3_CHANGE_CIPHER_SERVER_READ)) {
f63a17d6
MC
868 /* SSLfatal() already called */
869 return MSG_PROCESS_ERROR;
92760c21
MC
870 }
871 } else {
d74014c4
BK
872 /* TLS 1.3 gets the secret size from the handshake md */
873 size_t dummy;
92760c21 874 if (!s->method->ssl3_enc->generate_master_secret(s,
ec15acb6 875 s->master_secret, s->handshake_secret, 0,
d74014c4 876 &dummy)) {
f63a17d6
MC
877 /* SSLfatal() already called */
878 return MSG_PROCESS_ERROR;
92760c21
MC
879 }
880 if (!s->method->ssl3_enc->change_cipher_state(s,
881 SSL3_CC_APPLICATION | SSL3_CHANGE_CIPHER_CLIENT_READ)) {
f63a17d6
MC
882 /* SSLfatal() already called */
883 return MSG_PROCESS_ERROR;
884 }
885 if (!tls_process_initial_server_flight(s)) {
886 /* SSLfatal() already called */
887 return MSG_PROCESS_ERROR;
92760c21
MC
888 }
889 }
890 }
891
e6575156 892 return MSG_PROCESS_FINISHED_READING;
0f113f3e 893}
d02b48c6 894
7cea05dc 895int tls_construct_change_cipher_spec(SSL *s, WPACKET *pkt)
b9908bf9 896{
7cea05dc 897 if (!WPACKET_put_bytes_u8(pkt, SSL3_MT_CCS)) {
d4d2f3a4
MC
898 SSLfatal(s, SSL_AD_INTERNAL_ERROR,
899 SSL_F_TLS_CONSTRUCT_CHANGE_CIPHER_SPEC, ERR_R_INTERNAL_ERROR);
85a7a5e6
MC
900 return 0;
901 }
b9908bf9 902
b9908bf9
MC
903 return 1;
904}
905
e96e0f8e 906/* Add a certificate to the WPACKET */
f63a17d6 907static int ssl_add_cert_to_wpacket(SSL *s, WPACKET *pkt, X509 *x, int chain)
0f113f3e 908{
e96e0f8e
MC
909 int len;
910 unsigned char *outbytes;
911
912 len = i2d_X509(x, NULL);
913 if (len < 0) {
f63a17d6
MC
914 SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_ADD_CERT_TO_WPACKET,
915 ERR_R_BUF_LIB);
e96e0f8e
MC
916 return 0;
917 }
918 if (!WPACKET_sub_allocate_bytes_u24(pkt, len, &outbytes)
919 || i2d_X509(x, &outbytes) != len) {
f63a17d6
MC
920 SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_ADD_CERT_TO_WPACKET,
921 ERR_R_INTERNAL_ERROR);
e96e0f8e
MC
922 return 0;
923 }
924
925 if (SSL_IS_TLS13(s)
fe874d27 926 && !tls_construct_extensions(s, pkt, SSL_EXT_TLS1_3_CERTIFICATE, x,
f63a17d6
MC
927 chain)) {
928 /* SSLfatal() already called */
e96e0f8e 929 return 0;
f63a17d6 930 }
e96e0f8e
MC
931
932 return 1;
933}
934
935/* Add certificate chain to provided WPACKET */
f63a17d6 936static int ssl_add_cert_chain(SSL *s, WPACKET *pkt, CERT_PKEY *cpk)
e96e0f8e
MC
937{
938 int i, chain_count;
939 X509 *x;
940 STACK_OF(X509) *extra_certs;
941 STACK_OF(X509) *chain = NULL;
942 X509_STORE *chain_store;
e96e0f8e
MC
943
944 if (cpk == NULL || cpk->x509 == NULL)
945 return 1;
946
947 x = cpk->x509;
948
949 /*
950 * If we have a certificate specific chain use it, else use parent ctx.
951 */
d805a57b 952 if (cpk->chain != NULL)
e96e0f8e
MC
953 extra_certs = cpk->chain;
954 else
955 extra_certs = s->ctx->extra_certs;
956
957 if ((s->mode & SSL_MODE_NO_AUTO_CHAIN) || extra_certs)
958 chain_store = NULL;
959 else if (s->cert->chain_store)
960 chain_store = s->cert->chain_store;
961 else
962 chain_store = s->ctx->cert_store;
963
d805a57b 964 if (chain_store != NULL) {
a959b4fa
MC
965 X509_STORE_CTX *xs_ctx = X509_STORE_CTX_new_with_libctx(s->ctx->libctx,
966 s->ctx->propq);
e96e0f8e
MC
967
968 if (xs_ctx == NULL) {
f63a17d6
MC
969 SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_ADD_CERT_CHAIN,
970 ERR_R_MALLOC_FAILURE);
971 return 0;
e96e0f8e
MC
972 }
973 if (!X509_STORE_CTX_init(xs_ctx, chain_store, x, NULL)) {
974 X509_STORE_CTX_free(xs_ctx);
f63a17d6
MC
975 SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_ADD_CERT_CHAIN,
976 ERR_R_X509_LIB);
977 return 0;
e96e0f8e
MC
978 }
979 /*
980 * It is valid for the chain not to be complete (because normally we
981 * don't include the root cert in the chain). Therefore we deliberately
982 * ignore the error return from this call. We're not actually verifying
983 * the cert - we're just building as much of the chain as we can
984 */
985 (void)X509_verify_cert(xs_ctx);
986 /* Don't leave errors in the queue */
987 ERR_clear_error();
988 chain = X509_STORE_CTX_get0_chain(xs_ctx);
989 i = ssl_security_cert_chain(s, chain, NULL, 0);
990 if (i != 1) {
991#if 0
992 /* Dummy error calls so mkerr generates them */
993 SSLerr(SSL_F_SSL_ADD_CERT_CHAIN, SSL_R_EE_KEY_TOO_SMALL);
994 SSLerr(SSL_F_SSL_ADD_CERT_CHAIN, SSL_R_CA_KEY_TOO_SMALL);
995 SSLerr(SSL_F_SSL_ADD_CERT_CHAIN, SSL_R_CA_MD_TOO_WEAK);
996#endif
997 X509_STORE_CTX_free(xs_ctx);
f63a17d6
MC
998 SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_ADD_CERT_CHAIN, i);
999 return 0;
e96e0f8e
MC
1000 }
1001 chain_count = sk_X509_num(chain);
1002 for (i = 0; i < chain_count; i++) {
1003 x = sk_X509_value(chain, i);
1004
f63a17d6
MC
1005 if (!ssl_add_cert_to_wpacket(s, pkt, x, i)) {
1006 /* SSLfatal() already called */
e96e0f8e 1007 X509_STORE_CTX_free(xs_ctx);
f63a17d6 1008 return 0;
e96e0f8e
MC
1009 }
1010 }
1011 X509_STORE_CTX_free(xs_ctx);
1012 } else {
1013 i = ssl_security_cert_chain(s, extra_certs, x, 0);
1014 if (i != 1) {
f63a17d6
MC
1015 SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_ADD_CERT_CHAIN, i);
1016 return 0;
1017 }
1018 if (!ssl_add_cert_to_wpacket(s, pkt, x, 0)) {
1019 /* SSLfatal() already called */
1020 return 0;
e96e0f8e 1021 }
e96e0f8e
MC
1022 for (i = 0; i < sk_X509_num(extra_certs); i++) {
1023 x = sk_X509_value(extra_certs, i);
f63a17d6
MC
1024 if (!ssl_add_cert_to_wpacket(s, pkt, x, i + 1)) {
1025 /* SSLfatal() already called */
1026 return 0;
1027 }
e96e0f8e
MC
1028 }
1029 }
1030 return 1;
e96e0f8e
MC
1031}
1032
f63a17d6 1033unsigned long ssl3_output_cert_chain(SSL *s, WPACKET *pkt, CERT_PKEY *cpk)
e96e0f8e 1034{
f63a17d6
MC
1035 if (!WPACKET_start_sub_packet_u24(pkt)) {
1036 SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_OUTPUT_CERT_CHAIN,
1037 ERR_R_INTERNAL_ERROR);
1038 return 0;
1039 }
e96e0f8e 1040
f63a17d6
MC
1041 if (!ssl_add_cert_chain(s, pkt, cpk))
1042 return 0;
1043
1044 if (!WPACKET_close(pkt)) {
1045 SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_OUTPUT_CERT_CHAIN,
1046 ERR_R_INTERNAL_ERROR);
7cea05dc 1047 return 0;
77d514c5 1048 }
f63a17d6 1049
c49e1912 1050 return 1;
0f113f3e
MC
1051}
1052
30f05b19
MC
1053/*
1054 * Tidy up after the end of a handshake. In the case of SCTP this may result
1055 * in NBIO events. If |clearbufs| is set then init_buf and the wbio buffer is
1056 * freed up as well.
1057 */
2a8db717 1058WORK_STATE tls_finish_handshake(SSL *s, WORK_STATE wst, int clearbufs, int stop)
8723588e
MC
1059{
1060 void (*cb) (const SSL *ssl, int type, int val) = NULL;
4af5836b 1061 int cleanuphand = s->statem.cleanuphand;
8723588e 1062
30f05b19 1063 if (clearbufs) {
e7c27a6c
N
1064 if (!SSL_IS_DTLS(s)
1065#ifndef OPENSSL_NO_SCTP
30f05b19 1066 /*
e7c27a6c
N
1067 * RFC6083: SCTP provides a reliable and in-sequence transport service for DTLS
1068 * messages that require it. Therefore, DTLS procedures for retransmissions
1069 * MUST NOT be used.
1070 * Hence the init_buf can be cleared when DTLS over SCTP as transport is used.
1071 */
1072 || BIO_dgram_is_sctp(SSL_get_wbio(s))
1073#endif
1074 ) {
1075 /*
1076 * We don't do this in DTLS over UDP because we may still need the init_buf
30f05b19
MC
1077 * in case there are any unexpected retransmits
1078 */
1079 BUF_MEM_free(s->init_buf);
1080 s->init_buf = NULL;
1081 }
e7c27a6c 1082
a2c2e000
MC
1083 if (!ssl_free_wbio_buffer(s)) {
1084 SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_FINISH_HANDSHAKE,
1085 ERR_R_INTERNAL_ERROR);
b77f3ed1 1086 return WORK_ERROR;
a2c2e000 1087 }
30f05b19 1088 s->init_num = 0;
473483d4 1089 }
8723588e 1090
9d75dce3
TS
1091 if (SSL_IS_TLS13(s) && !s->server
1092 && s->post_handshake_auth == SSL_PHA_REQUESTED)
1093 s->post_handshake_auth = SSL_PHA_EXT_SENT;
1094
c2c1d8a4
MC
1095 /*
1096 * Only set if there was a Finished message and this isn't after a TLSv1.3
1097 * post handshake exchange
1098 */
4af5836b 1099 if (cleanuphand) {
8723588e
MC
1100 /* skipped if we just sent a HelloRequest */
1101 s->renegotiate = 0;
1102 s->new_session = 0;
c7f47786 1103 s->statem.cleanuphand = 0;
c0638ade 1104 s->ext.ticket_expected = 0;
8723588e 1105
30f05b19
MC
1106 ssl3_cleanup_key_block(s);
1107
8723588e 1108 if (s->server) {
16ff1342
MC
1109 /*
1110 * In TLSv1.3 we update the cache as part of constructing the
1111 * NewSessionTicket
1112 */
1113 if (!SSL_IS_TLS13(s))
1114 ssl_update_cache(s, SSL_SESS_CACHE_SERVER);
8723588e 1115
0e6161bc 1116 /* N.B. s->ctx may not equal s->session_ctx */
9ef9088c 1117 tsan_counter(&s->ctx->stats.sess_accept_good);
fe3a3291 1118 s->handshake_func = ossl_statem_accept;
8723588e 1119 } else {
4cb00457
MC
1120 if (SSL_IS_TLS13(s)) {
1121 /*
1122 * We encourage applications to only use TLSv1.3 tickets once,
1123 * so we remove this one from the cache.
1124 */
1125 if ((s->session_ctx->session_cache_mode
1126 & SSL_SESS_CACHE_CLIENT) != 0)
1127 SSL_CTX_remove_session(s->session_ctx, s->session);
1128 } else {
1129 /*
1130 * In TLSv1.3 we update the cache as part of processing the
1131 * NewSessionTicket
1132 */
5d61491c 1133 ssl_update_cache(s, SSL_SESS_CACHE_CLIENT);
4cb00457 1134 }
8723588e 1135 if (s->hit)
9ef9088c 1136 tsan_counter(&s->session_ctx->stats.sess_hit);
8723588e 1137
fe3a3291 1138 s->handshake_func = ossl_statem_connect;
9ef9088c 1139 tsan_counter(&s->session_ctx->stats.sess_connect_good);
8723588e
MC
1140 }
1141
8723588e
MC
1142 if (SSL_IS_DTLS(s)) {
1143 /* done with handshaking */
1144 s->d1->handshake_read_seq = 0;
1145 s->d1->handshake_write_seq = 0;
1146 s->d1->next_handshake_write_seq = 0;
f5c7f5df 1147 dtls1_clear_received_buffer(s);
8723588e
MC
1148 }
1149 }
1150
c2c1d8a4
MC
1151 if (s->info_callback != NULL)
1152 cb = s->info_callback;
1153 else if (s->ctx->info_callback != NULL)
1154 cb = s->ctx->info_callback;
1155
4ce787b9
MC
1156 /* The callback may expect us to not be in init at handshake done */
1157 ossl_statem_set_in_init(s, 0);
1158
4af5836b
MC
1159 if (cb != NULL) {
1160 if (cleanuphand
1161 || !SSL_IS_TLS13(s)
1162 || SSL_IS_FIRST_HANDSHAKE(s))
1163 cb(s, SSL_CB_HANDSHAKE_DONE, 1);
1164 }
c2c1d8a4 1165
4ce787b9
MC
1166 if (!stop) {
1167 /* If we've got more work to do we go back into init */
1168 ossl_statem_set_in_init(s, 1);
30f05b19 1169 return WORK_FINISHED_CONTINUE;
4ce787b9 1170 }
30f05b19 1171
8723588e
MC
1172 return WORK_FINISHED_STOP;
1173}
1174
9ab930b2
MC
1175int tls_get_message_header(SSL *s, int *mt)
1176{
1177 /* s->init_num < SSL3_HM_HEADER_LENGTH */
d4d2f3a4 1178 int skip_message, i, recvd_type;
9ab930b2 1179 unsigned char *p;
54105ddd 1180 size_t l, readbytes;
9ab930b2
MC
1181
1182 p = (unsigned char *)s->init_buf->data;
1183
1184 do {
1185 while (s->init_num < SSL3_HM_HEADER_LENGTH) {
1186 i = s->method->ssl_read_bytes(s, SSL3_RT_HANDSHAKE, &recvd_type,
a230b26e
EK
1187 &p[s->init_num],
1188 SSL3_HM_HEADER_LENGTH - s->init_num,
54105ddd 1189 0, &readbytes);
9ab930b2
MC
1190 if (i <= 0) {
1191 s->rwstate = SSL_READING;
1192 return 0;
32ec4153 1193 }
9ab930b2 1194 if (recvd_type == SSL3_RT_CHANGE_CIPHER_SPEC) {
1257adec 1195 /*
a230b26e
EK
1196 * A ChangeCipherSpec must be a single byte and may not occur
1197 * in the middle of a handshake message.
1198 */
54105ddd 1199 if (s->init_num != 0 || readbytes != 1 || p[0] != SSL3_MT_CCS) {
d4d2f3a4
MC
1200 SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE,
1201 SSL_F_TLS_GET_MESSAGE_HEADER,
1202 SSL_R_BAD_CHANGE_CIPHER_SPEC);
1203 return 0;
1257adec 1204 }
e9359719 1205 if (s->statem.hand_state == TLS_ST_BEFORE
555cbb32 1206 && (s->s3.flags & TLS1_FLAGS_STATELESS) != 0) {
e9359719
MC
1207 /*
1208 * We are stateless and we received a CCS. Probably this is
1209 * from a client between the first and second ClientHellos.
1210 * We should ignore this, but return an error because we do
1211 * not return success until we see the second ClientHello
1212 * with a valid cookie.
1213 */
1214 return 0;
1215 }
555cbb32 1216 s->s3.tmp.message_type = *mt = SSL3_MT_CHANGE_CIPHER_SPEC;
54105ddd 1217 s->init_num = readbytes - 1;
c4377574 1218 s->init_msg = s->init_buf->data;
555cbb32 1219 s->s3.tmp.message_size = readbytes;
9ab930b2
MC
1220 return 1;
1221 } else if (recvd_type != SSL3_RT_HANDSHAKE) {
d4d2f3a4
MC
1222 SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE,
1223 SSL_F_TLS_GET_MESSAGE_HEADER,
1224 SSL_R_CCS_RECEIVED_EARLY);
1225 return 0;
32ec4153 1226 }
54105ddd 1227 s->init_num += readbytes;
9ab930b2
MC
1228 }
1229
1230 skip_message = 0;
1231 if (!s->server)
c7f47786
MC
1232 if (s->statem.hand_state != TLS_ST_OK
1233 && p[0] == SSL3_MT_HELLO_REQUEST)
9ab930b2
MC
1234 /*
1235 * The server may always send 'Hello Request' messages --
1236 * we are doing a handshake anyway now, so ignore them if
1237 * their format is correct. Does not count for 'Finished'
1238 * MAC.
1239 */
1240 if (p[1] == 0 && p[2] == 0 && p[3] == 0) {
1241 s->init_num = 0;
1242 skip_message = 1;
1243
1244 if (s->msg_callback)
1245 s->msg_callback(0, s->version, SSL3_RT_HANDSHAKE,
1246 p, SSL3_HM_HEADER_LENGTH, s,
1247 s->msg_callback_arg);
1248 }
1249 } while (skip_message);
1250 /* s->init_num == SSL3_HM_HEADER_LENGTH */
1251
1252 *mt = *p;
555cbb32 1253 s->s3.tmp.message_type = *(p++);
32ec4153 1254
e8aa8b6c 1255 if (RECORD_LAYER_is_sslv2_record(&s->rlayer)) {
9ab930b2
MC
1256 /*
1257 * Only happens with SSLv3+ in an SSLv2 backward compatible
1258 * ClientHello
e8aa8b6c
F
1259 *
1260 * Total message size is the remaining record bytes to read
1261 * plus the SSL3_HM_HEADER_LENGTH bytes that we already read
9ab930b2 1262 */
9ab930b2
MC
1263 l = RECORD_LAYER_get_rrec_length(&s->rlayer)
1264 + SSL3_HM_HEADER_LENGTH;
555cbb32 1265 s->s3.tmp.message_size = l;
9ab930b2
MC
1266
1267 s->init_msg = s->init_buf->data;
1268 s->init_num = SSL3_HM_HEADER_LENGTH;
1269 } else {
1270 n2l3(p, l);
1271 /* BUF_MEM_grow takes an 'int' parameter */
1272 if (l > (INT_MAX - SSL3_HM_HEADER_LENGTH)) {
d4d2f3a4
MC
1273 SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_F_TLS_GET_MESSAGE_HEADER,
1274 SSL_R_EXCESSIVE_MESSAGE_SIZE);
1275 return 0;
32ec4153 1276 }
555cbb32 1277 s->s3.tmp.message_size = l;
9ab930b2
MC
1278
1279 s->init_msg = s->init_buf->data + SSL3_HM_HEADER_LENGTH;
1280 s->init_num = 0;
1281 }
1282
1283 return 1;
9ab930b2
MC
1284}
1285
eda75751 1286int tls_get_message_body(SSL *s, size_t *len)
9ab930b2 1287{
54105ddd 1288 size_t n, readbytes;
9ab930b2
MC
1289 unsigned char *p;
1290 int i;
1291
555cbb32 1292 if (s->s3.tmp.message_type == SSL3_MT_CHANGE_CIPHER_SPEC) {
9ab930b2
MC
1293 /* We've already read everything in */
1294 *len = (unsigned long)s->init_num;
1295 return 1;
0f113f3e
MC
1296 }
1297
0f113f3e 1298 p = s->init_msg;
555cbb32 1299 n = s->s3.tmp.message_size - s->init_num;
0f113f3e 1300 while (n > 0) {
657da85e 1301 i = s->method->ssl_read_bytes(s, SSL3_RT_HANDSHAKE, NULL,
54105ddd 1302 &p[s->init_num], n, 0, &readbytes);
0f113f3e
MC
1303 if (i <= 0) {
1304 s->rwstate = SSL_READING;
9ab930b2
MC
1305 *len = 0;
1306 return 0;
0f113f3e 1307 }
54105ddd
MC
1308 s->init_num += readbytes;
1309 n -= readbytes;
0f113f3e 1310 }
ee2ffc27 1311
0f113f3e
MC
1312 /*
1313 * If receiving Finished, record MAC of prior handshake messages for
1314 * Finished verification.
1315 */
5d671101
MC
1316 if (*(s->init_buf->data) == SSL3_MT_FINISHED && !ssl3_take_mac(s)) {
1317 /* SSLfatal() already called */
1318 *len = 0;
1319 return 0;
1320 }
ee2ffc27 1321
0f113f3e 1322 /* Feed this message into MAC computation. */
e8aa8b6c 1323 if (RECORD_LAYER_is_sslv2_record(&s->rlayer)) {
d166ed8c
DSH
1324 if (!ssl3_finish_mac(s, (unsigned char *)s->init_buf->data,
1325 s->init_num)) {
d4d2f3a4 1326 /* SSLfatal() already called */
d166ed8c
DSH
1327 *len = 0;
1328 return 0;
1329 }
32ec4153 1330 if (s->msg_callback)
a230b26e 1331 s->msg_callback(0, SSL2_VERSION, 0, s->init_buf->data,
32ec4153
MC
1332 (size_t)s->init_num, s, s->msg_callback_arg);
1333 } else {
11c67eea
MC
1334 /*
1335 * We defer feeding in the HRR until later. We'll do it as part of
1336 * processing the message
9d75dce3
TS
1337 * The TLsv1.3 handshake transcript stops at the ClientFinished
1338 * message.
11c67eea 1339 */
597c51bc 1340#define SERVER_HELLO_RANDOM_OFFSET (SSL3_HM_HEADER_LENGTH + 2)
9d75dce3 1341 /* KeyUpdate and NewSessionTicket do not need to be added */
555cbb32
TS
1342 if (!SSL_IS_TLS13(s) || (s->s3.tmp.message_type != SSL3_MT_NEWSESSION_TICKET
1343 && s->s3.tmp.message_type != SSL3_MT_KEY_UPDATE)) {
1344 if (s->s3.tmp.message_type != SSL3_MT_SERVER_HELLO
9d75dce3
TS
1345 || s->init_num < SERVER_HELLO_RANDOM_OFFSET + SSL3_RANDOM_SIZE
1346 || memcmp(hrrrandom,
1347 s->init_buf->data + SERVER_HELLO_RANDOM_OFFSET,
1348 SSL3_RANDOM_SIZE) != 0) {
1349 if (!ssl3_finish_mac(s, (unsigned char *)s->init_buf->data,
1350 s->init_num + SSL3_HM_HEADER_LENGTH)) {
1351 /* SSLfatal() already called */
1352 *len = 0;
1353 return 0;
1354 }
597c51bc 1355 }
d166ed8c 1356 }
32ec4153
MC
1357 if (s->msg_callback)
1358 s->msg_callback(0, s->version, SSL3_RT_HANDSHAKE, s->init_buf->data,
1359 (size_t)s->init_num + SSL3_HM_HEADER_LENGTH, s,
1360 s->msg_callback_arg);
1361 }
1362
eda75751 1363 *len = s->init_num;
9ab930b2 1364 return 1;
0f113f3e 1365}
d02b48c6 1366
c6d38183
RS
1367static const X509ERR2ALERT x509table[] = {
1368 {X509_V_ERR_APPLICATION_VERIFICATION, SSL_AD_HANDSHAKE_FAILURE},
1369 {X509_V_ERR_CA_KEY_TOO_SMALL, SSL_AD_BAD_CERTIFICATE},
1370 {X509_V_ERR_CA_MD_TOO_WEAK, SSL_AD_BAD_CERTIFICATE},
1371 {X509_V_ERR_CERT_CHAIN_TOO_LONG, SSL_AD_UNKNOWN_CA},
1372 {X509_V_ERR_CERT_HAS_EXPIRED, SSL_AD_CERTIFICATE_EXPIRED},
1373 {X509_V_ERR_CERT_NOT_YET_VALID, SSL_AD_BAD_CERTIFICATE},
1374 {X509_V_ERR_CERT_REJECTED, SSL_AD_BAD_CERTIFICATE},
1375 {X509_V_ERR_CERT_REVOKED, SSL_AD_CERTIFICATE_REVOKED},
1376 {X509_V_ERR_CERT_SIGNATURE_FAILURE, SSL_AD_DECRYPT_ERROR},
1377 {X509_V_ERR_CERT_UNTRUSTED, SSL_AD_BAD_CERTIFICATE},
1378 {X509_V_ERR_CRL_HAS_EXPIRED, SSL_AD_CERTIFICATE_EXPIRED},
1379 {X509_V_ERR_CRL_NOT_YET_VALID, SSL_AD_BAD_CERTIFICATE},
1380 {X509_V_ERR_CRL_SIGNATURE_FAILURE, SSL_AD_DECRYPT_ERROR},
1381 {X509_V_ERR_DANE_NO_MATCH, SSL_AD_BAD_CERTIFICATE},
1382 {X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT, SSL_AD_UNKNOWN_CA},
1383 {X509_V_ERR_EE_KEY_TOO_SMALL, SSL_AD_BAD_CERTIFICATE},
1384 {X509_V_ERR_EMAIL_MISMATCH, SSL_AD_BAD_CERTIFICATE},
1385 {X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD, SSL_AD_BAD_CERTIFICATE},
1386 {X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD, SSL_AD_BAD_CERTIFICATE},
1387 {X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD, SSL_AD_BAD_CERTIFICATE},
1388 {X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD, SSL_AD_BAD_CERTIFICATE},
1389 {X509_V_ERR_HOSTNAME_MISMATCH, SSL_AD_BAD_CERTIFICATE},
1390 {X509_V_ERR_INVALID_CA, SSL_AD_UNKNOWN_CA},
1391 {X509_V_ERR_INVALID_CALL, SSL_AD_INTERNAL_ERROR},
1392 {X509_V_ERR_INVALID_PURPOSE, SSL_AD_UNSUPPORTED_CERTIFICATE},
1393 {X509_V_ERR_IP_ADDRESS_MISMATCH, SSL_AD_BAD_CERTIFICATE},
1394 {X509_V_ERR_OUT_OF_MEM, SSL_AD_INTERNAL_ERROR},
1395 {X509_V_ERR_PATH_LENGTH_EXCEEDED, SSL_AD_UNKNOWN_CA},
1396 {X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN, SSL_AD_UNKNOWN_CA},
1397 {X509_V_ERR_STORE_LOOKUP, SSL_AD_INTERNAL_ERROR},
1398 {X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY, SSL_AD_BAD_CERTIFICATE},
1399 {X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE, SSL_AD_BAD_CERTIFICATE},
1400 {X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE, SSL_AD_BAD_CERTIFICATE},
1401 {X509_V_ERR_UNABLE_TO_GET_CRL, SSL_AD_UNKNOWN_CA},
1402 {X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER, SSL_AD_UNKNOWN_CA},
1403 {X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT, SSL_AD_UNKNOWN_CA},
1404 {X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY, SSL_AD_UNKNOWN_CA},
1405 {X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE, SSL_AD_UNKNOWN_CA},
1406 {X509_V_ERR_UNSPECIFIED, SSL_AD_INTERNAL_ERROR},
1407
1408 /* Last entry; return this if we don't find the value above. */
1409 {X509_V_OK, SSL_AD_CERTIFICATE_UNKNOWN}
1410};
1411
1412int ssl_x509err2alert(int x509err)
0f113f3e 1413{
c6d38183
RS
1414 const X509ERR2ALERT *tp;
1415
1416 for (tp = x509table; tp->x509err != X509_V_OK; ++tp)
1417 if (tp->x509err == x509err)
1418 break;
1419 return tp->alert;
0f113f3e 1420}
d02b48c6 1421
b362ccab 1422int ssl_allow_compression(SSL *s)
0f113f3e
MC
1423{
1424 if (s->options & SSL_OP_NO_COMPRESSION)
1425 return 0;
1426 return ssl_security(s, SSL_SECOP_COMPRESSION, 0, 0, NULL);
1427}
4fa52141 1428
068c358a 1429static int version_cmp(const SSL *s, int a, int b)
4fa52141
VD
1430{
1431 int dtls = SSL_IS_DTLS(s);
1432
1433 if (a == b)
1434 return 0;
1435 if (!dtls)
1436 return a < b ? -1 : 1;
1437 return DTLS_VERSION_LT(a, b) ? -1 : 1;
1438}
1439
1440typedef struct {
1441 int version;
a230b26e
EK
1442 const SSL_METHOD *(*cmeth) (void);
1443 const SSL_METHOD *(*smeth) (void);
4fa52141
VD
1444} version_info;
1445
5c587fb6 1446#if TLS_MAX_VERSION_INTERNAL != TLS1_3_VERSION
582a17d6 1447# error Code needs update for TLS_method() support beyond TLS1_3_VERSION.
4fa52141
VD
1448#endif
1449
f7f2a01d 1450/* Must be in order high to low */
4fa52141 1451static const version_info tls_version_table[] = {
582a17d6
MC
1452#ifndef OPENSSL_NO_TLS1_3
1453 {TLS1_3_VERSION, tlsv1_3_client_method, tlsv1_3_server_method},
1454#else
1455 {TLS1_3_VERSION, NULL, NULL},
1456#endif
6b01bed2 1457#ifndef OPENSSL_NO_TLS1_2
a230b26e 1458 {TLS1_2_VERSION, tlsv1_2_client_method, tlsv1_2_server_method},
6b01bed2 1459#else
a230b26e 1460 {TLS1_2_VERSION, NULL, NULL},
6b01bed2
VD
1461#endif
1462#ifndef OPENSSL_NO_TLS1_1
a230b26e 1463 {TLS1_1_VERSION, tlsv1_1_client_method, tlsv1_1_server_method},
6b01bed2 1464#else
a230b26e 1465 {TLS1_1_VERSION, NULL, NULL},
6b01bed2
VD
1466#endif
1467#ifndef OPENSSL_NO_TLS1
a230b26e 1468 {TLS1_VERSION, tlsv1_client_method, tlsv1_server_method},
6b01bed2 1469#else
a230b26e 1470 {TLS1_VERSION, NULL, NULL},
6b01bed2 1471#endif
4fa52141 1472#ifndef OPENSSL_NO_SSL3
a230b26e 1473 {SSL3_VERSION, sslv3_client_method, sslv3_server_method},
6b01bed2 1474#else
a230b26e 1475 {SSL3_VERSION, NULL, NULL},
4fa52141 1476#endif
a230b26e 1477 {0, NULL, NULL},
4fa52141
VD
1478};
1479
5c587fb6 1480#if DTLS_MAX_VERSION_INTERNAL != DTLS1_2_VERSION
4fa52141
VD
1481# error Code needs update for DTLS_method() support beyond DTLS1_2_VERSION.
1482#endif
1483
f7f2a01d 1484/* Must be in order high to low */
4fa52141 1485static const version_info dtls_version_table[] = {
6b01bed2 1486#ifndef OPENSSL_NO_DTLS1_2
a230b26e 1487 {DTLS1_2_VERSION, dtlsv1_2_client_method, dtlsv1_2_server_method},
6b01bed2 1488#else
a230b26e 1489 {DTLS1_2_VERSION, NULL, NULL},
6b01bed2
VD
1490#endif
1491#ifndef OPENSSL_NO_DTLS1
a230b26e
EK
1492 {DTLS1_VERSION, dtlsv1_client_method, dtlsv1_server_method},
1493 {DTLS1_BAD_VER, dtls_bad_ver_client_method, NULL},
6b01bed2 1494#else
a230b26e
EK
1495 {DTLS1_VERSION, NULL, NULL},
1496 {DTLS1_BAD_VER, NULL, NULL},
6b01bed2 1497#endif
a230b26e 1498 {0, NULL, NULL},
4fa52141
VD
1499};
1500
1501/*
1502 * ssl_method_error - Check whether an SSL_METHOD is enabled.
1503 *
1504 * @s: The SSL handle for the candidate method
1505 * @method: the intended method.
1506 *
1507 * Returns 0 on success, or an SSL error reason on failure.
1508 */
068c358a 1509static int ssl_method_error(const SSL *s, const SSL_METHOD *method)
4fa52141
VD
1510{
1511 int version = method->version;
1512
1513 if ((s->min_proto_version != 0 &&
1514 version_cmp(s, version, s->min_proto_version) < 0) ||
1515 ssl_security(s, SSL_SECOP_VERSION, 0, version, NULL) == 0)
1516 return SSL_R_VERSION_TOO_LOW;
1517
1518 if (s->max_proto_version != 0 &&
a230b26e 1519 version_cmp(s, version, s->max_proto_version) > 0)
4fa52141
VD
1520 return SSL_R_VERSION_TOO_HIGH;
1521
1522 if ((s->options & method->mask) != 0)
1523 return SSL_R_UNSUPPORTED_PROTOCOL;
1524 if ((method->flags & SSL_METHOD_NO_SUITEB) != 0 && tls1_suiteb(s))
1525 return SSL_R_AT_LEAST_TLS_1_2_NEEDED_IN_SUITEB_MODE;
4fa52141
VD
1526
1527 return 0;
1528}
1529
baa45c3e
MC
1530/*
1531 * Only called by servers. Returns 1 if the server has a TLSv1.3 capable
cd3b53b8
MC
1532 * certificate type, or has PSK or a certificate callback configured. Otherwise
1533 * returns 0.
baa45c3e
MC
1534 */
1535static int is_tls13_capable(const SSL *s)
1536{
65d2c16c
MC
1537 int i;
1538#ifndef OPENSSL_NO_EC
1539 int curve;
65d2c16c 1540#endif
baa45c3e 1541
d162340d
MC
1542#ifndef OPENSSL_NO_PSK
1543 if (s->psk_server_callback != NULL)
1544 return 1;
1545#endif
1546
cd3b53b8 1547 if (s->psk_find_session_cb != NULL || s->cert->cert_cb != NULL)
baa45c3e
MC
1548 return 1;
1549
1550 for (i = 0; i < SSL_PKEY_NUM; i++) {
1551 /* Skip over certs disallowed for TLSv1.3 */
1552 switch (i) {
1553 case SSL_PKEY_DSA_SIGN:
1554 case SSL_PKEY_GOST01:
1555 case SSL_PKEY_GOST12_256:
1556 case SSL_PKEY_GOST12_512:
1557 continue;
1558 default:
1559 break;
1560 }
de4dc598
MC
1561 if (!ssl_has_cert(s, i))
1562 continue;
65d2c16c 1563#ifndef OPENSSL_NO_EC
de4dc598
MC
1564 if (i != SSL_PKEY_ECC)
1565 return 1;
1566 /*
1567 * Prior to TLSv1.3 sig algs allowed any curve to be used. TLSv1.3 is
1568 * more restrictive so check that our sig algs are consistent with this
1569 * EC cert. See section 4.2.3 of RFC8446.
1570 */
c2041da8
RL
1571 curve = evp_pkey_get_EC_KEY_curve_nid(s->cert->pkeys[SSL_PKEY_ECC]
1572 .privatekey);
de4dc598 1573 if (tls_check_sigalg_curve(s, curve))
baa45c3e 1574 return 1;
65d2c16c
MC
1575#else
1576 return 1;
1577#endif
baa45c3e
MC
1578 }
1579
1580 return 0;
1581}
1582
ccae4a15
FI
1583/*
1584 * ssl_version_supported - Check that the specified `version` is supported by
1585 * `SSL *` instance
1586 *
1587 * @s: The SSL handle for the candidate method
1588 * @version: Protocol version to test against
1589 *
1590 * Returns 1 when supported, otherwise 0
1591 */
4fd12788 1592int ssl_version_supported(const SSL *s, int version, const SSL_METHOD **meth)
ccae4a15
FI
1593{
1594 const version_info *vent;
1595 const version_info *table;
1596
1597 switch (s->method->version) {
1598 default:
1599 /* Version should match method version for non-ANY method */
1600 return version_cmp(s, version, s->version) == 0;
1601 case TLS_ANY_VERSION:
1602 table = tls_version_table;
1603 break;
1604 case DTLS_ANY_VERSION:
1605 table = dtls_version_table;
1606 break;
1607 }
1608
1609 for (vent = table;
1610 vent->version != 0 && version_cmp(s, version, vent->version) <= 0;
1611 ++vent) {
baa45c3e
MC
1612 if (vent->cmeth != NULL
1613 && version_cmp(s, version, vent->version) == 0
1614 && ssl_method_error(s, vent->cmeth()) == 0
1615 && (!s->server
1616 || version != TLS1_3_VERSION
1617 || is_tls13_capable(s))) {
4fd12788
MC
1618 if (meth != NULL)
1619 *meth = vent->cmeth();
ccae4a15
FI
1620 return 1;
1621 }
1622 }
1623 return 0;
1624}
1625
4fa52141
VD
1626/*
1627 * ssl_check_version_downgrade - In response to RFC7507 SCSV version
1628 * fallback indication from a client check whether we're using the highest
1629 * supported protocol version.
1630 *
1631 * @s server SSL handle.
1632 *
1633 * Returns 1 when using the highest enabled version, 0 otherwise.
1634 */
1635int ssl_check_version_downgrade(SSL *s)
1636{
1637 const version_info *vent;
1638 const version_info *table;
1639
1640 /*
1641 * Check that the current protocol is the highest enabled version
1642 * (according to s->ctx->method, as version negotiation may have changed
1643 * s->method).
1644 */
1645 if (s->version == s->ctx->method->version)
1646 return 1;
1647
1648 /*
1649 * Apparently we're using a version-flexible SSL_METHOD (not at its
1650 * highest protocol version).
1651 */
1652 if (s->ctx->method->version == TLS_method()->version)
1653 table = tls_version_table;
1654 else if (s->ctx->method->version == DTLS_method()->version)
1655 table = dtls_version_table;
1656 else {
1657 /* Unexpected state; fail closed. */
1658 return 0;
1659 }
1660
1661 for (vent = table; vent->version != 0; ++vent) {
a230b26e 1662 if (vent->smeth != NULL && ssl_method_error(s, vent->smeth()) == 0)
4fa52141
VD
1663 return s->version == vent->version;
1664 }
1665 return 0;
1666}
1667
1668/*
1669 * ssl_set_version_bound - set an upper or lower bound on the supported (D)TLS
1670 * protocols, provided the initial (D)TLS method is version-flexible. This
1671 * function sanity-checks the proposed value and makes sure the method is
1672 * version-flexible, then sets the limit if all is well.
1673 *
1674 * @method_version: The version of the current SSL_METHOD.
1675 * @version: the intended limit.
1676 * @bound: pointer to limit to be updated.
1677 *
1678 * Returns 1 on success, 0 on failure.
1679 */
1680int ssl_set_version_bound(int method_version, int version, int *bound)
1681{
869e978c
KR
1682 if (version == 0) {
1683 *bound = version;
1684 return 1;
1685 }
1686
4fa52141
VD
1687 /*-
1688 * Restrict TLS methods to TLS protocol versions.
1689 * Restrict DTLS methods to DTLS protocol versions.
1690 * Note, DTLS version numbers are decreasing, use comparison macros.
1691 *
1692 * Note that for both lower-bounds we use explicit versions, not
1693 * (D)TLS_MIN_VERSION. This is because we don't want to break user
1694 * configurations. If the MIN (supported) version ever rises, the user's
1695 * "floor" remains valid even if no longer available. We don't expect the
1696 * MAX ceiling to ever get lower, so making that variable makes sense.
1697 */
1698 switch (method_version) {
1699 default:
1700 /*
1701 * XXX For fixed version methods, should we always fail and not set any
1702 * bounds, always succeed and not set any bounds, or set the bounds and
1703 * arrange to fail later if they are not met? At present fixed-version
1704 * methods are not subject to controls that disable individual protocol
1705 * versions.
1706 */
1707 return 0;
1708
1709 case TLS_ANY_VERSION:
5c587fb6 1710 if (version < SSL3_VERSION || version > TLS_MAX_VERSION_INTERNAL)
4fa52141
VD
1711 return 0;
1712 break;
1713
1714 case DTLS_ANY_VERSION:
5c587fb6 1715 if (DTLS_VERSION_GT(version, DTLS_MAX_VERSION_INTERNAL) ||
032924c4 1716 DTLS_VERSION_LT(version, DTLS1_BAD_VER))
4fa52141
VD
1717 return 0;
1718 break;
1719 }
1720
1721 *bound = version;
1722 return 1;
1723}
1724
f7f2a01d
MC
1725static void check_for_downgrade(SSL *s, int vers, DOWNGRADE *dgrd)
1726{
1727 if (vers == TLS1_2_VERSION
4fd12788 1728 && ssl_version_supported(s, TLS1_3_VERSION, NULL)) {
f7f2a01d 1729 *dgrd = DOWNGRADE_TO_1_2;
5627f9f2
MC
1730 } else if (!SSL_IS_DTLS(s)
1731 && vers < TLS1_2_VERSION
1732 /*
1733 * We need to ensure that a server that disables TLSv1.2
1734 * (creating a hole between TLSv1.3 and TLSv1.1) can still
1735 * complete handshakes with clients that support TLSv1.2 and
1736 * below. Therefore we do not enable the sentinel if TLSv1.3 is
1737 * enabled and TLSv1.2 is not.
1738 */
1739 && ssl_version_supported(s, TLS1_2_VERSION, NULL)) {
f7f2a01d
MC
1740 *dgrd = DOWNGRADE_TO_1_1;
1741 } else {
1742 *dgrd = DOWNGRADE_NONE;
1743 }
1744}
1745
4fa52141
VD
1746/*
1747 * ssl_choose_server_version - Choose server (D)TLS version. Called when the
1748 * client HELLO is received to select the final server protocol version and
1749 * the version specific method.
1750 *
1751 * @s: server SSL handle.
1752 *
1753 * Returns 0 on success or an SSL error reason number on failure.
1754 */
f7f2a01d 1755int ssl_choose_server_version(SSL *s, CLIENTHELLO_MSG *hello, DOWNGRADE *dgrd)
4fa52141
VD
1756{
1757 /*-
1758 * With version-flexible methods we have an initial state with:
1759 *
1760 * s->method->version == (D)TLS_ANY_VERSION,
5c587fb6 1761 * s->version == (D)TLS_MAX_VERSION_INTERNAL.
4fa52141
VD
1762 *
1763 * So we detect version-flexible methods via the method version, not the
1764 * handle version.
1765 */
1766 int server_version = s->method->version;
df7ce507 1767 int client_version = hello->legacy_version;
4fa52141
VD
1768 const version_info *vent;
1769 const version_info *table;
1770 int disabled = 0;
cd998837 1771 RAW_EXTENSION *suppversions;
4fa52141 1772
1ab3836b
MC
1773 s->client_version = client_version;
1774
4fa52141
VD
1775 switch (server_version) {
1776 default:
7d061fce
MC
1777 if (!SSL_IS_TLS13(s)) {
1778 if (version_cmp(s, client_version, s->version) < 0)
1779 return SSL_R_WRONG_SSL_VERSION;
f7f2a01d 1780 *dgrd = DOWNGRADE_NONE;
7d061fce
MC
1781 /*
1782 * If this SSL handle is not from a version flexible method we don't
1783 * (and never did) check min/max FIPS or Suite B constraints. Hope
1784 * that's OK. It is up to the caller to not choose fixed protocol
1785 * versions they don't want. If not, then easy to fix, just return
1786 * ssl_method_error(s, s->method)
1787 */
1788 return 0;
1789 }
d2f42576 1790 /*
7d061fce
MC
1791 * Fall through if we are TLSv1.3 already (this means we must be after
1792 * a HelloRetryRequest
4fa52141 1793 */
018fcbec 1794 /* fall thru */
4fa52141
VD
1795 case TLS_ANY_VERSION:
1796 table = tls_version_table;
1797 break;
1798 case DTLS_ANY_VERSION:
1799 table = dtls_version_table;
1800 break;
1801 }
1802
70af3d8e 1803 suppversions = &hello->pre_proc_exts[TLSEXT_IDX_supported_versions];
cd998837 1804
6f40214f 1805 /* If we did an HRR then supported versions is mandatory */
fc7129dc 1806 if (!suppversions->present && s->hello_retry_request != SSL_HRR_NONE)
6f40214f
MC
1807 return SSL_R_UNSUPPORTED_PROTOCOL;
1808
70af3d8e 1809 if (suppversions->present && !SSL_IS_DTLS(s)) {
cd998837
MC
1810 unsigned int candidate_vers = 0;
1811 unsigned int best_vers = 0;
1812 const SSL_METHOD *best_method = NULL;
1813 PACKET versionslist;
1814
6b473aca
MC
1815 suppversions->parsed = 1;
1816
16bce0e0 1817 if (!PACKET_as_length_prefixed_1(&suppversions->data, &versionslist)) {
cd998837
MC
1818 /* Trailing or invalid data? */
1819 return SSL_R_LENGTH_MISMATCH;
1820 }
1821
d8434cf8
MC
1822 /*
1823 * The TLSv1.3 spec says the client MUST set this to TLS1_2_VERSION.
1824 * The spec only requires servers to check that it isn't SSLv3:
1825 * "Any endpoint receiving a Hello message with
1826 * ClientHello.legacy_version or ServerHello.legacy_version set to
1827 * 0x0300 MUST abort the handshake with a "protocol_version" alert."
1828 * We are slightly stricter and require that it isn't SSLv3 or lower.
1829 * We tolerate TLSv1 and TLSv1.1.
1830 */
1831 if (client_version <= SSL3_VERSION)
1832 return SSL_R_BAD_LEGACY_VERSION;
1833
cd998837 1834 while (PACKET_get_net_2(&versionslist, &candidate_vers)) {
cd998837
MC
1835 if (version_cmp(s, candidate_vers, best_vers) <= 0)
1836 continue;
4fd12788
MC
1837 if (ssl_version_supported(s, candidate_vers, &best_method))
1838 best_vers = candidate_vers;
cd998837
MC
1839 }
1840 if (PACKET_remaining(&versionslist) != 0) {
1841 /* Trailing data? */
1842 return SSL_R_LENGTH_MISMATCH;
1843 }
1844
1845 if (best_vers > 0) {
fc7129dc 1846 if (s->hello_retry_request != SSL_HRR_NONE) {
7d061fce 1847 /*
6f40214f
MC
1848 * This is after a HelloRetryRequest so we better check that we
1849 * negotiated TLSv1.3
7d061fce
MC
1850 */
1851 if (best_vers != TLS1_3_VERSION)
1852 return SSL_R_UNSUPPORTED_PROTOCOL;
1853 return 0;
1854 }
f7f2a01d 1855 check_for_downgrade(s, best_vers, dgrd);
cd998837
MC
1856 s->version = best_vers;
1857 s->method = best_method;
1858 return 0;
1859 }
1860 return SSL_R_UNSUPPORTED_PROTOCOL;
1861 }
1862
1863 /*
1864 * If the supported versions extension isn't present, then the highest
1865 * version we can negotiate is TLSv1.2
1866 */
1867 if (version_cmp(s, client_version, TLS1_3_VERSION) >= 0)
1868 client_version = TLS1_2_VERSION;
1869
1870 /*
1871 * No supported versions extension, so we just use the version supplied in
1872 * the ClientHello.
1873 */
4fa52141
VD
1874 for (vent = table; vent->version != 0; ++vent) {
1875 const SSL_METHOD *method;
1876
1877 if (vent->smeth == NULL ||
1878 version_cmp(s, client_version, vent->version) < 0)
1879 continue;
1880 method = vent->smeth();
1881 if (ssl_method_error(s, method) == 0) {
f7f2a01d 1882 check_for_downgrade(s, vent->version, dgrd);
4fa52141
VD
1883 s->version = vent->version;
1884 s->method = method;
1885 return 0;
1886 }
1887 disabled = 1;
1888 }
1889 return disabled ? SSL_R_UNSUPPORTED_PROTOCOL : SSL_R_VERSION_TOO_LOW;
1890}
1891
1892/*
1893 * ssl_choose_client_version - Choose client (D)TLS version. Called when the
1894 * server HELLO is received to select the final client protocol version and
1895 * the version specific method.
1896 *
1897 * @s: client SSL handle.
1898 * @version: The proposed version from the server's HELLO.
88050dd1 1899 * @extensions: The extensions received
4fa52141 1900 *
29bfd5b7 1901 * Returns 1 on success or 0 on error.
4fa52141 1902 */
88050dd1 1903int ssl_choose_client_version(SSL *s, int version, RAW_EXTENSION *extensions)
4fa52141
VD
1904{
1905 const version_info *vent;
1906 const version_info *table;
b5b993b2 1907 int ret, ver_min, ver_max, real_max, origv;
4fa52141 1908
88050dd1
MC
1909 origv = s->version;
1910 s->version = version;
b97667ce 1911
88050dd1
MC
1912 /* This will overwrite s->version if the extension is present */
1913 if (!tls_parse_extension(s, TLSEXT_IDX_supported_versions,
1914 SSL_EXT_TLS1_2_SERVER_HELLO
1915 | SSL_EXT_TLS1_3_SERVER_HELLO, extensions,
1916 NULL, 0)) {
1917 s->version = origv;
1918 return 0;
1919 }
1920
fc7129dc
MC
1921 if (s->hello_retry_request != SSL_HRR_NONE
1922 && s->version != TLS1_3_VERSION) {
88050dd1 1923 s->version = origv;
29bfd5b7
MC
1924 SSLfatal(s, SSL_AD_PROTOCOL_VERSION, SSL_F_SSL_CHOOSE_CLIENT_VERSION,
1925 SSL_R_WRONG_SSL_VERSION);
1926 return 0;
c3043dcd
MC
1927 }
1928
4fa52141
VD
1929 switch (s->method->version) {
1930 default:
88050dd1
MC
1931 if (s->version != s->method->version) {
1932 s->version = origv;
29bfd5b7
MC
1933 SSLfatal(s, SSL_AD_PROTOCOL_VERSION,
1934 SSL_F_SSL_CHOOSE_CLIENT_VERSION,
1935 SSL_R_WRONG_SSL_VERSION);
1936 return 0;
c3043dcd 1937 }
4fa52141
VD
1938 /*
1939 * If this SSL handle is not from a version flexible method we don't
1940 * (and never did) check min/max, FIPS or Suite B constraints. Hope
1941 * that's OK. It is up to the caller to not choose fixed protocol
1942 * versions they don't want. If not, then easy to fix, just return
1943 * ssl_method_error(s, s->method)
1944 */
29bfd5b7 1945 return 1;
4fa52141
VD
1946 case TLS_ANY_VERSION:
1947 table = tls_version_table;
1948 break;
1949 case DTLS_ANY_VERSION:
1950 table = dtls_version_table;
1951 break;
1952 }
1953
b5b993b2
MC
1954 ret = ssl_get_min_max_version(s, &ver_min, &ver_max, &real_max);
1955 if (ret != 0) {
1956 s->version = origv;
1957 SSLfatal(s, SSL_AD_PROTOCOL_VERSION,
1958 SSL_F_SSL_CHOOSE_CLIENT_VERSION, ret);
1959 return 0;
1960 }
1961 if (SSL_IS_DTLS(s) ? DTLS_VERSION_LT(s->version, ver_min)
1962 : s->version < ver_min) {
1963 s->version = origv;
1964 SSLfatal(s, SSL_AD_PROTOCOL_VERSION,
1965 SSL_F_SSL_CHOOSE_CLIENT_VERSION, SSL_R_UNSUPPORTED_PROTOCOL);
1966 return 0;
1967 } else if (SSL_IS_DTLS(s) ? DTLS_VERSION_GT(s->version, ver_max)
1968 : s->version > ver_max) {
1969 s->version = origv;
1970 SSLfatal(s, SSL_AD_PROTOCOL_VERSION,
1971 SSL_F_SSL_CHOOSE_CLIENT_VERSION, SSL_R_UNSUPPORTED_PROTOCOL);
1972 return 0;
1973 }
5df22060 1974
b5b993b2
MC
1975 if ((s->mode & SSL_MODE_SEND_FALLBACK_SCSV) == 0)
1976 real_max = ver_max;
c3043dcd 1977
b5b993b2
MC
1978 /* Check for downgrades */
1979 if (s->version == TLS1_2_VERSION && real_max > s->version) {
1980 if (memcmp(tls12downgrade,
555cbb32 1981 s->s3.server_random + SSL3_RANDOM_SIZE
b5b993b2
MC
1982 - sizeof(tls12downgrade),
1983 sizeof(tls12downgrade)) == 0) {
1984 s->version = origv;
1985 SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER,
1986 SSL_F_SSL_CHOOSE_CLIENT_VERSION,
1987 SSL_R_INAPPROPRIATE_FALLBACK);
1988 return 0;
1989 }
1990 } else if (!SSL_IS_DTLS(s)
1991 && s->version < TLS1_2_VERSION
1992 && real_max > s->version) {
1993 if (memcmp(tls11downgrade,
555cbb32 1994 s->s3.server_random + SSL3_RANDOM_SIZE
b5b993b2
MC
1995 - sizeof(tls11downgrade),
1996 sizeof(tls11downgrade)) == 0) {
1997 s->version = origv;
1998 SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER,
1999 SSL_F_SSL_CHOOSE_CLIENT_VERSION,
2000 SSL_R_INAPPROPRIATE_FALLBACK);
2001 return 0;
c3043dcd 2002 }
b5b993b2 2003 }
c3043dcd 2004
b5b993b2
MC
2005 for (vent = table; vent->version != 0; ++vent) {
2006 if (vent->cmeth == NULL || s->version != vent->version)
c3043dcd
MC
2007 continue;
2008
b5b993b2 2009 s->method = vent->cmeth();
29bfd5b7 2010 return 1;
4fa52141
VD
2011 }
2012
88050dd1 2013 s->version = origv;
29bfd5b7
MC
2014 SSLfatal(s, SSL_AD_PROTOCOL_VERSION, SSL_F_SSL_CHOOSE_CLIENT_VERSION,
2015 SSL_R_UNSUPPORTED_PROTOCOL);
2016 return 0;
4fa52141
VD
2017}
2018
068c358a 2019/*
38a73150 2020 * ssl_get_min_max_version - get minimum and maximum protocol version
068c358a
KR
2021 * @s: The SSL connection
2022 * @min_version: The minimum supported version
2023 * @max_version: The maximum supported version
b5b993b2
MC
2024 * @real_max: The highest version below the lowest compile time version hole
2025 * where that hole lies above at least one run-time enabled
2026 * protocol.
068c358a
KR
2027 *
2028 * Work out what version we should be using for the initial ClientHello if the
2029 * version is initially (D)TLS_ANY_VERSION. We apply any explicit SSL_OP_NO_xxx
2030 * options, the MinProtocol and MaxProtocol configuration commands, any Suite B
b53338cb 2031 * constraints and any floor imposed by the security level here,
068c358a 2032 * so we don't advertise the wrong protocol version to only reject the outcome later.
4fa52141 2033 *
0485d540 2034 * Computing the right floor matters. If, e.g., TLS 1.0 and 1.2 are enabled,
4fa52141
VD
2035 * TLS 1.1 is disabled, but the security level, Suite-B and/or MinProtocol
2036 * only allow TLS 1.2, we want to advertise TLS1.2, *not* TLS1.
2037 *
068c358a
KR
2038 * Returns 0 on success or an SSL error reason number on failure. On failure
2039 * min_version and max_version will also be set to 0.
4fa52141 2040 */
b5b993b2
MC
2041int ssl_get_min_max_version(const SSL *s, int *min_version, int *max_version,
2042 int *real_max)
4fa52141 2043{
b5b993b2 2044 int version, tmp_real_max;
4fa52141
VD
2045 int hole;
2046 const SSL_METHOD *single = NULL;
2047 const SSL_METHOD *method;
2048 const version_info *table;
2049 const version_info *vent;
2050
2051 switch (s->method->version) {
2052 default:
2053 /*
2054 * If this SSL handle is not from a version flexible method we don't
2055 * (and never did) check min/max FIPS or Suite B constraints. Hope
2056 * that's OK. It is up to the caller to not choose fixed protocol
2057 * versions they don't want. If not, then easy to fix, just return
2058 * ssl_method_error(s, s->method)
2059 */
068c358a 2060 *min_version = *max_version = s->version;
b5b993b2
MC
2061 /*
2062 * Providing a real_max only makes sense where we're using a version
2063 * flexible method.
2064 */
2065 if (!ossl_assert(real_max == NULL))
2066 return ERR_R_INTERNAL_ERROR;
4fa52141
VD
2067 return 0;
2068 case TLS_ANY_VERSION:
2069 table = tls_version_table;
2070 break;
2071 case DTLS_ANY_VERSION:
2072 table = dtls_version_table;
2073 break;
2074 }
2075
2076 /*
2077 * SSL_OP_NO_X disables all protocols above X *if* there are some protocols
2078 * below X enabled. This is required in order to maintain the "version
2079 * capability" vector contiguous. Any versions with a NULL client method
2080 * (protocol version client is disabled at compile-time) is also a "hole".
2081 *
2082 * Our initial state is hole == 1, version == 0. That is, versions above
2083 * the first version in the method table are disabled (a "hole" above
2084 * the valid protocol entries) and we don't have a selected version yet.
2085 *
2086 * Whenever "hole == 1", and we hit an enabled method, its version becomes
2087 * the selected version, and the method becomes a candidate "single"
2088 * method. We're no longer in a hole, so "hole" becomes 0.
2089 *
2090 * If "hole == 0" and we hit an enabled method, then "single" is cleared,
2091 * as we support a contiguous range of at least two methods. If we hit
2092 * a disabled method, then hole becomes true again, but nothing else
2093 * changes yet, because all the remaining methods may be disabled too.
2094 * If we again hit an enabled method after the new hole, it becomes
2095 * selected, as we start from scratch.
2096 */
068c358a 2097 *min_version = version = 0;
4fa52141 2098 hole = 1;
b5b993b2
MC
2099 if (real_max != NULL)
2100 *real_max = 0;
2101 tmp_real_max = 0;
4fa52141
VD
2102 for (vent = table; vent->version != 0; ++vent) {
2103 /*
2104 * A table entry with a NULL client method is still a hole in the
2105 * "version capability" vector.
2106 */
2107 if (vent->cmeth == NULL) {
2108 hole = 1;
b5b993b2 2109 tmp_real_max = 0;
4fa52141
VD
2110 continue;
2111 }
2112 method = vent->cmeth();
b5b993b2
MC
2113
2114 if (hole == 1 && tmp_real_max == 0)
2115 tmp_real_max = vent->version;
2116
4fa52141
VD
2117 if (ssl_method_error(s, method) != 0) {
2118 hole = 1;
2119 } else if (!hole) {
2120 single = NULL;
068c358a 2121 *min_version = method->version;
4fa52141 2122 } else {
b5b993b2
MC
2123 if (real_max != NULL && tmp_real_max != 0)
2124 *real_max = tmp_real_max;
4fa52141 2125 version = (single = method)->version;
068c358a 2126 *min_version = version;
4fa52141
VD
2127 hole = 0;
2128 }
2129 }
2130
068c358a
KR
2131 *max_version = version;
2132
4fa52141
VD
2133 /* Fail if everything is disabled */
2134 if (version == 0)
2135 return SSL_R_NO_PROTOCOLS_AVAILABLE;
2136
068c358a
KR
2137 return 0;
2138}
2139
2140/*
2141 * ssl_set_client_hello_version - Work out what version we should be using for
7acb8b64 2142 * the initial ClientHello.legacy_version field.
068c358a
KR
2143 *
2144 * @s: client SSL handle.
2145 *
2146 * Returns 0 on success or an SSL error reason number on failure.
2147 */
2148int ssl_set_client_hello_version(SSL *s)
2149{
3eb2aff4 2150 int ver_min, ver_max, ret;
068c358a 2151
447cc0ad
MC
2152 /*
2153 * In a renegotiation we always send the same client_version that we sent
2154 * last time, regardless of which version we eventually negotiated.
2155 */
2156 if (!SSL_IS_FIRST_HANDSHAKE(s))
2157 return 0;
2158
b5b993b2 2159 ret = ssl_get_min_max_version(s, &ver_min, &ver_max, NULL);
068c358a
KR
2160
2161 if (ret != 0)
2162 return ret;
2163
7acb8b64
MC
2164 s->version = ver_max;
2165
2166 /* TLS1.3 always uses TLS1.2 in the legacy_version field */
2167 if (!SSL_IS_DTLS(s) && ver_max > TLS1_2_VERSION)
2168 ver_max = TLS1_2_VERSION;
2169
2170 s->client_version = ver_max;
4fa52141
VD
2171 return 0;
2172}
aff9929b
MC
2173
2174/*
2175 * Checks a list of |groups| to determine if the |group_id| is in it. If it is
2176 * and |checkallow| is 1 then additionally check if the group is allowed to be
2177 * used. Returns 1 if the group is in the list (and allowed if |checkallow| is
2178 * 1) or 0 otherwise.
2179 */
9e84a42d 2180int check_in_list(SSL *s, uint16_t group_id, const uint16_t *groups,
aff9929b
MC
2181 size_t num_groups, int checkallow)
2182{
2183 size_t i;
2184
2185 if (groups == NULL || num_groups == 0)
2186 return 0;
2187
9e84a42d
DSH
2188 for (i = 0; i < num_groups; i++) {
2189 uint16_t group = groups[i];
2190
2191 if (group_id == group
aff9929b 2192 && (!checkallow
dbc6268f 2193 || tls_group_allowed(s, group, SSL_SECOP_CURVE_CHECK))) {
0acee504 2194 return 1;
aff9929b
MC
2195 }
2196 }
2197
0acee504 2198 return 0;
aff9929b 2199}
11c67eea
MC
2200
2201/* Replace ClientHello1 in the transcript hash with a synthetic message */
43054d3d
MC
2202int create_synthetic_message_hash(SSL *s, const unsigned char *hashval,
2203 size_t hashlen, const unsigned char *hrr,
2204 size_t hrrlen)
11c67eea 2205{
43054d3d 2206 unsigned char hashvaltmp[EVP_MAX_MD_SIZE];
635b7d3f
MC
2207 unsigned char msghdr[SSL3_HM_HEADER_LENGTH];
2208
2209 memset(msghdr, 0, sizeof(msghdr));
11c67eea 2210
43054d3d
MC
2211 if (hashval == NULL) {
2212 hashval = hashvaltmp;
2213 hashlen = 0;
2214 /* Get the hash of the initial ClientHello */
2215 if (!ssl3_digest_cached_records(s, 0)
2216 || !ssl_handshake_hash(s, hashvaltmp, sizeof(hashvaltmp),
2217 &hashlen)) {
2218 /* SSLfatal() already called */
2219 return 0;
2220 }
11c67eea
MC
2221 }
2222
2223 /* Reinitialise the transcript hash */
f63a17d6
MC
2224 if (!ssl3_init_finished_mac(s)) {
2225 /* SSLfatal() already called */
11c67eea 2226 return 0;
f63a17d6 2227 }
11c67eea
MC
2228
2229 /* Inject the synthetic message_hash message */
635b7d3f 2230 msghdr[0] = SSL3_MT_MESSAGE_HASH;
3a63c0ed 2231 msghdr[SSL3_HM_HEADER_LENGTH - 1] = (unsigned char)hashlen;
11c67eea
MC
2232 if (!ssl3_finish_mac(s, msghdr, SSL3_HM_HEADER_LENGTH)
2233 || !ssl3_finish_mac(s, hashval, hashlen)) {
f63a17d6 2234 /* SSLfatal() already called */
11c67eea
MC
2235 return 0;
2236 }
2237
43054d3d
MC
2238 /*
2239 * Now re-inject the HRR and current message if appropriate (we just deleted
2240 * it when we reinitialised the transcript hash above). Only necessary after
2241 * receiving a ClientHello2 with a cookie.
2242 */
2243 if (hrr != NULL
2244 && (!ssl3_finish_mac(s, hrr, hrrlen)
2245 || !ssl3_finish_mac(s, (unsigned char *)s->init_buf->data,
555cbb32 2246 s->s3.tmp.message_size
43054d3d
MC
2247 + SSL3_HM_HEADER_LENGTH))) {
2248 /* SSLfatal() already called */
2249 return 0;
2250 }
2251
11c67eea
MC
2252 return 1;
2253}
5d6cca05
DSH
2254
2255static int ca_dn_cmp(const X509_NAME *const *a, const X509_NAME *const *b)
2256{
2257 return X509_NAME_cmp(*a, *b);
2258}
2259
f63a17d6 2260int parse_ca_names(SSL *s, PACKET *pkt)
5d6cca05
DSH
2261{
2262 STACK_OF(X509_NAME) *ca_sk = sk_X509_NAME_new(ca_dn_cmp);
2263 X509_NAME *xn = NULL;
2264 PACKET cadns;
2265
2266 if (ca_sk == NULL) {
f63a17d6
MC
2267 SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_PARSE_CA_NAMES,
2268 ERR_R_MALLOC_FAILURE);
2269 goto err;
5d6cca05
DSH
2270 }
2271 /* get the CA RDNs */
2272 if (!PACKET_get_length_prefixed_2(pkt, &cadns)) {
f63a17d6
MC
2273 SSLfatal(s, SSL_AD_DECODE_ERROR,SSL_F_PARSE_CA_NAMES,
2274 SSL_R_LENGTH_MISMATCH);
2275 goto err;
5d6cca05
DSH
2276 }
2277
2278 while (PACKET_remaining(&cadns)) {
2279 const unsigned char *namestart, *namebytes;
2280 unsigned int name_len;
2281
2282 if (!PACKET_get_net_2(&cadns, &name_len)
2283 || !PACKET_get_bytes(&cadns, &namebytes, name_len)) {
f63a17d6
MC
2284 SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_PARSE_CA_NAMES,
2285 SSL_R_LENGTH_MISMATCH);
2286 goto err;
5d6cca05
DSH
2287 }
2288
2289 namestart = namebytes;
2290 if ((xn = d2i_X509_NAME(NULL, &namebytes, name_len)) == NULL) {
f63a17d6
MC
2291 SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_PARSE_CA_NAMES,
2292 ERR_R_ASN1_LIB);
2293 goto err;
5d6cca05
DSH
2294 }
2295 if (namebytes != (namestart + name_len)) {
f63a17d6
MC
2296 SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_PARSE_CA_NAMES,
2297 SSL_R_CA_DN_LENGTH_MISMATCH);
2298 goto err;
5d6cca05
DSH
2299 }
2300
2301 if (!sk_X509_NAME_push(ca_sk, xn)) {
f63a17d6
MC
2302 SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_PARSE_CA_NAMES,
2303 ERR_R_MALLOC_FAILURE);
5d6cca05
DSH
2304 goto err;
2305 }
2306 xn = NULL;
2307 }
2308
555cbb32
TS
2309 sk_X509_NAME_pop_free(s->s3.tmp.peer_ca_names, X509_NAME_free);
2310 s->s3.tmp.peer_ca_names = ca_sk;
5d6cca05
DSH
2311
2312 return 1;
2313
5d6cca05
DSH
2314 err:
2315 sk_X509_NAME_pop_free(ca_sk, X509_NAME_free);
2316 X509_NAME_free(xn);
2317 return 0;
2318}
2319
98732979 2320const STACK_OF(X509_NAME) *get_ca_names(SSL *s)
5d6cca05 2321{
98732979 2322 const STACK_OF(X509_NAME) *ca_sk = NULL;;
5d6cca05 2323
98732979
MC
2324 if (s->server) {
2325 ca_sk = SSL_get_client_CA_list(s);
2326 if (ca_sk != NULL && sk_X509_NAME_num(ca_sk) == 0)
2327 ca_sk = NULL;
2328 }
2329
2330 if (ca_sk == NULL)
2331 ca_sk = SSL_get0_CA_list(s);
2332
2333 return ca_sk;
2334}
2335
2336int construct_ca_names(SSL *s, const STACK_OF(X509_NAME) *ca_sk, WPACKET *pkt)
2337{
5d6cca05 2338 /* Start sub-packet for client CA list */
f63a17d6
MC
2339 if (!WPACKET_start_sub_packet_u16(pkt)) {
2340 SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_CONSTRUCT_CA_NAMES,
2341 ERR_R_INTERNAL_ERROR);
5d6cca05 2342 return 0;
f63a17d6 2343 }
5d6cca05
DSH
2344
2345 if (ca_sk != NULL) {
2346 int i;
2347
2348 for (i = 0; i < sk_X509_NAME_num(ca_sk); i++) {
2349 unsigned char *namebytes;
2350 X509_NAME *name = sk_X509_NAME_value(ca_sk, i);
2351 int namelen;
2352
2353 if (name == NULL
2354 || (namelen = i2d_X509_NAME(name, NULL)) < 0
2355 || !WPACKET_sub_allocate_bytes_u16(pkt, namelen,
2356 &namebytes)
2357 || i2d_X509_NAME(name, &namebytes) != namelen) {
f63a17d6
MC
2358 SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_CONSTRUCT_CA_NAMES,
2359 ERR_R_INTERNAL_ERROR);
5d6cca05
DSH
2360 return 0;
2361 }
2362 }
2363 }
2364
f63a17d6
MC
2365 if (!WPACKET_close(pkt)) {
2366 SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_CONSTRUCT_CA_NAMES,
2367 ERR_R_INTERNAL_ERROR);
5d6cca05 2368 return 0;
f63a17d6 2369 }
5d6cca05
DSH
2370
2371 return 1;
2372}
72ceb6a6
DSH
2373
2374/* Create a buffer containing data to be signed for server key exchange */
f63a17d6 2375size_t construct_key_exchange_tbs(SSL *s, unsigned char **ptbs,
72ceb6a6
DSH
2376 const void *param, size_t paramlen)
2377{
2378 size_t tbslen = 2 * SSL3_RANDOM_SIZE + paramlen;
2379 unsigned char *tbs = OPENSSL_malloc(tbslen);
2380
f63a17d6
MC
2381 if (tbs == NULL) {
2382 SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_CONSTRUCT_KEY_EXCHANGE_TBS,
2383 ERR_R_MALLOC_FAILURE);
72ceb6a6 2384 return 0;
f63a17d6 2385 }
555cbb32
TS
2386 memcpy(tbs, s->s3.client_random, SSL3_RANDOM_SIZE);
2387 memcpy(tbs + SSL3_RANDOM_SIZE, s->s3.server_random, SSL3_RANDOM_SIZE);
72ceb6a6
DSH
2388
2389 memcpy(tbs + SSL3_RANDOM_SIZE * 2, param, paramlen);
2390
2391 *ptbs = tbs;
2392 return tbslen;
2393}
9d75dce3
TS
2394
2395/*
2396 * Saves the current handshake digest for Post-Handshake Auth,
2397 * Done after ClientFinished is processed, done exactly once
2398 */
2399int tls13_save_handshake_digest_for_pha(SSL *s)
2400{
2401 if (s->pha_dgst == NULL) {
2402 if (!ssl3_digest_cached_records(s, 1))
2403 /* SSLfatal() already called */
2404 return 0;
2405
2406 s->pha_dgst = EVP_MD_CTX_new();
2407 if (s->pha_dgst == NULL) {
2408 SSLfatal(s, SSL_AD_INTERNAL_ERROR,
2409 SSL_F_TLS13_SAVE_HANDSHAKE_DIGEST_FOR_PHA,
2410 ERR_R_INTERNAL_ERROR);
2411 return 0;
2412 }
2413 if (!EVP_MD_CTX_copy_ex(s->pha_dgst,
555cbb32 2414 s->s3.handshake_dgst)) {
9d75dce3
TS
2415 SSLfatal(s, SSL_AD_INTERNAL_ERROR,
2416 SSL_F_TLS13_SAVE_HANDSHAKE_DIGEST_FOR_PHA,
2417 ERR_R_INTERNAL_ERROR);
2418 return 0;
2419 }
2420 }
2421 return 1;
2422}
2423
2424/*
2425 * Restores the Post-Handshake Auth handshake digest
2426 * Done just before sending/processing the Cert Request
2427 */
2428int tls13_restore_handshake_digest_for_pha(SSL *s)
2429{
2430 if (s->pha_dgst == NULL) {
2431 SSLfatal(s, SSL_AD_INTERNAL_ERROR,
2432 SSL_F_TLS13_RESTORE_HANDSHAKE_DIGEST_FOR_PHA,
2433 ERR_R_INTERNAL_ERROR);
2434 return 0;
2435 }
555cbb32 2436 if (!EVP_MD_CTX_copy_ex(s->s3.handshake_dgst,
9d75dce3
TS
2437 s->pha_dgst)) {
2438 SSLfatal(s, SSL_AD_INTERNAL_ERROR,
2439 SSL_F_TLS13_RESTORE_HANDSHAKE_DIGEST_FOR_PHA,
2440 ERR_R_INTERNAL_ERROR);
2441 return 0;
2442 }
2443 return 1;
2444}