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_modules import pem 15from pyasn1_modules import rfc5280 16from pyasn1_modules import rfc5990 17 18try: 19 import unittest2 as unittest 20except ImportError: 21 import unittest 22 23 24class RSAKEMTestCase(unittest.TestCase): 25 pem_text = """\ 26MEcGCyqGSIb3DQEJEAMOMDgwKQYHKIGMcQICBDAeMBkGCiuBBRCGSAksAQIwCwYJ 27YIZIAWUDBAIBAgEQMAsGCWCGSAFlAwQBBQ== 28""" 29 30 def setUp(self): 31 self.asn1Spec = rfc5280.AlgorithmIdentifier() 32 33 def testDerCodec(self): 34 substrate = pem.readBase64fromText(self.pem_text) 35 asn1Object, rest = der_decode(substrate, asn1Spec=self.asn1Spec) 36 assert not rest 37 assert asn1Object.prettyPrint() 38 assert der_encode(asn1Object) == substrate 39 40 assert asn1Object['algorithm'] == rfc5990.id_rsa_kem 41 rsa_kem_p, rest = der_decode(asn1Object['parameters'], 42 asn1Spec=rfc5280.algorithmIdentifierMap[rfc5990.id_rsa_kem]) 43 assert not rest 44 assert rsa_kem_p.prettyPrint() 45 assert der_encode(rsa_kem_p) == asn1Object['parameters'] 46 47 assert rsa_kem_p['kem']['algorithm'] == rfc5990.id_kem_rsa 48 kem_rsa_p, rest = der_decode(rsa_kem_p['kem']['parameters'], 49 asn1Spec=rfc5280.algorithmIdentifierMap[rfc5990.id_kem_rsa]) 50 assert not rest 51 assert kem_rsa_p.prettyPrint() 52 assert der_encode(kem_rsa_p) == rsa_kem_p['kem']['parameters'] 53 54 assert kem_rsa_p['keyLength'] == 16 55 assert kem_rsa_p['keyDerivationFunction']['algorithm'] == rfc5990.id_kdf_kdf3 56 kdf_p, rest = der_decode(kem_rsa_p['keyDerivationFunction']['parameters'], 57 asn1Spec=rfc5280.algorithmIdentifierMap[rfc5990.id_kdf_kdf3]) 58 assert not rest 59 assert kdf_p.prettyPrint() 60 assert der_encode(kdf_p) == kem_rsa_p['keyDerivationFunction']['parameters'] 61 62 def testOpenTypes(self): 63 substrate = pem.readBase64fromText(self.pem_text) 64 asn1Object, rest = der_decode(substrate, 65 asn1Spec=self.asn1Spec, 66 decodeOpenTypes=True) 67 assert not rest 68 assert asn1Object.prettyPrint() 69 assert der_encode(asn1Object) == substrate 70 71 assert asn1Object['algorithm'] == rfc5990.id_rsa_kem 72 assert asn1Object['parameters']['kem']['algorithm'] == rfc5990.id_kem_rsa 73 assert asn1Object['parameters']['kem']['parameters']['keyLength'] == 16 74 75 76suite = unittest.TestLoader().loadTestsFromModule(sys.modules[__name__]) 77 78if __name__ == '__main__': 79 import sys 80 81 result = unittest.TextTestRunner(verbosity=2).run(suite) 82 sys.exit(not result.wasSuccessful()) 83