Coverage Report

Created: 2026-07-23 06:28

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