[英]ASN.1 BER Encoding of EmbeddedPDV
我正在用D編寫“ 基本編碼規則”編解碼器,並且想對EmbeddedPDV進行編碼,它是根據下面的ASN.1定義的。 問題是,在對identification
進行編碼時,我不知道如何在BER編碼的二進制文件中清楚地表明,我提供的是與syntax
字段相關聯的OBJECT IDENTIFIER
,而不是與transfer-syntax
字段相關聯的OBJECT IDENTIFIER
。
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
都將具有特定於上下文的標識符標記,但是在syntax
和transfer-syntax
分別沒有[0]
或[1]
會使目前尚不清楚我應該如何編碼。 是否存在與這些字段關聯的假定的特定於上下文的標識符? 換句話說,我是否應該使用0x81
的標識符標簽對OBJECT IDENTIFIER
進行編碼,以表示我正在編碼syntax
而對於0x82
的標識符標簽,則對我編碼transfer-syntax
編碼?
EMBEDDED PDV的“關聯類型”在ITU-T X.680(2015)第36.5條中給出,在給出定義之前包括“假設和自動標記環境”。 這樣做是為了避免每個字段的隱式標簽使文本混亂。 這意味着在“標識”內部,替代項“語法”的隱式標簽為[1],而“轉移語法”的隱式標簽為[4]。 這是EMBEDDED PDV內容的關聯類型的定義,無論“ EMBEDDED PDV”出現在什么標記上下文中。
看來您的ASN.1表示法不明確。 我能想到的唯一方法是顯式標記。
如果您的ASN.1模塊在模塊定義中具有AUTOMATIC
標記子句,則編碼器可能應該從標記值0開始顯式標記ASN.1 SEQUENCE,SET和CHOICE中所有未標記的組件。
僅當您沒有標記的組件正在嘗試序列化的構造數據結構定義中已經存在時,才應應用自動標記。
這是一個可能相關的答案 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.