Modify libssl to discover supported groups based on available providers
[oweals/openssl.git] / ssl / t1_lib.c
1 /*
2  * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved.
3  *
4  * Licensed under the Apache License 2.0 (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 /* We need access to the deprecated low level HMAC APIs */
11 #define OPENSSL_SUPPRESS_DEPRECATED
12
13 #include <stdio.h>
14 #include <stdlib.h>
15 #include <openssl/objects.h>
16 #include <openssl/evp.h>
17 #include <openssl/hmac.h>
18 #include <openssl/core_names.h>
19 #include <openssl/ocsp.h>
20 #include <openssl/conf.h>
21 #include <openssl/x509v3.h>
22 #include <openssl/dh.h>
23 #include <openssl/bn.h>
24 #include <openssl/provider.h>
25 #include "internal/nelem.h"
26 #include "internal/evp.h"
27 #include "ssl_local.h"
28 #include <openssl/ct.h>
29
30 DEFINE_STACK_OF_CONST(SSL_CIPHER)
31 DEFINE_STACK_OF(X509)
32 DEFINE_STACK_OF(X509_NAME)
33
34 static const SIGALG_LOOKUP *find_sig_alg(SSL *s, X509 *x, EVP_PKEY *pkey);
35 static int tls12_sigalg_allowed(const SSL *s, int op, const SIGALG_LOOKUP *lu);
36
37 SSL3_ENC_METHOD const TLSv1_enc_data = {
38     tls1_enc,
39     tls1_mac,
40     tls1_setup_key_block,
41     tls1_generate_master_secret,
42     tls1_change_cipher_state,
43     tls1_final_finish_mac,
44     TLS_MD_CLIENT_FINISH_CONST, TLS_MD_CLIENT_FINISH_CONST_SIZE,
45     TLS_MD_SERVER_FINISH_CONST, TLS_MD_SERVER_FINISH_CONST_SIZE,
46     tls1_alert_code,
47     tls1_export_keying_material,
48     0,
49     ssl3_set_handshake_header,
50     tls_close_construct_packet,
51     ssl3_handshake_write
52 };
53
54 SSL3_ENC_METHOD const TLSv1_1_enc_data = {
55     tls1_enc,
56     tls1_mac,
57     tls1_setup_key_block,
58     tls1_generate_master_secret,
59     tls1_change_cipher_state,
60     tls1_final_finish_mac,
61     TLS_MD_CLIENT_FINISH_CONST, TLS_MD_CLIENT_FINISH_CONST_SIZE,
62     TLS_MD_SERVER_FINISH_CONST, TLS_MD_SERVER_FINISH_CONST_SIZE,
63     tls1_alert_code,
64     tls1_export_keying_material,
65     SSL_ENC_FLAG_EXPLICIT_IV,
66     ssl3_set_handshake_header,
67     tls_close_construct_packet,
68     ssl3_handshake_write
69 };
70
71 SSL3_ENC_METHOD const TLSv1_2_enc_data = {
72     tls1_enc,
73     tls1_mac,
74     tls1_setup_key_block,
75     tls1_generate_master_secret,
76     tls1_change_cipher_state,
77     tls1_final_finish_mac,
78     TLS_MD_CLIENT_FINISH_CONST, TLS_MD_CLIENT_FINISH_CONST_SIZE,
79     TLS_MD_SERVER_FINISH_CONST, TLS_MD_SERVER_FINISH_CONST_SIZE,
80     tls1_alert_code,
81     tls1_export_keying_material,
82     SSL_ENC_FLAG_EXPLICIT_IV | SSL_ENC_FLAG_SIGALGS | SSL_ENC_FLAG_SHA256_PRF
83         | SSL_ENC_FLAG_TLS1_2_CIPHERS,
84     ssl3_set_handshake_header,
85     tls_close_construct_packet,
86     ssl3_handshake_write
87 };
88
89 SSL3_ENC_METHOD const TLSv1_3_enc_data = {
90     tls13_enc,
91     tls1_mac,
92     tls13_setup_key_block,
93     tls13_generate_master_secret,
94     tls13_change_cipher_state,
95     tls13_final_finish_mac,
96     TLS_MD_CLIENT_FINISH_CONST, TLS_MD_CLIENT_FINISH_CONST_SIZE,
97     TLS_MD_SERVER_FINISH_CONST, TLS_MD_SERVER_FINISH_CONST_SIZE,
98     tls13_alert_code,
99     tls13_export_keying_material,
100     SSL_ENC_FLAG_SIGALGS | SSL_ENC_FLAG_SHA256_PRF,
101     ssl3_set_handshake_header,
102     tls_close_construct_packet,
103     ssl3_handshake_write
104 };
105
106 long tls1_default_timeout(void)
107 {
108     /*
109      * 2 hours, the 24 hours mentioned in the TLSv1 spec is way too long for
110      * http, the cache would over fill
111      */
112     return (60 * 60 * 2);
113 }
114
115 int tls1_new(SSL *s)
116 {
117     if (!ssl3_new(s))
118         return 0;
119     if (!s->method->ssl_clear(s))
120         return 0;
121
122     return 1;
123 }
124
125 void tls1_free(SSL *s)
126 {
127     OPENSSL_free(s->ext.session_ticket);
128     ssl3_free(s);
129 }
130
131 int tls1_clear(SSL *s)
132 {
133     if (!ssl3_clear(s))
134         return 0;
135
136     if (s->method->version == TLS_ANY_VERSION)
137         s->version = TLS_MAX_VERSION_INTERNAL;
138     else
139         s->version = s->method->version;
140
141     return 1;
142 }
143
144 #if !defined(OPENSSL_NO_DH) || !defined(OPENSSL_NO_EC)
145 /* Legacy NID to group_id mapping. Only works for groups we know about */
146 static struct {
147     int nid;
148     uint16_t group_id;
149 } nid_to_group[] = {
150     {NID_sect163k1, 0x0001},
151     {NID_sect163r1, 0x0002},
152     {NID_sect163r2, 0x0003},
153     {NID_sect193r1, 0x0004},
154     {NID_sect193r2, 0x0005},
155     {NID_sect233k1, 0x0006},
156     {NID_sect233r1, 0x0007},
157     {NID_sect239k1, 0x0008},
158     {NID_sect283k1, 0x0009},
159     {NID_sect283r1, 0x000A},
160     {NID_sect409k1, 0x000B},
161     {NID_sect409r1, 0x000C},
162     {NID_sect571k1, 0x000D},
163     {NID_sect571r1, 0x000E},
164     {NID_secp160k1, 0x000F},
165     {NID_secp160r1, 0x0010},
166     {NID_secp160r2, 0x0011},
167     {NID_secp192k1, 0x0012},
168     {NID_X9_62_prime192v1, 0x0013},
169     {NID_secp224k1, 0x0014},
170     {NID_secp224r1, 0x0015},
171     {NID_secp256k1, 0x0016},
172     {NID_X9_62_prime256v1, 0x0017},
173     {NID_secp384r1, 0x0018},
174     {NID_secp521r1, 0x0019},
175     {NID_brainpoolP256r1, 0x001A},
176     {NID_brainpoolP384r1, 0x001B},
177     {NID_brainpoolP512r1, 0x001C},
178     {EVP_PKEY_X25519, 0x001D},
179     {EVP_PKEY_X448, 0x001E},
180     {NID_id_tc26_gost_3410_2012_256_paramSetA, 0x0022},
181     {NID_id_tc26_gost_3410_2012_256_paramSetB, 0x0023},
182     {NID_id_tc26_gost_3410_2012_256_paramSetC, 0x0024},
183     {NID_id_tc26_gost_3410_2012_256_paramSetD, 0x0025},
184     {NID_id_tc26_gost_3410_2012_512_paramSetA, 0x0026},
185     {NID_id_tc26_gost_3410_2012_512_paramSetB, 0x0027},
186     {NID_id_tc26_gost_3410_2012_512_paramSetC, 0x0028},
187     {NID_ffdhe2048, 0x0100},
188     {NID_ffdhe3072, 0x0101},
189     {NID_ffdhe4096, 0x0102},
190     {NID_ffdhe6144, 0x0103},
191     {NID_ffdhe8192, 0x0104}
192 };
193 #endif
194
195 #ifndef OPENSSL_NO_EC
196 static const unsigned char ecformats_default[] = {
197     TLSEXT_ECPOINTFORMAT_uncompressed,
198     TLSEXT_ECPOINTFORMAT_ansiX962_compressed_prime,
199     TLSEXT_ECPOINTFORMAT_ansiX962_compressed_char2
200 };
201 #endif /* !defined(OPENSSL_NO_EC) || !defined(OPENSSL_NO_DH) */
202
203 /* The default curves */
204 #if !defined(OPENSSL_NO_DH) || !defined(OPENSSL_NO_EC)
205 static const uint16_t supported_groups_default[] = {
206 # ifndef OPENSSL_NO_EC
207     29,                      /* X25519 (29) */
208     23,                      /* secp256r1 (23) */
209     30,                      /* X448 (30) */
210     25,                      /* secp521r1 (25) */
211     24,                      /* secp384r1 (24) */
212 # endif
213 # ifndef OPENSSL_NO_GOST
214     34,                      /* GC256A (34) */
215     35,                      /* GC256B (35) */
216     36,                      /* GC256C (36) */
217     37,                      /* GC256D (37) */
218     38,                      /* GC512A (38) */
219     39,                      /* GC512B (39) */
220     40,                      /* GC512C (40) */
221 # endif
222 # ifndef OPENSSL_NO_DH
223     0x100,                   /* ffdhe2048 (0x100) */
224     0x101,                   /* ffdhe3072 (0x101) */
225     0x102,                   /* ffdhe4096 (0x102) */
226     0x103,                   /* ffdhe6144 (0x103) */
227     0x104,                   /* ffdhe8192 (0x104) */
228 # endif
229 };
230 #endif /* !defined(OPENSSL_NO_EC) || !defined(OPENSSL_NO_DH) */
231
232 #ifndef OPENSSL_NO_EC
233 static const uint16_t suiteb_curves[] = {
234     TLSEXT_curve_P_256,
235     TLSEXT_curve_P_384
236 };
237 #endif
238
239 struct provider_group_data_st {
240     SSL_CTX *ctx;
241     OSSL_PROVIDER *provider;
242 };
243
244 #define TLS_GROUP_LIST_MALLOC_BLOCK_SIZE        10
245 static OSSL_CALLBACK add_provider_groups;
246 static int add_provider_groups(const OSSL_PARAM params[], void *data)
247 {
248     struct provider_group_data_st *pgd = data;
249     SSL_CTX *ctx = pgd->ctx;
250     OSSL_PROVIDER *provider = pgd->provider;
251     const OSSL_PARAM *p;
252     TLS_GROUP_INFO *ginf = NULL;
253     EVP_KEYMGMT *keymgmt;
254     unsigned int gid;
255     int ret = 0;
256
257     if (ctx->group_list_max_len == ctx->group_list_len) {
258         TLS_GROUP_INFO *tmp = NULL;
259
260         if (ctx->group_list_max_len == 0)
261             tmp = OPENSSL_malloc(sizeof(TLS_GROUP_INFO)
262                                  * TLS_GROUP_LIST_MALLOC_BLOCK_SIZE);
263         else
264             tmp = OPENSSL_realloc(ctx->group_list,
265                                   (ctx->group_list_max_len
266                                    + TLS_GROUP_LIST_MALLOC_BLOCK_SIZE)
267                                   * sizeof(TLS_GROUP_INFO));
268         if (tmp == NULL) {
269             SSLerr(0, ERR_R_MALLOC_FAILURE);
270             return 0;
271         }
272         ctx->group_list = tmp;
273         memset(tmp + ctx->group_list_max_len,
274                0,
275                sizeof(TLS_GROUP_INFO) * TLS_GROUP_LIST_MALLOC_BLOCK_SIZE);
276         ctx->group_list_max_len += TLS_GROUP_LIST_MALLOC_BLOCK_SIZE;
277     }
278
279     ginf = &ctx->group_list[ctx->group_list_len];
280
281     p = OSSL_PARAM_locate_const(params, OSSL_CAPABILITY_TLS_GROUP_NAME);
282     if (p == NULL || p->data_type != OSSL_PARAM_UTF8_STRING) {
283         SSLerr(0, ERR_R_PASSED_INVALID_ARGUMENT);
284         goto err;
285     }
286     ginf->tlsname = OPENSSL_strdup(p->data);
287     if (ginf->tlsname == NULL) {
288         SSLerr(0, ERR_R_MALLOC_FAILURE);
289         goto err;
290     }
291
292     p = OSSL_PARAM_locate_const(params, OSSL_CAPABILITY_TLS_GROUP_NAME_INTERNAL);
293     if (p == NULL || p->data_type != OSSL_PARAM_UTF8_STRING) {
294         SSLerr(0, ERR_R_PASSED_INVALID_ARGUMENT);
295         goto err;
296     }
297     ginf->realname = OPENSSL_strdup(p->data);
298     if (ginf->realname == NULL) {
299         SSLerr(0, ERR_R_MALLOC_FAILURE);
300         goto err;
301     }
302
303     p = OSSL_PARAM_locate_const(params, OSSL_CAPABILITY_TLS_GROUP_ID);
304     if (p == NULL || !OSSL_PARAM_get_uint(p, &gid) || gid > UINT16_MAX) {
305         SSLerr(0, ERR_R_PASSED_INVALID_ARGUMENT);
306         goto err;
307     }
308     ginf->group_id = (uint16_t)gid;
309
310     p = OSSL_PARAM_locate_const(params, OSSL_CAPABILITY_TLS_GROUP_ALG);
311     if (p == NULL || p->data_type != OSSL_PARAM_UTF8_STRING) {
312         SSLerr(0, ERR_R_PASSED_INVALID_ARGUMENT);
313         goto err;
314     }
315     ginf->algorithm = OPENSSL_strdup(p->data);
316     if (ginf->algorithm == NULL) {
317         SSLerr(0, ERR_R_MALLOC_FAILURE);
318         goto err;
319     }
320
321     p = OSSL_PARAM_locate_const(params, OSSL_CAPABILITY_TLS_GROUP_SECURITY_BITS);
322     if (p == NULL || !OSSL_PARAM_get_uint(p, &ginf->secbits)) {
323         SSLerr(0, ERR_R_PASSED_INVALID_ARGUMENT);
324         goto err;
325     }
326
327     p = OSSL_PARAM_locate_const(params, OSSL_CAPABILITY_TLS_GROUP_MIN_TLS);
328     if (p == NULL || !OSSL_PARAM_get_int(p, &ginf->mintls)) {
329         SSLerr(0, ERR_R_PASSED_INVALID_ARGUMENT);
330         goto err;
331     }
332
333     p = OSSL_PARAM_locate_const(params, OSSL_CAPABILITY_TLS_GROUP_MAX_TLS);
334     if (p == NULL || !OSSL_PARAM_get_int(p, &ginf->maxtls)) {
335         SSLerr(0, ERR_R_PASSED_INVALID_ARGUMENT);
336         return 0;
337     }
338
339     p = OSSL_PARAM_locate_const(params, OSSL_CAPABILITY_TLS_GROUP_MIN_DTLS);
340     if (p == NULL || !OSSL_PARAM_get_int(p, &ginf->mindtls)) {
341         SSLerr(0, ERR_R_PASSED_INVALID_ARGUMENT);
342         goto err;
343     }
344
345     p = OSSL_PARAM_locate_const(params, OSSL_CAPABILITY_TLS_GROUP_MAX_DTLS);
346     if (p == NULL || !OSSL_PARAM_get_int(p, &ginf->maxdtls)) {
347         SSLerr(0, ERR_R_PASSED_INVALID_ARGUMENT);
348         goto err;
349     }
350     /*
351      * Now check that the algorithm is actually usable for our property query
352      * string. Regardless of the result we still return success because we have
353      * successfully processed this group, even though we may decide not to use
354      * it.
355      */
356     ret = 1;
357     keymgmt = EVP_KEYMGMT_fetch(ctx->libctx, ginf->algorithm, ctx->propq);
358     if (keymgmt != NULL) {
359         /*
360          * We have successfully fetched the algorithm - however if the provider
361          * doesn't match this one then we ignore it.
362          *
363          * Note: We're cheating a little here. Technically if the same algorithm
364          * is available from more than one provider then it is undefined which
365          * implementation you will get back. Theoretically this could be
366          * different every time...we assume here that you'll always get the
367          * same one back if you repeat the exact same fetch. Is this a reasonable
368          * assumption to make (in which case perhaps we should document this
369          * behaviour)?
370          */
371         if (EVP_KEYMGMT_provider(keymgmt) == provider) {
372             /* We have a match - so we will use this group */
373             ctx->group_list_len++;
374             ginf = NULL;
375         }
376         EVP_KEYMGMT_free(keymgmt);
377     }
378  err:
379     if (ginf != NULL) {
380         OPENSSL_free(ginf->tlsname);
381         OPENSSL_free(ginf->realname);
382         OPENSSL_free(ginf->algorithm);
383         ginf->tlsname = ginf->realname = NULL;
384     }
385     return ret;
386 }
387
388 static int discover_provider_groups(OSSL_PROVIDER *provider, void *vctx)
389 {
390     struct provider_group_data_st pgd;
391
392     pgd.ctx = vctx;
393     pgd.provider = provider;
394     return OSSL_PROVIDER_get_capabilities(provider, "TLS-GROUP",
395                                           add_provider_groups, &pgd);
396 }
397
398 int ssl_load_groups(SSL_CTX *ctx)
399 {
400     return OSSL_PROVIDER_do_all(ctx->libctx, discover_provider_groups, ctx);
401 }
402
403 const TLS_GROUP_INFO *tls1_group_id_lookup(SSL_CTX *ctx, uint16_t group_id)
404 {
405     size_t i;
406
407     for (i = 0; i < ctx->group_list_len; i++) {
408         if (ctx->group_list[i].group_id == group_id)
409             return &ctx->group_list[i];
410     }
411
412     return NULL;
413 }
414
415 #if !defined(OPENSSL_NO_DH) || !defined(OPENSSL_NO_EC)
416 int tls1_group_id2nid(uint16_t group_id)
417 {
418     size_t i;
419
420     /*
421      * Return well known Group NIDs - for backwards compatibility. This won't
422      * work for groups we don't know about.
423      */
424     for (i = 0; i < OSSL_NELEM(nid_to_group); i++)
425     {
426         if (nid_to_group[i].group_id == group_id)
427             return nid_to_group[i].nid;
428     }
429     return NID_undef;
430 }
431
432 static uint16_t tls1_nid2group_id(int nid)
433 {
434     size_t i;
435
436     /*
437      * Return well known Group ids - for backwards compatibility. This won't
438      * work for groups we don't know about.
439      */
440     for (i = 0; i < OSSL_NELEM(nid_to_group); i++)
441     {
442         if (nid_to_group[i].nid == nid)
443             return nid_to_group[i].group_id;
444     }
445
446     return 0;
447 }
448 #endif /* !defined(OPENSSL_NO_EC) || !defined(OPENSSL_NO_DH) */
449
450 /*
451  * Set *pgroups to the supported groups list and *pgroupslen to
452  * the number of groups supported.
453  */
454 void tls1_get_supported_groups(SSL *s, const uint16_t **pgroups,
455                                size_t *pgroupslen)
456 {
457 #if !defined(OPENSSL_NO_EC) || !defined(OPENSSL_NO_DH)
458     /* For Suite B mode only include P-256, P-384 */
459     switch (tls1_suiteb(s)) {
460 # ifndef OPENSSL_NO_EC
461     case SSL_CERT_FLAG_SUITEB_128_LOS:
462         *pgroups = suiteb_curves;
463         *pgroupslen = OSSL_NELEM(suiteb_curves);
464         break;
465
466     case SSL_CERT_FLAG_SUITEB_128_LOS_ONLY:
467         *pgroups = suiteb_curves;
468         *pgroupslen = 1;
469         break;
470
471     case SSL_CERT_FLAG_SUITEB_192_LOS:
472         *pgroups = suiteb_curves + 1;
473         *pgroupslen = 1;
474         break;
475 # endif
476
477     default:
478         if (s->ext.supportedgroups == NULL) {
479             *pgroups = supported_groups_default;
480             *pgroupslen = OSSL_NELEM(supported_groups_default);
481         } else {
482             *pgroups = s->ext.supportedgroups;
483             *pgroupslen = s->ext.supportedgroups_len;
484         }
485         break;
486     }
487 #else
488     *pgroups = NULL;
489     *pgroupslen = 0;
490 #endif /* !defined(OPENSSL_NO_EC) || !defined(OPENSSL_NO_DH) */
491 }
492
493 int tls_valid_group(SSL *s, uint16_t group_id, int minversion, int maxversion)
494 {
495     const TLS_GROUP_INFO *ginfo = tls1_group_id_lookup(s->ctx, group_id);
496     int ret;
497
498     if (ginfo == NULL)
499         return 0;
500
501     if (SSL_IS_DTLS(s)) {
502         if (ginfo->mindtls < 0 || ginfo->maxdtls < 0)
503             return 0;
504         if (ginfo->maxdtls == 0)
505             ret = 1;
506         else
507             ret = DTLS_VERSION_LE(minversion, ginfo->maxdtls);
508         if (ginfo->mindtls > 0)
509             ret &= DTLS_VERSION_GE(maxversion, ginfo->mindtls);
510     } else {
511         if (ginfo->mintls < 0 || ginfo->maxtls < 0)
512             return 0;
513         if (ginfo->maxtls == 0)
514             ret = 1;
515         else
516             ret = (minversion <= ginfo->maxtls);
517         if (ginfo->mintls > 0)
518             ret &= (maxversion >= ginfo->mintls);
519     }
520
521     return ret;
522 }
523
524 /* See if group is allowed by security callback */
525 int tls_group_allowed(SSL *s, uint16_t group, int op)
526 {
527     const TLS_GROUP_INFO *ginfo = tls1_group_id_lookup(s->ctx, group);
528     unsigned char gtmp[2];
529
530     if (ginfo == NULL)
531         return 0;
532
533     gtmp[0] = group >> 8;
534     gtmp[1] = group & 0xff;
535     return ssl_security(s, op, ginfo->secbits,
536                         tls1_group_id2nid(ginfo->group_id), (void *)gtmp);
537 }
538
539 /* Return 1 if "id" is in "list" */
540 static int tls1_in_list(uint16_t id, const uint16_t *list, size_t listlen)
541 {
542     size_t i;
543     for (i = 0; i < listlen; i++)
544         if (list[i] == id)
545             return 1;
546     return 0;
547 }
548
549 /*-
550  * For nmatch >= 0, return the id of the |nmatch|th shared group or 0
551  * if there is no match.
552  * For nmatch == -1, return number of matches
553  * For nmatch == -2, return the id of the group to use for
554  * a tmp key, or 0 if there is no match.
555  */
556 uint16_t tls1_shared_group(SSL *s, int nmatch)
557 {
558     const uint16_t *pref, *supp;
559     size_t num_pref, num_supp, i;
560     int k;
561
562     /* Can't do anything on client side */
563     if (s->server == 0)
564         return 0;
565     if (nmatch == -2) {
566         if (tls1_suiteb(s)) {
567             /*
568              * For Suite B ciphersuite determines curve: we already know
569              * these are acceptable due to previous checks.
570              */
571             unsigned long cid = s->s3.tmp.new_cipher->id;
572
573             if (cid == TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256)
574                 return TLSEXT_curve_P_256;
575             if (cid == TLS1_CK_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384)
576                 return TLSEXT_curve_P_384;
577             /* Should never happen */
578             return 0;
579         }
580         /* If not Suite B just return first preference shared curve */
581         nmatch = 0;
582     }
583     /*
584      * If server preference set, our groups are the preference order
585      * otherwise peer decides.
586      */
587     if (s->options & SSL_OP_CIPHER_SERVER_PREFERENCE) {
588         tls1_get_supported_groups(s, &pref, &num_pref);
589         tls1_get_peer_groups(s, &supp, &num_supp);
590     } else {
591         tls1_get_peer_groups(s, &pref, &num_pref);
592         tls1_get_supported_groups(s, &supp, &num_supp);
593     }
594
595     for (k = 0, i = 0; i < num_pref; i++) {
596         uint16_t id = pref[i];
597
598         if (!tls1_in_list(id, supp, num_supp)
599             || !tls_group_allowed(s, id, SSL_SECOP_CURVE_SHARED))
600                     continue;
601         if (nmatch == k)
602             return id;
603          k++;
604     }
605     if (nmatch == -1)
606         return k;
607     /* Out of range (nmatch > k). */
608     return 0;
609 }
610
611 int tls1_set_groups(uint16_t **pext, size_t *pextlen,
612                     int *groups, size_t ngroups)
613 {
614 #if !defined(OPENSSL_NO_EC) || !defined(OPENSSL_NO_DH)
615     uint16_t *glist;
616     size_t i;
617     /*
618      * Bitmap of groups included to detect duplicates: two variables are added
619      * to detect duplicates as some values are more than 32.
620      */
621     unsigned long *dup_list = NULL;
622     unsigned long dup_list_egrp = 0;
623     unsigned long dup_list_dhgrp = 0;
624
625     if (ngroups == 0) {
626         SSLerr(SSL_F_TLS1_SET_GROUPS, SSL_R_BAD_LENGTH);
627         return 0;
628     }
629     if ((glist = OPENSSL_malloc(ngroups * sizeof(*glist))) == NULL) {
630         SSLerr(SSL_F_TLS1_SET_GROUPS, ERR_R_MALLOC_FAILURE);
631         return 0;
632     }
633     for (i = 0; i < ngroups; i++) {
634         unsigned long idmask;
635         uint16_t id;
636         id = tls1_nid2group_id(groups[i]);
637         if ((id & 0x00FF) >= (sizeof(unsigned long) * 8))
638             goto err;
639         idmask = 1L << (id & 0x00FF);
640         dup_list = (id < 0x100) ? &dup_list_egrp : &dup_list_dhgrp;
641         if (!id || ((*dup_list) & idmask))
642             goto err;
643         *dup_list |= idmask;
644         glist[i] = id;
645     }
646     OPENSSL_free(*pext);
647     *pext = glist;
648     *pextlen = ngroups;
649     return 1;
650 err:
651     OPENSSL_free(glist);
652     return 0;
653 #else
654     return 0;
655 #endif /* !defined(OPENSSL_NO_EC) || !defined(OPENSSL_NO_DH) */
656 }
657
658 #if !defined(OPENSSL_NO_EC) || !defined(OPENSSL_NO_DH)
659 /* TODO(3.0): An arbitrary amount for now. Take another look at this */
660 # define MAX_GROUPLIST   40
661
662 typedef struct {
663     size_t nidcnt;
664     int nid_arr[MAX_GROUPLIST];
665 } nid_cb_st;
666
667 static int nid_cb(const char *elem, int len, void *arg)
668 {
669     nid_cb_st *narg = arg;
670     size_t i;
671     int nid = NID_undef;
672     char etmp[20];
673     if (elem == NULL)
674         return 0;
675     if (narg->nidcnt == MAX_GROUPLIST)
676         return 0;
677     if (len > (int)(sizeof(etmp) - 1))
678         return 0;
679     memcpy(etmp, elem, len);
680     etmp[len] = 0;
681 # ifndef OPENSSL_NO_EC
682     nid = EC_curve_nist2nid(etmp);
683 # endif
684     if (nid == NID_undef)
685         nid = OBJ_sn2nid(etmp);
686     if (nid == NID_undef)
687         nid = OBJ_ln2nid(etmp);
688     if (nid == NID_undef)
689         return 0;
690     for (i = 0; i < narg->nidcnt; i++)
691         if (narg->nid_arr[i] == nid)
692             return 0;
693     narg->nid_arr[narg->nidcnt++] = nid;
694     return 1;
695 }
696 #endif /* !defined(OPENSSL_NO_EC) || !defined(OPENSSL_NO_DH) */
697
698 /* Set groups based on a colon separate list */
699 int tls1_set_groups_list(uint16_t **pext, size_t *pextlen, const char *str)
700 {
701 #if !defined(OPENSSL_NO_EC) || !defined(OPENSSL_NO_DH)
702     nid_cb_st ncb;
703     ncb.nidcnt = 0;
704     if (!CONF_parse_list(str, ':', 1, nid_cb, &ncb))
705         return 0;
706     if (pext == NULL)
707         return 1;
708     return tls1_set_groups(pext, pextlen, ncb.nid_arr, ncb.nidcnt);
709 #else
710     return 0;
711 #endif
712 }
713
714 /* Check a group id matches preferences */
715 int tls1_check_group_id(SSL *s, uint16_t group_id, int check_own_groups)
716     {
717     const uint16_t *groups;
718     size_t groups_len;
719
720     if (group_id == 0)
721         return 0;
722
723     /* Check for Suite B compliance */
724     if (tls1_suiteb(s) && s->s3.tmp.new_cipher != NULL) {
725         unsigned long cid = s->s3.tmp.new_cipher->id;
726
727         if (cid == TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256) {
728             if (group_id != TLSEXT_curve_P_256)
729                 return 0;
730         } else if (cid == TLS1_CK_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384) {
731             if (group_id != TLSEXT_curve_P_384)
732                 return 0;
733         } else {
734             /* Should never happen */
735             return 0;
736         }
737     }
738
739     if (check_own_groups) {
740         /* Check group is one of our preferences */
741         tls1_get_supported_groups(s, &groups, &groups_len);
742         if (!tls1_in_list(group_id, groups, groups_len))
743             return 0;
744     }
745
746     if (!tls_group_allowed(s, group_id, SSL_SECOP_CURVE_CHECK))
747         return 0;
748
749     /* For clients, nothing more to check */
750     if (!s->server)
751         return 1;
752
753     /* Check group is one of peers preferences */
754     tls1_get_peer_groups(s, &groups, &groups_len);
755
756     /*
757      * RFC 4492 does not require the supported elliptic curves extension
758      * so if it is not sent we can just choose any curve.
759      * It is invalid to send an empty list in the supported groups
760      * extension, so groups_len == 0 always means no extension.
761      */
762     if (groups_len == 0)
763             return 1;
764     return tls1_in_list(group_id, groups, groups_len);
765 }
766
767 #ifndef OPENSSL_NO_EC
768 void tls1_get_formatlist(SSL *s, const unsigned char **pformats,
769                          size_t *num_formats)
770 {
771     /*
772      * If we have a custom point format list use it otherwise use default
773      */
774     if (s->ext.ecpointformats) {
775         *pformats = s->ext.ecpointformats;
776         *num_formats = s->ext.ecpointformats_len;
777     } else {
778         *pformats = ecformats_default;
779         /* For Suite B we don't support char2 fields */
780         if (tls1_suiteb(s))
781             *num_formats = sizeof(ecformats_default) - 1;
782         else
783             *num_formats = sizeof(ecformats_default);
784     }
785 }
786
787 /* Check a key is compatible with compression extension */
788 static int tls1_check_pkey_comp(SSL *s, EVP_PKEY *pkey)
789 {
790     const EC_KEY *ec;
791     const EC_GROUP *grp;
792     unsigned char comp_id;
793     size_t i;
794
795     /* If not an EC key nothing to check */
796     if (!EVP_PKEY_is_a(pkey, "EC"))
797         return 1;
798     ec = EVP_PKEY_get0_EC_KEY(pkey);
799     grp = EC_KEY_get0_group(ec);
800
801     /* Get required compression id */
802     if (EC_KEY_get_conv_form(ec) == POINT_CONVERSION_UNCOMPRESSED) {
803             comp_id = TLSEXT_ECPOINTFORMAT_uncompressed;
804     } else if (SSL_IS_TLS13(s)) {
805             /*
806              * ec_point_formats extension is not used in TLSv1.3 so we ignore
807              * this check.
808              */
809             return 1;
810     } else {
811         int field_type = EC_GROUP_get_field_type(grp);
812
813         if (field_type == NID_X9_62_prime_field)
814             comp_id = TLSEXT_ECPOINTFORMAT_ansiX962_compressed_prime;
815         else if (field_type == NID_X9_62_characteristic_two_field)
816             comp_id = TLSEXT_ECPOINTFORMAT_ansiX962_compressed_char2;
817         else
818             return 0;
819     }
820     /*
821      * If point formats extension present check it, otherwise everything is
822      * supported (see RFC4492).
823      */
824     if (s->ext.peer_ecpointformats == NULL)
825         return 1;
826
827     for (i = 0; i < s->ext.peer_ecpointformats_len; i++) {
828         if (s->ext.peer_ecpointformats[i] == comp_id)
829             return 1;
830     }
831     return 0;
832 }
833
834 /* Return group id of a key */
835 static uint16_t tls1_get_group_id(EVP_PKEY *pkey)
836 {
837     int curve_nid = evp_pkey_get_EC_KEY_curve_nid(pkey);
838
839     if (curve_nid == NID_undef)
840         return 0;
841     return tls1_nid2group_id(curve_nid);
842 }
843
844 /*
845  * Check cert parameters compatible with extensions: currently just checks EC
846  * certificates have compatible curves and compression.
847  */
848 static int tls1_check_cert_param(SSL *s, X509 *x, int check_ee_md)
849 {
850     uint16_t group_id;
851     EVP_PKEY *pkey;
852     pkey = X509_get0_pubkey(x);
853     if (pkey == NULL)
854         return 0;
855     /* If not EC nothing to do */
856     if (!EVP_PKEY_is_a(pkey, "EC"))
857         return 1;
858     /* Check compression */
859     if (!tls1_check_pkey_comp(s, pkey))
860         return 0;
861     group_id = tls1_get_group_id(pkey);
862     /*
863      * For a server we allow the certificate to not be in our list of supported
864      * groups.
865      */
866     if (!tls1_check_group_id(s, group_id, !s->server))
867         return 0;
868     /*
869      * Special case for suite B. We *MUST* sign using SHA256+P-256 or
870      * SHA384+P-384.
871      */
872     if (check_ee_md && tls1_suiteb(s)) {
873         int check_md;
874         size_t i;
875
876         /* Check to see we have necessary signing algorithm */
877         if (group_id == TLSEXT_curve_P_256)
878             check_md = NID_ecdsa_with_SHA256;
879         else if (group_id == TLSEXT_curve_P_384)
880             check_md = NID_ecdsa_with_SHA384;
881         else
882             return 0;           /* Should never happen */
883         for (i = 0; i < s->shared_sigalgslen; i++) {
884             if (check_md == s->shared_sigalgs[i]->sigandhash)
885                 return 1;;
886         }
887         return 0;
888     }
889     return 1;
890 }
891
892 /*
893  * tls1_check_ec_tmp_key - Check EC temporary key compatibility
894  * @s: SSL connection
895  * @cid: Cipher ID we're considering using
896  *
897  * Checks that the kECDHE cipher suite we're considering using
898  * is compatible with the client extensions.
899  *
900  * Returns 0 when the cipher can't be used or 1 when it can.
901  */
902 int tls1_check_ec_tmp_key(SSL *s, unsigned long cid)
903 {
904     /* If not Suite B just need a shared group */
905     if (!tls1_suiteb(s))
906         return tls1_shared_group(s, 0) != 0;
907     /*
908      * If Suite B, AES128 MUST use P-256 and AES256 MUST use P-384, no other
909      * curves permitted.
910      */
911     if (cid == TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256)
912         return tls1_check_group_id(s, TLSEXT_curve_P_256, 1);
913     if (cid == TLS1_CK_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384)
914         return tls1_check_group_id(s, TLSEXT_curve_P_384, 1);
915
916     return 0;
917 }
918
919 #else
920
921 static int tls1_check_cert_param(SSL *s, X509 *x, int set_ee_md)
922 {
923     return 1;
924 }
925
926 #endif                          /* OPENSSL_NO_EC */
927
928 /* Default sigalg schemes */
929 static const uint16_t tls12_sigalgs[] = {
930 #ifndef OPENSSL_NO_EC
931     TLSEXT_SIGALG_ecdsa_secp256r1_sha256,
932     TLSEXT_SIGALG_ecdsa_secp384r1_sha384,
933     TLSEXT_SIGALG_ecdsa_secp521r1_sha512,
934     TLSEXT_SIGALG_ed25519,
935     TLSEXT_SIGALG_ed448,
936 #endif
937
938     TLSEXT_SIGALG_rsa_pss_pss_sha256,
939     TLSEXT_SIGALG_rsa_pss_pss_sha384,
940     TLSEXT_SIGALG_rsa_pss_pss_sha512,
941     TLSEXT_SIGALG_rsa_pss_rsae_sha256,
942     TLSEXT_SIGALG_rsa_pss_rsae_sha384,
943     TLSEXT_SIGALG_rsa_pss_rsae_sha512,
944
945     TLSEXT_SIGALG_rsa_pkcs1_sha256,
946     TLSEXT_SIGALG_rsa_pkcs1_sha384,
947     TLSEXT_SIGALG_rsa_pkcs1_sha512,
948
949 #ifndef OPENSSL_NO_EC
950     TLSEXT_SIGALG_ecdsa_sha224,
951     TLSEXT_SIGALG_ecdsa_sha1,
952 #endif
953     TLSEXT_SIGALG_rsa_pkcs1_sha224,
954     TLSEXT_SIGALG_rsa_pkcs1_sha1,
955 #ifndef OPENSSL_NO_DSA
956     TLSEXT_SIGALG_dsa_sha224,
957     TLSEXT_SIGALG_dsa_sha1,
958
959     TLSEXT_SIGALG_dsa_sha256,
960     TLSEXT_SIGALG_dsa_sha384,
961     TLSEXT_SIGALG_dsa_sha512,
962 #endif
963 #ifndef OPENSSL_NO_GOST
964     TLSEXT_SIGALG_gostr34102012_256_intrinsic,
965     TLSEXT_SIGALG_gostr34102012_512_intrinsic,
966     TLSEXT_SIGALG_gostr34102012_256_gostr34112012_256,
967     TLSEXT_SIGALG_gostr34102012_512_gostr34112012_512,
968     TLSEXT_SIGALG_gostr34102001_gostr3411,
969 #endif
970 };
971
972 #ifndef OPENSSL_NO_EC
973 static const uint16_t suiteb_sigalgs[] = {
974     TLSEXT_SIGALG_ecdsa_secp256r1_sha256,
975     TLSEXT_SIGALG_ecdsa_secp384r1_sha384
976 };
977 #endif
978
979 static const SIGALG_LOOKUP sigalg_lookup_tbl[] = {
980 #ifndef OPENSSL_NO_EC
981     {"ecdsa_secp256r1_sha256", TLSEXT_SIGALG_ecdsa_secp256r1_sha256,
982      NID_sha256, SSL_MD_SHA256_IDX, EVP_PKEY_EC, SSL_PKEY_ECC,
983      NID_ecdsa_with_SHA256, NID_X9_62_prime256v1, 1},
984     {"ecdsa_secp384r1_sha384", TLSEXT_SIGALG_ecdsa_secp384r1_sha384,
985      NID_sha384, SSL_MD_SHA384_IDX, EVP_PKEY_EC, SSL_PKEY_ECC,
986      NID_ecdsa_with_SHA384, NID_secp384r1, 1},
987     {"ecdsa_secp521r1_sha512", TLSEXT_SIGALG_ecdsa_secp521r1_sha512,
988      NID_sha512, SSL_MD_SHA512_IDX, EVP_PKEY_EC, SSL_PKEY_ECC,
989      NID_ecdsa_with_SHA512, NID_secp521r1, 1},
990     {"ed25519", TLSEXT_SIGALG_ed25519,
991      NID_undef, -1, EVP_PKEY_ED25519, SSL_PKEY_ED25519,
992      NID_undef, NID_undef, 1},
993     {"ed448", TLSEXT_SIGALG_ed448,
994      NID_undef, -1, EVP_PKEY_ED448, SSL_PKEY_ED448,
995      NID_undef, NID_undef, 1},
996     {NULL, TLSEXT_SIGALG_ecdsa_sha224,
997      NID_sha224, SSL_MD_SHA224_IDX, EVP_PKEY_EC, SSL_PKEY_ECC,
998      NID_ecdsa_with_SHA224, NID_undef, 1},
999     {NULL, TLSEXT_SIGALG_ecdsa_sha1,
1000      NID_sha1, SSL_MD_SHA1_IDX, EVP_PKEY_EC, SSL_PKEY_ECC,
1001      NID_ecdsa_with_SHA1, NID_undef, 1},
1002 #endif
1003     {"rsa_pss_rsae_sha256", TLSEXT_SIGALG_rsa_pss_rsae_sha256,
1004      NID_sha256, SSL_MD_SHA256_IDX, EVP_PKEY_RSA_PSS, SSL_PKEY_RSA,
1005      NID_undef, NID_undef, 1},
1006     {"rsa_pss_rsae_sha384", TLSEXT_SIGALG_rsa_pss_rsae_sha384,
1007      NID_sha384, SSL_MD_SHA384_IDX, EVP_PKEY_RSA_PSS, SSL_PKEY_RSA,
1008      NID_undef, NID_undef, 1},
1009     {"rsa_pss_rsae_sha512", TLSEXT_SIGALG_rsa_pss_rsae_sha512,
1010      NID_sha512, SSL_MD_SHA512_IDX, EVP_PKEY_RSA_PSS, SSL_PKEY_RSA,
1011      NID_undef, NID_undef, 1},
1012     {"rsa_pss_pss_sha256", TLSEXT_SIGALG_rsa_pss_pss_sha256,
1013      NID_sha256, SSL_MD_SHA256_IDX, EVP_PKEY_RSA_PSS, SSL_PKEY_RSA_PSS_SIGN,
1014      NID_undef, NID_undef, 1},
1015     {"rsa_pss_pss_sha384", TLSEXT_SIGALG_rsa_pss_pss_sha384,
1016      NID_sha384, SSL_MD_SHA384_IDX, EVP_PKEY_RSA_PSS, SSL_PKEY_RSA_PSS_SIGN,
1017      NID_undef, NID_undef, 1},
1018     {"rsa_pss_pss_sha512", TLSEXT_SIGALG_rsa_pss_pss_sha512,
1019      NID_sha512, SSL_MD_SHA512_IDX, EVP_PKEY_RSA_PSS, SSL_PKEY_RSA_PSS_SIGN,
1020      NID_undef, NID_undef, 1},
1021     {"rsa_pkcs1_sha256", TLSEXT_SIGALG_rsa_pkcs1_sha256,
1022      NID_sha256, SSL_MD_SHA256_IDX, EVP_PKEY_RSA, SSL_PKEY_RSA,
1023      NID_sha256WithRSAEncryption, NID_undef, 1},
1024     {"rsa_pkcs1_sha384", TLSEXT_SIGALG_rsa_pkcs1_sha384,
1025      NID_sha384, SSL_MD_SHA384_IDX, EVP_PKEY_RSA, SSL_PKEY_RSA,
1026      NID_sha384WithRSAEncryption, NID_undef, 1},
1027     {"rsa_pkcs1_sha512", TLSEXT_SIGALG_rsa_pkcs1_sha512,
1028      NID_sha512, SSL_MD_SHA512_IDX, EVP_PKEY_RSA, SSL_PKEY_RSA,
1029      NID_sha512WithRSAEncryption, NID_undef, 1},
1030     {"rsa_pkcs1_sha224", TLSEXT_SIGALG_rsa_pkcs1_sha224,
1031      NID_sha224, SSL_MD_SHA224_IDX, EVP_PKEY_RSA, SSL_PKEY_RSA,
1032      NID_sha224WithRSAEncryption, NID_undef, 1},
1033     {"rsa_pkcs1_sha1", TLSEXT_SIGALG_rsa_pkcs1_sha1,
1034      NID_sha1, SSL_MD_SHA1_IDX, EVP_PKEY_RSA, SSL_PKEY_RSA,
1035      NID_sha1WithRSAEncryption, NID_undef, 1},
1036 #ifndef OPENSSL_NO_DSA
1037     {NULL, TLSEXT_SIGALG_dsa_sha256,
1038      NID_sha256, SSL_MD_SHA256_IDX, EVP_PKEY_DSA, SSL_PKEY_DSA_SIGN,
1039      NID_dsa_with_SHA256, NID_undef, 1},
1040     {NULL, TLSEXT_SIGALG_dsa_sha384,
1041      NID_sha384, SSL_MD_SHA384_IDX, EVP_PKEY_DSA, SSL_PKEY_DSA_SIGN,
1042      NID_undef, NID_undef, 1},
1043     {NULL, TLSEXT_SIGALG_dsa_sha512,
1044      NID_sha512, SSL_MD_SHA512_IDX, EVP_PKEY_DSA, SSL_PKEY_DSA_SIGN,
1045      NID_undef, NID_undef, 1},
1046     {NULL, TLSEXT_SIGALG_dsa_sha224,
1047      NID_sha224, SSL_MD_SHA224_IDX, EVP_PKEY_DSA, SSL_PKEY_DSA_SIGN,
1048      NID_undef, NID_undef, 1},
1049     {NULL, TLSEXT_SIGALG_dsa_sha1,
1050      NID_sha1, SSL_MD_SHA1_IDX, EVP_PKEY_DSA, SSL_PKEY_DSA_SIGN,
1051      NID_dsaWithSHA1, NID_undef, 1},
1052 #endif
1053 #ifndef OPENSSL_NO_GOST
1054     {NULL, TLSEXT_SIGALG_gostr34102012_256_intrinsic,
1055      NID_id_GostR3411_2012_256, SSL_MD_GOST12_256_IDX,
1056      NID_id_GostR3410_2012_256, SSL_PKEY_GOST12_256,
1057      NID_undef, NID_undef, 1},
1058     {NULL, TLSEXT_SIGALG_gostr34102012_512_intrinsic,
1059      NID_id_GostR3411_2012_512, SSL_MD_GOST12_512_IDX,
1060      NID_id_GostR3410_2012_512, SSL_PKEY_GOST12_512,
1061      NID_undef, NID_undef, 1},
1062     {NULL, TLSEXT_SIGALG_gostr34102012_256_gostr34112012_256,
1063      NID_id_GostR3411_2012_256, SSL_MD_GOST12_256_IDX,
1064      NID_id_GostR3410_2012_256, SSL_PKEY_GOST12_256,
1065      NID_undef, NID_undef, 1},
1066     {NULL, TLSEXT_SIGALG_gostr34102012_512_gostr34112012_512,
1067      NID_id_GostR3411_2012_512, SSL_MD_GOST12_512_IDX,
1068      NID_id_GostR3410_2012_512, SSL_PKEY_GOST12_512,
1069      NID_undef, NID_undef, 1},
1070     {NULL, TLSEXT_SIGALG_gostr34102001_gostr3411,
1071      NID_id_GostR3411_94, SSL_MD_GOST94_IDX,
1072      NID_id_GostR3410_2001, SSL_PKEY_GOST01,
1073      NID_undef, NID_undef, 1}
1074 #endif
1075 };
1076 /* Legacy sigalgs for TLS < 1.2 RSA TLS signatures */
1077 static const SIGALG_LOOKUP legacy_rsa_sigalg = {
1078     "rsa_pkcs1_md5_sha1", 0,
1079      NID_md5_sha1, SSL_MD_MD5_SHA1_IDX,
1080      EVP_PKEY_RSA, SSL_PKEY_RSA,
1081      NID_undef, NID_undef, 1
1082 };
1083
1084 /*
1085  * Default signature algorithm values used if signature algorithms not present.
1086  * From RFC5246. Note: order must match certificate index order.
1087  */
1088 static const uint16_t tls_default_sigalg[] = {
1089     TLSEXT_SIGALG_rsa_pkcs1_sha1, /* SSL_PKEY_RSA */
1090     0, /* SSL_PKEY_RSA_PSS_SIGN */
1091     TLSEXT_SIGALG_dsa_sha1, /* SSL_PKEY_DSA_SIGN */
1092     TLSEXT_SIGALG_ecdsa_sha1, /* SSL_PKEY_ECC */
1093     TLSEXT_SIGALG_gostr34102001_gostr3411, /* SSL_PKEY_GOST01 */
1094     TLSEXT_SIGALG_gostr34102012_256_intrinsic, /* SSL_PKEY_GOST12_256 */
1095     TLSEXT_SIGALG_gostr34102012_512_intrinsic, /* SSL_PKEY_GOST12_512 */
1096     0, /* SSL_PKEY_ED25519 */
1097     0, /* SSL_PKEY_ED448 */
1098 };
1099
1100 int ssl_setup_sig_algs(SSL_CTX *ctx)
1101 {
1102     size_t i;
1103     const SIGALG_LOOKUP *lu;
1104     SIGALG_LOOKUP *cache
1105         = OPENSSL_malloc(sizeof(*lu) * OSSL_NELEM(sigalg_lookup_tbl));
1106     EVP_PKEY *tmpkey = EVP_PKEY_new();
1107     int ret = 0;
1108
1109     if (cache == NULL || tmpkey == NULL)
1110         goto err;
1111
1112     ERR_set_mark();
1113     for (i = 0, lu = sigalg_lookup_tbl;
1114          i < OSSL_NELEM(sigalg_lookup_tbl); lu++, i++) {
1115         EVP_PKEY_CTX *pctx;
1116
1117         cache[i] = *lu;
1118
1119         /*
1120          * Check hash is available.
1121          * TODO(3.0): This test is not perfect. A provider could have support
1122          * for a signature scheme, but not a particular hash. However the hash
1123          * could be available from some other loaded provider. In that case it
1124          * could be that the signature is available, and the hash is available
1125          * independently - but not as a combination. We ignore this for now.
1126          */
1127         if (lu->hash != NID_undef
1128                 && ctx->ssl_digest_methods[lu->hash_idx] == NULL) {
1129             cache[i].enabled = 0;
1130             continue;
1131         }
1132
1133         if (!EVP_PKEY_set_type(tmpkey, lu->sig)) {
1134             cache[i].enabled = 0;
1135             continue;
1136         }
1137         pctx = EVP_PKEY_CTX_new_from_pkey(ctx->libctx, tmpkey, ctx->propq);
1138         /* If unable to create pctx we assume the sig algorithm is unavailable */
1139         if (pctx == NULL)
1140             cache[i].enabled = 0;
1141         EVP_PKEY_CTX_free(pctx);
1142     }
1143     ERR_pop_to_mark();
1144     ctx->sigalg_lookup_cache = cache;
1145     cache = NULL;
1146
1147     ret = 1;
1148  err:
1149     OPENSSL_free(cache);
1150     EVP_PKEY_free(tmpkey);
1151     return ret;
1152 }
1153
1154 /* Lookup TLS signature algorithm */
1155 static const SIGALG_LOOKUP *tls1_lookup_sigalg(const SSL *s, uint16_t sigalg)
1156 {
1157     size_t i;
1158     const SIGALG_LOOKUP *lu;
1159
1160     for (i = 0, lu = s->ctx->sigalg_lookup_cache;
1161          /* cache should have the same number of elements as sigalg_lookup_tbl */
1162          i < OSSL_NELEM(sigalg_lookup_tbl);
1163          lu++, i++) {
1164         if (lu->sigalg == sigalg)
1165             return lu;
1166     }
1167     return NULL;
1168 }
1169 /* Lookup hash: return 0 if invalid or not enabled */
1170 int tls1_lookup_md(SSL_CTX *ctx, const SIGALG_LOOKUP *lu, const EVP_MD **pmd)
1171 {
1172     const EVP_MD *md;
1173     if (lu == NULL)
1174         return 0;
1175     /* lu->hash == NID_undef means no associated digest */
1176     if (lu->hash == NID_undef) {
1177         md = NULL;
1178     } else {
1179         md = ssl_md(ctx, lu->hash_idx);
1180         if (md == NULL)
1181             return 0;
1182     }
1183     if (pmd)
1184         *pmd = md;
1185     return 1;
1186 }
1187
1188 /*
1189  * Check if key is large enough to generate RSA-PSS signature.
1190  *
1191  * The key must greater than or equal to 2 * hash length + 2.
1192  * SHA512 has a hash length of 64 bytes, which is incompatible
1193  * with a 128 byte (1024 bit) key.
1194  */
1195 #define RSA_PSS_MINIMUM_KEY_SIZE(md) (2 * EVP_MD_size(md) + 2)
1196 static int rsa_pss_check_min_key_size(SSL_CTX *ctx, const EVP_PKEY *pkey,
1197                                       const SIGALG_LOOKUP *lu)
1198 {
1199     const EVP_MD *md;
1200
1201     if (pkey == NULL)
1202         return 0;
1203     if (!tls1_lookup_md(ctx, lu, &md) || md == NULL)
1204         return 0;
1205     if (EVP_PKEY_size(pkey) < RSA_PSS_MINIMUM_KEY_SIZE(md))
1206         return 0;
1207     return 1;
1208 }
1209
1210 /*
1211  * Returns a signature algorithm when the peer did not send a list of supported
1212  * signature algorithms. The signature algorithm is fixed for the certificate
1213  * type. |idx| is a certificate type index (SSL_PKEY_*). When |idx| is -1 the
1214  * certificate type from |s| will be used.
1215  * Returns the signature algorithm to use, or NULL on error.
1216  */
1217 static const SIGALG_LOOKUP *tls1_get_legacy_sigalg(const SSL *s, int idx)
1218 {
1219     if (idx == -1) {
1220         if (s->server) {
1221             size_t i;
1222
1223             /* Work out index corresponding to ciphersuite */
1224             for (i = 0; i < SSL_PKEY_NUM; i++) {
1225                 const SSL_CERT_LOOKUP *clu = ssl_cert_lookup_by_idx(i);
1226
1227                 if (clu->amask & s->s3.tmp.new_cipher->algorithm_auth) {
1228                     idx = i;
1229                     break;
1230                 }
1231             }
1232
1233             /*
1234              * Some GOST ciphersuites allow more than one signature algorithms
1235              * */
1236             if (idx == SSL_PKEY_GOST01 && s->s3.tmp.new_cipher->algorithm_auth != SSL_aGOST01) {
1237                 int real_idx;
1238
1239                 for (real_idx = SSL_PKEY_GOST12_512; real_idx >= SSL_PKEY_GOST01;
1240                      real_idx--) {
1241                     if (s->cert->pkeys[real_idx].privatekey != NULL) {
1242                         idx = real_idx;
1243                         break;
1244                     }
1245                 }
1246             }
1247             /*
1248              * As both SSL_PKEY_GOST12_512 and SSL_PKEY_GOST12_256 indices can be used
1249              * with new (aGOST12-only) ciphersuites, we should find out which one is available really.
1250              */
1251             else if (idx == SSL_PKEY_GOST12_256) {
1252                 int real_idx;
1253
1254                 for (real_idx = SSL_PKEY_GOST12_512; real_idx >= SSL_PKEY_GOST12_256;
1255                      real_idx--) {
1256                      if (s->cert->pkeys[real_idx].privatekey != NULL) {
1257                          idx = real_idx;
1258                          break;
1259                      }
1260                 }
1261             }
1262         } else {
1263             idx = s->cert->key - s->cert->pkeys;
1264         }
1265     }
1266     if (idx < 0 || idx >= (int)OSSL_NELEM(tls_default_sigalg))
1267         return NULL;
1268     if (SSL_USE_SIGALGS(s) || idx != SSL_PKEY_RSA) {
1269         const SIGALG_LOOKUP *lu = tls1_lookup_sigalg(s, tls_default_sigalg[idx]);
1270
1271         if (!tls1_lookup_md(s->ctx, lu, NULL))
1272             return NULL;
1273         if (!tls12_sigalg_allowed(s, SSL_SECOP_SIGALG_SUPPORTED, lu))
1274             return NULL;
1275         return lu;
1276     }
1277     if (!tls12_sigalg_allowed(s, SSL_SECOP_SIGALG_SUPPORTED, &legacy_rsa_sigalg))
1278         return NULL;
1279     return &legacy_rsa_sigalg;
1280 }
1281 /* Set peer sigalg based key type */
1282 int tls1_set_peer_legacy_sigalg(SSL *s, const EVP_PKEY *pkey)
1283 {
1284     size_t idx;
1285     const SIGALG_LOOKUP *lu;
1286
1287     if (ssl_cert_lookup_by_pkey(pkey, &idx) == NULL)
1288         return 0;
1289     lu = tls1_get_legacy_sigalg(s, idx);
1290     if (lu == NULL)
1291         return 0;
1292     s->s3.tmp.peer_sigalg = lu;
1293     return 1;
1294 }
1295
1296 size_t tls12_get_psigalgs(SSL *s, int sent, const uint16_t **psigs)
1297 {
1298     /*
1299      * If Suite B mode use Suite B sigalgs only, ignore any other
1300      * preferences.
1301      */
1302 #ifndef OPENSSL_NO_EC
1303     switch (tls1_suiteb(s)) {
1304     case SSL_CERT_FLAG_SUITEB_128_LOS:
1305         *psigs = suiteb_sigalgs;
1306         return OSSL_NELEM(suiteb_sigalgs);
1307
1308     case SSL_CERT_FLAG_SUITEB_128_LOS_ONLY:
1309         *psigs = suiteb_sigalgs;
1310         return 1;
1311
1312     case SSL_CERT_FLAG_SUITEB_192_LOS:
1313         *psigs = suiteb_sigalgs + 1;
1314         return 1;
1315     }
1316 #endif
1317     /*
1318      *  We use client_sigalgs (if not NULL) if we're a server
1319      *  and sending a certificate request or if we're a client and
1320      *  determining which shared algorithm to use.
1321      */
1322     if ((s->server == sent) && s->cert->client_sigalgs != NULL) {
1323         *psigs = s->cert->client_sigalgs;
1324         return s->cert->client_sigalgslen;
1325     } else if (s->cert->conf_sigalgs) {
1326         *psigs = s->cert->conf_sigalgs;
1327         return s->cert->conf_sigalgslen;
1328     } else {
1329         *psigs = tls12_sigalgs;
1330         return OSSL_NELEM(tls12_sigalgs);
1331     }
1332 }
1333
1334 #ifndef OPENSSL_NO_EC
1335 /*
1336  * Called by servers only. Checks that we have a sig alg that supports the
1337  * specified EC curve.
1338  */
1339 int tls_check_sigalg_curve(const SSL *s, int curve)
1340 {
1341    const uint16_t *sigs;
1342    size_t siglen, i;
1343
1344     if (s->cert->conf_sigalgs) {
1345         sigs = s->cert->conf_sigalgs;
1346         siglen = s->cert->conf_sigalgslen;
1347     } else {
1348         sigs = tls12_sigalgs;
1349         siglen = OSSL_NELEM(tls12_sigalgs);
1350     }
1351
1352     for (i = 0; i < siglen; i++) {
1353         const SIGALG_LOOKUP *lu = tls1_lookup_sigalg(s, sigs[i]);
1354
1355         if (lu == NULL)
1356             continue;
1357         if (lu->sig == EVP_PKEY_EC
1358                 && lu->curve != NID_undef
1359                 && curve == lu->curve)
1360             return 1;
1361     }
1362
1363     return 0;
1364 }
1365 #endif
1366
1367 /*
1368  * Return the number of security bits for the signature algorithm, or 0 on
1369  * error.
1370  */
1371 static int sigalg_security_bits(SSL_CTX *ctx, const SIGALG_LOOKUP *lu)
1372 {
1373     const EVP_MD *md = NULL;
1374     int secbits = 0;
1375
1376     if (!tls1_lookup_md(ctx, lu, &md))
1377         return 0;
1378     if (md != NULL)
1379     {
1380         /* Security bits: half digest bits */
1381         secbits = EVP_MD_size(md) * 4;
1382     } else {
1383         /* Values from https://tools.ietf.org/html/rfc8032#section-8.5 */
1384         if (lu->sigalg == TLSEXT_SIGALG_ed25519)
1385             secbits = 128;
1386         else if (lu->sigalg == TLSEXT_SIGALG_ed448)
1387             secbits = 224;
1388     }
1389     return secbits;
1390 }
1391
1392 /*
1393  * Check signature algorithm is consistent with sent supported signature
1394  * algorithms and if so set relevant digest and signature scheme in
1395  * s.
1396  */
1397 int tls12_check_peer_sigalg(SSL *s, uint16_t sig, EVP_PKEY *pkey)
1398 {
1399     const uint16_t *sent_sigs;
1400     const EVP_MD *md = NULL;
1401     char sigalgstr[2];
1402     size_t sent_sigslen, i, cidx;
1403     int pkeyid = -1;
1404     const SIGALG_LOOKUP *lu;
1405     int secbits = 0;
1406
1407     pkeyid = EVP_PKEY_id(pkey);
1408     /* Should never happen */
1409     if (pkeyid == -1)
1410         return -1;
1411     if (SSL_IS_TLS13(s)) {
1412         /* Disallow DSA for TLS 1.3 */
1413         if (pkeyid == EVP_PKEY_DSA) {
1414             SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_F_TLS12_CHECK_PEER_SIGALG,
1415                      SSL_R_WRONG_SIGNATURE_TYPE);
1416             return 0;
1417         }
1418         /* Only allow PSS for TLS 1.3 */
1419         if (pkeyid == EVP_PKEY_RSA)
1420             pkeyid = EVP_PKEY_RSA_PSS;
1421     }
1422     lu = tls1_lookup_sigalg(s, sig);
1423     /*
1424      * Check sigalgs is known. Disallow SHA1/SHA224 with TLS 1.3. Check key type
1425      * is consistent with signature: RSA keys can be used for RSA-PSS
1426      */
1427     if (lu == NULL
1428         || (SSL_IS_TLS13(s) && (lu->hash == NID_sha1 || lu->hash == NID_sha224))
1429         || (pkeyid != lu->sig
1430         && (lu->sig != EVP_PKEY_RSA_PSS || pkeyid != EVP_PKEY_RSA))) {
1431         SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_F_TLS12_CHECK_PEER_SIGALG,
1432                  SSL_R_WRONG_SIGNATURE_TYPE);
1433         return 0;
1434     }
1435     /* Check the sigalg is consistent with the key OID */
1436     if (!ssl_cert_lookup_by_nid(EVP_PKEY_id(pkey), &cidx)
1437             || lu->sig_idx != (int)cidx) {
1438         SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_F_TLS12_CHECK_PEER_SIGALG,
1439                  SSL_R_WRONG_SIGNATURE_TYPE);
1440         return 0;
1441     }
1442
1443 #ifndef OPENSSL_NO_EC
1444     if (pkeyid == EVP_PKEY_EC) {
1445
1446         /* Check point compression is permitted */
1447         if (!tls1_check_pkey_comp(s, pkey)) {
1448             SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER,
1449                      SSL_F_TLS12_CHECK_PEER_SIGALG,
1450                      SSL_R_ILLEGAL_POINT_COMPRESSION);
1451             return 0;
1452         }
1453
1454         /* For TLS 1.3 or Suite B check curve matches signature algorithm */
1455         if (SSL_IS_TLS13(s) || tls1_suiteb(s)) {
1456             int curve = evp_pkey_get_EC_KEY_curve_nid(pkey);
1457
1458             if (lu->curve != NID_undef && curve != lu->curve) {
1459                 SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER,
1460                          SSL_F_TLS12_CHECK_PEER_SIGALG, SSL_R_WRONG_CURVE);
1461                 return 0;
1462             }
1463         }
1464         if (!SSL_IS_TLS13(s)) {
1465             /* Check curve matches extensions */
1466             if (!tls1_check_group_id(s, tls1_get_group_id(pkey), 1)) {
1467                 SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER,
1468                          SSL_F_TLS12_CHECK_PEER_SIGALG, SSL_R_WRONG_CURVE);
1469                 return 0;
1470             }
1471             if (tls1_suiteb(s)) {
1472                 /* Check sigalg matches a permissible Suite B value */
1473                 if (sig != TLSEXT_SIGALG_ecdsa_secp256r1_sha256
1474                     && sig != TLSEXT_SIGALG_ecdsa_secp384r1_sha384) {
1475                     SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE,
1476                              SSL_F_TLS12_CHECK_PEER_SIGALG,
1477                              SSL_R_WRONG_SIGNATURE_TYPE);
1478                     return 0;
1479                 }
1480             }
1481         }
1482     } else if (tls1_suiteb(s)) {
1483         SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_F_TLS12_CHECK_PEER_SIGALG,
1484                  SSL_R_WRONG_SIGNATURE_TYPE);
1485         return 0;
1486     }
1487 #endif
1488
1489     /* Check signature matches a type we sent */
1490     sent_sigslen = tls12_get_psigalgs(s, 1, &sent_sigs);
1491     for (i = 0; i < sent_sigslen; i++, sent_sigs++) {
1492         if (sig == *sent_sigs)
1493             break;
1494     }
1495     /* Allow fallback to SHA1 if not strict mode */
1496     if (i == sent_sigslen && (lu->hash != NID_sha1
1497         || s->cert->cert_flags & SSL_CERT_FLAGS_CHECK_TLS_STRICT)) {
1498         SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_F_TLS12_CHECK_PEER_SIGALG,
1499                  SSL_R_WRONG_SIGNATURE_TYPE);
1500         return 0;
1501     }
1502     if (!tls1_lookup_md(s->ctx, lu, &md)) {
1503         SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_F_TLS12_CHECK_PEER_SIGALG,
1504                  SSL_R_UNKNOWN_DIGEST);
1505         return 0;
1506     }
1507     /*
1508      * Make sure security callback allows algorithm. For historical
1509      * reasons we have to pass the sigalg as a two byte char array.
1510      */
1511     sigalgstr[0] = (sig >> 8) & 0xff;
1512     sigalgstr[1] = sig & 0xff;
1513     secbits = sigalg_security_bits(s->ctx, lu);
1514     if (secbits == 0 ||
1515         !ssl_security(s, SSL_SECOP_SIGALG_CHECK, secbits,
1516                       md != NULL ? EVP_MD_type(md) : NID_undef,
1517                       (void *)sigalgstr)) {
1518         SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_F_TLS12_CHECK_PEER_SIGALG,
1519                  SSL_R_WRONG_SIGNATURE_TYPE);
1520         return 0;
1521     }
1522     /* Store the sigalg the peer uses */
1523     s->s3.tmp.peer_sigalg = lu;
1524     return 1;
1525 }
1526
1527 int SSL_get_peer_signature_type_nid(const SSL *s, int *pnid)
1528 {
1529     if (s->s3.tmp.peer_sigalg == NULL)
1530         return 0;
1531     *pnid = s->s3.tmp.peer_sigalg->sig;
1532     return 1;
1533 }
1534
1535 int SSL_get_signature_type_nid(const SSL *s, int *pnid)
1536 {
1537     if (s->s3.tmp.sigalg == NULL)
1538         return 0;
1539     *pnid = s->s3.tmp.sigalg->sig;
1540     return 1;
1541 }
1542
1543 /*
1544  * Set a mask of disabled algorithms: an algorithm is disabled if it isn't
1545  * supported, doesn't appear in supported signature algorithms, isn't supported
1546  * by the enabled protocol versions or by the security level.
1547  *
1548  * This function should only be used for checking which ciphers are supported
1549  * by the client.
1550  *
1551  * Call ssl_cipher_disabled() to check that it's enabled or not.
1552  */
1553 int ssl_set_client_disabled(SSL *s)
1554 {
1555     s->s3.tmp.mask_a = 0;
1556     s->s3.tmp.mask_k = 0;
1557     ssl_set_sig_mask(&s->s3.tmp.mask_a, s, SSL_SECOP_SIGALG_MASK);
1558     if (ssl_get_min_max_version(s, &s->s3.tmp.min_ver,
1559                                 &s->s3.tmp.max_ver, NULL) != 0)
1560         return 0;
1561 #ifndef OPENSSL_NO_PSK
1562     /* with PSK there must be client callback set */
1563     if (!s->psk_client_callback) {
1564         s->s3.tmp.mask_a |= SSL_aPSK;
1565         s->s3.tmp.mask_k |= SSL_PSK;
1566     }
1567 #endif                          /* OPENSSL_NO_PSK */
1568 #ifndef OPENSSL_NO_SRP
1569     if (!(s->srp_ctx.srp_Mask & SSL_kSRP)) {
1570         s->s3.tmp.mask_a |= SSL_aSRP;
1571         s->s3.tmp.mask_k |= SSL_kSRP;
1572     }
1573 #endif
1574     return 1;
1575 }
1576
1577 /*
1578  * ssl_cipher_disabled - check that a cipher is disabled or not
1579  * @s: SSL connection that you want to use the cipher on
1580  * @c: cipher to check
1581  * @op: Security check that you want to do
1582  * @ecdhe: If set to 1 then TLSv1 ECDHE ciphers are also allowed in SSLv3
1583  *
1584  * Returns 1 when it's disabled, 0 when enabled.
1585  */
1586 int ssl_cipher_disabled(const SSL *s, const SSL_CIPHER *c, int op, int ecdhe)
1587 {
1588     if (c->algorithm_mkey & s->s3.tmp.mask_k
1589         || c->algorithm_auth & s->s3.tmp.mask_a)
1590         return 1;
1591     if (s->s3.tmp.max_ver == 0)
1592         return 1;
1593     if (!SSL_IS_DTLS(s)) {
1594         int min_tls = c->min_tls;
1595
1596         /*
1597          * For historical reasons we will allow ECHDE to be selected by a server
1598          * in SSLv3 if we are a client
1599          */
1600         if (min_tls == TLS1_VERSION && ecdhe
1601                 && (c->algorithm_mkey & (SSL_kECDHE | SSL_kECDHEPSK)) != 0)
1602             min_tls = SSL3_VERSION;
1603
1604         if ((min_tls > s->s3.tmp.max_ver) || (c->max_tls < s->s3.tmp.min_ver))
1605             return 1;
1606     }
1607     if (SSL_IS_DTLS(s) && (DTLS_VERSION_GT(c->min_dtls, s->s3.tmp.max_ver)
1608                            || DTLS_VERSION_LT(c->max_dtls, s->s3.tmp.min_ver)))
1609         return 1;
1610
1611     return !ssl_security(s, op, c->strength_bits, 0, (void *)c);
1612 }
1613
1614 int tls_use_ticket(SSL *s)
1615 {
1616     if ((s->options & SSL_OP_NO_TICKET))
1617         return 0;
1618     return ssl_security(s, SSL_SECOP_TICKET, 0, 0, NULL);
1619 }
1620
1621 int tls1_set_server_sigalgs(SSL *s)
1622 {
1623     size_t i;
1624
1625     /* Clear any shared signature algorithms */
1626     OPENSSL_free(s->shared_sigalgs);
1627     s->shared_sigalgs = NULL;
1628     s->shared_sigalgslen = 0;
1629     /* Clear certificate validity flags */
1630     for (i = 0; i < SSL_PKEY_NUM; i++)
1631         s->s3.tmp.valid_flags[i] = 0;
1632     /*
1633      * If peer sent no signature algorithms check to see if we support
1634      * the default algorithm for each certificate type
1635      */
1636     if (s->s3.tmp.peer_cert_sigalgs == NULL
1637             && s->s3.tmp.peer_sigalgs == NULL) {
1638         const uint16_t *sent_sigs;
1639         size_t sent_sigslen = tls12_get_psigalgs(s, 1, &sent_sigs);
1640
1641         for (i = 0; i < SSL_PKEY_NUM; i++) {
1642             const SIGALG_LOOKUP *lu = tls1_get_legacy_sigalg(s, i);
1643             size_t j;
1644
1645             if (lu == NULL)
1646                 continue;
1647             /* Check default matches a type we sent */
1648             for (j = 0; j < sent_sigslen; j++) {
1649                 if (lu->sigalg == sent_sigs[j]) {
1650                         s->s3.tmp.valid_flags[i] = CERT_PKEY_SIGN;
1651                         break;
1652                 }
1653             }
1654         }
1655         return 1;
1656     }
1657
1658     if (!tls1_process_sigalgs(s)) {
1659         SSLfatal(s, SSL_AD_INTERNAL_ERROR,
1660                  SSL_F_TLS1_SET_SERVER_SIGALGS, ERR_R_INTERNAL_ERROR);
1661         return 0;
1662     }
1663     if (s->shared_sigalgs != NULL)
1664         return 1;
1665
1666     /* Fatal error if no shared signature algorithms */
1667     SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_F_TLS1_SET_SERVER_SIGALGS,
1668              SSL_R_NO_SHARED_SIGNATURE_ALGORITHMS);
1669     return 0;
1670 }
1671
1672 /*-
1673  * Gets the ticket information supplied by the client if any.
1674  *
1675  *   hello: The parsed ClientHello data
1676  *   ret: (output) on return, if a ticket was decrypted, then this is set to
1677  *       point to the resulting session.
1678  */
1679 SSL_TICKET_STATUS tls_get_ticket_from_client(SSL *s, CLIENTHELLO_MSG *hello,
1680                                              SSL_SESSION **ret)
1681 {
1682     size_t size;
1683     RAW_EXTENSION *ticketext;
1684
1685     *ret = NULL;
1686     s->ext.ticket_expected = 0;
1687
1688     /*
1689      * If tickets disabled or not supported by the protocol version
1690      * (e.g. TLSv1.3) behave as if no ticket present to permit stateful
1691      * resumption.
1692      */
1693     if (s->version <= SSL3_VERSION || !tls_use_ticket(s))
1694         return SSL_TICKET_NONE;
1695
1696     ticketext = &hello->pre_proc_exts[TLSEXT_IDX_session_ticket];
1697     if (!ticketext->present)
1698         return SSL_TICKET_NONE;
1699
1700     size = PACKET_remaining(&ticketext->data);
1701
1702     return tls_decrypt_ticket(s, PACKET_data(&ticketext->data), size,
1703                               hello->session_id, hello->session_id_len, ret);
1704 }
1705
1706 /*-
1707  * tls_decrypt_ticket attempts to decrypt a session ticket.
1708  *
1709  * If s->tls_session_secret_cb is set and we're not doing TLSv1.3 then we are
1710  * expecting a pre-shared key ciphersuite, in which case we have no use for
1711  * session tickets and one will never be decrypted, nor will
1712  * s->ext.ticket_expected be set to 1.
1713  *
1714  * Side effects:
1715  *   Sets s->ext.ticket_expected to 1 if the server will have to issue
1716  *   a new session ticket to the client because the client indicated support
1717  *   (and s->tls_session_secret_cb is NULL) but the client either doesn't have
1718  *   a session ticket or we couldn't use the one it gave us, or if
1719  *   s->ctx->ext.ticket_key_cb asked to renew the client's ticket.
1720  *   Otherwise, s->ext.ticket_expected is set to 0.
1721  *
1722  *   etick: points to the body of the session ticket extension.
1723  *   eticklen: the length of the session tickets extension.
1724  *   sess_id: points at the session ID.
1725  *   sesslen: the length of the session ID.
1726  *   psess: (output) on return, if a ticket was decrypted, then this is set to
1727  *       point to the resulting session.
1728  */
1729 SSL_TICKET_STATUS tls_decrypt_ticket(SSL *s, const unsigned char *etick,
1730                                      size_t eticklen, const unsigned char *sess_id,
1731                                      size_t sesslen, SSL_SESSION **psess)
1732 {
1733     SSL_SESSION *sess = NULL;
1734     unsigned char *sdec;
1735     const unsigned char *p;
1736     int slen, renew_ticket = 0, declen;
1737     SSL_TICKET_STATUS ret = SSL_TICKET_FATAL_ERR_OTHER;
1738     size_t mlen;
1739     unsigned char tick_hmac[EVP_MAX_MD_SIZE];
1740     SSL_HMAC *hctx = NULL;
1741     EVP_CIPHER_CTX *ctx = NULL;
1742     SSL_CTX *tctx = s->session_ctx;
1743
1744     if (eticklen == 0) {
1745         /*
1746          * The client will accept a ticket but doesn't currently have
1747          * one (TLSv1.2 and below), or treated as a fatal error in TLSv1.3
1748          */
1749         ret = SSL_TICKET_EMPTY;
1750         goto end;
1751     }
1752     if (!SSL_IS_TLS13(s) && s->ext.session_secret_cb) {
1753         /*
1754          * Indicate that the ticket couldn't be decrypted rather than
1755          * generating the session from ticket now, trigger
1756          * abbreviated handshake based on external mechanism to
1757          * calculate the master secret later.
1758          */
1759         ret = SSL_TICKET_NO_DECRYPT;
1760         goto end;
1761     }
1762
1763     /* Need at least keyname + iv */
1764     if (eticklen < TLSEXT_KEYNAME_LENGTH + EVP_MAX_IV_LENGTH) {
1765         ret = SSL_TICKET_NO_DECRYPT;
1766         goto end;
1767     }
1768
1769     /* Initialize session ticket encryption and HMAC contexts */
1770     hctx = ssl_hmac_new(tctx);
1771     if (hctx == NULL) {
1772         ret = SSL_TICKET_FATAL_ERR_MALLOC;
1773         goto end;
1774     }
1775     ctx = EVP_CIPHER_CTX_new();
1776     if (ctx == NULL) {
1777         ret = SSL_TICKET_FATAL_ERR_MALLOC;
1778         goto end;
1779     }
1780 #ifndef OPENSSL_NO_DEPRECATED_3_0
1781     if (tctx->ext.ticket_key_evp_cb != NULL || tctx->ext.ticket_key_cb != NULL)
1782 #else
1783     if (tctx->ext.ticket_key_evp_cb != NULL)
1784 #endif
1785     {
1786         unsigned char *nctick = (unsigned char *)etick;
1787         int rv = 0;
1788
1789         if (tctx->ext.ticket_key_evp_cb != NULL)
1790             rv = tctx->ext.ticket_key_evp_cb(s, nctick,
1791                                              nctick + TLSEXT_KEYNAME_LENGTH,
1792                                              ctx,
1793                                              ssl_hmac_get0_EVP_MAC_CTX(hctx),
1794                                              0);
1795 #ifndef OPENSSL_NO_DEPRECATED_3_0
1796         else if (tctx->ext.ticket_key_cb != NULL)
1797             /* if 0 is returned, write an empty ticket */
1798             rv = tctx->ext.ticket_key_cb(s, nctick,
1799                                          nctick + TLSEXT_KEYNAME_LENGTH,
1800                                          ctx, ssl_hmac_get0_HMAC_CTX(hctx), 0);
1801 #endif
1802         if (rv < 0) {
1803             ret = SSL_TICKET_FATAL_ERR_OTHER;
1804             goto end;
1805         }
1806         if (rv == 0) {
1807             ret = SSL_TICKET_NO_DECRYPT;
1808             goto end;
1809         }
1810         if (rv == 2)
1811             renew_ticket = 1;
1812     } else {
1813         EVP_CIPHER *aes256cbc = NULL;
1814
1815         /* Check key name matches */
1816         if (memcmp(etick, tctx->ext.tick_key_name,
1817                    TLSEXT_KEYNAME_LENGTH) != 0) {
1818             ret = SSL_TICKET_NO_DECRYPT;
1819             goto end;
1820         }
1821
1822         aes256cbc = EVP_CIPHER_fetch(s->ctx->libctx, "AES-256-CBC",
1823                                      s->ctx->propq);
1824         if (aes256cbc == NULL
1825             || ssl_hmac_init(hctx, tctx->ext.secure->tick_hmac_key,
1826                              sizeof(tctx->ext.secure->tick_hmac_key),
1827                              "SHA256") <= 0
1828             || EVP_DecryptInit_ex(ctx, aes256cbc, NULL,
1829                                   tctx->ext.secure->tick_aes_key,
1830                                   etick + TLSEXT_KEYNAME_LENGTH) <= 0) {
1831             EVP_CIPHER_free(aes256cbc);
1832             ret = SSL_TICKET_FATAL_ERR_OTHER;
1833             goto end;
1834         }
1835         EVP_CIPHER_free(aes256cbc);
1836         if (SSL_IS_TLS13(s))
1837             renew_ticket = 1;
1838     }
1839     /*
1840      * Attempt to process session ticket, first conduct sanity and integrity
1841      * checks on ticket.
1842      */
1843     mlen = ssl_hmac_size(hctx);
1844     if (mlen == 0) {
1845         ret = SSL_TICKET_FATAL_ERR_OTHER;
1846         goto end;
1847     }
1848
1849     /* Sanity check ticket length: must exceed keyname + IV + HMAC */
1850     if (eticklen <=
1851         TLSEXT_KEYNAME_LENGTH + EVP_CIPHER_CTX_iv_length(ctx) + mlen) {
1852         ret = SSL_TICKET_NO_DECRYPT;
1853         goto end;
1854     }
1855     eticklen -= mlen;
1856     /* Check HMAC of encrypted ticket */
1857     if (ssl_hmac_update(hctx, etick, eticklen) <= 0
1858         || ssl_hmac_final(hctx, tick_hmac, NULL, sizeof(tick_hmac)) <= 0) {
1859         ret = SSL_TICKET_FATAL_ERR_OTHER;
1860         goto end;
1861     }
1862
1863     if (CRYPTO_memcmp(tick_hmac, etick + eticklen, mlen)) {
1864         ret = SSL_TICKET_NO_DECRYPT;
1865         goto end;
1866     }
1867     /* Attempt to decrypt session data */
1868     /* Move p after IV to start of encrypted ticket, update length */
1869     p = etick + TLSEXT_KEYNAME_LENGTH + EVP_CIPHER_CTX_iv_length(ctx);
1870     eticklen -= TLSEXT_KEYNAME_LENGTH + EVP_CIPHER_CTX_iv_length(ctx);
1871     sdec = OPENSSL_malloc(eticklen);
1872     if (sdec == NULL || EVP_DecryptUpdate(ctx, sdec, &slen, p,
1873                                           (int)eticklen) <= 0) {
1874         OPENSSL_free(sdec);
1875         ret = SSL_TICKET_FATAL_ERR_OTHER;
1876         goto end;
1877     }
1878     if (EVP_DecryptFinal(ctx, sdec + slen, &declen) <= 0) {
1879         OPENSSL_free(sdec);
1880         ret = SSL_TICKET_NO_DECRYPT;
1881         goto end;
1882     }
1883     slen += declen;
1884     p = sdec;
1885
1886     sess = d2i_SSL_SESSION(NULL, &p, slen);
1887     slen -= p - sdec;
1888     OPENSSL_free(sdec);
1889     if (sess) {
1890         /* Some additional consistency checks */
1891         if (slen != 0) {
1892             SSL_SESSION_free(sess);
1893             sess = NULL;
1894             ret = SSL_TICKET_NO_DECRYPT;
1895             goto end;
1896         }
1897         /*
1898          * The session ID, if non-empty, is used by some clients to detect
1899          * that the ticket has been accepted. So we copy it to the session
1900          * structure. If it is empty set length to zero as required by
1901          * standard.
1902          */
1903         if (sesslen) {
1904             memcpy(sess->session_id, sess_id, sesslen);
1905             sess->session_id_length = sesslen;
1906         }
1907         if (renew_ticket)
1908             ret = SSL_TICKET_SUCCESS_RENEW;
1909         else
1910             ret = SSL_TICKET_SUCCESS;
1911         goto end;
1912     }
1913     ERR_clear_error();
1914     /*
1915      * For session parse failure, indicate that we need to send a new ticket.
1916      */
1917     ret = SSL_TICKET_NO_DECRYPT;
1918
1919  end:
1920     EVP_CIPHER_CTX_free(ctx);
1921     ssl_hmac_free(hctx);
1922
1923     /*
1924      * If set, the decrypt_ticket_cb() is called unless a fatal error was
1925      * detected above. The callback is responsible for checking |ret| before it
1926      * performs any action
1927      */
1928     if (s->session_ctx->decrypt_ticket_cb != NULL
1929             && (ret == SSL_TICKET_EMPTY
1930                 || ret == SSL_TICKET_NO_DECRYPT
1931                 || ret == SSL_TICKET_SUCCESS
1932                 || ret == SSL_TICKET_SUCCESS_RENEW)) {
1933         size_t keyname_len = eticklen;
1934         int retcb;
1935
1936         if (keyname_len > TLSEXT_KEYNAME_LENGTH)
1937             keyname_len = TLSEXT_KEYNAME_LENGTH;
1938         retcb = s->session_ctx->decrypt_ticket_cb(s, sess, etick, keyname_len,
1939                                                   ret,
1940                                                   s->session_ctx->ticket_cb_data);
1941         switch (retcb) {
1942         case SSL_TICKET_RETURN_ABORT:
1943             ret = SSL_TICKET_FATAL_ERR_OTHER;
1944             break;
1945
1946         case SSL_TICKET_RETURN_IGNORE:
1947             ret = SSL_TICKET_NONE;
1948             SSL_SESSION_free(sess);
1949             sess = NULL;
1950             break;
1951
1952         case SSL_TICKET_RETURN_IGNORE_RENEW:
1953             if (ret != SSL_TICKET_EMPTY && ret != SSL_TICKET_NO_DECRYPT)
1954                 ret = SSL_TICKET_NO_DECRYPT;
1955             /* else the value of |ret| will already do the right thing */
1956             SSL_SESSION_free(sess);
1957             sess = NULL;
1958             break;
1959
1960         case SSL_TICKET_RETURN_USE:
1961         case SSL_TICKET_RETURN_USE_RENEW:
1962             if (ret != SSL_TICKET_SUCCESS
1963                     && ret != SSL_TICKET_SUCCESS_RENEW)
1964                 ret = SSL_TICKET_FATAL_ERR_OTHER;
1965             else if (retcb == SSL_TICKET_RETURN_USE)
1966                 ret = SSL_TICKET_SUCCESS;
1967             else
1968                 ret = SSL_TICKET_SUCCESS_RENEW;
1969             break;
1970
1971         default:
1972             ret = SSL_TICKET_FATAL_ERR_OTHER;
1973         }
1974     }
1975
1976     if (s->ext.session_secret_cb == NULL || SSL_IS_TLS13(s)) {
1977         switch (ret) {
1978         case SSL_TICKET_NO_DECRYPT:
1979         case SSL_TICKET_SUCCESS_RENEW:
1980         case SSL_TICKET_EMPTY:
1981             s->ext.ticket_expected = 1;
1982         }
1983     }
1984
1985     *psess = sess;
1986
1987     return ret;
1988 }
1989
1990 /* Check to see if a signature algorithm is allowed */
1991 static int tls12_sigalg_allowed(const SSL *s, int op, const SIGALG_LOOKUP *lu)
1992 {
1993     unsigned char sigalgstr[2];
1994     int secbits;
1995
1996     if (lu == NULL || !lu->enabled)
1997         return 0;
1998     /* DSA is not allowed in TLS 1.3 */
1999     if (SSL_IS_TLS13(s) && lu->sig == EVP_PKEY_DSA)
2000         return 0;
2001     /* TODO(OpenSSL1.2) fully axe DSA/etc. in ClientHello per TLS 1.3 spec */
2002     if (!s->server && !SSL_IS_DTLS(s) && s->s3.tmp.min_ver >= TLS1_3_VERSION
2003         && (lu->sig == EVP_PKEY_DSA || lu->hash_idx == SSL_MD_SHA1_IDX
2004             || lu->hash_idx == SSL_MD_MD5_IDX
2005             || lu->hash_idx == SSL_MD_SHA224_IDX))
2006         return 0;
2007
2008     /* See if public key algorithm allowed */
2009     if (ssl_cert_is_disabled(lu->sig_idx))
2010         return 0;
2011
2012     if (lu->sig == NID_id_GostR3410_2012_256
2013             || lu->sig == NID_id_GostR3410_2012_512
2014             || lu->sig == NID_id_GostR3410_2001) {
2015         /* We never allow GOST sig algs on the server with TLSv1.3 */
2016         if (s->server && SSL_IS_TLS13(s))
2017             return 0;
2018         if (!s->server
2019                 && s->method->version == TLS_ANY_VERSION
2020                 && s->s3.tmp.max_ver >= TLS1_3_VERSION) {
2021             int i, num;
2022             STACK_OF(SSL_CIPHER) *sk;
2023
2024             /*
2025              * We're a client that could negotiate TLSv1.3. We only allow GOST
2026              * sig algs if we could negotiate TLSv1.2 or below and we have GOST
2027              * ciphersuites enabled.
2028              */
2029
2030             if (s->s3.tmp.min_ver >= TLS1_3_VERSION)
2031                 return 0;
2032
2033             sk = SSL_get_ciphers(s);
2034             num = sk != NULL ? sk_SSL_CIPHER_num(sk) : 0;
2035             for (i = 0; i < num; i++) {
2036                 const SSL_CIPHER *c;
2037
2038                 c = sk_SSL_CIPHER_value(sk, i);
2039                 /* Skip disabled ciphers */
2040                 if (ssl_cipher_disabled(s, c, SSL_SECOP_CIPHER_SUPPORTED, 0))
2041                     continue;
2042
2043                 if ((c->algorithm_mkey & (SSL_kGOST | SSL_kGOST18)) != 0)
2044                     break;
2045             }
2046             if (i == num)
2047                 return 0;
2048         }
2049     }
2050
2051     /* Finally see if security callback allows it */
2052     secbits = sigalg_security_bits(s->ctx, lu);
2053     sigalgstr[0] = (lu->sigalg >> 8) & 0xff;
2054     sigalgstr[1] = lu->sigalg & 0xff;
2055     return ssl_security(s, op, secbits, lu->hash, (void *)sigalgstr);
2056 }
2057
2058 /*
2059  * Get a mask of disabled public key algorithms based on supported signature
2060  * algorithms. For example if no signature algorithm supports RSA then RSA is
2061  * disabled.
2062  */
2063
2064 void ssl_set_sig_mask(uint32_t *pmask_a, SSL *s, int op)
2065 {
2066     const uint16_t *sigalgs;
2067     size_t i, sigalgslen;
2068     uint32_t disabled_mask = SSL_aRSA | SSL_aDSS | SSL_aECDSA;
2069     /*
2070      * Go through all signature algorithms seeing if we support any
2071      * in disabled_mask.
2072      */
2073     sigalgslen = tls12_get_psigalgs(s, 1, &sigalgs);
2074     for (i = 0; i < sigalgslen; i++, sigalgs++) {
2075         const SIGALG_LOOKUP *lu = tls1_lookup_sigalg(s, *sigalgs);
2076         const SSL_CERT_LOOKUP *clu;
2077
2078         if (lu == NULL)
2079             continue;
2080
2081         clu = ssl_cert_lookup_by_idx(lu->sig_idx);
2082         if (clu == NULL)
2083                 continue;
2084
2085         /* If algorithm is disabled see if we can enable it */
2086         if ((clu->amask & disabled_mask) != 0
2087                 && tls12_sigalg_allowed(s, op, lu))
2088             disabled_mask &= ~clu->amask;
2089     }
2090     *pmask_a |= disabled_mask;
2091 }
2092
2093 int tls12_copy_sigalgs(SSL *s, WPACKET *pkt,
2094                        const uint16_t *psig, size_t psiglen)
2095 {
2096     size_t i;
2097     int rv = 0;
2098
2099     for (i = 0; i < psiglen; i++, psig++) {
2100         const SIGALG_LOOKUP *lu = tls1_lookup_sigalg(s, *psig);
2101
2102         if (!tls12_sigalg_allowed(s, SSL_SECOP_SIGALG_SUPPORTED, lu))
2103             continue;
2104         if (!WPACKET_put_bytes_u16(pkt, *psig))
2105             return 0;
2106         /*
2107          * If TLS 1.3 must have at least one valid TLS 1.3 message
2108          * signing algorithm: i.e. neither RSA nor SHA1/SHA224
2109          */
2110         if (rv == 0 && (!SSL_IS_TLS13(s)
2111             || (lu->sig != EVP_PKEY_RSA
2112                 && lu->hash != NID_sha1
2113                 && lu->hash != NID_sha224)))
2114             rv = 1;
2115     }
2116     if (rv == 0)
2117         SSLerr(SSL_F_TLS12_COPY_SIGALGS, SSL_R_NO_SUITABLE_SIGNATURE_ALGORITHM);
2118     return rv;
2119 }
2120
2121 /* Given preference and allowed sigalgs set shared sigalgs */
2122 static size_t tls12_shared_sigalgs(SSL *s, const SIGALG_LOOKUP **shsig,
2123                                    const uint16_t *pref, size_t preflen,
2124                                    const uint16_t *allow, size_t allowlen)
2125 {
2126     const uint16_t *ptmp, *atmp;
2127     size_t i, j, nmatch = 0;
2128     for (i = 0, ptmp = pref; i < preflen; i++, ptmp++) {
2129         const SIGALG_LOOKUP *lu = tls1_lookup_sigalg(s, *ptmp);
2130
2131         /* Skip disabled hashes or signature algorithms */
2132         if (!tls12_sigalg_allowed(s, SSL_SECOP_SIGALG_SHARED, lu))
2133             continue;
2134         for (j = 0, atmp = allow; j < allowlen; j++, atmp++) {
2135             if (*ptmp == *atmp) {
2136                 nmatch++;
2137                 if (shsig)
2138                     *shsig++ = lu;
2139                 break;
2140             }
2141         }
2142     }
2143     return nmatch;
2144 }
2145
2146 /* Set shared signature algorithms for SSL structures */
2147 static int tls1_set_shared_sigalgs(SSL *s)
2148 {
2149     const uint16_t *pref, *allow, *conf;
2150     size_t preflen, allowlen, conflen;
2151     size_t nmatch;
2152     const SIGALG_LOOKUP **salgs = NULL;
2153     CERT *c = s->cert;
2154     unsigned int is_suiteb = tls1_suiteb(s);
2155
2156     OPENSSL_free(s->shared_sigalgs);
2157     s->shared_sigalgs = NULL;
2158     s->shared_sigalgslen = 0;
2159     /* If client use client signature algorithms if not NULL */
2160     if (!s->server && c->client_sigalgs && !is_suiteb) {
2161         conf = c->client_sigalgs;
2162         conflen = c->client_sigalgslen;
2163     } else if (c->conf_sigalgs && !is_suiteb) {
2164         conf = c->conf_sigalgs;
2165         conflen = c->conf_sigalgslen;
2166     } else
2167         conflen = tls12_get_psigalgs(s, 0, &conf);
2168     if (s->options & SSL_OP_CIPHER_SERVER_PREFERENCE || is_suiteb) {
2169         pref = conf;
2170         preflen = conflen;
2171         allow = s->s3.tmp.peer_sigalgs;
2172         allowlen = s->s3.tmp.peer_sigalgslen;
2173     } else {
2174         allow = conf;
2175         allowlen = conflen;
2176         pref = s->s3.tmp.peer_sigalgs;
2177         preflen = s->s3.tmp.peer_sigalgslen;
2178     }
2179     nmatch = tls12_shared_sigalgs(s, NULL, pref, preflen, allow, allowlen);
2180     if (nmatch) {
2181         if ((salgs = OPENSSL_malloc(nmatch * sizeof(*salgs))) == NULL) {
2182             SSLerr(SSL_F_TLS1_SET_SHARED_SIGALGS, ERR_R_MALLOC_FAILURE);
2183             return 0;
2184         }
2185         nmatch = tls12_shared_sigalgs(s, salgs, pref, preflen, allow, allowlen);
2186     } else {
2187         salgs = NULL;
2188     }
2189     s->shared_sigalgs = salgs;
2190     s->shared_sigalgslen = nmatch;
2191     return 1;
2192 }
2193
2194 int tls1_save_u16(PACKET *pkt, uint16_t **pdest, size_t *pdestlen)
2195 {
2196     unsigned int stmp;
2197     size_t size, i;
2198     uint16_t *buf;
2199
2200     size = PACKET_remaining(pkt);
2201
2202     /* Invalid data length */
2203     if (size == 0 || (size & 1) != 0)
2204         return 0;
2205
2206     size >>= 1;
2207
2208     if ((buf = OPENSSL_malloc(size * sizeof(*buf))) == NULL)  {
2209         SSLerr(SSL_F_TLS1_SAVE_U16, ERR_R_MALLOC_FAILURE);
2210         return 0;
2211     }
2212     for (i = 0; i < size && PACKET_get_net_2(pkt, &stmp); i++)
2213         buf[i] = stmp;
2214
2215     if (i != size) {
2216         OPENSSL_free(buf);
2217         return 0;
2218     }
2219
2220     OPENSSL_free(*pdest);
2221     *pdest = buf;
2222     *pdestlen = size;
2223
2224     return 1;
2225 }
2226
2227 int tls1_save_sigalgs(SSL *s, PACKET *pkt, int cert)
2228 {
2229     /* Extension ignored for inappropriate versions */
2230     if (!SSL_USE_SIGALGS(s))
2231         return 1;
2232     /* Should never happen */
2233     if (s->cert == NULL)
2234         return 0;
2235
2236     if (cert)
2237         return tls1_save_u16(pkt, &s->s3.tmp.peer_cert_sigalgs,
2238                              &s->s3.tmp.peer_cert_sigalgslen);
2239     else
2240         return tls1_save_u16(pkt, &s->s3.tmp.peer_sigalgs,
2241                              &s->s3.tmp.peer_sigalgslen);
2242
2243 }
2244
2245 /* Set preferred digest for each key type */
2246
2247 int tls1_process_sigalgs(SSL *s)
2248 {
2249     size_t i;
2250     uint32_t *pvalid = s->s3.tmp.valid_flags;
2251
2252     if (!tls1_set_shared_sigalgs(s))
2253         return 0;
2254
2255     for (i = 0; i < SSL_PKEY_NUM; i++)
2256         pvalid[i] = 0;
2257
2258     for (i = 0; i < s->shared_sigalgslen; i++) {
2259         const SIGALG_LOOKUP *sigptr = s->shared_sigalgs[i];
2260         int idx = sigptr->sig_idx;
2261
2262         /* Ignore PKCS1 based sig algs in TLSv1.3 */
2263         if (SSL_IS_TLS13(s) && sigptr->sig == EVP_PKEY_RSA)
2264             continue;
2265         /* If not disabled indicate we can explicitly sign */
2266         if (pvalid[idx] == 0 && !ssl_cert_is_disabled(idx))
2267             pvalid[idx] = CERT_PKEY_EXPLICIT_SIGN | CERT_PKEY_SIGN;
2268     }
2269     return 1;
2270 }
2271
2272 int SSL_get_sigalgs(SSL *s, int idx,
2273                     int *psign, int *phash, int *psignhash,
2274                     unsigned char *rsig, unsigned char *rhash)
2275 {
2276     uint16_t *psig = s->s3.tmp.peer_sigalgs;
2277     size_t numsigalgs = s->s3.tmp.peer_sigalgslen;
2278     if (psig == NULL || numsigalgs > INT_MAX)
2279         return 0;
2280     if (idx >= 0) {
2281         const SIGALG_LOOKUP *lu;
2282
2283         if (idx >= (int)numsigalgs)
2284             return 0;
2285         psig += idx;
2286         if (rhash != NULL)
2287             *rhash = (unsigned char)((*psig >> 8) & 0xff);
2288         if (rsig != NULL)
2289             *rsig = (unsigned char)(*psig & 0xff);
2290         lu = tls1_lookup_sigalg(s, *psig);
2291         if (psign != NULL)
2292             *psign = lu != NULL ? lu->sig : NID_undef;
2293         if (phash != NULL)
2294             *phash = lu != NULL ? lu->hash : NID_undef;
2295         if (psignhash != NULL)
2296             *psignhash = lu != NULL ? lu->sigandhash : NID_undef;
2297     }
2298     return (int)numsigalgs;
2299 }
2300
2301 int SSL_get_shared_sigalgs(SSL *s, int idx,
2302                            int *psign, int *phash, int *psignhash,
2303                            unsigned char *rsig, unsigned char *rhash)
2304 {
2305     const SIGALG_LOOKUP *shsigalgs;
2306     if (s->shared_sigalgs == NULL
2307         || idx < 0
2308         || idx >= (int)s->shared_sigalgslen
2309         || s->shared_sigalgslen > INT_MAX)
2310         return 0;
2311     shsigalgs = s->shared_sigalgs[idx];
2312     if (phash != NULL)
2313         *phash = shsigalgs->hash;
2314     if (psign != NULL)
2315         *psign = shsigalgs->sig;
2316     if (psignhash != NULL)
2317         *psignhash = shsigalgs->sigandhash;
2318     if (rsig != NULL)
2319         *rsig = (unsigned char)(shsigalgs->sigalg & 0xff);
2320     if (rhash != NULL)
2321         *rhash = (unsigned char)((shsigalgs->sigalg >> 8) & 0xff);
2322     return (int)s->shared_sigalgslen;
2323 }
2324
2325 /* Maximum possible number of unique entries in sigalgs array */
2326 #define TLS_MAX_SIGALGCNT (OSSL_NELEM(sigalg_lookup_tbl) * 2)
2327
2328 typedef struct {
2329     size_t sigalgcnt;
2330     /* TLSEXT_SIGALG_XXX values */
2331     uint16_t sigalgs[TLS_MAX_SIGALGCNT];
2332 } sig_cb_st;
2333
2334 static void get_sigorhash(int *psig, int *phash, const char *str)
2335 {
2336     if (strcmp(str, "RSA") == 0) {
2337         *psig = EVP_PKEY_RSA;
2338     } else if (strcmp(str, "RSA-PSS") == 0 || strcmp(str, "PSS") == 0) {
2339         *psig = EVP_PKEY_RSA_PSS;
2340     } else if (strcmp(str, "DSA") == 0) {
2341         *psig = EVP_PKEY_DSA;
2342     } else if (strcmp(str, "ECDSA") == 0) {
2343         *psig = EVP_PKEY_EC;
2344     } else {
2345         *phash = OBJ_sn2nid(str);
2346         if (*phash == NID_undef)
2347             *phash = OBJ_ln2nid(str);
2348     }
2349 }
2350 /* Maximum length of a signature algorithm string component */
2351 #define TLS_MAX_SIGSTRING_LEN   40
2352
2353 static int sig_cb(const char *elem, int len, void *arg)
2354 {
2355     sig_cb_st *sarg = arg;
2356     size_t i;
2357     const SIGALG_LOOKUP *s;
2358     char etmp[TLS_MAX_SIGSTRING_LEN], *p;
2359     int sig_alg = NID_undef, hash_alg = NID_undef;
2360     if (elem == NULL)
2361         return 0;
2362     if (sarg->sigalgcnt == TLS_MAX_SIGALGCNT)
2363         return 0;
2364     if (len > (int)(sizeof(etmp) - 1))
2365         return 0;
2366     memcpy(etmp, elem, len);
2367     etmp[len] = 0;
2368     p = strchr(etmp, '+');
2369     /*
2370      * We only allow SignatureSchemes listed in the sigalg_lookup_tbl;
2371      * if there's no '+' in the provided name, look for the new-style combined
2372      * name.  If not, match both sig+hash to find the needed SIGALG_LOOKUP.
2373      * Just sig+hash is not unique since TLS 1.3 adds rsa_pss_pss_* and
2374      * rsa_pss_rsae_* that differ only by public key OID; in such cases
2375      * we will pick the _rsae_ variant, by virtue of them appearing earlier
2376      * in the table.
2377      */
2378     if (p == NULL) {
2379         for (i = 0, s = sigalg_lookup_tbl; i < OSSL_NELEM(sigalg_lookup_tbl);
2380              i++, s++) {
2381             if (s->name != NULL && strcmp(etmp, s->name) == 0) {
2382                 sarg->sigalgs[sarg->sigalgcnt++] = s->sigalg;
2383                 break;
2384             }
2385         }
2386         if (i == OSSL_NELEM(sigalg_lookup_tbl))
2387             return 0;
2388     } else {
2389         *p = 0;
2390         p++;
2391         if (*p == 0)
2392             return 0;
2393         get_sigorhash(&sig_alg, &hash_alg, etmp);
2394         get_sigorhash(&sig_alg, &hash_alg, p);
2395         if (sig_alg == NID_undef || hash_alg == NID_undef)
2396             return 0;
2397         for (i = 0, s = sigalg_lookup_tbl; i < OSSL_NELEM(sigalg_lookup_tbl);
2398              i++, s++) {
2399             if (s->hash == hash_alg && s->sig == sig_alg) {
2400                 sarg->sigalgs[sarg->sigalgcnt++] = s->sigalg;
2401                 break;
2402             }
2403         }
2404         if (i == OSSL_NELEM(sigalg_lookup_tbl))
2405             return 0;
2406     }
2407
2408     /* Reject duplicates */
2409     for (i = 0; i < sarg->sigalgcnt - 1; i++) {
2410         if (sarg->sigalgs[i] == sarg->sigalgs[sarg->sigalgcnt - 1]) {
2411             sarg->sigalgcnt--;
2412             return 0;
2413         }
2414     }
2415     return 1;
2416 }
2417
2418 /*
2419  * Set supported signature algorithms based on a colon separated list of the
2420  * form sig+hash e.g. RSA+SHA512:DSA+SHA512
2421  */
2422 int tls1_set_sigalgs_list(CERT *c, const char *str, int client)
2423 {
2424     sig_cb_st sig;
2425     sig.sigalgcnt = 0;
2426     if (!CONF_parse_list(str, ':', 1, sig_cb, &sig))
2427         return 0;
2428     if (c == NULL)
2429         return 1;
2430     return tls1_set_raw_sigalgs(c, sig.sigalgs, sig.sigalgcnt, client);
2431 }
2432
2433 int tls1_set_raw_sigalgs(CERT *c, const uint16_t *psigs, size_t salglen,
2434                      int client)
2435 {
2436     uint16_t *sigalgs;
2437
2438     if ((sigalgs = OPENSSL_malloc(salglen * sizeof(*sigalgs))) == NULL) {
2439         SSLerr(SSL_F_TLS1_SET_RAW_SIGALGS, ERR_R_MALLOC_FAILURE);
2440         return 0;
2441     }
2442     memcpy(sigalgs, psigs, salglen * sizeof(*sigalgs));
2443
2444     if (client) {
2445         OPENSSL_free(c->client_sigalgs);
2446         c->client_sigalgs = sigalgs;
2447         c->client_sigalgslen = salglen;
2448     } else {
2449         OPENSSL_free(c->conf_sigalgs);
2450         c->conf_sigalgs = sigalgs;
2451         c->conf_sigalgslen = salglen;
2452     }
2453
2454     return 1;
2455 }
2456
2457 int tls1_set_sigalgs(CERT *c, const int *psig_nids, size_t salglen, int client)
2458 {
2459     uint16_t *sigalgs, *sptr;
2460     size_t i;
2461
2462     if (salglen & 1)
2463         return 0;
2464     if ((sigalgs = OPENSSL_malloc((salglen / 2) * sizeof(*sigalgs))) == NULL) {
2465         SSLerr(SSL_F_TLS1_SET_SIGALGS, ERR_R_MALLOC_FAILURE);
2466         return 0;
2467     }
2468     for (i = 0, sptr = sigalgs; i < salglen; i += 2) {
2469         size_t j;
2470         const SIGALG_LOOKUP *curr;
2471         int md_id = *psig_nids++;
2472         int sig_id = *psig_nids++;
2473
2474         for (j = 0, curr = sigalg_lookup_tbl; j < OSSL_NELEM(sigalg_lookup_tbl);
2475              j++, curr++) {
2476             if (curr->hash == md_id && curr->sig == sig_id) {
2477                 *sptr++ = curr->sigalg;
2478                 break;
2479             }
2480         }
2481
2482         if (j == OSSL_NELEM(sigalg_lookup_tbl))
2483             goto err;
2484     }
2485
2486     if (client) {
2487         OPENSSL_free(c->client_sigalgs);
2488         c->client_sigalgs = sigalgs;
2489         c->client_sigalgslen = salglen / 2;
2490     } else {
2491         OPENSSL_free(c->conf_sigalgs);
2492         c->conf_sigalgs = sigalgs;
2493         c->conf_sigalgslen = salglen / 2;
2494     }
2495
2496     return 1;
2497
2498  err:
2499     OPENSSL_free(sigalgs);
2500     return 0;
2501 }
2502
2503 static int tls1_check_sig_alg(SSL *s, X509 *x, int default_nid)
2504 {
2505     int sig_nid, use_pc_sigalgs = 0;
2506     size_t i;
2507     const SIGALG_LOOKUP *sigalg;
2508     size_t sigalgslen;
2509     if (default_nid == -1)
2510         return 1;
2511     sig_nid = X509_get_signature_nid(x);
2512     if (default_nid)
2513         return sig_nid == default_nid ? 1 : 0;
2514
2515     if (SSL_IS_TLS13(s) && s->s3.tmp.peer_cert_sigalgs != NULL) {
2516         /*
2517          * If we're in TLSv1.3 then we only get here if we're checking the
2518          * chain. If the peer has specified peer_cert_sigalgs then we use them
2519          * otherwise we default to normal sigalgs.
2520          */
2521         sigalgslen = s->s3.tmp.peer_cert_sigalgslen;
2522         use_pc_sigalgs = 1;
2523     } else {
2524         sigalgslen = s->shared_sigalgslen;
2525     }
2526     for (i = 0; i < sigalgslen; i++) {
2527         sigalg = use_pc_sigalgs
2528                  ? tls1_lookup_sigalg(s, s->s3.tmp.peer_cert_sigalgs[i])
2529                  : s->shared_sigalgs[i];
2530         if (sigalg != NULL && sig_nid == sigalg->sigandhash)
2531             return 1;
2532     }
2533     return 0;
2534 }
2535
2536 /* Check to see if a certificate issuer name matches list of CA names */
2537 static int ssl_check_ca_name(STACK_OF(X509_NAME) *names, X509 *x)
2538 {
2539     const X509_NAME *nm;
2540     int i;
2541     nm = X509_get_issuer_name(x);
2542     for (i = 0; i < sk_X509_NAME_num(names); i++) {
2543         if (!X509_NAME_cmp(nm, sk_X509_NAME_value(names, i)))
2544             return 1;
2545     }
2546     return 0;
2547 }
2548
2549 /*
2550  * Check certificate chain is consistent with TLS extensions and is usable by
2551  * server. This servers two purposes: it allows users to check chains before
2552  * passing them to the server and it allows the server to check chains before
2553  * attempting to use them.
2554  */
2555
2556 /* Flags which need to be set for a certificate when strict mode not set */
2557
2558 #define CERT_PKEY_VALID_FLAGS \
2559         (CERT_PKEY_EE_SIGNATURE|CERT_PKEY_EE_PARAM)
2560 /* Strict mode flags */
2561 #define CERT_PKEY_STRICT_FLAGS \
2562          (CERT_PKEY_VALID_FLAGS|CERT_PKEY_CA_SIGNATURE|CERT_PKEY_CA_PARAM \
2563          | CERT_PKEY_ISSUER_NAME|CERT_PKEY_CERT_TYPE)
2564
2565 int tls1_check_chain(SSL *s, X509 *x, EVP_PKEY *pk, STACK_OF(X509) *chain,
2566                      int idx)
2567 {
2568     int i;
2569     int rv = 0;
2570     int check_flags = 0, strict_mode;
2571     CERT_PKEY *cpk = NULL;
2572     CERT *c = s->cert;
2573     uint32_t *pvalid;
2574     unsigned int suiteb_flags = tls1_suiteb(s);
2575     /* idx == -1 means checking server chains */
2576     if (idx != -1) {
2577         /* idx == -2 means checking client certificate chains */
2578         if (idx == -2) {
2579             cpk = c->key;
2580             idx = (int)(cpk - c->pkeys);
2581         } else
2582             cpk = c->pkeys + idx;
2583         pvalid = s->s3.tmp.valid_flags + idx;
2584         x = cpk->x509;
2585         pk = cpk->privatekey;
2586         chain = cpk->chain;
2587         strict_mode = c->cert_flags & SSL_CERT_FLAGS_CHECK_TLS_STRICT;
2588         /* If no cert or key, forget it */
2589         if (!x || !pk)
2590             goto end;
2591     } else {
2592         size_t certidx;
2593
2594         if (!x || !pk)
2595             return 0;
2596
2597         if (ssl_cert_lookup_by_pkey(pk, &certidx) == NULL)
2598             return 0;
2599         idx = certidx;
2600         pvalid = s->s3.tmp.valid_flags + idx;
2601
2602         if (c->cert_flags & SSL_CERT_FLAGS_CHECK_TLS_STRICT)
2603             check_flags = CERT_PKEY_STRICT_FLAGS;
2604         else
2605             check_flags = CERT_PKEY_VALID_FLAGS;
2606         strict_mode = 1;
2607     }
2608
2609     if (suiteb_flags) {
2610         int ok;
2611         if (check_flags)
2612             check_flags |= CERT_PKEY_SUITEB;
2613         ok = X509_chain_check_suiteb(NULL, x, chain, suiteb_flags);
2614         if (ok == X509_V_OK)
2615             rv |= CERT_PKEY_SUITEB;
2616         else if (!check_flags)
2617             goto end;
2618     }
2619
2620     /*
2621      * Check all signature algorithms are consistent with signature
2622      * algorithms extension if TLS 1.2 or later and strict mode.
2623      */
2624     if (TLS1_get_version(s) >= TLS1_2_VERSION && strict_mode) {
2625         int default_nid;
2626         int rsign = 0;
2627         if (s->s3.tmp.peer_cert_sigalgs != NULL
2628                 || s->s3.tmp.peer_sigalgs != NULL) {
2629             default_nid = 0;
2630         /* If no sigalgs extension use defaults from RFC5246 */
2631         } else {
2632             switch (idx) {
2633             case SSL_PKEY_RSA:
2634                 rsign = EVP_PKEY_RSA;
2635                 default_nid = NID_sha1WithRSAEncryption;
2636                 break;
2637
2638             case SSL_PKEY_DSA_SIGN:
2639                 rsign = EVP_PKEY_DSA;
2640                 default_nid = NID_dsaWithSHA1;
2641                 break;
2642
2643             case SSL_PKEY_ECC:
2644                 rsign = EVP_PKEY_EC;
2645                 default_nid = NID_ecdsa_with_SHA1;
2646                 break;
2647
2648             case SSL_PKEY_GOST01:
2649                 rsign = NID_id_GostR3410_2001;
2650                 default_nid = NID_id_GostR3411_94_with_GostR3410_2001;
2651                 break;
2652
2653             case SSL_PKEY_GOST12_256:
2654                 rsign = NID_id_GostR3410_2012_256;
2655                 default_nid = NID_id_tc26_signwithdigest_gost3410_2012_256;
2656                 break;
2657
2658             case SSL_PKEY_GOST12_512:
2659                 rsign = NID_id_GostR3410_2012_512;
2660                 default_nid = NID_id_tc26_signwithdigest_gost3410_2012_512;
2661                 break;
2662
2663             default:
2664                 default_nid = -1;
2665                 break;
2666             }
2667         }
2668         /*
2669          * If peer sent no signature algorithms extension and we have set
2670          * preferred signature algorithms check we support sha1.
2671          */
2672         if (default_nid > 0 && c->conf_sigalgs) {
2673             size_t j;
2674             const uint16_t *p = c->conf_sigalgs;
2675             for (j = 0; j < c->conf_sigalgslen; j++, p++) {
2676                 const SIGALG_LOOKUP *lu = tls1_lookup_sigalg(s, *p);
2677
2678                 if (lu != NULL && lu->hash == NID_sha1 && lu->sig == rsign)
2679                     break;
2680             }
2681             if (j == c->conf_sigalgslen) {
2682                 if (check_flags)
2683                     goto skip_sigs;
2684                 else
2685                     goto end;
2686             }
2687         }
2688         /* Check signature algorithm of each cert in chain */
2689         if (SSL_IS_TLS13(s)) {
2690             /*
2691              * We only get here if the application has called SSL_check_chain(),
2692              * so check_flags is always set.
2693              */
2694             if (find_sig_alg(s, x, pk) != NULL)
2695                 rv |= CERT_PKEY_EE_SIGNATURE;
2696         } else if (!tls1_check_sig_alg(s, x, default_nid)) {
2697             if (!check_flags)
2698                 goto end;
2699         } else
2700             rv |= CERT_PKEY_EE_SIGNATURE;
2701         rv |= CERT_PKEY_CA_SIGNATURE;
2702         for (i = 0; i < sk_X509_num(chain); i++) {
2703             if (!tls1_check_sig_alg(s, sk_X509_value(chain, i), default_nid)) {
2704                 if (check_flags) {
2705                     rv &= ~CERT_PKEY_CA_SIGNATURE;
2706                     break;
2707                 } else
2708                     goto end;
2709             }
2710         }
2711     }
2712     /* Else not TLS 1.2, so mark EE and CA signing algorithms OK */
2713     else if (check_flags)
2714         rv |= CERT_PKEY_EE_SIGNATURE | CERT_PKEY_CA_SIGNATURE;
2715  skip_sigs:
2716     /* Check cert parameters are consistent */
2717     if (tls1_check_cert_param(s, x, 1))
2718         rv |= CERT_PKEY_EE_PARAM;
2719     else if (!check_flags)
2720         goto end;
2721     if (!s->server)
2722         rv |= CERT_PKEY_CA_PARAM;
2723     /* In strict mode check rest of chain too */
2724     else if (strict_mode) {
2725         rv |= CERT_PKEY_CA_PARAM;
2726         for (i = 0; i < sk_X509_num(chain); i++) {
2727             X509 *ca = sk_X509_value(chain, i);
2728             if (!tls1_check_cert_param(s, ca, 0)) {
2729                 if (check_flags) {
2730                     rv &= ~CERT_PKEY_CA_PARAM;
2731                     break;
2732                 } else
2733                     goto end;
2734             }
2735         }
2736     }
2737     if (!s->server && strict_mode) {
2738         STACK_OF(X509_NAME) *ca_dn;
2739         int check_type = 0;
2740
2741         if (EVP_PKEY_is_a(pk, "RSA"))
2742             check_type = TLS_CT_RSA_SIGN;
2743         else if (EVP_PKEY_is_a(pk, "DSA"))
2744             check_type = TLS_CT_DSS_SIGN;
2745         else if (EVP_PKEY_is_a(pk, "EC"))
2746             check_type = TLS_CT_ECDSA_SIGN;
2747
2748         if (check_type) {
2749             const uint8_t *ctypes = s->s3.tmp.ctype;
2750             size_t j;
2751
2752             for (j = 0; j < s->s3.tmp.ctype_len; j++, ctypes++) {
2753                 if (*ctypes == check_type) {
2754                     rv |= CERT_PKEY_CERT_TYPE;
2755                     break;
2756                 }
2757             }
2758             if (!(rv & CERT_PKEY_CERT_TYPE) && !check_flags)
2759                 goto end;
2760         } else {
2761             rv |= CERT_PKEY_CERT_TYPE;
2762         }
2763
2764         ca_dn = s->s3.tmp.peer_ca_names;
2765
2766         if (!sk_X509_NAME_num(ca_dn))
2767             rv |= CERT_PKEY_ISSUER_NAME;
2768
2769         if (!(rv & CERT_PKEY_ISSUER_NAME)) {
2770             if (ssl_check_ca_name(ca_dn, x))
2771                 rv |= CERT_PKEY_ISSUER_NAME;
2772         }
2773         if (!(rv & CERT_PKEY_ISSUER_NAME)) {
2774             for (i = 0; i < sk_X509_num(chain); i++) {
2775                 X509 *xtmp = sk_X509_value(chain, i);
2776                 if (ssl_check_ca_name(ca_dn, xtmp)) {
2777                     rv |= CERT_PKEY_ISSUER_NAME;
2778                     break;
2779                 }
2780             }
2781         }
2782         if (!check_flags && !(rv & CERT_PKEY_ISSUER_NAME))
2783             goto end;
2784     } else
2785         rv |= CERT_PKEY_ISSUER_NAME | CERT_PKEY_CERT_TYPE;
2786
2787     if (!check_flags || (rv & check_flags) == check_flags)
2788         rv |= CERT_PKEY_VALID;
2789
2790  end:
2791
2792     if (TLS1_get_version(s) >= TLS1_2_VERSION)
2793         rv |= *pvalid & (CERT_PKEY_EXPLICIT_SIGN | CERT_PKEY_SIGN);
2794     else
2795         rv |= CERT_PKEY_SIGN | CERT_PKEY_EXPLICIT_SIGN;
2796
2797     /*
2798      * When checking a CERT_PKEY structure all flags are irrelevant if the
2799      * chain is invalid.
2800      */
2801     if (!check_flags) {
2802         if (rv & CERT_PKEY_VALID) {
2803             *pvalid = rv;
2804         } else {
2805             /* Preserve sign and explicit sign flag, clear rest */
2806             *pvalid &= CERT_PKEY_EXPLICIT_SIGN | CERT_PKEY_SIGN;
2807             return 0;
2808         }
2809     }
2810     return rv;
2811 }
2812
2813 /* Set validity of certificates in an SSL structure */
2814 void tls1_set_cert_validity(SSL *s)
2815 {
2816     tls1_check_chain(s, NULL, NULL, NULL, SSL_PKEY_RSA);
2817     tls1_check_chain(s, NULL, NULL, NULL, SSL_PKEY_RSA_PSS_SIGN);
2818     tls1_check_chain(s, NULL, NULL, NULL, SSL_PKEY_DSA_SIGN);
2819     tls1_check_chain(s, NULL, NULL, NULL, SSL_PKEY_ECC);
2820     tls1_check_chain(s, NULL, NULL, NULL, SSL_PKEY_GOST01);
2821     tls1_check_chain(s, NULL, NULL, NULL, SSL_PKEY_GOST12_256);
2822     tls1_check_chain(s, NULL, NULL, NULL, SSL_PKEY_GOST12_512);
2823     tls1_check_chain(s, NULL, NULL, NULL, SSL_PKEY_ED25519);
2824     tls1_check_chain(s, NULL, NULL, NULL, SSL_PKEY_ED448);
2825 }
2826
2827 /* User level utility function to check a chain is suitable */
2828 int SSL_check_chain(SSL *s, X509 *x, EVP_PKEY *pk, STACK_OF(X509) *chain)
2829 {
2830     return tls1_check_chain(s, x, pk, chain, -1);
2831 }
2832
2833 #ifndef OPENSSL_NO_DH
2834 DH *ssl_get_auto_dh(SSL *s)
2835 {
2836     DH *dhp;
2837     BIGNUM *p, *g;
2838     int dh_secbits = 80;
2839     if (s->cert->dh_tmp_auto != 2) {
2840         if (s->s3.tmp.new_cipher->algorithm_auth & (SSL_aNULL | SSL_aPSK)) {
2841             if (s->s3.tmp.new_cipher->strength_bits == 256)
2842                 dh_secbits = 128;
2843             else
2844                 dh_secbits = 80;
2845         } else {
2846             if (s->s3.tmp.cert == NULL)
2847                 return NULL;
2848             dh_secbits = EVP_PKEY_security_bits(s->s3.tmp.cert->privatekey);
2849         }
2850     }
2851
2852     dhp = DH_new();
2853     if (dhp == NULL)
2854         return NULL;
2855     g = BN_new();
2856     if (g == NULL || !BN_set_word(g, 2)) {
2857         DH_free(dhp);
2858         BN_free(g);
2859         return NULL;
2860     }
2861     if (dh_secbits >= 192)
2862         p = BN_get_rfc3526_prime_8192(NULL);
2863     else if (dh_secbits >= 152)
2864         p = BN_get_rfc3526_prime_4096(NULL);
2865     else if (dh_secbits >= 128)
2866         p = BN_get_rfc3526_prime_3072(NULL);
2867     else if (dh_secbits >= 112)
2868         p = BN_get_rfc3526_prime_2048(NULL);
2869     else
2870         p = BN_get_rfc2409_prime_1024(NULL);
2871     if (p == NULL || !DH_set0_pqg(dhp, p, NULL, g)) {
2872         DH_free(dhp);
2873         BN_free(p);
2874         BN_free(g);
2875         return NULL;
2876     }
2877     return dhp;
2878 }
2879 #endif
2880
2881 static int ssl_security_cert_key(SSL *s, SSL_CTX *ctx, X509 *x, int op)
2882 {
2883     int secbits = -1;
2884     EVP_PKEY *pkey = X509_get0_pubkey(x);
2885     if (pkey) {
2886         /*
2887          * If no parameters this will return -1 and fail using the default
2888          * security callback for any non-zero security level. This will
2889          * reject keys which omit parameters but this only affects DSA and
2890          * omission of parameters is never (?) done in practice.
2891          */
2892         secbits = EVP_PKEY_security_bits(pkey);
2893     }
2894     if (s)
2895         return ssl_security(s, op, secbits, 0, x);
2896     else
2897         return ssl_ctx_security(ctx, op, secbits, 0, x);
2898 }
2899
2900 static int ssl_security_cert_sig(SSL *s, SSL_CTX *ctx, X509 *x, int op)
2901 {
2902     /* Lookup signature algorithm digest */
2903     int secbits, nid, pknid;
2904     /* Don't check signature if self signed */
2905     if ((X509_get_extension_flags(x) & EXFLAG_SS) != 0)
2906         return 1;
2907     if (!X509_get_signature_info(x, &nid, &pknid, &secbits, NULL))
2908         secbits = -1;
2909     /* If digest NID not defined use signature NID */
2910     if (nid == NID_undef)
2911         nid = pknid;
2912     if (s)
2913         return ssl_security(s, op, secbits, nid, x);
2914     else
2915         return ssl_ctx_security(ctx, op, secbits, nid, x);
2916 }
2917
2918 int ssl_security_cert(SSL *s, SSL_CTX *ctx, X509 *x, int vfy, int is_ee)
2919 {
2920     if (vfy)
2921         vfy = SSL_SECOP_PEER;
2922     if (is_ee) {
2923         if (!ssl_security_cert_key(s, ctx, x, SSL_SECOP_EE_KEY | vfy))
2924             return SSL_R_EE_KEY_TOO_SMALL;
2925     } else {
2926         if (!ssl_security_cert_key(s, ctx, x, SSL_SECOP_CA_KEY | vfy))
2927             return SSL_R_CA_KEY_TOO_SMALL;
2928     }
2929     if (!ssl_security_cert_sig(s, ctx, x, SSL_SECOP_CA_MD | vfy))
2930         return SSL_R_CA_MD_TOO_WEAK;
2931     return 1;
2932 }
2933
2934 /*
2935  * Check security of a chain, if |sk| includes the end entity certificate then
2936  * |x| is NULL. If |vfy| is 1 then we are verifying a peer chain and not sending
2937  * one to the peer. Return values: 1 if ok otherwise error code to use
2938  */
2939
2940 int ssl_security_cert_chain(SSL *s, STACK_OF(X509) *sk, X509 *x, int vfy)
2941 {
2942     int rv, start_idx, i;
2943     if (x == NULL) {
2944         x = sk_X509_value(sk, 0);
2945         start_idx = 1;
2946     } else
2947         start_idx = 0;
2948
2949     rv = ssl_security_cert(s, NULL, x, vfy, 1);
2950     if (rv != 1)
2951         return rv;
2952
2953     for (i = start_idx; i < sk_X509_num(sk); i++) {
2954         x = sk_X509_value(sk, i);
2955         rv = ssl_security_cert(s, NULL, x, vfy, 0);
2956         if (rv != 1)
2957             return rv;
2958     }
2959     return 1;
2960 }
2961
2962 /*
2963  * For TLS 1.2 servers check if we have a certificate which can be used
2964  * with the signature algorithm "lu" and return index of certificate.
2965  */
2966
2967 static int tls12_get_cert_sigalg_idx(const SSL *s, const SIGALG_LOOKUP *lu)
2968 {
2969     int sig_idx = lu->sig_idx;
2970     const SSL_CERT_LOOKUP *clu = ssl_cert_lookup_by_idx(sig_idx);
2971
2972     /* If not recognised or not supported by cipher mask it is not suitable */
2973     if (clu == NULL
2974             || (clu->amask & s->s3.tmp.new_cipher->algorithm_auth) == 0
2975             || (clu->nid == EVP_PKEY_RSA_PSS
2976                 && (s->s3.tmp.new_cipher->algorithm_mkey & SSL_kRSA) != 0))
2977         return -1;
2978
2979     return s->s3.tmp.valid_flags[sig_idx] & CERT_PKEY_VALID ? sig_idx : -1;
2980 }
2981
2982 /*
2983  * Checks the given cert against signature_algorithm_cert restrictions sent by
2984  * the peer (if any) as well as whether the hash from the sigalg is usable with
2985  * the key.
2986  * Returns true if the cert is usable and false otherwise.
2987  */
2988 static int check_cert_usable(SSL *s, const SIGALG_LOOKUP *sig, X509 *x,
2989                              EVP_PKEY *pkey)
2990 {
2991     const SIGALG_LOOKUP *lu;
2992     int mdnid, pknid, supported;
2993     size_t i;
2994
2995     /*
2996      * If the given EVP_PKEY cannot supporting signing with this sigalg,
2997      * the answer is simply 'no'.
2998      */
2999     ERR_set_mark();
3000     supported = EVP_PKEY_supports_digest_nid(pkey, sig->hash);
3001     ERR_pop_to_mark();
3002     if (supported == 0)
3003         return 0;
3004
3005     /*
3006      * The TLS 1.3 signature_algorithms_cert extension places restrictions
3007      * on the sigalg with which the certificate was signed (by its issuer).
3008      */
3009     if (s->s3.tmp.peer_cert_sigalgs != NULL) {
3010         if (!X509_get_signature_info(x, &mdnid, &pknid, NULL, NULL))
3011             return 0;
3012         for (i = 0; i < s->s3.tmp.peer_cert_sigalgslen; i++) {
3013             lu = tls1_lookup_sigalg(s, s->s3.tmp.peer_cert_sigalgs[i]);
3014             if (lu == NULL)
3015                 continue;
3016
3017             /*
3018              * TODO this does not differentiate between the
3019              * rsa_pss_pss_* and rsa_pss_rsae_* schemes since we do not
3020              * have a chain here that lets us look at the key OID in the
3021              * signing certificate.
3022              */
3023             if (mdnid == lu->hash && pknid == lu->sig)
3024                 return 1;
3025         }
3026         return 0;
3027     }
3028
3029     /*
3030      * Without signat_algorithms_cert, any certificate for which we have
3031      * a viable public key is permitted.
3032      */
3033     return 1;
3034 }
3035
3036 /*
3037  * Returns true if |s| has a usable certificate configured for use
3038  * with signature scheme |sig|.
3039  * "Usable" includes a check for presence as well as applying
3040  * the signature_algorithm_cert restrictions sent by the peer (if any).
3041  * Returns false if no usable certificate is found.
3042  */
3043 static int has_usable_cert(SSL *s, const SIGALG_LOOKUP *sig, int idx)
3044 {
3045     /* TLS 1.2 callers can override sig->sig_idx, but not TLS 1.3 callers. */
3046     if (idx == -1)
3047         idx = sig->sig_idx;
3048     if (!ssl_has_cert(s, idx))
3049         return 0;
3050
3051     return check_cert_usable(s, sig, s->cert->pkeys[idx].x509,
3052                              s->cert->pkeys[idx].privatekey);
3053 }
3054
3055 /*
3056  * Returns true if the supplied cert |x| and key |pkey| is usable with the
3057  * specified signature scheme |sig|, or false otherwise.
3058  */
3059 static int is_cert_usable(SSL *s, const SIGALG_LOOKUP *sig, X509 *x,
3060                           EVP_PKEY *pkey)
3061 {
3062     size_t idx;
3063
3064     if (ssl_cert_lookup_by_pkey(pkey, &idx) == NULL)
3065         return 0;
3066
3067     /* Check the key is consistent with the sig alg */
3068     if ((int)idx != sig->sig_idx)
3069         return 0;
3070
3071     return check_cert_usable(s, sig, x, pkey);
3072 }
3073
3074 /*
3075  * Find a signature scheme that works with the supplied certificate |x| and key
3076  * |pkey|. |x| and |pkey| may be NULL in which case we additionally look at our
3077  * available certs/keys to find one that works.
3078  */
3079 static const SIGALG_LOOKUP *find_sig_alg(SSL *s, X509 *x, EVP_PKEY *pkey)
3080 {
3081     const SIGALG_LOOKUP *lu = NULL;
3082     size_t i;
3083 #ifndef OPENSSL_NO_EC
3084     int curve = -1;
3085 #endif
3086     EVP_PKEY *tmppkey;
3087
3088     /* Look for a shared sigalgs matching possible certificates */
3089     for (i = 0; i < s->shared_sigalgslen; i++) {
3090         lu = s->shared_sigalgs[i];
3091
3092         /* Skip SHA1, SHA224, DSA and RSA if not PSS */
3093         if (lu->hash == NID_sha1
3094             || lu->hash == NID_sha224
3095             || lu->sig == EVP_PKEY_DSA
3096             || lu->sig == EVP_PKEY_RSA)
3097             continue;
3098         /* Check that we have a cert, and signature_algorithms_cert */
3099         if (!tls1_lookup_md(s->ctx, lu, NULL))
3100             continue;
3101         if ((pkey == NULL && !has_usable_cert(s, lu, -1))
3102                 || (pkey != NULL && !is_cert_usable(s, lu, x, pkey)))
3103             continue;
3104
3105         tmppkey = (pkey != NULL) ? pkey
3106                                  : s->cert->pkeys[lu->sig_idx].privatekey;
3107
3108         if (lu->sig == EVP_PKEY_EC) {
3109 #ifndef OPENSSL_NO_EC
3110             if (curve == -1)
3111                 curve = evp_pkey_get_EC_KEY_curve_nid(tmppkey);
3112             if (lu->curve != NID_undef && curve != lu->curve)
3113                 continue;
3114 #else
3115             continue;
3116 #endif
3117         } else if (lu->sig == EVP_PKEY_RSA_PSS) {
3118             /* validate that key is large enough for the signature algorithm */
3119             if (!rsa_pss_check_min_key_size(s->ctx, tmppkey, lu))
3120                 continue;
3121         }
3122         break;
3123     }
3124
3125     if (i == s->shared_sigalgslen)
3126         return NULL;
3127
3128     return lu;
3129 }
3130
3131 /*
3132  * Choose an appropriate signature algorithm based on available certificates
3133  * Sets chosen certificate and signature algorithm.
3134  *
3135  * For servers if we fail to find a required certificate it is a fatal error,
3136  * an appropriate error code is set and a TLS alert is sent.
3137  *
3138  * For clients fatalerrs is set to 0. If a certificate is not suitable it is not
3139  * a fatal error: we will either try another certificate or not present one
3140  * to the server. In this case no error is set.
3141  */
3142 int tls_choose_sigalg(SSL *s, int fatalerrs)
3143 {
3144     const SIGALG_LOOKUP *lu = NULL;
3145     int sig_idx = -1;
3146
3147     s->s3.tmp.cert = NULL;
3148     s->s3.tmp.sigalg = NULL;
3149
3150     if (SSL_IS_TLS13(s)) {
3151         lu = find_sig_alg(s, NULL, NULL);
3152         if (lu == NULL) {
3153             if (!fatalerrs)
3154                 return 1;
3155             SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_F_TLS_CHOOSE_SIGALG,
3156                      SSL_R_NO_SUITABLE_SIGNATURE_ALGORITHM);
3157             return 0;
3158         }
3159     } else {
3160         /* If ciphersuite doesn't require a cert nothing to do */
3161         if (!(s->s3.tmp.new_cipher->algorithm_auth & SSL_aCERT))
3162             return 1;
3163         if (!s->server && !ssl_has_cert(s, s->cert->key - s->cert->pkeys))
3164                 return 1;
3165
3166         if (SSL_USE_SIGALGS(s)) {
3167             size_t i;
3168             if (s->s3.tmp.peer_sigalgs != NULL) {
3169 #ifndef OPENSSL_NO_EC
3170                 int curve = -1;
3171
3172                 /* For Suite B need to match signature algorithm to curve */
3173                 if (tls1_suiteb(s))
3174                     curve =
3175                         evp_pkey_get_EC_KEY_curve_nid(s->cert->pkeys[SSL_PKEY_ECC]
3176                                                       .privatekey);
3177 #endif
3178
3179                 /*
3180                  * Find highest preference signature algorithm matching
3181                  * cert type
3182                  */
3183                 for (i = 0; i < s->shared_sigalgslen; i++) {
3184                     lu = s->shared_sigalgs[i];
3185
3186                     if (s->server) {
3187                         if ((sig_idx = tls12_get_cert_sigalg_idx(s, lu)) == -1)
3188                             continue;
3189                     } else {
3190                         int cc_idx = s->cert->key - s->cert->pkeys;
3191
3192                         sig_idx = lu->sig_idx;
3193                         if (cc_idx != sig_idx)
3194                             continue;
3195                     }
3196                     /* Check that we have a cert, and sig_algs_cert */
3197                     if (!has_usable_cert(s, lu, sig_idx))
3198                         continue;
3199                     if (lu->sig == EVP_PKEY_RSA_PSS) {
3200                         /* validate that key is large enough for the signature algorithm */
3201                         EVP_PKEY *pkey = s->cert->pkeys[sig_idx].privatekey;
3202
3203                         if (!rsa_pss_check_min_key_size(s->ctx, pkey, lu))
3204                             continue;
3205                     }
3206 #ifndef OPENSSL_NO_EC
3207                     if (curve == -1 || lu->curve == curve)
3208 #endif
3209                         break;
3210                 }
3211 #ifndef OPENSSL_NO_GOST
3212                 /*
3213                  * Some Windows-based implementations do not send GOST algorithms indication
3214                  * in supported_algorithms extension, so when we have GOST-based ciphersuite,
3215                  * we have to assume GOST support.
3216                  */
3217                 if (i == s->shared_sigalgslen && s->s3.tmp.new_cipher->algorithm_auth & (SSL_aGOST01 | SSL_aGOST12)) {
3218                   if ((lu = tls1_get_legacy_sigalg(s, -1)) == NULL) {
3219                     if (!fatalerrs)
3220                       return 1;
3221                     SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE,
3222                              SSL_F_TLS_CHOOSE_SIGALG,
3223                              SSL_R_NO_SUITABLE_SIGNATURE_ALGORITHM);
3224                     return 0;
3225                   } else {
3226                     i = 0;
3227                     sig_idx = lu->sig_idx;
3228                   }
3229                 }
3230 #endif
3231                 if (i == s->shared_sigalgslen) {
3232                     if (!fatalerrs)
3233                         return 1;
3234                     SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE,
3235                              SSL_F_TLS_CHOOSE_SIGALG,
3236                              SSL_R_NO_SUITABLE_SIGNATURE_ALGORITHM);
3237                     return 0;
3238                 }
3239             } else {
3240                 /*
3241                  * If we have no sigalg use defaults
3242                  */
3243                 const uint16_t *sent_sigs;
3244                 size_t sent_sigslen;
3245
3246                 if ((lu = tls1_get_legacy_sigalg(s, -1)) == NULL) {
3247                     if (!fatalerrs)
3248                         return 1;
3249                     SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CHOOSE_SIGALG,
3250                              SSL_R_NO_SUITABLE_SIGNATURE_ALGORITHM);
3251                     return 0;
3252                 }
3253
3254                 /* Check signature matches a type we sent */
3255                 sent_sigslen = tls12_get_psigalgs(s, 1, &sent_sigs);
3256                 for (i = 0; i < sent_sigslen; i++, sent_sigs++) {
3257                     if (lu->sigalg == *sent_sigs
3258                             && has_usable_cert(s, lu, lu->sig_idx))
3259                         break;
3260                 }
3261                 if (i == sent_sigslen) {
3262                     if (!fatalerrs)
3263                         return 1;
3264                     SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER,
3265                              SSL_F_TLS_CHOOSE_SIGALG,
3266                              SSL_R_WRONG_SIGNATURE_TYPE);
3267                     return 0;
3268                 }
3269             }
3270         } else {
3271             if ((lu = tls1_get_legacy_sigalg(s, -1)) == NULL) {
3272                 if (!fatalerrs)
3273                     return 1;
3274                 SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CHOOSE_SIGALG,
3275                          SSL_R_NO_SUITABLE_SIGNATURE_ALGORITHM);
3276                 return 0;
3277             }
3278         }
3279     }
3280     if (sig_idx == -1)
3281         sig_idx = lu->sig_idx;
3282     s->s3.tmp.cert = &s->cert->pkeys[sig_idx];
3283     s->cert->key = s->s3.tmp.cert;
3284     s->s3.tmp.sigalg = lu;
3285     return 1;
3286 }
3287
3288 int SSL_CTX_set_tlsext_max_fragment_length(SSL_CTX *ctx, uint8_t mode)
3289 {
3290     if (mode != TLSEXT_max_fragment_length_DISABLED
3291             && !IS_MAX_FRAGMENT_LENGTH_EXT_VALID(mode)) {
3292         SSLerr(SSL_F_SSL_CTX_SET_TLSEXT_MAX_FRAGMENT_LENGTH,
3293                SSL_R_SSL3_EXT_INVALID_MAX_FRAGMENT_LENGTH);
3294         return 0;
3295     }
3296
3297     ctx->ext.max_fragment_len_mode = mode;
3298     return 1;
3299 }
3300
3301 int SSL_set_tlsext_max_fragment_length(SSL *ssl, uint8_t mode)
3302 {
3303     if (mode != TLSEXT_max_fragment_length_DISABLED
3304             && !IS_MAX_FRAGMENT_LENGTH_EXT_VALID(mode)) {
3305         SSLerr(SSL_F_SSL_SET_TLSEXT_MAX_FRAGMENT_LENGTH,
3306                SSL_R_SSL3_EXT_INVALID_MAX_FRAGMENT_LENGTH);
3307         return 0;
3308     }
3309
3310     ssl->ext.max_fragment_len_mode = mode;
3311     return 1;
3312 }
3313
3314 uint8_t SSL_SESSION_get_max_fragment_length(const SSL_SESSION *session)
3315 {
3316     return session->ext.max_fragment_len_mode;
3317 }
3318
3319 /*
3320  * Helper functions for HMAC access with legacy support included.
3321  */
3322 SSL_HMAC *ssl_hmac_new(const SSL_CTX *ctx)
3323 {
3324     SSL_HMAC *ret = OPENSSL_zalloc(sizeof(*ret));
3325     EVP_MAC *mac = NULL;
3326
3327     if (ret == NULL)
3328         return NULL;
3329 #ifndef OPENSSL_NO_DEPRECATED_3_0
3330     if (ctx->ext.ticket_key_evp_cb == NULL
3331             && ctx->ext.ticket_key_cb != NULL) {
3332         ret->old_ctx = HMAC_CTX_new();
3333         if (ret->old_ctx == NULL)
3334             goto err;
3335         return ret;
3336     }
3337 #endif
3338     mac = EVP_MAC_fetch(ctx->libctx, "HMAC", NULL);
3339     if (mac == NULL || (ret->ctx = EVP_MAC_new_ctx(mac)) == NULL)
3340         goto err;
3341     EVP_MAC_free(mac);
3342     return ret;
3343  err:
3344     EVP_MAC_free_ctx(ret->ctx);
3345     EVP_MAC_free(mac);
3346     OPENSSL_free(ret);
3347     return NULL;
3348 }
3349
3350 void ssl_hmac_free(SSL_HMAC *ctx)
3351 {
3352     if (ctx != NULL) {
3353         EVP_MAC_free_ctx(ctx->ctx);
3354 #ifndef OPENSSL_NO_DEPRECATED_3_0
3355         HMAC_CTX_free(ctx->old_ctx);
3356 #endif
3357         OPENSSL_free(ctx);
3358     }
3359 }
3360
3361 #ifndef OPENSSL_NO_DEPRECATED_3_0
3362 HMAC_CTX *ssl_hmac_get0_HMAC_CTX(SSL_HMAC *ctx)
3363 {
3364     return ctx->old_ctx;
3365 }
3366 #endif
3367
3368 EVP_MAC_CTX *ssl_hmac_get0_EVP_MAC_CTX(SSL_HMAC *ctx)
3369 {
3370     return ctx->ctx;
3371 }
3372
3373 int ssl_hmac_init(SSL_HMAC *ctx, void *key, size_t len, char *md)
3374 {
3375     OSSL_PARAM params[3], *p = params;
3376
3377     if (ctx->ctx != NULL) {
3378         *p++ = OSSL_PARAM_construct_utf8_string(OSSL_MAC_PARAM_DIGEST, md, 0);
3379         *p++ = OSSL_PARAM_construct_octet_string(OSSL_KDF_PARAM_KEY, key, len);
3380         *p = OSSL_PARAM_construct_end();
3381         if (EVP_MAC_set_ctx_params(ctx->ctx, params) && EVP_MAC_init(ctx->ctx))
3382             return 1;
3383     }
3384 #ifndef OPENSSL_NO_DEPRECATED_3_0
3385     if (ctx->old_ctx != NULL)
3386         return HMAC_Init_ex(ctx->old_ctx, key, len,
3387                             EVP_get_digestbyname(md), NULL);
3388 #endif
3389     return 0;
3390 }
3391
3392 int ssl_hmac_update(SSL_HMAC *ctx, const unsigned char *data, size_t len)
3393 {
3394     if (ctx->ctx != NULL)
3395         return EVP_MAC_update(ctx->ctx, data, len);
3396 #ifndef OPENSSL_NO_DEPRECATED_3_0
3397     if (ctx->old_ctx != NULL)
3398         return HMAC_Update(ctx->old_ctx, data, len);
3399 #endif
3400     return 0;
3401 }
3402
3403 int ssl_hmac_final(SSL_HMAC *ctx, unsigned char *md, size_t *len,
3404                    size_t max_size)
3405 {
3406     if (ctx->ctx != NULL)
3407         return EVP_MAC_final(ctx->ctx, md, len, max_size);
3408 #ifndef OPENSSL_NO_DEPRECATED_3_0
3409     if (ctx->old_ctx != NULL) {
3410         unsigned int l;
3411
3412         if (HMAC_Final(ctx->old_ctx, md, &l) > 0) {
3413             if (len != NULL)
3414                 *len = l;
3415             return 1;
3416         }
3417     }
3418 #endif
3419     return 0;
3420 }
3421
3422 size_t ssl_hmac_size(const SSL_HMAC *ctx)
3423 {
3424     if (ctx->ctx != NULL)
3425         return EVP_MAC_size(ctx->ctx);
3426 #ifndef OPENSSL_NO_DEPRECATED_3_0
3427     if (ctx->old_ctx != NULL)
3428         return HMAC_size(ctx->old_ctx);
3429 #endif
3430     return 0;
3431 }
3432