der_parser

Module der

Source
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§

Header
BER/DER object header (identifier and length)
Tag
BER/DER Tag as defined in X.680 section 8.4

Enums§

Class
BER Object class of tag

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_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_i32
Parse DER object and try to decode it as a 32-bits signed integer
parse_der_i64
Parse DER object and try to decode it as a 64-bits signed integer
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_visiblestring
Read a printable string value. The content is verified to contain only the allowed characters.
parse_der_with_tag
Parse a DER object, expecting a value with specified tag
visiblestringDeprecated

Type Aliases§

DerClassDeprecated
DER Object class of tag (same as BerClass)
DerObject
Representation of a DER-encoded (X.690) object
DerObjectContent
BER object content
DerObjectHeaderDeprecated
DER object header (identifier and length)
DerTagDeprecated
DER tag (same as BER tag)