summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortb <>2024-05-28 15:42:09 +0000
committertb <>2024-05-28 15:42:09 +0000
commit30095761087e41664f3fe517c07571a9c4161bc4 (patch)
tree1f413d792d9dc532879ad1a41df2035b4469bd8c
parentce5b4803a36a06007a2dbe499a78a74f7e4ffd2d (diff)
downloadopenbsd-30095761087e41664f3fe517c07571a9c4161bc4.tar.gz
openbsd-30095761087e41664f3fe517c07571a9c4161bc4.tar.bz2
openbsd-30095761087e41664f3fe517c07571a9c4161bc4.zip
Test that invalid operations push the X509V3_R_UNSUPPORTED_OPTION error
-rw-r--r--src/regress/lib/libcrypto/x509/x509_extensions_test.c54
1 files changed, 53 insertions, 1 deletions
diff --git a/src/regress/lib/libcrypto/x509/x509_extensions_test.c b/src/regress/lib/libcrypto/x509/x509_extensions_test.c
index a90a173e1d..9005333fe7 100644
--- a/src/regress/lib/libcrypto/x509/x509_extensions_test.c
+++ b/src/regress/lib/libcrypto/x509/x509_extensions_test.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: x509_extensions_test.c,v 1.1 2024/05/28 15:33:35 tb Exp $ */ 1/* $OpenBSD: x509_extensions_test.c,v 1.2 2024/05/28 15:42:09 tb Exp $ */
2 2
3/* 3/*
4 * Copyright (c) 2024 Theo Buehler <tb@openbsd.org> 4 * Copyright (c) 2024 Theo Buehler <tb@openbsd.org>
@@ -575,6 +575,57 @@ test_x509v3_add1_i2d_add_append(STACK_OF(X509_EXTENSION) **extensions)
575} 575}
576 576
577static int 577static int
578test_x509v3_add1_i2d_invalid_operations(STACK_OF(X509_EXTENSION) **extensions)
579{
580 BASIC_CONSTRAINTS *bc = NULL;
581 long error;
582 int crit, got, nid, op;
583 int failed = 1;
584
585 if (X509v3_get_ext_count(*extensions) != 0) {
586 fprintf(stderr, "%s: FAIL: need empty stack.\n", __func__);
587 goto err;
588 }
589
590 /*
591 * Attempt to add a basic constraint extension with invalid operations
592 */
593
594 nid = NID_basic_constraints;
595 bc = create_basic_constraints(1);
596 crit = 1;
597 for (op = X509V3_ADD_DELETE + 1; op <= X509V3_ADD_OP_MASK; op++) {
598 if ((got = X509V3_add1_i2d(extensions, nid, bc, crit, op)) != -1) {
599 fprintf(stderr, "%s: FAIL: operation %d "
600 "want %d, got %d.\n", __func__, op, -1, got);
601 goto err;
602 }
603 error = ERR_get_error();
604 if (ERR_GET_REASON(error) != X509V3_R_UNSUPPORTED_OPTION) {
605 fprintf(stderr, "%s: FAIL: invalid operation %d "
606 " pushed %d, want %d.\n", __func__, op,
607 ERR_GET_REASON(error), X509V3_R_EXTENSION_EXISTS);
608 goto err;
609 }
610 }
611 BASIC_CONSTRAINTS_free(bc);
612 bc = NULL;
613
614 if ((got = X509v3_get_ext_count(*extensions)) != 0) {
615 fprintf(stderr, "%s: FAIL: expected 0 extensions, have %d.\n",
616 __func__, got);
617 goto err;
618 }
619
620 failed = 0;
621
622 err:
623 BASIC_CONSTRAINTS_free(bc);
624
625 return failed;
626}
627
628static int
578test_x509v3_add1_i2d(void) 629test_x509v3_add1_i2d(void)
579{ 630{
580 STACK_OF(X509_EXTENSION) *extensions; 631 STACK_OF(X509_EXTENSION) *extensions;
@@ -586,6 +637,7 @@ test_x509v3_add1_i2d(void)
586 failed |= test_x509v3_add1_i2d_empty_stack(&extensions); 637 failed |= test_x509v3_add1_i2d_empty_stack(&extensions);
587 failed |= test_x509v3_add1_i2d_single_nid(&extensions); 638 failed |= test_x509v3_add1_i2d_single_nid(&extensions);
588 failed |= test_x509v3_add1_i2d_add_append(&extensions); 639 failed |= test_x509v3_add1_i2d_add_append(&extensions);
640 failed |= test_x509v3_add1_i2d_invalid_operations(&extensions);
589 641
590 sk_X509_EXTENSION_pop_free(extensions, X509_EXTENSION_free); 642 sk_X509_EXTENSION_pop_free(extensions, X509_EXTENSION_free);
591 643