Skip to content

Commit

Permalink
chore(c_api): add the c_api code from the docs as a test
Browse files Browse the repository at this point in the history
  • Loading branch information
IceTDrinker committed Jan 3, 2024
1 parent 3ae27e7 commit 4a2e9e5
Showing 1 changed file with 68 additions and 0 deletions.
68 changes: 68 additions & 0 deletions tfhe/c_api_tests/test_c_doc.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
// If this test break the c_api doc needs to be updated

#include <tfhe.h>

#include <assert.h>
#include <stdio.h>

int main(void)
{
int ok = 0;
// Prepare the config builder for the high level API and choose which types to enable
ConfigBuilder *builder;
Config *config;

// Put the builder in a default state without any types enabled
config_builder_all_disabled(&builder);
// Enable the uint128 type using the small LWE key for encryption
config_builder_enable_default_integers_small(&builder);
// Populate the config
config_builder_build(builder, &config);

ClientKey *client_key = NULL;
ServerKey *server_key = NULL;

// Generate the keys using the config
generate_keys(config, &client_key, &server_key);
// Set the server key for the current thread
set_server_key(server_key);

FheUint128 *lhs = NULL;
FheUint128 *rhs = NULL;
FheUint128 *result = NULL;
// A 128-bit unsigned integer containing value: 20 << 64 | 10
U128 clear_lhs = { .w0 = 10, .w1 = 20 };
// A 128-bit unsigned integer containing value: 2 << 64 | 1
U128 clear_rhs = { .w0 = 1, .w1 = 2 };

ok = fhe_uint128_try_encrypt_with_client_key_u128(clear_lhs, client_key, &lhs);
assert(ok == 0);

ok = fhe_uint128_try_encrypt_with_client_key_u128(clear_rhs, client_key, &rhs);
assert(ok == 0);

// Compute the subtraction
ok = fhe_uint128_sub(lhs, rhs, &result);
assert(ok == 0);

U128 clear_result;
// Decrypt
ok = fhe_uint128_decrypt(result, client_key, &clear_result);
assert(ok == 0);

// Here the subtraction allows us to compare each word
assert(clear_result.w0 == 9);
assert(clear_result.w1 == 18);

// Destroy the ciphertexts
fhe_uint128_destroy(lhs);
fhe_uint128_destroy(rhs);
fhe_uint128_destroy(result);

// Destroy the keys
client_key_destroy(client_key);
server_key_destroy(server_key);

printf("FHE computation successful!\n");
return EXIT_SUCCESS;
}

0 comments on commit 4a2e9e5

Please sign in to comment.