muno92 / asn1-tools
ASN.1 reader and writer (BER/DER) for PHP
v0.2.0
2026-11-07 12:28 UTC
Requires
- php: >=8.5
- ext-bcmath: *
Requires (Dev)
- phpstan/phpstan: ^2.1
- phpunit/phpunit: ^12.5 || ^13.0
- symplify/easy-coding-standard: ^13.0
Suggests
None
Provides
None
Conflicts
None
Replaces
None
This package is auto-updated.
Last update: 2026-11-13 14:35:20 UTC
README
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