У меня есть сертификат X.509, содержащий набор данных со следующим тегом IMPLICIT [0]:
A0 81 C6 (value)...
И у меня есть эта выдержка из стандартного документа:
Тег IMPLICIT [0] не используется для кодирования DER, вместо этого используется тег EXPLICIT SET OF. То есть кодирование DER тега EXPLICIT SET OF, а не тега IMPLICIT [0], ДОЛЖНО быть включено вместе с октетами длины и содержимого значения.
Я много искал, но я не могу точно понять, к чему призывает стандарт. Я ищу немного разъяснений.
РЕДАКТИРОВАТЬ: Вот стандарт, которому я следую: http://tools.ietf.org/html/rfc3852< /а>
Я пытаюсь проверить подпись X.509, и для этого мне нужно рассчитать дайджест сообщения. Этот сертификат включает необязательные атрибуты SignedAttributes в типе SignerInfo. Я хешировал подписанный контент и проверил правильность дайджеста сообщения в SignedAttributes. Стандарт говорит, что если SignedAttributes присутствует, он должен быть хеширован и зашифрован для создания подписи сертификата. В стандарте также говорится, что тег SignedAttributes должен быть изменен, как обсуждалось в исходном вопросе.
Вот грамматика Asn.1 для SignerInfo:
SignerInfo ::= SEQUENCE {
version CMSVersion,
sid SignerIdentifier,
digestAlgorithm DigestAlgorithmIdentifier,
signedAttrs [0] IMPLICIT SignedAttributes OPTIONAL,
signatureAlgorithm SignatureAlgorithmIdentifier,
signature SignatureValue,
unsignedAttrs [1] IMPLICIT UnsignedAttributes OPTIONAL }
SignerIdentifier ::= CHOICE {
issuerAndSerialNumber IssuerAndSerialNumber,
subjectKeyIdentifier [0] SubjectKeyIdentifier }
SignedAttributes ::= SET SIZE (1..MAX) OF Attribute
UnsignedAttributes ::= SET SIZE (1..MAX) OF Attribute
Attribute ::= SEQUENCE {
attrType OBJECT IDENTIFIER,
attrValues SET OF AttributeValue }
AttributeValue ::= ANY
SignatureValue ::= OCTET STRING