Module ber

Module ber 

Source
Available on crate feature mtls only.
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_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