Search categories, packages and repositories

Package detailsv1.6.8

asn1lib

An ASN1 parser library for Dart. Encodes / decodes from ASN1 Objects to BER bytes

AndroidiOSWebmacOSWindowsLinux
30-day downloads
2.3M
Likes
27
Pub points
150

Install package

flutter pub add asn1lib

Package Overview

Package selection guidance compiled from public package information, community data, and project usage.

asn1lib is a Dart library for parsing and generating ASN.1 (Abstract Syntax Notation One) data structures using BER (Basic Encoding Rules). It enables encoding and decoding of ASN.1 objects to and from binary BER byte streams, making it suitable for working with protocols that rely on ASN.1, such as X.509 certificates, LDAP, and SNMP. The library supports all major platforms including Android, iOS, Web, macOS, Windows, and Linux. It provides a clean, type-safe API for handling complex nested ASN.1 structures.

Use cases

  • Parsing X.509 certificates
  • Working with LDAP data
  • Implementing SNMP clients
  • Handling cryptographic data formats
  • Interoperating with legacy systems

Key features

  • BER encoding/decoding
  • Support for nested ASN.1 structures
  • Cross-platform compatibility
  • Type-safe object mapping
  • Lightweight and minimal dependencies

Suitable for

  • Developers working with cryptographic standards
  • System integrators dealing with ASN.1-based protocols
  • Applications requiring secure data exchange

Considerations

  • Requires understanding of ASN.1 and BER
  • Not ideal for simple JSON-like data
  • Limited documentation compared to mainstream libraries

Original README

Original README snapshot from the linked source repository. Visit the repository for the latest content.

ASN.1 Parser for Dart

Encodes & decodes ASN1 using BER encoding.

Samples

Encoding
import 'package:asn1lib/asn1lib.dart';

var s = ASN1Sequence();
s.add(ASN1Integer(23));
s.add(ASN1OctetString('This is a test'));
s.add(ASN1Boolean(true));

// GET the BER Stream
var bytes = s
.
encodedBytes;
Decoding
import 'package:asn1lib/asn1lib.dart';

// e.g. bytes from the Encoding Example
var p = ASN1Parser(bytes);
var s2 = p.nextObject();
// s2 is a sequence...


// relaxed parsing, returning a generic ASN1Object from (yet) unsupported structures, instead of throwing
var p2 = ASN1Parser(bytes, relaxedParsing: true);
var s3 = p2.nextObject();
// s3 is a sequence...

ASN1 Object classes

The library has been most thoroughly tested against ASN1 primitive class types, such as strings, integers, sequences and sets.

There is minimal support for ASN1 Application, Context-specific and Private classes. If the parser encounters these tags, it will wrap them in an a corresponding object ( ASN1Application, ASN1ContextSpecific, ASN1Private). You can force decode these to another type, by doing something like this:

    var s = parser.nextObject();
    // We expect this is a context-specific class
    expect(s, isA<ASN1ContextSpecific>());
    // which is also an ASN1Object...
    expect(s, isA<ASN1Object>());
    // We expect this is a sequence, so "recast" to a sequence type
    var sequence = ASN1Sequence.fromBytes(s.encodedBytes);
    expect(sequence, isA<ASN1Sequence>());

Breaking Changes

As of 1.6, the default encoding of ASN1OctetString("some string") has changed. It now encodes octets using utf8 encoding. This is different than Dart's default utf16 encoding.

If you need to encode to utf16, you should convert to bytes first:

var x = ASN1OctetString(Uint8List.fromList('some string'.codeUnits));
// new getter
var y = x.utf16StringValue;

The getter ASN1OctetString.stringValue is deprecated. You should use ASN1OctetString.utf8StringValue or ASN1OctetString.utf16StringValue instead.

Issues

ASN1 parsing is complex, so bugs are expected. If you find a bug, please provide a test case that demonstrates the issue, along with the expected output. Bonus points if it is formatted as a dart test.

References

  • https://letsencrypt.org/docs/a-warm-welcome-to-asn1-and-der/
  • https://luca.ntop.org/Teaching/Appunti/asn1.html
  • https://ldap.com/ldapv3-wire-protocol-reference-asn1-ber/

Categories

Source repository

Projects using this package