23dc8d3363b719f653fb3caf0509c5cd0a5b7a9a
[openssl.git] / ssl / statem / extensions_clnt.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 <assert.h>
11 #include <openssl/ocsp.h>
12 #include "../ssl_locl.h"
13 #include "statem_locl.h"
14
15 int tls_construct_ctos_renegotiate(SSL *s, WPACKET *pkt, unsigned int context,
16                                    X509 *x, size_t chainidx, int *al)
17 {
18     /* Add RI if renegotiating */
19     if (!s->renegotiate)
20         return 1;
21
22     if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_renegotiate)
23             || !WPACKET_start_sub_packet_u16(pkt)
24             || !WPACKET_sub_memcpy_u8(pkt, s->s3->previous_client_finished,
25                                s->s3->previous_client_finished_len)
26             || !WPACKET_close(pkt)) {
27         SSLerr(SSL_F_TLS_CONSTRUCT_CTOS_RENEGOTIATE, ERR_R_INTERNAL_ERROR);
28         return 0;
29     }
30
31     return 1;
32 }
33
34 int tls_construct_ctos_server_name(SSL *s, WPACKET *pkt, unsigned int context,
35                                    X509 *x, size_t chainidx, int *al)
36 {
37     if (s->ext.hostname == NULL)
38         return 1;
39
40     /* Add TLS extension servername to the Client Hello message */
41     if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_server_name)
42                /* Sub-packet for server_name extension */
43             || !WPACKET_start_sub_packet_u16(pkt)
44                /* Sub-packet for servername list (always 1 hostname)*/
45             || !WPACKET_start_sub_packet_u16(pkt)
46             || !WPACKET_put_bytes_u8(pkt, TLSEXT_NAMETYPE_host_name)
47             || !WPACKET_sub_memcpy_u16(pkt, s->ext.hostname,
48                                        strlen(s->ext.hostname))
49             || !WPACKET_close(pkt)
50             || !WPACKET_close(pkt)) {
51         SSLerr(SSL_F_TLS_CONSTRUCT_CTOS_SERVER_NAME, ERR_R_INTERNAL_ERROR);
52         return 0;
53     }
54
55     return 1;
56 }
57
58 #ifndef OPENSSL_NO_SRP
59 int tls_construct_ctos_srp(SSL *s, WPACKET *pkt, unsigned int context, X509 *x,
60                            size_t chainidx, int *al)
61 {
62     /* Add SRP username if there is one */
63     if (s->srp_ctx.login == NULL)
64         return 1;
65
66     if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_srp)
67                /* Sub-packet for SRP extension */
68             || !WPACKET_start_sub_packet_u16(pkt)
69             || !WPACKET_start_sub_packet_u8(pkt)
70                /* login must not be zero...internal error if so */
71             || !WPACKET_set_flags(pkt, WPACKET_FLAGS_NON_ZERO_LENGTH)
72             || !WPACKET_memcpy(pkt, s->srp_ctx.login,
73                                strlen(s->srp_ctx.login))
74             || !WPACKET_close(pkt)
75             || !WPACKET_close(pkt)) {
76         SSLerr(SSL_F_TLS_CONSTRUCT_CTOS_SRP, ERR_R_INTERNAL_ERROR);
77         return 0;
78     }
79
80     return 1;
81 }
82 #endif
83
84 #ifndef OPENSSL_NO_EC
85 static int use_ecc(SSL *s)
86 {
87     int i, end;
88     unsigned long alg_k, alg_a;
89     STACK_OF(SSL_CIPHER) *cipher_stack = NULL;
90
91     /* See if we support any ECC ciphersuites */
92     if (s->version == SSL3_VERSION)
93         return 0;
94
95     cipher_stack = SSL_get_ciphers(s);
96     end = sk_SSL_CIPHER_num(cipher_stack);
97     for (i = 0; i < end; i++) {
98         const SSL_CIPHER *c = sk_SSL_CIPHER_value(cipher_stack, i);
99
100         alg_k = c->algorithm_mkey;
101         alg_a = c->algorithm_auth;
102         if ((alg_k & (SSL_kECDHE | SSL_kECDHEPSK))
103                 || (alg_a & SSL_aECDSA)
104                 || c->min_tls >= TLS1_3_VERSION)
105             break;
106     }
107
108     return i < end;
109 }
110
111 int tls_construct_ctos_ec_pt_formats(SSL *s, WPACKET *pkt, unsigned int context,
112                                      X509 *x, size_t chainidx, int *al)
113 {
114     const unsigned char *pformats;
115     size_t num_formats;
116
117     if (!use_ecc(s))
118         return 1;
119
120     /* Add TLS extension ECPointFormats to the ClientHello message */
121     tls1_get_formatlist(s, &pformats, &num_formats);
122
123     if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_ec_point_formats)
124                /* Sub-packet for formats extension */
125             || !WPACKET_start_sub_packet_u16(pkt)
126             || !WPACKET_sub_memcpy_u8(pkt, pformats, num_formats)
127             || !WPACKET_close(pkt)) {
128         SSLerr(SSL_F_TLS_CONSTRUCT_CTOS_EC_PT_FORMATS, ERR_R_INTERNAL_ERROR);
129         return 0;
130     }
131
132     return 1;
133 }
134
135 int tls_construct_ctos_supported_groups(SSL *s, WPACKET *pkt,
136                                         unsigned int context, X509 *x,
137                                         size_t chainidx, int *al)
138 {
139     const unsigned char *pcurves = NULL, *pcurvestmp;
140     size_t num_curves = 0, i;
141
142     if (!use_ecc(s))
143         return 1;
144
145     /*
146      * Add TLS extension supported_groups to the ClientHello message
147      */
148     /* TODO(TLS1.3): Add support for DHE groups */
149     pcurves = s->ext.supportedgroups;
150     if (!tls1_get_curvelist(s, 0, &pcurves, &num_curves)) {
151         SSLerr(SSL_F_TLS_CONSTRUCT_CTOS_SUPPORTED_GROUPS,
152                ERR_R_INTERNAL_ERROR);
153         return 0;
154     }
155     pcurvestmp = pcurves;
156
157     if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_supported_groups)
158                /* Sub-packet for supported_groups extension */
159             || !WPACKET_start_sub_packet_u16(pkt)
160             || !WPACKET_start_sub_packet_u16(pkt)) {
161         SSLerr(SSL_F_TLS_CONSTRUCT_CTOS_SUPPORTED_GROUPS,
162                ERR_R_INTERNAL_ERROR);
163         return 0;
164     }
165     /* Copy curve ID if supported */
166     for (i = 0; i < num_curves; i++, pcurvestmp += 2) {
167         if (tls_curve_allowed(s, pcurvestmp, SSL_SECOP_CURVE_SUPPORTED)) {
168             if (!WPACKET_put_bytes_u8(pkt, pcurvestmp[0])
169                 || !WPACKET_put_bytes_u8(pkt, pcurvestmp[1])) {
170                     SSLerr(SSL_F_TLS_CONSTRUCT_CTOS_SUPPORTED_GROUPS,
171                            ERR_R_INTERNAL_ERROR);
172                     return 0;
173                 }
174         }
175     }
176     if (!WPACKET_close(pkt) || !WPACKET_close(pkt)) {
177         SSLerr(SSL_F_TLS_CONSTRUCT_CTOS_SUPPORTED_GROUPS,
178                ERR_R_INTERNAL_ERROR);
179         return 0;
180     }
181
182     return 1;
183 }
184 #endif
185
186 int tls_construct_ctos_session_ticket(SSL *s, WPACKET *pkt,
187                                       unsigned int context, X509 *x,
188                                       size_t chainidx, int *al)
189 {
190     size_t ticklen;
191
192     if (!tls_use_ticket(s))
193         return 1;
194
195     if (!s->new_session && s->session != NULL
196             && s->session->ext.tick != NULL
197             && s->session->ssl_version != TLS1_3_VERSION) {
198         ticklen = s->session->ext.ticklen;
199     } else if (s->session && s->ext.session_ticket != NULL
200                && s->ext.session_ticket->data != NULL) {
201         ticklen = s->ext.session_ticket->length;
202         s->session->ext.tick = OPENSSL_malloc(ticklen);
203         if (s->session->ext.tick == NULL) {
204             SSLerr(SSL_F_TLS_CONSTRUCT_CTOS_SESSION_TICKET,
205                    ERR_R_INTERNAL_ERROR);
206             return 0;
207         }
208         memcpy(s->session->ext.tick,
209                s->ext.session_ticket->data, ticklen);
210         s->session->ext.ticklen = ticklen;
211     } else {
212         ticklen = 0;
213     }
214
215     if (ticklen == 0 && s->ext.session_ticket != NULL &&
216             s->ext.session_ticket->data == NULL)
217         return 1;
218
219     if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_session_ticket)
220             || !WPACKET_sub_memcpy_u16(pkt, s->session->ext.tick, ticklen)) {
221         SSLerr(SSL_F_TLS_CONSTRUCT_CTOS_SESSION_TICKET, ERR_R_INTERNAL_ERROR);
222         return 0;
223     }
224
225     return 1;
226 }
227
228 int tls_construct_ctos_sig_algs(SSL *s, WPACKET *pkt, unsigned int context,
229                                 X509 *x, size_t chainidx, int *al)
230 {
231     size_t salglen;
232     const uint16_t *salg;
233
234     if (!SSL_CLIENT_USE_SIGALGS(s))
235         return 1;
236
237     salglen = tls12_get_psigalgs(s, 1, &salg);
238     if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_signature_algorithms)
239                /* Sub-packet for sig-algs extension */
240             || !WPACKET_start_sub_packet_u16(pkt)
241                /* Sub-packet for the actual list */
242             || !WPACKET_start_sub_packet_u16(pkt)
243             || !tls12_copy_sigalgs(s, pkt, salg, salglen)
244             || !WPACKET_close(pkt)
245             || !WPACKET_close(pkt)) {
246         SSLerr(SSL_F_TLS_CONSTRUCT_CTOS_SIG_ALGS, ERR_R_INTERNAL_ERROR);
247         return 0;
248     }
249
250     return 1;
251 }
252
253 #ifndef OPENSSL_NO_OCSP
254 int tls_construct_ctos_status_request(SSL *s, WPACKET *pkt,
255                                       unsigned int context, X509 *x,
256                                       size_t chainidx, int *al)
257 {
258     int i;
259
260     /* This extension isn't defined for client Certificates */
261     if (x != NULL)
262         return 1;
263
264     if (s->ext.status_type != TLSEXT_STATUSTYPE_ocsp)
265         return 1;
266
267     if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_status_request)
268                /* Sub-packet for status request extension */
269             || !WPACKET_start_sub_packet_u16(pkt)
270             || !WPACKET_put_bytes_u8(pkt, TLSEXT_STATUSTYPE_ocsp)
271                /* Sub-packet for the ids */
272             || !WPACKET_start_sub_packet_u16(pkt)) {
273         SSLerr(SSL_F_TLS_CONSTRUCT_CTOS_STATUS_REQUEST, ERR_R_INTERNAL_ERROR);
274         return 0;
275     }
276     for (i = 0; i < sk_OCSP_RESPID_num(s->ext.ocsp.ids); i++) {
277         unsigned char *idbytes;
278         OCSP_RESPID *id = sk_OCSP_RESPID_value(s->ext.ocsp.ids, i);
279         int idlen = i2d_OCSP_RESPID(id, NULL);
280
281         if (idlen <= 0
282                    /* Sub-packet for an individual id */
283                 || !WPACKET_sub_allocate_bytes_u16(pkt, idlen, &idbytes)
284                 || i2d_OCSP_RESPID(id, &idbytes) != idlen) {
285             SSLerr(SSL_F_TLS_CONSTRUCT_CTOS_STATUS_REQUEST,
286                    ERR_R_INTERNAL_ERROR);
287             return 0;
288         }
289     }
290     if (!WPACKET_close(pkt)
291             || !WPACKET_start_sub_packet_u16(pkt)) {
292         SSLerr(SSL_F_TLS_CONSTRUCT_CTOS_STATUS_REQUEST, ERR_R_INTERNAL_ERROR);
293         return 0;
294     }
295     if (s->ext.ocsp.exts) {
296         unsigned char *extbytes;
297         int extlen = i2d_X509_EXTENSIONS(s->ext.ocsp.exts, NULL);
298
299         if (extlen < 0) {
300             SSLerr(SSL_F_TLS_CONSTRUCT_CTOS_STATUS_REQUEST,
301                    ERR_R_INTERNAL_ERROR);
302             return 0;
303         }
304         if (!WPACKET_allocate_bytes(pkt, extlen, &extbytes)
305                 || i2d_X509_EXTENSIONS(s->ext.ocsp.exts, &extbytes)
306                    != extlen) {
307             SSLerr(SSL_F_TLS_CONSTRUCT_CTOS_STATUS_REQUEST,
308                    ERR_R_INTERNAL_ERROR);
309             return 0;
310        }
311     }
312     if (!WPACKET_close(pkt) || !WPACKET_close(pkt)) {
313         SSLerr(SSL_F_TLS_CONSTRUCT_CTOS_STATUS_REQUEST, ERR_R_INTERNAL_ERROR);
314         return 0;
315     }
316
317     return 1;
318 }
319 #endif
320
321 #ifndef OPENSSL_NO_NEXTPROTONEG
322 int tls_construct_ctos_npn(SSL *s, WPACKET *pkt, unsigned int context, X509 *x,
323                            size_t chainidx, int *al)
324 {
325     if (s->ctx->ext.npn_select_cb == NULL || !SSL_IS_FIRST_HANDSHAKE(s))
326         return 1;
327
328     /*
329      * The client advertises an empty extension to indicate its support
330      * for Next Protocol Negotiation
331      */
332     if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_next_proto_neg)
333             || !WPACKET_put_bytes_u16(pkt, 0)) {
334         SSLerr(SSL_F_TLS_CONSTRUCT_CTOS_NPN, ERR_R_INTERNAL_ERROR);
335         return 0;
336     }
337
338     return 1;
339 }
340 #endif
341
342 int tls_construct_ctos_alpn(SSL *s, WPACKET *pkt, unsigned int context, X509 *x,
343                             size_t chainidx, int *al)
344 {
345     s->s3->alpn_sent = 0;
346
347     if (s->ext.alpn == NULL || !SSL_IS_FIRST_HANDSHAKE(s))
348         return 1;
349
350     if (!WPACKET_put_bytes_u16(pkt,
351                 TLSEXT_TYPE_application_layer_protocol_negotiation)
352                /* Sub-packet ALPN extension */
353             || !WPACKET_start_sub_packet_u16(pkt)
354             || !WPACKET_sub_memcpy_u16(pkt, s->ext.alpn, s->ext.alpn_len)
355             || !WPACKET_close(pkt)) {
356         SSLerr(SSL_F_TLS_CONSTRUCT_CTOS_ALPN, ERR_R_INTERNAL_ERROR);
357         return 0;
358     }
359     s->s3->alpn_sent = 1;
360
361     return 1;
362 }
363
364
365 #ifndef OPENSSL_NO_SRTP
366 int tls_construct_ctos_use_srtp(SSL *s, WPACKET *pkt, unsigned int context,
367                                 X509 *x, size_t chainidx, int *al)
368 {
369     STACK_OF(SRTP_PROTECTION_PROFILE) *clnt = SSL_get_srtp_profiles(s);
370     int i, end;
371
372     if (clnt == NULL)
373         return 1;
374
375     if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_use_srtp)
376                /* Sub-packet for SRTP extension */
377             || !WPACKET_start_sub_packet_u16(pkt)
378                /* Sub-packet for the protection profile list */
379             || !WPACKET_start_sub_packet_u16(pkt)) {
380         SSLerr(SSL_F_TLS_CONSTRUCT_CTOS_USE_SRTP, ERR_R_INTERNAL_ERROR);
381         return 0;
382     }
383
384     end = sk_SRTP_PROTECTION_PROFILE_num(clnt);
385     for (i = 0; i < end; i++) {
386         const SRTP_PROTECTION_PROFILE *prof =
387             sk_SRTP_PROTECTION_PROFILE_value(clnt, i);
388
389         if (prof == NULL || !WPACKET_put_bytes_u16(pkt, prof->id)) {
390             SSLerr(SSL_F_TLS_CONSTRUCT_CTOS_USE_SRTP, ERR_R_INTERNAL_ERROR);
391             return 0;
392         }
393     }
394     if (!WPACKET_close(pkt)
395                /* Add an empty use_mki value */
396             || !WPACKET_put_bytes_u8(pkt, 0)
397             || !WPACKET_close(pkt)) {
398         SSLerr(SSL_F_TLS_CONSTRUCT_CTOS_USE_SRTP, ERR_R_INTERNAL_ERROR);
399         return 0;
400     }
401
402     return 1;
403 }
404 #endif
405
406 int tls_construct_ctos_etm(SSL *s, WPACKET *pkt, unsigned int context, X509 *x,
407                            size_t chainidx, int *al)
408 {
409     if (s->options & SSL_OP_NO_ENCRYPT_THEN_MAC)
410         return 1;
411
412     if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_encrypt_then_mac)
413             || !WPACKET_put_bytes_u16(pkt, 0)) {
414         SSLerr(SSL_F_TLS_CONSTRUCT_CTOS_ETM, ERR_R_INTERNAL_ERROR);
415         return 0;
416     }
417
418     return 1;
419 }
420
421 #ifndef OPENSSL_NO_CT
422 int tls_construct_ctos_sct(SSL *s, WPACKET *pkt, unsigned int context, X509 *x,
423                            size_t chainidx, int *al)
424 {
425     if (s->ct_validation_callback == NULL)
426         return 1;
427
428     /* Not defined for client Certificates */
429     if (x != NULL)
430         return 1;
431
432     if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_signed_certificate_timestamp)
433             || !WPACKET_put_bytes_u16(pkt, 0)) {
434         SSLerr(SSL_F_TLS_CONSTRUCT_CTOS_SCT, ERR_R_INTERNAL_ERROR);
435         return 0;
436     }
437
438     return 1;
439 }
440 #endif
441
442 int tls_construct_ctos_ems(SSL *s, WPACKET *pkt, unsigned int context, X509 *x,
443                            size_t chainidx, int *al)
444 {
445     if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_extended_master_secret)
446             || !WPACKET_put_bytes_u16(pkt, 0)) {
447         SSLerr(SSL_F_TLS_CONSTRUCT_CTOS_EMS, ERR_R_INTERNAL_ERROR);
448         return 0;
449     }
450
451     return 1;
452 }
453
454 int tls_construct_ctos_supported_versions(SSL *s, WPACKET *pkt,
455                                           unsigned int context, X509 *x,
456                                           size_t chainidx, int *al)
457 {
458     int currv, min_version, max_version, reason;
459
460     if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_supported_versions)
461             || !WPACKET_start_sub_packet_u16(pkt)
462             || !WPACKET_start_sub_packet_u8(pkt)) {
463         SSLerr(SSL_F_TLS_CONSTRUCT_CTOS_SUPPORTED_VERSIONS,
464                ERR_R_INTERNAL_ERROR);
465         return 0;
466     }
467
468     reason = ssl_get_client_min_max_version(s, &min_version, &max_version);
469     if (reason != 0) {
470         SSLerr(SSL_F_TLS_CONSTRUCT_CTOS_SUPPORTED_VERSIONS, reason);
471         return 0;
472     }
473
474     /*
475      * TODO(TLS1.3): There is some discussion on the TLS list as to wheter
476      * we should include versions <TLS1.2. For the moment we do. To be
477      * reviewed later.
478      */
479     for (currv = max_version; currv >= min_version; currv--) {
480         /* TODO(TLS1.3): Remove this first if clause prior to release!! */
481         if (currv == TLS1_3_VERSION) {
482             if (!WPACKET_put_bytes_u16(pkt, TLS1_3_VERSION_DRAFT)) {
483                 SSLerr(SSL_F_TLS_CONSTRUCT_CTOS_SUPPORTED_VERSIONS,
484                        ERR_R_INTERNAL_ERROR);
485                 return 0;
486             }
487         } else if (!WPACKET_put_bytes_u16(pkt, currv)) {
488             SSLerr(SSL_F_TLS_CONSTRUCT_CTOS_SUPPORTED_VERSIONS,
489                    ERR_R_INTERNAL_ERROR);
490             return 0;
491         }
492     }
493     if (!WPACKET_close(pkt) || !WPACKET_close(pkt)) {
494         SSLerr(SSL_F_TLS_CONSTRUCT_CTOS_SUPPORTED_VERSIONS,
495                ERR_R_INTERNAL_ERROR);
496         return 0;
497     }
498
499     return 1;
500 }
501
502 /*
503  * Construct a psk_kex_modes extension. We only have two modes we know about
504  * at this stage, so we send both.
505  */
506 int tls_construct_ctos_psk_kex_modes(SSL *s, WPACKET *pkt, unsigned int context,
507                                      X509 *x, size_t chainidx, int *al)
508 {
509 #ifndef OPENSSL_NO_TLS1_3
510     /*
511      * TODO(TLS1.3): Do we want this list to be configurable? For now we always
512      * just send both supported modes
513      */
514     if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_psk_kex_modes)
515             || !WPACKET_start_sub_packet_u16(pkt)
516             || !WPACKET_start_sub_packet_u8(pkt)
517             || !WPACKET_put_bytes_u8(pkt, TLSEXT_KEX_MODE_KE_DHE)
518             || !WPACKET_put_bytes_u8(pkt, TLSEXT_KEX_MODE_KE)
519             || !WPACKET_close(pkt)
520             || !WPACKET_close(pkt)) {
521         SSLerr(SSL_F_TLS_CONSTRUCT_CTOS_PSK_KEX_MODES, ERR_R_INTERNAL_ERROR);
522         return 0;
523     }
524
525     s->ext.psk_kex_mode = TLSEXT_KEX_MODE_FLAG_KE | TLSEXT_KEX_MODE_FLAG_KE_DHE;
526 #endif
527
528     return 1;
529 }
530
531 #ifndef OPENSSL_NO_TLS1_3
532 static int add_key_share(SSL *s, WPACKET *pkt, unsigned int curve_id)
533 {
534     unsigned char *encoded_point;
535     EVP_PKEY *key_share_key;
536     size_t encodedlen;
537
538     key_share_key = ssl_generate_pkey_curve(curve_id);
539     if (key_share_key == NULL) {
540         SSLerr(SSL_F_ADD_KEY_SHARE, ERR_R_EVP_LIB);
541         return 0;
542     }
543
544     /* Encode the public key. */
545     encodedlen = EVP_PKEY_get1_tls_encodedpoint(key_share_key,
546                                                 &encoded_point);
547     if (encodedlen == 0) {
548         SSLerr(SSL_F_ADD_KEY_SHARE, ERR_R_EC_LIB);
549         EVP_PKEY_free(key_share_key);
550         return 0;
551     }
552
553     /* Create KeyShareEntry */
554     if (!WPACKET_put_bytes_u16(pkt, curve_id)
555             || !WPACKET_sub_memcpy_u16(pkt, encoded_point, encodedlen)) {
556         SSLerr(SSL_F_ADD_KEY_SHARE, ERR_R_INTERNAL_ERROR);
557         EVP_PKEY_free(key_share_key);
558         OPENSSL_free(encoded_point);
559         return 0;
560     }
561
562     /*
563      * TODO(TLS1.3): When changing to send more than one key_share we're
564      * going to need to be able to save more than one EVP_PKEY. For now
565      * we reuse the existing tmp.pkey
566      */
567     s->s3->tmp.pkey = key_share_key;
568     s->s3->group_id = curve_id;
569     OPENSSL_free(encoded_point);
570
571     return 1;
572 }
573 #endif
574
575 int tls_construct_ctos_key_share(SSL *s, WPACKET *pkt, unsigned int context,
576                                  X509 *x, size_t chainidx, int *al)
577 {
578 #ifndef OPENSSL_NO_TLS1_3
579     size_t i, num_curves = 0;
580     const unsigned char *pcurves = NULL;
581     unsigned int curve_id = 0;
582
583     /* key_share extension */
584     if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_key_share)
585                /* Extension data sub-packet */
586             || !WPACKET_start_sub_packet_u16(pkt)
587                /* KeyShare list sub-packet */
588             || !WPACKET_start_sub_packet_u16(pkt)) {
589         SSLerr(SSL_F_TLS_CONSTRUCT_CTOS_KEY_SHARE, ERR_R_INTERNAL_ERROR);
590         return 0;
591     }
592
593     pcurves = s->ext.supportedgroups;
594     if (!tls1_get_curvelist(s, 0, &pcurves, &num_curves)) {
595         SSLerr(SSL_F_TLS_CONSTRUCT_CTOS_KEY_SHARE, ERR_R_INTERNAL_ERROR);
596         return 0;
597     }
598
599     if (s->s3->tmp.pkey != NULL) {
600         /* Shouldn't happen! */
601         SSLerr(SSL_F_TLS_CONSTRUCT_CTOS_KEY_SHARE, ERR_R_INTERNAL_ERROR);
602         return 0;
603     }
604
605     /*
606      * TODO(TLS1.3): Make the number of key_shares sent configurable. For
607      * now, just send one
608      */
609     if (s->s3->group_id != 0) {
610         curve_id = s->s3->group_id;
611     } else {
612         for (i = 0; i < num_curves; i++, pcurves += 2) {
613
614             if (!tls_curve_allowed(s, pcurves, SSL_SECOP_CURVE_SUPPORTED))
615                 continue;
616
617             curve_id = bytestogroup(pcurves);
618             break;
619         }
620     }
621
622     if (curve_id == 0) {
623         SSLerr(SSL_F_TLS_CONSTRUCT_CTOS_KEY_SHARE, SSL_R_NO_SUITABLE_KEY_SHARE);
624         return 0;
625     }
626
627     if (!add_key_share(s, pkt, curve_id))
628         return 0;
629
630     if (!WPACKET_close(pkt) || !WPACKET_close(pkt)) {
631         SSLerr(SSL_F_TLS_CONSTRUCT_CTOS_KEY_SHARE, ERR_R_INTERNAL_ERROR);
632         return 0;
633     }
634 #endif
635
636     return 1;
637 }
638
639 int tls_construct_ctos_cookie(SSL *s, WPACKET *pkt, unsigned int context,
640                               X509 *x, size_t chainidx, int *al)
641 {
642     int ret = 0;
643
644     /* Should only be set if we've had an HRR */
645     if (s->ext.tls13_cookie_len == 0)
646         return 1;
647
648     if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_cookie)
649                /* Extension data sub-packet */
650             || !WPACKET_start_sub_packet_u16(pkt)
651             || !WPACKET_sub_memcpy_u16(pkt, s->ext.tls13_cookie,
652                                        s->ext.tls13_cookie_len)
653             || !WPACKET_close(pkt)) {
654         SSLerr(SSL_F_TLS_CONSTRUCT_CTOS_COOKIE, ERR_R_INTERNAL_ERROR);
655         goto end;
656     }
657
658     ret = 1;
659  end:
660     OPENSSL_free(s->ext.tls13_cookie);
661     s->ext.tls13_cookie_len = 0;
662
663     return ret;
664 }
665
666 int tls_construct_ctos_early_data(SSL *s, WPACKET *pkt, unsigned int context,
667                                   X509 *x, size_t chainidx, int *al)
668 {
669     if (s->early_data_state != SSL_EARLY_DATA_CONNECTING
670             || s->session->ext.max_early_data == 0) {
671         s->max_early_data = 0;
672         return 1;
673     }
674     s->max_early_data = s->session->ext.max_early_data;
675
676     if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_early_data)
677             || !WPACKET_start_sub_packet_u16(pkt)
678             || !WPACKET_close(pkt)) {
679         SSLerr(SSL_F_TLS_CONSTRUCT_CTOS_EARLY_DATA, ERR_R_INTERNAL_ERROR);
680         return 0;
681     }
682
683     /*
684      * We set this to rejected here. Later, if the server acknowledges the
685      * extension, we set it to accepted.
686      */
687     s->ext.early_data = SSL_EARLY_DATA_REJECTED;
688
689     return 1;
690 }
691
692 #define F5_WORKAROUND_MIN_MSG_LEN   0xff
693 #define F5_WORKAROUND_MAX_MSG_LEN   0x200
694
695 int tls_construct_ctos_padding(SSL *s, WPACKET *pkt, unsigned int context,
696                                X509 *x, size_t chainidx, int *al)
697 {
698     unsigned char *padbytes;
699     size_t hlen;
700
701     if ((s->options & SSL_OP_TLSEXT_PADDING) == 0)
702         return 1;
703
704     /*
705      * Add padding to workaround bugs in F5 terminators. See
706      * https://tools.ietf.org/html/draft-agl-tls-padding-03 NB: because this
707      * code calculates the length of all existing extensions it MUST always
708      * appear last.
709      */
710     if (!WPACKET_get_total_written(pkt, &hlen)) {
711         SSLerr(SSL_F_TLS_CONSTRUCT_CTOS_PADDING, ERR_R_INTERNAL_ERROR);
712         return 0;
713     }
714
715     if (hlen > F5_WORKAROUND_MIN_MSG_LEN && hlen < F5_WORKAROUND_MAX_MSG_LEN) {
716         /* Calculate the amond of padding we need to add */
717         hlen = F5_WORKAROUND_MAX_MSG_LEN - hlen;
718
719         /*
720          * Take off the size of extension header itself (2 bytes for type and
721          * 2 bytes for length bytes)
722          */
723         if (hlen >= 4)
724             hlen -= 4;
725         else
726             hlen = 0;
727
728         if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_padding)
729                 || !WPACKET_sub_allocate_bytes_u16(pkt, hlen, &padbytes)) {
730             SSLerr(SSL_F_TLS_CONSTRUCT_CTOS_PADDING, ERR_R_INTERNAL_ERROR);
731             return 0;
732         }
733         memset(padbytes, 0, hlen);
734     }
735
736     return 1;
737 }
738
739 /*
740  * Construct the pre_shared_key extension
741  */
742 int tls_construct_ctos_psk(SSL *s, WPACKET *pkt, unsigned int context, X509 *x,
743                            size_t chainidx, int *al)
744 {
745 #ifndef OPENSSL_NO_TLS1_3
746     uint32_t now, agesec, agems;
747     size_t hashsize, binderoffset, msglen;
748     unsigned char *binder = NULL, *msgstart = NULL;
749     const EVP_MD *md;
750     int ret = 0;
751
752     s->session->ext.tick_identity = TLSEXT_PSK_BAD_IDENTITY;
753
754     /*
755      * If this is an incompatible or new session then we have nothing to resume
756      * so don't add this extension.
757      */
758     if (s->session->ssl_version != TLS1_3_VERSION
759             || s->session->ext.ticklen == 0)
760         return 1;
761
762     if (s->session->cipher == NULL) {
763         SSLerr(SSL_F_TLS_CONSTRUCT_CTOS_PSK, ERR_R_INTERNAL_ERROR);
764         goto err;
765     }
766
767     md = ssl_md(s->session->cipher->algorithm2);
768     if (md == NULL) {
769         /* Don't recognise this cipher so we can't use the session. Ignore it */
770         return 1;
771     }
772
773     /*
774      * Technically the C standard just says time() returns a time_t and says
775      * nothing about the encoding of that type. In practice most implementations
776      * follow POSIX which holds it as an integral type in seconds since epoch.
777      * We've already made the assumption that we can do this in multiple places
778      * in the code, so portability shouldn't be an issue.
779      */
780     now = (uint32_t)time(NULL);
781     agesec = now - (uint32_t)s->session->time;
782
783     if (s->session->ext.tick_lifetime_hint < agesec) {
784         /* Ticket is too old. Ignore it. */
785         return 1;
786     }
787
788     /*
789      * Calculate age in ms. We're just doing it to nearest second. Should be
790      * good enough.
791      */
792     agems = agesec * (uint32_t)1000;
793
794     if (agesec != 0 && agems / (uint32_t)1000 != agesec) {
795         /*
796          * Overflow. Shouldn't happen unless this is a *really* old session. If
797          * so we just ignore it.
798          */
799         return 1;
800     }
801
802     /*
803      * Obfuscate the age. Overflow here is fine, this addition is supposed to
804      * be mod 2^32.
805      */
806     agems += s->session->ext.tick_age_add;
807
808     hashsize = EVP_MD_size(md);
809
810     /* Create the extension, but skip over the binder for now */
811     if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_psk)
812             || !WPACKET_start_sub_packet_u16(pkt)
813             || !WPACKET_start_sub_packet_u16(pkt)
814             || !WPACKET_sub_memcpy_u16(pkt, s->session->ext.tick,
815                                        s->session->ext.ticklen)
816             || !WPACKET_put_bytes_u32(pkt, agems)
817             || !WPACKET_close(pkt)
818             || !WPACKET_get_total_written(pkt, &binderoffset)
819             || !WPACKET_start_sub_packet_u16(pkt)
820             || !WPACKET_sub_allocate_bytes_u8(pkt, hashsize, &binder)
821             || !WPACKET_close(pkt)
822             || !WPACKET_close(pkt)
823             || !WPACKET_get_total_written(pkt, &msglen)
824                /*
825                 * We need to fill in all the sub-packet lengths now so we can
826                 * calculate the HMAC of the message up to the binders
827                 */
828             || !WPACKET_fill_lengths(pkt)) {
829         SSLerr(SSL_F_TLS_CONSTRUCT_CTOS_PSK, ERR_R_INTERNAL_ERROR);
830         goto err;
831     }
832
833     msgstart = WPACKET_get_curr(pkt) - msglen;
834
835     if (tls_psk_do_binder(s, md, msgstart, binderoffset, NULL, binder,
836                           s->session, 1) != 1) {
837         SSLerr(SSL_F_TLS_CONSTRUCT_CTOS_PSK, ERR_R_INTERNAL_ERROR);
838         goto err;
839     }
840
841     s->session->ext.tick_identity = 0;
842
843     ret = 1;
844  err:
845     return ret;
846 #else
847     return 1;
848 #endif
849 }
850
851 /*
852  * Parse the server's renegotiation binding and abort if it's not right
853  */
854 int tls_parse_stoc_renegotiate(SSL *s, PACKET *pkt, unsigned int context,
855                                X509 *x, size_t chainidx, int *al)
856 {
857     size_t expected_len = s->s3->previous_client_finished_len
858         + s->s3->previous_server_finished_len;
859     size_t ilen;
860     const unsigned char *data;
861
862     /* Check for logic errors */
863     assert(expected_len == 0 || s->s3->previous_client_finished_len != 0);
864     assert(expected_len == 0 || s->s3->previous_server_finished_len != 0);
865
866     /* Parse the length byte */
867     if (!PACKET_get_1_len(pkt, &ilen)) {
868         SSLerr(SSL_F_TLS_PARSE_STOC_RENEGOTIATE,
869                SSL_R_RENEGOTIATION_ENCODING_ERR);
870         *al = SSL_AD_ILLEGAL_PARAMETER;
871         return 0;
872     }
873
874     /* Consistency check */
875     if (PACKET_remaining(pkt) != ilen) {
876         SSLerr(SSL_F_TLS_PARSE_STOC_RENEGOTIATE,
877                SSL_R_RENEGOTIATION_ENCODING_ERR);
878         *al = SSL_AD_ILLEGAL_PARAMETER;
879         return 0;
880     }
881
882     /* Check that the extension matches */
883     if (ilen != expected_len) {
884         SSLerr(SSL_F_TLS_PARSE_STOC_RENEGOTIATE,
885                SSL_R_RENEGOTIATION_MISMATCH);
886         *al = SSL_AD_HANDSHAKE_FAILURE;
887         return 0;
888     }
889
890     if (!PACKET_get_bytes(pkt, &data, s->s3->previous_client_finished_len)
891         || memcmp(data, s->s3->previous_client_finished,
892                   s->s3->previous_client_finished_len) != 0) {
893         SSLerr(SSL_F_TLS_PARSE_STOC_RENEGOTIATE,
894                SSL_R_RENEGOTIATION_MISMATCH);
895         *al = SSL_AD_HANDSHAKE_FAILURE;
896         return 0;
897     }
898
899     if (!PACKET_get_bytes(pkt, &data, s->s3->previous_server_finished_len)
900         || memcmp(data, s->s3->previous_server_finished,
901                   s->s3->previous_server_finished_len) != 0) {
902         SSLerr(SSL_F_TLS_PARSE_STOC_RENEGOTIATE,
903                SSL_R_RENEGOTIATION_MISMATCH);
904         *al = SSL_AD_ILLEGAL_PARAMETER;
905         return 0;
906     }
907     s->s3->send_connection_binding = 1;
908
909     return 1;
910 }
911
912 int tls_parse_stoc_server_name(SSL *s, PACKET *pkt, unsigned int context,
913                                X509 *x, size_t chainidx, int *al)
914 {
915     if (s->ext.hostname == NULL || PACKET_remaining(pkt) > 0) {
916         *al = SSL_AD_UNRECOGNIZED_NAME;
917         return 0;
918     }
919
920     if (!s->hit) {
921         if (s->session->ext.hostname != NULL) {
922             *al = SSL_AD_INTERNAL_ERROR;
923             return 0;
924         }
925         s->session->ext.hostname = OPENSSL_strdup(s->ext.hostname);
926         if (s->session->ext.hostname == NULL) {
927             *al = SSL_AD_INTERNAL_ERROR;
928             return 0;
929         }
930     }
931
932     return 1;
933 }
934
935 int tls_parse_stoc_early_data_info(SSL *s, PACKET *pkt, unsigned int context,
936                                    X509 *x, size_t chainidx, int *al)
937 {
938     unsigned long max_early_data;
939
940     if (!PACKET_get_net_4(pkt, &max_early_data)
941             || PACKET_remaining(pkt) != 0) {
942         SSLerr(SSL_F_TLS_PARSE_STOC_EARLY_DATA_INFO,
943                SSL_R_INVALID_MAX_EARLY_DATA);
944         *al = SSL_AD_DECODE_ERROR;
945         return 0;
946     }
947
948     s->session->ext.max_early_data = max_early_data;
949
950     return 1;
951 }
952
953 #ifndef OPENSSL_NO_EC
954 int tls_parse_stoc_ec_pt_formats(SSL *s, PACKET *pkt, unsigned int context,
955                                  X509 *x, size_t chainidx, int *al)
956 {
957     unsigned int ecpointformats_len;
958     PACKET ecptformatlist;
959
960     if (!PACKET_as_length_prefixed_1(pkt, &ecptformatlist)) {
961         *al = SSL_AD_DECODE_ERROR;
962         return 0;
963     }
964     if (!s->hit) {
965         ecpointformats_len = PACKET_remaining(&ecptformatlist);
966         s->session->ext.ecpointformats_len = 0;
967
968         OPENSSL_free(s->session->ext.ecpointformats);
969         s->session->ext.ecpointformats = OPENSSL_malloc(ecpointformats_len);
970         if (s->session->ext.ecpointformats == NULL) {
971             *al = SSL_AD_INTERNAL_ERROR;
972             return 0;
973         }
974
975         s->session->ext.ecpointformats_len = ecpointformats_len;
976
977         if (!PACKET_copy_bytes(&ecptformatlist,
978                                s->session->ext.ecpointformats,
979                                ecpointformats_len)) {
980             *al = SSL_AD_INTERNAL_ERROR;
981             return 0;
982         }
983     }
984
985     return 1;
986 }
987 #endif
988
989 int tls_parse_stoc_session_ticket(SSL *s, PACKET *pkt, unsigned int context,
990                                   X509 *x, size_t chainidx, int *al)
991 {
992     if (s->ext.session_ticket_cb != NULL &&
993         !s->ext.session_ticket_cb(s, PACKET_data(pkt),
994                               PACKET_remaining(pkt),
995                               s->ext.session_ticket_cb_arg)) {
996         *al = SSL_AD_INTERNAL_ERROR;
997         return 0;
998     }
999
1000     if (!tls_use_ticket(s) || PACKET_remaining(pkt) > 0) {
1001         *al = SSL_AD_UNSUPPORTED_EXTENSION;
1002         return 0;
1003     }
1004
1005     s->ext.ticket_expected = 1;
1006
1007     return 1;
1008 }
1009
1010 #ifndef OPENSSL_NO_OCSP
1011 int tls_parse_stoc_status_request(SSL *s, PACKET *pkt, unsigned int context,
1012                                   X509 *x, size_t chainidx, int *al)
1013 {
1014     /*
1015      * MUST only be sent if we've requested a status
1016      * request message. In TLS <= 1.2 it must also be empty.
1017      */
1018     if (s->ext.status_type == TLSEXT_STATUSTYPE_nothing
1019             || (!SSL_IS_TLS13(s) && PACKET_remaining(pkt) > 0)) {
1020         *al = SSL_AD_UNSUPPORTED_EXTENSION;
1021         return 0;
1022     }
1023
1024     if (SSL_IS_TLS13(s)) {
1025         /* We only know how to handle this if it's for the first Certificate in
1026          * the chain. We ignore any other repsonses.
1027          */
1028         if (chainidx != 0)
1029             return 1;
1030         return tls_process_cert_status_body(s, pkt, al);
1031     }
1032
1033     /* Set flag to expect CertificateStatus message */
1034     s->ext.status_expected = 1;
1035
1036     return 1;
1037 }
1038 #endif
1039
1040
1041 #ifndef OPENSSL_NO_CT
1042 int tls_parse_stoc_sct(SSL *s, PACKET *pkt, unsigned int context, X509 *x,
1043                        size_t chainidx, int *al)
1044 {
1045     /*
1046      * Only take it if we asked for it - i.e if there is no CT validation
1047      * callback set, then a custom extension MAY be processing it, so we
1048      * need to let control continue to flow to that.
1049      */
1050     if (s->ct_validation_callback != NULL) {
1051         size_t size = PACKET_remaining(pkt);
1052
1053         /* Simply copy it off for later processing */
1054         OPENSSL_free(s->ext.scts);
1055         s->ext.scts = NULL;
1056
1057         s->ext.scts_len = size;
1058         if (size > 0) {
1059             s->ext.scts = OPENSSL_malloc(size);
1060             if (s->ext.scts == NULL
1061                     || !PACKET_copy_bytes(pkt, s->ext.scts, size)) {
1062                 *al = SSL_AD_INTERNAL_ERROR;
1063                 return 0;
1064             }
1065         }
1066     } else {
1067         if (custom_ext_parse(s, 0, TLSEXT_TYPE_signed_certificate_timestamp,
1068                              PACKET_data(pkt), PACKET_remaining(pkt), al) <= 0)
1069             return 0;
1070     }
1071
1072     return 1;
1073 }
1074 #endif
1075
1076
1077 #ifndef OPENSSL_NO_NEXTPROTONEG
1078 /*
1079  * ssl_next_proto_validate validates a Next Protocol Negotiation block. No
1080  * elements of zero length are allowed and the set of elements must exactly
1081  * fill the length of the block. Returns 1 on success or 0 on failure.
1082  */
1083 static int ssl_next_proto_validate(PACKET *pkt)
1084 {
1085     PACKET tmp_protocol;
1086
1087     while (PACKET_remaining(pkt)) {
1088         if (!PACKET_get_length_prefixed_1(pkt, &tmp_protocol)
1089             || PACKET_remaining(&tmp_protocol) == 0)
1090             return 0;
1091     }
1092
1093     return 1;
1094 }
1095
1096 int tls_parse_stoc_npn(SSL *s, PACKET *pkt, unsigned int context, X509 *x,
1097                        size_t chainidx, int *al)
1098 {
1099     unsigned char *selected;
1100     unsigned char selected_len;
1101     PACKET tmppkt;
1102
1103     /* Check if we are in a renegotiation. If so ignore this extension */
1104     if (!SSL_IS_FIRST_HANDSHAKE(s))
1105         return 1;
1106
1107     /* We must have requested it. */
1108     if (s->ctx->ext.npn_select_cb == NULL) {
1109         *al = SSL_AD_UNSUPPORTED_EXTENSION;
1110         return 0;
1111     }
1112
1113     /* The data must be valid */
1114     tmppkt = *pkt;
1115     if (!ssl_next_proto_validate(&tmppkt)) {
1116         *al = SSL_AD_DECODE_ERROR;
1117         return 0;
1118     }
1119     if (s->ctx->ext.npn_select_cb(s, &selected, &selected_len,
1120                                   PACKET_data(pkt),
1121                                   PACKET_remaining(pkt),
1122                                   s->ctx->ext.npn_select_cb_arg) !=
1123              SSL_TLSEXT_ERR_OK) {
1124         *al = SSL_AD_INTERNAL_ERROR;
1125         return 0;
1126     }
1127
1128     /*
1129      * Could be non-NULL if server has sent multiple NPN extensions in
1130      * a single Serverhello
1131      */
1132     OPENSSL_free(s->ext.npn);
1133     s->ext.npn = OPENSSL_malloc(selected_len);
1134     if (s->ext.npn == NULL) {
1135         *al = SSL_AD_INTERNAL_ERROR;
1136         return 0;
1137     }
1138
1139     memcpy(s->ext.npn, selected, selected_len);
1140     s->ext.npn_len = selected_len;
1141     s->s3->npn_seen = 1;
1142
1143     return 1;
1144 }
1145 #endif
1146
1147 int tls_parse_stoc_alpn(SSL *s, PACKET *pkt, unsigned int context, X509 *x,
1148                         size_t chainidx, int *al)
1149 {
1150     size_t len;
1151
1152     /* We must have requested it. */
1153     if (!s->s3->alpn_sent) {
1154         *al = SSL_AD_UNSUPPORTED_EXTENSION;
1155         return 0;
1156     }
1157     /*-
1158      * The extension data consists of:
1159      *   uint16 list_length
1160      *   uint8 proto_length;
1161      *   uint8 proto[proto_length];
1162      */
1163     if (!PACKET_get_net_2_len(pkt, &len)
1164         || PACKET_remaining(pkt) != len || !PACKET_get_1_len(pkt, &len)
1165         || PACKET_remaining(pkt) != len) {
1166         *al = SSL_AD_DECODE_ERROR;
1167         return 0;
1168     }
1169     OPENSSL_free(s->s3->alpn_selected);
1170     s->s3->alpn_selected = OPENSSL_malloc(len);
1171     if (s->s3->alpn_selected == NULL) {
1172         *al = SSL_AD_INTERNAL_ERROR;
1173         return 0;
1174     }
1175     if (!PACKET_copy_bytes(pkt, s->s3->alpn_selected, len)) {
1176         *al = SSL_AD_DECODE_ERROR;
1177         return 0;
1178     }
1179     s->s3->alpn_selected_len = len;
1180
1181     return 1;
1182 }
1183
1184 #ifndef OPENSSL_NO_SRTP
1185 int tls_parse_stoc_use_srtp(SSL *s, PACKET *pkt, unsigned int context, X509 *x,
1186                             size_t chainidx, int *al)
1187 {
1188     unsigned int id, ct, mki;
1189     int i;
1190     STACK_OF(SRTP_PROTECTION_PROFILE) *clnt;
1191     SRTP_PROTECTION_PROFILE *prof;
1192
1193     if (!PACKET_get_net_2(pkt, &ct) || ct != 2
1194             || !PACKET_get_net_2(pkt, &id)
1195             || !PACKET_get_1(pkt, &mki)
1196             || PACKET_remaining(pkt) != 0) {
1197         SSLerr(SSL_F_TLS_PARSE_STOC_USE_SRTP,
1198                SSL_R_BAD_SRTP_PROTECTION_PROFILE_LIST);
1199         *al = SSL_AD_DECODE_ERROR;
1200         return 0;
1201     }
1202
1203     if (mki != 0) {
1204         /* Must be no MKI, since we never offer one */
1205         SSLerr(SSL_F_TLS_PARSE_STOC_USE_SRTP, SSL_R_BAD_SRTP_MKI_VALUE);
1206         *al = SSL_AD_ILLEGAL_PARAMETER;
1207         return 0;
1208     }
1209
1210     /* Throw an error if the server gave us an unsolicited extension */
1211     clnt = SSL_get_srtp_profiles(s);
1212     if (clnt == NULL) {
1213         SSLerr(SSL_F_TLS_PARSE_STOC_USE_SRTP, SSL_R_NO_SRTP_PROFILES);
1214         *al = SSL_AD_DECODE_ERROR;
1215         return 0;
1216     }
1217
1218     /*
1219      * Check to see if the server gave us something we support (and
1220      * presumably offered)
1221      */
1222     for (i = 0; i < sk_SRTP_PROTECTION_PROFILE_num(clnt); i++) {
1223         prof = sk_SRTP_PROTECTION_PROFILE_value(clnt, i);
1224
1225         if (prof->id == id) {
1226             s->srtp_profile = prof;
1227             *al = 0;
1228             return 1;
1229         }
1230     }
1231
1232     SSLerr(SSL_F_TLS_PARSE_STOC_USE_SRTP,
1233            SSL_R_BAD_SRTP_PROTECTION_PROFILE_LIST);
1234     *al = SSL_AD_DECODE_ERROR;
1235     return 0;
1236 }
1237 #endif
1238
1239 int tls_parse_stoc_etm(SSL *s, PACKET *pkt, unsigned int context, X509 *x,
1240                        size_t chainidx, int *al)
1241 {
1242     /* Ignore if inappropriate ciphersuite */
1243     if (!(s->options & SSL_OP_NO_ENCRYPT_THEN_MAC)
1244             && s->s3->tmp.new_cipher->algorithm_mac != SSL_AEAD
1245             && s->s3->tmp.new_cipher->algorithm_enc != SSL_RC4)
1246         s->ext.use_etm = 1;
1247
1248     return 1;
1249 }
1250
1251 int tls_parse_stoc_ems(SSL *s, PACKET *pkt, unsigned int context, X509 *x,
1252                        size_t chainidx, int *al)
1253 {
1254     s->s3->flags |= TLS1_FLAGS_RECEIVED_EXTMS;
1255     if (!s->hit)
1256         s->session->flags |= SSL_SESS_FLAG_EXTMS;
1257
1258     return 1;
1259 }
1260
1261 int tls_parse_stoc_key_share(SSL *s, PACKET *pkt, unsigned int context, X509 *x,
1262                              size_t chainidx, int *al)
1263 {
1264 #ifndef OPENSSL_NO_TLS1_3
1265     unsigned int group_id;
1266     PACKET encoded_pt;
1267     EVP_PKEY *ckey = s->s3->tmp.pkey, *skey = NULL;
1268
1269     /* Sanity check */
1270     if (ckey == NULL) {
1271         *al = SSL_AD_INTERNAL_ERROR;
1272         SSLerr(SSL_F_TLS_PARSE_STOC_KEY_SHARE, ERR_R_INTERNAL_ERROR);
1273         return 0;
1274     }
1275
1276     if (!PACKET_get_net_2(pkt, &group_id)) {
1277         *al = SSL_AD_HANDSHAKE_FAILURE;
1278         SSLerr(SSL_F_TLS_PARSE_STOC_KEY_SHARE, SSL_R_LENGTH_MISMATCH);
1279         return 0;
1280     }
1281
1282     if ((context & EXT_TLS1_3_HELLO_RETRY_REQUEST) != 0) {
1283         unsigned const char *pcurves = NULL;
1284         size_t i, num_curves;
1285
1286         if (PACKET_remaining(pkt) != 0) {
1287             *al = SSL_AD_HANDSHAKE_FAILURE;
1288             SSLerr(SSL_F_TLS_PARSE_STOC_KEY_SHARE, SSL_R_LENGTH_MISMATCH);
1289             return 0;
1290         }
1291
1292         /*
1293          * It is an error if the HelloRetryRequest wants a key_share that we
1294          * already sent in the first ClientHello
1295          */
1296         if (group_id == s->s3->group_id) {
1297             *al = SSL_AD_ILLEGAL_PARAMETER;
1298             SSLerr(SSL_F_TLS_PARSE_STOC_KEY_SHARE, SSL_R_BAD_KEY_SHARE);
1299             return 0;
1300         }
1301
1302         /* Validate the selected group is one we support */
1303         pcurves = s->ext.supportedgroups;
1304         if (!tls1_get_curvelist(s, 0, &pcurves, &num_curves)) {
1305             SSLerr(SSL_F_TLS_PARSE_STOC_KEY_SHARE, ERR_R_INTERNAL_ERROR);
1306             return 0;
1307         }
1308         for (i = 0; i < num_curves; i++, pcurves += 2) {
1309             if (group_id == bytestogroup(pcurves))
1310                 break;
1311         }
1312         if (i >= num_curves
1313                 || !tls_curve_allowed(s, pcurves, SSL_SECOP_CURVE_SUPPORTED)) {
1314             *al = SSL_AD_ILLEGAL_PARAMETER;
1315             SSLerr(SSL_F_TLS_PARSE_STOC_KEY_SHARE, SSL_R_BAD_KEY_SHARE);
1316             return 0;
1317         }
1318
1319         s->s3->group_id = group_id;
1320         EVP_PKEY_free(s->s3->tmp.pkey);
1321         s->s3->tmp.pkey = NULL;
1322         return 1;
1323     }
1324
1325     if (group_id != s->s3->group_id) {
1326         /*
1327          * This isn't for the group that we sent in the original
1328          * key_share!
1329          */
1330         *al = SSL_AD_HANDSHAKE_FAILURE;
1331         SSLerr(SSL_F_TLS_PARSE_STOC_KEY_SHARE, SSL_R_BAD_KEY_SHARE);
1332         return 0;
1333     }
1334
1335     if (!PACKET_as_length_prefixed_2(pkt, &encoded_pt)
1336             || PACKET_remaining(&encoded_pt) == 0) {
1337         *al = SSL_AD_DECODE_ERROR;
1338         SSLerr(SSL_F_TLS_PARSE_STOC_KEY_SHARE, SSL_R_LENGTH_MISMATCH);
1339         return 0;
1340     }
1341
1342     skey = ssl_generate_pkey(ckey);
1343     if (skey == NULL) {
1344         *al = SSL_AD_INTERNAL_ERROR;
1345         SSLerr(SSL_F_TLS_PARSE_STOC_KEY_SHARE, ERR_R_MALLOC_FAILURE);
1346         return 0;
1347     }
1348     if (!EVP_PKEY_set1_tls_encodedpoint(skey, PACKET_data(&encoded_pt),
1349                                         PACKET_remaining(&encoded_pt))) {
1350         *al = SSL_AD_DECODE_ERROR;
1351         SSLerr(SSL_F_TLS_PARSE_STOC_KEY_SHARE, SSL_R_BAD_ECPOINT);
1352         EVP_PKEY_free(skey);
1353         return 0;
1354     }
1355
1356     if (ssl_derive(s, ckey, skey, 1) == 0) {
1357         *al = SSL_AD_INTERNAL_ERROR;
1358         SSLerr(SSL_F_TLS_PARSE_STOC_KEY_SHARE, ERR_R_INTERNAL_ERROR);
1359         EVP_PKEY_free(skey);
1360         return 0;
1361     }
1362     EVP_PKEY_free(skey);
1363 #endif
1364
1365     return 1;
1366 }
1367
1368 int tls_parse_stoc_cookie(SSL *s, PACKET *pkt, unsigned int context, X509 *x,
1369                        size_t chainidx, int *al)
1370 {
1371     PACKET cookie;
1372
1373     if (!PACKET_as_length_prefixed_2(pkt, &cookie)
1374             || !PACKET_memdup(&cookie, &s->ext.tls13_cookie,
1375                               &s->ext.tls13_cookie_len)) {
1376         *al = SSL_AD_DECODE_ERROR;
1377         SSLerr(SSL_F_TLS_PARSE_STOC_COOKIE, SSL_R_LENGTH_MISMATCH);
1378         return 0;
1379     }
1380
1381     return 1;
1382 }
1383
1384 int tls_parse_stoc_early_data(SSL *s, PACKET *pkt, unsigned int context,
1385                               X509 *x, size_t chainidx, int *al)
1386 {
1387     if (PACKET_remaining(pkt) != 0) {
1388         *al = SSL_AD_DECODE_ERROR;
1389         return 0;
1390     }
1391
1392     if (s->ext.early_data != SSL_EARLY_DATA_REJECTED
1393             || !s->hit
1394             || s->session->ext.tick_identity != 0) {
1395         /*
1396          * If we get here then we didn't send early data, or we didn't resume
1397          * using the first identity so the server should not be accepting it.
1398          */
1399         *al = SSL_AD_ILLEGAL_PARAMETER;
1400         return 0;
1401     }
1402
1403     s->ext.early_data = SSL_EARLY_DATA_ACCEPTED;
1404
1405     return 1;
1406 }
1407
1408 int tls_parse_stoc_psk(SSL *s, PACKET *pkt, unsigned int context, X509 *x,
1409                        size_t chainidx, int *al)
1410 {
1411 #ifndef OPENSSL_NO_TLS1_3
1412     unsigned int identity;
1413
1414     if (!PACKET_get_net_2(pkt, &identity) || PACKET_remaining(pkt) != 0) {
1415         *al = SSL_AD_HANDSHAKE_FAILURE;
1416         SSLerr(SSL_F_TLS_PARSE_STOC_PSK, SSL_R_LENGTH_MISMATCH);
1417         return 0;
1418     }
1419
1420     if (s->session->ext.tick_identity != (int)identity) {
1421         *al = SSL_AD_HANDSHAKE_FAILURE;
1422         SSLerr(SSL_F_TLS_PARSE_STOC_PSK, SSL_R_BAD_PSK_IDENTITY);
1423         return 0;
1424     }
1425
1426     s->hit = 1;
1427 #endif
1428
1429     return 1;
1430 }