我正在尝试使用PyASN库在Python中实现一些编码。我必须定义一个我应该实现以下内容的类:
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值是多少?
答案 0 :(得分:1)
您需要向Integer对象添加value range constraint,如下所示:
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))
)
每当您尝试使用超出范围的值初始化Integer时,都会抛出异常。