From cbc01940376a1f13757db37d034ca4779e3c3e96 Mon Sep 17 00:00:00 2001 From: sangge <2251250136@qq.com> Date: Wed, 25 Oct 2023 09:16:46 +0800 Subject: [PATCH 01/13] feat: add ci --- .gitea/workflow/ci.yaml | 29 +++++++++++++++++++++++++++++ doc/README_app_en.md | 4 ++-- 2 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 .gitea/workflow/ci.yaml diff --git a/.gitea/workflow/ci.yaml b/.gitea/workflow/ci.yaml new file mode 100644 index 0000000..4ab431d --- /dev/null +++ b/.gitea/workflow/ci.yaml @@ -0,0 +1,29 @@ +name: Deploy App + +on: + push: + branches: + - main + +jobs: + deploy: + name: Deploy to Web Server + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v2 + + + - name: copy file via ssh password + uses: appleboy/scp-action@v0.1.4 + with: + host: "110.41.155.96,110.41.130.197,110.41.21.35" + username: ${{ secrets.USERNAME }} + password: ${{ secrets.PASSWORD }} + port: ${{ secrets.PORT }} + source: "src/server.py,src/client.py,src/node.py" + target: /root/mimajingsai/src/ + + + diff --git a/doc/README_app_en.md b/doc/README_app_en.md index 88141d1..839dda2 100644 --- a/doc/README_app_en.md +++ b/doc/README_app_en.md @@ -7,10 +7,10 @@ get method pr -docker run --rm -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 +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 --rm -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=110.41.21.35 git.mamahaha.work/sangge/tpre:base bash 110.41.155.96 tpre1 From 961e881c874ee8952c794311d0a80ef3e5eba039 Mon Sep 17 00:00:00 2001 From: sangge <2251250136@qq.com> Date: Wed, 25 Oct 2023 09:19:27 +0800 Subject: [PATCH 02/13] fix: rename folder --- .gitea/{workflow => workflows}/ci.yaml | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .gitea/{workflow => workflows}/ci.yaml (100%) diff --git a/.gitea/workflow/ci.yaml b/.gitea/workflows/ci.yaml similarity index 100% rename from .gitea/workflow/ci.yaml rename to .gitea/workflows/ci.yaml From 52a70c5ed1f3ada783893dac680e0e24785c7ff5 Mon Sep 17 00:00:00 2001 From: sangge <2251250136@qq.com> Date: Wed, 25 Oct 2023 09:20:39 +0800 Subject: [PATCH 03/13] fix: use checkout v3 --- .gitea/workflows/ci.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitea/workflows/ci.yaml b/.gitea/workflows/ci.yaml index 4ab431d..cb96a82 100644 --- a/.gitea/workflows/ci.yaml +++ b/.gitea/workflows/ci.yaml @@ -12,7 +12,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: copy file via ssh password From e6dfd179d442cfac16860397fba2c572e043a17a Mon Sep 17 00:00:00 2001 From: sangge <2251250136@qq.com> Date: Wed, 25 Oct 2023 09:35:12 +0800 Subject: [PATCH 04/13] test: add quote --- .gitea/workflows/ci.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitea/workflows/ci.yaml b/.gitea/workflows/ci.yaml index cb96a82..ac3ab6a 100644 --- a/.gitea/workflows/ci.yaml +++ b/.gitea/workflows/ci.yaml @@ -23,7 +23,7 @@ jobs: password: ${{ secrets.PASSWORD }} port: ${{ secrets.PORT }} source: "src/server.py,src/client.py,src/node.py" - target: /root/mimajingsai/src/ + target: "/root/mimajingsai/src/" From b63bd8cca5ed1018a80bb105a28a8585a6b932b5 Mon Sep 17 00:00:00 2001 From: sangge <2251250136@qq.com> Date: Wed, 25 Oct 2023 09:37:13 +0800 Subject: [PATCH 05/13] test: test --- .gitea/workflows/ci.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/.gitea/workflows/ci.yaml b/.gitea/workflows/ci.yaml index ac3ab6a..a823d44 100644 --- a/.gitea/workflows/ci.yaml +++ b/.gitea/workflows/ci.yaml @@ -21,7 +21,6 @@ jobs: host: "110.41.155.96,110.41.130.197,110.41.21.35" username: ${{ secrets.USERNAME }} password: ${{ secrets.PASSWORD }} - port: ${{ secrets.PORT }} source: "src/server.py,src/client.py,src/node.py" target: "/root/mimajingsai/src/" From c51ce81ea1fddcabf43edd484e4dd722ed6b8c0a Mon Sep 17 00:00:00 2001 From: Smart-SangGe <2251250136@qq.com> Date: Wed, 25 Oct 2023 10:24:25 +0800 Subject: [PATCH 06/13] fix: add dest port --- src/node.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/node.py b/src/node.py index 3998ada..540e2de 100644 --- a/src/node.py +++ b/src/node.py @@ -109,9 +109,9 @@ async def send_user_des_message(source_ip: str, dest_ip: str, re_message): # # 发送 HTTP POST 请求 response = requests.post( - "http://" + dest_ip + "/receive_messages", json=data + "http://" + dest_ip+ ":8002" + "/receive_messages", json=data ) - print(response) + print(response.text) if __name__ == "__main__": From 7e7c5bb3fcdf6965e7323bd18b87c67bb217f334 Mon Sep 17 00:00:00 2001 From: Smart-SangGe <2251250136@qq.com> Date: Wed, 25 Oct 2023 10:52:25 +0800 Subject: [PATCH 07/13] test: test --- src/client.py | 9 +++++---- src/node.py | 6 ++++-- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/client.py b/src/client.py index c9d270a..d9f9c58 100644 --- a/src/client.py +++ b/src/client.py @@ -112,8 +112,8 @@ async def receive_messages(message: C): return: status_code """ - a,b = message.Tuple - C_tuple = (a, b.to_bytes(32)) + a, b = message.Tuple + C_tuple = (a, b) ip = message.ip if not C_tuple or not ip: raise HTTPException(status_code=400, detail="Invalid input data") @@ -198,14 +198,15 @@ async def send_messages( rk_list = GenerateReKey(sk, pk_B, len(node_ips), shreshold, tuple(id_list)) # type: ignore capsule, ct = Encrypt(pk, message) # type: ignore - capsule_ct = (capsule, int.from_bytes(ct)) + #capsule_ct = (capsule, int.from_bytes(ct)) for i in range(len(node_ips)): url = "http://" + node_ips[i][0] + ":8001" + "/user_src" payload = { "source_ip": local_ip, "dest_ip": dest_ip, - "capsule_ct": capsule_ct, + "capsule": capsule, + "ct": int.from_bytes(ct), "rk": rk_list[i], } print(payload) diff --git a/src/node.py b/src/node.py index 0644121..76eff38 100644 --- a/src/node.py +++ b/src/node.py @@ -76,7 +76,8 @@ async def send_heartbeat_internal() -> None: class Req(BaseModel): source_ip: str dest_ip: str - capsule_ct: Tuple[capsule, int] + capsule: capsule + ct: int rk: Any @@ -94,7 +95,8 @@ async def user_src(message: Req): """ source_ip = message.source_ip dest_ip = message.dest_ip - capsule, ct = message.capsule_ct + capsule = message.capsule + ct = message.ct capsule_ct = (capsule, ct.to_bytes(32)) rk = message.rk From c08314004d078a2df3f3721fc867e63f8cc603bc Mon Sep 17 00:00:00 2001 From: Smart-SangGe <2251250136@qq.com> Date: Wed, 25 Oct 2023 11:31:05 +0800 Subject: [PATCH 08/13] fix: update type --- src/tpre.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/tpre.py b/src/tpre.py index 3019cd0..0cbaa7c 100644 --- a/src/tpre.py +++ b/src/tpre.py @@ -341,7 +341,7 @@ def Checkcapsule(capsule: capsule) -> bool: # 验证胶囊的有效性 return flag -def ReEncapsulate(kFrag: list, capsule: capsule) -> Tuple[point, point, int, point]: +def ReEncapsulate(kFrag: tuple, capsule: capsule) -> Tuple[point, point, int, point]: id, rk, Xa, U1 = kFrag E, V, s = capsule if not Checkcapsule(capsule): @@ -355,7 +355,7 @@ def ReEncapsulate(kFrag: list, capsule: capsule) -> Tuple[point, point, int, poi def ReEncrypt( - kFrag: list, C: Tuple[capsule, bytes] + kFrag: tuple, C: Tuple[capsule, bytes] ) -> Tuple[Tuple[point, point, int, point], bytes]: capsule, enc_Data = C From 6be753cb90a168a5e4903057f9800e84cd5ffa70 Mon Sep 17 00:00:00 2001 From: Smart-SangGe <2251250136@qq.com> Date: Wed, 25 Oct 2023 11:54:21 +0800 Subject: [PATCH 09/13] test: test --- src/client.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/client.py b/src/client.py index d9f9c58..6b02346 100644 --- a/src/client.py +++ b/src/client.py @@ -10,6 +10,7 @@ import socket import random import time import base64 +import json @asynccontextmanager @@ -97,7 +98,7 @@ async def read_root(): class C(BaseModel): - Tuple: Tuple[capsule, int] + Tuple: Tuple[Tuple[Tuple[int, int], Tuple[int, int], int, Tuple[int, int]], int] ip: str @@ -209,7 +210,7 @@ async def send_messages( "ct": int.from_bytes(ct), "rk": rk_list[i], } - print(payload) + print(json.dumps(payload)) response = requests.post(url, json=payload) if response.status_code == 200: From 087e429ef75e7e340e4f76f5cde2e0233c7a4080 Mon Sep 17 00:00:00 2001 From: Smart-SangGe <2251250136@qq.com> Date: Wed, 25 Oct 2023 13:31:51 +0800 Subject: [PATCH 10/13] fix: update --- src/client.py | 35 ++++++++++++++++++++--------------- src/node.py | 5 +++-- 2 files changed, 23 insertions(+), 17 deletions(-) diff --git a/src/client.py b/src/client.py index 6b02346..965a21b 100644 --- a/src/client.py +++ b/src/client.py @@ -11,6 +11,7 @@ import random import time import base64 import json +import pickle @asynccontextmanager @@ -40,7 +41,7 @@ def init_db(): """ CREATE TABLE IF NOT EXISTS message ( id INTEGER PRIMARY KEY, - capsule TEXT, + capsule BLOB, ct TEXT, senderip TEXT ); @@ -113,29 +114,27 @@ async def receive_messages(message: C): return: status_code """ - a, b = message.Tuple - C_tuple = (a, b) - ip = message.ip - if not C_tuple or not ip: + + if not message.Tuple or not message.ip: raise HTTPException(status_code=400, detail="Invalid input data") - C_capsule = C_tuple[0] - C_ct = C_tuple[1] - - if not Checkcapsule(C_capsule): - raise HTTPException(status_code=400, detail="Invalid capsule") + C_capsule, C_ct = message.Tuple + ip = message.ip + + # Serialization + bin_C_capsule = pickle.dumps(C_capsule) # insert record into database - with sqlite3.connect("message.db") as db: + with sqlite3.connect("client.db") as db: try: db.execute( """ INSERT INTO message - (capsule_column, ct_column, ip_column) + (capsule, ct, senderip) VALUES (?, ?, ?) """, - (C_capsule, C_ct, ip), + (bin_C_capsule, C_ct, ip), ) db.commit() await check_merge(C_ct, ip) @@ -175,7 +174,13 @@ async def check_merge(ct: int, ip: str): pk_sender, T = result[0] # result[0] = (pk, threshold) if len(cfrag_cts) >= T: - cfrags = mergecfrag(cfrag_cts) + # Deserialization + temp_cfrag_cts = [] + for i in cfrag_cts: + capsule = pickle.loads(i[0]) + temp_cfrag_cts.append((capsule, i[1])) + + cfrags = mergecfrag(temp_cfrag_cts) message = DecryptFrags(sk, pk, pk_sender, cfrags) # type: ignore node_response = True @@ -199,7 +204,7 @@ async def send_messages( rk_list = GenerateReKey(sk, pk_B, len(node_ips), shreshold, tuple(id_list)) # type: ignore capsule, ct = Encrypt(pk, message) # type: ignore - #capsule_ct = (capsule, int.from_bytes(ct)) + # capsule_ct = (capsule, int.from_bytes(ct)) for i in range(len(node_ips)): url = "http://" + node_ips[i][0] + ":8001" + "/user_src" diff --git a/src/node.py b/src/node.py index 76eff38..4302cfb 100644 --- a/src/node.py +++ b/src/node.py @@ -78,7 +78,7 @@ class Req(BaseModel): dest_ip: str capsule: capsule ct: int - rk: Any + rk: list @app.post("/user_src") # 接收用户1发送的信息 @@ -93,6 +93,7 @@ async def user_src(message: Req): "rk": rk_list[i], } """ + print("node: ", message) source_ip = message.source_ip dest_ip = message.dest_ip capsule = message.capsule @@ -113,7 +114,7 @@ async def send_user_des_message(source_ip: str, dest_ip: str, re_message): # response = requests.post( "http://" + dest_ip + ":8002" + "/receive_messages", json=data ) - print(response.text) + print("send stauts:" ,response.text) if __name__ == "__main__": From 9fb1d4bf143279e4f2440f268950c7b6b2ead39f Mon Sep 17 00:00:00 2001 From: Smart-SangGe <2251250136@qq.com> Date: Wed, 25 Oct 2023 14:42:52 +0800 Subject: [PATCH 11/13] test: update ci --- .gitea/workflows/ci.yaml | 30 +++++++++++++++++++++++------ doc/README_app_en.md | 4 +++- src/client.py | 41 +++++++++++++++++----------------------- 3 files changed, 44 insertions(+), 31 deletions(-) diff --git a/.gitea/workflows/ci.yaml b/.gitea/workflows/ci.yaml index a823d44..bcd41a8 100644 --- a/.gitea/workflows/ci.yaml +++ b/.gitea/workflows/ci.yaml @@ -16,13 +16,31 @@ jobs: - name: copy file via ssh password - uses: appleboy/scp-action@v0.1.4 + uses: cross-the-world/scp-pipeline@master with: - host: "110.41.155.96,110.41.130.197,110.41.21.35" - username: ${{ secrets.USERNAME }} - password: ${{ secrets.PASSWORD }} - source: "src/server.py,src/client.py,src/node.py" - target: "/root/mimajingsai/src/" + host: "110.41.155.96" + user: ${{ secrets.USERNAME }} + pass: ${{ secrets.PASSWORD }} + local: "src/*" + remote: /root/mimajingsai/src/ + + - name: copy file via ssh password + uses: cross-the-world/scp-pipeline@master + with: + host: "110.41.130.197" + user: ${{ secrets.USERNAME }} + pass: ${{ secrets.PASSWORD }} + local: "src/*" + remote: /root/mimajingsai/src/ + + - name: copy file via ssh password + uses: cross-the-world/scp-pipeline@master + with: + host: "110.41.21.35" + user: ${{ secrets.USERNAME }} + pass: ${{ secrets.PASSWORD }} + local: "src/*" + remote: /root/mimajingsai/src/ diff --git a/doc/README_app_en.md b/doc/README_app_en.md index 839dda2..dc3b4df 100644 --- a/doc/README_app_en.md +++ b/doc/README_app_en.md @@ -15,4 +15,6 @@ tpre3: docker run -it -p 8000:8000 -p 8001:8001 -p 8002:8002 -v ~/mimajingsai:/a 110.41.155.96 tpre1 110.41.130.197 tpre2 -110.41.21.35 tpre3 \ No newline at end of file +110.41.21.35 tpre3 + +python client_cli.py 110.41.21.35 aaa \ No newline at end of file diff --git a/src/client.py b/src/client.py index 965a21b..87afa04 100644 --- a/src/client.py +++ b/src/client.py @@ -114,19 +114,22 @@ async def receive_messages(message: C): return: status_code """ - + if not message.Tuple or not message.ip: raise HTTPException(status_code=400, detail="Invalid input data") C_capsule, C_ct = message.Tuple ip = message.ip - + # Serialization bin_C_capsule = pickle.dumps(C_capsule) # 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 @@ -134,7 +137,7 @@ async def receive_messages(message: C): VALUES (?, ?, ?) """, - (bin_C_capsule, C_ct, ip), + (bin_C_capsule, str(C_ct), ip), ) db.commit() await check_merge(C_ct, ip) @@ -149,6 +152,8 @@ async def receive_messages(message: C): async def check_merge(ct: int, ip: str): global sk, pk, node_response, message 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( """ @@ -156,21 +161,23 @@ async def check_merge(ct: int, ip: str): FROM message WHERE ct = ? AND senderip = ? """, - (ct, ip), + (str(ct), ip), ) # [(capsule, ct), ...] cfrag_cts = cursor.fetchall() + print("ip", type(ip)) # get T cursor = db.execute( """ SELECT publickey, threshold FROM senderinfo - WHERE senderip = ? + WHERE ip = ? """, (ip), ) result = cursor.fetchall() + print("maybe error here?") pk_sender, T = result[0] # result[0] = (pk, threshold) if len(cfrag_cts) >= T: @@ -178,8 +185,8 @@ async def check_merge(ct: int, ip: str): temp_cfrag_cts = [] for i in cfrag_cts: capsule = pickle.loads(i[0]) - temp_cfrag_cts.append((capsule, i[1])) - + temp_cfrag_cts.append((capsule, int(i[1]))) + cfrags = mergecfrag(temp_cfrag_cts) message = DecryptFrags(sk, pk, pk_sender, cfrags) # type: ignore node_response = True @@ -258,20 +265,6 @@ async def request_message(i_m: Request_Message): except: print("can't post") return {"message": "can't post"} - if response.status_code == 200: - data = response.json() - public_key = int(data["public_key"]) - threshold = int(data["threshold"]) - with sqlite3.connect("client.db") as db: - db.execute( - """ - INSERT INTO senderinfo - (public_key, threshold) - VALUES - (?, ?) - """, - (public_key, threshold), - ) try: if response.status_code == 200: @@ -283,11 +276,11 @@ async def request_message(i_m: Request_Message): db.execute( """ INSERT INTO senderinfo - (public_key, threshold) + (ip, public_key, threshold) VALUES - (?, ?) + (?, ?, ?) """, - (public_key, threshold), + (str(dest_ip), public_key, threshold), ) except: print("Database error") From 952324d895c81994fa167fe833f980e79817ec0b Mon Sep 17 00:00:00 2001 From: Smart-SangGe <2251250136@qq.com> Date: Wed, 25 Oct 2023 14:51:09 +0800 Subject: [PATCH 12/13] test: test --- src/client.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/client.py b/src/client.py index 87afa04..ba974df 100644 --- a/src/client.py +++ b/src/client.py @@ -166,7 +166,16 @@ async def check_merge(ct: int, ip: str): # [(capsule, ct), ...] cfrag_cts = cursor.fetchall() - print("ip", type(ip)) + cursor = db.execute( + """ + SELECT publickey, threshold + FROM senderinfo + WHERE ip = ? + """, + ('127.1.1'), + ) + result = cursor.fetchall() + # get T cursor = db.execute( """ From 1172a2dd3939a031919e4f30beab5c23608f2044 Mon Sep 17 00:00:00 2001 From: Smart-SangGe <2251250136@qq.com> Date: Wed, 25 Oct 2023 14:53:35 +0800 Subject: [PATCH 13/13] test: test --- src/testfile | 1 + 1 file changed, 1 insertion(+) create mode 100644 src/testfile diff --git a/src/testfile b/src/testfile new file mode 100644 index 0000000..ff6c384 --- /dev/null +++ b/src/testfile @@ -0,0 +1 @@ +123565432 \ No newline at end of file