Из https://tools.ietf.org/html/rfc5280:
SubjectAltName ::= GeneralNames
GeneralNames ::= SEQUENCE SIZE (1..MAX) OF GeneralName
GeneralName ::= CHOICE {
otherName [0] AnotherName,
rfc822Name [1] IA5String,
dNSName [2] IA5String,
x400Address [3] ORAddress,
directoryName [4] Name,
ediPartyName [5] EDIPartyName,
uniformResourceIdentifier [6] IA5String,
iPAddress [7] OCTET STRING,
registeredID [8] OBJECT IDENTIFIER }
В дикой природе я встречал сертификаты x509, в которых используется это расширение.
rfc822Name
и dNSName
записи помечены 0x81
и 0x82
(контекстно-зависимый набор битов плюс тип)
но directoryName
помечен 0xA4
(зависящий от контекста набор бит плюс сконструированный бит плюс тип = EXPLICIT), где Имя определяется как ...
Name ::= CHOICE { -- only one possibility for now --
rdnSequence RDNSequence }
RDNSequence ::= SEQUENCE OF RelativeDistinguishedName
DistinguishedName ::= RDNSequence
RelativeDistinguishedName ::= SET SIZE (1..MAX) OF AttributeTypeAndValue
Итак, мой вопрос: если я реализую эту структуру ASN1, как мне узнать, какой из этих элементов является ЯВНЫМ, а какие - ПОДРАЗУМЕВАЕМЫМ?
Насколько я понимаю, EXPLICIT используется по умолчанию, а спецификация в RFC ничего не указывает.