Skip to content

facet-rs/facet-asn1

Repository files navigation

Facet logo - a reflection library for Rust

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:

Ko-fi GitHub Sponsors Patreon Zed Depot

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.

About

ASN.1 serialization & deserialization support for Facet

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages