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