Я пишу спецификацию в ASN.1. Каков формально правильный синтаксис для ограничения диапазона значений атрибута с типом OBJECT IDENTIFIER
конкретным OID ar c? Например, я хотел бы добиться чего-то вроде
foo OBJECT IDENTIFIER ( BELOW SUBTREE { 2 1 1 } )
. Ключевое слово BELOW SUBTREE
было создано мной для примера, чтобы прояснить, что я ищу.
Разработанный пример
Похоже, мой вопрос выше не достаточно ясен, поскольку некоторые ответы предлагают решения, которые не решают проблему. Я немного подробнее расскажу о том, что я делаю и чего хочу достичь. Я пишу политику сертификатов X.509 и должен указать профиль X.509 в главе 7. Это означает, что я должен обосновать некоторые варианты или степень свободы, которые существуют в общем синтаксисе для области моего приложения. В частности, я не могу и не должен изменять какие-либо типы атрибутов, потому что это сделает результат несовместимым с сертификатом X.509, т.е. я могу специализировать только некоторые типы, если специализация остается совместимой с обобщением.
Object идентификаторы используются повсеместно в X.509.
В качестве осязаемого примера возьмем атрибут policyIdentifier
, тип которого является псевдонимом OBJECT IDENTIFIER
в объекте типа PolicyInformation
в сертификате extention CertificatePolicies
.
CertificatePolicies ::= SEQUENCE SIZE (1) OF PolicyInformation
PolicyInformation ::= SEQUENCE {
policyIdentifier CertPolicyId,
}
CertPolicyId ::= OBJECT IDENTIFIER
(я уже сократил синтаксис ASN.1 для нужд своего приложения.)
Предположим, я определил следующие константы
id-cp-my-policies OBJECT IDENTIFIER -- some OID arc in the private enterprise arc under my control
id-cp-my-policy-v10 OBJECT IDENTIFIER ::= { id-cp-my-policies 1 0 }
id-cp-my-policy-v11 OBJECT IDENTIFIER ::= { id-cp-my-policies 1 1 }
id-cp-my-policy-v12 OBJECT IDENTIFIER ::= { id-cp-my-policies 1 2 }
id-cp-my-policy-v20 OBJECT IDENTIFIER ::= { id-cp-my-policies 2 0 }
id-cp-my-policy-v30 OBJECT IDENTIFIER ::= { id-cp-my-policies 3 0 }
id-cp-my-policy-v31 OBJECT IDENTIFIER ::= { id-cp-my-policies 3 1 }
Я хочу express, чтобы CertPolicyId
- это специализация OBJECT IDENTIFIER
, которая может принимать значения только из приведенного выше списка. Конечно, я мог бы явно перечислить все идентификаторы политики по «OR» -синтаксису, то есть я мог бы написать
CertPolicyId ::= OBJECT IDENTIFIER ( id-cp-my-policy-v10 | id-cp-my-policy-v11 | id-cp-my-policy-v12 | id-cp-my-policy-v20 | id-cp-my-policy-v30 | id-cp-my-policy-v31 )
Однако это не кажется очень перспективным. Вместо этого я хотел бы написать что-то вроде
CertPolicyId ::= OBJECT IDENTIFIER ( BELOW SUBTREE id-cp-my-policies )
Надеюсь, этот пример поможет понять, что я хочу сделать.