Coverage Report

Created: 2023-06-08 06:41

/src/openssl30/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 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
428
{
44
428
    unsigned int ilen;
45
428
    const unsigned char *data;
46
47
    /* Parse the length byte */
48
428
    if (!PACKET_get_1(pkt, &ilen)
49
428
        || !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
422
    if (ilen != s->s3.previous_client_finished_len) {
56
6
        SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_R_RENEGOTIATION_MISMATCH);
57
6
        return 0;
58
6
    }
59
60
416
    if (memcmp(data, s->s3.previous_client_finished,
61
416
               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
416
    s->s3.send_connection_binding = 1;
67
68
416
    return 1;
69
416
}
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
750
{
97
750
    unsigned int servname_type;
98
750
    PACKET sni, hostname;
99
100
750
    if (!PACKET_as_length_prefixed_2(pkt, &sni)
101
        /* ServerNameList must be at least 1 byte long. */
102
750
        || PACKET_remaining(&sni) == 0) {
103
22
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
104
22
        return 0;
105
22
    }
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
728
    if (!PACKET_get_1(&sni, &servname_type)
119
728
        || servname_type != TLSEXT_NAMETYPE_host_name
120
728
        || !PACKET_as_length_prefixed_2(&sni, &hostname)) {
121
14
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
122
14
        return 0;
123
14
    }
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
714
    if (!s->hit || SSL_IS_TLS13(s)) {
130
712
        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
711
        if (PACKET_contains_zero_byte(&hostname)) {
136
2
            SSLfatal(s, SSL_AD_UNRECOGNIZED_NAME, SSL_R_BAD_EXTENSION);
137
2
            return 0;
138
2
        }
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
709
        OPENSSL_free(s->ext.hostname);
145
709
        s->ext.hostname = NULL;
146
709
        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
709
        s->servername_done = 1;
152
709
    } 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
711
    return 1;
164
714
}
165
166
int tls_parse_ctos_maxfragmentlen(SSL *s, PACKET *pkt, unsigned int context,
167
                                  X509 *x, size_t chainidx)
168
53
{
169
53
    unsigned int value;
170
171
53
    if (PACKET_remaining(pkt) != 1 || !PACKET_get_1(pkt, &value)) {
172
17
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
173
17
        return 0;
174
17
    }
175
176
    /* Received |value| should be a valid max-fragment-length code. */
177
36
    if (!IS_MAX_FRAGMENT_LENGTH_EXT_VALID(value)) {
178
4
        SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER,
179
4
                 SSL_R_SSL3_EXT_INVALID_MAX_FRAGMENT_LENGTH);
180
4
        return 0;
181
4
    }
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
32
    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
31
    s->session->ext.max_fragment_len_mode = value;
199
31
    return 1;
200
32
}
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
16
{
206
16
    PACKET srp_I;
207
208
16
    if (!PACKET_as_length_prefixed_1(pkt, &srp_I)
209
16
            || PACKET_contains_zero_byte(&srp_I)) {
210
11
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
211
11
        return 0;
212
11
    }
213
214
5
    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
5
    return 1;
220
5
}
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
552
{
226
552
    PACKET ec_point_format_list;
227
228
552
    if (!PACKET_as_length_prefixed_1(pkt, &ec_point_format_list)
229
552
        || PACKET_remaining(&ec_point_format_list) == 0) {
230
10
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
231
10
        return 0;
232
10
    }
233
234
542
    if (!s->hit) {
235
512
        if (!PACKET_memdup(&ec_point_format_list,
236
512
                           &s->ext.peer_ecpointformats,
237
512
                           &s->ext.peer_ecpointformats_len)) {
238
0
            SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
239
0
            return 0;
240
0
        }
241
512
    }
242
243
542
    return 1;
244
542
}
245
246
int tls_parse_ctos_session_ticket(SSL *s, PACKET *pkt, unsigned int context,
247
                                  X509 *x, size_t chainidx)
248
443
{
249
443
    if (s->ext.session_ticket_cb &&
250
443
            !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
443
    return 1;
258
443
}
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
258
{
265
258
    PACKET supported_sig_algs;
266
267
258
    if (!PACKET_as_length_prefixed_2(pkt, &supported_sig_algs)
268
258
            || PACKET_remaining(&supported_sig_algs) == 0) {
269
25
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
270
25
        return 0;
271
25
    }
272
273
233
    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
231
    return 1;
279
233
}
280
281
int tls_parse_ctos_sig_algs(SSL *s, PACKET *pkt, unsigned int context, X509 *x,
282
                            size_t chainidx)
283
1.47k
{
284
1.47k
    PACKET supported_sig_algs;
285
286
1.47k
    if (!PACKET_as_length_prefixed_2(pkt, &supported_sig_algs)
287
1.47k
            || PACKET_remaining(&supported_sig_algs) == 0) {
288
25
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
289
25
        return 0;
290
25
    }
291
292
1.44k
    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.44k
    return 1;
298
1.44k
}
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
971
{
304
971
    PACKET responder_id_list, exts;
305
306
    /* We ignore this in a resumption handshake */
307
971
    if (s->hit)
308
3
        return 1;
309
310
    /* Not defined if we get one of these in a client Certificate */
311
968
    if (x != NULL)
312
0
        return 1;
313
314
968
    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
966
    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
46
        s->ext.status_type = TLSEXT_STATUSTYPE_nothing;
324
46
        return 1;
325
46
    }
326
327
920
    if (!PACKET_get_length_prefixed_2 (pkt, &responder_id_list)) {
328
11
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
329
11
        return 0;
330
11
    }
331
332
    /*
333
     * We remove any OCSP_RESPIDs from a previous handshake
334
     * to prevent unbounded memory growth - CVE-2016-6304
335
     */
336
909
    sk_OCSP_RESPID_pop_free(s->ext.ocsp.ids, OCSP_RESPID_free);
337
909
    if (PACKET_remaining(&responder_id_list) > 0) {
338
517
        s->ext.ocsp.ids = sk_OCSP_RESPID_new_null();
339
517
        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
517
    } else {
344
392
        s->ext.ocsp.ids = NULL;
345
392
    }
346
347
927
    while (PACKET_remaining(&responder_id_list) > 0) {
348
533
        OCSP_RESPID *id;
349
533
        PACKET responder_id;
350
533
        const unsigned char *id_data;
351
352
533
        if (!PACKET_get_length_prefixed_2(&responder_id_list, &responder_id)
353
533
                || PACKET_remaining(&responder_id) == 0) {
354
16
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
355
16
            return 0;
356
16
        }
357
358
517
        id_data = PACKET_data(&responder_id);
359
517
        id = d2i_OCSP_RESPID(NULL, &id_data,
360
517
                             (int)PACKET_remaining(&responder_id));
361
517
        if (id == NULL) {
362
491
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
363
491
            return 0;
364
491
        }
365
366
26
        if (id_data != PACKET_end(&responder_id)) {
367
8
            OCSP_RESPID_free(id);
368
8
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
369
370
8
            return 0;
371
8
        }
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
394
    if (!PACKET_as_length_prefixed_2(pkt, &exts)) {
383
18
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
384
18
        return 0;
385
18
    }
386
387
376
    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
338
    return 1;
401
376
}
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
177
{
426
177
    PACKET protocol_list, save_protocol_list, protocol;
427
428
177
    if (!SSL_IS_FIRST_HANDSHAKE(s))
429
0
        return 1;
430
431
177
    if (!PACKET_as_length_prefixed_2(pkt, &protocol_list)
432
177
        || PACKET_remaining(&protocol_list) < 2) {
433
20
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
434
20
        return 0;
435
20
    }
436
437
157
    save_protocol_list = protocol_list;
438
586
    do {
439
        /* Protocol names can't be empty. */
440
586
        if (!PACKET_get_length_prefixed_1(&protocol_list, &protocol)
441
586
                || PACKET_remaining(&protocol) == 0) {
442
14
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
443
14
            return 0;
444
14
        }
445
586
    } while (PACKET_remaining(&protocol_list) != 0);
446
447
143
    OPENSSL_free(s->s3.alpn_proposed);
448
143
    s->s3.alpn_proposed = NULL;
449
143
    s->s3.alpn_proposed_len = 0;
450
143
    if (!PACKET_memdup(&save_protocol_list,
451
143
                       &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
143
    return 1;
457
143
}
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
177
{
530
177
    if (!(s->options & SSL_OP_NO_ENCRYPT_THEN_MAC))
531
177
        s->ext.use_etm = 1;
532
533
177
    return 1;
534
177
}
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
215
{
543
215
#ifndef OPENSSL_NO_TLS1_3
544
215
    PACKET psk_kex_modes;
545
215
    unsigned int mode;
546
547
215
    if (!PACKET_as_length_prefixed_1(pkt, &psk_kex_modes)
548
215
            || PACKET_remaining(&psk_kex_modes) == 0) {
549
5
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
550
5
        return 0;
551
5
    }
552
553
1.64k
    while (PACKET_get_1(&psk_kex_modes, &mode)) {
554
1.43k
        if (mode == TLSEXT_KEX_MODE_KE_DHE)
555
285
            s->ext.psk_kex_mode |= TLSEXT_KEX_MODE_FLAG_KE_DHE;
556
1.15k
        else if (mode == TLSEXT_KEX_MODE_KE
557
1.15k
                && (s->options & SSL_OP_ALLOW_NO_DHE_KEX) != 0)
558
0
            s->ext.psk_kex_mode |= TLSEXT_KEX_MODE_FLAG_KE;
559
1.43k
    }
560
210
#endif
561
562
210
    return 1;
563
215
}
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
739
{
572
739
#ifndef OPENSSL_NO_TLS1_3
573
739
    unsigned int group_id;
574
739
    PACKET key_share_list, encoded_pt;
575
739
    const uint16_t *clntgroups, *srvrgroups;
576
739
    size_t clnt_num_groups, srvr_num_groups;
577
739
    int found = 0;
578
579
739
    if (s->hit && (s->ext.psk_kex_mode & TLSEXT_KEX_MODE_FLAG_KE_DHE) == 0)
580
0
        return 1;
581
582
    /* Sanity check */
583
739
    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
739
    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
720
    tls1_get_supported_groups(s, &srvrgroups, &srvr_num_groups);
595
    /* Get the clients list of supported groups. */
596
720
    tls1_get_peer_groups(s, &clntgroups, &clnt_num_groups);
597
720
    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
2
        SSLfatal(s, SSL_AD_MISSING_EXTENSION,
604
2
                 SSL_R_MISSING_SUPPORTED_GROUPS_EXTENSION);
605
2
        return 0;
606
2
    }
607
608
718
    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.44k
    while (PACKET_remaining(&key_share_list) > 0) {
619
797
        if (!PACKET_get_net_2(&key_share_list, &group_id)
620
797
                || !PACKET_get_length_prefixed_2(&key_share_list, &encoded_pt)
621
797
                || PACKET_remaining(&encoded_pt) == 0) {
622
23
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_LENGTH_MISMATCH);
623
23
            return 0;
624
23
        }
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
774
        if (found)
631
72
            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
702
        if (s->s3.group_id != 0
638
702
                && (group_id != s->s3.group_id
639
33
                    || PACKET_remaining(&key_share_list) != 0)) {
640
21
            SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_BAD_KEY_SHARE);
641
21
            return 0;
642
21
        }
643
644
        /* Check if this share is in supported_groups sent from client */
645
681
        if (!check_in_list(s, group_id, clntgroups, clnt_num_groups, 0)) {
646
9
            SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_BAD_KEY_SHARE);
647
9
            return 0;
648
9
        }
649
650
        /* Check if this share is for a group we can use */
651
672
        if (!check_in_list(s, group_id, srvrgroups, srvr_num_groups, 1)
652
672
                || !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
672
                || !tls_valid_group(s, group_id, TLS1_3_VERSION, TLS1_3_VERSION,
658
515
                                    0, NULL)) {
659
            /* Share not suitable */
660
157
            continue;
661
157
        }
662
663
515
        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
515
        s->s3.group_id = group_id;
670
        /* Cache the selected group ID in the SSL_SESSION */
671
515
        s->session->kex_group = group_id;
672
673
515
        if (tls13_set_encoded_pub_key(s->s3.peer_tmp,
674
515
                                      PACKET_data(&encoded_pt),
675
515
                                      PACKET_remaining(&encoded_pt)) <= 0) {
676
13
            SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_BAD_ECPOINT);
677
13
            return 0;
678
13
        }
679
680
502
        found = 1;
681
502
    }
682
651
#endif
683
684
651
    return 1;
685
717
}
686
687
int tls_parse_ctos_cookie(SSL *s, PACKET *pkt, unsigned int context, X509 *x,
688
                          size_t chainidx)
689
4
{
690
4
#ifndef OPENSSL_NO_TLS1_3
691
4
    unsigned int format, version, key_share, group_id;
692
4
    EVP_MD_CTX *hctx;
693
4
    EVP_PKEY *pkey;
694
4
    PACKET cookie, raw, chhash, appcookie;
695
4
    WPACKET hrrpkt;
696
4
    const unsigned char *data, *mdin, *ciphdata;
697
4
    unsigned char hmac[SHA256_DIGEST_LENGTH];
698
4
    unsigned char hrr[MAX_HRR_SIZE];
699
4
    size_t rawlen, hmaclen, hrrlen, ciphlen;
700
4
    uint64_t tm, now;
701
702
    /* Ignore any cookie if we're not set up to verify it */
703
4
    if (s->ctx->verify_stateless_cookie_cb == NULL
704
4
            || (s->s3.flags & TLS1_FLAGS_STATELESS) == 0)
705
4
        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 = 1;
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.84k
{
897
1.84k
    PACKET supported_groups_list;
898
899
    /* Each group is 2 bytes and we must have at least 1. */
900
1.84k
    if (!PACKET_as_length_prefixed_2(pkt, &supported_groups_list)
901
1.84k
            || PACKET_remaining(&supported_groups_list) == 0
902
1.84k
            || (PACKET_remaining(&supported_groups_list) % 2) != 0) {
903
17
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
904
17
        return 0;
905
17
    }
906
907
1.82k
    if (!s->hit || SSL_IS_TLS13(s)) {
908
1.80k
        OPENSSL_free(s->ext.peer_supportedgroups);
909
1.80k
        s->ext.peer_supportedgroups = NULL;
910
1.80k
        s->ext.peer_supportedgroups_len = 0;
911
1.80k
        if (!tls1_save_u16(&supported_groups_list,
912
1.80k
                           &s->ext.peer_supportedgroups,
913
1.80k
                           &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.80k
    }
918
919
1.82k
    return 1;
920
1.82k
}
921
922
int tls_parse_ctos_ems(SSL *s, PACKET *pkt, unsigned int context, X509 *x,
923
                       size_t chainidx)
924
597
{
925
    /* The extension must always be empty */
926
597
    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
596
    if (s->options & SSL_OP_NO_EXTENDED_MASTER_SECRET)
932
0
        return 1;
933
934
596
    s->s3.flags |= TLS1_FLAGS_RECEIVED_EXTMS;
935
936
596
    return 1;
937
596
}
938
939
940
int tls_parse_ctos_early_data(SSL *s, PACKET *pkt, unsigned int context,
941
                              X509 *x, size_t chainidx)
942
457
{
943
457
    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
455
    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
453
    return 1;
954
455
}
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
107
{
987
107
    PACKET identities, binders, binder;
988
107
    size_t binderoffset, hashsize;
989
107
    SSL_SESSION *sess = NULL;
990
107
    unsigned int id, i, ext = 0;
991
107
    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
107
    if ((s->ext.psk_kex_mode
998
107
            & (TLSEXT_KEX_MODE_FLAG_KE | TLSEXT_KEX_MODE_FLAG_KE_DHE)) == 0)
999
4
        return 1;
1000
1001
103
    if (!PACKET_get_length_prefixed_2(pkt, &identities)) {
1002
7
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
1003
7
        return 0;
1004
7
    }
1005
1006
96
    s->ext.ticket_expected = 0;
1007
187
    for (id = 0; PACKET_remaining(&identities) != 0; id++) {
1008
147
        PACKET identity;
1009
147
        unsigned long ticket_agel;
1010
147
        size_t idlen;
1011
1012
147
        if (!PACKET_get_length_prefixed_2(&identities, &identity)
1013
147
                || !PACKET_get_net_4(&identities, &ticket_agel)) {
1014
22
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
1015
22
            return 0;
1016
22
        }
1017
1018
125
        idlen = PACKET_remaining(&identity);
1019
125
        if (s->psk_find_session_cb != NULL
1020
125
                && !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
125
#ifndef OPENSSL_NO_PSK
1027
125
        if(sess == NULL
1028
125
                && s->psk_server_callback != NULL
1029
125
                && 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
125
#endif /* OPENSSL_NO_PSK */
1074
1075
125
        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
125
        } else {
1097
125
            uint32_t ticket_age = 0, agesec, agems;
1098
125
            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
125
            if ((s->options & SSL_OP_NO_TICKET) != 0
1106
125
                    || (s->max_early_data > 0
1107
125
                        && (s->options & SSL_OP_NO_ANTI_REPLAY) == 0))
1108
0
                ret = tls_get_stateful_ticket(s, &identity, &sess);
1109
125
            else
1110
125
                ret = tls_decrypt_ticket(s, PACKET_data(&identity),
1111
125
                                         PACKET_remaining(&identity), NULL, 0,
1112
125
                                         &sess);
1113
1114
125
            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
124
            if (ret == SSL_TICKET_FATAL_ERR_MALLOC
1120
124
                    || 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
124
            if (ret == SSL_TICKET_NONE || ret == SSL_TICKET_NO_DECRYPT)
1125
67
                continue;
1126
1127
            /* Check for replay */
1128
57
            if (s->max_early_data > 0
1129
57
                    && (s->options & SSL_OP_NO_ANTI_REPLAY) == 0
1130
57
                    && !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
57
            ticket_age = (uint32_t)ticket_agel;
1137
57
            agesec = (uint32_t)(time(NULL) - sess->time);
1138
57
            agems = agesec * (uint32_t)1000;
1139
57
            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
57
            if (id == 0
1150
57
                    && sess->timeout >= (long)agesec
1151
57
                    && agems / (uint32_t)1000 == agesec
1152
57
                    && ticket_age <= agems + 1000
1153
57
                    && 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
57
        }
1161
1162
57
        md = ssl_md(s->ctx, sess->cipher->algorithm2);
1163
57
        if (md == NULL) {
1164
0
            SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1165
0
            goto err;
1166
0
        }
1167
57
        if (!EVP_MD_is_a(md,
1168
57
                EVP_MD_get0_name(ssl_md(s->ctx,
1169
57
                                        s->s3.tmp.new_cipher->algorithm2)))) {
1170
            /* The ciphersuite is not compatible with this session. */
1171
24
            SSL_SESSION_free(sess);
1172
24
            sess = NULL;
1173
24
            s->ext.early_data_ok = 0;
1174
24
            s->ext.ticket_expected = 0;
1175
24
            continue;
1176
24
        }
1177
33
        break;
1178
57
    }
1179
1180
73
    if (sess == NULL)
1181
40
        return 1;
1182
1183
33
    binderoffset = PACKET_data(pkt) - (const unsigned char *)s->init_buf->data;
1184
33
    hashsize = EVP_MD_get_size(md);
1185
1186
33
    if (!PACKET_get_length_prefixed_2(pkt, &binders)) {
1187
13
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
1188
13
        goto err;
1189
13
    }
1190
1191
37
    for (i = 0; i <= id; i++) {
1192
20
        if (!PACKET_get_length_prefixed_1(&binders, &binder)) {
1193
3
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
1194
3
            goto err;
1195
3
        }
1196
20
    }
1197
1198
17
    if (PACKET_remaining(&binder) != hashsize) {
1199
5
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
1200
5
        goto err;
1201
5
    }
1202
12
    if (tls_psk_do_binder(s, md, (const unsigned char *)s->init_buf->data,
1203
12
                          binderoffset, PACKET_data(&binder), NULL, sess, 0,
1204
12
                          ext) != 1) {
1205
        /* SSLfatal() already called */
1206
11
        goto err;
1207
11
    }
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
32
err:
1215
32
    SSL_SESSION_free(sess);
1216
32
    return 0;
1217
12
}
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
28
{
1224
28
    if (PACKET_remaining(pkt) != 0) {
1225
1
        SSLfatal(s, SSL_AD_DECODE_ERROR,
1226
1
                 SSL_R_POST_HANDSHAKE_AUTH_ENCODING_ERR);
1227
1
        return 0;
1228
1
    }
1229
1230
27
    s->post_handshake_auth = SSL_PHA_EXT_RECEIVED;
1231
1232
27
    return 1;
1233
28
}
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.08k
{
1242
2.08k
    if (!s->s3.send_connection_binding)
1243
1.59k
        return EXT_RETURN_NOT_SENT;
1244
1245
    /* Still add this even if SSL_OP_NO_RENEGOTIATION is set */
1246
487
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_renegotiate)
1247
487
            || !WPACKET_start_sub_packet_u16(pkt)
1248
487
            || !WPACKET_start_sub_packet_u8(pkt)
1249
487
            || !WPACKET_memcpy(pkt, s->s3.previous_client_finished,
1250
487
                               s->s3.previous_client_finished_len)
1251
487
            || !WPACKET_memcpy(pkt, s->s3.previous_server_finished,
1252
487
                               s->s3.previous_server_finished_len)
1253
487
            || !WPACKET_close(pkt)
1254
487
            || !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
487
    return EXT_RETURN_SENT;
1260
487
}
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.67k
{
1266
1.67k
    if (s->servername_done != 1)
1267
1.67k
        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.67k
{
1290
1.67k
    if (!USE_MAX_FRAGMENT_LENGTH_EXT(s->session))
1291
1.65k
        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
28
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_max_fragment_length)
1298
28
        || !WPACKET_start_sub_packet_u16(pkt)
1299
28
        || !WPACKET_put_bytes_u8(pkt, s->session->ext.max_fragment_len_mode)
1300
28
        || !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
28
    return EXT_RETURN_SENT;
1306
28
}
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.20k
{
1312
1.20k
    unsigned long alg_k = s->s3.tmp.new_cipher->algorithm_mkey;
1313
1.20k
    unsigned long alg_a = s->s3.tmp.new_cipher->algorithm_auth;
1314
1.20k
    int using_ecc = ((alg_k & SSL_kECDHE) || (alg_a & SSL_aECDSA))
1315
1.20k
                    && (s->ext.peer_ecpointformats != NULL);
1316
1.20k
    const unsigned char *plist;
1317
1.20k
    size_t plistlen;
1318
1319
1.20k
    if (!using_ecc)
1320
799
        return EXT_RETURN_NOT_SENT;
1321
1322
407
    tls1_get_formatlist(s, &plist, &plistlen);
1323
407
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_ec_point_formats)
1324
407
            || !WPACKET_start_sub_packet_u16(pkt)
1325
407
            || !WPACKET_sub_memcpy_u8(pkt, plist, plistlen)
1326
407
            || !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
407
    return EXT_RETURN_SENT;
1332
407
}
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.67k
{
1338
1.67k
    const uint16_t *groups;
1339
1.67k
    size_t numgroups, i, first = 1;
1340
1.67k
    int version;
1341
1342
    /* s->s3.group_id is non zero if we accepted a key_share */
1343
1.67k
    if (s->s3.group_id == 0)
1344
1.20k
        return EXT_RETURN_NOT_SENT;
1345
1346
    /* Get our list of supported groups */
1347
472
    tls1_get_supported_groups(s, &groups, &numgroups);
1348
472
    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
472
    version = SSL_version(s);
1355
642
    for (i = 0; i < numgroups; i++) {
1356
625
        uint16_t group = groups[i];
1357
1358
625
        if (tls_valid_group(s, group, version, version, 0, NULL)
1359
625
                && tls_group_allowed(s, group, SSL_SECOP_CURVE_SUPPORTED)) {
1360
625
            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
472
                if (s->s3.group_id == group)
1366
455
                    return EXT_RETURN_NOT_SENT;
1367
1368
                /* Add extension header */
1369
17
                if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_supported_groups)
1370
                           /* Sub-packet for supported_groups extension */
1371
17
                        || !WPACKET_start_sub_packet_u16(pkt)
1372
17
                        || !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
17
                first = 0;
1378
17
            }
1379
170
            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
170
        }
1384
625
    }
1385
1386
17
    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
17
    return EXT_RETURN_SENT;
1392
17
}
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.20k
{
1398
1.20k
    if (!s->ext.ticket_expected || !tls_use_ticket(s)) {
1399
850
        s->ext.ticket_expected = 0;
1400
850
        return EXT_RETURN_NOT_SENT;
1401
850
    }
1402
1403
356
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_session_ticket)
1404
356
            || !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
356
    return EXT_RETURN_SENT;
1410
356
}
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.67k
{
1417
    /* We don't currently support this extension inside a CertificateRequest */
1418
1.67k
    if (context == SSL_EXT_TLS1_3_CERTIFICATE_REQUEST)
1419
0
        return EXT_RETURN_NOT_SENT;
1420
1421
1.67k
    if (!s->ext.status_expected)
1422
1.67k
        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.20k
{
1456
1.20k
    const unsigned char *npa;
1457
1.20k
    unsigned int npalen;
1458
1.20k
    int ret;
1459
1.20k
    int npn_seen = s->s3.npn_seen;
1460
1461
1.20k
    s->s3.npn_seen = 0;
1462
1.20k
    if (!npn_seen || s->ctx->ext.npn_advertised_cb == NULL)
1463
1.20k
        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.67k
{
1483
1.67k
    if (s->s3.alpn_selected == NULL)
1484
1.67k
        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.67k
{
1506
1.67k
    if (s->srtp_profile == NULL)
1507
1.67k
        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.20k
{
1526
1.20k
    if (!s->ext.use_etm)
1527
1.08k
        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
117
    if (s->s3.tmp.new_cipher->algorithm_mac == SSL_AEAD
1534
117
        || s->s3.tmp.new_cipher->algorithm_enc == SSL_RC4
1535
117
        || s->s3.tmp.new_cipher->algorithm_enc == SSL_eGOST2814789CNT
1536
117
        || s->s3.tmp.new_cipher->algorithm_enc == SSL_eGOST2814789CNT12
1537
117
        || s->s3.tmp.new_cipher->algorithm_enc == SSL_MAGMA
1538
117
        || s->s3.tmp.new_cipher->algorithm_enc == SSL_KUZNYECHIK) {
1539
30
        s->ext.use_etm = 0;
1540
30
        return EXT_RETURN_NOT_SENT;
1541
30
    }
1542
1543
87
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_encrypt_then_mac)
1544
87
            || !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
87
    return EXT_RETURN_SENT;
1550
87
}
1551
1552
EXT_RETURN tls_construct_stoc_ems(SSL *s, WPACKET *pkt, unsigned int context,
1553
                                  X509 *x, size_t chainidx)
1554
1.20k
{
1555
1.20k
    if ((s->s3.flags & TLS1_FLAGS_RECEIVED_EXTMS) == 0)
1556
702
        return EXT_RETURN_NOT_SENT;
1557
1558
504
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_extended_master_secret)
1559
504
            || !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
504
    return EXT_RETURN_SENT;
1565
504
}
1566
1567
EXT_RETURN tls_construct_stoc_supported_versions(SSL *s, WPACKET *pkt,
1568
                                                 unsigned int context, X509 *x,
1569
                                                 size_t chainidx)
1570
608
{
1571
608
    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
608
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_supported_versions)
1577
608
            || !WPACKET_start_sub_packet_u16(pkt)
1578
608
            || !WPACKET_put_bytes_u16(pkt, s->version)
1579
608
            || !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
608
    return EXT_RETURN_SENT;
1585
608
}
1586
1587
EXT_RETURN tls_construct_stoc_key_share(SSL *s, WPACKET *pkt,
1588
                                        unsigned int context, X509 *x,
1589
                                        size_t chainidx)
1590
608
{
1591
608
#ifndef OPENSSL_NO_TLS1_3
1592
608
    unsigned char *encodedPoint;
1593
608
    size_t encoded_pt_len = 0;
1594
608
    EVP_PKEY *ckey = s->s3.peer_tmp, *skey = NULL;
1595
608
    const TLS_GROUP_INFO *ginf = NULL;
1596
1597
608
    if (s->hello_retry_request == SSL_HRR_PENDING) {
1598
133
        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
133
        if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_key_share)
1603
133
                || !WPACKET_start_sub_packet_u16(pkt)
1604
133
                || !WPACKET_put_bytes_u16(pkt, s->s3.group_id)
1605
133
                || !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
133
        return EXT_RETURN_SENT;
1611
133
    }
1612
1613
475
    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
475
    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
475
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_key_share)
1630
475
            || !WPACKET_start_sub_packet_u16(pkt)
1631
475
            || !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
475
    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
475
    if (!ginf->is_kem) {
1642
        /* Regular KEX */
1643
475
        skey = ssl_generate_pkey(s, ckey);
1644
475
        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
475
        encoded_pt_len = EVP_PKEY_get1_encoded_public_key(skey, &encodedPoint);
1651
475
        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
475
        if (!WPACKET_sub_memcpy_u16(pkt, encodedPoint, encoded_pt_len)
1658
475
                || !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
475
        OPENSSL_free(encodedPoint);
1665
1666
        /*
1667
         * This causes the crypto state to be updated based on the derived keys
1668
         */
1669
475
        s->s3.tmp.pkey = skey;
1670
475
        if (ssl_derive(s, skey, ckey, 1) == 0) {
1671
            /* SSLfatal() already called */
1672
3
            return EXT_RETURN_FAIL;
1673
3
        }
1674
475
    } 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
472
    s->s3.did_kex = 1;
1713
472
    return EXT_RETURN_SENT;
1714
#else
1715
    return EXT_RETURN_FAIL;
1716
#endif
1717
475
}
1718
1719
EXT_RETURN tls_construct_stoc_cookie(SSL *s, WPACKET *pkt, unsigned int context,
1720
                                     X509 *x, size_t chainidx)
1721
133
{
1722
133
#ifndef OPENSSL_NO_TLS1_3
1723
133
    unsigned char *hashval1, *hashval2, *appcookie1, *appcookie2, *cookie;
1724
133
    unsigned char *hmac, *hmac2;
1725
133
    size_t startlen, ciphlen, totcookielen, hashlen, hmaclen, appcookielen;
1726
133
    EVP_MD_CTX *hctx;
1727
133
    EVP_PKEY *pkey;
1728
133
    int ret = EXT_RETURN_FAIL;
1729
1730
133
    if ((s->s3.flags & TLS1_FLAGS_STATELESS) == 0)
1731
133
        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.20k
{
1847
1.20k
    const unsigned char cryptopro_ext[36] = {
1848
1.20k
        0xfd, 0xe8,         /* 65000 */
1849
1.20k
        0x00, 0x20,         /* 32 bytes length */
1850
1.20k
        0x30, 0x1e, 0x30, 0x08, 0x06, 0x06, 0x2a, 0x85,
1851
1.20k
        0x03, 0x02, 0x02, 0x09, 0x30, 0x08, 0x06, 0x06,
1852
1.20k
        0x2a, 0x85, 0x03, 0x02, 0x02, 0x16, 0x30, 0x08,
1853
1.20k
        0x06, 0x06, 0x2a, 0x85, 0x03, 0x02, 0x02, 0x17
1854
1.20k
    };
1855
1856
1.20k
    if (((s->s3.tmp.new_cipher->id & 0xFFFF) != 0x80
1857
1.20k
         && (s->s3.tmp.new_cipher->id & 0xFFFF) != 0x81)
1858
1.20k
            || (SSL_get_options(s) & SSL_OP_CRYPTOPRO_TLSEXT_BUG) == 0)
1859
1.20k
        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
472
{
1873
472
    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
472
    if (s->ext.early_data != SSL_EARLY_DATA_ACCEPTED)
1889
472
        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
472
{
1904
472
    if (!s->hit)
1905
472
        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
}