Coverage Report

Created: 2023-09-25 06:45

/src/openssl30/ssl/statem/extensions_srvr.c
Line
Count
Source (jump to first uncovered line)
1
/*
2
 * Copyright 2016-2023 The OpenSSL Project Authors. All Rights Reserved.
3
 *
4
 * Licensed under the Apache License 2.0 (the "License").  You may not use
5
 * this file except in compliance with the License.  You can obtain a copy
6
 * in the file LICENSE in the source distribution or at
7
 * https://www.openssl.org/source/license.html
8
 */
9
10
#include <openssl/ocsp.h>
11
#include "../ssl_local.h"
12
#include "statem_local.h"
13
#include "internal/cryptlib.h"
14
15
0
#define COOKIE_STATE_FORMAT_VERSION     1
16
17
/*
18
 * 2 bytes for packet length, 2 bytes for format version, 2 bytes for
19
 * protocol version, 2 bytes for group id, 2 bytes for cipher id, 1 byte for
20
 * key_share present flag, 8 bytes for timestamp, 2 bytes for the hashlen,
21
 * EVP_MAX_MD_SIZE for transcript hash, 1 byte for app cookie length, app cookie
22
 * length bytes, SHA256_DIGEST_LENGTH bytes for the HMAC of the whole thing.
23
 */
24
0
#define MAX_COOKIE_SIZE (2 + 2 + 2 + 2 + 2 + 1 + 8 + 2 + EVP_MAX_MD_SIZE + 1 \
25
0
                         + SSL_COOKIE_LENGTH + SHA256_DIGEST_LENGTH)
26
27
/*
28
 * Message header + 2 bytes for protocol version + number of random bytes +
29
 * + 1 byte for legacy session id length + number of bytes in legacy session id
30
 * + 2 bytes for ciphersuite + 1 byte for legacy compression
31
 * + 2 bytes for extension block length + 6 bytes for key_share extension
32
 * + 4 bytes for cookie extension header + the number of bytes in the cookie
33
 */
34
#define MAX_HRR_SIZE    (SSL3_HM_HEADER_LENGTH + 2 + SSL3_RANDOM_SIZE + 1 \
35
                         + SSL_MAX_SSL_SESSION_ID_LENGTH + 2 + 1 + 2 + 6 + 4 \
36
                         + MAX_COOKIE_SIZE)
37
38
/*
39
 * Parse the client's renegotiation binding and abort if it's not right
40
 */
41
int tls_parse_ctos_renegotiate(SSL *s, PACKET *pkt, unsigned int context,
42
                               X509 *x, size_t chainidx)
43
869
{
44
869
    unsigned int ilen;
45
869
    const unsigned char *data;
46
47
    /* Parse the length byte */
48
869
    if (!PACKET_get_1(pkt, &ilen)
49
869
        || !PACKET_get_bytes(pkt, &data, ilen)) {
50
12
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_RENEGOTIATION_ENCODING_ERR);
51
12
        return 0;
52
12
    }
53
54
    /* Check that the extension matches */
55
857
    if (ilen != s->s3.previous_client_finished_len) {
56
10
        SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_R_RENEGOTIATION_MISMATCH);
57
10
        return 0;
58
10
    }
59
60
847
    if (memcmp(data, s->s3.previous_client_finished,
61
847
               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
847
    s->s3.send_connection_binding = 1;
67
68
847
    return 1;
69
847
}
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.76k
{
97
1.76k
    unsigned int servname_type;
98
1.76k
    PACKET sni, hostname;
99
100
1.76k
    if (!PACKET_as_length_prefixed_2(pkt, &sni)
101
        /* ServerNameList must be at least 1 byte long. */
102
1.76k
        || PACKET_remaining(&sni) == 0) {
103
84
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
104
84
        return 0;
105
84
    }
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.67k
    if (!PACKET_get_1(&sni, &servname_type)
119
1.67k
        || servname_type != TLSEXT_NAMETYPE_host_name
120
1.67k
        || !PACKET_as_length_prefixed_2(&sni, &hostname)) {
121
57
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
122
57
        return 0;
123
57
    }
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.62k
    if (!s->hit || SSL_IS_TLS13(s)) {
130
1.61k
        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.61k
        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.60k
        OPENSSL_free(s->ext.hostname);
145
1.60k
        s->ext.hostname = NULL;
146
1.60k
        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.60k
        s->servername_done = 1;
152
1.60k
    } 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.61k
    return 1;
164
1.62k
}
165
166
int tls_parse_ctos_maxfragmentlen(SSL *s, PACKET *pkt, unsigned int context,
167
                                  X509 *x, size_t chainidx)
168
134
{
169
134
    unsigned int value;
170
171
134
    if (PACKET_remaining(pkt) != 1 || !PACKET_get_1(pkt, &value)) {
172
27
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
173
27
        return 0;
174
27
    }
175
176
    /* Received |value| should be a valid max-fragment-length code. */
177
107
    if (!IS_MAX_FRAGMENT_LENGTH_EXT_VALID(value)) {
178
11
        SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER,
179
11
                 SSL_R_SSL3_EXT_INVALID_MAX_FRAGMENT_LENGTH);
180
11
        return 0;
181
11
    }
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
96
    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
93
    s->session->ext.max_fragment_len_mode = value;
199
93
    return 1;
200
96
}
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
57
{
206
57
    PACKET srp_I;
207
208
57
    if (!PACKET_as_length_prefixed_1(pkt, &srp_I)
209
57
            || PACKET_contains_zero_byte(&srp_I)) {
210
31
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
211
31
        return 0;
212
31
    }
213
214
26
    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
26
    return 1;
220
26
}
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.31k
{
226
1.31k
    PACKET ec_point_format_list;
227
228
1.31k
    if (!PACKET_as_length_prefixed_1(pkt, &ec_point_format_list)
229
1.31k
        || PACKET_remaining(&ec_point_format_list) == 0) {
230
45
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
231
45
        return 0;
232
45
    }
233
234
1.26k
    if (!s->hit) {
235
1.19k
        if (!PACKET_memdup(&ec_point_format_list,
236
1.19k
                           &s->ext.peer_ecpointformats,
237
1.19k
                           &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.19k
    }
242
243
1.26k
    return 1;
244
1.26k
}
245
246
int tls_parse_ctos_session_ticket(SSL *s, PACKET *pkt, unsigned int context,
247
                                  X509 *x, size_t chainidx)
248
1.10k
{
249
1.10k
    if (s->ext.session_ticket_cb &&
250
1.10k
            !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.10k
    return 1;
258
1.10k
}
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
531
{
265
531
    PACKET supported_sig_algs;
266
267
531
    if (!PACKET_as_length_prefixed_2(pkt, &supported_sig_algs)
268
531
            || PACKET_remaining(&supported_sig_algs) == 0) {
269
64
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
270
64
        return 0;
271
64
    }
272
273
467
    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
462
    return 1;
279
467
}
280
281
int tls_parse_ctos_sig_algs(SSL *s, PACKET *pkt, unsigned int context, X509 *x,
282
                            size_t chainidx)
283
4.06k
{
284
4.06k
    PACKET supported_sig_algs;
285
286
4.06k
    if (!PACKET_as_length_prefixed_2(pkt, &supported_sig_algs)
287
4.06k
            || PACKET_remaining(&supported_sig_algs) == 0) {
288
85
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
289
85
        return 0;
290
85
    }
291
292
3.98k
    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
3.97k
    return 1;
298
3.98k
}
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.95k
{
304
2.95k
    PACKET responder_id_list, exts;
305
306
    /* We ignore this in a resumption handshake */
307
2.95k
    if (s->hit)
308
18
        return 1;
309
310
    /* Not defined if we get one of these in a client Certificate */
311
2.93k
    if (x != NULL)
312
0
        return 1;
313
314
2.93k
    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.92k
    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
261
        s->ext.status_type = TLSEXT_STATUSTYPE_nothing;
324
261
        return 1;
325
261
    }
326
327
2.66k
    if (!PACKET_get_length_prefixed_2 (pkt, &responder_id_list)) {
328
31
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
329
31
        return 0;
330
31
    }
331
332
    /*
333
     * We remove any OCSP_RESPIDs from a previous handshake
334
     * to prevent unbounded memory growth - CVE-2016-6304
335
     */
336
2.63k
    sk_OCSP_RESPID_pop_free(s->ext.ocsp.ids, OCSP_RESPID_free);
337
2.63k
    if (PACKET_remaining(&responder_id_list) > 0) {
338
1.73k
        s->ext.ocsp.ids = sk_OCSP_RESPID_new_null();
339
1.73k
        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.73k
    } else {
344
905
        s->ext.ocsp.ids = NULL;
345
905
    }
346
347
2.68k
    while (PACKET_remaining(&responder_id_list) > 0) {
348
1.77k
        OCSP_RESPID *id;
349
1.77k
        PACKET responder_id;
350
1.77k
        const unsigned char *id_data;
351
352
1.77k
        if (!PACKET_get_length_prefixed_2(&responder_id_list, &responder_id)
353
1.77k
                || PACKET_remaining(&responder_id) == 0) {
354
37
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
355
37
            return 0;
356
37
        }
357
358
1.73k
        id_data = PACKET_data(&responder_id);
359
1.73k
        id = d2i_OCSP_RESPID(NULL, &id_data,
360
1.73k
                             (int)PACKET_remaining(&responder_id));
361
1.73k
        if (id == NULL) {
362
1.65k
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
363
1.65k
            return 0;
364
1.65k
        }
365
366
78
        if (id_data != PACKET_end(&responder_id)) {
367
28
            OCSP_RESPID_free(id);
368
28
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
369
370
28
            return 0;
371
28
        }
372
373
50
        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
50
    }
380
381
    /* Read in request_extensions */
382
911
    if (!PACKET_as_length_prefixed_2(pkt, &exts)) {
383
45
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
384
45
        return 0;
385
45
    }
386
387
866
    if (PACKET_remaining(&exts) > 0) {
388
117
        const unsigned char *ext_data = PACKET_data(&exts);
389
390
117
        sk_X509_EXTENSION_pop_free(s->ext.ocsp.exts,
391
117
                                   X509_EXTENSION_free);
392
117
        s->ext.ocsp.exts =
393
117
            d2i_X509_EXTENSIONS(NULL, &ext_data, (int)PACKET_remaining(&exts));
394
117
        if (s->ext.ocsp.exts == NULL || ext_data != PACKET_end(&exts)) {
395
114
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
396
114
            return 0;
397
114
        }
398
117
    }
399
400
752
    return 1;
401
866
}
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
7
{
408
    /*
409
     * We shouldn't accept this extension on a
410
     * renegotiation.
411
     */
412
7
    if (SSL_IS_FIRST_HANDSHAKE(s))
413
7
        s->s3.npn_seen = 1;
414
415
7
    return 1;
416
7
}
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
406
{
426
406
    PACKET protocol_list, save_protocol_list, protocol;
427
428
406
    if (!SSL_IS_FIRST_HANDSHAKE(s))
429
0
        return 1;
430
431
406
    if (!PACKET_as_length_prefixed_2(pkt, &protocol_list)
432
406
        || PACKET_remaining(&protocol_list) < 2) {
433
52
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
434
52
        return 0;
435
52
    }
436
437
354
    save_protocol_list = protocol_list;
438
1.62k
    do {
439
        /* Protocol names can't be empty. */
440
1.62k
        if (!PACKET_get_length_prefixed_1(&protocol_list, &protocol)
441
1.62k
                || PACKET_remaining(&protocol) == 0) {
442
42
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
443
42
            return 0;
444
42
        }
445
1.62k
    } while (PACKET_remaining(&protocol_list) != 0);
446
447
312
    OPENSSL_free(s->s3.alpn_proposed);
448
312
    s->s3.alpn_proposed = NULL;
449
312
    s->s3.alpn_proposed_len = 0;
450
312
    if (!PACKET_memdup(&save_protocol_list,
451
312
                       &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
312
    return 1;
457
312
}
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
454
{
530
454
    if (!(s->options & SSL_OP_NO_ENCRYPT_THEN_MAC))
531
454
        s->ext.use_etm = 1;
532
533
454
    return 1;
534
454
}
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.34k
{
543
1.34k
#ifndef OPENSSL_NO_TLS1_3
544
1.34k
    PACKET psk_kex_modes;
545
1.34k
    unsigned int mode;
546
547
1.34k
    if (!PACKET_as_length_prefixed_1(pkt, &psk_kex_modes)
548
1.34k
            || PACKET_remaining(&psk_kex_modes) == 0) {
549
34
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
550
34
        return 0;
551
34
    }
552
553
6.55k
    while (PACKET_get_1(&psk_kex_modes, &mode)) {
554
5.24k
        if (mode == TLSEXT_KEX_MODE_KE_DHE)
555
1.82k
            s->ext.psk_kex_mode |= TLSEXT_KEX_MODE_FLAG_KE_DHE;
556
3.41k
        else if (mode == TLSEXT_KEX_MODE_KE
557
3.41k
                && (s->options & SSL_OP_ALLOW_NO_DHE_KEX) != 0)
558
0
            s->ext.psk_kex_mode |= TLSEXT_KEX_MODE_FLAG_KE;
559
5.24k
    }
560
1.31k
#endif
561
562
1.31k
    return 1;
563
1.34k
}
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
38
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_LENGTH_MISMATCH);
590
38
        return 0;
591
38
    }
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
2
        SSLfatal(s, SSL_AD_MISSING_EXTENSION,
604
2
                 SSL_R_MISSING_SUPPORTED_GROUPS_EXTENSION);
605
2
        return 0;
606
2
    }
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
2
        SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_BAD_KEY_SHARE);
615
2
        return 0;
616
2
    }
617
618
2.89k
    while (PACKET_remaining(&key_share_list) > 0) {
619
1.59k
        if (!PACKET_get_net_2(&key_share_list, &group_id)
620
1.59k
                || !PACKET_get_length_prefixed_2(&key_share_list, &encoded_pt)
621
1.59k
                || PACKET_remaining(&encoded_pt) == 0) {
622
44
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_LENGTH_MISMATCH);
623
44
            return 0;
624
44
        }
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.55k
        if (found)
631
133
            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.42k
        if (s->s3.group_id != 0
638
1.42k
                && (group_id != s->s3.group_id
639
89
                    || PACKET_remaining(&key_share_list) != 0)) {
640
33
            SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_BAD_KEY_SHARE);
641
33
            return 0;
642
33
        }
643
644
        /* Check if this share is in supported_groups sent from client */
645
1.38k
        if (!check_in_list(s, group_id, clntgroups, clnt_num_groups, 0)) {
646
12
            SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_BAD_KEY_SHARE);
647
12
            return 0;
648
12
        }
649
650
        /* Check if this share is for a group we can use */
651
1.37k
        if (!check_in_list(s, group_id, srvrgroups, srvr_num_groups, 1)
652
1.37k
                || !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.37k
                || !tls_valid_group(s, group_id, TLS1_3_VERSION, TLS1_3_VERSION,
658
1.05k
                                    0, NULL)) {
659
            /* Share not suitable */
660
323
            continue;
661
323
        }
662
663
1.05k
        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.05k
        s->s3.group_id = group_id;
670
        /* Cache the selected group ID in the SSL_SESSION */
671
1.05k
        s->session->kex_group = group_id;
672
673
1.05k
        if (tls13_set_encoded_pub_key(s->s3.peer_tmp,
674
1.05k
                                      PACKET_data(&encoded_pt),
675
1.05k
                                      PACKET_remaining(&encoded_pt)) <= 0) {
676
29
            SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_BAD_ECPOINT);
677
29
            return 0;
678
29
        }
679
680
1.02k
        found = 1;
681
1.02k
    }
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
34
{
690
34
#ifndef OPENSSL_NO_TLS1_3
691
34
    unsigned int format, version, key_share, group_id;
692
34
    EVP_MD_CTX *hctx;
693
34
    EVP_PKEY *pkey;
694
34
    PACKET cookie, raw, chhash, appcookie;
695
34
    WPACKET hrrpkt;
696
34
    const unsigned char *data, *mdin, *ciphdata;
697
34
    unsigned char hmac[SHA256_DIGEST_LENGTH];
698
34
    unsigned char hrr[MAX_HRR_SIZE];
699
34
    size_t rawlen, hmaclen, hrrlen, ciphlen;
700
34
    uint64_t tm, now;
701
702
    /* Ignore any cookie if we're not set up to verify it */
703
34
    if (s->ctx->verify_stateless_cookie_cb == NULL
704
34
            || (s->s3.flags & TLS1_FLAGS_STATELESS) == 0)
705
34
        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 = SSL_HRR_PENDING;
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.53k
{
897
5.53k
    PACKET supported_groups_list;
898
899
    /* Each group is 2 bytes and we must have at least 1. */
900
5.53k
    if (!PACKET_as_length_prefixed_2(pkt, &supported_groups_list)
901
5.53k
            || PACKET_remaining(&supported_groups_list) == 0
902
5.53k
            || (PACKET_remaining(&supported_groups_list) % 2) != 0) {
903
90
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
904
90
        return 0;
905
90
    }
906
907
5.44k
    if (!s->hit || SSL_IS_TLS13(s)) {
908
5.39k
        OPENSSL_free(s->ext.peer_supportedgroups);
909
5.39k
        s->ext.peer_supportedgroups = NULL;
910
5.39k
        s->ext.peer_supportedgroups_len = 0;
911
5.39k
        if (!tls1_save_u16(&supported_groups_list,
912
5.39k
                           &s->ext.peer_supportedgroups,
913
5.39k
                           &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.39k
    }
918
919
5.44k
    return 1;
920
5.44k
}
921
922
int tls_parse_ctos_ems(SSL *s, PACKET *pkt, unsigned int context, X509 *x,
923
                       size_t chainidx)
924
711
{
925
    /* The extension must always be empty */
926
711
    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
709
    if (s->options & SSL_OP_NO_EXTENDED_MASTER_SECRET)
932
0
        return 1;
933
934
709
    s->s3.flags |= TLS1_FLAGS_RECEIVED_EXTMS;
935
936
709
    return 1;
937
709
}
938
939
940
int tls_parse_ctos_early_data(SSL *s, PACKET *pkt, unsigned int context,
941
                              X509 *x, size_t chainidx)
942
1.25k
{
943
1.25k
    if (PACKET_remaining(pkt) != 0) {
944
9
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
945
9
        return 0;
946
9
    }
947
948
1.24k
    if (s->hello_retry_request != SSL_HRR_NONE) {
949
5
        SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_BAD_EXTENSION);
950
5
        return 0;
951
5
    }
952
953
1.23k
    return 1;
954
1.24k
}
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
97
{
987
97
    PACKET identities, binders, binder;
988
97
    size_t binderoffset, hashsize;
989
97
    SSL_SESSION *sess = NULL;
990
97
    unsigned int id, i, ext = 0;
991
97
    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
97
    if ((s->ext.psk_kex_mode
998
97
            & (TLSEXT_KEX_MODE_FLAG_KE | TLSEXT_KEX_MODE_FLAG_KE_DHE)) == 0)
999
2
        return 1;
1000
1001
95
    if (!PACKET_get_length_prefixed_2(pkt, &identities)) {
1002
10
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
1003
10
        return 0;
1004
10
    }
1005
1006
85
    s->ext.ticket_expected = 0;
1007
175
    for (id = 0; PACKET_remaining(&identities) != 0; id++) {
1008
140
        PACKET identity;
1009
140
        unsigned long ticket_agel;
1010
140
        size_t idlen;
1011
1012
140
        if (!PACKET_get_length_prefixed_2(&identities, &identity)
1013
140
                || !PACKET_get_net_4(&identities, &ticket_agel)) {
1014
21
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
1015
21
            return 0;
1016
21
        }
1017
1018
119
        idlen = PACKET_remaining(&identity);
1019
119
        if (s->psk_find_session_cb != NULL
1020
119
                && !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
119
#ifndef OPENSSL_NO_PSK
1027
119
        if(sess == NULL
1028
119
                && s->psk_server_callback != NULL
1029
119
                && 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
119
#endif /* OPENSSL_NO_PSK */
1074
1075
119
        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
119
        } else {
1097
119
            uint32_t ticket_age = 0, agesec, agems;
1098
119
            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
119
            if ((s->options & SSL_OP_NO_TICKET) != 0
1106
119
                    || (s->max_early_data > 0
1107
119
                        && (s->options & SSL_OP_NO_ANTI_REPLAY) == 0))
1108
0
                ret = tls_get_stateful_ticket(s, &identity, &sess);
1109
119
            else
1110
119
                ret = tls_decrypt_ticket(s, PACKET_data(&identity),
1111
119
                                         PACKET_remaining(&identity), NULL, 0,
1112
119
                                         &sess);
1113
1114
119
            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
118
            if (ret == SSL_TICKET_FATAL_ERR_MALLOC
1120
118
                    || 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
118
            if (ret == SSL_TICKET_NONE || ret == SSL_TICKET_NO_DECRYPT)
1125
71
                continue;
1126
1127
            /* Check for replay */
1128
47
            if (s->max_early_data > 0
1129
47
                    && (s->options & SSL_OP_NO_ANTI_REPLAY) == 0
1130
47
                    && !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
47
            ticket_age = (uint32_t)ticket_agel;
1137
47
            agesec = (uint32_t)(time(NULL) - sess->time);
1138
47
            agems = agesec * (uint32_t)1000;
1139
47
            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
47
            if (id == 0
1150
47
                    && sess->timeout >= (long)agesec
1151
47
                    && agems / (uint32_t)1000 == agesec
1152
47
                    && ticket_age <= agems + 1000
1153
47
                    && 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
47
        }
1161
1162
47
        md = ssl_md(s->ctx, sess->cipher->algorithm2);
1163
47
        if (md == NULL) {
1164
0
            SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1165
0
            goto err;
1166
0
        }
1167
47
        if (!EVP_MD_is_a(md,
1168
47
                EVP_MD_get0_name(ssl_md(s->ctx,
1169
47
                                        s->s3.tmp.new_cipher->algorithm2)))) {
1170
            /* The ciphersuite is not compatible with this session. */
1171
19
            SSL_SESSION_free(sess);
1172
19
            sess = NULL;
1173
19
            s->ext.early_data_ok = 0;
1174
19
            s->ext.ticket_expected = 0;
1175
19
            continue;
1176
19
        }
1177
28
        break;
1178
47
    }
1179
1180
63
    if (sess == NULL)
1181
35
        return 1;
1182
1183
28
    binderoffset = PACKET_data(pkt) - (const unsigned char *)s->init_buf->data;
1184
28
    hashsize = EVP_MD_get_size(md);
1185
1186
28
    if (!PACKET_get_length_prefixed_2(pkt, &binders)) {
1187
12
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
1188
12
        goto err;
1189
12
    }
1190
1191
30
    for (i = 0; i <= id; i++) {
1192
16
        if (!PACKET_get_length_prefixed_1(&binders, &binder)) {
1193
2
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
1194
2
            goto err;
1195
2
        }
1196
16
    }
1197
1198
14
    if (PACKET_remaining(&binder) != hashsize) {
1199
3
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
1200
3
        goto err;
1201
3
    }
1202
11
    if (tls_psk_do_binder(s, md, (const unsigned char *)s->init_buf->data,
1203
11
                          binderoffset, PACKET_data(&binder), NULL, sess, 0,
1204
11
                          ext) != 1) {
1205
        /* SSLfatal() already called */
1206
10
        goto err;
1207
10
    }
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
27
err:
1215
27
    SSL_SESSION_free(sess);
1216
27
    return 0;
1217
11
}
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
84
{
1224
84
    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
80
    s->post_handshake_auth = SSL_PHA_EXT_RECEIVED;
1231
1232
80
    return 1;
1233
84
}
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.35k
{
1242
7.35k
    if (!s->s3.send_connection_binding)
1243
6.11k
        return EXT_RETURN_NOT_SENT;
1244
1245
    /* Still add this even if SSL_OP_NO_RENEGOTIATION is set */
1246
1.23k
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_renegotiate)
1247
1.23k
            || !WPACKET_start_sub_packet_u16(pkt)
1248
1.23k
            || !WPACKET_start_sub_packet_u8(pkt)
1249
1.23k
            || !WPACKET_memcpy(pkt, s->s3.previous_client_finished,
1250
1.23k
                               s->s3.previous_client_finished_len)
1251
1.23k
            || !WPACKET_memcpy(pkt, s->s3.previous_server_finished,
1252
1.23k
                               s->s3.previous_server_finished_len)
1253
1.23k
            || !WPACKET_close(pkt)
1254
1.23k
            || !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.23k
    return EXT_RETURN_SENT;
1260
1.23k
}
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.77k
{
1266
5.77k
    if (s->servername_done != 1)
1267
5.77k
        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.77k
{
1290
5.77k
    if (!USE_MAX_FRAGMENT_LENGTH_EXT(s->session))
1291
5.69k
        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
81
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_max_fragment_length)
1298
81
        || !WPACKET_start_sub_packet_u16(pkt)
1299
81
        || !WPACKET_put_bytes_u8(pkt, s->session->ext.max_fragment_len_mode)
1300
81
        || !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
81
    return EXT_RETURN_SENT;
1306
81
}
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.25k
{
1312
4.25k
    unsigned long alg_k = s->s3.tmp.new_cipher->algorithm_mkey;
1313
4.25k
    unsigned long alg_a = s->s3.tmp.new_cipher->algorithm_auth;
1314
4.25k
    int using_ecc = ((alg_k & SSL_kECDHE) || (alg_a & SSL_aECDSA))
1315
4.25k
                    && (s->ext.peer_ecpointformats != NULL);
1316
4.25k
    const unsigned char *plist;
1317
4.25k
    size_t plistlen;
1318
1319
4.25k
    if (!using_ecc)
1320
3.32k
        return EXT_RETURN_NOT_SENT;
1321
1322
935
    tls1_get_formatlist(s, &plist, &plistlen);
1323
935
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_ec_point_formats)
1324
935
            || !WPACKET_start_sub_packet_u16(pkt)
1325
935
            || !WPACKET_sub_memcpy_u8(pkt, plist, plistlen)
1326
935
            || !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
935
    return EXT_RETURN_SENT;
1332
935
}
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.86k
{
1338
3.86k
    const uint16_t *groups;
1339
3.86k
    size_t numgroups, i, first = 1;
1340
3.86k
    int version;
1341
1342
    /* s->s3.group_id is non zero if we accepted a key_share */
1343
3.86k
    if (s->s3.group_id == 0)
1344
2.90k
        return EXT_RETURN_NOT_SENT;
1345
1346
    /* Get our list of supported groups */
1347
960
    tls1_get_supported_groups(s, &groups, &numgroups);
1348
960
    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
960
    version = SSL_version(s);
1355
1.21k
    for (i = 0; i < numgroups; i++) {
1356
1.18k
        uint16_t group = groups[i];
1357
1358
1.18k
        if (tls_valid_group(s, group, version, version, 0, NULL)
1359
1.18k
                && tls_group_allowed(s, group, SSL_SECOP_CURVE_SUPPORTED)) {
1360
1.18k
            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
960
                if (s->s3.group_id == group)
1366
935
                    return EXT_RETURN_NOT_SENT;
1367
1368
                /* Add extension header */
1369
25
                if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_supported_groups)
1370
                           /* Sub-packet for supported_groups extension */
1371
25
                        || !WPACKET_start_sub_packet_u16(pkt)
1372
25
                        || !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
25
                first = 0;
1378
25
            }
1379
250
            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
250
        }
1384
1.18k
    }
1385
1386
25
    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
25
    return EXT_RETURN_SENT;
1392
25
}
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.25k
{
1398
4.25k
    if (!s->ext.ticket_expected || !tls_use_ticket(s)) {
1399
3.40k
        s->ext.ticket_expected = 0;
1400
3.40k
        return EXT_RETURN_NOT_SENT;
1401
3.40k
    }
1402
1403
855
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_session_ticket)
1404
855
            || !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
855
    return EXT_RETURN_SENT;
1410
855
}
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.77k
{
1417
    /* We don't currently support this extension inside a CertificateRequest */
1418
5.77k
    if (context == SSL_EXT_TLS1_3_CERTIFICATE_REQUEST)
1419
0
        return EXT_RETURN_NOT_SENT;
1420
1421
5.77k
    if (!s->ext.status_expected)
1422
5.77k
        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.25k
{
1456
4.25k
    const unsigned char *npa;
1457
4.25k
    unsigned int npalen;
1458
4.25k
    int ret;
1459
4.25k
    int npn_seen = s->s3.npn_seen;
1460
1461
4.25k
    s->s3.npn_seen = 0;
1462
4.25k
    if (!npn_seen || s->ctx->ext.npn_advertised_cb == NULL)
1463
4.25k
        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.77k
{
1483
5.77k
    if (s->s3.alpn_selected == NULL)
1484
5.77k
        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.77k
{
1506
5.77k
    if (s->srtp_profile == NULL)
1507
5.77k
        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
2.90k
{
1526
2.90k
    if (!s->ext.use_etm)
1527
2.70k
        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
204
    if (s->s3.tmp.new_cipher->algorithm_mac == SSL_AEAD
1534
204
        || s->s3.tmp.new_cipher->algorithm_enc == SSL_RC4
1535
204
        || s->s3.tmp.new_cipher->algorithm_enc == SSL_eGOST2814789CNT
1536
204
        || s->s3.tmp.new_cipher->algorithm_enc == SSL_eGOST2814789CNT12
1537
204
        || s->s3.tmp.new_cipher->algorithm_enc == SSL_MAGMA
1538
204
        || s->s3.tmp.new_cipher->algorithm_enc == SSL_KUZNYECHIK) {
1539
48
        s->ext.use_etm = 0;
1540
48
        return EXT_RETURN_NOT_SENT;
1541
48
    }
1542
1543
156
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_encrypt_then_mac)
1544
156
            || !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
156
    return EXT_RETURN_SENT;
1550
156
}
1551
1552
EXT_RETURN tls_construct_stoc_ems(SSL *s, WPACKET *pkt, unsigned int context,
1553
                                  X509 *x, size_t chainidx)
1554
4.25k
{
1555
4.25k
    if ((s->s3.flags & TLS1_FLAGS_RECEIVED_EXTMS) == 0)
1556
3.15k
        return EXT_RETURN_NOT_SENT;
1557
1558
1.10k
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_extended_master_secret)
1559
1.10k
            || !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.10k
    return EXT_RETURN_SENT;
1565
1.10k
}
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.90k
{
1571
1.90k
    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.90k
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_supported_versions)
1577
1.90k
            || !WPACKET_start_sub_packet_u16(pkt)
1578
1.90k
            || !WPACKET_put_bytes_u16(pkt, s->version)
1579
1.90k
            || !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.90k
    return EXT_RETURN_SENT;
1585
1.90k
}
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.21k
{
1591
1.21k
#ifndef OPENSSL_NO_TLS1_3
1592
1.21k
    unsigned char *encodedPoint;
1593
1.21k
    size_t encoded_pt_len = 0;
1594
1.21k
    EVP_PKEY *ckey = s->s3.peer_tmp, *skey = NULL;
1595
1.21k
    const TLS_GROUP_INFO *ginf = NULL;
1596
1597
1.21k
    if (s->hello_retry_request == SSL_HRR_PENDING) {
1598
248
        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
248
        if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_key_share)
1603
248
                || !WPACKET_start_sub_packet_u16(pkt)
1604
248
                || !WPACKET_put_bytes_u16(pkt, s->s3.group_id)
1605
248
                || !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
248
        return EXT_RETURN_SENT;
1611
248
    }
1612
1613
966
    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
966
    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
966
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_key_share)
1630
966
            || !WPACKET_start_sub_packet_u16(pkt)
1631
966
            || !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
966
    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
966
    if (!ginf->is_kem) {
1642
        /* Regular KEX */
1643
966
        skey = ssl_generate_pkey(s, ckey);
1644
966
        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
966
        encoded_pt_len = EVP_PKEY_get1_encoded_public_key(skey, &encodedPoint);
1651
966
        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
966
        if (!WPACKET_sub_memcpy_u16(pkt, encodedPoint, encoded_pt_len)
1658
966
                || !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
966
        OPENSSL_free(encodedPoint);
1665
1666
        /*
1667
         * This causes the crypto state to be updated based on the derived keys
1668
         */
1669
966
        s->s3.tmp.pkey = skey;
1670
966
        if (ssl_derive(s, skey, ckey, 1) == 0) {
1671
            /* SSLfatal() already called */
1672
6
            return EXT_RETURN_FAIL;
1673
6
        }
1674
966
    } 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
960
    s->s3.did_kex = 1;
1713
960
    return EXT_RETURN_SENT;
1714
#else
1715
    return EXT_RETURN_FAIL;
1716
#endif
1717
966
}
1718
1719
EXT_RETURN tls_construct_stoc_cookie(SSL *s, WPACKET *pkt, unsigned int context,
1720
                                     X509 *x, size_t chainidx)
1721
388
{
1722
388
#ifndef OPENSSL_NO_TLS1_3
1723
388
    unsigned char *hashval1, *hashval2, *appcookie1, *appcookie2, *cookie;
1724
388
    unsigned char *hmac, *hmac2;
1725
388
    size_t startlen, ciphlen, totcookielen, hashlen, hmaclen, appcookielen;
1726
388
    EVP_MD_CTX *hctx;
1727
388
    EVP_PKEY *pkey;
1728
388
    int ret = EXT_RETURN_FAIL;
1729
1730
388
    if ((s->s3.flags & TLS1_FLAGS_STATELESS) == 0)
1731
388
        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.25k
{
1847
4.25k
    const unsigned char cryptopro_ext[36] = {
1848
4.25k
        0xfd, 0xe8,         /* 65000 */
1849
4.25k
        0x00, 0x20,         /* 32 bytes length */
1850
4.25k
        0x30, 0x1e, 0x30, 0x08, 0x06, 0x06, 0x2a, 0x85,
1851
4.25k
        0x03, 0x02, 0x02, 0x09, 0x30, 0x08, 0x06, 0x06,
1852
4.25k
        0x2a, 0x85, 0x03, 0x02, 0x02, 0x16, 0x30, 0x08,
1853
4.25k
        0x06, 0x06, 0x2a, 0x85, 0x03, 0x02, 0x02, 0x17
1854
4.25k
    };
1855
1856
4.25k
    if (((s->s3.tmp.new_cipher->id & 0xFFFF) != 0x80
1857
4.25k
         && (s->s3.tmp.new_cipher->id & 0xFFFF) != 0x81)
1858
4.25k
            || (SSL_get_options(s) & SSL_OP_CRYPTOPRO_TLSEXT_BUG) == 0)
1859
4.25k
        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.51k
{
1873
1.51k
    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.51k
    if (s->ext.early_data != SSL_EARLY_DATA_ACCEPTED)
1889
1.51k
        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.51k
{
1904
1.51k
    if (!s->hit)
1905
1.51k
        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
}