背景:
在 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 页):
特定于上下文的标签,特别是出现在
encoding
组件(类型CHOICE
)的替代品之前必须被编码,而不是那些在 1994 版本中计算的标签。
在第 413 页,他描述了如何对 进行编码INSTANCE OF
,他指出其编码方式与 相同EXTERNAL
。这些identification
节目仅由一个数字为 6 ( OBJECT IDENTIFIER
) 的通用标签编码。节目的encoding
形式
[CONTEXT 0]
[UNIVERSAL 2]
这意味着他正在编码一个INTEGER
, 5, 作为他的选择single-ASN-type
。
我的问题
如果 1994 年后的版本EXTERNAL
向后兼容,则data-value
必须转换为 1994 年前的替代版本之一encoding
。哪一个?
换句话说,如果我对 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)
提前致谢!