hjugement-protocol-0.0.8.20191027: 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" $
[ testIndispensableTrusteePublicKey v weakFFC
, testIndispensableTrusteePublicKey v beleniosFFC
]
]
testIndispensableTrusteePublicKey ::
ReifyCrypto crypto =>
Reifies v Version => Proxy v ->
crypto -> TestTree
testIndispensableTrusteePublicKey (_v::Proxy v) crypto =
reifyCrypto crypto $ \(Proxy::Proxy c) ->
testGroup (Text.unpack $ cryptoName crypto)
[ 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
, Reifies c crypto
, Group crypto
, Multiplicative (FieldElement crypto c)
) => Arbitrary (TrusteePublicKey crypto v c) where
arbitrary = do
trustee_PublicKey <- arbitrary
trustee_SecretKeyProof <- arbitrary
return TrusteePublicKey{..}