Coverage Report

Created: 2025-06-13 06:58

/src/openssl30/ssl/statem/extensions_srvr.c
Line
Count
Source (jump to first uncovered line)
1
/*
2
 * Copyright 2016-2024 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
380
{
44
380
    unsigned int ilen;
45
380
    const unsigned char *data;
46
47
    /* Parse the length byte */
48
380
    if (!PACKET_get_1(pkt, &ilen)
49
380
        || !PACKET_get_bytes(pkt, &data, ilen)) {
50
8
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_RENEGOTIATION_ENCODING_ERR);
51
8
        return 0;
52
8
    }
53
54
    /* Check that the extension matches */
55
372
    if (ilen != s->s3.previous_client_finished_len) {
56
8
        SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_R_RENEGOTIATION_MISMATCH);
57
8
        return 0;
58
8
    }
59
60
364
    if (memcmp(data, s->s3.previous_client_finished,
61
364
               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
364
    s->s3.send_connection_binding = 1;
67
68
364
    return 1;
69
364
}
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.07k
{
97
3.07k
    unsigned int servname_type;
98
3.07k
    PACKET sni, hostname;
99
100
3.07k
    if (!PACKET_as_length_prefixed_2(pkt, &sni)
101
        /* ServerNameList must be at least 1 byte long. */
102
3.07k
        || PACKET_remaining(&sni) == 0) {
103
141
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
104
141
        return 0;
105
141
    }
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
2.93k
    if (!PACKET_get_1(&sni, &servname_type)
119
2.93k
        || servname_type != TLSEXT_NAMETYPE_host_name
120
2.93k
        || !PACKET_as_length_prefixed_2(&sni, &hostname)) {
121
79
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
122
79
        return 0;
123
79
    }
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
2.85k
    if (!s->hit || SSL_IS_TLS13(s)) {
130
2.84k
        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
2.84k
        if (PACKET_contains_zero_byte(&hostname)) {
136
15
            SSLfatal(s, SSL_AD_UNRECOGNIZED_NAME, SSL_R_BAD_EXTENSION);
137
15
            return 0;
138
15
        }
139
140
        /*
141
         * Store the requested SNI in the SSL as temporary storage.
142
         * If we accept it, it will get stored in the SSL_SESSION as well.
143
         */
144
2.82k
        OPENSSL_free(s->ext.hostname);
145
2.82k
        s->ext.hostname = NULL;
146
2.82k
        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
2.82k
        s->servername_done = 1;
152
2.82k
    } 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
2.83k
    return 1;
164
2.85k
}
165
166
int tls_parse_ctos_maxfragmentlen(SSL *s, PACKET *pkt, unsigned int context,
167
                                  X509 *x, size_t chainidx)
168
497
{
169
497
    unsigned int value;
170
171
497
    if (PACKET_remaining(pkt) != 1 || !PACKET_get_1(pkt, &value)) {
172
55
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
173
55
        return 0;
174
55
    }
175
176
    /* Received |value| should be a valid max-fragment-length code. */
177
442
    if (!IS_MAX_FRAGMENT_LENGTH_EXT_VALID(value)) {
178
29
        SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER,
179
29
                 SSL_R_SSL3_EXT_INVALID_MAX_FRAGMENT_LENGTH);
180
29
        return 0;
181
29
    }
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
413
    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
409
        s->session->ext.max_fragment_len_mode = value;
203
204
413
    return 1;
205
442
}
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
67
{
211
67
    PACKET srp_I;
212
213
67
    if (!PACKET_as_length_prefixed_1(pkt, &srp_I)
214
67
            || PACKET_contains_zero_byte(&srp_I)) {
215
46
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
216
46
        return 0;
217
46
    }
218
219
21
    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
21
    return 1;
225
21
}
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.01k
{
231
2.01k
    PACKET ec_point_format_list;
232
233
2.01k
    if (!PACKET_as_length_prefixed_1(pkt, &ec_point_format_list)
234
2.01k
        || PACKET_remaining(&ec_point_format_list) == 0) {
235
72
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
236
72
        return 0;
237
72
    }
238
239
1.94k
    if (!s->hit) {
240
1.83k
        if (!PACKET_memdup(&ec_point_format_list,
241
1.83k
                           &s->ext.peer_ecpointformats,
242
1.83k
                           &s->ext.peer_ecpointformats_len)) {
243
0
            SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
244
0
            return 0;
245
0
        }
246
1.83k
    }
247
248
1.94k
    return 1;
249
1.94k
}
250
251
int tls_parse_ctos_session_ticket(SSL *s, PACKET *pkt, unsigned int context,
252
                                  X509 *x, size_t chainidx)
253
1.42k
{
254
1.42k
    if (s->ext.session_ticket_cb &&
255
1.42k
            !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.42k
    return 1;
263
1.42k
}
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
643
{
270
643
    PACKET supported_sig_algs;
271
272
643
    if (!PACKET_as_length_prefixed_2(pkt, &supported_sig_algs)
273
643
            || PACKET_remaining(&supported_sig_algs) == 0) {
274
60
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
275
60
        return 0;
276
60
    }
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
583
    if ((!s->server || (s->server && !s->hit))
284
583
            && !tls1_save_sigalgs(s, &supported_sig_algs, 1)) {
285
6
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
286
6
        return 0;
287
6
    }
288
289
577
    return 1;
290
583
}
291
292
int tls_parse_ctos_sig_algs(SSL *s, PACKET *pkt, unsigned int context, X509 *x,
293
                            size_t chainidx)
294
4.41k
{
295
4.41k
    PACKET supported_sig_algs;
296
297
4.41k
    if (!PACKET_as_length_prefixed_2(pkt, &supported_sig_algs)
298
4.41k
            || PACKET_remaining(&supported_sig_algs) == 0) {
299
104
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
300
104
        return 0;
301
104
    }
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
4.31k
    if ((!s->server || (s->server && !s->hit))
309
4.31k
            && !tls1_save_sigalgs(s, &supported_sig_algs, 0)) {
310
6
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
311
6
        return 0;
312
6
    }
313
314
4.30k
    return 1;
315
4.31k
}
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
3.32k
{
321
3.32k
    PACKET responder_id_list, exts;
322
323
    /* We ignore this in a resumption handshake */
324
3.32k
    if (s->hit)
325
31
        return 1;
326
327
    /* Not defined if we get one of these in a client Certificate */
328
3.29k
    if (x != NULL)
329
0
        return 1;
330
331
3.29k
    if (!PACKET_get_1(pkt, (unsigned int *)&s->ext.status_type)) {
332
7
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
333
7
        return 0;
334
7
    }
335
336
3.28k
    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
129
        s->ext.status_type = TLSEXT_STATUSTYPE_nothing;
341
129
        return 1;
342
129
    }
343
344
3.15k
    if (!PACKET_get_length_prefixed_2 (pkt, &responder_id_list)) {
345
56
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
346
56
        return 0;
347
56
    }
348
349
    /*
350
     * We remove any OCSP_RESPIDs from a previous handshake
351
     * to prevent unbounded memory growth - CVE-2016-6304
352
     */
353
3.10k
    sk_OCSP_RESPID_pop_free(s->ext.ocsp.ids, OCSP_RESPID_free);
354
3.10k
    if (PACKET_remaining(&responder_id_list) > 0) {
355
2.27k
        s->ext.ocsp.ids = sk_OCSP_RESPID_new_null();
356
2.27k
        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
2.27k
    } else {
361
830
        s->ext.ocsp.ids = NULL;
362
830
    }
363
364
3.17k
    while (PACKET_remaining(&responder_id_list) > 0) {
365
2.32k
        OCSP_RESPID *id;
366
2.32k
        PACKET responder_id;
367
2.32k
        const unsigned char *id_data;
368
369
2.32k
        if (!PACKET_get_length_prefixed_2(&responder_id_list, &responder_id)
370
2.32k
                || PACKET_remaining(&responder_id) == 0) {
371
57
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
372
57
            return 0;
373
57
        }
374
375
2.27k
        id_data = PACKET_data(&responder_id);
376
2.27k
        id = d2i_OCSP_RESPID(NULL, &id_data,
377
2.27k
                             (int)PACKET_remaining(&responder_id));
378
2.27k
        if (id == NULL) {
379
2.15k
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
380
2.15k
            return 0;
381
2.15k
        }
382
383
115
        if (id_data != PACKET_end(&responder_id)) {
384
45
            OCSP_RESPID_free(id);
385
45
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
386
387
45
            return 0;
388
45
        }
389
390
70
        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
70
    }
397
398
    /* Read in request_extensions */
399
843
    if (!PACKET_as_length_prefixed_2(pkt, &exts)) {
400
76
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
401
76
        return 0;
402
76
    }
403
404
767
    if (PACKET_remaining(&exts) > 0) {
405
171
        const unsigned char *ext_data = PACKET_data(&exts);
406
407
171
        sk_X509_EXTENSION_pop_free(s->ext.ocsp.exts,
408
171
                                   X509_EXTENSION_free);
409
171
        s->ext.ocsp.exts =
410
171
            d2i_X509_EXTENSIONS(NULL, &ext_data, (int)PACKET_remaining(&exts));
411
171
        if (s->ext.ocsp.exts == NULL || ext_data != PACKET_end(&exts)) {
412
167
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
413
167
            return 0;
414
167
        }
415
171
    }
416
417
600
    return 1;
418
767
}
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
10
{
425
    /*
426
     * We shouldn't accept this extension on a
427
     * renegotiation.
428
     */
429
10
    if (SSL_IS_FIRST_HANDSHAKE(s))
430
10
        s->s3.npn_seen = 1;
431
432
10
    return 1;
433
10
}
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
162
{
443
162
    PACKET protocol_list, save_protocol_list, protocol;
444
445
162
    if (!SSL_IS_FIRST_HANDSHAKE(s))
446
0
        return 1;
447
448
162
    if (!PACKET_as_length_prefixed_2(pkt, &protocol_list)
449
162
        || PACKET_remaining(&protocol_list) < 2) {
450
72
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
451
72
        return 0;
452
72
    }
453
454
90
    save_protocol_list = protocol_list;
455
1.80k
    do {
456
        /* Protocol names can't be empty. */
457
1.80k
        if (!PACKET_get_length_prefixed_1(&protocol_list, &protocol)
458
1.80k
                || PACKET_remaining(&protocol) == 0) {
459
68
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
460
68
            return 0;
461
68
        }
462
1.80k
    } while (PACKET_remaining(&protocol_list) != 0);
463
464
22
    OPENSSL_free(s->s3.alpn_proposed);
465
22
    s->s3.alpn_proposed = NULL;
466
22
    s->s3.alpn_proposed_len = 0;
467
22
    if (!PACKET_memdup(&save_protocol_list,
468
22
                       &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
22
    return 1;
474
22
}
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
14
{
480
14
    STACK_OF(SRTP_PROTECTION_PROFILE) *srvr;
481
14
    unsigned int ct, mki_len, id;
482
14
    int i, srtp_pref;
483
14
    PACKET subpkt;
484
485
    /* Ignore this if we have no SRTP profiles */
486
14
    if (SSL_get_srtp_profiles(s) == NULL)
487
14
        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
655
{
547
655
    if (!(s->options & SSL_OP_NO_ENCRYPT_THEN_MAC))
548
655
        s->ext.use_etm = 1;
549
550
655
    return 1;
551
655
}
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
1.13k
{
560
1.13k
#ifndef OPENSSL_NO_TLS1_3
561
1.13k
    PACKET psk_kex_modes;
562
1.13k
    unsigned int mode;
563
564
1.13k
    if (!PACKET_as_length_prefixed_1(pkt, &psk_kex_modes)
565
1.13k
            || PACKET_remaining(&psk_kex_modes) == 0) {
566
32
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
567
32
        return 0;
568
32
    }
569
570
6.05k
    while (PACKET_get_1(&psk_kex_modes, &mode)) {
571
4.95k
        if (mode == TLSEXT_KEX_MODE_KE_DHE)
572
1.68k
            s->ext.psk_kex_mode |= TLSEXT_KEX_MODE_FLAG_KE_DHE;
573
3.27k
        else if (mode == TLSEXT_KEX_MODE_KE
574
3.27k
                && (s->options & SSL_OP_ALLOW_NO_DHE_KEX) != 0)
575
0
            s->ext.psk_kex_mode |= TLSEXT_KEX_MODE_FLAG_KE;
576
4.95k
    }
577
1.10k
#endif
578
579
1.10k
    return 1;
580
1.13k
}
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.08k
{
589
2.08k
#ifndef OPENSSL_NO_TLS1_3
590
2.08k
    unsigned int group_id;
591
2.08k
    PACKET key_share_list, encoded_pt;
592
2.08k
    const uint16_t *clntgroups, *srvrgroups;
593
2.08k
    size_t clnt_num_groups, srvr_num_groups;
594
2.08k
    int found = 0;
595
596
2.08k
    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.08k
    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.08k
    if (!PACKET_as_length_prefixed_2(pkt, &key_share_list)) {
606
40
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_LENGTH_MISMATCH);
607
40
        return 0;
608
40
    }
609
610
    /* Get our list of supported groups */
611
2.04k
    tls1_get_supported_groups(s, &srvrgroups, &srvr_num_groups);
612
    /* Get the clients list of supported groups. */
613
2.04k
    tls1_get_peer_groups(s, &clntgroups, &clnt_num_groups);
614
2.04k
    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
4
        SSLfatal(s, SSL_AD_MISSING_EXTENSION,
621
4
                 SSL_R_MISSING_SUPPORTED_GROUPS_EXTENSION);
622
4
        return 0;
623
4
    }
624
625
2.03k
    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
3
        SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_BAD_KEY_SHARE);
632
3
        return 0;
633
3
    }
634
635
4.21k
    while (PACKET_remaining(&key_share_list) > 0) {
636
2.33k
        if (!PACKET_get_net_2(&key_share_list, &group_id)
637
2.33k
                || !PACKET_get_length_prefixed_2(&key_share_list, &encoded_pt)
638
2.33k
                || PACKET_remaining(&encoded_pt) == 0) {
639
59
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_LENGTH_MISMATCH);
640
59
            return 0;
641
59
        }
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.27k
        if (found)
648
220
            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.05k
        if (s->s3.group_id != 0
655
2.05k
                && (group_id != s->s3.group_id
656
122
                    || PACKET_remaining(&key_share_list) != 0)) {
657
29
            SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_BAD_KEY_SHARE);
658
29
            return 0;
659
29
        }
660
661
        /* Check if this share is in supported_groups sent from client */
662
2.02k
        if (!check_in_list(s, group_id, clntgroups, clnt_num_groups, 0)) {
663
23
            SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_BAD_KEY_SHARE);
664
23
            return 0;
665
23
        }
666
667
        /* Check if this share is for a group we can use */
668
2.00k
        if (!check_in_list(s, group_id, srvrgroups, srvr_num_groups, 1)
669
2.00k
                || !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.00k
                || !tls_valid_group(s, group_id, TLS1_3_VERSION, TLS1_3_VERSION,
675
1.49k
                                    0, NULL)) {
676
            /* Share not suitable */
677
512
            continue;
678
512
        }
679
680
1.49k
        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.49k
        s->s3.group_id = group_id;
687
        /* Cache the selected group ID in the SSL_SESSION */
688
1.49k
        s->session->kex_group = group_id;
689
690
1.49k
        if (tls13_set_encoded_pub_key(s->s3.peer_tmp,
691
1.49k
                                      PACKET_data(&encoded_pt),
692
1.49k
                                      PACKET_remaining(&encoded_pt)) <= 0) {
693
45
            SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_BAD_ECPOINT);
694
45
            return 0;
695
45
        }
696
697
1.44k
        found = 1;
698
1.44k
    }
699
1.87k
#endif
700
701
1.87k
    return 1;
702
2.03k
}
703
704
int tls_parse_ctos_cookie(SSL *s, PACKET *pkt, unsigned int context, X509 *x,
705
                          size_t chainidx)
706
82
{
707
82
#ifndef OPENSSL_NO_TLS1_3
708
82
    unsigned int format, version, key_share, group_id;
709
82
    EVP_MD_CTX *hctx;
710
82
    EVP_PKEY *pkey;
711
82
    PACKET cookie, raw, chhash, appcookie;
712
82
    WPACKET hrrpkt;
713
82
    const unsigned char *data, *mdin, *ciphdata;
714
82
    unsigned char hmac[SHA256_DIGEST_LENGTH];
715
82
    unsigned char hrr[MAX_HRR_SIZE];
716
82
    size_t rawlen, hmaclen, hrrlen, ciphlen;
717
82
    uint64_t tm, now;
718
719
    /* Ignore any cookie if we're not set up to verify it */
720
82
    if (s->ctx->verify_stateless_cookie_cb == NULL
721
82
            || (s->s3.flags & TLS1_FLAGS_STATELESS) == 0)
722
82
        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
9.00k
{
914
9.00k
    PACKET supported_groups_list;
915
916
    /* Each group is 2 bytes and we must have at least 1. */
917
9.00k
    if (!PACKET_as_length_prefixed_2(pkt, &supported_groups_list)
918
9.00k
            || PACKET_remaining(&supported_groups_list) == 0
919
9.00k
            || (PACKET_remaining(&supported_groups_list) % 2) != 0) {
920
134
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
921
134
        return 0;
922
134
    }
923
924
8.87k
    if (!s->hit || SSL_IS_TLS13(s)) {
925
8.81k
        OPENSSL_free(s->ext.peer_supportedgroups);
926
8.81k
        s->ext.peer_supportedgroups = NULL;
927
8.81k
        s->ext.peer_supportedgroups_len = 0;
928
8.81k
        if (!tls1_save_u16(&supported_groups_list,
929
8.81k
                           &s->ext.peer_supportedgroups,
930
8.81k
                           &s->ext.peer_supportedgroups_len)) {
931
0
            SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
932
0
            return 0;
933
0
        }
934
8.81k
    }
935
936
8.87k
    return 1;
937
8.87k
}
938
939
int tls_parse_ctos_ems(SSL *s, PACKET *pkt, unsigned int context, X509 *x,
940
                       size_t chainidx)
941
1.53k
{
942
    /* The extension must always be empty */
943
1.53k
    if (PACKET_remaining(pkt) != 0) {
944
6
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
945
6
        return 0;
946
6
    }
947
948
1.53k
    if (s->options & SSL_OP_NO_EXTENDED_MASTER_SECRET)
949
0
        return 1;
950
951
1.53k
    s->s3.flags |= TLS1_FLAGS_RECEIVED_EXTMS;
952
953
1.53k
    return 1;
954
1.53k
}
955
956
957
int tls_parse_ctos_early_data(SSL *s, PACKET *pkt, unsigned int context,
958
                              X509 *x, size_t chainidx)
959
1.62k
{
960
1.62k
    if (PACKET_remaining(pkt) != 0) {
961
6
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
962
6
        return 0;
963
6
    }
964
965
1.62k
    if (s->hello_retry_request != SSL_HRR_NONE) {
966
5
        SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_BAD_EXTENSION);
967
5
        return 0;
968
5
    }
969
970
1.61k
    return 1;
971
1.62k
}
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
255
{
1004
255
    PACKET identities, binders, binder;
1005
255
    size_t binderoffset, hashsize;
1006
255
    SSL_SESSION *sess = NULL;
1007
255
    unsigned int id, i, ext = 0;
1008
255
    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
255
    if ((s->ext.psk_kex_mode
1015
255
            & (TLSEXT_KEX_MODE_FLAG_KE | TLSEXT_KEX_MODE_FLAG_KE_DHE)) == 0)
1016
25
        return 1;
1017
1018
230
    if (!PACKET_get_length_prefixed_2(pkt, &identities)) {
1019
15
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
1020
15
        return 0;
1021
15
    }
1022
1023
215
    s->ext.ticket_expected = 0;
1024
436
    for (id = 0; PACKET_remaining(&identities) != 0; id++) {
1025
347
        PACKET identity;
1026
347
        unsigned long ticket_agel;
1027
347
        size_t idlen;
1028
1029
347
        if (!PACKET_get_length_prefixed_2(&identities, &identity)
1030
347
                || !PACKET_get_net_4(&identities, &ticket_agel)) {
1031
58
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
1032
58
            return 0;
1033
58
        }
1034
1035
289
        idlen = PACKET_remaining(&identity);
1036
289
        if (s->psk_find_session_cb != NULL
1037
289
                && !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
289
#ifndef OPENSSL_NO_PSK
1044
289
        if(sess == NULL
1045
289
                && s->psk_server_callback != NULL
1046
289
                && 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
289
#endif /* OPENSSL_NO_PSK */
1091
1092
289
        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
289
        } else {
1114
289
            uint32_t ticket_age = 0, agesec, agems;
1115
289
            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
289
            if ((s->options & SSL_OP_NO_TICKET) != 0
1123
289
                    || (s->max_early_data > 0
1124
289
                        && (s->options & SSL_OP_NO_ANTI_REPLAY) == 0))
1125
0
                ret = tls_get_stateful_ticket(s, &identity, &sess);
1126
289
            else
1127
289
                ret = tls_decrypt_ticket(s, PACKET_data(&identity),
1128
289
                                         PACKET_remaining(&identity), NULL, 0,
1129
289
                                         &sess);
1130
1131
289
            if (ret == SSL_TICKET_EMPTY) {
1132
4
                SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
1133
4
                return 0;
1134
4
            }
1135
1136
285
            if (ret == SSL_TICKET_FATAL_ERR_MALLOC
1137
285
                    || 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
285
            if (ret == SSL_TICKET_NONE || ret == SSL_TICKET_NO_DECRYPT)
1142
161
                continue;
1143
1144
            /* Check for replay */
1145
124
            if (s->max_early_data > 0
1146
124
                    && (s->options & SSL_OP_NO_ANTI_REPLAY) == 0
1147
124
                    && !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
124
            ticket_age = (uint32_t)ticket_agel;
1154
124
            agesec = (uint32_t)(time(NULL) - sess->time);
1155
124
            agems = agesec * (uint32_t)1000;
1156
124
            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
124
            if (id == 0
1167
124
                    && sess->timeout >= (long)agesec
1168
124
                    && agems / (uint32_t)1000 == agesec
1169
124
                    && ticket_age <= agems + 1000
1170
124
                    && 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
6
                s->ext.early_data_ok = 1;
1176
6
            }
1177
124
        }
1178
1179
124
        md = ssl_md(s->ctx, sess->cipher->algorithm2);
1180
124
        if (md == NULL) {
1181
0
            SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1182
0
            goto err;
1183
0
        }
1184
124
        if (!EVP_MD_is_a(md,
1185
124
                EVP_MD_get0_name(ssl_md(s->ctx,
1186
124
                                        s->s3.tmp.new_cipher->algorithm2)))) {
1187
            /* The ciphersuite is not compatible with this session. */
1188
60
            SSL_SESSION_free(sess);
1189
60
            sess = NULL;
1190
60
            s->ext.early_data_ok = 0;
1191
60
            s->ext.ticket_expected = 0;
1192
60
            continue;
1193
60
        }
1194
64
        break;
1195
124
    }
1196
1197
153
    if (sess == NULL)
1198
89
        return 1;
1199
1200
64
    binderoffset = PACKET_data(pkt) - (const unsigned char *)s->init_buf->data;
1201
64
    hashsize = EVP_MD_get_size(md);
1202
1203
64
    if (!PACKET_get_length_prefixed_2(pkt, &binders)) {
1204
29
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
1205
29
        goto err;
1206
29
    }
1207
1208
64
    for (i = 0; i <= id; i++) {
1209
35
        if (!PACKET_get_length_prefixed_1(&binders, &binder)) {
1210
6
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
1211
6
            goto err;
1212
6
        }
1213
35
    }
1214
1215
29
    if (PACKET_remaining(&binder) != hashsize) {
1216
6
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
1217
6
        goto err;
1218
6
    }
1219
23
    if (tls_psk_do_binder(s, md, (const unsigned char *)s->init_buf->data,
1220
23
                          binderoffset, PACKET_data(&binder), NULL, sess, 0,
1221
23
                          ext) != 1) {
1222
        /* SSLfatal() already called */
1223
20
        goto err;
1224
20
    }
1225
1226
3
    s->ext.tick_identity = id;
1227
1228
3
    SSL_SESSION_free(s->session);
1229
3
    s->session = sess;
1230
3
    return 1;
1231
61
err:
1232
61
    SSL_SESSION_free(sess);
1233
61
    return 0;
1234
23
}
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
112
{
1241
112
    if (PACKET_remaining(pkt) != 0) {
1242
8
        SSLfatal(s, SSL_AD_DECODE_ERROR,
1243
8
                 SSL_R_POST_HANDSHAKE_AUTH_ENCODING_ERR);
1244
8
        return 0;
1245
8
    }
1246
1247
104
    s->post_handshake_auth = SSL_PHA_EXT_RECEIVED;
1248
1249
104
    return 1;
1250
112
}
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
12.1k
{
1259
12.1k
    if (!s->s3.send_connection_binding)
1260
10.2k
        return EXT_RETURN_NOT_SENT;
1261
1262
    /* Still add this even if SSL_OP_NO_RENEGOTIATION is set */
1263
1.90k
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_renegotiate)
1264
1.90k
            || !WPACKET_start_sub_packet_u16(pkt)
1265
1.90k
            || !WPACKET_start_sub_packet_u8(pkt)
1266
1.90k
            || !WPACKET_memcpy(pkt, s->s3.previous_client_finished,
1267
1.90k
                               s->s3.previous_client_finished_len)
1268
1.90k
            || !WPACKET_memcpy(pkt, s->s3.previous_server_finished,
1269
1.90k
                               s->s3.previous_server_finished_len)
1270
1.90k
            || !WPACKET_close(pkt)
1271
1.90k
            || !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
1.90k
    return EXT_RETURN_SENT;
1277
1.90k
}
1278
1279
EXT_RETURN tls_construct_stoc_server_name(SSL *s, WPACKET *pkt,
1280
                                          unsigned int context, X509 *x,
1281
                                          size_t chainidx)
1282
11.2k
{
1283
11.2k
    if (s->servername_done != 1)
1284
11.2k
        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
11.2k
{
1307
11.2k
    if (!USE_MAX_FRAGMENT_LENGTH_EXT(s->session))
1308
10.8k
        return EXT_RETURN_NOT_SENT;
1309
1310
    /*-
1311
     * 4 bytes for this extension type and extension length
1312
     * 1 byte for the Max Fragment Length code value.
1313
     */
1314
382
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_max_fragment_length)
1315
382
        || !WPACKET_start_sub_packet_u16(pkt)
1316
382
        || !WPACKET_put_bytes_u8(pkt, s->session->ext.max_fragment_len_mode)
1317
382
        || !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
382
    return EXT_RETURN_SENT;
1323
382
}
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
9.30k
{
1329
9.30k
    unsigned long alg_k = s->s3.tmp.new_cipher->algorithm_mkey;
1330
9.30k
    unsigned long alg_a = s->s3.tmp.new_cipher->algorithm_auth;
1331
9.30k
    int using_ecc = ((alg_k & SSL_kECDHE) || (alg_a & SSL_aECDSA))
1332
9.30k
                    && (s->ext.peer_ecpointformats != NULL);
1333
9.30k
    const unsigned char *plist;
1334
9.30k
    size_t plistlen;
1335
1336
9.30k
    if (!using_ecc)
1337
7.90k
        return EXT_RETURN_NOT_SENT;
1338
1339
1.40k
    tls1_get_formatlist(s, &plist, &plistlen);
1340
1.40k
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_ec_point_formats)
1341
1.40k
            || !WPACKET_start_sub_packet_u16(pkt)
1342
1.40k
            || !WPACKET_sub_memcpy_u8(pkt, plist, plistlen)
1343
1.40k
            || !WPACKET_close(pkt)) {
1344
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1345
0
        return EXT_RETURN_FAIL;
1346
0
    }
1347
1348
1.40k
    return EXT_RETURN_SENT;
1349
1.40k
}
1350
1351
EXT_RETURN tls_construct_stoc_supported_groups(SSL *s, WPACKET *pkt,
1352
                                               unsigned int context, X509 *x,
1353
                                               size_t chainidx)
1354
11.2k
{
1355
11.2k
    const uint16_t *groups;
1356
11.2k
    size_t numgroups, i, first = 1;
1357
11.2k
    int version;
1358
1359
    /* s->s3.group_id is non zero if we accepted a key_share */
1360
11.2k
    if (s->s3.group_id == 0)
1361
9.30k
        return EXT_RETURN_NOT_SENT;
1362
1363
    /* Get our list of supported groups */
1364
1.96k
    tls1_get_supported_groups(s, &groups, &numgroups);
1365
1.96k
    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
1.96k
    version = SSL_version(s);
1372
7.10k
    for (i = 0; i < numgroups; i++) {
1373
6.46k
        uint16_t group = groups[i];
1374
1375
6.46k
        if (tls_valid_group(s, group, version, version, 0, NULL)
1376
6.46k
                && tls_group_allowed(s, group, SSL_SECOP_CURVE_SUPPORTED)) {
1377
6.46k
            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
1.96k
                if (s->s3.group_id == group)
1383
1.33k
                    return EXT_RETURN_NOT_SENT;
1384
1385
                /* Add extension header */
1386
633
                if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_supported_groups)
1387
                           /* Sub-packet for supported_groups extension */
1388
633
                        || !WPACKET_start_sub_packet_u16(pkt)
1389
633
                        || !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
633
                first = 0;
1395
633
            }
1396
5.13k
            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
5.13k
        }
1401
6.46k
    }
1402
1403
633
    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
633
    return EXT_RETURN_SENT;
1409
633
}
1410
1411
EXT_RETURN tls_construct_stoc_session_ticket(SSL *s, WPACKET *pkt,
1412
                                             unsigned int context, X509 *x,
1413
                                             size_t chainidx)
1414
9.30k
{
1415
9.30k
    if (!s->ext.ticket_expected || !tls_use_ticket(s)) {
1416
8.28k
        s->ext.ticket_expected = 0;
1417
8.28k
        return EXT_RETURN_NOT_SENT;
1418
8.28k
    }
1419
1420
1.02k
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_session_ticket)
1421
1.02k
            || !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
1.02k
    return EXT_RETURN_SENT;
1427
1.02k
}
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
11.2k
{
1434
    /* We don't currently support this extension inside a CertificateRequest */
1435
11.2k
    if (context == SSL_EXT_TLS1_3_CERTIFICATE_REQUEST)
1436
0
        return EXT_RETURN_NOT_SENT;
1437
1438
11.2k
    if (!s->ext.status_expected)
1439
11.2k
        return EXT_RETURN_NOT_SENT;
1440
1441
0
    if (SSL_IS_TLS13(s) && chainidx != 0)
1442
0
        return EXT_RETURN_NOT_SENT;
1443
1444
0
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_status_request)
1445
0
            || !WPACKET_start_sub_packet_u16(pkt)) {
1446
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1447
0
        return EXT_RETURN_FAIL;
1448
0
    }
1449
1450
    /*
1451
     * In TLSv1.3 we include the certificate status itself. In <= TLSv1.2 we
1452
     * send back an empty extension, with the certificate status appearing as a
1453
     * separate message
1454
     */
1455
0
    if (SSL_IS_TLS13(s) && !tls_construct_cert_status_body(s, pkt)) {
1456
       /* SSLfatal() already called */
1457
0
       return EXT_RETURN_FAIL;
1458
0
    }
1459
0
    if (!WPACKET_close(pkt)) {
1460
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1461
0
        return EXT_RETURN_FAIL;
1462
0
    }
1463
1464
0
    return EXT_RETURN_SENT;
1465
0
}
1466
#endif
1467
1468
#ifndef OPENSSL_NO_NEXTPROTONEG
1469
EXT_RETURN tls_construct_stoc_next_proto_neg(SSL *s, WPACKET *pkt,
1470
                                             unsigned int context, X509 *x,
1471
                                             size_t chainidx)
1472
9.30k
{
1473
9.30k
    const unsigned char *npa;
1474
9.30k
    unsigned int npalen;
1475
9.30k
    int ret;
1476
9.30k
    int npn_seen = s->s3.npn_seen;
1477
1478
9.30k
    s->s3.npn_seen = 0;
1479
9.30k
    if (!npn_seen || s->ctx->ext.npn_advertised_cb == NULL)
1480
9.30k
        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
11.2k
{
1501
11.2k
    if (s->s3.alpn_selected == NULL)
1502
11.2k
        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
11.2k
{
1524
11.2k
    if (s->srtp_profile == NULL)
1525
11.2k
        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
9.30k
{
1544
9.30k
    if (!s->ext.use_etm)
1545
8.79k
        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
514
    if (s->s3.tmp.new_cipher->algorithm_mac == SSL_AEAD
1552
514
        || s->s3.tmp.new_cipher->algorithm_enc == SSL_RC4
1553
514
        || s->s3.tmp.new_cipher->algorithm_enc == SSL_eGOST2814789CNT
1554
514
        || s->s3.tmp.new_cipher->algorithm_enc == SSL_eGOST2814789CNT12
1555
514
        || s->s3.tmp.new_cipher->algorithm_enc == SSL_MAGMA
1556
514
        || s->s3.tmp.new_cipher->algorithm_enc == SSL_KUZNYECHIK) {
1557
93
        s->ext.use_etm = 0;
1558
93
        return EXT_RETURN_NOT_SENT;
1559
93
    }
1560
1561
421
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_encrypt_then_mac)
1562
421
            || !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
421
    return EXT_RETURN_SENT;
1568
421
}
1569
1570
EXT_RETURN tls_construct_stoc_ems(SSL *s, WPACKET *pkt, unsigned int context,
1571
                                  X509 *x, size_t chainidx)
1572
9.30k
{
1573
9.30k
    if ((s->s3.flags & TLS1_FLAGS_RECEIVED_EXTMS) == 0)
1574
7.97k
        return EXT_RETURN_NOT_SENT;
1575
1576
1.33k
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_extended_master_secret)
1577
1.33k
            || !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
1.33k
    return EXT_RETURN_SENT;
1583
1.33k
}
1584
1585
EXT_RETURN tls_construct_stoc_supported_versions(SSL *s, WPACKET *pkt,
1586
                                                 unsigned int context, X509 *x,
1587
                                                 size_t chainidx)
1588
2.48k
{
1589
2.48k
    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
2.48k
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_supported_versions)
1595
2.48k
            || !WPACKET_start_sub_packet_u16(pkt)
1596
2.48k
            || !WPACKET_put_bytes_u16(pkt, s->version)
1597
2.48k
            || !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
2.48k
    return EXT_RETURN_SENT;
1603
2.48k
}
1604
1605
EXT_RETURN tls_construct_stoc_key_share(SSL *s, WPACKET *pkt,
1606
                                        unsigned int context, X509 *x,
1607
                                        size_t chainidx)
1608
2.48k
{
1609
2.48k
#ifndef OPENSSL_NO_TLS1_3
1610
2.48k
    unsigned char *encodedPoint;
1611
2.48k
    size_t encoded_pt_len = 0;
1612
2.48k
    EVP_PKEY *ckey = s->s3.peer_tmp, *skey = NULL;
1613
2.48k
    const TLS_GROUP_INFO *ginf = NULL;
1614
1615
2.48k
    if (s->hello_retry_request == SSL_HRR_PENDING) {
1616
506
        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
506
        if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_key_share)
1621
506
                || !WPACKET_start_sub_packet_u16(pkt)
1622
506
                || !WPACKET_put_bytes_u16(pkt, s->s3.group_id)
1623
506
                || !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
506
        return EXT_RETURN_SENT;
1629
506
    }
1630
1631
1.98k
    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
1.98k
    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
1.98k
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_key_share)
1648
1.98k
            || !WPACKET_start_sub_packet_u16(pkt)
1649
1.98k
            || !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
1.98k
    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
1.98k
    if (!ginf->is_kem) {
1660
        /* Regular KEX */
1661
1.95k
        skey = ssl_generate_pkey(s, ckey);
1662
1.95k
        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
1.95k
        encoded_pt_len = EVP_PKEY_get1_encoded_public_key(skey, &encodedPoint);
1669
1.95k
        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
1.95k
        if (!WPACKET_sub_memcpy_u16(pkt, encodedPoint, encoded_pt_len)
1676
1.95k
                || !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
1.95k
        OPENSSL_free(encodedPoint);
1683
1684
        /*
1685
         * This causes the crypto state to be updated based on the derived keys
1686
         */
1687
1.95k
        s->s3.tmp.pkey = skey;
1688
1.95k
        if (ssl_derive(s, skey, ckey, 1) == 0) {
1689
            /* SSLfatal() already called */
1690
15
            return EXT_RETURN_FAIL;
1691
15
        }
1692
1.95k
    } else {
1693
        /* KEM mode */
1694
27
        unsigned char *ct = NULL;
1695
27
        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
27
        if (ssl_encapsulate(s, ckey, &ct, &ctlen, 0) == 0) {
1704
            /* SSLfatal() already called */
1705
4
            return EXT_RETURN_FAIL;
1706
4
        }
1707
1708
23
        if (ctlen == 0) {
1709
0
            SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1710
0
            OPENSSL_free(ct);
1711
0
            return EXT_RETURN_FAIL;
1712
0
        }
1713
1714
23
        if (!WPACKET_sub_memcpy_u16(pkt, ct, ctlen)
1715
23
                || !WPACKET_close(pkt)) {
1716
0
            SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1717
0
            OPENSSL_free(ct);
1718
0
            return EXT_RETURN_FAIL;
1719
0
        }
1720
23
        OPENSSL_free(ct);
1721
1722
        /*
1723
         * This causes the crypto state to be updated based on the generated pms
1724
         */
1725
23
        if (ssl_gensecret(s, s->s3.tmp.pms, s->s3.tmp.pmslen) == 0) {
1726
            /* SSLfatal() already called */
1727
0
            return EXT_RETURN_FAIL;
1728
0
        }
1729
23
    }
1730
1.96k
    s->s3.did_kex = 1;
1731
1.96k
    return EXT_RETURN_SENT;
1732
#else
1733
    return EXT_RETURN_FAIL;
1734
#endif
1735
1.98k
}
1736
1737
EXT_RETURN tls_construct_stoc_cookie(SSL *s, WPACKET *pkt, unsigned int context,
1738
                                     X509 *x, size_t chainidx)
1739
506
{
1740
506
#ifndef OPENSSL_NO_TLS1_3
1741
506
    unsigned char *hashval1, *hashval2, *appcookie1, *appcookie2, *cookie;
1742
506
    unsigned char *hmac, *hmac2;
1743
506
    size_t startlen, ciphlen, totcookielen, hashlen, hmaclen, appcookielen;
1744
506
    EVP_MD_CTX *hctx;
1745
506
    EVP_PKEY *pkey;
1746
506
    int ret = EXT_RETURN_FAIL;
1747
1748
506
    if ((s->s3.flags & TLS1_FLAGS_STATELESS) == 0)
1749
506
        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
9.30k
{
1865
9.30k
    const unsigned char cryptopro_ext[36] = {
1866
9.30k
        0xfd, 0xe8,         /* 65000 */
1867
9.30k
        0x00, 0x20,         /* 32 bytes length */
1868
9.30k
        0x30, 0x1e, 0x30, 0x08, 0x06, 0x06, 0x2a, 0x85,
1869
9.30k
        0x03, 0x02, 0x02, 0x09, 0x30, 0x08, 0x06, 0x06,
1870
9.30k
        0x2a, 0x85, 0x03, 0x02, 0x02, 0x16, 0x30, 0x08,
1871
9.30k
        0x06, 0x06, 0x2a, 0x85, 0x03, 0x02, 0x02, 0x17
1872
9.30k
    };
1873
1874
9.30k
    if (((s->s3.tmp.new_cipher->id & 0xFFFF) != 0x80
1875
9.30k
         && (s->s3.tmp.new_cipher->id & 0xFFFF) != 0x81)
1876
9.30k
            || (SSL_get_options(s) & SSL_OP_CRYPTOPRO_TLSEXT_BUG) == 0)
1877
9.30k
        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
1.96k
{
1891
1.96k
    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
1.96k
    if (s->ext.early_data != SSL_EARLY_DATA_ACCEPTED)
1907
1.96k
        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
1.96k
{
1922
1.96k
    if (!s->hit)
1923
1.96k
        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
}