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