首页 > 解决方案 > ASN.1:SIZE 约束能否用于约束 SEQUENCE(不是 SEQUENCE OF)

问题描述

以下类型定义是有效的 ASN.1 语法吗?

MyType ::= SEQUENCE SIZE(2) {
  theID        OBJECT IDENTIFIER,
  someNumber   INTEGER OPTIONAL,
  someString   PrintableString OPTIONAL
}

我想正式约束序列,以便对于每个实例化,必须存在两个可选属性中的一个。

PS:由于SEQUENCESEQUENCE OF的编码方式完全相同,我略微希望这种语法是有效的。

标签: constraintssequenceasn.1subtype

解决方案


此语法无效。SEQUENCE就像一个带有字段的结构类型,其中每个字段可以是不同的类型。SEQUENCE OF就像一个数组,其中所有嵌套类型都是相同的类型。因此,SEQUENCE OF您可以将约束设置为数组大小。相同的规则适用于SETand SET OF,只是无序的。

我会这样解决您的问题:创建CHOICE所有可选字段(不带OPTIONAL修饰符)并将此 CHOICE 添加到您的主要类型:

MyChoice ::= CHOICE {
  someNumber   INTEGER,
  someString   PrintableString
}

MyType ::= SEQUENCE {
  theID        OBJECT IDENTIFIER,
  myChoice  <  MyChoice
}

在这种情况下,theID字段是必需的,并且恰好MyChoice需要其中一个元素。


推荐阅读