Skip to main content

The HEIR compiler

Project description

HEIR: Homomorphic Encryption Intermediate Representation

GitHub Workflow Status (with event) GitHub Contributors GitHub Discussions GitHub License OpenSSF Scorecard

An MLIR-based toolchain for homomorphic encryption compilers. Read the docs at the HEIR website.

For more information on MLIR, see the MLIR homepage.

Quickstart (Python)

Pip install the heir_py package

pip install heir_py

Then run an example:

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

@compile()  # defaults to scheme="bgv", OpenFHE backend, and debug=False
def func(x: Secret[I64], y: Secret[I64]):
    sum = x + y
    diff = x - y
    mul = x * y
    expression = sum * diff + mul
    deadcode = expression * mul
    return expression

func.setup()
enc_x = func.encrypt_x(7)
enc_y = func.encrypt_y(8)
result_enc = func.eval(enc_x, enc_y)
result = func.decrypt_result(result_enc)

print(
  f"Expected result for `func`: {func.original(7,8)}, FHE result:"
  f" {result}"
)

This will compile the function above using the BGV scheme to machine code via the OpenFHE backend. Then calling the function will encrypt the inputs, run the function, and return the decrypted result. The function call foo(7, 8) runs the entire encrypt-run-decrypt flow for ease of testing.

Building from source

This project uses bazel for its build system. Install bazelisk to manage the bazel version automatically. Then, with bazel on your path (pointing to bazelisk), run the following to build the main pass-running tool.

bazel build //tools:heir-opt

Or run an end-to-end test like

bazel test //tests/Examples/openfhe/ckks/halevi_shoup_matvec:all

HEIR depends on LLVM (from source) so a clean build may take 30 minutes depending on your machine. For faster builds, use BuildBuddy. Sign up for an account, create an API key, and add the following to .bazelrc.user in the root of the HEIR workspace:

common --remote_header=x-buildbuddy-api-key=<YOUR_API_KEY>
common --config=remote

This should reduce a clean build time to about 5 minutes.

See the bazel tips page for more example commands and tips on using bazel.

Supported backends and schemes

Backend Library BGV BFV CKKS CGGI
OpenFHE
Lattigo
tfhe-rs
Jaxite

Note some backends do not support all schemes.

Contributing

There are many ways to contribute to HEIR:

Citations

The HEIR project can be cited in in academic work through following entry:

@misc{ali2025heir,
      title={HEIR: A Universal Compiler for Homomorphic Encryption},
      author={Asra Ali and Jaeho Choi and Bryant Gipson and Shruthi Gorantala
              and Jeremy Kun and Wouter Legiest and Lawrence Lim and Alexander
              Viand and Meron Zerihun Demissie and Hongren Zheng},
      year={2025},
      eprint={2508.11095},
      archivePrefix={arXiv},
      primaryClass={cs.CR},
      url={https://arxiv.org/abs/2508.11095},
}

Support disclaimer

This is not an officially supported Google product.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

heir_py-2026.7.1.tar.gz (14.3 MB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

heir_py-2026.7.1-cp310-abi3-manylinux_2_28_x86_64.whl (34.5 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.28+ x86-64

heir_py-2026.7.1-cp310-abi3-manylinux_2_28_aarch64.whl (32.6 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.28+ ARM64

heir_py-2026.7.1-cp310-abi3-macosx_11_0_arm64.whl (35.7 MB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

File details

Details for the file heir_py-2026.7.1.tar.gz.

File metadata

  • Download URL: heir_py-2026.7.1.tar.gz
  • Upload date:
  • Size: 14.3 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for heir_py-2026.7.1.tar.gz
Algorithm Hash digest
SHA256 9423e531d7cf1cef18c04ba41e13bb0677e9d76ae4a9b6bbf1d562d34fb498b7
MD5 98491bd0cdd90995bcf7e9524061a42f
BLAKE2b-256 fecb9500ca1eb17e615670a56908353751f186015fa9d87e247ec8e8bb7fcb13

See more details on using hashes here.

Provenance

The following attestation bundles were made for heir_py-2026.7.1.tar.gz:

Publisher: release.yml on google/heir

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file heir_py-2026.7.1-cp310-abi3-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for heir_py-2026.7.1-cp310-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 856ad7f8c4a06807a06da0ff8f0ad8bee889a503225a89c2443dc97912e8b648
MD5 9d87c31190188b11817148f83ba03760
BLAKE2b-256 2e561b62ff27b1dc2401689c96897d3fe9ac7d0d62f30189e9af33a410248fb2

See more details on using hashes here.

Provenance

The following attestation bundles were made for heir_py-2026.7.1-cp310-abi3-manylinux_2_28_x86_64.whl:

Publisher: release.yml on google/heir

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file heir_py-2026.7.1-cp310-abi3-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for heir_py-2026.7.1-cp310-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 0afa7904c911649ba37043834baa2eb0dab546080716fd7aa9e88e8265c16833
MD5 1af3fdb4186f4e0ee54e36286d1f6600
BLAKE2b-256 b8363c8b423c9980cb6bb6a2ae25859755d3cf98c41ae88a64dc457ed2a4b07e

See more details on using hashes here.

Provenance

The following attestation bundles were made for heir_py-2026.7.1-cp310-abi3-manylinux_2_28_aarch64.whl:

Publisher: release.yml on google/heir

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file heir_py-2026.7.1-cp310-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for heir_py-2026.7.1-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b76748037db1cbabb03a236d2e21445c1eb13b37430ac92024e840c8223704b7
MD5 7adfd3f6743c23644d6abfd72d0b77df
BLAKE2b-256 b39e7670c25cd4d9bd7c50805ab7ea86f9a8681cf8897ab6a05b9a449f6d597f

See more details on using hashes here.

Provenance

The following attestation bundles were made for heir_py-2026.7.1-cp310-abi3-macosx_11_0_arm64.whl:

Publisher: release.yml on google/heir

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page