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