0

我正在用 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 })

我知道,如果您使用显式标记,那么 和 都会有特定于上下文的标识符标记syntaxtransfer-syntax但是缺少 a[0][1]之前syntaxtransfer-syntax分别使我不清楚我应该如何对其进行编码。是否存在与这些字段关联的假定上下文特定标识符?换句话说,我是否应该OBJECT IDENTIFIER使用标识符标签0x81来指定我正在编码syntax和标识符标签0x82来指定我正在编码transfer-syntax

4

2 回答 2

3

EMBEDDED PDV 的“关联类型”在 ITU-T X.680(2015) 第 36.5 条中给出,并在给出定义之前包括“假设和自动标记环境”。这样做是为了避免文本与每个字段的隐式标签混淆。这意味着在“标识”内部,替代“语法”具有 [1] 的隐式标记,而“传输语法”具有 [4] 的隐式标记。这是 EMBEDDED PDV 内容的关联类型的定义,无论“EMBEDDED PDV”出现在什么标记上下文中。

于 2017-10-09T14:41:32.783 回答
0

您似乎有模棱两可的 ASN.1 表示法。我能想到的处理它的唯一方法是显式标记。

如果您的 ASN.1 模块AUTOMATIC在模块定义中有标记子句,那么您的编码器可能应该从标记值 0 开始显式标记 ASN.1 SEQUENCE、SET 和 CHOICE 中的所有未标记组件。

仅当您尝试序列化的构造数据结构定义中没有已标记的组件时,才应应用自动标记。

这是一个可能相关的答案

于 2017-10-09T13:02:27.940 回答