Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions Cslib/Algorithms/StatefulProcesses/DiffieHellman/Basic.lean
Original file line number Diff line number Diff line change
Expand Up @@ -139,12 +139,13 @@ def bob : Process Pid Var params.Val FunId params.SelLabel params.ProcName :=

/-! ## Semantics -/

/-- Implementation of local function call evaluation. -/
/-- Implementation of local function call evaluation.
Calls with a mismatched modulus are rejected. -/
def funEval : FunCallEval FunId params.Val
| .computePublicMessage, [.nat p, .zMod g, .nat privateExp], v =>
(h : p = params.p) → v = (.zMod <| h ▸ computePublicMessage p (h ▸ g) privateExp)
p = params.p ∧ v = .zMod (computePublicMessage params.p g privateExp)
| .computeSharedSecret, [.nat p, .zMod msg, .nat privateExp], v =>
(h : p = params.p) → v = (.zMod <| h ▸ computeSharedSecret p (h ▸ msg) privateExp)
p = params.p ∧ v = .zMod (computeSharedSecret params.p msg privateExp)
| _, _, _ => False

/-- DH network. -/
Expand Down
20 changes: 10 additions & 10 deletions CslibTests/DiffieHellman.lean
Original file line number Diff line number Diff line change
Expand Up @@ -16,30 +16,30 @@ variable {Pid Var : Type*} (params : Params Pid Var)
example (σ : LocalStore Var params.Val) :
(funEval params).EvalExpr σ (aliceComputeMesg params) (.zMod (params.g ^ params.a)) := by
apply FunCallEval.EvalExpr.call (.cons .val (.cons .val (.cons .val .nil)))
intro hmod
rfl
exact ⟨rfl, rfl⟩

example (σ : LocalStore Var params.Val) :
(funEval params).EvalExpr σ (bobComputeMesg params) (.zMod (params.g ^ params.b)) := by
apply FunCallEval.EvalExpr.call (.cons .val (.cons .val (.cons .val .nil)))
intro hmod
rfl
exact ⟨rfl, rfl⟩

-- Each role must also use its own exponent on the received message.
example (σ : LocalStore Var params.Val) (message : ZMod params.p)
(h : σ params.y = .zMod message) :
(funEval params).EvalExpr σ (aliceComputeSharedSecret params) (.zMod (message ^ params.a)) := by
apply FunCallEval.EvalExpr.call (.cons .val (.cons .var (.cons .val .nil)))
simp only [h, funEval]
intro hmod
rfl
simp [h, funEval, computeSharedSecret]

example (σ : LocalStore Var params.Val) (message : ZMod params.p)
(h : σ params.x = .zMod message) :
(funEval params).EvalExpr σ (bobComputeSharedSecret params) (.zMod (message ^ params.b)) := by
apply FunCallEval.EvalExpr.call (.cons .val (.cons .var (.cons .val .nil)))
simp only [h, funEval]
intro hmod
rfl
simp [h, funEval, computeSharedSecret]

-- A mismatched modulus must reject every result for either function.
example (f : FunId) (p : ℕ) (hp : p ≠ params.p) (message : ZMod params.p)
(privateExp : ℕ) (v : params.Val) :
¬ funEval params f [.nat p, .zMod message, .nat privateExp] v := by
cases f <;> exact fun h => hp h.1

end CslibTests.DiffieHellman
Loading