Commit 48d311ee55 for openssl.org
commit 48d311ee5525324c0e81f6d3ac9072495cf5d330
Author: Matt Caswell <matt@openssl.org>
Date: Mon Dec 15 15:31:08 2025 +0000
Remove EVP_PKEY_asn1_add0()
We remove the ability to add application defined EVP_PKEY_ASN1_METHODs
via the `EVP_PKEY_asn1_add0()` function. We also remove the related function
`EVP_PKEY_asn1_add_alias()`.
Reviewed-by: Dmitry Belyavskiy <beldmit@gmail.com>
Reviewed-by: Neil Horman <nhorman@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/29405)
diff --git a/crypto/asn1/ameth_lib.c b/crypto/asn1/ameth_lib.c
index de63ea96bd..08d1ccbbca 100644
--- a/crypto/asn1/ameth_lib.c
+++ b/crypto/asn1/ameth_lib.c
@@ -22,7 +22,6 @@
#include "standard_methods.h"
typedef int sk_cmp_fn_type(const char *const *a, const char *const *b);
-static STACK_OF(EVP_PKEY_ASN1_METHOD) *app_methods = NULL;
DECLARE_OBJ_BSEARCH_CMP_FN(const EVP_PKEY_ASN1_METHOD *,
const EVP_PKEY_ASN1_METHOD *, ameth);
@@ -39,20 +38,17 @@ IMPLEMENT_OBJ_BSEARCH_CMP_FN(const EVP_PKEY_ASN1_METHOD *,
int EVP_PKEY_asn1_get_count(void)
{
int num = OSSL_NELEM(standard_methods);
- if (app_methods)
- num += sk_EVP_PKEY_ASN1_METHOD_num(app_methods);
return num;
}
const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_get0(int idx)
{
int num = OSSL_NELEM(standard_methods);
- if (idx < 0)
+
+ if (idx < 0 || idx >= num)
return NULL;
- if (idx < num)
- return standard_methods[idx];
- idx -= num;
- return sk_EVP_PKEY_ASN1_METHOD_value(app_methods, idx);
+
+ return standard_methods[idx];
}
static const EVP_PKEY_ASN1_METHOD *pkey_asn1_find(int type)
@@ -61,12 +57,6 @@ static const EVP_PKEY_ASN1_METHOD *pkey_asn1_find(int type)
const EVP_PKEY_ASN1_METHOD *t = &tmp, **ret;
tmp.pkey_id = type;
- if (app_methods) {
- int idx;
- idx = sk_EVP_PKEY_ASN1_METHOD_find(app_methods, &tmp);
- if (idx >= 0)
- return sk_EVP_PKEY_ASN1_METHOD_value(app_methods, idx);
- }
ret = OBJ_bsearch_ameth(&t, standard_methods, OSSL_NELEM(standard_methods));
if (ret == NULL || *ret == NULL)
return NULL;
@@ -116,61 +106,6 @@ const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_find_str(ENGINE **pe,
return NULL;
}
-int EVP_PKEY_asn1_add0(const EVP_PKEY_ASN1_METHOD *ameth)
-{
- EVP_PKEY_ASN1_METHOD tmp = {
- 0,
- };
-
- /*
- * One of the following must be true:
- *
- * pem_str == NULL AND ASN1_PKEY_ALIAS is set
- * pem_str != NULL AND ASN1_PKEY_ALIAS is clear
- *
- * Anything else is an error and may lead to a corrupt ASN1 method table
- */
- if (!((ameth->pem_str == NULL
- && (ameth->pkey_flags & ASN1_PKEY_ALIAS) != 0)
- || (ameth->pem_str != NULL
- && (ameth->pkey_flags & ASN1_PKEY_ALIAS) == 0))) {
- ERR_raise(ERR_LIB_EVP, ERR_R_PASSED_INVALID_ARGUMENT);
- return 0;
- }
-
- if (app_methods == NULL) {
- app_methods = sk_EVP_PKEY_ASN1_METHOD_new(ameth_cmp);
- if (app_methods == NULL)
- return 0;
- }
-
- tmp.pkey_id = ameth->pkey_id;
- if (sk_EVP_PKEY_ASN1_METHOD_find(app_methods, &tmp) >= 0) {
- ERR_raise(ERR_LIB_EVP,
- EVP_R_PKEY_APPLICATION_ASN1_METHOD_ALREADY_REGISTERED);
- return 0;
- }
-
- if (!sk_EVP_PKEY_ASN1_METHOD_push(app_methods, ameth))
- return 0;
- sk_EVP_PKEY_ASN1_METHOD_sort(app_methods);
- return 1;
-}
-
-int EVP_PKEY_asn1_add_alias(int to, int from)
-{
- EVP_PKEY_ASN1_METHOD *ameth;
- ameth = EVP_PKEY_asn1_new(from, ASN1_PKEY_ALIAS, NULL, NULL);
- if (ameth == NULL)
- return 0;
- ameth->pkey_base_id = to;
- if (!EVP_PKEY_asn1_add0(ameth)) {
- EVP_PKEY_asn1_free(ameth);
- return 0;
- }
- return 1;
-}
-
int EVP_PKEY_asn1_get0_info(int *ppkey_id, int *ppkey_base_id,
int *ppkey_flags, const char **pinfo,
const char **ppem_str,
diff --git a/include/openssl/evp.h b/include/openssl/evp.h
index dd6ebe3b98..ea8c4b0fd1 100644
--- a/include/openssl/evp.h
+++ b/include/openssl/evp.h
@@ -1520,8 +1520,6 @@ const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_find(ENGINE **pe, int type);
OSSL_DEPRECATEDIN_3_6
const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_find_str(ENGINE **pe,
const char *str, int len);
-OSSL_DEPRECATEDIN_3_6 int EVP_PKEY_asn1_add0(const EVP_PKEY_ASN1_METHOD *ameth);
-OSSL_DEPRECATEDIN_3_6 int EVP_PKEY_asn1_add_alias(int to, int from);
OSSL_DEPRECATEDIN_3_6
int EVP_PKEY_asn1_get0_info(int *ppkey_id, int *pkey_base_id,
int *ppkey_flags, const char **pinfo,
diff --git a/util/libcrypto.num b/util/libcrypto.num
index 0323b02e3f..da161aad73 100644
--- a/util/libcrypto.num
+++ b/util/libcrypto.num
@@ -1335,8 +1335,6 @@ EVP_PKEY_asn1_get_count ? 4_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_6
EVP_PKEY_asn1_get0 ? 4_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_6
EVP_PKEY_asn1_find ? 4_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_6
EVP_PKEY_asn1_find_str ? 4_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_6
-EVP_PKEY_asn1_add0 ? 4_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_6
-EVP_PKEY_asn1_add_alias ? 4_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_6
EVP_PKEY_asn1_get0_info ? 4_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_6
EVP_PKEY_get0_asn1 ? 4_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_6
EVP_PKEY_asn1_new ? 4_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_6