1# coding: utf-8 2from __future__ import unicode_literals, division, absolute_import, print_function 3 4import unittest 5import sys 6import os 7 8from asn1crypto import algos, core 9from ._unittest_compat import patch 10 11patch() 12 13if sys.version_info < (3,): 14 byte_cls = str 15 num_cls = long # noqa 16else: 17 byte_cls = bytes 18 num_cls = int 19 20 21tests_root = os.path.dirname(__file__) 22fixtures_dir = os.path.join(tests_root, 'fixtures') 23 24 25class AlgoTests(unittest.TestCase): 26 27 def test_signed_digest_parameters(self): 28 sha256_rsa = algos.SignedDigestAlgorithm({'algorithm': 'sha256_rsa'}) 29 self.assertEqual(core.Null, sha256_rsa['parameters'].__class__) 30 31 def test_digest_parameters(self): 32 sha1 = algos.DigestAlgorithm({'algorithm': 'sha1'}) 33 self.assertEqual(core.Null, sha1['parameters'].__class__) 34 35 def test_ccm_parameters(self): 36 with open(os.path.join(fixtures_dir, 'aesccm_algo.der'), 'rb') as f: 37 # PBES2 AlgorithmIdentifier 38 algo = algos.EncryptionAlgorithm().load(f.read()) 39 scheme = algo['parameters']['encryption_scheme'] 40 self.assertEqual(scheme['parameters'].__class__, algos.CcmParams) 41 self.assertEqual(scheme['parameters']['aes_nonce'].__class__, core.OctetString) 42 self.assertEqual(scheme['parameters']['aes_nonce'].native, b'z\xb7\xbd\xb7\xe1\xc6\xc0\x11\xc1?\xf00') 43 self.assertEqual(scheme['parameters']['aes_icvlen'].__class__, core.Integer) 44 self.assertEqual(scheme['parameters']['aes_icvlen'].native, 8) 45 46 def test_rc2_parameters(self): 47 with open(os.path.join(fixtures_dir, 'rc2_algo.der'), 'rb') as f: 48 algo = algos.EncryptionAlgorithm.load(f.read()) 49 self.assertEqual(algo.encryption_block_size, 8) 50 self.assertEqual(algo.encryption_iv, b'Q\xf1\xde\xc3\xc0l\xe8\xef') 51 self.assertEqual(algo.encryption_cipher, 'rc2') 52 self.assertEqual(algo.encryption_mode, 'cbc') 53 self.assertEqual(algo.key_length, 16) 54 55 def test_rc5_parameters(self): 56 with open(os.path.join(fixtures_dir, 'rc5_algo.der'), 'rb') as f: 57 algo = algos.EncryptionAlgorithm.load(f.read()) 58 self.assertEqual(algo.encryption_block_size, 16) 59 self.assertEqual(algo.encryption_iv, b'abcd\0\1\2\3') 60 self.assertEqual(algo.encryption_cipher, 'rc5') 61 self.assertEqual(algo.encryption_mode, 'cbc') 62 63 params = algo["parameters"] 64 self.assertEqual(params["version"].native, 'v1-0') 65 self.assertEqual(params["rounds"].native, 42) 66