{-# OPTIONS -fno-warn-orphans #-} {-# LANGUAGE UndecidableInstances #-} -- for Reifies instances module QuickCheck.Trustee where import Test.Tasty.QuickCheck import qualified Data.Text as Text import Voting.Protocol import Utils import QuickCheck.Election () quickcheck :: TestTree quickcheck = testGroup "Trustee" [ testGroup "verifyIndispensableTrusteePublicKey" $ [ testIndispensableTrusteePublicKey weakFFC , testIndispensableTrusteePublicKey beleniosFFC ] ] testIndispensableTrusteePublicKey :: FFC -> TestTree testIndispensableTrusteePublicKey ffc = reify ffc $ \(Proxy::Proxy c) -> testGroup (Text.unpack $ ffc_name ffc) [ testProperty "Right" $ \seed -> isRight $ runExcept $ (`evalStateT` mkStdGen seed) $ do trusteeSecKey :: SecretKey c <- randomSecretKey trusteePubKey <- proveIndispensableTrusteePublicKey trusteeSecKey lift $ verifyIndispensableTrusteePublicKey trusteePubKey ] instance Reifies c FFC => Arbitrary (TrusteePublicKey c) where arbitrary = do trustee_PublicKey <- arbitrary trustee_SecretKeyProof <- arbitrary return TrusteePublicKey{..}