Tags 带有未定义标签的ASN.1误码率序列

Tags 带有未定义标签的ASN.1误码率序列,tags,undefined,sequence,asn.1,ber,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, 等等,还有更

我需要解码一些相当长的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的定义从序列更改为集合,如:

MySeq ::= SET  
{  
a IMPLICT [1] TYPEa OPTIONAL,  
a20 IMPLICT [20] TYPEa OPTIONAL,  
a40 IMPLICT [40] TYPEa OPTIONAL,  
...  
}  
我的意思是,解析将把这3个参数作为一个集合进行解码。当然,我必须在接收时修改二进制消息,以将其从序列转换为集合(仅一位)。但是我不能用第一个序列来做这件事。
是否有任何方式指示“忽略未知标记”?
我读过关于“可扩展性暗示”的文章,但我不明白这是否是我所需要的,或者它只是暗示了序列末尾的可扩展性,就好像我在使用可扩展性标记“…”

提前感谢,


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

关于隐含的可扩展性,您是正确的,它相当于添加。。。扩展标记到每个序列、集合和选择类型的末尾,因此我不确定这是否有助于您。如果不只是在每个序列的末尾需要一个扩展标记,这可能对您没有用处

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


披露:我在OSS Nokalva,Inc.工作。

你好,谢谢。集合中的更改不是风险,因为所有参数都有不同的隐式标记,如“案例2”序列中所示。无论如何,我正在测试OSS编译器的“ASN1.DeferDecoding”特性;-)在这种情况下,我不关心的所有字段似乎都被编码为OpenType,只是一个缓冲区,没有进一步的解码。我想我要走那条路。