From 262619461d887c5d3c79854e8cd8fe7939156ac5 Mon Sep 17 00:00:00 2001 From: sangge <2251250136@qq.com> Date: Thu, 26 Oct 2023 08:20:53 +0800 Subject: [PATCH 1/2] feat: update demo code --- src/demo.py | 93 +++++++++++++++++++++++++++++------------------------ 1 file changed, 51 insertions(+), 42 deletions(-) diff --git a/src/demo.py b/src/demo.py index 7c077b5..0f0646a 100644 --- a/src/demo.py +++ b/src/demo.py @@ -1,51 +1,60 @@ from tpre import * import time -# 1 -start_time = time.time() -pk_a, sk_a = GenerateKeyPair() -m = b"hello world" -end_time = time.time() -elapsed_time = end_time - start_time -print(f"代码块1运行时间:{elapsed_time}秒") +for N in range(4,21,4): + # N = 10 + # T = 5 + T = N // 2 + print(f"当前门限值: N = {N}, T = {T}") + + start_total_time = time.time() + # 1 + start_time = time.time() + pk_a, sk_a = GenerateKeyPair() + m = b"hello world" + end_time = time.time() + elapsed_time = end_time - start_time + print(f"密钥生成运行时间:{elapsed_time}秒") -# 2 -start_time = time.time() -capsule_ct = Encrypt(pk_a, m) -end_time = time.time() -elapsed_time = end_time - start_time -print(f"代码块2运行时间:{elapsed_time}秒") + # 2 + start_time = time.time() + capsule_ct = Encrypt(pk_a, m) + end_time = time.time() + elapsed_time = end_time - start_time + print(f"加密算法运行时间:{elapsed_time}秒") -# 3 -pk_b, sk_b = GenerateKeyPair() + # 3 + pk_b, sk_b = GenerateKeyPair() -N = 10 -T = 5 + + # 5 + start_time = time.time() + id_tuple = tuple(range(N)) + rekeys = GenerateReKey(sk_a, pk_b, N, T, id_tuple) + end_time = time.time() + elapsed_time = end_time - start_time + print(f"重加密密钥生成算法运行时间:{elapsed_time}秒") -# 5 -start_time = time.time() -id_tuple = tuple(range(N)) -rekeys = GenerateReKey(sk_a, pk_b, N, T, id_tuple) -end_time = time.time() -elapsed_time = end_time - start_time -print(f"代码块5运行时间:{elapsed_time}秒") + # 7 + start_time = time.time() + cfrag_cts = [] -# 7 -start_time = time.time() -cfrag_cts = [] + for rekey in rekeys: + cfrag_ct = ReEncrypt(rekey, capsule_ct) + cfrag_cts.append(cfrag_ct) + end_time = time.time() + elapsed_time = (end_time - start_time) / len(rekeys) + print(f"重加密算法运行时间:{elapsed_time}秒") -for rekey in rekeys: - cfrag_ct = ReEncrypt(rekey, capsule_ct) - cfrag_cts.append(cfrag_ct) -end_time = time.time() -elapsed_time = end_time - start_time -print(f"代码块7运行时间:{elapsed_time}秒") - -# 9 -start_time = time.time() -cfrags = mergecfrag(cfrag_cts) -m = DecryptFrags(sk_b, pk_b, pk_a, cfrags) -end_time = time.time() -elapsed_time = end_time - start_time -print(f"代码块9运行时间:{elapsed_time}秒") -print(m) + # 9 + start_time = time.time() + cfrags = mergecfrag(cfrag_cts) + m = DecryptFrags(sk_b, pk_b, pk_a, cfrags) + end_time = time.time() + elapsed_time = end_time - start_time + end_total_time = time.time() + total_time = end_total_time - start_total_time + print(f"解密算法运行时间:{elapsed_time}秒") + print("成功解密:", m) + print(f"算法总运行时间:{total_time}秒") + print() From bdd2aa5b238220fb32d6c4abaa973ed9c2e484f3 Mon Sep 17 00:00:00 2001 From: Smart-SangGe <2251250136@qq.com> Date: Thu, 26 Oct 2023 08:28:39 +0800 Subject: [PATCH 2/2] feat: update --- README_en.md | 1 + doc/README_app_en.md | 11 ++++-- src/client.ini | 2 +- src/client.py | 85 +++++++++++++++++++++++++------------------- src/node.py | 6 ++-- src/server.py | 2 +- src/testfile | 1 - 7 files changed, 64 insertions(+), 44 deletions(-) delete mode 100644 src/testfile diff --git a/README_en.md b/README_en.md index a0d9bbd..2ec2728 100644 --- a/README_en.md +++ b/README_en.md @@ -52,6 +52,7 @@ pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple ### Use base image and build yourself ```bash +docker build . -f basedockerfile -t git.mamahaha.work/sangge/tpre:base docker pull git.mamahaha.work/sangge/tpre:base docker build . -t your_image_name docker run your_image_name diff --git a/doc/README_app_en.md b/doc/README_app_en.md index dc3b4df..d24eab1 100644 --- a/doc/README_app_en.md +++ b/doc/README_app_en.md @@ -10,11 +10,18 @@ pr docker run -it -p 8000:8000 -p 8001:8001 -p 8002:8002 -v ~/mimajingsai:/app -e HOST_IP=110.41.130.197 git.mamahaha.work/sangge/tpre:base bash -tpre3: docker run -it -p 8000:8000 -p 8001:8001 -p 8002:8002 -v ~/mimajingsai:/app -e HOST_IP=110.41.21.35 git.mamahaha.work/sangge/tpre:base bash +tpre3: docker run -it -p 8000:8000 -p 8001:8001 -p 8002:8002 -v ~/mimajingsai:/app -e HOST_IP=60.204.233.103 git.mamahaha.work/sangge/tpre:base bash 110.41.155.96 tpre1 110.41.130.197 tpre2 110.41.21.35 tpre3 -python client_cli.py 110.41.21.35 aaa \ No newline at end of file +python client_cli.py 110.41.21.35 aaa + + +apt update && apt install docker.io mosh -y + +60.204.236.38 tpre1 +1.94.42.18 tpre2 +60.204.233.103 tpre3 diff --git a/src/client.ini b/src/client.ini index cd80a83..02be9e6 100644 --- a/src/client.ini +++ b/src/client.ini @@ -1,3 +1,3 @@ [settings] -server_address = 110.41.155.96:8000 +server_address = 60.204.236.38:8000 version = 1.0 diff --git a/src/client.py b/src/client.py index ba974df..1b42dda 100644 --- a/src/client.py +++ b/src/client.py @@ -12,6 +12,8 @@ import time import base64 import json import pickle +from fastapi.responses import JSONResponse + @asynccontextmanager @@ -64,7 +66,8 @@ def init_db(): CREATE TABLE IF NOT EXISTS senderinfo ( id INTEGER PRIMARY KEY, ip TEXT, - publickey TEXT, + pkx TEXT, + pky TEXT, threshold INTEGER ) """ @@ -88,6 +91,7 @@ def init_config(): def clean_env(): with sqlite3.connect("client.db") as db: db.execute("DELETE FROM node") + db.execute("DELETE FROM message") db.commit() print("Exit app") @@ -127,9 +131,6 @@ async def receive_messages(message: C): # insert record into database with sqlite3.connect("client.db") as db: try: - print("bin:", bin_C_capsule) - print("ct:", C_ct) - print("ip:", ip) db.execute( """ INSERT INTO message @@ -151,9 +152,15 @@ async def receive_messages(message: C): # check record count async def check_merge(ct: int, ip: str): global sk, pk, node_response, message + """ + CREATE TABLE IF NOT EXISTS senderinfo ( + id INTEGER PRIMARY KEY, + ip TEXT, + publickey TEXT, + threshold INTEGER + ) + """ with sqlite3.connect("client.db") as db: - print("str(ct):", str(ct)) - print("ip:", ip) # Check if the combination of ct_column and ip_column appears more than once. cursor = db.execute( """ @@ -166,16 +173,6 @@ async def check_merge(ct: int, ip: str): # [(capsule, ct), ...] cfrag_cts = cursor.fetchall() - cursor = db.execute( - """ - SELECT publickey, threshold - FROM senderinfo - WHERE ip = ? - """, - ('127.1.1'), - ) - result = cursor.fetchall() - # get T cursor = db.execute( """ @@ -183,13 +180,16 @@ async def check_merge(ct: int, ip: str): FROM senderinfo WHERE ip = ? """, - (ip), + (ip,), ) result = cursor.fetchall() - print("maybe error here?") - pk_sender, T = result[0] # result[0] = (pk, threshold) + try: + pk_sender, T = result[0] # result[0] = (pk, threshold) + except: + pk_sender, T = 0, -1 - if len(cfrag_cts) >= T: + if len(cfrag_cts) <= T: + print(T) # Deserialization temp_cfrag_cts = [] for i in cfrag_cts: @@ -260,7 +260,7 @@ async def request_message(i_m: Request_Message): message_name = i_m.message_name source_ip = get_own_ip() dest_port = "8002" - url = "http://" + dest_ip + ":" + dest_port + "/recieve_request" + url = "http://" + dest_ip + ":" + dest_port + "/receive_request" payload = { "dest_ip": dest_ip, "message_name": message_name, @@ -268,19 +268,25 @@ async def request_message(i_m: Request_Message): "pk": pk, } try: - response = requests.post(url, json=payload, timeout=3) - print(response.text) + response = requests.post(url, json=payload, timeout=1) + # print("menxian and pk", response.text) - except: + except requests.Timeout: print("can't post") - return {"message": "can't post"} + # content = {"message": "post timeout", "error": str(e)} + # return JSONResponse(content, status_code=400) try: + url = "http://" + dest_ip + ":" + dest_port + "/get_pk" + print(url) + response = requests.get(url,timeout=4) + print(response.text) if response.status_code == 200: data = response.json() - public_key = int(data["public_key"]) - threshold = int(data["threshold"]) - print(data) + pkx = int(data["pkx"]) + pky = int(data["pky"]) + public_key = (pkx, pky) + threshold = 2 with sqlite3.connect("client.db") as db: db.execute( """ @@ -291,11 +297,12 @@ async def request_message(i_m: Request_Message): """, (str(dest_ip), public_key, threshold), ) - except: + except Exception as e: print("Database error") - return {"message": "Database Error"} + content = {"message": "Database Error","error": str(e)} + return JSONResponse(content, status_code=400) - # wait 10s to recieve message from nodes + # wait 3s to receive message from nodes for _ in range(3): if node_response: data = message @@ -307,12 +314,13 @@ async def request_message(i_m: Request_Message): # return message to frontend return {"message": data} time.sleep(1) - return {"message": "recieve timeout"} + content = {"message": "receive timeout"} + return JSONResponse(content, status_code=400) -# recieve request from others -@app.post("/recieve_request") -async def recieve_request(i_m: IP_Message): +# receive request from others +@app.post("/receive_request") +async def receive_request(i_m: IP_Message): global pk source_ip = get_own_ip() if source_ip != i_m.dest_ip: @@ -373,6 +381,11 @@ def get_node_list(count: int, server_addr: str): print("Success add node ip") else: print("Failed:", response.status_code, response.text) + +@app.get("/get_pk") +async def get_pk(): + global pk + return {"pkx": str(pk[0]), "pky": str(pk[1])} pk = point @@ -385,4 +398,4 @@ local_ip = get_own_ip() if __name__ == "__main__": import uvicorn # pylint: disable=e0401 - uvicorn.run("client:app", host="0.0.0.0", port=8002, reload=True) + uvicorn.run("client:app", host="0.0.0.0", port=8002, reload=True,log_level="debug") diff --git a/src/node.py b/src/node.py index 4302cfb..0388e57 100644 --- a/src/node.py +++ b/src/node.py @@ -18,7 +18,7 @@ async def lifespan(app: FastAPI): app = FastAPI(lifespan=lifespan) -server_address = "http://110.41.155.96:8000/server" +server_address = "http://60.204.236.38:8000/server" id = 0 ip = "" client_ip_src = "" # 发送信息用户的ip @@ -59,7 +59,7 @@ def clear(): async def send_heartbeat_internal() -> None: - timeout = 3 + timeout = 30 global ip url = server_address + "/heartbeat?ip=" + ip while True: @@ -120,4 +120,4 @@ async def send_user_des_message(source_ip: str, dest_ip: str, re_message): # if __name__ == "__main__": import uvicorn # pylint: disable=e0401 - uvicorn.run("node:app", host="0.0.0.0", port=8001, reload=True) + uvicorn.run("node:app", host="0.0.0.0", port=8001, reload=True,log_level="debug") diff --git a/src/server.py b/src/server.py index 6060f17..f0530cf 100644 --- a/src/server.py +++ b/src/server.py @@ -110,7 +110,7 @@ async def receive_heartbeat(ip: str): async def receive_heartbeat_internal(): while 1: - timeout = 7 + timeout = 70 # 删除超时的节点 cursor.execute("DELETE FROM nodes WHERE last_heartbeat < ?", (time.time() - timeout,)) conn.commit() diff --git a/src/testfile b/src/testfile deleted file mode 100644 index ff6c384..0000000 --- a/src/testfile +++ /dev/null @@ -1 +0,0 @@ -123565432 \ No newline at end of file