Metadata-Version: 2.1
Name: asn1vnparser
Version: 0.2.3
Summary: Parses ASN.1 value notation into a Python object or JSON without requiring its ASN.1 schema.
Home-page: https://github.com/mtannaan/asn1vnparser
Author: mtannaan
Author-email: 12782884+mtannaan@users.noreply.github.com
License: ISC license
Keywords: asn1vnparser
Platform: UNKNOWN
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: ISC License (ISCL)
Classifier: Natural Language :: English
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Requires-Python: !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*
License-File: LICENSE

============
asn1vnparser
============


.. image:: https://img.shields.io/pypi/v/asn1vnparser.svg
        :target: https://pypi.python.org/pypi/asn1vnparser

.. image:: https://img.shields.io/travis/mtannaan/asn1vnparser.svg
        :target: https://travis-ci.org/mtannaan/asn1vnparser

.. image:: https://readthedocs.org/projects/asn1vnparser/badge/?version=latest
        :target: https://asn1vnparser.readthedocs.io/en/latest/?badge=latest
        :alt: Documentation Status




Parses ASN.1 value notation into a Python object or JSON without requiring its ASN.1 schema.


* Free software: ISC license
* Documentation: https://asn1vnparser.readthedocs.io.


Features
--------

* Parsing ASN.1 value notation into a Python object, or a JSON string
* No ASN.1 Schema Required

Limitations
-----------

* Since Knowledge of schema is not used, misdetection of ASN.1 types can occur; see Type Translations section.
* Some ASN.1 types and grammars are not supported; see grammar.py.

Type Translations
-----------------

`asn1vnparser` performs the following type translations:

======================================  =================  =============================  ==========================
ASN.1 Type                              Python Type        JSON Type                      Example (ASN.1 -> Python)
======================================  =================  =============================  ==========================
NULL                                    None               null                           NULL -> None
BOOLEAN                                 bool               True/False                     TRUE -> True
INTEGER                                 int                number (int)                   3 -> 3
REAL                                    float              number (real)                  0.1 -> 0.1
BIT STRING (^1)                         bitarray.bitarray  string (e.g. "010101")         '010101'B -> bitarray.bitarray('010101')
OCTET STRING (^1)                       bytes              string (e.g. "0123ab")         '0123AB'H -> b'\x01\x23\xab'
`cstring` (PrintableString, etc.)       str                string                         "foobar" -> 'foobar'
ENUMERATED                              str                string                         any-identifier -> 'any-identifier'
CHOICE                                  Dict[str, Any]     {"string": (any JSON object)}  alt1 : 123 -> {'alt1': 123}
Open Type  (e.g. type field)            Dict[str, Any]     {"String": (any JSON object)}  Type1 : 123 -> {'Type1': 123}
empty SEQUENCE or SEQUENCE OF           {} (empty dict)    {} (empty object)              {} -> {}, [] -> {}
SEQUENCE                                dict               object                         {f1 val, f2 1} -> {'f1': 'val', 'f2': 1}
SEQUENCE OF                             list               array                          [1, 2, 3] -> [1, 2, 3]
OBJECT IDENTIFIER                       List[int]          array of number (int)          {1 2 3} -> [1, 2, 3]
======================================  =================  =============================  ==========================

(^1) ``CONTAINING (some_value)`` is interpreted as simply ``(some_value)``, e.g.::

    {
        field1 123,
        field2 CONTAINING {
            field2-1 TRUE,
            field2-2 FALSE
        }
    }

is parsed into following Python object::

    {
        "field1": 123,
        "field2": {
            "field2-1": True,
            "field2-2": False
        }
    }




Credits
-------

This package was created with Cookiecutter_ and the `audreyr/cookiecutter-pypackage`_ project template.

.. _Cookiecutter: https://github.com/audreyr/cookiecutter
.. _`audreyr/cookiecutter-pypackage`: https://github.com/audreyr/cookiecutter-pypackage


=======
History
=======

0.2.1 (2021-11-14)
------------------
- Disable pyparsing v3, which breaks tests
- Update license to ISC


0.2.0 (2019-10-02)
------------------
New Features
************

- Partial parsing of a value or a value assignment (``parse_all`` option)

.. code-block:: python

    >>> parse_asn1_value(
    ...     "alt1: enum1\n---this is remaining string---",
    ...     as_json=True,
    ...     parse_all=False)  # as_json
    ('{"alt1": "enum1"}', '\n---this is remaining string---')

- Parsing multiple value assignments

.. code-block:: python

    >>> parse_asn1_value_assignments(
    ...     'value1 INTEGER ::= 1\nvalue2 Type2 ::= the-value')
    [
        {'value_name': 'value1', 'type_name': 'INTEGER', 'value': 1},
        {'value_name': 'value2', 'type_name': 'Type2', 'value': 'the-value'}
    ]

Bug Fixes
*********

- CLI no longer crashes when given ``--json`` option.


0.1.0 (2019-09-29)
------------------

* First release on PyPI.


