1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
use crate::error::X509Result;
/// Parse a DER-encoded object, and return the remaining of the input and the built
/// object.
///
/// The returned object uses zero-copy, and so has the same lifetime as the input.
///
#[cfg_attr(
feature = "validate",
doc = r#"
Note that only parsing is done, not validation (see the [`Validate`](crate::validate::Validate) trait).
"#
)]
#[cfg_attr(
not(feature = "validate"),
doc = r#"
Note that only parsing is done, not validation.
"#
)]
///
/// # Example
///
/// To parse a certificate and print the subject and issuer:
///
/// ```rust
/// # use x509_parser::prelude::*;
/// #
/// # static DER: &'static [u8] = include_bytes!("../assets/IGC_A.der");
/// #
/// # fn main() {
/// let res = X509Certificate::from_der(DER);
/// match res {
/// Ok((_rem, x509)) => {
/// let subject = x509.subject();
/// let issuer = x509.issuer();
/// println!("X.509 Subject: {}", subject);
/// println!("X.509 Issuer: {}", issuer);
/// },
/// _ => panic!("x509 parsing failed: {:?}", res),
/// }
/// # }
/// ```
pub trait FromDer<'a>: Sized {
/// Attempt to parse input bytes into a DER object
fn from_der(bytes: &'a [u8]) -> X509Result<'a, Self>;
}