1 {-# OPTIONS -fno-warn-orphans #-}
2 {-# LANGUAGE OverloadedStrings #-}
3 {-# LANGUAGE UndecidableInstances #-} -- for Reifies instances
4 module QuickCheck.Trustee where
6 import Test.Tasty.QuickCheck
7 import qualified Data.Text as Text
12 import QuickCheck.Election ()
14 quickcheck :: Reifies v Version => Proxy v -> TestTree
17 [ testGroup "verifyIndispensableTrusteePublicKey" $
18 [ reify weakFFC $ testIndispensableTrusteePublicKey v
19 , reify beleniosFFC $ testIndispensableTrusteePublicKey v
23 testIndispensableTrusteePublicKey ::
25 Reifies c crypto => Group crypto => Key crypto =>
26 Proxy v -> Proxy c -> TestTree
27 testIndispensableTrusteePublicKey (_v::Proxy v) (c::Proxy c) = groupReify c $
28 testGroup (Text.unpack $ cryptoName (reflect c))
29 [ testProperty "Right" $ \seed ->
31 (`evalStateT` mkStdGen seed) $ do
32 trusteeSecKey :: SecretKey crypto c <- randomSecretKey
33 trusteePubKey :: TrusteePublicKey crypto v c
34 <- proveIndispensableTrusteePublicKey trusteeSecKey
35 lift $ verifyIndispensableTrusteePublicKey trusteePubKey
42 , Multiplicative (G crypto c)
43 , Invertible (G crypto c)
44 ) => Arbitrary (TrusteePublicKey crypto v c) where
46 trustee_PublicKey <- arbitrary
47 trustee_SecretKeyProof <- arbitrary
48 return TrusteePublicKey{..}