-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathChapter10Server.py
54 lines (41 loc) · 1.75 KB
/
Chapter10Server.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import private_set_intersection.python as psi
from flask import Flask, request
from pandas import read_csv
# Server Setup Values
fpr = 0.01
num_client_inputs = 100
# Get Server datasource
df_m = read_csv('basic_clean.csv',keep_default_na=False)
server_items = ['ABLY RESOURCES G2 1PB','ADVANCE GLOBAL RECRUITMENT EH7 4HG']
#server_items = (df_m['CompanyName']+' '+ df_m['Postcode']).to_list()
app = Flask(__name__)
# Setup psi class to hold server key created at every match
class psikey(object):
def __init__(self):
self.key = None
def set_key(self, newkey):
self.key = newkey
return self.key
def get_key(self):
return self.key
pkey = psikey()
# In response to POST to /match, generate new key and encrypt payload elements and return
@app.route('/match', methods=['POST'])
def match():
s = pkey.set_key(psi.server.CreateWithNewKey(True))
psirequest = psi.Request()
psirequest.ParseFromString(request.data)
return s.ProcessRequest(psirequest).SerializeToString()
# Return the setup using current key. This means re-encrypting whole data set at every ask and returning either raw or compressed (gcs or bloom) to client.
@app.route('/gcssetup', methods=['GET'])
def gcssetup():
s = pkey.get_key()
return s.CreateSetupMessage(fpr, num_client_inputs, server_items, psi.DataStructure.GCS).SerializeToString()
@app.route('/rawsetup', methods=['GET'])
def rawsetup():
s = pkey.get_key()
return s.CreateSetupMessage(fpr, num_client_inputs, server_items, psi.DataStructure.RAW).SerializeToString()
@app.route('/bloomsetup', methods=['GET'])
def bloomsetup():
s = pkey.get_key()
return s.CreateSetupMessage(fpr, num_client_inputs, server_items, psi.DataStructure.BLOOM_FILTER).SerializeToString()