Coverage Report

Created: 2026-10-28 06:28

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/openssl41/ssl/statem/extensions_srvr.c
Line
Count
Source
1
/*
2
 * Copyright 2016-2026 The OpenSSL Project Authors. All Rights Reserved.
3
 *
4
 * Licensed under the Apache License 2.0 (the "License").  You may not use
5
 * this file except in compliance with the License.  You can obtain a copy
6
 * in the file LICENSE in the source distribution or at
7
 * https://www.openssl.org/source/license.html
8
 */
9
10
#include <openssl/ocsp.h>
11
#include "../ssl_local.h"
12
#include "statem_local.h"
13
#include "internal/cryptlib.h"
14
#include "internal/ssl_unwrap.h"
15
#ifndef OPENSSL_NO_ECH
16
#include <openssl/rand.h>
17
#include <openssl/trace.h>
18
#endif
19
20
0
#define COOKIE_STATE_FORMAT_VERSION 1
21
22
8.95k
#define MAX_SUPPORTED_GROUPS 128
23
2.09k
#define MAX_KEY_SHARES 16
24
342
#define MAX_PRE_SHARED_KEYS 16
25
26
/*
27
 * 2 bytes for packet length, 2 bytes for format version, 2 bytes for
28
 * protocol version, 2 bytes for group id, 2 bytes for cipher id, 1 byte for
29
 * key_share present flag, 8 bytes for timestamp, 2 bytes for the hashlen,
30
 * EVP_MAX_MD_SIZE for transcript hash, 1 byte for app cookie length, app cookie
31
 * length bytes, SHA256_DIGEST_LENGTH bytes for the HMAC of the whole thing.
32
 */
33
0
#define MAX_COOKIE_SIZE (2 + 2 + 2 + 2 + 2 + 1 + 8 + 2 + EVP_MAX_MD_SIZE + 1 \
34
0
    + SSL_COOKIE_LENGTH + SHA256_DIGEST_LENGTH)
35
36
/*
37
 * Message header + 2 bytes for protocol version + number of random bytes +
38
 * + 1 byte for legacy session id length + number of bytes in legacy session id
39
 * + 2 bytes for ciphersuite + 1 byte for legacy compression
40
 * + 2 bytes for extension block length + 6 bytes for key_share extension
41
 * + 4 bytes for cookie extension header + the number of bytes in the cookie
42
 */
43
#define MAX_HRR_SIZE (DTLS1_HM_HEADER_LENGTH + 2 + SSL3_RANDOM_SIZE + 1 \
44
    + SSL_MAX_SSL_SESSION_ID_LENGTH + 2 + 1 + 2 + 6 + 4                 \
45
    + MAX_COOKIE_SIZE)
46
47
/*
48
 * Parse the client's renegotiation binding and abort if it's not right
49
 */
50
int tls_parse_ctos_renegotiate(SSL_CONNECTION *s, PACKET *pkt,
51
    unsigned int context,
52
    X509 *x, size_t chainidx)
53
7.18k
{
54
7.18k
    unsigned int ilen;
55
7.18k
    const unsigned char *data;
56
7.18k
    int ok;
57
58
    /* Parse the length byte */
59
7.18k
    if (!PACKET_get_1(pkt, &ilen)
60
7.16k
        || !PACKET_get_bytes(pkt, &data, ilen)) {
61
43
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_RENEGOTIATION_ENCODING_ERR);
62
43
        return 0;
63
43
    }
64
65
    /* Check that the extension matches */
66
7.13k
    if (ilen != s->s3.previous_client_finished_len) {
67
16
        SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_R_RENEGOTIATION_MISMATCH);
68
16
        return 0;
69
16
    }
70
71
7.12k
    ok = memcmp(data, s->s3.previous_client_finished,
72
7.12k
        s->s3.previous_client_finished_len);
73
7.12k
#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
74
7.12k
    if (ok) {
75
0
        if ((data[0] ^ s->s3.previous_client_finished[0]) != 0xFF) {
76
0
            ok = 0;
77
0
        }
78
0
    }
79
7.12k
#endif
80
7.12k
    if (ok) {
81
0
        SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_R_RENEGOTIATION_MISMATCH);
82
0
        return 0;
83
0
    }
84
85
7.12k
    s->s3.send_connection_binding = 1;
86
87
7.12k
    return 1;
88
7.12k
}
89
90
/*-
91
 * The servername extension is treated as follows:
92
 *
93
 * - Only the hostname type is supported with a maximum length of 255.
94
 * - The servername is rejected if too long or if it contains zeros,
95
 *   in which case an fatal alert is generated.
96
 * - The servername field is maintained together with the session cache.
97
 * - When a session is resumed, the servername call back invoked in order
98
 *   to allow the application to position itself to the right context.
99
 * - The servername is acknowledged if it is new for a session or when
100
 *   it is identical to a previously used for the same session.
101
 *   Applications can control the behaviour.  They can at any time
102
 *   set a 'desirable' servername for a new SSL object. This can be the
103
 *   case for example with HTTPS when a Host: header field is received and
104
 *   a renegotiation is requested. In this case, a possible servername
105
 *   presented in the new client hello is only acknowledged if it matches
106
 *   the value of the Host: field.
107
 * - Applications must  use SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION
108
 *   if they provide for changing an explicit servername context for the
109
 *   session, i.e. when the session has been established with a servername
110
 *   extension.
111
 * - On session reconnect, the servername extension may be absent.
112
 */
113
int tls_parse_ctos_server_name(SSL_CONNECTION *s, PACKET *pkt,
114
    unsigned int context, X509 *x, size_t chainidx)
115
4.75k
{
116
4.75k
    unsigned int servname_type;
117
4.75k
    PACKET sni, hostname;
118
119
4.75k
    if (!PACKET_as_length_prefixed_2(pkt, &sni)
120
        /* ServerNameList must be at least 1 byte long. */
121
4.66k
        || PACKET_remaining(&sni) == 0) {
122
93
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
123
93
        return 0;
124
93
    }
125
126
    /*
127
     * Although the intent was for server_name to be extensible, RFC 4366
128
     * was not clear about it; and so OpenSSL among other implementations,
129
     * always and only allows a 'host_name' name types.
130
     * RFC 6066 corrected the mistake but adding new name types
131
     * is nevertheless no longer feasible, so act as if no other
132
     * SNI types can exist, to simplify parsing.
133
     *
134
     * Also note that the RFC permits only one SNI value per type,
135
     * i.e., we can only have a single hostname.
136
     */
137
4.65k
    if (!PACKET_get_1(&sni, &servname_type)
138
4.65k
        || servname_type != TLSEXT_NAMETYPE_host_name
139
4.64k
        || !PACKET_as_length_prefixed_2(&sni, &hostname)) {
140
65
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
141
65
        return 0;
142
65
    }
143
144
    /*
145
     * In (D)TLSv1.2 and below the SNI is associated with the session. In (D)TLSv1.3
146
     * we always use the SNI value from the handshake.
147
     */
148
4.59k
    if (!s->hit || SSL_CONNECTION_IS_VERSION13(s)) {
149
4.58k
        if (PACKET_remaining(&hostname) > TLSEXT_MAXLEN_host_name) {
150
2
            SSLfatal(s, SSL_AD_UNRECOGNIZED_NAME, SSL_R_BAD_EXTENSION);
151
2
            return 0;
152
2
        }
153
154
4.58k
        if (PACKET_contains_zero_byte(&hostname)) {
155
6
            SSLfatal(s, SSL_AD_UNRECOGNIZED_NAME, SSL_R_BAD_EXTENSION);
156
6
            return 0;
157
6
        }
158
159
        /*
160
         * Store the requested SNI in the SSL as temporary storage.
161
         * If we accept it, it will get stored in the SSL_SESSION as well.
162
         */
163
4.58k
        OPENSSL_free(s->ext.hostname);
164
4.58k
        s->ext.hostname = NULL;
165
4.58k
        if (!PACKET_strndup(&hostname, &s->ext.hostname)) {
166
0
            SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
167
0
            return 0;
168
0
        }
169
170
4.58k
        s->servername_done = 1;
171
4.58k
    } else {
172
        /*
173
         * In (D)TLSv1.2 and below we should check if the SNI is consistent
174
         * between the initial handshake and the resumption. In (D)TLSv1.3 SNI
175
         * is not associated with the session.
176
         */
177
4
        s->servername_done = (s->session->ext.hostname != NULL)
178
2
            && PACKET_equal(&hostname, s->session->ext.hostname,
179
2
                strlen(s->session->ext.hostname));
180
4
    }
181
182
4.58k
    return 1;
183
4.59k
}
184
185
int tls_parse_ctos_maxfragmentlen(SSL_CONNECTION *s, PACKET *pkt,
186
    unsigned int context,
187
    X509 *x, size_t chainidx)
188
1.54k
{
189
1.54k
    unsigned int value;
190
191
1.54k
    if (PACKET_remaining(pkt) != 1 || !PACKET_get_1(pkt, &value)) {
192
114
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
193
114
        return 0;
194
114
    }
195
196
    /* Received |value| should be a valid max-fragment-length code. */
197
1.43k
    if (!IS_MAX_FRAGMENT_LENGTH_EXT_VALID(value)) {
198
53
        SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER,
199
53
            SSL_R_TLS_EXT_INVALID_MAX_FRAGMENT_LENGTH);
200
53
        return 0;
201
53
    }
202
203
    /*
204
     * When doing a full handshake or a renegotiation max_fragment_len_mode will
205
     * be TLSEXT_max_fragment_length_UNSPECIFIED
206
     *
207
     * In case of a resumption max_fragment_len_mode will be one of
208
     *      TLSEXT_max_fragment_length_DISABLED, TLSEXT_max_fragment_length_512,
209
     *      TLSEXT_max_fragment_length_1024, TLSEXT_max_fragment_length_2048.
210
     *      TLSEXT_max_fragment_length_4096
211
     *
212
     * RFC 6066: The negotiated length applies for the duration of the session
213
     * including session resumptions.
214
     *
215
     * So we only set the value in case it is unspecified.
216
     */
217
1.37k
    if (s->session->ext.max_fragment_len_mode == TLSEXT_max_fragment_length_UNSPECIFIED)
218
        /*
219
         * Store it in session, so it'll become binding for us
220
         * and we'll include it in a next Server Hello.
221
         */
222
1.37k
        s->session->ext.max_fragment_len_mode = value;
223
224
1.37k
    return 1;
225
1.43k
}
226
227
#ifndef OPENSSL_NO_SRP
228
int tls_parse_ctos_srp(SSL_CONNECTION *s, PACKET *pkt, unsigned int context,
229
    X509 *x, size_t chainidx)
230
204
{
231
204
    PACKET srp_I;
232
233
204
    if (!PACKET_as_length_prefixed_1(pkt, &srp_I)
234
109
        || PACKET_contains_zero_byte(&srp_I)) {
235
109
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
236
109
        return 0;
237
109
    }
238
239
95
    if (!PACKET_strndup(&srp_I, &s->srp_ctx.login)) {
240
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
241
0
        return 0;
242
0
    }
243
244
95
    return 1;
245
95
}
246
#endif
247
248
int tls_parse_ctos_session_ticket(SSL_CONNECTION *s, PACKET *pkt,
249
    unsigned int context,
250
    X509 *x, size_t chainidx)
251
6.73k
{
252
6.73k
    if (s->ext.session_ticket_cb && !s->ext.session_ticket_cb(SSL_CONNECTION_GET_USER_SSL(s), PACKET_data(pkt), (int)PACKET_remaining(pkt), s->ext.session_ticket_cb_arg)) {
253
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
254
0
        return 0;
255
0
    }
256
257
6.73k
    return 1;
258
6.73k
}
259
260
int tls_parse_ctos_sig_algs_cert(SSL_CONNECTION *s, PACKET *pkt,
261
    ossl_unused unsigned int context,
262
    ossl_unused X509 *x,
263
    ossl_unused size_t chainidx)
264
1.19k
{
265
1.19k
    PACKET supported_sig_algs;
266
267
1.19k
    if (!PACKET_as_length_prefixed_2(pkt, &supported_sig_algs)
268
1.00k
        || PACKET_remaining(&supported_sig_algs) == 0) {
269
198
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
270
198
        return 0;
271
198
    }
272
273
    /*
274
     * We use this routine on both clients and servers, and when clients
275
     * get asked for PHA we need to always save the sigalgs regardless
276
     * of whether it was a resumption or not.
277
     */
278
992
    if ((!s->server || (s->server && !s->hit))
279
983
        && !tls1_save_sigalgs(s, &supported_sig_algs, 1)) {
280
19
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
281
19
        return 0;
282
19
    }
283
284
973
    return 1;
285
992
}
286
287
int tls_parse_ctos_sig_algs(SSL_CONNECTION *s, PACKET *pkt,
288
    unsigned int context, X509 *x, size_t chainidx)
289
10.5k
{
290
10.5k
    PACKET supported_sig_algs;
291
292
10.5k
    if (!PACKET_as_length_prefixed_2(pkt, &supported_sig_algs)
293
10.3k
        || PACKET_remaining(&supported_sig_algs) == 0) {
294
241
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
295
241
        return 0;
296
241
    }
297
298
    /*
299
     * We use this routine on both clients and servers, and when clients
300
     * get asked for PHA we need to always save the sigalgs regardless
301
     * of whether it was a resumption or not.
302
     */
303
10.3k
    if ((!s->server || (s->server && !s->hit))
304
10.1k
        && !tls1_save_sigalgs(s, &supported_sig_algs, 0)) {
305
20
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
306
20
        return 0;
307
20
    }
308
309
10.2k
    return 1;
310
10.3k
}
311
312
#ifndef OPENSSL_NO_OCSP
313
int tls_parse_ctos_status_request(SSL_CONNECTION *s, PACKET *pkt,
314
    unsigned int context,
315
    X509 *x, size_t chainidx)
316
1.58k
{
317
1.58k
    PACKET responder_id_list, exts;
318
319
    /* We ignore this in a resumption handshake */
320
1.58k
    if (s->hit)
321
12
        return 1;
322
323
    /* Not defined if we get one of these in a client Certificate */
324
1.57k
    if (x != NULL)
325
0
        return 1;
326
327
    /*
328
     * We only care about this extension if the application
329
     * registered a callback. Otherwise, there is nothing to
330
     * tell us that a response is needed.
331
     */
332
1.57k
    SSL_CTX *sctx = SSL_CONNECTION_GET_CTX(s);
333
1.57k
    if (sctx == NULL || sctx->ext.status_cb == NULL)
334
1.57k
        return 1;
335
336
0
    if (!PACKET_get_1(pkt, (unsigned int *)&s->ext.status_type)) {
337
0
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
338
0
        return 0;
339
0
    }
340
341
0
    if (s->ext.status_type != TLSEXT_STATUSTYPE_ocsp) {
342
        /*
343
         * We don't know what to do with any other type so ignore it.
344
         */
345
0
        s->ext.status_type = TLSEXT_STATUSTYPE_nothing;
346
0
        return 1;
347
0
    }
348
349
0
    if (!PACKET_get_length_prefixed_2(pkt, &responder_id_list)) {
350
0
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
351
0
        return 0;
352
0
    }
353
354
    /*
355
     * We remove any OCSP_RESPIDs from a previous handshake
356
     * to prevent unbounded memory growth - CVE-2016-6304
357
     */
358
0
    sk_OCSP_RESPID_pop_free(s->ext.ocsp.ids, OCSP_RESPID_free);
359
0
    if (PACKET_remaining(&responder_id_list) > 0) {
360
0
        s->ext.ocsp.ids = sk_OCSP_RESPID_new_null();
361
0
        if (s->ext.ocsp.ids == NULL) {
362
0
            SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_CRYPTO_LIB);
363
0
            return 0;
364
0
        }
365
0
    } else {
366
0
        s->ext.ocsp.ids = NULL;
367
0
    }
368
369
0
    while (PACKET_remaining(&responder_id_list) > 0) {
370
0
        OCSP_RESPID *id;
371
0
        PACKET responder_id;
372
0
        const unsigned char *id_data;
373
374
0
        if (!PACKET_get_length_prefixed_2(&responder_id_list, &responder_id)
375
0
            || PACKET_remaining(&responder_id) == 0) {
376
0
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
377
0
            return 0;
378
0
        }
379
380
0
        id_data = PACKET_data(&responder_id);
381
0
        id = d2i_OCSP_RESPID(NULL, &id_data,
382
0
            (int)PACKET_remaining(&responder_id));
383
0
        if (id == NULL) {
384
0
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
385
0
            return 0;
386
0
        }
387
388
0
        if (id_data != PACKET_end(&responder_id)) {
389
0
            OCSP_RESPID_free(id);
390
0
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
391
392
0
            return 0;
393
0
        }
394
395
0
        if (!sk_OCSP_RESPID_push(s->ext.ocsp.ids, id)) {
396
0
            OCSP_RESPID_free(id);
397
0
            SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
398
399
0
            return 0;
400
0
        }
401
0
    }
402
403
    /* Read in request_extensions */
404
0
    if (!PACKET_as_length_prefixed_2(pkt, &exts)) {
405
0
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
406
0
        return 0;
407
0
    }
408
409
0
    if (PACKET_remaining(&exts) > 0) {
410
0
        const unsigned char *ext_data = PACKET_data(&exts);
411
412
0
        sk_X509_EXTENSION_pop_free(s->ext.ocsp.exts,
413
0
            X509_EXTENSION_free);
414
0
        s->ext.ocsp.exts = d2i_X509_EXTENSIONS(NULL, &ext_data, (int)PACKET_remaining(&exts));
415
0
        if (s->ext.ocsp.exts == NULL || ext_data != PACKET_end(&exts)) {
416
0
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
417
0
            return 0;
418
0
        }
419
0
    }
420
421
0
    return 1;
422
0
}
423
#endif
424
425
#ifndef OPENSSL_NO_NEXTPROTONEG
426
int tls_parse_ctos_npn(SSL_CONNECTION *s, PACKET *pkt, unsigned int context,
427
    X509 *x, size_t chainidx)
428
19
{
429
    /*
430
     * We shouldn't accept this extension on a
431
     * renegotiation.
432
     */
433
19
    if (SSL_IS_FIRST_HANDSHAKE(s))
434
19
        s->s3.npn_seen = 1;
435
436
19
    return 1;
437
19
}
438
#endif
439
440
/*
441
 * Save the ALPN extension in a ClientHello.|pkt| holds the contents of the ALPN
442
 * extension, not including type and length. Returns: 1 on success, 0 on error.
443
 */
444
int tls_parse_ctos_alpn(SSL_CONNECTION *s, PACKET *pkt, unsigned int context,
445
    X509 *x, size_t chainidx)
446
800
{
447
800
    PACKET protocol_list, save_protocol_list, protocol;
448
449
800
    if (!SSL_IS_FIRST_HANDSHAKE(s))
450
0
        return 1;
451
452
800
    if (!PACKET_as_length_prefixed_2(pkt, &protocol_list)
453
689
        || PACKET_remaining(&protocol_list) < 2) {
454
122
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
455
122
        return 0;
456
122
    }
457
458
678
    save_protocol_list = protocol_list;
459
3.03k
    do {
460
        /* Protocol names can't be empty. */
461
3.03k
        if (!PACKET_get_length_prefixed_1(&protocol_list, &protocol)
462
2.95k
            || PACKET_remaining(&protocol) == 0) {
463
116
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
464
116
            return 0;
465
116
        }
466
3.03k
    } while (PACKET_remaining(&protocol_list) != 0);
467
468
562
    OPENSSL_free(s->s3.alpn_proposed);
469
562
    s->s3.alpn_proposed = NULL;
470
562
    s->s3.alpn_proposed_len = 0;
471
562
    if (!PACKET_memdup(&save_protocol_list,
472
562
            &s->s3.alpn_proposed, &s->s3.alpn_proposed_len)) {
473
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
474
0
        return 0;
475
0
    }
476
477
562
    return 1;
478
562
}
479
480
#ifndef OPENSSL_NO_SRTP
481
int tls_parse_ctos_use_srtp(SSL_CONNECTION *s, PACKET *pkt,
482
    unsigned int context, X509 *x, size_t chainidx)
483
1.27k
{
484
1.27k
    STACK_OF(SRTP_PROTECTION_PROFILE) *srvr;
485
1.27k
    unsigned int ct, mki_len, id;
486
1.27k
    int i, srtp_pref;
487
1.27k
    PACKET subpkt;
488
1.27k
    SSL *ssl = SSL_CONNECTION_GET_SSL(s);
489
490
    /* Ignore this if we have no SRTP profiles */
491
1.27k
    if (SSL_get_srtp_profiles(ssl) == NULL)
492
1.27k
        return 1;
493
494
    /* Pull off the length of the cipher suite list  and check it is even */
495
0
    if (!PACKET_get_net_2(pkt, &ct) || (ct & 1) != 0
496
0
        || !PACKET_get_sub_packet(pkt, &subpkt, ct)) {
497
0
        SSLfatal(s, SSL_AD_DECODE_ERROR,
498
0
            SSL_R_BAD_SRTP_PROTECTION_PROFILE_LIST);
499
0
        return 0;
500
0
    }
501
502
0
    srvr = SSL_get_srtp_profiles(ssl);
503
0
    s->srtp_profile = NULL;
504
    /* Search all profiles for a match initially */
505
0
    srtp_pref = sk_SRTP_PROTECTION_PROFILE_num(srvr);
506
507
0
    while (PACKET_remaining(&subpkt)) {
508
0
        if (!PACKET_get_net_2(&subpkt, &id)) {
509
0
            SSLfatal(s, SSL_AD_DECODE_ERROR,
510
0
                SSL_R_BAD_SRTP_PROTECTION_PROFILE_LIST);
511
0
            return 0;
512
0
        }
513
514
        /*
515
         * Only look for match in profiles of higher preference than
516
         * current match.
517
         * If no profiles have been have been configured then this
518
         * does nothing.
519
         */
520
0
        for (i = 0; i < srtp_pref; i++) {
521
0
            SRTP_PROTECTION_PROFILE *sprof = sk_SRTP_PROTECTION_PROFILE_value(srvr, i);
522
523
0
            if (sprof->id == id) {
524
0
                s->srtp_profile = sprof;
525
0
                srtp_pref = i;
526
0
                break;
527
0
            }
528
0
        }
529
0
    }
530
531
    /* Now extract the MKI value as a sanity check, but discard it for now */
532
0
    if (!PACKET_get_1(pkt, &mki_len)) {
533
0
        SSLfatal(s, SSL_AD_DECODE_ERROR,
534
0
            SSL_R_BAD_SRTP_PROTECTION_PROFILE_LIST);
535
0
        return 0;
536
0
    }
537
538
0
    if (!PACKET_forward(pkt, mki_len)
539
0
        || PACKET_remaining(pkt)) {
540
0
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_SRTP_MKI_VALUE);
541
0
        return 0;
542
0
    }
543
544
0
    return 1;
545
0
}
546
#endif
547
548
int tls_parse_ctos_etm(SSL_CONNECTION *s, PACKET *pkt, unsigned int context,
549
    X509 *x, size_t chainidx)
550
2.12k
{
551
2.12k
    if (!(s->options & SSL_OP_NO_ENCRYPT_THEN_MAC))
552
2.12k
        s->ext.use_etm = 1;
553
554
2.12k
    return 1;
555
2.12k
}
556
557
/*
558
 * Process a psk_kex_modes extension received in the ClientHello. |pkt| contains
559
 * the raw PACKET data for the extension. Returns 1 on success or 0 on failure.
560
 */
561
int tls_parse_ctos_psk_kex_modes(SSL_CONNECTION *s, PACKET *pkt,
562
    unsigned int context,
563
    X509 *x, size_t chainidx)
564
1.74k
{
565
1.74k
#if !(defined(OPENSSL_NO_TLS1_3) && defined(OPENSSL_NO_DTLS1_3))
566
1.74k
    PACKET psk_kex_modes;
567
1.74k
    unsigned int mode;
568
569
1.74k
    if (!PACKET_as_length_prefixed_1(pkt, &psk_kex_modes)
570
1.70k
        || PACKET_remaining(&psk_kex_modes) == 0) {
571
43
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
572
43
        return 0;
573
43
    }
574
575
13.9k
    while (PACKET_get_1(&psk_kex_modes, &mode)) {
576
12.2k
        if (mode == TLSEXT_KEX_MODE_KE_DHE)
577
2.78k
            s->ext.psk_kex_mode |= TLSEXT_KEX_MODE_FLAG_KE_DHE;
578
9.44k
        else if (mode == TLSEXT_KEX_MODE_KE
579
2.58k
            && (s->options & SSL_OP_ALLOW_NO_DHE_KEX) != 0)
580
0
            s->ext.psk_kex_mode |= TLSEXT_KEX_MODE_FLAG_KE;
581
12.2k
    }
582
583
1.69k
    if (((s->ext.psk_kex_mode & TLSEXT_KEX_MODE_FLAG_KE) != 0)
584
0
        && (s->options & SSL_OP_PREFER_NO_DHE_KEX) != 0) {
585
586
        /*
587
         * If NO_DHE is supported and preferred, then we only remember this
588
         * mode. DHE PSK will not be used for sure, because in any case where
589
         * it would be supported (i.e. if a key share is present), NO_DHE would
590
         * be supported as well. As the latter is preferred it would be
591
         * chosen. By removing DHE PSK here, we don't have to deal with the
592
         * SSL_OP_PREFER_NO_DHE_KEX option in any other place.
593
         */
594
0
        s->ext.psk_kex_mode = TLSEXT_KEX_MODE_FLAG_KE;
595
0
    }
596
597
1.69k
#endif
598
599
1.69k
    return 1;
600
1.74k
}
601
602
/*
603
 * Use function tls_parse_ctos_key_share with helper functions extract_keyshares,
604
 * check_overlap and tls_accept_ksgroup to parse the key_share extension(s)
605
 * received in the ClientHello and to select the group used of the key exchange
606
 */
607
608
#if !(defined(OPENSSL_NO_TLS1_3) && defined(OPENSSL_NO_DTLS1_3))
609
/*
610
 * Accept a key share group by setting the related variables in s->s3 and
611
 * by generating a pubkey for this group
612
 */
613
static int tls_accept_ksgroup(SSL_CONNECTION *s, uint16_t ksgroup, PACKET *encoded_pubkey)
614
2.50k
{
615
    /* Accept the key share group */
616
2.50k
    s->s3.group_id = ksgroup;
617
2.50k
    s->s3.group_id_candidate = ksgroup;
618
    /* Cache the selected group ID in the SSL_SESSION */
619
2.50k
    s->session->kex_group = ksgroup;
620
2.50k
    if ((s->s3.peer_tmp = ssl_generate_param_group(s, ksgroup)) == NULL) {
621
0
        SSLfatal(s,
622
0
            SSL_AD_INTERNAL_ERROR,
623
0
            SSL_R_UNABLE_TO_FIND_ECDH_PARAMETERS);
624
0
        return 0;
625
0
    }
626
2.50k
    if (tls13_set_encoded_pub_key(s->s3.peer_tmp,
627
2.50k
            PACKET_data(encoded_pubkey),
628
2.50k
            PACKET_remaining(encoded_pubkey))
629
2.50k
        <= 0) {
630
53
        SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_BAD_KEY_SHARE);
631
53
        return 0;
632
53
    }
633
2.45k
    return 1;
634
2.50k
}
635
636
#define GROUPLIST_INCREMENT 32 /* Memory allocation chunk size (nominally 64 Bytes chunks) */
637
638
typedef enum KS_EXTRACTION_RESULT {
639
    EXTRACTION_FAILURE,
640
    EXTRACTION_SUCCESS,
641
    EXTRACTION_SUCCESS_HRR
642
} KS_EXTRACTION_RESULT;
643
644
static KS_EXTRACTION_RESULT extract_keyshares(SSL_CONNECTION *s, PACKET *key_share_list,
645
    const uint16_t *clntgroups, size_t clnt_num_groups,
646
    const uint16_t *srvrgroups, size_t srvr_num_groups,
647
    uint16_t **keyshares_arr, PACKET **encoded_pubkey_arr,
648
    size_t *keyshares_cnt)
649
2.02k
{
650
2.02k
    PACKET encoded_pubkey;
651
2.02k
    size_t key_share_pos = 0;
652
2.02k
    size_t previous_key_share_pos = 0;
653
2.02k
    unsigned int group_id = 0;
654
2.02k
    unsigned int i;
655
656
    /*
657
     * Theoretically there is no limit on the number of keyshares as long as
658
     * they are less than 2^16 bytes in total. It costs us something for each
659
     * keyshare to confirm the groups are valid, so we restrict this to a
660
     * sensible number (MAX_KEY_SHARES == 16). Any keyshares over this limit are
661
     * simply ignored.
662
     */
663
664
    /* Prepare memory to hold the extracted key share groups and related pubkeys */
665
2.02k
    *keyshares_arr = OPENSSL_malloc_array(MAX_KEY_SHARES,
666
2.02k
        sizeof(**keyshares_arr));
667
2.02k
    if (*keyshares_arr == NULL) {
668
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
669
0
        goto failure;
670
0
    }
671
2.02k
    *encoded_pubkey_arr = OPENSSL_malloc_array(MAX_KEY_SHARES,
672
2.02k
        sizeof(**encoded_pubkey_arr));
673
2.02k
    if (*encoded_pubkey_arr == NULL) {
674
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
675
0
        goto failure;
676
0
    }
677
678
    /*
679
     * We limit the number of key shares we are willing to process to
680
     * MAX_KEY_SHARES regardless of whether we include them in keyshares_arr or
681
     * not.
682
     */
683
3.95k
    for (i = 0; PACKET_remaining(key_share_list) > 0 && i < MAX_KEY_SHARES; i++) {
684
        /* Get the group_id for the current share and its encoded_pubkey */
685
2.09k
        if (!PACKET_get_net_2(key_share_list, &group_id)
686
2.08k
            || !PACKET_get_length_prefixed_2(key_share_list, &encoded_pubkey)
687
2.04k
            || PACKET_remaining(&encoded_pubkey) == 0) {
688
52
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_LENGTH_MISMATCH);
689
52
            goto failure;
690
52
        }
691
692
        /*
693
         * If we sent an HRR then the key_share sent back MUST be for the group
694
         * we requested, and must be the only key_share sent.
695
         */
696
2.04k
        if (s->s3.group_id != 0
697
83
            && (group_id != s->s3.group_id
698
55
                || PACKET_remaining(key_share_list) != 0)) {
699
31
            SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_BAD_KEY_SHARE);
700
31
            goto failure;
701
31
        }
702
703
        /*
704
         * Check if this share is in supported_groups sent from client
705
         * RFC 9846 also mandates that clients send keyshares in the same
706
         * order as listed in the supported groups extension, but its not
707
         * required that the server check that, and some clients violate this
708
         * so instead of failing the connection when that occurs, log a trace
709
         * message indicating the client discrepancy.
710
         */
711
2.00k
        if (!check_in_list(s, group_id, clntgroups, clnt_num_groups, 0, &key_share_pos)) {
712
32
            SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_BAD_KEY_SHARE);
713
32
            goto failure;
714
32
        }
715
716
1.97k
        if (key_share_pos < previous_key_share_pos)
717
1.97k
            OSSL_TRACE1(TLS, "key share group id %d is out of RFC 9846 order\n", group_id);
718
719
1.97k
        previous_key_share_pos = key_share_pos;
720
721
1.97k
        if (s->s3.group_id != 0) {
722
            /*
723
             * We have sent a HRR, and the key share we got back is
724
             * the one we expected and is the only key share and is
725
             * in the list of supported_groups (checked
726
             * above already), hence we accept this key share group
727
             */
728
52
            if (!tls_accept_ksgroup(s, s->s3.group_id, &encoded_pubkey))
729
3
                goto failure; /* SSLfatal already called */
730
            /* We have selected a key share group via HRR, hence we're done here */
731
49
            return EXTRACTION_SUCCESS_HRR;
732
52
        }
733
734
        /*
735
         * We tolerate but ignore a group id that we don't think is
736
         * suitable for TLSv1.3 or which is not supported by the server
737
         */
738
1.92k
        if (!check_in_list(s, group_id, srvrgroups, srvr_num_groups, 1, NULL)
739
1.58k
            || !tls_group_allowed(s, group_id, SSL_SECOP_CURVE_SUPPORTED)
740
1.58k
            || !tls_valid_group(s, group_id, TLS1_3_VERSION, TLS1_3_VERSION,
741
1.58k
                NULL, NULL)) {
742
            /* Share not suitable or not supported, check next share */
743
343
            continue;
744
343
        }
745
746
        /* Memorize this key share group ID and its encoded point */
747
1.58k
        (*keyshares_arr)[*keyshares_cnt] = group_id;
748
1.58k
        (*encoded_pubkey_arr)[(*keyshares_cnt)++] = encoded_pubkey;
749
1.58k
    }
750
751
1.86k
    return EXTRACTION_SUCCESS;
752
753
118
failure:
754
    /* Fatal error -> free any allocated memory and return 0 */
755
118
    OPENSSL_free(*keyshares_arr);
756
118
    OPENSSL_free(*encoded_pubkey_arr);
757
118
    return EXTRACTION_FAILURE;
758
2.02k
}
759
#endif
760
761
/*
762
 * For each group in the priority list of groups, check if that group is
763
 * also present in the secondary list; if so, select the first overlap and
764
 * assign to selected_group and also set the related index in the candidate group list,
765
 * or set selected_group to 0 if no overlap
766
 */
767
#if !defined(OPENSSL_NO_TLS1_3) || !defined(OPENSSL_NO_DTLS1_3)
768
static void check_overlap(SSL_CONNECTION *s,
769
    const uint16_t *prio_groups, size_t prio_num_groups,
770
    const uint16_t *candidate_groups, size_t candidate_num_groups,
771
    int *prio_group_idx, int *candidate_group_idx,
772
    uint16_t *selected_group)
773
4.89k
{
774
4.89k
    uint16_t current_group;
775
4.89k
    size_t group_idx = prio_num_groups;
776
4.89k
    size_t new_group_idx = 0;
777
4.89k
    const int version1_3 = SSL_CONNECTION_IS_DTLS(s) ? DTLS1_3_VERSION : TLS1_3_VERSION;
778
779
4.89k
    *candidate_group_idx = 0;
780
4.89k
    *prio_group_idx = 0;
781
4.89k
    *selected_group = 0;
782
783
17.2k
    for (current_group = 0; current_group < candidate_num_groups; current_group++) {
784
12.3k
        if (!check_in_list(s, candidate_groups[current_group], prio_groups,
785
12.3k
                prio_num_groups, 1, &new_group_idx)
786
1.29k
            || !tls_group_allowed(s, candidate_groups[current_group],
787
1.29k
                SSL_SECOP_CURVE_SUPPORTED)
788
1.29k
            || !tls_valid_group(s, candidate_groups[current_group], version1_3,
789
1.29k
                version1_3, NULL, NULL))
790
            /* No overlap or group not suitable, check next group */
791
11.0k
            continue;
792
793
        /*
794
         * is the found new_group_idx earlier in the priority list than
795
         * initial or last group_idx?
796
         */
797
1.29k
        if (new_group_idx < group_idx) {
798
1.24k
            group_idx = new_group_idx;
799
1.24k
            *candidate_group_idx = current_group;
800
1.24k
            *prio_group_idx = (int)group_idx;
801
1.24k
            *selected_group = prio_groups[group_idx];
802
1.24k
        }
803
1.29k
    }
804
4.89k
}
805
#endif
806
807
int tls_parse_ctos_key_share(SSL_CONNECTION *s, PACKET *pkt,
808
    unsigned int context, X509 *x, size_t chainidx)
809
1.38k
{
810
1.38k
#if !(defined(OPENSSL_NO_TLS1_3) && defined(OPENSSL_NO_DTLS1_3))
811
1.38k
    PACKET key_share_list;
812
1.38k
    const uint16_t *clntgroups, *srvrgroups;
813
1.38k
    const size_t *srvrtuples;
814
1.38k
    uint16_t *first_group_in_tuple;
815
1.38k
    size_t clnt_num_groups, srvr_num_groups, srvr_num_tuples;
816
1.38k
    PACKET *encoded_pubkey_arr = NULL;
817
1.38k
    uint16_t *keyshares_arr = NULL;
818
1.38k
    size_t keyshares_cnt = 0;
819
    /* We conservatively assume that we did not find a suitable group */
820
1.38k
    uint16_t group_id_candidate = 0;
821
1.38k
    KS_EXTRACTION_RESULT ks_extraction_result;
822
1.38k
    size_t current_tuple;
823
1.38k
    int ret = 0;
824
825
1.38k
    s->s3.group_id_candidate = 0;
826
1.38k
    if (s->hit && (s->ext.psk_kex_mode & TLSEXT_KEX_MODE_FLAG_KE_DHE) == 0)
827
0
        return 1;
828
829
    /*
830
     * If prior Client Hello in HRR set the peer_temp clear it out to process
831
     * the key share in the second client hello
832
     */
833
1.38k
    if (s->s3.peer_tmp != NULL) {
834
0
        EVP_PKEY_free(s->s3.peer_tmp);
835
0
        s->s3.peer_tmp = NULL;
836
0
        s->s3.group_id = 0;
837
0
    }
838
839
1.38k
    if (!PACKET_as_length_prefixed_2(pkt, &key_share_list)) {
840
29
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_LENGTH_MISMATCH);
841
29
        return 0;
842
29
    }
843
844
    /* Get list of server supported groups and the group tuples */
845
1.35k
    tls1_get_supported_groups(s, &srvrgroups, &srvr_num_groups);
846
1.35k
    tls1_get_group_tuples(s, &srvrtuples, &srvr_num_tuples);
847
    /* Get the clients list of supported groups. */
848
1.35k
    tls1_get_peer_groups(s, &clntgroups, &clnt_num_groups);
849
850
1.35k
    if (clnt_num_groups == 0) {
851
        /*
852
         * This can only happen if the supported_groups extension was not sent,
853
         * because we verify that the length is non-zero when we process that
854
         * extension.
855
         */
856
2
        SSLfatal(s, SSL_AD_MISSING_EXTENSION,
857
2
            SSL_R_MISSING_SUPPORTED_GROUPS_EXTENSION);
858
2
        return 0;
859
2
    }
860
861
1.35k
    if (s->s3.group_id != 0 && PACKET_remaining(&key_share_list) == 0) {
862
        /*
863
         * If we set a group_id already, then we must have sent an HRR
864
         * requesting a new key_share. If we haven't got one then that is an
865
         * error
866
         */
867
2
        SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_BAD_KEY_SHARE);
868
2
        return 0;
869
2
    }
870
871
    /* We parse the key share extension and memorize the entries (after some checks) */
872
1.35k
    ks_extraction_result = extract_keyshares(s,
873
1.35k
        &key_share_list,
874
1.35k
        clntgroups, clnt_num_groups,
875
1.35k
        srvrgroups, srvr_num_groups,
876
1.35k
        &keyshares_arr, &encoded_pubkey_arr,
877
1.35k
        &keyshares_cnt);
878
879
1.35k
    if (ks_extraction_result == EXTRACTION_FAILURE) /* Fatal error during tests */
880
73
        return 0; /* Memory already freed and SSLfatal already called */
881
1.27k
    if (ks_extraction_result == EXTRACTION_SUCCESS_HRR) /* Successful HRR */
882
27
        goto end;
883
884
    /*
885
     * We now have the following lists available to make a decision for
886
     * which group the server should use for key exchange :
887
     * From client: clntgroups[clnt_num_groups],
888
     *              keyshares_arr[keyshares_cnt], encoded_pubkey_arr[keyshares_cnt]
889
     * From server: srvrgroups[srvr_num_groups], srvrtuples[srvr_num_tuples]
890
     *
891
     * Group selection algorithm:
892
     *    For all tuples do:
893
     *      key share group(s) overlapping with current tuple?
894
     *         --> Yes: accept group_id for SH
895
     *        --> No: is any of the client supported_groups overlapping with current tuple?
896
     *            --> Yes: memorize group_id for HRR, break
897
     *             --> No: continue to check next tuple
898
     *
899
     * Remark: Selection priority different for client- or server-preference
900
     */
901
1.25k
    first_group_in_tuple = (uint16_t *)srvrgroups;
902
2.97k
    for (current_tuple = 0; current_tuple < srvr_num_tuples; current_tuple++) {
903
2.97k
        size_t number_of_groups_in_tuple = srvrtuples[current_tuple];
904
2.97k
        int prio_group_idx = 0, candidate_group_idx = 0;
905
906
        /* Server or client preference ? */
907
2.97k
        if (s->options & SSL_OP_SERVER_PREFERENCE) {
908
            /* Server preference */
909
            /* Is there overlap with a key share group?  */
910
0
            check_overlap(s,
911
0
                first_group_in_tuple, number_of_groups_in_tuple,
912
0
                keyshares_arr, keyshares_cnt,
913
0
                &prio_group_idx, &candidate_group_idx,
914
0
                &group_id_candidate);
915
0
            if (group_id_candidate > 0) { /* Overlap found -> accept the key share group */
916
0
                if (!tls_accept_ksgroup(s, group_id_candidate,
917
0
                        &encoded_pubkey_arr[candidate_group_idx]))
918
0
                    goto err; /* SSLfatal already called */
919
                /* We have all info for a SH, hence we're done here */
920
0
                goto end;
921
0
            } else {
922
                /*
923
                 * There's no overlap with a key share, but is there at least a client
924
                 * supported_group overlapping with the current tuple?
925
                 */
926
0
                check_overlap(s,
927
0
                    first_group_in_tuple, number_of_groups_in_tuple,
928
0
                    clntgroups, clnt_num_groups,
929
0
                    &prio_group_idx, &candidate_group_idx,
930
0
                    &group_id_candidate);
931
0
                if (group_id_candidate > 0) {
932
                    /*
933
                     * We did not have a key share overlap, but at least the supported
934
                     * groups overlap hence we can stop searching
935
                     * (and report group_id_candidate 'upward' for HRR)
936
                     */
937
0
                    s->s3.group_id_candidate = group_id_candidate;
938
0
                    goto end;
939
0
                } else {
940
                    /*
941
                     * Neither key share nor supported_groups overlap current
942
                     * tuple, hence we try the next tuple
943
                     */
944
0
                    first_group_in_tuple = &first_group_in_tuple[number_of_groups_in_tuple];
945
0
                    continue;
946
0
                }
947
0
            }
948
949
2.97k
        } else { /* We have client preference */
950
2.97k
            check_overlap(s,
951
2.97k
                keyshares_arr, keyshares_cnt,
952
2.97k
                first_group_in_tuple, number_of_groups_in_tuple,
953
2.97k
                &prio_group_idx, &candidate_group_idx,
954
2.97k
                &group_id_candidate);
955
2.97k
            if (group_id_candidate > 0) {
956
1.04k
                if (!tls_accept_ksgroup(s, group_id_candidate, &encoded_pubkey_arr[prio_group_idx]))
957
24
                    goto err;
958
1.01k
                goto end;
959
1.92k
            } else {
960
1.92k
                check_overlap(s,
961
1.92k
                    clntgroups, clnt_num_groups,
962
1.92k
                    first_group_in_tuple, number_of_groups_in_tuple,
963
1.92k
                    &prio_group_idx, &candidate_group_idx,
964
1.92k
                    &group_id_candidate);
965
1.92k
                if (group_id_candidate > 0) {
966
201
                    s->s3.group_id_candidate = group_id_candidate;
967
201
                    goto end;
968
1.72k
                } else {
969
1.72k
                    first_group_in_tuple = &first_group_in_tuple[number_of_groups_in_tuple];
970
1.72k
                    continue;
971
1.72k
                }
972
1.92k
            }
973
2.97k
        }
974
2.97k
    }
975
976
1.25k
end:
977
1.25k
    ret = 1;
978
979
1.27k
err:
980
1.27k
    OPENSSL_free(keyshares_arr);
981
1.27k
    OPENSSL_free(encoded_pubkey_arr);
982
1.27k
    return ret;
983
984
0
#endif
985
986
0
    return 1;
987
1.25k
}
988
989
int tls_parse_ctos_cookie(SSL_CONNECTION *s, PACKET *pkt, unsigned int context,
990
    X509 *x, size_t chainidx)
991
19
{
992
19
#if !(defined(OPENSSL_NO_TLS1_3) && defined(OPENSSL_NO_DTLS1_3))
993
19
    unsigned int format, version, key_share, group_id;
994
19
    EVP_MD_CTX *hctx;
995
19
    EVP_PKEY *pkey;
996
19
    PACKET cookie, raw, chhash, appcookie;
997
19
    WPACKET hrrpkt;
998
19
    const unsigned char *data, *mdin, *ciphdata;
999
19
    unsigned char hmac[SHA256_DIGEST_LENGTH];
1000
19
    unsigned char hrr[MAX_HRR_SIZE];
1001
19
    size_t rawlen, hmaclen, hrrlen, ciphlen;
1002
19
    uint64_t tm, now;
1003
19
    SSL *ssl = SSL_CONNECTION_GET_SSL(s);
1004
19
    SSL_CTX *sctx = SSL_CONNECTION_GET_CTX(s);
1005
19
    const int version1_2 = SSL_CONNECTION_IS_DTLS(s) ? DTLS1_2_VERSION : TLS1_2_VERSION;
1006
19
    const int version1_3 = SSL_CONNECTION_IS_DTLS(s) ? DTLS1_3_VERSION : TLS1_3_VERSION;
1007
19
    size_t msgbody_offs = SSL_CONNECTION_IS_DTLS(s) ? DTLS1_HM_HEADER_LENGTH
1008
0
            - SSL3_HM_HEADER_LENGTH
1009
19
                                                    : 0;
1010
19
    int verify_ret = 0;
1011
1012
19
#if !defined(OPENSSL_NO_DTLS)
1013
19
    DTLS_LISTENER *dl = (s->d1 != NULL && s->d1->listener != NULL)
1014
19
        ? (DTLS_LISTENER *)s->d1->listener
1015
19
        : NULL;
1016
19
    int have_verify_cb = (sctx->verify_stateless_cookie_cb != NULL)
1017
19
        || (dl != NULL && dl->require_hrr_cookie)
1018
19
        || (SSL_CONNECTION_IS_DTLS(s) && sctx->app_verify_cookie_cb != NULL);
1019
#else
1020
    int have_verify_cb = (sctx->verify_stateless_cookie_cb != NULL);
1021
#endif
1022
1023
    /* Ignore any cookie if we're not set up to verify it */
1024
19
    if (!have_verify_cb || !tls_hrr_cookie_required(s))
1025
19
        return 1;
1026
1027
0
    if (!PACKET_as_length_prefixed_2(pkt, &cookie)) {
1028
0
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_LENGTH_MISMATCH);
1029
0
        return 0;
1030
0
    }
1031
1032
0
    raw = cookie;
1033
0
    data = PACKET_data(&raw);
1034
0
    rawlen = PACKET_remaining(&raw);
1035
0
    if (rawlen < SHA256_DIGEST_LENGTH
1036
0
        || !PACKET_forward(&raw, rawlen - SHA256_DIGEST_LENGTH)) {
1037
0
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_LENGTH_MISMATCH);
1038
0
        return 0;
1039
0
    }
1040
0
    mdin = PACKET_data(&raw);
1041
1042
    /* Verify the HMAC of the cookie */
1043
0
    hctx = EVP_MD_CTX_create();
1044
0
    pkey = EVP_PKEY_new_raw_private_key_ex(sctx->libctx, "HMAC",
1045
0
        sctx->propq,
1046
0
        s->session_ctx->ext.cookie_hmac_key,
1047
0
        sizeof(s->session_ctx->ext.cookie_hmac_key));
1048
0
    if (hctx == NULL || pkey == NULL) {
1049
0
        EVP_MD_CTX_free(hctx);
1050
0
        EVP_PKEY_free(pkey);
1051
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_EVP_LIB);
1052
0
        return 0;
1053
0
    }
1054
1055
0
    hmaclen = SHA256_DIGEST_LENGTH;
1056
0
    if (EVP_DigestSignInit_ex(hctx, NULL, "SHA2-256", sctx->libctx,
1057
0
            sctx->propq, pkey, NULL)
1058
0
            <= 0
1059
0
        || EVP_DigestSign(hctx, hmac, &hmaclen, data,
1060
0
               rawlen - SHA256_DIGEST_LENGTH)
1061
0
            <= 0
1062
0
        || hmaclen != SHA256_DIGEST_LENGTH) {
1063
0
        EVP_MD_CTX_free(hctx);
1064
0
        EVP_PKEY_free(pkey);
1065
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1066
0
        return 0;
1067
0
    }
1068
1069
0
    EVP_MD_CTX_free(hctx);
1070
0
    EVP_PKEY_free(pkey);
1071
1072
0
    if (CRYPTO_memcmp(hmac, mdin, SHA256_DIGEST_LENGTH) != 0) {
1073
0
        SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_COOKIE_MISMATCH);
1074
0
        return 0;
1075
0
    }
1076
1077
0
    if (!PACKET_get_net_2(&cookie, &format)) {
1078
0
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_LENGTH_MISMATCH);
1079
0
        return 0;
1080
0
    }
1081
    /* Check the cookie format is something we recognise. Ignore it if not */
1082
0
    if (format != COOKIE_STATE_FORMAT_VERSION)
1083
0
        return 1;
1084
1085
    /*
1086
     * The rest of these checks really shouldn't fail since we have verified the
1087
     * HMAC above.
1088
     */
1089
1090
    /* Check the version number is sane */
1091
0
    if (!PACKET_get_net_2(&cookie, &version)) {
1092
0
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_LENGTH_MISMATCH);
1093
0
        return 0;
1094
0
    }
1095
0
    if ((int)version != version1_3) {
1096
0
        SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER,
1097
0
            SSL_R_BAD_PROTOCOL_VERSION_NUMBER);
1098
0
        return 0;
1099
0
    }
1100
1101
0
    if (!PACKET_get_net_2(&cookie, &group_id)) {
1102
0
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_LENGTH_MISMATCH);
1103
0
        return 0;
1104
0
    }
1105
1106
0
    ciphdata = PACKET_data(&cookie);
1107
0
    if (!PACKET_forward(&cookie, 2)) {
1108
0
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_LENGTH_MISMATCH);
1109
0
        return 0;
1110
0
    }
1111
0
    if (group_id != s->s3.group_id
1112
0
        || s->s3.tmp.new_cipher
1113
0
            != ssl_get_cipher_by_char(s, ciphdata, 0)) {
1114
        /*
1115
         * We chose a different cipher or group id this time around to what is
1116
         * in the cookie. Something must have changed.
1117
         */
1118
0
        SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_BAD_CIPHER);
1119
0
        return 0;
1120
0
    }
1121
1122
0
    if (!PACKET_get_1(&cookie, &key_share)
1123
0
        || !PACKET_get_net_8(&cookie, &tm)
1124
0
        || !PACKET_get_length_prefixed_2(&cookie, &chhash)
1125
0
        || !PACKET_get_length_prefixed_1(&cookie, &appcookie)
1126
0
        || PACKET_remaining(&cookie) != SHA256_DIGEST_LENGTH) {
1127
0
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_LENGTH_MISMATCH);
1128
0
        return 0;
1129
0
    }
1130
1131
    /* We tolerate a cookie age of up to 10 minutes (= 60 * 10 seconds) */
1132
0
    now = time(NULL);
1133
0
    if (tm > now || (now - tm) > 600) {
1134
        /* Cookie is stale. Ignore it */
1135
0
        return 1;
1136
0
    }
1137
1138
    /* Verify the app cookie */
1139
0
#if !defined(OPENSSL_NO_DTLS)
1140
0
    if (dl != NULL && dl->require_hrr_cookie && sctx->verify_stateless_cookie_cb == NULL) {
1141
0
        verify_ret = ossl_dtls_listener_verify_stateless_cookie_cb(
1142
0
            SSL_CONNECTION_GET_USER_SSL(s),
1143
0
            PACKET_data(&appcookie),
1144
0
            PACKET_remaining(&appcookie));
1145
0
    } else if (sctx->verify_stateless_cookie_cb == NULL
1146
0
        && SSL_CONNECTION_IS_DTLS(s) && sctx->app_verify_cookie_cb != NULL) {
1147
        /* Fall back to the HelloVerifyRequest cookie callbacks */
1148
0
        verify_ret = sctx->app_verify_cookie_cb(SSL_CONNECTION_GET_USER_SSL(s),
1149
0
            PACKET_data(&appcookie),
1150
0
            (unsigned int)PACKET_remaining(&appcookie));
1151
0
    } else
1152
0
#endif
1153
0
        if (sctx->verify_stateless_cookie_cb != NULL) {
1154
0
        verify_ret = sctx->verify_stateless_cookie_cb(SSL_CONNECTION_GET_USER_SSL(s),
1155
0
            PACKET_data(&appcookie),
1156
0
            PACKET_remaining(&appcookie));
1157
0
    }
1158
1159
0
    if (verify_ret == 0) {
1160
0
        SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_COOKIE_MISMATCH);
1161
0
        return 0;
1162
0
    }
1163
1164
    /*
1165
     * Reconstruct the HRR that we would have sent in response to the original
1166
     * ClientHello so we can add it to the transcript hash.
1167
     * Note: This won't work with custom HRR extensions
1168
     */
1169
0
    if (!WPACKET_init_static_len(&hrrpkt, hrr, sizeof(hrr), 0)) {
1170
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1171
0
        return 0;
1172
0
    }
1173
0
    if (!WPACKET_put_bytes_u8(&hrrpkt, SSL3_MT_SERVER_HELLO)
1174
0
        || !WPACKET_start_sub_packet_u24_at_offset(&hrrpkt, msgbody_offs)
1175
        /*
1176
         * We are reconstructing the HRR to be able to calculate the
1177
         * transcript hash.
1178
         * Since HRR is only allowed for (D)TLSv1.3 and transcript hash does
1179
         * not include the values of message_seq, fragment_offset and
1180
         * fragment_length, setting these values is not required.
1181
         */
1182
0
        || !WPACKET_put_bytes_u16(&hrrpkt, version1_2)
1183
0
        || !WPACKET_memcpy(&hrrpkt, hrrrandom, SSL3_RANDOM_SIZE)
1184
0
        || !WPACKET_sub_memcpy_u8(&hrrpkt, s->tmp_session_id,
1185
0
            s->tmp_session_id_len)
1186
0
        || !ssl->method->put_cipher_by_char(s->s3.tmp.new_cipher, &hrrpkt,
1187
0
            &ciphlen)
1188
0
        || !WPACKET_put_bytes_u8(&hrrpkt, 0)
1189
0
        || !WPACKET_start_sub_packet_u16(&hrrpkt)) {
1190
0
        WPACKET_cleanup(&hrrpkt);
1191
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1192
0
        return 0;
1193
0
    }
1194
0
    if (!WPACKET_put_bytes_u16(&hrrpkt, TLSEXT_TYPE_supported_versions)
1195
0
        || !WPACKET_start_sub_packet_u16(&hrrpkt)
1196
0
        || !WPACKET_put_bytes_u16(&hrrpkt, s->version)
1197
0
        || !WPACKET_close(&hrrpkt)) {
1198
0
        WPACKET_cleanup(&hrrpkt);
1199
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1200
0
        return 0;
1201
0
    }
1202
0
    if (key_share) {
1203
0
        if (!WPACKET_put_bytes_u16(&hrrpkt, TLSEXT_TYPE_key_share)
1204
0
            || !WPACKET_start_sub_packet_u16(&hrrpkt)
1205
0
            || !WPACKET_put_bytes_u16(&hrrpkt, s->s3.group_id)
1206
0
            || !WPACKET_close(&hrrpkt)) {
1207
0
            WPACKET_cleanup(&hrrpkt);
1208
0
            SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1209
0
            return 0;
1210
0
        }
1211
0
    }
1212
0
    if (!WPACKET_put_bytes_u16(&hrrpkt, TLSEXT_TYPE_cookie)
1213
0
        || !WPACKET_start_sub_packet_u16(&hrrpkt)
1214
0
        || !WPACKET_sub_memcpy_u16(&hrrpkt, data, rawlen)
1215
0
        || !WPACKET_close(&hrrpkt) /* cookie extension */
1216
0
        || !WPACKET_close(&hrrpkt) /* extension block */
1217
0
        || !WPACKET_close(&hrrpkt) /* message */
1218
0
        || !WPACKET_get_total_written(&hrrpkt, &hrrlen)
1219
0
        || !WPACKET_finish(&hrrpkt)) {
1220
0
        WPACKET_cleanup(&hrrpkt);
1221
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1222
0
        return 0;
1223
0
    }
1224
1225
    /* Reconstruct the transcript hash */
1226
0
    if (!create_synthetic_message_hash(s, PACKET_data(&chhash),
1227
0
            PACKET_remaining(&chhash), hrr,
1228
0
            hrrlen)) {
1229
        /* SSLfatal() already called */
1230
0
        return 0;
1231
0
    }
1232
1233
    /* Act as if this ClientHello came after a HelloRetryRequest */
1234
0
    s->hello_retry_request = SSL_HRR_PENDING;
1235
1236
0
    s->ext.cookieok = 1;
1237
0
#endif
1238
1239
0
    return 1;
1240
0
}
1241
1242
int tls_parse_ctos_supported_groups(SSL_CONNECTION *s, PACKET *pkt,
1243
    unsigned int context,
1244
    X509 *x, size_t chainidx)
1245
9.06k
{
1246
9.06k
    PACKET supported_groups_list;
1247
1248
    /* Each group is 2 bytes and we must have at least 1. */
1249
9.06k
    if (!PACKET_as_length_prefixed_2(pkt, &supported_groups_list)
1250
8.98k
        || PACKET_remaining(&supported_groups_list) == 0
1251
8.98k
        || (PACKET_remaining(&supported_groups_list) % 2) != 0) {
1252
89
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
1253
89
        return 0;
1254
89
    }
1255
1256
8.97k
    if (!s->hit || SSL_CONNECTION_IS_VERSION13(s)) {
1257
8.95k
        OPENSSL_free(s->ext.peer_supportedgroups);
1258
8.95k
        s->ext.peer_supportedgroups = NULL;
1259
8.95k
        s->ext.peer_supportedgroups_len = 0;
1260
        /*
1261
         * We only pay attention to the first 128 supported groups and ignore
1262
         * any beyond that limit. Theoretically this could cause problems if
1263
         * the client also uses one of these groups (say in a key share extension)
1264
         * - but why would any valid client be sending such a huge supported
1265
         * groups list?
1266
         */
1267
8.95k
        if (!tls1_save_u16(&supported_groups_list,
1268
8.95k
                &s->ext.peer_supportedgroups,
1269
8.95k
                &s->ext.peer_supportedgroups_len, MAX_SUPPORTED_GROUPS)) {
1270
0
            SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1271
0
            return 0;
1272
0
        }
1273
8.95k
    }
1274
1275
8.97k
    return 1;
1276
8.97k
}
1277
1278
int tls_parse_ctos_ems(SSL_CONNECTION *s, PACKET *pkt, unsigned int context,
1279
    X509 *x, size_t chainidx)
1280
6.21k
{
1281
    /* The extension must always be empty */
1282
6.21k
    if (PACKET_remaining(pkt) != 0) {
1283
14
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
1284
14
        return 0;
1285
14
    }
1286
1287
6.20k
    if (s->options & SSL_OP_NO_EXTENDED_MASTER_SECRET)
1288
0
        return 1;
1289
1290
6.20k
    s->s3.flags |= TLS1_FLAGS_RECEIVED_EXTMS;
1291
1292
6.20k
    return 1;
1293
6.20k
}
1294
1295
int tls_parse_ctos_early_data(SSL_CONNECTION *s, PACKET *pkt, unsigned int context,
1296
    X509 *x, size_t chainidx)
1297
2.74k
{
1298
2.74k
    if (PACKET_remaining(pkt) != 0) {
1299
8
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
1300
8
        return 0;
1301
8
    }
1302
1303
2.73k
    if (s->hello_retry_request != SSL_HRR_NONE) {
1304
7
        SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_BAD_EXTENSION);
1305
7
        return 0;
1306
7
    }
1307
1308
2.72k
    return 1;
1309
2.73k
}
1310
1311
static SSL_TICKET_STATUS tls_get_stateful_ticket(SSL_CONNECTION *s, PACKET *tick,
1312
    SSL_SESSION **sess)
1313
0
{
1314
0
    SSL_SESSION *tmpsess = NULL;
1315
1316
0
    s->ext.ticket_expected = 1;
1317
1318
0
    switch (PACKET_remaining(tick)) {
1319
0
    case 0:
1320
0
        return SSL_TICKET_EMPTY;
1321
1322
0
    case SSL_MAX_SSL_SESSION_ID_LENGTH:
1323
0
        break;
1324
1325
0
    default:
1326
0
        return SSL_TICKET_NO_DECRYPT;
1327
0
    }
1328
1329
0
    tmpsess = lookup_sess_in_cache(s, PACKET_data(tick),
1330
0
        SSL_MAX_SSL_SESSION_ID_LENGTH);
1331
1332
0
    if (tmpsess == NULL)
1333
0
        return SSL_TICKET_NO_DECRYPT;
1334
1335
0
    *sess = tmpsess;
1336
0
    return SSL_TICKET_SUCCESS;
1337
0
}
1338
1339
int tls_parse_ctos_psk(SSL_CONNECTION *s, PACKET *pkt, unsigned int context,
1340
    X509 *x, size_t chainidx)
1341
306
{
1342
306
    PACKET identities, binders, binder;
1343
306
    size_t binderoffset;
1344
306
    int hashsize;
1345
306
    SSL_SESSION *sess = NULL;
1346
306
    unsigned int id, i, ext = 0;
1347
306
    const EVP_MD *md = NULL;
1348
306
    SSL_CTX *sctx = SSL_CONNECTION_GET_CTX(s);
1349
306
    SSL *ussl = SSL_CONNECTION_GET_USER_SSL(s);
1350
1351
    /*
1352
     * If we have no PSK kex mode that we recognise then we can't resume so
1353
     * ignore this extension
1354
     */
1355
306
    if ((s->ext.psk_kex_mode
1356
306
            & (TLSEXT_KEX_MODE_FLAG_KE | TLSEXT_KEX_MODE_FLAG_KE_DHE))
1357
306
        == 0)
1358
86
        return 1;
1359
1360
220
    if (!PACKET_get_length_prefixed_2(pkt, &identities)) {
1361
11
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
1362
11
        return 0;
1363
11
    }
1364
    /* There must always be at least one identity in the list */
1365
209
    if (PACKET_remaining(&identities) == 0) {
1366
2
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
1367
2
        goto err;
1368
2
    }
1369
1370
207
    s->ext.ticket_expected = 0;
1371
435
    for (id = 0; PACKET_remaining(&identities) != 0 && id < MAX_PRE_SHARED_KEYS; id++) {
1372
341
        PACKET identity;
1373
341
        unsigned long ticket_agel;
1374
341
        size_t idlen;
1375
1376
        /* Reset for each fresh iteration. */
1377
341
        sess = NULL;
1378
1379
341
        if (!PACKET_get_length_prefixed_2(&identities, &identity)
1380
294
            || !PACKET_get_net_4(&identities, &ticket_agel)) {
1381
53
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
1382
53
            return 0;
1383
53
        }
1384
1385
288
        idlen = PACKET_remaining(&identity);
1386
288
        if (idlen == 0) {
1387
7
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
1388
7
            return 0;
1389
7
        }
1390
281
        if (s->psk_find_session_cb != NULL
1391
0
            && !s->psk_find_session_cb(ussl, PACKET_data(&identity), idlen,
1392
0
                &sess)) {
1393
0
            SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_R_BAD_EXTENSION);
1394
0
            return 0;
1395
0
        }
1396
1397
281
#ifndef OPENSSL_NO_PSK
1398
281
        if (sess == NULL
1399
281
            && s->psk_server_callback != NULL
1400
0
            && idlen <= PSK_MAX_IDENTITY_LEN) {
1401
0
            char *pskid = NULL;
1402
0
            unsigned char pskdata[PSK_MAX_PSK_LEN];
1403
0
            unsigned int pskdatalen;
1404
1405
0
            if (!PACKET_strndup(&identity, &pskid)) {
1406
0
                SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1407
0
                return 0;
1408
0
            }
1409
0
            pskdatalen = s->psk_server_callback(ussl, pskid, pskdata,
1410
0
                sizeof(pskdata));
1411
0
            OPENSSL_free(pskid);
1412
0
            if (pskdatalen > PSK_MAX_PSK_LEN) {
1413
0
                OPENSSL_cleanse(pskdata, sizeof(pskdata));
1414
0
                SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1415
0
                return 0;
1416
0
            } else if (pskdatalen > 0) {
1417
0
                const SSL_CIPHER *cipher;
1418
0
                const unsigned char tls13_aes128gcmsha256_id[] = { 0x13, 0x01 };
1419
0
                const int version1_3 = SSL_CONNECTION_IS_DTLS(s) ? DTLS1_3_VERSION
1420
0
                                                                 : TLS1_3_VERSION;
1421
1422
                /*
1423
                 * We found a PSK using an old style callback. We don't know
1424
                 * the digest so we default to SHA256 as per the (D)TLSv1.3 spec
1425
                 */
1426
0
                cipher = SSL_CIPHER_find(SSL_CONNECTION_GET_SSL(s),
1427
0
                    tls13_aes128gcmsha256_id);
1428
0
                if (cipher == NULL) {
1429
0
                    OPENSSL_cleanse(pskdata, pskdatalen);
1430
0
                    SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1431
0
                    return 0;
1432
0
                }
1433
1434
0
                sess = SSL_SESSION_new();
1435
1436
0
                if (sess == NULL
1437
0
                    || !SSL_SESSION_set1_master_key(sess, pskdata,
1438
0
                        pskdatalen)
1439
0
                    || !SSL_SESSION_set_cipher(sess, cipher)
1440
0
                    || !SSL_SESSION_set_protocol_version(sess, version1_3)) {
1441
0
                    OPENSSL_cleanse(pskdata, pskdatalen);
1442
0
                    SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1443
0
                    goto err;
1444
0
                }
1445
0
                OPENSSL_cleanse(pskdata, pskdatalen);
1446
0
            }
1447
0
        }
1448
281
#endif /* OPENSSL_NO_PSK */
1449
1450
281
        if (sess != NULL) {
1451
            /*
1452
             * We found an external (not a resumption) PSK - duplicate the
1453
             * session, set the session id to our own, and mark it as external.
1454
             */
1455
0
            SSL_SESSION *sesstmp = ssl_session_dup(sess, 0);
1456
1457
0
            if (sesstmp == NULL) {
1458
0
                SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1459
0
                goto err;
1460
0
            }
1461
0
            SSL_SESSION_free(sess);
1462
0
            sess = sesstmp;
1463
1464
            /*
1465
             * We've just been told to use this session for this context so
1466
             * make sure the sid_ctx matches up.
1467
             */
1468
0
            memcpy(sess->sid_ctx, s->sid_ctx, s->sid_ctx_length);
1469
0
            sess->sid_ctx_length = s->sid_ctx_length;
1470
0
            sess->psk_external = ext = 1;
1471
0
            if (id == 0)
1472
0
                s->ext.early_data_ok = 1;
1473
0
            s->ext.ticket_expected = 1;
1474
281
        } else {
1475
281
            OSSL_TIME t, age, expire;
1476
281
            int ret;
1477
1478
            /*
1479
             * If we are using anti-replay protection then we behave as if
1480
             * SSL_OP_NO_TICKET is set - we are caching tickets anyway so there
1481
             * is no point in using full stateless tickets.
1482
             */
1483
281
            if ((s->options & SSL_OP_NO_TICKET) != 0
1484
281
                || (s->max_early_data > 0
1485
0
                    && (s->options & SSL_OP_NO_ANTI_REPLAY) == 0))
1486
0
                ret = tls_get_stateful_ticket(s, &identity, &sess);
1487
281
            else
1488
281
                ret = tls_decrypt_ticket(s, PACKET_data(&identity),
1489
281
                    PACKET_remaining(&identity), NULL, 0,
1490
281
                    &sess);
1491
1492
281
            if (ret == SSL_TICKET_EMPTY) {
1493
0
                SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
1494
0
                goto err;
1495
0
            }
1496
1497
281
            if (ret == SSL_TICKET_FATAL_ERR_MALLOC
1498
281
                || ret == SSL_TICKET_FATAL_ERR_OTHER) {
1499
0
                SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1500
0
                goto err;
1501
0
            }
1502
281
            if (ret == SSL_TICKET_NONE || ret == SSL_TICKET_NO_DECRYPT)
1503
170
                continue;
1504
1505
            /* Check for replay */
1506
111
            if (s->max_early_data > 0
1507
0
                && (s->options & SSL_OP_NO_ANTI_REPLAY) == 0
1508
0
                && !SSL_CTX_remove_session(s->session_ctx, sess)) {
1509
0
                SSL_SESSION_free(sess);
1510
0
                sess = NULL;
1511
0
                continue;
1512
0
            }
1513
1514
            /* Undo ticket age obfuscation modulo 2^32 (RFC 9846, 4.3.11.1). */
1515
111
            age = ossl_ms2time((uint32_t)(ticket_agel - sess->ext.tick_age_add));
1516
111
            t = ossl_time_subtract(ossl_time_now(), sess->time);
1517
1518
            /*
1519
             * Although internally we use OSS_TIME which has ns granularity,
1520
             * when SSL_SESSION structures are serialised/deserialised we use
1521
             * second granularity for the sess->time field. Therefore it could
1522
             * appear that the client's ticket age is longer than ours (our
1523
             * ticket age calculation should always be slightly longer than the
1524
             * client's due to the network latency). Therefore we add 1000ms to
1525
             * our age calculation to adjust for rounding errors.
1526
             */
1527
111
            expire = ossl_time_add(t, ossl_ms2time(1000));
1528
1529
111
            if (id == 0
1530
110
                && ossl_time_compare(sess->timeout, t) >= 0
1531
70
                && ossl_time_compare(age, expire) <= 0
1532
18
                && ossl_time_compare(ossl_time_add(age, TICKET_AGE_ALLOWANCE),
1533
18
                       expire)
1534
18
                    >= 0) {
1535
                /*
1536
                 * Ticket age is within tolerance and not expired. We allow it
1537
                 * for early data
1538
                 */
1539
6
                s->ext.early_data_ok = 1;
1540
6
            }
1541
            /* This PSK is not external, use the correct binder label, ... */
1542
111
            ext = 0;
1543
111
        }
1544
1545
        /*
1546
         * The binder below, and the 0-RTT gate, both key off sess->cipher --
1547
         * specifically its handshake digest (algorithm2), which is only
1548
         * meaningful for a TLS 1.3 (or later) ciphersuite. A
1549
         * psk_find_session_cb() may return a session with no cipher, or a
1550
         * pre-TLS-1.3 one; ignore it and fall back to a full handshake rather
1551
         * than dereference a NULL cipher or misread algorithm2.
1552
         *
1553
         * The protocol version is deliberately not checked here:
1554
         * ssl_get_prev_session() vets it the moment we return and discards any
1555
         * mismatch, freeing the session so nothing leaks into a ticket or cache.
1556
         */
1557
111
        if (sess->cipher == NULL || sess->cipher->min_tls < TLS1_3_VERSION) {
1558
0
            SSL_SESSION_free(sess);
1559
0
            sess = NULL;
1560
0
            s->ext.early_data_ok = 0;
1561
0
            s->ext.ticket_expected = 1;
1562
0
            continue;
1563
0
        }
1564
1565
111
        md = ssl_md(sctx, sess->cipher->algorithm2);
1566
111
        if (md == NULL) {
1567
0
            SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1568
0
            goto err;
1569
0
        }
1570
111
        if (!EVP_MD_is_a(md,
1571
111
                EVP_MD_get0_name(ssl_md(sctx,
1572
111
                    s->s3.tmp.new_cipher->algorithm2)))) {
1573
            /* The ciphersuite is not compatible with this session. */
1574
58
            SSL_SESSION_free(sess);
1575
58
            sess = NULL;
1576
58
            s->ext.early_data_ok = 0;
1577
            /*
1578
             * We fall back to a full handshake. The new session ticket will be
1579
             * issued to the client with the newly negotiated ciphersuite,
1580
             * allowing successful resumption on future connections.
1581
             */
1582
58
            s->ext.ticket_expected = 1;
1583
58
            continue;
1584
58
        }
1585
        /*
1586
         * Same-hash ciphersuite changes are allowed for TLSv1.3 PSK
1587
         * resumption, but RFC 9846 Section 4.3.10 requires the selected
1588
         * ciphersuite to match the selected PSK before accepting early data.
1589
         */
1590
53
        if (sess->cipher->id != s->s3.tmp.new_cipher->id)
1591
0
            s->ext.early_data_ok = 0;
1592
53
        break;
1593
111
    }
1594
1595
147
    if (sess == NULL) {
1596
94
        size_t j;
1597
1598
94
        for (j = 0; j < s->ssl_pkey_num && !ssl_has_cert(s, (int)j); j++)
1599
0
            ;
1600
94
        if (j < s->ssl_pkey_num) {
1601
            /* A certificate exists. Fallback to a full handshake */
1602
94
            return 1;
1603
94
        }
1604
        /*
1605
         * decrypt_error here to keep the alert the same as if the binder
1606
         * failed. See RFC9846 Appendix F.6. Note we make no attempt to do this
1607
         * in constant time compared to verifying the binder. None of this code
1608
         * is constant time anyway.
1609
         */
1610
94
        SSLfatal(s, SSL_AD_DECRYPT_ERROR, SSL_R_BAD_EXTENSION);
1611
0
        goto err;
1612
94
    }
1613
1614
53
    binderoffset = PACKET_data(pkt) - PACKET_msg_start(pkt);
1615
53
    hashsize = EVP_MD_get_size(md);
1616
53
    if (hashsize <= 0)
1617
0
        goto err;
1618
1619
53
    if (!PACKET_get_length_prefixed_2(pkt, &binders)) {
1620
14
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
1621
14
        goto err;
1622
14
    }
1623
1624
69
    for (i = 0; i <= id; i++) {
1625
39
        if (!PACKET_get_length_prefixed_1(&binders, &binder)) {
1626
9
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
1627
9
            goto err;
1628
9
        }
1629
39
    }
1630
1631
30
    if (PACKET_remaining(&binder) != (size_t)hashsize) {
1632
8
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
1633
8
        goto err;
1634
8
    }
1635
22
    if (tls_psk_do_binder(s, md, PACKET_msg_start(pkt), binderoffset,
1636
22
            PACKET_data(&binder), NULL, sess, 0, ext)
1637
22
        != 1) {
1638
        /* SSLfatal() already called */
1639
19
        goto err;
1640
19
    }
1641
1642
3
    s->ext.tick_identity = id;
1643
1644
3
    SSL_SESSION_free(s->session);
1645
3
    s->session = sess;
1646
3
    return 1;
1647
52
err:
1648
52
    SSL_SESSION_free(sess);
1649
52
    return 0;
1650
22
}
1651
1652
int tls_parse_ctos_post_handshake_auth(SSL_CONNECTION *s, PACKET *pkt,
1653
    ossl_unused unsigned int context,
1654
    ossl_unused X509 *x,
1655
    ossl_unused size_t chainidx)
1656
180
{
1657
180
    if (PACKET_remaining(pkt) != 0) {
1658
9
        SSLfatal(s, SSL_AD_DECODE_ERROR,
1659
9
            SSL_R_POST_HANDSHAKE_AUTH_ENCODING_ERR);
1660
9
        return 0;
1661
9
    }
1662
1663
171
    s->post_handshake_auth = SSL_PHA_EXT_RECEIVED;
1664
1665
171
    return 1;
1666
180
}
1667
1668
/*
1669
 * Add the server's renegotiation binding
1670
 */
1671
EXT_RETURN tls_construct_stoc_renegotiate(SSL_CONNECTION *s, WPACKET *pkt,
1672
    unsigned int context, X509 *x,
1673
    size_t chainidx)
1674
25.8k
{
1675
25.8k
    if (!s->s3.send_connection_binding)
1676
16.5k
        return EXT_RETURN_NOT_SENT;
1677
1678
    /* Still add this even if SSL_OP_NO_RENEGOTIATION is set */
1679
9.33k
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_renegotiate)
1680
9.33k
        || !WPACKET_start_sub_packet_u16(pkt)
1681
9.33k
        || !WPACKET_start_sub_packet_u8(pkt)
1682
9.33k
        || !WPACKET_memcpy(pkt, s->s3.previous_client_finished,
1683
9.33k
            s->s3.previous_client_finished_len)
1684
9.33k
        || !WPACKET_memcpy(pkt, s->s3.previous_server_finished,
1685
9.33k
            s->s3.previous_server_finished_len)
1686
9.33k
        || !WPACKET_close(pkt)
1687
9.33k
        || !WPACKET_close(pkt)) {
1688
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1689
0
        return EXT_RETURN_FAIL;
1690
0
    }
1691
1692
9.33k
    return EXT_RETURN_SENT;
1693
9.33k
}
1694
1695
EXT_RETURN tls_construct_stoc_server_name(SSL_CONNECTION *s, WPACKET *pkt,
1696
    unsigned int context, X509 *x,
1697
    size_t chainidx)
1698
10.6k
{
1699
10.6k
    if (s->servername_done != 1)
1700
10.6k
        return EXT_RETURN_NOT_SENT;
1701
1702
    /*
1703
     * Prior to (D)TLSv1.3 we ignore any SNI in the current handshake if resuming.
1704
     * We just use the servername from the initial handshake.
1705
     */
1706
0
    if (s->hit && !SSL_CONNECTION_IS_VERSION13(s))
1707
0
        return EXT_RETURN_NOT_SENT;
1708
1709
0
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_server_name)
1710
0
        || !WPACKET_put_bytes_u16(pkt, 0)) {
1711
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1712
0
        return EXT_RETURN_FAIL;
1713
0
    }
1714
1715
0
    return EXT_RETURN_SENT;
1716
0
}
1717
1718
/* Add/include the server's max fragment len extension into ServerHello */
1719
EXT_RETURN tls_construct_stoc_maxfragmentlen(SSL_CONNECTION *s, WPACKET *pkt,
1720
    unsigned int context, X509 *x,
1721
    size_t chainidx)
1722
28.7k
{
1723
28.7k
    if (!USE_MAX_FRAGMENT_LENGTH_EXT(s->session))
1724
27.4k
        return EXT_RETURN_NOT_SENT;
1725
1726
    /*-
1727
     * 4 bytes for this extension type and extension length
1728
     * 1 byte for the Max Fragment Length code value.
1729
     */
1730
1.30k
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_max_fragment_length)
1731
1.30k
        || !WPACKET_start_sub_packet_u16(pkt)
1732
1.30k
        || !WPACKET_put_bytes_u8(pkt, s->session->ext.max_fragment_len_mode)
1733
1.30k
        || !WPACKET_close(pkt)) {
1734
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1735
0
        return EXT_RETURN_FAIL;
1736
0
    }
1737
1738
1.30k
    return EXT_RETURN_SENT;
1739
1.30k
}
1740
1741
EXT_RETURN tls_construct_stoc_ec_pt_formats(SSL_CONNECTION *s, WPACKET *pkt,
1742
    unsigned int context, X509 *x,
1743
    size_t chainidx)
1744
9.70k
{
1745
9.70k
    unsigned long alg_k = s->s3.tmp.new_cipher->algorithm_mkey;
1746
9.70k
    unsigned long alg_a = s->s3.tmp.new_cipher->algorithm_auth;
1747
9.70k
    int using_ecc = (alg_k & SSL_kECDHE) || (alg_a & SSL_aECDSA);
1748
9.70k
    const unsigned char *plist;
1749
9.70k
    size_t plistlen;
1750
1751
    /*
1752
     * The extension is irrelevant unless we're negotiating an ECC
1753
     * ciphersuite at TLS 1.2 or below, and the peer sent a list.  This
1754
     * is the first point at which the chosen ciphersuite is known, so
1755
     * the RFC 4492/8422 section 5.1.2 check for the required
1756
     * 'uncompressed' codepoint also happens here.
1757
     */
1758
9.70k
    if (!using_ecc || s->ext.peer_ecpointformats == NULL)
1759
8.28k
        return EXT_RETURN_NOT_SENT;
1760
1761
1.41k
    if (memchr(s->ext.peer_ecpointformats,
1762
1.41k
            TLSEXT_ECPOINTFORMAT_uncompressed,
1763
1.41k
            s->ext.peer_ecpointformats_len)
1764
1.41k
        == NULL) {
1765
38
        SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER,
1766
38
            SSL_R_TLS_INVALID_ECPOINTFORMAT_LIST);
1767
38
        return EXT_RETURN_FAIL;
1768
38
    }
1769
1770
1.38k
    tls1_get_formatlist(s, &plist, &plistlen);
1771
1.38k
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_ec_point_formats)
1772
1.38k
        || !WPACKET_start_sub_packet_u16(pkt)
1773
1.38k
        || !WPACKET_sub_memcpy_u8(pkt, plist, plistlen)
1774
1.38k
        || !WPACKET_close(pkt)) {
1775
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1776
0
        return EXT_RETURN_FAIL;
1777
0
    }
1778
1779
1.38k
    return EXT_RETURN_SENT;
1780
1.38k
}
1781
1782
EXT_RETURN tls_construct_stoc_supported_groups(SSL_CONNECTION *s, WPACKET *pkt,
1783
    unsigned int context, X509 *x,
1784
    size_t chainidx)
1785
28.7k
{
1786
28.7k
    const uint16_t *groups;
1787
28.7k
    size_t numgroups, i, first = 1;
1788
28.7k
    int version;
1789
1790
    /* s->s3.group_id is non zero if we accepted a key_share */
1791
28.7k
    if (s->s3.group_id == 0)
1792
25.8k
        return EXT_RETURN_NOT_SENT;
1793
1794
    /* Get our list of supported groups */
1795
2.84k
    tls1_get_supported_groups(s, &groups, &numgroups);
1796
2.84k
    if (numgroups == 0) {
1797
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1798
0
        return EXT_RETURN_FAIL;
1799
0
    }
1800
1801
    /* Copy group ID if supported */
1802
2.84k
    version = SSL_version(SSL_CONNECTION_GET_SSL(s));
1803
26.0k
    for (i = 0; i < numgroups; i++) {
1804
23.6k
        uint16_t group = groups[i];
1805
1806
23.6k
        if (tls_valid_group(s, group, version, version, NULL, NULL)
1807
23.6k
            && tls_group_allowed(s, group, SSL_SECOP_CURVE_SUPPORTED)) {
1808
23.6k
            if (first) {
1809
                /*
1810
                 * Check if the client is already using our preferred group. If
1811
                 * so we don't need to add this extension
1812
                 */
1813
2.84k
                if (s->s3.group_id == group)
1814
496
                    return EXT_RETURN_NOT_SENT;
1815
1816
                /* Add extension header */
1817
2.34k
                if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_supported_groups)
1818
                    /* Sub-packet for supported_groups extension */
1819
2.34k
                    || !WPACKET_start_sub_packet_u16(pkt)
1820
2.34k
                    || !WPACKET_start_sub_packet_u16(pkt)) {
1821
0
                    SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1822
0
                    return EXT_RETURN_FAIL;
1823
0
                }
1824
1825
2.34k
                first = 0;
1826
2.34k
            }
1827
23.1k
            if (!WPACKET_put_bytes_u16(pkt, group)) {
1828
0
                SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1829
0
                return EXT_RETURN_FAIL;
1830
0
            }
1831
23.1k
        }
1832
23.6k
    }
1833
1834
2.34k
    if (!WPACKET_close(pkt) || !WPACKET_close(pkt)) {
1835
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1836
0
        return EXT_RETURN_FAIL;
1837
0
    }
1838
1839
2.34k
    return EXT_RETURN_SENT;
1840
2.34k
}
1841
1842
EXT_RETURN tls_construct_stoc_session_ticket(SSL_CONNECTION *s, WPACKET *pkt,
1843
    unsigned int context, X509 *x,
1844
    size_t chainidx)
1845
9.67k
{
1846
    /*
1847
     * Don't tell the client to expect a NewSessionTicket when any
1848
     * ticket we'd mint would be rejected by ssl_get_prev_session()
1849
     * whenever SSL_VERIFY_PEER is set with no sid_ctx configured (see
1850
     * the checks there).  In TLS 1.2, once promised the ticket MUST
1851
     * be sent.
1852
     */
1853
9.67k
    if (!s->ext.ticket_expected || !tls_use_ticket(s)
1854
7.91k
        || ((s->verify_mode & SSL_VERIFY_PEER) != 0 && s->sid_ctx_length == 0)) {
1855
7.91k
        s->ext.ticket_expected = 0;
1856
7.91k
        return EXT_RETURN_NOT_SENT;
1857
7.91k
    }
1858
1859
1.75k
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_session_ticket)
1860
1.75k
        || !WPACKET_put_bytes_u16(pkt, 0)) {
1861
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1862
0
        return EXT_RETURN_FAIL;
1863
0
    }
1864
1865
1.75k
    return EXT_RETURN_SENT;
1866
1.75k
}
1867
1868
#ifndef OPENSSL_NO_OCSP
1869
EXT_RETURN tls_construct_stoc_status_request(SSL_CONNECTION *s, WPACKET *pkt,
1870
    unsigned int context, X509 *x,
1871
    size_t chainidx)
1872
10.6k
{
1873
10.6k
    OCSP_RESPONSE *resp;
1874
1875
    /* We don't currently support this extension inside a CertificateRequest */
1876
10.6k
    if (context == SSL_EXT_TLS1_3_CERTIFICATE_REQUEST)
1877
0
        return EXT_RETURN_NOT_SENT;
1878
1879
10.6k
    if (!s->ext.status_expected)
1880
10.6k
        return EXT_RETURN_NOT_SENT;
1881
1882
    /* Try to retrieve OCSP response for the actual certificate */
1883
0
    resp = ossl_get_ocsp_response(s, (int)chainidx);
1884
1885
    /* If no OCSP response was found the extension is not sent */
1886
0
    if (resp == NULL)
1887
0
        return EXT_RETURN_NOT_SENT;
1888
1889
0
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_status_request)
1890
0
        || !WPACKET_start_sub_packet_u16(pkt)) {
1891
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1892
0
        return EXT_RETURN_FAIL;
1893
0
    }
1894
1895
    /*
1896
     * In (D)TLSv1.3 we include the certificate status itself. In <= (D)TLSv1.2 we
1897
     * send back an empty extension, with the certificate status appearing as a
1898
     * separate message
1899
     */
1900
0
    if (SSL_CONNECTION_IS_VERSION13(s)
1901
0
        && !tls_construct_cert_status_body(s, resp, pkt)) {
1902
        /* SSLfatal() already called */
1903
0
        return EXT_RETURN_FAIL;
1904
0
    }
1905
0
    if (!WPACKET_close(pkt)) {
1906
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1907
0
        return EXT_RETURN_FAIL;
1908
0
    }
1909
1910
0
    return EXT_RETURN_SENT;
1911
0
}
1912
#endif
1913
1914
#ifndef OPENSSL_NO_NEXTPROTONEG
1915
EXT_RETURN tls_construct_stoc_next_proto_neg(SSL_CONNECTION *s, WPACKET *pkt,
1916
    unsigned int context, X509 *x,
1917
    size_t chainidx)
1918
25.8k
{
1919
25.8k
    const unsigned char *npa;
1920
25.8k
    unsigned int npalen;
1921
25.8k
    int ret;
1922
25.8k
    int npn_seen = s->s3.npn_seen;
1923
25.8k
    SSL_CTX *sctx = SSL_CONNECTION_GET_CTX(s);
1924
1925
25.8k
    s->s3.npn_seen = 0;
1926
25.8k
    if (!npn_seen || sctx->ext.npn_advertised_cb == NULL)
1927
25.8k
        return EXT_RETURN_NOT_SENT;
1928
1929
0
    ret = sctx->ext.npn_advertised_cb(SSL_CONNECTION_GET_USER_SSL(s), &npa,
1930
0
        &npalen, sctx->ext.npn_advertised_cb_arg);
1931
0
    if (ret == SSL_TLSEXT_ERR_OK) {
1932
0
        if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_next_proto_neg)
1933
0
            || !WPACKET_sub_memcpy_u16(pkt, npa, npalen)) {
1934
0
            SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1935
0
            return EXT_RETURN_FAIL;
1936
0
        }
1937
0
        s->s3.npn_seen = 1;
1938
0
        return EXT_RETURN_SENT;
1939
0
    }
1940
1941
0
    return EXT_RETURN_NOT_SENT;
1942
0
}
1943
#endif
1944
1945
EXT_RETURN tls_construct_stoc_alpn(SSL_CONNECTION *s, WPACKET *pkt, unsigned int context,
1946
    X509 *x, size_t chainidx)
1947
28.7k
{
1948
28.7k
    if (s->s3.alpn_selected == NULL)
1949
28.7k
        return EXT_RETURN_NOT_SENT;
1950
1951
0
    if (!WPACKET_put_bytes_u16(pkt,
1952
0
            TLSEXT_TYPE_application_layer_protocol_negotiation)
1953
0
        || !WPACKET_start_sub_packet_u16(pkt)
1954
0
        || !WPACKET_start_sub_packet_u16(pkt)
1955
0
        || !WPACKET_sub_memcpy_u8(pkt, s->s3.alpn_selected,
1956
0
            s->s3.alpn_selected_len)
1957
0
        || !WPACKET_close(pkt)
1958
0
        || !WPACKET_close(pkt)) {
1959
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1960
0
        return EXT_RETURN_FAIL;
1961
0
    }
1962
1963
0
    return EXT_RETURN_SENT;
1964
0
}
1965
1966
#ifndef OPENSSL_NO_SRTP
1967
EXT_RETURN tls_construct_stoc_use_srtp(SSL_CONNECTION *s, WPACKET *pkt,
1968
    unsigned int context, X509 *x,
1969
    size_t chainidx)
1970
28.7k
{
1971
28.7k
    if (s->srtp_profile == NULL)
1972
28.7k
        return EXT_RETURN_NOT_SENT;
1973
1974
0
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_use_srtp)
1975
0
        || !WPACKET_start_sub_packet_u16(pkt)
1976
0
        || !WPACKET_put_bytes_u16(pkt, 2)
1977
0
        || !WPACKET_put_bytes_u16(pkt, s->srtp_profile->id)
1978
0
        || !WPACKET_put_bytes_u8(pkt, 0)
1979
0
        || !WPACKET_close(pkt)) {
1980
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1981
0
        return EXT_RETURN_FAIL;
1982
0
    }
1983
1984
0
    return EXT_RETURN_SENT;
1985
0
}
1986
#endif
1987
1988
EXT_RETURN tls_construct_stoc_etm(SSL_CONNECTION *s, WPACKET *pkt,
1989
    unsigned int context,
1990
    X509 *x, size_t chainidx)
1991
25.8k
{
1992
25.8k
    if (!s->ext.use_etm)
1993
24.2k
        return EXT_RETURN_NOT_SENT;
1994
1995
    /*
1996
     * Don't use encrypt_then_mac if AEAD or RC4 might want to disable
1997
     * for other cases too.
1998
     */
1999
1.63k
    if (s->s3.tmp.new_cipher->algorithm_mac == SSL_AEAD
2000
1.32k
        || s->s3.tmp.new_cipher->algorithm_enc == SSL_RC4
2001
1.32k
        || s->s3.tmp.new_cipher->algorithm_enc == SSL_eGOST2814789CNT
2002
1.32k
        || s->s3.tmp.new_cipher->algorithm_enc == SSL_eGOST2814789CNT12
2003
1.32k
        || s->s3.tmp.new_cipher->algorithm_enc == SSL_MAGMA
2004
1.32k
        || s->s3.tmp.new_cipher->algorithm_enc == SSL_KUZNYECHIK) {
2005
311
        s->ext.use_etm = 0;
2006
311
        return EXT_RETURN_NOT_SENT;
2007
311
    }
2008
2009
1.32k
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_encrypt_then_mac)
2010
1.32k
        || !WPACKET_put_bytes_u16(pkt, 0)) {
2011
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
2012
0
        return EXT_RETURN_FAIL;
2013
0
    }
2014
2015
1.32k
    return EXT_RETURN_SENT;
2016
1.32k
}
2017
2018
EXT_RETURN tls_construct_stoc_ems(SSL_CONNECTION *s, WPACKET *pkt,
2019
    unsigned int context,
2020
    X509 *x, size_t chainidx)
2021
25.8k
{
2022
25.8k
    if ((s->s3.flags & TLS1_FLAGS_RECEIVED_EXTMS) == 0)
2023
20.6k
        return EXT_RETURN_NOT_SENT;
2024
2025
5.25k
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_extended_master_secret)
2026
5.25k
        || !WPACKET_put_bytes_u16(pkt, 0)) {
2027
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
2028
0
        return EXT_RETURN_FAIL;
2029
0
    }
2030
2031
5.25k
    return EXT_RETURN_SENT;
2032
5.25k
}
2033
2034
EXT_RETURN tls_construct_stoc_supported_versions(SSL_CONNECTION *s, WPACKET *pkt,
2035
    unsigned int context, X509 *x,
2036
    size_t chainidx)
2037
1.17k
{
2038
1.17k
    if (!ossl_assert(SSL_CONNECTION_IS_VERSION13(s))) {
2039
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
2040
0
        return EXT_RETURN_FAIL;
2041
0
    }
2042
2043
1.17k
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_supported_versions)
2044
1.17k
        || !WPACKET_start_sub_packet_u16(pkt)
2045
1.17k
        || !WPACKET_put_bytes_u16(pkt, s->version)
2046
1.17k
        || !WPACKET_close(pkt)) {
2047
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
2048
0
        return EXT_RETURN_FAIL;
2049
0
    }
2050
2051
1.17k
    return EXT_RETURN_SENT;
2052
1.17k
}
2053
2054
/* Does the HelloRetryRequest ask the client for a different key_share? */
2055
static int hrr_sends_key_share(const SSL_CONNECTION *s)
2056
170
{
2057
170
    return s->s3.peer_tmp == NULL && s->s3.group_id != 0;
2058
170
}
2059
2060
EXT_RETURN tls_construct_stoc_key_share(SSL_CONNECTION *s, WPACKET *pkt,
2061
    unsigned int context, X509 *x,
2062
    size_t chainidx)
2063
1.17k
{
2064
1.17k
#if !(defined(OPENSSL_NO_TLS1_3) && defined(OPENSSL_NO_DTLS1_3))
2065
1.17k
    unsigned char *encoded_pubkey;
2066
1.17k
    size_t encoded_pubkey_len = 0;
2067
1.17k
    EVP_PKEY *ckey = s->s3.peer_tmp, *skey = NULL;
2068
1.17k
    const TLS_GROUP_INFO *ginf = NULL;
2069
2070
1.17k
    if (s->hello_retry_request == SSL_HRR_PENDING) {
2071
170
        if (!hrr_sends_key_share(s))
2072
0
            return EXT_RETURN_NOT_SENT;
2073
170
        if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_key_share)
2074
170
            || !WPACKET_start_sub_packet_u16(pkt)
2075
170
            || !WPACKET_put_bytes_u16(pkt, s->s3.group_id)
2076
170
            || !WPACKET_close(pkt)) {
2077
0
            SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
2078
0
            return EXT_RETURN_FAIL;
2079
0
        }
2080
2081
170
        return EXT_RETURN_SENT;
2082
170
    }
2083
2084
1.00k
    if (ckey == NULL) {
2085
        /* No key_share received from client - must be resuming */
2086
0
        if (!s->hit || !tls13_generate_handshake_secret(s, NULL, 0)) {
2087
0
            SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
2088
0
            return EXT_RETURN_FAIL;
2089
0
        }
2090
0
        return EXT_RETURN_NOT_SENT;
2091
0
    }
2092
2093
1.00k
    if (s->hit && (s->ext.psk_kex_mode & TLSEXT_KEX_MODE_FLAG_KE_DHE) == 0) {
2094
        /*
2095
         * PSK ('hit') and explicitly not doing DHE. If the client sent the
2096
         * DHE option, we take it by default, except if non-DHE would be
2097
         * preferred by config, but this case would have been handled in
2098
         * tls_parse_ctos_psk_kex_modes().
2099
         */
2100
0
        return EXT_RETURN_NOT_SENT;
2101
0
    }
2102
2103
1.00k
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_key_share)
2104
1.00k
        || !WPACKET_start_sub_packet_u16(pkt)
2105
1.00k
        || !WPACKET_put_bytes_u16(pkt, s->s3.group_id)) {
2106
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
2107
0
        return EXT_RETURN_FAIL;
2108
0
    }
2109
2110
1.00k
    if ((ginf = tls1_group_id_lookup(SSL_CONNECTION_GET_CTX(s),
2111
1.00k
             s->s3.group_id))
2112
1.00k
        == NULL) {
2113
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
2114
0
        return EXT_RETURN_FAIL;
2115
0
    }
2116
2117
1.00k
    if (!ginf->is_kem) {
2118
        /* Regular KEX */
2119
990
        skey = ssl_generate_pkey(s, ckey);
2120
990
        if (skey == NULL) {
2121
0
            SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_SSL_LIB);
2122
0
            return EXT_RETURN_FAIL;
2123
0
        }
2124
2125
        /* Generate encoding of server key */
2126
990
        encoded_pubkey_len = EVP_PKEY_get1_encoded_public_key(skey, &encoded_pubkey);
2127
990
        if (encoded_pubkey_len == 0) {
2128
0
            SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_EC_LIB);
2129
0
            EVP_PKEY_free(skey);
2130
0
            return EXT_RETURN_FAIL;
2131
0
        }
2132
2133
990
        if (!WPACKET_sub_memcpy_u16(pkt, encoded_pubkey, encoded_pubkey_len)
2134
990
            || !WPACKET_close(pkt)) {
2135
0
            SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
2136
0
            EVP_PKEY_free(skey);
2137
0
            OPENSSL_free(encoded_pubkey);
2138
0
            return EXT_RETURN_FAIL;
2139
0
        }
2140
990
        OPENSSL_free(encoded_pubkey);
2141
2142
        /*
2143
         * This causes the crypto state to be updated based on the derived keys
2144
         */
2145
990
        if (ssl_derive(s, skey, ckey, 1) == 0) {
2146
            /* SSLfatal() already called */
2147
4
            EVP_PKEY_free(skey);
2148
4
            return EXT_RETURN_FAIL;
2149
4
        }
2150
986
        s->s3.tmp.pkey = skey;
2151
986
    } else {
2152
        /* KEM mode */
2153
18
        unsigned char *ct = NULL;
2154
18
        size_t ctlen = 0;
2155
2156
        /*
2157
         * This does not update the crypto state.
2158
         *
2159
         * The generated pms is stored in `s->s3.tmp.pms` to be later used via
2160
         * ssl_gensecret().
2161
         */
2162
18
        if (ssl_encapsulate(s, ckey, &ct, &ctlen, 0) == 0) {
2163
            /* SSLfatal() already called */
2164
2
            return EXT_RETURN_FAIL;
2165
2
        }
2166
2167
16
        if (ctlen == 0) {
2168
0
            SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
2169
0
            OPENSSL_free(ct);
2170
0
            return EXT_RETURN_FAIL;
2171
0
        }
2172
2173
16
        if (!WPACKET_sub_memcpy_u16(pkt, ct, ctlen)
2174
16
            || !WPACKET_close(pkt)) {
2175
0
            SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
2176
0
            OPENSSL_free(ct);
2177
0
            return EXT_RETURN_FAIL;
2178
0
        }
2179
16
        OPENSSL_free(ct);
2180
2181
        /*
2182
         * This causes the crypto state to be updated based on the generated pms
2183
         */
2184
16
        if (ssl_gensecret(s, s->s3.tmp.pms, s->s3.tmp.pmslen) == 0) {
2185
            /* SSLfatal() already called */
2186
0
            return EXT_RETURN_FAIL;
2187
0
        }
2188
16
    }
2189
1.00k
    s->s3.did_kex = 1;
2190
1.00k
    return EXT_RETURN_SENT;
2191
#else
2192
    SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
2193
    return EXT_RETURN_FAIL;
2194
#endif
2195
1.00k
}
2196
2197
EXT_RETURN tls_construct_stoc_cookie(SSL_CONNECTION *s, WPACKET *pkt,
2198
    unsigned int context,
2199
    X509 *x, size_t chainidx)
2200
170
{
2201
170
#if !(defined(OPENSSL_NO_TLS1_3) && defined(OPENSSL_NO_DTLS1_3))
2202
170
    unsigned char *hashval1, *hashval2, *appcookie1, *appcookie2, *cookie;
2203
170
    unsigned char *hmac, *hmac2;
2204
170
    size_t startlen, ciphlen, totcookielen, hashlen, hmaclen;
2205
170
    size_t appcookielen = 0;
2206
170
    EVP_MD_CTX *hctx;
2207
170
    EVP_PKEY *pkey;
2208
170
    int ret = EXT_RETURN_FAIL;
2209
170
    SSL_CTX *sctx = SSL_CONNECTION_GET_CTX(s);
2210
170
    SSL *ssl = SSL_CONNECTION_GET_SSL(s);
2211
170
    SSL *ussl = SSL_CONNECTION_GET_USER_SSL(s);
2212
170
    const int version = SSL_CONNECTION_IS_DTLS(s) ? DTLS1_3_VERSION : TLS1_3_VERSION;
2213
170
    int gen_ret = 0;
2214
170
#if !defined(OPENSSL_NO_DTLS)
2215
170
    DTLS_LISTENER *dl = (s->d1 != NULL && s->d1->listener != NULL)
2216
170
        ? (DTLS_LISTENER *)s->d1->listener
2217
170
        : NULL;
2218
170
    int have_gen_cb = (sctx->gen_stateless_cookie_cb != NULL)
2219
170
        || (dl != NULL && dl->require_hrr_cookie)
2220
170
        || (SSL_CONNECTION_IS_DTLS(s) && sctx->app_gen_cookie_cb != NULL);
2221
#else
2222
    int have_gen_cb = (sctx->gen_stateless_cookie_cb != NULL);
2223
#endif
2224
2225
170
    if (!tls_hrr_cookie_required(s))
2226
170
        return EXT_RETURN_NOT_SENT;
2227
2228
0
    if (!have_gen_cb) {
2229
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_R_NO_COOKIE_CALLBACK_SET);
2230
0
        return EXT_RETURN_FAIL;
2231
0
    }
2232
2233
0
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_cookie)
2234
0
        || !WPACKET_start_sub_packet_u16(pkt)
2235
0
        || !WPACKET_start_sub_packet_u16(pkt)
2236
0
        || !WPACKET_get_total_written(pkt, &startlen)
2237
0
        || !WPACKET_reserve_bytes(pkt, MAX_COOKIE_SIZE, &cookie)
2238
0
        || !WPACKET_put_bytes_u16(pkt, COOKIE_STATE_FORMAT_VERSION)
2239
0
        || !WPACKET_put_bytes_u16(pkt, version)
2240
0
        || !WPACKET_put_bytes_u16(pkt, s->s3.group_id)
2241
0
        || !ssl->method->put_cipher_by_char(s->s3.tmp.new_cipher, pkt,
2242
0
            &ciphlen)
2243
        /* Is there a key_share extension present in this HRR? */
2244
0
        || !WPACKET_put_bytes_u8(pkt, hrr_sends_key_share(s))
2245
0
        || !WPACKET_put_bytes_u64(pkt, time(NULL))
2246
0
        || !WPACKET_start_sub_packet_u16(pkt)
2247
0
        || !WPACKET_reserve_bytes(pkt, EVP_MAX_MD_SIZE, &hashval1)) {
2248
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
2249
0
        return EXT_RETURN_FAIL;
2250
0
    }
2251
2252
    /*
2253
     * Get the hash of the initial ClientHello. ssl_handshake_hash() operates
2254
     * on raw buffers, so we first reserve sufficient bytes (above) and then
2255
     * subsequently allocate them (below)
2256
     */
2257
0
    if (!ssl3_digest_cached_records(s, 0)
2258
0
        || !ssl_handshake_hash(s, hashval1, EVP_MAX_MD_SIZE, &hashlen)) {
2259
        /* SSLfatal() already called */
2260
0
        return EXT_RETURN_FAIL;
2261
0
    }
2262
2263
0
    if (!WPACKET_allocate_bytes(pkt, hashlen, &hashval2)
2264
0
        || !ossl_assert(hashval1 == hashval2)
2265
0
        || !WPACKET_close(pkt)
2266
0
        || !WPACKET_start_sub_packet_u8(pkt)
2267
0
        || !WPACKET_reserve_bytes(pkt, SSL_COOKIE_LENGTH, &appcookie1)) {
2268
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
2269
0
        return EXT_RETURN_FAIL;
2270
0
    }
2271
2272
    /* Generate the application cookie */
2273
0
#if !defined(OPENSSL_NO_DTLS)
2274
0
    if (dl != NULL && dl->require_hrr_cookie && sctx->gen_stateless_cookie_cb == NULL) {
2275
0
        gen_ret = ossl_dtls_listener_gen_stateless_cookie_cb(ussl, appcookie1,
2276
0
            &appcookielen);
2277
0
    } else if (sctx->gen_stateless_cookie_cb == NULL
2278
0
        && SSL_CONNECTION_IS_DTLS(s) && sctx->app_gen_cookie_cb != NULL) {
2279
0
        unsigned int applen = 0;
2280
2281
        /* Fall back to the HelloVerifyRequest cookie callbacks */
2282
0
        gen_ret = sctx->app_gen_cookie_cb(ussl, appcookie1, &applen)
2283
0
            && applen <= DTLS1_COOKIE_LENGTH;
2284
0
        appcookielen = applen;
2285
0
    } else
2286
0
#endif
2287
0
        if (sctx->gen_stateless_cookie_cb != NULL) {
2288
0
        gen_ret = sctx->gen_stateless_cookie_cb(ussl, appcookie1, &appcookielen);
2289
0
    }
2290
2291
0
    if (gen_ret == 0) {
2292
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_R_COOKIE_GEN_CALLBACK_FAILURE);
2293
0
        return EXT_RETURN_FAIL;
2294
0
    }
2295
2296
0
    if (!WPACKET_allocate_bytes(pkt, appcookielen, &appcookie2)
2297
0
        || !ossl_assert(appcookie1 == appcookie2)
2298
0
        || !WPACKET_close(pkt)
2299
0
        || !WPACKET_get_total_written(pkt, &totcookielen)
2300
0
        || !WPACKET_reserve_bytes(pkt, SHA256_DIGEST_LENGTH, &hmac)) {
2301
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
2302
0
        return EXT_RETURN_FAIL;
2303
0
    }
2304
0
    hmaclen = SHA256_DIGEST_LENGTH;
2305
2306
0
    totcookielen -= startlen;
2307
0
    if (!ossl_assert(totcookielen <= MAX_COOKIE_SIZE - SHA256_DIGEST_LENGTH)) {
2308
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
2309
0
        return EXT_RETURN_FAIL;
2310
0
    }
2311
2312
    /* HMAC the cookie */
2313
0
    hctx = EVP_MD_CTX_create();
2314
0
    pkey = EVP_PKEY_new_raw_private_key_ex(sctx->libctx, "HMAC",
2315
0
        sctx->propq,
2316
0
        s->session_ctx->ext.cookie_hmac_key,
2317
0
        sizeof(s->session_ctx->ext.cookie_hmac_key));
2318
0
    if (hctx == NULL || pkey == NULL) {
2319
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_EVP_LIB);
2320
0
        goto err;
2321
0
    }
2322
2323
0
    if (EVP_DigestSignInit_ex(hctx, NULL, "SHA2-256", sctx->libctx,
2324
0
            sctx->propq, pkey, NULL)
2325
0
            <= 0
2326
0
        || EVP_DigestSign(hctx, hmac, &hmaclen, cookie,
2327
0
               totcookielen)
2328
0
            <= 0) {
2329
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
2330
0
        goto err;
2331
0
    }
2332
2333
0
    if (!ossl_assert(totcookielen + hmaclen <= MAX_COOKIE_SIZE)) {
2334
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
2335
0
        goto err;
2336
0
    }
2337
2338
0
    if (!WPACKET_allocate_bytes(pkt, hmaclen, &hmac2)
2339
0
        || !ossl_assert(hmac == hmac2)
2340
0
        || !ossl_assert(cookie == hmac - totcookielen)
2341
0
        || !WPACKET_close(pkt)
2342
0
        || !WPACKET_close(pkt)) {
2343
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
2344
0
        goto err;
2345
0
    }
2346
2347
0
    ret = EXT_RETURN_SENT;
2348
2349
0
err:
2350
0
    EVP_MD_CTX_free(hctx);
2351
0
    EVP_PKEY_free(pkey);
2352
0
    return ret;
2353
#else
2354
    SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
2355
    return EXT_RETURN_FAIL;
2356
#endif
2357
0
}
2358
2359
EXT_RETURN tls_construct_stoc_cryptopro_bug(SSL_CONNECTION *s, WPACKET *pkt,
2360
    unsigned int context, X509 *x,
2361
    size_t chainidx)
2362
25.8k
{
2363
25.8k
    const unsigned char cryptopro_ext[36] = {
2364
25.8k
        0xfd, 0xe8, /* 65000 */
2365
25.8k
        0x00, 0x20, /* 32 bytes length */
2366
25.8k
        0x30, 0x1e, 0x30, 0x08, 0x06, 0x06, 0x2a, 0x85,
2367
25.8k
        0x03, 0x02, 0x02, 0x09, 0x30, 0x08, 0x06, 0x06,
2368
25.8k
        0x2a, 0x85, 0x03, 0x02, 0x02, 0x16, 0x30, 0x08,
2369
25.8k
        0x06, 0x06, 0x2a, 0x85, 0x03, 0x02, 0x02, 0x17
2370
25.8k
    };
2371
2372
25.8k
    if (((s->s3.tmp.new_cipher->id & 0xFFFF) != 0x80
2373
25.8k
            && (s->s3.tmp.new_cipher->id & 0xFFFF) != 0x81)
2374
0
        || (SSL_get_options(SSL_CONNECTION_GET_SSL(s))
2375
0
               & SSL_OP_CRYPTOPRO_TLSEXT_BUG)
2376
0
            == 0)
2377
25.8k
        return EXT_RETURN_NOT_SENT;
2378
2379
0
    if (!WPACKET_memcpy(pkt, cryptopro_ext, sizeof(cryptopro_ext))) {
2380
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
2381
0
        return EXT_RETURN_FAIL;
2382
0
    }
2383
2384
0
    return EXT_RETURN_SENT;
2385
0
}
2386
2387
EXT_RETURN tls_construct_stoc_early_data(SSL_CONNECTION *s, WPACKET *pkt,
2388
    unsigned int context, X509 *x,
2389
    size_t chainidx)
2390
2.84k
{
2391
2.84k
    if (context == SSL_EXT_TLS1_3_NEW_SESSION_TICKET) {
2392
0
        if (s->max_early_data == 0)
2393
0
            return EXT_RETURN_NOT_SENT;
2394
2395
0
        if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_early_data)
2396
0
            || !WPACKET_start_sub_packet_u16(pkt)
2397
0
            || !WPACKET_put_bytes_u32(pkt, s->max_early_data)
2398
0
            || !WPACKET_close(pkt)) {
2399
0
            SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
2400
0
            return EXT_RETURN_FAIL;
2401
0
        }
2402
2403
0
        return EXT_RETURN_SENT;
2404
0
    }
2405
2406
2.84k
    if (s->ext.early_data != SSL_EARLY_DATA_ACCEPTED)
2407
2.84k
        return EXT_RETURN_NOT_SENT;
2408
2409
0
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_early_data)
2410
0
        || !WPACKET_start_sub_packet_u16(pkt)
2411
0
        || !WPACKET_close(pkt)) {
2412
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
2413
0
        return EXT_RETURN_FAIL;
2414
0
    }
2415
2416
0
    return EXT_RETURN_SENT;
2417
0
}
2418
2419
EXT_RETURN tls_construct_stoc_psk(SSL_CONNECTION *s, WPACKET *pkt,
2420
    unsigned int context,
2421
    X509 *x, size_t chainidx)
2422
2.84k
{
2423
2.84k
    if (!s->hit)
2424
2.84k
        return EXT_RETURN_NOT_SENT;
2425
2426
0
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_psk)
2427
0
        || !WPACKET_start_sub_packet_u16(pkt)
2428
0
        || !WPACKET_put_bytes_u16(pkt, s->ext.tick_identity)
2429
0
        || !WPACKET_close(pkt)) {
2430
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
2431
0
        return EXT_RETURN_FAIL;
2432
0
    }
2433
2434
0
    return EXT_RETURN_SENT;
2435
0
}
2436
2437
EXT_RETURN tls_construct_stoc_client_cert_type(SSL_CONNECTION *sc, WPACKET *pkt,
2438
    unsigned int context,
2439
    X509 *x, size_t chainidx)
2440
28.7k
{
2441
28.7k
    if (sc->ext.client_cert_type_ctos == OSSL_CERT_TYPE_CTOS_ERROR
2442
0
        && (send_certificate_request(sc)
2443
0
            || sc->post_handshake_auth == SSL_PHA_EXT_RECEIVED)) {
2444
        /* Did not receive an acceptable cert type - and doing client auth */
2445
0
        SSLfatal(sc, SSL_AD_UNSUPPORTED_CERTIFICATE, SSL_R_BAD_EXTENSION);
2446
0
        return EXT_RETURN_FAIL;
2447
0
    }
2448
2449
28.7k
    if (sc->ext.client_cert_type == TLSEXT_cert_type_x509) {
2450
28.7k
        sc->ext.client_cert_type_ctos = OSSL_CERT_TYPE_CTOS_NONE;
2451
28.7k
        return EXT_RETURN_NOT_SENT;
2452
28.7k
    }
2453
2454
    /*
2455
     * Note: only supposed to send this if we are going to do a cert request,
2456
     * but (D)TLSv1.3 could do a PHA request if the client supports it
2457
     */
2458
0
    if ((!send_certificate_request(sc) && sc->post_handshake_auth != SSL_PHA_EXT_RECEIVED)
2459
0
        || sc->ext.client_cert_type_ctos != OSSL_CERT_TYPE_CTOS_GOOD
2460
0
        || sc->client_cert_type == NULL) {
2461
        /* if we don't send it, reset to TLSEXT_cert_type_x509 */
2462
0
        sc->ext.client_cert_type_ctos = OSSL_CERT_TYPE_CTOS_NONE;
2463
0
        sc->ext.client_cert_type = TLSEXT_cert_type_x509;
2464
0
        return EXT_RETURN_NOT_SENT;
2465
0
    }
2466
2467
0
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_client_cert_type)
2468
0
        || !WPACKET_start_sub_packet_u16(pkt)
2469
0
        || !WPACKET_put_bytes_u8(pkt, sc->ext.client_cert_type)
2470
0
        || !WPACKET_close(pkt)) {
2471
0
        SSLfatal(sc, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
2472
0
        return EXT_RETURN_FAIL;
2473
0
    }
2474
0
    return EXT_RETURN_SENT;
2475
0
}
2476
2477
/* One of |pref|, |other| is configured and the values are sanitized */
2478
static int reconcile_cert_type(const unsigned char *pref, size_t pref_len,
2479
    const unsigned char *other, size_t other_len,
2480
    uint8_t *chosen_cert_type)
2481
0
{
2482
0
    size_t i;
2483
2484
0
    for (i = 0; i < pref_len; i++) {
2485
0
        if (memchr(other, pref[i], other_len) != NULL) {
2486
0
            *chosen_cert_type = pref[i];
2487
0
            return OSSL_CERT_TYPE_CTOS_GOOD;
2488
0
        }
2489
0
    }
2490
0
    return OSSL_CERT_TYPE_CTOS_ERROR;
2491
0
}
2492
2493
int tls_parse_ctos_client_cert_type(SSL_CONNECTION *sc, PACKET *pkt,
2494
    unsigned int context,
2495
    X509 *x, size_t chainidx)
2496
624
{
2497
624
    PACKET supported_cert_types;
2498
624
    const unsigned char *data;
2499
624
    size_t len;
2500
2501
    /* Ignore the extension */
2502
624
    if (sc->client_cert_type == NULL) {
2503
624
        sc->ext.client_cert_type_ctos = OSSL_CERT_TYPE_CTOS_NONE;
2504
624
        sc->ext.client_cert_type = TLSEXT_cert_type_x509;
2505
624
        return 1;
2506
624
    }
2507
2508
0
    if (!PACKET_as_length_prefixed_1(pkt, &supported_cert_types)) {
2509
0
        sc->ext.client_cert_type_ctos = OSSL_CERT_TYPE_CTOS_ERROR;
2510
0
        SSLfatal(sc, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
2511
0
        return 0;
2512
0
    }
2513
0
    if ((len = PACKET_remaining(&supported_cert_types)) == 0) {
2514
0
        sc->ext.client_cert_type_ctos = OSSL_CERT_TYPE_CTOS_ERROR;
2515
0
        SSLfatal(sc, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
2516
0
        return 0;
2517
0
    }
2518
0
    if (!PACKET_get_bytes(&supported_cert_types, &data, len)) {
2519
0
        sc->ext.client_cert_type_ctos = OSSL_CERT_TYPE_CTOS_ERROR;
2520
0
        SSLfatal(sc, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
2521
0
        return 0;
2522
0
    }
2523
    /* client_cert_type: client (peer) has priority */
2524
0
    sc->ext.client_cert_type_ctos = reconcile_cert_type(data, len,
2525
0
        sc->client_cert_type, sc->client_cert_type_len,
2526
0
        &sc->ext.client_cert_type);
2527
2528
    /* Ignore the error until sending - so we can check cert auth*/
2529
0
    return 1;
2530
0
}
2531
2532
EXT_RETURN tls_construct_stoc_server_cert_type(SSL_CONNECTION *sc, WPACKET *pkt,
2533
    unsigned int context,
2534
    X509 *x, size_t chainidx)
2535
28.7k
{
2536
28.7k
    if (sc->ext.server_cert_type == TLSEXT_cert_type_x509) {
2537
28.7k
        sc->ext.server_cert_type_ctos = OSSL_CERT_TYPE_CTOS_NONE;
2538
28.7k
        return EXT_RETURN_NOT_SENT;
2539
28.7k
    }
2540
0
    if (sc->ext.server_cert_type_ctos != OSSL_CERT_TYPE_CTOS_GOOD
2541
0
        || sc->server_cert_type == NULL) {
2542
        /* if we don't send it, reset to TLSEXT_cert_type_x509 */
2543
0
        sc->ext.server_cert_type_ctos = OSSL_CERT_TYPE_CTOS_NONE;
2544
0
        sc->ext.server_cert_type = TLSEXT_cert_type_x509;
2545
0
        return EXT_RETURN_NOT_SENT;
2546
0
    }
2547
2548
0
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_server_cert_type)
2549
0
        || !WPACKET_start_sub_packet_u16(pkt)
2550
0
        || !WPACKET_put_bytes_u8(pkt, sc->ext.server_cert_type)
2551
0
        || !WPACKET_close(pkt)) {
2552
0
        SSLfatal(sc, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
2553
0
        return EXT_RETURN_FAIL;
2554
0
    }
2555
0
    return EXT_RETURN_SENT;
2556
0
}
2557
2558
int tls_parse_ctos_server_cert_type(SSL_CONNECTION *sc, PACKET *pkt,
2559
    unsigned int context,
2560
    X509 *x, size_t chainidx)
2561
258
{
2562
258
    PACKET supported_cert_types;
2563
258
    const unsigned char *data;
2564
258
    size_t len;
2565
2566
    /* Ignore the extension */
2567
258
    if (sc->server_cert_type == NULL) {
2568
258
        sc->ext.server_cert_type_ctos = OSSL_CERT_TYPE_CTOS_NONE;
2569
258
        sc->ext.server_cert_type = TLSEXT_cert_type_x509;
2570
258
        return 1;
2571
258
    }
2572
2573
0
    if (!PACKET_as_length_prefixed_1(pkt, &supported_cert_types)) {
2574
0
        SSLfatal(sc, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
2575
0
        return 0;
2576
0
    }
2577
2578
0
    if ((len = PACKET_remaining(&supported_cert_types)) == 0) {
2579
0
        SSLfatal(sc, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
2580
0
        return 0;
2581
0
    }
2582
0
    if (!PACKET_get_bytes(&supported_cert_types, &data, len)) {
2583
0
        SSLfatal(sc, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
2584
0
        return 0;
2585
0
    }
2586
    /* server_cert_type: server (this) has priority */
2587
0
    sc->ext.server_cert_type_ctos = reconcile_cert_type(sc->server_cert_type, sc->server_cert_type_len,
2588
0
        data, len,
2589
0
        &sc->ext.server_cert_type);
2590
0
    if (sc->ext.server_cert_type_ctos == OSSL_CERT_TYPE_CTOS_GOOD)
2591
0
        return 1;
2592
2593
    /* Did not receive an acceptable cert type */
2594
0
    SSLfatal(sc, SSL_AD_UNSUPPORTED_CERTIFICATE, SSL_R_BAD_EXTENSION);
2595
0
    return 0;
2596
0
}
2597
2598
#ifndef OPENSSL_NO_ECH
2599
/*
2600
 * ECH handling for edge cases (GREASE/inner) and errors.
2601
 * return 1 for good, 0 otherwise
2602
 *
2603
 * Real ECH handling (i.e. decryption) happens before, via
2604
 * ech_early_decrypt(), but if that failed (e.g. decryption
2605
 * failed, which may be down to GREASE) then we end up here,
2606
 * processing the ECH from the outer CH.
2607
 * Otherwise, we only expect to see an inner ECH with a fixed
2608
 * value here.
2609
 */
2610
int tls_parse_ctos_ech(SSL_CONNECTION *s, PACKET *pkt, unsigned int context,
2611
    X509 *x, size_t chainidx)
2612
28
{
2613
28
    unsigned int echtype = 0;
2614
2615
28
    if (s->ext.ech.grease == OSSL_ECH_IS_GREASE) {
2616
        /* GREASE is fine */
2617
0
        return 1;
2618
0
    }
2619
28
    if (s->ext.ech.es == NULL) {
2620
        /* If not configured for ECH then we ignore it */
2621
28
        return 1;
2622
28
    }
2623
0
    if (s->ext.ech.attempted_type != TLSEXT_TYPE_ech) {
2624
        /* if/when new versions of ECH are added we'll update here */
2625
0
        SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_BAD_EXTENSION);
2626
0
        return 0;
2627
0
    }
2628
    /*
2629
     * we only allow "inner" which is one octet, valued 0x01
2630
     * and only if we decrypted ok or are a backend
2631
     */
2632
0
    if (PACKET_get_1(pkt, &echtype) != 1
2633
0
        || PACKET_remaining(pkt) != 0) {
2634
0
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
2635
0
        return 0;
2636
0
    }
2637
0
    if (echtype != OSSL_ECH_INNER_CH_TYPE) {
2638
0
        SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_BAD_EXTENSION);
2639
0
        return 0;
2640
0
    }
2641
0
    s->ext.ech.inner_ech_seen_ok = 1;
2642
0
    if (s->ext.ech.success != 1 && s->ext.ech.backend != 1) {
2643
0
        SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_BAD_EXTENSION);
2644
0
        return 0;
2645
0
    }
2646
    /* yay - we're ok with this */
2647
0
    OSSL_TRACE_BEGIN(TLS)
2648
0
    {
2649
0
        BIO_printf(trc_out, "ECH seen in inner as expected.\n");
2650
0
    }
2651
0
    OSSL_TRACE_END(TLS);
2652
0
    return 1;
2653
0
}
2654
2655
/*
2656
 * Answer an ECH, as needed
2657
 * return 1 for good, 0 otherwise
2658
 *
2659
 * Return most-recent ECH config for retry, as needed.
2660
 * If doing HRR we include the confirmation value, but
2661
 * for now, we'll just add the zeros - the real octets
2662
 * will be added later via ech_calc_ech_confirm() which
2663
 * is called when constructing the server hello.
2664
 */
2665
EXT_RETURN tls_construct_stoc_ech(SSL_CONNECTION *s, WPACKET *pkt,
2666
    unsigned int context, X509 *x,
2667
    size_t chainidx)
2668
1.76k
{
2669
1.76k
    unsigned char *rcfgs = NULL;
2670
1.76k
    size_t rcfgslen = 0;
2671
1.76k
    SSL_CTX *sctx = SSL_CONNECTION_GET_CTX(s);
2672
2673
1.76k
    if (context == SSL_EXT_TLS1_3_HELLO_RETRY_REQUEST
2674
290
        && (s->ext.ech.success == 1 || s->ext.ech.backend == 1)
2675
2
        && s->ext.ech.attempted_type == TLSEXT_TYPE_ech) {
2676
2
        unsigned char eightzeros[8] = { 0, 0, 0, 0, 0, 0, 0, 0 };
2677
2678
2
        if (!WPACKET_put_bytes_u16(pkt, s->ext.ech.attempted_type)
2679
2
            || !WPACKET_sub_memcpy_u16(pkt, eightzeros, 8)) {
2680
0
            SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
2681
0
            return 0;
2682
0
        }
2683
2
        OSSL_TRACE_BEGIN(TLS)
2684
0
        {
2685
0
            BIO_printf(trc_out, "set 8 zeros for ECH accept confirm in HRR\n");
2686
0
        }
2687
2
        OSSL_TRACE_END(TLS);
2688
2
        return EXT_RETURN_SENT;
2689
2
    }
2690
    /* GREASE or error => random confirmation in HRR case */
2691
1.76k
    if (context == SSL_EXT_TLS1_3_HELLO_RETRY_REQUEST
2692
288
        && s->ext.ech.attempted_type == TLSEXT_TYPE_ech
2693
0
        && s->ext.ech.attempted == 1) {
2694
0
        unsigned char randomconf[8];
2695
2696
0
        if (RAND_bytes_ex(sctx->libctx, randomconf, 8,
2697
0
                RAND_DRBG_STRENGTH)
2698
0
            <= 0) {
2699
0
            SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
2700
0
            return 0;
2701
0
        }
2702
0
        if (!WPACKET_put_bytes_u16(pkt, s->ext.ech.attempted_type)
2703
0
            || !WPACKET_sub_memcpy_u16(pkt, randomconf, 8)) {
2704
0
            SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
2705
0
            return 0;
2706
0
        }
2707
0
        OSSL_TRACE_BEGIN(TLS)
2708
0
        {
2709
0
            BIO_printf(trc_out, "set random for ECH acccpt confirm in HRR\n");
2710
0
        }
2711
0
        OSSL_TRACE_END(TLS);
2712
0
        return EXT_RETURN_SENT;
2713
0
    }
2714
    /* in other HRR circumstances: don't set */
2715
1.76k
    if (context == SSL_EXT_TLS1_3_HELLO_RETRY_REQUEST)
2716
288
        return EXT_RETURN_NOT_SENT;
2717
    /* If in some weird state we ignore and send nothing */
2718
1.47k
    if (s->ext.ech.grease != OSSL_ECH_IS_GREASE
2719
0
        || s->ext.ech.attempted_type != TLSEXT_TYPE_ech)
2720
1.47k
        return EXT_RETURN_NOT_SENT;
2721
    /*
2722
     * If the client GREASEd, or we think it did, return the
2723
     * most-recently loaded ECHConfigList, as the value of the
2724
     * extension. Most-recently loaded can be anywhere in the
2725
     * list, depending on changing or non-changing file names.
2726
     */
2727
0
    if (s->ext.ech.es == NULL) {
2728
0
        OSSL_TRACE_BEGIN(TLS)
2729
0
        {
2730
0
            BIO_printf(trc_out, "ECH - not sending ECHConfigList to client "
2731
0
                                "even though they GREASE'd as I've no loaded configs\n");
2732
0
        }
2733
0
        OSSL_TRACE_END(TLS);
2734
0
        return EXT_RETURN_NOT_SENT;
2735
0
    }
2736
0
    if (ossl_ech_get_retry_configs(s, &rcfgs, &rcfgslen) != 1) {
2737
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
2738
0
        return 0;
2739
0
    }
2740
0
    if (rcfgslen == 0) {
2741
0
        OSSL_TRACE_BEGIN(TLS)
2742
0
        {
2743
0
            BIO_printf(trc_out, "ECH - not sending ECHConfigList to client "
2744
0
                                "even though they GREASE'd and I have configs but "
2745
0
                                "I've no configs set to be returned\n");
2746
0
        }
2747
0
        OSSL_TRACE_END(TLS);
2748
0
        OPENSSL_free(rcfgs);
2749
0
        return EXT_RETURN_NOT_SENT;
2750
0
    }
2751
0
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_ech)
2752
0
        || !WPACKET_start_sub_packet_u16(pkt)
2753
0
        || !WPACKET_sub_memcpy_u16(pkt, rcfgs, rcfgslen)
2754
0
        || !WPACKET_close(pkt)) {
2755
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
2756
0
        OPENSSL_free(rcfgs);
2757
0
        return 0;
2758
0
    }
2759
0
    OPENSSL_free(rcfgs);
2760
0
    return EXT_RETURN_SENT;
2761
0
}
2762
#endif /* END OPENSSL_NO_ECH */