MCPcopy Create free account
hub / github.com/data61/MP-SPDZ / fake

Method fake

FHEOffline/DistKeyGen.cpp:29–93  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

27
28
29void DistKeyGen::fake(FHE_PK& pk, vector<FHE_SK>& sks, const bigint& p, int nparties)
30{
31 vector<DistKeyGen> dkgs(nparties, {pk.get_params(), p});
32 sks.resize(nparties, {pk.get_params(), p});
33 vector<Rq_Element> secrets(nparties, pk.get_params());
34 PRNG G;
35 G.ReSeed();
36 for (int i = 0; i < nparties; i++)
37 dkgs[i].Gen_Random_Data(G);
38
39 Rq_Element a = dkgs[0].a;
40 for (size_t i = 1; i < dkgs.size(); i++)
41 a += dkgs[i].a;
42 for (int i = 0; i < nparties; i++)
43 {
44 dkgs[i].a = a;
45 dkgs[i].compute_b();
46 secrets[i] = dkgs[i].secret;
47 }
48
49 Rq_Element b = dkgs[0].b;
50 for (size_t i = 1; i < dkgs.size(); i++)
51 b += dkgs[i].b;
52 pk.check_noise(b - a * sum(secrets));
53 for (int i = 0; i < nparties; i++)
54 {
55 dkgs[i].b = b;
56 dkgs[i].compute_enc_dash();
57 cout << "after enc_dash" << endl;
58 pk.check_noise(dkgs[i].b - dkgs[i].a * sum(secrets));
59 }
60
61 Ciphertext enc_dash = dkgs[0].enc_dash;
62 for (size_t i = 1; i < dkgs.size(); i++)
63 enc_dash += dkgs[i].enc_dash;
64 for (int i = 0; i < nparties; i++)
65 {
66 dkgs[i].enc_dash = enc_dash;
67 dkgs[i].compute_enc();
68 cout << "after enc" << endl;
69 pk.check_noise(dkgs[i].b - dkgs[i].a * sum(secrets));
70 }
71
72 Rq_Element s = sum(secrets);
73 s.lower_level();
74 FHE_SK sk(pk.get_params(), p);
75 sk.assign(s);
76
77 Ciphertext enc = dkgs[0].enc;
78 for (size_t i = 1; i < dkgs.size(); i++)
79 enc += dkgs[i].enc;
80 for (int i = 0; i < nparties; i++)
81 {
82 dkgs[i].enc = enc;
83 dkgs[i].check_equality(dkgs[0]);
84 dkgs[i].finalize(pk, sks[i]);
85 cout << "after finalize" << endl;
86 pk.check_noise(dkgs[i].b - dkgs[i].a * sum(secrets));

Callers

nothing calls this directly

Calls 14

sumFunction · 0.85
get_paramsMethod · 0.80
ReSeedMethod · 0.80
Gen_Random_DataMethod · 0.80
compute_bMethod · 0.80
check_noiseMethod · 0.80
compute_enc_dashMethod · 0.80
compute_encMethod · 0.80
lower_levelMethod · 0.80
check_equalityMethod · 0.80
resizeMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected