47 lines
1.3 KiB
Python
47 lines
1.3 KiB
Python
import os
|
|
import json
|
|
import socket
|
|
import base64
|
|
import hashlib
|
|
from datetime import datetime
|
|
from Crypto.PublicKey import RSA, ElGamal
|
|
from Crypto.Random import get_random_bytes
|
|
from Crypto.Util.number import inverse, GCD
|
|
from Crypto.Cipher import AES, PKCS1_OAEP
|
|
from phe import paillier
|
|
|
|
SERVER_HOST = "127.0.0.1"
|
|
SERVER_PORT = 5000
|
|
INPUT_DIR = "inputdata"
|
|
KEYS_DIR = "client_keys"
|
|
|
|
server_info = {} # filled by get_public_info
|
|
cached_paillier_pub = None
|
|
|
|
def ensure_dirs():
|
|
os.makedirs(INPUT_DIR, exist_ok=True)
|
|
os.makedirs(KEYS_DIR, exist_ok=True)
|
|
|
|
def b64e(b: bytes) -> str:
|
|
return base64.b64encode(b).decode()
|
|
|
|
def b64d(s: str) -> bytes:
|
|
return base64.b64decode(s.encode())
|
|
|
|
def send_request(action, role, body):
|
|
req = {"action": action, "role": role, "body": body}
|
|
with socket.create_connection((SERVER_HOST, SERVER_PORT), timeout=5) as s:
|
|
s.sendall((json.dumps(req) + "\n").encode())
|
|
data = s.recv(1024*1024)
|
|
resp = json.loads(data.decode())
|
|
if resp.get("status") != "ok":
|
|
print("server error:", resp.get("error"))
|
|
return None
|
|
return resp.get("data") if "data" in resp else {}
|
|
|
|
def get_public_info():
|
|
global server_info, cached_paillier_pub
|
|
data = send_request("get result:")
|
|
if data is None:
|
|
|
|
def rs
|