asn1vnparser package¶
Submodules¶
asn1vnparser.cli module¶
Console script for asn1vnparser.
asn1vnparser.jsonencoder module¶
Defines json.JSONEncoder subclass that makes parsed object (including bytes and bitarray) JSON-serializable
-
class
asn1vnparser.jsonencoder.
JSONEncoder
(compact_bitarray=False, *args, **kwargs)[source]¶ Bases:
json.encoder.JSONEncoder
JSON encoder with additional support for bytes and bitarray
Examples
>>> JSONEncoder().encode({"field1": 123}) '{"field1": 123}'
>>> JSONEncoder().encode({"field1": b'4'}) '{"field1": "1234"}'
>>> JSONEncoder().encode({"field1": bitarray.bitarray('01010')}) '{"field1": "01010"}'
>>> JSONEncoder(compact_bitarray=True).encode({"field1": bitarray.bitarray('01010')}) '{"field1": {"value": "50", "length": 5}}'
>>> JSONEncoder().encode({"field1": {"Type": 567}}) '{"field1": {"Type": 567}}'
-
default
(o)[source]¶ Implement this method in a subclass such that it returns a serializable object for
o
, or calls the base implementation (to raise aTypeError
).For example, to support arbitrary iterators, you could implement default like this:
def default(self, o): try: iterable = iter(o) except TypeError: pass else: return list(iterable) # Let the base class default method raise the TypeError return JSONEncoder.default(self, o)
-
Module contents¶
Parses ASN.1 value notation into a Python object or JSON without requiring its ASN.1 schema.
-
class
asn1vnparser.
AsnValueAssignment
(toks: pyparsing.ParseResults)[source]¶ Bases:
asn1vnparser._grammar.AsnDefinition
Object that represents ASN.1 value assignment (X.680 16.2).
Parses:
value_name TypeName ::= value
Limitations:
- Considers anything that matches typereference as Type
-
value_name
¶ name of the assigned value.
Type: str
-
type_name
¶ name of the value’s type.
Type: str
-
value
¶ Python object that holds the value.
Type: Any
-
asn1vnparser.
parse_asn1_value
(asn1_value: str, as_json: bool = False, parse_all: bool = True) → Union[Any, str, Tuple[Any, str], Tuple[str, str]][source]¶ Converts ASN.1 value (mainly BuiltinValue in ITU-T Rec. X.680) to Python object.
Parameters: - asn1_value – a
str
representing ASN.1 value notation(s). - as_json – Returns JSON when
True
. - parse_all – When True, it is assumed that the whole
asn1_value
represents an ASN.1 value.
Returns: - When
parse_all
is True,result
. - When
parse_all
is False, a tuple of(result, rest)
,
where
result
is:- When as_json = False, a Python object representation of
asn1_value
- When as_json = True, a JSON representation of
asn1_value
as str
and
rest
is the remaining str fromasn1_value
after reading the value notation.Examples
>>> parse_asn1_value("123") # INTEGER 123
>>> parse_asn1_value("{TRUE, FALSE}") # SEQUENCE OF [True, False]
>>> parse_asn1_value( ... "{field1 NULL, field2 '1204'H, field3 '01011010 01'B}" ... ) # SEQUENCE {'field1': None, 'field2': b'\x12\x04', 'field3': bitarray('0101101001')}
>>> parse_asn1_value("alt1 : enum1") # CHOICE {'alt1': 'enum1'}
>>> parse_asn1_value("alt1: enum1", as_json=True) # as_json '{"alt1": "enum1"}'
>>> parse_asn1_value("blah blah") # raises when not foune # doctest: +ELLIPSIS Traceback (most recent call last): ... pyparsing.ParseException: ...
>>> parse_asn1_value("alt1: enum1\n---this is remaining string---", as_json=True) # by default: parse_all=True. # doctest: +ELLIPSIS Traceback (most recent call last): ... pyparsing.ParseException: Expected end of text...
>>> 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---')
- asn1_value – a
-
asn1vnparser.
parse_asn1_value_assignment
(asn1_val_assignment: str, as_json: bool = False, parse_all: bool = True) → Union[asn1vnparser._grammar.AsnValueAssignment, str, Tuple[asn1vnparser._grammar.AsnValueAssignment, str], Tuple[str, str]][source]¶ Converts ASN.1 value assignment to Python object.
Parameters: - asn1_val_assignment – A
str
representing ASN.1 value assignment(s). - as_json – Returns JSON when
True
. - parse_all – When True, it is assumed that the whole
asn1_val_assignment
represents an ASN.1 value assignment.
Returns: - When
parse_all
is True,result
. - When
parse_all
is False, a tuple of(result, rest)
,
where
result
is:- When as_json = False, parsing result as
AsnValueAssignment
. - When as_json = True, a JSON representation of
asn1_val_assignment
asstr
and
rest
is the remaining str fromasn1_val_assinment
after reading the value assignment.Examples
>>> parse_asn1_value_assignment("valuename Typename ::= 1234") {'value_name': 'valuename', 'type_name': 'Typename', 'value': 1234}
>>> parse_asn1_value_assignment("nonsense") # raises when not found # doctest: +ELLIPSIS Traceback (most recent call last): ... pyparsing.ParseException: ...
>>> parse_asn1_value_assignment("valuename Typename ::= 1234\n...remainremain...") # doctest: +ELLIPSIS Traceback (most recent call last): ... pyparsing.ParseException: Expected end of text...
>>> parse_asn1_value_assignment("valuename Typename ::= 1234\n...remainremain...", parse_all=False) ({'value_name': 'valuename', 'type_name': 'Typename', 'value': 1234}, '\n...remainremain...')
- asn1_val_assignment – A
-
asn1vnparser.
parse_asn1_value_assignments
(asn1_val_assignments: str, as_json: bool = False) → List[Union[asn1vnparser._grammar.AsnValueAssignment, str]][source]¶ Parses multiple ASN.1 value assignments.
Examples
>>> 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'}]
>>> parse_asn1_value_assignments('nonsense') # returns [] when not found []
>>> parse_asn1_value_assignments('value1 INTEGER ::= 1\nvalue2 Type2 ::= the-value', as_json=True) '[{"value_name": "value1", "type_name": "INTEGER", "value": 1}, {"value_name": "value2", "type_name": "Type2", "value": "the-value"}]'
>>> parse_asn1_value_assignments('nonsense', as_json=True) # returns '[]' when not found '[]'