ASN.1 parsing, encoding and decoding.
Project description
About
A Python package for ASN.1 parsing, encoding and decoding.
This project is under development and does only support a subset of the ASN.1 specification syntax.
Codecs under development:
Basic Encoding Rules (BER)
Distinguished Encoding Rules (DER)
JSON Encoding Rules (JER)
Aligned Packed Encoding Rules (PER)
Unaligned Packed Encoding Rules (UPER)
XML Encoding Rules (XER)
Basic ASN.1 value notation
Planned codecs:
Octet Encoding Rules (OER)
Project homepage: https://github.com/eerimoq/asn1tools
Documentation: http://asn1tools.readthedocs.org/en/latest
Installation
pip install asn1tools
Example Usage
This is an example ASN.1 specification defining the messages of a fictitious Foo protocol (based on the FooProtocol on Wikipedia).
Foo DEFINITIONS ::= BEGIN
Question ::= SEQUENCE {
id INTEGER,
question IA5String
}
Answer ::= SEQUENCE {
id INTEGER,
answer BOOLEAN
}
END
Scripting
Compile the ASN.1 specification, and encode and decode a question using the default codec (BER).
>>> import asn1tools
>>> foo = asn1tools.compile_files('tests/files/foo.asn')
>>> encoded = foo.encode('Question', {'id': 1, 'question': 'Is 1+1=3?'})
>>> encoded
bytearray(b'0\x0e\x02\x01\x01\x16\x09Is 1+1=3?')
>>> foo.decode('Question', encoded)
{'id': 1, 'question': 'Is 1+1=3?'}
The same ASN.1 specification, but using the PER codec.
>>> import asn1tools
>>> foo = asn1tools.compile_files('tests/files/foo.asn', 'per')
>>> encoded = foo.encode('Question', {'id': 1, 'question': 'Is 1+1=3?'})
>>> encoded
bytearray(b'\x01\x01\tIs 1+1=3?')
>>> foo.decode('Question', encoded)
{'id': 1, 'question': 'Is 1+1=3?'}
See the examples folder for additional examples.
Command line tool
Decode given encoded Question using the default codec (BER).
$ asn1tools decode tests/files/foo.asn Question 300e0201011609497320312b313d333f
question Question ::= {
id 1,
question "Is 1+1=3?"
}
$
Decode given encoded Question using the UPER codec.
$ asn1tools decode --codec uper tests/files/foo.asn Question 01010993cd03156c5eb37e
question Question ::= {
id 1,
question "Is 1+1=3?"
}
$
Continuously decode encoded Questions read from standard input. Any line that cannot be decoded is printed as is, in this example the dates.
$ cat encoded.txt
2018-02-24 11:22:09
300e0201011609497320312b313d333f
2018-02-24 11:24:15
300e0201021609497320322b323d353f
$ cat encoded.txt | asn1tools decode tests/files/foo.asn Question -
2018-02-24 11:22:09
question Question ::= {
id 1,
question "Is 1+1=3?"
}
2018-02-24 11:24:15
question Question ::= {
id 2,
question "Is 2+2=5?"
}
$
Contributing
Fork the repository.
Install prerequisites.
pip install -r requirements.txt
Implement the new feature or bug fix.
Implement test case(s) to ensure that future changes do not break legacy.
Run the tests.
make test
Create a pull request.
Specifications
ASN.1 specifications released by ITU.
General
Encodings
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for asn1tools-0.43.0-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8167d0f591aae4631d55a28a583554a1a93b567095b47971ac7025de2eff5b9f |
|
MD5 | 6d9ce8f034223600d8b61c3224532dfe |
|
BLAKE2b-256 | bf2ef0a0a18032e2184086ab88b87af22704b4361610eaa2358bed63266fafc2 |