Skip to content

Commit

Permalink
chore(tfhe): update README
Browse files Browse the repository at this point in the history
  • Loading branch information
IceTDrinker committed Jan 12, 2023
1 parent 941fa09 commit f72fcb0
Showing 1 changed file with 19 additions and 11 deletions.
30 changes: 19 additions & 11 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -95,24 +95,32 @@ Another example of how the library can be used with shortints:
use tfhe::shortint::prelude::*;

fn main() {
// We generate a set of client/server keys, using the default parameters:
// Generate a set of client/server keys, using the default parameters:
let (client_key, server_key) = gen_keys(Parameters::default());

let msg1 = 1;
let msg2 = 0;
let msg1 = 3;
let msg2 = 2;

let modulus = client_key.parameters.message_modulus.0;

// We use the client key to encrypt two messages:
// Encrypt two messages using the (private) client key:
let ct_1 = client_key.encrypt(msg1);
let ct_2 = client_key.encrypt(msg2);

// We use the server public key to execute an integer circuit:
let ct_3 = server_key.unchecked_add(&ct_1, &ct_2);
// Homomorphically compute an addition
let ct_add = server_key.unchecked_add(&ct_1, &ct_2);

// Define the Hamming weight function
// f: x -> sum of the bits of x
let f = |x:u64| x.count_ones() as u64;

// Generate the accumulator for the function
let acc = server_key.generate_accumulator(f);

// Compute the function over the ciphertext using the PBS
let ct_res = server_key.keyswitch_programmable_bootstrap(&ct_add, &acc);

// We use the client key to decrypt the output of the circuit:
let output = client_key.decrypt(&ct_3);
assert_eq!(output, (msg1 + msg2) % modulus as u64);
// Decrypt the ciphertext using the (private) client key
let output = client_key.decrypt(&ct_res);
assert_eq!(output, f(msg1 + msg2));
}
```

Expand Down

0 comments on commit f72fcb0

Please sign in to comment.