Skip to content

Commit 58daf24

Browse files
authored
🧮 Utilize optimized encryption equations (#452)
Changed the computation of the Chaum-Pederson proofs to more efficient versions saving two modular exponentiations per proof. Still computes the exact same proofs and verification stays the same.
1 parent 3b78c3a commit 58daf24

File tree

1 file changed

+10
-9
lines changed

1 file changed

+10
-9
lines changed

src/electionguard/chaum_pedersen.py

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -418,17 +418,17 @@ def make_disjunctive_chaum_pedersen_zero(
418418
beta = message.data
419419

420420
# Pick three random numbers in Q.
421-
c1, v1, u0 = Nonces(seed, "disjoint-chaum-pedersen-proof")[0:3]
421+
c1, v, u0 = Nonces(seed, "disjoint-chaum-pedersen-proof")[0:3]
422422

423423
# Compute the NIZKP
424424
a0 = g_pow_p(u0)
425425
b0 = pow_p(k, u0)
426-
q_minus_c1 = negate_q(c1)
427-
a1 = mult_p(g_pow_p(v1), pow_p(alpha, q_minus_c1))
428-
b1 = mult_p(pow_p(k, v1), g_pow_p(c1), pow_p(beta, q_minus_c1))
426+
a1 = g_pow_p(v)
427+
b1 = mult_p(pow_p(k, v), g_pow_p(c1))
429428
c = hash_elems(q, alpha, beta, a0, b0, a1, b1)
430429
c0 = a_minus_b_q(c, c1)
431430
v0 = a_plus_bc_q(u0, c0, r)
431+
v1 = a_plus_bc_q(v, c1, r)
432432

433433
return DisjunctiveChaumPedersenProof(a0, b0, a1, b1, c0, c1, c, v0, v1)
434434

@@ -454,16 +454,17 @@ def make_disjunctive_chaum_pedersen_one(
454454
beta = message.data
455455

456456
# Pick three random numbers in Q.
457-
c0, v0, u1 = Nonces(seed, "disjoint-chaum-pedersen-proof")[0:3]
457+
w, v, u1 = Nonces(seed, "disjoint-chaum-pedersen-proof")[0:3]
458458

459459
# Compute the NIZKP
460-
q_minus_c0 = negate_q(c0)
461-
a0 = mult_p(g_pow_p(v0), pow_p(alpha, q_minus_c0))
462-
b0 = mult_p(pow_p(k, v0), pow_p(beta, q_minus_c0))
460+
a0 = g_pow_p(v)
461+
b0 = mult_p(pow_p(k, v), g_pow_p(w))
463462
a1 = g_pow_p(u1)
464463
b1 = pow_p(k, u1)
465464
c = hash_elems(q, alpha, beta, a0, b0, a1, b1)
466-
c1 = a_minus_b_q(c, c0)
465+
c0 = negate_q(w)
466+
c1 = add_q(c, w)
467+
v0 = a_plus_bc_q(v, c0, r)
467468
v1 = a_plus_bc_q(u1, c1, r)
468469

469470
return DisjunctiveChaumPedersenProof(a0, b0, a1, b1, c0, c1, c, v0, v1)

0 commit comments

Comments
 (0)