Coverage Report

Created: 2024-07-27 06:39

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