Мне нужно расшифровать несколько довольно длинных сообщений 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 параметра как набор. Конечно, мне придется изменить двоичное сообщение при приеме, чтобы преобразовать его из SEQUENCE в SET (всего один бит). Но я не могу сделать это с первой ПОСЛЕДОВАТЕЛЬНОСТЬЮ.
Есть ли способ указать «игнорировать неизвестные теги»?
Я читал о «ПРЕДПОЛАГАЕМОЙ РАСШИРИТЕЛЬНОСТИ», но я не могу понять, так ли это то, что мне нужно, или это просто подразумевает расширяемость в конце ПОСЛЕДОВАТЕЛЬНОСТИ, как если бы я использовал маркер расширяемости "...".
Заранее спасибо,
Луис