|
| 1 | +# |
| 2 | +# This file is part of pyasn1-alt-modules software. |
| 3 | +# |
| 4 | +# Created by Russ Housley |
| 5 | +# Copyright (c) 2020-2025, Vigil Security, LLC |
| 6 | +# License: http://vigilsec.com/pyasn1-alt-modules-license.txt |
| 7 | +# |
| 8 | +import sys |
| 9 | +import unittest |
| 10 | + |
| 11 | +from pyasn1.codec.der.decoder import decode as der_decoder |
| 12 | +from pyasn1.codec.der.encoder import encode as der_encoder |
| 13 | +from pyasn1.type import univ |
| 14 | + |
| 15 | +from pyasn1_alt_modules import pem |
| 16 | +from pyasn1_alt_modules import rfc5652 |
| 17 | +from pyasn1_alt_modules import rfc9632 |
| 18 | + |
| 19 | + |
| 20 | +class GeofeedCSVTestCase(unittest.TestCase): |
| 21 | + pem_text = """\ |
| 22 | +MIIGlwYJKoZIhvcNAQcCoIIGiDCCBoQCAQMxDTALBglghkgBZQMEAgEwDQYLKoZ |
| 23 | +IhvcNAQkQAS+gggSxMIIErTCCA5WgAwIBAgIUJ605QIPX8rW5m4Zwx3WyuW7hZu |
| 24 | +MwDQYJKoZIhvcNAQELBQAwMzExMC8GA1UEAxMoM0FDRTJDRUY0RkIyMUI3RDExR |
| 25 | +TNFMTg0RUZDMUUyOTdCMzc3ODY0MjAeFw0yMDA5MDMxOTA1MTdaFw0yMTA2MzAx |
| 26 | +OTA1MTdaMDMxMTAvBgNVBAMTKDkxNDY1MkEzQkQ1MUMxNDQyNjAxOTg4ODlGNUM |
| 27 | +0NUFCRjA1M0ExODcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCycT |
| 28 | +QrOb/qB2W3i3Ki8PhA/DEWyii2TgGo9pgCwO9lsIRI6Zb/k+aSiWWP9kSczlcQg |
| 29 | +tPCVwr62hTQZCIowBN0BL0cK0/5k1imJdi5qdM3nvKswM8CnoR11vB8pQFwruZm |
| 30 | +r5xphXRvE+mzuJVLgu2V1upmBXuWloeymudh6WWJ+GDjwPXO3RiXBejBrOFNXha |
| 31 | +FLe08y4DPfr/S/tXJOBm7QzQptmbPLYtGfprYu45liFFqqP94UeLpISfXd36AKG |
| 32 | +zqTFCcc3EW9l5UFE1MFLlnoEogqtoLoKABt0IkOFGKeC/EgeaBdWLe469ddC9rQ |
| 33 | +ft5w6g6cmxG+aYDdIEB34zrAgMBAAGjggG3MIIBszAdBgNVHQ4EFgQUkUZSo71R |
| 34 | +wUQmAZiIn1xFq/BToYcwHwYDVR0jBBgwFoAUOs4s70+yG30R4+GE78Hil7N3hkI |
| 35 | +wDAYDVR0TAQH/BAIwADAOBgNVHQ8BAf8EBAMCB4AwGAYDVR0gAQH/BA4wDDAKBg |
| 36 | +grBgEFBQcOAjBhBgNVHR8EWjBYMFagVKBShlByc3luYzovL3Jwa2kuZXhhbXBsZ |
| 37 | +S5uZXQvcmVwb3NpdG9yeS8zQUNFMkNFRjRGQjIxQjdEMTFFM0UxODRFRkMxRTI5 |
| 38 | +N0IzNzc4NjQyLmNybDBsBggrBgEFBQcBAQRgMF4wXAYIKwYBBQUHMAKGUHJzeW5 |
| 39 | +jOi8vcnBraS5leGFtcGxlLm5ldC9yZXBvc2l0b3J5LzNBQ0UyQ0VGNEZCMjFCN0 |
| 40 | +QxMUUzRTE4NEVGQzFFMjk3QjM3Nzg2NDIuY2VyMCEGCCsGAQUFBwEHAQH/BBIwE |
| 41 | +DAGBAIAAQUAMAYEAgACBQAwRQYIKwYBBQUHAQsEOTA3MDUGCCsGAQUFBzANhilo |
| 42 | +dHRwczovL3JyZHAuZXhhbXBsZS5uZXQvbm90aWZpY2F0aW9uLnhtbDANBgkqhki |
| 43 | +G9w0BAQsFAAOCAQEABR2T0qT2V1ZlsZjj+yHPTArIVBECZFSCdP+bJTse85TqYi |
| 44 | +blMsNS9yEu2SNbaZMNLuSSiAffYooh4nIYq/Rh6+xGs1n427JZUokoeLtY0UUb2 |
| 45 | +fIsua9JFo8YGTnpqDMGe+xnpbJ0SCSoBlJCIj+b+YS8WXjEHt2KW6wyA/BcNS8a |
| 46 | +dS2pEUwC2cs/WcwzgbttnkcnG7/wkrQ3oqzpC1arKelyz7PGIIXJGy9nF8C3/aa |
| 47 | +aEpHd7UgIyvXYuCY/lqWTm97jDxgGIYGC7660mtfOMkB8YF6kUU+td2dDQsMztc |
| 48 | +OxbzqiGnicmeJfBwG2li6O0vorW4d5iIOTKpQyqfh45TGCAaowggGmAgEDgBSRR |
| 49 | +lKjvVHBRCYBmIifXEWr8FOhhzALBglghkgBZQMEAgGgazAaBgkqhkiG9w0BCQMx |
| 50 | +DQYLKoZIhvcNAQkQAS8wHAYJKoZIhvcNAQkFMQ8XDTIwMDkxMzE4NDUxMFowLwY |
| 51 | +JKoZIhvcNAQkEMSIEICvi8p5S8ckg2wTRhDBQzGijjyqs5T6I+4VtBHypfcEWMA |
| 52 | +0GCSqGSIb3DQEBAQUABIIBAHUrA4PaJG42BD3hpF8U0usnV3Dg5NQh97SfyKTk7 |
| 53 | +YHhhwu/936gkmAew8ODRTCddMvMObWkjj7/XeR+WKffaTF1EAdZ1L6REV+GlV91 |
| 54 | +cYnFkT9ldn4wHQnNNncfAehk5PClYUUQ0gqjdJT1hdaolT83b3ttekyYIiwPmHE |
| 55 | +xRaNkSvKenlNqcriaaf3rbQy9dc2d1KxrL2429n134ICqjKeRnHkXXrCWDmyv/3 |
| 56 | +imwYkXpiMxw44EZqDjl36MiWsRDLdgoijBBcGbibwyAfGeR46k5raZCGvxG+4xa |
| 57 | +O8PDTxTfIYwAnBjRBKAqAZ7yX5xHfm58jUXsZJ7Ileq1S7G6Kk= |
| 58 | +""" |
| 59 | + |
| 60 | + def setUp(self): |
| 61 | + self.asn1Spec = rfc5652.ContentInfo() |
| 62 | + |
| 63 | + def testDerCodec(self): |
| 64 | + substrate = pem.readBase64fromText(self.pem_text) |
| 65 | + asn1Object, rest = der_decoder(substrate, asn1Spec=self.asn1Spec) |
| 66 | + self.assertFalse(rest) |
| 67 | + self.assertTrue(asn1Object.prettyPrint()) |
| 68 | + self.assertEqual(substrate, der_encoder(asn1Object)) |
| 69 | + |
| 70 | + assert asn1Object['contentType'] == rfc5652.id_signedData |
| 71 | + sd, rest = der_decoder(asn1Object['content'], |
| 72 | + asn1Spec=rfc5652.SignedData()) |
| 73 | + self.assertFalse(rest) |
| 74 | + self.assertTrue(sd.prettyPrint()) |
| 75 | + self.assertEqual(asn1Object['content'], der_encoder(sd)) |
| 76 | + |
| 77 | + found = False |
| 78 | + for sa in sd['signerInfos'][0]['signedAttrs']: |
| 79 | + if sa['attrType'] == rfc5652.id_contentType: |
| 80 | + ct, rest = der_decoder(sa['attrValues'][0], |
| 81 | + asn1Spec=rfc5652.ContentType()) |
| 82 | + self.assertFalse(rest) |
| 83 | + self.assertTrue(ct.prettyPrint()) |
| 84 | + self.assertEqual(sa['attrValues'][0], der_encoder(ct)) |
| 85 | + self.assertEqual(rfc9632.id_ct_geofeedCSVwithCRLF, ct) |
| 86 | + found = True |
| 87 | + |
| 88 | + assert found |
| 89 | + |
| 90 | + |
| 91 | +suite = unittest.TestLoader().loadTestsFromModule(sys.modules[__name__]) |
| 92 | + |
| 93 | +if __name__ == '__main__': |
| 94 | + unittest.TextTestRunner(verbosity=2).run(suite) |
0 commit comments