Coverage Report

Created: 2026-07-12 07:21

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-2026 The OpenSSL Project Authors. All Rights Reserved.
3
 *
4
 * Licensed under the Apache License 2.0 (the "License").  You may not use
5
 * this file except in compliance with the License.  You can obtain a copy
6
 * in the file LICENSE in the source distribution or at
7
 * https://www.openssl.org/source/license.html
8
 */
9
10
#include <openssl/ocsp.h>
11
#include "../ssl_local.h"
12
#include "statem_local.h"
13
#include "internal/cryptlib.h"
14
#include "internal/ssl_unwrap.h"
15
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.12k
{
46
5.12k
    unsigned int ilen;
47
5.12k
    const unsigned char *data;
48
5.12k
    int ok;
49
50
    /* Parse the length byte */
51
5.12k
    if (!PACKET_get_1(pkt, &ilen)
52
5.10k
        || !PACKET_get_bytes(pkt, &data, ilen)) {
53
38
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_RENEGOTIATION_ENCODING_ERR);
54
38
        return 0;
55
38
    }
56
57
    /* Check that the extension matches */
58
5.08k
    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.06k
    ok = memcmp(data, s->s3.previous_client_finished,
64
5.06k
        s->s3.previous_client_finished_len);
65
5.06k
#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
66
5.06k
    if (ok) {
67
0
        if ((data[0] ^ s->s3.previous_client_finished[0]) != 0xFF) {
68
0
            ok = 0;
69
0
        }
70
0
    }
71
5.06k
#endif
72
5.06k
    if (ok) {
73
0
        SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_R_RENEGOTIATION_MISMATCH);
74
0
        return 0;
75
0
    }
76
77
5.06k
    s->s3.send_connection_binding = 1;
78
79
5.06k
    return 1;
80
5.06k
}
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
8.64k
{
108
8.64k
    unsigned int servname_type;
109
8.64k
    PACKET sni, hostname;
110
111
8.64k
    if (!PACKET_as_length_prefixed_2(pkt, &sni)
112
        /* ServerNameList must be at least 1 byte long. */
113
8.42k
        || PACKET_remaining(&sni) == 0) {
114
239
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
115
239
        return 0;
116
239
    }
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
8.40k
    if (!PACKET_get_1(&sni, &servname_type)
130
8.40k
        || servname_type != TLSEXT_NAMETYPE_host_name
131
8.37k
        || !PACKET_as_length_prefixed_2(&sni, &hostname)) {
132
159
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
133
159
        return 0;
134
159
    }
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
8.24k
    if (!s->hit || SSL_CONNECTION_IS_TLS13(s)) {
141
8.23k
        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
8.22k
        if (PACKET_contains_zero_byte(&hostname)) {
147
18
            SSLfatal(s, SSL_AD_UNRECOGNIZED_NAME, SSL_R_BAD_EXTENSION);
148
18
            return 0;
149
18
        }
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
8.20k
        OPENSSL_free(s->ext.hostname);
156
8.20k
        s->ext.hostname = NULL;
157
8.20k
        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
8.20k
        s->servername_done = 1;
163
8.20k
    } 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
7
            && PACKET_equal(&hostname, s->session->ext.hostname,
171
7
                strlen(s->session->ext.hostname));
172
14
    }
173
174
8.22k
    return 1;
175
8.24k
}
176
177
int tls_parse_ctos_maxfragmentlen(SSL_CONNECTION *s, PACKET *pkt,
178
    unsigned int context,
179
    X509 *x, size_t chainidx)
180
1.55k
{
181
1.55k
    unsigned int value;
182
183
1.55k
    if (PACKET_remaining(pkt) != 1 || !PACKET_get_1(pkt, &value)) {
184
128
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
185
128
        return 0;
186
128
    }
187
188
    /* Received |value| should be a valid max-fragment-length code. */
189
1.43k
    if (!IS_MAX_FRAGMENT_LENGTH_EXT_VALID(value)) {
190
49
        SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER,
191
49
            SSL_R_SSL3_EXT_INVALID_MAX_FRAGMENT_LENGTH);
192
49
        return 0;
193
49
    }
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.38k
    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.37k
        s->session->ext.max_fragment_len_mode = value;
215
216
1.38k
    return 1;
217
1.43k
}
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
157
{
223
157
    PACKET srp_I;
224
225
157
    if (!PACKET_as_length_prefixed_1(pkt, &srp_I)
226
94
        || PACKET_contains_zero_byte(&srp_I)) {
227
94
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
228
94
        return 0;
229
94
    }
230
231
63
    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
63
    return 1;
237
63
}
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
4.88k
{
244
4.88k
    PACKET ec_point_format_list;
245
246
4.88k
    if (!PACKET_as_length_prefixed_1(pkt, &ec_point_format_list)
247
4.76k
        || PACKET_remaining(&ec_point_format_list) == 0) {
248
127
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
249
127
        return 0;
250
127
    }
251
252
4.75k
    if (!s->hit) {
253
4.61k
        if (!PACKET_memdup(&ec_point_format_list,
254
4.61k
                &s->ext.peer_ecpointformats,
255
4.61k
                &s->ext.peer_ecpointformats_len)) {
256
0
            SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
257
0
            return 0;
258
0
        }
259
4.61k
    }
260
261
4.75k
    return 1;
262
4.75k
}
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.56k
{
268
5.56k
    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.56k
    return 1;
274
5.56k
}
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.27k
{
281
1.27k
    PACKET supported_sig_algs;
282
283
1.27k
    if (!PACKET_as_length_prefixed_2(pkt, &supported_sig_algs)
284
1.08k
        || PACKET_remaining(&supported_sig_algs) == 0) {
285
204
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
286
204
        return 0;
287
204
    }
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.07k
    if ((!s->server || (s->server && !s->hit))
295
1.06k
        && !tls1_save_sigalgs(s, &supported_sig_algs, 1)) {
296
19
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
297
19
        return 0;
298
19
    }
299
300
1.05k
    return 1;
301
1.07k
}
302
303
int tls_parse_ctos_sig_algs(SSL_CONNECTION *s, PACKET *pkt,
304
    unsigned int context, X509 *x, size_t chainidx)
305
9.89k
{
306
9.89k
    PACKET supported_sig_algs;
307
308
9.89k
    if (!PACKET_as_length_prefixed_2(pkt, &supported_sig_algs)
309
9.63k
        || PACKET_remaining(&supported_sig_algs) == 0) {
310
266
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
311
266
        return 0;
312
266
    }
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.62k
    if ((!s->server || (s->server && !s->hit))
320
9.49k
        && !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.60k
    return 1;
326
9.62k
}
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
5.68k
{
333
5.68k
    PACKET responder_id_list, exts;
334
335
    /* We ignore this in a resumption handshake */
336
5.68k
    if (s->hit)
337
30
        return 1;
338
339
    /* Not defined if we get one of these in a client Certificate */
340
5.65k
    if (x != NULL)
341
0
        return 1;
342
343
5.65k
    if (!PACKET_get_1(pkt, (unsigned int *)&s->ext.status_type)) {
344
20
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
345
20
        return 0;
346
20
    }
347
348
5.63k
    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
332
        s->ext.status_type = TLSEXT_STATUSTYPE_nothing;
353
332
        return 1;
354
332
    }
355
356
5.30k
    if (!PACKET_get_length_prefixed_2(pkt, &responder_id_list)) {
357
78
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
358
78
        return 0;
359
78
    }
360
361
    /*
362
     * We remove any OCSP_RESPIDs from a previous handshake
363
     * to prevent unbounded memory growth - CVE-2016-6304
364
     */
365
5.22k
    sk_OCSP_RESPID_pop_free(s->ext.ocsp.ids, OCSP_RESPID_free);
366
5.22k
    if (PACKET_remaining(&responder_id_list) > 0) {
367
2.64k
        s->ext.ocsp.ids = sk_OCSP_RESPID_new_null();
368
2.64k
        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
2.64k
    } else {
373
2.57k
        s->ext.ocsp.ids = NULL;
374
2.57k
    }
375
376
5.34k
    while (PACKET_remaining(&responder_id_list) > 0) {
377
2.75k
        OCSP_RESPID *id;
378
2.75k
        PACKET responder_id;
379
2.75k
        const unsigned char *id_data;
380
381
2.75k
        if (!PACKET_get_length_prefixed_2(&responder_id_list, &responder_id)
382
2.67k
            || PACKET_remaining(&responder_id) == 0) {
383
92
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
384
92
            return 0;
385
92
        }
386
387
2.66k
        id_data = PACKET_data(&responder_id);
388
2.66k
        id = d2i_OCSP_RESPID(NULL, &id_data,
389
2.66k
            (int)PACKET_remaining(&responder_id));
390
2.66k
        if (id == NULL) {
391
2.47k
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
392
2.47k
            return 0;
393
2.47k
        }
394
395
184
        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
122
        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
122
    }
409
410
    /* Read in request_extensions */
411
2.59k
    if (!PACKET_as_length_prefixed_2(pkt, &exts)) {
412
77
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
413
77
        return 0;
414
77
    }
415
416
2.51k
    if (PACKET_remaining(&exts) > 0) {
417
1.02k
        const unsigned char *ext_data = PACKET_data(&exts);
418
419
1.02k
        sk_X509_EXTENSION_pop_free(s->ext.ocsp.exts,
420
1.02k
            X509_EXTENSION_free);
421
1.02k
        s->ext.ocsp.exts = d2i_X509_EXTENSIONS(NULL, &ext_data, (int)PACKET_remaining(&exts));
422
1.02k
        if (s->ext.ocsp.exts == NULL || ext_data != PACKET_end(&exts)) {
423
1.01k
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
424
1.01k
            return 0;
425
1.01k
        }
426
1.02k
    }
427
428
1.50k
    return 1;
429
2.51k
}
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
16
{
436
    /*
437
     * We shouldn't accept this extension on a
438
     * renegotiation.
439
     */
440
16
    if (SSL_IS_FIRST_HANDSHAKE(s))
441
16
        s->s3.npn_seen = 1;
442
443
16
    return 1;
444
16
}
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
431
{
454
431
    PACKET protocol_list, save_protocol_list, protocol;
455
456
431
    if (!SSL_IS_FIRST_HANDSHAKE(s))
457
0
        return 1;
458
459
431
    if (!PACKET_as_length_prefixed_2(pkt, &protocol_list)
460
314
        || PACKET_remaining(&protocol_list) < 2) {
461
128
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
462
128
        return 0;
463
128
    }
464
465
303
    save_protocol_list = protocol_list;
466
2.56k
    do {
467
        /* Protocol names can't be empty. */
468
2.56k
        if (!PACKET_get_length_prefixed_1(&protocol_list, &protocol)
469
2.49k
            || PACKET_remaining(&protocol) == 0) {
470
113
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
471
113
            return 0;
472
113
        }
473
2.56k
    } while (PACKET_remaining(&protocol_list) != 0);
474
475
190
    OPENSSL_free(s->s3.alpn_proposed);
476
190
    s->s3.alpn_proposed = NULL;
477
190
    s->s3.alpn_proposed_len = 0;
478
190
    if (!PACKET_memdup(&save_protocol_list,
479
190
            &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
190
    return 1;
485
190
}
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.27k
{
491
1.27k
    STACK_OF(SRTP_PROTECTION_PROFILE) *srvr;
492
1.27k
    unsigned int ct, mki_len, id;
493
1.27k
    int i, srtp_pref;
494
1.27k
    PACKET subpkt;
495
1.27k
    SSL *ssl = SSL_CONNECTION_GET_SSL(s);
496
497
    /* Ignore this if we have no SRTP profiles */
498
1.27k
    if (SSL_get_srtp_profiles(ssl) == NULL)
499
1.27k
        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.77k
{
558
1.77k
    if (!(s->options & SSL_OP_NO_ENCRYPT_THEN_MAC))
559
1.77k
        s->ext.use_etm = 1;
560
561
1.77k
    return 1;
562
1.77k
}
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.49k
{
572
1.49k
#ifndef OPENSSL_NO_TLS1_3
573
1.49k
    PACKET psk_kex_modes;
574
1.49k
    unsigned int mode;
575
576
1.49k
    if (!PACKET_as_length_prefixed_1(pkt, &psk_kex_modes)
577
1.46k
        || PACKET_remaining(&psk_kex_modes) == 0) {
578
44
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
579
44
        return 0;
580
44
    }
581
582
9.48k
    while (PACKET_get_1(&psk_kex_modes, &mode)) {
583
8.03k
        if (mode == TLSEXT_KEX_MODE_KE_DHE)
584
2.56k
            s->ext.psk_kex_mode |= TLSEXT_KEX_MODE_FLAG_KE_DHE;
585
5.47k
        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.03k
    }
589
590
1.45k
    if (((s->ext.psk_kex_mode & TLSEXT_KEX_MODE_FLAG_KE) != 0)
591
0
        && (s->options & SSL_OP_PREFER_NO_DHE_KEX) != 0) {
592
593
        /*
594
         * If NO_DHE is supported and preferred, then we only remember this
595
         * mode. DHE PSK will not be used for sure, because in any case where
596
         * it would be supported (i.e. if a key share is present), NO_DHE would
597
         * be supported as well. As the latter is preferred it would be
598
         * chosen. By removing DHE PSK here, we don't have to deal with the
599
         * SSL_OP_PREFER_NO_DHE_KEX option in any other place.
600
         */
601
0
        s->ext.psk_kex_mode = TLSEXT_KEX_MODE_FLAG_KE;
602
0
    }
603
604
1.45k
#endif
605
606
1.45k
    return 1;
607
1.49k
}
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.54k
{
622
    /* Accept the key share group */
623
1.54k
    s->s3.group_id = ksgroup;
624
1.54k
    s->s3.group_id_candidate = ksgroup;
625
    /* Cache the selected group ID in the SSL_SESSION */
626
1.54k
    s->session->kex_group = ksgroup;
627
1.54k
    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.54k
    if (tls13_set_encoded_pub_key(s->s3.peer_tmp,
634
1.54k
            PACKET_data(encoded_pubkey),
635
1.54k
            PACKET_remaining(encoded_pubkey))
636
1.54k
        <= 0) {
637
37
        SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_BAD_ECPOINT);
638
37
        return 0;
639
37
    }
640
1.50k
    return 1;
641
1.54k
}
642
643
2.10k
#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.32k
{
657
1.32k
    PACKET encoded_pubkey;
658
1.32k
    size_t key_share_pos = 0;
659
1.32k
    size_t previous_key_share_pos = 0;
660
1.32k
    unsigned int group_id = 0;
661
662
    /* Prepare memory to hold the extracted key share groups and related pubkeys */
663
1.32k
    *keyshares_arr = OPENSSL_malloc_array(*keyshares_max,
664
1.32k
        sizeof(**keyshares_arr));
665
1.32k
    if (*keyshares_arr == NULL) {
666
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
667
0
        goto failure;
668
0
    }
669
1.32k
    *encoded_pubkey_arr = OPENSSL_malloc_array(*keyshares_max,
670
1.32k
        sizeof(**encoded_pubkey_arr));
671
1.32k
    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.65k
    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.43k
            || PACKET_remaining(&encoded_pubkey) == 0) {
681
47
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_LENGTH_MISMATCH);
682
47
            goto failure;
683
47
        }
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.43k
        if (s->s3.group_id != 0
690
76
            && (group_id != s->s3.group_id
691
50
                || PACKET_remaining(key_share_list) != 0)) {
692
28
            SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_BAD_KEY_SHARE);
693
28
            goto failure;
694
28
        }
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.40k
        if (!check_in_list(s, group_id, clntgroups, clnt_num_groups, 0, &key_share_pos)) {
705
19
            SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_BAD_KEY_SHARE);
706
19
            goto failure;
707
19
        }
708
709
1.38k
        if (key_share_pos < previous_key_share_pos)
710
1.38k
            OSSL_TRACE1(TLS, "key share group id %d is out of RFC 8446 order\n", group_id);
711
712
1.38k
        previous_key_share_pos = key_share_pos;
713
714
1.38k
        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
48
            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
46
            return EXTRACTION_SUCCESS_HRR;
725
48
        }
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.33k
        if (!check_in_list(s, group_id, srvrgroups, srvr_num_groups, 1, NULL)
732
964
            || !tls_group_allowed(s, group_id, SSL_SECOP_CURVE_SUPPORTED)
733
964
            || !tls_valid_group(s, group_id, TLS1_3_VERSION, TLS1_3_VERSION,
734
964
                0, NULL)) {
735
            /* Share not suitable or not supported, check next share */
736
372
            continue;
737
372
        }
738
739
        /* Memorize this key share group ID and its encoded point */
740
964
        (*keyshares_arr)[*keyshares_cnt] = group_id;
741
964
        (*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
964
        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
964
    }
772
773
1.18k
    return EXTRACTION_SUCCESS;
774
775
96
failure:
776
    /* Fatal error -> free any allocated memory and return 0 */
777
96
    OPENSSL_free(*keyshares_arr);
778
96
    OPENSSL_free(*encoded_pubkey_arr);
779
96
    return EXTRACTION_FAILURE;
780
1.32k
}
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
6.90k
{
796
6.90k
    uint16_t current_group;
797
6.90k
    size_t group_idx = prio_num_groups;
798
6.90k
    size_t new_group_idx = 0;
799
800
6.90k
    *candidate_group_idx = 0;
801
6.90k
    *prio_group_idx = 0;
802
6.90k
    *selected_group = 0;
803
804
19.8k
    for (current_group = 0; current_group < candidate_num_groups; current_group++) {
805
12.9k
        if (!check_in_list(s, candidate_groups[current_group], prio_groups,
806
12.9k
                prio_num_groups, 1, &new_group_idx)
807
1.96k
            || !tls_group_allowed(s, candidate_groups[current_group],
808
1.96k
                SSL_SECOP_CURVE_SUPPORTED)
809
1.96k
            || !tls_valid_group(s, candidate_groups[current_group], TLS1_3_VERSION,
810
1.96k
                TLS1_3_VERSION, 0, NULL))
811
            /* No overlap or group not suitable, check next group */
812
10.9k
            continue;
813
814
        /*
815
         * is the found new_group_idx earlier in the priority list than
816
         * initial or last group_idx?
817
         */
818
1.96k
        if (new_group_idx < group_idx) {
819
1.85k
            group_idx = new_group_idx;
820
1.85k
            *candidate_group_idx = current_group;
821
1.85k
            *prio_group_idx = (int)group_idx;
822
1.85k
            *selected_group = prio_groups[group_idx];
823
1.85k
        }
824
1.96k
    }
825
6.90k
}
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.10k
{
831
2.10k
#ifndef OPENSSL_NO_TLS1_3
832
2.10k
    PACKET key_share_list;
833
2.10k
    const uint16_t *clntgroups, *srvrgroups;
834
2.10k
    const size_t *srvrtuples;
835
2.10k
    uint16_t *first_group_in_tuple;
836
2.10k
    size_t clnt_num_groups, srvr_num_groups, srvr_num_tuples;
837
2.10k
    PACKET *encoded_pubkey_arr = NULL;
838
2.10k
    uint16_t *keyshares_arr = NULL;
839
2.10k
    size_t keyshares_cnt = 0;
840
2.10k
    size_t keyshares_max = GROUPLIST_INCREMENT;
841
    /* We conservatively assume that we did not find a suitable group */
842
2.10k
    uint16_t group_id_candidate = 0;
843
2.10k
    KS_EXTRACTION_RESULT ks_extraction_result;
844
2.10k
    size_t current_tuple;
845
2.10k
    int ret = 0;
846
847
2.10k
    s->s3.group_id_candidate = 0;
848
2.10k
    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.10k
    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.10k
    if (!PACKET_as_length_prefixed_2(pkt, &key_share_list)) {
858
42
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_LENGTH_MISMATCH);
859
42
        return 0;
860
42
    }
861
862
    /* Get list of server supported groups and the group tuples */
863
2.06k
    tls1_get_supported_groups(s, &srvrgroups, &srvr_num_groups);
864
2.06k
    tls1_get_group_tuples(s, &srvrtuples, &srvr_num_tuples);
865
    /* Get the clients list of supported groups. */
866
2.06k
    tls1_get_peer_groups(s, &clntgroups, &clnt_num_groups);
867
868
2.06k
    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
4
        SSLfatal(s, SSL_AD_MISSING_EXTENSION,
875
4
            SSL_R_MISSING_SUPPORTED_GROUPS_EXTENSION);
876
4
        return 0;
877
4
    }
878
879
2.05k
    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.05k
    ks_extraction_result = extract_keyshares(s,
891
2.05k
        &key_share_list,
892
2.05k
        clntgroups, clnt_num_groups,
893
2.05k
        srvrgroups, srvr_num_groups,
894
2.05k
        &keyshares_arr, &encoded_pubkey_arr,
895
2.05k
        &keyshares_cnt, &keyshares_max);
896
897
2.05k
    if (ks_extraction_result == EXTRACTION_FAILURE) /* Fatal error during tests */
898
131
        return 0; /* Memory already freed and SSLfatal already called */
899
1.92k
    if (ks_extraction_result == EXTRACTION_SUCCESS_HRR) /* Successful HRR */
900
72
        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.85k
    first_group_in_tuple = (uint16_t *)srvrgroups;
920
4.19k
    for (current_tuple = 0; current_tuple < srvr_num_tuples; current_tuple++) {
921
4.18k
        size_t number_of_groups_in_tuple = srvrtuples[current_tuple];
922
4.18k
        int prio_group_idx = 0, candidate_group_idx = 0;
923
924
        /* Server or client preference ? */
925
4.18k
        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.18k
        } else { /* We have client preference */
968
4.18k
            check_overlap(s,
969
4.18k
                keyshares_arr, keyshares_cnt,
970
4.18k
                first_group_in_tuple, number_of_groups_in_tuple,
971
4.18k
                &prio_group_idx, &candidate_group_idx,
972
4.18k
                &group_id_candidate);
973
4.18k
            if (group_id_candidate > 0) {
974
1.46k
                if (!tls_accept_ksgroup(s, group_id_candidate, &encoded_pubkey_arr[prio_group_idx]))
975
34
                    goto err;
976
1.43k
                goto end;
977
2.71k
            } else {
978
2.71k
                check_overlap(s,
979
2.71k
                    clntgroups, clnt_num_groups,
980
2.71k
                    first_group_in_tuple, number_of_groups_in_tuple,
981
2.71k
                    &prio_group_idx, &candidate_group_idx,
982
2.71k
                    &group_id_candidate);
983
2.71k
                if (group_id_candidate > 0) {
984
377
                    s->s3.group_id_candidate = group_id_candidate;
985
377
                    goto end;
986
2.34k
                } else {
987
2.34k
                    first_group_in_tuple = &first_group_in_tuple[number_of_groups_in_tuple];
988
2.34k
                    continue;
989
2.34k
                }
990
2.71k
            }
991
4.18k
        }
992
4.18k
    }
993
994
1.89k
end:
995
1.89k
    ret = 1;
996
997
1.92k
err:
998
1.92k
    OPENSSL_free(keyshares_arr);
999
1.92k
    OPENSSL_free(encoded_pubkey_arr);
1000
1.92k
    return ret;
1001
1002
0
#endif
1003
1004
0
    return 1;
1005
1.89k
}
1006
1007
int tls_parse_ctos_cookie(SSL_CONNECTION *s, PACKET *pkt, unsigned int context,
1008
    X509 *x, size_t chainidx)
1009
100
{
1010
100
#ifndef OPENSSL_NO_TLS1_3
1011
100
    unsigned int format, version, key_share, group_id;
1012
100
    EVP_MD_CTX *hctx;
1013
100
    EVP_PKEY *pkey;
1014
100
    PACKET cookie, raw, chhash, appcookie;
1015
100
    WPACKET hrrpkt;
1016
100
    const unsigned char *data, *mdin, *ciphdata;
1017
100
    unsigned char hmac[SHA256_DIGEST_LENGTH];
1018
100
    unsigned char hrr[MAX_HRR_SIZE];
1019
100
    size_t rawlen, hmaclen, hrrlen, ciphlen;
1020
100
    uint64_t tm, now;
1021
100
    SSL *ssl = SSL_CONNECTION_GET_SSL(s);
1022
100
    SSL_CTX *sctx = SSL_CONNECTION_GET_CTX(s);
1023
1024
    /* Ignore any cookie if we're not set up to verify it */
1025
100
    if (sctx->verify_stateless_cookie_cb == NULL
1026
0
        || (s->s3.flags & TLS1_FLAGS_STATELESS) == 0)
1027
100
        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
19.2k
{
1224
19.2k
    PACKET supported_groups_list;
1225
1226
    /* Each group is 2 bytes and we must have at least 1. */
1227
19.2k
    if (!PACKET_as_length_prefixed_2(pkt, &supported_groups_list)
1228
19.0k
        || PACKET_remaining(&supported_groups_list) == 0
1229
19.0k
        || (PACKET_remaining(&supported_groups_list) % 2) != 0) {
1230
216
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
1231
216
        return 0;
1232
216
    }
1233
1234
19.0k
    if (!s->hit || SSL_CONNECTION_IS_TLS13(s)) {
1235
18.9k
        OPENSSL_free(s->ext.peer_supportedgroups);
1236
18.9k
        s->ext.peer_supportedgroups = NULL;
1237
18.9k
        s->ext.peer_supportedgroups_len = 0;
1238
18.9k
        if (!tls1_save_u16(&supported_groups_list,
1239
18.9k
                &s->ext.peer_supportedgroups,
1240
18.9k
                &s->ext.peer_supportedgroups_len)) {
1241
0
            SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1242
0
            return 0;
1243
0
        }
1244
18.9k
    }
1245
1246
19.0k
    return 1;
1247
19.0k
}
1248
1249
int tls_parse_ctos_ems(SSL_CONNECTION *s, PACKET *pkt, unsigned int context,
1250
    X509 *x, size_t chainidx)
1251
4.47k
{
1252
    /* The extension must always be empty */
1253
4.47k
    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.46k
    if (s->options & SSL_OP_NO_EXTENDED_MASTER_SECRET)
1259
0
        return 1;
1260
1261
4.46k
    s->s3.flags |= TLS1_FLAGS_RECEIVED_EXTMS;
1262
1263
4.46k
    return 1;
1264
4.46k
}
1265
1266
int tls_parse_ctos_early_data(SSL_CONNECTION *s, PACKET *pkt, unsigned int context,
1267
    X509 *x, size_t chainidx)
1268
2.52k
{
1269
2.52k
    if (PACKET_remaining(pkt) != 0) {
1270
6
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
1271
6
        return 0;
1272
6
    }
1273
1274
2.51k
    if (s->hello_retry_request != SSL_HRR_NONE) {
1275
7
        SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_BAD_EXTENSION);
1276
7
        return 0;
1277
7
    }
1278
1279
2.50k
    return 1;
1280
2.51k
}
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
410
{
1313
410
    PACKET identities, binders, binder;
1314
410
    size_t binderoffset;
1315
410
    int hashsize;
1316
410
    SSL_SESSION *sess = NULL;
1317
410
    unsigned int id, i, ext = 0;
1318
410
    const EVP_MD *md = NULL;
1319
410
    SSL_CTX *sctx = SSL_CONNECTION_GET_CTX(s);
1320
410
    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
410
    if ((s->ext.psk_kex_mode
1327
410
            & (TLSEXT_KEX_MODE_FLAG_KE | TLSEXT_KEX_MODE_FLAG_KE_DHE))
1328
410
        == 0)
1329
6
        return 1;
1330
1331
404
    if (!PACKET_get_length_prefixed_2(pkt, &identities)) {
1332
14
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
1333
14
        return 0;
1334
14
    }
1335
1336
390
    s->ext.ticket_expected = 0;
1337
818
    for (id = 0; PACKET_remaining(&identities) != 0; id++) {
1338
634
        PACKET identity;
1339
634
        unsigned long ticket_agel;
1340
634
        size_t idlen;
1341
1342
634
        if (!PACKET_get_length_prefixed_2(&identities, &identity)
1343
545
            || !PACKET_get_net_4(&identities, &ticket_agel)) {
1344
97
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
1345
97
            return 0;
1346
97
        }
1347
1348
537
        idlen = PACKET_remaining(&identity);
1349
537
        if (idlen == 0) {
1350
12
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
1351
12
            return 0;
1352
12
        }
1353
525
        if (s->psk_find_session_cb != NULL
1354
0
            && !s->psk_find_session_cb(ussl, PACKET_data(&identity), idlen,
1355
0
                &sess)) {
1356
0
            SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_R_BAD_EXTENSION);
1357
0
            return 0;
1358
0
        }
1359
1360
525
#ifndef OPENSSL_NO_PSK
1361
525
        if (sess == NULL
1362
525
            && s->psk_server_callback != NULL
1363
0
            && idlen <= PSK_MAX_IDENTITY_LEN) {
1364
0
            char *pskid = NULL;
1365
0
            unsigned char pskdata[PSK_MAX_PSK_LEN];
1366
0
            unsigned int pskdatalen;
1367
1368
0
            if (!PACKET_strndup(&identity, &pskid)) {
1369
0
                SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1370
0
                return 0;
1371
0
            }
1372
0
            pskdatalen = s->psk_server_callback(ussl, pskid, pskdata,
1373
0
                sizeof(pskdata));
1374
0
            OPENSSL_free(pskid);
1375
0
            if (pskdatalen > PSK_MAX_PSK_LEN) {
1376
0
                SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1377
0
                return 0;
1378
0
            } else if (pskdatalen > 0) {
1379
0
                const SSL_CIPHER *cipher;
1380
0
                const unsigned char tls13_aes128gcmsha256_id[] = { 0x13, 0x01 };
1381
1382
                /*
1383
                 * We found a PSK using an old style callback. We don't know
1384
                 * the digest so we default to SHA256 as per the TLSv1.3 spec
1385
                 */
1386
0
                cipher = SSL_CIPHER_find(SSL_CONNECTION_GET_SSL(s),
1387
0
                    tls13_aes128gcmsha256_id);
1388
0
                if (cipher == NULL) {
1389
0
                    OPENSSL_cleanse(pskdata, pskdatalen);
1390
0
                    SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1391
0
                    return 0;
1392
0
                }
1393
1394
0
                sess = SSL_SESSION_new();
1395
0
                if (sess == NULL
1396
0
                    || !SSL_SESSION_set1_master_key(sess, pskdata,
1397
0
                        pskdatalen)
1398
0
                    || !SSL_SESSION_set_cipher(sess, cipher)
1399
0
                    || !SSL_SESSION_set_protocol_version(sess,
1400
0
                        TLS1_3_VERSION)) {
1401
0
                    OPENSSL_cleanse(pskdata, pskdatalen);
1402
0
                    SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1403
0
                    goto err;
1404
0
                }
1405
0
                OPENSSL_cleanse(pskdata, pskdatalen);
1406
0
            }
1407
0
        }
1408
525
#endif /* OPENSSL_NO_PSK */
1409
1410
525
        if (sess != NULL) {
1411
            /* We found a PSK */
1412
0
            SSL_SESSION *sesstmp = ssl_session_dup(sess, 0);
1413
1414
0
            if (sesstmp == NULL) {
1415
0
                SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1416
0
                goto err;
1417
0
            }
1418
0
            SSL_SESSION_free(sess);
1419
0
            sess = sesstmp;
1420
1421
            /*
1422
             * We've just been told to use this session for this context so
1423
             * make sure the sid_ctx matches up.
1424
             */
1425
0
            memcpy(sess->sid_ctx, s->sid_ctx, s->sid_ctx_length);
1426
0
            sess->sid_ctx_length = s->sid_ctx_length;
1427
0
            ext = 1;
1428
0
            if (id == 0)
1429
0
                s->ext.early_data_ok = 1;
1430
0
            s->ext.ticket_expected = 1;
1431
525
        } else {
1432
525
            OSSL_TIME t, age, expire;
1433
525
            int ret;
1434
1435
            /*
1436
             * If we are using anti-replay protection then we behave as if
1437
             * SSL_OP_NO_TICKET is set - we are caching tickets anyway so there
1438
             * is no point in using full stateless tickets.
1439
             */
1440
525
            if ((s->options & SSL_OP_NO_TICKET) != 0
1441
525
                || (s->max_early_data > 0
1442
0
                    && (s->options & SSL_OP_NO_ANTI_REPLAY) == 0))
1443
0
                ret = tls_get_stateful_ticket(s, &identity, &sess);
1444
525
            else
1445
525
                ret = tls_decrypt_ticket(s, PACKET_data(&identity),
1446
525
                    PACKET_remaining(&identity), NULL, 0,
1447
525
                    &sess);
1448
1449
525
            if (ret == SSL_TICKET_EMPTY) {
1450
0
                SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
1451
0
                goto err;
1452
0
            }
1453
1454
525
            if (ret == SSL_TICKET_FATAL_ERR_MALLOC
1455
525
                || ret == SSL_TICKET_FATAL_ERR_OTHER) {
1456
0
                SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1457
0
                goto err;
1458
0
            }
1459
525
            if (ret == SSL_TICKET_NONE || ret == SSL_TICKET_NO_DECRYPT)
1460
277
                continue;
1461
1462
            /* Check for replay */
1463
248
            if (s->max_early_data > 0
1464
0
                && (s->options & SSL_OP_NO_ANTI_REPLAY) == 0
1465
0
                && !SSL_CTX_remove_session(s->session_ctx, sess)) {
1466
0
                SSL_SESSION_free(sess);
1467
0
                sess = NULL;
1468
0
                continue;
1469
0
            }
1470
1471
248
            age = ossl_time_subtract(ossl_ms2time(ticket_agel),
1472
248
                ossl_ms2time(sess->ext.tick_age_add));
1473
248
            t = ossl_time_subtract(ossl_time_now(), sess->time);
1474
1475
            /*
1476
             * Although internally we use OSS_TIME which has ns granularity,
1477
             * when SSL_SESSION structures are serialised/deserialised we use
1478
             * second granularity for the sess->time field. Therefore it could
1479
             * appear that the client's ticket age is longer than ours (our
1480
             * ticket age calculation should always be slightly longer than the
1481
             * client's due to the network latency). Therefore we add 1000ms to
1482
             * our age calculation to adjust for rounding errors.
1483
             */
1484
248
            expire = ossl_time_add(t, ossl_ms2time(1000));
1485
1486
248
            if (id == 0
1487
246
                && ossl_time_compare(sess->timeout, t) >= 0
1488
167
                && ossl_time_compare(age, expire) <= 0
1489
63
                && ossl_time_compare(ossl_time_add(age, TICKET_AGE_ALLOWANCE),
1490
63
                       expire)
1491
63
                    >= 0) {
1492
                /*
1493
                 * Ticket age is within tolerance and not expired. We allow it
1494
                 * for early data
1495
                 */
1496
63
                s->ext.early_data_ok = 1;
1497
63
            }
1498
248
        }
1499
1500
248
        md = ssl_md(sctx, sess->cipher->algorithm2);
1501
248
        if (md == NULL) {
1502
0
            SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1503
0
            goto err;
1504
0
        }
1505
248
        if (!EVP_MD_is_a(md,
1506
248
                EVP_MD_get0_name(ssl_md(sctx,
1507
248
                    s->s3.tmp.new_cipher->algorithm2)))) {
1508
            /* The ciphersuite is not compatible with this session. */
1509
151
            SSL_SESSION_free(sess);
1510
151
            sess = NULL;
1511
151
            s->ext.early_data_ok = 0;
1512
            /*
1513
             * We fall back to a full handshake. The new session ticket will be
1514
             * issued to the client with the newly negotiated ciphersuite,
1515
             * allowing successful resumption on future connections.
1516
             */
1517
151
            s->ext.ticket_expected = 1;
1518
151
            continue;
1519
151
        }
1520
97
        break;
1521
248
    }
1522
1523
281
    if (sess == NULL)
1524
184
        return 1;
1525
1526
97
    binderoffset = PACKET_data(pkt) - (const unsigned char *)s->init_buf->data;
1527
97
    hashsize = EVP_MD_get_size(md);
1528
97
    if (hashsize <= 0)
1529
0
        goto err;
1530
1531
97
    if (!PACKET_get_length_prefixed_2(pkt, &binders)) {
1532
58
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
1533
58
        goto err;
1534
58
    }
1535
1536
66
    for (i = 0; i <= id; i++) {
1537
39
        if (!PACKET_get_length_prefixed_1(&binders, &binder)) {
1538
12
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
1539
12
            goto err;
1540
12
        }
1541
39
    }
1542
1543
27
    if (PACKET_remaining(&binder) != (size_t)hashsize) {
1544
8
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
1545
8
        goto err;
1546
8
    }
1547
19
    if (tls_psk_do_binder(s, md, (const unsigned char *)s->init_buf->data,
1548
19
            binderoffset, PACKET_data(&binder), NULL, sess, 0,
1549
19
            ext)
1550
19
        != 1) {
1551
        /* SSLfatal() already called */
1552
16
        goto err;
1553
16
    }
1554
1555
3
    s->ext.tick_identity = id;
1556
1557
3
    SSL_SESSION_free(s->session);
1558
3
    s->session = sess;
1559
3
    return 1;
1560
94
err:
1561
94
    SSL_SESSION_free(sess);
1562
94
    return 0;
1563
19
}
1564
1565
int tls_parse_ctos_post_handshake_auth(SSL_CONNECTION *s, PACKET *pkt,
1566
    ossl_unused unsigned int context,
1567
    ossl_unused X509 *x,
1568
    ossl_unused size_t chainidx)
1569
156
{
1570
156
    if (PACKET_remaining(pkt) != 0) {
1571
8
        SSLfatal(s, SSL_AD_DECODE_ERROR,
1572
8
            SSL_R_POST_HANDSHAKE_AUTH_ENCODING_ERR);
1573
8
        return 0;
1574
8
    }
1575
1576
148
    s->post_handshake_auth = SSL_PHA_EXT_RECEIVED;
1577
1578
148
    return 1;
1579
156
}
1580
1581
/*
1582
 * Add the server's renegotiation binding
1583
 */
1584
EXT_RETURN tls_construct_stoc_renegotiate(SSL_CONNECTION *s, WPACKET *pkt,
1585
    unsigned int context, X509 *x,
1586
    size_t chainidx)
1587
25.1k
{
1588
25.1k
    if (!s->s3.send_connection_binding)
1589
17.4k
        return EXT_RETURN_NOT_SENT;
1590
1591
    /* Still add this even if SSL_OP_NO_RENEGOTIATION is set */
1592
7.73k
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_renegotiate)
1593
7.73k
        || !WPACKET_start_sub_packet_u16(pkt)
1594
7.73k
        || !WPACKET_start_sub_packet_u8(pkt)
1595
7.73k
        || !WPACKET_memcpy(pkt, s->s3.previous_client_finished,
1596
7.73k
            s->s3.previous_client_finished_len)
1597
7.73k
        || !WPACKET_memcpy(pkt, s->s3.previous_server_finished,
1598
7.73k
            s->s3.previous_server_finished_len)
1599
7.73k
        || !WPACKET_close(pkt)
1600
7.73k
        || !WPACKET_close(pkt)) {
1601
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1602
0
        return EXT_RETURN_FAIL;
1603
0
    }
1604
1605
7.73k
    return EXT_RETURN_SENT;
1606
7.73k
}
1607
1608
EXT_RETURN tls_construct_stoc_server_name(SSL_CONNECTION *s, WPACKET *pkt,
1609
    unsigned int context, X509 *x,
1610
    size_t chainidx)
1611
27.9k
{
1612
27.9k
    if (s->servername_done != 1)
1613
27.9k
        return EXT_RETURN_NOT_SENT;
1614
1615
    /*
1616
     * Prior to TLSv1.3 we ignore any SNI in the current handshake if resuming.
1617
     * We just use the servername from the initial handshake.
1618
     */
1619
0
    if (s->hit && !SSL_CONNECTION_IS_TLS13(s))
1620
0
        return EXT_RETURN_NOT_SENT;
1621
1622
0
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_server_name)
1623
0
        || !WPACKET_put_bytes_u16(pkt, 0)) {
1624
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1625
0
        return EXT_RETURN_FAIL;
1626
0
    }
1627
1628
0
    return EXT_RETURN_SENT;
1629
0
}
1630
1631
/* Add/include the server's max fragment len extension into ServerHello */
1632
EXT_RETURN tls_construct_stoc_maxfragmentlen(SSL_CONNECTION *s, WPACKET *pkt,
1633
    unsigned int context, X509 *x,
1634
    size_t chainidx)
1635
27.9k
{
1636
27.9k
    if (!USE_MAX_FRAGMENT_LENGTH_EXT(s->session))
1637
26.6k
        return EXT_RETURN_NOT_SENT;
1638
1639
    /*-
1640
     * 4 bytes for this extension type and extension length
1641
     * 1 byte for the Max Fragment Length code value.
1642
     */
1643
1.31k
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_max_fragment_length)
1644
1.31k
        || !WPACKET_start_sub_packet_u16(pkt)
1645
1.31k
        || !WPACKET_put_bytes_u8(pkt, s->session->ext.max_fragment_len_mode)
1646
1.31k
        || !WPACKET_close(pkt)) {
1647
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1648
0
        return EXT_RETURN_FAIL;
1649
0
    }
1650
1651
1.31k
    return EXT_RETURN_SENT;
1652
1.31k
}
1653
1654
EXT_RETURN tls_construct_stoc_ec_pt_formats(SSL_CONNECTION *s, WPACKET *pkt,
1655
    unsigned int context, X509 *x,
1656
    size_t chainidx)
1657
20.5k
{
1658
20.5k
    unsigned long alg_k = s->s3.tmp.new_cipher->algorithm_mkey;
1659
20.5k
    unsigned long alg_a = s->s3.tmp.new_cipher->algorithm_auth;
1660
20.5k
    int using_ecc = ((alg_k & SSL_kECDHE) || (alg_a & SSL_aECDSA))
1661
9.06k
        && (s->ext.peer_ecpointformats != NULL);
1662
20.5k
    const unsigned char *plist;
1663
20.5k
    size_t plistlen;
1664
1665
20.5k
    if (!using_ecc)
1666
18.0k
        return EXT_RETURN_NOT_SENT;
1667
1668
2.49k
    tls1_get_formatlist(s, &plist, &plistlen);
1669
2.49k
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_ec_point_formats)
1670
2.49k
        || !WPACKET_start_sub_packet_u16(pkt)
1671
2.49k
        || !WPACKET_sub_memcpy_u8(pkt, plist, plistlen)
1672
2.49k
        || !WPACKET_close(pkt)) {
1673
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1674
0
        return EXT_RETURN_FAIL;
1675
0
    }
1676
1677
2.49k
    return EXT_RETURN_SENT;
1678
2.49k
}
1679
1680
EXT_RETURN tls_construct_stoc_supported_groups(SSL_CONNECTION *s, WPACKET *pkt,
1681
    unsigned int context, X509 *x,
1682
    size_t chainidx)
1683
27.9k
{
1684
27.9k
    const uint16_t *groups;
1685
27.9k
    size_t numgroups, i, first = 1;
1686
27.9k
    int version;
1687
1688
    /* s->s3.group_id is non zero if we accepted a key_share */
1689
27.9k
    if (s->s3.group_id == 0)
1690
25.1k
        return EXT_RETURN_NOT_SENT;
1691
1692
    /* Get our list of supported groups */
1693
2.80k
    tls1_get_supported_groups(s, &groups, &numgroups);
1694
2.80k
    if (numgroups == 0) {
1695
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1696
0
        return EXT_RETURN_FAIL;
1697
0
    }
1698
1699
    /* Copy group ID if supported */
1700
2.80k
    version = SSL_version(SSL_CONNECTION_GET_SSL(s));
1701
15.9k
    for (i = 0; i < numgroups; i++) {
1702
14.5k
        uint16_t group = groups[i];
1703
1704
14.5k
        if (tls_valid_group(s, group, version, version, 0, NULL)
1705
14.5k
            && tls_group_allowed(s, group, SSL_SECOP_CURVE_SUPPORTED)) {
1706
14.5k
            if (first) {
1707
                /*
1708
                 * Check if the client is already using our preferred group. If
1709
                 * so we don't need to add this extension
1710
                 */
1711
2.80k
                if (s->s3.group_id == group)
1712
1.36k
                    return EXT_RETURN_NOT_SENT;
1713
1714
                /* Add extension header */
1715
1.44k
                if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_supported_groups)
1716
                    /* Sub-packet for supported_groups extension */
1717
1.44k
                    || !WPACKET_start_sub_packet_u16(pkt)
1718
1.44k
                    || !WPACKET_start_sub_packet_u16(pkt)) {
1719
0
                    SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1720
0
                    return EXT_RETURN_FAIL;
1721
0
                }
1722
1723
1.44k
                first = 0;
1724
1.44k
            }
1725
13.1k
            if (!WPACKET_put_bytes_u16(pkt, group)) {
1726
0
                SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1727
0
                return EXT_RETURN_FAIL;
1728
0
            }
1729
13.1k
        }
1730
14.5k
    }
1731
1732
1.44k
    if (!WPACKET_close(pkt) || !WPACKET_close(pkt)) {
1733
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1734
0
        return EXT_RETURN_FAIL;
1735
0
    }
1736
1737
1.44k
    return EXT_RETURN_SENT;
1738
1.44k
}
1739
1740
EXT_RETURN tls_construct_stoc_session_ticket(SSL_CONNECTION *s, WPACKET *pkt,
1741
    unsigned int context, X509 *x,
1742
    size_t chainidx)
1743
25.1k
{
1744
25.1k
    if (!s->ext.ticket_expected || !tls_use_ticket(s)) {
1745
20.4k
        s->ext.ticket_expected = 0;
1746
20.4k
        return EXT_RETURN_NOT_SENT;
1747
20.4k
    }
1748
1749
4.71k
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_session_ticket)
1750
4.71k
        || !WPACKET_put_bytes_u16(pkt, 0)) {
1751
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1752
0
        return EXT_RETURN_FAIL;
1753
0
    }
1754
1755
4.71k
    return EXT_RETURN_SENT;
1756
4.71k
}
1757
1758
#ifndef OPENSSL_NO_OCSP
1759
EXT_RETURN tls_construct_stoc_status_request(SSL_CONNECTION *s, WPACKET *pkt,
1760
    unsigned int context, X509 *x,
1761
    size_t chainidx)
1762
10.1k
{
1763
10.1k
    OCSP_RESPONSE *resp;
1764
1765
    /* We don't currently support this extension inside a CertificateRequest */
1766
10.1k
    if (context == SSL_EXT_TLS1_3_CERTIFICATE_REQUEST)
1767
0
        return EXT_RETURN_NOT_SENT;
1768
1769
10.1k
    if (!s->ext.status_expected)
1770
10.1k
        return EXT_RETURN_NOT_SENT;
1771
1772
    /* Try to retrieve OCSP response for the actual certificate */
1773
0
    resp = ossl_get_ocsp_response(s, (int)chainidx);
1774
1775
    /* If no OCSP response was found the extension is not sent */
1776
0
    if (resp == NULL)
1777
0
        return EXT_RETURN_NOT_SENT;
1778
1779
0
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_status_request)
1780
0
        || !WPACKET_start_sub_packet_u16(pkt)) {
1781
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1782
0
        return EXT_RETURN_FAIL;
1783
0
    }
1784
1785
    /*
1786
     * In TLSv1.3 we include the certificate status itself. In <= TLSv1.2 we
1787
     * send back an empty extension, with the certificate status appearing as a
1788
     * separate message
1789
     */
1790
0
    if (SSL_CONNECTION_IS_TLS13(s)
1791
0
        && !tls_construct_cert_status_body(s, resp, pkt)) {
1792
        /* SSLfatal() already called */
1793
0
        return EXT_RETURN_FAIL;
1794
0
    }
1795
0
    if (!WPACKET_close(pkt)) {
1796
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1797
0
        return EXT_RETURN_FAIL;
1798
0
    }
1799
1800
0
    return EXT_RETURN_SENT;
1801
0
}
1802
#endif
1803
1804
#ifndef OPENSSL_NO_NEXTPROTONEG
1805
EXT_RETURN tls_construct_stoc_next_proto_neg(SSL_CONNECTION *s, WPACKET *pkt,
1806
    unsigned int context, X509 *x,
1807
    size_t chainidx)
1808
25.1k
{
1809
25.1k
    const unsigned char *npa;
1810
25.1k
    unsigned int npalen;
1811
25.1k
    int ret;
1812
25.1k
    int npn_seen = s->s3.npn_seen;
1813
25.1k
    SSL_CTX *sctx = SSL_CONNECTION_GET_CTX(s);
1814
1815
25.1k
    s->s3.npn_seen = 0;
1816
25.1k
    if (!npn_seen || sctx->ext.npn_advertised_cb == NULL)
1817
25.1k
        return EXT_RETURN_NOT_SENT;
1818
1819
0
    ret = sctx->ext.npn_advertised_cb(SSL_CONNECTION_GET_USER_SSL(s), &npa,
1820
0
        &npalen, sctx->ext.npn_advertised_cb_arg);
1821
0
    if (ret == SSL_TLSEXT_ERR_OK) {
1822
0
        if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_next_proto_neg)
1823
0
            || !WPACKET_sub_memcpy_u16(pkt, npa, npalen)) {
1824
0
            SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1825
0
            return EXT_RETURN_FAIL;
1826
0
        }
1827
0
        s->s3.npn_seen = 1;
1828
0
        return EXT_RETURN_SENT;
1829
0
    }
1830
1831
0
    return EXT_RETURN_NOT_SENT;
1832
0
}
1833
#endif
1834
1835
EXT_RETURN tls_construct_stoc_alpn(SSL_CONNECTION *s, WPACKET *pkt, unsigned int context,
1836
    X509 *x, size_t chainidx)
1837
27.9k
{
1838
27.9k
    if (s->s3.alpn_selected == NULL)
1839
27.9k
        return EXT_RETURN_NOT_SENT;
1840
1841
0
    if (!WPACKET_put_bytes_u16(pkt,
1842
0
            TLSEXT_TYPE_application_layer_protocol_negotiation)
1843
0
        || !WPACKET_start_sub_packet_u16(pkt)
1844
0
        || !WPACKET_start_sub_packet_u16(pkt)
1845
0
        || !WPACKET_sub_memcpy_u8(pkt, s->s3.alpn_selected,
1846
0
            s->s3.alpn_selected_len)
1847
0
        || !WPACKET_close(pkt)
1848
0
        || !WPACKET_close(pkt)) {
1849
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1850
0
        return EXT_RETURN_FAIL;
1851
0
    }
1852
1853
0
    return EXT_RETURN_SENT;
1854
0
}
1855
1856
#ifndef OPENSSL_NO_SRTP
1857
EXT_RETURN tls_construct_stoc_use_srtp(SSL_CONNECTION *s, WPACKET *pkt,
1858
    unsigned int context, X509 *x,
1859
    size_t chainidx)
1860
27.9k
{
1861
27.9k
    if (s->srtp_profile == NULL)
1862
27.9k
        return EXT_RETURN_NOT_SENT;
1863
1864
0
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_use_srtp)
1865
0
        || !WPACKET_start_sub_packet_u16(pkt)
1866
0
        || !WPACKET_put_bytes_u16(pkt, 2)
1867
0
        || !WPACKET_put_bytes_u16(pkt, s->srtp_profile->id)
1868
0
        || !WPACKET_put_bytes_u8(pkt, 0)
1869
0
        || !WPACKET_close(pkt)) {
1870
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1871
0
        return EXT_RETURN_FAIL;
1872
0
    }
1873
1874
0
    return EXT_RETURN_SENT;
1875
0
}
1876
#endif
1877
1878
EXT_RETURN tls_construct_stoc_etm(SSL_CONNECTION *s, WPACKET *pkt,
1879
    unsigned int context,
1880
    X509 *x, size_t chainidx)
1881
25.1k
{
1882
25.1k
    if (!s->ext.use_etm)
1883
23.7k
        return EXT_RETURN_NOT_SENT;
1884
1885
    /*
1886
     * Don't use encrypt_then_mac if AEAD or RC4 might want to disable
1887
     * for other cases too.
1888
     */
1889
1.37k
    if (s->s3.tmp.new_cipher->algorithm_mac == SSL_AEAD
1890
1.11k
        || s->s3.tmp.new_cipher->algorithm_enc == SSL_RC4
1891
1.11k
        || s->s3.tmp.new_cipher->algorithm_enc == SSL_eGOST2814789CNT
1892
1.11k
        || s->s3.tmp.new_cipher->algorithm_enc == SSL_eGOST2814789CNT12
1893
1.11k
        || s->s3.tmp.new_cipher->algorithm_enc == SSL_MAGMA
1894
1.11k
        || s->s3.tmp.new_cipher->algorithm_enc == SSL_KUZNYECHIK) {
1895
261
        s->ext.use_etm = 0;
1896
261
        return EXT_RETURN_NOT_SENT;
1897
261
    }
1898
1899
1.11k
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_encrypt_then_mac)
1900
1.11k
        || !WPACKET_put_bytes_u16(pkt, 0)) {
1901
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1902
0
        return EXT_RETURN_FAIL;
1903
0
    }
1904
1905
1.11k
    return EXT_RETURN_SENT;
1906
1.11k
}
1907
1908
EXT_RETURN tls_construct_stoc_ems(SSL_CONNECTION *s, WPACKET *pkt,
1909
    unsigned int context,
1910
    X509 *x, size_t chainidx)
1911
25.1k
{
1912
25.1k
    if ((s->s3.flags & TLS1_FLAGS_RECEIVED_EXTMS) == 0)
1913
21.4k
        return EXT_RETURN_NOT_SENT;
1914
1915
3.70k
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_extended_master_secret)
1916
3.70k
        || !WPACKET_put_bytes_u16(pkt, 0)) {
1917
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1918
0
        return EXT_RETURN_FAIL;
1919
0
    }
1920
1921
3.70k
    return EXT_RETURN_SENT;
1922
3.70k
}
1923
1924
EXT_RETURN tls_construct_stoc_supported_versions(SSL_CONNECTION *s, WPACKET *pkt,
1925
    unsigned int context, X509 *x,
1926
    size_t chainidx)
1927
3.48k
{
1928
3.48k
    if (!ossl_assert(SSL_CONNECTION_IS_TLS13(s))) {
1929
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1930
0
        return EXT_RETURN_FAIL;
1931
0
    }
1932
1933
3.48k
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_supported_versions)
1934
3.48k
        || !WPACKET_start_sub_packet_u16(pkt)
1935
3.48k
        || !WPACKET_put_bytes_u16(pkt, s->version)
1936
3.48k
        || !WPACKET_close(pkt)) {
1937
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1938
0
        return EXT_RETURN_FAIL;
1939
0
    }
1940
1941
3.48k
    return EXT_RETURN_SENT;
1942
3.48k
}
1943
1944
EXT_RETURN tls_construct_stoc_key_share(SSL_CONNECTION *s, WPACKET *pkt,
1945
    unsigned int context, X509 *x,
1946
    size_t chainidx)
1947
3.48k
{
1948
3.48k
#ifndef OPENSSL_NO_TLS1_3
1949
3.48k
    unsigned char *encoded_pubkey;
1950
3.48k
    size_t encoded_pubkey_len = 0;
1951
3.48k
    EVP_PKEY *ckey = s->s3.peer_tmp, *skey = NULL;
1952
3.48k
    const TLS_GROUP_INFO *ginf = NULL;
1953
1954
3.48k
    if (s->hello_retry_request == SSL_HRR_PENDING) {
1955
667
        if (ckey != NULL) {
1956
            /* Original key_share was acceptable so don't ask for another one */
1957
0
            return EXT_RETURN_NOT_SENT;
1958
0
        }
1959
667
        if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_key_share)
1960
667
            || !WPACKET_start_sub_packet_u16(pkt)
1961
667
            || !WPACKET_put_bytes_u16(pkt, s->s3.group_id)
1962
667
            || !WPACKET_close(pkt)) {
1963
0
            SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1964
0
            return EXT_RETURN_FAIL;
1965
0
        }
1966
1967
667
        return EXT_RETURN_SENT;
1968
667
    }
1969
1970
2.82k
    if (ckey == NULL) {
1971
        /* No key_share received from client - must be resuming */
1972
0
        if (!s->hit || !tls13_generate_handshake_secret(s, NULL, 0)) {
1973
0
            SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1974
0
            return EXT_RETURN_FAIL;
1975
0
        }
1976
0
        return EXT_RETURN_NOT_SENT;
1977
0
    }
1978
1979
2.82k
    if (s->hit && (s->ext.psk_kex_mode & TLSEXT_KEX_MODE_FLAG_KE_DHE) == 0) {
1980
        /*
1981
         * PSK ('hit') and explicitly not doing DHE. If the client sent the
1982
         * DHE option, we take it by default, except if non-DHE would be
1983
         * preferred by config, but this case would have been handled in
1984
         * tls_parse_ctos_psk_kex_modes().
1985
         */
1986
0
        return EXT_RETURN_NOT_SENT;
1987
0
    }
1988
1989
2.82k
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_key_share)
1990
2.82k
        || !WPACKET_start_sub_packet_u16(pkt)
1991
2.82k
        || !WPACKET_put_bytes_u16(pkt, s->s3.group_id)) {
1992
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1993
0
        return EXT_RETURN_FAIL;
1994
0
    }
1995
1996
2.82k
    if ((ginf = tls1_group_id_lookup(SSL_CONNECTION_GET_CTX(s),
1997
2.82k
             s->s3.group_id))
1998
2.82k
        == NULL) {
1999
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
2000
0
        return EXT_RETURN_FAIL;
2001
0
    }
2002
2003
2.82k
    if (!ginf->is_kem) {
2004
        /* Regular KEX */
2005
2.79k
        skey = ssl_generate_pkey(s, ckey);
2006
2.79k
        if (skey == NULL) {
2007
0
            SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_SSL_LIB);
2008
0
            return EXT_RETURN_FAIL;
2009
0
        }
2010
2011
        /* Generate encoding of server key */
2012
2.79k
        encoded_pubkey_len = EVP_PKEY_get1_encoded_public_key(skey, &encoded_pubkey);
2013
2.79k
        if (encoded_pubkey_len == 0) {
2014
0
            SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_EC_LIB);
2015
0
            EVP_PKEY_free(skey);
2016
0
            return EXT_RETURN_FAIL;
2017
0
        }
2018
2019
2.79k
        if (!WPACKET_sub_memcpy_u16(pkt, encoded_pubkey, encoded_pubkey_len)
2020
2.79k
            || !WPACKET_close(pkt)) {
2021
0
            SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
2022
0
            EVP_PKEY_free(skey);
2023
0
            OPENSSL_free(encoded_pubkey);
2024
0
            return EXT_RETURN_FAIL;
2025
0
        }
2026
2.79k
        OPENSSL_free(encoded_pubkey);
2027
2028
        /*
2029
         * This causes the crypto state to be updated based on the derived keys
2030
         */
2031
2.79k
        s->s3.tmp.pkey = skey;
2032
2.79k
        if (ssl_derive(s, skey, ckey, 1) == 0) {
2033
            /* SSLfatal() already called */
2034
16
            return EXT_RETURN_FAIL;
2035
16
        }
2036
2.79k
    } else {
2037
        /* KEM mode */
2038
24
        unsigned char *ct = NULL;
2039
24
        size_t ctlen = 0;
2040
2041
        /*
2042
         * This does not update the crypto state.
2043
         *
2044
         * The generated pms is stored in `s->s3.tmp.pms` to be later used via
2045
         * ssl_gensecret().
2046
         */
2047
24
        if (ssl_encapsulate(s, ckey, &ct, &ctlen, 0) == 0) {
2048
            /* SSLfatal() already called */
2049
1
            return EXT_RETURN_FAIL;
2050
1
        }
2051
2052
23
        if (ctlen == 0) {
2053
0
            SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
2054
0
            OPENSSL_free(ct);
2055
0
            return EXT_RETURN_FAIL;
2056
0
        }
2057
2058
23
        if (!WPACKET_sub_memcpy_u16(pkt, ct, ctlen)
2059
23
            || !WPACKET_close(pkt)) {
2060
0
            SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
2061
0
            OPENSSL_free(ct);
2062
0
            return EXT_RETURN_FAIL;
2063
0
        }
2064
23
        OPENSSL_free(ct);
2065
2066
        /*
2067
         * This causes the crypto state to be updated based on the generated pms
2068
         */
2069
23
        if (ssl_gensecret(s, s->s3.tmp.pms, s->s3.tmp.pmslen) == 0) {
2070
            /* SSLfatal() already called */
2071
0
            return EXT_RETURN_FAIL;
2072
0
        }
2073
23
    }
2074
2.80k
    s->s3.did_kex = 1;
2075
2.80k
    return EXT_RETURN_SENT;
2076
#else
2077
    return EXT_RETURN_FAIL;
2078
#endif
2079
2.82k
}
2080
2081
EXT_RETURN tls_construct_stoc_cookie(SSL_CONNECTION *s, WPACKET *pkt,
2082
    unsigned int context,
2083
    X509 *x, size_t chainidx)
2084
667
{
2085
667
#ifndef OPENSSL_NO_TLS1_3
2086
667
    unsigned char *hashval1, *hashval2, *appcookie1, *appcookie2, *cookie;
2087
667
    unsigned char *hmac, *hmac2;
2088
667
    size_t startlen, ciphlen, totcookielen, hashlen, hmaclen, appcookielen;
2089
667
    EVP_MD_CTX *hctx;
2090
667
    EVP_PKEY *pkey;
2091
667
    int ret = EXT_RETURN_FAIL;
2092
667
    SSL_CTX *sctx = SSL_CONNECTION_GET_CTX(s);
2093
667
    SSL *ssl = SSL_CONNECTION_GET_SSL(s);
2094
667
    SSL *ussl = SSL_CONNECTION_GET_USER_SSL(s);
2095
2096
667
    if ((s->s3.flags & TLS1_FLAGS_STATELESS) == 0)
2097
667
        return EXT_RETURN_NOT_SENT;
2098
2099
0
    if (sctx->gen_stateless_cookie_cb == NULL) {
2100
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_R_NO_COOKIE_CALLBACK_SET);
2101
0
        return EXT_RETURN_FAIL;
2102
0
    }
2103
2104
0
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_cookie)
2105
0
        || !WPACKET_start_sub_packet_u16(pkt)
2106
0
        || !WPACKET_start_sub_packet_u16(pkt)
2107
0
        || !WPACKET_get_total_written(pkt, &startlen)
2108
0
        || !WPACKET_reserve_bytes(pkt, MAX_COOKIE_SIZE, &cookie)
2109
0
        || !WPACKET_put_bytes_u16(pkt, COOKIE_STATE_FORMAT_VERSION)
2110
0
        || !WPACKET_put_bytes_u16(pkt, TLS1_3_VERSION)
2111
0
        || !WPACKET_put_bytes_u16(pkt, s->s3.group_id)
2112
0
        || !ssl->method->put_cipher_by_char(s->s3.tmp.new_cipher, pkt,
2113
0
            &ciphlen)
2114
        /* Is there a key_share extension present in this HRR? */
2115
0
        || !WPACKET_put_bytes_u8(pkt, s->s3.peer_tmp == NULL)
2116
0
        || !WPACKET_put_bytes_u64(pkt, time(NULL))
2117
0
        || !WPACKET_start_sub_packet_u16(pkt)
2118
0
        || !WPACKET_reserve_bytes(pkt, EVP_MAX_MD_SIZE, &hashval1)) {
2119
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
2120
0
        return EXT_RETURN_FAIL;
2121
0
    }
2122
2123
    /*
2124
     * Get the hash of the initial ClientHello. ssl_handshake_hash() operates
2125
     * on raw buffers, so we first reserve sufficient bytes (above) and then
2126
     * subsequently allocate them (below)
2127
     */
2128
0
    if (!ssl3_digest_cached_records(s, 0)
2129
0
        || !ssl_handshake_hash(s, hashval1, EVP_MAX_MD_SIZE, &hashlen)) {
2130
        /* SSLfatal() already called */
2131
0
        return EXT_RETURN_FAIL;
2132
0
    }
2133
2134
0
    if (!WPACKET_allocate_bytes(pkt, hashlen, &hashval2)
2135
0
        || !ossl_assert(hashval1 == hashval2)
2136
0
        || !WPACKET_close(pkt)
2137
0
        || !WPACKET_start_sub_packet_u8(pkt)
2138
0
        || !WPACKET_reserve_bytes(pkt, SSL_COOKIE_LENGTH, &appcookie1)) {
2139
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
2140
0
        return EXT_RETURN_FAIL;
2141
0
    }
2142
2143
    /* Generate the application cookie */
2144
0
    if (sctx->gen_stateless_cookie_cb(ussl, appcookie1,
2145
0
            &appcookielen)
2146
0
        == 0) {
2147
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_R_COOKIE_GEN_CALLBACK_FAILURE);
2148
0
        return EXT_RETURN_FAIL;
2149
0
    }
2150
2151
0
    if (!WPACKET_allocate_bytes(pkt, appcookielen, &appcookie2)
2152
0
        || !ossl_assert(appcookie1 == appcookie2)
2153
0
        || !WPACKET_close(pkt)
2154
0
        || !WPACKET_get_total_written(pkt, &totcookielen)
2155
0
        || !WPACKET_reserve_bytes(pkt, SHA256_DIGEST_LENGTH, &hmac)) {
2156
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
2157
0
        return EXT_RETURN_FAIL;
2158
0
    }
2159
0
    hmaclen = SHA256_DIGEST_LENGTH;
2160
2161
0
    totcookielen -= startlen;
2162
0
    if (!ossl_assert(totcookielen <= MAX_COOKIE_SIZE - SHA256_DIGEST_LENGTH)) {
2163
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
2164
0
        return EXT_RETURN_FAIL;
2165
0
    }
2166
2167
    /* HMAC the cookie */
2168
0
    hctx = EVP_MD_CTX_create();
2169
0
    pkey = EVP_PKEY_new_raw_private_key_ex(sctx->libctx, "HMAC",
2170
0
        sctx->propq,
2171
0
        s->session_ctx->ext.cookie_hmac_key,
2172
0
        sizeof(s->session_ctx->ext.cookie_hmac_key));
2173
0
    if (hctx == NULL || pkey == NULL) {
2174
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_EVP_LIB);
2175
0
        goto err;
2176
0
    }
2177
2178
0
    if (EVP_DigestSignInit_ex(hctx, NULL, "SHA2-256", sctx->libctx,
2179
0
            sctx->propq, pkey, NULL)
2180
0
            <= 0
2181
0
        || EVP_DigestSign(hctx, hmac, &hmaclen, cookie,
2182
0
               totcookielen)
2183
0
            <= 0) {
2184
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
2185
0
        goto err;
2186
0
    }
2187
2188
0
    if (!ossl_assert(totcookielen + hmaclen <= MAX_COOKIE_SIZE)) {
2189
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
2190
0
        goto err;
2191
0
    }
2192
2193
0
    if (!WPACKET_allocate_bytes(pkt, hmaclen, &hmac2)
2194
0
        || !ossl_assert(hmac == hmac2)
2195
0
        || !ossl_assert(cookie == hmac - totcookielen)
2196
0
        || !WPACKET_close(pkt)
2197
0
        || !WPACKET_close(pkt)) {
2198
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
2199
0
        goto err;
2200
0
    }
2201
2202
0
    ret = EXT_RETURN_SENT;
2203
2204
0
err:
2205
0
    EVP_MD_CTX_free(hctx);
2206
0
    EVP_PKEY_free(pkey);
2207
0
    return ret;
2208
#else
2209
    return EXT_RETURN_FAIL;
2210
#endif
2211
0
}
2212
2213
EXT_RETURN tls_construct_stoc_cryptopro_bug(SSL_CONNECTION *s, WPACKET *pkt,
2214
    unsigned int context, X509 *x,
2215
    size_t chainidx)
2216
25.1k
{
2217
25.1k
    const unsigned char cryptopro_ext[36] = {
2218
25.1k
        0xfd, 0xe8, /* 65000 */
2219
25.1k
        0x00, 0x20, /* 32 bytes length */
2220
25.1k
        0x30, 0x1e, 0x30, 0x08, 0x06, 0x06, 0x2a, 0x85,
2221
25.1k
        0x03, 0x02, 0x02, 0x09, 0x30, 0x08, 0x06, 0x06,
2222
25.1k
        0x2a, 0x85, 0x03, 0x02, 0x02, 0x16, 0x30, 0x08,
2223
25.1k
        0x06, 0x06, 0x2a, 0x85, 0x03, 0x02, 0x02, 0x17
2224
25.1k
    };
2225
2226
25.1k
    if (((s->s3.tmp.new_cipher->id & 0xFFFF) != 0x80
2227
25.1k
            && (s->s3.tmp.new_cipher->id & 0xFFFF) != 0x81)
2228
0
        || (SSL_get_options(SSL_CONNECTION_GET_SSL(s))
2229
0
               & SSL_OP_CRYPTOPRO_TLSEXT_BUG)
2230
0
            == 0)
2231
25.1k
        return EXT_RETURN_NOT_SENT;
2232
2233
0
    if (!WPACKET_memcpy(pkt, cryptopro_ext, sizeof(cryptopro_ext))) {
2234
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
2235
0
        return EXT_RETURN_FAIL;
2236
0
    }
2237
2238
0
    return EXT_RETURN_SENT;
2239
0
}
2240
2241
EXT_RETURN tls_construct_stoc_early_data(SSL_CONNECTION *s, WPACKET *pkt,
2242
    unsigned int context, X509 *x,
2243
    size_t chainidx)
2244
2.80k
{
2245
2.80k
    if (context == SSL_EXT_TLS1_3_NEW_SESSION_TICKET) {
2246
0
        if (s->max_early_data == 0)
2247
0
            return EXT_RETURN_NOT_SENT;
2248
2249
0
        if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_early_data)
2250
0
            || !WPACKET_start_sub_packet_u16(pkt)
2251
0
            || !WPACKET_put_bytes_u32(pkt, s->max_early_data)
2252
0
            || !WPACKET_close(pkt)) {
2253
0
            SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
2254
0
            return EXT_RETURN_FAIL;
2255
0
        }
2256
2257
0
        return EXT_RETURN_SENT;
2258
0
    }
2259
2260
2.80k
    if (s->ext.early_data != SSL_EARLY_DATA_ACCEPTED)
2261
2.80k
        return EXT_RETURN_NOT_SENT;
2262
2263
0
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_early_data)
2264
0
        || !WPACKET_start_sub_packet_u16(pkt)
2265
0
        || !WPACKET_close(pkt)) {
2266
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
2267
0
        return EXT_RETURN_FAIL;
2268
0
    }
2269
2270
0
    return EXT_RETURN_SENT;
2271
0
}
2272
2273
EXT_RETURN tls_construct_stoc_psk(SSL_CONNECTION *s, WPACKET *pkt,
2274
    unsigned int context,
2275
    X509 *x, size_t chainidx)
2276
2.80k
{
2277
2.80k
    if (!s->hit)
2278
2.80k
        return EXT_RETURN_NOT_SENT;
2279
2280
0
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_psk)
2281
0
        || !WPACKET_start_sub_packet_u16(pkt)
2282
0
        || !WPACKET_put_bytes_u16(pkt, s->ext.tick_identity)
2283
0
        || !WPACKET_close(pkt)) {
2284
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
2285
0
        return EXT_RETURN_FAIL;
2286
0
    }
2287
2288
0
    return EXT_RETURN_SENT;
2289
0
}
2290
2291
EXT_RETURN tls_construct_stoc_client_cert_type(SSL_CONNECTION *sc, WPACKET *pkt,
2292
    unsigned int context,
2293
    X509 *x, size_t chainidx)
2294
25.7k
{
2295
25.7k
    if (sc->ext.client_cert_type_ctos == OSSL_CERT_TYPE_CTOS_ERROR
2296
0
        && (send_certificate_request(sc)
2297
0
            || sc->post_handshake_auth == SSL_PHA_EXT_RECEIVED)) {
2298
        /* Did not receive an acceptable cert type - and doing client auth */
2299
0
        SSLfatal(sc, SSL_AD_UNSUPPORTED_CERTIFICATE, SSL_R_BAD_EXTENSION);
2300
0
        return EXT_RETURN_FAIL;
2301
0
    }
2302
2303
25.7k
    if (sc->ext.client_cert_type == TLSEXT_cert_type_x509) {
2304
25.7k
        sc->ext.client_cert_type_ctos = OSSL_CERT_TYPE_CTOS_NONE;
2305
25.7k
        return EXT_RETURN_NOT_SENT;
2306
25.7k
    }
2307
2308
    /*
2309
     * Note: only supposed to send this if we are going to do a cert request,
2310
     * but TLSv1.3 could do a PHA request if the client supports it
2311
     */
2312
0
    if ((!send_certificate_request(sc) && sc->post_handshake_auth != SSL_PHA_EXT_RECEIVED)
2313
0
        || sc->ext.client_cert_type_ctos != OSSL_CERT_TYPE_CTOS_GOOD
2314
0
        || sc->client_cert_type == NULL) {
2315
        /* if we don't send it, reset to TLSEXT_cert_type_x509 */
2316
0
        sc->ext.client_cert_type_ctos = OSSL_CERT_TYPE_CTOS_NONE;
2317
0
        sc->ext.client_cert_type = TLSEXT_cert_type_x509;
2318
0
        return EXT_RETURN_NOT_SENT;
2319
0
    }
2320
2321
0
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_client_cert_type)
2322
0
        || !WPACKET_start_sub_packet_u16(pkt)
2323
0
        || !WPACKET_put_bytes_u8(pkt, sc->ext.client_cert_type)
2324
0
        || !WPACKET_close(pkt)) {
2325
0
        SSLfatal(sc, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
2326
0
        return EXT_RETURN_FAIL;
2327
0
    }
2328
0
    return EXT_RETURN_SENT;
2329
0
}
2330
2331
/* One of |pref|, |other| is configured and the values are sanitized */
2332
static int reconcile_cert_type(const unsigned char *pref, size_t pref_len,
2333
    const unsigned char *other, size_t other_len,
2334
    uint8_t *chosen_cert_type)
2335
0
{
2336
0
    size_t i;
2337
2338
0
    for (i = 0; i < pref_len; i++) {
2339
0
        if (memchr(other, pref[i], other_len) != NULL) {
2340
0
            *chosen_cert_type = pref[i];
2341
0
            return OSSL_CERT_TYPE_CTOS_GOOD;
2342
0
        }
2343
0
    }
2344
0
    return OSSL_CERT_TYPE_CTOS_ERROR;
2345
0
}
2346
2347
int tls_parse_ctos_client_cert_type(SSL_CONNECTION *sc, PACKET *pkt,
2348
    unsigned int context,
2349
    X509 *x, size_t chainidx)
2350
281
{
2351
281
    PACKET supported_cert_types;
2352
281
    const unsigned char *data;
2353
281
    size_t len;
2354
2355
    /* Ignore the extension */
2356
281
    if (sc->client_cert_type == NULL) {
2357
281
        sc->ext.client_cert_type_ctos = OSSL_CERT_TYPE_CTOS_NONE;
2358
281
        sc->ext.client_cert_type = TLSEXT_cert_type_x509;
2359
281
        return 1;
2360
281
    }
2361
2362
0
    if (!PACKET_as_length_prefixed_1(pkt, &supported_cert_types)) {
2363
0
        sc->ext.client_cert_type_ctos = OSSL_CERT_TYPE_CTOS_ERROR;
2364
0
        SSLfatal(sc, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
2365
0
        return 0;
2366
0
    }
2367
0
    if ((len = PACKET_remaining(&supported_cert_types)) == 0) {
2368
0
        sc->ext.client_cert_type_ctos = OSSL_CERT_TYPE_CTOS_ERROR;
2369
0
        SSLfatal(sc, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
2370
0
        return 0;
2371
0
    }
2372
0
    if (!PACKET_get_bytes(&supported_cert_types, &data, len)) {
2373
0
        sc->ext.client_cert_type_ctos = OSSL_CERT_TYPE_CTOS_ERROR;
2374
0
        SSLfatal(sc, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
2375
0
        return 0;
2376
0
    }
2377
    /* client_cert_type: client (peer) has priority */
2378
0
    sc->ext.client_cert_type_ctos = reconcile_cert_type(data, len,
2379
0
        sc->client_cert_type, sc->client_cert_type_len,
2380
0
        &sc->ext.client_cert_type);
2381
2382
    /* Ignore the error until sending - so we can check cert auth*/
2383
0
    return 1;
2384
0
}
2385
2386
EXT_RETURN tls_construct_stoc_server_cert_type(SSL_CONNECTION *sc, WPACKET *pkt,
2387
    unsigned int context,
2388
    X509 *x, size_t chainidx)
2389
25.7k
{
2390
25.7k
    if (sc->ext.server_cert_type == TLSEXT_cert_type_x509) {
2391
25.7k
        sc->ext.server_cert_type_ctos = OSSL_CERT_TYPE_CTOS_NONE;
2392
25.7k
        return EXT_RETURN_NOT_SENT;
2393
25.7k
    }
2394
0
    if (sc->ext.server_cert_type_ctos != OSSL_CERT_TYPE_CTOS_GOOD
2395
0
        || sc->server_cert_type == NULL) {
2396
        /* if we don't send it, reset to TLSEXT_cert_type_x509 */
2397
0
        sc->ext.server_cert_type_ctos = OSSL_CERT_TYPE_CTOS_NONE;
2398
0
        sc->ext.server_cert_type = TLSEXT_cert_type_x509;
2399
0
        return EXT_RETURN_NOT_SENT;
2400
0
    }
2401
2402
0
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_server_cert_type)
2403
0
        || !WPACKET_start_sub_packet_u16(pkt)
2404
0
        || !WPACKET_put_bytes_u8(pkt, sc->ext.server_cert_type)
2405
0
        || !WPACKET_close(pkt)) {
2406
0
        SSLfatal(sc, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
2407
0
        return EXT_RETURN_FAIL;
2408
0
    }
2409
0
    return EXT_RETURN_SENT;
2410
0
}
2411
2412
int tls_parse_ctos_server_cert_type(SSL_CONNECTION *sc, PACKET *pkt,
2413
    unsigned int context,
2414
    X509 *x, size_t chainidx)
2415
294
{
2416
294
    PACKET supported_cert_types;
2417
294
    const unsigned char *data;
2418
294
    size_t len;
2419
2420
    /* Ignore the extension */
2421
294
    if (sc->server_cert_type == NULL) {
2422
294
        sc->ext.server_cert_type_ctos = OSSL_CERT_TYPE_CTOS_NONE;
2423
294
        sc->ext.server_cert_type = TLSEXT_cert_type_x509;
2424
294
        return 1;
2425
294
    }
2426
2427
0
    if (!PACKET_as_length_prefixed_1(pkt, &supported_cert_types)) {
2428
0
        SSLfatal(sc, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
2429
0
        return 0;
2430
0
    }
2431
2432
0
    if ((len = PACKET_remaining(&supported_cert_types)) == 0) {
2433
0
        SSLfatal(sc, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
2434
0
        return 0;
2435
0
    }
2436
0
    if (!PACKET_get_bytes(&supported_cert_types, &data, len)) {
2437
0
        SSLfatal(sc, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
2438
0
        return 0;
2439
0
    }
2440
    /* server_cert_type: server (this) has priority */
2441
0
    sc->ext.server_cert_type_ctos = reconcile_cert_type(sc->server_cert_type, sc->server_cert_type_len,
2442
0
        data, len,
2443
0
        &sc->ext.server_cert_type);
2444
0
    if (sc->ext.server_cert_type_ctos == OSSL_CERT_TYPE_CTOS_GOOD)
2445
0
        return 1;
2446
2447
    /* Did not receive an acceptable cert type */
2448
0
    SSLfatal(sc, SSL_AD_UNSUPPORTED_CERTIFICATE, SSL_R_BAD_EXTENSION);
2449
0
    return 0;
2450
0
}