Coverage Report

Created: 2025-12-31 06:58

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