123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- #
- # This file is part of pyasn1-modules software.
- #
- # 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_modules import pem
- from pyasn1_modules import rfc4055
- from pyasn1_modules import rfc5652
- from pyasn1_modules import rfc5126
- class SignedAttributesTestCase(unittest.TestCase):
- pem_text = """\
- MYIBUzAYBgkqhkiG9w0BCQMxCwYJKoZIhvcNAQcBMCsGCSqGSIb3DQEJNDEeMBww
- DQYJYIZIAWUDBAIBBQChCwYJKoZIhvcNAQELMC8GCSqGSIb3DQEJBDEiBCCyqtCC
- Gosj/GT4YPPAqKheze4A1QBU5O3tniTsVPGr7jBBBgsqhkiG9w0BCRACETEyMDCg
- BBMCVVOhBBMCVkGiIjAgExExMjMgU29tZXBsYWNlIFdheRMLSGVybmRvbiwgVkEw
- RgYLKoZIhvcNAQkQAi8xNzA1MDMwMTANBglghkgBZQMEAgEFAAQgJPmqUmGQnQ4q
- RkVtUHecJXIkozOzX8+pZQj/UD5JcnQwTgYLKoZIhvcNAQkQAg8xPzA9BgorBgEE
- AYGsYDAUMC8wCwYJYIZIAWUDBAIBBCDWjjVmAeXgZBkE/rG8Pf8pTCs4Ikowc8Vm
- l+AOeKdFgg==
- """
- def setUp(self):
- self.asn1Spec = rfc5652.SignedAttributes()
- def testDerCodec(self):
- substrate = pem.readBase64fromText(self.pem_text)
- asn1Object, rest = der_decoder(substrate, asn1Spec=self.asn1Spec)
- self.assertFalse(rest)
- self.assertTrue(asn1Object.prettyPrint())
- self.assertEqual(substrate, der_encoder(asn1Object))
- found_spid_oid = False
- for attr in asn1Object:
- if attr['attrType'] in rfc5652.cmsAttributesMap.keys():
- av, rest = der_decoder(
- attr['attrValues'][0],
- asn1Spec=rfc5652.cmsAttributesMap[attr['attrType']])
- self.assertFalse(rest)
- self.assertTrue(av.prettyPrint())
- self.assertEqual(attr['attrValues'][0], der_encoder(av))
- if attr['attrType'] == rfc5126.id_aa_ets_sigPolicyId:
- spid_oid = rfc5126.SigPolicyId('1.3.6.1.4.1.22112.48.20')
- self.assertEqual(
- spid_oid, av['signaturePolicyId']['sigPolicyId'])
- found_spid_oid = True
- self.assertTrue(found_spid_oid)
- def testOpenTypes(self):
- substrate = pem.readBase64fromText(self.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))
- attr_type_list = []
- spid_oid = rfc5126.SigPolicyId('1.3.6.1.4.1.22112.48.20')
- for attr in asn1Object:
- if attr['attrType'] == rfc5126.id_aa_ets_sigPolicyId:
- spid = attr['attrValues'][0]['signaturePolicyId']
- self.assertEqual(spid_oid, spid['sigPolicyId'])
- attr_type_list.append(rfc5126.id_aa_ets_sigPolicyId)
- if attr['attrType'] == rfc5126.id_aa_ets_signerLocation:
- cn = attr['attrValues'][0]['countryName']
- self.assertEqual('US', cn['printableString'])
- attr_type_list.append(rfc5126.id_aa_ets_signerLocation)
- if attr['attrType'] == rfc5126.id_aa_signingCertificateV2:
- ha = attr['attrValues'][0]['certs'][0]['hashAlgorithm']
- self.assertEqual(rfc4055.id_sha256, ha['algorithm'])
- attr_type_list.append(rfc5126.id_aa_signingCertificateV2)
- self.assertIn(rfc5126.id_aa_ets_sigPolicyId, attr_type_list)
- self.assertIn(rfc5126.id_aa_ets_signerLocation, attr_type_list)
- self.assertIn(rfc5126.id_aa_signingCertificateV2, attr_type_list)
- suite = unittest.TestLoader().loadTestsFromModule(sys.modules[__name__])
- if __name__ == '__main__':
- import sys
- result = unittest.TextTestRunner(verbosity=2).run(suite)
- sys.exit(not result.wasSuccessful())
|