예제 #1
0
 def setUp(self):
     self.cryptor = Cryptor()
예제 #2
0
class CryptorTest(unittest.TestCase):
    def setUp(self):
        self.cryptor = Cryptor()

    def test_encrypt_and_decrypt_should_be_reversible(self):
        # setup
        value = "Roses are red\nViolets are blue"

        # test
        encrypted_value = self.cryptor.encrypt(TEST_KEY, value)
        decrypted_value = self.cryptor.decrypt(TEST_KEY, encrypted_value)

        # assert
        self.assertTrue(encrypted_value)
        self.assertTrue(decrypted_value)
        self.assertEqual(value, decrypted_value)

    def test_encrypt_verified_and_decrypt_verified_should_be_reversible(self):
        # setup
        value = "Roses are red\nViolets are blue"

        # test
        encrypted_value = self.cryptor.encrypt(TEST_KEY, value, verify=True)
        decrypted_value = self.cryptor.decrypt(TEST_KEY, encrypted_value, verify=True)

        # assert
        self.assertTrue(encrypted_value)
        self.assertTrue(decrypted_value)
        self.assertEqual(value, decrypted_value)

    def test_decrypt_should_raise_value_error_if_bad_key(self):
        # setup
        encrypted_value = self.cryptor.encrypt(TEST_KEY,
                                               "You are my sunshine...",
                                               verify=True)

        # test
        with self.assertRaises(ValueError):
            self.cryptor.decrypt("bad key!", encrypted_value, verify=True)

    def test_decrypt_unverified_should_not_raise_value_error_if_bad_key(self):
        # setup
        encrypted_value = self.cryptor.encrypt(TEST_KEY, "You are my sunshine...")

        # test should not raise value error
        self.cryptor.decrypt("bad key!", encrypted_value)

    def test_verify_should_return_true_if_key_and_msg_are_valid(self):
        # setup
        digest_size = hmac.new("foo", digestmod=self.cryptor.digestmod).digest_size
        encrypted_value = self.cryptor.encrypt(TEST_KEY,
                                               "You are my sunshine...",
                                               verify=True)

        # test
        result = self.cryptor.verify(TEST_KEY, encrypted_value)

        # assert
        self.assertEqual(result, True)

    def test_verify_should_return_false_if_key_is_invalid(self):
        # setup
        encrypted_value = self.cryptor.encrypt(TEST_KEY, "You are my sunshine...", verify=True)

        # test
        result = self.cryptor.verify("bad key!", encrypted_value)

        # assert
        self.assertFalse(result)

    def test_digest_and_salt_should_be_unique_for_duplicate_encryptions(self):
        # setup test
        encrypted_value1 = self.cryptor.encrypt(TEST_KEY, "You are my sunshine...", verify=True)
        encrypted_value2 = self.cryptor.encrypt(TEST_KEY, "You are my sunshine...", verify=True)
        parsed1 = self.cryptor._parse(encrypted_value1, verified=True)
        parsed2 = self.cryptor._parse(encrypted_value2, verified=True)

        # assert
        self.assertNotEqual(parsed1['digest'], parsed2['digest'])
        self.assertNotEqual(parsed1['salt'], parsed2['salt'])