def test_additive(): assert pal.decrypt(c1 + c2, key_pair.private_key) == 11 assert pal.decrypt(c1 + c2 + c1, key_pair.private_key) == 21 assert pal.decrypt(c1 + c2 + c1 + c2, key_pair.private_key) == 22 assert pal.decrypt(c6 + c2, key_pair.private_key) == 1000 assert pal.decrypt(c5 + c6 + c5, key_pair.private_key) == 8999 assert pal.decrypt(c3 + c3 + c3 + c3 + c3, key_pair.private_key) == 0
def dot(a, b): vector_b_encrypt = [] for each in b: each = mpz(each) c1 = paillier.encrypt(each, pub) vector_b_encrypt.append(c1) fval = 0 for ind, each in enumerate(vector_b_encrypt): c2 = mpz(a[ind]) c1 = each x = paillier.decrypt(c1 * c2, priv) fval += x return fval
def step1_B(z, privk, l, r_l, c): global qr_pk, qr_privk z_dec = paillier.decrypt(z, privk) d = z_dec % pow(2, l) if MSB(z_dec, l): z_l = gm.encrypt(1, qr_pk) else: z_l = gm.encrypt(0, qr_pk) t = DGK.compare(c, enc_B(d, l), l, qr_pk) N, _ = qr_pk t_ = (z_l[0] % N * r_l[0] % N) % N t = (t_ % N * t % N) % N return t
def compare(encrypted_a, encrypted_b, l, pk, privk): # -------------------A----------------------------- x = encrypted_b + paillier.encrypt(pow(2, l), pk) - encrypted_a r = random.getrandbits(l + 2) z = x + paillier.encrypt(mpz(r), pk) c = r % pow(2, l) #---------------------B---------------------------- # print(x) z_dec = paillier.decrypt(z, privk) d = z_dec % pow(2, l) #-----------------A and B compute encrypted t ----- kp = gm.generate_key(1024) qr_pk = kp["pub"] qr_privk = kp["priv"] t = dgk_comp.compare(c, d, l, qr_pk) # -------------------A----------------------------- if MSB(r, l): r_l = gm.encrypt(1, qr_pk) else: r_l = gm.encrypt(0, qr_pk) # -------------------B----------------------------- if MSB(z_dec, l): z_l = gm.encrypt(1, qr_pk) else: z_l = gm.encrypt(0, qr_pk) # -------------------A----------------------------- N, _ = qr_pk t_ = (z_l[0] % N * r_l[0] % N) % N t = (t_ % N * t % N) % N return t, bool(gm.decrypt([t], qr_privk))
def refresh_b(num, pubk, privk): # global pubk , privk plainval = paillier.decrypt(num, privk) re_enc = paillier.encrypt(plainval, pubk) return re_enc
def test_mul(): assert pal.decrypt(c1 * m2, key_pair.private_key) == 10 assert pal.decrypt(c1 * m1, key_pair.private_key) == 100 assert pal.decrypt(c1 * m1 * m1 * m1 * m2, key_pair.private_key) == 10000 assert pal.decrypt(c5 * m3, key_pair.private_key) == 0
def test_sub(): assert pal.decrypt(c2 - c3, key_pair.private_key) == 1 assert pal.decrypt(c2 - c3 - c3 - c3, key_pair.private_key) == 1 assert pal.decrypt(c5 - c4 - c2, key_pair.private_key) == 1999 assert pal.decrypt(c2 + c3 + c2 - c3 - c2, key_pair.private_key) == 1
def gx(x, f): global key_pair if f: return x return paillier.decrypt(x, key_pair.private_key)