1# 2# This file is part of pyasn1-modules software. 3# 4# Copyright (c) 2005-2019, Ilya Etingof <[email protected]> 5# License: http://snmplabs.com/pyasn1/license.html 6# 7import sys 8 9from pyasn1.codec.der.decoder import decode as der_decode 10from pyasn1.codec.der.encoder import encode as der_encode 11 12from pyasn1.type import char 13from pyasn1.type import univ 14 15from pyasn1_modules import pem 16from pyasn1_modules import rfc2986 17from pyasn1_modules import rfc5280 18 19 20try: 21 import unittest2 as unittest 22 23except ImportError: 24 import unittest 25 26 27class CertificationRequestTestCase(unittest.TestCase): 28 pem_text = """\ 29MIICxjCCAa4CAQAwgYAxCzAJBgNVBAYTAlVTMR0wGwYDVQQDDBRmY3UuZmFrZS5h 30ZGRyZXNzLm9yZzEXMBUGA1UEBwwOUGxlYXNhbnQgR3JvdmUxHDAaBgNVBAoME0Zh 31a2UgQ29tcGFueSBVbml0ZWQxDTALBgNVBAgMBFV0YWgxDDAKBgNVBAsMA0VuZzCC 32ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALvnYesymhLKSm9Llix53BUA 33h99xMDBUYk0OB1VIdNQyjmFabHinM+lYUzVzrfcm1xtYB5QYKbsYuwZ4r5WI7qho 34CRJy6JwXqKpOe72ScCogxlGDr2QtKjtvyWrRwXBHX1/OqVSZ3hdz3njhKpmq6HgK 3587vH26RCSmK8FqCgn+qePfpspA7GzBvYwXhXluQtG7r4yBMKNRTQlPst8Vcy+iK+ 36pI8hmQVrzGi8Hgbpr2L9EjPUOlAQEb8hxeKc7s5VhjN/RHMLVMX8YczZYt7mcDKr 373PMwOVmXL1DMCtnS50MA2AxcPWcbQBeGyMroP+DLhAt6y1/IT0H5sQruNQw4euMC 38AwEAAaAAMA0GCSqGSIb3DQEBCwUAA4IBAQBQXYQPfH5Wy4o0ZFbKQOO1e3dHV8rl 39e8m9Z6qLgJO8rtW+OI+4FavJ6zjUvNVzd9JJxgwQ/1xprwrXh36nPcSyNLpGs7JT 406u7TGQ38QQAOmziLXzauMWGBeLuzWGmOKA1cs5HFGLSmbxF3+0IWpz4GlD86pU1+ 41WYyWgWHHAMA+kFYwBUR6CvPkmhshnZ8vrQavoOlcidCJ8o6IGA7N/Z0/NrgIDcoz 42YaruhoMrmRKHKNpfamhT0gvqEPBec+UB3uLElESIqaeqYc6eMtUQP3lqyghF6I0M 43fi6h7i9VVAZpslaKFfkNg12gLbbsCB1q36l5VXjHY/qe0FIUa9ogRrOi 44""" 45 46 def setUp(self): 47 self.asn1Spec = rfc2986.CertificationRequest() 48 49 def testDerCodec(self): 50 51 substrate = pem.readBase64fromText(self.pem_text) 52 53 asn1Object, rest = der_decode(substrate, asn1Spec=self.asn1Spec) 54 55 assert not rest 56 assert asn1Object.prettyPrint() 57 assert der_encode(asn1Object) == substrate 58 59 def testOpenTypes(self): 60 openTypesMap = { 61 univ.ObjectIdentifier('1.2.840.113549.1.1.1'): univ.Null(""), 62 univ.ObjectIdentifier('1.2.840.113549.1.1.5'): univ.Null(""), 63 univ.ObjectIdentifier('1.2.840.113549.1.1.11'): univ.Null(""), 64 } 65 66 substrate = pem.readBase64fromText(self.pem_text) 67 asn1Object, rest = der_decode(substrate, 68 asn1Spec=rfc2986.CertificationRequest(), 69 openTypes=openTypesMap, 70 decodeOpenTypes=True) 71 assert not rest 72 assert asn1Object.prettyPrint() 73 74 assert der_encode(asn1Object) == substrate 75 76 for rdn in asn1Object['certificationRequestInfo']['subject']['rdnSequence']: 77 for atv in rdn: 78 if atv['type'] == rfc5280.id_at_countryName: 79 assert atv['value'] == char.PrintableString('US') 80 else: 81 assert len(atv['value']['utf8String']) > 2 82 83 spki_alg = asn1Object['certificationRequestInfo']['subjectPKInfo']['algorithm'] 84 assert spki_alg['parameters'] == univ.Null("") 85 86 sig_alg = asn1Object['signatureAlgorithm'] 87 assert sig_alg['parameters'] == univ.Null("") 88 89 90suite = unittest.TestLoader().loadTestsFromModule(sys.modules[__name__]) 91 92if __name__ == '__main__': 93 import sys 94 95 result = unittest.TextTestRunner(verbosity=2).run(suite) 96 sys.exit(not result.wasSuccessful()) 97