Coverage Report

Created: 2023-06-08 06:43

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