ASN.1 类型 0x80

ASN.1 type 0x80

我的 ASN.1 解码器工作正常,直到我遇到一个有趣的类型:

0x80 被在线工具解码为名称为 [0].

的简单类型

我发现一些消息来源提到这是 "indefinite length",但它肯定有一个我可以阅读的确定长度。这种类型到底是什么,还有其他类似的类型吗?

作为标签,0x80(在 BER、CER 或 DER 下)表示其 class 是上下文特定的标签(相对于命名的 classes,UNIVERSALPRIVATEAPPLICATION),其编号为 0,其编码是原始的。它是原始的这一事实意味着它被用作 IMPLICIT 标签。如果它是 0xA0(构造的,特定于上下文的 0),它可以是 EXPLICIT 标记(包装器)或 IMPLICIT 构造值(SEQUENCESEQUENCE-OF, 等等).

要了解此类值的含义,需要查看 ASN.1 类型定义。

例如,来自 RFC 3280 A.2 (DEFINITIONS IMPLICIT TAGS):

PrivateKeyUsagePeriod ::= SEQUENCE {
     notBefore       [0]     GeneralizedTime OPTIONAL,
     notAfter        [1]     GeneralizedTime OPTIONAL }

如果 PrivateKeyUsagePeriod 有一个 notBefore 值,那么它将被标记为 0x80 ([0]) 而不是 0x18 ([UNIVERSAL 24]);但仍应按照 GeneralizedTime.

的编码进行解释