Coverage Report

Created: 2023-06-08 06:43

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