# -*- coding: utf-8 -*- import pytest from data.encryption import FieldEncrypter, _VERSIONS, DecryptionFailureException @pytest.mark.parametrize( "test_data", [ "", "hello world", "wassup?!", "IGZ2Y8KUN3EFWAZZXR3D7U4V5NXDVYZI5VGU6STPB6KM83PAB8WRGM32RD9FW0C0", "JLRFBYS1EHKUE73S99HWOQWNPGLUZTBRF5HQEFUJS5BK3XVB54RNXYV4AUMJXCMC", "a" * 3, "a" * 4, "a" * 5, "a" * 31, "a" * 32, "a" * 33, "a" * 150, u"😇", ], ) @pytest.mark.parametrize("version", _VERSIONS.keys()) @pytest.mark.parametrize( "secret_key", [ u"test1234", "test1234", "thisisanothercoolsecretkeyhere", "107383705745765174750346070528443780244192102846031525796571939503548634055845", bytes("test1234"), ], ) @pytest.mark.parametrize("use_valid_key", [True, False,]) def test_encryption(test_data, version, secret_key, use_valid_key): encrypter = FieldEncrypter(secret_key, version) encrypted = encrypter.encrypt_value(test_data, field_max_length=255) assert encrypted != test_data if use_valid_key: decrypted = encrypter.decrypt_value(encrypted) assert decrypted == test_data with pytest.raises(DecryptionFailureException): encrypter.decrypt_value("somerandomvalue") else: decrypter = FieldEncrypter("some other key", version) with pytest.raises(DecryptionFailureException): decrypter.decrypt_value(encrypted) @pytest.mark.parametrize( "secret_key, encrypted_value, expected_decrypted_value", [ (u"test1234", "v0$$iE+87Qefu/2i+5zC87nlUtOskypk8MUUDS/QZPs=", ""), ("test1234", "v0$$XTxqlz/Kw8s9WKw+GaSvXFEKgpO/a2cGNhvnozzkaUh4C+FgHqZqnA==", "hello world"), ( bytes("test1234"), "v0$$9LadVsSvfAr9r1OvghSYcJqrJpv46t+U6NgLKrcFY6y2bQsASIN36g==", "hello world", ), ( bytes("\1\2\3\4\5\6"), "v0$$2wwWX8IhUYzuh4cyMgSXF3MEVDlEhrf0CNimTghlHgCuK6E4+bLJb1xJOKxsXMs=", "hello world, again", ), ], ) def test_encryption_value(secret_key, encrypted_value, expected_decrypted_value): encrypter = FieldEncrypter(secret_key) decrypted = encrypter.decrypt_value(encrypted_value) assert decrypted == expected_decrypted_value