Coverage Report

Created: 2025-08-11 07:04

/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
189
{
44
189
    unsigned int ilen;
45
189
    const unsigned char *data;
46
47
    /* Parse the length byte */
48
189
    if (!PACKET_get_1(pkt, &ilen)
49
189
        || !PACKET_get_bytes(pkt, &data, ilen)) {
50
6
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_RENEGOTIATION_ENCODING_ERR);
51
6
        return 0;
52
6
    }
53
54
    /* Check that the extension matches */
55
183
    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
181
    if (memcmp(data, s->s3.previous_client_finished,
61
181
               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
181
    s->s3.send_connection_binding = 1;
67
68
181
    return 1;
69
181
}
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.65k
{
97
7.65k
    unsigned int servname_type;
98
7.65k
    PACKET sni, hostname;
99
100
7.65k
    if (!PACKET_as_length_prefixed_2(pkt, &sni)
101
        /* ServerNameList must be at least 1 byte long. */
102
7.65k
        || PACKET_remaining(&sni) == 0) {
103
231
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
104
231
        return 0;
105
231
    }
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.42k
    if (!PACKET_get_1(&sni, &servname_type)
119
7.42k
        || servname_type != TLSEXT_NAMETYPE_host_name
120
7.42k
        || !PACKET_as_length_prefixed_2(&sni, &hostname)) {
121
169
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
122
169
        return 0;
123
169
    }
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.25k
    if (!s->hit || SSL_IS_TLS13(s)) {
130
7.24k
        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.23k
        if (PACKET_contains_zero_byte(&hostname)) {
136
18
            SSLfatal(s, SSL_AD_UNRECOGNIZED_NAME, SSL_R_BAD_EXTENSION);
137
18
            return 0;
138
18
        }
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.21k
        OPENSSL_free(s->ext.hostname);
145
7.21k
        s->ext.hostname = NULL;
146
7.21k
        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.21k
        s->servername_done = 1;
152
7.21k
    } 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.22k
    return 1;
164
7.25k
}
165
166
int tls_parse_ctos_maxfragmentlen(SSL *s, PACKET *pkt, unsigned int context,
167
                                  X509 *x, size_t chainidx)
168
956
{
169
956
    unsigned int value;
170
171
956
    if (PACKET_remaining(pkt) != 1 || !PACKET_get_1(pkt, &value)) {
172
125
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
173
125
        return 0;
174
125
    }
175
176
    /* Received |value| should be a valid max-fragment-length code. */
177
831
    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
780
    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
774
        s->session->ext.max_fragment_len_mode = value;
203
204
780
    return 1;
205
831
}
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
103
{
211
103
    PACKET srp_I;
212
213
103
    if (!PACKET_as_length_prefixed_1(pkt, &srp_I)
214
103
            || PACKET_contains_zero_byte(&srp_I)) {
215
64
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
216
64
        return 0;
217
64
    }
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.35k
{
231
5.35k
    PACKET ec_point_format_list;
232
233
5.35k
    if (!PACKET_as_length_prefixed_1(pkt, &ec_point_format_list)
234
5.35k
        || PACKET_remaining(&ec_point_format_list) == 0) {
235
121
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
236
121
        return 0;
237
121
    }
238
239
5.23k
    if (!s->hit) {
240
5.08k
        if (!PACKET_memdup(&ec_point_format_list,
241
5.08k
                           &s->ext.peer_ecpointformats,
242
5.08k
                           &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.08k
    }
247
248
5.23k
    return 1;
249
5.23k
}
250
251
int tls_parse_ctos_session_ticket(SSL *s, PACKET *pkt, unsigned int context,
252
                                  X509 *x, size_t chainidx)
253
4.69k
{
254
4.69k
    if (s->ext.session_ticket_cb &&
255
4.69k
            !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.69k
    return 1;
263
4.69k
}
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
943
{
270
943
    PACKET supported_sig_algs;
271
272
943
    if (!PACKET_as_length_prefixed_2(pkt, &supported_sig_algs)
273
943
            || PACKET_remaining(&supported_sig_algs) == 0) {
274
157
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
275
157
        return 0;
276
157
    }
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
786
    if ((!s->server || (s->server && !s->hit))
284
786
            && !tls1_save_sigalgs(s, &supported_sig_algs, 1)) {
285
15
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
286
15
        return 0;
287
15
    }
288
289
771
    return 1;
290
786
}
291
292
int tls_parse_ctos_sig_algs(SSL *s, PACKET *pkt, unsigned int context, X509 *x,
293
                            size_t chainidx)
294
7.93k
{
295
7.93k
    PACKET supported_sig_algs;
296
297
7.93k
    if (!PACKET_as_length_prefixed_2(pkt, &supported_sig_algs)
298
7.93k
            || PACKET_remaining(&supported_sig_algs) == 0) {
299
200
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
300
200
        return 0;
301
200
    }
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.73k
    if ((!s->server || (s->server && !s->hit))
309
7.73k
            && !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.71k
    return 1;
315
7.73k
}
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.00k
{
321
6.00k
    PACKET responder_id_list, exts;
322
323
    /* We ignore this in a resumption handshake */
324
6.00k
    if (s->hit)
325
45
        return 1;
326
327
    /* Not defined if we get one of these in a client Certificate */
328
5.96k
    if (x != NULL)
329
0
        return 1;
330
331
5.96k
    if (!PACKET_get_1(pkt, (unsigned int *)&s->ext.status_type)) {
332
17
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
333
17
        return 0;
334
17
    }
335
336
5.94k
    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
248
        s->ext.status_type = TLSEXT_STATUSTYPE_nothing;
341
248
        return 1;
342
248
    }
343
344
5.69k
    if (!PACKET_get_length_prefixed_2 (pkt, &responder_id_list)) {
345
57
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
346
57
        return 0;
347
57
    }
348
349
    /*
350
     * We remove any OCSP_RESPIDs from a previous handshake
351
     * to prevent unbounded memory growth - CVE-2016-6304
352
     */
353
5.64k
    sk_OCSP_RESPID_pop_free(s->ext.ocsp.ids, OCSP_RESPID_free);
354
5.64k
    if (PACKET_remaining(&responder_id_list) > 0) {
355
3.32k
        s->ext.ocsp.ids = sk_OCSP_RESPID_new_null();
356
3.32k
        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.32k
    } else {
361
2.32k
        s->ext.ocsp.ids = NULL;
362
2.32k
    }
363
364
5.73k
    while (PACKET_remaining(&responder_id_list) > 0) {
365
3.40k
        OCSP_RESPID *id;
366
3.40k
        PACKET responder_id;
367
3.40k
        const unsigned char *id_data;
368
369
3.40k
        if (!PACKET_get_length_prefixed_2(&responder_id_list, &responder_id)
370
3.40k
                || PACKET_remaining(&responder_id) == 0) {
371
83
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
372
83
            return 0;
373
83
        }
374
375
3.31k
        id_data = PACKET_data(&responder_id);
376
3.31k
        id = d2i_OCSP_RESPID(NULL, &id_data,
377
3.31k
                             (int)PACKET_remaining(&responder_id));
378
3.31k
        if (id == NULL) {
379
3.15k
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
380
3.15k
            return 0;
381
3.15k
        }
382
383
160
        if (id_data != PACKET_end(&responder_id)) {
384
66
            OCSP_RESPID_free(id);
385
66
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
386
387
66
            return 0;
388
66
        }
389
390
94
        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
94
    }
397
398
    /* Read in request_extensions */
399
2.33k
    if (!PACKET_as_length_prefixed_2(pkt, &exts)) {
400
117
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
401
117
        return 0;
402
117
    }
403
404
2.21k
    if (PACKET_remaining(&exts) > 0) {
405
388
        const unsigned char *ext_data = PACKET_data(&exts);
406
407
388
        sk_X509_EXTENSION_pop_free(s->ext.ocsp.exts,
408
388
                                   X509_EXTENSION_free);
409
388
        s->ext.ocsp.exts =
410
388
            d2i_X509_EXTENSIONS(NULL, &ext_data, (int)PACKET_remaining(&exts));
411
388
        if (s->ext.ocsp.exts == NULL || ext_data != PACKET_end(&exts)) {
412
383
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
413
383
            return 0;
414
383
        }
415
388
    }
416
417
1.83k
    return 1;
418
2.21k
}
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
14
{
425
    /*
426
     * We shouldn't accept this extension on a
427
     * renegotiation.
428
     */
429
14
    if (SSL_IS_FIRST_HANDSHAKE(s))
430
14
        s->s3.npn_seen = 1;
431
432
14
    return 1;
433
14
}
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
687
{
443
687
    PACKET protocol_list, save_protocol_list, protocol;
444
445
687
    if (!SSL_IS_FIRST_HANDSHAKE(s))
446
0
        return 1;
447
448
687
    if (!PACKET_as_length_prefixed_2(pkt, &protocol_list)
449
687
        || PACKET_remaining(&protocol_list) < 2) {
450
110
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
451
110
        return 0;
452
110
    }
453
454
577
    save_protocol_list = protocol_list;
455
3.11k
    do {
456
        /* Protocol names can't be empty. */
457
3.11k
        if (!PACKET_get_length_prefixed_1(&protocol_list, &protocol)
458
3.11k
                || PACKET_remaining(&protocol) == 0) {
459
94
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
460
94
            return 0;
461
94
        }
462
3.11k
    } while (PACKET_remaining(&protocol_list) != 0);
463
464
483
    OPENSSL_free(s->s3.alpn_proposed);
465
483
    s->s3.alpn_proposed = NULL;
466
483
    s->s3.alpn_proposed_len = 0;
467
483
    if (!PACKET_memdup(&save_protocol_list,
468
483
                       &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
483
    return 1;
474
483
}
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
51
{
480
51
    STACK_OF(SRTP_PROTECTION_PROFILE) *srvr;
481
51
    unsigned int ct, mki_len, id;
482
51
    int i, srtp_pref;
483
51
    PACKET subpkt;
484
485
    /* Ignore this if we have no SRTP profiles */
486
51
    if (SSL_get_srtp_profiles(s) == NULL)
487
51
        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.71k
{
547
1.71k
    if (!(s->options & SSL_OP_NO_ENCRYPT_THEN_MAC))
548
1.71k
        s->ext.use_etm = 1;
549
550
1.71k
    return 1;
551
1.71k
}
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
679
{
560
679
#ifndef OPENSSL_NO_TLS1_3
561
679
    PACKET psk_kex_modes;
562
679
    unsigned int mode;
563
564
679
    if (!PACKET_as_length_prefixed_1(pkt, &psk_kex_modes)
565
679
            || PACKET_remaining(&psk_kex_modes) == 0) {
566
19
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
567
19
        return 0;
568
19
    }
569
570
3.91k
    while (PACKET_get_1(&psk_kex_modes, &mode)) {
571
3.25k
        if (mode == TLSEXT_KEX_MODE_KE_DHE)
572
1.06k
            s->ext.psk_kex_mode |= TLSEXT_KEX_MODE_FLAG_KE_DHE;
573
2.19k
        else if (mode == TLSEXT_KEX_MODE_KE
574
2.19k
                && (s->options & SSL_OP_ALLOW_NO_DHE_KEX) != 0)
575
0
            s->ext.psk_kex_mode |= TLSEXT_KEX_MODE_FLAG_KE;
576
3.25k
    }
577
660
#endif
578
579
660
    return 1;
580
679
}
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.52k
{
589
2.52k
#ifndef OPENSSL_NO_TLS1_3
590
2.52k
    unsigned int group_id;
591
2.52k
    PACKET key_share_list, encoded_pt;
592
2.52k
    const uint16_t *clntgroups, *srvrgroups;
593
2.52k
    size_t clnt_num_groups, srvr_num_groups;
594
2.52k
    int found = 0;
595
596
2.52k
    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.52k
    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.52k
    if (!PACKET_as_length_prefixed_2(pkt, &key_share_list)) {
606
66
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_LENGTH_MISMATCH);
607
66
        return 0;
608
66
    }
609
610
    /* Get our list of supported groups */
611
2.46k
    tls1_get_supported_groups(s, &srvrgroups, &srvr_num_groups);
612
    /* Get the clients list of supported groups. */
613
2.46k
    tls1_get_peer_groups(s, &clntgroups, &clnt_num_groups);
614
2.46k
    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.45k
    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.16k
    while (PACKET_remaining(&key_share_list) > 0) {
636
2.92k
        if (!PACKET_get_net_2(&key_share_list, &group_id)
637
2.92k
                || !PACKET_get_length_prefixed_2(&key_share_list, &encoded_pt)
638
2.92k
                || PACKET_remaining(&encoded_pt) == 0) {
639
74
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_LENGTH_MISMATCH);
640
74
            return 0;
641
74
        }
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.84k
        if (found)
648
293
            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.55k
        if (s->s3.group_id != 0
655
2.55k
                && (group_id != s->s3.group_id
656
137
                    || PACKET_remaining(&key_share_list) != 0)) {
657
35
            SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_BAD_KEY_SHARE);
658
35
            return 0;
659
35
        }
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
31
            SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_BAD_KEY_SHARE);
664
31
            return 0;
665
31
        }
666
667
        /* Check if this share is for a group we can use */
668
2.49k
        if (!check_in_list(s, group_id, srvrgroups, srvr_num_groups, 1)
669
2.49k
                || !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.49k
                || !tls_valid_group(s, group_id, TLS1_3_VERSION, TLS1_3_VERSION,
675
1.80k
                                    0, NULL)) {
676
            /* Share not suitable */
677
681
            continue;
678
681
        }
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
73
            SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_BAD_ECPOINT);
694
73
            return 0;
695
73
        }
696
697
1.73k
        found = 1;
698
1.73k
    }
699
2.23k
#endif
700
701
2.23k
    return 1;
702
2.45k
}
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
14.8k
{
914
14.8k
    PACKET supported_groups_list;
915
916
    /* Each group is 2 bytes and we must have at least 1. */
917
14.8k
    if (!PACKET_as_length_prefixed_2(pkt, &supported_groups_list)
918
14.8k
            || PACKET_remaining(&supported_groups_list) == 0
919
14.8k
            || (PACKET_remaining(&supported_groups_list) % 2) != 0) {
920
208
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
921
208
        return 0;
922
208
    }
923
924
14.6k
    if (!s->hit || SSL_IS_TLS13(s)) {
925
14.5k
        OPENSSL_free(s->ext.peer_supportedgroups);
926
14.5k
        s->ext.peer_supportedgroups = NULL;
927
14.5k
        s->ext.peer_supportedgroups_len = 0;
928
14.5k
        if (!tls1_save_u16(&supported_groups_list,
929
14.5k
                           &s->ext.peer_supportedgroups,
930
14.5k
                           &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.5k
    }
935
936
14.6k
    return 1;
937
14.6k
}
938
939
int tls_parse_ctos_ems(SSL *s, PACKET *pkt, unsigned int context, X509 *x,
940
                       size_t chainidx)
941
4.21k
{
942
    /* The extension must always be empty */
943
4.21k
    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
4.20k
    if (s->options & SSL_OP_NO_EXTENDED_MASTER_SECRET)
949
0
        return 1;
950
951
4.20k
    s->s3.flags |= TLS1_FLAGS_RECEIVED_EXTMS;
952
953
4.20k
    return 1;
954
4.20k
}
955
956
957
int tls_parse_ctos_early_data(SSL *s, PACKET *pkt, unsigned int context,
958
                              X509 *x, size_t chainidx)
959
2.36k
{
960
2.36k
    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.35k
    if (s->hello_retry_request != SSL_HRR_NONE) {
966
7
        SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_BAD_EXTENSION);
967
7
        return 0;
968
7
    }
969
970
2.34k
    return 1;
971
2.35k
}
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
6
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
1020
6
        return 0;
1021
6
    }
1022
1023
111
    s->ext.ticket_expected = 0;
1024
221
    for (id = 0; PACKET_remaining(&identities) != 0; id++) {
1025
179
        PACKET identity;
1026
179
        unsigned long ticket_agel;
1027
179
        size_t idlen;
1028
1029
179
        if (!PACKET_get_length_prefixed_2(&identities, &identity)
1030
179
                || !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
150
        idlen = PACKET_remaining(&identity);
1036
150
        if (s->psk_find_session_cb != NULL
1037
150
                && !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
150
#ifndef OPENSSL_NO_PSK
1044
150
        if(sess == NULL
1045
150
                && s->psk_server_callback != NULL
1046
150
                && 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
150
#endif /* OPENSSL_NO_PSK */
1091
1092
150
        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
150
        } else {
1114
150
            uint32_t ticket_age = 0, agesec, agems;
1115
150
            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
150
            if ((s->options & SSL_OP_NO_TICKET) != 0
1123
150
                    || (s->max_early_data > 0
1124
150
                        && (s->options & SSL_OP_NO_ANTI_REPLAY) == 0))
1125
0
                ret = tls_get_stateful_ticket(s, &identity, &sess);
1126
150
            else
1127
150
                ret = tls_decrypt_ticket(s, PACKET_data(&identity),
1128
150
                                         PACKET_remaining(&identity), NULL, 0,
1129
150
                                         &sess);
1130
1131
150
            if (ret == SSL_TICKET_EMPTY) {
1132
5
                SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
1133
5
                return 0;
1134
5
            }
1135
1136
145
            if (ret == SSL_TICKET_FATAL_ERR_MALLOC
1137
145
                    || 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
145
            if (ret == SSL_TICKET_NONE || ret == SSL_TICKET_NO_DECRYPT)
1142
81
                continue;
1143
1144
            /* Check for replay */
1145
64
            if (s->max_early_data > 0
1146
64
                    && (s->options & SSL_OP_NO_ANTI_REPLAY) == 0
1147
64
                    && !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
64
            ticket_age = (uint32_t)ticket_agel;
1154
64
            agesec = (uint32_t)(time(NULL) - sess->time);
1155
64
            agems = agesec * (uint32_t)1000;
1156
64
            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
64
            if (id == 0
1167
64
                    && sess->timeout >= (long)agesec
1168
64
                    && agems / (uint32_t)1000 == agesec
1169
64
                    && ticket_age <= agems + 1000
1170
64
                    && 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
4
                s->ext.early_data_ok = 1;
1176
4
            }
1177
64
        }
1178
1179
64
        md = ssl_md(s->ctx, sess->cipher->algorithm2);
1180
64
        if (md == NULL) {
1181
0
            SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1182
0
            goto err;
1183
0
        }
1184
64
        if (!EVP_MD_is_a(md,
1185
64
                EVP_MD_get0_name(ssl_md(s->ctx,
1186
64
                                        s->s3.tmp.new_cipher->algorithm2)))) {
1187
            /* The ciphersuite is not compatible with this session. */
1188
29
            SSL_SESSION_free(sess);
1189
29
            sess = NULL;
1190
29
            s->ext.early_data_ok = 0;
1191
29
            s->ext.ticket_expected = 0;
1192
29
            continue;
1193
29
        }
1194
35
        break;
1195
64
    }
1196
1197
77
    if (sess == NULL)
1198
42
        return 1;
1199
1200
35
    binderoffset = PACKET_data(pkt) - (const unsigned char *)s->init_buf->data;
1201
35
    hashsize = EVP_MD_get_size(md);
1202
1203
35
    if (!PACKET_get_length_prefixed_2(pkt, &binders)) {
1204
16
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
1205
16
        goto err;
1206
16
    }
1207
1208
35
    for (i = 0; i <= id; i++) {
1209
19
        if (!PACKET_get_length_prefixed_1(&binders, &binder)) {
1210
3
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
1211
3
            goto err;
1212
3
        }
1213
19
    }
1214
1215
16
    if (PACKET_remaining(&binder) != hashsize) {
1216
3
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
1217
3
        goto err;
1218
3
    }
1219
13
    if (tls_psk_do_binder(s, md, (const unsigned char *)s->init_buf->data,
1220
13
                          binderoffset, PACKET_data(&binder), NULL, sess, 0,
1221
13
                          ext) != 1) {
1222
        /* SSLfatal() already called */
1223
12
        goto err;
1224
12
    }
1225
1226
1
    s->ext.tick_identity = id;
1227
1228
1
    SSL_SESSION_free(s->session);
1229
1
    s->session = sess;
1230
1
    return 1;
1231
34
err:
1232
34
    SSL_SESSION_free(sess);
1233
34
    return 0;
1234
13
}
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
170
{
1241
170
    if (PACKET_remaining(pkt) != 0) {
1242
7
        SSLfatal(s, SSL_AD_DECODE_ERROR,
1243
7
                 SSL_R_POST_HANDSHAKE_AUTH_ENCODING_ERR);
1244
7
        return 0;
1245
7
    }
1246
1247
163
    s->post_handshake_auth = SSL_PHA_EXT_RECEIVED;
1248
1249
163
    return 1;
1250
170
}
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
20.0k
{
1259
20.0k
    if (!s->s3.send_connection_binding)
1260
14.5k
        return EXT_RETURN_NOT_SENT;
1261
1262
    /* Still add this even if SSL_OP_NO_RENEGOTIATION is set */
1263
5.50k
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_renegotiate)
1264
5.50k
            || !WPACKET_start_sub_packet_u16(pkt)
1265
5.50k
            || !WPACKET_start_sub_packet_u8(pkt)
1266
5.50k
            || !WPACKET_memcpy(pkt, s->s3.previous_client_finished,
1267
5.50k
                               s->s3.previous_client_finished_len)
1268
5.50k
            || !WPACKET_memcpy(pkt, s->s3.previous_server_finished,
1269
5.50k
                               s->s3.previous_server_finished_len)
1270
5.50k
            || !WPACKET_close(pkt)
1271
5.50k
            || !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.50k
    return EXT_RETURN_SENT;
1277
5.50k
}
1278
1279
EXT_RETURN tls_construct_stoc_server_name(SSL *s, WPACKET *pkt,
1280
                                          unsigned int context, X509 *x,
1281
                                          size_t chainidx)
1282
19.0k
{
1283
19.0k
    if (s->servername_done != 1)
1284
19.0k
        return EXT_RETURN_NOT_SENT;
1285
1286
    /*
1287
     * Prior to TLSv1.3 we ignore any SNI in the current handshake if resuming.
1288
     * We just use the servername from the initial handshake.
1289
     */
1290
0
    if (s->hit && !SSL_IS_TLS13(s))
1291
0
        return EXT_RETURN_NOT_SENT;
1292
1293
0
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_server_name)
1294
0
            || !WPACKET_put_bytes_u16(pkt, 0)) {
1295
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1296
0
        return EXT_RETURN_FAIL;
1297
0
    }
1298
1299
0
    return EXT_RETURN_SENT;
1300
0
}
1301
1302
/* Add/include the server's max fragment len extension into ServerHello */
1303
EXT_RETURN tls_construct_stoc_maxfragmentlen(SSL *s, WPACKET *pkt,
1304
                                             unsigned int context, X509 *x,
1305
                                             size_t chainidx)
1306
19.0k
{
1307
19.0k
    if (!USE_MAX_FRAGMENT_LENGTH_EXT(s->session))
1308
18.3k
        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
719
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_max_fragment_length)
1315
719
        || !WPACKET_start_sub_packet_u16(pkt)
1316
719
        || !WPACKET_put_bytes_u8(pkt, s->session->ext.max_fragment_len_mode)
1317
719
        || !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
719
    return EXT_RETURN_SENT;
1323
719
}
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
16.5k
{
1329
16.5k
    unsigned long alg_k = s->s3.tmp.new_cipher->algorithm_mkey;
1330
16.5k
    unsigned long alg_a = s->s3.tmp.new_cipher->algorithm_auth;
1331
16.5k
    int using_ecc = ((alg_k & SSL_kECDHE) || (alg_a & SSL_aECDSA))
1332
16.5k
                    && (s->ext.peer_ecpointformats != NULL);
1333
16.5k
    const unsigned char *plist;
1334
16.5k
    size_t plistlen;
1335
1336
16.5k
    if (!using_ecc)
1337
13.5k
        return EXT_RETURN_NOT_SENT;
1338
1339
2.95k
    tls1_get_formatlist(s, &plist, &plistlen);
1340
2.95k
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_ec_point_formats)
1341
2.95k
            || !WPACKET_start_sub_packet_u16(pkt)
1342
2.95k
            || !WPACKET_sub_memcpy_u8(pkt, plist, plistlen)
1343
2.95k
            || !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.95k
    return EXT_RETURN_SENT;
1349
2.95k
}
1350
1351
EXT_RETURN tls_construct_stoc_supported_groups(SSL *s, WPACKET *pkt,
1352
                                               unsigned int context, X509 *x,
1353
                                               size_t chainidx)
1354
19.0k
{
1355
19.0k
    const uint16_t *groups;
1356
19.0k
    size_t numgroups, i, first = 1;
1357
19.0k
    int version;
1358
1359
    /* s->s3.group_id is non zero if we accepted a key_share */
1360
19.0k
    if (s->s3.group_id == 0)
1361
16.5k
        return EXT_RETURN_NOT_SENT;
1362
1363
    /* Get our list of supported groups */
1364
2.55k
    tls1_get_supported_groups(s, &groups, &numgroups);
1365
2.55k
    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.55k
    version = SSL_version(s);
1372
10.4k
    for (i = 0; i < numgroups; i++) {
1373
9.43k
        uint16_t group = groups[i];
1374
1375
9.43k
        if (tls_valid_group(s, group, version, version, 0, NULL)
1376
9.43k
                && tls_group_allowed(s, group, SSL_SECOP_CURVE_SUPPORTED)) {
1377
9.43k
            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.55k
                if (s->s3.group_id == group)
1383
1.59k
                    return EXT_RETURN_NOT_SENT;
1384
1385
                /* Add extension header */
1386
968
                if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_supported_groups)
1387
                           /* Sub-packet for supported_groups extension */
1388
968
                        || !WPACKET_start_sub_packet_u16(pkt)
1389
968
                        || !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
968
                first = 0;
1395
968
            }
1396
7.84k
            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.84k
        }
1401
9.43k
    }
1402
1403
968
    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
968
    return EXT_RETURN_SENT;
1409
968
}
1410
1411
EXT_RETURN tls_construct_stoc_session_ticket(SSL *s, WPACKET *pkt,
1412
                                             unsigned int context, X509 *x,
1413
                                             size_t chainidx)
1414
16.5k
{
1415
16.5k
    if (!s->ext.ticket_expected || !tls_use_ticket(s)) {
1416
12.5k
        s->ext.ticket_expected = 0;
1417
12.5k
        return EXT_RETURN_NOT_SENT;
1418
12.5k
    }
1419
1420
3.99k
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_session_ticket)
1421
3.99k
            || !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
3.99k
    return EXT_RETURN_SENT;
1427
3.99k
}
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
14.1k
{
1434
    /* We don't currently support this extension inside a CertificateRequest */
1435
14.1k
    if (context == SSL_EXT_TLS1_3_CERTIFICATE_REQUEST)
1436
0
        return EXT_RETURN_NOT_SENT;
1437
1438
14.1k
    if (!s->ext.status_expected)
1439
14.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
16.5k
{
1473
16.5k
    const unsigned char *npa;
1474
16.5k
    unsigned int npalen;
1475
16.5k
    int ret;
1476
16.5k
    int npn_seen = s->s3.npn_seen;
1477
1478
16.5k
    s->s3.npn_seen = 0;
1479
16.5k
    if (!npn_seen || s->ctx->ext.npn_advertised_cb == NULL)
1480
16.5k
        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
19.0k
{
1501
19.0k
    if (s->s3.alpn_selected == NULL)
1502
19.0k
        return EXT_RETURN_NOT_SENT;
1503
1504
0
    if (!WPACKET_put_bytes_u16(pkt,
1505
0
                TLSEXT_TYPE_application_layer_protocol_negotiation)
1506
0
            || !WPACKET_start_sub_packet_u16(pkt)
1507
0
            || !WPACKET_start_sub_packet_u16(pkt)
1508
0
            || !WPACKET_sub_memcpy_u8(pkt, s->s3.alpn_selected,
1509
0
                                      s->s3.alpn_selected_len)
1510
0
            || !WPACKET_close(pkt)
1511
0
            || !WPACKET_close(pkt)) {
1512
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1513
0
        return EXT_RETURN_FAIL;
1514
0
    }
1515
1516
0
    return EXT_RETURN_SENT;
1517
0
}
1518
1519
#ifndef OPENSSL_NO_SRTP
1520
EXT_RETURN tls_construct_stoc_use_srtp(SSL *s, WPACKET *pkt,
1521
                                       unsigned int context, X509 *x,
1522
                                       size_t chainidx)
1523
19.0k
{
1524
19.0k
    if (s->srtp_profile == NULL)
1525
19.0k
        return EXT_RETURN_NOT_SENT;
1526
1527
0
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_use_srtp)
1528
0
            || !WPACKET_start_sub_packet_u16(pkt)
1529
0
            || !WPACKET_put_bytes_u16(pkt, 2)
1530
0
            || !WPACKET_put_bytes_u16(pkt, s->srtp_profile->id)
1531
0
            || !WPACKET_put_bytes_u8(pkt, 0)
1532
0
            || !WPACKET_close(pkt)) {
1533
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1534
0
        return EXT_RETURN_FAIL;
1535
0
    }
1536
1537
0
    return EXT_RETURN_SENT;
1538
0
}
1539
#endif
1540
1541
EXT_RETURN tls_construct_stoc_etm(SSL *s, WPACKET *pkt, unsigned int context,
1542
                                  X509 *x, size_t chainidx)
1543
16.5k
{
1544
16.5k
    if (!s->ext.use_etm)
1545
15.0k
        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.43k
    if (s->s3.tmp.new_cipher->algorithm_mac == SSL_AEAD
1552
1.43k
        || s->s3.tmp.new_cipher->algorithm_enc == SSL_RC4
1553
1.43k
        || s->s3.tmp.new_cipher->algorithm_enc == SSL_eGOST2814789CNT
1554
1.43k
        || s->s3.tmp.new_cipher->algorithm_enc == SSL_eGOST2814789CNT12
1555
1.43k
        || s->s3.tmp.new_cipher->algorithm_enc == SSL_MAGMA
1556
1.43k
        || s->s3.tmp.new_cipher->algorithm_enc == SSL_KUZNYECHIK) {
1557
220
        s->ext.use_etm = 0;
1558
220
        return EXT_RETURN_NOT_SENT;
1559
220
    }
1560
1561
1.21k
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_encrypt_then_mac)
1562
1.21k
            || !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.21k
    return EXT_RETURN_SENT;
1568
1.21k
}
1569
1570
EXT_RETURN tls_construct_stoc_ems(SSL *s, WPACKET *pkt, unsigned int context,
1571
                                  X509 *x, size_t chainidx)
1572
16.5k
{
1573
16.5k
    if ((s->s3.flags & TLS1_FLAGS_RECEIVED_EXTMS) == 0)
1574
12.7k
        return EXT_RETURN_NOT_SENT;
1575
1576
3.73k
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_extended_master_secret)
1577
3.73k
            || !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.73k
    return EXT_RETURN_SENT;
1583
3.73k
}
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.23k
{
1589
3.23k
    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.23k
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_supported_versions)
1595
3.23k
            || !WPACKET_start_sub_packet_u16(pkt)
1596
3.23k
            || !WPACKET_put_bytes_u16(pkt, s->version)
1597
3.23k
            || !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.23k
    return EXT_RETURN_SENT;
1603
3.23k
}
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.23k
{
1609
3.23k
#ifndef OPENSSL_NO_TLS1_3
1610
3.23k
    unsigned char *encodedPoint;
1611
3.23k
    size_t encoded_pt_len = 0;
1612
3.23k
    EVP_PKEY *ckey = s->s3.peer_tmp, *skey = NULL;
1613
3.23k
    const TLS_GROUP_INFO *ginf = NULL;
1614
1615
3.23k
    if (s->hello_retry_request == SSL_HRR_PENDING) {
1616
651
        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
651
        if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_key_share)
1621
651
                || !WPACKET_start_sub_packet_u16(pkt)
1622
651
                || !WPACKET_put_bytes_u16(pkt, s->s3.group_id)
1623
651
                || !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
651
        return EXT_RETURN_SENT;
1629
651
    }
1630
1631
2.58k
    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.58k
    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.58k
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_key_share)
1648
2.58k
            || !WPACKET_start_sub_packet_u16(pkt)
1649
2.58k
            || !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.58k
    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.58k
    if (!ginf->is_kem) {
1660
        /* Regular KEX */
1661
2.56k
        skey = ssl_generate_pkey(s, ckey);
1662
2.56k
        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.56k
        encoded_pt_len = EVP_PKEY_get1_encoded_public_key(skey, &encodedPoint);
1669
2.56k
        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.56k
        if (!WPACKET_sub_memcpy_u16(pkt, encodedPoint, encoded_pt_len)
1676
2.56k
                || !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.56k
        OPENSSL_free(encodedPoint);
1683
1684
        /*
1685
         * This causes the crypto state to be updated based on the derived keys
1686
         */
1687
2.56k
        s->s3.tmp.pkey = skey;
1688
2.56k
        if (ssl_derive(s, skey, ckey, 1) == 0) {
1689
            /* SSLfatal() already called */
1690
21
            return EXT_RETURN_FAIL;
1691
21
        }
1692
2.56k
    } else {
1693
        /* KEM mode */
1694
18
        unsigned char *ct = NULL;
1695
18
        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
18
        if (ssl_encapsulate(s, ckey, &ct, &ctlen, 0) == 0) {
1704
            /* SSLfatal() already called */
1705
3
            return EXT_RETURN_FAIL;
1706
3
        }
1707
1708
15
        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
15
        if (!WPACKET_sub_memcpy_u16(pkt, ct, ctlen)
1715
15
                || !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
15
        OPENSSL_free(ct);
1721
1722
        /*
1723
         * This causes the crypto state to be updated based on the generated pms
1724
         */
1725
15
        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
15
    }
1730
2.55k
    s->s3.did_kex = 1;
1731
2.55k
    return EXT_RETURN_SENT;
1732
#else
1733
    return EXT_RETURN_FAIL;
1734
#endif
1735
2.58k
}
1736
1737
EXT_RETURN tls_construct_stoc_cookie(SSL *s, WPACKET *pkt, unsigned int context,
1738
                                     X509 *x, size_t chainidx)
1739
651
{
1740
651
#ifndef OPENSSL_NO_TLS1_3
1741
651
    unsigned char *hashval1, *hashval2, *appcookie1, *appcookie2, *cookie;
1742
651
    unsigned char *hmac, *hmac2;
1743
651
    size_t startlen, ciphlen, totcookielen, hashlen, hmaclen, appcookielen;
1744
651
    EVP_MD_CTX *hctx;
1745
651
    EVP_PKEY *pkey;
1746
651
    int ret = EXT_RETURN_FAIL;
1747
1748
651
    if ((s->s3.flags & TLS1_FLAGS_STATELESS) == 0)
1749
651
        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
16.5k
{
1865
16.5k
    const unsigned char cryptopro_ext[36] = {
1866
16.5k
        0xfd, 0xe8,         /* 65000 */
1867
16.5k
        0x00, 0x20,         /* 32 bytes length */
1868
16.5k
        0x30, 0x1e, 0x30, 0x08, 0x06, 0x06, 0x2a, 0x85,
1869
16.5k
        0x03, 0x02, 0x02, 0x09, 0x30, 0x08, 0x06, 0x06,
1870
16.5k
        0x2a, 0x85, 0x03, 0x02, 0x02, 0x16, 0x30, 0x08,
1871
16.5k
        0x06, 0x06, 0x2a, 0x85, 0x03, 0x02, 0x02, 0x17
1872
16.5k
    };
1873
1874
16.5k
    if (((s->s3.tmp.new_cipher->id & 0xFFFF) != 0x80
1875
16.5k
         && (s->s3.tmp.new_cipher->id & 0xFFFF) != 0x81)
1876
16.5k
            || (SSL_get_options(s) & SSL_OP_CRYPTOPRO_TLSEXT_BUG) == 0)
1877
16.5k
        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.55k
{
1891
2.55k
    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.55k
    if (s->ext.early_data != SSL_EARLY_DATA_ACCEPTED)
1907
2.55k
        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.55k
{
1922
2.55k
    if (!s->hit)
1923
2.55k
        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
}