У меня сложная вложенная структура ASN.1 в виде байтов.Я хочу найти все T61Strings (скажем) в этой структуре, в исходной кодировке байтов .Возможно ли это в pyasn1?
Пока что я знаю только, как найти строки T61Strings (или что-то еще) в BER-декодированном объекте Python.Я мог бы перекодировать каждый из них, но нет никакой гарантии, что перекодированные значения будут соответствовать оригиналам.Здесь есть какая-то криптография, отсюда и суета по поводу этих байтовых значений.
Если бы я мог просто сделать decoded_object.get_substrate()
или подобное, я бы отсортировался.
Мысли?Спасибо.
Обновление: ответ Ильи Этингофа, кажется, работает хорошо.
In [61]: class X(pyasn1.codec.ber.decoder.Decoder):
...: def __call__(self,*v,**kw):
...: parsed,remainder = pyasn1.codec.ber.decoder.Decoder.__call__(self,*v,**kw)
...: parsed._substrate = v[0][:len(v[0])-len(remainder)]
...: return parsed,remainder
...:
In [62]: decode = X(pyasn1.codec.ber.decoder.tagMap,pyasn1.codec.ber.decoder.typeMap)
In [63]: tmp = decode(b'\x30\x05\x02\x01\x7f\x05\x00')[0]
In [64]: tmp._substrate.encode('hex')
Out[64]: '300502017f0500'
In [65]: tmp[0]._substrate.encode('hex')
Out[65]: '02017f'
In [66]: tmp[1]._substrate.encode('hex')
Out[66]: '0500'
In [67]: