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,  

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

Заранее спасибо,

Луис


person Kalki70    schedule 07.03.2016    source источник


Ответы (1)


Попытка возиться с тегом SEQUENCE, чтобы изменить его на тег SET, опасна, поскольку последовательность может содержать один и тот же тег несколько раз, если между ними есть необязательный компонент. SET не может справиться с этим. Кроме того, декодирование НАБОР по своей сути является более сложным, чем надежное декодирование ПОСЛЕДОВАТЕЛЬНОСТИ, поскольку декодер должен иметь возможность обрабатывать компоненты в любом порядке.

Что касается ПОДРАЗУМЕВАЕМОЙ РАСШИРЯЕМОСТИ, вы правы, что это эквивалентно добавлению метки расширения ... в конец каждого типа SEQUENCE, SET и CHOICE, поэтому я не уверен, что это вам поможет. Если вам нужна отметка расширения не только в конце каждой ПОСЛЕДОВАТЕЛЬНОСТИ, это может быть вам бесполезно.

В качестве альтернативы можно попробовать использовать функцию «частичного декодирования» инструментов OSS ASN.1 (http://www.oss.com), что позволяет вам выбирать определенные компоненты сообщения, которые вас интересуют, и пропускать остальные.

Раскрытие информации: я работаю в OSS Nokalva, Inc.

person Paul Thorpe    schedule 08.03.2016
comment
Привет спасибо. Изменение SET не является риском, так как все параметры имеют разные неявные теги, как и в последовательности случая 2. В любом случае, я тестирую функцию ASN1.DeferDecoding компилятора OSS ;-) Кажется, в этом случае все поля, которые мне не нужны, просто кодируются как OpenType, просто буфер без дальнейшего декодирования. Думаю, я иду по этому пути. - person Kalki70; 09.03.2016