Coverage Report

Created: 2026-04-09 06:50

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