diff options
author | tb <> | 2023-12-13 05:57:37 +0000 |
---|---|---|
committer | tb <> | 2023-12-13 05:57:37 +0000 |
commit | e05b60bd8a70f5e88bfe9e00677f3e625938a3d0 (patch) | |
tree | a2e44287ccfefdb5ea7879f6842e70ceb53cac5b | |
parent | 3263fea07d931701b2c460a5401f8c4d211ce047 (diff) | |
download | openbsd-e05b60bd8a70f5e88bfe9e00677f3e625938a3d0.tar.gz openbsd-e05b60bd8a70f5e88bfe9e00677f3e625938a3d0.tar.bz2 openbsd-e05b60bd8a70f5e88bfe9e00677f3e625938a3d0.zip |
x509_asn1: avoid lookup table that makes some compilers whine
-rw-r--r-- | src/regress/lib/libcrypto/x509/x509_asn1.c | 96 |
1 files changed, 37 insertions, 59 deletions
diff --git a/src/regress/lib/libcrypto/x509/x509_asn1.c b/src/regress/lib/libcrypto/x509/x509_asn1.c index c7753623f3..f3a4ad0632 100644 --- a/src/regress/lib/libcrypto/x509/x509_asn1.c +++ b/src/regress/lib/libcrypto/x509/x509_asn1.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: x509_asn1.c,v 1.20 2023/06/05 18:32:06 job Exp $ */ | 1 | /* $OpenBSD: x509_asn1.c,v 1.21 2023/12/13 05:57:37 tb Exp $ */ |
2 | /* | 2 | /* |
3 | * Copyright (c) 2023 Job Snijders <job@openbsd.org> | 3 | * Copyright (c) 2023 Job Snijders <job@openbsd.org> |
4 | * | 4 | * |
@@ -29,37 +29,6 @@ | |||
29 | #include <openssl/rsa.h> | 29 | #include <openssl/rsa.h> |
30 | #include <openssl/x509.h> | 30 | #include <openssl/x509.h> |
31 | 31 | ||
32 | static const struct fnnames { | ||
33 | char *name; | ||
34 | void (*fn); | ||
35 | } fnnames[] = { | ||
36 | { "X509_set_version", X509_set_version }, | ||
37 | { "X509_set_serialNumber", X509_set_serialNumber }, | ||
38 | { "X509_set_issuer_name", X509_set_issuer_name }, | ||
39 | { "X509_set_subject_name", X509_set_subject_name }, | ||
40 | { "X509_set_notBefore", X509_set_notBefore }, | ||
41 | { "X509_set_notAfter", X509_set_notAfter }, | ||
42 | { "X509_set_pubkey", X509_set_pubkey }, | ||
43 | { "X509_CRL_set_version", X509_CRL_set_version }, | ||
44 | { "X509_CRL_set_issuer_name", X509_CRL_set_issuer_name }, | ||
45 | { "X509_CRL_set_lastUpdate", X509_CRL_set_lastUpdate }, | ||
46 | { "X509_CRL_set_nextUpdate", X509_CRL_set_nextUpdate }, | ||
47 | { "X509_REQ_add_extensions", X509_REQ_add_extensions }, | ||
48 | { "X509_REQ_add1_attr", X509_REQ_add1_attr }, | ||
49 | { NULL, NULL } | ||
50 | }; | ||
51 | |||
52 | static void | ||
53 | lookup_and_err(void (*fn)) | ||
54 | { | ||
55 | int i; | ||
56 | |||
57 | for (i = 0; fnnames[i].name; i++) { | ||
58 | if (fnnames[i].fn == fn) | ||
59 | errx(1, "%s failed", fnnames[i].name); | ||
60 | } | ||
61 | } | ||
62 | |||
63 | static void | 32 | static void |
64 | x509_setup(unsigned char **der, unsigned char **der2, X509 **x, | 33 | x509_setup(unsigned char **der, unsigned char **der2, X509 **x, |
65 | long dersz, long *der2sz) | 34 | long dersz, long *der2sz) |
@@ -83,7 +52,8 @@ x509_cleanup(X509 **x, unsigned char **der) | |||
83 | } | 52 | } |
84 | 53 | ||
85 | static void | 54 | static void |
86 | x509_set_integer(int (*f)(X509 *, ASN1_INTEGER *), X509 **x, int i) | 55 | x509_set_integer(const char *descr, int (*f)(X509 *, ASN1_INTEGER *), X509 **x, |
56 | int i) | ||
87 | { | 57 | { |
88 | ASN1_INTEGER *ai; | 58 | ASN1_INTEGER *ai; |
89 | 59 | ||
@@ -92,13 +62,13 @@ x509_set_integer(int (*f)(X509 *, ASN1_INTEGER *), X509 **x, int i) | |||
92 | if (!ASN1_INTEGER_set(ai, i)) | 62 | if (!ASN1_INTEGER_set(ai, i)) |
93 | errx(1, "ASN1_INTEGER_set"); | 63 | errx(1, "ASN1_INTEGER_set"); |
94 | if (!f(*x, ai)) | 64 | if (!f(*x, ai)) |
95 | lookup_and_err(f); | 65 | errx(1, "%s: %s failed", __func__, descr); |
96 | 66 | ||
97 | ASN1_INTEGER_free(ai); | 67 | ASN1_INTEGER_free(ai); |
98 | } | 68 | } |
99 | 69 | ||
100 | static void | 70 | static void |
101 | x509_set_name(int (*f)(X509 *, X509_NAME *), X509 **x, | 71 | x509_set_name(const char *descr, int (*f)(X509 *, X509_NAME *), X509 **x, |
102 | const unsigned char *n) | 72 | const unsigned char *n) |
103 | { | 73 | { |
104 | X509_NAME *xn; | 74 | X509_NAME *xn; |
@@ -108,20 +78,21 @@ x509_set_name(int (*f)(X509 *, X509_NAME *), X509 **x, | |||
108 | if (!X509_NAME_add_entry_by_txt(xn, "C", MBSTRING_ASC, n, -1, -1, 0)) | 78 | if (!X509_NAME_add_entry_by_txt(xn, "C", MBSTRING_ASC, n, -1, -1, 0)) |
109 | errx(1, "X509_NAME_add_entry_by_txt"); | 79 | errx(1, "X509_NAME_add_entry_by_txt"); |
110 | if (!f(*x, xn)) | 80 | if (!f(*x, xn)) |
111 | lookup_and_err(f); | 81 | errx(1, "%s: %s failed", __func__, descr); |
112 | 82 | ||
113 | X509_NAME_free(xn); | 83 | X509_NAME_free(xn); |
114 | } | 84 | } |
115 | 85 | ||
116 | static void | 86 | static void |
117 | x509_set_time(int (*f)(X509 *, const ASN1_TIME *), X509 **x, int t) | 87 | x509_set_time(const char *descr, int (*f)(X509 *, const ASN1_TIME *), X509 **x, |
88 | int t) | ||
118 | { | 89 | { |
119 | ASN1_TIME *at; | 90 | ASN1_TIME *at; |
120 | 91 | ||
121 | if ((at = X509_gmtime_adj(NULL, t)) == NULL) | 92 | if ((at = X509_gmtime_adj(NULL, t)) == NULL) |
122 | errx(1, "X509_gmtime_adj"); | 93 | errx(1, "X509_gmtime_adj"); |
123 | if (!f(*x, at)) | 94 | if (!f(*x, at)) |
124 | lookup_and_err(f); | 95 | errx(1, "%s: %s failed", __func__, descr); |
125 | 96 | ||
126 | ASN1_TIME_free(at); | 97 | ASN1_TIME_free(at); |
127 | } | 98 | } |
@@ -172,8 +143,8 @@ x509_crl_cleanup(X509_CRL **xc, unsigned char **der) | |||
172 | } | 143 | } |
173 | 144 | ||
174 | static void | 145 | static void |
175 | x509_crl_set_name(int (*f)(X509_CRL *, X509_NAME *), X509_CRL **xc, | 146 | x509_crl_set_name(const char *descr, int (*f)(X509_CRL *, X509_NAME *), |
176 | const unsigned char *n) | 147 | X509_CRL **xc, const unsigned char *n) |
177 | { | 148 | { |
178 | X509_NAME *xn; | 149 | X509_NAME *xn; |
179 | 150 | ||
@@ -182,20 +153,21 @@ x509_crl_set_name(int (*f)(X509_CRL *, X509_NAME *), X509_CRL **xc, | |||
182 | if (!X509_NAME_add_entry_by_txt(xn, "C", MBSTRING_ASC, n, -1, -1, 0)) | 153 | if (!X509_NAME_add_entry_by_txt(xn, "C", MBSTRING_ASC, n, -1, -1, 0)) |
183 | errx(1, "X509_NAME_add_entry_by_txt"); | 154 | errx(1, "X509_NAME_add_entry_by_txt"); |
184 | if (!f(*xc, xn)) | 155 | if (!f(*xc, xn)) |
185 | lookup_and_err(f); | 156 | errx(1, "%s: %s failed", __func__, descr); |
186 | 157 | ||
187 | X509_NAME_free(xn); | 158 | X509_NAME_free(xn); |
188 | } | 159 | } |
189 | 160 | ||
190 | static void | 161 | static void |
191 | x509_crl_set_time(int (*f)(X509_CRL *, const ASN1_TIME *), X509_CRL **xc, int t) | 162 | x509_crl_set_time(const char *descr, int (*f)(X509_CRL *, const ASN1_TIME *), |
163 | X509_CRL **xc, int t) | ||
192 | { | 164 | { |
193 | ASN1_TIME *at; | 165 | ASN1_TIME *at; |
194 | 166 | ||
195 | if ((at = X509_gmtime_adj(NULL, t)) == NULL) | 167 | if ((at = X509_gmtime_adj(NULL, t)) == NULL) |
196 | errx(1, "X509_gmtime_adj"); | 168 | errx(1, "X509_gmtime_adj"); |
197 | if (!f(*xc, at)) | 169 | if (!f(*xc, at)) |
198 | lookup_and_err(f); | 170 | errx(1, "%s: %s failed", __func__, descr); |
199 | 171 | ||
200 | ASN1_TIME_free(at); | 172 | ASN1_TIME_free(at); |
201 | } | 173 | } |
@@ -247,11 +219,11 @@ test_x509_setters(void) | |||
247 | if (X509_set_pubkey(x, pkey) != 1) | 219 | if (X509_set_pubkey(x, pkey) != 1) |
248 | errx(1, "X509_set_pubkey"); | 220 | errx(1, "X509_set_pubkey"); |
249 | 221 | ||
250 | x509_set_integer(X509_set_serialNumber, &x, 1); | 222 | x509_set_integer("X509_set_serialNumber", X509_set_serialNumber, &x, 1); |
251 | x509_set_time(X509_set_notBefore, &x, 0); | 223 | x509_set_time("X509_set_notBefore", X509_set_notBefore, &x, 0); |
252 | x509_set_time(X509_set_notAfter, &x, 60); | 224 | x509_set_time("X509_set_notAfter", X509_set_notAfter, &x, 60); |
253 | x509_set_name(X509_set_issuer_name, &x, "NL"); | 225 | x509_set_name("X509_set_issuer_name", X509_set_issuer_name, &x, "NL"); |
254 | x509_set_name(X509_set_subject_name, &x, "BE"); | 226 | x509_set_name("X509_set_subject_name", X509_set_subject_name, &x, "BE"); |
255 | 227 | ||
256 | /* one time creation of the original DER */ | 228 | /* one time creation of the original DER */ |
257 | if (!X509_sign(x, pkey, EVP_sha256())) | 229 | if (!X509_sign(x, pkey, EVP_sha256())) |
@@ -268,31 +240,31 @@ test_x509_setters(void) | |||
268 | 240 | ||
269 | /* test X509_set_serialNumber */ | 241 | /* test X509_set_serialNumber */ |
270 | x509_setup(&der, &der2, &a, dersz, &der2sz); | 242 | x509_setup(&der, &der2, &a, dersz, &der2sz); |
271 | x509_set_integer(X509_set_serialNumber, &a, 2); | 243 | x509_set_integer("X509_set_serialNumber", X509_set_serialNumber, &a, 2); |
272 | failed |= x509_compare("X509_set_serialNumber", a, der2, der2sz); | 244 | failed |= x509_compare("X509_set_serialNumber", a, der2, der2sz); |
273 | x509_cleanup(&a, &der2); | 245 | x509_cleanup(&a, &der2); |
274 | 246 | ||
275 | /* test X509_set_issuer_name */ | 247 | /* test X509_set_issuer_name */ |
276 | x509_setup(&der, &der2, &a, dersz, &der2sz); | 248 | x509_setup(&der, &der2, &a, dersz, &der2sz); |
277 | x509_set_name(X509_set_issuer_name, &a, "DE"); | 249 | x509_set_name("X509_set_issuer_name", X509_set_issuer_name, &a, "DE"); |
278 | failed |= x509_compare("X509_set_issuer_name", a, der2, der2sz); | 250 | failed |= x509_compare("X509_set_issuer_name", a, der2, der2sz); |
279 | x509_cleanup(&a, &der2); | 251 | x509_cleanup(&a, &der2); |
280 | 252 | ||
281 | /* test X509_set_subject_name */ | 253 | /* test X509_set_subject_name */ |
282 | x509_setup(&der, &der2, &a, dersz, &der2sz); | 254 | x509_setup(&der, &der2, &a, dersz, &der2sz); |
283 | x509_set_name(X509_set_subject_name, &a, "FR"); | 255 | x509_set_name("X509_set_subject_name", X509_set_subject_name, &a, "FR"); |
284 | failed |= x509_compare("X509_set_subject_name", a, der2, der2sz); | 256 | failed |= x509_compare("X509_set_subject_name", a, der2, der2sz); |
285 | x509_cleanup(&a, &der2); | 257 | x509_cleanup(&a, &der2); |
286 | 258 | ||
287 | /* test X509_set_notBefore */ | 259 | /* test X509_set_notBefore */ |
288 | x509_setup(&der, &der2, &a, dersz, &der2sz); | 260 | x509_setup(&der, &der2, &a, dersz, &der2sz); |
289 | x509_set_time(X509_set_notBefore, &a, 120); | 261 | x509_set_time("X509_set_notBefore", X509_set_notBefore, &a, 120); |
290 | failed |= x509_compare("X509_set_notBefore", a, der2, der2sz); | 262 | failed |= x509_compare("X509_set_notBefore", a, der2, der2sz); |
291 | x509_cleanup(&a, &der2); | 263 | x509_cleanup(&a, &der2); |
292 | 264 | ||
293 | /* test X509_set_notAfter */ | 265 | /* test X509_set_notAfter */ |
294 | x509_setup(&der, &der2, &a, dersz, &der2sz); | 266 | x509_setup(&der, &der2, &a, dersz, &der2sz); |
295 | x509_set_time(X509_set_notAfter, &a, 180); | 267 | x509_set_time("X509_set_notAfter", X509_set_notAfter, &a, 180); |
296 | failed |= x509_compare("X509_set_notAfter", a, der2, der2sz); | 268 | failed |= x509_compare("X509_set_notAfter", a, der2, der2sz); |
297 | x509_cleanup(&a, &der2); | 269 | x509_cleanup(&a, &der2); |
298 | 270 | ||
@@ -335,9 +307,12 @@ test_x509_crl_setters(void) | |||
335 | if (EVP_PKEY_keygen(pkey_ctx, &pkey) <= 0) | 307 | if (EVP_PKEY_keygen(pkey_ctx, &pkey) <= 0) |
336 | errx(1, "EVP_PKEY_keygen"); | 308 | errx(1, "EVP_PKEY_keygen"); |
337 | 309 | ||
338 | x509_crl_set_time(X509_CRL_set_lastUpdate, &xc, 0); | 310 | x509_crl_set_time("X509_CRL_set_lastUpdate", X509_CRL_set_lastUpdate, |
339 | x509_crl_set_time(X509_CRL_set_nextUpdate, &xc, 60); | 311 | &xc, 0); |
340 | x509_crl_set_name(X509_CRL_set_issuer_name, &xc, "NL"); | 312 | x509_crl_set_time("X509_CRL_set_nextUpdate", X509_CRL_set_nextUpdate, |
313 | &xc, 60); | ||
314 | x509_crl_set_name("X509_CRL_set_issuer_name", X509_CRL_set_issuer_name, | ||
315 | &xc, "NL"); | ||
341 | 316 | ||
342 | /* one time creation of the original DER */ | 317 | /* one time creation of the original DER */ |
343 | if (!X509_CRL_sign(xc, pkey, EVP_sha256())) | 318 | if (!X509_CRL_sign(xc, pkey, EVP_sha256())) |
@@ -354,20 +329,23 @@ test_x509_crl_setters(void) | |||
354 | 329 | ||
355 | /* test X509_CRL_set_issuer_name */ | 330 | /* test X509_CRL_set_issuer_name */ |
356 | x509_crl_setup(&der, &der2, &ac, dersz, &der2sz); | 331 | x509_crl_setup(&der, &der2, &ac, dersz, &der2sz); |
357 | x509_crl_set_name(X509_CRL_set_issuer_name, &ac, "DE"); | 332 | x509_crl_set_name("X509_CRL_set_issuer_name", X509_CRL_set_issuer_name, |
333 | &ac, "DE"); | ||
358 | failed |= x509_crl_compare("X509_CRL_set_issuer_name", ac, der2, | 334 | failed |= x509_crl_compare("X509_CRL_set_issuer_name", ac, der2, |
359 | der2sz); | 335 | der2sz); |
360 | x509_crl_cleanup(&ac, &der2); | 336 | x509_crl_cleanup(&ac, &der2); |
361 | 337 | ||
362 | /* test X509_CRL_set_lastUpdate */ | 338 | /* test X509_CRL_set_lastUpdate */ |
363 | x509_crl_setup(&der, &der2, &ac, dersz, &der2sz); | 339 | x509_crl_setup(&der, &der2, &ac, dersz, &der2sz); |
364 | x509_crl_set_time(X509_CRL_set_lastUpdate, &ac, 120); | 340 | x509_crl_set_time("X509_CRL_set_lastUpdate", X509_CRL_set_lastUpdate, |
341 | &ac, 120); | ||
365 | failed |= x509_crl_compare("X509_CRL_set_lastUpdate", ac, der2, der2sz); | 342 | failed |= x509_crl_compare("X509_CRL_set_lastUpdate", ac, der2, der2sz); |
366 | x509_crl_cleanup(&ac, &der2); | 343 | x509_crl_cleanup(&ac, &der2); |
367 | 344 | ||
368 | /* test X509_CRL_set_nextUpdate */ | 345 | /* test X509_CRL_set_nextUpdate */ |
369 | x509_crl_setup(&der, &der2, &ac, dersz, &der2sz); | 346 | x509_crl_setup(&der, &der2, &ac, dersz, &der2sz); |
370 | x509_crl_set_time(X509_CRL_set_nextUpdate, &ac, 180); | 347 | x509_crl_set_time("X509_CRL_set_nextUpdate", X509_CRL_set_nextUpdate, |
348 | &ac, 180); | ||
371 | failed |= x509_crl_compare("X509_CRL_set_nextUpdate", ac, der2, der2sz); | 349 | failed |= x509_crl_compare("X509_CRL_set_nextUpdate", ac, der2, der2sz); |
372 | x509_crl_cleanup(&ac, &der2); | 350 | x509_crl_cleanup(&ac, &der2); |
373 | 351 | ||