-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathPublicKeys.java
More file actions
95 lines (73 loc) · 2.79 KB
/
PublicKeys.java
File metadata and controls
95 lines (73 loc) · 2.79 KB
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
package ckks;
public class PublicKeys {
private Polynomial b, a;
long[][] relinKeyB, relinKeyA;
public PublicKeys() {
}
public PublicKeys(Polynomial b, Polynomial a) {
this.b = b;
this.a = a;
}
public void setRelinKeys(long[][] relinKeyB,
long[][] relinKeyA) {
this.relinKeyB = relinKeyB;
this.relinKeyA = relinKeyA;
}
public Polynomial getB() {
return b;
}
public Polynomial getA() {
return a;
}
public long[][] getRelinKeyB() {
return relinKeyB;
}
public long[][] getRelinKeyA() {
return relinKeyA;
}
public long[] serialize() {
long[] bSerialized = b.serialize();
long[] aSerialized = a.serialize();
long[] res = new long[1 + bSerialized.length + 1 + aSerialized.length + 2
+ relinKeyA.length * relinKeyA[0].length + 2 + relinKeyB.length * relinKeyB[0].length];
int idx = 0;
res[idx++] = bSerialized.length;
for (int i = 0; i < bSerialized.length; i++)
res[idx++] = bSerialized[i];
res[idx++] = aSerialized.length;
for (int i = 0; i < aSerialized.length; i++)
res[idx++] = aSerialized[i];
res[idx++] = relinKeyB.length;
res[idx++] = relinKeyB[0].length;
for (int i = 0; i < relinKeyB.length; i++)
for (int j = 0; j < relinKeyB[0].length; j++)
res[idx++] = relinKeyB[i][j];
res[idx++] = relinKeyA.length;
res[idx++] = relinKeyA[0].length;
for (int i = 0; i < relinKeyA.length; i++)
for (int j = 0; j < relinKeyA[0].length; j++)
res[idx++] = relinKeyA[i][j];
return res;
}
public void deserialize(Context context, long[] serialization) {
int idx = 0;
long[] bSerialized = new long[(int) serialization[idx++]];
for (int i = 0; i < bSerialized.length; i++)
bSerialized[i] = serialization[idx++];
b = new Polynomial();
b.deserialize(context, bSerialized);
long[] aSerialized = new long[(int) serialization[idx++]];
for (int i = 0; i < aSerialized.length; i++)
aSerialized[i] = serialization[idx++];
a = new Polynomial();
a.deserialize(context, aSerialized);
relinKeyB = new long[(int) serialization[idx++]][(int) serialization[idx++]];
for (int i = 0; i < relinKeyB.length; i++)
for (int j = 0; j < relinKeyB[0].length; j++)
relinKeyB[i][j] = serialization[idx++];
relinKeyA = new long[(int) serialization[idx++]][(int) serialization[idx++]];
for (int i = 0; i < relinKeyA.length; i++)
for (int j = 0; j < relinKeyA[0].length; j++)
relinKeyA[i][j] = serialization[idx++];
}
}