структура python asn1 не может установить значения поля - PullRequest
0 голосов
/ 22 апреля 2019

Я пытаюсь построить структуру asn1 в python 3.7, используя pyasn1 для сериализации подписей ECDSA.

Я определил следующую структуру: (Из примера, найденного здесь http://snmplabs.com/pyasn1/)

class ASNBitcoinSignature(Sequence):
    componentType = NamedTypes(
        NamedType('r', Integer()),
        NamedType('s', Integer()),
    )

мой код для кодирования значений r и s подписи выглядит следующим образом:

asn = ASNBitcoinSignature()
asn['r'] = self.r().x()
asn['s'] = self.s()
serialized = encode(asn)

Выполнение кода, который я получаю

'No field named "r" defined for ASNBitcoinSignature'

Кто-нибудь имеет представление, что не так?Может быть, это старый пример, и теперь значения полей должны быть установлены или определены по-другому?

1 Ответ

0 голосов
/ 22 апреля 2019

Эта ошибка произошла из-за неправильного импорта последовательности:

Первоначально я импортировал

from asn1crypto.core import Sequence

, но на самом деле я хотел

from pyasn1.type.univ import Sequence

Еще одна проблема сэтот код (только для дальнейшего использования) заключался в том, что тип Integer, определенный в pyasn1, имел слишком низкое максимальное значение для моего варианта использования.

Я мог бы решить эту проблему, создав новый подтип Integer, например:

class ASNBigInteger(Integer):
    subtypeSpec = ValueRangeConstraint(0x1, 0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141)
...