Coverage Report

Created: 2026-05-24 07:14

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