非常に長い 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 の最後に拡張性を暗示しているだけなのか理解できません。
前もって感謝します、
ルイス