201 lines
4.9 KiB
Python
201 lines
4.9 KiB
Python
"""Test the encryption of a simple python module and its execution."""
|
|
|
|
import os
|
|
import sys
|
|
import subprocess
|
|
from pathlib import Path
|
|
|
|
|
|
def test_encrypt_and_run_simple_module(
|
|
simple_python_module: Path,
|
|
tmp_dir: Path,
|
|
password: str,
|
|
aad: str,
|
|
) -> None:
|
|
"""Test encrypting a simple hello world module.
|
|
|
|
Args:
|
|
simple_python_module (Path): Path to the simple python module.
|
|
tmp_dir (Path): Temporary directory for test files.
|
|
password (str): The test password.
|
|
aad (str): Additional authenticated data.
|
|
"""
|
|
|
|
encrypted_file = tmp_dir / "encrypted.pec"
|
|
|
|
# Encrypt the simple python module
|
|
encrypt_args = [
|
|
sys.executable,
|
|
"-m",
|
|
"python_encrypt_code",
|
|
"encrypt",
|
|
str(simple_python_module),
|
|
"-o",
|
|
str(encrypted_file),
|
|
"-p",
|
|
password,
|
|
"-aad",
|
|
aad,
|
|
]
|
|
subprocess.run(
|
|
args=encrypt_args,
|
|
check=True,
|
|
)
|
|
|
|
# Verify that the encrypted file was created
|
|
assert encrypted_file.exists()
|
|
|
|
# Store password and AAD in environment variables
|
|
# for the PasswordProviderExample used by the subprocesses
|
|
env = {**os.environ}
|
|
env["PEC_PASSWORD"] = password
|
|
env["PEC_AAD"] = aad
|
|
|
|
# Run the encrypted module with environment set
|
|
run_args = [
|
|
sys.executable,
|
|
"-m",
|
|
"python_encrypt_code",
|
|
"run-insecure",
|
|
str(encrypted_file),
|
|
"--script",
|
|
"hello_world.py",
|
|
]
|
|
result = subprocess.run(
|
|
args=run_args,
|
|
check=True,
|
|
capture_output=True,
|
|
text=True,
|
|
env=env,
|
|
)
|
|
|
|
# Verify output
|
|
assert "Hello, World!" in result.stdout
|
|
|
|
|
|
def test_run_with_wrong_password(
|
|
simple_python_module: Path,
|
|
tmp_dir: Path,
|
|
password: str,
|
|
aad: str,
|
|
wrong_password: str,
|
|
) -> None:
|
|
"""Test encrypting a simple hello world module and attempting to run it with a wrong password.
|
|
|
|
Args:
|
|
simple_python_module (Path): Path to the simple python module.
|
|
tmp_dir (Path): Temporary directory for test files.
|
|
"""
|
|
|
|
encrypted_file = tmp_dir / "encrypted_wrong_password.pec"
|
|
assert password != wrong_password, "Test setup error: passwords should differ."
|
|
|
|
# Encrypt the folder containing the hello world module
|
|
encrypt_args = [
|
|
sys.executable,
|
|
"-m",
|
|
"python_encrypt_code",
|
|
"encrypt",
|
|
str(simple_python_module),
|
|
"-o",
|
|
str(encrypted_file),
|
|
"-p",
|
|
password,
|
|
"-aad",
|
|
aad,
|
|
]
|
|
subprocess.run(encrypt_args, check=True)
|
|
|
|
# Verify that the encrypted file was created
|
|
assert encrypted_file.exists()
|
|
|
|
# Store wrong password and AAD in environment variables for the subprocesses
|
|
env = {**os.environ}
|
|
env["PEC_PASSWORD"] = wrong_password
|
|
env["PEC_AAD"] = aad
|
|
|
|
# Run the encrypted module with the wrong password
|
|
run_args = [
|
|
sys.executable,
|
|
"-m",
|
|
"python_encrypt_code",
|
|
"run-insecure",
|
|
str(encrypted_file),
|
|
"--script",
|
|
"hello_world.py",
|
|
]
|
|
result = subprocess.run(
|
|
args=run_args,
|
|
check=False,
|
|
capture_output=True,
|
|
text=True,
|
|
)
|
|
|
|
# Verify that an error message is in the output
|
|
assert "Error" in result.stderr
|
|
|
|
|
|
def test_run_with_wrong_aad(
|
|
simple_python_module: Path,
|
|
tmp_dir: Path,
|
|
password: str,
|
|
aad: str,
|
|
wrong_aad: str,
|
|
) -> None:
|
|
"""Test encrypting a simple hello world module and attempting to run it with wrong AAD.
|
|
|
|
Args:
|
|
simple_python_module (Path): Path to the simple python module.
|
|
tmp_dir (Path): Temporary directory for test files.
|
|
"""
|
|
|
|
encrypted_file = tmp_dir / "encrypted_wrong_aad.pec"
|
|
assert aad != wrong_aad, "Test setup error: AADs should differ."
|
|
|
|
# Encrypt the folder containing the hello world module
|
|
encrypt_args = [
|
|
sys.executable,
|
|
"-m",
|
|
"python_encrypt_code",
|
|
"encrypt",
|
|
str(simple_python_module),
|
|
"-o",
|
|
str(encrypted_file),
|
|
"-p",
|
|
password,
|
|
"-aad",
|
|
aad,
|
|
]
|
|
subprocess.run(
|
|
args=encrypt_args,
|
|
check=True,
|
|
)
|
|
|
|
# Verify that the encrypted file was created
|
|
assert encrypted_file.exists()
|
|
|
|
# Store wrong password and AAD in environment variables for the subprocesses
|
|
env = {**os.environ}
|
|
env["PEC_PASSWORD"] = password
|
|
env["PEC_AAD"] = wrong_aad
|
|
|
|
# Run the encrypted module with the wrong AAD
|
|
run_args = [
|
|
sys.executable,
|
|
"-m",
|
|
"python_encrypt_code",
|
|
"run-insecure",
|
|
str(encrypted_file),
|
|
"--script",
|
|
"hello_world.py",
|
|
]
|
|
result = subprocess.run(
|
|
args=run_args,
|
|
check=False,
|
|
capture_output=True,
|
|
text=True,
|
|
)
|
|
|
|
# Verify that an error message is in the output
|
|
assert "Error" in result.stderr
|