summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/x509/x509_lib.c
diff options
context:
space:
mode:
authortb <>2024-07-13 15:08:58 +0000
committertb <>2024-07-13 15:08:58 +0000
commitde05eb4f597b95fed408db9aa9e9474eb6daf5e6 (patch)
tree9bceb8f53165bf9b9a2232987ecac3565db027df /src/lib/libcrypto/x509/x509_lib.c
parentd694a3319273a6e59cc84d958713e0342bfc206d (diff)
downloadopenbsd-de05eb4f597b95fed408db9aa9e9474eb6daf5e6.tar.gz
openbsd-de05eb4f597b95fed408db9aa9e9474eb6daf5e6.tar.bz2
openbsd-de05eb4f597b95fed408db9aa9e9474eb6daf5e6.zip
Unify X.509v3 extension methods
Use C99 initializers for all structs (some were forgotten). Make all the structs static, call them x509v3_ext_* matching NID_*. Add accessors called x509v3_ext_method_* and use these to implement X509V3_EXT_get_nid(). This adds consistency and avoids a few contortions like grouping a few extensions in arrays to save a couple externs. ok beck jsing
Diffstat (limited to 'src/lib/libcrypto/x509/x509_lib.c')
-rw-r--r--src/lib/libcrypto/x509/x509_lib.c173
1 files changed, 94 insertions, 79 deletions
diff --git a/src/lib/libcrypto/x509/x509_lib.c b/src/lib/libcrypto/x509/x509_lib.c
index 8382babbdf..6fa66ab88e 100644
--- a/src/lib/libcrypto/x509/x509_lib.c
+++ b/src/lib/libcrypto/x509/x509_lib.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: x509_lib.c,v 1.23 2024/06/17 05:38:08 tb Exp $ */ 1/* $OpenBSD: x509_lib.c,v 1.24 2024/07/13 15:08:58 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 1999. 3 * project 1999.
4 */ 4 */
@@ -65,89 +65,104 @@
65 65
66#include "x509_local.h" 66#include "x509_local.h"
67 67
68extern const X509V3_EXT_METHOD v3_bcons, v3_nscert, v3_key_usage, v3_ext_ku; 68const X509V3_EXT_METHOD *
69extern const X509V3_EXT_METHOD v3_pkey_usage_period, v3_info, v3_sinfo; 69X509V3_EXT_get_nid(int nid)
70extern const X509V3_EXT_METHOD v3_ns_ia5_list[], v3_alt[], v3_skey_id, v3_akey_id; 70{
71extern const X509V3_EXT_METHOD v3_crl_num, v3_crl_reason, v3_crl_invdate; 71 switch (nid) {
72extern const X509V3_EXT_METHOD v3_delta_crl, v3_cpols, v3_crld, v3_freshest_crl; 72 case NID_authority_key_identifier:
73extern const X509V3_EXT_METHOD v3_ocsp_nonce, v3_ocsp_accresp, v3_ocsp_acutoff; 73 return x509v3_ext_method_authority_key_identifier();
74extern const X509V3_EXT_METHOD v3_ocsp_crlid, v3_ocsp_nocheck, v3_ocsp_serviceloc; 74 case NID_basic_constraints:
75extern const X509V3_EXT_METHOD v3_crl_hold; 75 return x509v3_ext_method_basic_constraints();
76extern const X509V3_EXT_METHOD v3_policy_mappings, v3_policy_constraints; 76 case NID_certificate_issuer:
77extern const X509V3_EXT_METHOD v3_name_constraints, v3_inhibit_anyp, v3_idp; 77 return x509v3_ext_method_certificate_issuer();
78extern const X509V3_EXT_METHOD v3_addr, v3_asid; 78 case NID_certificate_policies:
79extern const X509V3_EXT_METHOD v3_ct_scts[3]; 79 return x509v3_ext_method_certificate_policies();
80 80 case NID_crl_distribution_points:
81static const X509V3_EXT_METHOD *standard_exts[] = { 81 return x509v3_ext_method_crl_distribution_points();
82 &v3_nscert, 82 case NID_crl_number:
83 &v3_ns_ia5_list[0], 83 return x509v3_ext_method_crl_number();
84 &v3_ns_ia5_list[1], 84 case NID_crl_reason:
85 &v3_ns_ia5_list[2], 85 return x509v3_ext_method_crl_reason();
86 &v3_ns_ia5_list[3], 86#ifndef OPENSSL_NO_CT
87 &v3_ns_ia5_list[4], 87 case NID_ct_cert_scts:
88 &v3_ns_ia5_list[5], 88 return x509v3_ext_method_ct_cert_scts();
89 &v3_ns_ia5_list[6], 89 case NID_ct_precert_poison:
90 &v3_skey_id, 90 return x509v3_ext_method_ct_precert_poison();
91 &v3_key_usage, 91 case NID_ct_precert_scts:
92 &v3_pkey_usage_period, 92 return x509v3_ext_method_ct_precert_scts();
93 &v3_alt[0],
94 &v3_alt[1],
95 &v3_bcons,
96 &v3_crl_num,
97 &v3_cpols,
98 &v3_akey_id,
99 &v3_crld,
100 &v3_ext_ku,
101 &v3_delta_crl,
102 &v3_crl_reason,
103#ifndef OPENSSL_NO_OCSP
104 &v3_crl_invdate,
105#endif
106 &v3_info,
107#ifndef OPENSSL_NO_RFC3779
108 &v3_addr,
109 &v3_asid,
110#endif
111#ifndef OPENSSL_NO_OCSP
112 &v3_ocsp_nonce,
113 &v3_ocsp_crlid,
114 &v3_ocsp_accresp,
115 &v3_ocsp_nocheck,
116 &v3_ocsp_acutoff,
117 &v3_ocsp_serviceloc,
118#endif 93#endif
119 &v3_sinfo, 94 case NID_delta_crl:
120 &v3_policy_constraints, 95 return x509v3_ext_method_delta_crl();
96 case NID_ext_key_usage:
97 return x509v3_ext_method_ext_key_usage();
98 case NID_freshest_crl:
99 return x509v3_ext_method_freshest_crl();
121#ifndef OPENSSL_NO_OCSP 100#ifndef OPENSSL_NO_OCSP
122 &v3_crl_hold, 101 case NID_hold_instruction_code:
102 return x509v3_ext_method_hold_instruction_code();
103 case NID_id_pkix_OCSP_CrlID:
104 return x509v3_ext_method_id_pkix_OCSP_CrlID();
105 case NID_id_pkix_OCSP_Nonce:
106 return x509v3_ext_method_id_pkix_OCSP_Nonce();
107 case NID_id_pkix_OCSP_acceptableResponses:
108 return x509v3_ext_method_id_pkix_OCSP_acceptableResponses();
109 case NID_id_pkix_OCSP_archiveCutoff:
110 return x509v3_ext_method_id_pkix_OCSP_archiveCutoff();
111 case NID_id_pkix_OCSP_serviceLocator:
112 return x509v3_ext_method_id_pkix_OCSP_serviceLocator();
123#endif 113#endif
124 &v3_name_constraints, 114 case NID_info_access:
125 &v3_policy_mappings, 115 return x509v3_ext_method_info_access();
126 &v3_inhibit_anyp, 116 case NID_inhibit_any_policy:
127 &v3_idp, 117 return x509v3_ext_method_inhibit_any_policy();
128 &v3_alt[2], 118 case NID_invalidity_date:
129 &v3_freshest_crl, 119 return x509v3_ext_method_invalidity_date();
130#ifndef OPENSSL_NO_CT 120 case NID_issuer_alt_name:
131 &v3_ct_scts[0], 121 return x509v3_ext_method_issuer_alt_name();
132 &v3_ct_scts[1], 122 case NID_issuing_distribution_point:
133 &v3_ct_scts[2], 123 return x509v3_ext_method_issuing_distribution_point();
124 case NID_key_usage:
125 return x509v3_ext_method_key_usage();
126 case NID_name_constraints:
127 return x509v3_ext_method_name_constraints();
128 case NID_netscape_base_url:
129 return x509v3_ext_method_netscape_base_url();
130 case NID_netscape_ca_policy_url:
131 return x509v3_ext_method_netscape_ca_policy_url();
132 case NID_netscape_ca_revocation_url:
133 return x509v3_ext_method_netscape_ca_revocation_url();
134 case NID_netscape_cert_type:
135 return x509v3_ext_method_netscape_cert_type();
136 case NID_netscape_comment:
137 return x509v3_ext_method_netscape_comment();
138 case NID_netscape_renewal_url:
139 return x509v3_ext_method_netscape_renewal_url();
140 case NID_netscape_revocation_url:
141 return x509v3_ext_method_netscape_revocation_url();
142 case NID_netscape_ssl_server_name:
143 return x509v3_ext_method_netscape_ssl_server_name();
144 case NID_policy_constraints:
145 return x509v3_ext_method_policy_constraints();
146 case NID_policy_mappings:
147 return x509v3_ext_method_policy_mappings();
148 case NID_private_key_usage_period:
149 return x509v3_ext_method_private_key_usage_period();
150#ifndef OPENSSL_NO_RFC3779
151 case NID_sbgp_ipAddrBlock:
152 return x509v3_ext_method_sbgp_ipAddrBlock();
153 case NID_sbgp_autonomousSysNum:
154 return x509v3_ext_method_sbgp_autonomousSysNum();
134#endif 155#endif
135}; 156 case NID_sinfo_access:
136 157 return x509v3_ext_method_sinfo_access();
137#define STANDARD_EXTENSION_COUNT (sizeof(standard_exts) / sizeof(standard_exts[0])) 158 case NID_subject_alt_name:
138 159 return x509v3_ext_method_subject_alt_name();
139const X509V3_EXT_METHOD * 160 case NID_subject_key_identifier:
140X509V3_EXT_get_nid(int nid) 161 return x509v3_ext_method_subject_key_identifier();
141{ 162 default:
142 size_t i; 163 return NULL;
143
144 for (i = 0; i < STANDARD_EXTENSION_COUNT; i++) {
145 if (standard_exts[i]->ext_nid == nid)
146 return standard_exts[i];
147 } 164 }
148 165};
149 return NULL;
150}
151LCRYPTO_ALIAS(X509V3_EXT_get_nid); 166LCRYPTO_ALIAS(X509V3_EXT_get_nid);
152 167
153const X509V3_EXT_METHOD * 168const X509V3_EXT_METHOD *