Я пишу спецификацию в ASN.1. Каков формально правильный синтаксис для ограничения диапазона значений атрибута с типом OBJECT IDENTIFIER
определенной дугой OID? Например. Я хотел бы добиться чего-то вроде
foo OBJECT IDENTIFIER ( BELOW SUBTREE { 2 1 1 } )
Ключевое слово BELOW SUBTREE
было придумано мной для примера, чтобы было понятно, что я ищу.
Проработанный пример
По-видимому, мой вопрос выше недостаточно ясен, поскольку некоторые ответы предлагают решения, которые не решают проблему. Я немного подробнее расскажу о том, что я делаю и чего хочу достичь. Я пишу политику сертификатов X.509 и должен указать профиль X.509 в главе 7. Это означает, что я должен обосновать некоторые варианты или степени свободы, которые существуют в общем синтаксисе для области применения моего приложения. В частности, я не могу и не должен изменять какие-либо типы атрибутов, потому что это сделало бы результат несовместимым с сертификатом X.509, т. е. я могу специализировать только некоторые типы, пока специализация остается совместимой с обобщением.
Идентификаторы объектов повсеместно используются в X.509.
В качестве наглядного примера возьмем атрибут policyIdentifier
, тип которого является псевдонимом OBJECT IDENTIFIER
в объекте типа PolicyInformation
в расширении сертификата 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 }
Я хочу подчеркнуть, что CertPolicyId
является специализацией OBJECT IDENTIFIER
, которая может принимать значения только из списка выше. Конечно, я мог бы явно перечислить все идентификаторы политик с помощью синтаксиса "ИЛИ", т.е. я мог бы написать
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 )
Я надеюсь, что этот пример поможет понять, что я хочу сделать.