如何使用PyASN INTEGER(1..MAX)在python中编写ASN1编码?

时间:2014-03-19 20:40:46

标签: python password-encryption asn.1 pbkdf2

我正在尝试使用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值是多少?

1 个答案:

答案 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时,都会抛出异常。