summaryrefslogtreecommitdiff
path: root/src/regress/lib
diff options
context:
space:
mode:
authorjob <>2023-04-28 13:48:38 +0000
committerjob <>2023-04-28 13:48:38 +0000
commit896fc1b57fd38cb071389334aac7ea12d6dc91df (patch)
tree01df5afc826fa4fd8bdc36e1dcfc27fde8468c97 /src/regress/lib
parent0208c36b83f57b5ea0297d0fa4ae8778edb8e772 (diff)
downloadopenbsd-896fc1b57fd38cb071389334aac7ea12d6dc91df.tar.gz
openbsd-896fc1b57fd38cb071389334aac7ea12d6dc91df.tar.bz2
openbsd-896fc1b57fd38cb071389334aac7ea12d6dc91df.zip
Add X509_REQ_add_extensions and to X509_REQ_add1_attr to DER cache test
These new tests won't bubble up a non-zero error exit code because other libcrypto bits still need to land first.
Diffstat (limited to 'src/regress/lib')
-rw-r--r--src/regress/lib/libcrypto/x509/x509_asn1.c140
1 files changed, 139 insertions, 1 deletions
diff --git a/src/regress/lib/libcrypto/x509/x509_asn1.c b/src/regress/lib/libcrypto/x509/x509_asn1.c
index ed50bc6177..4daed41f1e 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.9 2023/04/26 22:05:36 job Exp $ */ 1/* $OpenBSD: x509_asn1.c,v 1.10 2023/04/28 13:48:38 job Exp $ */
2/* 2/*
3 * Copyright (c) 2023 Job Snijders <job@openbsd.org> 3 * Copyright (c) 2023 Job Snijders <job@openbsd.org>
4 * 4 *
@@ -44,6 +44,8 @@ static const struct fnnames {
44 { "X509_CRL_set_issuer_name", X509_CRL_set_issuer_name }, 44 { "X509_CRL_set_issuer_name", X509_CRL_set_issuer_name },
45 { "X509_CRL_set_lastUpdate", X509_CRL_set_lastUpdate }, 45 { "X509_CRL_set_lastUpdate", X509_CRL_set_lastUpdate },
46 { "X509_CRL_set_nextUpdate", X509_CRL_set_nextUpdate }, 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 },
47 { NULL, NULL } 49 { NULL, NULL }
48}; 50};
49 51
@@ -383,12 +385,148 @@ test_x509_crl_setters(void)
383 return failed; 385 return failed;
384} 386}
385 387
388static void
389x509_req_setup(unsigned char **der, unsigned char **der2, X509_REQ **xr,
390 long dersz, long *der2sz)
391{
392 const unsigned char *cpder;
393
394 cpder = *der;
395 if ((*xr = d2i_X509_REQ(NULL, &cpder, dersz)) == NULL)
396 errx(1, "d2i_X509");
397 if ((*der2sz = i2d_X509_REQ(*xr, der2)) <= 0)
398 errx(1, "i2d_X509");
399}
400
401static int
402x509_req_compare(char *f, X509_REQ *xr, const unsigned char *der, long dersz)
403{
404 unsigned char *der_test = NULL;
405 long der_testsz;
406 int rc = 0;
407
408 if ((der_testsz = i2d_X509_REQ(xr, &der_test)) <= 0)
409 errx(1, "i2d_X509_REQ");
410
411 if (dersz == der_testsz) {
412 if (memcmp(der, der_test, dersz) == 0) {
413 warnx("%s() didn't invalidate DER cache", f);
414 rc = 1;
415 } else
416 warnx("%s() OK", f);
417 } else
418 warnx("%s() OK", f);
419
420 free(der_test);
421 return rc;
422}
423
424static void
425x509_req_cleanup(X509_REQ **xr, unsigned char **der)
426{
427 X509_REQ_free(*xr);
428 *xr = NULL;
429 free(*der);
430 *der = NULL;
431}
432
433static int
434test_x509_req_setters(void)
435{
436 EVP_PKEY *pkey = NULL;
437 EVP_PKEY_CTX *pkey_ctx = NULL;
438 X509_REQ *ar = NULL, *xr = NULL;
439 unsigned char *der = NULL, *der2 = NULL;
440 X509_NAME *xn;
441 ASN1_OCTET_STRING *aos;
442 X509_EXTENSION *xe;
443 STACK_OF(X509_EXTENSION) *exts = NULL;
444 ASN1_OBJECT *coid;
445 X509_ATTRIBUTE *xa;
446 long dersz, der2sz;
447 int failed = 0;
448
449 if ((xr = X509_REQ_new()) == NULL)
450 err(1, NULL);
451
452 if (!X509_REQ_set_version(xr, 0))
453 errx(1, "X509_REQ_set_version");
454
455 if ((xn = X509_NAME_new()) == NULL)
456 err(1, NULL);
457 if (!X509_NAME_add_entry_by_txt(xn, "C", MBSTRING_ASC, "NL", -1, -1, 0))
458 errx(1, "X509_NAME_add_entry_by_txt");
459 if (!X509_REQ_set_subject_name(xr, xn))
460 errx(1, "X509_REQ_set_subject_name");
461 X509_NAME_free(xn);
462 xn = NULL;
463
464 if ((pkey_ctx = EVP_PKEY_CTX_new_id(EVP_PKEY_RSA, NULL)) == NULL)
465 errx(1, "EVP_PKEY_CTX_new_id");
466 if (EVP_PKEY_keygen_init(pkey_ctx) != 1)
467 errx(1, "EVP_PKEY_keygen_init");
468 if (EVP_PKEY_CTX_set_rsa_keygen_bits(pkey_ctx, 2048) <= 0)
469 errx(1, "EVP_PKEY_CTX_set_rsa_keygen_bits");
470 if (EVP_PKEY_keygen(pkey_ctx, &pkey) <= 0)
471 errx(1, "EVP_PKEY_keygen");
472 if (!X509_REQ_set_pubkey(xr, pkey))
473 errx(1, "X509_REQ_set_pubkey");
474
475 if (!X509_REQ_sign(xr, pkey, EVP_sha256()))
476 errx(1, "X509_REQ_sign");
477 if ((dersz = i2d_X509_REQ(xr, &der)) <= 0)
478 errx(1, "i2d_X509_REQ");
479
480 /* test X509_REQ_add_extensions */
481 x509_req_setup(&der, &der2, &ar, dersz, &der2sz);
482 if ((aos = ASN1_OCTET_STRING_new()) == NULL)
483 err(1, NULL);
484 ASN1_OCTET_STRING_set(aos, (unsigned char *)"DNS: test.nl",
485 strlen("DNS: test.nl"));
486 if ((xe = X509_EXTENSION_new()) == NULL)
487 err(1, NULL);
488 if (!X509_EXTENSION_create_by_NID(&xe, NID_subject_alt_name, 0, aos))
489 errx(1, "X509_EXTENSION_create_by_NID");
490 if ((exts = sk_X509_EXTENSION_new_null()) == NULL)
491 errx(1, "sk_X509_EXTENSION_new_null");
492 sk_X509_EXTENSION_push(exts, xe);
493 if (!X509_REQ_add_extensions(ar, exts))
494 errx(1, "X509_REQ_add_extensions");
495 failed |= x509_req_compare("X509_REQ_add_extensions", ar, der2, der2sz);
496 x509_req_cleanup(&ar, &der2);
497
498 /* test X509_REQ_add1_attr */
499 x509_req_setup(&der, &der2, &ar, dersz, &der2sz);
500 if ((coid = OBJ_nid2obj(NID_pkcs7_data)) == NULL)
501 errx(1, "OBJ_nid2obj");
502 if ((xa = X509_ATTRIBUTE_create(NID_pkcs9_contentType, V_ASN1_OBJECT,
503 coid)) == NULL)
504 errx(1, "X509_ATTRIBUTE_create");
505 if (!X509_REQ_add1_attr(ar, xa))
506 errx(1, "X509_REQ_add1_attr");
507 failed |= x509_req_compare("X509_REQ_add1_attr", ar, der2, der2sz);
508 x509_req_cleanup(&ar, &der2);
509
510 ASN1_OCTET_STRING_free(aos);
511 X509_EXTENSION_free(xe);
512 X509_ATTRIBUTE_free(xa);
513 EVP_PKEY_free(pkey);
514 EVP_PKEY_CTX_free(pkey_ctx);
515 X509_REQ_free(ar);
516 X509_REQ_free(xr);
517 free(der);
518 free(der2);
519
520 return failed;
521}
522
386int main(void) 523int main(void)
387{ 524{
388 int failed = 0; 525 int failed = 0;
389 526
390 failed |= test_x509_setters(); 527 failed |= test_x509_setters();
391 /* failed |= */ test_x509_crl_setters(); 528 /* failed |= */ test_x509_crl_setters();
529 /* failed |= */ test_x509_req_setters();
392 530
393 return failed; 531 return failed;
394} 532}