Coverage Report

Created: 2025-11-16 06:40

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