Struct x509_parser::certificate::X509Certificate[][src]

pub struct X509Certificate<'a> {
    pub tbs_certificate: TbsCertificate<'a>,
    pub signature_algorithm: AlgorithmIdentifier<'a>,
    pub signature_value: BitStringObject<'a>,
}

An X.509 v3 Certificate.

X.509 v3 certificates are defined in RFC5280, section 4.1. This object uses the same structure for content, so for ex the subject can be accessed using the path x509.tbs_certificate.subject.

X509Certificate also contains convenience methods to access the most common fields (subject, issuer, etc.).

A X509Certificate is a zero-copy view over a buffer, so the lifetime is the same as the buffer containing the binary representation.

fn display_x509_info(x509: &X509Certificate<'_>) {
     let subject = &x509.tbs_certificate.subject;
     let issuer = &x509.tbs_certificate.issuer;
     println!("X.509 Subject: {}", subject);
     println!("X.509 Issuer: {}", issuer);
     println!("X.509 serial: {}", x509.tbs_certificate.raw_serial_as_string());
}

Fields

tbs_certificate: TbsCertificate<'a>signature_algorithm: AlgorithmIdentifier<'a>signature_value: BitStringObject<'a>

Implementations

impl<'a> X509Certificate<'a>[src]

pub fn from_der(i: &'a [u8]) -> X509Result<'_, Self>[src]

Parse a DER-encoded X.509 Certificate, 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.

Note that only parsing is done, not validation.

Certificate  ::=  SEQUENCE  {
        tbsCertificate       TBSCertificate,
        signatureAlgorithm   AlgorithmIdentifier,
        signatureValue       BIT STRING  }

Example

To parse a certificate and print the subject and issuer:

let res = parse_x509_certificate(DER);
match res {
    Ok((_rem, x509)) => {
        let subject = &x509.tbs_certificate.subject;
        let issuer = &x509.tbs_certificate.issuer;
        println!("X.509 Subject: {}", subject);
        println!("X.509 Issuer: {}", issuer);
    },
    _ => panic!("x509 parsing failed: {:?}", res),
}

pub fn version(&self) -> X509Version[src]

Get the version of the encoded certificate

pub fn subject(&self) -> &X509Name<'_>[src]

Get the certificate subject.

pub fn issuer(&self) -> &X509Name<'_>[src]

Get the certificate issuer.

pub fn validity(&self) -> &Validity[src]

Get the certificate validity.

pub fn extensions(&self) -> &HashMap<Oid<'_>, X509Extension<'_>>[src]

Get the certificate extensions.

pub fn verify_signature(
    &self,
    public_key: Option<&SubjectPublicKeyInfo<'_>>
) -> Result<(), X509Error>
[src]

Verify the cryptographic signature of this certificate

public_key is the public key of the signer. For a self-signed certificate, (for ex. a public root certificate authority), this is the key from the certificate, so you can use None.

For a leaf certificate, this is the public key of the certificate that signed it. It is usually an intermediate authority.

Trait Implementations

impl<'a> Debug for X509Certificate<'a>[src]

impl<'a> PartialEq<X509Certificate<'a>> for X509Certificate<'a>[src]

impl<'a> StructuralPartialEq for X509Certificate<'a>[src]

Auto Trait Implementations

impl<'a> RefUnwindSafe for X509Certificate<'a>

impl<'a> Send for X509Certificate<'a>

impl<'a> Sync for X509Certificate<'a>

impl<'a> Unpin for X509Certificate<'a>

impl<'a> UnwindSafe for X509Certificate<'a>

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> Conv for T

impl<T> Conv for T

impl<T> FmtForward for T

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> Pipe for T where
    T: ?Sized

impl<T> Pipe for T

impl<T> PipeAsRef for T

impl<T> PipeBorrow for T

impl<T> PipeDeref for T

impl<T> PipeRef for T

impl<T> Tap for T

impl<T> Tap for T

impl<T, U> TapAsRef<U> for T where
    U: ?Sized

impl<T, U> TapBorrow<U> for T where
    U: ?Sized

impl<T> TapDeref for T

impl<T> TryConv for T

impl<T> TryConv for T

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.