Struct x509_parser::extensions::X509Extension[][src]

pub struct X509Extension<'a> {
    pub oid: Oid<'a>,
    pub critical: bool,
    pub value: &'a [u8],
    // some fields omitted
}

Fields

oid: Oid<'a>

OID describing the extension content

critical: bool

Boolean value describing the ‘critical’ attribute of the extension

An extension includes the boolean critical, with a default value of FALSE.

value: &'a [u8]

Raw content of the extension

Implementations

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

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

Parse a DER-encoded X.509 extension

X.509 extensions allow adding attributes to objects like certificates or revocation lists.

Each extension in a certificate is designated as either critical or non-critical. A certificate using system MUST reject the certificate if it encounters a critical extension it does not recognize; however, a non-critical extension MAY be ignored if it is not recognized.

Each extension includes an OID and an ASN.1 structure. When an extension appears in a certificate, the OID appears as the field extnID and the corresponding ASN.1 encoded structure is the value of the octet string extnValue. A certificate MUST NOT include more than one instance of a particular extension.

This function parses the global structure (described above), and will return the object if it succeeds. During this step, it also attempts to parse the content of the extension, if known. The returned object has a parsed_extension method. The returned enum is either a known extension, or the special value ParsedExtension::UnsupportedExtension.

Extension  ::=  SEQUENCE  {
    extnID      OBJECT IDENTIFIER,
    critical    BOOLEAN DEFAULT FALSE,
    extnValue   OCTET STRING  }

Example

static DER: &[u8] = &[
   0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D, 0x0E, 0x04, 0x16, 0x04, 0x14, 0xA3, 0x05, 0x2F, 0x18,
   0x60, 0x50, 0xC2, 0x89, 0x0A, 0xDD, 0x2B, 0x21, 0x4F, 0xFF, 0x8E, 0x4E, 0xA8, 0x30, 0x31,
   0x36 ];

let res = X509Extension::from_der(DER);
match res {
    Ok((_rem, ext)) => {
        println!("Extension OID: {}", ext.oid);
        println!("  Critical: {}", ext.critical);
        let parsed_ext = ext.parsed_extension();
        assert!(*parsed_ext != ParsedExtension::UnsupportedExtension);
        if let ParsedExtension::SubjectKeyIdentifier(key_id) = parsed_ext {
            assert!(key_id.0.len() > 0);
        } else {
            panic!("Extension has wrong type");
        }
    },
    _ => panic!("x509 extension parsing failed: {:?}", res),
}

pub fn new(
    oid: Oid<'a>,
    critical: bool,
    value: &'a [u8],
    parsed_extension: ParsedExtension<'a>
) -> X509Extension<'a>
[src]

pub fn parsed_extension(&self) -> &ParsedExtension<'a>[src]

Return the extension type or UnsupportedExtension if the extension is not implemented.

Trait Implementations

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

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

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

Auto Trait Implementations

impl<'a> RefUnwindSafe for X509Extension<'a>

impl<'a> Send for X509Extension<'a>

impl<'a> Sync for X509Extension<'a>

impl<'a> Unpin for X509Extension<'a>

impl<'a> UnwindSafe for X509Extension<'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.