ASN.1 parser, compiler and general swiss army knife
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.
Supported codecs:
Basic Encoding Rules (BER)
Distinguished Encoding Rules (DER)
Generic String Encoding Rules (GSER)
JSON Encoding Rules (JER)
Basic Octet Encoding Rules (OER)
Aligned Packed Encoding Rules (PER)
Unaligned Packed Encoding Rules (UPER)
XML Encoding Rules (XER)
Miscellaneous features:
C source code generator for OER and UPER (with some limitations).
Project homepage: https://github.com/boxtheta/asn1tools-ext
Documentation: TODO: add docs url
Known limitations
The CLASS keyword (X.681) and its friends are not yet supported.
Parametrization (X.683) is not yet supported.
The EMBEDDED PDV type is not yet supported.
The ANY and ANY DEFINED BY types are not supported. They were removed from the ASN.1 standard 1994.
WITH COMPONENT and WITH COMPONENTS constraints are ignored, except for OER REAL.
The DURATION type is not yet supported.
Installation
pip install asn1tools_ext
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.
CLI will be redesigned and placed under another package
Limitations by design:
Only the types BOOLEAN, INTEGER, NULL, OCTET STRING, BIT STRING, ENUMERATED, SEQUENCE, SEQUENCE OF, and CHOICE are supported. The OER generator also supports REAL.
All types must have a known maximum size, i.e. INTEGER (0..7), OCTET STRING (SIZE(12)).
INTEGER must be 64 bits or less.
REAL must be IEEE 754 binary32 or binary64. binary32 is generated as float and binary64 as double.
Recursive types are not supported.
Known limitations:
Extension additions (...) are only supported in the OER generator. See compact_extensions_uper for how to make UPER CHOICE and SEQUENCE extendable without using ....
Named numbers in ENUMERATED are not yet supported.
Other OER and/or UPER C code generators:
See the benchmark example for a comparison of asn1c, asn1scc and asn1tools.
Contributing
Fork the repository.
Install prerequisites.
pip install -r requirements.txtImplement the new feature or bug fix.
Implement test case(s) to ensure that future changes do not break legacy.
Run the tests.
make testCreate a pull request.
Specifications
ASN.1 specifications released by ITU and IETF.
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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file asn1tools_ext-0.2.2.tar.gz.
File metadata
- Download URL: asn1tools_ext-0.2.2.tar.gz
- Upload date:
- Size: 94.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.10 {"installer":{"name":"uv","version":"0.9.10"},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"CachyOS Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
98877c0e7907ca2607bcf4289d5981038feedf2db4aa1f35b53ff1065ac91ea3
|
|
| MD5 |
6711508eec2d2e198e1126a69359b949
|
|
| BLAKE2b-256 |
1838c9826460f947011f911a740adb935fa0a334e576ec8103482e836b5dd316
|
File details
Details for the file asn1tools_ext-0.2.2-py3-none-any.whl.
File metadata
- Download URL: asn1tools_ext-0.2.2-py3-none-any.whl
- Upload date:
- Size: 112.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.10 {"installer":{"name":"uv","version":"0.9.10"},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"CachyOS Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
187a611090ddd909dd1e67a4e5d6a9a956fedf2db01d729b2283b491f363a447
|
|
| MD5 |
f923f394c9777f66ba9de9957d91cc8f
|
|
| BLAKE2b-256 |
0af0db2c52626f4dc1d7df9e4fec8e66beccd3e173c740f530f32b05a7351fd3
|