ASN.1具有未定义标签的BER序列

时间:2016-03-07 13:09:42

标签: tags undefined sequence asn.1 ber

我需要解码一些很长的BER消息,我有两种不同的情况。一个有一些没有特定标签的强制参数,还有许多带隐式标签的可选参数。另一个只有可选的隐式标签,例如:

案例1:

MySeq ::= SEQUENCE  
{  
a TYPE1,  
b TYPE1,  
C TYPE1,  
-- first 3 elements have same type  
d IMPLICT [1] TYPEd OPTIONAL,  
e IMPLICT [1] TYPEe OPTIONAL,  

等,以及更多参数,大约40个,其中一些参数构建,内部也构造了参数。

案例2:

MySeq ::= SEQUENCE  
{  
a IMPLICT [1] TYPEa OPTIONAL,  
b IMPLICT [2] TYPEb OPTIONAL,  
c IMPLICT [3] TYPEc OPTIONAL,  
d IMPLICT [4] TYPEd OPTIONAL,  
e IMPLICT [5] TYPEe OPTIONAL,  
etc  

关键是,我真的需要这些消息中的3或4个参数 我不关心其余的事情。如果我不需要,我不希望我的解码器花费如此多的处理时间来解码完整的消息。有没有标准的方法来做到这一点?
在第二种情况下,我提出了一个想法,将ASN.1定义从SEQUENCE更改为SET,如:

MySeq ::= SET  
{  
a IMPLICT [1] TYPEa OPTIONAL,  
a20 IMPLICT [20] TYPEa OPTIONAL,  
a40 IMPLICT [40] TYPEa OPTIONAL,  
...  
}  

我的意思是,解析只会将这3个参数解码为SET。当然,我必须在接收时修改二进制消息,将其从SEQUENCE转换为SET(只有一位)。但是我不能用第一个SEQUENCE做到这一点 有没有办法表明"忽略未知标签" ?
我已经读过关于"可扩展性的内容"但我无法理解这是否是我需要的,或者它只是意味着在SEQUENCE结束时的可扩展性,就像我使用的是可扩展性标记& #34; ..."

提前致谢,

路易斯

1 个答案:

答案 0 :(得分:0)

尝试使用SEQUENCE标记将其更改为SET标记是危险的,因为序列可以多次包含相同的标记,只要它们之间存在非可选组件即可。 SET无法处理此问题。此外,解码SET本质上比以健壮的方式解码SEQUENCE更复杂,因为解码器必须能够以任何顺序处理组件。

关于可扩展性,你是正确的,它相当于在每个SEQUENCE,SET和CHOICE类型的末尾添加...扩展标记,所以我不确定这会对你有所帮助。如果不是每个SEQUENCE的末尾都需要扩展标记,这可能对您没用。

另一种方法是尝试使用OSS ASN.1工具(http://www.oss.com)的“部分解码”功能,该功能允许您选择您感兴趣的消息的特定组件并跳过其他组件。

披露:我为OSS Nokalva,Inc。工作。