python asn1结构无法设置字段值

时间:2019-04-22 12:31:06

标签: python asn.1

我正在尝试使用pyasn1在python 3.7中构建asn1结构来序列化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 :(得分:0)

此错误来自错误的序列导入:

最初我导入了

from asn1crypto.core import Sequence

但是我真正想要的是

from pyasn1.type.univ import Sequence

此代码的另一个问题(仅供将来参考)是pyasn1中定义的Integer类型对于我的用例而言,最大值太低。

我可以通过创建一个新的Integer子类型来解决此问题:

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