Available on crate feature
boolean
only.Expand description
Welcome to the TFHE-rs boolean
module documentation!
§Special module attributes
cbindgen:ignore
§Description
This library makes it possible to execute boolean gates over encrypted bits. It allows to execute a boolean circuit on an untrusted server because both circuit inputs and outputs are kept private. Data are indeed encrypted on the client side, before being sent to the server. On the server side every computation is performed on ciphertexts. The server however has to know the boolean circuit to be evaluated. At the end of the computation, the server returns the encryption of the result to the user.
§Quick Example
The following piece of code shows how to generate keys and run a small Boolean circuit homomorphically.
use tfhe::boolean::gen_keys;
use tfhe::boolean::prelude::*;
// We generate a set of client/server keys, using the default parameters:
let (mut client_key, mut server_key) = gen_keys();
// We use the client secret key to encrypt two messages:
let ct_1 = client_key.encrypt(true);
let ct_2 = client_key.encrypt(false);
// We use the server public key to execute a boolean circuit:
// if ((NOT ct_2) NAND (ct_1 AND ct_2)) then (NOT ct_2) else (ct_1 AND ct_2)
let ct_3 = server_key.not(&ct_2);
let ct_4 = server_key.and(&ct_1, &ct_2);
let ct_5 = server_key.nand(&ct_3, &ct_4);
let ct_6 = server_key.mux(&ct_5, &ct_3, &ct_4);
// We use the client key to decrypt the output of the circuit:
let output_1 = client_key.decrypt(&ct_6);
assert_eq!(output_1, true);
// It is possible to compute gates with one input unencrypted
let ct_7 = server_key.and(&ct_6, true);
let output_2 = client_key.decrypt(&ct_7);
assert_eq!(output_2, true);
// It is possible to trivially encrypt on the server side
// i.e. to not encrypt but still generate a compatible Ciphertext
let ct_8 = server_key.trivial_encrypt(false);
let ct_9 = server_key.mux(&ct_7, &ct_3, &ct_8);
let output_3 = client_key.decrypt(&ct_9);
assert_eq!(output_3, true);
Modules§
- An encryption of a boolean message.
- The secret key of the client.
- Module with the engine definitions.
- The cryptographic parameter set.
- Module with the definition of the prelude.
- The public key for homomorphic computation.
Functions§
- Generate a couple of client and server keys with the default cryptographic parameters:
DEFAULT_PARAMETERS
. The client is the one generating both keys.