我正在用 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
但是缺少 a[0]
或[1]
之前syntax
和transfer-syntax
分别使我不清楚我应该如何对其进行编码。是否存在与这些字段关联的假定上下文特定标识符?换句话说,我是否应该OBJECT IDENTIFIER
使用标识符标签0x81
来指定我正在编码syntax
和标识符标签0x82
来指定我正在编码transfer-syntax
?