import re
from copy import copy
-from pyparsing import Keyword, Literal, Word, OneOrMore, Combine, Regex, Forward, Optional, Group, Suppress, delimitedList, cStyleComment, nums, alphanums, empty, srange
+from pyparsing import Keyword, Literal, Word, OneOrMore, Combine, Regex, Forward, Optional, Group, Suppress, delimitedList, cStyleComment, nums, alphanums, empty, srange, dblQuotedString
__all__ = ['parse_asn1', 'AnnotatedToken']
VideotexString = Keyword('VideotexString')
VisibleString = Keyword('VisibleString')
+ # Useful types
+ GeneralizedTime = Keyword('GeneralizedTime')
+ UTCTime = Keyword('UTCTime')
+ ObjectDescriptor = Keyword('ObjectDescriptor')
+
# Literals
number = Word(nums)
signed_number = Combine(Optional('-') + number) # todo: consider defined values from 18.1
bitstring_value = bstring | hstring # todo: consider more forms from 21.9
integer_value = signed_number
null_value = NULL
+ cstring_value = dblQuotedString
- builtin_value = boolean_value | bitstring_value | real_value | integer_value | null_value
+ builtin_value = boolean_value | bitstring_value | real_value | integer_value | null_value | cstring_value
defined_value = valuereference # todo: more options from 13.1
# object identifier value
T61String | UniversalString | \
UTF8String | VideotexString | VisibleString
characterstring_type = restricted_characterstring_type | unrestricted_characterstring_type
+ useful_type = GeneralizedTime | UTCTime | ObjectDescriptor
# todo: consider other builtins from 16.2
- simple_type = (boolean_type | null_type | octetstring_type | characterstring_type | real_type | plain_integer_type | object_identifier_type) + Optional(constraint)
+ simple_type = (boolean_type | null_type | octetstring_type | characterstring_type | real_type | plain_integer_type | object_identifier_type | useful_type) + Optional(constraint)
constructed_type = choice_type | sequence_type | set_type
value_list_type = restricted_integer_type | enumerated_type
builtin_type = value_list_type | tagged_type | simple_type | constructed_type | sequenceof_type | setof_type | bitstring_type
}
def generate_code(self):
- self.writer.write_line('from pyasn1.type import univ, char, namedtype, namedval, tag, constraint')
+ self.writer.write_line('from pyasn1.type import univ, char, namedtype, namedval, tag, constraint, useful')
self.writer.write_blanks(2)
# TODO: Only generate _OID if sema_module
'SET OF': 'univ.SetOf',
'UTF8String': 'char.UTF8String',
'GeneralString': 'char.GeneralString',
- 'OBJECT IDENTIFIER': 'univ.ObjectIdentifier'
+ 'OBJECT IDENTIFIER': 'univ.ObjectIdentifier',
+ 'GeneralizedTime': 'useful.GeneralizedTime',
+ 'UTCTime': 'useful.UTCTime',
+
+ # BUG: This should be useful.ObjectDescriptor
+ # but it's not implemented in pyasn1 for some
+ # reason.
+ 'ObjectDescriptor': 'char.GraphicString',
}
--- /dev/null
+TEST DEFINITIONS ::=
+BEGIN
+ g1 GeneralizedTime ::= "12345678901234.5"
+ u1 UTCTime ::= "1234567890Z"
+ o1 ObjectDescriptor ::= "Text"
+
+ GTime ::= GeneralizedTime
+ UTime ::= UTCTime
+ OD ::= ObjectDescriptor
+
+ g2 GTime ::= "19851106210627.3"
+ u2 UTime ::= "8201021200Z"
+ o2 OD ::= "A free-text description"
+END