der_parser

Module ber

Source
Expand description

Basic Encoding Rules (BER) objects and parser

§BER Objects

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

To parse primitive objects (for ex. integers or strings), use the parse_ber_ 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 BER integers:

use der_parser::ber::parse_ber_integer;

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

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

Parse a BER sequence containing one integer and an octetstring:

use der_parser::ber::*;

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

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

Modules§

compat
Compatibility module for old (pre-7.0) types

Structs§

BerObject
Representation of a BER-encoded (X.690) object
BerObjectIntoIterator
BerObjectRefIterator
BitStringObject
BitString wrapper
Header
BER/DER object header (identifier and length)
PrettyBer
Pretty-print BER object
Tag
BER/DER Tag as defined in X.680 section 8.4

Enums§

BerObjectContent
BER object content
Class
BER Object class of tag
Length
BER Object Length
PrettyPrinterFlag

Constants§

MAX_OBJECT_SIZE
Default maximum object size (2^32)
MAX_RECURSION
Default maximum recursion limit

Traits§

Visit
BER object tree traversal to walk a shared borrow of a BER object
VisitMut
BER object tree traversal to walk a shared borrow of a BER object

Functions§

ber_encode_headerserialize
Encode header as object
ber_encode_objectserialize
Encode object as BER
ber_encode_object_rawserialize
Encode header and object content as BER, without any validation
ber_encode_tagged_explicitserialize
Encode the provided object in an EXPLICIT tagged value, using the provided tag ans class
ber_encode_tagged_implicitserialize
Encode the provided object in an IMPLICIT tagged value, using the provided tag and class
ber_read_element_content_as
Parse the next bytes as the content of a BER object.
ber_read_element_header
Read an object header
parse_ber
Parse BER object recursively
parse_ber_any
Parse any BER object (not recursive)
parse_ber_any_r
Parse any BER object recursively, specifying the maximum recursion depth
parse_ber_any_with_tag_r
Parse any BER object recursively, specifying the maximum recursion depth and expected tag
parse_ber_bitstring
Read an bitstring value
parse_ber_bmpstring
Read a BmpString value
parse_ber_bool
Read a boolean value
parse_ber_container
Parse a BER object and apply provided function to content
parse_ber_content
Parse the next bytes as the content of a BER object (combinator, header reference)
parse_ber_content2
Parse the next bytes as the content of a BER object (combinator, owned header)
parse_ber_endofcontent
Read end of content marker
parse_ber_enum
Read an enumerated value
parse_ber_explicit_optional
Parse an optional tagged object, applying function to get content
parse_ber_generalizedtime
Read a Generalized time value
parse_ber_generalstring
Read a GeneralString value
parse_ber_graphicstring
Read a GraphicString value
parse_ber_i32
Parse BER object and try to decode it as a 32-bits signed integer
parse_ber_i64
Parse BER object and try to decode it as a 64-bits signed integer
parse_ber_ia5string
Read an IA5 string value. The content is verified to be ASCII.
parse_ber_implicit
Parse an implicit tagged object, applying function to read content
parse_ber_integer
Read an integer value
parse_ber_null
Read a null value
parse_ber_numericstring
Read a numeric string value. The content is verified to contain only digits and spaces.
parse_ber_objectdescriptor
Read an ObjectDescriptor value
parse_ber_octetstring
Read an octetstring value
parse_ber_oid
Read an object identifier value
parse_ber_optional
Combinator for building optional BER values
parse_ber_printablestring
Read a printable string value. The content is verified to contain only the allowed characters.
parse_ber_recursive
Parse BER object recursively, specifying the maximum recursion depth
parse_ber_relative_oid
Read a relative object identifier value
parse_ber_sequence
Parse a sequence of BER elements
parse_ber_sequence_defined
Parse a defined sequence of DER elements (function version)
parse_ber_sequence_defined_g
Parse a defined SEQUENCE object (generic function)
parse_ber_sequence_of
Parse a SEQUENCE OF object
parse_ber_sequence_of_v
Parse a SEQUENCE OF object (returning a vec)
parse_ber_set
Parse a set of BER elements
parse_ber_set_defined
Parse a defined set of DER elements (function version)
parse_ber_set_defined_g
Parse a defined SET object (generic version)
parse_ber_set_of
Parse a SET OF object
parse_ber_set_of_v
Parse a SET OF object (returning a vec)
parse_ber_slice
Parse BER object and get content as slice
parse_ber_t61string
Read a T61 string value
parse_ber_tagged_explicit
Read a TAGGED EXPLICIT value (combinator)
parse_ber_tagged_explicit_g
Read a TAGGED EXPLICIT value (generic version)
parse_ber_tagged_implicit
Read a TAGGED IMPLICIT value (combinator)
parse_ber_tagged_implicit_g
Read a TAGGED IMPLICIT value (generic version)
parse_ber_u32
Parse BER object and try to decode it as a 32-bits unsigned integer
parse_ber_u64
Parse BER object and try to decode it as a 64-bits unsigned integer
parse_ber_universalstring
Read a UniversalString value
parse_ber_utctime
Read an UTC time value
parse_ber_utf8string
Read a UTF-8 string value. The encoding is checked.
parse_ber_videotexstring
Read a Videotex string value
parse_ber_visiblestring
Read a visible string value. The content is verified to contain only the allowed characters.
parse_ber_with_tag
Parse a BER object, expecting a value with specified tag