diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/regress/lib/libcrypto/x509/x509_extensions_test.c | 54 |
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 | ||
| 577 | static int | 577 | static int |
| 578 | test_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 | |||
| 628 | static int | ||
| 578 | test_x509v3_add1_i2d(void) | 629 | test_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 | ||
