ASN.1 тип 0x80 - PullRequest
       24

ASN.1 тип 0x80

0 голосов
/ 27 августа 2018

Мой декодер ASN.1 работал нормально, пока я не столкнулся с интересным типом:

0x80, который был расшифрован онлайн-инструментами как простой тип с именем [0].

Я обнаружил, что некоторые источники упоминают, что это "неопределенная длина", но она определенно имела определенную длину, которую я мог прочитать. Что на самом деле это тип, и есть ли другие типы, подобные этому?

1 Ответ

0 голосов
/ 27 августа 2018

В качестве тега 0x80 (в BER, CER или DER) означает тег, класс которого зависит от контекста (по сравнению с именованными классами, UNIVERSAL, PRIVATE и APPLICATION), чей номер равен 0, и его кодировка является примитивной. Тот факт, что он является примитивным, означает, что он используется как тег IMPLICIT. Если бы это было 0xA0 (Constructed, Context-Specific 0), это может быть либо EXPLICIT тег (оболочка), либо IMPLICIT конструированное значение (SEQUENCE, SEQUENCE-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.

...