Coverage Report

Created: 2026-05-24 07:14

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