{-# OPTIONS --without-K #-} open import Type open import Data.Two open import Data.Product module Game.EntropySmoothing (M : ★) -- Message (Hash : ★) (ℋ : M → Hash) -- Hashing function (Rₐ : ★) -- Adversary randomness where -- Entropy smoothing adversary Adversary : ★ Adversary = Rₐ → Hash → 𝟚 -- The randomness supply needed for the entropy -- smoothing games R : ★ R = M × Hash × Rₐ -- Entropy smoothing experiment: -- * input: adversary and randomness supply -- * output b: adversary claims we are in game EXP b Experiment : ★ Experiment = Adversary → R → 𝟚 -- In this game we always use ℋ on a random message EXP₀ : Experiment EXP₀ A (m , _ , rₐ) = A rₐ (ℋ m) -- In this game we just retrun a random Hash value EXP₁ : Experiment EXP₁ A (_ , h , rₐ) = A rₐ h -- Package the two previous games EXP : 𝟚 → Experiment EXP = proj (EXP₀ , EXP₁) game : Adversary → 𝟚 × R → 𝟚 game A (b , r) = EXP b A r