ASN.1:SIZE约束可以用来约束SEQUENCE(不是SEQUENCE OF)

ASN.1: Can the SIZE constraint be used to constrain SEQUENCE (not SEQUENCE OF)

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

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

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

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

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

我会这样解决你的问题:为所有可选字段创建一个 CHOICE(没有 OPTIONAL 修饰符)并将此 CHOICE 添加到你的主要类型中:

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

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

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