[][src]Module der_parser::ber

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

Structs

BerClassFromIntError
BerObject

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

BerObjectHeader

BER object header (identifier and length)

BerObjectIntoIterator
BerObjectRefIterator
BerSizeError
BerTag

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

BitStringObject

BitString wrapper

PrettyBer

Enums

BerClass

BER Object class of tag

BerObjectContent

BER object content

BerSize

Ber Object Length

PrettyPrinterFlag

Constants

MAX_OBJECT_SIZE

Default maximum object size (2^32)

MAX_RECURSION

Default maximum recursion limit

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_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_explicitDeprecated

Parse an optional tagged object, applying function to get content

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_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