如何在Python中使用PyASN编写ASN1编码的INTEGER (1..MAX)?
我正在尝试在Python中使用PyASN库实现一些编码功能。我需要定义一个类,在这个类里我应该实现以下内容:
pbkdf2params ::= SEQUENCE {
salt OCTET STRING,
iterationCount INTEGER (1..MAX),
keyLength INTEGER (1..MAX)
}
我定义的Python类如下:
class pbkdf2params(univ.Sequence):
componentType = namedtype.NamedTypes(
namedtype.NamedType('salt', univ.OctetString()),
namedtype.NamedType('iterationCount', univ.integer(1,MAX)),
namedtype.NamedType('keyLength', univ.integer(1, MAX))
)
但是我觉得这个实现可能不太对,特别是对于整数(1..MAX)这一部分。我漏掉了什么呢?在这种情况下,MAX的值应该是多少呢?
1 个回答
2
你需要给整数对象添加一个值范围限制,像这样:
from pyasn1.type import univ, namedtype, constraint
class Pbkdf2params(univ.Sequence):
componentType = namedtype.NamedTypes(
namedtype.NamedType('salt', univ.OctetString()),
namedtype.NamedType('iterationCount', univ.Integer().subtype(subtypeSpec=constraint.ValueRangeConstraint(1,MAX)),
namedtype.NamedType('keyLength', univ.Integer().subtype(subtypeSpec=constraint.ValueRangeConstraint(1, MAX))
)
每当你试图用一个超出范围的值来初始化整数时,就会抛出一个异常。