我正在尝试使用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时,都会引发异常。

10-08 09:46