[英]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.