我在D中编写一个Basic Encoding Rules编解码器,我想编码一个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
?
答案 0 :(得分:2)
"相关类型"对于EMBEDDED PDV,在ITU-T X.680(2015)第36.5条中给出,并包括"假设和自动标记环境"在给出定义之前。这样做是为了避免使用每个字段的隐式标记来混淆文本。这意味着内部"识别",替代"语法"有一个隐含的标签[1]而#34; transfer-syntax"有一个隐含的标签[4]。这是EMBEDDED PDV内容的相关类型的定义,无论标记上下文是什么,嵌入PDV"出现在。
答案 1 :(得分:0)
似乎你的ASN.1表示法含糊不清。我能想到处理它的唯一方法就是明确标记。
如果您的ASN.1模块在模块定义中具有AUTOMATIC
标记子句,则编码器可能应该从标记值0开始明确标记ASN.1 SEQUENCE,SET和CHOICE中的所有未标记组件。
只有在您尝试序列化的构造数据结构定义中没有标记组件时才应用自动标记。