Coverage Report

Created: 2026-02-14 07:20

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