========
Overview
========
Python-ASN1 is a simple ASN.1 encoder and decoder for Python 2.7 and 3.5+.
Features
========
- Support BER (parser) and DER (parser and generator) encoding (including indefinite lengths)
- 100% python, compatible with version 2.7, 3.5 and higher
- Can be integrated by just including a file into your project
- Support most common ASN.1 types including REAL (encoding and decoding).
Dependencies
==============
Python-ASN1 relies on `Python-Future <https://python-future.org>`_ for Python 2 and 3 compatibility. To install Python-Future:
.. code-block:: sh
pip install future
Python-ASN1 relies on `type hints <https://docs.python.org/3/library/typing.html>`_. For Python 2.7, a backport of the standard library typing module has to be installed:
.. code-block:: sh
pip install typing
This is not necessary for Python 3.5 and higher since it is part of the standard library.
How to install Python-asn1
==========================
Install from PyPi with the following:
.. code-block:: sh
pip install asn1
or download the repository from `GitHub <https://github.com/andrivet/python-asn1>`_ and install with the following:
.. code-block:: sh
python setup.py install
You can also simply include ``asn1.py`` into your project.
How to use Python-asn1
======================
.. note:: You can find more detailed documentation on the `Usage`_ page.
.. _Usage: usage.rst
Encoding
--------
If you want to encode data and retrieve its DER-encoded representation, use code such as:
.. code-block:: python
import asn1
encoder = asn1.Encoder()
encoder.start()
encoder.write('1.2.3', asn1.Numbers.ObjectIdentifier)
encoded_bytes = encoder.output()
Decoding
--------
If you want to decode ASN.1 from DER or BER encoded bytes, use code such as:
.. code-block:: python
import asn1
decoder = asn1.Decoder()
decoder.start(encoded_bytes)
tag, value = decoder.read()
Documentation
=============
The complete documentation is available on Read The Docs:
`python-asn1.readthedocs.io <https://python-asn1.readthedocs.io/en/latest/>`_
License
=======
Python-ASN1 is free software that is made available under the MIT license.
Consult the file LICENSE that is distributed together with this library for
the exact licensing terms.
Copyright
=========
The following people have contributed to Python-ASN1. Collectively they own the copyright of this software.
* Geert Jansen (geert@boskant.nl): `original implementation <https://github.com/geertj/python-asn1>`_.
* Sebastien Andrivet (sebastien@andrivet.com)
Changelog
=========
3.0.0 (2025-03-03)
------------------
* Encoding and decoding of the ASN.1 REAL type
* Support of indefinite lengths
* Encoding and decoding of complex data (lists, sets, ...)
* Add support for streams (file-like objects) when encoding and decoding
* Optionally return the number of unused bits when decoding a BitString (see also #276)
* #286 - Add ASN.1:2008 compliance test suite
2.8.0 (2025-02-20)
------------------
* PR #285 - Use Enum with Tag for pretty representation (thanks to @Julien00859)
* Make explicit that Python 3.12 and 3.13 are supported
* Fix some links in the documentation
* Add a Docker file for testing
2.7.1 (2024-08-07)
------------------
* Fix OID encoding/decoding for the first octet according to ITU-T X.690 (thanks to Ian Neal)
2.7.0 (2023-01-17)
------------------
* Add context manager support (thanks to Mastermind-U)
2.6.0 (2022-07-15)
------------------
* Add support for GeneralizedTime (thanks to vollkorntomate)
2.5.0 (2022-03-03)
------------------
* Fixes to BitString decoding and encoding of IA5String and UTCTime (thanks to 0xbf00)
2.4.2 (2021-10-29)
------------------
* Fix a minor mistake in the dump.py example
* Add Python 3.9 and 3.10
2.4.1 (2020-07-16)
------------------
* Fix #89 - Replace explicit references to enum34 by enum-compat
2.4.0 (2020-06-23)
------------------
* Fix #21 - Invalid decoding in non-Universal classes
* Fix #57 - Invalid encoding of non-Universal classes
2.3.1 (2020-04-06)
------------------
* No change in code, only in packaging and in texts (README, ...)
2.3.0 (2020-04-05)
------------------
* Tests: Replace nose by pytest
* Add Python 3.8, remove Python 3.4 support
* PR#26 (from rumbah): Add test for default (implicit) encoding types
* PR#25 (from thomwiggers): Attempt to support BIT STRING
* Fix wrong example code, see #27
* (from jcrowgey) Makes the package usable with pip install
* Remove support of Python 3.3 (some dependencies do not support 3.3)
* PR#15 (from ThePlasmaRailgun) Fix parsing of object identifier
* PR#10 (from robinleander): Allow user to determine decoding tagtype
2.2.0 (2017-10-30)
------------------
* Use "true" enums instead of classes. Use enun34 backport for old Python versions.
2.1.1 (2017-10-30)
------------------
* Fix a bug (#9): two's complement corner case with values such as -32769. Add new test cases to test them.
2.1.0 (2016-12-18)
------------------
* Add more documentation
* Use (simulated) enumerations
* Add Python 2.6 in automated checks and tests
* Add type hints (for static checking) and fix some code
2.0.0 (2016-12-16)
------------------
* First public release by Sebastien Andrivet
* Support both python 2 and 3 (with Python-Future)
* All strings are now in unicode
* Add more ASN.1 tags (like PrintableString)
* Fix errors in the example (dump.py)
* Code reorganization
0.9 (2011-05-18)
----------------
* Initial public release by Geert Jansen
Raw data
{
"_id": null,
"home_page": "https://github.com/andrivet/python-asn1",
"name": "asn1",
"maintainer": null,
"docs_url": null,
"requires_python": null,
"maintainer_email": null,
"keywords": null,
"author": "Sebastien Andrivet",
"author_email": "sebastien@andrivet.com",
"download_url": "https://files.pythonhosted.org/packages/d6/76/31f7c64beda24134a3c2b3feca6fe38250be8d6b4b1ec5a097f17a90b274/asn1-3.0.0.tar.gz",
"platform": null,
"description": "\n\n========\nOverview\n========\n\nPython-ASN1 is a simple ASN.1 encoder and decoder for Python 2.7 and 3.5+.\n\nFeatures\n========\n\n- Support BER (parser) and DER (parser and generator) encoding (including indefinite lengths)\n- 100% python, compatible with version 2.7, 3.5 and higher\n- Can be integrated by just including a file into your project\n- Support most common ASN.1 types including REAL (encoding and decoding).\n\nDependencies\n==============\n\nPython-ASN1 relies on `Python-Future <https://python-future.org>`_ for Python 2 and 3 compatibility. To install Python-Future:\n\n.. code-block:: sh\n\n pip install future\n\nPython-ASN1 relies on `type hints <https://docs.python.org/3/library/typing.html>`_. For Python 2.7, a backport of the standard library typing module has to be installed:\n\n.. code-block:: sh\n\n pip install typing\n\nThis is not necessary for Python 3.5 and higher since it is part of the standard library.\n\nHow to install Python-asn1\n==========================\n\nInstall from PyPi with the following:\n\n.. code-block:: sh\n\n pip install asn1\n\nor download the repository from `GitHub <https://github.com/andrivet/python-asn1>`_ and install with the following:\n\n.. code-block:: sh\n\n python setup.py install\n\nYou can also simply include ``asn1.py`` into your project.\n\n\nHow to use Python-asn1\n======================\n\n.. note:: You can find more detailed documentation on the `Usage`_ page.\n\n.. _Usage: usage.rst\n\nEncoding\n--------\n\nIf you want to encode data and retrieve its DER-encoded representation, use code such as:\n\n.. code-block:: python\n\n import asn1\n\n encoder = asn1.Encoder()\n encoder.start()\n encoder.write('1.2.3', asn1.Numbers.ObjectIdentifier)\n encoded_bytes = encoder.output()\n\n\nDecoding\n--------\n\nIf you want to decode ASN.1 from DER or BER encoded bytes, use code such as:\n\n.. code-block:: python\n\n import asn1\n\n decoder = asn1.Decoder()\n decoder.start(encoded_bytes)\n tag, value = decoder.read()\n\n\nDocumentation\n=============\n\nThe complete documentation is available on Read The Docs:\n\n`python-asn1.readthedocs.io <https://python-asn1.readthedocs.io/en/latest/>`_\n\n\nLicense\n=======\n\nPython-ASN1 is free software that is made available under the MIT license.\nConsult the file LICENSE that is distributed together with this library for\nthe exact licensing terms.\n\nCopyright\n=========\n\nThe following people have contributed to Python-ASN1. Collectively they own the copyright of this software.\n\n* Geert Jansen (geert@boskant.nl): `original implementation <https://github.com/geertj/python-asn1>`_.\n* Sebastien Andrivet (sebastien@andrivet.com)\n\nChangelog\n=========\n\n3.0.0 (2025-03-03)\n------------------\n\n* Encoding and decoding of the ASN.1 REAL type\n* Support of indefinite lengths\n* Encoding and decoding of complex data (lists, sets, ...)\n* Add support for streams (file-like objects) when encoding and decoding\n* Optionally return the number of unused bits when decoding a BitString (see also #276)\n* #286 - Add ASN.1:2008 compliance test suite\n\n2.8.0 (2025-02-20)\n------------------\n\n* PR #285 - Use Enum with Tag for pretty representation (thanks to @Julien00859)\n* Make explicit that Python 3.12 and 3.13 are supported\n* Fix some links in the documentation\n* Add a Docker file for testing\n\n2.7.1 (2024-08-07)\n------------------\n\n* Fix OID encoding/decoding for the first octet according to ITU-T X.690 (thanks to Ian Neal)\n\n2.7.0 (2023-01-17)\n------------------\n\n* Add context manager support (thanks to Mastermind-U)\n\n2.6.0 (2022-07-15)\n------------------\n\n* Add support for GeneralizedTime (thanks to vollkorntomate)\n\n2.5.0 (2022-03-03)\n------------------\n\n* Fixes to BitString decoding and encoding of IA5String and UTCTime (thanks to 0xbf00)\n\n2.4.2 (2021-10-29)\n------------------\n\n* Fix a minor mistake in the dump.py example\n* Add Python 3.9 and 3.10\n\n2.4.1 (2020-07-16)\n------------------\n\n* Fix #89 - Replace explicit references to enum34 by enum-compat\n\n2.4.0 (2020-06-23)\n------------------\n\n* Fix #21 - Invalid decoding in non-Universal classes\n* Fix #57 - Invalid encoding of non-Universal classes\n\n2.3.1 (2020-04-06)\n------------------\n\n* No change in code, only in packaging and in texts (README, ...)\n\n2.3.0 (2020-04-05)\n------------------\n\n* Tests: Replace nose by pytest\n* Add Python 3.8, remove Python 3.4 support\n* PR#26 (from rumbah): Add test for default (implicit) encoding types\n* PR#25 (from thomwiggers): Attempt to support BIT STRING\n* Fix wrong example code, see #27\n* (from jcrowgey) Makes the package usable with pip install\n* Remove support of Python 3.3 (some dependencies do not support 3.3)\n* PR#15 (from ThePlasmaRailgun) Fix parsing of object identifier\n* PR#10 (from robinleander): Allow user to determine decoding tagtype\n\n\n2.2.0 (2017-10-30)\n------------------\n\n* Use \"true\" enums instead of classes. Use enun34 backport for old Python versions.\n\n2.1.1 (2017-10-30)\n------------------\n\n* Fix a bug (#9): two's complement corner case with values such as -32769. Add new test cases to test them.\n\n2.1.0 (2016-12-18)\n------------------\n\n* Add more documentation\n* Use (simulated) enumerations\n* Add Python 2.6 in automated checks and tests\n* Add type hints (for static checking) and fix some code\n\n2.0.0 (2016-12-16)\n------------------\n\n* First public release by Sebastien Andrivet\n* Support both python 2 and 3 (with Python-Future)\n* All strings are now in unicode\n* Add more ASN.1 tags (like PrintableString)\n* Fix errors in the example (dump.py)\n* Code reorganization\n\n0.9 (2011-05-18)\n----------------\n\n* Initial public release by Geert Jansen\n",
"bugtrack_url": null,
"license": "BSD",
"summary": "Python-ASN1 is a simple ASN.1 encoder and decoder for Python 2.7+ and 3.5+.",
"version": "3.0.0",
"project_urls": {
"Homepage": "https://github.com/andrivet/python-asn1"
},
"split_keywords": [],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "e7d38a598147af245d38f8ab3d571d29d381d1de5c1c28884ed24ea36a8bb951",
"md5": "7a13408dc7cbc809893fec137245a15c",
"sha256": "45c3a13f1b8edf95b8f28f81e213bf5dcfdf2ee58d2e594cb14d7a5a120d6f6c"
},
"downloads": -1,
"filename": "asn1-3.0.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "7a13408dc7cbc809893fec137245a15c",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 14820,
"upload_time": "2025-03-03T11:12:50",
"upload_time_iso_8601": "2025-03-03T11:12:50.396438Z",
"url": "https://files.pythonhosted.org/packages/e7/d3/8a598147af245d38f8ab3d571d29d381d1de5c1c28884ed24ea36a8bb951/asn1-3.0.0-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "d67631f7c64beda24134a3c2b3feca6fe38250be8d6b4b1ec5a097f17a90b274",
"md5": "aab30f1c4c757d6c54ef824bfcd784c0",
"sha256": "204fbce2357e1203d773d62283d00ef755cf8e1510c6f3307b19bc9c86de1701"
},
"downloads": -1,
"filename": "asn1-3.0.0.tar.gz",
"has_sig": false,
"md5_digest": "aab30f1c4c757d6c54ef824bfcd784c0",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 43697,
"upload_time": "2025-03-03T11:12:52",
"upload_time_iso_8601": "2025-03-03T11:12:52.052206Z",
"url": "https://files.pythonhosted.org/packages/d6/76/31f7c64beda24134a3c2b3feca6fe38250be8d6b4b1ec5a097f17a90b274/asn1-3.0.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-03-03 11:12:52",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "andrivet",
"github_project": "python-asn1",
"travis_ci": false,
"coveralls": true,
"github_actions": true,
"requirements": [
{
"name": "future",
"specs": [
[
"==",
"1.0.0"
]
]
},
{
"name": "enum-compat",
"specs": [
[
"==",
"0.0.3"
]
]
}
],
"tox": true,
"lcname": "asn1"
}