예제 #1
0
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
예제 #2
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
예제 #3
0
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
예제 #4
0
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))
예제 #5
0
def refresh_b(num, pubk, privk):
    # global pubk , privk
    plainval = paillier.decrypt(num, privk)
    re_enc = paillier.encrypt(plainval, pubk)
    return re_enc
예제 #6
0
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
예제 #7
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
예제 #8
0
def gx(x, f):
    global key_pair
    if f:
        return x
    return paillier.decrypt(x, key_pair.private_key)