Coverage Report

Created: 2025-11-16 06:40

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.43k
{
46
4.43k
    unsigned int ilen;
47
4.43k
    const unsigned char *data;
48
4.43k
    int ok;
49
50
    /* Parse the length byte */
51
4.43k
    if (!PACKET_get_1(pkt, &ilen)
52
4.42k
        || !PACKET_get_bytes(pkt, &data, ilen)) {
53
38
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_RENEGOTIATION_ENCODING_ERR);
54
38
        return 0;
55
38
    }
56
57
    /* Check that the extension matches */
58
4.39k
    if (ilen != s->s3.previous_client_finished_len) {
59
16
        SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_R_RENEGOTIATION_MISMATCH);
60
16
        return 0;
61
16
    }
62
63
4.38k
    ok = memcmp(data, s->s3.previous_client_finished,
64
4.38k
                    s->s3.previous_client_finished_len);
65
4.38k
#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
66
4.38k
    if (ok) {
67
0
        if ((data[0] ^ s->s3.previous_client_finished[0]) != 0xFF) {
68
0
            ok = 0;
69
0
        }
70
0
    }
71
4.38k
#endif
72
4.38k
    if (ok) {
73
0
        SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_R_RENEGOTIATION_MISMATCH);
74
0
        return 0;
75
0
    }
76
77
4.38k
    s->s3.send_connection_binding = 1;
78
79
4.38k
    return 1;
80
4.38k
}
81
82
/*-
83
 * The servername extension is treated as follows:
84
 *
85
 * - Only the hostname type is supported with a maximum length of 255.
86
 * - The servername is rejected if too long or if it contains zeros,
87
 *   in which case an fatal alert is generated.
88
 * - The servername field is maintained together with the session cache.
89
 * - When a session is resumed, the servername call back invoked in order
90
 *   to allow the application to position itself to the right context.
91
 * - The servername is acknowledged if it is new for a session or when
92
 *   it is identical to a previously used for the same session.
93
 *   Applications can control the behaviour.  They can at any time
94
 *   set a 'desirable' servername for a new SSL object. This can be the
95
 *   case for example with HTTPS when a Host: header field is received and
96
 *   a renegotiation is requested. In this case, a possible servername
97
 *   presented in the new client hello is only acknowledged if it matches
98
 *   the value of the Host: field.
99
 * - Applications must  use SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION
100
 *   if they provide for changing an explicit servername context for the
101
 *   session, i.e. when the session has been established with a servername
102
 *   extension.
103
 * - On session reconnect, the servername extension may be absent.
104
 */
105
int tls_parse_ctos_server_name(SSL_CONNECTION *s, PACKET *pkt,
106
                               unsigned int context, X509 *x, size_t chainidx)
107
7.91k
{
108
7.91k
    unsigned int servname_type;
109
7.91k
    PACKET sni, hostname;
110
111
7.91k
    if (!PACKET_as_length_prefixed_2(pkt, &sni)
112
        /* ServerNameList must be at least 1 byte long. */
113
7.72k
        || PACKET_remaining(&sni) == 0) {
114
202
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
115
202
        return 0;
116
202
    }
117
118
    /*
119
     * Although the intent was for server_name to be extensible, RFC 4366
120
     * was not clear about it; and so OpenSSL among other implementations,
121
     * always and only allows a 'host_name' name types.
122
     * RFC 6066 corrected the mistake but adding new name types
123
     * is nevertheless no longer feasible, so act as if no other
124
     * SNI types can exist, to simplify parsing.
125
     *
126
     * Also note that the RFC permits only one SNI value per type,
127
     * i.e., we can only have a single hostname.
128
     */
129
7.71k
    if (!PACKET_get_1(&sni, &servname_type)
130
7.71k
        || servname_type != TLSEXT_NAMETYPE_host_name
131
7.66k
        || !PACKET_as_length_prefixed_2(&sni, &hostname)) {
132
188
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
133
188
        return 0;
134
188
    }
135
136
    /*
137
     * In TLSv1.2 and below the SNI is associated with the session. In TLSv1.3
138
     * we always use the SNI value from the handshake.
139
     */
140
7.52k
    if (!s->hit || SSL_CONNECTION_IS_TLS13(s)) {
141
7.51k
        if (PACKET_remaining(&hostname) > TLSEXT_MAXLEN_host_name) {
142
6
            SSLfatal(s, SSL_AD_UNRECOGNIZED_NAME, SSL_R_BAD_EXTENSION);
143
6
            return 0;
144
6
        }
145
146
7.50k
        if (PACKET_contains_zero_byte(&hostname)) {
147
20
            SSLfatal(s, SSL_AD_UNRECOGNIZED_NAME, SSL_R_BAD_EXTENSION);
148
20
            return 0;
149
20
        }
150
151
        /*
152
         * Store the requested SNI in the SSL as temporary storage.
153
         * If we accept it, it will get stored in the SSL_SESSION as well.
154
         */
155
7.48k
        OPENSSL_free(s->ext.hostname);
156
7.48k
        s->ext.hostname = NULL;
157
7.48k
        if (!PACKET_strndup(&hostname, &s->ext.hostname)) {
158
0
            SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
159
0
            return 0;
160
0
        }
161
162
7.48k
        s->servername_done = 1;
163
7.48k
    } else {
164
        /*
165
         * In TLSv1.2 and below we should check if the SNI is consistent between
166
         * the initial handshake and the resumption. In TLSv1.3 SNI is not
167
         * associated with the session.
168
         */
169
12
        s->servername_done = (s->session->ext.hostname != NULL)
170
6
            && PACKET_equal(&hostname, s->session->ext.hostname,
171
6
                            strlen(s->session->ext.hostname));
172
12
    }
173
174
7.49k
    return 1;
175
7.52k
}
176
177
int tls_parse_ctos_maxfragmentlen(SSL_CONNECTION *s, PACKET *pkt,
178
                                  unsigned int context,
179
                                  X509 *x, size_t chainidx)
180
1.21k
{
181
1.21k
    unsigned int value;
182
183
1.21k
    if (PACKET_remaining(pkt) != 1 || !PACKET_get_1(pkt, &value)) {
184
103
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
185
103
        return 0;
186
103
    }
187
188
    /* Received |value| should be a valid max-fragment-length code. */
189
1.11k
    if (!IS_MAX_FRAGMENT_LENGTH_EXT_VALID(value)) {
190
44
        SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER,
191
44
                 SSL_R_SSL3_EXT_INVALID_MAX_FRAGMENT_LENGTH);
192
44
        return 0;
193
44
    }
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.07k
    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.06k
        s->session->ext.max_fragment_len_mode = value;
215
216
1.07k
    return 1;
217
1.11k
}
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
130
{
223
130
    PACKET srp_I;
224
225
130
    if (!PACKET_as_length_prefixed_1(pkt, &srp_I)
226
85
            || PACKET_contains_zero_byte(&srp_I)) {
227
85
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
228
85
        return 0;
229
85
    }
230
231
45
    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
45
    return 1;
237
45
}
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.00k
{
244
6.00k
    PACKET ec_point_format_list;
245
246
6.00k
    if (!PACKET_as_length_prefixed_1(pkt, &ec_point_format_list)
247
5.89k
        || PACKET_remaining(&ec_point_format_list) == 0) {
248
114
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
249
114
        return 0;
250
114
    }
251
252
5.88k
    if (!s->hit) {
253
5.74k
        if (!PACKET_memdup(&ec_point_format_list,
254
5.74k
                           &s->ext.peer_ecpointformats,
255
5.74k
                           &s->ext.peer_ecpointformats_len)) {
256
0
            SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
257
0
            return 0;
258
0
        }
259
5.74k
    }
260
261
5.88k
    return 1;
262
5.88k
}
263
264
int tls_parse_ctos_session_ticket(SSL_CONNECTION *s, PACKET *pkt,
265
                                  unsigned int context,
266
                                  X509 *x, size_t chainidx)
267
5.57k
{
268
5.57k
    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
5.57k
    return 1;
277
5.57k
}
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.23k
{
284
1.23k
    PACKET supported_sig_algs;
285
286
1.23k
    if (!PACKET_as_length_prefixed_2(pkt, &supported_sig_algs)
287
1.06k
            || PACKET_remaining(&supported_sig_algs) == 0) {
288
178
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
289
178
        return 0;
290
178
    }
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.05k
    if ((!s->server || (s->server && !s->hit))
298
1.04k
            && !tls1_save_sigalgs(s, &supported_sig_algs, 1)) {
299
21
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
300
21
        return 0;
301
21
    }
302
303
1.03k
    return 1;
304
1.05k
}
305
306
int tls_parse_ctos_sig_algs(SSL_CONNECTION *s, PACKET *pkt,
307
                            unsigned int context, X509 *x, size_t chainidx)
308
9.27k
{
309
9.27k
    PACKET supported_sig_algs;
310
311
9.27k
    if (!PACKET_as_length_prefixed_2(pkt, &supported_sig_algs)
312
9.07k
            || PACKET_remaining(&supported_sig_algs) == 0) {
313
214
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
314
214
        return 0;
315
214
    }
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
9.06k
    if ((!s->server || (s->server && !s->hit))
323
8.94k
            && !tls1_save_sigalgs(s, &supported_sig_algs, 0)) {
324
18
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
325
18
        return 0;
326
18
    }
327
328
9.04k
    return 1;
329
9.06k
}
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
5.93k
{
336
5.93k
    PACKET responder_id_list, exts;
337
338
    /* We ignore this in a resumption handshake */
339
5.93k
    if (s->hit)
340
39
        return 1;
341
342
    /* Not defined if we get one of these in a client Certificate */
343
5.89k
    if (x != NULL)
344
0
        return 1;
345
346
5.89k
    if (!PACKET_get_1(pkt, (unsigned int *)&s->ext.status_type)) {
347
16
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
348
16
        return 0;
349
16
    }
350
351
5.87k
    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
252
        s->ext.status_type = TLSEXT_STATUSTYPE_nothing;
356
252
        return 1;
357
252
    }
358
359
5.62k
    if (!PACKET_get_length_prefixed_2 (pkt, &responder_id_list)) {
360
87
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
361
87
        return 0;
362
87
    }
363
364
    /*
365
     * We remove any OCSP_RESPIDs from a previous handshake
366
     * to prevent unbounded memory growth - CVE-2016-6304
367
     */
368
5.54k
    sk_OCSP_RESPID_pop_free(s->ext.ocsp.ids, OCSP_RESPID_free);
369
5.54k
    if (PACKET_remaining(&responder_id_list) > 0) {
370
3.18k
        s->ext.ocsp.ids = sk_OCSP_RESPID_new_null();
371
3.18k
        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.18k
    } else {
376
2.35k
        s->ext.ocsp.ids = NULL;
377
2.35k
    }
378
379
5.64k
    while (PACKET_remaining(&responder_id_list) > 0) {
380
3.27k
        OCSP_RESPID *id;
381
3.27k
        PACKET responder_id;
382
3.27k
        const unsigned char *id_data;
383
384
3.27k
        if (!PACKET_get_length_prefixed_2(&responder_id_list, &responder_id)
385
3.17k
                || PACKET_remaining(&responder_id) == 0) {
386
118
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
387
118
            return 0;
388
118
        }
389
390
3.15k
        id_data = PACKET_data(&responder_id);
391
3.15k
        id = d2i_OCSP_RESPID(NULL, &id_data,
392
3.15k
                             (int)PACKET_remaining(&responder_id));
393
3.15k
        if (id == NULL) {
394
2.98k
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
395
2.98k
            return 0;
396
2.98k
        }
397
398
176
        if (id_data != PACKET_end(&responder_id)) {
399
70
            OCSP_RESPID_free(id);
400
70
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
401
402
70
            return 0;
403
70
        }
404
405
106
        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
106
    }
412
413
    /* Read in request_extensions */
414
2.36k
    if (!PACKET_as_length_prefixed_2(pkt, &exts)) {
415
86
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
416
86
        return 0;
417
86
    }
418
419
2.28k
    if (PACKET_remaining(&exts) > 0) {
420
724
        const unsigned char *ext_data = PACKET_data(&exts);
421
422
724
        sk_X509_EXTENSION_pop_free(s->ext.ocsp.exts,
423
724
                                   X509_EXTENSION_free);
424
724
        s->ext.ocsp.exts =
425
724
            d2i_X509_EXTENSIONS(NULL, &ext_data, (int)PACKET_remaining(&exts));
426
724
        if (s->ext.ocsp.exts == NULL || ext_data != PACKET_end(&exts)) {
427
716
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
428
716
            return 0;
429
716
        }
430
724
    }
431
432
1.56k
    return 1;
433
2.28k
}
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
12
{
440
    /*
441
     * We shouldn't accept this extension on a
442
     * renegotiation.
443
     */
444
12
    if (SSL_IS_FIRST_HANDSHAKE(s))
445
12
        s->s3.npn_seen = 1;
446
447
12
    return 1;
448
12
}
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
435
{
458
435
    PACKET protocol_list, save_protocol_list, protocol;
459
460
435
    if (!SSL_IS_FIRST_HANDSHAKE(s))
461
0
        return 1;
462
463
435
    if (!PACKET_as_length_prefixed_2(pkt, &protocol_list)
464
294
        || PACKET_remaining(&protocol_list) < 2) {
465
151
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
466
151
        return 0;
467
151
    }
468
469
284
    save_protocol_list = protocol_list;
470
2.69k
    do {
471
        /* Protocol names can't be empty. */
472
2.69k
        if (!PACKET_get_length_prefixed_1(&protocol_list, &protocol)
473
2.61k
                || PACKET_remaining(&protocol) == 0) {
474
103
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
475
103
            return 0;
476
103
        }
477
2.69k
    } while (PACKET_remaining(&protocol_list) != 0);
478
479
181
    OPENSSL_free(s->s3.alpn_proposed);
480
181
    s->s3.alpn_proposed = NULL;
481
181
    s->s3.alpn_proposed_len = 0;
482
181
    if (!PACKET_memdup(&save_protocol_list,
483
181
                       &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
181
    return 1;
489
181
}
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
954
{
495
954
    STACK_OF(SRTP_PROTECTION_PROFILE) *srvr;
496
954
    unsigned int ct, mki_len, id;
497
954
    int i, srtp_pref;
498
954
    PACKET subpkt;
499
954
    SSL *ssl = SSL_CONNECTION_GET_SSL(s);
500
501
    /* Ignore this if we have no SRTP profiles */
502
954
    if (SSL_get_srtp_profiles(ssl) == NULL)
503
954
        return 1;
504
505
    /* Pull off the length of the cipher suite list  and check it is even */
506
0
    if (!PACKET_get_net_2(pkt, &ct) || (ct & 1) != 0
507
0
            || !PACKET_get_sub_packet(pkt, &subpkt, ct)) {
508
0
        SSLfatal(s, SSL_AD_DECODE_ERROR,
509
0
               SSL_R_BAD_SRTP_PROTECTION_PROFILE_LIST);
510
0
        return 0;
511
0
    }
512
513
0
    srvr = SSL_get_srtp_profiles(ssl);
514
0
    s->srtp_profile = NULL;
515
    /* Search all profiles for a match initially */
516
0
    srtp_pref = sk_SRTP_PROTECTION_PROFILE_num(srvr);
517
518
0
    while (PACKET_remaining(&subpkt)) {
519
0
        if (!PACKET_get_net_2(&subpkt, &id)) {
520
0
            SSLfatal(s, SSL_AD_DECODE_ERROR,
521
0
                     SSL_R_BAD_SRTP_PROTECTION_PROFILE_LIST);
522
0
            return 0;
523
0
        }
524
525
        /*
526
         * Only look for match in profiles of higher preference than
527
         * current match.
528
         * If no profiles have been have been configured then this
529
         * does nothing.
530
         */
531
0
        for (i = 0; i < srtp_pref; i++) {
532
0
            SRTP_PROTECTION_PROFILE *sprof =
533
0
                sk_SRTP_PROTECTION_PROFILE_value(srvr, i);
534
535
0
            if (sprof->id == id) {
536
0
                s->srtp_profile = sprof;
537
0
                srtp_pref = i;
538
0
                break;
539
0
            }
540
0
        }
541
0
    }
542
543
    /* Now extract the MKI value as a sanity check, but discard it for now */
544
0
    if (!PACKET_get_1(pkt, &mki_len)) {
545
0
        SSLfatal(s, SSL_AD_DECODE_ERROR,
546
0
                 SSL_R_BAD_SRTP_PROTECTION_PROFILE_LIST);
547
0
        return 0;
548
0
    }
549
550
0
    if (!PACKET_forward(pkt, mki_len)
551
0
        || PACKET_remaining(pkt)) {
552
0
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_SRTP_MKI_VALUE);
553
0
        return 0;
554
0
    }
555
556
0
    return 1;
557
0
}
558
#endif
559
560
int tls_parse_ctos_etm(SSL_CONNECTION *s, PACKET *pkt, unsigned int context,
561
                       X509 *x, size_t chainidx)
562
1.74k
{
563
1.74k
    if (!(s->options & SSL_OP_NO_ENCRYPT_THEN_MAC))
564
1.74k
        s->ext.use_etm = 1;
565
566
1.74k
    return 1;
567
1.74k
}
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.13k
{
577
1.13k
#ifndef OPENSSL_NO_TLS1_3
578
1.13k
    PACKET psk_kex_modes;
579
1.13k
    unsigned int mode;
580
581
1.13k
    if (!PACKET_as_length_prefixed_1(pkt, &psk_kex_modes)
582
1.10k
            || PACKET_remaining(&psk_kex_modes) == 0) {
583
33
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
584
33
        return 0;
585
33
    }
586
587
6.83k
    while (PACKET_get_1(&psk_kex_modes, &mode)) {
588
5.72k
        if (mode == TLSEXT_KEX_MODE_KE_DHE)
589
1.65k
            s->ext.psk_kex_mode |= TLSEXT_KEX_MODE_FLAG_KE_DHE;
590
4.07k
        else if (mode == TLSEXT_KEX_MODE_KE
591
1.38k
                && (s->options & SSL_OP_ALLOW_NO_DHE_KEX) != 0)
592
0
            s->ext.psk_kex_mode |= TLSEXT_KEX_MODE_FLAG_KE;
593
5.72k
    }
594
595
1.10k
    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.10k
#endif
610
611
1.10k
    return 1;
612
1.13k
}
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.11k
{
627
    /* Accept the key share group */
628
1.11k
    s->s3.group_id = ksgroup;
629
1.11k
    s->s3.group_id_candidate = ksgroup;
630
    /* Cache the selected group ID in the SSL_SESSION */
631
1.11k
    s->session->kex_group = ksgroup;
632
1.11k
    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.11k
    if (tls13_set_encoded_pub_key(s->s3.peer_tmp,
639
1.11k
                                  PACKET_data(encoded_pubkey),
640
1.11k
                                  PACKET_remaining(encoded_pubkey)) <= 0) {
641
27
        SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_BAD_ECPOINT);
642
27
        return 0;
643
27
    }
644
1.08k
    return 1;
645
1.11k
}
646
647
1.48k
# 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.45k
{
661
1.45k
    PACKET encoded_pubkey;
662
1.45k
    size_t key_share_pos = 0;
663
1.45k
    size_t previous_key_share_pos = 0;
664
1.45k
    unsigned int group_id = 0;
665
666
    /* Prepare memory to hold the extracted key share groups and related pubkeys */
667
1.45k
    *keyshares_arr = OPENSSL_malloc(*keyshares_max * sizeof(**keyshares_arr));
668
1.45k
    if (*keyshares_arr == NULL) {
669
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
670
0
        goto failure;
671
0
    }
672
1.45k
    *encoded_pubkey_arr = OPENSSL_malloc(*keyshares_max * sizeof(**encoded_pubkey_arr));
673
1.45k
    if (*encoded_pubkey_arr == NULL) {
674
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
675
0
        goto failure;
676
0
    }
677
678
2.87k
    while (PACKET_remaining(key_share_list) > 0) {
679
        /* Get the group_id for the current share and its encoded_pubkey */
680
1.57k
        if (!PACKET_get_net_2(key_share_list, &group_id)
681
1.56k
                || !PACKET_get_length_prefixed_2(key_share_list, &encoded_pubkey)
682
1.53k
                || PACKET_remaining(&encoded_pubkey) == 0) {
683
45
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_LENGTH_MISMATCH);
684
45
            goto failure;
685
45
        }
686
687
        /*
688
         * If we sent an HRR then the key_share sent back MUST be for the group
689
         * we requested, and must be the only key_share sent.
690
         */
691
1.52k
        if (s->s3.group_id != 0
692
86
                && (group_id != s->s3.group_id
693
58
                    || PACKET_remaining(key_share_list) != 0)) {
694
32
            SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_BAD_KEY_SHARE);
695
32
            goto failure;
696
32
        }
697
698
        /*
699
         * Check if this share is in supported_groups sent from client
700
         * RFC 8446 also mandates that clients send keyshares in the same
701
         * order as listed in the supported groups extension, but its not
702
         * required that the server check that, and some clients violate this
703
         * so instead of failing the connection when that occurs, log a trace
704
         * message indicating the client discrepancy.
705
         */
706
1.49k
        if (!check_in_list(s, group_id, clntgroups, clnt_num_groups, 0, &key_share_pos)) {
707
21
            SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_BAD_KEY_SHARE);
708
21
            goto failure;
709
21
        }
710
711
1.47k
        if (key_share_pos < previous_key_share_pos)
712
1.47k
            OSSL_TRACE1(TLS, "key share group id %d is out of RFC 8446 order\n", group_id);
713
714
1.47k
        previous_key_share_pos = key_share_pos;
715
716
1.47k
        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
54
            if (!tls_accept_ksgroup(s, s->s3.group_id, &encoded_pubkey))
724
2
                goto failure; /* SSLfatal already called */
725
            /* We have selected a key share group via HRR, hence we're done here */
726
52
            return EXTRACTION_SUCCESS_HRR;
727
54
        }
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.41k
        if (!check_in_list(s, group_id, srvrgroups, srvr_num_groups, 1, NULL)
734
1.09k
                || !tls_group_allowed(s, group_id, SSL_SECOP_CURVE_SUPPORTED)
735
1.09k
                || !tls_valid_group(s, group_id, TLS1_3_VERSION, TLS1_3_VERSION,
736
1.09k
                                    0, NULL)) {
737
            /* Share not suitable or not supported, check next share */
738
321
            continue;
739
321
        }
740
741
        /* Memorize this key share group ID and its encoded point */
742
1.09k
        (*keyshares_arr)[*keyshares_cnt] = group_id;
743
1.09k
        (*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.09k
        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.09k
    }
776
777
1.30k
    return EXTRACTION_SUCCESS;
778
779
100
failure:
780
    /* Fatal error -> free any allocated memory and return 0 */
781
100
    OPENSSL_free(*keyshares_arr);
782
100
    OPENSSL_free(*encoded_pubkey_arr);
783
100
    return EXTRACTION_FAILURE;
784
1.45k
}
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
4.81k
{
800
4.81k
    uint16_t current_group;
801
4.81k
    size_t group_idx = prio_num_groups;
802
4.81k
    size_t new_group_idx = 0;
803
804
4.81k
    *candidate_group_idx = 0;
805
4.81k
    *prio_group_idx = 0;
806
4.81k
    *selected_group = 0;
807
808
12.2k
    for (current_group = 0; current_group < candidate_num_groups; current_group++) {
809
7.44k
        if (!check_in_list(s, candidate_groups[current_group], prio_groups,
810
7.44k
                           prio_num_groups, 1, &new_group_idx)
811
1.34k
            || !tls_group_allowed(s, candidate_groups[current_group],
812
1.34k
                                  SSL_SECOP_CURVE_SUPPORTED)
813
1.34k
            || !tls_valid_group(s, candidate_groups[current_group], TLS1_3_VERSION,
814
1.34k
                                TLS1_3_VERSION, 0, NULL))
815
            /* No overlap or group not suitable, check next group */
816
6.09k
            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.34k
        if (new_group_idx < group_idx) {
823
1.30k
            group_idx = new_group_idx;
824
1.30k
            *candidate_group_idx = current_group;
825
1.30k
            *prio_group_idx = group_idx;
826
1.30k
            *selected_group = prio_groups[group_idx];
827
1.30k
        }
828
1.34k
    }
829
4.81k
}
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
1.48k
{
835
1.48k
#ifndef OPENSSL_NO_TLS1_3
836
1.48k
    PACKET key_share_list;
837
1.48k
    const uint16_t *clntgroups, *srvrgroups;
838
1.48k
    const size_t *srvrtuples;
839
1.48k
    uint16_t *first_group_in_tuple;
840
1.48k
    size_t clnt_num_groups, srvr_num_groups, srvr_num_tuples;
841
1.48k
    PACKET *encoded_pubkey_arr = NULL;
842
1.48k
    uint16_t *keyshares_arr = NULL;
843
1.48k
    size_t keyshares_cnt = 0;
844
1.48k
    size_t keyshares_max = GROUPLIST_INCREMENT;
845
    /* We conservatively assume that we did not find a suitable group */
846
1.48k
    uint16_t group_id_candidate = 0;
847
1.48k
    KS_EXTRACTION_RESULT ks_extraction_result;
848
1.48k
    size_t current_tuple;
849
1.48k
    int ret = 0;
850
851
1.48k
    s->s3.group_id_candidate = 0;
852
1.48k
    if (s->hit && (s->ext.psk_kex_mode & TLSEXT_KEX_MODE_FLAG_KE_DHE) == 0)
853
0
        return 1;
854
855
    /* Sanity check */
856
1.48k
    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
1.48k
    if (!PACKET_as_length_prefixed_2(pkt, &key_share_list)) {
862
27
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_LENGTH_MISMATCH);
863
27
        return 0;
864
27
    }
865
866
    /* Get list of server supported groups and the group tuples */
867
1.46k
    tls1_get_supported_groups(s, &srvrgroups, &srvr_num_groups);
868
1.46k
    tls1_get_group_tuples(s, &srvrtuples, &srvr_num_tuples);
869
    /* Get the clients list of supported groups. */
870
1.46k
    tls1_get_peer_groups(s, &clntgroups, &clnt_num_groups);
871
872
1.46k
    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
2
        SSLfatal(s, SSL_AD_MISSING_EXTENSION,
879
2
                 SSL_R_MISSING_SUPPORTED_GROUPS_EXTENSION);
880
2
        return 0;
881
2
    }
882
883
1.45k
    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
2
        SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_BAD_KEY_SHARE);
890
2
        return 0;
891
2
    }
892
893
    /* We parse the key share extension and memorize the entries (after some checks) */
894
1.45k
    ks_extraction_result = extract_keyshares(s,
895
1.45k
                                             &key_share_list,
896
1.45k
                                             clntgroups, clnt_num_groups,
897
1.45k
                                             srvrgroups, srvr_num_groups,
898
1.45k
                                             &keyshares_arr, &encoded_pubkey_arr,
899
1.45k
                                             &keyshares_cnt, &keyshares_max);
900
901
1.45k
    if (ks_extraction_result == EXTRACTION_FAILURE) /* Fatal error during tests */
902
100
        return 0; /* Memory already freed and SSLfatal already called */
903
1.35k
    if (ks_extraction_result == EXTRACTION_SUCCESS_HRR) /* Successful HRR */
904
52
        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.30k
    first_group_in_tuple = (uint16_t *)srvrgroups;
924
2.94k
    for (current_tuple = 0; current_tuple < srvr_num_tuples; current_tuple++) {
925
2.93k
        size_t number_of_groups_in_tuple = srvrtuples[current_tuple];
926
2.93k
        int prio_group_idx = 0, candidate_group_idx = 0;
927
928
        /* Server or client preference ? */
929
2.93k
        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
2.93k
        } else { /* We have client preference */
972
2.93k
            check_overlap(s,
973
2.93k
                          keyshares_arr, keyshares_cnt,
974
2.93k
                          first_group_in_tuple, number_of_groups_in_tuple,
975
2.93k
                          &prio_group_idx, &candidate_group_idx,
976
2.93k
                          &group_id_candidate);
977
2.93k
            if (group_id_candidate > 0) {
978
1.06k
                if (!tls_accept_ksgroup(s, group_id_candidate, &encoded_pubkey_arr[prio_group_idx]))
979
25
                    goto err;
980
1.03k
                goto end;
981
1.87k
            } else {
982
1.87k
                check_overlap(s,
983
1.87k
                              clntgroups, clnt_num_groups,
984
1.87k
                              first_group_in_tuple, number_of_groups_in_tuple,
985
1.87k
                              &prio_group_idx, &candidate_group_idx,
986
1.87k
                              &group_id_candidate);
987
1.87k
                if (group_id_candidate > 0) {
988
239
                    s->s3.group_id_candidate = group_id_candidate;
989
239
                    goto end;
990
1.63k
                } else {
991
1.63k
                    first_group_in_tuple = &first_group_in_tuple[number_of_groups_in_tuple];
992
1.63k
                    continue;
993
1.63k
                }
994
1.87k
            }
995
2.93k
        }
996
2.93k
    }
997
998
1.33k
end:
999
1.33k
    ret = 1;
1000
1001
1.35k
err:
1002
1.35k
    OPENSSL_free(keyshares_arr);
1003
1.35k
    OPENSSL_free(encoded_pubkey_arr);
1004
1.35k
    return ret;
1005
1006
0
#endif
1007
1008
0
    return 1;
1009
1.33k
}
1010
1011
int tls_parse_ctos_cookie(SSL_CONNECTION *s, PACKET *pkt, unsigned int context,
1012
                          X509 *x, size_t chainidx)
1013
85
{
1014
85
#ifndef OPENSSL_NO_TLS1_3
1015
85
    unsigned int format, version, key_share, group_id;
1016
85
    EVP_MD_CTX *hctx;
1017
85
    EVP_PKEY *pkey;
1018
85
    PACKET cookie, raw, chhash, appcookie;
1019
85
    WPACKET hrrpkt;
1020
85
    const unsigned char *data, *mdin, *ciphdata;
1021
85
    unsigned char hmac[SHA256_DIGEST_LENGTH];
1022
85
    unsigned char hrr[MAX_HRR_SIZE];
1023
85
    size_t rawlen, hmaclen, hrrlen, ciphlen;
1024
85
    uint64_t tm, now;
1025
85
    SSL *ssl = SSL_CONNECTION_GET_SSL(s);
1026
85
    SSL_CTX *sctx = SSL_CONNECTION_GET_CTX(s);
1027
1028
    /* Ignore any cookie if we're not set up to verify it */
1029
85
    if (sctx->verify_stateless_cookie_cb == NULL
1030
0
            || (s->s3.flags & TLS1_FLAGS_STATELESS) == 0)
1031
85
        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
17.9k
{
1225
17.9k
    PACKET supported_groups_list;
1226
1227
    /* Each group is 2 bytes and we must have at least 1. */
1228
17.9k
    if (!PACKET_as_length_prefixed_2(pkt, &supported_groups_list)
1229
17.7k
            || PACKET_remaining(&supported_groups_list) == 0
1230
17.6k
            || (PACKET_remaining(&supported_groups_list) % 2) != 0) {
1231
236
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
1232
236
        return 0;
1233
236
    }
1234
1235
17.6k
    if (!s->hit || SSL_CONNECTION_IS_TLS13(s)) {
1236
17.6k
        OPENSSL_free(s->ext.peer_supportedgroups);
1237
17.6k
        s->ext.peer_supportedgroups = NULL;
1238
17.6k
        s->ext.peer_supportedgroups_len = 0;
1239
17.6k
        if (!tls1_save_u16(&supported_groups_list,
1240
17.6k
                           &s->ext.peer_supportedgroups,
1241
17.6k
                           &s->ext.peer_supportedgroups_len)) {
1242
0
            SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1243
0
            return 0;
1244
0
        }
1245
17.6k
    }
1246
1247
17.6k
    return 1;
1248
17.6k
}
1249
1250
int tls_parse_ctos_ems(SSL_CONNECTION *s, PACKET *pkt, unsigned int context,
1251
                       X509 *x, size_t chainidx)
1252
4.32k
{
1253
    /* The extension must always be empty */
1254
4.32k
    if (PACKET_remaining(pkt) != 0) {
1255
12
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
1256
12
        return 0;
1257
12
    }
1258
1259
4.31k
    if (s->options & SSL_OP_NO_EXTENDED_MASTER_SECRET)
1260
0
        return 1;
1261
1262
4.31k
    s->s3.flags |= TLS1_FLAGS_RECEIVED_EXTMS;
1263
1264
4.31k
    return 1;
1265
4.31k
}
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.55k
{
1271
2.55k
    if (PACKET_remaining(pkt) != 0) {
1272
7
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
1273
7
        return 0;
1274
7
    }
1275
1276
2.54k
    if (s->hello_retry_request != SSL_HRR_NONE) {
1277
14
        SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_BAD_EXTENSION);
1278
14
        return 0;
1279
14
    }
1280
1281
2.52k
    return 1;
1282
2.54k
}
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
385
{
1315
385
    PACKET identities, binders, binder;
1316
385
    size_t binderoffset;
1317
385
    int hashsize;
1318
385
    SSL_SESSION *sess = NULL;
1319
385
    unsigned int id, i, ext = 0;
1320
385
    const EVP_MD *md = NULL;
1321
385
    SSL_CTX *sctx = SSL_CONNECTION_GET_CTX(s);
1322
385
    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
385
    if ((s->ext.psk_kex_mode
1329
385
            & (TLSEXT_KEX_MODE_FLAG_KE | TLSEXT_KEX_MODE_FLAG_KE_DHE)) == 0)
1330
13
        return 1;
1331
1332
372
    if (!PACKET_get_length_prefixed_2(pkt, &identities)) {
1333
25
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
1334
25
        return 0;
1335
25
    }
1336
1337
347
    s->ext.ticket_expected = 0;
1338
669
    for (id = 0; PACKET_remaining(&identities) != 0; id++) {
1339
503
        PACKET identity;
1340
503
        unsigned long ticket_agel;
1341
503
        size_t idlen;
1342
1343
503
        if (!PACKET_get_length_prefixed_2(&identities, &identity)
1344
446
                || !PACKET_get_net_4(&identities, &ticket_agel)) {
1345
60
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
1346
60
            return 0;
1347
60
        }
1348
1349
443
        idlen = PACKET_remaining(&identity);
1350
443
        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
443
#ifndef OPENSSL_NO_PSK
1358
443
        if (sess == NULL
1359
443
                && 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
443
#endif /* OPENSSL_NO_PSK */
1406
1407
443
        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
443
        } else {
1429
443
            OSSL_TIME t, age, expire;
1430
443
            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
443
            if ((s->options & SSL_OP_NO_TICKET) != 0
1438
443
                    || (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
443
            else
1442
443
                ret = tls_decrypt_ticket(s, PACKET_data(&identity),
1443
443
                                         PACKET_remaining(&identity), NULL, 0,
1444
443
                                         &sess);
1445
1446
443
            if (ret == SSL_TICKET_EMPTY) {
1447
12
                SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
1448
12
                return 0;
1449
12
            }
1450
1451
431
            if (ret == SSL_TICKET_FATAL_ERR_MALLOC
1452
431
                    || 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
431
            if (ret == SSL_TICKET_NONE || ret == SSL_TICKET_NO_DECRYPT)
1457
203
                continue;
1458
1459
            /* Check for replay */
1460
228
            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
228
            age = ossl_time_subtract(ossl_ms2time(ticket_agel),
1469
228
                                     ossl_ms2time(sess->ext.tick_age_add));
1470
228
            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
228
            expire = ossl_time_add(t, ossl_ms2time(1000));
1482
1483
228
            if (id == 0
1484
227
                    && ossl_time_compare(sess->timeout, t) >= 0
1485
158
                    && ossl_time_compare(age, expire) <= 0
1486
75
                    && ossl_time_compare(ossl_time_add(age, TICKET_AGE_ALLOWANCE),
1487
75
                                         expire) >= 0) {
1488
                /*
1489
                 * Ticket age is within tolerance and not expired. We allow it
1490
                 * for early data
1491
                 */
1492
53
                s->ext.early_data_ok = 1;
1493
53
            }
1494
228
        }
1495
1496
228
        md = ssl_md(sctx, sess->cipher->algorithm2);
1497
228
        if (md == NULL) {
1498
0
            SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1499
0
            goto err;
1500
0
        }
1501
228
        if (!EVP_MD_is_a(md,
1502
228
                EVP_MD_get0_name(ssl_md(sctx,
1503
228
                                        s->s3.tmp.new_cipher->algorithm2)))) {
1504
            /* The ciphersuite is not compatible with this session. */
1505
119
            SSL_SESSION_free(sess);
1506
119
            sess = NULL;
1507
119
            s->ext.early_data_ok = 0;
1508
119
            s->ext.ticket_expected = 0;
1509
119
            continue;
1510
119
        }
1511
109
        break;
1512
228
    }
1513
1514
275
    if (sess == NULL)
1515
166
        return 1;
1516
1517
109
    binderoffset = PACKET_data(pkt) - (const unsigned char *)s->init_buf->data;
1518
109
    hashsize = EVP_MD_get_size(md);
1519
109
    if (hashsize <= 0)
1520
0
        goto err;
1521
1522
109
    if (!PACKET_get_length_prefixed_2(pkt, &binders)) {
1523
43
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
1524
43
        goto err;
1525
43
    }
1526
1527
113
    for (i = 0; i <= id; i++) {
1528
66
        if (!PACKET_get_length_prefixed_1(&binders, &binder)) {
1529
19
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
1530
19
            goto err;
1531
19
        }
1532
66
    }
1533
1534
47
    if (PACKET_remaining(&binder) != (size_t)hashsize) {
1535
15
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
1536
15
        goto err;
1537
15
    }
1538
32
    if (tls_psk_do_binder(s, md, (const unsigned char *)s->init_buf->data,
1539
32
                          binderoffset, PACKET_data(&binder), NULL, sess, 0,
1540
32
                          ext) != 1) {
1541
        /* SSLfatal() already called */
1542
28
        goto err;
1543
28
    }
1544
1545
4
    s->ext.tick_identity = id;
1546
1547
4
    SSL_SESSION_free(s->session);
1548
4
    s->session = sess;
1549
4
    return 1;
1550
105
err:
1551
105
    SSL_SESSION_free(sess);
1552
105
    return 0;
1553
32
}
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
150
{
1560
150
    if (PACKET_remaining(pkt) != 0) {
1561
10
        SSLfatal(s, SSL_AD_DECODE_ERROR,
1562
10
                 SSL_R_POST_HANDSHAKE_AUTH_ENCODING_ERR);
1563
10
        return 0;
1564
10
    }
1565
1566
140
    s->post_handshake_auth = SSL_PHA_EXT_RECEIVED;
1567
1568
140
    return 1;
1569
150
}
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
22.9k
{
1578
22.9k
    if (!s->s3.send_connection_binding)
1579
15.9k
        return EXT_RETURN_NOT_SENT;
1580
1581
    /* Still add this even if SSL_OP_NO_RENEGOTIATION is set */
1582
6.99k
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_renegotiate)
1583
6.99k
            || !WPACKET_start_sub_packet_u16(pkt)
1584
6.99k
            || !WPACKET_start_sub_packet_u8(pkt)
1585
6.99k
            || !WPACKET_memcpy(pkt, s->s3.previous_client_finished,
1586
6.99k
                               s->s3.previous_client_finished_len)
1587
6.99k
            || !WPACKET_memcpy(pkt, s->s3.previous_server_finished,
1588
6.99k
                               s->s3.previous_server_finished_len)
1589
6.99k
            || !WPACKET_close(pkt)
1590
6.99k
            || !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
6.99k
    return EXT_RETURN_SENT;
1596
6.99k
}
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
25.8k
{
1602
25.8k
    if (s->servername_done != 1)
1603
25.8k
        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
25.8k
{
1626
25.8k
    if (!USE_MAX_FRAGMENT_LENGTH_EXT(s->session))
1627
24.8k
        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.00k
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_max_fragment_length)
1634
1.00k
        || !WPACKET_start_sub_packet_u16(pkt)
1635
1.00k
        || !WPACKET_put_bytes_u8(pkt, s->session->ext.max_fragment_len_mode)
1636
1.00k
        || !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.00k
    return EXT_RETURN_SENT;
1642
1.00k
}
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
22.9k
{
1648
22.9k
    unsigned long alg_k = s->s3.tmp.new_cipher->algorithm_mkey;
1649
22.9k
    unsigned long alg_a = s->s3.tmp.new_cipher->algorithm_auth;
1650
22.9k
    int using_ecc = ((alg_k & SSL_kECDHE) || (alg_a & SSL_aECDSA))
1651
10.7k
                    && (s->ext.peer_ecpointformats != NULL);
1652
22.9k
    const unsigned char *plist;
1653
22.9k
    size_t plistlen;
1654
1655
22.9k
    if (!using_ecc)
1656
19.6k
        return EXT_RETURN_NOT_SENT;
1657
1658
3.30k
    tls1_get_formatlist(s, &plist, &plistlen);
1659
3.30k
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_ec_point_formats)
1660
3.30k
            || !WPACKET_start_sub_packet_u16(pkt)
1661
3.30k
            || !WPACKET_sub_memcpy_u8(pkt, plist, plistlen)
1662
3.30k
            || !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.30k
    return EXT_RETURN_SENT;
1668
3.30k
}
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
25.8k
{
1674
25.8k
    const uint16_t *groups;
1675
25.8k
    size_t numgroups, i, first = 1;
1676
25.8k
    int version;
1677
1678
    /* s->s3.group_id is non zero if we accepted a key_share */
1679
25.8k
    if (s->s3.group_id == 0)
1680
22.9k
        return EXT_RETURN_NOT_SENT;
1681
1682
    /* Get our list of supported groups */
1683
2.84k
    tls1_get_supported_groups(s, &groups, &numgroups);
1684
2.84k
    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
2.84k
    version = SSL_version(SSL_CONNECTION_GET_SSL(s));
1691
11.4k
    for (i = 0; i < numgroups; i++) {
1692
10.4k
        uint16_t group = groups[i];
1693
1694
10.4k
        if (tls_valid_group(s, group, version, version, 0, NULL)
1695
10.4k
                && tls_group_allowed(s, group, SSL_SECOP_CURVE_SUPPORTED)) {
1696
10.4k
            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
2.84k
                if (s->s3.group_id == group)
1702
1.77k
                    return EXT_RETURN_NOT_SENT;
1703
1704
                /* Add extension header */
1705
1.06k
                if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_supported_groups)
1706
                           /* Sub-packet for supported_groups extension */
1707
1.06k
                        || !WPACKET_start_sub_packet_u16(pkt)
1708
1.06k
                        || !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.06k
                first = 0;
1714
1.06k
            }
1715
8.65k
            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
8.65k
        }
1720
10.4k
    }
1721
1722
1.06k
    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.06k
    return EXT_RETURN_SENT;
1728
1.06k
}
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
22.9k
{
1734
22.9k
    if (!s->ext.ticket_expected || !tls_use_ticket(s)) {
1735
18.2k
        s->ext.ticket_expected = 0;
1736
18.2k
        return EXT_RETURN_NOT_SENT;
1737
18.2k
    }
1738
1739
4.76k
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_session_ticket)
1740
4.76k
            || !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
4.76k
    return EXT_RETURN_SENT;
1746
4.76k
}
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
20.2k
{
1753
    /* We don't currently support this extension inside a CertificateRequest */
1754
20.2k
    if (context == SSL_EXT_TLS1_3_CERTIFICATE_REQUEST)
1755
0
        return EXT_RETURN_NOT_SENT;
1756
1757
20.2k
    if (!s->ext.status_expected)
1758
20.2k
        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
22.9k
{
1792
22.9k
    const unsigned char *npa;
1793
22.9k
    unsigned int npalen;
1794
22.9k
    int ret;
1795
22.9k
    int npn_seen = s->s3.npn_seen;
1796
22.9k
    SSL_CTX *sctx = SSL_CONNECTION_GET_CTX(s);
1797
1798
22.9k
    s->s3.npn_seen = 0;
1799
22.9k
    if (!npn_seen || sctx->ext.npn_advertised_cb == NULL)
1800
22.9k
        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
25.8k
{
1821
25.8k
    if (s->s3.alpn_selected == NULL)
1822
25.8k
        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
25.8k
{
1844
25.8k
    if (s->srtp_profile == NULL)
1845
25.8k
        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
22.9k
{
1865
22.9k
    if (!s->ext.use_etm)
1866
21.5k
        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.41k
    if (s->s3.tmp.new_cipher->algorithm_mac == SSL_AEAD
1873
1.11k
        || s->s3.tmp.new_cipher->algorithm_enc == SSL_RC4
1874
1.11k
        || s->s3.tmp.new_cipher->algorithm_enc == SSL_eGOST2814789CNT
1875
1.11k
        || s->s3.tmp.new_cipher->algorithm_enc == SSL_eGOST2814789CNT12
1876
1.11k
        || s->s3.tmp.new_cipher->algorithm_enc == SSL_MAGMA
1877
1.11k
        || s->s3.tmp.new_cipher->algorithm_enc == SSL_KUZNYECHIK) {
1878
300
        s->ext.use_etm = 0;
1879
300
        return EXT_RETURN_NOT_SENT;
1880
300
    }
1881
1882
1.11k
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_encrypt_then_mac)
1883
1.11k
            || !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.11k
    return EXT_RETURN_SENT;
1889
1.11k
}
1890
1891
EXT_RETURN tls_construct_stoc_ems(SSL_CONNECTION *s, WPACKET *pkt,
1892
                                  unsigned int context,
1893
                                  X509 *x, size_t chainidx)
1894
22.9k
{
1895
22.9k
    if ((s->s3.flags & TLS1_FLAGS_RECEIVED_EXTMS) == 0)
1896
19.3k
        return EXT_RETURN_NOT_SENT;
1897
1898
3.65k
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_extended_master_secret)
1899
3.65k
            || !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
3.65k
    return EXT_RETURN_SENT;
1905
3.65k
}
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
3.55k
{
1911
3.55k
    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
3.55k
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_supported_versions)
1917
3.55k
            || !WPACKET_start_sub_packet_u16(pkt)
1918
3.55k
            || !WPACKET_put_bytes_u16(pkt, s->version)
1919
3.55k
            || !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
3.55k
    return EXT_RETURN_SENT;
1925
3.55k
}
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
3.55k
{
1931
3.55k
#ifndef OPENSSL_NO_TLS1_3
1932
3.55k
    unsigned char *encoded_pubkey;
1933
3.55k
    size_t encoded_pubkey_len = 0;
1934
3.55k
    EVP_PKEY *ckey = s->s3.peer_tmp, *skey = NULL;
1935
3.55k
    const TLS_GROUP_INFO *ginf = NULL;
1936
1937
3.55k
    if (s->hello_retry_request == SSL_HRR_PENDING) {
1938
681
        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
681
        if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_key_share)
1943
681
                || !WPACKET_start_sub_packet_u16(pkt)
1944
681
                || !WPACKET_put_bytes_u16(pkt, s->s3.group_id)
1945
681
                || !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
681
        return EXT_RETURN_SENT;
1951
681
    }
1952
1953
2.87k
    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
2.87k
    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
2.87k
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_key_share)
1973
2.87k
            || !WPACKET_start_sub_packet_u16(pkt)
1974
2.87k
            || !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
2.87k
    if ((ginf = tls1_group_id_lookup(SSL_CONNECTION_GET_CTX(s),
1980
2.87k
                                     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
2.87k
    if (!ginf->is_kem) {
1986
        /* Regular KEX */
1987
2.85k
        skey = ssl_generate_pkey(s, ckey);
1988
2.85k
        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
2.85k
        encoded_pubkey_len = EVP_PKEY_get1_encoded_public_key(skey, &encoded_pubkey);
1995
2.85k
        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
2.85k
        if (!WPACKET_sub_memcpy_u16(pkt, encoded_pubkey, encoded_pubkey_len)
2002
2.85k
                || !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
2.85k
        OPENSSL_free(encoded_pubkey);
2009
2010
        /*
2011
         * This causes the crypto state to be updated based on the derived keys
2012
         */
2013
2.85k
        s->s3.tmp.pkey = skey;
2014
2.85k
        if (ssl_derive(s, skey, ckey, 1) == 0) {
2015
            /* SSLfatal() already called */
2016
20
            return EXT_RETURN_FAIL;
2017
20
        }
2018
2.85k
    } else {
2019
        /* KEM mode */
2020
19
        unsigned char *ct = NULL;
2021
19
        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
19
        if (ssl_encapsulate(s, ckey, &ct, &ctlen, 0) == 0) {
2030
            /* SSLfatal() already called */
2031
9
            return EXT_RETURN_FAIL;
2032
9
        }
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
2.84k
    s->s3.did_kex = 1;
2057
2.84k
    return EXT_RETURN_SENT;
2058
#else
2059
    return EXT_RETURN_FAIL;
2060
#endif
2061
2.87k
}
2062
2063
EXT_RETURN tls_construct_stoc_cookie(SSL_CONNECTION *s, WPACKET *pkt,
2064
                                     unsigned int context,
2065
                                     X509 *x, size_t chainidx)
2066
681
{
2067
681
#ifndef OPENSSL_NO_TLS1_3
2068
681
    unsigned char *hashval1, *hashval2, *appcookie1, *appcookie2, *cookie;
2069
681
    unsigned char *hmac, *hmac2;
2070
681
    size_t startlen, ciphlen, totcookielen, hashlen, hmaclen, appcookielen;
2071
681
    EVP_MD_CTX *hctx;
2072
681
    EVP_PKEY *pkey;
2073
681
    int ret = EXT_RETURN_FAIL;
2074
681
    SSL_CTX *sctx = SSL_CONNECTION_GET_CTX(s);
2075
681
    SSL *ssl = SSL_CONNECTION_GET_SSL(s);
2076
681
    SSL *ussl = SSL_CONNECTION_GET_USER_SSL(s);
2077
2078
681
    if ((s->s3.flags & TLS1_FLAGS_STATELESS) == 0)
2079
681
        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
22.9k
{
2196
22.9k
    const unsigned char cryptopro_ext[36] = {
2197
22.9k
        0xfd, 0xe8,         /* 65000 */
2198
22.9k
        0x00, 0x20,         /* 32 bytes length */
2199
22.9k
        0x30, 0x1e, 0x30, 0x08, 0x06, 0x06, 0x2a, 0x85,
2200
22.9k
        0x03, 0x02, 0x02, 0x09, 0x30, 0x08, 0x06, 0x06,
2201
22.9k
        0x2a, 0x85, 0x03, 0x02, 0x02, 0x16, 0x30, 0x08,
2202
22.9k
        0x06, 0x06, 0x2a, 0x85, 0x03, 0x02, 0x02, 0x17
2203
22.9k
    };
2204
2205
22.9k
    if (((s->s3.tmp.new_cipher->id & 0xFFFF) != 0x80
2206
22.9k
         && (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
22.9k
        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
2.84k
{
2223
2.84k
    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
2.84k
    if (s->ext.early_data != SSL_EARLY_DATA_ACCEPTED)
2239
2.84k
        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
2.84k
{
2255
2.84k
    if (!s->hit)
2256
2.84k
        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
23.3k
{
2273
23.3k
    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
23.3k
    if (sc->ext.client_cert_type == TLSEXT_cert_type_x509) {
2282
23.3k
        sc->ext.client_cert_type_ctos = OSSL_CERT_TYPE_CTOS_NONE;
2283
23.3k
        return EXT_RETURN_NOT_SENT;
2284
23.3k
    }
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
213
{
2329
213
    PACKET supported_cert_types;
2330
213
    const unsigned char *data;
2331
213
    size_t len;
2332
2333
    /* Ignore the extension */
2334
213
    if (sc->client_cert_type == NULL) {
2335
213
        sc->ext.client_cert_type_ctos = OSSL_CERT_TYPE_CTOS_NONE;
2336
213
        sc->ext.client_cert_type = TLSEXT_cert_type_x509;
2337
213
        return 1;
2338
213
    }
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
23.3k
{
2368
23.3k
    if (sc->ext.server_cert_type == TLSEXT_cert_type_x509) {
2369
23.3k
        sc->ext.server_cert_type_ctos = OSSL_CERT_TYPE_CTOS_NONE;
2370
23.3k
        return EXT_RETURN_NOT_SENT;
2371
23.3k
    }
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
485
{
2394
485
    PACKET supported_cert_types;
2395
485
    const unsigned char *data;
2396
485
    size_t len;
2397
2398
    /* Ignore the extension */
2399
485
    if (sc->server_cert_type == NULL) {
2400
485
        sc->ext.server_cert_type_ctos = OSSL_CERT_TYPE_CTOS_NONE;
2401
485
        sc->ext.server_cert_type = TLSEXT_cert_type_x509;
2402
485
        return 1;
2403
485
    }
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
}