ASN.1: Может ли ограничение SIZE использоваться для ограничения SEQUENCE (не SEQUENCE OF) - PullRequest
0 голосов
/ 26 марта 2020

Является ли следующее определение типа допустимым синтаксисом ASN.1?

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

Я хочу формально ограничить последовательность таким образом, чтобы для каждого экземпляра должен присутствовать только один из обоих необязательных атрибутов.

PS: Поскольку SEQUENCE и SEQUENCE OF кодируются одинаково, у меня есть небольшая надежда, что этот синтаксис допустим.

1 Ответ

2 голосов
/ 26 марта 2020

Этот синтаксис недопустим. SEQUENCE походит на тип структуры с полями, где каждое поле может иметь различный тип. SEQUENCE OF похоже на массив, где все вложенные типы имеют одинаковый тип. Таким образом, в SEQUENCE OF вы можете установить ограничение на размер массива. Те же правила применяются к SET и SET OF, только неупорядоченным.

Я бы решил вашу проблему следующим образом: создайте CHOICE всех ваших дополнительных полей (без модификатора OPTIONAL) и добавьте этот ВЫБОР на ваш основной тип:

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

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

В этом случае поле theID является обязательным и требуется только один из MyChoice элементов.

...