277e0624a4a698737eb07c6ecaa1970e2e4d5569
[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, X509 *x,
16                                    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, X509 *x,
35                                    size_t chainidx, int *al)
36 {
37     if (s->tlsext_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->tlsext_hostname,
48                                        strlen(s->tlsext_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, X509 *x, size_t chainidx,
60                            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, X509 *x,
112                                      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, X509 *x,
136                                         size_t chainidx, int *al)
137 {
138     const unsigned char *pcurves = NULL, *pcurvestmp;
139     size_t num_curves = 0, i;
140
141     if (!use_ecc(s))
142         return 1;
143
144     /*
145      * Add TLS extension supported_groups to the ClientHello message
146      */
147     /* TODO(TLS1.3): Add support for DHE groups */
148     pcurves = s->tlsext_supportedgroupslist;
149     if (!tls1_get_curvelist(s, 0, &pcurves, &num_curves)) {
150         SSLerr(SSL_F_TLS_CONSTRUCT_CTOS_SUPPORTED_GROUPS,
151                ERR_R_INTERNAL_ERROR);
152         return 0;
153     }
154     pcurvestmp = pcurves;
155
156     if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_supported_groups)
157                /* Sub-packet for supported_groups extension */
158             || !WPACKET_start_sub_packet_u16(pkt)
159             || !WPACKET_start_sub_packet_u16(pkt)) {
160         SSLerr(SSL_F_TLS_CONSTRUCT_CTOS_SUPPORTED_GROUPS,
161                ERR_R_INTERNAL_ERROR);
162         return 0;
163     }
164     /* Copy curve ID if supported */
165     for (i = 0; i < num_curves; i++, pcurvestmp += 2) {
166         if (tls_curve_allowed(s, pcurves, SSL_SECOP_CURVE_SUPPORTED)) {
167             if (!WPACKET_put_bytes_u8(pkt, pcurvestmp[0])
168                 || !WPACKET_put_bytes_u8(pkt, pcurvestmp[1])) {
169                     SSLerr(SSL_F_TLS_CONSTRUCT_CTOS_SUPPORTED_GROUPS,
170                            ERR_R_INTERNAL_ERROR);
171                     return 0;
172                 }
173         }
174     }
175     if (!WPACKET_close(pkt) || !WPACKET_close(pkt)) {
176         SSLerr(SSL_F_TLS_CONSTRUCT_CTOS_SUPPORTED_GROUPS,
177                ERR_R_INTERNAL_ERROR);
178         return 0;
179     }
180
181     return 1;
182 }
183 #endif
184
185 int tls_construct_ctos_session_ticket(SSL *s, WPACKET *pkt, X509 *x,
186                                       size_t chainidx, int *al)
187 {
188     size_t ticklen;
189
190     if (!tls_use_ticket(s))
191         return 1;
192
193     if (!s->new_session && s->session != NULL
194             && s->session->tlsext_tick != NULL) {
195         ticklen = s->session->tlsext_ticklen;
196     } else if (s->session && s->tlsext_session_ticket != NULL
197                && s->tlsext_session_ticket->data != NULL) {
198         ticklen = s->tlsext_session_ticket->length;
199         s->session->tlsext_tick = OPENSSL_malloc(ticklen);
200         if (s->session->tlsext_tick == NULL) {
201             SSLerr(SSL_F_TLS_CONSTRUCT_CTOS_SESSION_TICKET,
202                    ERR_R_INTERNAL_ERROR);
203             return 0;
204         }
205         memcpy(s->session->tlsext_tick,
206                s->tlsext_session_ticket->data, ticklen);
207         s->session->tlsext_ticklen = ticklen;
208     } else {
209         ticklen = 0;
210     }
211
212     if (ticklen == 0 && s->tlsext_session_ticket != NULL &&
213             s->tlsext_session_ticket->data == NULL)
214         return 1;
215
216     if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_session_ticket)
217             || !WPACKET_sub_memcpy_u16(pkt, s->session->tlsext_tick, ticklen)) {
218         SSLerr(SSL_F_TLS_CONSTRUCT_CTOS_SESSION_TICKET, ERR_R_INTERNAL_ERROR);
219         return 0;
220     }
221
222     return 1;
223 }
224
225 int tls_construct_ctos_sig_algs(SSL *s, WPACKET *pkt, X509 *x, size_t chainidx,
226                                 int *al)
227 {
228     size_t salglen;
229     const unsigned char *salg;
230
231     if (!SSL_CLIENT_USE_SIGALGS(s))
232         return 1;
233
234     salglen = tls12_get_psigalgs(s, &salg);
235     if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_signature_algorithms)
236                /* Sub-packet for sig-algs extension */
237             || !WPACKET_start_sub_packet_u16(pkt)
238                /* Sub-packet for the actual list */
239             || !WPACKET_start_sub_packet_u16(pkt)
240             || !tls12_copy_sigalgs(s, pkt, salg, salglen)
241             || !WPACKET_close(pkt)
242             || !WPACKET_close(pkt)) {
243         SSLerr(SSL_F_TLS_CONSTRUCT_CTOS_SIG_ALGS, ERR_R_INTERNAL_ERROR);
244         return 0;
245     }
246
247     return 1;
248 }
249
250 #ifndef OPENSSL_NO_OCSP
251 int tls_construct_ctos_status_request(SSL *s, WPACKET *pkt, X509 *x,
252                                       size_t chainidx, int *al)
253 {
254     int i;
255
256     /* This extension isn't defined for client Certificates */
257     if (x != NULL)
258         return 1;
259
260     if (s->tlsext_status_type != TLSEXT_STATUSTYPE_ocsp)
261         return 1;
262
263     if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_status_request)
264                /* Sub-packet for status request extension */
265             || !WPACKET_start_sub_packet_u16(pkt)
266             || !WPACKET_put_bytes_u8(pkt, TLSEXT_STATUSTYPE_ocsp)
267                /* Sub-packet for the ids */
268             || !WPACKET_start_sub_packet_u16(pkt)) {
269         SSLerr(SSL_F_TLS_CONSTRUCT_CTOS_STATUS_REQUEST, ERR_R_INTERNAL_ERROR);
270         return 0;
271     }
272     for (i = 0; i < sk_OCSP_RESPID_num(s->tlsext_ocsp_ids); i++) {
273         unsigned char *idbytes;
274         OCSP_RESPID *id = sk_OCSP_RESPID_value(s->tlsext_ocsp_ids, i);
275         int idlen = i2d_OCSP_RESPID(id, NULL);
276
277         if (idlen <= 0
278                    /* Sub-packet for an individual id */
279                 || !WPACKET_sub_allocate_bytes_u16(pkt, idlen, &idbytes)
280                 || i2d_OCSP_RESPID(id, &idbytes) != idlen) {
281             SSLerr(SSL_F_TLS_CONSTRUCT_CTOS_STATUS_REQUEST,
282                    ERR_R_INTERNAL_ERROR);
283             return 0;
284         }
285     }
286     if (!WPACKET_close(pkt)
287             || !WPACKET_start_sub_packet_u16(pkt)) {
288         SSLerr(SSL_F_TLS_CONSTRUCT_CTOS_STATUS_REQUEST, ERR_R_INTERNAL_ERROR);
289         return 0;
290     }
291     if (s->tlsext_ocsp_exts) {
292         unsigned char *extbytes;
293         int extlen = i2d_X509_EXTENSIONS(s->tlsext_ocsp_exts, NULL);
294
295         if (extlen < 0) {
296             SSLerr(SSL_F_TLS_CONSTRUCT_CTOS_STATUS_REQUEST,
297                    ERR_R_INTERNAL_ERROR);
298             return 0;
299         }
300         if (!WPACKET_allocate_bytes(pkt, extlen, &extbytes)
301                 || i2d_X509_EXTENSIONS(s->tlsext_ocsp_exts, &extbytes)
302                    != extlen) {
303             SSLerr(SSL_F_TLS_CONSTRUCT_CTOS_STATUS_REQUEST,
304                    ERR_R_INTERNAL_ERROR);
305             return 0;
306        }
307     }
308     if (!WPACKET_close(pkt) || !WPACKET_close(pkt)) {
309         SSLerr(SSL_F_TLS_CONSTRUCT_CTOS_STATUS_REQUEST, ERR_R_INTERNAL_ERROR);
310         return 0;
311     }
312
313     return 1;
314 }
315 #endif
316
317 #ifndef OPENSSL_NO_NEXTPROTONEG
318 int tls_construct_ctos_npn(SSL *s, WPACKET *pkt, X509 *x, size_t chainidx,
319                            int *al)
320 {
321     if (s->ctx->next_proto_select_cb == NULL || s->s3->tmp.finish_md_len != 0)
322         return 1;
323
324     /*
325      * The client advertises an empty extension to indicate its support
326      * for Next Protocol Negotiation
327      */
328     if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_next_proto_neg)
329             || !WPACKET_put_bytes_u16(pkt, 0)) {
330         SSLerr(SSL_F_TLS_CONSTRUCT_CTOS_NPN, ERR_R_INTERNAL_ERROR);
331         return 0;
332     }
333
334     return 1;
335 }
336 #endif
337
338 int tls_construct_ctos_alpn(SSL *s, WPACKET *pkt, X509 *x, size_t chainidx,
339                             int *al)
340 {
341     s->s3->alpn_sent = 0;
342
343     /*
344      * finish_md_len is non-zero during a renegotiation, so
345      * this avoids sending ALPN during the renegotiation
346      */
347     if (s->alpn_client_proto_list == NULL || s->s3->tmp.finish_md_len != 0)
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->alpn_client_proto_list,
355                                        s->alpn_client_proto_list_len)
356             || !WPACKET_close(pkt)) {
357         SSLerr(SSL_F_TLS_CONSTRUCT_CTOS_ALPN, ERR_R_INTERNAL_ERROR);
358         return 0;
359     }
360     s->s3->alpn_sent = 1;
361
362     return 1;
363 }
364
365
366 #ifndef OPENSSL_NO_SRTP
367 int tls_construct_ctos_use_srtp(SSL *s, WPACKET *pkt, X509 *x, size_t chainidx,
368                                 int *al)
369 {
370     STACK_OF(SRTP_PROTECTION_PROFILE) *clnt = SSL_get_srtp_profiles(s);
371     int i, end;
372
373     if (clnt == NULL)
374         return 1;
375
376     if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_use_srtp)
377                /* Sub-packet for SRTP extension */
378             || !WPACKET_start_sub_packet_u16(pkt)
379                /* Sub-packet for the protection profile list */
380             || !WPACKET_start_sub_packet_u16(pkt)) {
381         SSLerr(SSL_F_TLS_CONSTRUCT_CTOS_USE_SRTP, ERR_R_INTERNAL_ERROR);
382         return 0;
383     }
384
385     end = sk_SRTP_PROTECTION_PROFILE_num(clnt);
386     for (i = 0; i < end; i++) {
387         const SRTP_PROTECTION_PROFILE *prof =
388             sk_SRTP_PROTECTION_PROFILE_value(clnt, i);
389
390         if (prof == NULL || !WPACKET_put_bytes_u16(pkt, prof->id)) {
391             SSLerr(SSL_F_TLS_CONSTRUCT_CTOS_USE_SRTP, ERR_R_INTERNAL_ERROR);
392             return 0;
393         }
394     }
395     if (!WPACKET_close(pkt)
396                /* Add an empty use_mki value */
397             || !WPACKET_put_bytes_u8(pkt, 0)
398             || !WPACKET_close(pkt)) {
399         SSLerr(SSL_F_TLS_CONSTRUCT_CTOS_USE_SRTP, ERR_R_INTERNAL_ERROR);
400         return 0;
401     }
402
403     return 1;
404 }
405 #endif
406
407 int tls_construct_ctos_etm(SSL *s, WPACKET *pkt, X509 *x, size_t chainidx,
408                            int *al)
409 {
410     if (s->options & SSL_OP_NO_ENCRYPT_THEN_MAC)
411         return 1;
412
413     if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_encrypt_then_mac)
414             || !WPACKET_put_bytes_u16(pkt, 0)) {
415         SSLerr(SSL_F_TLS_CONSTRUCT_CTOS_ETM, ERR_R_INTERNAL_ERROR);
416         return 0;
417     }
418
419     return 1;
420 }
421
422 #ifndef OPENSSL_NO_CT
423 int tls_construct_ctos_sct(SSL *s, WPACKET *pkt, X509 *x, size_t chainidx,
424                            int *al)
425 {
426     if (s->ct_validation_callback == NULL)
427         return 1;
428
429     /* Not defined for client Certificates */
430     if (x != NULL)
431         return 1;
432
433     if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_signed_certificate_timestamp)
434             || !WPACKET_put_bytes_u16(pkt, 0)) {
435         SSLerr(SSL_F_TLS_CONSTRUCT_CTOS_SCT, ERR_R_INTERNAL_ERROR);
436         return 0;
437     }
438
439     return 1;
440 }
441 #endif
442
443 int tls_construct_ctos_ems(SSL *s, WPACKET *pkt, X509 *x, size_t chainidx,
444                            int *al)
445 {
446     if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_extended_master_secret)
447             || !WPACKET_put_bytes_u16(pkt, 0)) {
448         SSLerr(SSL_F_TLS_CONSTRUCT_CTOS_EMS, ERR_R_INTERNAL_ERROR);
449         return 0;
450     }
451
452     return 1;
453 }
454
455 int tls_construct_ctos_supported_versions(SSL *s, WPACKET *pkt, 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 int tls_construct_ctos_key_share(SSL *s, WPACKET *pkt, X509 *x, size_t chainidx,
503                                  int *al)
504 {
505 #ifndef OPENSSL_NO_TLS1_3
506     size_t i, sharessent = 0, num_curves = 0;
507     const unsigned char *pcurves = NULL;
508
509     /* key_share extension */
510     if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_key_share)
511                /* Extension data sub-packet */
512             || !WPACKET_start_sub_packet_u16(pkt)
513                /* KeyShare list sub-packet */
514             || !WPACKET_start_sub_packet_u16(pkt)) {
515         SSLerr(SSL_F_TLS_CONSTRUCT_CTOS_KEY_SHARE, ERR_R_INTERNAL_ERROR);
516         return 0;
517     }
518
519     pcurves = s->tlsext_supportedgroupslist;
520     if (!tls1_get_curvelist(s, 0, &pcurves, &num_curves)) {
521         SSLerr(SSL_F_TLS_CONSTRUCT_CTOS_KEY_SHARE, ERR_R_INTERNAL_ERROR);
522         return 0;
523     }
524
525     /*
526      * TODO(TLS1.3): Make the number of key_shares sent configurable. For
527      * now, just send one
528      */
529     for (i = 0; i < num_curves && sharessent < 1; i++, pcurves += 2) {
530         unsigned char *encodedPoint = NULL;
531         unsigned int curve_id = 0;
532         EVP_PKEY *key_share_key = NULL;
533         size_t encodedlen;
534
535         if (!tls_curve_allowed(s, pcurves, SSL_SECOP_CURVE_SUPPORTED))
536             continue;
537
538         if (s->s3->tmp.pkey != NULL) {
539             /* Shouldn't happen! */
540             SSLerr(SSL_F_TLS_CONSTRUCT_CTOS_KEY_SHARE, ERR_R_INTERNAL_ERROR);
541             return 0;
542         }
543
544         /* Generate a key for this key_share */
545         curve_id = (pcurves[0] << 8) | pcurves[1];
546         key_share_key = ssl_generate_pkey_curve(curve_id);
547         if (key_share_key == NULL) {
548             SSLerr(SSL_F_TLS_CONSTRUCT_CTOS_KEY_SHARE, ERR_R_EVP_LIB);
549             return 0;
550         }
551
552         /* Encode the public key. */
553         encodedlen = EVP_PKEY_get1_tls_encodedpoint(key_share_key,
554                                                     &encodedPoint);
555         if (encodedlen == 0) {
556             SSLerr(SSL_F_TLS_CONSTRUCT_CTOS_KEY_SHARE, ERR_R_EC_LIB);
557             EVP_PKEY_free(key_share_key);
558             return 0;
559         }
560
561         /* Create KeyShareEntry */
562         if (!WPACKET_put_bytes_u16(pkt, curve_id)
563                 || !WPACKET_sub_memcpy_u16(pkt, encodedPoint, encodedlen)) {
564             SSLerr(SSL_F_TLS_CONSTRUCT_CTOS_KEY_SHARE, ERR_R_INTERNAL_ERROR);
565             EVP_PKEY_free(key_share_key);
566             OPENSSL_free(encodedPoint);
567             return 0;
568         }
569
570         /*
571          * TODO(TLS1.3): When changing to send more than one key_share we're
572          * going to need to be able to save more than one EVP_PKEY. For now
573          * we reuse the existing tmp.pkey
574          */
575         s->s3->group_id = curve_id;
576         s->s3->tmp.pkey = key_share_key;
577         sharessent++;
578         OPENSSL_free(encodedPoint);
579     }
580
581     if (!WPACKET_close(pkt) || !WPACKET_close(pkt)) {
582         SSLerr(SSL_F_TLS_CONSTRUCT_CTOS_KEY_SHARE, ERR_R_INTERNAL_ERROR);
583         return 0;
584     }
585 #endif
586
587     return 1;
588 }
589
590 #define F5_WORKAROUND_MIN_MSG_LEN   0xff
591 #define F5_WORKAROUND_MAX_MSG_LEN   0x200
592
593 int tls_construct_ctos_padding(SSL *s, WPACKET *pkt, X509 *x, size_t chainidx,
594                                int *al)
595 {
596     unsigned char *padbytes;
597     size_t hlen;
598
599     if ((s->options & SSL_OP_TLSEXT_PADDING) == 0)
600         return 1;
601
602     /*
603      * Add padding to workaround bugs in F5 terminators. See
604      * https://tools.ietf.org/html/draft-agl-tls-padding-03 NB: because this
605      * code calculates the length of all existing extensions it MUST always
606      * appear last.
607      */
608     if (!WPACKET_get_total_written(pkt, &hlen)) {
609         SSLerr(SSL_F_TLS_CONSTRUCT_CTOS_PADDING, ERR_R_INTERNAL_ERROR);
610         return 0;
611     }
612
613     if (hlen > F5_WORKAROUND_MIN_MSG_LEN && hlen < F5_WORKAROUND_MAX_MSG_LEN) {
614         /* Calculate the amond of padding we need to add */
615         hlen = F5_WORKAROUND_MAX_MSG_LEN - hlen;
616
617         /*
618          * Take off the size of extension header itself (2 bytes for type and
619          * 2 bytes for length bytes)
620          */
621         if (hlen >= 4)
622             hlen -= 4;
623         else
624             hlen = 0;
625
626         if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_padding)
627                 || !WPACKET_sub_allocate_bytes_u16(pkt, hlen, &padbytes)) {
628             SSLerr(SSL_F_TLS_CONSTRUCT_CTOS_PADDING, ERR_R_INTERNAL_ERROR);
629             return 0;
630         }
631         memset(padbytes, 0, hlen);
632     }
633
634     return 1;
635 }
636
637 /*
638  * Parse the server's renegotiation binding and abort if it's not right
639  */
640 int tls_parse_stoc_renegotiate(SSL *s, PACKET *pkt, X509 *x, size_t chainidx,
641                                int *al)
642 {
643     size_t expected_len = s->s3->previous_client_finished_len
644         + s->s3->previous_server_finished_len;
645     size_t ilen;
646     const unsigned char *data;
647
648     /* Check for logic errors */
649     assert(expected_len == 0 || s->s3->previous_client_finished_len != 0);
650     assert(expected_len == 0 || s->s3->previous_server_finished_len != 0);
651
652     /* Parse the length byte */
653     if (!PACKET_get_1_len(pkt, &ilen)) {
654         SSLerr(SSL_F_TLS_PARSE_STOC_RENEGOTIATE,
655                SSL_R_RENEGOTIATION_ENCODING_ERR);
656         *al = SSL_AD_ILLEGAL_PARAMETER;
657         return 0;
658     }
659
660     /* Consistency check */
661     if (PACKET_remaining(pkt) != ilen) {
662         SSLerr(SSL_F_TLS_PARSE_STOC_RENEGOTIATE,
663                SSL_R_RENEGOTIATION_ENCODING_ERR);
664         *al = SSL_AD_ILLEGAL_PARAMETER;
665         return 0;
666     }
667
668     /* Check that the extension matches */
669     if (ilen != expected_len) {
670         SSLerr(SSL_F_TLS_PARSE_STOC_RENEGOTIATE,
671                SSL_R_RENEGOTIATION_MISMATCH);
672         *al = SSL_AD_HANDSHAKE_FAILURE;
673         return 0;
674     }
675
676     if (!PACKET_get_bytes(pkt, &data, s->s3->previous_client_finished_len)
677         || memcmp(data, s->s3->previous_client_finished,
678                   s->s3->previous_client_finished_len) != 0) {
679         SSLerr(SSL_F_TLS_PARSE_STOC_RENEGOTIATE,
680                SSL_R_RENEGOTIATION_MISMATCH);
681         *al = SSL_AD_HANDSHAKE_FAILURE;
682         return 0;
683     }
684
685     if (!PACKET_get_bytes(pkt, &data, s->s3->previous_server_finished_len)
686         || memcmp(data, s->s3->previous_server_finished,
687                   s->s3->previous_server_finished_len) != 0) {
688         SSLerr(SSL_F_TLS_PARSE_STOC_RENEGOTIATE,
689                SSL_R_RENEGOTIATION_MISMATCH);
690         *al = SSL_AD_ILLEGAL_PARAMETER;
691         return 0;
692     }
693     s->s3->send_connection_binding = 1;
694
695     return 1;
696 }
697
698 int tls_parse_stoc_server_name(SSL *s, PACKET *pkt, X509 *x, size_t chainidx,
699                                int *al)
700 {
701     if (s->tlsext_hostname == NULL || PACKET_remaining(pkt) > 0) {
702         *al = SSL_AD_UNRECOGNIZED_NAME;
703         return 0;
704     }
705
706     if (!s->hit) {
707         if (s->session->tlsext_hostname != NULL) {
708             *al = SSL_AD_INTERNAL_ERROR;
709             return 0;
710         }
711         s->session->tlsext_hostname = OPENSSL_strdup(s->tlsext_hostname);
712         if (s->session->tlsext_hostname == NULL) {
713             *al = SSL_AD_INTERNAL_ERROR;
714             return 0;
715         }
716     }
717
718     return 1;
719 }
720
721 #ifndef OPENSSL_NO_EC
722 int tls_parse_stoc_ec_pt_formats(SSL *s, PACKET *pkt, X509 *x, size_t chainidx,
723                                  int *al)
724 {
725     unsigned int ecpointformatlist_length;
726     PACKET ecptformatlist;
727
728     if (!PACKET_as_length_prefixed_1(pkt, &ecptformatlist)) {
729         *al = SSL_AD_DECODE_ERROR;
730         return 0;
731     }
732     if (!s->hit) {
733         ecpointformatlist_length = PACKET_remaining(&ecptformatlist);
734         s->session->tlsext_ecpointformatlist_length = 0;
735
736         OPENSSL_free(s->session->tlsext_ecpointformatlist);
737         s->session->tlsext_ecpointformatlist =
738              OPENSSL_malloc(ecpointformatlist_length);
739         if (s->session->tlsext_ecpointformatlist == NULL) {
740             *al = SSL_AD_INTERNAL_ERROR;
741             return 0;
742         }
743
744         s->session->tlsext_ecpointformatlist_length = ecpointformatlist_length;
745
746         if (!PACKET_copy_bytes(&ecptformatlist,
747                                s->session->tlsext_ecpointformatlist,
748                                ecpointformatlist_length)) {
749             *al = SSL_AD_INTERNAL_ERROR;
750             return 0;
751         }
752     }
753
754     return 1;
755 }
756 #endif
757
758 int tls_parse_stoc_session_ticket(SSL *s, PACKET *pkt, X509 *x, size_t chainidx,
759                                   int *al)
760 {
761     if (s->tls_session_ticket_ext_cb != NULL &&
762         !s->tls_session_ticket_ext_cb(s, PACKET_data(pkt),
763                                       PACKET_remaining(pkt),
764                                       s->tls_session_ticket_ext_cb_arg)) {
765         *al = SSL_AD_INTERNAL_ERROR;
766         return 0;
767     }
768
769     if (!tls_use_ticket(s) || PACKET_remaining(pkt) > 0) {
770         *al = SSL_AD_UNSUPPORTED_EXTENSION;
771         return 0;
772     }
773
774     s->tlsext_ticket_expected = 1;
775
776     return 1;
777 }
778
779 #ifndef OPENSSL_NO_OCSP
780 int tls_parse_stoc_status_request(SSL *s, PACKET *pkt, X509 *x, size_t chainidx,
781                                   int *al)
782 {
783     /*
784      * MUST only be sent if we've requested a status
785      * request message. In TLS <= 1.2 it must also be empty.
786      */
787     if (s->tlsext_status_type == TLSEXT_STATUSTYPE_nothing
788             || (!SSL_IS_TLS13(s) && PACKET_remaining(pkt) > 0)) {
789         *al = SSL_AD_UNSUPPORTED_EXTENSION;
790         return 0;
791     }
792
793     if (SSL_IS_TLS13(s)) {
794         /* We only know how to handle this if it's for the first Certificate in
795          * the chain. We ignore any other repsonses.
796          */
797         if (chainidx != 0)
798             return 1;
799         return tls_process_cert_status_body(s, pkt, al);
800     }
801
802     /* Set flag to expect CertificateStatus message */
803     s->tlsext_status_expected = 1;
804
805     return 1;
806 }
807 #endif
808
809
810 #ifndef OPENSSL_NO_CT
811 int tls_parse_stoc_sct(SSL *s, PACKET *pkt, X509 *x, size_t chainidx, int *al)
812 {
813     /*
814      * Only take it if we asked for it - i.e if there is no CT validation
815      * callback set, then a custom extension MAY be processing it, so we
816      * need to let control continue to flow to that.
817      */
818     if (s->ct_validation_callback != NULL) {
819         size_t size = PACKET_remaining(pkt);
820
821         /* Simply copy it off for later processing */
822         OPENSSL_free(s->tlsext_scts);
823         s->tlsext_scts = NULL;
824
825         s->tlsext_scts_len = size;
826         if (size > 0) {
827             s->tlsext_scts = OPENSSL_malloc(size);
828             if (s->tlsext_scts == NULL
829                     || !PACKET_copy_bytes(pkt, s->tlsext_scts, size)) {
830                 *al = SSL_AD_INTERNAL_ERROR;
831                 return 0;
832             }
833         }
834     } else {
835         if (custom_ext_parse(s, 0, TLSEXT_TYPE_signed_certificate_timestamp,
836                              PACKET_data(pkt), PACKET_remaining(pkt), al) <= 0)
837             return 0;
838     }
839
840     return 1;
841 }
842 #endif
843
844
845 #ifndef OPENSSL_NO_NEXTPROTONEG
846 /*
847  * ssl_next_proto_validate validates a Next Protocol Negotiation block. No
848  * elements of zero length are allowed and the set of elements must exactly
849  * fill the length of the block. Returns 1 on success or 0 on failure.
850  */
851 static int ssl_next_proto_validate(PACKET *pkt)
852 {
853     PACKET tmp_protocol;
854
855     while (PACKET_remaining(pkt)) {
856         if (!PACKET_get_length_prefixed_1(pkt, &tmp_protocol)
857             || PACKET_remaining(&tmp_protocol) == 0)
858             return 0;
859     }
860
861     return 1;
862 }
863
864 int tls_parse_stoc_npn(SSL *s, PACKET *pkt, X509 *x, size_t chainidx, int *al)
865 {
866     unsigned char *selected;
867     unsigned char selected_len;
868     PACKET tmppkt;
869
870     /* Check if we are in a renegotiation. If so ignore this extension */
871     if (s->s3->tmp.finish_md_len != 0)
872         return 1;
873
874     /* We must have requested it. */
875     if (s->ctx->next_proto_select_cb == NULL) {
876         *al = SSL_AD_UNSUPPORTED_EXTENSION;
877         return 0;
878     }
879
880     /* The data must be valid */
881     tmppkt = *pkt;
882     if (!ssl_next_proto_validate(&tmppkt)) {
883         *al = SSL_AD_DECODE_ERROR;
884         return 0;
885     }
886     if (s->ctx->next_proto_select_cb(s, &selected, &selected_len,
887                                      PACKET_data(pkt),
888                                      PACKET_remaining(pkt),
889                                      s->ctx->next_proto_select_cb_arg) !=
890              SSL_TLSEXT_ERR_OK) {
891         *al = SSL_AD_INTERNAL_ERROR;
892         return 0;
893     }
894
895     /*
896      * Could be non-NULL if server has sent multiple NPN extensions in
897      * a single Serverhello
898      */
899     OPENSSL_free(s->next_proto_negotiated);
900     s->next_proto_negotiated = OPENSSL_malloc(selected_len);
901     if (s->next_proto_negotiated == NULL) {
902         *al = SSL_AD_INTERNAL_ERROR;
903         return 0;
904     }
905
906     memcpy(s->next_proto_negotiated, selected, selected_len);
907     s->next_proto_negotiated_len = selected_len;
908     s->s3->next_proto_neg_seen = 1;
909
910     return 1;
911 }
912 #endif
913
914 int tls_parse_stoc_alpn(SSL *s, PACKET *pkt, X509 *x, size_t chainidx, int *al)
915 {
916     size_t len;
917
918     /* We must have requested it. */
919     if (!s->s3->alpn_sent) {
920         *al = SSL_AD_UNSUPPORTED_EXTENSION;
921         return 0;
922     }
923     /*-
924      * The extension data consists of:
925      *   uint16 list_length
926      *   uint8 proto_length;
927      *   uint8 proto[proto_length];
928      */
929     if (!PACKET_get_net_2_len(pkt, &len)
930         || PACKET_remaining(pkt) != len || !PACKET_get_1_len(pkt, &len)
931         || PACKET_remaining(pkt) != len) {
932         *al = SSL_AD_DECODE_ERROR;
933         return 0;
934     }
935     OPENSSL_free(s->s3->alpn_selected);
936     s->s3->alpn_selected = OPENSSL_malloc(len);
937     if (s->s3->alpn_selected == NULL) {
938         *al = SSL_AD_INTERNAL_ERROR;
939         return 0;
940     }
941     if (!PACKET_copy_bytes(pkt, s->s3->alpn_selected, len)) {
942         *al = SSL_AD_DECODE_ERROR;
943         return 0;
944     }
945     s->s3->alpn_selected_len = len;
946
947     return 1;
948 }
949
950 #ifndef OPENSSL_NO_SRTP
951 int tls_parse_stoc_use_srtp(SSL *s, PACKET *pkt, X509 *x, size_t chainidx,
952                             int *al)
953 {
954     unsigned int id, ct, mki;
955     int i;
956     STACK_OF(SRTP_PROTECTION_PROFILE) *clnt;
957     SRTP_PROTECTION_PROFILE *prof;
958
959     if (!PACKET_get_net_2(pkt, &ct) || ct != 2
960             || !PACKET_get_net_2(pkt, &id)
961             || !PACKET_get_1(pkt, &mki)
962             || PACKET_remaining(pkt) != 0) {
963         SSLerr(SSL_F_TLS_PARSE_STOC_USE_SRTP,
964                SSL_R_BAD_SRTP_PROTECTION_PROFILE_LIST);
965         *al = SSL_AD_DECODE_ERROR;
966         return 0;
967     }
968
969     if (mki != 0) {
970         /* Must be no MKI, since we never offer one */
971         SSLerr(SSL_F_TLS_PARSE_STOC_USE_SRTP, SSL_R_BAD_SRTP_MKI_VALUE);
972         *al = SSL_AD_ILLEGAL_PARAMETER;
973         return 0;
974     }
975
976     /* Throw an error if the server gave us an unsolicited extension */
977     clnt = SSL_get_srtp_profiles(s);
978     if (clnt == NULL) {
979         SSLerr(SSL_F_TLS_PARSE_STOC_USE_SRTP, SSL_R_NO_SRTP_PROFILES);
980         *al = SSL_AD_DECODE_ERROR;
981         return 0;
982     }
983
984     /*
985      * Check to see if the server gave us something we support (and
986      * presumably offered)
987      */
988     for (i = 0; i < sk_SRTP_PROTECTION_PROFILE_num(clnt); i++) {
989         prof = sk_SRTP_PROTECTION_PROFILE_value(clnt, i);
990
991         if (prof->id == id) {
992             s->srtp_profile = prof;
993             *al = 0;
994             return 1;
995         }
996     }
997
998     SSLerr(SSL_F_TLS_PARSE_STOC_USE_SRTP,
999            SSL_R_BAD_SRTP_PROTECTION_PROFILE_LIST);
1000     *al = SSL_AD_DECODE_ERROR;
1001     return 0;
1002 }
1003 #endif
1004
1005 int tls_parse_stoc_etm(SSL *s, PACKET *pkt, X509 *x, size_t chainidx, int *al)
1006 {
1007     /* Ignore if inappropriate ciphersuite */
1008     if (!(s->options & SSL_OP_NO_ENCRYPT_THEN_MAC)
1009             && s->s3->tmp.new_cipher->algorithm_mac != SSL_AEAD
1010             && s->s3->tmp.new_cipher->algorithm_enc != SSL_RC4)
1011         s->s3->flags |= TLS1_FLAGS_ENCRYPT_THEN_MAC;
1012
1013     return 1;
1014 }
1015
1016 int tls_parse_stoc_ems(SSL *s, PACKET *pkt, X509 *x, size_t chainidx, int *al)
1017 {
1018     s->s3->flags |= TLS1_FLAGS_RECEIVED_EXTMS;
1019     if (!s->hit)
1020         s->session->flags |= SSL_SESS_FLAG_EXTMS;
1021
1022     return 1;
1023 }
1024
1025 int tls_parse_stoc_key_share(SSL *s, PACKET *pkt, X509 *x, size_t chainidx,
1026                              int *al)
1027 {
1028 #ifndef OPENSSL_NO_TLS1_3
1029     unsigned int group_id;
1030     PACKET encoded_pt;
1031     EVP_PKEY *ckey = s->s3->tmp.pkey, *skey = NULL;
1032
1033     /* Sanity check */
1034     if (ckey == NULL) {
1035         *al = SSL_AD_INTERNAL_ERROR;
1036         SSLerr(SSL_F_TLS_PARSE_STOC_KEY_SHARE, ERR_R_INTERNAL_ERROR);
1037         return 0;
1038     }
1039
1040     if (!PACKET_get_net_2(pkt, &group_id)) {
1041         *al = SSL_AD_HANDSHAKE_FAILURE;
1042         SSLerr(SSL_F_TLS_PARSE_STOC_KEY_SHARE, SSL_R_LENGTH_MISMATCH);
1043         return 0;
1044     }
1045
1046     if (group_id != s->s3->group_id) {
1047         /*
1048          * This isn't for the group that we sent in the original
1049          * key_share!
1050          */
1051         *al = SSL_AD_HANDSHAKE_FAILURE;
1052         SSLerr(SSL_F_TLS_PARSE_STOC_KEY_SHARE, SSL_R_BAD_KEY_SHARE);
1053         return 0;
1054     }
1055
1056     if (!PACKET_as_length_prefixed_2(pkt, &encoded_pt)
1057             || PACKET_remaining(&encoded_pt) == 0) {
1058         *al = SSL_AD_DECODE_ERROR;
1059         SSLerr(SSL_F_TLS_PARSE_STOC_KEY_SHARE, SSL_R_LENGTH_MISMATCH);
1060         return 0;
1061     }
1062
1063     skey = ssl_generate_pkey(ckey);
1064     if (skey == NULL) {
1065         *al = SSL_AD_INTERNAL_ERROR;
1066         SSLerr(SSL_F_TLS_PARSE_STOC_KEY_SHARE, ERR_R_MALLOC_FAILURE);
1067         return 0;
1068     }
1069     if (!EVP_PKEY_set1_tls_encodedpoint(skey, PACKET_data(&encoded_pt),
1070                                         PACKET_remaining(&encoded_pt))) {
1071         *al = SSL_AD_DECODE_ERROR;
1072         SSLerr(SSL_F_TLS_PARSE_STOC_KEY_SHARE, SSL_R_BAD_ECPOINT);
1073         EVP_PKEY_free(skey);
1074         return 0;
1075     }
1076
1077     if (ssl_derive(s, ckey, skey, 1) == 0) {
1078         *al = SSL_AD_INTERNAL_ERROR;
1079         SSLerr(SSL_F_TLS_PARSE_STOC_KEY_SHARE, ERR_R_INTERNAL_ERROR);
1080         EVP_PKEY_free(skey);
1081         return 0;
1082     }
1083     EVP_PKEY_free(skey);
1084 #endif
1085
1086     return 1;
1087 }