TKK_E32232028/.venv/lib/python3.10/site-packages/tests/test_keys.py

63 lines
1.8 KiB
Python

# 3rd party dependencies
from lightphe import LightPHE
# project dependencies
from lightphe.commons.logger import Logger
logger = Logger(module="tests/test_keys.py")
def test_key_restoration():
algorithms = [
"RSA",
"ElGamal",
"Exponential-ElGamal",
"Paillier",
"Damgard-Jurik",
"Okamoto-Uchiyama",
"Benaloh",
"Naccache-Stern",
"Goldwasser-Micali",
"EllipticCurve-ElGamal",
]
for algorithm_name in algorithms:
private_key_file = f"/tmp/{algorithm_name}_secret.json"
public_key_file = f"/tmp/{algorithm_name}_public.json"
onprem_cs = LightPHE(algorithm_name=algorithm_name, key_size=37)
onprem_cs.export_keys(private_key_file)
onprem_cs.export_keys(public_key_file, public=True)
del onprem_cs
cloud_cs = LightPHE(algorithm_name=algorithm_name, key_file=public_key_file)
m1 = 217
m2 = 23
k = 3
c1 = cloud_cs.encrypt(m1)
c2 = cloud_cs.encrypt(m2)
if algorithm_name in ["RSA", "ElGamal"]:
c3 = c1 * c2
elif algorithm_name in ["Goldwasser-Micali"]:
c3 = c1 ^ c2
else:
c3 = c1 + c2
c4 = k * c1
# restore on prem cryptosystem
onprem_cs = LightPHE(algorithm_name=algorithm_name, key_file=private_key_file)
if algorithm_name in ["RSA", "ElGamal"]:
assert onprem_cs.decrypt(c3) == m1 * m2
elif algorithm_name in ["Goldwasser-Micali"]:
assert onprem_cs.decrypt(c3) == m1 ^ m2
else:
assert onprem_cs.decrypt(c3) == m1 + m2
assert onprem_cs.decrypt(c4) == k * m1
logger.info(f"✅ Key restoration test succeeded for {algorithm_name}")