EmbeddedPDV的ASN.1 BER编码

ASN.1 BER Encoding of EmbeddedPDV

我正在用D写一个Basic Encoding Rules编解码器,我想编码一个EmbeddedPDV,它是根据下面的ASN.1定义的。问题是,在编码 identification 时,我不知道如何在 BER 编码的二进制文件中明确表示我提供了与 syntax 字段关联的 OBJECT IDENTIFIER 而不是到与 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 都会有上下文特定的标识符标记,但是没有 [0][1]syntaxtransfer-syntax 之前分别使我不清楚我应该如何对其进行编码。是否有与这些字段关联的 assumed 上下文特定标识符?换句话说,我是否应该使用 0x81 标识符标记编码 OBJECT IDENTIFIER 以指定我正在编码 syntax0x82 标识符标记以指定我正在编码transfer-syntax?

您的 ASN.1 表示法似乎不明确。我能想到的唯一处理方法是显式标记。

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

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

这里是.

ITU-T X.680(2015) 第 36.5 条中给出了 EMBEDDED PDV 的 "associated type",并在给出定义之前包含了 "assuming and automatic tagging environment"。这样做是为了避免每个字段的隐式标记使文本混乱。这意味着在 "identification" 中,替代项 "syntax" 具有隐式标记 [1],而 "transfer-syntax" 具有隐式标记 [4]。这是 EMBEDDED PDV 内容的关联类型的定义,无论 "EMBEDDED PDV" 出现在什么标记上下文中。