1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
//! # Abstract Syntax Notation One (ASN.1)
//! This crate is a collection of implementations for the ITU-T X.680–699 set of
//! standards, also known as ASN.1. ASN.1 is divided between two areas: the
//! notation language used to specify Protocol Data Units (PDUs) and the
//! encoding/decoding rules for encoding the specification notation.
//!
//! ## Use cases of ASN.1
//! ASN.1 is used in variety of applications, it's main use is in open
//! standards for large organisations, as ASN.1 itself is an open standard, and
//! the notation provides a language independent way to define protocol
//! messages. The notation language also provides **extensibility** as a
//! first-class citizen, allowing standards to be iterable, without breaking
//! existing production applications. Below are some examples of areas where
//! ASN.1 is in use today.
//!
//! * **Information sharing** — X.500 Directory & LDAP
//! * **Security** — X.509 certificates, PKCS#12
//! * **Wireless communication** — LTE, 5G
//! * **RFID** — ISO 7816-4 (Organization, security and commands for interchange)
//! * **Aviation** — The Aeronautical Telecommunication Network
//!
//! ## What the `asn1` crate provides.
//! The `asn1` is a facade crate over the `asn1_core`, `asn1_der`, and
//! `asn1_notation` crates.
//!
//! * [`asn1_core`] provides definitions ASN.1 data types for handling ASN.1 data
//! as well for defining ASN.1 encoding rules.
//!
//! * [`asn1_der`] provides [`serde::{Deserialize, Serialize}`] implementations
//! for ASN.1 DER (Distingushed Encoding Rules).
//!
//! * [`asn1_notation`] provides a interface to an ASN.1 notation compiler.
//! **Note:** The notation compiler is still a work in progress, and its use
//! is **not currently recommended.**
//!
//! [`asn1_core`]: ./core/
//! [`asn1_der`]: ./der/
//! [`asn1_notation`]: ./notation/
//! [`serde::{Deserialize, Serialize}`]: docs.serde.rs/serde

pub use core::{self, *};

#[cfg(feature = "der")]
pub use der;

#[cfg(feature = "notation")]
pub use notation;