Coverage Report

Created: 2026-04-09 06:50

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