Logo by Misiasart
Thanks to all individual and corporate sponsors, without whom this work could not exist:
A #![no_std] ASN.1 serializer and deserializer based on facet
Currently supports Distinguished Encoding Rules (DER) only
| ASN.1 Type | Rust |
|---|---|
| BOOLEAN | bool |
| INTEGER | i8, i16, i32, or i64 |
| OCTET STRING | Vec<u8> |
| NULL | Any unit struct |
| REAL | f32 or f64 |
| UTF8String | String |
| CHOICE | enum |
| SEQUENCE | struct |
Newtype structs using the facet::Shape::type_tag property can be used to create other basic types without any content validation:
use facet::Facet;
#[derive(Debug, Clone, Facet, PartialEq, Eq)]
#[facet(type_tag = "IA5String", transparent)]
struct IA5String(String);You can also set context specific BER/DER tags to a given number. Implicit tags must be set as transparent.
use facet::Facet;
// ImplicitString ::= [5] IMPLICIT UTF8String
#[derive(Debug, Facet, PartialEq, Eq)]
#[facet(type_tag = "5", transparent)]
struct ImplicitString(String);
// ExplciitString ::= [5] EXPLICIT UTF8String
#[derive(Debug, Facet, PartialEq, Eq)]
#[facet(type_tag = "5")]
struct ExplicitString(String);The tag classes UNIVERSAL, APPLICATION, and PRIVATE are also supported in type_tags for greater flexibility.
Licensed under either of:
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.