我需要解码一些很长的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 个,其中一些是构造的,内部也构造了参数。
案例二:
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(仅一位)。但我不能用第一个序列来做到这一点。
有没有办法指示“忽略未知标签”?
我已经阅读了“暗示的可扩展性”,但我不明白这是否是我需要的,或者它只是暗示在序列末尾的可扩展性,就好像我正在使用可扩展性标记“...”一样。
提前致谢,
路易斯