Replace .pkey_base_id with a .base_method pointer
authortb <tb@openbsd.org>
Thu, 4 Jan 2024 17:01:26 +0000 (17:01 +0000)
committertb <tb@openbsd.org>
Thu, 4 Jan 2024 17:01:26 +0000 (17:01 +0000)
Every EVP_PKEY_ASN1_METHOD is either an ASN.1 method or an alias.
As such it resolves to an underlying ASN.1 method (in one step).
This information can be stored in a base_method pointer in allusion
to the pkey_base_id, which is the name for the nid (aka pkey_id aka
type) of the underlying method.

For an ASN.1 method, the base method is itself, so the base method
is set as a pointer to itself. For an alias it is of course a pointer
to the underlying method. Then obviously ameth->pkey_base_id is the
same as ameth->base_method->pkey_id, so rework all ASN.1 methods to
follow that.

ok jsing

lib/libcrypto/cmac/cm_ameth.c
lib/libcrypto/dh/dh_ameth.c
lib/libcrypto/dsa/dsa_ameth.c
lib/libcrypto/ec/ec_ameth.c
lib/libcrypto/ec/ecx_methods.c
lib/libcrypto/evp/evp_local.h
lib/libcrypto/evp/p_lib.c
lib/libcrypto/gost/gost89imit_ameth.c
lib/libcrypto/gost/gostr341001_ameth.c
lib/libcrypto/hmac/hm_ameth.c
lib/libcrypto/rsa/rsa_ameth.c

index 04e0eb8..50db617 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: cm_ameth.c,v 1.10 2022/11/26 16:08:51 tb Exp $ */
+/* $OpenBSD: cm_ameth.c,v 1.11 2024/01/04 17:01:26 tb Exp $ */
 /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
  * project 2010.
  */
@@ -77,8 +77,8 @@ cmac_key_free(EVP_PKEY *pkey)
 }
 
 const EVP_PKEY_ASN1_METHOD cmac_asn1_meth = {
+       .base_method = &cmac_asn1_meth,
        .pkey_id = EVP_PKEY_CMAC,
-       .pkey_base_id = EVP_PKEY_CMAC,
 
        .pem_str = "CMAC",
        .info = "OpenSSL CMAC method",
index 43beb46..d51a5be 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: dh_ameth.c,v 1.39 2023/08/12 07:59:48 tb Exp $ */
+/* $OpenBSD: dh_ameth.c,v 1.40 2024/01/04 17:01:26 tb Exp $ */
 /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
  * project 2006.
  */
@@ -523,8 +523,8 @@ dh_pkey_param_check(const EVP_PKEY *pkey)
 }
 
 const EVP_PKEY_ASN1_METHOD dh_asn1_meth = {
+       .base_method = &dh_asn1_meth,
        .pkey_id = EVP_PKEY_DH,
-       .pkey_base_id = EVP_PKEY_DH,
 
        .pem_str = "DH",
        .info = "OpenSSL PKCS#3 DH method",
index d4cce72..f9b6a9e 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: dsa_ameth.c,v 1.56 2024/01/04 16:41:56 tb Exp $ */
+/* $OpenBSD: dsa_ameth.c,v 1.57 2024/01/04 17:01:26 tb Exp $ */
 /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
  * project 2006.
  */
@@ -675,8 +675,8 @@ dsa_pkey_ctrl(EVP_PKEY *pkey, int op, long arg1, void *arg2)
 }
 
 const EVP_PKEY_ASN1_METHOD dsa_asn1_meth = {
+       .base_method = &dsa_asn1_meth,
        .pkey_id = EVP_PKEY_DSA,
-       .pkey_base_id = EVP_PKEY_DSA,
 
        .pem_str = "DSA",
        .info = "OpenSSL DSA method",
@@ -709,25 +709,25 @@ const EVP_PKEY_ASN1_METHOD dsa_asn1_meth = {
 };
 
 const EVP_PKEY_ASN1_METHOD dsa1_asn1_meth = {
+       .base_method = &dsa_asn1_meth,
        .pkey_id = EVP_PKEY_DSA1,
-       .pkey_base_id = EVP_PKEY_DSA,
        .pkey_flags = ASN1_PKEY_ALIAS,
 };
 
 const EVP_PKEY_ASN1_METHOD dsa2_asn1_meth = {
+       .base_method = &dsa_asn1_meth,
        .pkey_id = EVP_PKEY_DSA2,
-       .pkey_base_id = EVP_PKEY_DSA,
        .pkey_flags = ASN1_PKEY_ALIAS,
 };
 
 const EVP_PKEY_ASN1_METHOD dsa3_asn1_meth = {
+       .base_method = &dsa_asn1_meth,
        .pkey_id = EVP_PKEY_DSA3,
-       .pkey_base_id = EVP_PKEY_DSA,
        .pkey_flags = ASN1_PKEY_ALIAS,
 };
 
 const EVP_PKEY_ASN1_METHOD dsa4_asn1_meth = {
+       .base_method = &dsa_asn1_meth,
        .pkey_id = EVP_PKEY_DSA4,
-       .pkey_base_id = EVP_PKEY_DSA,
        .pkey_flags = ASN1_PKEY_ALIAS,
 };
index c22f38b..7ca5b18 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: ec_ameth.c,v 1.50 2023/12/29 18:49:06 tb Exp $ */
+/* $OpenBSD: ec_ameth.c,v 1.51 2024/01/04 17:01:26 tb Exp $ */
 /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
  * project 2006.
  */
@@ -1049,8 +1049,8 @@ ecdh_cms_encrypt(CMS_RecipientInfo *ri)
 #endif
 
 const EVP_PKEY_ASN1_METHOD eckey_asn1_meth = {
+       .base_method = &eckey_asn1_meth,
        .pkey_id = EVP_PKEY_EC,
-       .pkey_base_id = EVP_PKEY_EC,
 
        .pem_str = "EC",
        .info = "OpenSSL EC algorithm",
index 75988d9..cd512a4 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: ecx_methods.c,v 1.10 2023/11/09 11:39:13 tb Exp $ */
+/*     $OpenBSD: ecx_methods.c,v 1.11 2024/01/04 17:01:26 tb Exp $ */
 /*
  * Copyright (c) 2022 Joel Sing <jsing@openbsd.org>
  *
@@ -813,8 +813,8 @@ pkey_ecx_ed_ctrl(EVP_PKEY_CTX *pkey_ctx, int op, int arg1, void *arg2)
 }
 
 const EVP_PKEY_ASN1_METHOD x25519_asn1_meth = {
+       .base_method = &x25519_asn1_meth,
        .pkey_id = EVP_PKEY_X25519,
-       .pkey_base_id = EVP_PKEY_X25519,
        .pkey_flags = 0,
        .pem_str = "X25519",
        .info = "OpenSSL X25519 algorithm",
@@ -851,8 +851,8 @@ const EVP_PKEY_METHOD x25519_pkey_meth = {
 };
 
 const EVP_PKEY_ASN1_METHOD ed25519_asn1_meth = {
+       .base_method = &ed25519_asn1_meth,
        .pkey_id = EVP_PKEY_ED25519,
-       .pkey_base_id = EVP_PKEY_ED25519,
        .pkey_flags = 0,
        .pem_str = "ED25519",
        .info = "OpenSSL ED25519 algorithm",
index eaede44..52fa8e1 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: evp_local.h,v 1.11 2024/01/01 15:23:00 tb Exp $ */
+/* $OpenBSD: evp_local.h,v 1.12 2024/01/04 17:01:26 tb Exp $ */
 /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
  * project 2000.
  */
@@ -90,8 +90,8 @@ struct ecx_key_st {
 };
 
 struct evp_pkey_asn1_method_st {
+       const EVP_PKEY_ASN1_METHOD *base_method;
        int pkey_id;
-       int pkey_base_id;
        unsigned long pkey_flags;
 
        char *pem_str;
index f46666a..b43a0fc 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: p_lib.c,v 1.53 2024/01/04 16:41:56 tb Exp $ */
+/* $OpenBSD: p_lib.c,v 1.54 2024/01/04 17:01:26 tb Exp $ */
 /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
  * All rights reserved.
  *
@@ -222,7 +222,7 @@ EVP_PKEY_asn1_find(ENGINE **pe, int type)
                        break;
                if ((mp->pkey_flags & ASN1_PKEY_ALIAS) == 0)
                        break;
-               type = mp->pkey_base_id;
+               type = mp->base_method->pkey_id;
        }
 
        return mp;
@@ -259,7 +259,7 @@ EVP_PKEY_asn1_get0_info(int *ppkey_id, int *ppkey_base_id, int *ppkey_flags,
        if (ppkey_id)
                *ppkey_id = ameth->pkey_id;
        if (ppkey_base_id)
-               *ppkey_base_id = ameth->pkey_base_id;
+               *ppkey_base_id = ameth->base_method->pkey_id;
        if (ppkey_flags)
                *ppkey_flags = ameth->pkey_flags;
        if (pinfo)
index e300b52..76e285b 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: gost89imit_ameth.c,v 1.4 2022/11/26 16:08:53 tb Exp $ */
+/* $OpenBSD: gost89imit_ameth.c,v 1.5 2024/01/04 17:01:26 tb Exp $ */
 /*
  * Copyright (c) 2014 Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
  * Copyright (c) 2005-2006 Cryptocom LTD
@@ -75,8 +75,8 @@ mac_ctrl_gost(EVP_PKEY *pkey, int op, long arg1, void *arg2)
 }
 
 const EVP_PKEY_ASN1_METHOD gostimit_asn1_meth = {
+       .base_method = &gostimit_asn1_meth,
        .pkey_id = EVP_PKEY_GOSTIMIT,
-       .pkey_base_id = EVP_PKEY_GOSTIMIT,
        .pkey_flags = ASN1_PKEY_SIGPARAM_NULL,
 
        .pem_str = "GOST-MAC",
index f917827..e8e8c8a 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: gostr341001_ameth.c,v 1.23 2024/01/04 16:41:56 tb Exp $ */
+/* $OpenBSD: gostr341001_ameth.c,v 1.24 2024/01/04 17:01:26 tb Exp $ */
 /*
  * Copyright (c) 2014 Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
  * Copyright (c) 2005-2006 Cryptocom LTD
@@ -683,8 +683,8 @@ pkey_ctrl_gost01(EVP_PKEY *pkey, int op, long arg1, void *arg2)
 }
 
 const EVP_PKEY_ASN1_METHOD gostr01_asn1_meth = {
+       .base_method = &gostr01_asn1_meth,
        .pkey_id = EVP_PKEY_GOSTR01,
-       .pkey_base_id = EVP_PKEY_GOSTR01,
        .pkey_flags = ASN1_PKEY_SIGPARAM_NULL,
 
        .pem_str = "GOST2001",
@@ -713,14 +713,14 @@ const EVP_PKEY_ASN1_METHOD gostr01_asn1_meth = {
 };
 
 const EVP_PKEY_ASN1_METHOD gostr12_256_asn1_meth = {
+       .base_method = &gostr01_asn1_meth,
        .pkey_id = EVP_PKEY_GOSTR12_256,
-       .pkey_base_id = EVP_PKEY_GOSTR01,
        .pkey_flags = ASN1_PKEY_ALIAS,
 };
 
 const EVP_PKEY_ASN1_METHOD gostr12_512_asn1_meth = {
+       .base_method = &gostr01_asn1_meth,
        .pkey_id = EVP_PKEY_GOSTR12_512,
-       .pkey_base_id = EVP_PKEY_GOSTR01,
        .pkey_flags = ASN1_PKEY_ALIAS,
 };
 
index 7e6ad6d..8bb1dc7 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: hm_ameth.c,v 1.19 2022/11/26 16:08:53 tb Exp $ */
+/* $OpenBSD: hm_ameth.c,v 1.20 2024/01/04 17:01:26 tb Exp $ */
 /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
  * project 2007.
  */
@@ -153,8 +153,8 @@ hmac_get_priv_key(const EVP_PKEY *pkey, unsigned char *priv, size_t *len)
 }
 
 const EVP_PKEY_ASN1_METHOD hmac_asn1_meth = {
+       .base_method = &hmac_asn1_meth,
        .pkey_id = EVP_PKEY_HMAC,
-       .pkey_base_id = EVP_PKEY_HMAC,
 
        .pem_str = "HMAC",
        .info = "OpenSSL HMAC method",
index 918e7b8..b8957c0 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: rsa_ameth.c,v 1.55 2024/01/04 16:41:56 tb Exp $ */
+/* $OpenBSD: rsa_ameth.c,v 1.56 2024/01/04 17:01:26 tb Exp $ */
 /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
  * project 2006.
  */
@@ -1149,8 +1149,8 @@ rsa_cms_encrypt(CMS_RecipientInfo *ri)
 #endif
 
 const EVP_PKEY_ASN1_METHOD rsa_asn1_meth = {
+       .base_method = &rsa_asn1_meth,
        .pkey_id = EVP_PKEY_RSA,
-       .pkey_base_id = EVP_PKEY_RSA,
        .pkey_flags = ASN1_PKEY_SIGPARAM_NULL,
 
        .pem_str = "RSA",
@@ -1182,16 +1182,16 @@ const EVP_PKEY_ASN1_METHOD rsa_asn1_meth = {
 };
 
 const EVP_PKEY_ASN1_METHOD rsa2_asn1_meth = {
+       .base_method = &rsa_asn1_meth,
        .pkey_id = EVP_PKEY_RSA2,
-       .pkey_base_id = EVP_PKEY_RSA,
        .pkey_flags = ASN1_PKEY_ALIAS,
 
        .pkey_check = rsa_pkey_check,
 };
 
 const EVP_PKEY_ASN1_METHOD rsa_pss_asn1_meth = {
+       .base_method = &rsa_pss_asn1_meth,
        .pkey_id = EVP_PKEY_RSA_PSS,
-       .pkey_base_id = EVP_PKEY_RSA_PSS,
        .pkey_flags = ASN1_PKEY_SIGPARAM_NULL,
 
        .pem_str = "RSA-PSS",