Расшифровка ASN1 закодированного "идентификатора ключа субъекта" странной длины - PullRequest
1 голос
/ 25 мая 2020

Я пытаюсь расшифровать поле под названием Subject Key Identifier (RF C 5820), которое содержалось в сертификате CMS (RF C 6488). На протяжении большей части предыдущей "работы" я успешно использовал модули pyasn1 и pyasn1_modules для декодирования структур ASN1. Однако я получаю сообщение об ошибке:

pyasn1.error.SubstrateUnderrunError: 31<18 at <TagSet object, tags 128:32:15>

Используя отладчик, я обнаружил, что проблема возникла при чтении:

AF 9F 00 96 C2 39 12 D7 8F 6A D6 D6 35 9B A4 88 FB 3A 32 A0

Глядя на первый октет (AF -> 10101111), я понимаю, что что это Constructed Definite length-method с идентификатором 15.

Поскольку первый октет выполнен, второй - это длина. 9F -> 10011111, так как MSB установлен, длина будет установлена ​​31 следующим октетом. Однако вся "полезная нагрузка" составляет 20 байтов (октетов). Какой в ​​этом смысл?

(Я полагаю, что значения 31 и 18 - это то, о чем мне говорит ошибка, но я не буду держать объяснение, если какой-либо другой новичок сочтет его полезным!)

...