Coverage Report

Created: 2025-11-16 06:40

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