[英]Subtype constraint for the OBJECT IDENTIFIER type: How to constrain an OID to some arc?
我正在 ASN.1 中編寫規范。 將類型為OBJECT IDENTIFIER
的屬性的值范圍限制為特定 OID 弧的形式上正確的語法是什么? 例如,我想實現類似的目標
foo OBJECT IDENTIFIER ( BELOW SUBTREE { 2 1 1 } )
關鍵字BELOW SUBTREE
是我BELOW SUBTREE
,只是為了舉例說明我在找什么。
詳細示例
表面上,我上面的問題不夠清楚,因為有些答案提出了沒有解決問題的解決方案。 我將詳細說明我正在做什么以及我想要實現什么。 我正在編寫 X.509 證書策略,並且必須在第 7 章中指定 X.509 配置文件。這意味着我必須證實存在於我的應用程序范圍的通用語法中的一些選擇或自由度。 特別是,我不能也不能更改任何屬性類型,因為這會使結果與 X.509 證書不兼容,即,只要專業化與泛化保持兼容,我只能專業化某些類型。
對象標識符在 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 }
我想表示CertPolicyId
是OBJECT IDENTIFIER
,它只能從上面的列表中獲取值。 當然,我可以通過“OR”-sytax顯式枚舉所有策略ID,即我可以寫
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 )
我希望這個例子有助於理解我想要做什么。
沒有正式的方法可以將 OBJECT IDENTIFIER 類型限制在某個范圍內。
您可以使用 RELATIVE-OID 類型
您可以使根 oid 隱式(假設 foo 是 SEQUENCE 的一個組件)
{
foo RELATIVE-OID -- relative to root { 2 1 1 }
}
或明確的
{
foo SEQUENCE {
root OBJECT IDENTIFIER DEFAULT { 2 1 1 },
object-id RELATIVE-OID -- relative to root
}
}
您可以使用這種方法:
foo OBJECT IDENTIFIER ::= { 1 2 3 }
foo-bar OBJECT IDENTIFIER ::= { foo 4 }
因此, foo-bar
將導致1.2.3.4
OID 值以點號表示。 這是你想要的?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.