Если вы не декодируете структуру данных, содержащую только базовые типы ASN.1 (такие как INTEGER, SEQUENCE и т. Д.), Вам необходимо передать объект структуры данных ASN.1 верхнего уровня в декодер. Таким образом, декодер может соответствовать пользовательским тегам (из кортежей TLV в сериализации BER/DER/CER) с теми же тегами, присутствующими в объекте структуры данных. Например:
custom_int_type = Integer().subtype(implicitTag=Tag(tagClassContext, tagFormatSimple, 40))
custom_int_instance = custom_int_type.clone(12345)
serialization = encode(custom_int_instance)
# this will fail on unknown custom ASN.1 type tag
custom_int_instance, rest_of_serialization = decode(serialization)
# this will succeed as custom ASN.1 type (containing tag) is provided
custom_int_instance, rest_of_serialization = decode(serialization, asn1Spec=custom_int_type)
Вот ссылка на pyasn1 documentation on decoders.
Чтобы передать грамматику ASN.1 в декодер pyasn1, вы должны сначала превратить свою грамматику в pyasn1/Python дерево объектов. Это одноразовая операция, которую иногда можно автоматизировать с помощью инструмента asn1late.
Мое другое беспокойство заключается в том, что вы, возможно, читаете часть своих сериализованных данных (5 октетов). Это может быть допустимой операцией, если ваши данные были сериализованы с использованием режима неопределенного кодирования длины, иначе декодер может выйти из строя при недостаточном вводе.
Могу ли я использовать пользовательский .asn-файл для кодирования? что-то вроде: decoder.decode (var1, asn1Spec = 'mycustomASNfile') где var1 = binary_file.read (190) из файла, который был предварительно закодирован в соответствии с «правилами/структурой ASN» моего пользовательского .asn-файла? (Сериализация BER), или я должен перевести файл .asn в .py? если да, вы можете дать мне правильный синтаксис? thnx для помощи ^^ –
Вы должны перевести файл .asn1 в классы pyasn1/Python. Это одноразовая операция, которую можно обработать с помощью инструмента [asn1late] (https://github.com/kimgr/asn1ate). –