Coverage Report

Created: 2026-02-14 07:20

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
170
{
44
170
    unsigned int ilen;
45
170
    const unsigned char *data;
46
47
    /* Parse the length byte */
48
170
    if (!PACKET_get_1(pkt, &ilen)
49
168
        || !PACKET_get_bytes(pkt, &data, ilen)) {
50
4
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_RENEGOTIATION_ENCODING_ERR);
51
4
        return 0;
52
4
    }
53
54
    /* Check that the extension matches */
55
166
    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
165
    if (memcmp(data, s->s3.previous_client_finished,
61
165
            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
165
    s->s3.send_connection_binding = 1;
67
68
165
    return 1;
69
165
}
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.58k
{
97
9.58k
    unsigned int servname_type;
98
9.58k
    PACKET sni, hostname;
99
100
9.58k
    if (!PACKET_as_length_prefixed_2(pkt, &sni)
101
        /* ServerNameList must be at least 1 byte long. */
102
9.35k
        || 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.33k
    if (!PACKET_get_1(&sni, &servname_type)
119
9.33k
        || servname_type != TLSEXT_NAMETYPE_host_name
120
9.30k
        || !PACKET_as_length_prefixed_2(&sni, &hostname)) {
121
171
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
122
171
        return 0;
123
171
    }
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.15k
    if (!s->hit || SSL_IS_TLS13(s)) {
130
9.14k
        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.14k
        if (PACKET_contains_zero_byte(&hostname)) {
136
16
            SSLfatal(s, SSL_AD_UNRECOGNIZED_NAME, SSL_R_BAD_EXTENSION);
137
16
            return 0;
138
16
        }
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.12k
        OPENSSL_free(s->ext.hostname);
145
9.12k
        s->ext.hostname = NULL;
146
9.12k
        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.12k
        s->servername_done = 1;
152
9.12k
    } 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
13
        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
13
    }
162
163
9.13k
    return 1;
164
9.15k
}
165
166
int tls_parse_ctos_maxfragmentlen(SSL *s, PACKET *pkt, unsigned int context,
167
    X509 *x, size_t chainidx)
168
1.32k
{
169
1.32k
    unsigned int value;
170
171
1.32k
    if (PACKET_remaining(pkt) != 1 || !PACKET_get_1(pkt, &value)) {
172
114
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
173
114
        return 0;
174
114
    }
175
176
    /* Received |value| should be a valid max-fragment-length code. */
177
1.21k
    if (!IS_MAX_FRAGMENT_LENGTH_EXT_VALID(value)) {
178
48
        SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER,
179
48
            SSL_R_SSL3_EXT_INVALID_MAX_FRAGMENT_LENGTH);
180
48
        return 0;
181
48
    }
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.21k
}
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
173
{
211
173
    PACKET srp_I;
212
213
173
    if (!PACKET_as_length_prefixed_1(pkt, &srp_I)
214
105
        || PACKET_contains_zero_byte(&srp_I)) {
215
105
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
216
105
        return 0;
217
105
    }
218
219
68
    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
68
    return 1;
225
68
}
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.05k
        || PACKET_remaining(&ec_point_format_list) == 0) {
235
146
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
236
146
        return 0;
237
146
    }
238
239
6.04k
    if (!s->hit) {
240
5.88k
        if (!PACKET_memdup(&ec_point_format_list,
241
5.88k
                &s->ext.peer_ecpointformats,
242
5.88k
                &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.88k
    }
247
248
6.04k
    return 1;
249
6.04k
}
250
251
int tls_parse_ctos_session_ticket(SSL *s, PACKET *pkt, unsigned int context,
252
    X509 *x, size_t chainidx)
253
6.12k
{
254
6.12k
    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
6.12k
    return 1;
260
6.12k
}
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.20k
{
267
1.20k
    PACKET supported_sig_algs;
268
269
1.20k
    if (!PACKET_as_length_prefixed_2(pkt, &supported_sig_algs)
270
1.02k
        || PACKET_remaining(&supported_sig_algs) == 0) {
271
195
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
272
195
        return 0;
273
195
    }
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.01k
    if ((!s->server || (s->server && !s->hit))
281
1.00k
        && !tls1_save_sigalgs(s, &supported_sig_algs, 1)) {
282
22
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
283
22
        return 0;
284
22
    }
285
286
990
    return 1;
287
1.01k
}
288
289
int tls_parse_ctos_sig_algs(SSL *s, PACKET *pkt, unsigned int context, X509 *x,
290
    size_t chainidx)
291
9.98k
{
292
9.98k
    PACKET supported_sig_algs;
293
294
9.98k
    if (!PACKET_as_length_prefixed_2(pkt, &supported_sig_algs)
295
9.76k
        || PACKET_remaining(&supported_sig_algs) == 0) {
296
231
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
297
231
        return 0;
298
231
    }
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.75k
    if ((!s->server || (s->server && !s->hit))
306
9.62k
        && !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.73k
    return 1;
312
9.75k
}
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.70k
{
318
6.70k
    PACKET responder_id_list, exts;
319
320
    /* We ignore this in a resumption handshake */
321
6.70k
    if (s->hit)
322
35
        return 1;
323
324
    /* Not defined if we get one of these in a client Certificate */
325
6.66k
    if (x != NULL)
326
0
        return 1;
327
328
6.66k
    if (!PACKET_get_1(pkt, (unsigned int *)&s->ext.status_type)) {
329
20
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
330
20
        return 0;
331
20
    }
332
333
6.64k
    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
280
        s->ext.status_type = TLSEXT_STATUSTYPE_nothing;
338
280
        return 1;
339
280
    }
340
341
6.36k
    if (!PACKET_get_length_prefixed_2(pkt, &responder_id_list)) {
342
109
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
343
109
        return 0;
344
109
    }
345
346
    /*
347
     * We remove any OCSP_RESPIDs from a previous handshake
348
     * to prevent unbounded memory growth - CVE-2016-6304
349
     */
350
6.25k
    sk_OCSP_RESPID_pop_free(s->ext.ocsp.ids, OCSP_RESPID_free);
351
6.25k
    if (PACKET_remaining(&responder_id_list) > 0) {
352
3.23k
        s->ext.ocsp.ids = sk_OCSP_RESPID_new_null();
353
3.23k
        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.23k
    } else {
358
3.02k
        s->ext.ocsp.ids = NULL;
359
3.02k
    }
360
361
6.37k
    while (PACKET_remaining(&responder_id_list) > 0) {
362
3.33k
        OCSP_RESPID *id;
363
3.33k
        PACKET responder_id;
364
3.33k
        const unsigned char *id_data;
365
366
3.33k
        if (!PACKET_get_length_prefixed_2(&responder_id_list, &responder_id)
367
3.22k
            || PACKET_remaining(&responder_id) == 0) {
368
126
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
369
126
            return 0;
370
126
        }
371
372
3.20k
        id_data = PACKET_data(&responder_id);
373
3.20k
        id = d2i_OCSP_RESPID(NULL, &id_data,
374
3.20k
            (int)PACKET_remaining(&responder_id));
375
3.20k
        if (id == NULL) {
376
3.02k
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
377
3.02k
            return 0;
378
3.02k
        }
379
380
181
        if (id_data != PACKET_end(&responder_id)) {
381
68
            OCSP_RESPID_free(id);
382
68
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
383
384
68
            return 0;
385
68
        }
386
387
113
        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
113
    }
394
395
    /* Read in request_extensions */
396
3.03k
    if (!PACKET_as_length_prefixed_2(pkt, &exts)) {
397
87
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
398
87
        return 0;
399
87
    }
400
401
2.95k
    if (PACKET_remaining(&exts) > 0) {
402
1.13k
        const unsigned char *ext_data = PACKET_data(&exts);
403
404
1.13k
        sk_X509_EXTENSION_pop_free(s->ext.ocsp.exts,
405
1.13k
            X509_EXTENSION_free);
406
1.13k
        s->ext.ocsp.exts = d2i_X509_EXTENSIONS(NULL, &ext_data, (int)PACKET_remaining(&exts));
407
1.13k
        if (s->ext.ocsp.exts == NULL || ext_data != PACKET_end(&exts)) {
408
1.12k
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
409
1.12k
            return 0;
410
1.12k
        }
411
1.13k
    }
412
413
1.82k
    return 1;
414
2.95k
}
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
18
{
421
    /*
422
     * We shouldn't accept this extension on a
423
     * renegotiation.
424
     */
425
18
    if (SSL_IS_FIRST_HANDSHAKE(s))
426
18
        s->s3.npn_seen = 1;
427
428
18
    return 1;
429
18
}
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
462
{
439
462
    PACKET protocol_list, save_protocol_list, protocol;
440
441
462
    if (!SSL_IS_FIRST_HANDSHAKE(s))
442
0
        return 1;
443
444
462
    if (!PACKET_as_length_prefixed_2(pkt, &protocol_list)
445
314
        || PACKET_remaining(&protocol_list) < 2) {
446
159
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
447
159
        return 0;
448
159
    }
449
450
303
    save_protocol_list = protocol_list;
451
2.36k
    do {
452
        /* Protocol names can't be empty. */
453
2.36k
        if (!PACKET_get_length_prefixed_1(&protocol_list, &protocol)
454
2.28k
            || PACKET_remaining(&protocol) == 0) {
455
114
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
456
114
            return 0;
457
114
        }
458
2.36k
    } while (PACKET_remaining(&protocol_list) != 0);
459
460
189
    OPENSSL_free(s->s3.alpn_proposed);
461
189
    s->s3.alpn_proposed = NULL;
462
189
    s->s3.alpn_proposed_len = 0;
463
189
    if (!PACKET_memdup(&save_protocol_list,
464
189
            &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
189
    return 1;
470
189
}
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.06k
{
476
1.06k
    STACK_OF(SRTP_PROTECTION_PROFILE) *srvr;
477
1.06k
    unsigned int ct, mki_len, id;
478
1.06k
    int i, srtp_pref;
479
1.06k
    PACKET subpkt;
480
481
    /* Ignore this if we have no SRTP profiles */
482
1.06k
    if (SSL_get_srtp_profiles(s) == NULL)
483
1.06k
        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.85k
{
542
1.85k
    if (!(s->options & SSL_OP_NO_ENCRYPT_THEN_MAC))
543
1.85k
        s->ext.use_etm = 1;
544
545
1.85k
    return 1;
546
1.85k
}
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
401
{
555
401
#ifndef OPENSSL_NO_TLS1_3
556
401
    PACKET psk_kex_modes;
557
401
    unsigned int mode;
558
559
401
    if (!PACKET_as_length_prefixed_1(pkt, &psk_kex_modes)
560
397
        || PACKET_remaining(&psk_kex_modes) == 0) {
561
5
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
562
5
        return 0;
563
5
    }
564
565
2.15k
    while (PACKET_get_1(&psk_kex_modes, &mode)) {
566
1.75k
        if (mode == TLSEXT_KEX_MODE_KE_DHE)
567
595
            s->ext.psk_kex_mode |= TLSEXT_KEX_MODE_FLAG_KE_DHE;
568
1.16k
        else if (mode == TLSEXT_KEX_MODE_KE
569
369
            && (s->options & SSL_OP_ALLOW_NO_DHE_KEX) != 0)
570
0
            s->ext.psk_kex_mode |= TLSEXT_KEX_MODE_FLAG_KE;
571
1.75k
    }
572
396
#endif
573
574
396
    return 1;
575
401
}
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.07k
{
584
2.07k
#ifndef OPENSSL_NO_TLS1_3
585
2.07k
    unsigned int group_id;
586
2.07k
    PACKET key_share_list, encoded_pt;
587
2.07k
    const uint16_t *clntgroups, *srvrgroups;
588
2.07k
    size_t clnt_num_groups, srvr_num_groups;
589
2.07k
    int found = 0;
590
591
2.07k
    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.07k
    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.07k
    if (!PACKET_as_length_prefixed_2(pkt, &key_share_list)) {
601
51
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_LENGTH_MISMATCH);
602
51
        return 0;
603
51
    }
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.23k
    while (PACKET_remaining(&key_share_list) > 0) {
631
2.41k
        if (!PACKET_get_net_2(&key_share_list, &group_id)
632
2.41k
            || !PACKET_get_length_prefixed_2(&key_share_list, &encoded_pt)
633
2.35k
            || PACKET_remaining(&encoded_pt) == 0) {
634
70
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_LENGTH_MISMATCH);
635
70
            return 0;
636
70
        }
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
100
            && (group_id != s->s3.group_id
651
64
                || PACKET_remaining(&key_share_list) != 0)) {
652
39
            SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_BAD_KEY_SHARE);
653
39
            return 0;
654
39
        }
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
32
            SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_BAD_KEY_SHARE);
659
32
            return 0;
660
32
        }
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.48k
            || !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.48k
            || !tls_valid_group(s, group_id, TLS1_3_VERSION, TLS1_3_VERSION,
670
1.48k
                0, NULL)) {
671
            /* Share not suitable */
672
571
            continue;
673
571
        }
674
675
1.48k
        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.48k
        s->s3.group_id = group_id;
682
        /* Cache the selected group ID in the SSL_SESSION */
683
1.48k
        s->session->kex_group = group_id;
684
685
1.48k
        if (tls13_set_encoded_pub_key(s->s3.peer_tmp,
686
1.48k
                PACKET_data(&encoded_pt),
687
1.48k
                PACKET_remaining(&encoded_pt))
688
1.48k
            <= 0) {
689
53
            SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_BAD_ECPOINT);
690
53
            return 0;
691
53
        }
692
693
1.43k
        found = 1;
694
1.43k
    }
695
1.82k
#endif
696
697
1.82k
    return 1;
698
2.01k
}
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.8k
{
913
19.8k
    PACKET supported_groups_list;
914
915
    /* Each group is 2 bytes and we must have at least 1. */
916
19.8k
    if (!PACKET_as_length_prefixed_2(pkt, &supported_groups_list)
917
19.6k
        || PACKET_remaining(&supported_groups_list) == 0
918
19.6k
        || (PACKET_remaining(&supported_groups_list) % 2) != 0) {
919
276
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
920
276
        return 0;
921
276
    }
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.75k
{
941
    /* The extension must always be empty */
942
4.75k
    if (PACKET_remaining(pkt) != 0) {
943
16
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
944
16
        return 0;
945
16
    }
946
947
4.73k
    if (s->options & SSL_OP_NO_EXTENDED_MASTER_SECRET)
948
0
        return 1;
949
950
4.73k
    s->s3.flags |= TLS1_FLAGS_RECEIVED_EXTMS;
951
952
4.73k
    return 1;
953
4.73k
}
954
955
int tls_parse_ctos_early_data(SSL *s, PACKET *pkt, unsigned int context,
956
    X509 *x, size_t chainidx)
957
2.61k
{
958
2.61k
    if (PACKET_remaining(pkt) != 0) {
959
7
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
960
7
        return 0;
961
7
    }
962
963
2.60k
    if (s->hello_retry_request != SSL_HRR_NONE) {
964
14
        SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_BAD_EXTENSION);
965
14
        return 0;
966
14
    }
967
968
2.59k
    return 1;
969
2.60k
}
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
83
{
1002
83
    PACKET identities, binders, binder;
1003
83
    size_t binderoffset, hashsize;
1004
83
    SSL_SESSION *sess = NULL;
1005
83
    unsigned int id, i, ext = 0;
1006
83
    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
83
    if ((s->ext.psk_kex_mode
1013
83
            & (TLSEXT_KEX_MODE_FLAG_KE | TLSEXT_KEX_MODE_FLAG_KE_DHE))
1014
83
        == 0)
1015
7
        return 1;
1016
1017
76
    if (!PACKET_get_length_prefixed_2(pkt, &identities)) {
1018
2
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
1019
2
        return 0;
1020
2
    }
1021
1022
74
    s->ext.ticket_expected = 0;
1023
150
    for (id = 0; PACKET_remaining(&identities) != 0; id++) {
1024
130
        PACKET identity;
1025
130
        unsigned long ticket_agel;
1026
130
        size_t idlen;
1027
1028
130
        if (!PACKET_get_length_prefixed_2(&identities, &identity)
1029
111
            || !PACKET_get_net_4(&identities, &ticket_agel)) {
1030
21
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
1031
21
            return 0;
1032
21
        }
1033
1034
109
        idlen = PACKET_remaining(&identity);
1035
109
        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
109
#ifndef OPENSSL_NO_PSK
1043
109
        if (sess == NULL
1044
109
            && 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
109
#endif /* OPENSSL_NO_PSK */
1090
1091
109
        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
109
        } else {
1113
109
            uint32_t ticket_age = 0, agesec, agems;
1114
109
            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
109
            if ((s->options & SSL_OP_NO_TICKET) != 0
1122
109
                || (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
109
            else
1126
109
                ret = tls_decrypt_ticket(s, PACKET_data(&identity),
1127
109
                    PACKET_remaining(&identity), NULL, 0,
1128
109
                    &sess);
1129
1130
109
            if (ret == SSL_TICKET_EMPTY) {
1131
3
                SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
1132
3
                return 0;
1133
3
            }
1134
1135
106
            if (ret == SSL_TICKET_FATAL_ERR_MALLOC
1136
106
                || 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
106
            if (ret == SSL_TICKET_NONE || ret == SSL_TICKET_NO_DECRYPT)
1141
68
                continue;
1142
1143
            /* Check for replay */
1144
38
            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
38
            ticket_age = (uint32_t)ticket_agel;
1153
38
            agesec = (uint32_t)(time(NULL) - sess->time);
1154
38
            agems = agesec * (uint32_t)1000;
1155
38
            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
38
            if (id == 0
1166
37
                && sess->timeout >= (long)agesec
1167
21
                && agems / (uint32_t)1000 == agesec
1168
21
                && ticket_age <= agems + 1000
1169
3
                && 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
3
                s->ext.early_data_ok = 1;
1175
3
            }
1176
38
        }
1177
1178
38
        md = ssl_md(s->ctx, sess->cipher->algorithm2);
1179
38
        if (md == NULL) {
1180
0
            SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1181
0
            goto err;
1182
0
        }
1183
38
        if (!EVP_MD_is_a(md,
1184
38
                EVP_MD_get0_name(ssl_md(s->ctx,
1185
38
                    s->s3.tmp.new_cipher->algorithm2)))) {
1186
            /* The ciphersuite is not compatible with this session. */
1187
8
            SSL_SESSION_free(sess);
1188
8
            sess = NULL;
1189
8
            s->ext.early_data_ok = 0;
1190
8
            s->ext.ticket_expected = 0;
1191
8
            continue;
1192
8
        }
1193
30
        break;
1194
38
    }
1195
1196
50
    if (sess == NULL)
1197
20
        return 1;
1198
1199
30
    binderoffset = PACKET_data(pkt) - (const unsigned char *)s->init_buf->data;
1200
30
    hashsize = EVP_MD_get_size(md);
1201
1202
30
    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
34
    for (i = 0; i <= id; i++) {
1208
20
        if (!PACKET_get_length_prefixed_1(&binders, &binder)) {
1209
6
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
1210
6
            goto err;
1211
6
        }
1212
20
    }
1213
1214
14
    if (PACKET_remaining(&binder) != hashsize) {
1215
5
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
1216
5
        goto err;
1217
5
    }
1218
9
    if (tls_psk_do_binder(s, md, (const unsigned char *)s->init_buf->data,
1219
9
            binderoffset, PACKET_data(&binder), NULL, sess, 0,
1220
9
            ext)
1221
9
        != 1) {
1222
        /* SSLfatal() already called */
1223
7
        goto err;
1224
7
    }
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
28
err:
1232
28
    SSL_SESSION_free(sess);
1233
28
    return 0;
1234
9
}
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
160
{
1241
160
    if (PACKET_remaining(pkt) != 0) {
1242
11
        SSLfatal(s, SSL_AD_DECODE_ERROR,
1243
11
            SSL_R_POST_HANDSHAKE_AUTH_ENCODING_ERR);
1244
11
        return 0;
1245
11
    }
1246
1247
149
    s->post_handshake_auth = SSL_PHA_EXT_RECEIVED;
1248
1249
149
    return 1;
1250
160
}
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.2k
{
1259
25.2k
    if (!s->s3.send_connection_binding)
1260
17.4k
        return EXT_RETURN_NOT_SENT;
1261
1262
    /* Still add this even if SSL_OP_NO_RENEGOTIATION is set */
1263
7.76k
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_renegotiate)
1264
7.76k
        || !WPACKET_start_sub_packet_u16(pkt)
1265
7.76k
        || !WPACKET_start_sub_packet_u8(pkt)
1266
7.76k
        || !WPACKET_memcpy(pkt, s->s3.previous_client_finished,
1267
7.76k
            s->s3.previous_client_finished_len)
1268
7.76k
        || !WPACKET_memcpy(pkt, s->s3.previous_server_finished,
1269
7.76k
            s->s3.previous_server_finished_len)
1270
7.76k
        || !WPACKET_close(pkt)
1271
7.76k
        || !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.76k
    return EXT_RETURN_SENT;
1277
7.76k
}
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.1k
{
1283
28.1k
    if (s->servername_done != 1)
1284
28.1k
        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.1k
{
1307
28.1k
    if (!USE_MAX_FRAGMENT_LENGTH_EXT(s->session))
1308
27.0k
        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.08k
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_max_fragment_length)
1315
1.08k
        || !WPACKET_start_sub_packet_u16(pkt)
1316
1.08k
        || !WPACKET_put_bytes_u8(pkt, s->session->ext.max_fragment_len_mode)
1317
1.08k
        || !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.08k
    return EXT_RETURN_SENT;
1323
1.08k
}
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.2k
{
1329
25.2k
    unsigned long alg_k = s->s3.tmp.new_cipher->algorithm_mkey;
1330
25.2k
    unsigned long alg_a = s->s3.tmp.new_cipher->algorithm_auth;
1331
25.2k
    int using_ecc = ((alg_k & SSL_kECDHE) || (alg_a & SSL_aECDSA))
1332
12.2k
        && (s->ext.peer_ecpointformats != NULL);
1333
25.2k
    const unsigned char *plist;
1334
25.2k
    size_t plistlen;
1335
1336
25.2k
    if (!using_ecc)
1337
21.7k
        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
28.1k
{
1355
28.1k
    const uint16_t *groups;
1356
28.1k
    size_t numgroups, i, first = 1;
1357
28.1k
    int version;
1358
1359
    /* s->s3.group_id is non zero if we accepted a key_share */
1360
28.1k
    if (s->s3.group_id == 0)
1361
25.2k
        return EXT_RETURN_NOT_SENT;
1362
1363
    /* Get our list of supported groups */
1364
2.88k
    tls1_get_supported_groups(s, &groups, &numgroups);
1365
2.88k
    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.88k
    version = SSL_version(s);
1372
15.4k
    for (i = 0; i < numgroups; i++) {
1373
13.9k
        uint16_t group = groups[i];
1374
1375
13.9k
        if (tls_valid_group(s, group, version, version, 0, NULL)
1376
13.9k
            && tls_group_allowed(s, group, SSL_SECOP_CURVE_SUPPORTED)) {
1377
13.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.88k
                if (s->s3.group_id == group)
1383
1.32k
                    return EXT_RETURN_NOT_SENT;
1384
1385
                /* Add extension header */
1386
1.56k
                if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_supported_groups)
1387
                    /* Sub-packet for supported_groups extension */
1388
1.56k
                    || !WPACKET_start_sub_packet_u16(pkt)
1389
1.56k
                    || !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.56k
                first = 0;
1395
1.56k
            }
1396
12.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
12.5k
        }
1401
13.9k
    }
1402
1403
1.56k
    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.56k
    return EXT_RETURN_SENT;
1409
1.56k
}
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.2k
{
1415
25.2k
    if (!s->ext.ticket_expected || !tls_use_ticket(s)) {
1416
20.0k
        s->ext.ticket_expected = 0;
1417
20.0k
        return EXT_RETURN_NOT_SENT;
1418
20.0k
    }
1419
1420
5.20k
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_session_ticket)
1421
5.20k
        || !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
5.20k
    return EXT_RETURN_SENT;
1427
5.20k
}
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.1k
{
1434
    /* We don't currently support this extension inside a CertificateRequest */
1435
18.1k
    if (context == SSL_EXT_TLS1_3_CERTIFICATE_REQUEST)
1436
0
        return EXT_RETURN_NOT_SENT;
1437
1438
18.1k
    if (!s->ext.status_expected)
1439
18.1k
        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.2k
{
1473
25.2k
    const unsigned char *npa;
1474
25.2k
    unsigned int npalen;
1475
25.2k
    int ret;
1476
25.2k
    int npn_seen = s->s3.npn_seen;
1477
1478
25.2k
    s->s3.npn_seen = 0;
1479
25.2k
    if (!npn_seen || s->ctx->ext.npn_advertised_cb == NULL)
1480
25.2k
        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.1k
{
1501
28.1k
    if (s->s3.alpn_selected == NULL)
1502
28.1k
        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.1k
{
1524
28.1k
    if (s->srtp_profile == NULL)
1525
28.1k
        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.2k
{
1544
25.2k
    if (!s->ext.use_etm)
1545
23.7k
        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.46k
    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
283
        s->ext.use_etm = 0;
1558
283
        return EXT_RETURN_NOT_SENT;
1559
283
    }
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.2k
{
1573
25.2k
    if ((s->s3.flags & TLS1_FLAGS_RECEIVED_EXTMS) == 0)
1574
21.2k
        return EXT_RETURN_NOT_SENT;
1575
1576
4.00k
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_extended_master_secret)
1577
4.00k
        || !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
4.00k
    return EXT_RETURN_SENT;
1583
4.00k
}
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.62k
{
1589
3.62k
    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.62k
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_supported_versions)
1595
3.62k
        || !WPACKET_start_sub_packet_u16(pkt)
1596
3.62k
        || !WPACKET_put_bytes_u16(pkt, s->version)
1597
3.62k
        || !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.62k
    return EXT_RETURN_SENT;
1603
3.62k
}
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.62k
{
1609
3.62k
#ifndef OPENSSL_NO_TLS1_3
1610
3.62k
    unsigned char *encodedPoint;
1611
3.62k
    size_t encoded_pt_len = 0;
1612
3.62k
    EVP_PKEY *ckey = s->s3.peer_tmp, *skey = NULL;
1613
3.62k
    const TLS_GROUP_INFO *ginf = NULL;
1614
1615
3.62k
    if (s->hello_retry_request == SSL_HRR_PENDING) {
1616
714
        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
714
        if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_key_share)
1621
714
            || !WPACKET_start_sub_packet_u16(pkt)
1622
714
            || !WPACKET_put_bytes_u16(pkt, s->s3.group_id)
1623
714
            || !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
714
        return EXT_RETURN_SENT;
1629
714
    }
1630
1631
2.90k
    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.90k
    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.90k
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_key_share)
1648
2.90k
        || !WPACKET_start_sub_packet_u16(pkt)
1649
2.90k
        || !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.90k
    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.90k
    if (!ginf->is_kem) {
1660
        /* Regular KEX */
1661
2.89k
        skey = ssl_generate_pkey(s, ckey);
1662
2.89k
        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.89k
        encoded_pt_len = EVP_PKEY_get1_encoded_public_key(skey, &encodedPoint);
1669
2.89k
        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.89k
        if (!WPACKET_sub_memcpy_u16(pkt, encodedPoint, encoded_pt_len)
1676
2.89k
            || !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.89k
        OPENSSL_free(encodedPoint);
1683
1684
        /*
1685
         * This causes the crypto state to be updated based on the derived keys
1686
         */
1687
2.89k
        s->s3.tmp.pkey = skey;
1688
2.89k
        if (ssl_derive(s, skey, ckey, 1) == 0) {
1689
            /* SSLfatal() already called */
1690
19
            return EXT_RETURN_FAIL;
1691
19
        }
1692
2.89k
    } else {
1693
        /* KEM mode */
1694
19
        unsigned char *ct = NULL;
1695
19
        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
19
        if (ssl_encapsulate(s, ckey, &ct, &ctlen, 0) == 0) {
1704
            /* SSLfatal() already called */
1705
5
            return EXT_RETURN_FAIL;
1706
5
        }
1707
1708
14
        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
14
        if (!WPACKET_sub_memcpy_u16(pkt, ct, ctlen)
1715
14
            || !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
14
        OPENSSL_free(ct);
1721
1722
        /*
1723
         * This causes the crypto state to be updated based on the generated pms
1724
         */
1725
14
        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
14
    }
1730
2.88k
    s->s3.did_kex = 1;
1731
2.88k
    return EXT_RETURN_SENT;
1732
#else
1733
    return EXT_RETURN_FAIL;
1734
#endif
1735
2.90k
}
1736
1737
EXT_RETURN tls_construct_stoc_cookie(SSL *s, WPACKET *pkt, unsigned int context,
1738
    X509 *x, size_t chainidx)
1739
714
{
1740
714
#ifndef OPENSSL_NO_TLS1_3
1741
714
    unsigned char *hashval1, *hashval2, *appcookie1, *appcookie2, *cookie;
1742
714
    unsigned char *hmac, *hmac2;
1743
714
    size_t startlen, ciphlen, totcookielen, hashlen, hmaclen, appcookielen;
1744
714
    EVP_MD_CTX *hctx;
1745
714
    EVP_PKEY *pkey;
1746
714
    int ret = EXT_RETURN_FAIL;
1747
1748
714
    if ((s->s3.flags & TLS1_FLAGS_STATELESS) == 0)
1749
714
        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.2k
{
1867
25.2k
    const unsigned char cryptopro_ext[36] = {
1868
25.2k
        0xfd, 0xe8, /* 65000 */
1869
25.2k
        0x00, 0x20, /* 32 bytes length */
1870
25.2k
        0x30, 0x1e, 0x30, 0x08, 0x06, 0x06, 0x2a, 0x85,
1871
25.2k
        0x03, 0x02, 0x02, 0x09, 0x30, 0x08, 0x06, 0x06,
1872
25.2k
        0x2a, 0x85, 0x03, 0x02, 0x02, 0x16, 0x30, 0x08,
1873
25.2k
        0x06, 0x06, 0x2a, 0x85, 0x03, 0x02, 0x02, 0x17
1874
25.2k
    };
1875
1876
25.2k
    if (((s->s3.tmp.new_cipher->id & 0xFFFF) != 0x80
1877
25.2k
            && (s->s3.tmp.new_cipher->id & 0xFFFF) != 0x81)
1878
0
        || (SSL_get_options(s) & SSL_OP_CRYPTOPRO_TLSEXT_BUG) == 0)
1879
25.2k
        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.88k
{
1893
2.88k
    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.88k
    if (s->ext.early_data != SSL_EARLY_DATA_ACCEPTED)
1909
2.88k
        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.88k
{
1924
2.88k
    if (!s->hit)
1925
2.88k
        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
}