我正在尝试使用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))
)
但是我认为这尤其对于integer(1..MAX)是不正确的。我错过了什么?在这种情况下,MAX值是多少?
最佳答案
您需要像这样向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时,都会引发异常。