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

Я пишу кодек Basic Encoding Rules в 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?

2 ответа

Решение

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

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

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

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

Вот, возможно, соответствующий ответ.

Другие вопросы по тегам