Вы должны использовать OpenType для определения типа extnValue
.Когда вы передаете декодеру карту extnID
-> ASN.1 type
, декодер затем проходит мимо самой внешней оболочки extnValue
, пытаясь декодировать ее содержимое.
Вот краткий пример:
openType = opentype.OpenType(
'id',
{1: univ.Integer(),
2: univ.OctetString()}
)
self.s = univ.Sequence(
componentType=namedtype.NamedTypes(
namedtype.NamedType('id', univ.Integer()),
namedtype.NamedType('blob', univ.Any(), openType=openType)
)
)
Обязательно передайте аргумент decodeOpenTypes=True
в функцию decode()
, если хотите, чтобы декодер развернул эти открытые типы.
Кстати, если вы посмотрите на pyasn1-modules эта карта уже есть.Если вы используете эти определения и просто передаете decodeOpenTypes=True
аргумент ключевого слова в декодер, вы должны развернуть ваши расширения.
Не существует готового способа отказать декодеру в неизвестном extnID
.Вы, вероятно, можете смоделировать, что я предоставил вам свою собственную карту (возможно, основанную на dict
), которая потерпит неудачу при неудачной операции key in my_map
.