|coverage|_
|codecov|_
|nala|_
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/eerimoq/asn1tools
Documentation: http://asn1tools.readthedocs.org/en/latest
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
============
.. code-block:: python
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).
.. code-block:: text
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).
.. code-block:: python
>>> 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.
.. code-block:: python
>>> 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
-----------------
The shell subcommand
^^^^^^^^^^^^^^^^^^^^
Use the command line shell to convert data between given formats. The
default input codec is BER and output codec is GSER (produces human
readable text).
.. code-block:: text
> asn1tools shell
Welcome to the asn1tools shell!
$ help
Commands:
compile
convert
exit
help
$ compile tests/files/foo.asn
$ convert Question 300e0201011609497320312b313d333f
question Question ::= {
id 1,
question "Is 1+1=3?"
}
$ compile --output-codec xer tests/files/foo.asn
$ convert Question 300e0201011609497320312b313d333f
<Question>
<id>1</id>
<question>Is 1+1=3?</question>
</Question>
$ compile -o uper tests/files/foo.asn
$ convert Question 300e0201011609497320312b313d333f
01010993cd03156c5eb37e
$ exit
>
The convert subcommand
^^^^^^^^^^^^^^^^^^^^^^
Convert given encoded Question from BER to GSER (produces human
readable text).
.. code-block:: text
> asn1tools convert tests/files/foo.asn Question 300e0201011609497320312b313d333f
question Question ::= {
id 1,
question "Is 1+1=3?"
}
>
Convert given encoded Question from UPER to XER (xml).
.. code-block:: text
> asn1tools convert -i uper -o xer tests/files/foo.asn Question 01010993cd03156c5eb37e
<Question>
<id>1</id>
<question>Is 1+1=3?</question>
</Question>
>
Convert given encoded Question from UPER to JER (json).
.. code-block:: text
> asn1tools convert -i uper -o jer tests/files/foo.asn Question 01010993cd03156c5eb37e
{
"id": 1,
"question": "Is 1+1=3?"
}
>
Continuously convert encoded Questions read from standard input. Any
line that cannot be converted is printed as is, in this example the
dates.
.. code-block:: text
> cat encoded.txt
2018-02-24 11:22:09
300e0201011609497320312b313d333f
2018-02-24 11:24:15
300e0201021609497320322b323d353f
> cat encoded.txt | asn1tools convert 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?"
}
>
The convert subcommand with a cache
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Convert given encoded PCCH-Message from UPER to GSER with the
``--cache-dir`` option set to ``my_cache``. Using a cache
significantly reduces the command execution time after the first call.
.. code-block:: text
> time asn1tools convert --cache-dir my_cache -i uper tests/files/3gpp/rrc_8_6_0.asn PCCH-Message 28
pcch-message PCCH-Message ::= {
message c1 : paging : {
systemInfoModification true,
nonCriticalExtension {
}
}
}
real 0m2.090s
user 0m1.977s
sys 0m0.032s
> time asn1tools convert --cache-dir my_cache -i uper tests/files/3gpp/rrc_8_6_0.asn PCCH-Message 28
pcch-message PCCH-Message ::= {
message c1 : paging : {
systemInfoModification true,
nonCriticalExtension {
}
}
}
real 0m0.276s
user 0m0.197s
sys 0m0.026s
>
The parse subcommand
^^^^^^^^^^^^^^^^^^^^
Parse given ASN.1 specification and write it as a Python dictionary to
given file. Use the created file to convert given encoded Question
from BER to GSER (produces human readable text). The conversion is
significantly faster than passing .asn-file(s) to the convert
subcommand, especially for larger ASN.1 specifications.
.. code-block:: text
> asn1tools parse tests/files/foo.asn foo.py
> asn1tools convert foo.py Question 300e0201011609497320312b313d333f
question Question ::= {
id 1,
question "Is 1+1=3?"
}
>
The generate C source subcommand
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Generate OER or UPER C source code from an ASN.1 specification.
No dynamic memory is used in the generated code. To achieve this all
types in the ASN.1 specification must have a known maximum size,
i.e. ``INTEGER (0..7)``, ``OCTET STRING (SIZE(12))``, etc.
Below is an example generating OER C source code from
`tests/files/c_source/c_source.asn`_.
.. code-block:: text
> asn1tools generate_c_source --namespace oer tests/files/c_source/c_source.asn
Successfully generated oer.h and oer.c.
The same as above, but generate UPER C source code instead of OER.
.. code-block:: text
> asn1tools generate_c_source --codec uper --namespace uper tests/files/c_source/c_source.asn
Successfully generated uper.h and uper.c.
The same as the first example, but also generate fuzz testing C source
code for `libFuzzer`_.
.. code-block:: text
> asn1tools generate_c_source --namespace oer --generate-fuzzer tests/files/c_source/c_source.asn
Successfully generated oer.h and oer.c.
Successfully generated oer_fuzzer.c and oer_fuzzer.mk.
Run "make -f oer_fuzzer.mk" to build and run the fuzzer. Requires a
recent version of clang.
See `oer.h`_, `oer.c`_, `uper.h`_, `uper.c`_, `oer_fuzzer.c`_ and
`oer_fuzzer.mk`_ for the contents of the generated files.
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:
- https://github.com/vlm/asn1c
- https://github.com/ttsiodras/asn1scc
See the `benchmark example`_ for a comparison of `asn1c`, `asn1scc`
and `asn1tools`.
Contributing
============
#. Fork the repository.
#. Install prerequisites.
.. code-block:: text
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.
.. code-block:: text
make test
#. Create a pull request.
Specifications
==============
ASN.1 specifications released by ITU and IETF.
General
-------
- `X.680: Specification of basic notation
<https://www.itu.int/ITU-T/studygroups/com17/languages/X.680-0207.pdf>`_
- `X.681: Information object specification
<https://www.itu.int/ITU-T/studygroups/com17/languages/X.681-0207.pdf>`_
- `X.682: Constraint specification
<https://www.itu.int/ITU-T/studygroups/com17/languages/X.682-0207.pdf>`_
- `X.683: Parameterization of ASN.1 specifications
<https://www.itu.int/ITU-T/studygroups/com17/languages/X.683-0207.pdf>`_
Encodings
---------
- `X.690: Specification of Basic Encoding Rules (BER), Canonical
Encoding Rules (CER) and Distinguished Encoding Rules (DER)
<https://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf>`_
- `X.691: Specification of Packed Encoding Rules (PER)
<https://www.itu.int/rec/dologin_pub.asp?lang=e&id=T-REC-X.691-201508-I!!PDF-E&type=items>`_
- `X.693: XML Encoding Rules (XER)
<https://www.itu.int/ITU-T/studygroups/com17/languages/X.693-0112.pdf>`_
- `X.696: Specification of Octet Encoding Rules (OER)
<https://www.itu.int/rec/dologin_pub.asp?lang=e&id=T-REC-X.696-201508-I!!PDF-E&type=items>`_
- `RFC 3641: Generic String Encoding Rules (GSER) for ASN.1
<https://tools.ietf.org/html/rfc3641>`_
- `Overview of the JSON Encoding Rules (JER)
<http://www.oss.com/asn1/resources/asn1-papers/Overview_of_JER.pdf>`_
.. |coverage| image:: https://coveralls.io/repos/github/eerimoq/asn1tools/badge.svg?branch=master
.. _coverage: https://coveralls.io/github/eerimoq/asn1tools
.. |codecov| image:: https://codecov.io/gh/eerimoq/asn1tools/branch/master/graph/badge.svg
.. _codecov: https://codecov.io/gh/eerimoq/asn1tools
.. |nala| image:: https://img.shields.io/badge/nala-test-blue.svg
.. _nala: https://github.com/eerimoq/nala
.. _ASN.1: https://en.wikipedia.org/wiki/Abstract_Syntax_Notation_One
.. _Compile: http://asn1tools.readthedocs.io/en/latest/#asn1tools.compile_files
.. _encode: http://asn1tools.readthedocs.io/en/latest/#asn1tools.compiler.Specification.encode
.. _decode: http://asn1tools.readthedocs.io/en/latest/#asn1tools.compiler.Specification.decode
.. _examples: https://github.com/eerimoq/asn1tools/tree/master/examples
.. _tests/files/c_source/c_source.asn: https://github.com/eerimoq/asn1tools/blob/master/tests/files/c_source/c_source.asn
.. _oer.h: https://github.com/eerimoq/asn1tools/blob/master/tests/files/c_source/oer.h
.. _oer.c: https://github.com/eerimoq/asn1tools/blob/master/tests/files/c_source/oer.c
.. _uper.h: https://github.com/eerimoq/asn1tools/blob/master/tests/files/c_source/uper.h
.. _uper.c: https://github.com/eerimoq/asn1tools/blob/master/tests/files/c_source/uper.c
.. _oer_fuzzer.c: https://github.com/eerimoq/asn1tools/blob/master/tests/files/c_source/oer_fuzzer.c
.. _oer_fuzzer.mk: https://github.com/eerimoq/asn1tools/blob/master/tests/files/c_source/oer_fuzzer.mk
.. _libFuzzer: https://llvm.org/docs/LibFuzzer.html
.. _benchmark example: https://github.com/eerimoq/asn1tools/blob/master/examples/benchmarks/c_source
.. _compact_extensions_uper: https://github.com/eerimoq/asn1tools/blob/master/examples/compact_extensions_uper
Raw data
{
"_id": null,
"home_page": "https://github.com/eerimoq/asn1tools",
"name": "asn1tools",
"maintainer": null,
"docs_url": null,
"requires_python": null,
"maintainer_email": null,
"keywords": "ASN.1, asn1",
"author": "Erik Moqvist",
"author_email": "erik.moqvist@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/9b/30/3338efbfe7a943b817a1d4feb795f14f5b32888097a202d42240dabc76db/asn1tools-0.167.0.tar.gz",
"platform": null,
"description": "|coverage|_\n|codecov|_\n|nala|_\n\nAbout\n=====\n\nA Python package for `ASN.1`_ parsing, encoding and decoding.\n\nThis project is *under development* and does only support a subset\nof the ASN.1 specification syntax.\n\nSupported codecs:\n\n- Basic Encoding Rules (BER)\n- Distinguished Encoding Rules (DER)\n- Generic String Encoding Rules (GSER)\n- JSON Encoding Rules (JER)\n- Basic Octet Encoding Rules (OER)\n- Aligned Packed Encoding Rules (PER)\n- Unaligned Packed Encoding Rules (UPER)\n- XML Encoding Rules (XER)\n\nMiscellaneous features:\n\n- `C` source code generator for OER and UPER (with some limitations).\n\nProject homepage: https://github.com/eerimoq/asn1tools\n\nDocumentation: http://asn1tools.readthedocs.org/en/latest\n\nKnown limitations\n=================\n\n- The ``CLASS`` keyword (X.681) and its friends are not yet supported.\n\n- Parametrization (X.683) is not yet supported.\n\n- The ``EMBEDDED PDV`` type is not yet supported.\n\n- The ``ANY`` and ``ANY DEFINED BY`` types are not supported. They\n were removed from the ASN.1 standard 1994.\n\n- ``WITH COMPONENT`` and ``WITH COMPONENTS`` constraints are ignored,\n except for OER ``REAL``.\n\n- The ``DURATION`` type is not yet supported.\n\nInstallation\n============\n\n.. code-block:: python\n\n pip install asn1tools\n\nExample Usage\n=============\n\nThis is an example ASN.1 specification defining the messages of a\nfictitious Foo protocol (based on the FooProtocol on Wikipedia).\n\n.. code-block:: text\n\n Foo DEFINITIONS ::= BEGIN\n\n Question ::= SEQUENCE {\n id INTEGER,\n question IA5String\n }\n\n Answer ::= SEQUENCE {\n id INTEGER,\n answer BOOLEAN\n }\n\n END\n\nScripting\n---------\n\n`Compile`_ the ASN.1 specification, and `encode`_ and `decode`_ a\nquestion using the default codec (BER).\n\n.. code-block:: python\n\n >>> import asn1tools\n >>> foo = asn1tools.compile_files('tests/files/foo.asn')\n >>> encoded = foo.encode('Question', {'id': 1, 'question': 'Is 1+1=3?'})\n >>> encoded\n bytearray(b'0\\x0e\\x02\\x01\\x01\\x16\\x09Is 1+1=3?')\n >>> foo.decode('Question', encoded)\n {'id': 1, 'question': 'Is 1+1=3?'}\n\nThe same ASN.1 specification, but using the PER codec.\n\n.. code-block:: python\n\n >>> import asn1tools\n >>> foo = asn1tools.compile_files('tests/files/foo.asn', 'per')\n >>> encoded = foo.encode('Question', {'id': 1, 'question': 'Is 1+1=3?'})\n >>> encoded\n bytearray(b'\\x01\\x01\\tIs 1+1=3?')\n >>> foo.decode('Question', encoded)\n {'id': 1, 'question': 'Is 1+1=3?'}\n\nSee the `examples`_ folder for additional examples.\n\nCommand line tool\n-----------------\n\nThe shell subcommand\n^^^^^^^^^^^^^^^^^^^^\n\nUse the command line shell to convert data between given formats. The\ndefault input codec is BER and output codec is GSER (produces human\nreadable text).\n\n.. code-block:: text\n\n > asn1tools shell\n\n Welcome to the asn1tools shell!\n\n $ help\n Commands:\n compile\n convert\n exit\n help\n $ compile tests/files/foo.asn\n $ convert Question 300e0201011609497320312b313d333f\n question Question ::= {\n id 1,\n question \"Is 1+1=3?\"\n }\n $ compile --output-codec xer tests/files/foo.asn\n $ convert Question 300e0201011609497320312b313d333f\n <Question>\n <id>1</id>\n <question>Is 1+1=3?</question>\n </Question>\n $ compile -o uper tests/files/foo.asn\n $ convert Question 300e0201011609497320312b313d333f\n 01010993cd03156c5eb37e\n $ exit\n >\n\nThe convert subcommand\n^^^^^^^^^^^^^^^^^^^^^^\n\nConvert given encoded Question from BER to GSER (produces human\nreadable text).\n\n.. code-block:: text\n\n > asn1tools convert tests/files/foo.asn Question 300e0201011609497320312b313d333f\n question Question ::= {\n id 1,\n question \"Is 1+1=3?\"\n }\n >\n\nConvert given encoded Question from UPER to XER (xml).\n\n.. code-block:: text\n\n > asn1tools convert -i uper -o xer tests/files/foo.asn Question 01010993cd03156c5eb37e\n <Question>\n <id>1</id>\n <question>Is 1+1=3?</question>\n </Question>\n >\n\nConvert given encoded Question from UPER to JER (json).\n\n.. code-block:: text\n\n > asn1tools convert -i uper -o jer tests/files/foo.asn Question 01010993cd03156c5eb37e\n {\n \"id\": 1,\n \"question\": \"Is 1+1=3?\"\n }\n >\n\nContinuously convert encoded Questions read from standard input. Any\nline that cannot be converted is printed as is, in this example the\ndates.\n\n.. code-block:: text\n\n > cat encoded.txt\n 2018-02-24 11:22:09\n 300e0201011609497320312b313d333f\n 2018-02-24 11:24:15\n 300e0201021609497320322b323d353f\n > cat encoded.txt | asn1tools convert tests/files/foo.asn Question -\n 2018-02-24 11:22:09\n question Question ::= {\n id 1,\n question \"Is 1+1=3?\"\n }\n 2018-02-24 11:24:15\n question Question ::= {\n id 2,\n question \"Is 2+2=5?\"\n }\n >\n\nThe convert subcommand with a cache\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nConvert given encoded PCCH-Message from UPER to GSER with the\n``--cache-dir`` option set to ``my_cache``. Using a cache\nsignificantly reduces the command execution time after the first call.\n\n.. code-block:: text\n\n > time asn1tools convert --cache-dir my_cache -i uper tests/files/3gpp/rrc_8_6_0.asn PCCH-Message 28\n pcch-message PCCH-Message ::= {\n message c1 : paging : {\n systemInfoModification true,\n nonCriticalExtension {\n }\n }\n }\n\n real 0m2.090s\n user 0m1.977s\n sys 0m0.032s\n > time asn1tools convert --cache-dir my_cache -i uper tests/files/3gpp/rrc_8_6_0.asn PCCH-Message 28\n pcch-message PCCH-Message ::= {\n message c1 : paging : {\n systemInfoModification true,\n nonCriticalExtension {\n }\n }\n }\n\n real 0m0.276s\n user 0m0.197s\n sys 0m0.026s\n >\n\nThe parse subcommand\n^^^^^^^^^^^^^^^^^^^^\n\nParse given ASN.1 specification and write it as a Python dictionary to\ngiven file. Use the created file to convert given encoded Question\nfrom BER to GSER (produces human readable text). The conversion is\nsignificantly faster than passing .asn-file(s) to the convert\nsubcommand, especially for larger ASN.1 specifications.\n\n.. code-block:: text\n\n > asn1tools parse tests/files/foo.asn foo.py\n > asn1tools convert foo.py Question 300e0201011609497320312b313d333f\n question Question ::= {\n id 1,\n question \"Is 1+1=3?\"\n }\n >\n\nThe generate C source subcommand\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nGenerate OER or UPER C source code from an ASN.1 specification.\n\nNo dynamic memory is used in the generated code. To achieve this all\ntypes in the ASN.1 specification must have a known maximum size,\ni.e. ``INTEGER (0..7)``, ``OCTET STRING (SIZE(12))``, etc.\n\nBelow is an example generating OER C source code from\n`tests/files/c_source/c_source.asn`_.\n\n.. code-block:: text\n\n > asn1tools generate_c_source --namespace oer tests/files/c_source/c_source.asn\n Successfully generated oer.h and oer.c.\n\nThe same as above, but generate UPER C source code instead of OER.\n\n.. code-block:: text\n\n > asn1tools generate_c_source --codec uper --namespace uper tests/files/c_source/c_source.asn\n Successfully generated uper.h and uper.c.\n\nThe same as the first example, but also generate fuzz testing C source\ncode for `libFuzzer`_.\n\n.. code-block:: text\n\n > asn1tools generate_c_source --namespace oer --generate-fuzzer tests/files/c_source/c_source.asn\n Successfully generated oer.h and oer.c.\n Successfully generated oer_fuzzer.c and oer_fuzzer.mk.\n\n Run \"make -f oer_fuzzer.mk\" to build and run the fuzzer. Requires a\n recent version of clang.\n\nSee `oer.h`_, `oer.c`_, `uper.h`_, `uper.c`_, `oer_fuzzer.c`_ and\n`oer_fuzzer.mk`_ for the contents of the generated files.\n\nLimitations by design:\n\n- Only the types ``BOOLEAN``, ``INTEGER``, ``NULL``, ``OCTET STRING``,\n ``BIT STRING``, ``ENUMERATED``, ``SEQUENCE``, ``SEQUENCE OF``, and ``CHOICE``\n are supported. The OER generator also supports ``REAL``.\n\n- All types must have a known maximum size, i.e. ``INTEGER (0..7)``,\n ``OCTET STRING (SIZE(12))``.\n\n- ``INTEGER`` must be 64 bits or less.\n\n- ``REAL`` must be IEEE 754 binary32 or binary64. binary32 is\n generated as ``float`` and binary64 as ``double``.\n\n- Recursive types are not supported.\n\nKnown limitations:\n\n- Extension additions (``...``) are only supported in the OER generator.\n See `compact_extensions_uper`_ for how to make UPER ``CHOICE`` and\n ``SEQUENCE`` extendable without using ``...``.\n\n- Named numbers in ``ENUMERATED`` are not yet supported.\n\nOther OER and/or UPER C code generators:\n\n- https://github.com/vlm/asn1c\n\n- https://github.com/ttsiodras/asn1scc\n\nSee the `benchmark example`_ for a comparison of `asn1c`, `asn1scc`\nand `asn1tools`.\n\nContributing\n============\n\n#. Fork the repository.\n\n#. Install prerequisites.\n\n .. code-block:: text\n\n pip install -r requirements.txt\n\n#. Implement the new feature or bug fix.\n\n#. Implement test case(s) to ensure that future changes do not break\n legacy.\n\n#. Run the tests.\n\n .. code-block:: text\n\n make test\n\n#. Create a pull request.\n\nSpecifications\n==============\n\nASN.1 specifications released by ITU and IETF.\n\nGeneral\n-------\n\n- `X.680: Specification of basic notation\n <https://www.itu.int/ITU-T/studygroups/com17/languages/X.680-0207.pdf>`_\n\n- `X.681: Information object specification\n <https://www.itu.int/ITU-T/studygroups/com17/languages/X.681-0207.pdf>`_\n\n- `X.682: Constraint specification\n <https://www.itu.int/ITU-T/studygroups/com17/languages/X.682-0207.pdf>`_\n\n- `X.683: Parameterization of ASN.1 specifications\n <https://www.itu.int/ITU-T/studygroups/com17/languages/X.683-0207.pdf>`_\n\nEncodings\n---------\n\n- `X.690: Specification of Basic Encoding Rules (BER), Canonical\n Encoding Rules (CER) and Distinguished Encoding Rules (DER)\n <https://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf>`_\n\n- `X.691: Specification of Packed Encoding Rules (PER)\n <https://www.itu.int/rec/dologin_pub.asp?lang=e&id=T-REC-X.691-201508-I!!PDF-E&type=items>`_\n\n- `X.693: XML Encoding Rules (XER)\n <https://www.itu.int/ITU-T/studygroups/com17/languages/X.693-0112.pdf>`_\n\n- `X.696: Specification of Octet Encoding Rules (OER)\n <https://www.itu.int/rec/dologin_pub.asp?lang=e&id=T-REC-X.696-201508-I!!PDF-E&type=items>`_\n\n- `RFC 3641: Generic String Encoding Rules (GSER) for ASN.1\n <https://tools.ietf.org/html/rfc3641>`_\n\n- `Overview of the JSON Encoding Rules (JER)\n <http://www.oss.com/asn1/resources/asn1-papers/Overview_of_JER.pdf>`_\n\n.. |coverage| image:: https://coveralls.io/repos/github/eerimoq/asn1tools/badge.svg?branch=master\n.. _coverage: https://coveralls.io/github/eerimoq/asn1tools\n\n.. |codecov| image:: https://codecov.io/gh/eerimoq/asn1tools/branch/master/graph/badge.svg\n.. _codecov: https://codecov.io/gh/eerimoq/asn1tools\n\n.. |nala| image:: https://img.shields.io/badge/nala-test-blue.svg\n.. _nala: https://github.com/eerimoq/nala\n\n.. _ASN.1: https://en.wikipedia.org/wiki/Abstract_Syntax_Notation_One\n\n.. _Compile: http://asn1tools.readthedocs.io/en/latest/#asn1tools.compile_files\n.. _encode: http://asn1tools.readthedocs.io/en/latest/#asn1tools.compiler.Specification.encode\n.. _decode: http://asn1tools.readthedocs.io/en/latest/#asn1tools.compiler.Specification.decode\n.. _examples: https://github.com/eerimoq/asn1tools/tree/master/examples\n\n.. _tests/files/c_source/c_source.asn: https://github.com/eerimoq/asn1tools/blob/master/tests/files/c_source/c_source.asn\n\n.. _oer.h: https://github.com/eerimoq/asn1tools/blob/master/tests/files/c_source/oer.h\n\n.. _oer.c: https://github.com/eerimoq/asn1tools/blob/master/tests/files/c_source/oer.c\n\n.. _uper.h: https://github.com/eerimoq/asn1tools/blob/master/tests/files/c_source/uper.h\n\n.. _uper.c: https://github.com/eerimoq/asn1tools/blob/master/tests/files/c_source/uper.c\n\n.. _oer_fuzzer.c: https://github.com/eerimoq/asn1tools/blob/master/tests/files/c_source/oer_fuzzer.c\n\n.. _oer_fuzzer.mk: https://github.com/eerimoq/asn1tools/blob/master/tests/files/c_source/oer_fuzzer.mk\n\n.. _libFuzzer: https://llvm.org/docs/LibFuzzer.html\n\n.. _benchmark example: https://github.com/eerimoq/asn1tools/blob/master/examples/benchmarks/c_source\n\n.. _compact_extensions_uper: https://github.com/eerimoq/asn1tools/blob/master/examples/compact_extensions_uper\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "ASN.1 parsing, encoding and decoding.",
"version": "0.167.0",
"project_urls": {
"Homepage": "https://github.com/eerimoq/asn1tools"
},
"split_keywords": [
"asn.1",
" asn1"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "9b303338efbfe7a943b817a1d4feb795f14f5b32888097a202d42240dabc76db",
"md5": "3521df0db5cda637a290c79ced9ce2ee",
"sha256": "cad53f6f6d788a6eec5e37543401cd8c39f138cc8016b64629ec29fb4735f5b2"
},
"downloads": -1,
"filename": "asn1tools-0.167.0.tar.gz",
"has_sig": false,
"md5_digest": "3521df0db5cda637a290c79ced9ce2ee",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 864481,
"upload_time": "2024-07-13T17:48:31",
"upload_time_iso_8601": "2024-07-13T17:48:31.356148Z",
"url": "https://files.pythonhosted.org/packages/9b/30/3338efbfe7a943b817a1d4feb795f14f5b32888097a202d42240dabc76db/asn1tools-0.167.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-07-13 17:48:31",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "eerimoq",
"github_project": "asn1tools",
"travis_ci": false,
"coveralls": true,
"github_actions": true,
"requirements": [
{
"name": "pyparsing",
"specs": [
[
">=",
"3.1.2"
]
]
},
{
"name": "codespell",
"specs": []
},
{
"name": "pyasn1",
"specs": []
},
{
"name": "asn1crypto",
"specs": []
},
{
"name": "libsnmp",
"specs": [
[
"<",
"3"
]
]
},
{
"name": "pysnmp",
"specs": []
},
{
"name": "protobuf",
"specs": [
[
"<=",
"3.20"
]
]
},
{
"name": "prompt_toolkit",
"specs": []
},
{
"name": "pycodestyle",
"specs": []
},
{
"name": "bitstruct",
"specs": []
},
{
"name": "diskcache",
"specs": []
},
{
"name": "humanfriendly",
"specs": []
},
{
"name": "mock",
"specs": []
},
{
"name": "nala",
"specs": []
}
],
"lcname": "asn1tools"
}