1# 2# This file is part of pyasn1-modules software. 3# 4# Created by Russ Housley 5# Copyright (c) 2019, Vigil Security, LLC 6# License: http://snmplabs.com/pyasn1/license.html 7# 8 9import sys 10 11from pyasn1.codec.der.decoder import decode as der_decode 12from pyasn1.codec.der.encoder import encode as der_encode 13 14from pyasn1_modules import pem 15from pyasn1_modules import rfc5280 16from pyasn1_modules import rfc8209 17 18try: 19 import unittest2 as unittest 20except ImportError: 21 import unittest 22 23class CertificateTestCase(unittest.TestCase): 24 cert_pem_text = """\ 25MIIBiDCCAS+gAwIBAgIEAk3WfDAKBggqhkjOPQQDAjAaMRgwFgYDVQQDDA9ST1VU 26RVItMDAwMEZCRjAwHhcNMTcwMTAxMDUwMDAwWhcNMTgwNzAxMDUwMDAwWjAaMRgw 27FgYDVQQDDA9ST1VURVItMDAwMEZCRjAwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNC 28AARzkbq7kqDLO+EOWbGev/shTgSpHgy6GxOafTjZD3flWqBbjmlWeOD6FpBLVdnU 299cDfxYiV7lC8T3XSBaJb02/1o2MwYTALBgNVHQ8EBAMCB4AwHQYDVR0OBBYEFKtN 30kQ9VyucaIV7zyv46zEW17sFUMBMGA1UdJQQMMAoGCCsGAQUFBwMeMB4GCCsGAQUF 31BwEIAQH/BA8wDaAHMAUCAwD78KECBQAwCgYIKoZIzj0EAwIDRwAwRAIgB7e0al+k 328cxoNjkDpIPsfIAC0vYInUay7Cp75pKzb7ECIACRBUqh9bAYnSck6LQi/dEc8D2x 33OCRdZCk1KI3uDDgp 34""" 35 36 def setUp(self): 37 self.asn1Spec = rfc5280.Certificate() 38 39 def testDerCodec(self): 40 substrate = pem.readBase64fromText(self.cert_pem_text) 41 asn1Object, rest = der_decode(substrate, asn1Spec=self.asn1Spec) 42 assert not rest 43 assert asn1Object.prettyPrint() 44 assert der_encode(asn1Object) == substrate 45 46 extn_list = [ ] 47 for extn in asn1Object['tbsCertificate']['extensions']: 48 extn_list.append(extn['extnID']) 49 if extn['extnID'] in rfc5280.certificateExtensionsMap.keys(): 50 extnValue, rest = der_decode(extn['extnValue'], 51 asn1Spec=rfc5280.certificateExtensionsMap[extn['extnID']]) 52 assert der_encode(extnValue) == extn['extnValue'] 53 54 if extn['extnID'] == rfc5280.id_ce_extKeyUsage: 55 assert rfc8209.id_kp_bgpsec_router in extnValue 56 57 assert rfc5280.id_ce_extKeyUsage in extn_list 58 59 60suite = unittest.TestLoader().loadTestsFromModule(sys.modules[__name__]) 61 62if __name__ == '__main__': 63 unittest.TextTestRunner(verbosity=2).run(suite) 64