hjugement-protocol-0.0.0.20190519: tests/QuickCheck/Trustee.hs
{-# 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{..}