logo
Available on crate feature mtls only.
Expand description

Distinguished Encoding Rules (DER) objects and parser

All functions in this crate use BER parsing functions (see the ber module) internally, adding constraints verification where needed.

The objects BerObject and DerObject are the same (type alias): all BER functions, combinators and macros can be used, and provide additional tools for DER parsing. However, DER parsing functions enforce DER constraints in addition of their BER counterparts.

DER Objects

The main object of this crate is DerObject. It contains a header (ber tag, class, and size) and content.

To parse primitive objects (for ex. integers or strings), use the parse_der_ set of functions.

Constructed objects (like sequences, sets or tagged objects) require to use a combinator. This combinator takes a function or closure as input, and returns a new, specialized parser. See the nom parser combinator library for more details on combinators.

Examples

Parse two DER integers:

use der_parser::der::parse_der_integer;

let bytes = [ 0x02, 0x03, 0x01, 0x00, 0x01,
              0x02, 0x03, 0x01, 0x00, 0x00,
];

let (rem, obj1) = parse_der_integer(&bytes).expect("parsing failed");
let (rem, obj2) = parse_der_integer(&bytes).expect("parsing failed");

Parse a BER sequence containing one integer and an octetstring:

use der_parser::der::*;

let bytes = [ 0x30, 0x0a,
              0x02, 0x03, 0x01, 0x00, 0x01,
              0x04, 0x03, 0x62, 0x61, 0x64,
];

let (rem, seq) = parse_der_sequence_defined(|content| {
        let (rem, obj1) = parse_der_integer(content)?;
        let (rem, obj2) = parse_der_octetstring(rem)?;
        Ok((rem, vec![obj1, obj2]))
    })(&bytes)
    .expect("parsing failed");

Structs

BER/DER object header (identifier and length)

BER/DER Tag as defined in X.680 section 8.4

Enums

BER Object class of tag

Functions

Parse DER object content recursively

Parse the next bytes as the content of a DER object.

Read an object header (DER)

Parse DER object recursively

Read an bitstring value

Read a BmpString value

Read a boolean value

Parse a DER object and apply provided function to content

Parse the next bytes as the content of a DER object (combinator, header reference)

Parse the next bytes as the content of a DER object (combinator, owned header)

Read end of content marker

Read an enumerated value

Parse an optional tagged object, applying function to get content

Read a Generalized time value

Read a GeneralString value

Read a GraphicString value

Parse DER object and try to decode it as a 32-bits signed integer

Parse DER object and try to decode it as a 64-bits signed integer

Read an IA5 string value. The content is verified to be ASCII.

Parse an implicit tagged object, applying function to read content

Read an integer value

Read a null value

Read a numeric string value. The content is verified to contain only digits and spaces.

Read a ObjectDescriptor value

Read an octetstring value

Read an object identifier value

Read a printable string value. The content is verified to contain only the allowed characters.

Parse DER object recursively, specifying the maximum recursion depth

Read a relative object identifier value

Parse a sequence of DER elements

Parse a defined sequence of DER elements (function version)

Parse a defined SEQUENCE object (generic function)

Parse a SEQUENCE OF object

Parse a SEQUENCE OF object (returning a vec)

Parse a set of DER elements

Parse a defined set of DER elements (function version)

Parse a defined SET object (generic version)

Parse a SET OF object

Parse a SET OF object (returning a vec)

Parse DER object and get content as slice

Read a T61 string value

Read a TAGGED EXPLICIT value (combinator)

Read a TAGGED EXPLICIT value (generic version)

Read a TAGGED IMPLICIT value (combinator)

Read a TAGGED IMPLICIT value (generic version)

Parse DER object and try to decode it as a 32-bits unsigned integer

Parse DER object and try to decode it as a 64-bits unsigned integer

Read a UniversalString value

Read an UTC time value

Read a UTF-8 string value. The encoding is checked.

Read a Videotex string value

Parse a DER object, expecting a value with specified tag

Read a printable string value. The content is verified to contain only the allowed characters.

Type Definitions

DerClassDeprecated

DER Object class of tag (same as BerClass)

Representation of a DER-encoded (X.690) object

BER object content

DerObjectHeaderDeprecated

DER object header (identifier and length)

DerTagDeprecated

DER tag (same as BER tag)