-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathPU.c
61 lines (51 loc) · 2.15 KB
/
PU.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
#include <stdlib.h>
#include "Parameters.h"
#include "paillier.h"
#include <time.h>
#include "declaritions.h"
mpz_t * PU_i_update(struct Pos_Value *pv, paillier_public_key *pub){
int l, h, f;
mpz_t *T_i = (mpz_t *)malloc(L*H*F*sizeof(mpz_t));
mpz_t *T_i_encrypted = (mpz_t *)malloc(L*H*F*sizeof(mpz_t));
for(l = 0; l < L; l++){
for(h = 0; h < H; h++){
for(f = 0; f < F; f++){
if (offset(l,h,f)==pv->pos){
mpz_t temp, W, V, WplusZ;
mpz_inits(temp, W, V, WplusZ, NULL);
mpz_setbit (temp, PSI+K); //set 60+220=280th bit to the right as 1
mpz_set_ui(V, pv->value);
mpz_add(WplusZ, temp, V);
// gmp_printf("%Zd\n%Zd\n%Zd",V,temp,WplusZ);
mpz_sub(W,WplusZ,Z);
mpz_init_set(*(T_i+offset(l,h,f)), W);
// gmp_printf("%Zd\n%Zd\n%Zd",WplusZ,Z,W);
mpz_clears(temp, W, V, WplusZ, Z, NULL);
}
else{
mpz_init_set_ui(*(T_i+offset(l,h,f)), 0);
}
mpz_init(*(T_i_encrypted+offset(l,h,f)));
// gmp_printf("%Zd\n", *(T_i+offset(l,h,f)));
paillier_encrypt(*(T_i_encrypted+offset(l,h,f)), *(T_i+offset(l,h,f)), pub);
}
}
}
// print_mpz_array(T_i);
return T_i_encrypted;
}
struct Pos_Value* PU_data_generation_coordination(){//randomized data
struct Pos_Value* pv = (struct Pos_Value *) malloc(sizeof(struct Pos_Value)*PU_NUM);
srand(time(NULL));
int *value=generate_random_array_no_reps(F*H*L, 0, PU_NUM);
// int *value=(int *)malloc(2*sizeof(int));
// *(value)=0;
// *(value+1)=4;
int pu_i;
for( pu_i=0; pu_i<PU_NUM; pu_i++ ){
(*(pv + pu_i)).pos = *(value+pu_i);
(*(pv + pu_i)).value = rand()%(MAX_SENSITIVITY-MIN_SENSITIVITY)+MIN_SENSITIVITY;
printf("PU operation position: %d, inference sensitivity threshold: %ld\n",(*(pv + pu_i)).pos, (*(pv + pu_i)).value);
}
return pv;
}