Add basic TLSv1.3 cookie support
[openssl.git] / ssl / statem / extensions.c
1 /*
2  * Copyright 2016 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 "../ssl_locl.h"
12 #include "statem_locl.h"
13
14 static int final_renegotiate(SSL *s, unsigned int context, int sent,
15                                      int *al);
16 static int init_server_name(SSL *s, unsigned int context);
17 static int final_server_name(SSL *s, unsigned int context, int sent,
18                                      int *al);
19 #ifndef OPENSSL_NO_EC
20 static int final_ec_pt_formats(SSL *s, unsigned int context, int sent,
21                                        int *al);
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, int *al);
32 static int init_sig_algs(SSL *s, unsigned int context);
33 #ifndef OPENSSL_NO_SRP
34 static int init_srp(SSL *s, unsigned int context);
35 #endif
36 static int init_etm(SSL *s, unsigned int context);
37 static int init_ems(SSL *s, unsigned int context);
38 static int final_ems(SSL *s, unsigned int context, int sent, int *al);
39 static int init_psk_kex_modes(SSL *s, unsigned int context);
40 #ifndef OPENSSL_NO_EC
41 static int final_key_share(SSL *s, unsigned int context, int sent, int *al);
42 #endif
43 #ifndef OPENSSL_NO_SRTP
44 static int init_srtp(SSL *s, unsigned int context);
45 #endif
46 static int final_sig_algs(SSL *s, unsigned int context, int sent, int *al);
47 static int final_early_data(SSL *s, unsigned int context, int sent, int *al);
48
49 /* Structure to define a built-in extension */
50 typedef struct extensions_definition_st {
51     /* The defined type for the extension */
52     unsigned int type;
53     /*
54      * The context that this extension applies to, e.g. what messages and
55      * protocol versions
56      */
57     unsigned int context;
58     /*
59      * Initialise extension before parsing. Always called for relevant contexts
60      * even if extension not present
61      */
62     int (*init)(SSL *s, unsigned int context);
63     /* Parse extension sent from client to server */
64     int (*parse_ctos)(SSL *s, PACKET *pkt, unsigned int context, X509 *x,
65                       size_t chainidx, int *al);
66     /* Parse extension send from server to client */
67     int (*parse_stoc)(SSL *s, PACKET *pkt, unsigned int context, X509 *x,
68                       size_t chainidx, int *al);
69     /* Construct extension sent from server to client */
70     int (*construct_stoc)(SSL *s, WPACKET *pkt, unsigned int context, X509 *x,
71                           size_t chainidx, int *al);
72     /* Construct extension sent from client to server */
73     int (*construct_ctos)(SSL *s, WPACKET *pkt, unsigned int context, X509 *x,
74                           size_t chainidx, int *al);
75     /*
76      * Finalise extension after parsing. Always called where an extensions was
77      * initialised even if the extension was not present. |sent| is set to 1 if
78      * the extension was seen, or 0 otherwise.
79      */
80     int (*final)(SSL *s, unsigned int context, int sent, int *al);
81 } EXTENSION_DEFINITION;
82
83 /*
84  * Definitions of all built-in extensions. NOTE: Changes in the number or order
85  * of these extensions should be mirrored with equivalent changes to the 
86  * indexes ( TLSEXT_IDX_* ) defined in ssl_locl.h.
87  * Each extension has an initialiser, a client and
88  * server side parser and a finaliser. The initialiser is called (if the
89  * extension is relevant to the given context) even if we did not see the
90  * extension in the message that we received. The parser functions are only
91  * called if we see the extension in the message. The finalisers are always
92  * called if the initialiser was called.
93  * There are also server and client side constructor functions which are always
94  * called during message construction if the extension is relevant for the
95  * given context.
96  * The initialisation, parsing, finalisation and construction functions are
97  * always called in the order defined in this list. Some extensions may depend
98  * on others having been processed first, so the order of this list is
99  * significant.
100  * The extension context is defined by a series of flags which specify which
101  * messages the extension is relevant to. These flags also specify whether the
102  * extension is relevant to a particular protocol or protocol version.
103  *
104  * TODO(TLS1.3): Make sure we have a test to check the consistency of these
105  */
106 #define INVALID_EXTENSION { 0x10000, 0, NULL, NULL, NULL, NULL, NULL, NULL }
107 static const EXTENSION_DEFINITION ext_defs[] = {
108     {
109         TLSEXT_TYPE_renegotiate,
110         EXT_CLIENT_HELLO | EXT_TLS1_2_SERVER_HELLO | EXT_SSL3_ALLOWED
111         | EXT_TLS1_2_AND_BELOW_ONLY,
112         NULL, tls_parse_ctos_renegotiate, tls_parse_stoc_renegotiate,
113         tls_construct_stoc_renegotiate, tls_construct_ctos_renegotiate,
114         final_renegotiate
115     },
116     {
117         TLSEXT_TYPE_server_name,
118         EXT_CLIENT_HELLO | EXT_TLS1_2_SERVER_HELLO
119         | EXT_TLS1_3_ENCRYPTED_EXTENSIONS,
120         init_server_name,
121         tls_parse_ctos_server_name, tls_parse_stoc_server_name,
122         tls_construct_stoc_server_name, tls_construct_ctos_server_name,
123         final_server_name
124     },
125 #ifndef OPENSSL_NO_SRP
126     {
127         TLSEXT_TYPE_srp,
128         EXT_CLIENT_HELLO | EXT_TLS1_2_AND_BELOW_ONLY,
129         init_srp, tls_parse_ctos_srp, NULL, NULL, tls_construct_ctos_srp, NULL
130     },
131 #else
132     INVALID_EXTENSION,
133 #endif
134     {
135         TLSEXT_TYPE_early_data_info,
136         EXT_TLS1_3_NEW_SESSION_TICKET,
137         NULL, NULL, tls_parse_stoc_early_data_info,
138         tls_construct_stoc_early_data_info, NULL, NULL
139     },
140 #ifndef OPENSSL_NO_EC
141     {
142         TLSEXT_TYPE_ec_point_formats,
143         EXT_CLIENT_HELLO | EXT_TLS1_2_SERVER_HELLO | EXT_TLS1_2_AND_BELOW_ONLY,
144         NULL, tls_parse_ctos_ec_pt_formats, tls_parse_stoc_ec_pt_formats,
145         tls_construct_stoc_ec_pt_formats, tls_construct_ctos_ec_pt_formats,
146         final_ec_pt_formats
147     },
148     {
149         TLSEXT_TYPE_supported_groups,
150         EXT_CLIENT_HELLO | EXT_TLS1_3_ENCRYPTED_EXTENSIONS,
151         NULL, tls_parse_ctos_supported_groups, NULL,
152         NULL /* TODO(TLS1.3): Need to add this */,
153         tls_construct_ctos_supported_groups, NULL
154     },
155 #else
156     INVALID_EXTENSION,
157     INVALID_EXTENSION,
158 #endif
159     {
160         TLSEXT_TYPE_session_ticket,
161         EXT_CLIENT_HELLO | EXT_TLS1_2_SERVER_HELLO | EXT_TLS1_2_AND_BELOW_ONLY,
162         init_session_ticket, tls_parse_ctos_session_ticket,
163         tls_parse_stoc_session_ticket, tls_construct_stoc_session_ticket,
164         tls_construct_ctos_session_ticket, NULL
165     },
166     {
167         TLSEXT_TYPE_signature_algorithms,
168         EXT_CLIENT_HELLO,
169         init_sig_algs, tls_parse_ctos_sig_algs, NULL, NULL,
170         tls_construct_ctos_sig_algs, final_sig_algs
171     },
172 #ifndef OPENSSL_NO_OCSP
173     {
174         TLSEXT_TYPE_status_request,
175         EXT_CLIENT_HELLO | EXT_TLS1_2_SERVER_HELLO
176         | EXT_TLS1_3_CERTIFICATE,
177         init_status_request, tls_parse_ctos_status_request,
178         tls_parse_stoc_status_request, tls_construct_stoc_status_request,
179         tls_construct_ctos_status_request, NULL
180     },
181 #else
182     INVALID_EXTENSION,
183 #endif
184 #ifndef OPENSSL_NO_NEXTPROTONEG
185     {
186         TLSEXT_TYPE_next_proto_neg,
187         EXT_CLIENT_HELLO | EXT_TLS1_2_SERVER_HELLO | EXT_TLS1_2_AND_BELOW_ONLY,
188         init_npn, tls_parse_ctos_npn, tls_parse_stoc_npn,
189         tls_construct_stoc_next_proto_neg, tls_construct_ctos_npn, NULL
190     },
191 #else
192     INVALID_EXTENSION,
193 #endif
194     {
195         /*
196          * Must appear in this list after server_name so that finalisation
197          * happens after server_name callbacks
198          */
199         TLSEXT_TYPE_application_layer_protocol_negotiation,
200         EXT_CLIENT_HELLO | EXT_TLS1_2_SERVER_HELLO
201         | EXT_TLS1_3_ENCRYPTED_EXTENSIONS,
202         init_alpn, tls_parse_ctos_alpn, tls_parse_stoc_alpn,
203         tls_construct_stoc_alpn, tls_construct_ctos_alpn, final_alpn
204     },
205 #ifndef OPENSSL_NO_SRTP
206     {
207         TLSEXT_TYPE_use_srtp,
208         EXT_CLIENT_HELLO | EXT_TLS1_2_SERVER_HELLO
209         | EXT_TLS1_3_ENCRYPTED_EXTENSIONS | EXT_DTLS_ONLY,
210         init_srtp, tls_parse_ctos_use_srtp, tls_parse_stoc_use_srtp,
211         tls_construct_stoc_use_srtp, tls_construct_ctos_use_srtp, NULL
212     },
213 #else
214     INVALID_EXTENSION,
215 #endif
216     {
217         TLSEXT_TYPE_encrypt_then_mac,
218         EXT_CLIENT_HELLO | EXT_TLS1_2_SERVER_HELLO | EXT_TLS1_2_AND_BELOW_ONLY | EXT_SSL3_ALLOWED,
219         init_etm, tls_parse_ctos_etm, tls_parse_stoc_etm,
220         tls_construct_stoc_etm, tls_construct_ctos_etm, NULL
221     },
222 #ifndef OPENSSL_NO_CT
223     {
224         TLSEXT_TYPE_signed_certificate_timestamp,
225         EXT_CLIENT_HELLO | EXT_TLS1_2_SERVER_HELLO
226         | EXT_TLS1_3_CERTIFICATE,
227         NULL,
228         /*
229          * No server side support for this, but can be provided by a custom
230          * extension. This is an exception to the rule that custom extensions
231          * cannot override built in ones.
232          */
233         NULL, tls_parse_stoc_sct, NULL, tls_construct_ctos_sct,  NULL
234     },
235 #else
236     INVALID_EXTENSION,
237 #endif
238     {
239         TLSEXT_TYPE_extended_master_secret,
240         EXT_CLIENT_HELLO | EXT_TLS1_2_SERVER_HELLO | EXT_TLS1_2_AND_BELOW_ONLY,
241         init_ems, tls_parse_ctos_ems, tls_parse_stoc_ems,
242         tls_construct_stoc_ems, tls_construct_ctos_ems, final_ems
243     },
244     {
245         TLSEXT_TYPE_supported_versions,
246         EXT_CLIENT_HELLO | EXT_TLS_IMPLEMENTATION_ONLY | EXT_TLS1_3_ONLY,
247         NULL,
248         /* Processed inline as part of version selection */
249         NULL, NULL, NULL, tls_construct_ctos_supported_versions, NULL
250     },
251     {
252         TLSEXT_TYPE_psk_kex_modes,
253         EXT_CLIENT_HELLO | EXT_TLS_IMPLEMENTATION_ONLY | EXT_TLS1_3_ONLY,
254         init_psk_kex_modes, tls_parse_ctos_psk_kex_modes, NULL, NULL,
255         tls_construct_ctos_psk_kex_modes, NULL
256     },
257 #ifndef OPENSSL_NO_EC
258     {
259         /*
260          * Must be in this list after supported_groups. We need that to have
261          * been parsed before we do this one.
262          */
263         TLSEXT_TYPE_key_share,
264         EXT_CLIENT_HELLO | EXT_TLS1_3_SERVER_HELLO
265         | EXT_TLS1_3_HELLO_RETRY_REQUEST | EXT_TLS_IMPLEMENTATION_ONLY
266         | EXT_TLS1_3_ONLY,
267         NULL, tls_parse_ctos_key_share, tls_parse_stoc_key_share,
268         tls_construct_stoc_key_share, tls_construct_ctos_key_share,
269         final_key_share
270     },
271 #endif
272     {
273         TLSEXT_TYPE_cookie,
274         EXT_CLIENT_HELLO | EXT_TLS1_3_HELLO_RETRY_REQUEST
275         | EXT_TLS_IMPLEMENTATION_ONLY | EXT_TLS1_3_ONLY,
276         NULL, NULL, tls_parse_stoc_cookie, NULL, tls_construct_ctos_cookie,
277         NULL
278     },
279     {
280         /*
281          * Special unsolicited ServerHello extension only used when
282          * SSL_OP_CRYPTOPRO_TLSEXT_BUG is set
283          */
284         TLSEXT_TYPE_cryptopro_bug,
285         EXT_TLS1_2_SERVER_HELLO | EXT_TLS1_2_AND_BELOW_ONLY,
286         NULL, NULL, NULL, tls_construct_stoc_cryptopro_bug, NULL, NULL
287     },
288     {
289         TLSEXT_TYPE_early_data,
290         EXT_CLIENT_HELLO | EXT_TLS1_3_ENCRYPTED_EXTENSIONS,
291         NULL, tls_parse_ctos_early_data, tls_parse_stoc_early_data,
292         tls_construct_stoc_early_data, tls_construct_ctos_early_data,
293         final_early_data
294     },
295     {
296         /* Must be immediately before pre_shared_key */
297         /* TODO(TLS1.3): Fix me */
298         TLSEXT_TYPE_padding,
299         EXT_CLIENT_HELLO,
300         NULL,
301         /* We send this, but don't read it */
302         NULL, NULL, NULL, tls_construct_ctos_padding, NULL
303     },
304     {
305         /* Required by the TLSv1.3 spec to always be the last extension */
306         TLSEXT_TYPE_psk,
307         EXT_CLIENT_HELLO | EXT_TLS1_3_SERVER_HELLO | EXT_TLS_IMPLEMENTATION_ONLY
308         | EXT_TLS1_3_ONLY,
309         NULL, tls_parse_ctos_psk, tls_parse_stoc_psk, tls_construct_stoc_psk,
310         tls_construct_ctos_psk, NULL
311     }
312 };
313
314 /*
315  * Verify whether we are allowed to use the extension |type| in the current
316  * |context|. Returns 1 to indicate the extension is allowed or unknown or 0 to
317  * indicate the extension is not allowed. If returning 1 then |*found| is set to
318  * 1 if we found a definition for the extension, and |*idx| is set to its index
319  */
320 static int verify_extension(SSL *s, unsigned int context, unsigned int type,
321                             custom_ext_methods *meths, RAW_EXTENSION *rawexlist,
322                             RAW_EXTENSION **found)
323 {
324     size_t i;
325     size_t builtin_num = OSSL_NELEM(ext_defs);
326     const EXTENSION_DEFINITION *thisext;
327
328     for (i = 0, thisext = ext_defs; i < builtin_num; i++, thisext++) {
329         if (type == thisext->type) {
330             /* Check we're allowed to use this extension in this context */
331             if ((context & thisext->context) == 0)
332                 return 0;
333
334             if (SSL_IS_DTLS(s)) {
335                 if ((thisext->context & EXT_TLS_ONLY) != 0)
336                     return 0;
337             } else if ((thisext->context & EXT_DTLS_ONLY) != 0) {
338                     return 0;
339             }
340
341             *found = &rawexlist[i];
342             return 1;
343         }
344     }
345
346     if ((context & (EXT_CLIENT_HELLO | EXT_TLS1_2_SERVER_HELLO)) == 0) {
347         /*
348          * Custom extensions only apply to <=TLS1.2. This extension is unknown
349          * in this context - we allow it
350          */
351         *found = NULL;
352         return 1;
353     }
354
355     /* Check the custom extensions */
356     if (meths != NULL) {
357         for (i = builtin_num; i < builtin_num + meths->meths_count; i++) {
358             if (meths->meths[i - builtin_num].ext_type == type) {
359                 *found = &rawexlist[i];
360                 return 1;
361             }
362         }
363     }
364
365     /* Unknown extension. We allow it */
366     *found = NULL;
367     return 1;
368 }
369
370 /*
371  * Check whether the context defined for an extension |extctx| means whether
372  * the extension is relevant for the current context |thisctx| or not. Returns
373  * 1 if the extension is relevant for this context, and 0 otherwise
374  */
375 static int extension_is_relevant(SSL *s, unsigned int extctx,
376                                  unsigned int thisctx)
377 {
378     if ((SSL_IS_DTLS(s)
379                 && (extctx & EXT_TLS_IMPLEMENTATION_ONLY) != 0)
380             || (s->version == SSL3_VERSION
381                     && (extctx & EXT_SSL3_ALLOWED) == 0)
382             || (SSL_IS_TLS13(s)
383                 && (extctx & EXT_TLS1_2_AND_BELOW_ONLY) != 0)
384             || (!SSL_IS_TLS13(s) && (extctx & EXT_TLS1_3_ONLY) != 0))
385         return 0;
386
387     return 1;
388 }
389
390 /*
391  * Gather a list of all the extensions from the data in |packet]. |context|
392  * tells us which message this extension is for. The raw extension data is
393  * stored in |*res| on success. In the event of an error the alert type to use
394  * is stored in |*al|. We don't actually process the content of the extensions
395  * yet, except to check their types. This function also runs the initialiser
396  * functions for all known extensions (whether we have collected them or not).
397  * If successful the caller is responsible for freeing the contents of |*res|.
398  *
399  * Per http://tools.ietf.org/html/rfc5246#section-7.4.1.4, there may not be
400  * more than one extension of the same type in a ClientHello or ServerHello.
401  * This function returns 1 if all extensions are unique and we have parsed their
402  * types, and 0 if the extensions contain duplicates, could not be successfully
403  * found, or an internal error occurred. We only check duplicates for
404  * extensions that we know about. We ignore others.
405  */
406 int tls_collect_extensions(SSL *s, PACKET *packet, unsigned int context,
407                            RAW_EXTENSION **res, int *al, size_t *len)
408 {
409     PACKET extensions = *packet;
410     size_t i = 0;
411     size_t num_exts;
412     custom_ext_methods *exts = NULL;
413     RAW_EXTENSION *raw_extensions = NULL;
414     const EXTENSION_DEFINITION *thisexd;
415
416     *res = NULL;
417
418     /*
419      * Initialise server side custom extensions. Client side is done during
420      * construction of extensions for the ClientHello.
421      */
422     if ((context & EXT_CLIENT_HELLO) != 0) {
423         exts = &s->cert->srv_ext;
424         custom_ext_init(&s->cert->srv_ext);
425     } else if ((context & EXT_TLS1_2_SERVER_HELLO) != 0) {
426         exts = &s->cert->cli_ext;
427     }
428
429     num_exts = OSSL_NELEM(ext_defs) + (exts != NULL ? exts->meths_count : 0);
430     raw_extensions = OPENSSL_zalloc(num_exts * sizeof(*raw_extensions));
431     if (raw_extensions == NULL) {
432         *al = SSL_AD_INTERNAL_ERROR;
433         SSLerr(SSL_F_TLS_COLLECT_EXTENSIONS, ERR_R_MALLOC_FAILURE);
434         return 0;
435     }
436
437     while (PACKET_remaining(&extensions) > 0) {
438         unsigned int type;
439         PACKET extension;
440         RAW_EXTENSION *thisex;
441
442         if (!PACKET_get_net_2(&extensions, &type) ||
443             !PACKET_get_length_prefixed_2(&extensions, &extension)) {
444             SSLerr(SSL_F_TLS_COLLECT_EXTENSIONS, SSL_R_BAD_EXTENSION);
445             *al = SSL_AD_DECODE_ERROR;
446             goto err;
447         }
448         /*
449          * Verify this extension is allowed. We only check duplicates for
450          * extensions that we recognise.
451          */
452         if (!verify_extension(s, context, type, exts, raw_extensions, &thisex)
453                 || (thisex != NULL && thisex->present == 1)) {
454             SSLerr(SSL_F_TLS_COLLECT_EXTENSIONS, SSL_R_BAD_EXTENSION);
455             *al = SSL_AD_ILLEGAL_PARAMETER;
456             goto err;
457         }
458         if (thisex != NULL) {
459             thisex->data = extension;
460             thisex->present = 1;
461             thisex->type = type;
462         }
463     }
464
465     /*
466      * Initialise all known extensions relevant to this context, whether we have
467      * found them or not
468      */
469     for (thisexd = ext_defs, i = 0; i < OSSL_NELEM(ext_defs); i++, thisexd++) {
470         if(thisexd->init != NULL && (thisexd->context & context) != 0
471                 && extension_is_relevant(s, thisexd->context, context)
472                 && !thisexd->init(s, context)) {
473             *al = SSL_AD_INTERNAL_ERROR;
474             goto err;
475         }
476     }
477
478     *res = raw_extensions;
479     if (len != NULL)
480         *len = num_exts;
481     return 1;
482
483  err:
484     OPENSSL_free(raw_extensions);
485     return 0;
486 }
487
488 /*
489  * Runs the parser for a given extension with index |idx|. |exts| contains the
490  * list of all parsed extensions previously collected by
491  * tls_collect_extensions(). The parser is only run if it is applicable for the
492  * given |context| and the parser has not already been run. If this is for a
493  * Certificate message, then we also provide the parser with the relevant
494  * Certificate |x| and its position in the |chainidx| with 0 being the first
495  * Certificate. Returns 1 on success or 0 on failure. In the event of a failure
496  * |*al| is populated with a suitable alert code. If an extension is not present
497  * this counted as success.
498  */
499 int tls_parse_extension(SSL *s, TLSEXT_INDEX idx, int context,
500                         RAW_EXTENSION *exts, X509 *x, size_t chainidx, int *al)
501 {
502     RAW_EXTENSION *currext = &exts[idx];
503     int (*parser)(SSL *s, PACKET *pkt, unsigned int context, X509 *x,
504                   size_t chainidx, int *al) = NULL;
505
506     /* Skip if the extension is not present */
507     if (!currext->present)
508         return 1;
509
510     if (s->ext.debug_cb)
511         s->ext.debug_cb(s, !s->server, currext->type,
512                         PACKET_data(&currext->data),
513                         PACKET_remaining(&currext->data),
514                         s->ext.debug_arg);
515
516     /* Skip if we've already parsed this extension */
517     if (currext->parsed)
518         return 1;
519
520     currext->parsed = 1;
521
522     if (idx < OSSL_NELEM(ext_defs)) {
523         /* We are handling a built-in extension */
524         const EXTENSION_DEFINITION *extdef = &ext_defs[idx];
525
526         /* Check if extension is defined for our protocol. If not, skip */
527         if (!extension_is_relevant(s, extdef->context, context))
528             return 1;
529
530         parser = s->server ? extdef->parse_ctos : extdef->parse_stoc;
531
532         if (parser != NULL)
533             return parser(s, &currext->data, context, x, chainidx, al);
534
535         /*
536          * If the parser is NULL we fall through to the custom extension
537          * processing
538          */
539     }
540
541     /*
542      * This is a custom extension. We only allow this if it is a non
543      * resumed session on the server side.
544      *chain
545      * TODO(TLS1.3): We only allow old style <=TLS1.2 custom extensions.
546      * We're going to need a new mechanism for TLS1.3 to specify which
547      * messages to add the custom extensions to.
548      */
549     if ((!s->hit || !s->server)
550             && (context
551                 & (EXT_CLIENT_HELLO | EXT_TLS1_2_SERVER_HELLO)) != 0
552             && custom_ext_parse(s, s->server, currext->type,
553                                 PACKET_data(&currext->data),
554                                 PACKET_remaining(&currext->data),
555                                 al) <= 0)
556         return 0;
557
558     return 1;
559 }
560
561 /*
562  * Parse all remaining extensions that have not yet been parsed. Also calls the
563  * finalisation for all extensions at the end, whether we collected them or not.
564  * Returns 1 for success or 0 for failure. If we are working on a Certificate
565  * message then we also pass the Certificate |x| and its position in the
566  * |chainidx|, with 0 being the first certificate. On failure, |*al| is
567  * populated with a suitable alert code.
568  */
569 int tls_parse_all_extensions(SSL *s, int context, RAW_EXTENSION *exts, X509 *x,
570                              size_t chainidx, int *al)
571 {
572     size_t i, numexts = OSSL_NELEM(ext_defs);
573     const EXTENSION_DEFINITION *thisexd;
574
575     /* Calculate the number of extensions in the extensions list */
576     if ((context & EXT_CLIENT_HELLO) != 0) {
577         numexts += s->cert->srv_ext.meths_count;
578     } else if ((context & EXT_TLS1_2_SERVER_HELLO) != 0) {
579         numexts += s->cert->cli_ext.meths_count;
580     }
581
582     /* Parse each extension in turn */
583     for (i = 0; i < numexts; i++) {
584         if (!tls_parse_extension(s, i, context, exts, x, chainidx, al))
585             return 0;
586     }
587
588     /*
589      * Finalise all known extensions relevant to this context, whether we have
590      * found them or not
591      */
592     for (i = 0, thisexd = ext_defs; i < OSSL_NELEM(ext_defs); i++, thisexd++) {
593         if(thisexd->final != NULL
594                 && (thisexd->context & context) != 0
595                 && !thisexd->final(s, context, exts[i].present, al))
596             return 0;
597     }
598
599     return 1;
600 }
601
602 /*
603  * Construct all the extensions relevant to the current |context| and write
604  * them to |pkt|. If this is an extension for a Certificate in a Certificate
605  * message, then |x| will be set to the Certificate we are handling, and
606  * |chainidx| will indicate the position in the chainidx we are processing (with
607  * 0 being the first in the chain). Returns 1 on success or 0 on failure. If a
608  * failure occurs then |al| is populated with a suitable alert code. On a
609  * failure construction stops at the first extension to fail to construct.
610  */
611 int tls_construct_extensions(SSL *s, WPACKET *pkt, unsigned int context,
612                              X509 *x, size_t chainidx, int *al)
613 {
614     size_t i;
615     int addcustom = 0, min_version, max_version = 0, reason, tmpal;
616     const EXTENSION_DEFINITION *thisexd;
617
618     /*
619      * Normally if something goes wrong during construction it's an internal
620      * error. We can always override this later.
621      */
622     tmpal = SSL_AD_INTERNAL_ERROR;
623
624     if (!WPACKET_start_sub_packet_u16(pkt)
625                /*
626                 * If extensions are of zero length then we don't even add the
627                 * extensions length bytes to a ClientHello/ServerHello in SSLv3
628                 */
629             || ((context & (EXT_CLIENT_HELLO | EXT_TLS1_2_SERVER_HELLO)) != 0
630                && s->version == SSL3_VERSION
631                && !WPACKET_set_flags(pkt,
632                                      WPACKET_FLAGS_ABANDON_ON_ZERO_LENGTH))) {
633         SSLerr(SSL_F_TLS_CONSTRUCT_EXTENSIONS, ERR_R_INTERNAL_ERROR);
634         goto err;
635     }
636
637     if ((context & EXT_CLIENT_HELLO) != 0) {
638         reason = ssl_get_client_min_max_version(s, &min_version, &max_version);
639         if (reason != 0) {
640             SSLerr(SSL_F_TLS_CONSTRUCT_EXTENSIONS, reason);
641             goto err;
642         }
643     }
644
645     /* Add custom extensions first */
646     if ((context & EXT_CLIENT_HELLO) != 0) {
647         custom_ext_init(&s->cert->cli_ext);
648         addcustom = 1;
649     } else if ((context & EXT_TLS1_2_SERVER_HELLO) != 0) {
650         /*
651          * We already initialised the custom extensions during ClientHello
652          * parsing.
653          *
654          * TODO(TLS1.3): We're going to need a new custom extension mechanism
655          * for TLS1.3, so that custom extensions can specify which of the
656          * multiple message they wish to add themselves to.
657          */
658         addcustom = 1;
659     }
660
661     if (addcustom && !custom_ext_add(s, s->server, pkt, &tmpal)) {
662         SSLerr(SSL_F_TLS_CONSTRUCT_EXTENSIONS, ERR_R_INTERNAL_ERROR);
663         goto err;
664     }
665
666     for (i = 0, thisexd = ext_defs; i < OSSL_NELEM(ext_defs); i++, thisexd++) {
667         int (*construct)(SSL *s, WPACKET *pkt, unsigned int context, X509 *x,
668                          size_t chainidx, int *al);
669
670         /* Skip if not relevant for our context */
671         if ((thisexd->context & context) == 0)
672             continue;
673
674         construct = s->server ? thisexd->construct_stoc
675                               : thisexd->construct_ctos;
676
677         /* Check if this extension is defined for our protocol. If not, skip */
678         if ((SSL_IS_DTLS(s)
679                     && (thisexd->context & EXT_TLS_IMPLEMENTATION_ONLY)
680                        != 0)
681                 || (s->version == SSL3_VERSION
682                         && (thisexd->context & EXT_SSL3_ALLOWED) == 0)
683                 || (SSL_IS_TLS13(s)
684                     && (thisexd->context & EXT_TLS1_2_AND_BELOW_ONLY)
685                        != 0)
686                 || (!SSL_IS_TLS13(s)
687                     && (thisexd->context & EXT_TLS1_3_ONLY) != 0
688                     && (context & EXT_CLIENT_HELLO) == 0)
689                 || ((thisexd->context & EXT_TLS1_3_ONLY) != 0
690                     && (context & EXT_CLIENT_HELLO) != 0
691                     && (SSL_IS_DTLS(s) || max_version < TLS1_3_VERSION))
692                 || construct == NULL)
693             continue;
694
695         if (!construct(s, pkt, context, x, chainidx, &tmpal))
696             goto err;
697     }
698
699     if (!WPACKET_close(pkt)) {
700         SSLerr(SSL_F_TLS_CONSTRUCT_EXTENSIONS, ERR_R_INTERNAL_ERROR);
701         goto err;
702     }
703
704     return 1;
705
706  err:
707     *al = tmpal;
708     return 0;
709 }
710
711 /*
712  * Built in extension finalisation and initialisation functions. All initialise
713  * or finalise the associated extension type for the given |context|. For
714  * finalisers |sent| is set to 1 if we saw the extension during parsing, and 0
715  * otherwise. These functions return 1 on success or 0 on failure. In the event
716  * of a failure then |*al| is populated with a suitable error code.
717  */
718
719 static int final_renegotiate(SSL *s, unsigned int context, int sent,
720                                      int *al)
721 {
722     if (!s->server) {
723         /*
724          * Check if we can connect to a server that doesn't support safe
725          * renegotiation
726          */
727         if (!(s->options & SSL_OP_LEGACY_SERVER_CONNECT)
728                 && !(s->options & SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION)
729                 && !sent) {
730             *al = SSL_AD_HANDSHAKE_FAILURE;
731             SSLerr(SSL_F_FINAL_RENEGOTIATE,
732                    SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED);
733             return 0;
734         }
735
736         return 1;
737     }
738
739     /* Need RI if renegotiating */
740     if (s->renegotiate
741             && !(s->options & SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION)
742             && !sent) {
743         *al = SSL_AD_HANDSHAKE_FAILURE;
744         SSLerr(SSL_F_FINAL_RENEGOTIATE,
745                SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED);
746         return 0;
747     }
748
749
750     return 1;
751 }
752
753 static int init_server_name(SSL *s, unsigned int context)
754 {
755     if (s->server)
756         s->servername_done = 0;
757
758     return 1;
759 }
760
761 static int final_server_name(SSL *s, unsigned int context, int sent,
762                                      int *al)
763 {
764     int ret = SSL_TLSEXT_ERR_NOACK;
765     int altmp = SSL_AD_UNRECOGNIZED_NAME;
766
767     if (s->ctx != NULL && s->ctx->ext.servername_cb != 0)
768         ret = s->ctx->ext.servername_cb(s, &altmp,
769                                         s->ctx->ext.servername_arg);
770     else if (s->session_ctx != NULL
771              && s->session_ctx->ext.servername_cb != 0)
772         ret = s->session_ctx->ext.servername_cb(s, &altmp,
773                                        s->session_ctx->ext.servername_arg);
774
775     switch (ret) {
776     case SSL_TLSEXT_ERR_ALERT_FATAL:
777         *al = altmp;
778         return 0;
779
780     case SSL_TLSEXT_ERR_ALERT_WARNING:
781         *al = altmp;
782         return 1;
783
784     case SSL_TLSEXT_ERR_NOACK:
785         s->servername_done = 0;
786         return 1;
787
788     default:
789         return 1;
790     }
791 }
792
793 #ifndef OPENSSL_NO_EC
794 static int final_ec_pt_formats(SSL *s, unsigned int context, int sent,
795                                        int *al)
796 {
797     unsigned long alg_k, alg_a;
798
799     if (s->server)
800         return 1;
801
802     alg_k = s->s3->tmp.new_cipher->algorithm_mkey;
803     alg_a = s->s3->tmp.new_cipher->algorithm_auth;
804
805     /*
806      * If we are client and using an elliptic curve cryptography cipher
807      * suite, then if server returns an EC point formats lists extension it
808      * must contain uncompressed.
809      */
810     if (s->ext.ecpointformats != NULL
811             && s->ext.ecpointformats_len > 0
812             && s->session->ext.ecpointformats != NULL
813             && s->session->ext.ecpointformats_len > 0
814             && ((alg_k & SSL_kECDHE) || (alg_a & SSL_aECDSA))) {
815         /* we are using an ECC cipher */
816         size_t i;
817         unsigned char *list = s->session->ext.ecpointformats;
818
819         for (i = 0; i < s->session->ext.ecpointformats_len; i++) {
820             if (*list++ == TLSEXT_ECPOINTFORMAT_uncompressed)
821                 break;
822         }
823         if (i == s->session->ext.ecpointformats_len) {
824             SSLerr(SSL_F_FINAL_EC_PT_FORMATS,
825                    SSL_R_TLS_INVALID_ECPOINTFORMAT_LIST);
826             return 0;
827         }
828     }
829
830     return 1;
831 }
832 #endif
833
834 static int init_session_ticket(SSL *s, unsigned int context)
835 {
836     if (!s->server)
837         s->ext.ticket_expected = 0;
838
839     return 1;
840 }
841
842 #ifndef OPENSSL_NO_OCSP
843 static int init_status_request(SSL *s, unsigned int context)
844 {
845     if (s->server) {
846         s->ext.status_type = TLSEXT_STATUSTYPE_nothing;
847     } else {
848         /*
849          * Ensure we get sensible values passed to tlsext_status_cb in the event
850          * that we don't receive a status message
851          */
852         OPENSSL_free(s->ext.ocsp.resp);
853         s->ext.ocsp.resp = NULL;
854         s->ext.ocsp.resp_len = 0;
855     }
856
857     return 1;
858 }
859 #endif
860
861 #ifndef OPENSSL_NO_NEXTPROTONEG
862 static int init_npn(SSL *s, unsigned int context)
863 {
864     s->s3->npn_seen = 0;
865
866     return 1;
867 }
868 #endif
869
870 static int init_alpn(SSL *s, unsigned int context)
871 {
872     OPENSSL_free(s->s3->alpn_selected);
873     s->s3->alpn_selected = NULL;
874     if (s->server) {
875         s->s3->alpn_selected_len = 0;
876         OPENSSL_free(s->s3->alpn_proposed);
877         s->s3->alpn_proposed = NULL;
878         s->s3->alpn_proposed_len = 0;
879     }
880     return 1;
881 }
882
883 static int final_alpn(SSL *s, unsigned int context, int sent, int *al)
884 {
885     const unsigned char *selected = NULL;
886     unsigned char selected_len = 0;
887
888     if (!s->server)
889         return 1;
890
891     if (s->ctx->ext.alpn_select_cb != NULL && s->s3->alpn_proposed != NULL) {
892         int r = s->ctx->ext.alpn_select_cb(s, &selected, &selected_len,
893                                            s->s3->alpn_proposed,
894                                            (unsigned int)s->s3->alpn_proposed_len,
895                                            s->ctx->ext.alpn_select_cb_arg);
896
897         if (r == SSL_TLSEXT_ERR_OK) {
898             OPENSSL_free(s->s3->alpn_selected);
899             s->s3->alpn_selected = OPENSSL_memdup(selected, selected_len);
900             if (s->s3->alpn_selected == NULL) {
901                 *al = SSL_AD_INTERNAL_ERROR;
902                 return 0;
903             }
904             s->s3->alpn_selected_len = selected_len;
905 #ifndef OPENSSL_NO_NEXTPROTONEG
906             /* ALPN takes precedence over NPN. */
907             s->s3->npn_seen = 0;
908 #endif
909         } else {
910             *al = SSL_AD_NO_APPLICATION_PROTOCOL;
911             return 0;
912         }
913     }
914
915     return 1;
916 }
917
918 static int init_sig_algs(SSL *s, unsigned int context)
919 {
920     /* Clear any signature algorithms extension received */
921     OPENSSL_free(s->s3->tmp.peer_sigalgs);
922     s->s3->tmp.peer_sigalgs = NULL;
923
924     return 1;
925 }
926
927 #ifndef OPENSSL_NO_SRP
928 static int init_srp(SSL *s, unsigned int context)
929 {
930     OPENSSL_free(s->srp_ctx.login);
931     s->srp_ctx.login = NULL;
932
933     return 1;
934 }
935 #endif
936
937 static int init_etm(SSL *s, unsigned int context)
938 {
939     s->ext.use_etm = 0;
940
941     return 1;
942 }
943
944 static int init_ems(SSL *s, unsigned int context)
945 {
946     if (!s->server)
947         s->s3->flags &= ~TLS1_FLAGS_RECEIVED_EXTMS;
948
949     return 1;
950 }
951
952 static int final_ems(SSL *s, unsigned int context, int sent, int *al)
953 {
954     if (!s->server && s->hit) {
955         /*
956          * Check extended master secret extension is consistent with
957          * original session.
958          */
959         if (!(s->s3->flags & TLS1_FLAGS_RECEIVED_EXTMS) !=
960             !(s->session->flags & SSL_SESS_FLAG_EXTMS)) {
961             *al = SSL_AD_HANDSHAKE_FAILURE;
962             SSLerr(SSL_F_FINAL_EMS, SSL_R_INCONSISTENT_EXTMS);
963             return 0;
964         }
965     }
966
967     return 1;
968 }
969
970 #ifndef OPENSSL_NO_SRTP
971 static int init_srtp(SSL *s, unsigned int context)
972 {
973     if (s->server)
974         s->srtp_profile = NULL;
975
976     return 1;
977 }
978 #endif
979
980 static int final_sig_algs(SSL *s, unsigned int context, int sent, int *al)
981 {
982     if (!sent && SSL_IS_TLS13(s)) {
983         *al = TLS13_AD_MISSING_EXTENSION;
984         SSLerr(SSL_F_FINAL_SIG_ALGS, SSL_R_MISSING_SIGALGS_EXTENSION);
985         return 0;
986     }
987
988     return 1;
989 }
990
991 #ifndef OPENSSL_NO_EC
992 static int final_key_share(SSL *s, unsigned int context, int sent, int *al)
993 {
994     if (!SSL_IS_TLS13(s))
995         return 1;
996
997     /*
998      * If
999      *     we are a client
1000      *     AND
1001      *     we have no key_share
1002      *     AND
1003      *     (we are not resuming
1004      *      OR the kex_mode doesn't allow non key_share resumes)
1005      * THEN
1006      *     fail;
1007      */
1008     if (!s->server
1009             && !sent
1010             && (!s->hit
1011                 || (s->ext.psk_kex_mode & TLSEXT_KEX_MODE_FLAG_KE) == 0)) {
1012         /* Nothing left we can do - just fail */
1013         *al = SSL_AD_HANDSHAKE_FAILURE;
1014         SSLerr(SSL_F_FINAL_KEY_SHARE, SSL_R_NO_SUITABLE_KEY_SHARE);
1015         return 0;
1016     }
1017     /*
1018      * If
1019      *     we are a server
1020      *     AND
1021      *     we have no key_share
1022      * THEN
1023      *     If
1024      *         we didn't already send a HelloRetryRequest
1025      *         AND
1026      *         the client sent a key_share extension
1027      *         AND
1028      *         (we are not resuming
1029      *          OR the kex_mode allows key_share resumes)
1030      *         AND
1031      *         a shared group exists
1032      *     THEN
1033      *         send a HelloRetryRequest
1034      *     ELSE If
1035      *         we are not resuming
1036      *         OR
1037      *         the kex_mode doesn't allow non key_share resumes
1038      *     THEN
1039      *         fail;
1040      */
1041     if (s->server && s->s3->peer_tmp == NULL) {
1042         /* No suitable share */
1043         if (s->hello_retry_request == 0 && sent
1044                 && (!s->hit
1045                     || (s->ext.psk_kex_mode & TLSEXT_KEX_MODE_FLAG_KE_DHE)
1046                        != 0)) {
1047             const unsigned char *pcurves, *pcurvestmp, *clntcurves;
1048             size_t num_curves, clnt_num_curves, i;
1049             unsigned int group_id = 0;
1050
1051             /* Check if a shared group exists */
1052
1053             /* Get the clients list of supported groups. */
1054             if (!tls1_get_curvelist(s, 1, &clntcurves, &clnt_num_curves)) {
1055                 *al = SSL_AD_INTERNAL_ERROR;
1056                 SSLerr(SSL_F_FINAL_KEY_SHARE, ERR_R_INTERNAL_ERROR);
1057                 return 0;
1058             }
1059
1060             /* Get our list of available groups */
1061             if (!tls1_get_curvelist(s, 0, &pcurves, &num_curves)) {
1062                 *al = SSL_AD_INTERNAL_ERROR;
1063                 SSLerr(SSL_F_FINAL_KEY_SHARE, ERR_R_INTERNAL_ERROR);
1064                 return 0;
1065             }
1066
1067             /* Find the first group we allow that is also in client's list */
1068             for (i = 0, pcurvestmp = pcurves; i < num_curves;
1069                  i++, pcurvestmp += 2) {
1070                 group_id = bytestogroup(pcurvestmp);
1071
1072                 if (check_in_list(s, group_id, clntcurves, clnt_num_curves, 1))
1073                     break;
1074             }
1075
1076             if (i < num_curves) {
1077                 /* A shared group exists so send a HelloRetryRequest */
1078                 s->s3->group_id = group_id;
1079                 s->hello_retry_request = 1;
1080                 return 1;
1081             }
1082         }
1083         if (!s->hit
1084                 || (s->ext.psk_kex_mode & TLSEXT_KEX_MODE_FLAG_KE) == 0) {
1085             /* Nothing left we can do - just fail */
1086             *al = SSL_AD_HANDSHAKE_FAILURE;
1087             SSLerr(SSL_F_FINAL_KEY_SHARE, SSL_R_NO_SUITABLE_KEY_SHARE);
1088             return 0;
1089         }
1090     }
1091
1092     /* We have a key_share so don't send any more HelloRetryRequest messages */
1093     if (s->server)
1094         s->hello_retry_request = 0;
1095
1096     /*
1097      * For a client side resumption with no key_share we need to generate
1098      * the handshake secret (otherwise this is done during key_share
1099      * processing).
1100      */
1101     if (!sent && !s->server && !tls13_generate_handshake_secret(s, NULL, 0)) {
1102         *al = SSL_AD_INTERNAL_ERROR;
1103         SSLerr(SSL_F_FINAL_KEY_SHARE, ERR_R_INTERNAL_ERROR);
1104         return 0;
1105     }
1106
1107     return 1;
1108 }
1109 #endif
1110
1111 static int init_psk_kex_modes(SSL *s, unsigned int context)
1112 {
1113     s->ext.psk_kex_mode = TLSEXT_KEX_MODE_FLAG_NONE;
1114     return 1;
1115 }
1116
1117 int tls_psk_do_binder(SSL *s, const EVP_MD *md, const unsigned char *msgstart,
1118                       size_t binderoffset, const unsigned char *binderin,
1119                       unsigned char *binderout,
1120                       SSL_SESSION *sess, int sign)
1121 {
1122     EVP_PKEY *mackey = NULL;
1123     EVP_MD_CTX *mctx = NULL;
1124     unsigned char hash[EVP_MAX_MD_SIZE], binderkey[EVP_MAX_MD_SIZE];
1125     unsigned char finishedkey[EVP_MAX_MD_SIZE], tmpbinder[EVP_MAX_MD_SIZE];
1126     const char resumption_label[] = "resumption psk binder key";
1127     size_t bindersize, hashsize = EVP_MD_size(md);
1128     int ret = -1;
1129
1130     /* Generate the early_secret */
1131     if (!tls13_generate_secret(s, md, NULL, sess->master_key,
1132                                sess->master_key_length,
1133                                (unsigned char *)&s->early_secret)) {
1134         SSLerr(SSL_F_TLS_PSK_DO_BINDER, ERR_R_INTERNAL_ERROR);
1135         goto err;
1136     }
1137
1138     /*
1139      * Create the handshake hash for the binder key...the messages so far are
1140      * empty!
1141      */
1142     mctx = EVP_MD_CTX_new();
1143     if (mctx == NULL
1144             || EVP_DigestInit_ex(mctx, md, NULL) <= 0
1145             || EVP_DigestFinal_ex(mctx, hash, NULL) <= 0) {
1146         SSLerr(SSL_F_TLS_PSK_DO_BINDER, ERR_R_INTERNAL_ERROR);
1147         goto err;
1148     }
1149
1150     /* Generate the binder key */
1151     if (!tls13_hkdf_expand(s, md, s->early_secret,
1152                            (unsigned char *)resumption_label,
1153                            sizeof(resumption_label) - 1, hash, binderkey,
1154                            hashsize)) {
1155         SSLerr(SSL_F_TLS_PSK_DO_BINDER, ERR_R_INTERNAL_ERROR);
1156         goto err;
1157     }
1158
1159     /* Generate the finished key */
1160     if (!tls13_derive_finishedkey(s, md, binderkey, finishedkey, hashsize)) {
1161         SSLerr(SSL_F_TLS_PSK_DO_BINDER, ERR_R_INTERNAL_ERROR);
1162         goto err;
1163     }
1164
1165     if (EVP_DigestInit_ex(mctx, md, NULL) <= 0) {
1166         SSLerr(SSL_F_TLS_PSK_DO_BINDER, ERR_R_INTERNAL_ERROR);
1167         goto err;
1168     }
1169
1170     /*
1171      * Get a hash of the ClientHello up to the start of the binders. If we are
1172      * following a HelloRetryRequest then this includes the hash of the first
1173      * ClientHello and the HelloRetryRequest itself.
1174      */
1175     if (s->hello_retry_request) {
1176         size_t hdatalen;
1177         void *hdata;
1178
1179         hdatalen = BIO_get_mem_data(s->s3->handshake_buffer, &hdata);
1180         if (hdatalen <= 0) {
1181             SSLerr(SSL_F_TLS_PSK_DO_BINDER, SSL_R_BAD_HANDSHAKE_LENGTH);
1182             goto err;
1183         }
1184
1185         /*
1186          * For servers the handshake buffer data will include the second
1187          * ClientHello - which we don't want - so we need to take that bit off.
1188          */
1189         if (s->server) {
1190             if (hdatalen < s->init_num + SSL3_HM_HEADER_LENGTH) {
1191                 SSLerr(SSL_F_TLS_PSK_DO_BINDER, ERR_R_INTERNAL_ERROR);
1192                 goto err;
1193             }
1194             hdatalen -= s->init_num + SSL3_HM_HEADER_LENGTH;
1195         }
1196
1197         if (EVP_DigestUpdate(mctx, hdata, hdatalen) <= 0) {
1198             SSLerr(SSL_F_TLS_PSK_DO_BINDER, ERR_R_INTERNAL_ERROR);
1199             goto err;
1200         }
1201     }
1202
1203     if (EVP_DigestUpdate(mctx, msgstart, binderoffset) <= 0
1204             || EVP_DigestFinal_ex(mctx, hash, NULL) <= 0) {
1205         SSLerr(SSL_F_TLS_PSK_DO_BINDER, ERR_R_INTERNAL_ERROR);
1206         goto err;
1207     }
1208
1209     mackey = EVP_PKEY_new_mac_key(EVP_PKEY_HMAC, NULL, finishedkey, hashsize);
1210     if (mackey == NULL) {
1211         SSLerr(SSL_F_TLS_PSK_DO_BINDER, ERR_R_INTERNAL_ERROR);
1212         goto err;
1213     }
1214
1215     if (!sign)
1216         binderout = tmpbinder;
1217
1218     bindersize = hashsize;
1219     if (EVP_DigestSignInit(mctx, NULL, md, NULL, mackey) <= 0
1220             || EVP_DigestSignUpdate(mctx, hash, hashsize) <= 0
1221             || EVP_DigestSignFinal(mctx, binderout, &bindersize) <= 0
1222             || bindersize != hashsize) {
1223         SSLerr(SSL_F_TLS_PSK_DO_BINDER, ERR_R_INTERNAL_ERROR);
1224         goto err;
1225     }
1226
1227     if (sign) {
1228         ret = 1;
1229     } else {
1230         /* HMAC keys can't do EVP_DigestVerify* - use CRYPTO_memcmp instead */
1231         ret = (CRYPTO_memcmp(binderin, binderout, hashsize) == 0);
1232     }
1233
1234  err:
1235     OPENSSL_cleanse(binderkey, sizeof(binderkey));
1236     OPENSSL_cleanse(finishedkey, sizeof(finishedkey));
1237     EVP_PKEY_free(mackey);
1238     EVP_MD_CTX_free(mctx);
1239
1240     return ret;
1241 }
1242
1243 static int final_early_data(SSL *s, unsigned int context, int sent, int *al)
1244 {
1245     if (!s->server || !sent)
1246         return 1;
1247
1248     if (s->max_early_data == 0
1249             || !s->hit
1250             || s->session->ext.tick_identity != 0
1251             || s->early_data_state != SSL_EARLY_DATA_ACCEPTING
1252             || !s->ext.early_data_ok
1253             || s->hello_retry_request
1254             || s->s3->alpn_selected_len != s->session->ext.alpn_selected_len
1255             || memcmp(s->s3->alpn_selected, s->session->ext.alpn_selected,
1256                       s->s3->alpn_selected_len) != 0){
1257         s->ext.early_data = SSL_EARLY_DATA_REJECTED;
1258     } else {
1259         s->ext.early_data = SSL_EARLY_DATA_ACCEPTED;
1260
1261         if (!tls13_change_cipher_state(s,
1262                     SSL3_CC_EARLY | SSL3_CHANGE_CIPHER_SERVER_READ)) {
1263             *al = SSL_AD_INTERNAL_ERROR;
1264             return 0;
1265         }
1266     }
1267
1268     return 1;
1269 }