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