[][src]Module der_parser::der

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");

Functions

der_read_element_content

Parse DER object content recursively

der_read_element_content_as

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

der_read_element_header

Read an object header (DER)

parse_der

Parse DER object recursively

parse_der_bitstring

Read an bitstring value

parse_der_bmpstring

Read a BmpString value

parse_der_bool

Read a boolean value

parse_der_container

Parse a DER object and apply provided function to content

parse_der_content

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

parse_der_content2

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

parse_der_endofcontent

Read end of content marker

parse_der_enum

Read an enumerated value

parse_der_explicitDeprecated

Parse an optional tagged object, applying function to get content

parse_der_explicit_optional

Parse an optional tagged object, applying function to get content

parse_der_generalizedtime

Read a Generalized time value

parse_der_generalstring

Read a GeneralString value

parse_der_graphicstring

Read a GraphicString value

parse_der_ia5string

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

parse_der_implicit

Parse an implicit tagged object, applying function to read content

parse_der_integer

Read an integer value

parse_der_null

Read a null value

parse_der_numericstring

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

parse_der_objectdescriptor

Read a ObjectDescriptor value

parse_der_octetstring

Read an octetstring value

parse_der_oid

Read an object identifier value

parse_der_printablestring

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

parse_der_recursive

Parse DER object recursively, specifying the maximum recursion depth

parse_der_relative_oid

Read a relative object identifier value

parse_der_sequence

Parse a sequence of DER elements

parse_der_sequence_defined

Parse a defined sequence of DER elements (function version)

parse_der_sequence_defined_g

Parse a defined SEQUENCE object (generic function)

parse_der_sequence_of

Parse a SEQUENCE OF object

parse_der_sequence_of_v

Parse a SEQUENCE OF object (returning a vec)

parse_der_set

Parse a set of DER elements

parse_der_set_defined

Parse a defined set of DER elements (function version)

parse_der_set_defined_g

Parse a defined SET object (generic version)

parse_der_set_of

Parse a SET OF object

parse_der_set_of_v

Parse a SET OF object (returning a vec)

parse_der_slice

Parse DER object and get content as slice

parse_der_t61string

Read a T61 string value

parse_der_tagged_explicit

Read a TAGGED EXPLICIT value (combinator)

parse_der_tagged_explicit_g

Read a TAGGED EXPLICIT value (generic version)

parse_der_tagged_implicit

Read a TAGGED IMPLICIT value (combinator)

parse_der_tagged_implicit_g

Read a TAGGED IMPLICIT value (generic version)

parse_der_u32

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

parse_der_u64

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

parse_der_universalstring

Read a UniversalString value

parse_der_utctime

Read an UTC time value

parse_der_utf8string

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

parse_der_videotexstring

Read a Videotex string value

parse_der_with_tag

Parse a DER object, expecting a value with specified tag

visiblestring

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

Type Definitions

DerClass

DER Object class of tag (same as BerClass)

DerObject

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

DerObjectContent

BER object content

DerObjectHeader

DER object header (identifier and length)

DerTag

DER tag (same as BER tag)