Repository navigation
clazel-x509: vendor x509-limbo and run it through the decoders - #18
Merged
Merged
Conversation
clazel-der (ITU-T X.690 DER decoder and encoder, Phase 3 item 3.5a), taken unchanged from phase3/tls-handover so it can land on its own instead of inside #1. Adds the allowlist rows for its test-only reference engine (der 0.8.2, const-oid, zeroize) and the lock entries. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Suites may now also write a binary artefact beside the Rust table, checked for staleness like the tables. The 41.8 MB corpus becomes a 3.3 MB index and a 17.4 MB certificate file instead of Rust literals. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
limbo.json is byte for byte from upstream (41,791,455 bytes, SHA-256 in SOURCE.md); the index and certificate blob are generated by xtask testdata. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…hecks No path validation yet: every certificate goes through every decoder, the SERVER/SUCCESS leaves are pinned to check_leaf_certificate, and all other testcases are listed by id with a reason. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
CI's conformance step fails a tests/conformance*.rs that prints no clazel-conformance line. One unit per testcase: pinned and passing, listed in NOT_YET_SUPPORTED (expected failures, each with a reason), or neither. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Resolves the conflicts with the x509 and trust-store stack on main: lib.rs and spki/exec.rs take main's (the roots module; the open SPKI views), and README.md keeps main's root-table section and adds the x509-limbo section after it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Stacked on #14, parallel to #15 (both add a section to the new
crates/clazel-x509/README.md, so whichever lands second needs a trivial merge). This is the x509-limbo conformance corpus from Phase 3 §3.5b.Vendored
crates/clazel-x509/tests/data/x509-limbo/holds:limbo.json, byte for byte from C2SP/x509-limbo1080e565f26e544bbe9cf99953be8a57c08e7e20: 41,791,455 bytes, SHA-256611e337b…acd4de, re-checked locally;LICENSE(Apache-2.0) asLICENSE.md;SOURCE.md, which notes that upstream's README claims Apache-2.0 / MIT but the repo ships only the Apache text.Derived (ours, reproducible)
The
xtask testdataconverterxtask/src/testdata/x509_limbo.rswrites:tests/generated/x509_limbo.rs, a 3.3 MB index of the testcases;tests/generated/x509_limbo_certs.bin, 17.4 MB holding the 30,379 distinct certificate DERs.It does not turn the 41.8 MB of JSON into Rust literals.
testdata.rsgainsEXTRA_OUTPUTS, socargo xtask checkalso fails on a stale or orphaned binary output. The converter decodes PEM with its own small strict base64 decoder, becauseclazel-base64would pull vstd into xtask. It adds no new dependencies.Harness (
tests/conformance_limbo.rs; 0.46 s in debug; ignored under Miri)check_leaf_certificate.tests/limbo/not_yet_supported.rs. Most say "needs path validation (3.5b)"; others need CRL checking, chain-search limits, ML-DSA or client-certificate validation. The test fails if an id appears or disappears, or if a listed case starts passing.Findings
rfc5280::ca-as-leafandpathlen::validation-ignores-pathlen-in-leafexpect SUCCESS under RFC 5280, but our stricter WebPKI leaf policy rejects aCA:TRUEleaf. They are listed as a policy difference. mozilla::pkix makes the same choice: it rejects a CA certificate used as an end entity.Local results
I re-ran these:
cargo xtask checkreported STATIC CHECKS PASSED, with both derived files up to date.cargo test -p clazel-x509gives 56 passed, 0 failed.cargo fmt --all --checkand strict clippy (clazel-x509,xtask) are clean.No Verus or full verify was run. Intermediate commit
e4fe0b2has a failing test, which208d884fixes. The crate stays at tier 0.🤖 Generated with Claude Code