5a0fa25571f393e421898357e8eaa3bb5f0f6de2
[openssl.git] / ssl / statem / extensions.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 <string.h>
11 #include "internal/nelem.h"
12 #include "internal/cryptlib.h"
13 #include "../ssl_locl.h"
14 #include "statem_locl.h"
15 #include "internal/cryptlib.h"
16
17 static int final_renegotiate(SSL *s, unsigned int context, int sent);
18 static int init_server_name(SSL *s, unsigned int context);
19 static int final_server_name(SSL *s, unsigned int context, int sent);
20 #ifndef OPENSSL_NO_EC
21 static int final_ec_pt_formats(SSL *s, unsigned int context, int sent);
22 #endif
23 static int init_session_ticket(SSL *s, unsigned int context);
24 #ifndef OPENSSL_NO_OCSP
25 static int init_status_request(SSL *s, unsigned int context);
26 #endif
27 #ifndef OPENSSL_NO_NEXTPROTONEG
28 static int init_npn(SSL *s, unsigned int context);
29 #endif
30 static int init_alpn(SSL *s, unsigned int context);
31 static int final_alpn(SSL *s, unsigned int context, int sent);
32 static int init_sig_algs(SSL *s, unsigned int context);
33 static int init_certificate_authorities(SSL *s, unsigned int context);
34 static EXT_RETURN tls_construct_certificate_authorities(SSL *s, WPACKET *pkt,
35                                                         unsigned int context,
36                                                         X509 *x,
37                                                         size_t chainidx);
38 static int tls_parse_certificate_authorities(SSL *s, PACKET *pkt,
39                                              unsigned int context, X509 *x,
40                                              size_t chainidx);
41 #ifndef OPENSSL_NO_SRP
42 static int init_srp(SSL *s, unsigned int context);
43 #endif
44 static int init_etm(SSL *s, unsigned int context);
45 static int init_ems(SSL *s, unsigned int context);
46 static int final_ems(SSL *s, unsigned int context, int sent);
47 static int init_psk_kex_modes(SSL *s, unsigned int context);
48 #ifndef OPENSSL_NO_EC
49 static int final_key_share(SSL *s, unsigned int context, int sent);
50 #endif
51 #ifndef OPENSSL_NO_SRTP
52 static int init_srtp(SSL *s, unsigned int context);
53 #endif
54 static int final_sig_algs(SSL *s, unsigned int context, int sent);
55 static int final_early_data(SSL *s, unsigned int context, int sent);
56 static int final_maxfragmentlen(SSL *s, unsigned int context, int sent);
57
58 /* Structure to define a built-in extension */
59 typedef struct extensions_definition_st {
60     /* The defined type for the extension */
61     unsigned int type;
62     /*
63      * The context that this extension applies to, e.g. what messages and
64      * protocol versions
65      */
66     unsigned int context;
67     /*
68      * Initialise extension before parsing. Always called for relevant contexts
69      * even if extension not present
70      */
71     int (*init)(SSL *s, unsigned int context);
72     /* Parse extension sent from client to server */
73     int (*parse_ctos)(SSL *s, PACKET *pkt, unsigned int context, X509 *x,
74                       size_t chainidx);
75     /* Parse extension send from server to client */
76     int (*parse_stoc)(SSL *s, PACKET *pkt, unsigned int context, X509 *x,
77                       size_t chainidx);
78     /* Construct extension sent from server to client */
79     EXT_RETURN (*construct_stoc)(SSL *s, WPACKET *pkt, unsigned int context,
80                                  X509 *x, size_t chainidx);
81     /* Construct extension sent from client to server */
82     EXT_RETURN (*construct_ctos)(SSL *s, WPACKET *pkt, unsigned int context,
83                                  X509 *x, size_t chainidx);
84     /*
85      * Finalise extension after parsing. Always called where an extensions was
86      * initialised even if the extension was not present. |sent| is set to 1 if
87      * the extension was seen, or 0 otherwise.
88      */
89     int (*final)(SSL *s, unsigned int context, int sent);
90 } EXTENSION_DEFINITION;
91
92 /*
93  * Definitions of all built-in extensions. NOTE: Changes in the number or order
94  * of these extensions should be mirrored with equivalent changes to the
95  * indexes ( TLSEXT_IDX_* ) defined in ssl_locl.h.
96  * Each extension has an initialiser, a client and
97  * server side parser and a finaliser. The initialiser is called (if the
98  * extension is relevant to the given context) even if we did not see the
99  * extension in the message that we received. The parser functions are only
100  * called if we see the extension in the message. The finalisers are always
101  * called if the initialiser was called.
102  * There are also server and client side constructor functions which are always
103  * called during message construction if the extension is relevant for the
104  * given context.
105  * The initialisation, parsing, finalisation and construction functions are
106  * always called in the order defined in this list. Some extensions may depend
107  * on others having been processed first, so the order of this list is
108  * significant.
109  * The extension context is defined by a series of flags which specify which
110  * messages the extension is relevant to. These flags also specify whether the
111  * extension is relevant to a particular protocol or protocol version.
112  *
113  * TODO(TLS1.3): Make sure we have a test to check the consistency of these
114  *
115  * NOTE: WebSphere Application Server 7+ cannot handle empty extensions at
116  * the end, keep these extensions before signature_algorithm.
117  */
118 #define INVALID_EXTENSION { 0x10000, 0, NULL, NULL, NULL, NULL, NULL, NULL }
119 static const EXTENSION_DEFINITION ext_defs[] = {
120     {
121         TLSEXT_TYPE_renegotiate,
122         SSL_EXT_CLIENT_HELLO | SSL_EXT_TLS1_2_SERVER_HELLO
123         | SSL_EXT_SSL3_ALLOWED | SSL_EXT_TLS1_2_AND_BELOW_ONLY,
124         NULL, tls_parse_ctos_renegotiate, tls_parse_stoc_renegotiate,
125         tls_construct_stoc_renegotiate, tls_construct_ctos_renegotiate,
126         final_renegotiate
127     },
128     {
129         TLSEXT_TYPE_server_name,
130         SSL_EXT_CLIENT_HELLO | SSL_EXT_TLS1_2_SERVER_HELLO
131         | SSL_EXT_TLS1_3_ENCRYPTED_EXTENSIONS,
132         init_server_name,
133         tls_parse_ctos_server_name, tls_parse_stoc_server_name,
134         tls_construct_stoc_server_name, tls_construct_ctos_server_name,
135         final_server_name
136     },
137     {
138         TLSEXT_TYPE_max_fragment_length,
139         SSL_EXT_CLIENT_HELLO | SSL_EXT_TLS1_2_SERVER_HELLO
140         | SSL_EXT_TLS1_3_ENCRYPTED_EXTENSIONS,
141         NULL, tls_parse_ctos_maxfragmentlen, tls_parse_stoc_maxfragmentlen,
142         tls_construct_stoc_maxfragmentlen, tls_construct_ctos_maxfragmentlen,
143         final_maxfragmentlen
144     },
145 #ifndef OPENSSL_NO_SRP
146     {
147         TLSEXT_TYPE_srp,
148         SSL_EXT_CLIENT_HELLO | SSL_EXT_TLS1_2_AND_BELOW_ONLY,
149         init_srp, tls_parse_ctos_srp, NULL, NULL, tls_construct_ctos_srp, NULL
150     },
151 #else
152     INVALID_EXTENSION,
153 #endif
154 #ifndef OPENSSL_NO_EC
155     {
156         TLSEXT_TYPE_ec_point_formats,
157         SSL_EXT_CLIENT_HELLO | SSL_EXT_TLS1_2_SERVER_HELLO
158         | SSL_EXT_TLS1_2_AND_BELOW_ONLY,
159         NULL, tls_parse_ctos_ec_pt_formats, tls_parse_stoc_ec_pt_formats,
160         tls_construct_stoc_ec_pt_formats, tls_construct_ctos_ec_pt_formats,
161         final_ec_pt_formats
162     },
163     {
164         /*
165          * "supported_groups" is spread across several specifications.
166          * It was originally specified as "elliptic_curves" in RFC 4492,
167          * and broadened to include named FFDH groups by RFC 7919.
168          * Both RFCs 4492 and 7919 do not include a provision for the server
169          * to indicate to the client the complete list of groups supported
170          * by the server, with the server instead just indicating the
171          * selected group for this connection in the ServerKeyExchange
172          * message.  TLS 1.3 adds a scheme for the server to indicate
173          * to the client its list of supported groups in the
174          * EncryptedExtensions message, but none of the relevant
175          * specifications permit sending supported_groups in the ServerHello.
176          * Nonetheless (possibly due to the close proximity to the
177          * "ec_point_formats" extension, which is allowed in the ServerHello),
178          * there are several servers that send this extension in the
179          * ServerHello anyway.  Up to and including the 1.1.0 release,
180          * we did not check for the presence of nonpermitted extensions,
181          * so to avoid a regression, we must permit this extension in the
182          * TLS 1.2 ServerHello as well.
183          *
184          * Note that there is no tls_parse_stoc_supported_groups function,
185          * so we do not perform any additional parsing, validation, or
186          * processing on the server's group list -- this is just a minimal
187          * change to preserve compatibility with these misbehaving servers.
188          */
189         TLSEXT_TYPE_supported_groups,
190         SSL_EXT_CLIENT_HELLO | SSL_EXT_TLS1_3_ENCRYPTED_EXTENSIONS
191         | SSL_EXT_TLS1_2_SERVER_HELLO,
192         NULL, tls_parse_ctos_supported_groups, NULL,
193         tls_construct_stoc_supported_groups,
194         tls_construct_ctos_supported_groups, NULL
195     },
196 #else
197     INVALID_EXTENSION,
198     INVALID_EXTENSION,
199 #endif
200     {
201         TLSEXT_TYPE_session_ticket,
202         SSL_EXT_CLIENT_HELLO | SSL_EXT_TLS1_2_SERVER_HELLO
203         | SSL_EXT_TLS1_2_AND_BELOW_ONLY,
204         init_session_ticket, tls_parse_ctos_session_ticket,
205         tls_parse_stoc_session_ticket, tls_construct_stoc_session_ticket,
206         tls_construct_ctos_session_ticket, NULL
207     },
208 #ifndef OPENSSL_NO_OCSP
209     {
210         TLSEXT_TYPE_status_request,
211         SSL_EXT_CLIENT_HELLO | SSL_EXT_TLS1_2_SERVER_HELLO
212         | SSL_EXT_TLS1_3_CERTIFICATE,
213         init_status_request, tls_parse_ctos_status_request,
214         tls_parse_stoc_status_request, tls_construct_stoc_status_request,
215         tls_construct_ctos_status_request, NULL
216     },
217 #else
218     INVALID_EXTENSION,
219 #endif
220 #ifndef OPENSSL_NO_NEXTPROTONEG
221     {
222         TLSEXT_TYPE_next_proto_neg,
223         SSL_EXT_CLIENT_HELLO | SSL_EXT_TLS1_2_SERVER_HELLO
224         | SSL_EXT_TLS1_2_AND_BELOW_ONLY,
225         init_npn, tls_parse_ctos_npn, tls_parse_stoc_npn,
226         tls_construct_stoc_next_proto_neg, tls_construct_ctos_npn, NULL
227     },
228 #else
229     INVALID_EXTENSION,
230 #endif
231     {
232         /*
233          * Must appear in this list after server_name so that finalisation
234          * happens after server_name callbacks
235          */
236         TLSEXT_TYPE_application_layer_protocol_negotiation,
237         SSL_EXT_CLIENT_HELLO | SSL_EXT_TLS1_2_SERVER_HELLO
238         | SSL_EXT_TLS1_3_ENCRYPTED_EXTENSIONS,
239         init_alpn, tls_parse_ctos_alpn, tls_parse_stoc_alpn,
240         tls_construct_stoc_alpn, tls_construct_ctos_alpn, final_alpn
241     },
242 #ifndef OPENSSL_NO_SRTP
243     {
244         TLSEXT_TYPE_use_srtp,
245         SSL_EXT_CLIENT_HELLO | SSL_EXT_TLS1_2_SERVER_HELLO
246         | SSL_EXT_TLS1_3_ENCRYPTED_EXTENSIONS | SSL_EXT_DTLS_ONLY,
247         init_srtp, tls_parse_ctos_use_srtp, tls_parse_stoc_use_srtp,
248         tls_construct_stoc_use_srtp, tls_construct_ctos_use_srtp, NULL
249     },
250 #else
251     INVALID_EXTENSION,
252 #endif
253     {
254         TLSEXT_TYPE_encrypt_then_mac,
255         SSL_EXT_CLIENT_HELLO | SSL_EXT_TLS1_2_SERVER_HELLO
256         | SSL_EXT_TLS1_2_AND_BELOW_ONLY,
257         init_etm, tls_parse_ctos_etm, tls_parse_stoc_etm,
258         tls_construct_stoc_etm, tls_construct_ctos_etm, NULL
259     },
260 #ifndef OPENSSL_NO_CT
261     {
262         TLSEXT_TYPE_signed_certificate_timestamp,
263         SSL_EXT_CLIENT_HELLO | SSL_EXT_TLS1_2_SERVER_HELLO
264         | SSL_EXT_TLS1_3_CERTIFICATE,
265         NULL,
266         /*
267          * No server side support for this, but can be provided by a custom
268          * extension. This is an exception to the rule that custom extensions
269          * cannot override built in ones.
270          */
271         NULL, tls_parse_stoc_sct, NULL, tls_construct_ctos_sct,  NULL
272     },
273 #else
274     INVALID_EXTENSION,
275 #endif
276     {
277         TLSEXT_TYPE_extended_master_secret,
278         SSL_EXT_CLIENT_HELLO | SSL_EXT_TLS1_2_SERVER_HELLO
279         | SSL_EXT_TLS1_2_AND_BELOW_ONLY,
280         init_ems, tls_parse_ctos_ems, tls_parse_stoc_ems,
281         tls_construct_stoc_ems, tls_construct_ctos_ems, final_ems
282     },
283     {
284         TLSEXT_TYPE_signature_algorithms,
285         SSL_EXT_CLIENT_HELLO | SSL_EXT_TLS1_3_CERTIFICATE_REQUEST,
286         init_sig_algs, tls_parse_ctos_sig_algs,
287         tls_parse_ctos_sig_algs, tls_construct_ctos_sig_algs,
288         tls_construct_ctos_sig_algs, final_sig_algs
289     },
290     {
291         TLSEXT_TYPE_supported_versions,
292         SSL_EXT_CLIENT_HELLO | SSL_EXT_TLS1_2_SERVER_HELLO
293         | SSL_EXT_TLS1_3_SERVER_HELLO | SSL_EXT_TLS1_3_HELLO_RETRY_REQUEST
294         | SSL_EXT_TLS_IMPLEMENTATION_ONLY,
295         NULL,
296         /* Processed inline as part of version selection */
297         NULL, tls_parse_stoc_supported_versions,
298         tls_construct_stoc_supported_versions,
299         tls_construct_ctos_supported_versions, NULL
300     },
301     {
302         TLSEXT_TYPE_psk_kex_modes,
303         SSL_EXT_CLIENT_HELLO | SSL_EXT_TLS_IMPLEMENTATION_ONLY
304         | SSL_EXT_TLS1_3_ONLY,
305         init_psk_kex_modes, tls_parse_ctos_psk_kex_modes, NULL, NULL,
306         tls_construct_ctos_psk_kex_modes, NULL
307     },
308 #ifndef OPENSSL_NO_EC
309     {
310         /*
311          * Must be in this list after supported_groups. We need that to have
312          * been parsed before we do this one.
313          */
314         TLSEXT_TYPE_key_share,
315         SSL_EXT_CLIENT_HELLO | SSL_EXT_TLS1_3_SERVER_HELLO
316         | SSL_EXT_TLS1_3_HELLO_RETRY_REQUEST | SSL_EXT_TLS_IMPLEMENTATION_ONLY
317         | SSL_EXT_TLS1_3_ONLY,
318         NULL, tls_parse_ctos_key_share, tls_parse_stoc_key_share,
319         tls_construct_stoc_key_share, tls_construct_ctos_key_share,
320         final_key_share
321     },
322 #endif
323     {
324         /* Must be after key_share */
325         TLSEXT_TYPE_cookie,
326         SSL_EXT_CLIENT_HELLO | SSL_EXT_TLS1_3_HELLO_RETRY_REQUEST
327         | SSL_EXT_TLS_IMPLEMENTATION_ONLY | SSL_EXT_TLS1_3_ONLY,
328         NULL, tls_parse_ctos_cookie, tls_parse_stoc_cookie,
329         tls_construct_stoc_cookie, tls_construct_ctos_cookie, NULL
330     },
331     {
332         /*
333          * Special unsolicited ServerHello extension only used when
334          * SSL_OP_CRYPTOPRO_TLSEXT_BUG is set
335          */
336         TLSEXT_TYPE_cryptopro_bug,
337         SSL_EXT_TLS1_2_SERVER_HELLO | SSL_EXT_TLS1_2_AND_BELOW_ONLY,
338         NULL, NULL, NULL, tls_construct_stoc_cryptopro_bug, NULL, NULL
339     },
340     {
341         TLSEXT_TYPE_early_data,
342         SSL_EXT_CLIENT_HELLO | SSL_EXT_TLS1_3_ENCRYPTED_EXTENSIONS
343         | SSL_EXT_TLS1_3_NEW_SESSION_TICKET,
344         NULL, tls_parse_ctos_early_data, tls_parse_stoc_early_data,
345         tls_construct_stoc_early_data, tls_construct_ctos_early_data,
346         final_early_data
347     },
348     {
349         TLSEXT_TYPE_certificate_authorities,
350         SSL_EXT_CLIENT_HELLO | SSL_EXT_TLS1_3_CERTIFICATE_REQUEST
351         | SSL_EXT_TLS1_3_ONLY,
352         init_certificate_authorities,
353         tls_parse_certificate_authorities, tls_parse_certificate_authorities,
354         tls_construct_certificate_authorities,
355         tls_construct_certificate_authorities, NULL,
356     },
357     {
358         /* Must be immediately before pre_shared_key */
359         TLSEXT_TYPE_padding,
360         SSL_EXT_CLIENT_HELLO,
361         NULL,
362         /* We send this, but don't read it */
363         NULL, NULL, NULL, tls_construct_ctos_padding, NULL
364     },
365     {
366         /* Required by the TLSv1.3 spec to always be the last extension */
367         TLSEXT_TYPE_psk,
368         SSL_EXT_CLIENT_HELLO | SSL_EXT_TLS1_3_SERVER_HELLO
369         | SSL_EXT_TLS_IMPLEMENTATION_ONLY | SSL_EXT_TLS1_3_ONLY,
370         NULL, tls_parse_ctos_psk, tls_parse_stoc_psk, tls_construct_stoc_psk,
371         tls_construct_ctos_psk, NULL
372     }
373 };
374
375 /* Check whether an extension's context matches the current context */
376 static int validate_context(SSL *s, unsigned int extctx, unsigned int thisctx)
377 {
378     /* Check we're allowed to use this extension in this context */
379     if ((thisctx & extctx) == 0)
380         return 0;
381
382     if (SSL_IS_DTLS(s)) {
383         if ((extctx & SSL_EXT_TLS_ONLY) != 0)
384             return 0;
385     } else if ((extctx & SSL_EXT_DTLS_ONLY) != 0) {
386         return 0;
387     }
388
389     return 1;
390 }
391
392 int tls_validate_all_contexts(SSL *s, unsigned int thisctx, RAW_EXTENSION *exts)
393 {
394     size_t i, num_exts, builtin_num = OSSL_NELEM(ext_defs), offset;
395     RAW_EXTENSION *thisext;
396     unsigned int context;
397     ENDPOINT role = ENDPOINT_BOTH;
398
399     if ((thisctx & SSL_EXT_CLIENT_HELLO) != 0)
400         role = ENDPOINT_SERVER;
401     else if ((thisctx & SSL_EXT_TLS1_2_SERVER_HELLO) != 0)
402         role = ENDPOINT_CLIENT;
403
404     /* Calculate the number of extensions in the extensions list */
405     num_exts = builtin_num + s->cert->custext.meths_count;
406
407     for (thisext = exts, i = 0; i < num_exts; i++, thisext++) {
408         if (!thisext->present)
409             continue;
410
411         if (i < builtin_num) {
412             context = ext_defs[i].context;
413         } else {
414             custom_ext_method *meth = NULL;
415
416             meth = custom_ext_find(&s->cert->custext, role, thisext->type,
417                                    &offset);
418             if (!ossl_assert(meth != NULL))
419                 return 0;
420             context = meth->context;
421         }
422
423         if (!validate_context(s, context, thisctx))
424             return 0;
425     }
426
427     return 1;
428 }
429
430 /*
431  * Verify whether we are allowed to use the extension |type| in the current
432  * |context|. Returns 1 to indicate the extension is allowed or unknown or 0 to
433  * indicate the extension is not allowed. If returning 1 then |*found| is set to
434  * the definition for the extension we found.
435  */
436 static int verify_extension(SSL *s, unsigned int context, unsigned int type,
437                             custom_ext_methods *meths, RAW_EXTENSION *rawexlist,
438                             RAW_EXTENSION **found)
439 {
440     size_t i;
441     size_t builtin_num = OSSL_NELEM(ext_defs);
442     const EXTENSION_DEFINITION *thisext;
443
444     for (i = 0, thisext = ext_defs; i < builtin_num; i++, thisext++) {
445         if (type == thisext->type) {
446             if (!validate_context(s, thisext->context, context))
447                 return 0;
448
449             *found = &rawexlist[i];
450             return 1;
451         }
452     }
453
454     /* Check the custom extensions */
455     if (meths != NULL) {
456         size_t offset = 0;
457         ENDPOINT role = ENDPOINT_BOTH;
458         custom_ext_method *meth = NULL;
459
460         if ((context & SSL_EXT_CLIENT_HELLO) != 0)
461             role = ENDPOINT_SERVER;
462         else if ((context & SSL_EXT_TLS1_2_SERVER_HELLO) != 0)
463             role = ENDPOINT_CLIENT;
464
465         meth = custom_ext_find(meths, role, type, &offset);
466         if (meth != NULL) {
467             if (!validate_context(s, meth->context, context))
468                 return 0;
469             *found = &rawexlist[offset + builtin_num];
470             return 1;
471         }
472     }
473
474     /* Unknown extension. We allow it */
475     *found = NULL;
476     return 1;
477 }
478
479 /*
480  * Check whether the context defined for an extension |extctx| means whether
481  * the extension is relevant for the current context |thisctx| or not. Returns
482  * 1 if the extension is relevant for this context, and 0 otherwise
483  */
484 int extension_is_relevant(SSL *s, unsigned int extctx, unsigned int thisctx)
485 {
486     int is_tls13;
487
488     /*
489      * For HRR we haven't selected the version yet but we know it will be
490      * TLSv1.3
491      */
492     if ((thisctx & SSL_EXT_TLS1_3_HELLO_RETRY_REQUEST) != 0)
493         is_tls13 = 1;
494     else
495         is_tls13 = SSL_IS_TLS13(s);
496
497     if ((SSL_IS_DTLS(s)
498                 && (extctx & SSL_EXT_TLS_IMPLEMENTATION_ONLY) != 0)
499             || (s->version == SSL3_VERSION
500                     && (extctx & SSL_EXT_SSL3_ALLOWED) == 0)
501             || (is_tls13 && (extctx & SSL_EXT_TLS1_2_AND_BELOW_ONLY) != 0)
502             || (!is_tls13 && (extctx & SSL_EXT_TLS1_3_ONLY) != 0)
503             || (s->hit && (extctx & SSL_EXT_IGNORE_ON_RESUMPTION) != 0))
504         return 0;
505
506     return 1;
507 }
508
509 /*
510  * Gather a list of all the extensions from the data in |packet]. |context|
511  * tells us which message this extension is for. The raw extension data is
512  * stored in |*res| on success. We don't actually process the content of the
513  * extensions yet, except to check their types. This function also runs the
514  * initialiser functions for all known extensions if |init| is nonzero (whether
515  * we have collected them or not). If successful the caller is responsible for
516  * freeing the contents of |*res|.
517  *
518  * Per http://tools.ietf.org/html/rfc5246#section-7.4.1.4, there may not be
519  * more than one extension of the same type in a ClientHello or ServerHello.
520  * This function returns 1 if all extensions are unique and we have parsed their
521  * types, and 0 if the extensions contain duplicates, could not be successfully
522  * found, or an internal error occurred. We only check duplicates for
523  * extensions that we know about. We ignore others.
524  */
525 int tls_collect_extensions(SSL *s, PACKET *packet, unsigned int context,
526                            RAW_EXTENSION **res, size_t *len, int init)
527 {
528     PACKET extensions = *packet;
529     size_t i = 0;
530     size_t num_exts;
531     custom_ext_methods *exts = &s->cert->custext;
532     RAW_EXTENSION *raw_extensions = NULL;
533     const EXTENSION_DEFINITION *thisexd;
534
535     *res = NULL;
536
537     /*
538      * Initialise server side custom extensions. Client side is done during
539      * construction of extensions for the ClientHello.
540      */
541     if ((context & SSL_EXT_CLIENT_HELLO) != 0)
542         custom_ext_init(&s->cert->custext);
543
544     num_exts = OSSL_NELEM(ext_defs) + (exts != NULL ? exts->meths_count : 0);
545     raw_extensions = OPENSSL_zalloc(num_exts * sizeof(*raw_extensions));
546     if (raw_extensions == NULL) {
547         SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_COLLECT_EXTENSIONS,
548                  ERR_R_MALLOC_FAILURE);
549         return 0;
550     }
551
552     i = 0;
553     while (PACKET_remaining(&extensions) > 0) {
554         unsigned int type, idx;
555         PACKET extension;
556         RAW_EXTENSION *thisex;
557
558         if (!PACKET_get_net_2(&extensions, &type) ||
559             !PACKET_get_length_prefixed_2(&extensions, &extension)) {
560             SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_COLLECT_EXTENSIONS,
561                      SSL_R_BAD_EXTENSION);
562             goto err;
563         }
564         /*
565          * Verify this extension is allowed. We only check duplicates for
566          * extensions that we recognise. We also have a special case for the
567          * PSK extension, which must be the last one in the ClientHello.
568          */
569         if (!verify_extension(s, context, type, exts, raw_extensions, &thisex)
570                 || (thisex != NULL && thisex->present == 1)
571                 || (type == TLSEXT_TYPE_psk
572                     && (context & SSL_EXT_CLIENT_HELLO) != 0
573                     && PACKET_remaining(&extensions) != 0)) {
574             SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_F_TLS_COLLECT_EXTENSIONS,
575                      SSL_R_BAD_EXTENSION);
576             goto err;
577         }
578         idx = thisex - raw_extensions;
579         /*-
580          * Check that we requested this extension (if appropriate). Requests can
581          * be sent in the ClientHello and CertificateRequest. Unsolicited
582          * extensions can be sent in the NewSessionTicket. We only do this for
583          * the built-in extensions. Custom extensions have a different but
584          * similar check elsewhere.
585          * Special cases:
586          * - The HRR cookie extension is unsolicited
587          * - The renegotiate extension is unsolicited (the client signals
588          *   support via an SCSV)
589          * - The signed_certificate_timestamp extension can be provided by a
590          * custom extension or by the built-in version. We let the extension
591          * itself handle unsolicited response checks.
592          */
593         if (idx < OSSL_NELEM(ext_defs)
594                 && (context & (SSL_EXT_CLIENT_HELLO
595                                | SSL_EXT_TLS1_3_CERTIFICATE_REQUEST
596                                | SSL_EXT_TLS1_3_NEW_SESSION_TICKET)) == 0
597                 && type != TLSEXT_TYPE_cookie
598                 && type != TLSEXT_TYPE_renegotiate
599                 && type != TLSEXT_TYPE_signed_certificate_timestamp
600                 && (s->ext.extflags[idx] & SSL_EXT_FLAG_SENT) == 0) {
601             SSLfatal(s, SSL_AD_UNSUPPORTED_EXTENSION,
602                      SSL_F_TLS_COLLECT_EXTENSIONS, SSL_R_UNSOLICITED_EXTENSION);
603             goto err;
604         }
605         if (thisex != NULL) {
606             thisex->data = extension;
607             thisex->present = 1;
608             thisex->type = type;
609             thisex->received_order = i++;
610             if (s->ext.debug_cb)
611                 s->ext.debug_cb(s, !s->server, thisex->type,
612                                 PACKET_data(&thisex->data),
613                                 PACKET_remaining(&thisex->data),
614                                 s->ext.debug_arg);
615         }
616     }
617
618     if (init) {
619         /*
620          * Initialise all known extensions relevant to this context,
621          * whether we have found them or not
622          */
623         for (thisexd = ext_defs, i = 0; i < OSSL_NELEM(ext_defs);
624              i++, thisexd++) {
625             if (thisexd->init != NULL && (thisexd->context & context) != 0
626                 && extension_is_relevant(s, thisexd->context, context)
627                 && !thisexd->init(s, context)) {
628                 /* SSLfatal() already called */
629                 goto err;
630             }
631         }
632     }
633
634     *res = raw_extensions;
635     if (len != NULL)
636         *len = num_exts;
637     return 1;
638
639  err:
640     OPENSSL_free(raw_extensions);
641     return 0;
642 }
643
644 /*
645  * Runs the parser for a given extension with index |idx|. |exts| contains the
646  * list of all parsed extensions previously collected by
647  * tls_collect_extensions(). The parser is only run if it is applicable for the
648  * given |context| and the parser has not already been run. If this is for a
649  * Certificate message, then we also provide the parser with the relevant
650  * Certificate |x| and its position in the |chainidx| with 0 being the first
651  * Certificate. Returns 1 on success or 0 on failure. If an extension is not
652  * present this counted as success.
653  */
654 int tls_parse_extension(SSL *s, TLSEXT_INDEX idx, int context,
655                         RAW_EXTENSION *exts, X509 *x, size_t chainidx)
656 {
657     RAW_EXTENSION *currext = &exts[idx];
658     int (*parser)(SSL *s, PACKET *pkt, unsigned int context, X509 *x,
659                   size_t chainidx) = NULL;
660
661     /* Skip if the extension is not present */
662     if (!currext->present)
663         return 1;
664
665     /* Skip if we've already parsed this extension */
666     if (currext->parsed)
667         return 1;
668
669     currext->parsed = 1;
670
671     if (idx < OSSL_NELEM(ext_defs)) {
672         /* We are handling a built-in extension */
673         const EXTENSION_DEFINITION *extdef = &ext_defs[idx];
674
675         /* Check if extension is defined for our protocol. If not, skip */
676         if (!extension_is_relevant(s, extdef->context, context))
677             return 1;
678
679         parser = s->server ? extdef->parse_ctos : extdef->parse_stoc;
680
681         if (parser != NULL)
682             return parser(s, &currext->data, context, x, chainidx);
683
684         /*
685          * If the parser is NULL we fall through to the custom extension
686          * processing
687          */
688     }
689
690     /* Parse custom extensions */
691     return custom_ext_parse(s, context, currext->type,
692                             PACKET_data(&currext->data),
693                             PACKET_remaining(&currext->data),
694                             x, chainidx);
695 }
696
697 /*
698  * Parse all remaining extensions that have not yet been parsed. Also calls the
699  * finalisation for all extensions at the end if |fin| is nonzero, whether we
700  * collected them or not. Returns 1 for success or 0 for failure. If we are
701  * working on a Certificate message then we also pass the Certificate |x| and
702  * its position in the |chainidx|, with 0 being the first certificate.
703  */
704 int tls_parse_all_extensions(SSL *s, int context, RAW_EXTENSION *exts, X509 *x,
705                              size_t chainidx, int fin)
706 {
707     size_t i, numexts = OSSL_NELEM(ext_defs);
708     const EXTENSION_DEFINITION *thisexd;
709
710     /* Calculate the number of extensions in the extensions list */
711     numexts += s->cert->custext.meths_count;
712
713     /* Parse each extension in turn */
714     for (i = 0; i < numexts; i++) {
715         if (!tls_parse_extension(s, i, context, exts, x, chainidx)) {
716             /* SSLfatal() already called */
717             return 0;
718         }
719     }
720
721     if (fin) {
722         /*
723          * Finalise all known extensions relevant to this context,
724          * whether we have found them or not
725          */
726         for (i = 0, thisexd = ext_defs; i < OSSL_NELEM(ext_defs);
727              i++, thisexd++) {
728             if (thisexd->final != NULL && (thisexd->context & context) != 0
729                 && !thisexd->final(s, context, exts[i].present)) {
730                 /* SSLfatal() already called */
731                 return 0;
732             }
733         }
734     }
735
736     return 1;
737 }
738
739 int should_add_extension(SSL *s, unsigned int extctx, unsigned int thisctx,
740                          int max_version)
741 {
742     /* Skip if not relevant for our context */
743     if ((extctx & thisctx) == 0)
744         return 0;
745
746     /* Check if this extension is defined for our protocol. If not, skip */
747     if ((SSL_IS_DTLS(s) && (extctx & SSL_EXT_TLS_IMPLEMENTATION_ONLY) != 0)
748             || (s->version == SSL3_VERSION
749                     && (extctx & SSL_EXT_SSL3_ALLOWED) == 0)
750             || (SSL_IS_TLS13(s)
751                 && (extctx & SSL_EXT_TLS1_2_AND_BELOW_ONLY) != 0)
752             || (!SSL_IS_TLS13(s)
753                 && (extctx & SSL_EXT_TLS1_3_ONLY) != 0
754                 && (thisctx & SSL_EXT_CLIENT_HELLO) == 0)
755             || ((extctx & SSL_EXT_TLS1_3_ONLY) != 0
756                 && (thisctx & SSL_EXT_CLIENT_HELLO) != 0
757                 && (SSL_IS_DTLS(s) || max_version < TLS1_3_VERSION)))
758         return 0;
759
760     return 1;
761 }
762
763 /*
764  * Construct all the extensions relevant to the current |context| and write
765  * them to |pkt|. If this is an extension for a Certificate in a Certificate
766  * message, then |x| will be set to the Certificate we are handling, and
767  * |chainidx| will indicate the position in the chainidx we are processing (with
768  * 0 being the first in the chain). Returns 1 on success or 0 on failure. On a
769  * failure construction stops at the first extension to fail to construct.
770  */
771 int tls_construct_extensions(SSL *s, WPACKET *pkt, unsigned int context,
772                              X509 *x, size_t chainidx)
773 {
774     size_t i;
775     int min_version, max_version = 0, reason;
776     const EXTENSION_DEFINITION *thisexd;
777
778     if (!WPACKET_start_sub_packet_u16(pkt)
779                /*
780                 * If extensions are of zero length then we don't even add the
781                 * extensions length bytes to a ClientHello/ServerHello
782                 * (for non-TLSv1.3).
783                 */
784             || ((context &
785                  (SSL_EXT_CLIENT_HELLO | SSL_EXT_TLS1_2_SERVER_HELLO)) != 0
786                 && !WPACKET_set_flags(pkt,
787                                      WPACKET_FLAGS_ABANDON_ON_ZERO_LENGTH))) {
788         SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_EXTENSIONS,
789                  ERR_R_INTERNAL_ERROR);
790         return 0;
791     }
792
793     if ((context & SSL_EXT_CLIENT_HELLO) != 0) {
794         reason = ssl_get_min_max_version(s, &min_version, &max_version);
795         if (reason != 0) {
796             SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_EXTENSIONS,
797                      reason);
798             return 0;
799         }
800     }
801
802     /* Add custom extensions first */
803     if ((context & SSL_EXT_CLIENT_HELLO) != 0) {
804         /* On the server side with initialise during ClientHello parsing */
805         custom_ext_init(&s->cert->custext);
806     }
807     if (!custom_ext_add(s, context, pkt, x, chainidx, max_version)) {
808         /* SSLfatal() already called */
809         return 0;
810     }
811
812     for (i = 0, thisexd = ext_defs; i < OSSL_NELEM(ext_defs); i++, thisexd++) {
813         EXT_RETURN (*construct)(SSL *s, WPACKET *pkt, unsigned int context,
814                                 X509 *x, size_t chainidx);
815         EXT_RETURN ret;
816
817         /* Skip if not relevant for our context */
818         if (!should_add_extension(s, thisexd->context, context, max_version))
819             continue;
820
821         construct = s->server ? thisexd->construct_stoc
822                               : thisexd->construct_ctos;
823
824         if (construct == NULL)
825             continue;
826
827         ret = construct(s, pkt, context, x, chainidx);
828         if (ret == EXT_RETURN_FAIL) {
829             /* SSLfatal() already called */
830             return 0;
831         }
832         if (ret == EXT_RETURN_SENT
833                 && (context & (SSL_EXT_CLIENT_HELLO
834                                | SSL_EXT_TLS1_3_CERTIFICATE_REQUEST
835                                | SSL_EXT_TLS1_3_NEW_SESSION_TICKET)) != 0)
836             s->ext.extflags[i] |= SSL_EXT_FLAG_SENT;
837     }
838
839     if (!WPACKET_close(pkt)) {
840         SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_EXTENSIONS,
841                  ERR_R_INTERNAL_ERROR);
842         return 0;
843     }
844
845     return 1;
846 }
847
848 /*
849  * Built in extension finalisation and initialisation functions. All initialise
850  * or finalise the associated extension type for the given |context|. For
851  * finalisers |sent| is set to 1 if we saw the extension during parsing, and 0
852  * otherwise. These functions return 1 on success or 0 on failure.
853  */
854
855 static int final_renegotiate(SSL *s, unsigned int context, int sent)
856 {
857     if (!s->server) {
858         /*
859          * Check if we can connect to a server that doesn't support safe
860          * renegotiation
861          */
862         if (!(s->options & SSL_OP_LEGACY_SERVER_CONNECT)
863                 && !(s->options & SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION)
864                 && !sent) {
865             SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_F_FINAL_RENEGOTIATE,
866                      SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED);
867             return 0;
868         }
869
870         return 1;
871     }
872
873     /* Need RI if renegotiating */
874     if (s->renegotiate
875             && !(s->options & SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION)
876             && !sent) {
877         SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_F_FINAL_RENEGOTIATE,
878                  SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED);
879         return 0;
880     }
881
882
883     return 1;
884 }
885
886 static int init_server_name(SSL *s, unsigned int context)
887 {
888     if (s->server)
889         s->servername_done = 0;
890
891     return 1;
892 }
893
894 static int final_server_name(SSL *s, unsigned int context, int sent)
895 {
896     int ret = SSL_TLSEXT_ERR_NOACK, discard;
897     int altmp = SSL_AD_UNRECOGNIZED_NAME;
898     int was_ticket = (SSL_get_options(s) & SSL_OP_NO_TICKET) == 0;
899
900     if (s->ctx != NULL && s->ctx->ext.servername_cb != 0)
901         ret = s->ctx->ext.servername_cb(s, &altmp,
902                                         s->ctx->ext.servername_arg);
903     else if (s->session_ctx != NULL
904              && s->session_ctx->ext.servername_cb != 0)
905         ret = s->session_ctx->ext.servername_cb(s, &altmp,
906                                        s->session_ctx->ext.servername_arg);
907
908     if (!sent) {
909         OPENSSL_free(s->session->ext.hostname);
910         s->session->ext.hostname = NULL;
911     }
912
913     /*
914      * If we switched contexts (whether here or in the client_hello callback),
915      * move the sess_accept increment from the session_ctx to the new
916      * context, to avoid the confusing situation of having sess_accept_good
917      * exceed sess_accept (zero) for the new context.
918      */
919     if (SSL_IS_FIRST_HANDSHAKE(s) && s->ctx != s->session_ctx) {
920         CRYPTO_atomic_add(&s->ctx->stats.sess_accept, 1, &discard,
921                           s->ctx->lock);
922         CRYPTO_atomic_add(&s->session_ctx->stats.sess_accept, -1, &discard,
923                           s->session_ctx->lock);
924     }
925
926     /*
927      * If we're expecting to send a ticket, and tickets were previously enabled,
928      * and now tickets are disabled, then turn off expected ticket.
929      * Also, if this is not a resumption, create a new session ID
930      */
931     if (ret == SSL_TLSEXT_ERR_OK && s->ext.ticket_expected
932             && was_ticket && (SSL_get_options(s) & SSL_OP_NO_TICKET) != 0) {
933         s->ext.ticket_expected = 0;
934         if (!s->hit) {
935             SSL_SESSION* ss = SSL_get_session(s);
936
937             if (ss != NULL) {
938                 OPENSSL_free(ss->ext.tick);
939                 ss->ext.tick = NULL;
940                 ss->ext.ticklen = 0;
941                 ss->ext.tick_lifetime_hint = 0;
942                 ss->ext.tick_age_add = 0;
943                 ss->ext.tick_identity = 0;
944                 if (!ssl_generate_session_id(s, ss)) {
945                     SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_FINAL_SERVER_NAME,
946                              ERR_R_INTERNAL_ERROR);
947                     return 0;
948                 }
949             } else {
950                 SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_FINAL_SERVER_NAME,
951                          ERR_R_INTERNAL_ERROR);
952                 return 0;
953             }
954         }
955     }
956
957     switch (ret) {
958     case SSL_TLSEXT_ERR_ALERT_FATAL:
959         SSLfatal(s, altmp, SSL_F_FINAL_SERVER_NAME, SSL_R_CALLBACK_FAILED);
960         return 0;
961
962     case SSL_TLSEXT_ERR_ALERT_WARNING:
963         ssl3_send_alert(s, SSL3_AL_WARNING, altmp);
964         return 1;
965
966     case SSL_TLSEXT_ERR_NOACK:
967         s->servername_done = 0;
968         return 1;
969
970     default:
971         return 1;
972     }
973 }
974
975 #ifndef OPENSSL_NO_EC
976 static int final_ec_pt_formats(SSL *s, unsigned int context, int sent)
977 {
978     unsigned long alg_k, alg_a;
979
980     if (s->server)
981         return 1;
982
983     alg_k = s->s3->tmp.new_cipher->algorithm_mkey;
984     alg_a = s->s3->tmp.new_cipher->algorithm_auth;
985
986     /*
987      * If we are client and using an elliptic curve cryptography cipher
988      * suite, then if server returns an EC point formats lists extension it
989      * must contain uncompressed.
990      */
991     if (s->ext.ecpointformats != NULL
992             && s->ext.ecpointformats_len > 0
993             && s->session->ext.ecpointformats != NULL
994             && s->session->ext.ecpointformats_len > 0
995             && ((alg_k & SSL_kECDHE) || (alg_a & SSL_aECDSA))) {
996         /* we are using an ECC cipher */
997         size_t i;
998         unsigned char *list = s->session->ext.ecpointformats;
999
1000         for (i = 0; i < s->session->ext.ecpointformats_len; i++) {
1001             if (*list++ == TLSEXT_ECPOINTFORMAT_uncompressed)
1002                 break;
1003         }
1004         if (i == s->session->ext.ecpointformats_len) {
1005             SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_F_FINAL_EC_PT_FORMATS,
1006                      SSL_R_TLS_INVALID_ECPOINTFORMAT_LIST);
1007             return 0;
1008         }
1009     }
1010
1011     return 1;
1012 }
1013 #endif
1014
1015 static int init_session_ticket(SSL *s, unsigned int context)
1016 {
1017     if (!s->server)
1018         s->ext.ticket_expected = 0;
1019
1020     return 1;
1021 }
1022
1023 #ifndef OPENSSL_NO_OCSP
1024 static int init_status_request(SSL *s, unsigned int context)
1025 {
1026     if (s->server) {
1027         s->ext.status_type = TLSEXT_STATUSTYPE_nothing;
1028     } else {
1029         /*
1030          * Ensure we get sensible values passed to tlsext_status_cb in the event
1031          * that we don't receive a status message
1032          */
1033         OPENSSL_free(s->ext.ocsp.resp);
1034         s->ext.ocsp.resp = NULL;
1035         s->ext.ocsp.resp_len = 0;
1036     }
1037
1038     return 1;
1039 }
1040 #endif
1041
1042 #ifndef OPENSSL_NO_NEXTPROTONEG
1043 static int init_npn(SSL *s, unsigned int context)
1044 {
1045     s->s3->npn_seen = 0;
1046
1047     return 1;
1048 }
1049 #endif
1050
1051 static int init_alpn(SSL *s, unsigned int context)
1052 {
1053     OPENSSL_free(s->s3->alpn_selected);
1054     s->s3->alpn_selected = NULL;
1055     s->s3->alpn_selected_len = 0;
1056     if (s->server) {
1057         OPENSSL_free(s->s3->alpn_proposed);
1058         s->s3->alpn_proposed = NULL;
1059         s->s3->alpn_proposed_len = 0;
1060     }
1061     return 1;
1062 }
1063
1064 static int final_alpn(SSL *s, unsigned int context, int sent)
1065 {
1066     if (!s->server && !sent && s->session->ext.alpn_selected != NULL)
1067             s->ext.early_data_ok = 0;
1068
1069     if (!s->server || !SSL_IS_TLS13(s))
1070         return 1;
1071
1072     /*
1073      * Call alpn_select callback if needed.  Has to be done after SNI and
1074      * cipher negotiation (HTTP/2 restricts permitted ciphers). In TLSv1.3
1075      * we also have to do this before we decide whether to accept early_data.
1076      * In TLSv1.3 we've already negotiated our cipher so we do this call now.
1077      * For < TLSv1.3 we defer it until after cipher negotiation.
1078      *
1079      * On failure SSLfatal() already called.
1080      */
1081     return tls_handle_alpn(s);
1082 }
1083
1084 static int init_sig_algs(SSL *s, unsigned int context)
1085 {
1086     /* Clear any signature algorithms extension received */
1087     OPENSSL_free(s->s3->tmp.peer_sigalgs);
1088     s->s3->tmp.peer_sigalgs = NULL;
1089
1090     return 1;
1091 }
1092
1093 #ifndef OPENSSL_NO_SRP
1094 static int init_srp(SSL *s, unsigned int context)
1095 {
1096     OPENSSL_free(s->srp_ctx.login);
1097     s->srp_ctx.login = NULL;
1098
1099     return 1;
1100 }
1101 #endif
1102
1103 static int init_etm(SSL *s, unsigned int context)
1104 {
1105     s->ext.use_etm = 0;
1106
1107     return 1;
1108 }
1109
1110 static int init_ems(SSL *s, unsigned int context)
1111 {
1112     if (!s->server)
1113         s->s3->flags &= ~TLS1_FLAGS_RECEIVED_EXTMS;
1114
1115     return 1;
1116 }
1117
1118 static int final_ems(SSL *s, unsigned int context, int sent)
1119 {
1120     if (!s->server && s->hit) {
1121         /*
1122          * Check extended master secret extension is consistent with
1123          * original session.
1124          */
1125         if (!(s->s3->flags & TLS1_FLAGS_RECEIVED_EXTMS) !=
1126             !(s->session->flags & SSL_SESS_FLAG_EXTMS)) {
1127             SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_F_FINAL_EMS,
1128                      SSL_R_INCONSISTENT_EXTMS);
1129             return 0;
1130         }
1131     }
1132
1133     return 1;
1134 }
1135
1136 static int init_certificate_authorities(SSL *s, unsigned int context)
1137 {
1138     sk_X509_NAME_pop_free(s->s3->tmp.peer_ca_names, X509_NAME_free);
1139     s->s3->tmp.peer_ca_names = NULL;
1140     return 1;
1141 }
1142
1143 static EXT_RETURN tls_construct_certificate_authorities(SSL *s, WPACKET *pkt,
1144                                                         unsigned int context,
1145                                                         X509 *x,
1146                                                         size_t chainidx)
1147 {
1148     const STACK_OF(X509_NAME) *ca_sk = SSL_get0_CA_list(s);
1149
1150     if (ca_sk == NULL || sk_X509_NAME_num(ca_sk) == 0)
1151         return EXT_RETURN_NOT_SENT;
1152
1153     if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_certificate_authorities)
1154         || !WPACKET_start_sub_packet_u16(pkt)) {
1155         SSLfatal(s, SSL_AD_INTERNAL_ERROR,
1156                  SSL_F_TLS_CONSTRUCT_CERTIFICATE_AUTHORITIES,
1157                ERR_R_INTERNAL_ERROR);
1158         return EXT_RETURN_FAIL;
1159     }
1160
1161     if (!construct_ca_names(s, pkt)) {
1162         /* SSLfatal() already called */
1163         return EXT_RETURN_FAIL;
1164     }
1165
1166     if (!WPACKET_close(pkt)) {
1167         SSLfatal(s, SSL_AD_INTERNAL_ERROR,
1168                  SSL_F_TLS_CONSTRUCT_CERTIFICATE_AUTHORITIES,
1169                  ERR_R_INTERNAL_ERROR);
1170         return EXT_RETURN_FAIL;
1171     }
1172
1173     return EXT_RETURN_SENT;
1174 }
1175
1176 static int tls_parse_certificate_authorities(SSL *s, PACKET *pkt,
1177                                              unsigned int context, X509 *x,
1178                                              size_t chainidx)
1179 {
1180     if (!parse_ca_names(s, pkt))
1181         return 0;
1182     if (PACKET_remaining(pkt) != 0) {
1183         SSLfatal(s, SSL_AD_DECODE_ERROR,
1184                  SSL_F_TLS_PARSE_CERTIFICATE_AUTHORITIES, SSL_R_BAD_EXTENSION);
1185         return 0;
1186     }
1187     return 1;
1188 }
1189
1190 #ifndef OPENSSL_NO_SRTP
1191 static int init_srtp(SSL *s, unsigned int context)
1192 {
1193     if (s->server)
1194         s->srtp_profile = NULL;
1195
1196     return 1;
1197 }
1198 #endif
1199
1200 static int final_sig_algs(SSL *s, unsigned int context, int sent)
1201 {
1202     if (!sent && SSL_IS_TLS13(s) && !s->hit) {
1203         SSLfatal(s, TLS13_AD_MISSING_EXTENSION, SSL_F_FINAL_SIG_ALGS,
1204                  SSL_R_MISSING_SIGALGS_EXTENSION);
1205         return 0;
1206     }
1207
1208     return 1;
1209 }
1210
1211 #ifndef OPENSSL_NO_EC
1212 static int final_key_share(SSL *s, unsigned int context, int sent)
1213 {
1214     if (!SSL_IS_TLS13(s))
1215         return 1;
1216
1217     /* Nothing to do for key_share in an HRR */
1218     if ((context & SSL_EXT_TLS1_3_HELLO_RETRY_REQUEST) != 0)
1219         return 1;
1220
1221     /*
1222      * If
1223      *     we are a client
1224      *     AND
1225      *     we have no key_share
1226      *     AND
1227      *     (we are not resuming
1228      *      OR the kex_mode doesn't allow non key_share resumes)
1229      * THEN
1230      *     fail;
1231      */
1232     if (!s->server
1233             && !sent
1234             && (!s->hit
1235                 || (s->ext.psk_kex_mode & TLSEXT_KEX_MODE_FLAG_KE) == 0)) {
1236         /* Nothing left we can do - just fail */
1237         SSLfatal(s, SSL_AD_MISSING_EXTENSION, SSL_F_FINAL_KEY_SHARE,
1238                  SSL_R_NO_SUITABLE_KEY_SHARE);
1239         return 0;
1240     }
1241     /*
1242      * IF
1243      *     we are a server
1244      * THEN
1245      *     IF
1246      *         we have a suitable key_share
1247      *     THEN
1248      *         IF
1249      *             we are stateless AND we have no cookie
1250      *         THEN
1251      *             send a HelloRetryRequest
1252      *     ELSE
1253      *         IF
1254      *             we didn't already send a HelloRetryRequest
1255      *             AND
1256      *             the client sent a key_share extension
1257      *             AND
1258      *             (we are not resuming
1259      *              OR the kex_mode allows key_share resumes)
1260      *             AND
1261      *             a shared group exists
1262      *         THEN
1263      *             send a HelloRetryRequest
1264      *         ELSE IF
1265      *             we are not resuming
1266      *             OR
1267      *             the kex_mode doesn't allow non key_share resumes
1268      *         THEN
1269      *             fail
1270      *         ELSE IF
1271      *             we are stateless AND we have no cookie
1272      *         THEN
1273      *             send a HelloRetryRequest
1274      */
1275     if (s->server) {
1276         if (s->s3->peer_tmp != NULL) {
1277             /* We have a suitable key_share */
1278             if ((s->s3->flags & TLS1_FLAGS_STATELESS) != 0
1279                     && !s->ext.cookieok) {
1280                 if (!ossl_assert(s->hello_retry_request == SSL_HRR_NONE)) {
1281                     /*
1282                      * If we are stateless then we wouldn't know about any
1283                      * previously sent HRR - so how can this be anything other
1284                      * than 0?
1285                      */
1286                     SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_FINAL_KEY_SHARE,
1287                              ERR_R_INTERNAL_ERROR);
1288                     return 0;
1289                 }
1290                 s->hello_retry_request = SSL_HRR_PENDING;
1291                 return 1;
1292             }
1293         } else {
1294             /* No suitable key_share */
1295             if (s->hello_retry_request == SSL_HRR_NONE && sent
1296                     && (!s->hit
1297                         || (s->ext.psk_kex_mode & TLSEXT_KEX_MODE_FLAG_KE_DHE)
1298                            != 0)) {
1299                 const uint16_t *pgroups, *clntgroups;
1300                 size_t num_groups, clnt_num_groups, i;
1301                 unsigned int group_id = 0;
1302
1303                 /* Check if a shared group exists */
1304
1305                 /* Get the clients list of supported groups. */
1306                 tls1_get_peer_groups(s, &clntgroups, &clnt_num_groups);
1307                 tls1_get_supported_groups(s, &pgroups, &num_groups);
1308
1309                 /*
1310                  * Find the first group we allow that is also in client's list
1311                  */
1312                 for (i = 0; i < num_groups; i++) {
1313                     group_id = pgroups[i];
1314
1315                     if (check_in_list(s, group_id, clntgroups, clnt_num_groups,
1316                                       1))
1317                         break;
1318                 }
1319
1320                 if (i < num_groups) {
1321                     /* A shared group exists so send a HelloRetryRequest */
1322                     s->s3->group_id = group_id;
1323                     s->hello_retry_request = SSL_HRR_PENDING;
1324                     return 1;
1325                 }
1326             }
1327             if (!s->hit
1328                     || (s->ext.psk_kex_mode & TLSEXT_KEX_MODE_FLAG_KE) == 0) {
1329                 /* Nothing left we can do - just fail */
1330                 SSLfatal(s, sent ? SSL_AD_HANDSHAKE_FAILURE
1331                                  : SSL_AD_MISSING_EXTENSION,
1332                          SSL_F_FINAL_KEY_SHARE, SSL_R_NO_SUITABLE_KEY_SHARE);
1333                 return 0;
1334             }
1335
1336             if ((s->s3->flags & TLS1_FLAGS_STATELESS) != 0
1337                     && !s->ext.cookieok) {
1338                 if (!ossl_assert(s->hello_retry_request == SSL_HRR_NONE)) {
1339                     /*
1340                      * If we are stateless then we wouldn't know about any
1341                      * previously sent HRR - so how can this be anything other
1342                      * than 0?
1343                      */
1344                     SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_FINAL_KEY_SHARE,
1345                              ERR_R_INTERNAL_ERROR);
1346                     return 0;
1347                 }
1348                 s->hello_retry_request = SSL_HRR_PENDING;
1349                 return 1;
1350             }
1351         }
1352
1353         /*
1354          * We have a key_share so don't send any more HelloRetryRequest
1355          * messages
1356          */
1357         if (s->hello_retry_request == SSL_HRR_PENDING)
1358             s->hello_retry_request = SSL_HRR_COMPLETE;
1359     } else {
1360         /*
1361          * For a client side resumption with no key_share we need to generate
1362          * the handshake secret (otherwise this is done during key_share
1363          * processing).
1364          */
1365         if (!sent && !tls13_generate_handshake_secret(s, NULL, 0)) {
1366             SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_FINAL_KEY_SHARE,
1367                      ERR_R_INTERNAL_ERROR);
1368             return 0;
1369         }
1370     }
1371
1372     return 1;
1373 }
1374 #endif
1375
1376 static int init_psk_kex_modes(SSL *s, unsigned int context)
1377 {
1378     s->ext.psk_kex_mode = TLSEXT_KEX_MODE_FLAG_NONE;
1379     return 1;
1380 }
1381
1382 int tls_psk_do_binder(SSL *s, const EVP_MD *md, const unsigned char *msgstart,
1383                       size_t binderoffset, const unsigned char *binderin,
1384                       unsigned char *binderout, SSL_SESSION *sess, int sign,
1385                       int external)
1386 {
1387     EVP_PKEY *mackey = NULL;
1388     EVP_MD_CTX *mctx = NULL;
1389     unsigned char hash[EVP_MAX_MD_SIZE], binderkey[EVP_MAX_MD_SIZE];
1390     unsigned char finishedkey[EVP_MAX_MD_SIZE], tmpbinder[EVP_MAX_MD_SIZE];
1391     unsigned char tmppsk[EVP_MAX_MD_SIZE];
1392     unsigned char *early_secret, *psk;
1393     const char resumption_label[] = "res binder";
1394     const char external_label[] = "ext binder";
1395     const char nonce_label[] = "resumption";
1396     const char *label;
1397     size_t bindersize, labelsize, hashsize = EVP_MD_size(md);
1398     int ret = -1;
1399     int usepskfored = 0;
1400
1401     if (external
1402             && s->early_data_state == SSL_EARLY_DATA_CONNECTING
1403             && s->session->ext.max_early_data == 0
1404             && sess->ext.max_early_data > 0)
1405         usepskfored = 1;
1406
1407     if (external) {
1408         label = external_label;
1409         labelsize = sizeof(external_label) - 1;
1410     } else {
1411         label = resumption_label;
1412         labelsize = sizeof(resumption_label) - 1;
1413     }
1414
1415     if (sess->master_key_length != hashsize) {
1416         SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PSK_DO_BINDER,
1417                  SSL_R_BAD_PSK);
1418         goto err;
1419     }
1420
1421     if (external) {
1422         psk = sess->master_key;
1423     } else {
1424         psk = tmppsk;
1425         if (!tls13_hkdf_expand(s, md, sess->master_key,
1426                                (const unsigned char *)nonce_label,
1427                                sizeof(nonce_label) - 1, sess->ext.tick_nonce,
1428                                sess->ext.tick_nonce_len, psk, hashsize)) {
1429             /* SSLfatal() already called */
1430             goto err;
1431         }
1432     }
1433
1434     /*
1435      * Generate the early_secret. On the server side we've selected a PSK to
1436      * resume with (internal or external) so we always do this. On the client
1437      * side we do this for a non-external (i.e. resumption) PSK or external PSK
1438      * that will be used for early_data so that it is in place for sending early
1439      * data. For client side external PSK not being used for early_data we
1440      * generate it but store it away for later use.
1441      */
1442     if (s->server || !external || usepskfored)
1443         early_secret = (unsigned char *)s->early_secret;
1444     else
1445         early_secret = (unsigned char *)sess->early_secret;
1446     if (!tls13_generate_secret(s, md, NULL, psk, hashsize, early_secret)) {
1447         /* SSLfatal() already called */
1448         goto err;
1449     }
1450
1451     /*
1452      * Create the handshake hash for the binder key...the messages so far are
1453      * empty!
1454      */
1455     mctx = EVP_MD_CTX_new();
1456     if (mctx == NULL
1457             || EVP_DigestInit_ex(mctx, md, NULL) <= 0
1458             || EVP_DigestFinal_ex(mctx, hash, NULL) <= 0) {
1459         SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PSK_DO_BINDER,
1460                  ERR_R_INTERNAL_ERROR);
1461         goto err;
1462     }
1463
1464     /* Generate the binder key */
1465     if (!tls13_hkdf_expand(s, md, early_secret, (unsigned char *)label,
1466                            labelsize, hash, hashsize, binderkey, hashsize)) {
1467         /* SSLfatal() already called */
1468         goto err;
1469     }
1470
1471     /* Generate the finished key */
1472     if (!tls13_derive_finishedkey(s, md, binderkey, finishedkey, hashsize)) {
1473         /* SSLfatal() already called */
1474         goto err;
1475     }
1476
1477     if (EVP_DigestInit_ex(mctx, md, NULL) <= 0) {
1478         SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PSK_DO_BINDER,
1479                  ERR_R_INTERNAL_ERROR);
1480         goto err;
1481     }
1482
1483     /*
1484      * Get a hash of the ClientHello up to the start of the binders. If we are
1485      * following a HelloRetryRequest then this includes the hash of the first
1486      * ClientHello and the HelloRetryRequest itself.
1487      */
1488     if (s->hello_retry_request == SSL_HRR_PENDING) {
1489         size_t hdatalen;
1490         void *hdata;
1491
1492         hdatalen = BIO_get_mem_data(s->s3->handshake_buffer, &hdata);
1493         if (hdatalen <= 0) {
1494             SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PSK_DO_BINDER,
1495                      SSL_R_BAD_HANDSHAKE_LENGTH);
1496             goto err;
1497         }
1498
1499         /*
1500          * For servers the handshake buffer data will include the second
1501          * ClientHello - which we don't want - so we need to take that bit off.
1502          */
1503         if (s->server) {
1504             PACKET hashprefix, msg;
1505
1506             /* Find how many bytes are left after the first two messages */
1507             if (!PACKET_buf_init(&hashprefix, hdata, hdatalen)
1508                     || !PACKET_forward(&hashprefix, 1)
1509                     || !PACKET_get_length_prefixed_3(&hashprefix, &msg)
1510                     || !PACKET_forward(&hashprefix, 1)
1511                     || !PACKET_get_length_prefixed_3(&hashprefix, &msg)) {
1512                 SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PSK_DO_BINDER,
1513                          ERR_R_INTERNAL_ERROR);
1514                 goto err;
1515             }
1516             hdatalen -= PACKET_remaining(&hashprefix);
1517         }
1518
1519         if (EVP_DigestUpdate(mctx, hdata, hdatalen) <= 0) {
1520             SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PSK_DO_BINDER,
1521                      ERR_R_INTERNAL_ERROR);
1522             goto err;
1523         }
1524     }
1525
1526     if (EVP_DigestUpdate(mctx, msgstart, binderoffset) <= 0
1527             || EVP_DigestFinal_ex(mctx, hash, NULL) <= 0) {
1528         SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PSK_DO_BINDER,
1529                  ERR_R_INTERNAL_ERROR);
1530         goto err;
1531     }
1532
1533     mackey = EVP_PKEY_new_mac_key(EVP_PKEY_HMAC, NULL, finishedkey, hashsize);
1534     if (mackey == NULL) {
1535         SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PSK_DO_BINDER,
1536                  ERR_R_INTERNAL_ERROR);
1537         goto err;
1538     }
1539
1540     if (!sign)
1541         binderout = tmpbinder;
1542
1543     bindersize = hashsize;
1544     if (EVP_DigestSignInit(mctx, NULL, md, NULL, mackey) <= 0
1545             || EVP_DigestSignUpdate(mctx, hash, hashsize) <= 0
1546             || EVP_DigestSignFinal(mctx, binderout, &bindersize) <= 0
1547             || bindersize != hashsize) {
1548         SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PSK_DO_BINDER,
1549                  ERR_R_INTERNAL_ERROR);
1550         goto err;
1551     }
1552
1553     if (sign) {
1554         ret = 1;
1555     } else {
1556         /* HMAC keys can't do EVP_DigestVerify* - use CRYPTO_memcmp instead */
1557         ret = (CRYPTO_memcmp(binderin, binderout, hashsize) == 0);
1558         if (!ret)
1559             SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_F_TLS_PSK_DO_BINDER,
1560                      SSL_R_BINDER_DOES_NOT_VERIFY);
1561     }
1562
1563  err:
1564     OPENSSL_cleanse(binderkey, sizeof(binderkey));
1565     OPENSSL_cleanse(finishedkey, sizeof(finishedkey));
1566     EVP_PKEY_free(mackey);
1567     EVP_MD_CTX_free(mctx);
1568
1569     return ret;
1570 }
1571
1572 static int final_early_data(SSL *s, unsigned int context, int sent)
1573 {
1574     if (!sent)
1575         return 1;
1576
1577     if (!s->server) {
1578         if (context == SSL_EXT_TLS1_3_ENCRYPTED_EXTENSIONS
1579                 && sent
1580                 && !s->ext.early_data_ok) {
1581             /*
1582              * If we get here then the server accepted our early_data but we
1583              * later realised that it shouldn't have done (e.g. inconsistent
1584              * ALPN)
1585              */
1586             SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_F_FINAL_EARLY_DATA,
1587                      SSL_R_BAD_EARLY_DATA);
1588             return 0;
1589         }
1590
1591         return 1;
1592     }
1593
1594     if (s->max_early_data == 0
1595             || !s->hit
1596             || s->session->ext.tick_identity != 0
1597             || s->early_data_state != SSL_EARLY_DATA_ACCEPTING
1598             || !s->ext.early_data_ok
1599             || s->hello_retry_request != SSL_HRR_NONE) {
1600         s->ext.early_data = SSL_EARLY_DATA_REJECTED;
1601     } else {
1602         s->ext.early_data = SSL_EARLY_DATA_ACCEPTED;
1603
1604         if (!tls13_change_cipher_state(s,
1605                     SSL3_CC_EARLY | SSL3_CHANGE_CIPHER_SERVER_READ)) {
1606             /* SSLfatal() already called */
1607             return 0;
1608         }
1609     }
1610
1611     return 1;
1612 }
1613
1614 static int final_maxfragmentlen(SSL *s, unsigned int context, int sent)
1615 {
1616     /*
1617      * Session resumption on server-side with MFL extension active
1618      *  BUT MFL extension packet was not resent (i.e. sent == 0)
1619      */
1620     if (s->server && s->hit && USE_MAX_FRAGMENT_LENGTH_EXT(s->session)
1621             && !sent ) {
1622         SSLfatal(s, SSL_AD_MISSING_EXTENSION, SSL_F_FINAL_MAXFRAGMENTLEN,
1623                  SSL_R_BAD_EXTENSION);
1624         return 0;
1625     }
1626
1627     /* Current SSL buffer is lower than requested MFL */
1628     if (s->session && USE_MAX_FRAGMENT_LENGTH_EXT(s->session)
1629             && s->max_send_fragment < GET_MAX_FRAGMENT_LENGTH(s->session))
1630         /* trigger a larger buffer reallocation */
1631         if (!ssl3_setup_buffers(s)) {
1632             /* SSLfatal() already called */
1633             return 0;
1634         }
1635
1636     return 1;
1637 }