summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortb <>2023-12-13 05:57:37 +0000
committertb <>2023-12-13 05:57:37 +0000
commite05b60bd8a70f5e88bfe9e00677f3e625938a3d0 (patch)
treea2e44287ccfefdb5ea7879f6842e70ceb53cac5b
parent3263fea07d931701b2c460a5401f8c4d211ce047 (diff)
downloadopenbsd-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.c96
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
32static 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
52static void
53lookup_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
63static void 32static void
64x509_setup(unsigned char **der, unsigned char **der2, X509 **x, 33x509_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
85static void 54static void
86x509_set_integer(int (*f)(X509 *, ASN1_INTEGER *), X509 **x, int i) 55x509_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
100static void 70static void
101x509_set_name(int (*f)(X509 *, X509_NAME *), X509 **x, 71x509_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
116static void 86static void
117x509_set_time(int (*f)(X509 *, const ASN1_TIME *), X509 **x, int t) 87x509_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
174static void 145static void
175x509_crl_set_name(int (*f)(X509_CRL *, X509_NAME *), X509_CRL **xc, 146x509_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
190static void 161static void
191x509_crl_set_time(int (*f)(X509_CRL *, const ASN1_TIME *), X509_CRL **xc, int t) 162x509_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