Skip to content

Commit f5a326a

Browse files
committed
fix example, add encrypt/decrypt
1 parent 4ab6f2d commit f5a326a

File tree

10 files changed

+196
-155
lines changed

10 files changed

+196
-155
lines changed

CMakeLists.txt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ endif()
1616

1717
set(CMAKE_CXX_FLAGS_RELEASE "-O3")
1818
set(CMAKE_EXPORT_COMPILE_COMMANDS On)
19-
#add_compile_options(-Wall -Wextra -pedantic -Werror)
19+
add_compile_options(-Wall -Wextra -pedantic -Werror)
2020

2121
set(SOURCE_FILES
2222
${CMAKE_CURRENT_SOURCE_DIR}/src/Aces.c
@@ -36,7 +36,7 @@ target_include_directories(CAces PUBLIC
3636

3737
option(CACES_BENCHMARK "Enable benchmarking" OFF)
3838
option(CACES_TEST "Enable tests" OFF)
39-
option(CACES_EXAMPLES "Enable examples" OFF)
39+
option(CACES_EXAMPLE "Enable examples" OFF)
4040

4141
if (CACES_BENCHMARK)
4242
add_subdirectory(benchmarks)
@@ -46,7 +46,7 @@ if (CACES_TEST)
4646
add_subdirectory(tests)
4747
endif()
4848

49-
if (CACES_EXAMPLES)
49+
if (CACES_EXAMPLE)
5050
add_subdirectory(examples)
5151
endif()
5252

examples/example1.c

Lines changed: 69 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -1,73 +1,75 @@
11
#include <Aces.h>
2-
#include <assert.h>
2+
33
#include <stdio.h>
4+
#include <stdlib.h>
5+
#include <time.h>
46

57
#define DIM 10
68

7-
int main()
8-
{
9-
Aces aces;
10-
11-
/** shared_info **/
12-
// initialize U
13-
Coeff u_mem[DIM];
14-
set_polynomial(&aces.shared_info.pk.u, u_mem, DIM);
15-
16-
// initialize lambda
17-
Coeff lambda_mem[DIM][DIM * DIM];
18-
Matrix2D lambda_mat[DIM];
19-
for (int i = 0; i < DIM; ++i) {
20-
lambda_mat[i].dim = DIM;
21-
lambda_mat[i].data = lambda_mem[i];
22-
}
23-
aces.shared_info.pk.lambda.size = DIM;
24-
aces.shared_info.pk.lambda.data = lambda_mat;
25-
26-
/** private_key **/
27-
// initialize x
28-
Coeff x_mem[DIM][DIM];
29-
Polynomial x_polies[DIM];
30-
for (int i = 0; i < DIM; ++i) {
31-
set_polynomial(&x_polies[i], x_mem[i], DIM);
32-
}
33-
aces.private_key.x.size = DIM;
34-
aces.private_key.x.polies = x_polies;
35-
36-
// initialize f0
37-
Coeff f0_mem[DIM][DIM];
38-
Polynomial f0_polies[DIM];
39-
for (int i = 0; i < DIM; ++i) {
40-
set_polynomial(&f0_polies[i], f0_mem[i], DIM);
41-
}
42-
aces.private_key.f0.size = DIM;
43-
aces.private_key.f0.polies = f0_polies;
44-
45-
// initialize f1
46-
Coeff f1_mem[DIM];
47-
set_polynomial(&aces.private_key.f1, f1_mem, DIM);
48-
49-
init_aces(2, 33, DIM, &aces);
50-
51-
uint64_t message = 3;
52-
CipherMessage c_msg;
53-
54-
Coeff c1_mem[DIM][DIM];
55-
Polynomial c1_polies[DIM];
56-
for (int i = 0; i < DIM; ++i) {
57-
set_polynomial(&c1_polies[i], c1_mem[i], DIM);
58-
}
59-
c_msg.c1.size = DIM;
60-
c_msg.c1.polies = f0_polies;
61-
62-
Coeff c2_mem[DIM];
63-
set_polynomial(&c_msg.c2, c2_mem, DIM);
64-
65-
aces_encrypt(&aces, &message, 1, &c_msg);
66-
67-
uint64_t recovered_message;
68-
aces_decrypt(&aces, &c_msg, 1, &recovered_message);
69-
70-
printf("%lu == %lu\n",recovered_message, message);
71-
72-
return 0;
9+
int main() {
10+
srand(time(NULL));
11+
Aces aces;
12+
13+
/** shared_info **/
14+
// initialize U
15+
Coeff u_mem[DIM + 1];
16+
set_polynomial(&aces.shared_info.pk.u, u_mem, DIM + 1);
17+
18+
// initialize lambda
19+
uint64_t lambda_mem[DIM][DIM * DIM];
20+
Matrix2D lambda_mat[DIM];
21+
for (int i = 0; i < DIM; ++i) {
22+
lambda_mat[i].dim = DIM;
23+
lambda_mat[i].data = lambda_mem[i];
24+
}
25+
aces.shared_info.pk.lambda.size = DIM;
26+
aces.shared_info.pk.lambda.data = lambda_mat;
27+
28+
/** private_key **/
29+
// initialize x
30+
Coeff x_mem[DIM][DIM];
31+
Polynomial x_polies[DIM];
32+
for (int i = 0; i < DIM; ++i) {
33+
set_polynomial(&x_polies[i], x_mem[i], DIM);
34+
}
35+
aces.private_key.x.size = DIM;
36+
aces.private_key.x.polies = x_polies;
37+
38+
// initialize f0
39+
Coeff f0_mem[DIM][DIM];
40+
Polynomial f0_polies[DIM];
41+
for (int i = 0; i < DIM; ++i) {
42+
set_polynomial(&f0_polies[i], f0_mem[i], DIM);
43+
}
44+
aces.private_key.f0.size = DIM;
45+
aces.private_key.f0.polies = f0_polies;
46+
47+
// initialize f1
48+
Coeff f1_mem[DIM];
49+
set_polynomial(&aces.private_key.f1, f1_mem, DIM);
50+
51+
init_aces(2, 33, DIM, &aces);
52+
53+
uint64_t message = 1;
54+
CipherMessage c_msg;
55+
56+
Coeff c1_mem[DIM][DIM];
57+
Polynomial c1_polies[DIM];
58+
for (int i = 0; i < DIM; ++i) {
59+
set_polynomial(&c1_polies[i], c1_mem[i], DIM);
60+
}
61+
c_msg.c1.size = DIM;
62+
c_msg.c1.polies = c1_polies;
63+
64+
Coeff c2_mem[DIM];
65+
set_polynomial(&c_msg.c2, c2_mem, DIM);
66+
67+
aces_encrypt(&aces, &message, 1, &c_msg);
68+
69+
uint64_t recovered_message;
70+
aces_decrypt(&aces, &c_msg, 1, &recovered_message);
71+
72+
printf("%lu == %lu\n", recovered_message, message % 2);
73+
74+
return 0;
7375
}

lib/Aces-internal.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@ extern "C" {
66
#endif
77

88
#include "Channel.h"
9+
#include "Matrix.h"
910
#include "Polynomial.h"
11+
1012
#include <stdint.h>
1113

1214
#define EPROB 0.5

lib/Aces.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ extern "C" {
66
#endif
77

88
#include "Channel.h"
9+
#include "Matrix.h"
910
#include "Polynomial.h"
1011

1112
/**

lib/Channel.h

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
#ifndef CHANNEL_H
22
#define CHANNEL_H
33

4-
#include "Common.h"
5-
#include "Matrix.h"
6-
#include "Polynomial.h"
4+
#include <stdint.h>
75

86
typedef struct {
97
uint64_t dim;

src/Aces-internal.c

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#include "Aces-internal.h"
22
#include "Common.h"
3-
#include "Matrix.h"
3+
4+
#include <string.h>
45

56
int generate_error(uint64_t q, uint64_t dim, uint64_t message, Polynomial *rm) {
67
(void)dim;
@@ -125,15 +126,24 @@ int generate_f1(const Channel *channel, const Parameters *param,
125126
Polynomial *f1) {
126127
Polynomial tmp;
127128
Coeff mem[param->dim * 2];
128-
set_polynomial(&tmp, mem, param->dim * 2);
129129

130-
set_zero(f1);
131-
set_zero(&tmp);
130+
Polynomial f_pre;
131+
Coeff f_pre_mem[param->dim * 2];
132+
set_polynomial(&f_pre, f_pre_mem, param->dim * 2);
133+
134+
set_zero(&f_pre);
132135

133136
for (size_t i = 0; i < param->dim; ++i) {
137+
set_polynomial(&tmp, mem, param->dim * 2);
134138
poly_mul(&f0->polies[i], &x->polies[i], &tmp, channel->q);
135-
poly_add(f1, &tmp, f1, channel->q);
139+
poly_add(&f_pre, &tmp, &f_pre, channel->q);
136140
}
137-
poly_mod(f1, u, channel->q);
141+
poly_mod(&f_pre, u, channel->q);
142+
143+
size_t diff = f1->size - f_pre.size;
144+
f1->coeffs += diff;
145+
f1->size -= diff;
146+
memcpy(f1->coeffs, f_pre.coeffs, f_pre.size * sizeof(Coeff));
147+
138148
return 0;
139149
}

0 commit comments

Comments
 (0)