Coverage Report

Created: 2026-10-28 06:28

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