Expand description
RFC 5280 X.509 certificate path validation — pure Rust, no_std.
Implements certificate path building and validation per RFC 5280 §6.
§Architecture
Cryptographic signature verification is pluggable via SignatureVerifier.
The default feature set wires in RustCrypto backends for
RSA-PKCS1v15-SHA-{256,384,512} (rsa feature) and
ECDSA-P-256-SHA-256 (p256 feature). The optional p384 feature adds
ECDSA-P-384-SHA-384; rustcrypto enables all three together.
For FIPS-validated crypto, implement SignatureVerifier against
wolfcrypt-rustcrypto and disable the rustcrypto feature.
Revocation checking is handled by pkix-revocation. This crate never
touches the network — use pkix_chain::verify_chain for the combined API.
§Limitations
The following are not currently implemented:
- Additional signature algorithms — Ed25519 (RFC 8032), ECDSA P-521
(RFC 5480), and RSA-PSS (RFC 4055) are not yet wired into the bundled
RustCryptobackends. Tracked underPKIX-gphz. Callers can implementSignatureVerifierfor any algorithm they need without waiting for the bundled backends; the trait is the only algorithm-specific surface in this crate. SHA-1 verifiers (RFC 8017, legacy) are intentionally not shipped; deployments requiring legacy SHA-1 trust must implementSignatureVerifierthemselves. - RFC 4518 full Unicode NFKC DN normalization — ASCII case-folding
plus insignificant-whitespace collapsing is applied.
BMPStringAVA values are transcoded UCS-2-BE → UTF-8 and then compared via the same ASCII-only normalization pipeline, so two AVAs that share Unicode code points but differ only in DER string-type (e.g.BMPString“Foo Co” vsUTF8String“Foo Co”) compare equal. Full RFC 4518 prep (NFKC, non-ASCII Unicode case fold, prohibit/bidi steps) is future work tracked underPKIX-l63j; until it lands, twoBMPStringvalues that contain the same Unicode code points but differ in canonical decomposition (e.g. precomposed U+00E9 ‘é’ vs decomposed U+0065 U+0301 ‘e’+ combining acute) compare unequal.UniversalStringAVA values are rejected by thedercrate at parse time (tag 0x1C is not inder::Tagin 0.7) and never reach the path validator.TeletexStringAVAs use raw DER byte comparison by policy —pkix-pathdeliberately does not transcode T.61 to Unicode; seeany_to_str_bytesrustdoc for the rationale. - Online revocation — revocation is handled by
pkix-revocation(CRL/OCSP); this crate is network-free by design. - Path building — converting an unordered bag of certificates into a
validated chain is handled by
pkix-path-builder. This crate validates a caller-ordered&[Certificate]only. - AIA fetching — chains with missing intermediates are not
reassembled from
AuthorityInfoAccessURIs. Callers must supply a complete chain. Thepkix-aiacrate (trait +NoAiaFetcherdefault) andpkix-aia-httpadapter are tracked underPKIX-zkjb.
Modules§
- serde_
der serde - Helper module for format-adaptive serde serialization of DER-encodable
types. Public so downstream crates (
pkix-chain,pkix-revocation,pkix-truststore) can reuse the same wire form on their own result types without redefining the helpers. Helper functions for serde-serializing DER-encodable types in a format-adaptive wire form.
Structs§
- Default
Verifier p256orp384orrsa - A
SignatureVerifierthat dispatches to availableRustCryptobackends by OID. - DerError
- Opaque wrapper around an underlying ASN.1 / DER error.
- Ecdsa
P256 Verifier p256 - ECDSA P-256 with SHA-256 signature verifier.
- Ecdsa
P384 Verifier p384 - ECDSA P-384 with SHA-384 signature verifier.
- Name
Constraints - Re-exported for use with
TrustAnchor::name_constraints. NameConstraints extension as defined in RFC 5280 Section 4.2.1.10. - Policy
Tree Node - A node in the §6.1.5
valid_policy_tree, exposed for post-validation qualifier extraction onValidatedPath::valid_policy_tree. - RsaPkcs1v15
Sha256 Verifier rsa - RSA with PKCS#1 v1.5 padding and SHA-256 signature verifier.
- RsaPkcs1v15
Sha384 Verifier rsa - RSA with PKCS#1 v1.5 padding and SHA-384 signature verifier.
- RsaPkcs1v15
Sha512 Verifier rsa - RSA with PKCS#1 v1.5 padding and SHA-512 signature verifier.
- Trust
Anchor - A trust anchor used to terminate path validation.
- Validated
Path - The result of a successful certificate path validation.
- Validation
Policy - Policy parameters controlling path validation.
Enums§
- DnAttr
Rule - Compositional rule for asserting required Subject DN attributes on a leaf cert.
- Error
- Errors returned by path validation.
Traits§
- Profile
- A PKI regime profile that bundles identity, citation, and a validation policy.
- Signature
Verifier - Pluggable signature verification backend.
Functions§
- cert_
is_ ca - Returns
Ok(true)ifcertis a CA certificate per itsBasicConstraintsextension (RFC 5280 §4.2.1.9),Ok(false)if the extension is absent orcA = FALSE, andErr(DerError)if the extension is present but cannot be DER-decoded. - names_
match - Compare two distinguished names per RFC 4518 string prep rules.
- validate_
path - Validate a certificate chain from subject to a trust anchor.
- validate_
path_ with_ profile - Validate a certificate chain using a
Profileto produce the policy.
Type Aliases§
- Result
- Result alias for this crate.