0

非常に長い BER メッセージをデコードする必要があり、2 つの異なる状況があります。1 つには、特定のタグのない必須パラメーターがいくつかあり、暗黙的なタグを持つ多くのオプションのパラメーターがあります。もう一方には、オプションの暗黙的なタグのみがあります。たとえば、次のとおりです。

ケース 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 つだけということです。
残りは気にしません。必要がない場合、デコーダーがメッセージ全体をデコードするのにそれほど多くの処理時間を費やしたくありません。これを行う標準的な方法はありますか?
2 番目のケースでは、次のように 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 (1 ビットのみ) に変換する必要があります。しかし、最初の SEQUENCE ではそれができません。
「不明なタグを無視する」ように指示する方法はありますか?
「EXTENSIBILITY IMPLIED」について読みましたが、それが必要なのか、それとも拡張マーカー「...」を使用しているかのように、SEQUENCE の最後に拡張性を暗示しているだけなのか理解できません。

前もって感謝します、

ルイス

4

1 に答える 1

0

SEQUENCE タグをいじって SET タグに変更しようとするのは危険です。間にオプションではないコンポーネントがある限り、シーケンスには同じタグが複数回含まれる可能性があるためです。SET はこれを処理できません。また、SET のデコードは、本質的に、堅牢な方法で SEQUENCE をデコードするよりも複雑です。これは、デコーダがコンポーネントを任意の順序で処理できなければならないためです。

EXTENSIBILITY IMPLIED に​​関しては、SEQUENCE、SET、および CHOICE の各型の最後に ... 拡張マークを追加するのと同じことは正しいので、これが役立つかどうかはわかりません。拡張マークが必要なのが各 SEQUENCE の最後だけではない場合、これは役に立たない可能性があります。

別の方法として、OSS ASN.1 ツール ( http://www.oss.com )の「部分デコード」機能を使用して、関心のあるメッセージの特定のコンポーネントを選択し、他のコンポーネントをスキップすることもできます。 .

開示:私はOSS Nokalva、Inc.で働いています。

于 2016-03-08T17:24:18.300 に答える