Coverage Report

Created: 2025-08-11 07:04

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