Skip to content

A strange bug related to plaintext computation #2525

@zooiik

Description

@zooiik

Hi! I meet a very strange issue with HEIR's python frontend (heir-py 0.0.2) 😂

If I write my code like this:

from heir import compile
from heir.mlir import I32, Secret

@compile()
def func(x: Secret[I32]):
    v2 = x + 10
    v3 = 15 * 3
    v4 = 10 * v3
    v5 = v4 + v4
    return v5 + v2

if __name__ == "__main__":
    x = 2
    func.setup()
    enc_x = func.encrypt_x(x)
    result_enc = func.eval(enc_x)
    result = func.decrypt_result(result_enc)
    print(f"Expected result: {func.original(x)}")
    print(f"FHE result: {result}")

It will output:

Expected result: 912
FHE result: 144

However, if I reduce this program and write it as:

from heir import compile
from heir.mlir import I32, Secret

@compile()
def func(x: Secret[I32]):
    v2 = x + 10
    v3 = 10 * 15 * 3
    v5 = v3 + v3
    return v5 + v2

if __name__ == "__main__":
    x = 2
    func.setup()
    enc_x = func.encrypt_x(x)
    result_enc = func.eval(enc_x)
    result = func.decrypt_result(result_enc)
    print(f"Expected result: {func.original(x)}")
    print(f"FHE result: {result}")

It works well:

Expected result: 912
FHE result: 912

And, if I use this program:

from heir import compile
from heir.mlir import I32, Secret

@compile()
def func(x: Secret[I32]):
    v2 = x + 10
    v3 = 15 * 3
    v4 = 10 * v3
    v5 = v4 + v4
    return v5 + v3

if __name__ == "__main__":
    x = 2
    func.setup()
    enc_x = func.encrypt_x(x)
    result_enc = func.eval(enc_x)
    result = func.decrypt_result(result_enc)
    print(f"Expected result: {func.original(x)}")
    print(f"FHE result: {result}")

It will crash with red error message.

Metadata

Metadata

Labels

python frontendIssues related to the python frontend

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions