Понимая библиотеку pyasn1, я столкнулся с проблемой присвоения значения элементу с тегом, встроенным в Sequence.
Структура ASN:
STest ::= [32] SEQUENCE {
seqof [10] SEQUENCE OF OCTET STRING
}
pyasn1:
from pyasn1.type import univ, namedval, constraint, namedtype, tag, char
class STest(univ.Sequence):
tagSet = univ.Sequence.tagSet.tagImplicitly(tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 32))
componentType = namedtype.NamedTypes(namedtype.NamedType('seqof', univ.SequenceOf(componentType=univ.OctetString()).subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 10))))
stest = STest()
seq = univ.SequenceOf(componentType=univ.OctetString())
octet1 = univ.OctetString(hexValue='10101010')
seq.setComponents(octet1)
stest["seqof"] = seq
print(stest.prettyPrint())
при выполнении выдает ошибку:
> Traceback (большинство последний вызов последним): файл "test_pyasn1.py", строка 87, в stest ["seqof"] = файл seq "/usr/local/lib/python3.6/dist-packages/pyasn1/type/univ.py ", строка 2250, в setitem повысить KeyError (sys.exc_info () [1]) KeyError: PyAsn1Error ('Значение компонента несовместимо с тегом:
Если тег удалено из элемента SequenceOf:
class STest(univ.Sequence):
tagSet = univ.Sequence.tagSet.tagImplicitly(tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 32))
componentType = namedtype.NamedTypes(namedtype.NamedType('seqof', univ.SequenceOf(componentType=univ.OctetString())))
программа выполнена:
STest: seqof = SequenceOf: 0x10101010
python3 .8, pyasn1 0.4.8
Скажите, пожалуйста, как заполнить последовательность.
Спасибо!