{-# OPTIONS --without-K #-} module Crypto.Schemes where open import Type open import Data.Product open import Relation.Binary.PropositionalEquality record PublicKeyEncryption : ★₁ where constructor mk field PubKey SecKey Message CipherText Rₖ Rₑ : ★ KeyGen : Rₖ → PubKey × SecKey Enc : PubKey → Message → Rₑ → CipherText Dec : SecKey → CipherText → Message FunctionallyCorrect : ★ FunctionallyCorrect = ∀ rₖ rₑ m → let (pk , sk) = KeyGen rₖ in Dec sk (Enc pk m rₑ) ≡ m