【发布时间】:2018-03-20 12:50:31
【问题描述】:
我正在用 D 编写一个Basic Encoding Rules 编解码器,我想编码一个 EmbeddedPDV,它是根据下面的 ASN.1 定义的。问题是,在编码 identification 时,我不知道如何在 BER 编码的二进制文件中清楚地表明我提供的是与 syntax 字段相关联的 OBJECT IDENTIFIER,而不是与 @ 相关联的字段。 987654325@字段。
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 都会有特定于上下文的标识符标记,但是在 @987654331 之前没有 [0] 或 [1] @ 和 transfer-syntax 分别让我不清楚我应该如何编码。是否存在与这些字段关联的假定特定于上下文的标识符?换句话说,我是否应该使用标识符标签0x81 编码OBJECT IDENTIFIER 来指定我正在编码syntax 和标识符标签0x82 来指定我正在编码transfer-syntax?
【问题讨论】: