summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto
diff options
context:
space:
mode:
authortb <>2024-01-04 16:41:56 +0000
committertb <>2024-01-04 16:41:56 +0000
commit7a63cf228d8c89efdb78c641551b9bac57739698 (patch)
tree42c88a97ebc87bb0e93b4c3ce66bffb8d866247f /src/lib/libcrypto
parent5476a9d1ff0475bb9440b5e67a3837b7ed91fd7c (diff)
downloadopenbsd-7a63cf228d8c89efdb78c641551b9bac57739698.tar.gz
openbsd-7a63cf228d8c89efdb78c641551b9bac57739698.tar.bz2
openbsd-7a63cf228d8c89efdb78c641551b9bac57739698.zip
Split ameth arrays into individual methods
For some reason DSA, GOST, and RSA had their ASN.1 methods stored in an array. This is clumsy and the only benefit is that one saves a few externs in p_lib.c. They were also arranged by ascending NID because of bsearch() madness. Split them up and arrange the methods by name, which is much saner and simpler. ok jsing
Diffstat (limited to 'src/lib/libcrypto')
-rw-r--r--src/lib/libcrypto/dsa/dsa_ameth.c118
-rw-r--r--src/lib/libcrypto/evp/p_lib.c35
-rw-r--r--src/lib/libcrypto/gost/gostr341001_ameth.c82
-rw-r--r--src/lib/libcrypto/rsa/rsa_ameth.c64
4 files changed, 150 insertions, 149 deletions
diff --git a/src/lib/libcrypto/dsa/dsa_ameth.c b/src/lib/libcrypto/dsa/dsa_ameth.c
index 4c20b45b18..d4cce72fcb 100644
--- a/src/lib/libcrypto/dsa/dsa_ameth.c
+++ b/src/lib/libcrypto/dsa/dsa_ameth.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: dsa_ameth.c,v 1.55 2023/08/12 07:59:48 tb Exp $ */ 1/* $OpenBSD: dsa_ameth.c,v 1.56 2024/01/04 16:41:56 tb Exp $ */
2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL 2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
3 * project 2006. 3 * project 2006.
4 */ 4 */
@@ -674,64 +674,60 @@ dsa_pkey_ctrl(EVP_PKEY *pkey, int op, long arg1, void *arg2)
674 } 674 }
675} 675}
676 676
677/* NB these are sorted in pkey_id order, lowest first */ 677const EVP_PKEY_ASN1_METHOD dsa_asn1_meth = {
678 678 .pkey_id = EVP_PKEY_DSA,
679const EVP_PKEY_ASN1_METHOD dsa_asn1_meths[] = { 679 .pkey_base_id = EVP_PKEY_DSA,
680 { 680
681 .pkey_id = EVP_PKEY_DSA2, 681 .pem_str = "DSA",
682 .pkey_base_id = EVP_PKEY_DSA, 682 .info = "OpenSSL DSA method",
683 .pkey_flags = ASN1_PKEY_ALIAS 683
684 }, 684 .pub_decode = dsa_pub_decode,
685 685 .pub_encode = dsa_pub_encode,
686 { 686 .pub_cmp = dsa_pub_cmp,
687 .pkey_id = EVP_PKEY_DSA1, 687 .pub_print = dsa_pub_print,
688 .pkey_base_id = EVP_PKEY_DSA, 688
689 .pkey_flags = ASN1_PKEY_ALIAS 689 .priv_decode = dsa_priv_decode,
690 }, 690 .priv_encode = dsa_priv_encode,
691 691 .priv_print = dsa_priv_print,
692 { 692
693 .pkey_id = EVP_PKEY_DSA4, 693 .pkey_size = dsa_size,
694 .pkey_base_id = EVP_PKEY_DSA, 694 .pkey_bits = dsa_bits,
695 .pkey_flags = ASN1_PKEY_ALIAS 695 .pkey_security_bits = dsa_security_bits,
696 }, 696
697 697 .param_decode = dsa_param_decode,
698 { 698 .param_encode = dsa_param_encode,
699 .pkey_id = EVP_PKEY_DSA3, 699 .param_missing = dsa_missing_parameters,
700 .pkey_base_id = EVP_PKEY_DSA, 700 .param_copy = dsa_copy_parameters,
701 .pkey_flags = ASN1_PKEY_ALIAS 701 .param_cmp = dsa_cmp_parameters,
702 }, 702 .param_print = dsa_param_print,
703 703 .sig_print = dsa_sig_print,
704 { 704
705 .pkey_id = EVP_PKEY_DSA, 705 .pkey_free = dsa_free,
706 .pkey_base_id = EVP_PKEY_DSA, 706 .pkey_ctrl = dsa_pkey_ctrl,
707 707 .old_priv_decode = old_dsa_priv_decode,
708 .pem_str = "DSA", 708 .old_priv_encode = old_dsa_priv_encode
709 .info = "OpenSSL DSA method", 709};
710 710
711 .pub_decode = dsa_pub_decode, 711const EVP_PKEY_ASN1_METHOD dsa1_asn1_meth = {
712 .pub_encode = dsa_pub_encode, 712 .pkey_id = EVP_PKEY_DSA1,
713 .pub_cmp = dsa_pub_cmp, 713 .pkey_base_id = EVP_PKEY_DSA,
714 .pub_print = dsa_pub_print, 714 .pkey_flags = ASN1_PKEY_ALIAS,
715 715};
716 .priv_decode = dsa_priv_decode, 716
717 .priv_encode = dsa_priv_encode, 717const EVP_PKEY_ASN1_METHOD dsa2_asn1_meth = {
718 .priv_print = dsa_priv_print, 718 .pkey_id = EVP_PKEY_DSA2,
719 719 .pkey_base_id = EVP_PKEY_DSA,
720 .pkey_size = dsa_size, 720 .pkey_flags = ASN1_PKEY_ALIAS,
721 .pkey_bits = dsa_bits, 721};
722 .pkey_security_bits = dsa_security_bits, 722
723 723const EVP_PKEY_ASN1_METHOD dsa3_asn1_meth = {
724 .param_decode = dsa_param_decode, 724 .pkey_id = EVP_PKEY_DSA3,
725 .param_encode = dsa_param_encode, 725 .pkey_base_id = EVP_PKEY_DSA,
726 .param_missing = dsa_missing_parameters, 726 .pkey_flags = ASN1_PKEY_ALIAS,
727 .param_copy = dsa_copy_parameters, 727};
728 .param_cmp = dsa_cmp_parameters, 728
729 .param_print = dsa_param_print, 729const EVP_PKEY_ASN1_METHOD dsa4_asn1_meth = {
730 .sig_print = dsa_sig_print, 730 .pkey_id = EVP_PKEY_DSA4,
731 731 .pkey_base_id = EVP_PKEY_DSA,
732 .pkey_free = dsa_free, 732 .pkey_flags = ASN1_PKEY_ALIAS,
733 .pkey_ctrl = dsa_pkey_ctrl,
734 .old_priv_decode = old_dsa_priv_decode,
735 .old_priv_encode = old_dsa_priv_encode
736 }
737}; 733};
diff --git a/src/lib/libcrypto/evp/p_lib.c b/src/lib/libcrypto/evp/p_lib.c
index b64977bab8..f46666a008 100644
--- a/src/lib/libcrypto/evp/p_lib.c
+++ b/src/lib/libcrypto/evp/p_lib.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: p_lib.c,v 1.52 2024/01/01 15:23:00 tb Exp $ */ 1/* $OpenBSD: p_lib.c,v 1.53 2024/01/04 16:41:56 tb Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
@@ -133,33 +133,40 @@
133 133
134extern const EVP_PKEY_ASN1_METHOD cmac_asn1_meth; 134extern const EVP_PKEY_ASN1_METHOD cmac_asn1_meth;
135extern const EVP_PKEY_ASN1_METHOD dh_asn1_meth; 135extern const EVP_PKEY_ASN1_METHOD dh_asn1_meth;
136extern const EVP_PKEY_ASN1_METHOD dsa_asn1_meths[]; 136extern const EVP_PKEY_ASN1_METHOD dsa_asn1_meth;
137extern const EVP_PKEY_ASN1_METHOD dsa1_asn1_meth;
138extern const EVP_PKEY_ASN1_METHOD dsa2_asn1_meth;
139extern const EVP_PKEY_ASN1_METHOD dsa3_asn1_meth;
140extern const EVP_PKEY_ASN1_METHOD dsa4_asn1_meth;
137extern const EVP_PKEY_ASN1_METHOD eckey_asn1_meth; 141extern const EVP_PKEY_ASN1_METHOD eckey_asn1_meth;
138extern const EVP_PKEY_ASN1_METHOD ed25519_asn1_meth; 142extern const EVP_PKEY_ASN1_METHOD ed25519_asn1_meth;
139extern const EVP_PKEY_ASN1_METHOD gostimit_asn1_meth; 143extern const EVP_PKEY_ASN1_METHOD gostimit_asn1_meth;
140extern const EVP_PKEY_ASN1_METHOD gostr01_asn1_meths[]; 144extern const EVP_PKEY_ASN1_METHOD gostr01_asn1_meth;
145extern const EVP_PKEY_ASN1_METHOD gostr12_256_asn1_meth;
146extern const EVP_PKEY_ASN1_METHOD gostr12_512_asn1_meth;
141extern const EVP_PKEY_ASN1_METHOD hmac_asn1_meth; 147extern const EVP_PKEY_ASN1_METHOD hmac_asn1_meth;
142extern const EVP_PKEY_ASN1_METHOD rsa_asn1_meths[]; 148extern const EVP_PKEY_ASN1_METHOD rsa_asn1_meth;
149extern const EVP_PKEY_ASN1_METHOD rsa2_asn1_meth;
143extern const EVP_PKEY_ASN1_METHOD rsa_pss_asn1_meth; 150extern const EVP_PKEY_ASN1_METHOD rsa_pss_asn1_meth;
144extern const EVP_PKEY_ASN1_METHOD x25519_asn1_meth; 151extern const EVP_PKEY_ASN1_METHOD x25519_asn1_meth;
145 152
146static const EVP_PKEY_ASN1_METHOD *asn1_methods[] = { 153static const EVP_PKEY_ASN1_METHOD *asn1_methods[] = {
147 &cmac_asn1_meth, 154 &cmac_asn1_meth,
148 &dh_asn1_meth, 155 &dh_asn1_meth,
149 &dsa_asn1_meths[0], 156 &dsa_asn1_meth,
150 &dsa_asn1_meths[1], 157 &dsa1_asn1_meth,
151 &dsa_asn1_meths[2], 158 &dsa2_asn1_meth,
152 &dsa_asn1_meths[3], 159 &dsa3_asn1_meth,
153 &dsa_asn1_meths[4], 160 &dsa4_asn1_meth,
154 &eckey_asn1_meth, 161 &eckey_asn1_meth,
155 &ed25519_asn1_meth, 162 &ed25519_asn1_meth,
156 &gostimit_asn1_meth, 163 &gostimit_asn1_meth,
157 &gostr01_asn1_meths[0], 164 &gostr01_asn1_meth,
158 &gostr01_asn1_meths[1], 165 &gostr12_256_asn1_meth,
159 &gostr01_asn1_meths[2], 166 &gostr12_512_asn1_meth,
160 &hmac_asn1_meth, 167 &hmac_asn1_meth,
161 &rsa_asn1_meths[0], 168 &rsa_asn1_meth,
162 &rsa_asn1_meths[1], 169 &rsa2_asn1_meth,
163 &rsa_pss_asn1_meth, 170 &rsa_pss_asn1_meth,
164 &x25519_asn1_meth, 171 &x25519_asn1_meth,
165}; 172};
diff --git a/src/lib/libcrypto/gost/gostr341001_ameth.c b/src/lib/libcrypto/gost/gostr341001_ameth.c
index fc3bce412a..f917827f7a 100644
--- a/src/lib/libcrypto/gost/gostr341001_ameth.c
+++ b/src/lib/libcrypto/gost/gostr341001_ameth.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: gostr341001_ameth.c,v 1.22 2023/12/28 21:53:09 tb Exp $ */ 1/* $OpenBSD: gostr341001_ameth.c,v 1.23 2024/01/04 16:41:56 tb Exp $ */
2/* 2/*
3 * Copyright (c) 2014 Dmitry Eremin-Solenikov <dbaryshkov@gmail.com> 3 * Copyright (c) 2014 Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
4 * Copyright (c) 2005-2006 Cryptocom LTD 4 * Copyright (c) 2005-2006 Cryptocom LTD
@@ -682,46 +682,46 @@ pkey_ctrl_gost01(EVP_PKEY *pkey, int op, long arg1, void *arg2)
682 return 1; 682 return 1;
683} 683}
684 684
685const EVP_PKEY_ASN1_METHOD gostr01_asn1_meths[] = { 685const EVP_PKEY_ASN1_METHOD gostr01_asn1_meth = {
686 { 686 .pkey_id = EVP_PKEY_GOSTR01,
687 .pkey_id = EVP_PKEY_GOSTR01, 687 .pkey_base_id = EVP_PKEY_GOSTR01,
688 .pkey_base_id = EVP_PKEY_GOSTR01, 688 .pkey_flags = ASN1_PKEY_SIGPARAM_NULL,
689 .pkey_flags = ASN1_PKEY_SIGPARAM_NULL, 689
690 690 .pem_str = "GOST2001",
691 .pem_str = "GOST2001", 691 .info = "GOST R 34.10-2001",
692 .info = "GOST R 34.10-2001", 692
693 693 .pkey_free = pkey_free_gost01,
694 .pkey_free = pkey_free_gost01, 694 .pkey_ctrl = pkey_ctrl_gost01,
695 .pkey_ctrl = pkey_ctrl_gost01, 695
696 696 .priv_decode = priv_decode_gost01,
697 .priv_decode = priv_decode_gost01, 697 .priv_encode = priv_encode_gost01,
698 .priv_encode = priv_encode_gost01, 698 .priv_print = priv_print_gost01,
699 .priv_print = priv_print_gost01, 699
700 700 .param_decode = param_decode_gost01,
701 .param_decode = param_decode_gost01, 701 .param_encode = param_encode_gost01,
702 .param_encode = param_encode_gost01, 702 .param_missing = param_missing_gost01,
703 .param_missing = param_missing_gost01, 703 .param_copy = param_copy_gost01,
704 .param_copy = param_copy_gost01, 704 .param_cmp = param_cmp_gost01,
705 .param_cmp = param_cmp_gost01, 705 .param_print = param_print_gost01,
706 .param_print = param_print_gost01, 706
707 707 .pub_decode = pub_decode_gost01,
708 .pub_decode = pub_decode_gost01, 708 .pub_encode = pub_encode_gost01,
709 .pub_encode = pub_encode_gost01, 709 .pub_cmp = pub_cmp_gost01,
710 .pub_cmp = pub_cmp_gost01, 710 .pub_print = pub_print_gost01,
711 .pub_print = pub_print_gost01, 711 .pkey_size = pkey_size_gost01,
712 .pkey_size = pkey_size_gost01, 712 .pkey_bits = pkey_bits_gost01,
713 .pkey_bits = pkey_bits_gost01, 713};
714 }, 714
715 { 715const EVP_PKEY_ASN1_METHOD gostr12_256_asn1_meth = {
716 .pkey_id = EVP_PKEY_GOSTR12_256, 716 .pkey_id = EVP_PKEY_GOSTR12_256,
717 .pkey_base_id = EVP_PKEY_GOSTR01, 717 .pkey_base_id = EVP_PKEY_GOSTR01,
718 .pkey_flags = ASN1_PKEY_ALIAS 718 .pkey_flags = ASN1_PKEY_ALIAS,
719 }, 719};
720 { 720
721 .pkey_id = EVP_PKEY_GOSTR12_512, 721const EVP_PKEY_ASN1_METHOD gostr12_512_asn1_meth = {
722 .pkey_base_id = EVP_PKEY_GOSTR01, 722 .pkey_id = EVP_PKEY_GOSTR12_512,
723 .pkey_flags = ASN1_PKEY_ALIAS 723 .pkey_base_id = EVP_PKEY_GOSTR01,
724 }, 724 .pkey_flags = ASN1_PKEY_ALIAS,
725}; 725};
726 726
727#endif 727#endif
diff --git a/src/lib/libcrypto/rsa/rsa_ameth.c b/src/lib/libcrypto/rsa/rsa_ameth.c
index 2266f0cbd5..918e7b8901 100644
--- a/src/lib/libcrypto/rsa/rsa_ameth.c
+++ b/src/lib/libcrypto/rsa/rsa_ameth.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: rsa_ameth.c,v 1.54 2024/01/01 15:43:02 tb Exp $ */ 1/* $OpenBSD: rsa_ameth.c,v 1.55 2024/01/04 16:41:56 tb Exp $ */
2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL 2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
3 * project 2006. 3 * project 2006.
4 */ 4 */
@@ -1148,47 +1148,45 @@ rsa_cms_encrypt(CMS_RecipientInfo *ri)
1148} 1148}
1149#endif 1149#endif
1150 1150
1151const EVP_PKEY_ASN1_METHOD rsa_asn1_meths[] = { 1151const EVP_PKEY_ASN1_METHOD rsa_asn1_meth = {
1152 { 1152 .pkey_id = EVP_PKEY_RSA,
1153 .pkey_id = EVP_PKEY_RSA, 1153 .pkey_base_id = EVP_PKEY_RSA,
1154 .pkey_base_id = EVP_PKEY_RSA, 1154 .pkey_flags = ASN1_PKEY_SIGPARAM_NULL,
1155 .pkey_flags = ASN1_PKEY_SIGPARAM_NULL,
1156 1155
1157 .pem_str = "RSA", 1156 .pem_str = "RSA",
1158 .info = "OpenSSL RSA method", 1157 .info = "OpenSSL RSA method",
1159 1158
1160 .pub_decode = rsa_pub_decode, 1159 .pub_decode = rsa_pub_decode,
1161 .pub_encode = rsa_pub_encode, 1160 .pub_encode = rsa_pub_encode,
1162 .pub_cmp = rsa_pub_cmp, 1161 .pub_cmp = rsa_pub_cmp,
1163 .pub_print = rsa_pub_print, 1162 .pub_print = rsa_pub_print,
1164 1163
1165 .priv_decode = rsa_priv_decode, 1164 .priv_decode = rsa_priv_decode,
1166 .priv_encode = rsa_priv_encode, 1165 .priv_encode = rsa_priv_encode,
1167 .priv_print = rsa_priv_print, 1166 .priv_print = rsa_priv_print,
1168 1167
1169 .pkey_size = rsa_size, 1168 .pkey_size = rsa_size,
1170 .pkey_bits = rsa_bits, 1169 .pkey_bits = rsa_bits,
1171 .pkey_security_bits = rsa_security_bits, 1170 .pkey_security_bits = rsa_security_bits,
1172 1171
1173 .sig_print = rsa_sig_print, 1172 .sig_print = rsa_sig_print,
1174 1173
1175 .pkey_free = rsa_free, 1174 .pkey_free = rsa_free,
1176 .pkey_ctrl = rsa_pkey_ctrl, 1175 .pkey_ctrl = rsa_pkey_ctrl,
1177 .old_priv_decode = old_rsa_priv_decode, 1176 .old_priv_decode = old_rsa_priv_decode,
1178 .old_priv_encode = old_rsa_priv_encode, 1177 .old_priv_encode = old_rsa_priv_encode,
1179 .item_verify = rsa_item_verify, 1178 .item_verify = rsa_item_verify,
1180 .item_sign = rsa_item_sign, 1179 .item_sign = rsa_item_sign,
1181 1180
1182 .pkey_check = rsa_pkey_check, 1181 .pkey_check = rsa_pkey_check,
1183 }, 1182};
1184 1183
1185 { 1184const EVP_PKEY_ASN1_METHOD rsa2_asn1_meth = {
1186 .pkey_id = EVP_PKEY_RSA2, 1185 .pkey_id = EVP_PKEY_RSA2,
1187 .pkey_base_id = EVP_PKEY_RSA, 1186 .pkey_base_id = EVP_PKEY_RSA,
1188 .pkey_flags = ASN1_PKEY_ALIAS, 1187 .pkey_flags = ASN1_PKEY_ALIAS,
1189 1188
1190 .pkey_check = rsa_pkey_check, 1189 .pkey_check = rsa_pkey_check,
1191 },
1192}; 1190};
1193 1191
1194const EVP_PKEY_ASN1_METHOD rsa_pss_asn1_meth = { 1192const EVP_PKEY_ASN1_METHOD rsa_pss_asn1_meth = {