A X.509 v3 ([RFC5280]) parser, implemented with the nom parser combinator framework.
It is written in pure Rust, fast, and makes extensive use of zero-copy. A lot of care is taken to ensure security and safety of this crate, including design (recursion limit, defensive programming), tests, and fuzzing. It also aims to be panic-free.
The code is available on Github and is part of the Rusticata project.
The main parsing method is
parse_x509_der,
which takes a DER-encoded
certificate as input, and builds a
X509Certificate
object.
For PEM-encoded certificates, use the
pem module.
Parsing a certificate in DER format:
```rust use x509parser::parsex509_der;
static IGCADER: &'static [u8] = includebytes!("../assets/IGC_A.der");
let res = parsex509der(IGCADER); match res { Ok((rem, cert)) => { assert!(rem.isempty()); // asserteq!(cert.tbscertificate.version, 2); }, _ => panic!("x509 parsing failed: {:?}", res), } ```
See also examples/print-cert.rs.
There is a build error in arrayvec with rust 1.34: error[E0658]: use of unstable library feature 'maybe_uninit'
To fix it, force the version of lexical-core down:
cargo update -p lexical-core --precise 0.6.7
der-parser 4.0nid2obj argument is now passed by copy, not referenceThanks: @jannschu
Pem::readtime_to_expiration to Validity objectPem object from BufRead + SeekPem to decode and extract certificateparse_subject_public_key_info publicsn2oid (get an OID by short name)Licensed under either of
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.