Coverage Report

Created: 2026-04-01 06:39

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
179
{
44
179
    unsigned int ilen;
45
179
    const unsigned char *data;
46
47
    /* Parse the length byte */
48
179
    if (!PACKET_get_1(pkt, &ilen)
49
177
        || !PACKET_get_bytes(pkt, &data, ilen)) {
50
3
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_RENEGOTIATION_ENCODING_ERR);
51
3
        return 0;
52
3
    }
53
54
    /* Check that the extension matches */
55
176
    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
175
    if (memcmp(data, s->s3.previous_client_finished,
61
175
            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
175
    s->s3.send_connection_binding = 1;
67
68
175
    return 1;
69
175
}
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.47k
{
97
9.47k
    unsigned int servname_type;
98
9.47k
    PACKET sni, hostname;
99
100
9.47k
    if (!PACKET_as_length_prefixed_2(pkt, &sni)
101
        /* ServerNameList must be at least 1 byte long. */
102
9.24k
        || PACKET_remaining(&sni) == 0) {
103
251
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
104
251
        return 0;
105
251
    }
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.22k
    if (!PACKET_get_1(&sni, &servname_type)
119
9.22k
        || servname_type != TLSEXT_NAMETYPE_host_name
120
9.19k
        || !PACKET_as_length_prefixed_2(&sni, &hostname)) {
121
174
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
122
174
        return 0;
123
174
    }
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.05k
    if (!s->hit || SSL_IS_TLS13(s)) {
130
9.04k
        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.03k
        if (PACKET_contains_zero_byte(&hostname)) {
136
15
            SSLfatal(s, SSL_AD_UNRECOGNIZED_NAME, SSL_R_BAD_EXTENSION);
137
15
            return 0;
138
15
        }
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.01k
        OPENSSL_free(s->ext.hostname);
145
9.01k
        s->ext.hostname = NULL;
146
9.01k
        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.01k
        s->servername_done = 1;
152
9.01k
    } 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.03k
    return 1;
164
9.05k
}
165
166
int tls_parse_ctos_maxfragmentlen(SSL *s, PACKET *pkt, unsigned int context,
167
    X509 *x, size_t chainidx)
168
1.36k
{
169
1.36k
    unsigned int value;
170
171
1.36k
    if (PACKET_remaining(pkt) != 1 || !PACKET_get_1(pkt, &value)) {
172
139
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
173
139
        return 0;
174
139
    }
175
176
    /* Received |value| should be a valid max-fragment-length code. */
177
1.22k
    if (!IS_MAX_FRAGMENT_LENGTH_EXT_VALID(value)) {
178
56
        SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER,
179
56
            SSL_R_SSL3_EXT_INVALID_MAX_FRAGMENT_LENGTH);
180
56
        return 0;
181
56
    }
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.16k
    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.16k
        s->session->ext.max_fragment_len_mode = value;
203
204
1.16k
    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
149
{
211
149
    PACKET srp_I;
212
213
149
    if (!PACKET_as_length_prefixed_1(pkt, &srp_I)
214
86
        || PACKET_contains_zero_byte(&srp_I)) {
215
86
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
216
86
        return 0;
217
86
    }
218
219
63
    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
63
    return 1;
225
63
}
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.18k
{
231
6.18k
    PACKET ec_point_format_list;
232
233
6.18k
    if (!PACKET_as_length_prefixed_1(pkt, &ec_point_format_list)
234
6.04k
        || PACKET_remaining(&ec_point_format_list) == 0) {
235
159
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
236
159
        return 0;
237
159
    }
238
239
6.02k
    if (!s->hit) {
240
5.86k
        if (!PACKET_memdup(&ec_point_format_list,
241
5.86k
                &s->ext.peer_ecpointformats,
242
5.86k
                &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.86k
    }
247
248
6.02k
    return 1;
249
6.02k
}
250
251
int tls_parse_ctos_session_ticket(SSL *s, PACKET *pkt, unsigned int context,
252
    X509 *x, size_t chainidx)
253
5.86k
{
254
5.86k
    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.86k
    return 1;
260
5.86k
}
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.24k
{
267
1.24k
    PACKET supported_sig_algs;
268
269
1.24k
    if (!PACKET_as_length_prefixed_2(pkt, &supported_sig_algs)
270
1.07k
        || PACKET_remaining(&supported_sig_algs) == 0) {
271
175
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
272
175
        return 0;
273
175
    }
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.06k
    if ((!s->server || (s->server && !s->hit))
281
1.05k
        && !tls1_save_sigalgs(s, &supported_sig_algs, 1)) {
282
20
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
283
20
        return 0;
284
20
    }
285
286
1.04k
    return 1;
287
1.06k
}
288
289
int tls_parse_ctos_sig_algs(SSL *s, PACKET *pkt, unsigned int context, X509 *x,
290
    size_t chainidx)
291
9.95k
{
292
9.95k
    PACKET supported_sig_algs;
293
294
9.95k
    if (!PACKET_as_length_prefixed_2(pkt, &supported_sig_algs)
295
9.71k
        || PACKET_remaining(&supported_sig_algs) == 0) {
296
256
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
297
256
        return 0;
298
256
    }
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.70k
    if ((!s->server || (s->server && !s->hit))
306
9.55k
        && !tls1_save_sigalgs(s, &supported_sig_algs, 0)) {
307
18
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
308
18
        return 0;
309
18
    }
310
311
9.68k
    return 1;
312
9.70k
}
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.80k
{
318
6.80k
    PACKET responder_id_list, exts;
319
320
    /* We ignore this in a resumption handshake */
321
6.80k
    if (s->hit)
322
40
        return 1;
323
324
    /* Not defined if we get one of these in a client Certificate */
325
6.76k
    if (x != NULL)
326
0
        return 1;
327
328
6.76k
    if (!PACKET_get_1(pkt, (unsigned int *)&s->ext.status_type)) {
329
25
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
330
25
        return 0;
331
25
    }
332
333
6.73k
    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
295
        s->ext.status_type = TLSEXT_STATUSTYPE_nothing;
338
295
        return 1;
339
295
    }
340
341
6.44k
    if (!PACKET_get_length_prefixed_2(pkt, &responder_id_list)) {
342
119
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
343
119
        return 0;
344
119
    }
345
346
    /*
347
     * We remove any OCSP_RESPIDs from a previous handshake
348
     * to prevent unbounded memory growth - CVE-2016-6304
349
     */
350
6.32k
    sk_OCSP_RESPID_pop_free(s->ext.ocsp.ids, OCSP_RESPID_free);
351
6.32k
    if (PACKET_remaining(&responder_id_list) > 0) {
352
3.36k
        s->ext.ocsp.ids = sk_OCSP_RESPID_new_null();
353
3.36k
        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.36k
    } else {
358
2.96k
        s->ext.ocsp.ids = NULL;
359
2.96k
    }
360
361
6.43k
    while (PACKET_remaining(&responder_id_list) > 0) {
362
3.46k
        OCSP_RESPID *id;
363
3.46k
        PACKET responder_id;
364
3.46k
        const unsigned char *id_data;
365
366
3.46k
        if (!PACKET_get_length_prefixed_2(&responder_id_list, &responder_id)
367
3.37k
            || PACKET_remaining(&responder_id) == 0) {
368
103
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
369
103
            return 0;
370
103
        }
371
372
3.35k
        id_data = PACKET_data(&responder_id);
373
3.35k
        id = d2i_OCSP_RESPID(NULL, &id_data,
374
3.35k
            (int)PACKET_remaining(&responder_id));
375
3.35k
        if (id == NULL) {
376
3.17k
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
377
3.17k
            return 0;
378
3.17k
        }
379
380
183
        if (id_data != PACKET_end(&responder_id)) {
381
67
            OCSP_RESPID_free(id);
382
67
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
383
384
67
            return 0;
385
67
        }
386
387
116
        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
116
    }
394
395
    /* Read in request_extensions */
396
2.97k
    if (!PACKET_as_length_prefixed_2(pkt, &exts)) {
397
97
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
398
97
        return 0;
399
97
    }
400
401
2.87k
    if (PACKET_remaining(&exts) > 0) {
402
1.05k
        const unsigned char *ext_data = PACKET_data(&exts);
403
404
1.05k
        sk_X509_EXTENSION_pop_free(s->ext.ocsp.exts,
405
1.05k
            X509_EXTENSION_free);
406
1.05k
        s->ext.ocsp.exts = d2i_X509_EXTENSIONS(NULL, &ext_data, (int)PACKET_remaining(&exts));
407
1.05k
        if (s->ext.ocsp.exts == NULL || ext_data != PACKET_end(&exts)) {
408
1.04k
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
409
1.04k
            return 0;
410
1.04k
        }
411
1.05k
    }
412
413
1.83k
    return 1;
414
2.87k
}
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
19
{
421
    /*
422
     * We shouldn't accept this extension on a
423
     * renegotiation.
424
     */
425
19
    if (SSL_IS_FIRST_HANDSHAKE(s))
426
19
        s->s3.npn_seen = 1;
427
428
19
    return 1;
429
19
}
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
426
{
439
426
    PACKET protocol_list, save_protocol_list, protocol;
440
441
426
    if (!SSL_IS_FIRST_HANDSHAKE(s))
442
0
        return 1;
443
444
426
    if (!PACKET_as_length_prefixed_2(pkt, &protocol_list)
445
296
        || PACKET_remaining(&protocol_list) < 2) {
446
142
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
447
142
        return 0;
448
142
    }
449
450
284
    save_protocol_list = protocol_list;
451
2.30k
    do {
452
        /* Protocol names can't be empty. */
453
2.30k
        if (!PACKET_get_length_prefixed_1(&protocol_list, &protocol)
454
2.23k
            || PACKET_remaining(&protocol) == 0) {
455
107
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
456
107
            return 0;
457
107
        }
458
2.30k
    } while (PACKET_remaining(&protocol_list) != 0);
459
460
177
    OPENSSL_free(s->s3.alpn_proposed);
461
177
    s->s3.alpn_proposed = NULL;
462
177
    s->s3.alpn_proposed_len = 0;
463
177
    if (!PACKET_memdup(&save_protocol_list,
464
177
            &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
177
    return 1;
470
177
}
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.03k
{
476
1.03k
    STACK_OF(SRTP_PROTECTION_PROFILE) *srvr;
477
1.03k
    unsigned int ct, mki_len, id;
478
1.03k
    int i, srtp_pref;
479
1.03k
    PACKET subpkt;
480
481
    /* Ignore this if we have no SRTP profiles */
482
1.03k
    if (SSL_get_srtp_profiles(s) == NULL)
483
1.03k
        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.87k
{
542
1.87k
    if (!(s->options & SSL_OP_NO_ENCRYPT_THEN_MAC))
543
1.87k
        s->ext.use_etm = 1;
544
545
1.87k
    return 1;
546
1.87k
}
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
406
{
555
406
#ifndef OPENSSL_NO_TLS1_3
556
406
    PACKET psk_kex_modes;
557
406
    unsigned int mode;
558
559
406
    if (!PACKET_as_length_prefixed_1(pkt, &psk_kex_modes)
560
401
        || 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.12k
    while (PACKET_get_1(&psk_kex_modes, &mode)) {
566
1.72k
        if (mode == TLSEXT_KEX_MODE_KE_DHE)
567
604
            s->ext.psk_kex_mode |= TLSEXT_KEX_MODE_FLAG_KE_DHE;
568
1.12k
        else if (mode == TLSEXT_KEX_MODE_KE
569
356
            && (s->options & SSL_OP_ALLOW_NO_DHE_KEX) != 0)
570
0
            s->ext.psk_kex_mode |= TLSEXT_KEX_MODE_FLAG_KE;
571
1.72k
    }
572
400
#endif
573
574
400
    return 1;
575
406
}
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.05k
{
584
2.05k
#ifndef OPENSSL_NO_TLS1_3
585
2.05k
    unsigned int group_id;
586
2.05k
    PACKET key_share_list, encoded_pt;
587
2.05k
    const uint16_t *clntgroups, *srvrgroups;
588
2.05k
    size_t clnt_num_groups, srvr_num_groups;
589
2.05k
    int found = 0;
590
591
2.05k
    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.05k
    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.05k
    if (!PACKET_as_length_prefixed_2(pkt, &key_share_list)) {
601
28
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_LENGTH_MISMATCH);
602
28
        return 0;
603
28
    }
604
605
    /* Get our list of supported groups */
606
2.02k
    tls1_get_supported_groups(s, &srvrgroups, &srvr_num_groups);
607
    /* Get the clients list of supported groups. */
608
2.02k
    tls1_get_peer_groups(s, &clntgroups, &clnt_num_groups);
609
2.02k
    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.02k
    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.24k
    while (PACKET_remaining(&key_share_list) > 0) {
631
2.40k
        if (!PACKET_get_net_2(&key_share_list, &group_id)
632
2.40k
            || !PACKET_get_length_prefixed_2(&key_share_list, &encoded_pt)
633
2.35k
            || PACKET_remaining(&encoded_pt) == 0) {
634
62
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_LENGTH_MISMATCH);
635
62
            return 0;
636
62
        }
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.34k
        if (found)
643
217
            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.12k
        if (s->s3.group_id != 0
650
99
            && (group_id != s->s3.group_id
651
60
                || PACKET_remaining(&key_share_list) != 0)) {
652
42
            SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_BAD_KEY_SHARE);
653
42
            return 0;
654
42
        }
655
656
        /* Check if this share is in supported_groups sent from client */
657
2.08k
        if (!check_in_list(s, group_id, clntgroups, clnt_num_groups, 0)) {
658
29
            SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_BAD_KEY_SHARE);
659
29
            return 0;
660
29
        }
661
662
        /* Check if this share is for a group we can use */
663
2.05k
        if (!check_in_list(s, group_id, srvrgroups, srvr_num_groups, 1)
664
1.51k
            || !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.51k
            || !tls_valid_group(s, group_id, TLS1_3_VERSION, TLS1_3_VERSION,
670
1.51k
                0, NULL)) {
671
            /* Share not suitable */
672
538
            continue;
673
538
        }
674
675
1.51k
        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.51k
        s->s3.group_id = group_id;
682
        /* Cache the selected group ID in the SSL_SESSION */
683
1.51k
        s->session->kex_group = group_id;
684
685
1.51k
        if (tls13_set_encoded_pub_key(s->s3.peer_tmp,
686
1.51k
                PACKET_data(&encoded_pt),
687
1.51k
                PACKET_remaining(&encoded_pt))
688
1.51k
            <= 0) {
689
46
            SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_BAD_ECPOINT);
690
46
            return 0;
691
46
        }
692
693
1.47k
        found = 1;
694
1.47k
    }
695
1.84k
#endif
696
697
1.84k
    return 1;
698
2.02k
}
699
700
int tls_parse_ctos_cookie(SSL *s, PACKET *pkt, unsigned int context, X509 *x,
701
    size_t chainidx)
702
75
{
703
75
#ifndef OPENSSL_NO_TLS1_3
704
75
    unsigned int format, version, key_share, group_id;
705
75
    EVP_MD_CTX *hctx;
706
75
    EVP_PKEY *pkey;
707
75
    PACKET cookie, raw, chhash, appcookie;
708
75
    WPACKET hrrpkt;
709
75
    const unsigned char *data, *mdin, *ciphdata;
710
75
    unsigned char hmac[SHA256_DIGEST_LENGTH];
711
75
    unsigned char hrr[MAX_HRR_SIZE];
712
75
    size_t rawlen, hmaclen, hrrlen, ciphlen;
713
75
    uint64_t tm, now;
714
715
    /* Ignore any cookie if we're not set up to verify it */
716
75
    if (s->ctx->verify_stateless_cookie_cb == NULL
717
0
        || (s->s3.flags & TLS1_FLAGS_STATELESS) == 0)
718
75
        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
19.7k
{
913
19.7k
    PACKET supported_groups_list;
914
915
    /* Each group is 2 bytes and we must have at least 1. */
916
19.7k
    if (!PACKET_as_length_prefixed_2(pkt, &supported_groups_list)
917
19.5k
        || PACKET_remaining(&supported_groups_list) == 0
918
19.5k
        || (PACKET_remaining(&supported_groups_list) % 2) != 0) {
919
268
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
920
268
        return 0;
921
268
    }
922
923
19.5k
    if (!s->hit || SSL_IS_TLS13(s)) {
924
19.4k
        OPENSSL_free(s->ext.peer_supportedgroups);
925
19.4k
        s->ext.peer_supportedgroups = NULL;
926
19.4k
        s->ext.peer_supportedgroups_len = 0;
927
19.4k
        if (!tls1_save_u16(&supported_groups_list,
928
19.4k
                &s->ext.peer_supportedgroups,
929
19.4k
                &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.4k
    }
934
935
19.5k
    return 1;
936
19.5k
}
937
938
int tls_parse_ctos_ems(SSL *s, PACKET *pkt, unsigned int context, X509 *x,
939
    size_t chainidx)
940
4.78k
{
941
    /* The extension must always be empty */
942
4.78k
    if (PACKET_remaining(pkt) != 0) {
943
13
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
944
13
        return 0;
945
13
    }
946
947
4.77k
    if (s->options & SSL_OP_NO_EXTENDED_MASTER_SECRET)
948
0
        return 1;
949
950
4.77k
    s->s3.flags |= TLS1_FLAGS_RECEIVED_EXTMS;
951
952
4.77k
    return 1;
953
4.77k
}
954
955
int tls_parse_ctos_early_data(SSL *s, PACKET *pkt, unsigned int context,
956
    X509 *x, size_t chainidx)
957
2.58k
{
958
2.58k
    if (PACKET_remaining(pkt) != 0) {
959
6
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
960
6
        return 0;
961
6
    }
962
963
2.57k
    if (s->hello_retry_request != SSL_HRR_NONE) {
964
10
        SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_BAD_EXTENSION);
965
10
        return 0;
966
10
    }
967
968
2.56k
    return 1;
969
2.57k
}
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
94
{
1002
94
    PACKET identities, binders, binder;
1003
94
    size_t binderoffset, hashsize;
1004
94
    SSL_SESSION *sess = NULL;
1005
94
    unsigned int id, i, ext = 0;
1006
94
    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
94
    if ((s->ext.psk_kex_mode
1013
94
            & (TLSEXT_KEX_MODE_FLAG_KE | TLSEXT_KEX_MODE_FLAG_KE_DHE))
1014
94
        == 0)
1015
8
        return 1;
1016
1017
86
    if (!PACKET_get_length_prefixed_2(pkt, &identities)) {
1018
5
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
1019
5
        return 0;
1020
5
    }
1021
1022
81
    s->ext.ticket_expected = 0;
1023
172
    for (id = 0; PACKET_remaining(&identities) != 0; id++) {
1024
148
        PACKET identity;
1025
148
        unsigned long ticket_agel;
1026
148
        size_t idlen;
1027
1028
148
        if (!PACKET_get_length_prefixed_2(&identities, &identity)
1029
120
            || !PACKET_get_net_4(&identities, &ticket_agel)) {
1030
30
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
1031
30
            return 0;
1032
30
        }
1033
1034
118
        idlen = PACKET_remaining(&identity);
1035
118
        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
118
#ifndef OPENSSL_NO_PSK
1043
118
        if (sess == NULL
1044
118
            && 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
118
#endif /* OPENSSL_NO_PSK */
1090
1091
118
        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
118
        } else {
1113
118
            uint32_t ticket_age = 0, agesec, agems;
1114
118
            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
118
            if ((s->options & SSL_OP_NO_TICKET) != 0
1122
118
                || (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
118
            else
1126
118
                ret = tls_decrypt_ticket(s, PACKET_data(&identity),
1127
118
                    PACKET_remaining(&identity), NULL, 0,
1128
118
                    &sess);
1129
1130
118
            if (ret == SSL_TICKET_EMPTY) {
1131
2
                SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
1132
2
                return 0;
1133
2
            }
1134
1135
116
            if (ret == SSL_TICKET_FATAL_ERR_MALLOC
1136
116
                || 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
116
            if (ret == SSL_TICKET_NONE || ret == SSL_TICKET_NO_DECRYPT)
1141
77
                continue;
1142
1143
            /* Check for replay */
1144
39
            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
39
            ticket_age = (uint32_t)ticket_agel;
1153
39
            agesec = (uint32_t)(time(NULL) - sess->time);
1154
39
            agems = agesec * (uint32_t)1000;
1155
39
            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
39
            if (id == 0
1166
38
                && sess->timeout >= (long)agesec
1167
30
                && agems / (uint32_t)1000 == agesec
1168
30
                && ticket_age <= agems + 1000
1169
2
                && 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
2
                s->ext.early_data_ok = 1;
1175
2
            }
1176
39
        }
1177
1178
39
        md = ssl_md(s->ctx, sess->cipher->algorithm2);
1179
39
        if (md == NULL) {
1180
0
            SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1181
0
            goto err;
1182
0
        }
1183
39
        if (!EVP_MD_is_a(md,
1184
39
                EVP_MD_get0_name(ssl_md(s->ctx,
1185
39
                    s->s3.tmp.new_cipher->algorithm2)))) {
1186
            /* The ciphersuite is not compatible with this session. */
1187
14
            SSL_SESSION_free(sess);
1188
14
            sess = NULL;
1189
14
            s->ext.early_data_ok = 0;
1190
14
            s->ext.ticket_expected = 0;
1191
14
            continue;
1192
14
        }
1193
25
        break;
1194
39
    }
1195
1196
49
    if (sess == NULL)
1197
24
        return 1;
1198
1199
25
    binderoffset = PACKET_data(pkt) - (const unsigned char *)s->init_buf->data;
1200
25
    hashsize = EVP_MD_get_size(md);
1201
1202
25
    if (!PACKET_get_length_prefixed_2(pkt, &binders)) {
1203
9
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
1204
9
        goto err;
1205
9
    }
1206
1207
29
    for (i = 0; i <= id; i++) {
1208
16
        if (!PACKET_get_length_prefixed_1(&binders, &binder)) {
1209
3
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
1210
3
            goto err;
1211
3
        }
1212
16
    }
1213
1214
13
    if (PACKET_remaining(&binder) != hashsize) {
1215
2
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
1216
2
        goto err;
1217
2
    }
1218
11
    if (tls_psk_do_binder(s, md, (const unsigned char *)s->init_buf->data,
1219
11
            binderoffset, PACKET_data(&binder), NULL, sess, 0,
1220
11
            ext)
1221
11
        != 1) {
1222
        /* SSLfatal() already called */
1223
9
        goto err;
1224
9
    }
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
23
err:
1232
23
    SSL_SESSION_free(sess);
1233
23
    return 0;
1234
11
}
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
147
{
1241
147
    if (PACKET_remaining(pkt) != 0) {
1242
8
        SSLfatal(s, SSL_AD_DECODE_ERROR,
1243
8
            SSL_R_POST_HANDSHAKE_AUTH_ENCODING_ERR);
1244
8
        return 0;
1245
8
    }
1246
1247
139
    s->post_handshake_auth = SSL_PHA_EXT_RECEIVED;
1248
1249
139
    return 1;
1250
147
}
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
25.9k
{
1259
25.9k
    if (!s->s3.send_connection_binding)
1260
18.0k
        return EXT_RETURN_NOT_SENT;
1261
1262
    /* Still add this even if SSL_OP_NO_RENEGOTIATION is set */
1263
7.88k
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_renegotiate)
1264
7.88k
        || !WPACKET_start_sub_packet_u16(pkt)
1265
7.88k
        || !WPACKET_start_sub_packet_u8(pkt)
1266
7.88k
        || !WPACKET_memcpy(pkt, s->s3.previous_client_finished,
1267
7.88k
            s->s3.previous_client_finished_len)
1268
7.88k
        || !WPACKET_memcpy(pkt, s->s3.previous_server_finished,
1269
7.88k
            s->s3.previous_server_finished_len)
1270
7.88k
        || !WPACKET_close(pkt)
1271
7.88k
        || !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.88k
    return EXT_RETURN_SENT;
1277
7.88k
}
1278
1279
EXT_RETURN tls_construct_stoc_server_name(SSL *s, WPACKET *pkt,
1280
    unsigned int context, X509 *x,
1281
    size_t chainidx)
1282
28.7k
{
1283
28.7k
    if (s->servername_done != 1)
1284
28.7k
        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
28.7k
{
1307
28.7k
    if (!USE_MAX_FRAGMENT_LENGTH_EXT(s->session))
1308
27.6k
        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.09k
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_max_fragment_length)
1315
1.09k
        || !WPACKET_start_sub_packet_u16(pkt)
1316
1.09k
        || !WPACKET_put_bytes_u8(pkt, s->session->ext.max_fragment_len_mode)
1317
1.09k
        || !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.09k
    return EXT_RETURN_SENT;
1323
1.09k
}
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
25.9k
{
1329
25.9k
    unsigned long alg_k = s->s3.tmp.new_cipher->algorithm_mkey;
1330
25.9k
    unsigned long alg_a = s->s3.tmp.new_cipher->algorithm_auth;
1331
25.9k
    int using_ecc = ((alg_k & SSL_kECDHE) || (alg_a & SSL_aECDSA))
1332
12.4k
        && (s->ext.peer_ecpointformats != NULL);
1333
25.9k
    const unsigned char *plist;
1334
25.9k
    size_t plistlen;
1335
1336
25.9k
    if (!using_ecc)
1337
22.4k
        return EXT_RETURN_NOT_SENT;
1338
1339
3.40k
    tls1_get_formatlist(s, &plist, &plistlen);
1340
3.40k
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_ec_point_formats)
1341
3.40k
        || !WPACKET_start_sub_packet_u16(pkt)
1342
3.40k
        || !WPACKET_sub_memcpy_u8(pkt, plist, plistlen)
1343
3.40k
        || !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.40k
    return EXT_RETURN_SENT;
1349
3.40k
}
1350
1351
EXT_RETURN tls_construct_stoc_supported_groups(SSL *s, WPACKET *pkt,
1352
    unsigned int context, X509 *x,
1353
    size_t chainidx)
1354
28.7k
{
1355
28.7k
    const uint16_t *groups;
1356
28.7k
    size_t numgroups, i, first = 1;
1357
28.7k
    int version;
1358
1359
    /* s->s3.group_id is non zero if we accepted a key_share */
1360
28.7k
    if (s->s3.group_id == 0)
1361
25.9k
        return EXT_RETURN_NOT_SENT;
1362
1363
    /* Get our list of supported groups */
1364
2.85k
    tls1_get_supported_groups(s, &groups, &numgroups);
1365
2.85k
    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.85k
    version = SSL_version(s);
1372
16.4k
    for (i = 0; i < numgroups; i++) {
1373
14.9k
        uint16_t group = groups[i];
1374
1375
14.9k
        if (tls_valid_group(s, group, version, version, 0, NULL)
1376
14.9k
            && tls_group_allowed(s, group, SSL_SECOP_CURVE_SUPPORTED)) {
1377
14.9k
            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.85k
                if (s->s3.group_id == group)
1383
1.37k
                    return EXT_RETURN_NOT_SENT;
1384
1385
                /* Add extension header */
1386
1.48k
                if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_supported_groups)
1387
                    /* Sub-packet for supported_groups extension */
1388
1.48k
                    || !WPACKET_start_sub_packet_u16(pkt)
1389
1.48k
                    || !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.48k
                first = 0;
1395
1.48k
            }
1396
13.5k
            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
13.5k
        }
1401
14.9k
    }
1402
1403
1.48k
    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.48k
    return EXT_RETURN_SENT;
1409
1.48k
}
1410
1411
EXT_RETURN tls_construct_stoc_session_ticket(SSL *s, WPACKET *pkt,
1412
    unsigned int context, X509 *x,
1413
    size_t chainidx)
1414
25.9k
{
1415
25.9k
    if (!s->ext.ticket_expected || !tls_use_ticket(s)) {
1416
20.9k
        s->ext.ticket_expected = 0;
1417
20.9k
        return EXT_RETURN_NOT_SENT;
1418
20.9k
    }
1419
1420
4.96k
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_session_ticket)
1421
4.96k
        || !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.96k
    return EXT_RETURN_SENT;
1427
4.96k
}
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
25.9k
{
1473
25.9k
    const unsigned char *npa;
1474
25.9k
    unsigned int npalen;
1475
25.9k
    int ret;
1476
25.9k
    int npn_seen = s->s3.npn_seen;
1477
1478
25.9k
    s->s3.npn_seen = 0;
1479
25.9k
    if (!npn_seen || s->ctx->ext.npn_advertised_cb == NULL)
1480
25.9k
        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
28.7k
{
1501
28.7k
    if (s->s3.alpn_selected == NULL)
1502
28.7k
        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
28.7k
{
1524
28.7k
    if (s->srtp_profile == NULL)
1525
28.7k
        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
25.9k
{
1544
25.9k
    if (!s->ext.use_etm)
1545
24.4k
        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.47k
    if (s->s3.tmp.new_cipher->algorithm_mac == SSL_AEAD
1552
1.17k
        || s->s3.tmp.new_cipher->algorithm_enc == SSL_RC4
1553
1.17k
        || s->s3.tmp.new_cipher->algorithm_enc == SSL_eGOST2814789CNT
1554
1.17k
        || s->s3.tmp.new_cipher->algorithm_enc == SSL_eGOST2814789CNT12
1555
1.17k
        || s->s3.tmp.new_cipher->algorithm_enc == SSL_MAGMA
1556
1.17k
        || s->s3.tmp.new_cipher->algorithm_enc == SSL_KUZNYECHIK) {
1557
296
        s->ext.use_etm = 0;
1558
296
        return EXT_RETURN_NOT_SENT;
1559
296
    }
1560
1561
1.17k
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_encrypt_then_mac)
1562
1.17k
        || !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.17k
    return EXT_RETURN_SENT;
1568
1.17k
}
1569
1570
EXT_RETURN tls_construct_stoc_ems(SSL *s, WPACKET *pkt, unsigned int context,
1571
    X509 *x, size_t chainidx)
1572
25.9k
{
1573
25.9k
    if ((s->s3.flags & TLS1_FLAGS_RECEIVED_EXTMS) == 0)
1574
21.9k
        return EXT_RETURN_NOT_SENT;
1575
1576
3.96k
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_extended_master_secret)
1577
3.96k
        || !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.96k
    return EXT_RETURN_SENT;
1583
3.96k
}
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.54k
{
1589
3.54k
    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.54k
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_supported_versions)
1595
3.54k
        || !WPACKET_start_sub_packet_u16(pkt)
1596
3.54k
        || !WPACKET_put_bytes_u16(pkt, s->version)
1597
3.54k
        || !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.54k
    return EXT_RETURN_SENT;
1603
3.54k
}
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.54k
{
1609
3.54k
#ifndef OPENSSL_NO_TLS1_3
1610
3.54k
    unsigned char *encodedPoint;
1611
3.54k
    size_t encoded_pt_len = 0;
1612
3.54k
    EVP_PKEY *ckey = s->s3.peer_tmp, *skey = NULL;
1613
3.54k
    const TLS_GROUP_INFO *ginf = NULL;
1614
1615
3.54k
    if (s->hello_retry_request == SSL_HRR_PENDING) {
1616
661
        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
661
        if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_key_share)
1621
661
            || !WPACKET_start_sub_packet_u16(pkt)
1622
661
            || !WPACKET_put_bytes_u16(pkt, s->s3.group_id)
1623
661
            || !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
661
        return EXT_RETURN_SENT;
1629
661
    }
1630
1631
2.88k
    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.88k
    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.88k
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_key_share)
1648
2.88k
        || !WPACKET_start_sub_packet_u16(pkt)
1649
2.88k
        || !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.88k
    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.88k
    if (!ginf->is_kem) {
1660
        /* Regular KEX */
1661
2.85k
        skey = ssl_generate_pkey(s, ckey);
1662
2.85k
        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.85k
        encoded_pt_len = EVP_PKEY_get1_encoded_public_key(skey, &encodedPoint);
1669
2.85k
        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.85k
        if (!WPACKET_sub_memcpy_u16(pkt, encodedPoint, encoded_pt_len)
1676
2.85k
            || !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.85k
        OPENSSL_free(encodedPoint);
1683
1684
        /*
1685
         * This causes the crypto state to be updated based on the derived keys
1686
         */
1687
2.85k
        s->s3.tmp.pkey = skey;
1688
2.85k
        if (ssl_derive(s, skey, ckey, 1) == 0) {
1689
            /* SSLfatal() already called */
1690
19
            return EXT_RETURN_FAIL;
1691
19
        }
1692
2.85k
    } else {
1693
        /* KEM mode */
1694
28
        unsigned char *ct = NULL;
1695
28
        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
28
        if (ssl_encapsulate(s, ckey, &ct, &ctlen, 0) == 0) {
1704
            /* SSLfatal() already called */
1705
5
            return EXT_RETURN_FAIL;
1706
5
        }
1707
1708
23
        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
23
        if (!WPACKET_sub_memcpy_u16(pkt, ct, ctlen)
1715
23
            || !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
23
        OPENSSL_free(ct);
1721
1722
        /*
1723
         * This causes the crypto state to be updated based on the generated pms
1724
         */
1725
23
        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
23
    }
1730
2.85k
    s->s3.did_kex = 1;
1731
2.85k
    return EXT_RETURN_SENT;
1732
#else
1733
    return EXT_RETURN_FAIL;
1734
#endif
1735
2.88k
}
1736
1737
EXT_RETURN tls_construct_stoc_cookie(SSL *s, WPACKET *pkt, unsigned int context,
1738
    X509 *x, size_t chainidx)
1739
661
{
1740
661
#ifndef OPENSSL_NO_TLS1_3
1741
661
    unsigned char *hashval1, *hashval2, *appcookie1, *appcookie2, *cookie;
1742
661
    unsigned char *hmac, *hmac2;
1743
661
    size_t startlen, ciphlen, totcookielen, hashlen, hmaclen, appcookielen;
1744
661
    EVP_MD_CTX *hctx;
1745
661
    EVP_PKEY *pkey;
1746
661
    int ret = EXT_RETURN_FAIL;
1747
1748
661
    if ((s->s3.flags & TLS1_FLAGS_STATELESS) == 0)
1749
661
        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
25.9k
{
1867
25.9k
    const unsigned char cryptopro_ext[36] = {
1868
25.9k
        0xfd, 0xe8, /* 65000 */
1869
25.9k
        0x00, 0x20, /* 32 bytes length */
1870
25.9k
        0x30, 0x1e, 0x30, 0x08, 0x06, 0x06, 0x2a, 0x85,
1871
25.9k
        0x03, 0x02, 0x02, 0x09, 0x30, 0x08, 0x06, 0x06,
1872
25.9k
        0x2a, 0x85, 0x03, 0x02, 0x02, 0x16, 0x30, 0x08,
1873
25.9k
        0x06, 0x06, 0x2a, 0x85, 0x03, 0x02, 0x02, 0x17
1874
25.9k
    };
1875
1876
25.9k
    if (((s->s3.tmp.new_cipher->id & 0xFFFF) != 0x80
1877
25.9k
            && (s->s3.tmp.new_cipher->id & 0xFFFF) != 0x81)
1878
0
        || (SSL_get_options(s) & SSL_OP_CRYPTOPRO_TLSEXT_BUG) == 0)
1879
25.9k
        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.85k
{
1893
2.85k
    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.85k
    if (s->ext.early_data != SSL_EARLY_DATA_ACCEPTED)
1909
2.85k
        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.85k
{
1924
2.85k
    if (!s->hit)
1925
2.85k
        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
}