Encoding ASN.1设置类型限制
我对ASN.1Encoding ASN.1设置类型限制,encoding,asn.1,ber,Encoding,Asn.1,Ber,我对ASN.1SET类型的限制感到困惑。一般来说,我意识到集合类型基本上与序列相同,只是组件的顺序无关紧要 奥利维尔·杜布伊森(Olivier Dubuisson)撰写的关于ASN.1的开创性著作中有这样一句话: 如果序列类型的组件顺序无关紧要,则键- 单词集用于对此类非有序结构进行建模: 在这种情况下,应用程序可以向 编码器的最佳顺序 我在这里立即注意到的是,在Dubuisson的示例中,SET中有两种IA5String类型。这似乎与我读到的内容相矛盾,其中明确指出: 集合的类型和值符号与序
SET
类型的限制感到困惑。一般来说,我意识到集合
类型基本上与序列
相同,只是组件的顺序无关紧要
奥利维尔·杜布伊森(Olivier Dubuisson)撰写的关于ASN.1的开创性著作中有这样一句话:
如果序列类型的组件顺序无关紧要,则键-
单词集用于对此类非有序结构进行建模:
在这种情况下,应用程序可以向
编码器的最佳顺序
我在这里立即注意到的是,在Dubuisson的示例中,
SET
中有两种IA5String类型。这似乎与我读到的内容相矛盾,其中明确指出:
集合的类型和值符号与序列类似,
除了每个组件的类型必须与所有组件不同之外
其他值和值可以是任意顺序
那么,一个集合如何合法地拥有两种IA5String
类型呢?我倾向于相信Olivier Dubuisson的书,而不是一些随机的互联网教程,然而,SET
类型可以有多个相同类型的组件是没有任何意义的。原因是,在ASN.1中,类型标识符没有编码(至少对于大多数常见的编码,如BER),因此解码器无法知道IA5String
应用于哪个组件-是姓氏
还是名字
?没有办法判断订单是否重要
那么Olivier Dubuisson是不是犯了个大错误?(他在对SET
类型的长篇描述中也没有提到SET
每个类型不能超过一个的事实。)如果一个集合中有两个相同类型的组件,它们确实无法区分。如果该示例出现在具有自动标记的模块中,则该示例仍然是正确的 标准(X.680,27.3)要求集合类型的组件类型都有不同的标签
如果封装的ASN.1模块具有隐式标记或显式标记(因为组件的姓氏和名字的类型具有相同的标记“universal 22”),则示例中的“Description”类型违反此要求,但如果封装的ASN.1模块具有自动标记,则该类型是合法的(因为这些组件的类型现在有不同的标记--“上下文特定的0”和“上下文特定的1”,分别自动分配给它们,以替换“universal 22”标记)
Description ::= SET {
surname IA5String,
first-name IA5String,
age INTEGER }