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