mirror of
https://github.com/ltcptgeneral/CS-239-Cryptography-Project.git
synced 2026-10-08 00:08:32 +00:00
improve performance slightly
This commit is contained in:
1 parent
ae5be5e966
commit
373cfbf495
1 file changed
+41
-42
+41
-42
@@ -1,5 +1,15 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 11,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"encoding_width = 64\n",
|
||||
"database_size = 100"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
@@ -9,7 +19,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"execution_count": 12,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
@@ -19,7 +29,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"execution_count": 13,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
@@ -54,28 +64,26 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"execution_count": 14,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Generate and encrypt query vector\n",
|
||||
"x = np.array([1.5, 2, 3.3, 4])\n",
|
||||
"cx = np.array([HE_client.encrypt(x[j]) for j in range(len(x))])"
|
||||
"x = np.random.rand(encoding_width)\n",
|
||||
"#cx = np.array([HE_client.encrypt(x[j]) for j in range(len(x))])\n",
|
||||
"cx = HE_client.encrypt(x)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"execution_count": 15,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"[Client] sending HE_client=<ckks Pyfhel obj at 0x7ceb01c46a80, [pk:Y, sk:Y, rtk:Y, rlk:Y, contx(n=16384, t=0, sec=128, qi=[60, 30, 30, 30, 60], scale=1073741824.0, )]> and cx=[<Pyfhel Ciphertext at 0x7ceb01c46bd0, scheme=ckks, size=2/2, scale_bits=30, mod_level=0>\n",
|
||||
" <Pyfhel Ciphertext at 0x7ceafbf753b0, scheme=ckks, size=2/2, scale_bits=30, mod_level=0>\n",
|
||||
" <Pyfhel Ciphertext at 0x7ceafbf75400, scheme=ckks, size=2/2, scale_bits=30, mod_level=0>\n",
|
||||
" <Pyfhel Ciphertext at 0x7ceafbf75450, scheme=ckks, size=2/2, scale_bits=30, mod_level=0>]\n"
|
||||
"[Client] sending HE_client=<ckks Pyfhel obj at 0x763cfa924030, [pk:Y, sk:Y, rtk:Y, rlk:Y, contx(n=16384, t=0, sec=128, qi=[60, 30, 30, 30, 60], scale=1073741824.0, )]> and cx=<Pyfhel Ciphertext at 0x763cf8b0e2c0, scheme=ckks, size=2/2, scale_bits=30, mod_level=0>\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
@@ -86,7 +94,8 @@
|
||||
"s_public_key = HE_client.to_bytes_public_key()\n",
|
||||
"s_relin_key = HE_client.to_bytes_relin_key()\n",
|
||||
"s_rotate_key = HE_client.to_bytes_rotate_key()\n",
|
||||
"s_cx = [cx[j].to_bytes() for j in range(len(cx))]\n",
|
||||
"#s_cx = [cx[j].to_bytes() for j in range(len(cx))]\n",
|
||||
"s_cx = cx.to_bytes()\n",
|
||||
"\n",
|
||||
"print(f\"[Client] sending HE_client={HE_client} and cx={cx}\")"
|
||||
]
|
||||
@@ -100,7 +109,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 5,
|
||||
"execution_count": 16,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
@@ -113,31 +122,25 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 6,
|
||||
"execution_count": 17,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# document matrix containing rows of document encoding vectors\n",
|
||||
"D = [\n",
|
||||
" [0.5, -1.5, 4, 5],\n",
|
||||
" [1.0, 1.5, 4, 5]\n",
|
||||
"]"
|
||||
"D = np.random.rand(database_size, encoding_width)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 7,
|
||||
"execution_count": 18,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"[Server] received HE_server=<ckks Pyfhel obj at 0x7ceafbf7d580, [pk:Y, sk:-, rtk:Y, rlk:Y, contx(n=16384, t=0, sec=128, qi=[60, 30, 30, 30, 60], scale=1073741824.0, )]> and cx=[<Pyfhel Ciphertext at 0x7ceb013ced60, scheme=ckks, size=2/2, scale_bits=30, mod_level=0>\n",
|
||||
" <Pyfhel Ciphertext at 0x7ceb008ad4f0, scheme=ckks, size=2/2, scale_bits=30, mod_level=0>\n",
|
||||
" <Pyfhel Ciphertext at 0x7ceafbf7d770, scheme=ckks, size=2/2, scale_bits=30, mod_level=0>\n",
|
||||
" <Pyfhel Ciphertext at 0x7ceafbf7d7c0, scheme=ckks, size=2/2, scale_bits=30, mod_level=0>]\n",
|
||||
"[Server] Distances computed! Responding: res=[(<Pyfhel Ciphertext at 0x7ceafbf7d9f0, scheme=ckks, size=3/3, scale_bits=60, mod_level=1>, <Pyfhel Ciphertext at 0x7ceafbf7d900, scheme=ckks, size=5/5, scale_bits=60, mod_level=2>), (<Pyfhel Ciphertext at 0x7ceafbf7da90, scheme=ckks, size=3/3, scale_bits=60, mod_level=1>, <Pyfhel Ciphertext at 0x7ceafbf7d680, scheme=ckks, size=5/5, scale_bits=60, mod_level=2>)]\n"
|
||||
"[Server] received HE_server=<ckks Pyfhel obj at 0x763cf2a734e0, [pk:Y, sk:-, rtk:Y, rlk:Y, contx(n=16384, t=0, sec=128, qi=[60, 30, 30, 30, 60], scale=1073741824.0, )]> and cx=<Pyfhel Ciphertext at 0x763cfa924ae0, scheme=ckks, size=2/2, scale_bits=30, mod_level=0>\n",
|
||||
"[Server] Distances computed! Responding: res=[(<Pyfhel Ciphertext at 0x763cf3fe4f90, scheme=ckks, size=2/4, scale_bits=60, mod_level=2>, <Pyfhel Ciphertext at 0x763cf2a47270, scheme=ckks, size=3/3, scale_bits=60, mod_level=3>), (<Pyfhel Ciphertext at 0x763cf3ff8090, scheme=ckks, size=2/4, scale_bits=60, mod_level=2>, <Pyfhel Ciphertext at 0x763cf2a55f40, scheme=ckks, size=3/3, scale_bits=60, mod_level=3>), (<Pyfhel Ciphertext at 0x763cf2a55f90, scheme=ckks, size=2/4, scale_bits=60, mod_level=2>, <Pyfhel Ciphertext at 0x763cf2a55ef0, scheme=ckks, size=3/3, scale_bits=60, mod_level=3>), (<Pyfhel Ciphertext at 0x763cf2a55db0, scheme=ckks, size=2/4, scale_bits=60, mod_level=2>, <Pyfhel Ciphertext at 0x763cf2a55e00, scheme=ckks, size=3/3, scale_bits=60, mod_level=3>), (<Pyfhel Ciphertext at 0x763cf2a55d60, scheme=ckks, size=2/4, scale_bits=60, mod_level=2>, <Pyfhel Ciphertext at 0x763cf2a55d10, scheme=ckks, size=3/3, scale_bits=60, mod_level=3>), (<Pyfhel Ciphertext at 0x763cf2a55cc0, scheme=ckks, size=2/4, scale_bits=60, mod_level=2>, <Pyfhel Ciphertext at 0x763cf2a55b30, scheme=ckks, size=3/3, scale_bits=60, mod_level=3>), (<Pyfhel Ciphertext at 0x763cf2a5d8b0, scheme=ckks, size=2/4, scale_bits=60, mod_level=2>, <Pyfhel Ciphertext at 0x763cf2a5db30, scheme=ckks, size=3/3, scale_bits=60, mod_level=3>), (<Pyfhel Ciphertext at 0x763cf2a5d950, scheme=ckks, size=2/4, scale_bits=60, mod_level=2>, <Pyfhel Ciphertext at 0x763cf2a5d900, scheme=ckks, size=3/3, scale_bits=60, mod_level=3>), (<Pyfhel Ciphertext at 0x763cf2a5d9f0, scheme=ckks, size=2/4, scale_bits=60, mod_level=2>, <Pyfhel Ciphertext at 0x763cf2a5d9a0, scheme=ckks, size=3/3, scale_bits=60, mod_level=3>), (<Pyfhel Ciphertext at 0x763cf2a5da90, scheme=ckks, size=2/4, scale_bits=60, mod_level=2>, <Pyfhel Ciphertext at 0x763cf2a5da40, scheme=ckks, size=3/3, scale_bits=60, mod_level=3>), (<Pyfhel Ciphertext at 0x763cf3fe4e00, scheme=ckks, size=2/4, scale_bits=60, mod_level=2>, <Pyfhel Ciphertext at 0x763cfa924310, scheme=ckks, size=3/3, scale_bits=60, mod_level=3>), (<Pyfhel Ciphertext at 0x763cfa924c20, scheme=ckks, size=2/4, scale_bits=60, mod_level=2>, <Pyfhel Ciphertext at 0x763cfa924f40, scheme=ckks, size=3/3, scale_bits=60, mod_level=3>), (<Pyfhel Ciphertext at 0x763cf3fe4720, scheme=ckks, size=2/4, scale_bits=60, mod_level=2>, <Pyfhel Ciphertext at 0x763cf2a6a4f0, scheme=ckks, size=3/3, scale_bits=60, mod_level=3>), (<Pyfhel Ciphertext at 0x763cf2a5dae0, scheme=ckks, size=2/4, scale_bits=60, mod_level=2>, <Pyfhel Ciphertext at 0x763cf8b41cc0, scheme=ckks, size=3/3, scale_bits=60, mod_level=3>), (<Pyfhel Ciphertext at 0x763cf3ff8630, scheme=ckks, size=2/4, scale_bits=60, mod_level=2>, <Pyfhel Ciphertext at 0x763cf2a73900, scheme=ckks, size=3/3, scale_bits=60, mod_level=3>), (<Pyfhel Ciphertext at 0x763cf2a733b0, scheme=ckks, size=2/4, scale_bits=60, mod_level=2>, <Pyfhel Ciphertext at 0x763cf2a739a0, scheme=ckks, size=3/3, scale_bits=60, mod_level=3>), (<Pyfhel Ciphertext at 0x763cf2a73810, scheme=ckks, size=2/4, scale_bits=60, mod_level=2>, <Pyfhel Ciphertext at 0x763cf2a73e50, scheme=ckks, size=3/3, scale_bits=60, mod_level=3>), (<Pyfhel Ciphertext at 0x763cf2a73040, scheme=ckks, size=2/4, scale_bits=60, mod_level=2>, <Pyfhel Ciphertext at 0x763cf2a73a40, scheme=ckks, size=3/3, scale_bits=60, mod_level=3>), (<Pyfhel Ciphertext at 0x763cf2a73ae0, scheme=ckks, size=2/4, scale_bits=60, mod_level=2>, <Pyfhel Ciphertext at 0x763cf2a737c0, scheme=ckks, size=3/3, scale_bits=60, mod_level=3>), (<Pyfhel Ciphertext at 0x763cf2a73b80, scheme=ckks, size=2/4, scale_bits=60, mod_level=2>, <Pyfhel Ciphertext at 0x763cf2a73090, scheme=ckks, size=3/3, scale_bits=60, mod_level=3>), (<Pyfhel Ciphertext at 0x763cf2a73c20, scheme=ckks, size=2/4, scale_bits=60, mod_level=2>, <Pyfhel Ciphertext at 0x763cf2a73950, scheme=ckks, size=3/3, scale_bits=60, mod_level=3>), (<Pyfhel Ciphertext at 0x763cf2a73cc0, scheme=ckks, size=2/4, scale_bits=60, mod_level=2>, <Pyfhel Ciphertext at 0x763cf2a73180, scheme=ckks, size=3/3, scale_bits=60, mod_level=3>), (<Pyfhel Ciphertext at 0x763cf2a73d60, scheme=ckks, size=2/4, scale_bits=60, mod_level=2>, <Pyfhel Ciphertext at 0x763cf2a73a90, scheme=ckks, size=3/3, scale_bits=60, mod_level=3>), (<Pyfhel Ciphertext at 0x763cf2a73e00, scheme=ckks, size=2/4, scale_bits=60, mod_level=2>, <Pyfhel Ciphertext at 0x763cf2a73220, scheme=ckks, size=3/3, scale_bits=60, mod_level=3>), (<Pyfhel Ciphertext at 0x763cf2a73ea0, scheme=ckks, size=2/4, scale_bits=60, mod_level=2>, <Pyfhel Ciphertext at 0x763cf2a73bd0, scheme=ckks, size=3/3, scale_bits=60, mod_level=3>), (<Pyfhel Ciphertext at 0x763cf2a73f40, scheme=ckks, size=2/4, scale_bits=60, mod_level=2>, <Pyfhel Ciphertext at 0x763cf2a732c0, scheme=ckks, size=3/3, scale_bits=60, mod_level=3>), (<Pyfhel Ciphertext at 0x763cf2a73360, scheme=ckks, size=2/4, scale_bits=60, mod_level=2>, <Pyfhel Ciphertext at 0x763cf2a73d10, scheme=ckks, size=3/3, scale_bits=60, mod_level=3>), (<Pyfhel Ciphertext at 0x763cfd2Line truncated
|
||||
]
|
||||
}
|
||||
],
|
||||
@@ -147,15 +150,17 @@
|
||||
"HE_server.from_bytes_public_key(s_public_key)\n",
|
||||
"HE_server.from_bytes_relin_key(s_relin_key)\n",
|
||||
"HE_server.from_bytes_rotate_key(s_rotate_key)\n",
|
||||
"cx = np.array([PyCtxt(pyfhel=HE_server, bytestring=s_cx[j]) for j in range(len(s_cx))])\n",
|
||||
"#cx = np.array([PyCtxt(pyfhel=HE_server, bytestring=s_cx[j]) for j in range(len(s_cx))])\n",
|
||||
"cx = PyCtxt(pyfhel=HE_server, bytestring=s_cx)\n",
|
||||
"print(f\"[Server] received HE_server={HE_server} and cx={cx}\")\n",
|
||||
"\n",
|
||||
"# Encode each document weights in plaintext\n",
|
||||
"res = []\n",
|
||||
"\n",
|
||||
"for i in range(len(D)):\n",
|
||||
" d = np.array(D[i])\n",
|
||||
" cd = np.array([HE_server.encrypt(d[j]) for j in range(len(d))])\n",
|
||||
" #d = np.array(D[i])\n",
|
||||
" #cd = np.array([HE_server.encrypt(d[j]) for j in range(len(d))])\n",
|
||||
" cd = HE_server.encrypt(D[i])\n",
|
||||
" # Compute distance bewteen recieved query and D[i]\n",
|
||||
" res.append(hyperbolic_distance_parts(cx, cd))\n",
|
||||
"\n",
|
||||
@@ -173,7 +178,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 8,
|
||||
"execution_count": 19,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
@@ -185,20 +190,9 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 9,
|
||||
"execution_count": 20,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"[Client] Response received! \n",
|
||||
"Result is [np.float64(0.20736836029574815), np.float64(0.07564769989949309)] \n",
|
||||
"Should be [np.float64(0.20738785895993414), np.float64(0.07565488467449914)]\n",
|
||||
"Diff [1.94986642e-05 7.18477501e-06]\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"#res = np.array([HE_client.decrypt(c_res[j]) for j in range(len(c_res))])[:,0]\n",
|
||||
"#res = HE_client.decrypt(c_res)\n",
|
||||
@@ -212,8 +206,13 @@
|
||||
" c_res.append(dist)\n",
|
||||
"\n",
|
||||
"# Checking result\n",
|
||||
"expected = [hyperbolic_distance(x, np.array(w)) for w in D]\n",
|
||||
"print(f\"[Client] Response received! \\nResult is {c_res} \\nShould be {expected}\\nDiff {np.abs(np.array(c_res) - np.array(expected))}\")"
|
||||
"expected_res = [hyperbolic_distance(x, np.array(w)) for w in D]\n",
|
||||
"#print(f\"[Client] Response received! \\nResult is {c_res} \\nShould be {expected}\\nDiff {np.abs(np.array(c_res) - np.array(expected))}\")\n",
|
||||
"for i in range(len(c_res)):\n",
|
||||
" result = c_res[i]\n",
|
||||
" expected = expected_res[i]\n",
|
||||
" #print(f\"got: {result}, expected: {expected}\")\n",
|
||||
" assert np.abs(result - expected) < 1e-3"
|
||||
]
|
||||
}
|
||||
],
|
||||
|
||||
Reference in new issue
Block a user