Ограничения типа ASN.1 SET

Я запутался в ограничениях на тип ASN.1 SET. В общем, я понимаю, что тип SET в основном такой же, как SEQUENCE, за исключением того, что порядок компонентов не имеет значения.

Основная книга по ASN.1, "ASN.1 — Связь между гетерогенными системами" Оливье Дюбюиссона говорит о SET следующее:

Если порядок компонентов типа SEQUENCE не имеет значения, для моделирования такой неупорядоченной структуры используется ключевое слово SET:

 Description ::= SET {    
   surname IA5String,   
   first-name IA5String,  
   age INTEGER  }

В этом случае приложение может предоставить кодировщику компоненты в наилучшем для него порядке.


Что я сразу заметил, так это то, что в примере Дюбюиссона SET содержит два типа IA5String. Кажется, это противоречит тому, что я прочитал здесь, в этом руководстве< /a>, в котором явно говорится, что:

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

Так как же SET может по закону иметь два типа IA5String? Я склонен доверять книге Оливье Дюбюссона, а не какому-то случайному учебнику в Интернете, однако нет никакого смысла в том, что тип SET может иметь несколько компонентов одного и того же типа. Причина в том, что в ASN.1 идентификаторы типов не кодируются (по крайней мере, для наиболее распространенных кодировок, таких как BER), поэтому декодер не сможет узнать, к какому компоненту относится IA5String - это surname или firstname? Невозможно сказать, если порядок не имеет значения.

Так неужели Оливье Дюбюиссон допустил здесь огромную ошибку? (Он также нигде в своем длинном описании SET типов ничего не упоминает о том, что SET не может иметь более одного типа каждого типа.)


person Channel72    schedule 13.10.2013    source источник


Ответы (2)


Если в SET есть два компонента одного типа, их действительно нельзя различить. Пример все еще может быть правильным, если он появляется в модуле с автоматической пометкой.

person Henry    schedule 13.10.2013

Стандарт (X.680, 27.3) требует, чтобы все типы компонентов типа SET имели разные теги.

Тип «Описание» в примере нарушает это требование, если объемлющий модуль ASN.1 имеет НЕЯВНЫЕ ТЕГИ или ЯВНЫЕ ТЕГИ (поскольку типы фамилий и имен компонентов имеют один и тот же тег «универсальный 22»), но это допустимо. если объемлющий модуль ASN.1 имеет АВТОМАТИЧЕСКИЕ ТЕГИ (поскольку типы этих компонентов теперь имеют разные теги — «контекстно-зависимый 0» и «контекстно-зависимый 1» соответственно — автоматически присваиваемые им вместо «универсального 22-дюймовые метки).

person Alessandro    schedule 14.10.2013