-
Notifications
You must be signed in to change notification settings - Fork 16
/
api_tests.c
144 lines (129 loc) · 4.73 KB
/
api_tests.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.
/**
@file api_tests.c
*/
#include <stdbool.h>
#include <stdio.h>
#include "ckks_tests_common.h"
#include "defines.h"
#include "seal_embedded.h"
#include "test_common.h"
#include "util_print.h"
// -- Comment out to run true test
// #define SE_API_TESTS_DEBUG
/**
Function to print ciphertext values with the same function signature as SEND_FNCT_PTR.
Used in place of a networking function for testing.
Size req: v must be at least vlen_bytes
@param[in] v Input polynomial (ciphertext) to be printed
@param[in] vlen_bytes Number of bytes of v to print
@returns Then number of bytes of v that were printed (equal to vlen_bytes on success)
*/
size_t test_print_ciphertexts(void *v, size_t vlen_bytes)
{
static int idx = 0;
size_t vlen = vlen_bytes / sizeof(ZZ);
const char *name = idx ? "c1" : "c0";
#ifdef SE_API_TESTS_DEBUG
print_poly(name, (ZZ *)v, vlen);
#else
print_poly_full(name, (ZZ *)v, vlen);
#endif
idx = idx ? 0 : 1;
return vlen_bytes;
}
/**
Helper function to tests the default SEAL-Embedded API for by printing values of a ciphertext.
If SE_DISABLE_TESTING_CAPABILITY is not defined, throws an error on failure.
On success, resulting output can be verified with the SEAL-Embedded adapter.
*/
void test_ckks_api_base(SE_PARMS *se_parms)
{
se_assert(se_parms);
se_assert(se_parms->parms);
se_assert(se_parms->se_ptrs);
SEND_FNCT_PTR fake_network_func = (void *)&test_print_ciphertexts;
size_t vlen = se_parms->parms->coeff_count / 2;
#ifdef SE_USE_MALLOC
flpt *v = calloc(vlen, sizeof(flpt));
#else
flpt v[SE_DEGREE_N / 2];
memset(&v, 0, SE_DEGREE_N * sizeof(flpt) / 2);
se_assert(SE_DEGREE_N / 2 == se_parms->parms->coeff_count / 2);
#endif
for (size_t testnum = 0; testnum < 9; testnum++)
{
// -- Set up buffer v with testing values
set_encode_encrypt_test(testnum, vlen, &(v[0]));
// -- Print the expected output. This will help the adapter with verification.
#ifdef SE_API_TESTS_DEBUG
print_poly_flpt("v (cleartext)", v, vlen);
#else
print_poly_flpt_full("v (cleartext)", v, vlen);
#endif
// -- Call the main encryption function!
/*
// -- Seed for testing
uint8_t share_seed[SE_PRNG_SEED_BYTE_COUNT];
uint8_t seed[SE_PRNG_SEED_BYTE_COUNT];
memset(&(share_seed[0]), 0, SE_PRNG_SEED_BYTE_COUNT);
memset(&( seed[0]), 0, SE_PRNG_SEED_BYTE_COUNT);
share_seed[0] = 1;
seed[0] = 1;
bool ret = se_encrypt_seeded(share_seed, seed, fake_network_func, &(v[0]), vlen *
sizeof(flpt), false, se_parms); se_assert(ret);
*/
se_encrypt(fake_network_func, &(v[0]), vlen * sizeof(flpt), false, se_parms);
}
#ifdef SE_USE_MALLOC
if (v)
{
free(v);
v = 0;
}
#endif
delete_parameters(se_parms->parms);
}
/**
Tests the default SEAL-Embedded API for symmetric encryption by printing values of a ciphertext.
If SE_DISABLE_TESTING_CAPABILITY is not defined, throws an error on failure.
On success, resulting output can be verified with the SEAL-Embedded adapter.
*/
void test_ckks_api_sym(void)
{
printf("Beginning tests for ckks api symmetric encrypt...\n");
#ifndef SE_USE_MALLOC
static ZZ mempool_local[MEMPOOL_SIZE];
*mempool_ptr_global = &(mempool_local[0]);
// -- Debugging
// printf("Address of mempool_local: %p\n", &(mempool_local[0]));
// printf("Address of mempool_ptr_global: %p\n", &mempool_ptr_global);
// printf("Value of mempool_ptr_global (should be address of mempool_local): %p\n",
// mempool_ptr_global);
#endif
SE_PARMS *se_parms = se_setup_default(SE_SYM_ENCR);
print_test_banner("Symmetric Encryption (API)", se_parms->parms);
test_ckks_api_base(se_parms);
}
/**
Tests the default SEAL-Embedded API for asymmetric encryption by printing values of a ciphertext.
If SE_DISABLE_TESTING_CAPABILITY is not defined, throws an error on failure.
On success, resulting output can be verified with the SEAL-Embedded adapter.
*/
void test_ckks_api_asym(void)
{
printf("Beginning tests for ckks api asymmetric encrypt...\n");
#ifndef SE_USE_MALLOC
static ZZ mempool_local[MEMPOOL_SIZE];
*mempool_ptr_global = &(mempool_local[0]);
// -- Debugging
// printf("Address of mempool_local: %p\n", &(mempool_local[0]));
// printf("Address of mempool_ptr_global: %p\n", &mempool_ptr_global);
// printf("Value of mempool_ptr_global (should be address of mempool_local): %p\n",
// mempool_ptr_global);
#endif
SE_PARMS *se_parms = se_setup_default(SE_ASYM_ENCR);
print_test_banner("Asymmetric Encryption (API)", se_parms->parms);
test_ckks_api_base(se_parms);
}