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.type import univ 15 16from pyasn1_modules import pem 17from pyasn1_modules import rfc5280 18from pyasn1_modules import rfc8017 19from pyasn1_modules import rfc2985 20 21try: 22 import unittest2 as unittest 23 24except ImportError: 25 import unittest 26 27class SMIMECapabilitiesTestCase(unittest.TestCase): 28 smime_capabilities_pem_text = """\ 29MIIBAzA8BgkqhkiG9w0BAQcwL6APMA0GCWCGSAFlAwQCAgUAoRwwGgYJKoZIhvcN 30AQEIMA0GCWCGSAFlAwQCAgUAMDwGCSqGSIb3DQEBCjAvoA8wDQYJYIZIAWUDBAIC 31BQChHDAaBgkqhkiG9w0BAQgwDQYJYIZIAWUDBAICBQAwDQYJKoZIhvcNAQECBQAw 32DQYJKoZIhvcNAQEEBQAwDQYJKoZIhvcNAQEFBQAwDQYJKoZIhvcNAQEOBQAwDQYJ 33KoZIhvcNAQELBQAwDQYJKoZIhvcNAQEMBQAwDQYJKoZIhvcNAQENBQAwDQYJKoZI 34hvcNAQEPBQAwDQYJKoZIhvcNAQEQBQA= 35""" 36 37 def setUp(self): 38 self.asn1Spec = rfc2985.SMIMECapabilities() 39 40 def testDerCodec(self): 41 substrate = pem.readBase64fromText(self.smime_capabilities_pem_text) 42 asn1Object, rest = der_decode(substrate, asn1Spec=self.asn1Spec) 43 assert not rest 44 assert asn1Object.prettyPrint() 45 assert der_encode(asn1Object) == substrate 46 47 for cap in asn1Object: 48 assert cap['algorithm'] in rfc5280.algorithmIdentifierMap.keys() 49 if cap['parameters'].hasValue(): 50 p, rest = der_decode(cap['parameters'], 51 asn1Spec=rfc5280.algorithmIdentifierMap[cap['algorithm']]) 52 assert not rest 53 if not p == univ.Null(""): 54 assert p.prettyPrint() 55 assert der_encode(p) == cap['parameters'] 56 57 if cap['algorithm'] == rfc8017.id_RSAES_OAEP: 58 assert p['hashFunc']['algorithm'] == rfc8017.id_sha384 59 assert p['maskGenFunc']['algorithm'] == rfc8017.id_mgf1 60 61 def OpenTypesCodec(self): 62 substrate = pem.readBase64fromText(self.smime_capabilities_pem_text) 63 asn1Object, rest = der_decode(substrate, 64 asn1Spec=self.asn1Spec, 65 decodeOpenTypes=True) 66 assert not rest 67 assert asn1Object.prettyPrint() 68 assert der_encode(asn1Object) == substrate 69 70 for cap in asn1Object: 71 if cap['algorithm'] == rfc8017.id_RSAES_OAEP: 72 p = cap['parameters'] 73 assert p['hashFunc']['algorithm'] == rfc8017.id_sha384 74 assert p['maskGenFunc']['algorithm'] == rfc8017.id_mgf1 75 76 77class MultiprimeRSAPrivateKeyTestCase(unittest.TestCase): 78 pem_text = """\ 79MIIE2QIBAQKCAQEAn82EqwXasE2TFNSmZucB8LNza2mOWLHF3nxpxKXalPMDvezc 805Dq7Ytcv/k9jJL4j4jYfvR4yyZdU9iHLaD6hOINZ8E6hVpx/4c96ZUSOLzD2g+u+ 81jIuoNfG+zygSBGYCS6BLCAIsZ+2wUyxYpLJknHJld9/jy+aLmmyrilhH9dH5AUiV 823NeWht/68++dMXf4ZI/gV4bMSlWhggxkz2WJJpiQdCdJatGkwNDkHmLA9X0tC6OH 83SPE7qYdxG38cYS5F445SgnhDpiK7BodSqYLwgehaDjoOYdEgHVnOcpBCDI5zCJSL 84b1c/z8uhrB1xxlECR44wCLcKsIIYQxaEErRJ/wIDAQABAoIBAD+Ra5L0szeqxDVn 85GgKZJkZvvBwgU0WpAgMtDo3xQ/A4c2ab0IrhaiU5YJgTUGcPVArqaNm8J4vVrTBz 865QxEzbFDXwWe4cMoYh6bgB7ElKLlIUr8/kGZUfgc7kI29luEjcAIEAC2/RQHesVn 87DHkL5OzqZL+4fIwckAMh0tXdflsPgZ/jgIaKca4OqKu4KGnczm3UvqtlvwisAjkx 88zMyfZXOLn0vEwP2bfbhQrCVrP7n6a+CV+Kqm8NBWnbiS6x2rWemVVssNTbfXQztq 89wC6ZJZCLK7plciDBWvHcS6vxdcsS9DUxuqSV6o/stCGTl1D+9tDx8Od0Eunna2B2 90wAoRHZECVgbNO1bqwfYpp5aFuySWoP+KZz8f/5ZkHjLwiNGpQcqVd4+7Ql2R4qgF 91NgSoQQOZFhKtiOeLVU0HYfp6doI4waSINZdF/fJDHD6fY3AMOc/IIMDHHIzbAlYG 92vKOocLXWj/2+gcyQ1XoAmrE70aIFUBLSvd7RCi8GI74zYWp5lCSvO850Z4GsWSZT 9341iF13sTDDJPm3+BbzMvEu2GuACi/8/IpbUr24/FP9Cp1Rf7kwJWAgMxfoshbrNu 94ebQB5laHNnT+DYhrOFVRNiNDaD2bUNSetrFidosWtD4ueHxMGENwa4BbFJ9+UrdP 95fyxC6k7exM7khGjaNZczwTep1VpYtKjzP/bp9KcCVgYoj9s9HZ1FCAsNEPodjGfd 96AcPTQS9mIa7wzy19B7uvFQJXPURi/p4KKBMVQ99Pp8/r9lJzxxiEf8FyPr8N7lZM 97EUKkFkDrZQDhKpsrHWSNj6yRFlltAlYC7dYR8KLEWoOUATLosxQhwgypv+23r+d4 98ZdPOdDv9n8Kmj+NFy/oISFfdXzlOU4RWQtMx3hEwAabwct7vjiJEej/kmiTqco02 9917tt13VvvQ5ZXF73dDCCAQwwggEIAlYDfMpM1WNfxcLLOgkRZ+0S9OvIrEOi0ALV 100SquTdi/thhCuCsK3lMD4miN9te8j16YtqEFVWXC3a6DWwIJ6m/xZ50bBwPqM8RsI 1016FWhZw4Dr5VqjYXUvwJWAvapRk9SydDYri/cAtGIkUJVlspkE1emALAaSw30vmfd 102hrgYLT6YGOmK3UmcNJ4NVeET275MXWF1ZOhkOGKTN6aj5wPhJaHBMnmUQrq7GwC6 103/LfUkSsCVgMCDTV9gbFW8u6TcTVW85dBIeUGxZh1T2pbU3dkGO3IOxOhzJUplH4/ 104EeEs9dusHakg1ERXAg4Vo1YowPW8kuVbZ9faxeVrmuER5NcCuZzS5X/obGUw 105""" 106 107 def setUp(self): 108 self.asn1Spec = rfc8017.RSAPrivateKey() 109 110 def testDerCodec(self): 111 substrate = pem.readBase64fromText(self.pem_text) 112 asn1Object, rest = der_decode(substrate, asn1Spec=self.asn1Spec) 113 assert not rest 114 assert asn1Object.prettyPrint() 115 assert der_encode(asn1Object) == substrate 116 117 118suite = unittest.TestLoader().loadTestsFromModule(sys.modules[__name__]) 119 120if __name__ == '__main__': 121 import sys 122 123 result = unittest.TextTestRunner(verbosity=2).run(suite) 124 sys.exit(not result.wasSuccessful()) 125