如何编码 post-1994 ASN.1 EXTERNAL 类型?

How do you encode a post-1994 ASN.1 EXTERNAL type?

背景:

1994 年之前,EXTERNAL 是这样定义的(带有自动和显式标记):

EXTERNAL  ::=  [UNIVERSAL 8] IMPLICIT SEQUENCE
    {
    direct-reference  OBJECT IDENTIFIER OPTIONAL,
    indirect-reference  INTEGER OPTIONAL,
    data-value-descriptor  ObjectDescriptor  OPTIONAL,
    encoding  CHOICE
                {single-ASN1-type  [0] ANY,
                octet-aligned     [1] IMPLICIT OCTET STRING,
                arbitrary         [2] IMPLICIT BIT STRING}
    }

但从那以后,它被定义为:

EXTERNAL := [UNIVERSAL 8] IMPLICIT SEQUENCE {
    identification CHOICE {
        syntax OBJECT IDENTIFIER,
        presentation-context-id INTEGER,
        context-negotiation SEQUENCE {
            presentation-context-id INTEGER,
            transfer-syntax OBJECT IDENTIFIER } },
    data-value-descriptor ObjectDescriptor OPTIONAL,
    data-value OCTET STRING }

Dubuisson 的 ASN.1 说(第 412 页):

the context-specific tags, in particular, which appear before the alternatives of the encoding component (of type CHOICE) must be encoded but not those computed in the 1994 version.

在第 413 页,他描述了如何对 INSTANCE OF 进行编码,他指出 EXTERNAL 的编码方式相同。 identification 显示为仅由数字为 6 (OBJECT IDENTIFIER) 的通用标签编码。 encoding 显示为

形式
[CONTEXT 0]
    [UNIVERSAL 2]

意味着他正在编码 INTEGER, 5,作为他选择的 single-ASN-type

我的问题

如果 EXTERNAL 的 post-1994 版本向后兼容,那么 data-value 将不得不转换为 encoding 的 1994 年之前的替代版本之一。 是哪一个?

换句话说,如果我编码 post-1994 EXTERNAL(使用 presentation-context-id 作为我们选择 identification 只是为了示例),它是否被编码为

[UNIVERSAL 8]
    [UNIVERSAL 2] (presentation-context-id => indirect-reference)
    [CONTEXT 0] (data-value => single-ASN1-type)
        [UNIVERSAL 4]

[UNIVERSAL 8]
    [UNIVERSAL 2] (presentation-context-id => indirect-reference)
    [CONTEXT 1] (data-value => octet-aligned)

提前致谢!

请参考建议。 ITU-T X.690 | ISO/IEC 8825-1 第 18 条。它详细描述了如何保持向后兼容性,具体说明如何将 X.680 EXTERNAL 关联序列的值映射到 X.690 中定义的以下 SEQUENCE:

[UNIVERSAL 8] IMPLICIT SEQUENCE {
    direct-reference                OBJECT IDENTIFIER OPTIONAL,
    indirect-reference              INTEGER OPTIONAL,
    data-value-descriptor           ObjectDescriptor OPTIONAL,
    encoding                        CHOICE {
    single-ASN1-type                        [0] ABSTRACT-SYNTAX.&Type,
    octet-aligned                           [1] IMPLICIT OCTET STRING,
    arbitrary                               [2] IMPLICIT BIT STRING } }

此外,此序列假定 EXPLICIT TAGS 环境而不是 AUTOMATIC TAGS 作为 X.680 中的序列。