Native stateful Fiat-Shamir CMA game hops #
The theorems here are stated directly over QueryImpl.Stateful handlers and the
concrete CmaState product state.
H3 state invariants and per-query loss #
Initial direct CMA data, without the trailing bad flag.
Instances For
Reachability invariant for the direct CMA data.
Cached keypairs, when present, must satisfy the relation generated by hr.gen.
The invariant is intentionally phrased on CmaData, not heap cells.
Instances For
The initial direct CMA data has no cached keypair, hence satisfies the valid-keypair invariant.
State-dependent per-signing-query loss for H3.
On reachable states this is ζ_zk + QueryCache.enncard · β. Invalid keypair states
receive the conservative fallback cost 1, which is useful for ungated
identical-until-bad statements.
Instances For
H3 proof obligations #
Boolean distinguishing advantage for the native H3 pair from the direct initial CMA state.
Instances For
Expected accumulated H3 signing loss in the real game.
Instances For
Per-query facts for the native H3 hop.
- preservesValid : (cmaReal M Commit Chal σ hr).PreservesNoBadInvariant CmaData.Valid
The real game preserves keypair validity while bad is false.
- stepTvCostly (t : (cmaSpec M Commit Chal Resp Stmt).Domain) : cmaH3Costly M Commit Chal t → ∀ (s : CmaData M Commit Chal Stmt Wit), s.Valid → ENNReal.ofReal (tvDist ((cmaReal M Commit Chal σ hr t).run (s, false)) ((cmaSim M Commit Chal hr simT t).run (s, false))) ≤ cmaSignEpsCore M Commit Chal ζ_zk β s
Signing queries are close by the state-dependent H3 loss.
- stepEqFree (t : (cmaSpec M Commit Chal Resp Stmt).Domain) : ¬cmaH3Costly M Commit Chal t → ∀ (p : CmaState M Commit Chal Stmt Wit), (cmaReal M Commit Chal σ hr t).run p = (cmaSim M Commit Chal hr simT t).run p
Non-signing queries agree pointwise.
- badMono (t : (cmaSpec M Commit Chal Resp Stmt).Domain) (p : CmaState M Commit Chal Stmt Wit) : p.2 = true → ∀ z ∈ support ((cmaReal M Commit Chal σ hr t).run p), z.2.2 = true
Once the real bad flag is true, it stays true.
Instances For
Computation-specific facts for applying the native H3 hop.
- queryBound : A.IsQueryBoundP (cmaH3Costly M Commit Chal) qS
The adversary issues at most
qSsigning queries. - badZero : (probEvent ((simulateQ (cmaReal M Commit Chal σ hr) A).run (cmaInit M Commit Chal Stmt Wit)) fun (z : Bool × CmaState M Commit Chal Stmt Wit) => z.2.2 = true) = 0
The real game never reaches bad from the initial state.
The expected accumulated signing loss is at most the requested bound.
Instances For
Real-game bad flag facts #
Stepwise preservation of a trailing Boolean flag lifts through
simulateQ.
One step of the real CMA game preserves the bad flag exactly.
Once the real CMA bad flag is true, one real step keeps it true.
The real CMA game never reaches bad from the initial state.
One real CMA step preserves keypair validity.
The real CMA handler preserves keypair validity while bad is false.
One real CMA step grows the direct random-oracle cache by at most one on signing or hash queries, and does not grow it on other queries.
Expected H3 loss from direct signing and hash query bounds.
If the adversary makes at most qS signing queries and at most qH random
oracle queries, the accumulated state-dependent signing slack is bounded by the
standard qS * ζ + qS * (qS + qH) * β expression.
Build the native H3 run facts from the query bound and expected-loss bound.
Non-signing step equality #
The real and simulated CMA handlers agree on every non-signing query.
Native signing-step TV ingredients #
Build the native H3 step facts from HVZK and simulator commit predictability.
Native H3 factoring theorem #
Native H3 bridge with caller-supplied expected-cost bound.
This is the direct QueryImpl.Stateful replacement for the old H3
identical-until-bad instantiation. The hypotheses are factored into per-query
step facts and computation-specific run facts; no heap package or state
projection appears in the statement.
Fully assembled native H3 bound from HVZK, simulator commit predictability, and adversary signing/hash query budgets.