Coverage Report

Created: 2023-09-25 06:41

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