123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- #
- # This file is part of pyasn1-modules software.
- #
- # Created by Russ Housley
- # Copyright (c) 2019, Vigil Security, LLC
- # License: http://snmplabs.com/pyasn1/license.html
- #
- import sys
- import unittest
- from pyasn1.codec.der.decoder import decode as der_decoder
- from pyasn1.codec.der.encoder import encode as der_encoder
- from pyasn1.type import univ
- from pyasn1_modules import pem
- from pyasn1_modules import rfc4010
- from pyasn1_modules import rfc5280
- from pyasn1_modules import rfc5652
- from pyasn1_modules import rfc5751
- class EnvelopedDataTestCase(unittest.TestCase):
- env_data_pem_text = """\
- MIIFewYJKoZIhvcNAQcDoIIFbDCCBWgCAQIxUqJQAgEEMCMEEKBBI2KxDUPS5TCo
- RCEDJo4YDzIwMTkwOTEyMTIwMDAwWjAMBgoqgxqMmkQHAQEBBBipFE2DxCLAx2Og
- E53Jt21V8kAoscU7K3wwggUNBgkqhkiG9w0BBwEwHAYIKoMajJpEAQQEEEJPR1VT
- SVZfQk9HVVNJViGAggTgc8exehjJD/gtEOIrg6tK5Emaa4PJ7l8f+EtyDD/ffQay
- XVAGz2MXUIQMEzmSLrnsr9NEyXvxGpvcsi7mV8tDxZU0YuyhA/C/HMh7EaBKG1hj
- C7xNw+IRIUxrbRJakMQbzMWWYJupC5zRu4/Ge9i+JVOGgES2E0L5LZSZ53wmnHA0
- ols1PHl3F3Z2QM3CkewqA3NP1waXQ0XXb0Oyl6Gq12B7ksm7euPWA3KctEjfYBD6
- nBT6wQd57rAMeFTk5aceWd2Sb/0xMpjfCg6GzX8pAWVEU8LqTvVmlSWdx3f3fAtU
- giZ+gx7jNY8A6duln8zvMQn3mtPDCa50GzSrAx8JreHRWSDr3Dp8EfJzUgfy7dWl
- I9xs5bh1TMkEMk+AHWQ5sBXTZkDgVAS5m1mIbXe7dzuxKsfGxjWu1eyy9J77mtOG
- o9aAOqYfxv/I8YQcgWHTeQcIO39Rmt2QsI7trRaEJ1jgj2E1To5gRCbIQWzQuyoS
- 6affgu/9dwPXCAt0+0XrnO5vhaKX/RWm7ve8hYsiT0vI0hdBJ3rDRkdS9VL6NlnX
- OuohAqEq8b3s2koBigdri052hceAElTHD+4A4qRDiMLlFLlQqoJlpBwCtEPZsIQS
- y62K7J/Towxxab5FoFjUTC5f79xPQPoKxYdgUB5AeAu5HgdWTn49Uqg4v/spTPSN
- RTmDMVVyZ9qhzJfkDpH3TKCAE5t59w4gSPe/7l+MeSml9O+L9HTd9Vng3LBbIds3
- uQ4cfLyyQmly81qpJjR1+Rvwo46hOm0kf2sIFi0WULmP/XzLw6b1SbiHf/jqFg7T
- FTyLMkPMPMmc7/kpLmYbKyTB4ineasTUL+bDrwu+uSzFAjTcI+1sz4Wo4p7RVywB
- DKSI5Ocbd3iMt4XWJWtz0KBX6nBzlV+BBTCwaGMAU4IpPBYOuvcl7TJWx/ODBjbO
- 4zm4T/66w5IG3tKpsVMs4Jtrh8mtVXCLTBmKDzyjBVN2X8ALGXarItRgLa7k80lJ
- jqTHwKCjiAMmT/eh67KzwmqBq5+8rJuXkax0NoXcDu6xkCMNHUQBYdnskaJqC2pu
- 8hIsPTOrh7ieYSEuchFvu7lI0E+p7ypW65CMiy+Y/Rm5OWeHzjKkU5AbPtx/Me2v
- pQRCgaPwciZunx2Ivi1+WYUBU1pGNDO7Xz7a8UHbDURkh7b+40uz2d7YQjKgrZBv
- 6YwLAmw1LTE4bT9PM9n7LROnX8u6ksei8yiw8gZeVu+plWHbF+0O9siKAgxZlBna
- 0XFgPpdzjMDTS/sfTIYXWlFj7camhsmTDRjo5G2B212evaKmKgh5ALLSFSk86ZN5
- KvQvcfsp81jvJCBmDStrsUgSMzy0Og2quHOd61hRTVlYzwvJvfMzHGKdIWwYUbHZ
- OKo/KLEk3E36U9PkPoZGEL2ZeCH4F9Wh3mgg0knBfEmlPnGexmBby6NXGK7VW3l6
- xcJlpdMaXKNVMfl2YK8k/34Hyft06KaYLEJsxAqk1pmLEmGhdZC1OAqovVB/1agS
- zpMMaB9OWWqNsTjDc7tkDt8BZ72NsAbCI9XmsX81W+NqPb6Ju1dtI09bn113LX/Z
- bOSdVicQcXSpl0FnTZaHgHJdQLcU28O7yFFOblqrvcMKpctdTA1TwG9LXEFttGrl
- pgjZF3edo0Cez10epK+S
- """
- def setUp(self):
- self.asn1Spec = rfc5652.ContentInfo()
- def testDerCodec(self):
- substrate = pem.readBase64fromText(self.env_data_pem_text)
- asn1Object, rest = der_decoder(substrate, asn1Spec=self.asn1Spec)
- self.assertFalse(rest)
- self.assertTrue(asn1Object.prettyPrint())
- self.assertEqual(substrate, der_encoder(asn1Object))
- self.assertEqual(rfc5652.id_envelopedData, asn1Object['contentType'])
- ed, rest = der_decoder(asn1Object['content'], rfc5652.EnvelopedData())
- self.assertFalse(rest)
- self.assertTrue(ed.prettyPrint())
- self.assertEqual(asn1Object['content'], der_encoder(ed))
- kwa = ed['recipientInfos'][0]['kekri']['keyEncryptionAlgorithm']
- self.assertEqual(rfc4010.id_npki_app_cmsSeed_wrap, kwa['algorithm'])
- cea = ed['encryptedContentInfo']['contentEncryptionAlgorithm']
- self.assertEqual(rfc4010.id_seedCBC, cea['algorithm'])
- param, rest = der_decoder(
- cea['parameters'], asn1Spec=rfc4010.SeedCBCParameter())
- self.assertFalse(rest)
- self.assertTrue(param.prettyPrint())
- self.assertEqual(cea['parameters'], der_encoder(param))
- iv = univ.OctetString(hexValue='424f47555349565f424f475553495621')
- self.assertEqual(iv, param)
- def testOpenTypes(self):
- substrate = pem.readBase64fromText(self.env_data_pem_text)
- asn1Object, rest = der_decoder(
- substrate, asn1Spec=self.asn1Spec, decodeOpenTypes=True)
- self.assertFalse(rest)
- self.assertTrue(asn1Object.prettyPrint())
- self.assertEqual(substrate, der_encoder(asn1Object))
- self.assertTrue(asn1Object['contentType'] in rfc5652.cmsContentTypesMap.keys())
- kekri = asn1Object['content']['recipientInfos'][0]['kekri']
- kwa = kekri['keyEncryptionAlgorithm']
- self.assertEqual(rfc4010.id_npki_app_cmsSeed_wrap, kwa['algorithm'])
- eci = asn1Object['content']['encryptedContentInfo']
- cea = eci['contentEncryptionAlgorithm']
- self.assertEqual(rfc4010.id_seedCBC, cea['algorithm'])
- iv = univ.OctetString(hexValue='424f47555349565f424f475553495621')
- self.assertEqual(iv, cea['parameters'])
- class SMIMECapabilitiesTestCase(unittest.TestCase):
- smime_capabilities_pem_text = "MB4wDAYIKoMajJpEAQQFADAOBgoqgxqMmkQHAQEBBQA="
- def setUp(self):
- self.asn1Spec = rfc5751.SMIMECapabilities()
- def testDerCodec(self):
- substrate = pem.readBase64fromText(self.smime_capabilities_pem_text)
- asn1Object, rest = der_decoder(substrate, asn1Spec=self.asn1Spec)
- self.assertFalse(rest)
- self.assertTrue(asn1Object.prettyPrint())
- self.assertEqual(substrate, der_encoder(asn1Object))
- alg_oid_list = [ ]
- for cap in asn1Object:
- self.assertTrue(cap['parameters'].hasValue())
- self.assertEqual(cap['parameters'], der_encoder(rfc4010.SeedSMimeCapability("")))
- alg_oid_list.append(cap['capabilityID'])
- self.assertIn(rfc4010.id_seedCBC, alg_oid_list)
- self.assertIn(rfc4010.id_npki_app_cmsSeed_wrap, alg_oid_list)
- suite = unittest.TestLoader().loadTestsFromModule(sys.modules[__name__])
- if __name__ == '__main__':
- result = unittest.TextTestRunner(verbosity=2).run(suite)
- sys.exit(not result.wasSuccessful())
|