如何编码 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 中的序列。
背景:
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 typeCHOICE
) 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 中的序列。