Skip to content

Commit 194060f

Browse files
committed
add things to comm
1 parent 55ce715 commit 194060f

File tree

7 files changed

+307
-15
lines changed

7 files changed

+307
-15
lines changed

src/client.py

+130-7
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
from comm import Comm
33
import tenseal as ts
44
import cv2
5+
import dill
6+
import matplotlib.pyplot as plt
57

68
def init_enc():
79
## Encryption Parameters
@@ -35,6 +37,21 @@ def encrypt_image(context, img):
3537
enc_img.append(enc_row)
3638
return enc_img
3739

40+
def encrypt_pyramid(context, img):
41+
enc_pyramid = []
42+
for octave in range(len(img)):
43+
enc_octave = []
44+
for size in range(len(img[0])):
45+
enc_img = []
46+
for row in range(len(img[0][0])):
47+
enc_row = []
48+
for col in range(len(img[0][0][0])):
49+
enc_row.append(ts.ckks_vector(context, img[octave][size][row][col]))
50+
enc_img.append(enc_row)
51+
enc_octave.append(enc_img)
52+
enc_pyramid.append(enc_octave)
53+
return enc_pyramid
54+
3855
def load_image(context, img):
3956
enc_img = []
4057
for row in range(len(img)):
@@ -44,32 +61,138 @@ def load_image(context, img):
4461
enc_img.append(enc_row)
4562
return enc_img
4663

64+
def serialize_image(context, img):
65+
enc_img = []
66+
for row in range(len(img)):
67+
enc_row = []
68+
for col in range(len(img[0])):
69+
enc_row.append((img[row][col].serialize()))
70+
enc_img.append(enc_row)
71+
return enc_img
72+
73+
def load_pyramid(context, img):
74+
enc_pyramid = []
75+
for octave in range(len(img)):
76+
enc_octave = []
77+
for size in range(len(img[0])):
78+
enc_img = []
79+
for row in range(len(img[0][0])):
80+
enc_row = []
81+
for col in range(len(img[0][0][0])):
82+
enc_row.append(ts.ckks_vector_from(context, img[octave][size][row][col]))
83+
enc_img.append(enc_row)
84+
enc_octave.append(enc_img)
85+
enc_pyramid.append(enc_octave)
86+
return enc_pyramid
87+
88+
def serialize_pyramid(context, img):
89+
enc_pyramid = []
90+
for octave in range(len(img)):
91+
enc_octave = []
92+
for size in range(len(img[0])):
93+
enc_img = []
94+
for row in range(len(img[0][0])):
95+
enc_row = []
96+
for col in range(len(img[0][0][0])):
97+
enc_row.append((img[octave][size][row][col].serialize()))
98+
enc_img.append(enc_row)
99+
enc_octave.append(enc_img)
100+
enc_pyramid.append(enc_octave)
101+
return enc_pyramid
102+
103+
def show_pyramid(img, secret_key):
104+
for octave in range(len(img)):
105+
for size in range(len(img[0])):
106+
base_img = ([[int(col.decrypt(secret_key)[0]) for col in row] for row in img[0][0]])
107+
plt.imshow(base_img)
108+
plt.show()
109+
47110

48111
def main():
49112
comm = Comm()
50113
comm.start_client()
51114
context, secret_key = init_enc()
52115

116+
def cmp(x, a, b):
117+
x = dill.loads(x)
118+
a = dill.loads(a)
119+
b = dill.loads(b)
120+
if isinstance(x, ts.CKKSVector):
121+
x = x.decrypt(secret_key)[0]
122+
if isinstance(a, ts.CKKSVector):
123+
a = a.decrypt(secret_key)[0]
124+
if isinstance(b, ts.CKKSVector):
125+
b = b.decrypt(secret_key)[0]
126+
return dill.dumps(ts.ckks_vector(context=context, vector=[int(a < x < b)]))
127+
128+
def refresh(value):
129+
value = dill.loads(value)
130+
decrypted_value = value.decrypt(secret_key)[0]
131+
return dill.dumps(ts.ckks_vector(context=context, vector=[decrypted_value]))
132+
133+
53134
img = cv2.imread('../assets/fly-20x20.jpg')
54-
for row in img:
55-
for col in img:
56-
print(col)
135+
sigma=1.6
136+
num_intervals=3
137+
assumed_blur=0.5
138+
image_border_width=5
57139

58140
comm.call_api(b'init_context', context.serialize())
59141

60142
enc_img = encrypt_image(context, img)
61143

144+
# Generate Base Image
62145
comm.call_api(b'generate_base_image')
63146

64147
print("Sending image...")
65148
comm.send_img(enc_img)
66149
print("Image sent...")
67150

68-
res_img = load_image(context, comm.recv_img())
69151

70-
for row in res_img:
71-
for col in row:
72-
print(col.decrypt(secret_key))
152+
comm.check_interactive(cmp=cmp, refresh=refresh)
153+
154+
base_img_enc = load_image(context, comm.recv_img())
155+
156+
base_img = ([[int(col.decrypt(secret_key)[0]) for col in row] for row in base_img_enc])
157+
plt.imshow(base_img)
158+
plt.show()
159+
160+
# Get number of octaves
161+
comm.call_api(b'compute_num_octaves')
162+
163+
comm.send_bytes(dill.dumps((len(base_img), len(base_img[0]))))
164+
165+
comm.check_interactive(cmp=cmp, refresh=refresh)
166+
167+
num_octaves = dill.loads(comm.receive_bytes())
168+
169+
print("Number of octaves: ", num_octaves)
170+
171+
# Get gaussian kernels
172+
comm.call_api(b'generate_gaussian_kernels')
173+
174+
comm.send_bytes(dill.dumps(sigma))
175+
comm.send_bytes(dill.dumps(num_intervals))
176+
177+
comm.check_interactive(cmp=cmp, refresh=refresh)
178+
179+
gaussian_kernel_sizes = dill.loads(comm.receive_bytes())
180+
181+
print("Gaussian kernel sizes: ", (gaussian_kernel_sizes))
182+
183+
# Get Gaussian pyramid
184+
comm.call_api(b'generate_gaussian_images')
185+
186+
comm.send_bytes(dill.dumps(serialize_image(context, base_img_enc)))
187+
comm.send_bytes(dill.dumps(num_octaves))
188+
comm.send_bytes(dill.dumps(gaussian_kernel_sizes))
189+
190+
comm.check_interactive(cmp=cmp, refresh=refresh)
191+
192+
gaussian_pyramid_enc = load_pyramid(context, dill.loads(comm.receive_bytes()))
193+
194+
# print("Gaussian kernel sizes: ", (gaussian_kernel_sizes))
195+
show_pyramid(gaussian_pyramid_enc, secret_key)
73196

74197
comm.call_api(b'exit')
75198

src/comm.py

+21-1
Original file line numberDiff line numberDiff line change
@@ -98,4 +98,24 @@ def recv_img(self):
9898
for _ in range(n_cols):
9999
recv_row.append(self.receive_bytes())
100100
img.append(recv_row)
101-
return img
101+
return img
102+
103+
104+
def check_interactive(self, cmp=None, refresh=None):
105+
while True:
106+
api_name = self.receive_bytes().decode()
107+
# print(api_name)
108+
if api_name == 'end_interaction':
109+
break
110+
elif api_name == 'cmp':
111+
x = self.receive_bytes().decode()
112+
a = self.receive_bytes().decode()
113+
b = self.receive_bytes().decode()
114+
self.send_bytes(cmp(x, a, b))
115+
elif api_name == 'refresh':
116+
x = self.receive_bytes().decode()
117+
self.send_bytes(refresh(x))
118+
119+
120+
def end_interactive(self):
121+
self.send_bytes(b'end_interaction')

src/secsift/grep

+86
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
Traceback (most recent call last):
2+
File "defer.py", line 130, in <module>
3+
serialized_num = dill.dumps(d)
4+
File "/home/bhargav/.local/lib/python3.8/site-packages/dill/_dill.py", line 288, in dumps
5+
dump(obj, file, protocol, byref, fmode, recurse, **kwds)#, strictio)
6+
File "/home/bhargav/.local/lib/python3.8/site-packages/dill/_dill.py", line 260, in dump
7+
Pickler(file, protocol, **_kwds).dump(obj)
8+
File "/home/bhargav/.local/lib/python3.8/site-packages/dill/_dill.py", line 428, in dump
9+
StockPickler.dump(self, obj)
10+
File "/usr/lib/python3.8/pickle.py", line 487, in dump
11+
self.save(obj)
12+
File "/home/bhargav/.local/lib/python3.8/site-packages/dill/_dill.py", line 422, in save
13+
StockPickler.save(self, obj, save_persistent_id)
14+
File "/usr/lib/python3.8/pickle.py", line 603, in save
15+
self.save_reduce(obj=obj, *rv)
16+
File "/usr/lib/python3.8/pickle.py", line 717, in save_reduce
17+
save(state)
18+
File "/home/bhargav/.local/lib/python3.8/site-packages/dill/_dill.py", line 422, in save
19+
StockPickler.save(self, obj, save_persistent_id)
20+
File "/usr/lib/python3.8/pickle.py", line 560, in save
21+
f(self, obj) # Call unbound method with explicit self
22+
File "/home/bhargav/.local/lib/python3.8/site-packages/dill/_dill.py", line 1233, in save_module_dict
23+
StockPickler.save_dict(pickler, obj)
24+
File "/usr/lib/python3.8/pickle.py", line 971, in save_dict
25+
self._batch_setitems(obj.items())
26+
File "/usr/lib/python3.8/pickle.py", line 997, in _batch_setitems
27+
save(v)
28+
File "/home/bhargav/.local/lib/python3.8/site-packages/dill/_dill.py", line 422, in save
29+
StockPickler.save(self, obj, save_persistent_id)
30+
File "/usr/lib/python3.8/pickle.py", line 560, in save
31+
f(self, obj) # Call unbound method with explicit self
32+
File "/home/bhargav/.local/lib/python3.8/site-packages/dill/_dill.py", line 2013, in save_function
33+
_save_with_postproc(pickler, (_create_function, (
34+
File "/home/bhargav/.local/lib/python3.8/site-packages/dill/_dill.py", line 1133, in _save_with_postproc
35+
pickler.save_reduce(*reduction)
36+
File "/usr/lib/python3.8/pickle.py", line 692, in save_reduce
37+
save(args)
38+
File "/home/bhargav/.local/lib/python3.8/site-packages/dill/_dill.py", line 422, in save
39+
StockPickler.save(self, obj, save_persistent_id)
40+
File "/usr/lib/python3.8/pickle.py", line 560, in save
41+
f(self, obj) # Call unbound method with explicit self
42+
File "/usr/lib/python3.8/pickle.py", line 886, in save_tuple
43+
save(element)
44+
File "/home/bhargav/.local/lib/python3.8/site-packages/dill/_dill.py", line 422, in save
45+
StockPickler.save(self, obj, save_persistent_id)
46+
File "/usr/lib/python3.8/pickle.py", line 603, in save
47+
self.save_reduce(obj=obj, *rv)
48+
File "/usr/lib/python3.8/pickle.py", line 717, in save_reduce
49+
save(state)
50+
File "/home/bhargav/.local/lib/python3.8/site-packages/dill/_dill.py", line 422, in save
51+
StockPickler.save(self, obj, save_persistent_id)
52+
File "/usr/lib/python3.8/pickle.py", line 560, in save
53+
f(self, obj) # Call unbound method with explicit self
54+
File "/home/bhargav/.local/lib/python3.8/site-packages/dill/_dill.py", line 1233, in save_module_dict
55+
StockPickler.save_dict(pickler, obj)
56+
File "/usr/lib/python3.8/pickle.py", line 971, in save_dict
57+
self._batch_setitems(obj.items())
58+
File "/usr/lib/python3.8/pickle.py", line 997, in _batch_setitems
59+
save(v)
60+
File "/home/bhargav/.local/lib/python3.8/site-packages/dill/_dill.py", line 422, in save
61+
StockPickler.save(self, obj, save_persistent_id)
62+
File "/usr/lib/python3.8/pickle.py", line 560, in save
63+
f(self, obj) # Call unbound method with explicit self
64+
File "/usr/lib/python3.8/pickle.py", line 886, in save_tuple
65+
save(element)
66+
File "/home/bhargav/.local/lib/python3.8/site-packages/dill/_dill.py", line 422, in save
67+
StockPickler.save(self, obj, save_persistent_id)
68+
File "/usr/lib/python3.8/pickle.py", line 603, in save
69+
self.save_reduce(obj=obj, *rv)
70+
File "/usr/lib/python3.8/pickle.py", line 717, in save_reduce
71+
save(state)
72+
File "/home/bhargav/.local/lib/python3.8/site-packages/dill/_dill.py", line 422, in save
73+
StockPickler.save(self, obj, save_persistent_id)
74+
File "/usr/lib/python3.8/pickle.py", line 560, in save
75+
f(self, obj) # Call unbound method with explicit self
76+
File "/home/bhargav/.local/lib/python3.8/site-packages/dill/_dill.py", line 1233, in save_module_dict
77+
StockPickler.save_dict(pickler, obj)
78+
File "/usr/lib/python3.8/pickle.py", line 971, in save_dict
79+
self._batch_setitems(obj.items())
80+
File "/usr/lib/python3.8/pickle.py", line 1002, in _batch_setitems
81+
save(v)
82+
File "/home/bhargav/.local/lib/python3.8/site-packages/dill/_dill.py", line 422, in save
83+
StockPickler.save(self, obj, save_persistent_id)
84+
File "/usr/lib/python3.8/pickle.py", line 578, in save
85+
rv = reduce(self.proto)
86+
TypeError: cannot pickle '_tenseal_cpp.CKKSVector' object

src/secsift/secPysift.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
from primitives import *
2-
from primitives import *
1+
from secsift.primitives import *
2+
# from primitives import *
33
from numpy import sqrt, log
44
from tqdm import tqdm
55
import numpy as np
66

7-
# DEBUG=1
7+
DEBUG=0
88
def secGenerateBaseImage(image, sigma, assumed_blur, kernel_size=3):
99
"""
1010
Only image is encrypted

src/secsift/test.ipynb

+2-2
Original file line numberDiff line numberDiff line change
@@ -5511,7 +5511,7 @@
55115511
],
55125512
"metadata": {
55135513
"kernelspec": {
5514-
"display_name": "precog_know_inf",
5514+
"display_name": "3.9.7",
55155515
"language": "python",
55165516
"name": "python3"
55175517
},
@@ -5525,7 +5525,7 @@
55255525
"name": "python",
55265526
"nbconvert_exporter": "python",
55275527
"pygments_lexer": "ipython3",
5528-
"version": "3.12.7"
5528+
"version": "3.9.7"
55295529
}
55305530
},
55315531
"nbformat": 4,

0 commit comments

Comments
 (0)