asn1

Crates.ioasn1
lib.rsasn1
version0.22.0
created_at2015-07-21 00:33:43.115959+00
updated_at2025-06-20 20:17:15.822042+00
descriptionASN.1 (DER) parser and writer for Rust.
homepage
repositoryhttps://github.com/alex/rust-asn1
max_upload_size
id2639
size261,394
Alex Gaynor (alex)

documentation

README

rust-asn1

Dependency Status Documentation

This is a Rust library for parsing and generating ASN.1 data (DER only).

Installation

Add asn1 to your Cargo.toml:

$ cargo add asn1

Builds on Rust 1.74.0 and newer.

rust-asn1 is compatible with #![no_std] environments:

$ cargo add asn1 --no-default-features

Changelog

Unreleased

[0.22.0]

Added

  • Added Asn1Writable::encoded_length, SimpleAsn1Writable::data_length, and Asn1DefinedByWritable::encoded_length. Implementing these functions reduces the number of re-allocations required when writing. None can be returned if it is not possible to provide an efficient implementation.

Changes

  • Updated MSRV to 1.74.0.

[0.21.3]

Added

  • BitString::new is now const fn.

[0.21.2]

Added

  • BigInt::new, BigUint::new, and DateTime::new are now const fn.

[0.21.1]

Added

  • Parser now exposes a peek_tag method that returns the tag of the next element in the parse, without consuming that element. (#532)
  • Parser now exposes read_explicit_element and read_implicit_element methods that allow parsing EXPLICIT/IMPLICIT elements when the tag number is not known at compile time.
  • PrintableString, Utf8String, BMPString, and UniversalString now #[derive(Hash)]. (#536)

[0.21.0]

Changes

  • Updated MSRV to 1.65.0.

Fixes

  • Fixed "perfect derives" in conjunction with #[derive(Asn1DefinedByRead)] and #[derive(Asn1DefinedByWrite)]. (#506)

[0.20.0]

:rotating_light: Breaking changes

  • Removed Writer::{write_explicit_element, write_optional_explicit_element, write_implicit_element, write_optional_implicit_element}. These can all be better accomplished with the asn1::Explicit and asn1::Implicit types.

Fixes

[0.19.0]

:rotating_light: Breaking changes

  • GeneralizedTime has been renamed to X509GeneralizedTime. The type does not allow fractional seconds, however this restriction is not actually a DER rule, it is specific to X.509. (#494)

  • GeneralizedTime is a new type that accepts fractional seconds replacing the old GeneralizedTime. (#492)

  • #[derive(asn1::Asn1Read)] and #[derive(asn1::Asn1Write)] now implement "perfect derives". (#496)

Commit count: 640

cargo fmt