Skip to content

Overflow when iterate and divide Encrypted number #74

@agrojas

Description

@agrojas

Hi,
I try to run this example using phe and numpy, but have Overflow when iterate some loops
Can you help me?
Thanks!

import phe as paillier
import numpy as np

init_values = [['7.44012909e-02', '-4.46416365e-02', '1.14508998e-01', '2.87580964e-02',
                '2.45741445e-02', '2.49905934e-02', '1.91869970e-02', '-2.59226200e-03',
                '-6.09254186e-04', '-5.21980442e-03', '1.00000000e+00'],
               ['1.62806757e-02', '5.06801187e-02', '-4.60850009e-02', '1.15437429e-02',
                '-3.32158756e-02', '-1.60318551e-02', '-1.02661054e-02', '-2.59226200e-03',
                '-4.39854026e-02', '-4.24987666e-02', '1.00000000e+00'],
               ['1.62806757e-02', '-4.46416365e-02', '2.07393477e-02', '2.18723550e-02',
                '-1.39525355e-02', '-1.32135190e-02', '-6.58446761e-03', '-2.59226200e-03',
                '1.33159679e-02', '4.03433716e-02', '1.00000000e+00'],
               ['5.98711371e-02', '5.06801187e-02', '1.64280994e-02', '2.87580964e-02',
                '-4.14715927e-02', '-2.91840905e-02', '-2.86742944e-02', '-2.59226200e-03',
                '-2.39668149e-03', '-2.17882321e-02', '1.00000000e+00'],
               ['4.53409833e-02', '5.06801187e-02', '6.06183944e-02', '3.10533436e-02',
                '2.87020031e-02', '-4.73467013e-02', '-5.44457591e-02', '7.12099798e-02',
                '1.33598980e-01', '1.35611831e-01', '1.00000000e+00']]


def divide_values_by_scalar(values, scalar):
    return np.array(values) / scalar


def encrypt_vector(public_key, x):
    return [public_key.encrypt(i) for i in x]


def decrypt_vector(private_key, x):
    return [private_key.decrypt(i) for i in x]


if __name__ == "__main__":
    float_values = [float(v) for v_array in init_values for v in v_array]
    pubkey, privkey = paillier.generate_paillier_keypair()
    to_np_values = np.array(float_values)
    encrypted_values = encrypt_vector(pubkey, to_np_values)
    divided_values = encrypted_values
    for i in range(1, 100):
        divided_values = divide_values_by_scalar(divided_values, 1)
    print(decrypt_vector(privkey, divided_values))
Traceback (most recent call last):
  File "/home/agustinrojas/Repositories/agrojas/fiuba/federated-learning-poc/commons/test.py", line 41, in <module>
    print(decrypt_vector(privkey, divided_values))
  File "/home/agustinrojas/Repositories/agrojas/fiuba/federated-learning-poc/commons/test.py", line 30, in decrypt_vector
    return [private_key.decrypt(i) for i in x]
  File "/home/agustinrojas/Repositories/agrojas/fiuba/federated-learning-poc/commons/test.py", line 30, in <listcomp>
    return [private_key.decrypt(i) for i in x]
  File "/home/agustinrojas/Repositories/agrojas/fiuba/federated-learning-poc/server/venv/lib/python3.6/site-packages/phe/paillier.py", line 287, in decrypt
    return encoded.decode()
  File "/home/agustinrojas/Repositories/agrojas/fiuba/federated-learning-poc/server/venv/lib/python3.6/site-packages/phe/encoding.py", line 221, in decode
    raise OverflowError('Overflow detected in decrypted number')
OverflowError: Overflow detected in decrypted number

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions