123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- #
- # 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.type import univ
- from pyasn1.codec.der.decoder import decode as der_decoder
- from pyasn1.codec.der.encoder import encode as der_encoder
- from pyasn1_modules import pem
- from pyasn1_modules import rfc3058
- from pyasn1_modules import rfc5280
- from pyasn1_modules import rfc5652
- from pyasn1_modules import rfc5751
- class EnvelopedDataTestCase(unittest.TestCase):
- env_data_pem_text = """\
- MIIFgwYJKoZIhvcNAQcDoIIFdDCCBXACAQIxXaJbAgEEMCMEEDiCUYXKXu8SzLos
- n2xeYP4YDzIwMTkwOTEyMTIwMDAwWjAPBgsrBgEEAYE8BwEBBgUABCB0G/YBGH3L
- 3RhoG0mK33M8IvRYAOsnHB5MfUAOGF6kuDCCBQoGCSqGSIb3DQEHATAZBgsrBgEE
- AYE8BwEBAjAKBAhCT0dVU19JVoCCBOBzx7F6GMkP+C0Q4iuDq0rkSZprg8nuXx/4
- S3IMP999BrJdUAbPYxdQhAwTOZIuueyv00TJe/Eam9yyLuZXy0PFlTRi7KED8L8c
- yHsRoEobWGMLvE3D4hEhTGttElqQxBvMxZZgm6kLnNG7j8Z72L4lU4aARLYTQvkt
- lJnnfCaccDSiWzU8eXcXdnZAzcKR7CoDc0/XBpdDRddvQ7KXoarXYHuSybt649YD
- cpy0SN9gEPqcFPrBB3nusAx4VOTlpx5Z3ZJv/TEymN8KDobNfykBZURTwupO9WaV
- JZ3Hd/d8C1SCJn6DHuM1jwDp26WfzO8xCfea08MJrnQbNKsDHwmt4dFZIOvcOnwR
- 8nNSB/Lt1aUj3GzluHVMyQQyT4AdZDmwFdNmQOBUBLmbWYhtd7t3O7Eqx8bGNa7V
- 7LL0nvua04aj1oA6ph/G/8jxhByBYdN5Bwg7f1Ga3ZCwju2tFoQnWOCPYTVOjmBE
- JshBbNC7KhLpp9+C7/13A9cIC3T7Reuc7m+Fopf9Fabu97yFiyJPS8jSF0EnesNG
- R1L1Uvo2Wdc66iECoSrxvezaSgGKB2uLTnaFx4ASVMcP7gDipEOIwuUUuVCqgmWk
- HAK0Q9mwhBLLrYrsn9OjDHFpvkWgWNRMLl/v3E9A+grFh2BQHkB4C7keB1ZOfj1S
- qDi/+ylM9I1FOYMxVXJn2qHMl+QOkfdMoIATm3n3DiBI97/uX4x5KaX074v0dN31
- WeDcsFsh2ze5Dhx8vLJCaXLzWqkmNHX5G/CjjqE6bSR/awgWLRZQuY/9fMvDpvVJ
- uId/+OoWDtMVPIsyQ8w8yZzv+SkuZhsrJMHiKd5qxNQv5sOvC765LMUCNNwj7WzP
- hajintFXLAEMpIjk5xt3eIy3hdYla3PQoFfqcHOVX4EFMLBoYwBTgik8Fg669yXt
- MlbH84MGNs7jObhP/rrDkgbe0qmxUyzgm2uHya1VcItMGYoPPKMFU3ZfwAsZdqsi
- 1GAtruTzSUmOpMfAoKOIAyZP96HrsrPCaoGrn7ysm5eRrHQ2hdwO7rGQIw0dRAFh
- 2eyRomoLam7yEiw9M6uHuJ5hIS5yEW+7uUjQT6nvKlbrkIyLL5j9Gbk5Z4fOMqRT
- kBs+3H8x7a+lBEKBo/ByJm6fHYi+LX5ZhQFTWkY0M7tfPtrxQdsNRGSHtv7jS7PZ
- 3thCMqCtkG/pjAsCbDUtMThtP08z2fstE6dfy7qSx6LzKLDyBl5W76mVYdsX7Q72
- yIoCDFmUGdrRcWA+l3OMwNNL+x9MhhdaUWPtxqaGyZMNGOjkbYHbXZ69oqYqCHkA
- stIVKTzpk3kq9C9x+ynzWO8kIGYNK2uxSBIzPLQ6Daq4c53rWFFNWVjPC8m98zMc
- Yp0hbBhRsdk4qj8osSTcTfpT0+Q+hkYQvZl4IfgX1aHeaCDSScF8SaU+cZ7GYFvL
- o1cYrtVbeXrFwmWl0xpco1Ux+XZgryT/fgfJ+3ToppgsQmzECqTWmYsSYaF1kLU4
- Cqi9UH/VqBLOkwxoH05Zao2xOMNzu2QO3wFnvY2wBsIj1eaxfzVb42o9vom7V20j
- T1ufXXctf9ls5J1WJxBxdKmXQWdNloeAcl1AtxTbw7vIUU5uWqu9wwqly11MDVPA
- b0tcQW20auWmCNkXd52jQJ7PXR6kr5I=
- """
- 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'], asn1Spec=rfc5652.EnvelopedData())
- self.assertFalse(rest)
- self.assertTrue(ed.prettyPrint())
- self.assertEqual(asn1Object['content'], der_encoder(ed))
- kwa = ed['recipientInfos'][0]['kekri']['keyEncryptionAlgorithm']
- self.assertEqual(rfc3058.id_alg_CMSIDEAwrap, kwa['algorithm'])
- self.assertEqual(kwa['parameters'], der_encoder(univ.Null("")))
- cea = ed['encryptedContentInfo']['contentEncryptionAlgorithm']
- self.assertEqual(rfc3058.id_IDEA_CBC, cea['algorithm'])
- param, rest = der_decoder(
- cea['parameters'], asn1Spec=rfc3058.IDEA_CBCPar())
- self.assertFalse(rest)
- self.assertTrue(param.prettyPrint())
- self.assertEqual(cea['parameters'], der_encoder(param))
- iv = univ.OctetString(hexValue='424f4755535f4956')
- self.assertEqual(iv, param['iv'])
- 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))
- kekri = asn1Object['content']['recipientInfos'][0]['kekri']
- kwa = kekri['keyEncryptionAlgorithm']
- self.assertEqual(rfc3058.id_alg_CMSIDEAwrap, kwa['algorithm'])
- self.assertEqual(univ.Null(""), kwa['parameters'])
- eci = asn1Object['content']['encryptedContentInfo']
- cea = eci['contentEncryptionAlgorithm']
- self.assertEqual(rfc3058.id_IDEA_CBC, cea['algorithm'])
- iv = univ.OctetString(hexValue='424f4755535f4956')
- self.assertEqual(iv, cea['parameters']['iv'])
- class SMIMECapabilitiesTestCase(unittest.TestCase):
- smime_capabilities_pem_text = "MB4wDQYLKwYBBAGBPAcBAQIwDQYLKwYBBAGBPAcBAQY="
- 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.assertFalse(cap['parameters'].hasValue())
- alg_oid_list.append(cap['capabilityID'])
- self.assertIn(rfc3058.id_IDEA_CBC, alg_oid_list)
- self.assertIn(rfc3058.id_alg_CMSIDEAwrap, 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())
|