hjugement-protocol-0.0.9.20191031: tests/QuickCheck/Trustee.hs
{-# OPTIONS -fno-warn-orphans #-}
{-# LANGUAGE OverloadedStrings #-}
{-# 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 :: Reifies v Version => Proxy v -> TestTree
quickcheck v =
testGroup "Trustee" $
[ testGroup "verifyIndispensableTrusteePublicKey" $
[ reify weakFFC $ testIndispensableTrusteePublicKey v
, reify beleniosFFC $ testIndispensableTrusteePublicKey v
]
]
testIndispensableTrusteePublicKey ::
Reifies v Version =>
GroupParams crypto c =>
Key crypto =>
Proxy v -> Proxy c -> TestTree
testIndispensableTrusteePublicKey (_v::Proxy v) (c::Proxy c) =
testGroup (Text.unpack $ cryptoName (reflect c))
[ testProperty "Right" $ \seed ->
isRight $ runExcept $
(`evalStateT` mkStdGen seed) $ do
trusteeSecKey :: SecretKey crypto c <- randomSecretKey
trusteePubKey :: TrusteePublicKey crypto v c
<- proveIndispensableTrusteePublicKey trusteeSecKey
lift $ verifyIndispensableTrusteePublicKey trusteePubKey
]
instance
( Reifies v Version
, GroupParams crypto c
) => Arbitrary (TrusteePublicKey crypto v c) where
arbitrary = do
trustee_PublicKey <- arbitrary
trustee_SecretKeyProof <- arbitrary
return TrusteePublicKey{..}