Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 30 additions & 0 deletions limbo.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

34 changes: 34 additions & 0 deletions limbo/testcases/rfc5280/nc.py
Original file line number Diff line number Diff line change
Expand Up @@ -785,6 +785,40 @@ def permitted_nonempty_excluded_nonempty(builder: Builder) -> None:
).succeeds()


@testcase
def permitted_nonempty_excluded_empty_sequence(builder: Builder) -> None:
"""
Produces the following **invalid** chain:

```
root -> ICA -> leaf
```

The ICA contains a NameConstraints extension with a permitted dNSName of
"example.com" alongside an excludedSubtrees that is present but empty. The
leaf's SubjectAlternativeName matches the permitted subtree.

An excludedSubtrees that is present but empty violates RFC 5280 4.2.1.10.
"""

# NOTE: Set inner attributes directly to bypass validation.
nc = x509.NameConstraints(
permitted_subtrees=[x509.DNSName("example.com")], excluded_subtrees=None
)
nc._excluded_subtrees = []

root = builder.root_ca()
ica = builder.intermediate_ca(root, name_constraints=ext(nc, critical=True))
leaf = builder.leaf_cert(
ica, san=ext(x509.SubjectAlternativeName([x509.DNSName("example.com")]), critical=False)
)

builder = builder.server_validation().features([Feature.pedantic_rfc5280])
builder.trusted_certs(root).untrusted_intermediates(ica).peer_certificate(
leaf
).expected_peer_name(PeerName(kind=PeerKind.DNS, value="example.com")).fails()


@testcase
def permitted_different_constraint_type(builder: Builder) -> None:
"""
Expand Down
Loading