ASN.1子类型约束分辨率

时间:2013-09-17 13:57:04

标签: asn.1

ASN.1允许您声明“子类型”,这基本上对常规类型施加了额外的约束。

所以,常规类型是:

IntType ::= INTEGER

但是你可以通过创建一个只允许某个范围内的值的“子类型”来限制类型,例如:

IntType ::= INTEGER (1..100)

这声明IntTypeINTEGER,必须介于1到100之间。

我的问题是,一旦声明了Sub-Type,ASN.1如何处理子类型的进一步约束?假设我也说:

AnotherIntType ::= IntType (1..50)

这有效吗?我现在已经创建了第二个SubType,它进一步限制了IntType。但如果约束相互矛盾,如下所示:

AnotherIntType ::= IntType (1..200)

是否有解决这些矛盾的具体规则?

1 个答案:

答案 0 :(得分:1)

根据标准

  

47.4.2“ValueRange”指定一系列值中的值,这些值通过指定值来指定   该范围的终点。这种表示法只能应用于整数类型,某些受限制的“PermittedAlphabet”   字符串类型(IA5String,NumericString,PrintableString,VisibleString,BMPString,   仅限UniversalString和UTF8String)和真实类型。 “ValueRange”中指定的所有值都必须是   在父类型的根目录中。

你的第一个例子

AnotherIntType ::= IntType (1..50)

有效。允许的值是从1到50的整数。

第二个例子

AnotherIntType ::= IntType (1..200)

无效,因为值范围内的所有值都不在父类型中。 IntType仅包含1到100之间的整数。