Имам сертификат 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