facet-asn1 0.1.0

ASN.1 serialization and deserialization for Facet types
Documentation

Coverage Status crates.io documentation MIT/Apache-2.0 licensed Discord

Logo by Misiasart

Thanks to all individual and corporate sponsors, without whom this work could not exist:

facet-asn1

A #![no_std] ASN.1 serializer and deserializer based on facet

Currently supports Distinguished Encoding Rules (DER) only

Basic Types

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

Other ASN.1 Types

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

Context Specific Type Tags

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.

License

Licensed under either of:

at your option.