पूरी बात का न्यूनतम उदाहरण
1.3.36.8.3.2 = ASN1:SEQUENCE:procuration
[procuration]
country = EXP:1, PRINTABLE:EN
typeOfSubstitution = EXP:2, UTF8:My Type of Substitution
thirdPerson = EXP:3, EXP:0, EXP:1, IA5:fred@example.com
एक टेस्ट केस प्राप्त करने के लिए, मैंने asn1- प्लेग्राउंड का उपयोग करके निम्नलिखित ASN.1 मान संकेतन संकलित किया :
procuration ProcurationSyntax ::= {
country "EN",
typeOfSubstitution utf8String : "My Type of Substitution",
signingFor thirdPerson rfc822Name : "fred@example.com"
}
मैंने इस स्कीमा का उपयोग किया ।
[Proc]
विभिन्न विशिष्ट स्ट्रिंग प्रकारों पर ध्यान दें।
countryPrintableString के रूप में परिभाषित किया गया है (जो IA5String का केवल सबसेट है):
country = EXPLICIT:1, PRINTABLE:EN
typeOfSubstitutionDirectoryString के रूप में परिभाषित किया गया है , जो कि TeletexString, PrintableString, UniversalString, UTF8String, या BMPString के बीच एक CHOICE है - जिनमें से कुछ IA5String के सबसेट हैं, अन्य सुपरसेट हैं, लेकिन वास्तविक IA5String वास्तव में अनुमति नहीं है। तो चलिए यूटीएफ -8 यूनिकोड के साथ चलते हैं:
; ┌── tag for ProcurationSyntax sequence
; ¦
typeOfSubstitution = EXPLICIT:2, UTF8:My Type of Substitution
(ऑनलाइन asn1step का कहना है कि DirectoryString पसंद के लिए कोई अलग टैग नहीं है; मुझे लगता है कि सभी संभावित विकल्पों में अद्वितीय 'सार्वभौमिक' टैग पहले से मौजूद हैं।)
क्योंकि बनाम के signingForबीच एक CHOICE है , आप एक या दूसरे को शामिल कर सकते हैं , और यह उपयुक्त प्रकार का चयन करने के लिए आपके ऊपर है।thirdPersoncertRef
thirdPersonके रूप में परिभाषित किया गया है [0] GeneralName , जो विभिन्न प्रकारों के बीच एक CHOICE है - बिल्कुल वैसा ही चयन जैसा कि विषयअस्तित्व में है। उदाहरण के लिए, आप एक ईमेल पता (rfc822Name [1] IA5String) के रूप में शामिल कर सकते हैं:
; ┌── tag for ProcurationSyntax sequence
; │ ┌── tag for SigningFor choice
; │ │ ┌── tag for GeneralName choice
; ¦ ¦ ¦
thirdPerson = EXP:3, EXP:0, EXP:1, IA5:fred@example.com
या एक dNSName ([2] IA5String के रूप में परिभाषित):
thirdPerson = EXP:3, EXP:0, EXP:2, IA5:example.com
(या एक बिल्ली के बच्चे के एक MPEG वीडियो युक्त एक अन्य नाम।)
यदि, इसके बजाय, आप एक का चयन करना चाहते हैं certRef, तो यह एक पूरे नेस्टेड समुद्र तट है।
; ┌── tag for ProcurationSyntax sequence
; │ ┌── tag for SigningFor choice
; ¦ ¦
certRef = EXP:3, IMP:1, SEQUENCE:proc_certref
[Proc_certref]
[proc_certref]अनुभाग के अंदर , आपको कम से कम issuerऔर परिभाषित करना होगा serial।
issuerहै GeneralNames , जो GeneralName मूल्यों का एक दृश्य है।
issuer = IMP:0, SEQUENCE:proc_certref_issuer
; └── tag for IssuerSerial sequence
serialहै सर्टिफिकेटसनलनंबर केवल एक पूर्णांक है।
serial = IMP:1, INTEGER:0x123456
नोट: मैं इस बारे में बहुत अनिश्चित हूं कि इनमें निहित टैग होने चाहिए या नहीं।
[Proc_certref_issuer]
महान। एक अन्य खंड, और उस पर एक GeneralNames । सौभाग्य से, इसमें से केवल एक ही है। दुर्भाग्य से, इसमें शून्य से अधिक है।
सबसे सरल वैध मूल्य एक एकल GeneralName होगा जो कि केवल rfc822Name या dNSName (दोनों IA5String) है:
issuer.0 = IMP:1, IA5:fred@example.com
; └── tag for GeneralName choice
... वास्तव में, हम पहले ही एक निर्देशिका कर चुके हैं एक बार, हम नहीं थे? क्योंकि यह issuer.0एक GeneralName है, यह admissionAuthorityआपके पिछले एक्सटेंशन (उसी टैगिंग और सब कुछ के साथ) के समान सटीक प्रारूप का उपयोग करता है - इसलिए मैं इसे फिर से यहां लागू करने का प्रयास नहीं करूंगा।