-
Notifications
You must be signed in to change notification settings - Fork 2
/
mediator.py
30 lines (22 loc) · 1.23 KB
/
mediator.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
import numpy as np
class Mediator:
def __init__(self, public_vector, k):
self.public_vector = public_vector
self.intermediate_results = np.empty(len(self.public_vector))
self.k = k
self.known_coefficients = np.empty([len(self.public_vector), k])
self.update_known_coefficients()
def update_known_coefficients(self):
for i in range(len(self.known_coefficients[:,0])):
for j in range(len(self.known_coefficients[0,:])-1):
self.known_coefficients[i,j] = self.public_vector[i]**(j+1)
self.known_coefficients[i,-1] = 1
def update_intermediate_results(self, intermediate_result, party_index):
self.intermediate_results[party_index] = intermediate_result
def solve(self):
result = np.linalg.solve(self.known_coefficients[:self.k,:], self.intermediate_results[:self.k])
# result = np.linalg.inv(self.known_coefficients[:self.k,:]).dot(self.intermediate_results[:self.k])
print("Check the solution's correctness:",
np.allclose(np.dot(self.known_coefficients[:self.k,:], result), self.intermediate_results[:self.k]))
aggregation_result = result[-1]
return aggregation_result