- /* We don't want the pkey_type names, so we need some extra care */
- int snid, lnid;
-
- snid = OBJ_sn2nid(on->name);
- lnid = OBJ_ln2nid(on->name);
- if (snid != EVP_MD_pkey_type(md) && lnid != EVP_MD_pkey_type(md))
- get_legacy_evp_names(EVP_MD_name(md), on->name, arg);
- else
- get_legacy_evp_names(EVP_MD_name(md), NULL, arg);
+
+ if (md != NULL)
+ get_legacy_evp_names(0, EVP_MD_get_type(md), NULL, arg);
+}
+
+static void get_legacy_pkey_meth_names(const EVP_PKEY_ASN1_METHOD *ameth,
+ void *arg)
+{
+ int nid = 0, base_nid = 0, flags = 0;
+ const char *pem_name = NULL;
+
+ EVP_PKEY_asn1_get0_info(&nid, &base_nid, &flags, NULL, &pem_name, ameth);
+ if (nid != NID_undef) {
+ if ((flags & ASN1_PKEY_ALIAS) == 0) {
+ switch (nid) {
+ case EVP_PKEY_DHX:
+ /* We know that the name "DHX" is used too */
+ get_legacy_evp_names(0, nid, "DHX", arg);
+ /* FALLTHRU */
+ default:
+ get_legacy_evp_names(0, nid, pem_name, arg);
+ }
+ } else {
+ /*
+ * Treat aliases carefully, some of them are undesirable, or
+ * should not be treated as such for providers.
+ */
+
+ switch (nid) {
+ case EVP_PKEY_SM2:
+ /*
+ * SM2 is a separate keytype with providers, not an alias for
+ * EC.
+ */
+ get_legacy_evp_names(0, nid, pem_name, arg);
+ break;
+ default:
+ /* Use the short name of the base nid as the common reference */
+ get_legacy_evp_names(base_nid, nid, pem_name, arg);
+ }
+ }
+ }