Я запутался в ограничениях на тип 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
не может иметь более одного типа каждого типа.)