High-level API in C

This document describes the C bindings to the TFHE-rs high-level primitives for creating Fully Homomorphic Encryption (FHE) programs.

Setting up TFHE-rs C API for C programming.

You can build TFHE-rs C API using the following command:

RUSTFLAGS="-C target-cpu=native" cargo +nightly build --release --features=high-level-c-api -p tfhe

Locate files in the right path:

  • In ${REPO\_ROOT}/target/release/, you can find:

    • The tfhe.h header

    • The static (.a) and dynamic (.so) libtfhe binaries

  • In ${REPO\_ROOT}/target/release/deps/, you can find:

    • The tfhe-c-api-dynamic-buffer.h header

    • The static (.a) and dynamic (.so) libraries

Ensure your build system configures the C or C++ program links against TFHE-rs C API binaries and the dynamic buffer library.

The following is a minimal CMakeLists.txt configuration example:

project(my-project)

cmake_minimum_required(VERSION 3.16)

set(TFHE_C_API "/path/to/tfhe-rs/target/release")

include_directories(${TFHE_C_API})
include_directories(${TFHE_C_API}/deps)
add_library(tfhe STATIC IMPORTED)
set_target_properties(tfhe PROPERTIES IMPORTED_LOCATION ${TFHE_C_API}/libtfhe.a)

if(APPLE)
    find_library(SECURITY_FRAMEWORK Security)
    if (NOT SECURITY_FRAMEWORK)
        message(FATAL_ERROR "Security framework not found")
    endif()
endif()

set(EXECUTABLE_NAME my-executable)
add_executable(${EXECUTABLE_NAME} main.c)
target_include_directories(${EXECUTABLE_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
target_link_libraries(${EXECUTABLE_NAME} LINK_PUBLIC tfhe m pthread dl)
if(APPLE)
    target_link_libraries(${EXECUTABLE_NAME} LINK_PUBLIC ${SECURITY_FRAMEWORK})
endif()
target_compile_options(${EXECUTABLE_NAME} PRIVATE -Werror)

Commented code of a uint128 subtraction using TFHE-rs C API.

The following example demonstrates uint128 subtraction using the TFHE-rs C API:

Ensure the above CMakeLists.txt and main.c files are in the same directory. Use the following commands to execute the example:

Last updated

Was this helpful?