diff options
| author | tb <> | 2023-12-13 05:57:37 +0000 |
|---|---|---|
| committer | tb <> | 2023-12-13 05:57:37 +0000 |
| commit | a69d53fdab0bf6e4b589d20c4ecb5ed16d43d3da (patch) | |
| tree | a2e44287ccfefdb5ea7879f6842e70ceb53cac5b /src | |
| parent | 979431c0201c5bb2b60eb72ab8802f5078fbee66 (diff) | |
| download | openbsd-a69d53fdab0bf6e4b589d20c4ecb5ed16d43d3da.tar.gz openbsd-a69d53fdab0bf6e4b589d20c4ecb5ed16d43d3da.tar.bz2 openbsd-a69d53fdab0bf6e4b589d20c4ecb5ed16d43d3da.zip | |
x509_asn1: avoid lookup table that makes some compilers whine
Diffstat (limited to 'src')
| -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 | ||
