Coverage Report

Created: 2023-09-25 06:45

/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
869
{
44
869
    unsigned int ilen;
45
869
    const unsigned char *data;
46
47
    /* Parse the length byte */
48
869
    if (!PACKET_get_1(pkt, &ilen)
49
869
        || !PACKET_get_bytes(pkt, &data, ilen)) {
50
12
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PARSE_CTOS_RENEGOTIATE,
51
12
                 SSL_R_RENEGOTIATION_ENCODING_ERR);
52
12
        return 0;
53
12
    }
54
55
    /* Check that the extension matches */
56
857
    if (ilen != s->s3->previous_client_finished_len) {
57
10
        SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_F_TLS_PARSE_CTOS_RENEGOTIATE,
58
10
                 SSL_R_RENEGOTIATION_MISMATCH);
59
10
        return 0;
60
10
    }
61
62
847
    if (memcmp(data, s->s3->previous_client_finished,
63
847
               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
847
    s->s3->send_connection_binding = 1;
70
71
847
    return 1;
72
847
}
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.76k
{
100
1.76k
    unsigned int servname_type;
101
1.76k
    PACKET sni, hostname;
102
103
1.76k
    if (!PACKET_as_length_prefixed_2(pkt, &sni)
104
        /* ServerNameList must be at least 1 byte long. */
105
1.76k
        || PACKET_remaining(&sni) == 0) {
106
84
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PARSE_CTOS_SERVER_NAME,
107
84
                 SSL_R_BAD_EXTENSION);
108
84
        return 0;
109
84
    }
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.67k
    if (!PACKET_get_1(&sni, &servname_type)
123
1.67k
        || servname_type != TLSEXT_NAMETYPE_host_name
124
1.67k
        || !PACKET_as_length_prefixed_2(&sni, &hostname)) {
125
57
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PARSE_CTOS_SERVER_NAME,
126
57
                 SSL_R_BAD_EXTENSION);
127
57
        return 0;
128
57
    }
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.62k
    if (!s->hit || SSL_IS_TLS13(s)) {
135
1.61k
        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.61k
        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.60k
        OPENSSL_free(s->ext.hostname);
154
1.60k
        s->ext.hostname = NULL;
155
1.60k
        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.60k
        s->servername_done = 1;
162
1.60k
    } 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.61k
    return 1;
178
1.62k
}
179
180
int tls_parse_ctos_maxfragmentlen(SSL *s, PACKET *pkt, unsigned int context,
181
                                  X509 *x, size_t chainidx)
182
134
{
183
134
    unsigned int value;
184
185
134
    if (PACKET_remaining(pkt) != 1 || !PACKET_get_1(pkt, &value)) {
186
27
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PARSE_CTOS_MAXFRAGMENTLEN,
187
27
                 SSL_R_BAD_EXTENSION);
188
27
        return 0;
189
27
    }
190
191
    /* Received |value| should be a valid max-fragment-length code. */
192
107
    if (!IS_MAX_FRAGMENT_LENGTH_EXT_VALID(value)) {
193
11
        SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER,
194
11
                 SSL_F_TLS_PARSE_CTOS_MAXFRAGMENTLEN,
195
11
                 SSL_R_SSL3_EXT_INVALID_MAX_FRAGMENT_LENGTH);
196
11
        return 0;
197
11
    }
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
96
    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
93
    s->session->ext.max_fragment_len_mode = value;
216
93
    return 1;
217
96
}
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
57
{
223
57
    PACKET srp_I;
224
225
57
    if (!PACKET_as_length_prefixed_1(pkt, &srp_I)
226
57
            || PACKET_contains_zero_byte(&srp_I)) {
227
31
        SSLfatal(s, SSL_AD_DECODE_ERROR,
228
31
                 SSL_F_TLS_PARSE_CTOS_SRP,
229
31
                 SSL_R_BAD_EXTENSION);
230
31
        return 0;
231
31
    }
232
233
    /*
234
     * TODO(openssl-team): currently, we re-authenticate the user
235
     * upon resumption. Instead, we MUST ignore the login.
236
     */
237
26
    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
26
    return 1;
244
26
}
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.31k
{
251
1.31k
    PACKET ec_point_format_list;
252
253
1.31k
    if (!PACKET_as_length_prefixed_1(pkt, &ec_point_format_list)
254
1.31k
        || PACKET_remaining(&ec_point_format_list) == 0) {
255
45
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PARSE_CTOS_EC_PT_FORMATS,
256
45
                 SSL_R_BAD_EXTENSION);
257
45
        return 0;
258
45
    }
259
260
1.26k
    if (!s->hit) {
261
1.19k
        if (!PACKET_memdup(&ec_point_format_list,
262
1.19k
                           &s->ext.peer_ecpointformats,
263
1.19k
                           &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.19k
    }
269
270
1.26k
    return 1;
271
1.26k
}
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.10k
{
277
1.10k
    if (s->ext.session_ticket_cb &&
278
1.10k
            !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.10k
    return 1;
287
1.10k
}
288
289
int tls_parse_ctos_sig_algs_cert(SSL *s, PACKET *pkt, unsigned int context,
290
                                 X509 *x, size_t chainidx)
291
531
{
292
531
    PACKET supported_sig_algs;
293
294
531
    if (!PACKET_as_length_prefixed_2(pkt, &supported_sig_algs)
295
531
            || PACKET_remaining(&supported_sig_algs) == 0) {
296
64
        SSLfatal(s, SSL_AD_DECODE_ERROR,
297
64
                 SSL_F_TLS_PARSE_CTOS_SIG_ALGS_CERT, SSL_R_BAD_EXTENSION);
298
64
        return 0;
299
64
    }
300
301
467
    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
462
    return 1;
308
467
}
309
310
int tls_parse_ctos_sig_algs(SSL *s, PACKET *pkt, unsigned int context, X509 *x,
311
                            size_t chainidx)
312
4.06k
{
313
4.06k
    PACKET supported_sig_algs;
314
315
4.06k
    if (!PACKET_as_length_prefixed_2(pkt, &supported_sig_algs)
316
4.06k
            || PACKET_remaining(&supported_sig_algs) == 0) {
317
85
        SSLfatal(s, SSL_AD_DECODE_ERROR,
318
85
                 SSL_F_TLS_PARSE_CTOS_SIG_ALGS, SSL_R_BAD_EXTENSION);
319
85
        return 0;
320
85
    }
321
322
3.98k
    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
3.97k
    return 1;
329
3.98k
}
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.95k
{
335
2.95k
    PACKET responder_id_list, exts;
336
337
    /* We ignore this in a resumption handshake */
338
2.95k
    if (s->hit)
339
18
        return 1;
340
341
    /* Not defined if we get one of these in a client Certificate */
342
2.93k
    if (x != NULL)
343
0
        return 1;
344
345
2.93k
    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.92k
    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
261
        s->ext.status_type = TLSEXT_STATUSTYPE_nothing;
356
261
        return 1;
357
261
    }
358
359
2.66k
    if (!PACKET_get_length_prefixed_2 (pkt, &responder_id_list)) {
360
31
        SSLfatal(s, SSL_AD_DECODE_ERROR,
361
31
                 SSL_F_TLS_PARSE_CTOS_STATUS_REQUEST, SSL_R_BAD_EXTENSION);
362
31
        return 0;
363
31
    }
364
365
    /*
366
     * We remove any OCSP_RESPIDs from a previous handshake
367
     * to prevent unbounded memory growth - CVE-2016-6304
368
     */
369
2.63k
    sk_OCSP_RESPID_pop_free(s->ext.ocsp.ids, OCSP_RESPID_free);
370
2.63k
    if (PACKET_remaining(&responder_id_list) > 0) {
371
1.73k
        s->ext.ocsp.ids = sk_OCSP_RESPID_new_null();
372
1.73k
        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.73k
    } else {
378
905
        s->ext.ocsp.ids = NULL;
379
905
    }
380
381
2.68k
    while (PACKET_remaining(&responder_id_list) > 0) {
382
1.77k
        OCSP_RESPID *id;
383
1.77k
        PACKET responder_id;
384
1.77k
        const unsigned char *id_data;
385
386
1.77k
        if (!PACKET_get_length_prefixed_2(&responder_id_list, &responder_id)
387
1.77k
                || PACKET_remaining(&responder_id) == 0) {
388
37
            SSLfatal(s, SSL_AD_DECODE_ERROR,
389
37
                     SSL_F_TLS_PARSE_CTOS_STATUS_REQUEST, SSL_R_BAD_EXTENSION);
390
37
            return 0;
391
37
        }
392
393
1.73k
        id_data = PACKET_data(&responder_id);
394
        /* TODO(size_t): Convert d2i_* to size_t */
395
1.73k
        id = d2i_OCSP_RESPID(NULL, &id_data,
396
1.73k
                             (int)PACKET_remaining(&responder_id));
397
1.73k
        if (id == NULL) {
398
1.65k
            SSLfatal(s, SSL_AD_DECODE_ERROR,
399
1.65k
                     SSL_F_TLS_PARSE_CTOS_STATUS_REQUEST, SSL_R_BAD_EXTENSION);
400
1.65k
            return 0;
401
1.65k
        }
402
403
78
        if (id_data != PACKET_end(&responder_id)) {
404
28
            OCSP_RESPID_free(id);
405
28
            SSLfatal(s, SSL_AD_DECODE_ERROR,
406
28
                     SSL_F_TLS_PARSE_CTOS_STATUS_REQUEST, SSL_R_BAD_EXTENSION);
407
408
28
            return 0;
409
28
        }
410
411
50
        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
50
    }
419
420
    /* Read in request_extensions */
421
911
    if (!PACKET_as_length_prefixed_2(pkt, &exts)) {
422
45
        SSLfatal(s, SSL_AD_DECODE_ERROR,
423
45
                 SSL_F_TLS_PARSE_CTOS_STATUS_REQUEST, SSL_R_BAD_EXTENSION);
424
45
        return 0;
425
45
    }
426
427
866
    if (PACKET_remaining(&exts) > 0) {
428
117
        const unsigned char *ext_data = PACKET_data(&exts);
429
430
117
        sk_X509_EXTENSION_pop_free(s->ext.ocsp.exts,
431
117
                                   X509_EXTENSION_free);
432
117
        s->ext.ocsp.exts =
433
117
            d2i_X509_EXTENSIONS(NULL, &ext_data, (int)PACKET_remaining(&exts));
434
117
        if (s->ext.ocsp.exts == NULL || ext_data != PACKET_end(&exts)) {
435
114
            SSLfatal(s, SSL_AD_DECODE_ERROR,
436
114
                     SSL_F_TLS_PARSE_CTOS_STATUS_REQUEST, SSL_R_BAD_EXTENSION);
437
114
            return 0;
438
114
        }
439
117
    }
440
441
752
    return 1;
442
866
}
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
7
{
449
    /*
450
     * We shouldn't accept this extension on a
451
     * renegotiation.
452
     */
453
7
    if (SSL_IS_FIRST_HANDSHAKE(s))
454
7
        s->s3->npn_seen = 1;
455
456
7
    return 1;
457
7
}
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
406
{
467
406
    PACKET protocol_list, save_protocol_list, protocol;
468
469
406
    if (!SSL_IS_FIRST_HANDSHAKE(s))
470
0
        return 1;
471
472
406
    if (!PACKET_as_length_prefixed_2(pkt, &protocol_list)
473
406
        || PACKET_remaining(&protocol_list) < 2) {
474
52
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PARSE_CTOS_ALPN,
475
52
                 SSL_R_BAD_EXTENSION);
476
52
        return 0;
477
52
    }
478
479
354
    save_protocol_list = protocol_list;
480
1.62k
    do {
481
        /* Protocol names can't be empty. */
482
1.62k
        if (!PACKET_get_length_prefixed_1(&protocol_list, &protocol)
483
1.62k
                || PACKET_remaining(&protocol) == 0) {
484
42
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PARSE_CTOS_ALPN,
485
42
                     SSL_R_BAD_EXTENSION);
486
42
            return 0;
487
42
        }
488
1.62k
    } while (PACKET_remaining(&protocol_list) != 0);
489
490
312
    OPENSSL_free(s->s3->alpn_proposed);
491
312
    s->s3->alpn_proposed = NULL;
492
312
    s->s3->alpn_proposed_len = 0;
493
312
    if (!PACKET_memdup(&save_protocol_list,
494
312
                       &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
312
    return 1;
501
312
}
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
454
{
575
454
    if (!(s->options & SSL_OP_NO_ENCRYPT_THEN_MAC))
576
454
        s->ext.use_etm = 1;
577
578
454
    return 1;
579
454
}
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.34k
{
588
1.34k
#ifndef OPENSSL_NO_TLS1_3
589
1.34k
    PACKET psk_kex_modes;
590
1.34k
    unsigned int mode;
591
592
1.34k
    if (!PACKET_as_length_prefixed_1(pkt, &psk_kex_modes)
593
1.34k
            || PACKET_remaining(&psk_kex_modes) == 0) {
594
34
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PARSE_CTOS_PSK_KEX_MODES,
595
34
                 SSL_R_BAD_EXTENSION);
596
34
        return 0;
597
34
    }
598
599
6.55k
    while (PACKET_get_1(&psk_kex_modes, &mode)) {
600
5.24k
        if (mode == TLSEXT_KEX_MODE_KE_DHE)
601
1.82k
            s->ext.psk_kex_mode |= TLSEXT_KEX_MODE_FLAG_KE_DHE;
602
3.41k
        else if (mode == TLSEXT_KEX_MODE_KE
603
3.41k
                && (s->options & SSL_OP_ALLOW_NO_DHE_KEX) != 0)
604
0
            s->ext.psk_kex_mode |= TLSEXT_KEX_MODE_FLAG_KE;
605
5.24k
    }
606
1.31k
#endif
607
608
1.31k
    return 1;
609
1.34k
}
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
6
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PARSE_CTOS_KEY_SHARE,
637
6
                 SSL_R_LENGTH_MISMATCH);
638
6
        return 0;
639
6
    }
640
641
    /* Get our list of supported groups */
642
891
    tls1_get_supported_groups(s, &srvrgroups, &srvr_num_groups);
643
    /* Get the clients list of supported groups. */
644
891
    tls1_get_peer_groups(s, &clntgroups, &clnt_num_groups);
645
891
    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
890
    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
1
        SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_F_TLS_PARSE_CTOS_KEY_SHARE,
663
1
                 SSL_R_BAD_KEY_SHARE);
664
1
        return 0;
665
1
    }
666
667
2.11k
    while (PACKET_remaining(&key_share_list) > 0) {
668
1.38k
        if (!PACKET_get_net_2(&key_share_list, &group_id)
669
1.38k
                || !PACKET_get_length_prefixed_2(&key_share_list, &encoded_pt)
670
1.38k
                || PACKET_remaining(&encoded_pt) == 0) {
671
67
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PARSE_CTOS_KEY_SHARE,
672
67
                     SSL_R_LENGTH_MISMATCH);
673
67
            return 0;
674
67
        }
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.32k
        if (found)
681
476
            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
846
        if (s->s3->group_id != 0
688
846
                && (group_id != s->s3->group_id
689
30
                    || PACKET_remaining(&key_share_list) != 0)) {
690
19
            SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER,
691
19
                     SSL_F_TLS_PARSE_CTOS_KEY_SHARE, SSL_R_BAD_KEY_SHARE);
692
19
            return 0;
693
19
        }
694
695
        /* Check if this share is in supported_groups sent from client */
696
827
        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
821
        if (!check_in_list(s, group_id, srvrgroups, srvr_num_groups, 1)) {
704
            /* Share not suitable */
705
126
            continue;
706
126
        }
707
708
695
        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
695
        s->s3->group_id = group_id;
715
716
695
        if (!EVP_PKEY_set1_tls_encodedpoint(s->s3->peer_tmp,
717
695
                PACKET_data(&encoded_pt),
718
695
                PACKET_remaining(&encoded_pt))) {
719
68
            SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER,
720
68
                     SSL_F_TLS_PARSE_CTOS_KEY_SHARE, SSL_R_BAD_ECPOINT);
721
68
            return 0;
722
68
        }
723
724
627
        found = 1;
725
627
    }
726
729
#endif
727
728
729
    return 1;
729
889
}
730
731
int tls_parse_ctos_cookie(SSL *s, PACKET *pkt, unsigned int context, X509 *x,
732
                          size_t chainidx)
733
34
{
734
34
#ifndef OPENSSL_NO_TLS1_3
735
34
    unsigned int format, version, key_share, group_id;
736
34
    EVP_MD_CTX *hctx;
737
34
    EVP_PKEY *pkey;
738
34
    PACKET cookie, raw, chhash, appcookie;
739
34
    WPACKET hrrpkt;
740
34
    const unsigned char *data, *mdin, *ciphdata;
741
34
    unsigned char hmac[SHA256_DIGEST_LENGTH];
742
34
    unsigned char hrr[MAX_HRR_SIZE];
743
34
    size_t rawlen, hmaclen, hrrlen, ciphlen;
744
34
    uint64_t tm, now;
745
746
    /* Ignore any cookie if we're not set up to verify it */
747
34
    if (s->ctx->verify_stateless_cookie_cb == NULL
748
34
            || (s->s3->flags & TLS1_FLAGS_STATELESS) == 0)
749
34
        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.53k
{
958
5.53k
    PACKET supported_groups_list;
959
960
    /* Each group is 2 bytes and we must have at least 1. */
961
5.53k
    if (!PACKET_as_length_prefixed_2(pkt, &supported_groups_list)
962
5.53k
            || PACKET_remaining(&supported_groups_list) == 0
963
5.53k
            || (PACKET_remaining(&supported_groups_list) % 2) != 0) {
964
90
        SSLfatal(s, SSL_AD_DECODE_ERROR,
965
90
                 SSL_F_TLS_PARSE_CTOS_SUPPORTED_GROUPS, SSL_R_BAD_EXTENSION);
966
90
        return 0;
967
90
    }
968
969
5.44k
    if (!s->hit || SSL_IS_TLS13(s)) {
970
5.39k
        OPENSSL_free(s->ext.peer_supportedgroups);
971
5.39k
        s->ext.peer_supportedgroups = NULL;
972
5.39k
        s->ext.peer_supportedgroups_len = 0;
973
5.39k
        if (!tls1_save_u16(&supported_groups_list,
974
5.39k
                           &s->ext.peer_supportedgroups,
975
5.39k
                           &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.39k
    }
982
983
5.44k
    return 1;
984
5.44k
}
985
#endif
986
987
int tls_parse_ctos_ems(SSL *s, PACKET *pkt, unsigned int context, X509 *x,
988
                       size_t chainidx)
989
533
{
990
    /* The extension must always be empty */
991
533
    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
532
    s->s3->flags |= TLS1_FLAGS_RECEIVED_EXTMS;
998
999
532
    return 1;
1000
533
}
1001
1002
1003
int tls_parse_ctos_early_data(SSL *s, PACKET *pkt, unsigned int context,
1004
                              X509 *x, size_t chainidx)
1005
1.25k
{
1006
1.25k
    if (PACKET_remaining(pkt) != 0) {
1007
9
        SSLfatal(s, SSL_AD_DECODE_ERROR,
1008
9
                 SSL_F_TLS_PARSE_CTOS_EARLY_DATA, SSL_R_BAD_EXTENSION);
1009
9
        return 0;
1010
9
    }
1011
1012
1.24k
    if (s->hello_retry_request != SSL_HRR_NONE) {
1013
5
        SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER,
1014
5
                 SSL_F_TLS_PARSE_CTOS_EARLY_DATA, SSL_R_BAD_EXTENSION);
1015
5
        return 0;
1016
5
    }
1017
1018
1.23k
    return 1;
1019
1.24k
}
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
84
{
1052
84
    PACKET identities, binders, binder;
1053
84
    size_t binderoffset, hashsize;
1054
84
    SSL_SESSION *sess = NULL;
1055
84
    unsigned int id, i, ext = 0;
1056
84
    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
84
    if ((s->ext.psk_kex_mode
1063
84
            & (TLSEXT_KEX_MODE_FLAG_KE | TLSEXT_KEX_MODE_FLAG_KE_DHE)) == 0)
1064
3
        return 1;
1065
1066
81
    if (!PACKET_get_length_prefixed_2(pkt, &identities)) {
1067
4
        SSLfatal(s, SSL_AD_DECODE_ERROR,
1068
4
                 SSL_F_TLS_PARSE_CTOS_PSK, SSL_R_BAD_EXTENSION);
1069
4
        return 0;
1070
4
    }
1071
1072
77
    s->ext.ticket_expected = 0;
1073
154
    for (id = 0; PACKET_remaining(&identities) != 0; id++) {
1074
134
        PACKET identity;
1075
134
        unsigned long ticket_agel;
1076
134
        size_t idlen;
1077
1078
134
        if (!PACKET_get_length_prefixed_2(&identities, &identity)
1079
134
                || !PACKET_get_net_4(&identities, &ticket_agel)) {
1080
20
            SSLfatal(s, SSL_AD_DECODE_ERROR,
1081
20
                     SSL_F_TLS_PARSE_CTOS_PSK, SSL_R_BAD_EXTENSION);
1082
20
            return 0;
1083
20
        }
1084
1085
114
        idlen = PACKET_remaining(&identity);
1086
114
        if (s->psk_find_session_cb != NULL
1087
114
                && !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
114
#ifndef OPENSSL_NO_PSK
1095
114
        if(sess == NULL
1096
114
                && s->psk_server_callback != NULL
1097
114
                && 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
114
#endif /* OPENSSL_NO_PSK */
1146
1147
114
        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
114
        } else {
1170
114
            uint32_t ticket_age = 0, agesec, agems;
1171
114
            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
114
            if ((s->options & SSL_OP_NO_TICKET) != 0
1179
114
                    || (s->max_early_data > 0
1180
114
                        && (s->options & SSL_OP_NO_ANTI_REPLAY) == 0))
1181
0
                ret = tls_get_stateful_ticket(s, &identity, &sess);
1182
114
            else
1183
114
                ret = tls_decrypt_ticket(s, PACKET_data(&identity),
1184
114
                                         PACKET_remaining(&identity), NULL, 0,
1185
114
                                         &sess);
1186
1187
114
            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
110
            if (ret == SSL_TICKET_FATAL_ERR_MALLOC
1194
110
                    || 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
110
            if (ret == SSL_TICKET_NONE || ret == SSL_TICKET_NO_DECRYPT)
1200
71
                continue;
1201
1202
            /* Check for replay */
1203
39
            if (s->max_early_data > 0
1204
39
                    && (s->options & SSL_OP_NO_ANTI_REPLAY) == 0
1205
39
                    && !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
39
            ticket_age = (uint32_t)ticket_agel;
1212
39
            agesec = (uint32_t)(time(NULL) - sess->time);
1213
39
            agems = agesec * (uint32_t)1000;
1214
39
            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
39
            if (id == 0
1225
39
                    && sess->timeout >= (long)agesec
1226
39
                    && agems / (uint32_t)1000 == agesec
1227
39
                    && ticket_age <= agems + 1000
1228
39
                    && 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
1
                s->ext.early_data_ok = 1;
1234
1
            }
1235
39
        }
1236
1237
39
        md = ssl_md(sess->cipher->algorithm2);
1238
39
        if (md != ssl_md(s->s3->tmp.new_cipher->algorithm2)) {
1239
            /* The ciphersuite is not compatible with this session. */
1240
6
            SSL_SESSION_free(sess);
1241
6
            sess = NULL;
1242
6
            s->ext.early_data_ok = 0;
1243
6
            s->ext.ticket_expected = 0;
1244
6
            continue;
1245
6
        }
1246
33
        break;
1247
39
    }
1248
1249
53
    if (sess == NULL)
1250
20
        return 1;
1251
1252
33
    binderoffset = PACKET_data(pkt) - (const unsigned char *)s->init_buf->data;
1253
33
    hashsize = EVP_MD_size(md);
1254
1255
33
    if (!PACKET_get_length_prefixed_2(pkt, &binders)) {
1256
13
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PARSE_CTOS_PSK,
1257
13
                 SSL_R_BAD_EXTENSION);
1258
13
        goto err;
1259
13
    }
1260
1261
36
    for (i = 0; i <= id; i++) {
1262
20
        if (!PACKET_get_length_prefixed_1(&binders, &binder)) {
1263
4
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PARSE_CTOS_PSK,
1264
4
                     SSL_R_BAD_EXTENSION);
1265
4
            goto err;
1266
4
        }
1267
20
    }
1268
1269
16
    if (PACKET_remaining(&binder) != hashsize) {
1270
4
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PARSE_CTOS_PSK,
1271
4
                 SSL_R_BAD_EXTENSION);
1272
4
        goto err;
1273
4
    }
1274
12
    if (tls_psk_do_binder(s, md, (const unsigned char *)s->init_buf->data,
1275
12
                          binderoffset, PACKET_data(&binder), NULL, sess, 0,
1276
12
                          ext) != 1) {
1277
        /* SSLfatal() already called */
1278
10
        goto err;
1279
10
    }
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
31
err:
1287
31
    SSL_SESSION_free(sess);
1288
31
    return 0;
1289
12
}
1290
1291
int tls_parse_ctos_post_handshake_auth(SSL *s, PACKET *pkt, unsigned int context,
1292
                                       X509 *x, size_t chainidx)
1293
84
{
1294
84
    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
80
    s->post_handshake_auth = SSL_PHA_EXT_RECEIVED;
1301
1302
80
    return 1;
1303
84
}
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.35k
{
1312
7.35k
    if (!s->s3->send_connection_binding)
1313
6.11k
        return EXT_RETURN_NOT_SENT;
1314
1315
    /* Still add this even if SSL_OP_NO_RENEGOTIATION is set */
1316
1.23k
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_renegotiate)
1317
1.23k
            || !WPACKET_start_sub_packet_u16(pkt)
1318
1.23k
            || !WPACKET_start_sub_packet_u8(pkt)
1319
1.23k
            || !WPACKET_memcpy(pkt, s->s3->previous_client_finished,
1320
1.23k
                               s->s3->previous_client_finished_len)
1321
1.23k
            || !WPACKET_memcpy(pkt, s->s3->previous_server_finished,
1322
1.23k
                               s->s3->previous_server_finished_len)
1323
1.23k
            || !WPACKET_close(pkt)
1324
1.23k
            || !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.23k
    return EXT_RETURN_SENT;
1331
1.23k
}
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.77k
{
1337
5.77k
    if (s->servername_done != 1)
1338
5.77k
        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.77k
{
1362
5.77k
    if (!USE_MAX_FRAGMENT_LENGTH_EXT(s->session))
1363
5.69k
        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
81
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_max_fragment_length)
1370
81
        || !WPACKET_start_sub_packet_u16(pkt)
1371
81
        || !WPACKET_put_bytes_u8(pkt, s->session->ext.max_fragment_len_mode)
1372
81
        || !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
81
    return EXT_RETURN_SENT;
1379
81
}
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.25k
{
1386
4.25k
    unsigned long alg_k = s->s3->tmp.new_cipher->algorithm_mkey;
1387
4.25k
    unsigned long alg_a = s->s3->tmp.new_cipher->algorithm_auth;
1388
4.25k
    int using_ecc = ((alg_k & SSL_kECDHE) || (alg_a & SSL_aECDSA))
1389
4.25k
                    && (s->ext.peer_ecpointformats != NULL);
1390
4.25k
    const unsigned char *plist;
1391
4.25k
    size_t plistlen;
1392
1393
4.25k
    if (!using_ecc)
1394
3.32k
        return EXT_RETURN_NOT_SENT;
1395
1396
935
    tls1_get_formatlist(s, &plist, &plistlen);
1397
935
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_ec_point_formats)
1398
935
            || !WPACKET_start_sub_packet_u16(pkt)
1399
935
            || !WPACKET_sub_memcpy_u8(pkt, plist, plistlen)
1400
935
            || !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
935
    return EXT_RETURN_SENT;
1407
935
}
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.90k
{
1415
1.90k
    const uint16_t *groups;
1416
1.90k
    size_t numgroups, i, first = 1;
1417
1418
    /* s->s3->group_id is non zero if we accepted a key_share */
1419
1.90k
    if (s->s3->group_id == 0)
1420
1.35k
        return EXT_RETURN_NOT_SENT;
1421
1422
    /* Get our list of supported groups */
1423
552
    tls1_get_supported_groups(s, &groups, &numgroups);
1424
552
    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.54k
    for (i = 0; i < numgroups; i++) {
1432
1.34k
        uint16_t group = groups[i];
1433
1434
1.34k
        if (tls_curve_allowed(s, group, SSL_SECOP_CURVE_SUPPORTED)) {
1435
1.34k
            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
552
                if (s->s3->group_id == group)
1441
353
                    return EXT_RETURN_NOT_SENT;
1442
1443
                /* Add extension header */
1444
199
                if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_supported_groups)
1445
                           /* Sub-packet for supported_groups extension */
1446
199
                        || !WPACKET_start_sub_packet_u16(pkt)
1447
199
                        || !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
199
                first = 0;
1455
199
            }
1456
995
            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
995
        }
1463
1.34k
    }
1464
1465
199
    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
199
    return EXT_RETURN_SENT;
1473
199
}
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.25k
{
1480
4.25k
    if (!s->ext.ticket_expected || !tls_use_ticket(s)) {
1481
3.40k
        s->ext.ticket_expected = 0;
1482
3.40k
        return EXT_RETURN_NOT_SENT;
1483
3.40k
    }
1484
1485
855
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_session_ticket)
1486
855
            || !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
855
    return EXT_RETURN_SENT;
1493
855
}
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.77k
{
1500
    /* We don't currently support this extension inside a CertificateRequest */
1501
5.77k
    if (context == SSL_EXT_TLS1_3_CERTIFICATE_REQUEST)
1502
0
        return EXT_RETURN_NOT_SENT;
1503
1504
5.77k
    if (!s->ext.status_expected)
1505
5.77k
        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.25k
{
1541
4.25k
    const unsigned char *npa;
1542
4.25k
    unsigned int npalen;
1543
4.25k
    int ret;
1544
4.25k
    int npn_seen = s->s3->npn_seen;
1545
1546
4.25k
    s->s3->npn_seen = 0;
1547
4.25k
    if (!npn_seen || s->ctx->ext.npn_advertised_cb == NULL)
1548
4.25k
        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.77k
{
1570
5.77k
    if (s->s3->alpn_selected == NULL)
1571
5.77k
        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.77k
{
1594
5.77k
    if (s->srtp_profile == NULL)
1595
5.77k
        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.35k
{
1615
1.35k
    if (!s->ext.use_etm)
1616
1.19k
        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
159
    if (s->s3->tmp.new_cipher->algorithm_mac == SSL_AEAD
1623
159
        || s->s3->tmp.new_cipher->algorithm_enc == SSL_RC4
1624
159
        || s->s3->tmp.new_cipher->algorithm_enc == SSL_eGOST2814789CNT
1625
159
        || s->s3->tmp.new_cipher->algorithm_enc == SSL_eGOST2814789CNT12) {
1626
44
        s->ext.use_etm = 0;
1627
44
        return EXT_RETURN_NOT_SENT;
1628
44
    }
1629
1630
115
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_encrypt_then_mac)
1631
115
            || !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
115
    return EXT_RETURN_SENT;
1638
115
}
1639
1640
EXT_RETURN tls_construct_stoc_ems(SSL *s, WPACKET *pkt, unsigned int context,
1641
                                  X509 *x, size_t chainidx)
1642
4.25k
{
1643
4.25k
    if ((s->s3->flags & TLS1_FLAGS_RECEIVED_EXTMS) == 0)
1644
3.15k
        return EXT_RETURN_NOT_SENT;
1645
1646
1.10k
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_extended_master_secret)
1647
1.10k
            || !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.10k
    return EXT_RETURN_SENT;
1654
1.10k
}
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.90k
{
1660
1.90k
    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.90k
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_supported_versions)
1668
1.90k
            || !WPACKET_start_sub_packet_u16(pkt)
1669
1.90k
            || !WPACKET_put_bytes_u16(pkt, s->version)
1670
1.90k
            || !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.90k
    return EXT_RETURN_SENT;
1678
1.90k
}
1679
1680
EXT_RETURN tls_construct_stoc_key_share(SSL *s, WPACKET *pkt,
1681
                                        unsigned int context, X509 *x,
1682
                                        size_t chainidx)
1683
695
{
1684
695
#ifndef OPENSSL_NO_TLS1_3
1685
695
    unsigned char *encodedPoint;
1686
695
    size_t encoded_pt_len = 0;
1687
695
    EVP_PKEY *ckey = s->s3->peer_tmp, *skey = NULL;
1688
1689
695
    if (s->hello_retry_request == SSL_HRR_PENDING) {
1690
140
        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
140
        if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_key_share)
1695
140
                || !WPACKET_start_sub_packet_u16(pkt)
1696
140
                || !WPACKET_put_bytes_u16(pkt, s->s3->group_id)
1697
140
                || !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
140
        return EXT_RETURN_SENT;
1705
140
    }
1706
1707
555
    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
555
    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
555
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_key_share)
1725
555
            || !WPACKET_start_sub_packet_u16(pkt)
1726
555
            || !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
555
    skey = ssl_generate_pkey(ckey);
1733
555
    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
555
    encoded_pt_len = EVP_PKEY_get1_tls_encodedpoint(skey, &encodedPoint);
1741
555
    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
555
    if (!WPACKET_sub_memcpy_u16(pkt, encodedPoint, encoded_pt_len)
1749
555
            || !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
555
    OPENSSL_free(encodedPoint);
1757
1758
    /* This causes the crypto state to be updated based on the derived keys */
1759
555
    s->s3->tmp.pkey = skey;
1760
555
    if (ssl_derive(s, skey, ckey, 1) == 0) {
1761
        /* SSLfatal() already called */
1762
3
        return EXT_RETURN_FAIL;
1763
3
    }
1764
552
    return EXT_RETURN_SENT;
1765
#else
1766
    return EXT_RETURN_FAIL;
1767
#endif
1768
555
}
1769
1770
EXT_RETURN tls_construct_stoc_cookie(SSL *s, WPACKET *pkt, unsigned int context,
1771
                                     X509 *x, size_t chainidx)
1772
388
{
1773
388
#ifndef OPENSSL_NO_TLS1_3
1774
388
    unsigned char *hashval1, *hashval2, *appcookie1, *appcookie2, *cookie;
1775
388
    unsigned char *hmac, *hmac2;
1776
388
    size_t startlen, ciphlen, totcookielen, hashlen, hmaclen, appcookielen;
1777
388
    EVP_MD_CTX *hctx;
1778
388
    EVP_PKEY *pkey;
1779
388
    int ret = EXT_RETURN_FAIL;
1780
1781
388
    if ((s->s3->flags & TLS1_FLAGS_STATELESS) == 0)
1782
388
        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.25k
{
1907
4.25k
    const unsigned char cryptopro_ext[36] = {
1908
4.25k
        0xfd, 0xe8,         /* 65000 */
1909
4.25k
        0x00, 0x20,         /* 32 bytes length */
1910
4.25k
        0x30, 0x1e, 0x30, 0x08, 0x06, 0x06, 0x2a, 0x85,
1911
4.25k
        0x03, 0x02, 0x02, 0x09, 0x30, 0x08, 0x06, 0x06,
1912
4.25k
        0x2a, 0x85, 0x03, 0x02, 0x02, 0x16, 0x30, 0x08,
1913
4.25k
        0x06, 0x06, 0x2a, 0x85, 0x03, 0x02, 0x02, 0x17
1914
4.25k
    };
1915
1916
4.25k
    if (((s->s3->tmp.new_cipher->id & 0xFFFF) != 0x80
1917
4.25k
         && (s->s3->tmp.new_cipher->id & 0xFFFF) != 0x81)
1918
4.25k
            || (SSL_get_options(s) & SSL_OP_CRYPTOPRO_TLSEXT_BUG) == 0)
1919
4.25k
        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.51k
{
1934
1.51k
    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.51k
    if (s->ext.early_data != SSL_EARLY_DATA_ACCEPTED)
1951
1.51k
        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.51k
{
1967
1.51k
    if (!s->hit)
1968
1.51k
        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
}