Coverage Report

Created: 2025-08-28 07:07

/src/openssl30/ssl/statem/extensions_srvr.c
Line
Count
Source (jump to first uncovered line)
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
173
{
44
173
    unsigned int ilen;
45
173
    const unsigned char *data;
46
47
    /* Parse the length byte */
48
173
    if (!PACKET_get_1(pkt, &ilen)
49
173
        || !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
170
    if (ilen != s->s3.previous_client_finished_len) {
56
2
        SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_R_RENEGOTIATION_MISMATCH);
57
2
        return 0;
58
2
    }
59
60
168
    if (memcmp(data, s->s3.previous_client_finished,
61
168
               s->s3.previous_client_finished_len)) {
62
0
        SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_R_RENEGOTIATION_MISMATCH);
63
0
        return 0;
64
0
    }
65
66
168
    s->s3.send_connection_binding = 1;
67
68
168
    return 1;
69
168
}
70
71
/*-
72
 * The servername extension is treated as follows:
73
 *
74
 * - Only the hostname type is supported with a maximum length of 255.
75
 * - The servername is rejected if too long or if it contains zeros,
76
 *   in which case an fatal alert is generated.
77
 * - The servername field is maintained together with the session cache.
78
 * - When a session is resumed, the servername call back invoked in order
79
 *   to allow the application to position itself to the right context.
80
 * - The servername is acknowledged if it is new for a session or when
81
 *   it is identical to a previously used for the same session.
82
 *   Applications can control the behaviour.  They can at any time
83
 *   set a 'desirable' servername for a new SSL object. This can be the
84
 *   case for example with HTTPS when a Host: header field is received and
85
 *   a renegotiation is requested. In this case, a possible servername
86
 *   presented in the new client hello is only acknowledged if it matches
87
 *   the value of the Host: field.
88
 * - Applications must  use SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION
89
 *   if they provide for changing an explicit servername context for the
90
 *   session, i.e. when the session has been established with a servername
91
 *   extension.
92
 * - On session reconnect, the servername extension may be absent.
93
 */
94
int tls_parse_ctos_server_name(SSL *s, PACKET *pkt, unsigned int context,
95
                               X509 *x, size_t chainidx)
96
7.86k
{
97
7.86k
    unsigned int servname_type;
98
7.86k
    PACKET sni, hostname;
99
100
7.86k
    if (!PACKET_as_length_prefixed_2(pkt, &sni)
101
        /* ServerNameList must be at least 1 byte long. */
102
7.86k
        || PACKET_remaining(&sni) == 0) {
103
222
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
104
222
        return 0;
105
222
    }
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
7.63k
    if (!PACKET_get_1(&sni, &servname_type)
119
7.63k
        || servname_type != TLSEXT_NAMETYPE_host_name
120
7.63k
        || !PACKET_as_length_prefixed_2(&sni, &hostname)) {
121
192
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
122
192
        return 0;
123
192
    }
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
7.44k
    if (!s->hit || SSL_IS_TLS13(s)) {
130
7.43k
        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
7.42k
        if (PACKET_contains_zero_byte(&hostname)) {
136
17
            SSLfatal(s, SSL_AD_UNRECOGNIZED_NAME, SSL_R_BAD_EXTENSION);
137
17
            return 0;
138
17
        }
139
140
        /*
141
         * Store the requested SNI in the SSL as temporary storage.
142
         * If we accept it, it will get stored in the SSL_SESSION as well.
143
         */
144
7.41k
        OPENSSL_free(s->ext.hostname);
145
7.41k
        s->ext.hostname = NULL;
146
7.41k
        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
7.41k
        s->servername_done = 1;
152
7.41k
    } 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
12
        s->servername_done = (s->session->ext.hostname != NULL)
159
12
            && PACKET_equal(&hostname, s->session->ext.hostname,
160
6
                            strlen(s->session->ext.hostname));
161
12
    }
162
163
7.42k
    return 1;
164
7.44k
}
165
166
int tls_parse_ctos_maxfragmentlen(SSL *s, PACKET *pkt, unsigned int context,
167
                                  X509 *x, size_t chainidx)
168
1.10k
{
169
1.10k
    unsigned int value;
170
171
1.10k
    if (PACKET_remaining(pkt) != 1 || !PACKET_get_1(pkt, &value)) {
172
135
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
173
135
        return 0;
174
135
    }
175
176
    /* Received |value| should be a valid max-fragment-length code. */
177
974
    if (!IS_MAX_FRAGMENT_LENGTH_EXT_VALID(value)) {
178
51
        SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER,
179
51
                 SSL_R_SSL3_EXT_INVALID_MAX_FRAGMENT_LENGTH);
180
51
        return 0;
181
51
    }
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
923
    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
917
        s->session->ext.max_fragment_len_mode = value;
203
204
923
    return 1;
205
974
}
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
131
{
211
131
    PACKET srp_I;
212
213
131
    if (!PACKET_as_length_prefixed_1(pkt, &srp_I)
214
131
            || PACKET_contains_zero_byte(&srp_I)) {
215
92
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
216
92
        return 0;
217
92
    }
218
219
39
    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
39
    return 1;
225
39
}
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
5.54k
{
231
5.54k
    PACKET ec_point_format_list;
232
233
5.54k
    if (!PACKET_as_length_prefixed_1(pkt, &ec_point_format_list)
234
5.54k
        || PACKET_remaining(&ec_point_format_list) == 0) {
235
134
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
236
134
        return 0;
237
134
    }
238
239
5.40k
    if (!s->hit) {
240
5.24k
        if (!PACKET_memdup(&ec_point_format_list,
241
5.24k
                           &s->ext.peer_ecpointformats,
242
5.24k
                           &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.24k
    }
247
248
5.40k
    return 1;
249
5.40k
}
250
251
int tls_parse_ctos_session_ticket(SSL *s, PACKET *pkt, unsigned int context,
252
                                  X509 *x, size_t chainidx)
253
4.93k
{
254
4.93k
    if (s->ext.session_ticket_cb &&
255
4.93k
            !s->ext.session_ticket_cb(s, PACKET_data(pkt),
256
0
                                  PACKET_remaining(pkt),
257
0
                                  s->ext.session_ticket_cb_arg)) {
258
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
259
0
        return 0;
260
0
    }
261
262
4.93k
    return 1;
263
4.93k
}
264
265
int tls_parse_ctos_sig_algs_cert(SSL *s, PACKET *pkt,
266
                                 ossl_unused unsigned int context,
267
                                 ossl_unused X509 *x,
268
                                 ossl_unused size_t chainidx)
269
980
{
270
980
    PACKET supported_sig_algs;
271
272
980
    if (!PACKET_as_length_prefixed_2(pkt, &supported_sig_algs)
273
980
            || PACKET_remaining(&supported_sig_algs) == 0) {
274
150
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
275
150
        return 0;
276
150
    }
277
278
    /*
279
     * We use this routine on both clients and servers, and when clients
280
     * get asked for PHA we need to always save the sigalgs regardless
281
     * of whether it was a resumption or not.
282
     */
283
830
    if ((!s->server || (s->server && !s->hit))
284
830
            && !tls1_save_sigalgs(s, &supported_sig_algs, 1)) {
285
16
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
286
16
        return 0;
287
16
    }
288
289
814
    return 1;
290
830
}
291
292
int tls_parse_ctos_sig_algs(SSL *s, PACKET *pkt, unsigned int context, X509 *x,
293
                            size_t chainidx)
294
8.05k
{
295
8.05k
    PACKET supported_sig_algs;
296
297
8.05k
    if (!PACKET_as_length_prefixed_2(pkt, &supported_sig_algs)
298
8.05k
            || PACKET_remaining(&supported_sig_algs) == 0) {
299
205
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
300
205
        return 0;
301
205
    }
302
303
    /*
304
     * We use this routine on both clients and servers, and when clients
305
     * get asked for PHA we need to always save the sigalgs regardless
306
     * of whether it was a resumption or not.
307
     */
308
7.85k
    if ((!s->server || (s->server && !s->hit))
309
7.85k
            && !tls1_save_sigalgs(s, &supported_sig_algs, 0)) {
310
15
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
311
15
        return 0;
312
15
    }
313
314
7.83k
    return 1;
315
7.85k
}
316
317
#ifndef OPENSSL_NO_OCSP
318
int tls_parse_ctos_status_request(SSL *s, PACKET *pkt, unsigned int context,
319
                                  X509 *x, size_t chainidx)
320
6.08k
{
321
6.08k
    PACKET responder_id_list, exts;
322
323
    /* We ignore this in a resumption handshake */
324
6.08k
    if (s->hit)
325
45
        return 1;
326
327
    /* Not defined if we get one of these in a client Certificate */
328
6.04k
    if (x != NULL)
329
0
        return 1;
330
331
6.04k
    if (!PACKET_get_1(pkt, (unsigned int *)&s->ext.status_type)) {
332
15
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
333
15
        return 0;
334
15
    }
335
336
6.02k
    if (s->ext.status_type != TLSEXT_STATUSTYPE_ocsp) {
337
        /*
338
         * We don't know what to do with any other type so ignore it.
339
         */
340
231
        s->ext.status_type = TLSEXT_STATUSTYPE_nothing;
341
231
        return 1;
342
231
    }
343
344
5.79k
    if (!PACKET_get_length_prefixed_2 (pkt, &responder_id_list)) {
345
69
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
346
69
        return 0;
347
69
    }
348
349
    /*
350
     * We remove any OCSP_RESPIDs from a previous handshake
351
     * to prevent unbounded memory growth - CVE-2016-6304
352
     */
353
5.72k
    sk_OCSP_RESPID_pop_free(s->ext.ocsp.ids, OCSP_RESPID_free);
354
5.72k
    if (PACKET_remaining(&responder_id_list) > 0) {
355
3.47k
        s->ext.ocsp.ids = sk_OCSP_RESPID_new_null();
356
3.47k
        if (s->ext.ocsp.ids == NULL) {
357
0
            SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_MALLOC_FAILURE);
358
0
            return 0;
359
0
        }
360
3.47k
    } else {
361
2.25k
        s->ext.ocsp.ids = NULL;
362
2.25k
    }
363
364
5.82k
    while (PACKET_remaining(&responder_id_list) > 0) {
365
3.55k
        OCSP_RESPID *id;
366
3.55k
        PACKET responder_id;
367
3.55k
        const unsigned char *id_data;
368
369
3.55k
        if (!PACKET_get_length_prefixed_2(&responder_id_list, &responder_id)
370
3.55k
                || PACKET_remaining(&responder_id) == 0) {
371
104
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
372
104
            return 0;
373
104
        }
374
375
3.44k
        id_data = PACKET_data(&responder_id);
376
3.44k
        id = d2i_OCSP_RESPID(NULL, &id_data,
377
3.44k
                             (int)PACKET_remaining(&responder_id));
378
3.44k
        if (id == NULL) {
379
3.28k
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
380
3.28k
            return 0;
381
3.28k
        }
382
383
160
        if (id_data != PACKET_end(&responder_id)) {
384
63
            OCSP_RESPID_free(id);
385
63
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
386
387
63
            return 0;
388
63
        }
389
390
97
        if (!sk_OCSP_RESPID_push(s->ext.ocsp.ids, id)) {
391
0
            OCSP_RESPID_free(id);
392
0
            SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
393
394
0
            return 0;
395
0
        }
396
97
    }
397
398
    /* Read in request_extensions */
399
2.26k
    if (!PACKET_as_length_prefixed_2(pkt, &exts)) {
400
133
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
401
133
        return 0;
402
133
    }
403
404
2.13k
    if (PACKET_remaining(&exts) > 0) {
405
410
        const unsigned char *ext_data = PACKET_data(&exts);
406
407
410
        sk_X509_EXTENSION_pop_free(s->ext.ocsp.exts,
408
410
                                   X509_EXTENSION_free);
409
410
        s->ext.ocsp.exts =
410
410
            d2i_X509_EXTENSIONS(NULL, &ext_data, (int)PACKET_remaining(&exts));
411
410
        if (s->ext.ocsp.exts == NULL || ext_data != PACKET_end(&exts)) {
412
405
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
413
405
            return 0;
414
405
        }
415
410
    }
416
417
1.73k
    return 1;
418
2.13k
}
419
#endif
420
421
#ifndef OPENSSL_NO_NEXTPROTONEG
422
int tls_parse_ctos_npn(SSL *s, PACKET *pkt, unsigned int context, X509 *x,
423
                       size_t chainidx)
424
16
{
425
    /*
426
     * We shouldn't accept this extension on a
427
     * renegotiation.
428
     */
429
16
    if (SSL_IS_FIRST_HANDSHAKE(s))
430
16
        s->s3.npn_seen = 1;
431
432
16
    return 1;
433
16
}
434
#endif
435
436
/*
437
 * Save the ALPN extension in a ClientHello.|pkt| holds the contents of the ALPN
438
 * extension, not including type and length. Returns: 1 on success, 0 on error.
439
 */
440
int tls_parse_ctos_alpn(SSL *s, PACKET *pkt, unsigned int context, X509 *x,
441
                        size_t chainidx)
442
606
{
443
606
    PACKET protocol_list, save_protocol_list, protocol;
444
445
606
    if (!SSL_IS_FIRST_HANDSHAKE(s))
446
0
        return 1;
447
448
606
    if (!PACKET_as_length_prefixed_2(pkt, &protocol_list)
449
606
        || PACKET_remaining(&protocol_list) < 2) {
450
123
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
451
123
        return 0;
452
123
    }
453
454
483
    save_protocol_list = protocol_list;
455
3.21k
    do {
456
        /* Protocol names can't be empty. */
457
3.21k
        if (!PACKET_get_length_prefixed_1(&protocol_list, &protocol)
458
3.21k
                || PACKET_remaining(&protocol) == 0) {
459
98
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
460
98
            return 0;
461
98
        }
462
3.21k
    } while (PACKET_remaining(&protocol_list) != 0);
463
464
385
    OPENSSL_free(s->s3.alpn_proposed);
465
385
    s->s3.alpn_proposed = NULL;
466
385
    s->s3.alpn_proposed_len = 0;
467
385
    if (!PACKET_memdup(&save_protocol_list,
468
385
                       &s->s3.alpn_proposed, &s->s3.alpn_proposed_len)) {
469
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
470
0
        return 0;
471
0
    }
472
473
385
    return 1;
474
385
}
475
476
#ifndef OPENSSL_NO_SRTP
477
int tls_parse_ctos_use_srtp(SSL *s, PACKET *pkt, unsigned int context, X509 *x,
478
                            size_t chainidx)
479
107
{
480
107
    STACK_OF(SRTP_PROTECTION_PROFILE) *srvr;
481
107
    unsigned int ct, mki_len, id;
482
107
    int i, srtp_pref;
483
107
    PACKET subpkt;
484
485
    /* Ignore this if we have no SRTP profiles */
486
107
    if (SSL_get_srtp_profiles(s) == NULL)
487
107
        return 1;
488
489
    /* Pull off the length of the cipher suite list  and check it is even */
490
0
    if (!PACKET_get_net_2(pkt, &ct) || (ct & 1) != 0
491
0
            || !PACKET_get_sub_packet(pkt, &subpkt, ct)) {
492
0
        SSLfatal(s, SSL_AD_DECODE_ERROR,
493
0
               SSL_R_BAD_SRTP_PROTECTION_PROFILE_LIST);
494
0
        return 0;
495
0
    }
496
497
0
    srvr = SSL_get_srtp_profiles(s);
498
0
    s->srtp_profile = NULL;
499
    /* Search all profiles for a match initially */
500
0
    srtp_pref = sk_SRTP_PROTECTION_PROFILE_num(srvr);
501
502
0
    while (PACKET_remaining(&subpkt)) {
503
0
        if (!PACKET_get_net_2(&subpkt, &id)) {
504
0
            SSLfatal(s, SSL_AD_DECODE_ERROR,
505
0
                     SSL_R_BAD_SRTP_PROTECTION_PROFILE_LIST);
506
0
            return 0;
507
0
        }
508
509
        /*
510
         * Only look for match in profiles of higher preference than
511
         * current match.
512
         * If no profiles have been have been configured then this
513
         * does nothing.
514
         */
515
0
        for (i = 0; i < srtp_pref; i++) {
516
0
            SRTP_PROTECTION_PROFILE *sprof =
517
0
                sk_SRTP_PROTECTION_PROFILE_value(srvr, i);
518
519
0
            if (sprof->id == id) {
520
0
                s->srtp_profile = sprof;
521
0
                srtp_pref = i;
522
0
                break;
523
0
            }
524
0
        }
525
0
    }
526
527
    /* Now extract the MKI value as a sanity check, but discard it for now */
528
0
    if (!PACKET_get_1(pkt, &mki_len)) {
529
0
        SSLfatal(s, SSL_AD_DECODE_ERROR,
530
0
                 SSL_R_BAD_SRTP_PROTECTION_PROFILE_LIST);
531
0
        return 0;
532
0
    }
533
534
0
    if (!PACKET_forward(pkt, mki_len)
535
0
        || PACKET_remaining(pkt)) {
536
0
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_SRTP_MKI_VALUE);
537
0
        return 0;
538
0
    }
539
540
0
    return 1;
541
0
}
542
#endif
543
544
int tls_parse_ctos_etm(SSL *s, PACKET *pkt, unsigned int context, X509 *x,
545
                       size_t chainidx)
546
1.77k
{
547
1.77k
    if (!(s->options & SSL_OP_NO_ENCRYPT_THEN_MAC))
548
1.77k
        s->ext.use_etm = 1;
549
550
1.77k
    return 1;
551
1.77k
}
552
553
/*
554
 * Process a psk_kex_modes extension received in the ClientHello. |pkt| contains
555
 * the raw PACKET data for the extension. Returns 1 on success or 0 on failure.
556
 */
557
int tls_parse_ctos_psk_kex_modes(SSL *s, PACKET *pkt, unsigned int context,
558
                                 X509 *x, size_t chainidx)
559
712
{
560
712
#ifndef OPENSSL_NO_TLS1_3
561
712
    PACKET psk_kex_modes;
562
712
    unsigned int mode;
563
564
712
    if (!PACKET_as_length_prefixed_1(pkt, &psk_kex_modes)
565
712
            || PACKET_remaining(&psk_kex_modes) == 0) {
566
18
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
567
18
        return 0;
568
18
    }
569
570
3.96k
    while (PACKET_get_1(&psk_kex_modes, &mode)) {
571
3.27k
        if (mode == TLSEXT_KEX_MODE_KE_DHE)
572
1.10k
            s->ext.psk_kex_mode |= TLSEXT_KEX_MODE_FLAG_KE_DHE;
573
2.16k
        else if (mode == TLSEXT_KEX_MODE_KE
574
2.16k
                && (s->options & SSL_OP_ALLOW_NO_DHE_KEX) != 0)
575
0
            s->ext.psk_kex_mode |= TLSEXT_KEX_MODE_FLAG_KE;
576
3.27k
    }
577
694
#endif
578
579
694
    return 1;
580
712
}
581
582
/*
583
 * Process a key_share extension received in the ClientHello. |pkt| contains
584
 * the raw PACKET data for the extension. Returns 1 on success or 0 on failure.
585
 */
586
int tls_parse_ctos_key_share(SSL *s, PACKET *pkt, unsigned int context, X509 *x,
587
                             size_t chainidx)
588
2.53k
{
589
2.53k
#ifndef OPENSSL_NO_TLS1_3
590
2.53k
    unsigned int group_id;
591
2.53k
    PACKET key_share_list, encoded_pt;
592
2.53k
    const uint16_t *clntgroups, *srvrgroups;
593
2.53k
    size_t clnt_num_groups, srvr_num_groups;
594
2.53k
    int found = 0;
595
596
2.53k
    if (s->hit && (s->ext.psk_kex_mode & TLSEXT_KEX_MODE_FLAG_KE_DHE) == 0)
597
0
        return 1;
598
599
    /* Sanity check */
600
2.53k
    if (s->s3.peer_tmp != NULL) {
601
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
602
0
        return 0;
603
0
    }
604
605
2.53k
    if (!PACKET_as_length_prefixed_2(pkt, &key_share_list)) {
606
77
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_LENGTH_MISMATCH);
607
77
        return 0;
608
77
    }
609
610
    /* Get our list of supported groups */
611
2.45k
    tls1_get_supported_groups(s, &srvrgroups, &srvr_num_groups);
612
    /* Get the clients list of supported groups. */
613
2.45k
    tls1_get_peer_groups(s, &clntgroups, &clnt_num_groups);
614
2.45k
    if (clnt_num_groups == 0) {
615
        /*
616
         * This can only happen if the supported_groups extension was not sent,
617
         * because we verify that the length is non-zero when we process that
618
         * extension.
619
         */
620
6
        SSLfatal(s, SSL_AD_MISSING_EXTENSION,
621
6
                 SSL_R_MISSING_SUPPORTED_GROUPS_EXTENSION);
622
6
        return 0;
623
6
    }
624
625
2.44k
    if (s->s3.group_id != 0 && PACKET_remaining(&key_share_list) == 0) {
626
        /*
627
         * If we set a group_id already, then we must have sent an HRR
628
         * requesting a new key_share. If we haven't got one then that is an
629
         * error
630
         */
631
5
        SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_BAD_KEY_SHARE);
632
5
        return 0;
633
5
    }
634
635
5.17k
    while (PACKET_remaining(&key_share_list) > 0) {
636
2.94k
        if (!PACKET_get_net_2(&key_share_list, &group_id)
637
2.94k
                || !PACKET_get_length_prefixed_2(&key_share_list, &encoded_pt)
638
2.94k
                || PACKET_remaining(&encoded_pt) == 0) {
639
85
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_LENGTH_MISMATCH);
640
85
            return 0;
641
85
        }
642
643
        /*
644
         * If we already found a suitable key_share we loop through the
645
         * rest to verify the structure, but don't process them.
646
         */
647
2.85k
        if (found)
648
292
            continue;
649
650
        /*
651
         * If we sent an HRR then the key_share sent back MUST be for the group
652
         * we requested, and must be the only key_share sent.
653
         */
654
2.56k
        if (s->s3.group_id != 0
655
2.56k
                && (group_id != s->s3.group_id
656
135
                    || PACKET_remaining(&key_share_list) != 0)) {
657
37
            SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_BAD_KEY_SHARE);
658
37
            return 0;
659
37
        }
660
661
        /* Check if this share is in supported_groups sent from client */
662
2.52k
        if (!check_in_list(s, group_id, clntgroups, clnt_num_groups, 0)) {
663
28
            SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_BAD_KEY_SHARE);
664
28
            return 0;
665
28
        }
666
667
        /* Check if this share is for a group we can use */
668
2.50k
        if (!check_in_list(s, group_id, srvrgroups, srvr_num_groups, 1)
669
2.50k
                || !tls_group_allowed(s, group_id, SSL_SECOP_CURVE_SUPPORTED)
670
                   /*
671
                    * We tolerate but ignore a group id that we don't think is
672
                    * suitable for TLSv1.3
673
                    */
674
2.50k
                || !tls_valid_group(s, group_id, TLS1_3_VERSION, TLS1_3_VERSION,
675
1.80k
                                    0, NULL)) {
676
            /* Share not suitable */
677
695
            continue;
678
695
        }
679
680
1.80k
        if ((s->s3.peer_tmp = ssl_generate_param_group(s, group_id)) == NULL) {
681
0
            SSLfatal(s, SSL_AD_INTERNAL_ERROR,
682
0
                   SSL_R_UNABLE_TO_FIND_ECDH_PARAMETERS);
683
0
            return 0;
684
0
        }
685
686
1.80k
        s->s3.group_id = group_id;
687
        /* Cache the selected group ID in the SSL_SESSION */
688
1.80k
        s->session->kex_group = group_id;
689
690
1.80k
        if (tls13_set_encoded_pub_key(s->s3.peer_tmp,
691
1.80k
                                      PACKET_data(&encoded_pt),
692
1.80k
                                      PACKET_remaining(&encoded_pt)) <= 0) {
693
64
            SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_BAD_ECPOINT);
694
64
            return 0;
695
64
        }
696
697
1.74k
        found = 1;
698
1.74k
    }
699
2.22k
#endif
700
701
2.22k
    return 1;
702
2.44k
}
703
704
int tls_parse_ctos_cookie(SSL *s, PACKET *pkt, unsigned int context, X509 *x,
705
                          size_t chainidx)
706
74
{
707
74
#ifndef OPENSSL_NO_TLS1_3
708
74
    unsigned int format, version, key_share, group_id;
709
74
    EVP_MD_CTX *hctx;
710
74
    EVP_PKEY *pkey;
711
74
    PACKET cookie, raw, chhash, appcookie;
712
74
    WPACKET hrrpkt;
713
74
    const unsigned char *data, *mdin, *ciphdata;
714
74
    unsigned char hmac[SHA256_DIGEST_LENGTH];
715
74
    unsigned char hrr[MAX_HRR_SIZE];
716
74
    size_t rawlen, hmaclen, hrrlen, ciphlen;
717
74
    uint64_t tm, now;
718
719
    /* Ignore any cookie if we're not set up to verify it */
720
74
    if (s->ctx->verify_stateless_cookie_cb == NULL
721
74
            || (s->s3.flags & TLS1_FLAGS_STATELESS) == 0)
722
74
        return 1;
723
724
0
    if (!PACKET_as_length_prefixed_2(pkt, &cookie)) {
725
0
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_LENGTH_MISMATCH);
726
0
        return 0;
727
0
    }
728
729
0
    raw = cookie;
730
0
    data = PACKET_data(&raw);
731
0
    rawlen = PACKET_remaining(&raw);
732
0
    if (rawlen < SHA256_DIGEST_LENGTH
733
0
            || !PACKET_forward(&raw, rawlen - SHA256_DIGEST_LENGTH)) {
734
0
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_LENGTH_MISMATCH);
735
0
        return 0;
736
0
    }
737
0
    mdin = PACKET_data(&raw);
738
739
    /* Verify the HMAC of the cookie */
740
0
    hctx = EVP_MD_CTX_create();
741
0
    pkey = EVP_PKEY_new_raw_private_key_ex(s->ctx->libctx, "HMAC",
742
0
                                           s->ctx->propq,
743
0
                                           s->session_ctx->ext.cookie_hmac_key,
744
0
                                           sizeof(s->session_ctx->ext.cookie_hmac_key));
745
0
    if (hctx == NULL || pkey == NULL) {
746
0
        EVP_MD_CTX_free(hctx);
747
0
        EVP_PKEY_free(pkey);
748
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_MALLOC_FAILURE);
749
0
        return 0;
750
0
    }
751
752
0
    hmaclen = SHA256_DIGEST_LENGTH;
753
0
    if (EVP_DigestSignInit_ex(hctx, NULL, "SHA2-256", s->ctx->libctx,
754
0
                              s->ctx->propq, pkey, NULL) <= 0
755
0
            || EVP_DigestSign(hctx, hmac, &hmaclen, data,
756
0
                              rawlen - SHA256_DIGEST_LENGTH) <= 0
757
0
            || hmaclen != SHA256_DIGEST_LENGTH) {
758
0
        EVP_MD_CTX_free(hctx);
759
0
        EVP_PKEY_free(pkey);
760
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
761
0
        return 0;
762
0
    }
763
764
0
    EVP_MD_CTX_free(hctx);
765
0
    EVP_PKEY_free(pkey);
766
767
0
    if (CRYPTO_memcmp(hmac, mdin, SHA256_DIGEST_LENGTH) != 0) {
768
0
        SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_COOKIE_MISMATCH);
769
0
        return 0;
770
0
    }
771
772
0
    if (!PACKET_get_net_2(&cookie, &format)) {
773
0
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_LENGTH_MISMATCH);
774
0
        return 0;
775
0
    }
776
    /* Check the cookie format is something we recognise. Ignore it if not */
777
0
    if (format != COOKIE_STATE_FORMAT_VERSION)
778
0
        return 1;
779
780
    /*
781
     * The rest of these checks really shouldn't fail since we have verified the
782
     * HMAC above.
783
     */
784
785
    /* Check the version number is sane */
786
0
    if (!PACKET_get_net_2(&cookie, &version)) {
787
0
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_LENGTH_MISMATCH);
788
0
        return 0;
789
0
    }
790
0
    if (version != TLS1_3_VERSION) {
791
0
        SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER,
792
0
                 SSL_R_BAD_PROTOCOL_VERSION_NUMBER);
793
0
        return 0;
794
0
    }
795
796
0
    if (!PACKET_get_net_2(&cookie, &group_id)) {
797
0
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_LENGTH_MISMATCH);
798
0
        return 0;
799
0
    }
800
801
0
    ciphdata = PACKET_data(&cookie);
802
0
    if (!PACKET_forward(&cookie, 2)) {
803
0
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_LENGTH_MISMATCH);
804
0
        return 0;
805
0
    }
806
0
    if (group_id != s->s3.group_id
807
0
            || s->s3.tmp.new_cipher
808
0
               != ssl_get_cipher_by_char(s, ciphdata, 0)) {
809
        /*
810
         * We chose a different cipher or group id this time around to what is
811
         * in the cookie. Something must have changed.
812
         */
813
0
        SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_BAD_CIPHER);
814
0
        return 0;
815
0
    }
816
817
0
    if (!PACKET_get_1(&cookie, &key_share)
818
0
            || !PACKET_get_net_8(&cookie, &tm)
819
0
            || !PACKET_get_length_prefixed_2(&cookie, &chhash)
820
0
            || !PACKET_get_length_prefixed_1(&cookie, &appcookie)
821
0
            || PACKET_remaining(&cookie) != SHA256_DIGEST_LENGTH) {
822
0
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_LENGTH_MISMATCH);
823
0
        return 0;
824
0
    }
825
826
    /* We tolerate a cookie age of up to 10 minutes (= 60 * 10 seconds) */
827
0
    now = time(NULL);
828
0
    if (tm > now || (now - tm) > 600) {
829
        /* Cookie is stale. Ignore it */
830
0
        return 1;
831
0
    }
832
833
    /* Verify the app cookie */
834
0
    if (s->ctx->verify_stateless_cookie_cb(s, PACKET_data(&appcookie),
835
0
                                     PACKET_remaining(&appcookie)) == 0) {
836
0
        SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_COOKIE_MISMATCH);
837
0
        return 0;
838
0
    }
839
840
    /*
841
     * Reconstruct the HRR that we would have sent in response to the original
842
     * ClientHello so we can add it to the transcript hash.
843
     * Note: This won't work with custom HRR extensions
844
     */
845
0
    if (!WPACKET_init_static_len(&hrrpkt, hrr, sizeof(hrr), 0)) {
846
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
847
0
        return 0;
848
0
    }
849
0
    if (!WPACKET_put_bytes_u8(&hrrpkt, SSL3_MT_SERVER_HELLO)
850
0
            || !WPACKET_start_sub_packet_u24(&hrrpkt)
851
0
            || !WPACKET_put_bytes_u16(&hrrpkt, TLS1_2_VERSION)
852
0
            || !WPACKET_memcpy(&hrrpkt, hrrrandom, SSL3_RANDOM_SIZE)
853
0
            || !WPACKET_sub_memcpy_u8(&hrrpkt, s->tmp_session_id,
854
0
                                      s->tmp_session_id_len)
855
0
            || !s->method->put_cipher_by_char(s->s3.tmp.new_cipher, &hrrpkt,
856
0
                                              &ciphlen)
857
0
            || !WPACKET_put_bytes_u8(&hrrpkt, 0)
858
0
            || !WPACKET_start_sub_packet_u16(&hrrpkt)) {
859
0
        WPACKET_cleanup(&hrrpkt);
860
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
861
0
        return 0;
862
0
    }
863
0
    if (!WPACKET_put_bytes_u16(&hrrpkt, TLSEXT_TYPE_supported_versions)
864
0
            || !WPACKET_start_sub_packet_u16(&hrrpkt)
865
0
            || !WPACKET_put_bytes_u16(&hrrpkt, s->version)
866
0
            || !WPACKET_close(&hrrpkt)) {
867
0
        WPACKET_cleanup(&hrrpkt);
868
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
869
0
        return 0;
870
0
    }
871
0
    if (key_share) {
872
0
        if (!WPACKET_put_bytes_u16(&hrrpkt, TLSEXT_TYPE_key_share)
873
0
                || !WPACKET_start_sub_packet_u16(&hrrpkt)
874
0
                || !WPACKET_put_bytes_u16(&hrrpkt, s->s3.group_id)
875
0
                || !WPACKET_close(&hrrpkt)) {
876
0
            WPACKET_cleanup(&hrrpkt);
877
0
            SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
878
0
            return 0;
879
0
        }
880
0
    }
881
0
    if (!WPACKET_put_bytes_u16(&hrrpkt, TLSEXT_TYPE_cookie)
882
0
            || !WPACKET_start_sub_packet_u16(&hrrpkt)
883
0
            || !WPACKET_sub_memcpy_u16(&hrrpkt, data, rawlen)
884
0
            || !WPACKET_close(&hrrpkt) /* cookie extension */
885
0
            || !WPACKET_close(&hrrpkt) /* extension block */
886
0
            || !WPACKET_close(&hrrpkt) /* message */
887
0
            || !WPACKET_get_total_written(&hrrpkt, &hrrlen)
888
0
            || !WPACKET_finish(&hrrpkt)) {
889
0
        WPACKET_cleanup(&hrrpkt);
890
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
891
0
        return 0;
892
0
    }
893
894
    /* Reconstruct the transcript hash */
895
0
    if (!create_synthetic_message_hash(s, PACKET_data(&chhash),
896
0
                                       PACKET_remaining(&chhash), hrr,
897
0
                                       hrrlen)) {
898
        /* SSLfatal() already called */
899
0
        return 0;
900
0
    }
901
902
    /* Act as if this ClientHello came after a HelloRetryRequest */
903
0
    s->hello_retry_request = SSL_HRR_PENDING;
904
905
0
    s->ext.cookieok = 1;
906
0
#endif
907
908
0
    return 1;
909
0
}
910
911
int tls_parse_ctos_supported_groups(SSL *s, PACKET *pkt, unsigned int context,
912
                                    X509 *x, size_t chainidx)
913
15.1k
{
914
15.1k
    PACKET supported_groups_list;
915
916
    /* Each group is 2 bytes and we must have at least 1. */
917
15.1k
    if (!PACKET_as_length_prefixed_2(pkt, &supported_groups_list)
918
15.1k
            || PACKET_remaining(&supported_groups_list) == 0
919
15.1k
            || (PACKET_remaining(&supported_groups_list) % 2) != 0) {
920
206
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
921
206
        return 0;
922
206
    }
923
924
14.9k
    if (!s->hit || SSL_IS_TLS13(s)) {
925
14.8k
        OPENSSL_free(s->ext.peer_supportedgroups);
926
14.8k
        s->ext.peer_supportedgroups = NULL;
927
14.8k
        s->ext.peer_supportedgroups_len = 0;
928
14.8k
        if (!tls1_save_u16(&supported_groups_list,
929
14.8k
                           &s->ext.peer_supportedgroups,
930
14.8k
                           &s->ext.peer_supportedgroups_len)) {
931
0
            SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
932
0
            return 0;
933
0
        }
934
14.8k
    }
935
936
14.9k
    return 1;
937
14.9k
}
938
939
int tls_parse_ctos_ems(SSL *s, PACKET *pkt, unsigned int context, X509 *x,
940
                       size_t chainidx)
941
3.91k
{
942
    /* The extension must always be empty */
943
3.91k
    if (PACKET_remaining(pkt) != 0) {
944
15
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
945
15
        return 0;
946
15
    }
947
948
3.90k
    if (s->options & SSL_OP_NO_EXTENDED_MASTER_SECRET)
949
0
        return 1;
950
951
3.90k
    s->s3.flags |= TLS1_FLAGS_RECEIVED_EXTMS;
952
953
3.90k
    return 1;
954
3.90k
}
955
956
957
int tls_parse_ctos_early_data(SSL *s, PACKET *pkt, unsigned int context,
958
                              X509 *x, size_t chainidx)
959
2.41k
{
960
2.41k
    if (PACKET_remaining(pkt) != 0) {
961
7
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
962
7
        return 0;
963
7
    }
964
965
2.40k
    if (s->hello_retry_request != SSL_HRR_NONE) {
966
10
        SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_BAD_EXTENSION);
967
10
        return 0;
968
10
    }
969
970
2.39k
    return 1;
971
2.40k
}
972
973
static SSL_TICKET_STATUS tls_get_stateful_ticket(SSL *s, PACKET *tick,
974
                                                 SSL_SESSION **sess)
975
0
{
976
0
    SSL_SESSION *tmpsess = NULL;
977
978
0
    s->ext.ticket_expected = 1;
979
980
0
    switch (PACKET_remaining(tick)) {
981
0
        case 0:
982
0
            return SSL_TICKET_EMPTY;
983
984
0
        case SSL_MAX_SSL_SESSION_ID_LENGTH:
985
0
            break;
986
987
0
        default:
988
0
            return SSL_TICKET_NO_DECRYPT;
989
0
    }
990
991
0
    tmpsess = lookup_sess_in_cache(s, PACKET_data(tick),
992
0
                                   SSL_MAX_SSL_SESSION_ID_LENGTH);
993
994
0
    if (tmpsess == NULL)
995
0
        return SSL_TICKET_NO_DECRYPT;
996
997
0
    *sess = tmpsess;
998
0
    return SSL_TICKET_SUCCESS;
999
0
}
1000
1001
int tls_parse_ctos_psk(SSL *s, PACKET *pkt, unsigned int context, X509 *x,
1002
                       size_t chainidx)
1003
124
{
1004
124
    PACKET identities, binders, binder;
1005
124
    size_t binderoffset, hashsize;
1006
124
    SSL_SESSION *sess = NULL;
1007
124
    unsigned int id, i, ext = 0;
1008
124
    const EVP_MD *md = NULL;
1009
1010
    /*
1011
     * If we have no PSK kex mode that we recognise then we can't resume so
1012
     * ignore this extension
1013
     */
1014
124
    if ((s->ext.psk_kex_mode
1015
124
            & (TLSEXT_KEX_MODE_FLAG_KE | TLSEXT_KEX_MODE_FLAG_KE_DHE)) == 0)
1016
7
        return 1;
1017
1018
117
    if (!PACKET_get_length_prefixed_2(pkt, &identities)) {
1019
7
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
1020
7
        return 0;
1021
7
    }
1022
1023
110
    s->ext.ticket_expected = 0;
1024
215
    for (id = 0; PACKET_remaining(&identities) != 0; id++) {
1025
173
        PACKET identity;
1026
173
        unsigned long ticket_agel;
1027
173
        size_t idlen;
1028
1029
173
        if (!PACKET_get_length_prefixed_2(&identities, &identity)
1030
173
                || !PACKET_get_net_4(&identities, &ticket_agel)) {
1031
29
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
1032
29
            return 0;
1033
29
        }
1034
1035
144
        idlen = PACKET_remaining(&identity);
1036
144
        if (s->psk_find_session_cb != NULL
1037
144
                && !s->psk_find_session_cb(s, PACKET_data(&identity), idlen,
1038
0
                                           &sess)) {
1039
0
            SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_R_BAD_EXTENSION);
1040
0
            return 0;
1041
0
        }
1042
1043
144
#ifndef OPENSSL_NO_PSK
1044
144
        if(sess == NULL
1045
144
                && s->psk_server_callback != NULL
1046
144
                && idlen <= PSK_MAX_IDENTITY_LEN) {
1047
0
            char *pskid = NULL;
1048
0
            unsigned char pskdata[PSK_MAX_PSK_LEN];
1049
0
            unsigned int pskdatalen;
1050
1051
0
            if (!PACKET_strndup(&identity, &pskid)) {
1052
0
                SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1053
0
                return 0;
1054
0
            }
1055
0
            pskdatalen = s->psk_server_callback(s, pskid, pskdata,
1056
0
                                                sizeof(pskdata));
1057
0
            OPENSSL_free(pskid);
1058
0
            if (pskdatalen > PSK_MAX_PSK_LEN) {
1059
0
                SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1060
0
                return 0;
1061
0
            } else if (pskdatalen > 0) {
1062
0
                const SSL_CIPHER *cipher;
1063
0
                const unsigned char tls13_aes128gcmsha256_id[] = { 0x13, 0x01 };
1064
1065
                /*
1066
                 * We found a PSK using an old style callback. We don't know
1067
                 * the digest so we default to SHA256 as per the TLSv1.3 spec
1068
                 */
1069
0
                cipher = SSL_CIPHER_find(s, tls13_aes128gcmsha256_id);
1070
0
                if (cipher == NULL) {
1071
0
                    OPENSSL_cleanse(pskdata, pskdatalen);
1072
0
                    SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1073
0
                    return 0;
1074
0
                }
1075
1076
0
                sess = SSL_SESSION_new();
1077
0
                if (sess == NULL
1078
0
                        || !SSL_SESSION_set1_master_key(sess, pskdata,
1079
0
                                                        pskdatalen)
1080
0
                        || !SSL_SESSION_set_cipher(sess, cipher)
1081
0
                        || !SSL_SESSION_set_protocol_version(sess,
1082
0
                                                             TLS1_3_VERSION)) {
1083
0
                    OPENSSL_cleanse(pskdata, pskdatalen);
1084
0
                    SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1085
0
                    goto err;
1086
0
                }
1087
0
                OPENSSL_cleanse(pskdata, pskdatalen);
1088
0
            }
1089
0
        }
1090
144
#endif /* OPENSSL_NO_PSK */
1091
1092
144
        if (sess != NULL) {
1093
            /* We found a PSK */
1094
0
            SSL_SESSION *sesstmp = ssl_session_dup(sess, 0);
1095
1096
0
            if (sesstmp == NULL) {
1097
0
                SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1098
0
                goto err;
1099
0
            }
1100
0
            SSL_SESSION_free(sess);
1101
0
            sess = sesstmp;
1102
1103
            /*
1104
             * We've just been told to use this session for this context so
1105
             * make sure the sid_ctx matches up.
1106
             */
1107
0
            memcpy(sess->sid_ctx, s->sid_ctx, s->sid_ctx_length);
1108
0
            sess->sid_ctx_length = s->sid_ctx_length;
1109
0
            ext = 1;
1110
0
            if (id == 0)
1111
0
                s->ext.early_data_ok = 1;
1112
0
            s->ext.ticket_expected = 1;
1113
144
        } else {
1114
144
            uint32_t ticket_age = 0, agesec, agems;
1115
144
            int ret;
1116
1117
            /*
1118
             * If we are using anti-replay protection then we behave as if
1119
             * SSL_OP_NO_TICKET is set - we are caching tickets anyway so there
1120
             * is no point in using full stateless tickets.
1121
             */
1122
144
            if ((s->options & SSL_OP_NO_TICKET) != 0
1123
144
                    || (s->max_early_data > 0
1124
144
                        && (s->options & SSL_OP_NO_ANTI_REPLAY) == 0))
1125
0
                ret = tls_get_stateful_ticket(s, &identity, &sess);
1126
144
            else
1127
144
                ret = tls_decrypt_ticket(s, PACKET_data(&identity),
1128
144
                                         PACKET_remaining(&identity), NULL, 0,
1129
144
                                         &sess);
1130
1131
144
            if (ret == SSL_TICKET_EMPTY) {
1132
3
                SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
1133
3
                return 0;
1134
3
            }
1135
1136
141
            if (ret == SSL_TICKET_FATAL_ERR_MALLOC
1137
141
                    || ret == SSL_TICKET_FATAL_ERR_OTHER) {
1138
0
                SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1139
0
                return 0;
1140
0
            }
1141
141
            if (ret == SSL_TICKET_NONE || ret == SSL_TICKET_NO_DECRYPT)
1142
74
                continue;
1143
1144
            /* Check for replay */
1145
67
            if (s->max_early_data > 0
1146
67
                    && (s->options & SSL_OP_NO_ANTI_REPLAY) == 0
1147
67
                    && !SSL_CTX_remove_session(s->session_ctx, sess)) {
1148
0
                SSL_SESSION_free(sess);
1149
0
                sess = NULL;
1150
0
                continue;
1151
0
            }
1152
1153
67
            ticket_age = (uint32_t)ticket_agel;
1154
67
            agesec = (uint32_t)(time(NULL) - sess->time);
1155
67
            agems = agesec * (uint32_t)1000;
1156
67
            ticket_age -= sess->ext.tick_age_add;
1157
1158
            /*
1159
             * For simplicity we do our age calculations in seconds. If the
1160
             * client does it in ms then it could appear that their ticket age
1161
             * is longer than ours (our ticket age calculation should always be
1162
             * slightly longer than the client's due to the network latency).
1163
             * Therefore we add 1000ms to our age calculation to adjust for
1164
             * rounding errors.
1165
             */
1166
67
            if (id == 0
1167
67
                    && sess->timeout >= (long)agesec
1168
67
                    && agems / (uint32_t)1000 == agesec
1169
67
                    && ticket_age <= agems + 1000
1170
67
                    && ticket_age + TICKET_AGE_ALLOWANCE >= agems + 1000) {
1171
                /*
1172
                 * Ticket age is within tolerance and not expired. We allow it
1173
                 * for early data
1174
                 */
1175
5
                s->ext.early_data_ok = 1;
1176
5
            }
1177
67
        }
1178
1179
67
        md = ssl_md(s->ctx, sess->cipher->algorithm2);
1180
67
        if (md == NULL) {
1181
0
            SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1182
0
            goto err;
1183
0
        }
1184
67
        if (!EVP_MD_is_a(md,
1185
67
                EVP_MD_get0_name(ssl_md(s->ctx,
1186
67
                                        s->s3.tmp.new_cipher->algorithm2)))) {
1187
            /* The ciphersuite is not compatible with this session. */
1188
31
            SSL_SESSION_free(sess);
1189
31
            sess = NULL;
1190
31
            s->ext.early_data_ok = 0;
1191
31
            s->ext.ticket_expected = 0;
1192
31
            continue;
1193
31
        }
1194
36
        break;
1195
67
    }
1196
1197
78
    if (sess == NULL)
1198
42
        return 1;
1199
1200
36
    binderoffset = PACKET_data(pkt) - (const unsigned char *)s->init_buf->data;
1201
36
    hashsize = EVP_MD_get_size(md);
1202
1203
36
    if (!PACKET_get_length_prefixed_2(pkt, &binders)) {
1204
17
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
1205
17
        goto err;
1206
17
    }
1207
1208
36
    for (i = 0; i <= id; i++) {
1209
19
        if (!PACKET_get_length_prefixed_1(&binders, &binder)) {
1210
2
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
1211
2
            goto err;
1212
2
        }
1213
19
    }
1214
1215
17
    if (PACKET_remaining(&binder) != hashsize) {
1216
3
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
1217
3
        goto err;
1218
3
    }
1219
14
    if (tls_psk_do_binder(s, md, (const unsigned char *)s->init_buf->data,
1220
14
                          binderoffset, PACKET_data(&binder), NULL, sess, 0,
1221
14
                          ext) != 1) {
1222
        /* SSLfatal() already called */
1223
12
        goto err;
1224
12
    }
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
34
err:
1232
34
    SSL_SESSION_free(sess);
1233
34
    return 0;
1234
14
}
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
165
{
1241
165
    if (PACKET_remaining(pkt) != 0) {
1242
6
        SSLfatal(s, SSL_AD_DECODE_ERROR,
1243
6
                 SSL_R_POST_HANDSHAKE_AUTH_ENCODING_ERR);
1244
6
        return 0;
1245
6
    }
1246
1247
159
    s->post_handshake_auth = SSL_PHA_EXT_RECEIVED;
1248
1249
159
    return 1;
1250
165
}
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
21.7k
{
1259
21.7k
    if (!s->s3.send_connection_binding)
1260
15.8k
        return EXT_RETURN_NOT_SENT;
1261
1262
    /* Still add this even if SSL_OP_NO_RENEGOTIATION is set */
1263
5.87k
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_renegotiate)
1264
5.87k
            || !WPACKET_start_sub_packet_u16(pkt)
1265
5.87k
            || !WPACKET_start_sub_packet_u8(pkt)
1266
5.87k
            || !WPACKET_memcpy(pkt, s->s3.previous_client_finished,
1267
5.87k
                               s->s3.previous_client_finished_len)
1268
5.87k
            || !WPACKET_memcpy(pkt, s->s3.previous_server_finished,
1269
5.87k
                               s->s3.previous_server_finished_len)
1270
5.87k
            || !WPACKET_close(pkt)
1271
5.87k
            || !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
5.87k
    return EXT_RETURN_SENT;
1277
5.87k
}
1278
1279
EXT_RETURN tls_construct_stoc_server_name(SSL *s, WPACKET *pkt,
1280
                                          unsigned int context, X509 *x,
1281
                                          size_t chainidx)
1282
20.7k
{
1283
20.7k
    if (s->servername_done != 1)
1284
20.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
20.7k
{
1307
20.7k
    if (!USE_MAX_FRAGMENT_LENGTH_EXT(s->session))
1308
19.8k
        return EXT_RETURN_NOT_SENT;
1309
1310
    /*-
1311
     * 4 bytes for this extension type and extension length
1312
     * 1 byte for the Max Fragment Length code value.
1313
     */
1314
867
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_max_fragment_length)
1315
867
        || !WPACKET_start_sub_packet_u16(pkt)
1316
867
        || !WPACKET_put_bytes_u8(pkt, s->session->ext.max_fragment_len_mode)
1317
867
        || !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
867
    return EXT_RETURN_SENT;
1323
867
}
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
18.1k
{
1329
18.1k
    unsigned long alg_k = s->s3.tmp.new_cipher->algorithm_mkey;
1330
18.1k
    unsigned long alg_a = s->s3.tmp.new_cipher->algorithm_auth;
1331
18.1k
    int using_ecc = ((alg_k & SSL_kECDHE) || (alg_a & SSL_aECDSA))
1332
18.1k
                    && (s->ext.peer_ecpointformats != NULL);
1333
18.1k
    const unsigned char *plist;
1334
18.1k
    size_t plistlen;
1335
1336
18.1k
    if (!using_ecc)
1337
15.2k
        return EXT_RETURN_NOT_SENT;
1338
1339
2.94k
    tls1_get_formatlist(s, &plist, &plistlen);
1340
2.94k
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_ec_point_formats)
1341
2.94k
            || !WPACKET_start_sub_packet_u16(pkt)
1342
2.94k
            || !WPACKET_sub_memcpy_u8(pkt, plist, plistlen)
1343
2.94k
            || !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
2.94k
    return EXT_RETURN_SENT;
1349
2.94k
}
1350
1351
EXT_RETURN tls_construct_stoc_supported_groups(SSL *s, WPACKET *pkt,
1352
                                               unsigned int context, X509 *x,
1353
                                               size_t chainidx)
1354
20.7k
{
1355
20.7k
    const uint16_t *groups;
1356
20.7k
    size_t numgroups, i, first = 1;
1357
20.7k
    int version;
1358
1359
    /* s->s3.group_id is non zero if we accepted a key_share */
1360
20.7k
    if (s->s3.group_id == 0)
1361
18.1k
        return EXT_RETURN_NOT_SENT;
1362
1363
    /* Get our list of supported groups */
1364
2.57k
    tls1_get_supported_groups(s, &groups, &numgroups);
1365
2.57k
    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.57k
    version = SSL_version(s);
1372
10.5k
    for (i = 0; i < numgroups; i++) {
1373
9.55k
        uint16_t group = groups[i];
1374
1375
9.55k
        if (tls_valid_group(s, group, version, version, 0, NULL)
1376
9.55k
                && tls_group_allowed(s, group, SSL_SECOP_CURVE_SUPPORTED)) {
1377
9.55k
            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.57k
                if (s->s3.group_id == group)
1383
1.59k
                    return EXT_RETURN_NOT_SENT;
1384
1385
                /* Add extension header */
1386
983
                if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_supported_groups)
1387
                           /* Sub-packet for supported_groups extension */
1388
983
                        || !WPACKET_start_sub_packet_u16(pkt)
1389
983
                        || !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
983
                first = 0;
1395
983
            }
1396
7.96k
            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
7.96k
        }
1401
9.55k
    }
1402
1403
983
    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
983
    return EXT_RETURN_SENT;
1409
983
}
1410
1411
EXT_RETURN tls_construct_stoc_session_ticket(SSL *s, WPACKET *pkt,
1412
                                             unsigned int context, X509 *x,
1413
                                             size_t chainidx)
1414
18.1k
{
1415
18.1k
    if (!s->ext.ticket_expected || !tls_use_ticket(s)) {
1416
13.9k
        s->ext.ticket_expected = 0;
1417
13.9k
        return EXT_RETURN_NOT_SENT;
1418
13.9k
    }
1419
1420
4.19k
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_session_ticket)
1421
4.19k
            || !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.19k
    return EXT_RETURN_SENT;
1427
4.19k
}
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
15.6k
{
1434
    /* We don't currently support this extension inside a CertificateRequest */
1435
15.6k
    if (context == SSL_EXT_TLS1_3_CERTIFICATE_REQUEST)
1436
0
        return EXT_RETURN_NOT_SENT;
1437
1438
15.6k
    if (!s->ext.status_expected)
1439
15.6k
        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
18.1k
{
1473
18.1k
    const unsigned char *npa;
1474
18.1k
    unsigned int npalen;
1475
18.1k
    int ret;
1476
18.1k
    int npn_seen = s->s3.npn_seen;
1477
1478
18.1k
    s->s3.npn_seen = 0;
1479
18.1k
    if (!npn_seen || s->ctx->ext.npn_advertised_cb == NULL)
1480
18.1k
        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
20.7k
{
1501
20.7k
    if (s->s3.alpn_selected == NULL)
1502
20.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
20.7k
{
1524
20.7k
    if (s->srtp_profile == NULL)
1525
20.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
18.1k
{
1544
18.1k
    if (!s->ext.use_etm)
1545
16.6k
        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.47k
        || s->s3.tmp.new_cipher->algorithm_enc == SSL_RC4
1553
1.47k
        || s->s3.tmp.new_cipher->algorithm_enc == SSL_eGOST2814789CNT
1554
1.47k
        || s->s3.tmp.new_cipher->algorithm_enc == SSL_eGOST2814789CNT12
1555
1.47k
        || s->s3.tmp.new_cipher->algorithm_enc == SSL_MAGMA
1556
1.47k
        || s->s3.tmp.new_cipher->algorithm_enc == SSL_KUZNYECHIK) {
1557
215
        s->ext.use_etm = 0;
1558
215
        return EXT_RETURN_NOT_SENT;
1559
215
    }
1560
1561
1.26k
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_encrypt_then_mac)
1562
1.26k
            || !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.26k
    return EXT_RETURN_SENT;
1568
1.26k
}
1569
1570
EXT_RETURN tls_construct_stoc_ems(SSL *s, WPACKET *pkt, unsigned int context,
1571
                                  X509 *x, size_t chainidx)
1572
18.1k
{
1573
18.1k
    if ((s->s3.flags & TLS1_FLAGS_RECEIVED_EXTMS) == 0)
1574
14.7k
        return EXT_RETURN_NOT_SENT;
1575
1576
3.41k
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_extended_master_secret)
1577
3.41k
            || !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.41k
    return EXT_RETURN_SENT;
1583
3.41k
}
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.27k
{
1589
3.27k
    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.27k
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_supported_versions)
1595
3.27k
            || !WPACKET_start_sub_packet_u16(pkt)
1596
3.27k
            || !WPACKET_put_bytes_u16(pkt, s->version)
1597
3.27k
            || !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.27k
    return EXT_RETURN_SENT;
1603
3.27k
}
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.27k
{
1609
3.27k
#ifndef OPENSSL_NO_TLS1_3
1610
3.27k
    unsigned char *encodedPoint;
1611
3.27k
    size_t encoded_pt_len = 0;
1612
3.27k
    EVP_PKEY *ckey = s->s3.peer_tmp, *skey = NULL;
1613
3.27k
    const TLS_GROUP_INFO *ginf = NULL;
1614
1615
3.27k
    if (s->hello_retry_request == SSL_HRR_PENDING) {
1616
662
        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
662
        if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_key_share)
1621
662
                || !WPACKET_start_sub_packet_u16(pkt)
1622
662
                || !WPACKET_put_bytes_u16(pkt, s->s3.group_id)
1623
662
                || !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
662
        return EXT_RETURN_SENT;
1629
662
    }
1630
1631
2.61k
    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.61k
    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.61k
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_key_share)
1648
2.61k
            || !WPACKET_start_sub_packet_u16(pkt)
1649
2.61k
            || !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.61k
    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.61k
    if (!ginf->is_kem) {
1660
        /* Regular KEX */
1661
2.58k
        skey = ssl_generate_pkey(s, ckey);
1662
2.58k
        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.58k
        encoded_pt_len = EVP_PKEY_get1_encoded_public_key(skey, &encodedPoint);
1669
2.58k
        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.58k
        if (!WPACKET_sub_memcpy_u16(pkt, encodedPoint, encoded_pt_len)
1676
2.58k
                || !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.58k
        OPENSSL_free(encodedPoint);
1683
1684
        /*
1685
         * This causes the crypto state to be updated based on the derived keys
1686
         */
1687
2.58k
        s->s3.tmp.pkey = skey;
1688
2.58k
        if (ssl_derive(s, skey, ckey, 1) == 0) {
1689
            /* SSLfatal() already called */
1690
20
            return EXT_RETURN_FAIL;
1691
20
        }
1692
2.58k
    } else {
1693
        /* KEM mode */
1694
26
        unsigned char *ct = NULL;
1695
26
        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
26
        if (ssl_encapsulate(s, ckey, &ct, &ctlen, 0) == 0) {
1704
            /* SSLfatal() already called */
1705
17
            return EXT_RETURN_FAIL;
1706
17
        }
1707
1708
9
        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
9
        if (!WPACKET_sub_memcpy_u16(pkt, ct, ctlen)
1715
9
                || !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
9
        OPENSSL_free(ct);
1721
1722
        /*
1723
         * This causes the crypto state to be updated based on the generated pms
1724
         */
1725
9
        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
9
    }
1730
2.57k
    s->s3.did_kex = 1;
1731
2.57k
    return EXT_RETURN_SENT;
1732
#else
1733
    return EXT_RETURN_FAIL;
1734
#endif
1735
2.61k
}
1736
1737
EXT_RETURN tls_construct_stoc_cookie(SSL *s, WPACKET *pkt, unsigned int context,
1738
                                     X509 *x, size_t chainidx)
1739
662
{
1740
662
#ifndef OPENSSL_NO_TLS1_3
1741
662
    unsigned char *hashval1, *hashval2, *appcookie1, *appcookie2, *cookie;
1742
662
    unsigned char *hmac, *hmac2;
1743
662
    size_t startlen, ciphlen, totcookielen, hashlen, hmaclen, appcookielen;
1744
662
    EVP_MD_CTX *hctx;
1745
662
    EVP_PKEY *pkey;
1746
662
    int ret = EXT_RETURN_FAIL;
1747
1748
662
    if ((s->s3.flags & TLS1_FLAGS_STATELESS) == 0)
1749
662
        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) <= 0
1830
0
            || EVP_DigestSign(hctx, hmac, &hmaclen, cookie,
1831
0
                              totcookielen) <= 0) {
1832
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1833
0
        goto err;
1834
0
    }
1835
1836
0
    if (!ossl_assert(totcookielen + hmaclen <= MAX_COOKIE_SIZE)) {
1837
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1838
0
        goto err;
1839
0
    }
1840
1841
0
    if (!WPACKET_allocate_bytes(pkt, hmaclen, &hmac2)
1842
0
            || !ossl_assert(hmac == hmac2)
1843
0
            || !ossl_assert(cookie == hmac - totcookielen)
1844
0
            || !WPACKET_close(pkt)
1845
0
            || !WPACKET_close(pkt)) {
1846
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1847
0
        goto err;
1848
0
    }
1849
1850
0
    ret = EXT_RETURN_SENT;
1851
1852
0
 err:
1853
0
    EVP_MD_CTX_free(hctx);
1854
0
    EVP_PKEY_free(pkey);
1855
0
    return ret;
1856
#else
1857
    return EXT_RETURN_FAIL;
1858
#endif
1859
0
}
1860
1861
EXT_RETURN tls_construct_stoc_cryptopro_bug(SSL *s, WPACKET *pkt,
1862
                                            unsigned int context, X509 *x,
1863
                                            size_t chainidx)
1864
18.1k
{
1865
18.1k
    const unsigned char cryptopro_ext[36] = {
1866
18.1k
        0xfd, 0xe8,         /* 65000 */
1867
18.1k
        0x00, 0x20,         /* 32 bytes length */
1868
18.1k
        0x30, 0x1e, 0x30, 0x08, 0x06, 0x06, 0x2a, 0x85,
1869
18.1k
        0x03, 0x02, 0x02, 0x09, 0x30, 0x08, 0x06, 0x06,
1870
18.1k
        0x2a, 0x85, 0x03, 0x02, 0x02, 0x16, 0x30, 0x08,
1871
18.1k
        0x06, 0x06, 0x2a, 0x85, 0x03, 0x02, 0x02, 0x17
1872
18.1k
    };
1873
1874
18.1k
    if (((s->s3.tmp.new_cipher->id & 0xFFFF) != 0x80
1875
18.1k
         && (s->s3.tmp.new_cipher->id & 0xFFFF) != 0x81)
1876
18.1k
            || (SSL_get_options(s) & SSL_OP_CRYPTOPRO_TLSEXT_BUG) == 0)
1877
18.1k
        return EXT_RETURN_NOT_SENT;
1878
1879
0
    if (!WPACKET_memcpy(pkt, cryptopro_ext, sizeof(cryptopro_ext))) {
1880
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1881
0
        return EXT_RETURN_FAIL;
1882
0
    }
1883
1884
0
    return EXT_RETURN_SENT;
1885
0
}
1886
1887
EXT_RETURN tls_construct_stoc_early_data(SSL *s, WPACKET *pkt,
1888
                                         unsigned int context, X509 *x,
1889
                                         size_t chainidx)
1890
2.57k
{
1891
2.57k
    if (context == SSL_EXT_TLS1_3_NEW_SESSION_TICKET) {
1892
0
        if (s->max_early_data == 0)
1893
0
            return EXT_RETURN_NOT_SENT;
1894
1895
0
        if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_early_data)
1896
0
                || !WPACKET_start_sub_packet_u16(pkt)
1897
0
                || !WPACKET_put_bytes_u32(pkt, s->max_early_data)
1898
0
                || !WPACKET_close(pkt)) {
1899
0
            SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1900
0
            return EXT_RETURN_FAIL;
1901
0
        }
1902
1903
0
        return EXT_RETURN_SENT;
1904
0
    }
1905
1906
2.57k
    if (s->ext.early_data != SSL_EARLY_DATA_ACCEPTED)
1907
2.57k
        return EXT_RETURN_NOT_SENT;
1908
1909
0
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_early_data)
1910
0
            || !WPACKET_start_sub_packet_u16(pkt)
1911
0
            || !WPACKET_close(pkt)) {
1912
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1913
0
        return EXT_RETURN_FAIL;
1914
0
    }
1915
1916
0
    return EXT_RETURN_SENT;
1917
0
}
1918
1919
EXT_RETURN tls_construct_stoc_psk(SSL *s, WPACKET *pkt, unsigned int context,
1920
                                  X509 *x, size_t chainidx)
1921
2.57k
{
1922
2.57k
    if (!s->hit)
1923
2.57k
        return EXT_RETURN_NOT_SENT;
1924
1925
0
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_psk)
1926
0
            || !WPACKET_start_sub_packet_u16(pkt)
1927
0
            || !WPACKET_put_bytes_u16(pkt, s->ext.tick_identity)
1928
0
            || !WPACKET_close(pkt)) {
1929
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1930
0
        return EXT_RETURN_FAIL;
1931
0
    }
1932
1933
0
    return EXT_RETURN_SENT;
1934
0
}