【问题标题】:ASN.1: Can the SIZE constraint be used to constrain SEQUENCE (not SEQUENCE OF)ASN.1:SIZE 约束可以用来约束 SEQUENCE(不是 SEQUENCE OF)
【发布时间】:2020-03-26 09:07:21
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: constraints sequence asn.1 subtype


    【解决方案1】:

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

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

    MyChoice ::= CHOICE {
      someNumber   INTEGER,
      someString   PrintableString
    }
    
    MyType ::= SEQUENCE {
      theID        OBJECT IDENTIFIER,
      myChoice  <  MyChoice
    }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多