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_tag
s 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.