Quick start
This document covers how to compute on encrypted data homomorphically using the Concrete framework. We will walk you through a complete example step-by-step.
The basic workflow of computation is as follows:
Define the function you want to compute
Compile the function into a Concrete
Circuit
Use the
Circuit
to perform homomorphic evaluation
Here is the complete example, which we will explain step by step in the following paragraphs.
Decorator
Another simple way to compile a function is to use a decorator.
Importing the library
Import the fhe
module, which includes everything you need to perform homomorphic evaluation:
Defining the function to compile
Here we define a simple addition function:
Creating a compiler
To compile the function, you first need to create a Compiler
by specifying the function to compile and the encryption status of its inputs:
For instance, to set the input y as clear:
Defining an inputset
An inputset is a collection representing the typical inputs of the function. It is used to determine the bit widths and shapes of the variables within the function.
The inputset should be an iterable that yields tuples of the same length as the number of arguments of the compiled function.
For example:
Here, our inputset consists of 10 integer pairs, ranging from a minimum of (0, 0)
to a maximum of (7, 7)
.
Compiling the function
Use the compile
method of the Compiler
class with an inputset to perform the compilation and get the resulting circuit:
Generating the keys
Use the keygen
method of the Circuit
class to generate the keys (public and private):
Performing homomorphic evaluation
Now you can easily perform the homomorphic evaluation using the encrypt
, run
and decrypt
methods of the Circuit
:
Zama 5-Question Developer Survey
Last updated
Was this helpful?