Coverage Report

Created: 2025-06-13 06:58

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