Coverage Report

Created: 2025-12-04 06:33

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