2017-10-09 62 views
0

我正在編寫一個Basic Encoding Rules編解碼器,我想編碼一個EmbeddedPDV,它是根據下面的ASN.1定義的。問題是,在編碼identification時,我不知道如何在BER編碼的二進制文件中說清楚,我提供的OBJECT IDENTIFIERsyntax字段相關聯,而與transfer-syntax字段相關的一個不同。ASN.1嵌入式PDV的BER編碼

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 }) 

我知道,如果你正在使用顯式標籤,將有兩個syntaxtransfer-syntax上下文特定標識標籤,但是沒有,比如說,syntax[0][1]transfer-syntax分別使它不清楚我應該如何編碼這個。是否有假定與這些字段關聯的特定於上下文的標識符?換句話說,我是否應編碼OBJECT IDENTIFIER標識符標記爲0x81來指定我編碼爲syntax,標識符標記爲0x82以指定我編碼爲transfer-syntax

回答

2

EMBEDDED PDV的「關聯類型」在ITU-T X.680(2015)第36.5條中給出,並且在給出定義之前包括「假設和自動標記環境」。這是爲了避免使用每個字段的隱式標籤混淆文本。這意味着在「識別」中,替代「語法」具有[1]的隱含標籤,而「傳輸語法」具有[4]的隱含標籤。這是EMBEDDED PDV內容的關聯類型的定義,無論「EMBEDDED PDV」出現在什麼標記上下文中。

+0

非常感謝!那正是我需要的! –

0

看來你有含糊不清的ASN.1記法。我能想到的唯一方法就是明確標記。

如果你的ASN.1模塊在模塊定義的AUTOMATIC標記條款,比你的編碼器也許應該明確地標記在ASN.1 SEQUENCE所有未標記組件,設置和選擇從標籤值開始0

該自動標記只應用於在您嘗試序列化的構建數據結構定義中沒有標記組件的情況。

這是possibly relevant answer