forked from sangge/tpre-python
main #22
@ -11,6 +11,7 @@ import random
|
|||||||
import time
|
import time
|
||||||
import base64
|
import base64
|
||||||
import json
|
import json
|
||||||
|
import pickle
|
||||||
|
|
||||||
|
|
||||||
@asynccontextmanager
|
@asynccontextmanager
|
||||||
@ -40,7 +41,7 @@ def init_db():
|
|||||||
"""
|
"""
|
||||||
CREATE TABLE IF NOT EXISTS message (
|
CREATE TABLE IF NOT EXISTS message (
|
||||||
id INTEGER PRIMARY KEY,
|
id INTEGER PRIMARY KEY,
|
||||||
capsule TEXT,
|
capsule BLOB,
|
||||||
ct TEXT,
|
ct TEXT,
|
||||||
senderip TEXT
|
senderip TEXT
|
||||||
);
|
);
|
||||||
@ -113,29 +114,27 @@ async def receive_messages(message: C):
|
|||||||
return:
|
return:
|
||||||
status_code
|
status_code
|
||||||
"""
|
"""
|
||||||
a, b = message.Tuple
|
|
||||||
C_tuple = (a, b)
|
if not message.Tuple or not message.ip:
|
||||||
ip = message.ip
|
|
||||||
if not C_tuple or not ip:
|
|
||||||
raise HTTPException(status_code=400, detail="Invalid input data")
|
raise HTTPException(status_code=400, detail="Invalid input data")
|
||||||
|
|
||||||
C_capsule = C_tuple[0]
|
C_capsule, C_ct = message.Tuple
|
||||||
C_ct = C_tuple[1]
|
ip = message.ip
|
||||||
|
|
||||||
if not Checkcapsule(C_capsule):
|
# Serialization
|
||||||
raise HTTPException(status_code=400, detail="Invalid capsule")
|
bin_C_capsule = pickle.dumps(C_capsule)
|
||||||
|
|
||||||
# insert record into database
|
# insert record into database
|
||||||
with sqlite3.connect("message.db") as db:
|
with sqlite3.connect("client.db") as db:
|
||||||
try:
|
try:
|
||||||
db.execute(
|
db.execute(
|
||||||
"""
|
"""
|
||||||
INSERT INTO message
|
INSERT INTO message
|
||||||
(capsule_column, ct_column, ip_column)
|
(capsule, ct, senderip)
|
||||||
VALUES
|
VALUES
|
||||||
(?, ?, ?)
|
(?, ?, ?)
|
||||||
""",
|
""",
|
||||||
(C_capsule, C_ct, ip),
|
(bin_C_capsule, C_ct, ip),
|
||||||
)
|
)
|
||||||
db.commit()
|
db.commit()
|
||||||
await check_merge(C_ct, ip)
|
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)
|
pk_sender, T = result[0] # result[0] = (pk, threshold)
|
||||||
|
|
||||||
if len(cfrag_cts) >= T:
|
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
|
message = DecryptFrags(sk, pk, pk_sender, cfrags) # type: ignore
|
||||||
node_response = True
|
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
|
rk_list = GenerateReKey(sk, pk_B, len(node_ips), shreshold, tuple(id_list)) # type: ignore
|
||||||
|
|
||||||
capsule, ct = Encrypt(pk, message) # 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)):
|
for i in range(len(node_ips)):
|
||||||
url = "http://" + node_ips[i][0] + ":8001" + "/user_src"
|
url = "http://" + node_ips[i][0] + ":8001" + "/user_src"
|
||||||
|
@ -78,7 +78,7 @@ class Req(BaseModel):
|
|||||||
dest_ip: str
|
dest_ip: str
|
||||||
capsule: capsule
|
capsule: capsule
|
||||||
ct: int
|
ct: int
|
||||||
rk: Any
|
rk: list
|
||||||
|
|
||||||
|
|
||||||
@app.post("/user_src") # 接收用户1发送的信息
|
@app.post("/user_src") # 接收用户1发送的信息
|
||||||
@ -93,6 +93,7 @@ async def user_src(message: Req):
|
|||||||
"rk": rk_list[i],
|
"rk": rk_list[i],
|
||||||
}
|
}
|
||||||
"""
|
"""
|
||||||
|
print("node: ", message)
|
||||||
source_ip = message.source_ip
|
source_ip = message.source_ip
|
||||||
dest_ip = message.dest_ip
|
dest_ip = message.dest_ip
|
||||||
capsule = message.capsule
|
capsule = message.capsule
|
||||||
@ -113,7 +114,7 @@ async def send_user_des_message(source_ip: str, dest_ip: str, re_message): #
|
|||||||
response = requests.post(
|
response = requests.post(
|
||||||
"http://" + dest_ip + ":8002" + "/receive_messages", json=data
|
"http://" + dest_ip + ":8002" + "/receive_messages", json=data
|
||||||
)
|
)
|
||||||
print(response.text)
|
print("send stauts:" ,response.text)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
Loading…
x
Reference in New Issue
Block a user