forked from p15670423/monkey
Refactored unit tests and added a unit test for a function which checks whether or not config is encrypted.
This commit is contained in:
parent
a36fc81755
commit
5cf002d81a
|
@ -1,3 +1,20 @@
|
|||
# Without these imports pytests can't use fixtures,
|
||||
# because they are not found
|
||||
import json
|
||||
import os
|
||||
|
||||
import pytest
|
||||
from tests.unit_tests.monkey_island.cc.mongomock_fixtures import * # noqa: F401,F403,E402
|
||||
from tests.unit_tests.monkey_island.cc.services.utils.test_config_encryption import (
|
||||
MONKEY_CONFIGS_DIR_PATH,
|
||||
STANDARD_PLAINTEXT_MONKEY_CONFIG_FILENAME,
|
||||
)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def monkey_config(data_for_tests_dir):
|
||||
plaintext_monkey_config_standard_path = os.path.join(
|
||||
data_for_tests_dir, MONKEY_CONFIGS_DIR_PATH, STANDARD_PLAINTEXT_MONKEY_CONFIG_FILENAME
|
||||
)
|
||||
plaintext_config = json.loads(open(plaintext_monkey_config_standard_path, "r").read())
|
||||
return plaintext_config
|
||||
|
|
|
@ -0,0 +1,31 @@
|
|||
import json
|
||||
|
||||
import pytest
|
||||
from tests.unit_tests.monkey_island.cc.services.utils.cyphertexts_for_encryption_test import (
|
||||
MALFORMED_CYPHER_TEXT_CORRUPTED,
|
||||
)
|
||||
from tests.unit_tests.monkey_island.cc.services.utils.test_config_encryption import PASSWORD
|
||||
|
||||
from common.utils.exceptions import InvalidConfigurationError
|
||||
from monkey_island.cc.resources.configuration_import import ConfigurationImport
|
||||
from monkey_island.cc.services.utils.config_encryption import encrypt_config
|
||||
|
||||
|
||||
def test_is_config_encrypted__json(monkey_config):
|
||||
monkey_config = json.dumps(monkey_config)
|
||||
assert not ConfigurationImport.is_config_encrypted(monkey_config)
|
||||
|
||||
|
||||
def test_is_config_encrypted__ciphertext(monkey_config):
|
||||
encrypted_config = encrypt_config(monkey_config, PASSWORD)
|
||||
assert ConfigurationImport.is_config_encrypted(encrypted_config)
|
||||
|
||||
|
||||
def test_is_config_encrypted__corrupt_ciphertext():
|
||||
with pytest.raises(InvalidConfigurationError):
|
||||
assert ConfigurationImport.is_config_encrypted(MALFORMED_CYPHER_TEXT_CORRUPTED)
|
||||
|
||||
|
||||
def test_is_config_encrypted__unknown_format():
|
||||
with pytest.raises(InvalidConfigurationError):
|
||||
assert ConfigurationImport.is_config_encrypted("ABC")
|
|
@ -1,206 +1,74 @@
|
|||
MALFORMED_CYPHER_TEXT_TOO_SHORT = (
|
||||
b"AES\x02\x00\x00\x1bCREATED_BY\x00pyAesCrypt "
|
||||
b"6.0.0\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
|
||||
)
|
||||
|
||||
MALFORMED_CYPHER_TEXT_CORRUPTED = (
|
||||
b"AES\x02\x00\x00\x1bCREATED_BY\x00pyAesCrypt "
|
||||
b"6.0.0\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
|
||||
b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
|
||||
b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
|
||||
b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
|
||||
b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
|
||||
b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
|
||||
b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
|
||||
b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
|
||||
b"\x00\x00\x00\x00\x00\xc2\xc3w0\xe5\x06\xd2\xb9\x05b\xce\xb2\xc7"
|
||||
b"\x18f\x87j|y\xcd\xbd\\("
|
||||
b"V\xfa!%\xcc@\x11\x98>\x9c^\x11\xa1\x82\xe9@\x89\xde\xe9\xb2)h\xb2"
|
||||
b"`\x07y\x01\xa8zr\xd0\xe2\xb9m\xb1&\xb5f\x95\x80\x98\xac\xa6\x04.8"
|
||||
b"\xf0\xbf\xee\x18!\xf5T\x04a\xb5\xb2Q\xb0|\xff\xe7\xdd)F\xd5E\xa6"
|
||||
b"\xbf\xf6\xb0D\x02\x92\xb9Z\x01 "
|
||||
b"F\x9f.9\x92zc\x9bI\xaf\rB6\xcb\r\x1b\xbf\xb8m\xbdBBt5\x9d\xc9\xeb"
|
||||
b"\x9b\xe0u\xe8'H5\x96\x11\xbf>\xa7\xaa\xb4\x06\x1e\xb7\x99\xf1\x86"
|
||||
b"\xd1\x81\x8e.\xf5\xdf\xc7Z\x18\xc5\xe9\xfc\\\x135B\xd6!-\x0c\xad"
|
||||
b"\xc4!\xa5-\x02\x19V\x80\xe1\x98\xe3\x9a\xeb\xb5\xb1^\x94/F\x1c"
|
||||
b"\x92f\x011\x05\x86\xdb\xdaQ\xa7\xff\x15&\x83\xca\x0b\xbf|k\x0em"
|
||||
b'"\xf4\xb67\xc0\x8f\xe1\xa0s\x1e\xf0\xec\x98\xd0Zk2\xa4\x85v{'
|
||||
b"P\xaa\x96\xb3\xa4N\xd0,"
|
||||
b"\xf9\xcbiq\xa7IP\xd9\x1d\x8a\x0fW\xf4\x8fnGc\x9e22!\xf24\xa3:\xbd"
|
||||
b"\x83\x93\xc5Hq\xcc\xc9\xbd\xef\x9b\xa6f!\xd4p\x8c\x9cN\x0f\xc9d"
|
||||
b"\xf5o\xa6\x1c\xf8\xed\\/r\x8c\x8d\xa9\x85\xe5\x19]J\x02S\x10\xef"
|
||||
b"\x1ffg\xaf\x1f\x077}\x81\x9d\xe6\xaa\x99k\xec\x19\xe90\xef\x0b\x93"
|
||||
b"\x0eZ\x96hq\x1be\\_\\d\x1c\xc9\xcb\xd1\x87E?$\x0f\x93\xf9\xa8Z\x10"
|
||||
b"\xd4)\xb4j\xa4\x16\xaa'\xda\xd0]Fz\xd7\xff\xff9\xe8\xfd\xa0H\xe3"
|
||||
b"\x814\xc6t[\x0e\x81\xf4\x12N\xbc\xb9("
|
||||
b"SU\xd9^%\xaeQc\xc7\xf8\xcayo9\xb3\xef\x194\xa3\xe2\xfcZ\xf6["
|
||||
b'\xd4]2\x1a\xe8u\x92\x19*~\x93b\x13\xed"\xd2\xcaV\x05R.&D\xb0m'
|
||||
b"\x93rb\x15\xe2=\xfb\xb9\xcc+\x0f\x9c\x1c\xff\xe4\x18a\x85\xe4\xd0s"
|
||||
b"\xed\xc3H\x88\x07P\xbed\x0c\xf7\x97j\x1d\xf2'\xce&\xbe1A\xca\x0e"
|
||||
b"\xb3H\x08\x01\xc5\x87F#\xf6TB\xc5\x9f\\\x9ex\x06\xd3\x85&\xdf\x9a"
|
||||
b"\\X\x1d\x9bm\xe60\xf3;\x06\xa9o7\x99\xa3:\xce\xbb\xba\xe3\xc4\xe5"
|
||||
b"\xa9\x01\xfbJ\x11tJ\xd4\xc7\xc7\xf1s=8k\xc29c\x8c\xdfdA\xf76\xdd"
|
||||
b"\xdd\xf8\x16\xf3\x8d\x96gP\xad\xd4\r1\xd3\x1d@\xbb#o\x98\x13\x9d"
|
||||
b"'\xb2\xb5\x1dl\xe5\x01\xce\x0f\x80\x7f5\x80\x1dp>\xee_\xc2OK\x95"
|
||||
b"\xd5\x16E\xea\x82\xf5\xa8\x88A\xa2\x1e\x0c\xc8\x05\x81\xda\xfe\xb6"
|
||||
b"\xe5\x8f\xd8W\xb4\xbeS\xcd\x130\x0c\xa4\xd9\x1d\xf6\x96\xa3\xee"
|
||||
b"\xb30\xbd "
|
||||
b"\t\\\xd6\xa1\x8b\x85\x16\xf6dJ4\xd7\x85\x96|3\xae\xab\xb7>\xf8\xf9"
|
||||
b"\xf7h\x8f\xcc\x9b=B]G\xd5L3g\xbd%\x84\xbe\xf4\x8a\x07\xb3\x863"
|
||||
b"\xc2uz\x84-\xe436\x14\xbd\xda\xc74.\xdan\x8e\x04VJq\xcdo\x8a\x05"
|
||||
b"\xe6\xec\x84\xdc\xa9\x84\xb3\xa5T\xa7M\x05\xfc\xc3\x04\xd6p\xb0y"
|
||||
b"\x83\xc2\xc7i\x9at.\x1dh\x99\xfe}(\x98\xa7){"
|
||||
b"\xa9\xa6\xa63\xcc'0A\xd9Q\x99-\xd0$)\xbda\xa0\xbf#\x9e\x19\xe5"
|
||||
b"\xb7q\x89\xda\xbaj\x1b\xe3\x8aW\xb6\xd0\xc5\x819\xfa\x8d\x9a\x14"
|
||||
b"\xaf\xb1\x08\x97>*\x7f("
|
||||
b"\x9c\xd3\x99o3\xbew'/\x14\x9e\x9f#_\xaaDgg\xa6\xc7\xa6}8J\x14\xa8"
|
||||
b"\xcb\xbf\xdeQ,"
|
||||
b"zHze\xbfe\xdfr|\xbd\x9dd\xfb\xccq\x18\x9dw\x01\xe5JY\x1b\xca\x12"
|
||||
b"\xaed]\xadi\x7f\x0c`6\xb6X\xbe0\x83b\xc6\xc5>\x1e\xab\xfa\xb7\x0c"
|
||||
b"\x08\xf6\xa9\xed\x14\xc9(\xf1m\xc6\x90w\xe9\x85\x9d{"
|
||||
b"\xba\x93x\x00\xf7\x8d\x0f\xa2\xef\xc5\xfexp\xb2\xa9\xf4\xbb\x80"
|
||||
b"\x13\x8e2bm\xf0U2\x1a\xa7\xa4PK\x11\xc7\xab3\n\xe5("
|
||||
b"y\x05\x1a\x07\x0e\x8cO\xee\xc9\x83\x84L\xae\x19\xc1\xab\xbf\xc9"
|
||||
b'\xae\x8a\xe3\xbb\x19c\x0f0\xa9\xe8\x1e\xfe\xcb\xa3T"p\r\xe8b}Y\x86'
|
||||
b"\xc0s\x9d\x1bc\xd6\xec\xab6\xd5\xcf\xfaw\x7f\xa8K\xe4Z4Sj\xe8\xda"
|
||||
b"`\xe9\x8e\xf0M\xee5G\xc6\xb6\xef\x97\r&C\xa60\xcc\xf4\xb8\xd0a\x16"
|
||||
b"!\xda=\xd4\xb4\x84\xc6\x99\xf4\x9c["
|
||||
b"\xda'R\x80\xf1\xa2m\xe0\x14\x1b\xe2\xee\xd6\x81\xf2\x19\xe6\x9aC"
|
||||
b"\xac6\xb8\xe9\x89\xe9\xb4UM\x027\xc4("
|
||||
b"\n\xe3\x8a\x85a\xad7~\xa71\xd1w065a\x87T\xbc\x89v\xca\xe4\x80\x9f"
|
||||
b"\xe1\x10p\x1c\x14\xc2\x0c-\xd4q\x0e'\xcf["
|
||||
b"\xe0\x163Jj\xd1\x03u%B:\xda\xc9\x08*\xf1\x1d,\x80,,"
|
||||
b"I\xcc\x8c\xe9\xb8<SeV\xfd\x89\x15\xbd\x85\x14d'\xd1<\xc6\xd0\xe9"
|
||||
b"\r\xc0r\x05\xe7\xb3\x190\x99\xae*\xfa\xc0\xcam2\xe2\xf4ZK\xe6\x99"
|
||||
b"\xc5s1Y\x9f\x05\xdc\xdb\xb2\xf3;\xf8\r\xdd\xe1A\x9b/|\x07\x08\xb9P"
|
||||
b'+W\xe1c]\x93\x12\xaa{"ra\xf08['
|
||||
b"R\xec\xe8m\x8a\xdf\xc6z\x84\xdd4\xb87\xc4\x9d\x9e\xd0\xde\x10\x00"
|
||||
b"\xd1\x00\xb8\xae\xb8#uQ=c\x12\x1c\xef\x96\xec\x1a\xfe.I\x14\x8f"
|
||||
b"\xf8\x07\xb8E<\xac\xf5q\xb6\xcd\x94v\xe7\x86\xa8\r\xdf\xdb\x93\x9a"
|
||||
b"\x9c\xfb\xbf^\x9eg\xa2\xb9\xb1\x8e\xbe*\xd5\xea\xcd\xc1\xfbt\xc0"
|
||||
b"\x98t\xfa>U{"
|
||||
b"\xcb\xde\x8b\x1dB\xd9\xa1\xf1\xcfY\x14\x16\x86\xd9\xe4\x8d\xc0\xc5"
|
||||
b'<^\xce"\n\xdd\xdf\x1cb\xf1M\xb8\x10$\xcf\x04\x1bU*\xe9\x19\x8c\xf7'
|
||||
b"\xff\xfdl\xaf\x92\x11\xdb{"
|
||||
b"\x1c\\<Dr\xea\x94\xd8*!\x15\x80!\x8b\xb57\xe9\xb9cW\xdc\x0c\xf9"
|
||||
b"\x8f\xdfUe4\xa95\xba\xe0B\x1c\xf4v\x11\xd0u\x0c\x13t\xbc\xec>\r"
|
||||
b"\x90\x0fva,"
|
||||
b"\xcc\x18j\xab\"4'\xd3\xcfo|yE\xb8\xa1\xc0\x927\xa7\x1dh\xba\xab"
|
||||
b"|\x8b\xeb\xf2G\xcc\xd2a2al\xa55\xb6\xd5\xc5\xc1\xa6q\t\xca\xf4\xdc"
|
||||
b"\x9b\x00\x9b\xe2\xa3\xd7\xd4\x19\x88\x05\xb2\x0e\xc8\xf3\x0b>\x18"
|
||||
b"\xcfd\x05m\x85\nB*\xa2$\xf6I'\xe4\xa2_w1*\xe2z4#\n\xcf\xd9J\xa3"
|
||||
b'\xf9q\xc4\xc1"\xf9\xbd\xb3J,'
|
||||
b"J\xd4v+U\x8c\xafG\x86\xae\xce/w\xee\x94x\xb1h7z\xbd\x02\x12\xc6"
|
||||
b"\x16\xcb\x14\x80(\xab\xfb\x16{"
|
||||
b"\xb2\xd1\xe9\xd9\xd7\xd9\x9bq`\xdfRB5\x04t\x8d\nq\x1a\r@k\xec\x04"
|
||||
b"\xb2\x8c\x00\x00\xe4\x86;\xae\xbe\x9b\x0ccp\xdd\xb8~\xb6\x9b1\xf1"
|
||||
b"'\x12\x99<j\xe4\t\x0b\x14\xb6.\xc4^\\\x9d\x1axJ*\xcc\x9b\xce\xff "
|
||||
b"\xa4G\x03\xd7_#\x87Q\x1b\xce\x99\xbb\xf5\x114\x82\x0b\xe5,"
|
||||
b"\x15\xc6\x1b\xb3\xeer#6\xd9\x1f\x14\x7f\xba\xd57\xfe\x06\xf5\x01"
|
||||
b'\x03\xed\xda\x81"_\xb6o\xf2 '
|
||||
b'|!r\x9b\xdd\xd0\xb7%\xf4&\x8b\x81\xd08L\xf8\xc1"U|g\xf3\xc2\x98'
|
||||
b"\x10;!b\x8e\xebF\xf2\x08\xc3\xafZ\x9b\xed\x81\x9eg\x1e\x98G@\xb3"
|
||||
b"\xc2\xdb\xe07\x9e\xa9\xd3\x1a(\xc5\xca\x95\x89\x01&\xfb^\xe6$,"
|
||||
b"\x14o#\xba\x85\xcc?O9 "
|
||||
b"s\x14p\x02\xf8\xd3v\xeb.+/L\xde\x05\xcd\xb4\xae\x81A\x9a\xb9\xc9"
|
||||
b"\x1a+<\x81\xcew\xd1\xa9~3c]\xbe;>\xab\xcah\xd1i\xa9r\x18\xfc\x93"
|
||||
b"\x86W{{\x92\xa9("
|
||||
b'\xee"C\xa3uG\xc3s\xb8\xc6\xb7\xb9\x17\xf3\xe3n;\x16\x08\x9e,'
|
||||
b"\xbd\x0f\xbe.\xd9\xc3F\xa0\xfe\x84\x1f\x8a\x97\xc9T\xea\x08_\xc5I"
|
||||
b"\xf9v\tI\xf0\x0e\xbex\xd9\x9f\xe7Z\xd6\x1a]\xc1\xbb\x97 "
|
||||
b"\x8a\x8f\x00\x1f\x92.\xc1WC\xd8\xe3\x86\x98PV\xfbWV\xbd\xdf\xd5"
|
||||
b">1yo\xf1\xabV\xb2\xdf\x97\x82$0\xc8#\xbe\xbb\xe1\xed\x08\x8c@7\xab"
|
||||
b"~\xdf\x8c\xf9\xbb\x9e\xc6\xa0Q\x85}\xe7\x00|\xe7'\x00{"
|
||||
b"\xd9v1\xd5\x8a-C,"
|
||||
b"\xa7S\xfc\xc3\x83\xef\xadV\x1b\n\x1b\xb3\x0bK\xa0\xc6\x02i\xf6\x80"
|
||||
b"\x06F>\x01\x01\xef\xe3\x19\xbf\xb1\xe0S~9\x88\xc5\x9a{"
|
||||
b"K\x9e8rFp\xa3\xcclX,"
|
||||
b"\xe5\xf1o\x90\xa3\x13\x9c\xf0\xcd\xf3l@\xb60\xde\x19\xcen\x19\x80w"
|
||||
b"\x0b\xfd\xa8\xafuP\xef-/\x92*\xdd\x93\xdc=9\x90\x0f-\xc4wxa\xc1"
|
||||
b"\xb7SSe\x0fY\xc3!\xee\x16\xdc\xf8\x93\x03<\x1d?\xec\xce\xcf\xd5"
|
||||
b"|)\xabu;Y!\xd6M\xcc\xbd\xcc\xec\xa6J\xb7\xbci\x91)\x14h\xec\xc3R"
|
||||
b"\xb6/\xfcA\xab\x9f\xb8.W\x92\xc4\x8b\xa3D\x91\x8a\xb1\xbc\tJ\xd5"
|
||||
b"\xb98\xe6c\xcc\xa6'\xb7NK\xf8\xdal\xabd\xc4\xde\xea\xd4~\t\xd9"
|
||||
b"\xd3\x7f\xb8\xe1J\x8e\xf9X\xe4\xcd\x04\xa0\xc0vp\xe9\xe7\x8e\xd0["
|
||||
b"m\xe2\x8dY\x8c\xcd\x81Ny\xac\xbb`\x10ky\x1c\xe3\x9a\x1b\x88G\x1d"
|
||||
b"\xdc\xc8\xa6\xf7\x1f\xbf\x87\xe9\xac\xfc5/\x8c\xf7k\x85\xb8\xc7d"
|
||||
b"\x11\xe2\xd8T\x0c\x1a\x85\xc5\x93-\xfe\x85\x87\x03\xb4\x97\x97"
|
||||
b"~\xb5\xcf|\x05\xf4SE1\xddf?\xae\xe5\xfd\x8c\xf0qu\x92sPz`\xa2\xb6"
|
||||
b")\xa1\x08A\x18\xb0>\xc4\t\x17|\xac\xccH\x7f\x85\xd2zCK\xf7\xf5"
|
||||
b'\x12{\x7f_\xc2"\xd6XQ>\x12W1\x06\xbe\xa1\x0f\xf0K\xd9\xaa\x1a\x90'
|
||||
b"\xee\x90U\xf0\xec$\x1a\xc4\xe07\x92\x1f\xc4\xb5g\xebz\x900\x04\xb6"
|
||||
b"\xec\xdd\x19iG\xfc=\xef\x0f\xaap\xb4h\xda\xcak\xf9\xc2\xdf%]\xad"
|
||||
b"\xf5|\x19\xd2\xe46\xb6\x11k#\xf6\xa7t\xc1\xf4\x13B\x08\xeej\xe89"
|
||||
b"\xbe\xfc\xbds\x19\xcf\xe5'\x84P\xf5\xd5\x88\x18\x1d`k\t%\xb9{"
|
||||
b'\xa1\xec&\x9f\xee$R"\x81(\xe25V8m\x84\xa3Qb=CZ\x1d\xc6\xc7{'
|
||||
b'\xc9"\xfcSW\xdb\xce\xd5\x0f%\xff\x85\xbb\xcbS\x83+\x9aA\x1e\xe6uf'
|
||||
b"\xf9\xa8K\xc3(\xaa/\xe8["
|
||||
b"\xa9U|M\x0f\xdb\xea\\\xf5\x06\xbeK\xb67>~\x8a-\x8b\x08\xbc\rV\xbe"
|
||||
b"\xa4=+|\xc6\xc1A\x02Jv\x8e\x99\x89E\xae\xe8\xac1\xb7a\xd9\xdeN"
|
||||
b"\x934\xae\r\x91\xe3\x05M\x04\xb0\xb0-S\xdf\xe3A\x99h\x7fJ\xbf\xcfl"
|
||||
b"\r(s4sj\xe0\x8eD\xc2\xb4\xa3\xb6\x8a\x9f\x0f,"
|
||||
b"\xbeU\xf3\xa0h\xb4\x9b\xf9O\xf20\xdc2\xcf\xd9("
|
||||
b">n'dc\xd9\xce3!z_\x16\xe6\xac\x8cg\x80]["
|
||||
b"n\xe8\xf6\xdb\x92FJ\x19\xd0\xb5\xc4LM\xfb\xaa&\xd9\xfb1\x11l\xb1"
|
||||
b'\x82\xc0\xe0\xf7\x91\xf8c"\xac\xe0\x11\xcd\x11\xd7\xa5\x82M\xf9'
|
||||
b"\x13V\x8b\n\xde7\x87\xbd\xb6\xe4\\z\x15#\xbb\xec\xe3\xe9c{"
|
||||
b"\xd5\xa3\x98\xf5\x0f)\x86W\xf1H\x92DU|I\x0f\x83I\xa9\xe4\x1c\x7f"
|
||||
b"&>\x84\x08>S+H\xf5\xbc\x1c\xfd8\xb8\x19\xda\x08\xb4\x9a\xf9\xc9"
|
||||
b"\x16\x0f\xda\x10\x07\xbd\xb7\x14\x92`\\\xbd=\xe2\xec^\xca\x14Q\x9a"
|
||||
b"\xc4\xdd\xcf\xf8{"
|
||||
b"D\x03\xb3\xb0\xf9\x8c7\x19\xf1\xe2\x07I\xa8/\xc6\x9b\r\x1f\xb87"
|
||||
b"\xe8\x99\xff\xaf\xd7\xe2\x91\xbb\x88\xc2\xaem|\xeb0T}\x83\x80\xe9"
|
||||
b"*D\xb1\xe4\xa5p\xa14\xda\x9d\xeaR\x9f\x0c\xe0\xc5\xb6b\x82\xff\x80"
|
||||
b"\x86J\xa0\xa6Eg\xd3b\x99X\xc3\xb98\xa2\x18\xb8\xe6\xc3\x01T\x8d"
|
||||
b"\xf2b\\\xa5\xa2\xc5\x89\x85\x9c\x1a\r.\xcc\xe1x\x9f\xc3\x10\x7fc"
|
||||
b"\x00'\x10h\x1f\x82\x1e\xcel\xc1\xe3\xe5R<O\x18\xc1f\xee}\xef\xbd"
|
||||
b"\xc5\xe0("
|
||||
b"VjO\x874+\xf2X\x0fWTo\x82\\\x9d/_\x894\xfb6#\xa5\xb4`\xe7\x90O\xf8"
|
||||
b"\xad\xc4R\x97\xe1\x18h\xe5\xb40.\xf7Y\xf3Bp\x82\xf3\x13\xdc\x06"
|
||||
b"/1yB\xe5\xbc_\x016\x00\xf8\xd22\x80\x9d\x94\x08)\xd2\x8d\xf3s2\xa1"
|
||||
b"\x88\xe7\xfbu3Ak\x98\xf3\xf0\x89\x80\xc1\xe1\xa6y\xb4\xe6\xb9\xce"
|
||||
b"\x08&\xef\xd0\x10\xd59\xa3!YS\x9d\x98\x1b\x08\xd7\x8f\xdcA\xb9\xfa"
|
||||
b"\xf6(\xb7Xf\xbbB7\x1a\x9e\xab\x1f\xd7\x01\x9a7\xbe\xe5a\x17\xd2"
|
||||
b"\x9e1+tS "
|
||||
b"\x12\x7f\xc7\xaf\x1d\x95f\xbc\x83\xbb\x86\xff\xac\x8ap\xd0y\xaf$r"
|
||||
b'\x08sh\x81\xd4\x85\xfe\x04\xe3-\xfe?\xa1"\x83m\x19\\u\x13~\xfc\x12'
|
||||
b"\xd3\xa8\x88%\xc9\xc7G\xa2.OH\x133`K)_\xe3\xcd\xfaC*R\xaf\x16\xcf"
|
||||
b"\xb9\x0f\xb7\xb8\xd0\x95\x91\x11\x89o\x16\xdd{"
|
||||
b"E\x01\xa6\xa2\x8d\x8b\xd2\x877`\xd0\xacB\x93e5C\x9d\xcer\x16\xa6"
|
||||
b'\x80\xdfx\x0f\x15\xf0\xc9\x9c\xaey\x8b\x13\x1dE"\xe8^\x9f\x96n'
|
||||
b";\xa8\xf9\x08\x93\xa8\x1fQ\xfa\xa5e\xa2e\xd9\xed\xdfH\x1f\x99\xe6t"
|
||||
b";R\xe5=\xff\x81\xab\xd0\x8d\x85\xc8\x9f\x82\x11 "
|
||||
b"\x03\xa0\x92\xb0\x17\xeb\xda\x14\xeb\x11\xd9\x08b\x0b\xba\x86\xb3U"
|
||||
b"\xf2\xf3\xbdr\t\xc6\x0f\xa8\xd5\x98\xf7\xe5N\xc6\x8d\x8c\x11\xe36"
|
||||
b"\x8c\x10/\x7fG\xd5\x96\x1f\x9d\xdfm\xbd\xcf\x9a:\x0ec\x1d\x88\x94s"
|
||||
b"\x90A\x94\xd0\xde\xe9\xfd\x7f\xf3\xb2\x0b\x16\xeb\x15v "
|
||||
b"A\xa6A\xa9:\xaa>q\x10\xa2=\xe2\x1f\x93\xff\x04\xd8\xd3\x1eL\x8e8W"
|
||||
b"\xef!\x8e\xdb\x14\x1c\xa1tz\xee\xca\x89dA\xe1\xa9K\x96/\x96\xc9YS"
|
||||
b"\xcc\x07vM\xaeCi\xfc\xfdA\x01,"
|
||||
b"\xb0\x06J\xb7\xf5\x84\xf7\x1e\xc6\x05\xc5\tw\x9e\xf4\x0bH~.ah\x04"
|
||||
b"\xce%\xbdK\xc4\xbbM\x82\x0c\xcd\xf4\x99\x9c\xa5^\x97\xfcj\xbe"
|
||||
b'"_\x01\xec('
|
||||
b"\xd4\xb8\xddmF\xe9S\xaa\x92\xdc\xa4a\xee\x02\x84N\xe6\xb1\xc8\x1b"
|
||||
b"\xb0\xb6\x90#>\xaeKk:\xf6\xef\x10\xe8\x03q\xac\\\x19\x1f\x17r\xc7"
|
||||
b"\xdf\xce\x8fC\xd8\xb3C\xf8\x99\xb5\x15\x8a\x9b\xdc\xc0\xd1U\xa7.B"
|
||||
b"\x9c\xb3\xe0G\x90Qf|\x9d\x97v\xfbD\x95B\xf3\xa1\xa6=\x08\xea\xee"
|
||||
b"\xfd\xa9\xaa:\x80\xeb\x992\xcf\x9ed\x16\xd2\x92\xdaW\xd1\xb4P"
|
||||
b'\\\x9e\x9d"\xcb\xc3\xf0Q\xeb\x96\x90*\xaf\xe2{'
|
||||
b"\xf6y\xf6\xc6\x87jM'G\xcb,"
|
||||
b"\x9c\xbb\xcc\xf3\xab\xf4\xd0\xd7\x0c\x98H\n\xbb\xf0\xc2\x16\xe6"
|
||||
b"\xcd\xd8\xa0\x02@6\xcbg\x1a\xc7\x16\xd4r\x0f\xbb\x04\xad\x1dY\xa0"
|
||||
b":\x086d\x10V\xd5\x1cbKA\xb0\xbcjd\x9d8\xfc\xbc~\xeb!\xf8\xf0\xf4"
|
||||
b"\xd2\x06\x9c<\xdcK\xda\xdbi\x1b\xf3\x9d\xdb\x97\xfe\xdfq("
|
||||
b"'\xb8\x8b(\x06o\x06\xba\x9a\x1d\xc6U_<9\x820,~\x92Z^\xf1 "
|
||||
b"\xa0\xa5\xd1\xd4h\xae\x90u\xf5\xe8\x87&\xe9\x94\xec\xa9\xaa\xc7"
|
||||
b"\x7fW\xd5\x99\x86\xa3\xf5rWa\x9f\xbb]D("
|
||||
b"zF\xa9\x04\xa2PZ\\\xe5\xff\xac\xa0\x93xV\x93\x9d\x0e\xe8?\x9d\xa1w"
|
||||
b":m~\x92a\x98I\xdf\xe8\xf3\xae\xed\xf5\xfd("
|
||||
b"rj\xb2\x86\n7@\xe6=\xed\x1b\x91\xe3No\xdf:c\\_\xb4z\xdej\x98\xf4G"
|
||||
b"\xaeES)\xcb\xbeu\xb7\xec\x00t1W("
|
||||
b"J\x85L\xa7\xf8B\x14\xc4w\x99\xbe~\xef\xabp\xf3\x02\xbf!\xd4\xca"
|
||||
b"\xc1U\x13\xf2\xc0k&\xb3V\xc1Bu:\x1f\x910k&*\x84\\r\x1f0\xdc\xd8"
|
||||
b"\x05Kg\xc1e\x125["
|
||||
b"q\x9b\xe9;Hb\x19S\xfcP\xb3\xa7\x88\xcb)P\x1c\xe1\x06F\xc3\xeb\x08"
|
||||
b"\xbd"
|
||||
"QUVTAgAAGM0NKEYTESTURfQlkAcHlBZXNDcnlwdCA2LjAuMACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
|
||||
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
|
||||
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEWlHUF5GTDFdrlGaUbFqGOBHE"
|
||||
"/zlrkug3ee3t1iMe2ByaoBdb9O8X5bFEBUuiPSFUNe3f4YvgwCMx4Txh3Mzx"
|
||||
"/LxxNioWSwon9gDw8JckpuMLJtmtdwDybpDtedF33XWBHgEpMlfyF"
|
||||
"/phin3sVMWGApptTnGbzmP9o0c6toxwmZV5YcHAtoMsWh3WqpsdcmX5PwwrKt0vdYNwpX+bDOxdB7YJizWqYt"
|
||||
"+505168UPbDFHhJ7lCXJ3lr56"
|
||||
"/7ZwNF4NasjqehafV01KtuNhNT47wdyavI8EYGZmBhqVCTq79XzwY1OmqEgpaesaiyeJmeZwkf5/8OVYNEhA+ybixHF"
|
||||
"/RCeBSUnjiTHRF+RyIX8OfY"
|
||||
"/LTPNmpjbLcZ1fyP5F1VVwlNLeY1MBg3q0tzFy4NsgsvHdWAzeb1wCqAnKZrhCQ36DAaWrzH96tG4ARIFLqg1"
|
||||
"+99b3Gk27UBGjYSfcTRTUU+tmj+ByfHk3DCVeX35MOFBWu7BCrw99PdlHdhIyGVE4pKgTj"
|
||||
"+sKvQI60cUNznxk484dkbpKG7gQH7PHaf7xTYd543ByAs9LSIHjV3UBG"
|
||||
"/h9DzlLlNl8sZgwwnQxE69yoPy4Nr9unbav4dGqXNWFkyTlqZfJ0GzzvhPL2DRRX0V18CuerYEdIv"
|
||||
"/a7dh8cuy7CVVZ7BEG59INVkpo8XwJIFHJjQzvD+gUWQ4zXB+C15AogGCx"
|
||||
"/7jWLAdpi36VjA03Avl6rxui55akq3d3gtsn0bSxmrhCgDteNB+x1"
|
||||
"+r0WzN1gz4qsY8EejbGmgzJMC8l6TZFudU9FCpTy7XSQJlJ70Peg"
|
||||
"/huVdayRYrzeuHb7j8XMXnyBiab19CUQ5q5u6kiRTl3X1umCK1Wkqk3CItpsbuPlXs7"
|
||||
"+f3qNhf2ilVtsYKtNEnbY7HGo1e8nziV3ifa1YYNxOTD23A/UGpXHVm0aaXE8ywMFOqXIgjs30oYv5GFQ7L1DT"
|
||||
"/ktL0a2u4ZFtFZq+6TS52+COU9bkwX+zVvKehiMf+xBINpW0+I1yEUTSr9vvpYmxi1ZY2DLzXm75vWXu5uQA"
|
||||
"/pciFJiuAhfCn+DJFUHsT0LcMjHcnbtYrX8iqIPZpJMXAzhNNKBiq5pZMCfBvxLr5cOQLADj30TyrEpT+h"
|
||||
"+YCDx1hVgDnoEeihpQotc3P5gQf50fJ5K236JSszgXPhZVTCc2GO7y9cVmE9OYUEgD3hDOODNN/3t8xXImVDHG"
|
||||
"+h6TVhi7rKUdap767GQ1b4TUnolx3"
|
||||
"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"
|
||||
"+KMo2IbesHjbswZfUpvw"
|
||||
)
|
||||
|
|
|
@ -1,14 +1,13 @@
|
|||
import json
|
||||
import os
|
||||
|
||||
import pytest
|
||||
from tests.unit_tests.monkey_island.cc.services.utils.cyphertexts_for_encryption_test import (
|
||||
MALFORMED_CYPHER_TEXT_CORRUPTED,
|
||||
MALFORMED_CYPHER_TEXT_TOO_SHORT,
|
||||
)
|
||||
|
||||
from common.utils.exceptions import InvalidCredentialsError, NoCredentialsError
|
||||
from monkey_island.cc.services.utils.config_encryption import decrypt_config, encrypt_config
|
||||
from monkey_island.cc.services.utils.config_encryption import (
|
||||
InvalidCredentialsError,
|
||||
decrypt_config,
|
||||
encrypt_config,
|
||||
)
|
||||
|
||||
MONKEY_CONFIGS_DIR_PATH = "monkey_configs"
|
||||
STANDARD_PLAINTEXT_MONKEY_CONFIG_FILENAME = "monkey_config_standard.json"
|
||||
|
@ -16,37 +15,23 @@ PASSWORD = "hello123"
|
|||
INCORRECT_PASSWORD = "goodbye321"
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def plaintext_config(data_for_tests_dir):
|
||||
plaintext_monkey_config_standard_path = os.path.join(
|
||||
data_for_tests_dir, MONKEY_CONFIGS_DIR_PATH, STANDARD_PLAINTEXT_MONKEY_CONFIG_FILENAME
|
||||
)
|
||||
plaintext_config = json.loads(open(plaintext_monkey_config_standard_path, "r").read())
|
||||
return plaintext_config
|
||||
def test_encrypt_decrypt_config(monkey_config):
|
||||
encrypted_config = encrypt_config(monkey_config, PASSWORD)
|
||||
assert decrypt_config(encrypted_config, PASSWORD) == monkey_config
|
||||
|
||||
|
||||
def test_encrypt_decrypt_config(plaintext_config):
|
||||
encrypted_config = encrypt_config(plaintext_config, PASSWORD)
|
||||
assert decrypt_config(encrypted_config, PASSWORD) == plaintext_config
|
||||
|
||||
|
||||
def test_encrypt_decrypt_config__wrong_password(plaintext_config):
|
||||
encrypted_config = encrypt_config(plaintext_config, PASSWORD)
|
||||
def test_encrypt_decrypt_config__wrong_password(monkey_config):
|
||||
encrypted_config = encrypt_config(monkey_config, PASSWORD)
|
||||
with pytest.raises(InvalidCredentialsError):
|
||||
decrypt_config(encrypted_config, INCORRECT_PASSWORD)
|
||||
|
||||
|
||||
def test_encrypt_decrypt_config__malformed_too_short():
|
||||
with pytest.raises(ValueError):
|
||||
decrypt_config(MALFORMED_CYPHER_TEXT_TOO_SHORT, PASSWORD)
|
||||
|
||||
|
||||
def test_encrypt_decrypt_config__malformed_corrupted():
|
||||
with pytest.raises(ValueError):
|
||||
decrypt_config(MALFORMED_CYPHER_TEXT_CORRUPTED, PASSWORD)
|
||||
|
||||
|
||||
def test_encrypt_decrypt_config__decrypt_no_password(plaintext_config):
|
||||
encrypted_config = encrypt_config(plaintext_config, PASSWORD)
|
||||
with pytest.raises(NoCredentialsError):
|
||||
def test_encrypt_decrypt_config__decrypt_no_password(monkey_config):
|
||||
encrypted_config = encrypt_config(monkey_config, PASSWORD)
|
||||
with pytest.raises(InvalidCredentialsError):
|
||||
decrypt_config(encrypted_config, "")
|
||||
|
|
Loading…
Reference in New Issue