ASN.1 BER-кодирование EmbeddedPDV

Я пишу Основные правила кодирования кодек в D, и я хочу закодировать EmbeddedPDV, который определен в соответствии с приведенным ниже ASN.1. Проблема в том, что при кодировании identification я не знаю, как в двоичном коде с кодировкой BER ясно указать, что я предоставляю OBJECT IDENTIFIER, связанный с полем syntax, а не связанный с полем transfer-syntax.

EmbeddedPDV ::= [UNIVERSAL 11] IMPLICIT SEQUENCE {
identification CHOICE {
    syntaxes SEQUENCE {
        abstract OBJECT IDENTIFIER,
        transfer OBJECT IDENTIFIER },
    syntax OBJECT IDENTIFIER,
    presentation-context-id INTEGER,
    context-negotiation SEQUENCE {
        presentation-context-id INTEGER,
        transfer-syntax OBJECT IDENTIFIER },
    transfer-syntax OBJECT IDENTIFIER,
    fixed NULL },
data-value-descriptor ObjectDescriptor OPTIONAL,
data-value OCTET STRING }
(WITH COMPONENTS { ... , data-value-descriptor ABSENT })

Я знаю, что если вы используете явные теги, то для syntax и transfer-syntax будут контекстно-зависимые теги идентификаторов, но отсутствие, скажем, [0] или [1] перед syntax и transfer-syntax соответственно делает неясным, как я должен кодировать это. С этими полями связан предполагаемый контекстно-зависимый идентификатор? Другими словами, должен ли я кодировать OBJECT IDENTIFIER с тегом идентификатора 0x81, чтобы обозначить, что я кодирую syntax, и тегом идентификатора 0x82, чтобы обозначить, что я кодирую transfer-syntax?


person Jonathan Wilbur    schedule 09.10.2017    source источник


Ответы (2)


«Ассоциированный тип» для EMBEDDED PDV указан в пункте 36.5 ITU-T X.680 (2015) и включает «предполагаемую и автоматическую среду тегирования» перед определением. Это было сделано, чтобы не загромождать текст неявными тегами для каждого поля. Это означает, что внутри «идентификации» альтернативный «синтаксис» имеет неявный тег [1], в то время как «трансфер-синтаксис» имеет неявный тег [4]. Это определение связанного типа для контента EMBEDDED PDV независимо от того, в каком контексте тегов появляется «EMBEDDED PDV».

person Paul Thorpe    schedule 09.10.2017
comment
Большое спасибо! Это было именно то, что мне было нужно! - person Jonathan Wilbur; 09.10.2017

Кажется, у вас неоднозначная нотация ASN.1. Единственный способ, который я могу придумать, - это явная пометка.

Если ваш модуль ASN.1 имеет предложение тегирования AUTOMATIC в определении модуля, то ваш кодировщик, вероятно, должен явно пометить все немаркированные компоненты в ASN.1 SEQUENCE, SET и CHOICE, начиная со значения тега 0.

Эта автоматическая пометка должна применяться только в том случае, если у вас нет помеченных компонентов, уже присутствующих в построенном определении структуры данных, которое вы пытаетесь сериализовать.

Вот возможно релевантный ответ.

person Ilya Etingof    schedule 09.10.2017