2013-10-13 3 views
1

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

Семенной книга по ASN.1, "ASN.1 — Communication Between Heterogeneous Systems" Оливье Dubuisson, это сказать о множествах:

Если компонент порядок типа ПОСЛЕДОВАТЕЛЬНОСТИ не имеет значения, используется кнопочная слово SET для моделирования такой нЕУПОРЯДОЧЕННОЙ структуры:

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

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


То, что я сразу же заметить здесь, что в примере Dubuisson, тем SET имеет два типа IA5String в нем. Это, кажется, противоречит тому, что я прочитал here in this tutorial, который явно говорит, что:

тип и значение обозначения для SET аналогичны ПОСЛЕДОВАТЕЛЬНОСТИ, за исключением того, что тип каждого компонента должен быть отличным от всех другие и значения могут быть в любом порядке.

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

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

ответ

1

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

2

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

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

Смежные вопросы