def server_to_client(self, server_set, pk, coef_cts): # Evaluate the polynomial on each element of the server set. eval_cts = [ poly_eval_horner(coef_cts, e) * int(random(pk['order'])) + e for e in server_set ] return eval_cts
def client_to_server(self, client_set, pk, coef_cts): # Evaluate the polynomial on each element of the client set. eval_cts = [ poly_eval_horner(coef_cts, e) * random(pk['n']) + e for e in client_set ] return eval_cts
def hash(self, pk, sk, message, r=0): # generate ephemeral trapdoors(p1,q1) while True: p1, q1 = randomPrime(pk['secparam']), randomPrime(pk['secparam']) # print("p1,q1=>",p1,q1) if isPrime(p1) and isPrime(q1) and p1 != q1: N1 = p1 * q1 if not gcd(N1, pk['N']) == 1: continue break if r == 0: r = random(N1 * pk['N']) # print("r=>",r) # print("(p1,q1,N1)=>", (p1,q1,N1)) # print("N*N1=>",N1 * pk['N']) phi_NN1 = pk['phi_N'] * (N1 - p1 - q1 + 1) # print("phi_NN1=>", phi_NN1) # find e inverse mod N1 * N, so gcd(e,phi_NN1)==1 while True: e = random(phi_NN1) if not gcd(e, phi_NN1) == 1: continue break M = Conversion.bytes2integer(message) # print("M =>",M) # to set hash modular N * N1() group.q = N1 * pk['N'] group.p = group.q * 2 + 1 # print("q=>",group.q) # print("M hash=>", group.hash(M)) h = (group.hash(M) * (r**e)) % (N1 * pk['N']) xi = {'h': h, 'r': r, 'N1': N1, 'p1': p1, 'q1': q1, 'e': e} # print("e=>",xi['e']) return xi
def client_to_server(self, client_set, pk, coef_cts): # Evaluate the polynomial on each element of the client set. eval_cts = [poly_eval_horner(coef_cts, e) * random(pk['n']) + e for e in client_set] return eval_cts
def encrypt(self, pk, m): g, n, n2 = pk['g'], pk['n'], pk['n2'] r = random(pk['n']) c = (((g % n2)**m) * ((r % n2)**n)) % n2 return Cipher(c, pk)
def encrypt(self, pk, m): g, n, n2 = pk['g'], pk['n'], pk['n2'] r = random(pk['n']) c = (((g % n2) ** m) * ((r % n2) ** n)) % n2 return Cipher(c, pk)
def server_to_client(self, server_set, pk, coef_cts): # Evaluate the polynomial on each element of the server set. eval_cts = [poly_eval_horner(coef_cts, e) * random(pk['n']) + e for e in server_set] return eval_cts