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 rfc3274 16from pyasn1_modules import rfc5652 17 18try: 19 import unittest2 as unittest 20except ImportError: 21 import unittest 22 23 24class CompressedDataTestCase(unittest.TestCase): 25 compressed_data_pem_text = """\ 26MIIB7wYLKoZIhvcNAQkQAQmgggHeMIIB2gIBADANBgsqhkiG9w0BCRADCDCCAcQG 27CSqGSIb3DQEHAaCCAbUEggGxeJxVksGO1DAQRO/+ir4xK4VlNSAhcUPRrgRiLgw/ 280Il7Egu7bdntMOHraSezMJyixOWq19XpIwuxvP2xJvoEQld5lzw6Nub7Sw/vjx8/ 29dJDq4F2ZyYJj+FqZ4Pj0dOzA0sUxFUC4xBxQ2gNqcTzBGEPKVApZY1EQsKn6vCaJ 30U8Y0uxFOeowTwXllwSsc+tP5Qe9tOCCK8wjQ32zUcvcZSDMIJCOX4PQgMqQcF2c3 31Dq5hoAzxAmgXVN+JSqfUo6+2YclMhrwLjlHaVRVutplsZYs8rvBL2WblqN7CTD4B 32MqAIjj8pd1ASUXMyNbXccWeDYd0sxlsGYIhVp3i1l6jgr3qtUeUehbIpQqnAoVSN 331IqKm7hZaI3EY2tLIR86RbD//ONCGb2HsPdnivvdqvrsZY51mlu+NjTjQhpKWz0p 34FvRlWw9ae7+fVgKKie0SeFpIZYemoyuG5HUS2QY6fTk9N6zz+dsuUyr9Xghs5Ddi 351LbZbVoNHDyFNv19jL7qiv9uuLK/XTD3Kqct1JS822vS8vWXpMzYBtal/083rMap 36XQ7u2qbaKFtZ7V96NH8ApkUFkg== 37""" 38 39 def setUp(self): 40 self.asn1Spec = rfc5652.ContentInfo() 41 42 def testDerCodec(self): 43 substrate = pem.readBase64fromText(self.compressed_data_pem_text) 44 asn1Object, rest = der_decode(substrate, asn1Spec=self.asn1Spec) 45 assert not rest 46 assert asn1Object.prettyPrint() 47 assert der_encode(asn1Object) == substrate 48 49 assert asn1Object['contentType'] == rfc3274.id_ct_compressedData 50 cd, rest = der_decode(asn1Object['content'], asn1Spec=rfc3274.CompressedData()) 51 assert not rest 52 assert cd.prettyPrint() 53 assert der_encode(cd) == asn1Object['content'] 54 55 assert cd['compressionAlgorithm']['algorithm'] == rfc3274.id_alg_zlibCompress 56 assert cd['encapContentInfo']['eContentType'] == rfc5652.id_data 57 58 def testOpenTypes(self): 59 substrate = pem.readBase64fromText(self.compressed_data_pem_text) 60 asn1Object, rest = der_decode(substrate, 61 asn1Spec=self.asn1Spec, 62 decodeOpenTypes=True) 63 assert not rest 64 assert asn1Object.prettyPrint() 65 assert der_encode(asn1Object) == substrate 66 67 assert asn1Object['contentType'] == rfc3274.id_ct_compressedData 68 cd = asn1Object['content'] 69 assert cd['compressionAlgorithm']['algorithm'] == rfc3274.id_alg_zlibCompress 70 assert cd['encapContentInfo']['eContentType'] == rfc5652.id_data 71 72 73suite = unittest.TestLoader().loadTestsFromModule(sys.modules[__name__]) 74 75if __name__ == '__main__': 76 import sys 77 78 result = unittest.TextTestRunner(verbosity=2).run(suite) 79 sys.exit(not result.wasSuccessful()) 80