|
@@ -532,13 +532,11 @@ std::vector<Proof> PrsonaClient::generate_vote_proof(
|
|
|
{
|
|
|
Proof currProof;
|
|
|
|
|
|
- Scalar c_r, z_r, a, b, s_1, s_2, t_1, t_2;
|
|
|
+ Scalar c_r, z_r, a, s, t_1, t_2;
|
|
|
c_r.set_random();
|
|
|
z_r.set_random();
|
|
|
a.set_random();
|
|
|
- b.set_random();
|
|
|
- s_1.set_random();
|
|
|
- s_2.set_random();
|
|
|
+ s.set_random();
|
|
|
t_1.set_random();
|
|
|
t_2.set_random();
|
|
|
|
|
@@ -548,49 +546,42 @@ std::vector<Proof> PrsonaClient::generate_vote_proof(
|
|
|
newEncryptedVotes[i] * c_r;
|
|
|
|
|
|
CurveBipoint C_a = serverPublicKey.get_bipoint_curvegen() * a +
|
|
|
- serverPublicKey.get_bipoint_curve_subgroup_gen() * s_1;
|
|
|
+ serverPublicKey.get_bipoint_curve_subgroup_gen() * s;
|
|
|
|
|
|
- CurveBipoint C_b = serverPublicKey.get_bipoint_curvegen() * b +
|
|
|
- serverPublicKey.get_bipoint_curve_subgroup_gen() * s_2;
|
|
|
-
|
|
|
- Scalar power = (a.curveAdd(b)).curveMult(votes[i].curveMult(votes[i]));
|
|
|
+ Scalar power = (a.curveAdd(a)).curveMult(votes[i].curveMult(votes[i]));
|
|
|
power =
|
|
|
- power.curveSub((a.curveAdd(a).curveAdd(b)).curveMult(votes[i]));
|
|
|
- CurveBipoint C_c = serverPublicKey.get_bipoint_curvegen() * power +
|
|
|
+ power.curveSub((a.curveAdd(a).curveAdd(a)).curveMult(votes[i]));
|
|
|
+ CurveBipoint C_b = serverPublicKey.get_bipoint_curvegen() * power +
|
|
|
serverPublicKey.get_bipoint_curve_subgroup_gen() * t_1;
|
|
|
- currProof.partialUniversals.push_back(C_c[0]);
|
|
|
- currProof.partialUniversals.push_back(C_c[1]);
|
|
|
+ currProof.partialUniversals.push_back(C_b[0]);
|
|
|
+ currProof.partialUniversals.push_back(C_b[1]);
|
|
|
|
|
|
- CurveBipoint C_d =
|
|
|
+ CurveBipoint C_c =
|
|
|
serverPublicKey.get_bipoint_curvegen() *
|
|
|
- a.curveMult(b.curveMult(votes[i])) +
|
|
|
+ a.curveMult(a.curveMult(votes[i])) +
|
|
|
serverPublicKey.get_bipoint_curve_subgroup_gen() * t_2;
|
|
|
|
|
|
- oracleInput << U << C_a << C_b << C_c << C_d;
|
|
|
+ oracleInput << U << C_a << C_b << C_c;
|
|
|
|
|
|
Scalar c = oracle(oracleInput.str());
|
|
|
Scalar c_n = c.curveSub(c_r);
|
|
|
currProof.challengeParts.push_back(c_r);
|
|
|
currProof.challengeParts.push_back(c_n);
|
|
|
|
|
|
- Scalar f_1 = (votes[i].curveMult(c_n)).curveAdd(a);
|
|
|
- Scalar f_2 = (votes[i].curveMult(c_n)).curveAdd(b);
|
|
|
- Scalar z_na = (seeds[i].curveMult(c_n)).curveAdd(s_1);
|
|
|
- Scalar z_nb = (seeds[i].curveMult(c_n)).curveAdd(s_2);
|
|
|
+ Scalar f = (votes[i].curveMult(c_n)).curveAdd(a);
|
|
|
+ Scalar z_na = (seeds[i].curveMult(c_n)).curveAdd(s);
|
|
|
|
|
|
Scalar t_1_c_n_t_2 = (t_1.curveMult(c_n)).curveAdd(t_2);
|
|
|
- Scalar f_1_c_n = f_1.curveSub(c_n);
|
|
|
- Scalar c_n_f_2 = c_n.curveAdd(c_n).curveSub(f_2);
|
|
|
- Scalar z_nc =
|
|
|
- (seeds[i].curveMult(f_1_c_n).curveMult(c_n_f_2)).curveAdd(
|
|
|
+ Scalar f_c_n = f.curveSub(c_n);
|
|
|
+ Scalar c_n2_f = c_n.curveAdd(c_n).curveSub(f);
|
|
|
+ Scalar z_nb =
|
|
|
+ (seeds[i].curveMult(f_c_n).curveMult(c_n2_f)).curveAdd(
|
|
|
t_1_c_n_t_2);
|
|
|
|
|
|
currProof.responseParts.push_back(z_r);
|
|
|
- currProof.responseParts.push_back(f_1);
|
|
|
- currProof.responseParts.push_back(f_2);
|
|
|
+ currProof.responseParts.push_back(f);
|
|
|
currProof.responseParts.push_back(z_na);
|
|
|
currProof.responseParts.push_back(z_nb);
|
|
|
- currProof.responseParts.push_back(z_nc);
|
|
|
|
|
|
retval.push_back(currProof);
|
|
|
}
|
|
@@ -599,43 +590,37 @@ std::vector<Proof> PrsonaClient::generate_vote_proof(
|
|
|
Proof currProof;
|
|
|
|
|
|
Scalar u, commitmentLambda_1, commitmentLambda_2,
|
|
|
- c_n, z_na, z_nb, z_nc, f_1, f_2;
|
|
|
+ c_n, z_na, z_nb, f;
|
|
|
u.set_random();
|
|
|
commitmentLambda_1.set_random();
|
|
|
commitmentLambda_2.set_random();
|
|
|
c_n.set_random();
|
|
|
z_na.set_random();
|
|
|
z_nb.set_random();
|
|
|
- z_nc.set_random();
|
|
|
- f_1.set_random();
|
|
|
- f_2.set_random();
|
|
|
+ f.set_random();
|
|
|
|
|
|
CurveBipoint U =
|
|
|
serverPublicKey.get_bipoint_curve_subgroup_gen() * u;
|
|
|
|
|
|
- CurveBipoint C_a = serverPublicKey.get_bipoint_curvegen() * f_1 +
|
|
|
+ CurveBipoint C_a = serverPublicKey.get_bipoint_curvegen() * f +
|
|
|
serverPublicKey.get_bipoint_curve_subgroup_gen() * z_na -
|
|
|
newEncryptedVotes[i] * c_n;
|
|
|
|
|
|
- CurveBipoint C_b = serverPublicKey.get_bipoint_curvegen() * f_2 +
|
|
|
- serverPublicKey.get_bipoint_curve_subgroup_gen() * z_nb -
|
|
|
- newEncryptedVotes[i] * c_n;
|
|
|
-
|
|
|
- CurveBipoint C_c =
|
|
|
+ CurveBipoint C_b =
|
|
|
serverPublicKey.get_bipoint_curvegen() * commitmentLambda_1 +
|
|
|
serverPublicKey.get_bipoint_curve_subgroup_gen() *
|
|
|
commitmentLambda_2;
|
|
|
- currProof.partialUniversals.push_back(C_c[0]);
|
|
|
- currProof.partialUniversals.push_back(C_c[1]);
|
|
|
+ currProof.partialUniversals.push_back(C_b[0]);
|
|
|
+ currProof.partialUniversals.push_back(C_b[1]);
|
|
|
|
|
|
- Scalar f_1_c_n = f_1.curveSub(c_n);
|
|
|
- Scalar c_n_f_2 = c_n.curveAdd(c_n).curveSub(f_2);
|
|
|
- CurveBipoint C_d =
|
|
|
- serverPublicKey.get_bipoint_curve_subgroup_gen() * z_nc -
|
|
|
- newEncryptedVotes[i] * f_1_c_n.curveMult(c_n_f_2) -
|
|
|
- C_c * c_n;
|
|
|
+ Scalar f_c_n = f.curveSub(c_n);
|
|
|
+ Scalar c_n2_f = c_n.curveAdd(c_n).curveSub(f);
|
|
|
+ CurveBipoint C_c =
|
|
|
+ serverPublicKey.get_bipoint_curve_subgroup_gen() * z_nb -
|
|
|
+ newEncryptedVotes[i] * f_c_n.curveMult(c_n2_f) -
|
|
|
+ C_b * c_n;
|
|
|
|
|
|
- oracleInput << U << C_a << C_b << C_c << C_d;
|
|
|
+ oracleInput << U << C_a << C_b << C_c;
|
|
|
|
|
|
Scalar c = oracle(oracleInput.str());
|
|
|
Scalar c_r = c.curveSub(c_n);
|
|
@@ -644,11 +629,9 @@ std::vector<Proof> PrsonaClient::generate_vote_proof(
|
|
|
|
|
|
Scalar z_r = u.curveAdd(c_r.curveMult(seeds[i]));
|
|
|
currProof.responseParts.push_back(z_r);
|
|
|
- currProof.responseParts.push_back(f_1);
|
|
|
- currProof.responseParts.push_back(f_2);
|
|
|
+ currProof.responseParts.push_back(f);
|
|
|
currProof.responseParts.push_back(z_na);
|
|
|
currProof.responseParts.push_back(z_nb);
|
|
|
- currProof.responseParts.push_back(z_nc);
|
|
|
|
|
|
retval.push_back(currProof);
|
|
|
}
|