Source code for glideinwms.unittests.test_lib_symCrypto

#!/usr/bin/env python3

# SPDX-FileCopyrightText: 2009 Fermi Research Alliance, LLC
# SPDX-License-Identifier: Apache-2.0

"""Unit test for glideinwms/lib/symCrypto.py
"""


import string
import unittest

import hypothesis
import hypothesis.strategies as st
import xmlrunner

from glideinwms.lib import defaults
from glideinwms.lib.symCrypto import (
    AutoSymKey,
    MutableSymKey,
    ParametrizedSymKey,
    Sym3DESKey,
    SymAES128Key,
    SymAES256Key,
)
from glideinwms.unittests.unittest_utils import TestImportError

try:
    from glideinwms.lib.symCrypto import SymKey
except ImportError as err:
    raise TestImportError(str(err))


[docs] class TestMutableSymKey(unittest.TestCase):
[docs] def setUp(self): self.key = MutableSymKey()
[docs] def test___init__(self): self.assertTrue(isinstance(self.key, MutableSymKey))
[docs] def test_get_wcrypto(self): nam, kstr, key_iv = self.key.get_wcrypto() self.assertTrue(nam is None) self.assertTrue(kstr is None) self.assertTrue(key_iv is None)
[docs] def test_is_valid(self): self.assertFalse(self.key.is_valid())
[docs] def test_redefine(self): self.key.redefine(cypher_name="aes_128_cbc", key_len=16, iv_len=16, key_str=None, iv_str=None, key_iv_code=None)
[docs] class TestParametrizedSymKey(unittest.TestCase):
[docs] def test___init__(self): psk = ParametrizedSymKey("aes_128_cbc") self.assertTrue(isinstance(psk, ParametrizedSymKey)) self.assertTrue(isinstance(psk, SymKey)) try: psk2 = ParametrizedSymKey("bad_parameter") # noqa: F841 # keep, triggers exception assert False except KeyError: pass
[docs] class TestAutoSymKey(unittest.TestCase):
[docs] def setUp(self): self.key = AutoSymKey()
[docs] def test_auto_load(self): self.key.auto_load() self.assertTrue(self.key.cypher_name is None) self.assertTrue(self.key.key_str is None) try: key2 = AutoSymKey("bogus,bogus,bogus") # noqa: F841 # keep, triggers exception assert False except ValueError: pass
[docs] class TestSymAES128Key(unittest.TestCase):
[docs] def setUp(self): self.key = SymAES128Key() self.key.new() self.key_iv_code = self.key.get_code()
[docs] def test___init__(self): self.assertTrue(isinstance(self.key, SymAES128Key)) self.assertTrue(isinstance(self.key, SymKey)) self.assertTrue(self.key.is_valid()) (knm, ivn) = self.key.get() self.assertTrue(isinstance(knm, bytes)) self.assertTrue(isinstance(ivn, bytes)) nmm = self.key.get_code() self.assertTrue(len(nmm) > 12) self.assertEqual("aes_128_cbc", self.key.cypher_name)
[docs] @hypothesis.given(st.text(alphabet=string.printable, min_size=1)) def test_symmetric(self, data): data = defaults.force_bytes(data) sk2 = AutoSymKey(key_iv_code=self.key_iv_code) self.assertEqual(data, sk2.decrypt(self.key.encrypt(data))) self.assertEqual(data, sk2.decrypt_hex(self.key.encrypt_hex(data))) self.assertEqual(data, sk2.decrypt_base64(self.key.encrypt_base64(data)))
[docs] class TestSymAES256Key(unittest.TestCase):
[docs] def setUp(self): self.key = SymAES256Key() self.key.new() self.key_iv_code = self.key.get_code()
[docs] def test___init__(self): self.assertTrue(isinstance(self.key, SymAES256Key)) self.assertTrue(isinstance(self.key, SymKey)) self.assertTrue(self.key.is_valid()) (knm, ivn) = self.key.get() self.assertTrue(isinstance(knm, bytes)) self.assertTrue(isinstance(ivn, bytes)) nmm = self.key.get_code() self.assertTrue(len(nmm) > 12) self.assertEqual("aes_256_cbc", self.key.cypher_name)
[docs] @hypothesis.given(st.text(alphabet=string.printable, min_size=1)) def test_symmetric(self, data): data = defaults.force_bytes(data) sk2 = AutoSymKey(key_iv_code=self.key_iv_code) self.assertEqual(data, sk2.decrypt(self.key.encrypt(data))) self.assertEqual(data, sk2.decrypt_hex(self.key.encrypt_hex(data))) self.assertEqual(data, sk2.decrypt_base64(self.key.encrypt_base64(data)))
[docs] class TestSym3DESKey(unittest.TestCase):
[docs] def setUp(self): self.key = Sym3DESKey() self.key.new() self.key_iv_code = self.key.get_code()
[docs] def test___init__(self): self.assertTrue(isinstance(self.key, Sym3DESKey)) self.assertTrue(isinstance(self.key, SymKey)) self.assertTrue(self.key.is_valid()) (knm, ivn) = self.key.get() self.assertTrue(isinstance(knm, bytes)) self.assertTrue(isinstance(ivn, bytes)) nmm = self.key.get_code() self.assertTrue(len(nmm) > 12) self.assertEqual("des3", self.key.cypher_name)
[docs] @unittest.skip("des3 decrypt throws exception, come back to this later") @hypothesis.given(st.text(alphabet=string.printable, min_size=1)) def test_symmetric(self, data): data = defaults.force_bytes(data) sk2 = AutoSymKey(key_iv_code=self.key_iv_code) self.assertEqual(data, sk2.decrypt(self.key.encrypt(data))) self.assertEqual(data, sk2.decrypt_hex(self.key.encrypt_hex(data))) self.assertEqual(data, sk2.decrypt_base64(self.key.encrypt_base64(data)))
if __name__ == "__main__": OFL = "unittests-reports" unittest.main(testRunner=xmlrunner.XMLTestRunner(output=OFL))