Search by

muno92 / asn1-tools

muno92

ASN.1 reader and writer (BER/DER) for PHP

Package info

github.com/muno92/asn1-tools

pkg:composer/muno92/asn1-tools

Statistics

Installs: 12

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 1

v0.2.0 2026-11-07 12:28 UTC

This package is auto-updated.

Last update: 2026-11-13 14:35:20 UTC


README

CI Coverage

asn1-tools

ASN.1 reader and writer (BER/DER) for PHP.

Requirements

  • PHP 8.5+
  • ext-bcmath

Installation

composer require muno92/asn1-tools

Usage

Write (DER)

use Asn1Tools\AsnWriter;
use Asn1Tools\Tag\UniversalTag;

$der = new AsnWriter()
    ->writeSequence(function (AsnWriter $writer) {
        $writer
            ->writeObjectIdentifier('1.2.840.113549.1.1.11')
            ->writeInteger(42)
            ->writeCharacterString(UniversalTag::UTF8_STRING, 'hello');
    })
    ->encode();

Read (BER/DER)

use Asn1Tools\AsnEncodingRules;
use Asn1Tools\AsnReader;
use Asn1Tools\Tag\UniversalTag;

$sequence = new AsnReader($der, AsnEncodingRules::DER)->readSequence();

$sequence->readObjectIdentifier();                         // '1.2.840.113549.1.1.11'
$sequence->readInteger();                                  // BcMath\Number(42)
$sequence->readCharacterString(UniversalTag::UTF8_STRING); // 'hello'

Integers are returned as BcMath\Number so that large values are not truncated.

To inspect an element without knowing its type, use readElement():

$element = new AsnReader("\x02\x02\x01\x2C", AsnEncodingRules::DER)->readElement();

$element->tag->value;    // 0x02 (INTEGER)
$element->headerLength;  // 2 (tag + length bytes)
$element->length;        // 2
$element->contents;      // "\x01\x2C"

PEM

use Asn1Tools\Pem;

$der = Pem::decode(file_get_contents('certificate.pem'));

License

MIT