Skip to content

Commit 4cbe19c

Browse files
authored
feat: pedersen correctness
1 parent fac8fd8 commit 4cbe19c

1 file changed

Lines changed: 57 additions & 0 deletions

File tree

‎VerifiedCommitments/Pedersen.lean‎

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,63 @@ noncomputable def scheme : CommitmentScheme (ZMod params.q) G (ZMod params.q) G
6565
verify := verify
6666
}
6767

68+
69+
theorem pedersen_correctness : Commitment.correctness (@scheme G params) := by
70+
unfold Commitment.correctness
71+
intro h m
72+
unfold scheme commit verify
73+
simp only [pure]
74+
ext b
75+
simp only [PMF.bind_apply, PMF.pure_apply, PMF.uniformOfFintype_apply, tsum_fintype, Finset.sum_mul]
76+
-- Exchange the order of summation
77+
rw [Finset.sum_comm]
78+
simp only [mul_ite, mul_one, mul_zero]
79+
-- For each r, the inner sum over x: only x = (g^m*h^r, r) contributes
80+
have h_inner : ∀ r : ZMod params.q,
81+
(∑ x : G × ZMod params.q,
82+
if b = (if x.1 = params.g ^ m.val * h ^ x.2.val then 1 else 0)
83+
then if x = (params.g ^ m.val * h ^ r.val, r)
84+
then ((↑(Fintype.card (ZMod params.q)))⁻¹ : ENNReal)
85+
else 0
86+
else 0) =
87+
if b = 1 then ((↑(Fintype.card (ZMod params.q)))⁻¹ : ENNReal) else 0 := by
88+
intro r
89+
-- The sum collapses to checking x = (g^m*h^r, r)
90+
have : (∑ x : G × ZMod params.q,
91+
if b = (if x.1 = params.g ^ m.val * h ^ x.2.val then 1 else 0)
92+
then if x = (params.g ^ m.val * h ^ r.val, r)
93+
then ((↑(Fintype.card (ZMod params.q)))⁻¹ : ENNReal)
94+
else 0
95+
else 0) =
96+
(if b = (if (params.g ^ m.val * h ^ r.val) = params.g ^ m.val * h ^ r.val then 1 else 0)
97+
then ((↑(Fintype.card (ZMod params.q)))⁻¹ : ENNReal)
98+
else 0) := by
99+
-- The sum has at most one non-zero term, when x = (g^m*h^r, r)
100+
trans (∑ x : G × ZMod params.q,
101+
if x = (params.g ^ m.val * h ^ r.val, r)
102+
then (if b = (if x.1 = params.g ^ m.val * h ^ x.2.val then 1 else 0)
103+
then ((↑(Fintype.card (ZMod params.q)))⁻¹ : ENNReal)
104+
else 0)
105+
else 0)
106+
· congr 1
107+
ext x
108+
by_cases hx : x = (params.g ^ m.val * h ^ r.val, r)
109+
· simp [hx]
110+
· simp [hx]
111+
· rw [Finset.sum_ite_eq']
112+
simp
113+
rw [this]
114+
simp
115+
simp_rw [h_inner]
116+
by_cases hb : b = 1
117+
· subst hb
118+
simp only [ite_true, Finset.sum_const, Finset.card_univ, nsmul_eq_mul]
119+
rw [ENNReal.mul_inv_cancel]
120+
· simp [params.prime_q.ne_zero]
121+
· simp [ENNReal.natCast_ne_top]
122+
· simp [hb]
123+
124+
68125
noncomputable def generate_a : PMF (ZModMult params.q) := PMF.uniformOfFintype (ZModMult params.q)
69126

70127
/- ========================================

0 commit comments

Comments
 (0)