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
示例#2
0
    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