Coverage Report

Created: 2025-12-04 06:33

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
191
{
44
191
    unsigned int ilen;
45
191
    const unsigned char *data;
46
47
    /* Parse the length byte */
48
191
    if (!PACKET_get_1(pkt, &ilen)
49
189
        || !PACKET_get_bytes(pkt, &data, ilen)) {
50
3
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_RENEGOTIATION_ENCODING_ERR);
51
3
        return 0;
52
3
    }
53
54
    /* Check that the extension matches */
55
188
    if (ilen != s->s3.previous_client_finished_len) {
56
2
        SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_R_RENEGOTIATION_MISMATCH);
57
2
        return 0;
58
2
    }
59
60
186
    if (memcmp(data, s->s3.previous_client_finished,
61
186
               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
186
    s->s3.send_connection_binding = 1;
67
68
186
    return 1;
69
186
}
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
8.93k
{
97
8.93k
    unsigned int servname_type;
98
8.93k
    PACKET sni, hostname;
99
100
8.93k
    if (!PACKET_as_length_prefixed_2(pkt, &sni)
101
        /* ServerNameList must be at least 1 byte long. */
102
8.73k
        || PACKET_remaining(&sni) == 0) {
103
222
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
104
222
        return 0;
105
222
    }
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
8.71k
    if (!PACKET_get_1(&sni, &servname_type)
119
8.71k
        || servname_type != TLSEXT_NAMETYPE_host_name
120
8.68k
        || !PACKET_as_length_prefixed_2(&sni, &hostname)) {
121
197
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
122
197
        return 0;
123
197
    }
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
8.51k
    if (!s->hit || SSL_IS_TLS13(s)) {
130
8.50k
        if (PACKET_remaining(&hostname) > TLSEXT_MAXLEN_host_name) {
131
7
            SSLfatal(s, SSL_AD_UNRECOGNIZED_NAME, SSL_R_BAD_EXTENSION);
132
7
            return 0;
133
7
        }
134
135
8.49k
        if (PACKET_contains_zero_byte(&hostname)) {
136
24
            SSLfatal(s, SSL_AD_UNRECOGNIZED_NAME, SSL_R_BAD_EXTENSION);
137
24
            return 0;
138
24
        }
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
8.47k
        OPENSSL_free(s->ext.hostname);
145
8.47k
        s->ext.hostname = NULL;
146
8.47k
        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
8.47k
        s->servername_done = 1;
152
8.47k
    } 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
15
        s->servername_done = (s->session->ext.hostname != NULL)
159
7
            && PACKET_equal(&hostname, s->session->ext.hostname,
160
7
                            strlen(s->session->ext.hostname));
161
15
    }
162
163
8.48k
    return 1;
164
8.51k
}
165
166
int tls_parse_ctos_maxfragmentlen(SSL *s, PACKET *pkt, unsigned int context,
167
                                  X509 *x, size_t chainidx)
168
1.28k
{
169
1.28k
    unsigned int value;
170
171
1.28k
    if (PACKET_remaining(pkt) != 1 || !PACKET_get_1(pkt, &value)) {
172
126
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
173
126
        return 0;
174
126
    }
175
176
    /* Received |value| should be a valid max-fragment-length code. */
177
1.15k
    if (!IS_MAX_FRAGMENT_LENGTH_EXT_VALID(value)) {
178
64
        SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER,
179
64
                 SSL_R_SSL3_EXT_INVALID_MAX_FRAGMENT_LENGTH);
180
64
        return 0;
181
64
    }
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.09k
    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.08k
        s->session->ext.max_fragment_len_mode = value;
203
204
1.09k
    return 1;
205
1.15k
}
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
150
{
211
150
    PACKET srp_I;
212
213
150
    if (!PACKET_as_length_prefixed_1(pkt, &srp_I)
214
96
            || PACKET_contains_zero_byte(&srp_I)) {
215
96
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
216
96
        return 0;
217
96
    }
218
219
54
    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
54
    return 1;
225
54
}
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.70k
{
231
6.70k
    PACKET ec_point_format_list;
232
233
6.70k
    if (!PACKET_as_length_prefixed_1(pkt, &ec_point_format_list)
234
6.57k
        || PACKET_remaining(&ec_point_format_list) == 0) {
235
150
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
236
150
        return 0;
237
150
    }
238
239
6.55k
    if (!s->hit) {
240
6.38k
        if (!PACKET_memdup(&ec_point_format_list,
241
6.38k
                           &s->ext.peer_ecpointformats,
242
6.38k
                           &s->ext.peer_ecpointformats_len)) {
243
0
            SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
244
0
            return 0;
245
0
        }
246
6.38k
    }
247
248
6.55k
    return 1;
249
6.55k
}
250
251
int tls_parse_ctos_session_ticket(SSL *s, PACKET *pkt, unsigned int context,
252
                                  X509 *x, size_t chainidx)
253
6.12k
{
254
6.12k
    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
6.12k
    return 1;
263
6.12k
}
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.25k
{
270
1.25k
    PACKET supported_sig_algs;
271
272
1.25k
    if (!PACKET_as_length_prefixed_2(pkt, &supported_sig_algs)
273
1.07k
            || PACKET_remaining(&supported_sig_algs) == 0) {
274
191
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
275
191
        return 0;
276
191
    }
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.06k
    if ((!s->server || (s->server && !s->hit))
284
1.05k
            && !tls1_save_sigalgs(s, &supported_sig_algs, 1)) {
285
20
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
286
20
        return 0;
287
20
    }
288
289
1.04k
    return 1;
290
1.06k
}
291
292
int tls_parse_ctos_sig_algs(SSL *s, PACKET *pkt, unsigned int context, X509 *x,
293
                            size_t chainidx)
294
10.3k
{
295
10.3k
    PACKET supported_sig_algs;
296
297
10.3k
    if (!PACKET_as_length_prefixed_2(pkt, &supported_sig_algs)
298
10.0k
            || PACKET_remaining(&supported_sig_algs) == 0) {
299
239
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
300
239
        return 0;
301
239
    }
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
10.0k
    if ((!s->server || (s->server && !s->hit))
309
9.92k
            && !tls1_save_sigalgs(s, &supported_sig_algs, 0)) {
310
20
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
311
20
        return 0;
312
20
    }
313
314
10.0k
    return 1;
315
10.0k
}
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
6.83k
{
321
6.83k
    PACKET responder_id_list, exts;
322
323
    /* We ignore this in a resumption handshake */
324
6.83k
    if (s->hit)
325
46
        return 1;
326
327
    /* Not defined if we get one of these in a client Certificate */
328
6.78k
    if (x != NULL)
329
0
        return 1;
330
331
6.78k
    if (!PACKET_get_1(pkt, (unsigned int *)&s->ext.status_type)) {
332
21
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
333
21
        return 0;
334
21
    }
335
336
6.76k
    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
308
        s->ext.status_type = TLSEXT_STATUSTYPE_nothing;
341
308
        return 1;
342
308
    }
343
344
6.45k
    if (!PACKET_get_length_prefixed_2 (pkt, &responder_id_list)) {
345
104
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
346
104
        return 0;
347
104
    }
348
349
    /*
350
     * We remove any OCSP_RESPIDs from a previous handshake
351
     * to prevent unbounded memory growth - CVE-2016-6304
352
     */
353
6.35k
    sk_OCSP_RESPID_pop_free(s->ext.ocsp.ids, OCSP_RESPID_free);
354
6.35k
    if (PACKET_remaining(&responder_id_list) > 0) {
355
3.53k
        s->ext.ocsp.ids = sk_OCSP_RESPID_new_null();
356
3.53k
        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.53k
    } else {
361
2.81k
        s->ext.ocsp.ids = NULL;
362
2.81k
    }
363
364
6.47k
    while (PACKET_remaining(&responder_id_list) > 0) {
365
3.64k
        OCSP_RESPID *id;
366
3.64k
        PACKET responder_id;
367
3.64k
        const unsigned char *id_data;
368
369
3.64k
        if (!PACKET_get_length_prefixed_2(&responder_id_list, &responder_id)
370
3.52k
                || PACKET_remaining(&responder_id) == 0) {
371
128
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
372
128
            return 0;
373
128
        }
374
375
3.51k
        id_data = PACKET_data(&responder_id);
376
3.51k
        id = d2i_OCSP_RESPID(NULL, &id_data,
377
3.51k
                             (int)PACKET_remaining(&responder_id));
378
3.51k
        if (id == NULL) {
379
3.31k
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
380
3.31k
            return 0;
381
3.31k
        }
382
383
200
        if (id_data != PACKET_end(&responder_id)) {
384
83
            OCSP_RESPID_free(id);
385
83
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
386
387
83
            return 0;
388
83
        }
389
390
117
        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
117
    }
397
398
    /* Read in request_extensions */
399
2.83k
    if (!PACKET_as_length_prefixed_2(pkt, &exts)) {
400
97
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
401
97
        return 0;
402
97
    }
403
404
2.73k
    if (PACKET_remaining(&exts) > 0) {
405
792
        const unsigned char *ext_data = PACKET_data(&exts);
406
407
792
        sk_X509_EXTENSION_pop_free(s->ext.ocsp.exts,
408
792
                                   X509_EXTENSION_free);
409
792
        s->ext.ocsp.exts =
410
792
            d2i_X509_EXTENSIONS(NULL, &ext_data, (int)PACKET_remaining(&exts));
411
792
        if (s->ext.ocsp.exts == NULL || ext_data != PACKET_end(&exts)) {
412
784
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
413
784
            return 0;
414
784
        }
415
792
    }
416
417
1.95k
    return 1;
418
2.73k
}
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
16
{
425
    /*
426
     * We shouldn't accept this extension on a
427
     * renegotiation.
428
     */
429
16
    if (SSL_IS_FIRST_HANDSHAKE(s))
430
16
        s->s3.npn_seen = 1;
431
432
16
    return 1;
433
16
}
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
510
{
443
510
    PACKET protocol_list, save_protocol_list, protocol;
444
445
510
    if (!SSL_IS_FIRST_HANDSHAKE(s))
446
0
        return 1;
447
448
510
    if (!PACKET_as_length_prefixed_2(pkt, &protocol_list)
449
356
        || PACKET_remaining(&protocol_list) < 2) {
450
165
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
451
165
        return 0;
452
165
    }
453
454
345
    save_protocol_list = protocol_list;
455
2.84k
    do {
456
        /* Protocol names can't be empty. */
457
2.84k
        if (!PACKET_get_length_prefixed_1(&protocol_list, &protocol)
458
2.76k
                || PACKET_remaining(&protocol) == 0) {
459
117
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
460
117
            return 0;
461
117
        }
462
2.84k
    } while (PACKET_remaining(&protocol_list) != 0);
463
464
228
    OPENSSL_free(s->s3.alpn_proposed);
465
228
    s->s3.alpn_proposed = NULL;
466
228
    s->s3.alpn_proposed_len = 0;
467
228
    if (!PACKET_memdup(&save_protocol_list,
468
228
                       &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
228
    return 1;
474
228
}
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
942
{
480
942
    STACK_OF(SRTP_PROTECTION_PROFILE) *srvr;
481
942
    unsigned int ct, mki_len, id;
482
942
    int i, srtp_pref;
483
942
    PACKET subpkt;
484
485
    /* Ignore this if we have no SRTP profiles */
486
942
    if (SSL_get_srtp_profiles(s) == NULL)
487
942
        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
2.09k
{
547
2.09k
    if (!(s->options & SSL_OP_NO_ENCRYPT_THEN_MAC))
548
2.09k
        s->ext.use_etm = 1;
549
550
2.09k
    return 1;
551
2.09k
}
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
845
{
560
845
#ifndef OPENSSL_NO_TLS1_3
561
845
    PACKET psk_kex_modes;
562
845
    unsigned int mode;
563
564
845
    if (!PACKET_as_length_prefixed_1(pkt, &psk_kex_modes)
565
835
            || PACKET_remaining(&psk_kex_modes) == 0) {
566
12
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
567
12
        return 0;
568
12
    }
569
570
4.32k
    while (PACKET_get_1(&psk_kex_modes, &mode)) {
571
3.48k
        if (mode == TLSEXT_KEX_MODE_KE_DHE)
572
1.23k
            s->ext.psk_kex_mode |= TLSEXT_KEX_MODE_FLAG_KE_DHE;
573
2.25k
        else if (mode == TLSEXT_KEX_MODE_KE
574
712
                && (s->options & SSL_OP_ALLOW_NO_DHE_KEX) != 0)
575
0
            s->ext.psk_kex_mode |= TLSEXT_KEX_MODE_FLAG_KE;
576
3.48k
    }
577
833
#endif
578
579
833
    return 1;
580
845
}
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.81k
{
589
2.81k
#ifndef OPENSSL_NO_TLS1_3
590
2.81k
    unsigned int group_id;
591
2.81k
    PACKET key_share_list, encoded_pt;
592
2.81k
    const uint16_t *clntgroups, *srvrgroups;
593
2.81k
    size_t clnt_num_groups, srvr_num_groups;
594
2.81k
    int found = 0;
595
596
2.81k
    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.81k
    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.81k
    if (!PACKET_as_length_prefixed_2(pkt, &key_share_list)) {
606
51
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_LENGTH_MISMATCH);
607
51
        return 0;
608
51
    }
609
610
    /* Get our list of supported groups */
611
2.76k
    tls1_get_supported_groups(s, &srvrgroups, &srvr_num_groups);
612
    /* Get the clients list of supported groups. */
613
2.76k
    tls1_get_peer_groups(s, &clntgroups, &clnt_num_groups);
614
2.76k
    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.76k
    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.74k
    while (PACKET_remaining(&key_share_list) > 0) {
636
3.25k
        if (!PACKET_get_net_2(&key_share_list, &group_id)
637
3.24k
                || !PACKET_get_length_prefixed_2(&key_share_list, &encoded_pt)
638
3.16k
                || PACKET_remaining(&encoded_pt) == 0) {
639
93
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_LENGTH_MISMATCH);
640
93
            return 0;
641
93
        }
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.15k
        if (found)
648
293
            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.86k
        if (s->s3.group_id != 0
655
166
                && (group_id != s->s3.group_id
656
106
                    || PACKET_remaining(&key_share_list) != 0)) {
657
64
            SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_BAD_KEY_SHARE);
658
64
            return 0;
659
64
        }
660
661
        /* Check if this share is in supported_groups sent from client */
662
2.80k
        if (!check_in_list(s, group_id, clntgroups, clnt_num_groups, 0)) {
663
41
            SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_BAD_KEY_SHARE);
664
41
            return 0;
665
41
        }
666
667
        /* Check if this share is for a group we can use */
668
2.76k
        if (!check_in_list(s, group_id, srvrgroups, srvr_num_groups, 1)
669
2.03k
                || !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.03k
                || !tls_valid_group(s, group_id, TLS1_3_VERSION, TLS1_3_VERSION,
675
2.03k
                                    0, NULL)) {
676
            /* Share not suitable */
677
728
            continue;
678
728
        }
679
680
2.03k
        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.03k
        s->s3.group_id = group_id;
687
        /* Cache the selected group ID in the SSL_SESSION */
688
2.03k
        s->session->kex_group = group_id;
689
690
2.03k
        if (tls13_set_encoded_pub_key(s->s3.peer_tmp,
691
2.03k
                                      PACKET_data(&encoded_pt),
692
2.03k
                                      PACKET_remaining(&encoded_pt)) <= 0) {
693
68
            SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_BAD_ECPOINT);
694
68
            return 0;
695
68
        }
696
697
1.96k
        found = 1;
698
1.96k
    }
699
2.49k
#endif
700
701
2.49k
    return 1;
702
2.75k
}
703
704
int tls_parse_ctos_cookie(SSL *s, PACKET *pkt, unsigned int context, X509 *x,
705
                          size_t chainidx)
706
99
{
707
99
#ifndef OPENSSL_NO_TLS1_3
708
99
    unsigned int format, version, key_share, group_id;
709
99
    EVP_MD_CTX *hctx;
710
99
    EVP_PKEY *pkey;
711
99
    PACKET cookie, raw, chhash, appcookie;
712
99
    WPACKET hrrpkt;
713
99
    const unsigned char *data, *mdin, *ciphdata;
714
99
    unsigned char hmac[SHA256_DIGEST_LENGTH];
715
99
    unsigned char hrr[MAX_HRR_SIZE];
716
99
    size_t rawlen, hmaclen, hrrlen, ciphlen;
717
99
    uint64_t tm, now;
718
719
    /* Ignore any cookie if we're not set up to verify it */
720
99
    if (s->ctx->verify_stateless_cookie_cb == NULL
721
0
            || (s->s3.flags & TLS1_FLAGS_STATELESS) == 0)
722
99
        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
20.1k
{
914
20.1k
    PACKET supported_groups_list;
915
916
    /* Each group is 2 bytes and we must have at least 1. */
917
20.1k
    if (!PACKET_as_length_prefixed_2(pkt, &supported_groups_list)
918
19.8k
            || PACKET_remaining(&supported_groups_list) == 0
919
19.8k
            || (PACKET_remaining(&supported_groups_list) % 2) != 0) {
920
267
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
921
267
        return 0;
922
267
    }
923
924
19.8k
    if (!s->hit || SSL_IS_TLS13(s)) {
925
19.7k
        OPENSSL_free(s->ext.peer_supportedgroups);
926
19.7k
        s->ext.peer_supportedgroups = NULL;
927
19.7k
        s->ext.peer_supportedgroups_len = 0;
928
19.7k
        if (!tls1_save_u16(&supported_groups_list,
929
19.7k
                           &s->ext.peer_supportedgroups,
930
19.7k
                           &s->ext.peer_supportedgroups_len)) {
931
0
            SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
932
0
            return 0;
933
0
        }
934
19.7k
    }
935
936
19.8k
    return 1;
937
19.8k
}
938
939
int tls_parse_ctos_ems(SSL *s, PACKET *pkt, unsigned int context, X509 *x,
940
                       size_t chainidx)
941
4.89k
{
942
    /* The extension must always be empty */
943
4.89k
    if (PACKET_remaining(pkt) != 0) {
944
14
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
945
14
        return 0;
946
14
    }
947
948
4.88k
    if (s->options & SSL_OP_NO_EXTENDED_MASTER_SECRET)
949
0
        return 1;
950
951
4.88k
    s->s3.flags |= TLS1_FLAGS_RECEIVED_EXTMS;
952
953
4.88k
    return 1;
954
4.88k
}
955
956
957
int tls_parse_ctos_early_data(SSL *s, PACKET *pkt, unsigned int context,
958
                              X509 *x, size_t chainidx)
959
2.96k
{
960
2.96k
    if (PACKET_remaining(pkt) != 0) {
961
10
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
962
10
        return 0;
963
10
    }
964
965
2.95k
    if (s->hello_retry_request != SSL_HRR_NONE) {
966
17
        SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_BAD_EXTENSION);
967
17
        return 0;
968
17
    }
969
970
2.93k
    return 1;
971
2.95k
}
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
116
{
1004
116
    PACKET identities, binders, binder;
1005
116
    size_t binderoffset, hashsize;
1006
116
    SSL_SESSION *sess = NULL;
1007
116
    unsigned int id, i, ext = 0;
1008
116
    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
116
    if ((s->ext.psk_kex_mode
1015
116
            & (TLSEXT_KEX_MODE_FLAG_KE | TLSEXT_KEX_MODE_FLAG_KE_DHE)) == 0)
1016
11
        return 1;
1017
1018
105
    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
103
    s->ext.ticket_expected = 0;
1024
204
    for (id = 0; PACKET_remaining(&identities) != 0; id++) {
1025
164
        PACKET identity;
1026
164
        unsigned long ticket_agel;
1027
164
        size_t idlen;
1028
1029
164
        if (!PACKET_get_length_prefixed_2(&identities, &identity)
1030
142
                || !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
139
        idlen = PACKET_remaining(&identity);
1036
139
        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
139
#ifndef OPENSSL_NO_PSK
1044
139
        if(sess == NULL
1045
139
                && 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
139
#endif /* OPENSSL_NO_PSK */
1091
1092
139
        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
139
        } else {
1114
139
            uint32_t ticket_age = 0, agesec, agems;
1115
139
            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
139
            if ((s->options & SSL_OP_NO_TICKET) != 0
1123
139
                    || (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
139
            else
1127
139
                ret = tls_decrypt_ticket(s, PACKET_data(&identity),
1128
139
                                         PACKET_remaining(&identity), NULL, 0,
1129
139
                                         &sess);
1130
1131
139
            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
136
            if (ret == SSL_TICKET_FATAL_ERR_MALLOC
1137
136
                    || 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
136
            if (ret == SSL_TICKET_NONE || ret == SSL_TICKET_NO_DECRYPT)
1142
72
                continue;
1143
1144
            /* Check for replay */
1145
64
            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
64
            ticket_age = (uint32_t)ticket_agel;
1154
64
            agesec = (uint32_t)(time(NULL) - sess->time);
1155
64
            agems = agesec * (uint32_t)1000;
1156
64
            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
64
            if (id == 0
1167
63
                    && sess->timeout >= (long)agesec
1168
43
                    && agems / (uint32_t)1000 == agesec
1169
43
                    && ticket_age <= agems + 1000
1170
4
                    && 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
4
                s->ext.early_data_ok = 1;
1176
4
            }
1177
64
        }
1178
1179
64
        md = ssl_md(s->ctx, sess->cipher->algorithm2);
1180
64
        if (md == NULL) {
1181
0
            SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
1182
0
            goto err;
1183
0
        }
1184
64
        if (!EVP_MD_is_a(md,
1185
64
                EVP_MD_get0_name(ssl_md(s->ctx,
1186
64
                                        s->s3.tmp.new_cipher->algorithm2)))) {
1187
            /* The ciphersuite is not compatible with this session. */
1188
29
            SSL_SESSION_free(sess);
1189
29
            sess = NULL;
1190
29
            s->ext.early_data_ok = 0;
1191
29
            s->ext.ticket_expected = 0;
1192
29
            continue;
1193
29
        }
1194
35
        break;
1195
64
    }
1196
1197
75
    if (sess == NULL)
1198
40
        return 1;
1199
1200
35
    binderoffset = PACKET_data(pkt) - (const unsigned char *)s->init_buf->data;
1201
35
    hashsize = EVP_MD_get_size(md);
1202
1203
35
    if (!PACKET_get_length_prefixed_2(pkt, &binders)) {
1204
16
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
1205
16
        goto err;
1206
16
    }
1207
1208
35
    for (i = 0; i <= id; i++) {
1209
19
        if (!PACKET_get_length_prefixed_1(&binders, &binder)) {
1210
3
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
1211
3
            goto err;
1212
3
        }
1213
19
    }
1214
1215
16
    if (PACKET_remaining(&binder) != hashsize) {
1216
4
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
1217
4
        goto err;
1218
4
    }
1219
12
    if (tls_psk_do_binder(s, md, (const unsigned char *)s->init_buf->data,
1220
12
                          binderoffset, PACKET_data(&binder), NULL, sess, 0,
1221
12
                          ext) != 1) {
1222
        /* SSLfatal() already called */
1223
10
        goto err;
1224
10
    }
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
33
err:
1232
33
    SSL_SESSION_free(sess);
1233
33
    return 0;
1234
12
}
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
198
{
1241
198
    if (PACKET_remaining(pkt) != 0) {
1242
16
        SSLfatal(s, SSL_AD_DECODE_ERROR,
1243
16
                 SSL_R_POST_HANDSHAKE_AUTH_ENCODING_ERR);
1244
16
        return 0;
1245
16
    }
1246
1247
182
    s->post_handshake_auth = SSL_PHA_EXT_RECEIVED;
1248
1249
182
    return 1;
1250
198
}
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
25.0k
{
1259
25.0k
    if (!s->s3.send_connection_binding)
1260
17.5k
        return EXT_RETURN_NOT_SENT;
1261
1262
    /* Still add this even if SSL_OP_NO_RENEGOTIATION is set */
1263
7.48k
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_renegotiate)
1264
7.48k
            || !WPACKET_start_sub_packet_u16(pkt)
1265
7.48k
            || !WPACKET_start_sub_packet_u8(pkt)
1266
7.48k
            || !WPACKET_memcpy(pkt, s->s3.previous_client_finished,
1267
7.48k
                               s->s3.previous_client_finished_len)
1268
7.48k
            || !WPACKET_memcpy(pkt, s->s3.previous_server_finished,
1269
7.48k
                               s->s3.previous_server_finished_len)
1270
7.48k
            || !WPACKET_close(pkt)
1271
7.48k
            || !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
7.48k
    return EXT_RETURN_SENT;
1277
7.48k
}
1278
1279
EXT_RETURN tls_construct_stoc_server_name(SSL *s, WPACKET *pkt,
1280
                                          unsigned int context, X509 *x,
1281
                                          size_t chainidx)
1282
28.3k
{
1283
28.3k
    if (s->servername_done != 1)
1284
28.3k
        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
28.3k
{
1307
28.3k
    if (!USE_MAX_FRAGMENT_LENGTH_EXT(s->session))
1308
27.2k
        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.01k
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_max_fragment_length)
1315
1.01k
        || !WPACKET_start_sub_packet_u16(pkt)
1316
1.01k
        || !WPACKET_put_bytes_u8(pkt, s->session->ext.max_fragment_len_mode)
1317
1.01k
        || !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.01k
    return EXT_RETURN_SENT;
1323
1.01k
}
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
25.0k
{
1329
25.0k
    unsigned long alg_k = s->s3.tmp.new_cipher->algorithm_mkey;
1330
25.0k
    unsigned long alg_a = s->s3.tmp.new_cipher->algorithm_auth;
1331
25.0k
    int using_ecc = ((alg_k & SSL_kECDHE) || (alg_a & SSL_aECDSA))
1332
12.2k
                    && (s->ext.peer_ecpointformats != NULL);
1333
25.0k
    const unsigned char *plist;
1334
25.0k
    size_t plistlen;
1335
1336
25.0k
    if (!using_ecc)
1337
21.2k
        return EXT_RETURN_NOT_SENT;
1338
1339
3.81k
    tls1_get_formatlist(s, &plist, &plistlen);
1340
3.81k
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_ec_point_formats)
1341
3.81k
            || !WPACKET_start_sub_packet_u16(pkt)
1342
3.81k
            || !WPACKET_sub_memcpy_u8(pkt, plist, plistlen)
1343
3.81k
            || !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.81k
    return EXT_RETURN_SENT;
1349
3.81k
}
1350
1351
EXT_RETURN tls_construct_stoc_supported_groups(SSL *s, WPACKET *pkt,
1352
                                               unsigned int context, X509 *x,
1353
                                               size_t chainidx)
1354
28.3k
{
1355
28.3k
    const uint16_t *groups;
1356
28.3k
    size_t numgroups, i, first = 1;
1357
28.3k
    int version;
1358
1359
    /* s->s3.group_id is non zero if we accepted a key_share */
1360
28.3k
    if (s->s3.group_id == 0)
1361
25.0k
        return EXT_RETURN_NOT_SENT;
1362
1363
    /* Get our list of supported groups */
1364
3.23k
    tls1_get_supported_groups(s, &groups, &numgroups);
1365
3.23k
    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
3.23k
    version = SSL_version(s);
1372
14.8k
    for (i = 0; i < numgroups; i++) {
1373
13.3k
        uint16_t group = groups[i];
1374
1375
13.3k
        if (tls_valid_group(s, group, version, version, 0, NULL)
1376
13.3k
                && tls_group_allowed(s, group, SSL_SECOP_CURVE_SUPPORTED)) {
1377
13.3k
            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
3.23k
                if (s->s3.group_id == group)
1383
1.79k
                    return EXT_RETURN_NOT_SENT;
1384
1385
                /* Add extension header */
1386
1.43k
                if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_supported_groups)
1387
                           /* Sub-packet for supported_groups extension */
1388
1.43k
                        || !WPACKET_start_sub_packet_u16(pkt)
1389
1.43k
                        || !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.43k
                first = 0;
1395
1.43k
            }
1396
11.5k
            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
11.5k
        }
1401
13.3k
    }
1402
1403
1.43k
    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.43k
    return EXT_RETURN_SENT;
1409
1.43k
}
1410
1411
EXT_RETURN tls_construct_stoc_session_ticket(SSL *s, WPACKET *pkt,
1412
                                             unsigned int context, X509 *x,
1413
                                             size_t chainidx)
1414
25.0k
{
1415
25.0k
    if (!s->ext.ticket_expected || !tls_use_ticket(s)) {
1416
19.8k
        s->ext.ticket_expected = 0;
1417
19.8k
        return EXT_RETURN_NOT_SENT;
1418
19.8k
    }
1419
1420
5.20k
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_session_ticket)
1421
5.20k
            || !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
5.20k
    return EXT_RETURN_SENT;
1427
5.20k
}
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
19.9k
{
1434
    /* We don't currently support this extension inside a CertificateRequest */
1435
19.9k
    if (context == SSL_EXT_TLS1_3_CERTIFICATE_REQUEST)
1436
0
        return EXT_RETURN_NOT_SENT;
1437
1438
19.9k
    if (!s->ext.status_expected)
1439
19.9k
        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
25.0k
{
1473
25.0k
    const unsigned char *npa;
1474
25.0k
    unsigned int npalen;
1475
25.0k
    int ret;
1476
25.0k
    int npn_seen = s->s3.npn_seen;
1477
1478
25.0k
    s->s3.npn_seen = 0;
1479
25.0k
    if (!npn_seen || s->ctx->ext.npn_advertised_cb == NULL)
1480
25.0k
        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
28.3k
{
1501
28.3k
    if (s->s3.alpn_selected == NULL)
1502
28.3k
        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
28.3k
{
1524
28.3k
    if (s->srtp_profile == NULL)
1525
28.3k
        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
25.0k
{
1544
25.0k
    if (!s->ext.use_etm)
1545
23.3k
        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.72k
    if (s->s3.tmp.new_cipher->algorithm_mac == SSL_AEAD
1552
1.39k
        || s->s3.tmp.new_cipher->algorithm_enc == SSL_RC4
1553
1.39k
        || s->s3.tmp.new_cipher->algorithm_enc == SSL_eGOST2814789CNT
1554
1.39k
        || s->s3.tmp.new_cipher->algorithm_enc == SSL_eGOST2814789CNT12
1555
1.39k
        || s->s3.tmp.new_cipher->algorithm_enc == SSL_MAGMA
1556
1.39k
        || s->s3.tmp.new_cipher->algorithm_enc == SSL_KUZNYECHIK) {
1557
333
        s->ext.use_etm = 0;
1558
333
        return EXT_RETURN_NOT_SENT;
1559
333
    }
1560
1561
1.39k
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_encrypt_then_mac)
1562
1.39k
            || !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.39k
    return EXT_RETURN_SENT;
1568
1.39k
}
1569
1570
EXT_RETURN tls_construct_stoc_ems(SSL *s, WPACKET *pkt, unsigned int context,
1571
                                  X509 *x, size_t chainidx)
1572
25.0k
{
1573
25.0k
    if ((s->s3.flags & TLS1_FLAGS_RECEIVED_EXTMS) == 0)
1574
20.8k
        return EXT_RETURN_NOT_SENT;
1575
1576
4.17k
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_extended_master_secret)
1577
4.17k
            || !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
4.17k
    return EXT_RETURN_SENT;
1583
4.17k
}
1584
1585
EXT_RETURN tls_construct_stoc_supported_versions(SSL *s, WPACKET *pkt,
1586
                                                 unsigned int context, X509 *x,
1587
                                                 size_t chainidx)
1588
4.06k
{
1589
4.06k
    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
4.06k
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_supported_versions)
1595
4.06k
            || !WPACKET_start_sub_packet_u16(pkt)
1596
4.06k
            || !WPACKET_put_bytes_u16(pkt, s->version)
1597
4.06k
            || !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
4.06k
    return EXT_RETURN_SENT;
1603
4.06k
}
1604
1605
EXT_RETURN tls_construct_stoc_key_share(SSL *s, WPACKET *pkt,
1606
                                        unsigned int context, X509 *x,
1607
                                        size_t chainidx)
1608
4.06k
{
1609
4.06k
#ifndef OPENSSL_NO_TLS1_3
1610
4.06k
    unsigned char *encodedPoint;
1611
4.06k
    size_t encoded_pt_len = 0;
1612
4.06k
    EVP_PKEY *ckey = s->s3.peer_tmp, *skey = NULL;
1613
4.06k
    const TLS_GROUP_INFO *ginf = NULL;
1614
1615
4.06k
    if (s->hello_retry_request == SSL_HRR_PENDING) {
1616
807
        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
807
        if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_key_share)
1621
807
                || !WPACKET_start_sub_packet_u16(pkt)
1622
807
                || !WPACKET_put_bytes_u16(pkt, s->s3.group_id)
1623
807
                || !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
807
        return EXT_RETURN_SENT;
1629
807
    }
1630
1631
3.25k
    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
3.25k
    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
3.25k
    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_key_share)
1648
3.25k
            || !WPACKET_start_sub_packet_u16(pkt)
1649
3.25k
            || !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
3.25k
    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
3.25k
    if (!ginf->is_kem) {
1660
        /* Regular KEX */
1661
3.24k
        skey = ssl_generate_pkey(s, ckey);
1662
3.24k
        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
3.24k
        encoded_pt_len = EVP_PKEY_get1_encoded_public_key(skey, &encodedPoint);
1669
3.24k
        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
3.24k
        if (!WPACKET_sub_memcpy_u16(pkt, encodedPoint, encoded_pt_len)
1676
3.24k
                || !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
3.24k
        OPENSSL_free(encodedPoint);
1683
1684
        /*
1685
         * This causes the crypto state to be updated based on the derived keys
1686
         */
1687
3.24k
        s->s3.tmp.pkey = skey;
1688
3.24k
        if (ssl_derive(s, skey, ckey, 1) == 0) {
1689
            /* SSLfatal() already called */
1690
22
            return EXT_RETURN_FAIL;
1691
22
        }
1692
3.24k
    } else {
1693
        /* KEM mode */
1694
16
        unsigned char *ct = NULL;
1695
16
        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
16
        if (ssl_encapsulate(s, ckey, &ct, &ctlen, 0) == 0) {
1704
            /* SSLfatal() already called */
1705
6
            return EXT_RETURN_FAIL;
1706
6
        }
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
3.23k
    s->s3.did_kex = 1;
1731
3.23k
    return EXT_RETURN_SENT;
1732
#else
1733
    return EXT_RETURN_FAIL;
1734
#endif
1735
3.25k
}
1736
1737
EXT_RETURN tls_construct_stoc_cookie(SSL *s, WPACKET *pkt, unsigned int context,
1738
                                     X509 *x, size_t chainidx)
1739
807
{
1740
807
#ifndef OPENSSL_NO_TLS1_3
1741
807
    unsigned char *hashval1, *hashval2, *appcookie1, *appcookie2, *cookie;
1742
807
    unsigned char *hmac, *hmac2;
1743
807
    size_t startlen, ciphlen, totcookielen, hashlen, hmaclen, appcookielen;
1744
807
    EVP_MD_CTX *hctx;
1745
807
    EVP_PKEY *pkey;
1746
807
    int ret = EXT_RETURN_FAIL;
1747
1748
807
    if ((s->s3.flags & TLS1_FLAGS_STATELESS) == 0)
1749
807
        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
25.0k
{
1865
25.0k
    const unsigned char cryptopro_ext[36] = {
1866
25.0k
        0xfd, 0xe8,         /* 65000 */
1867
25.0k
        0x00, 0x20,         /* 32 bytes length */
1868
25.0k
        0x30, 0x1e, 0x30, 0x08, 0x06, 0x06, 0x2a, 0x85,
1869
25.0k
        0x03, 0x02, 0x02, 0x09, 0x30, 0x08, 0x06, 0x06,
1870
25.0k
        0x2a, 0x85, 0x03, 0x02, 0x02, 0x16, 0x30, 0x08,
1871
25.0k
        0x06, 0x06, 0x2a, 0x85, 0x03, 0x02, 0x02, 0x17
1872
25.0k
    };
1873
1874
25.0k
    if (((s->s3.tmp.new_cipher->id & 0xFFFF) != 0x80
1875
25.0k
         && (s->s3.tmp.new_cipher->id & 0xFFFF) != 0x81)
1876
0
            || (SSL_get_options(s) & SSL_OP_CRYPTOPRO_TLSEXT_BUG) == 0)
1877
25.0k
        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
3.23k
{
1891
3.23k
    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
3.23k
    if (s->ext.early_data != SSL_EARLY_DATA_ACCEPTED)
1907
3.23k
        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
3.23k
{
1922
3.23k
    if (!s->hit)
1923
3.23k
        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
}