{-# LANGUAGE TemplateHaskell #-}
module Test.Cardano.Crypto.Signing.Redeem (
tests,
)
where
import Cardano.Crypto.Signing (SignTag (..))
import Cardano.Crypto.Signing.Redeem (
redeemSign,
redeemToVerification,
verifyRedeemSig,
)
import Cardano.Prelude
import Hedgehog (
Property,
assert,
checkParallel,
discover,
forAll,
property,
)
import qualified Hedgehog.Gen as Gen
import qualified Test.Cardano.Crypto.Dummy as Dummy
import Test.Cardano.Crypto.Gen (
genRedeemKeypair,
genRedeemSigningKey,
genRedeemVerificationKey,
)
import Test.Cardano.Crypto.Signing.Signing (genData)
tests :: IO Bool
tests :: IO Bool
tests = forall (m :: * -> *). MonadIO m => Group -> m Bool
checkParallel $$String
[(PropertyName, Property)]
Property
String -> PropertyName
String -> GroupName
GroupName -> [(PropertyName, Property)] -> Group
prop_redeemSignDifferentData :: Property
prop_redeemSignDifferentKey :: Property
prop_redeemSign :: Property
discover
prop_redeemSign :: Property
prop_redeemSign :: Property
prop_redeemSign = HasCallStack => PropertyT IO () -> Property
property forall a b. (a -> b) -> a -> b
$ do
(RedeemVerificationKey
vk, RedeemSigningKey
sk) <- forall (m :: * -> *) a.
(Monad m, Show a, HasCallStack) =>
Gen a -> PropertyT m a
forAll Gen (RedeemVerificationKey, RedeemSigningKey)
genRedeemKeypair
[Int32]
a <- forall (m :: * -> *) a.
(Monad m, Show a, HasCallStack) =>
Gen a -> PropertyT m a
forAll Gen [Int32]
genData
forall (m :: * -> *). (MonadTest m, HasCallStack) => Bool -> m ()
assert forall a b. (a -> b) -> a -> b
$
forall a.
EncCBOR a =>
ProtocolMagicId
-> SignTag
-> RedeemVerificationKey
-> a
-> RedeemSignature a
-> Bool
verifyRedeemSig ProtocolMagicId
Dummy.protocolMagicId SignTag
SignForTestingOnly RedeemVerificationKey
vk [Int32]
a forall a b. (a -> b) -> a -> b
$
forall a.
EncCBOR a =>
ProtocolMagicId
-> SignTag -> RedeemSigningKey -> a -> RedeemSignature a
redeemSign ProtocolMagicId
Dummy.protocolMagicId SignTag
SignForTestingOnly RedeemSigningKey
sk [Int32]
a
prop_redeemSignDifferentKey :: Property
prop_redeemSignDifferentKey :: Property
prop_redeemSignDifferentKey = HasCallStack => PropertyT IO () -> Property
property forall a b. (a -> b) -> a -> b
$ do
RedeemSigningKey
sk <- forall (m :: * -> *) a.
(Monad m, Show a, HasCallStack) =>
Gen a -> PropertyT m a
forAll Gen RedeemSigningKey
genRedeemSigningKey
RedeemVerificationKey
vk <- forall (m :: * -> *) a.
(Monad m, Show a, HasCallStack) =>
Gen a -> PropertyT m a
forAll forall a b. (a -> b) -> a -> b
$ forall (m :: * -> *) a.
(MonadGen m, GenBase m ~ Identity) =>
(a -> Bool) -> m a -> m a
Gen.filter (forall a. Eq a => a -> a -> Bool
/= RedeemSigningKey -> RedeemVerificationKey
redeemToVerification RedeemSigningKey
sk) Gen RedeemVerificationKey
genRedeemVerificationKey
[Int32]
a <- forall (m :: * -> *) a.
(Monad m, Show a, HasCallStack) =>
Gen a -> PropertyT m a
forAll Gen [Int32]
genData
forall (m :: * -> *). (MonadTest m, HasCallStack) => Bool -> m ()
assert
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Bool -> Bool
not
forall a b. (a -> b) -> a -> b
$ forall a.
EncCBOR a =>
ProtocolMagicId
-> SignTag
-> RedeemVerificationKey
-> a
-> RedeemSignature a
-> Bool
verifyRedeemSig ProtocolMagicId
Dummy.protocolMagicId SignTag
SignForTestingOnly RedeemVerificationKey
vk [Int32]
a
forall a b. (a -> b) -> a -> b
$ forall a.
EncCBOR a =>
ProtocolMagicId
-> SignTag -> RedeemSigningKey -> a -> RedeemSignature a
redeemSign ProtocolMagicId
Dummy.protocolMagicId SignTag
SignForTestingOnly RedeemSigningKey
sk [Int32]
a
prop_redeemSignDifferentData :: Property
prop_redeemSignDifferentData :: Property
prop_redeemSignDifferentData = HasCallStack => PropertyT IO () -> Property
property forall a b. (a -> b) -> a -> b
$ do
(RedeemVerificationKey
vk, RedeemSigningKey
sk) <- forall (m :: * -> *) a.
(Monad m, Show a, HasCallStack) =>
Gen a -> PropertyT m a
forAll Gen (RedeemVerificationKey, RedeemSigningKey)
genRedeemKeypair
[Int32]
a <- forall (m :: * -> *) a.
(Monad m, Show a, HasCallStack) =>
Gen a -> PropertyT m a
forAll Gen [Int32]
genData
[Int32]
b <- forall (m :: * -> *) a.
(Monad m, Show a, HasCallStack) =>
Gen a -> PropertyT m a
forAll forall a b. (a -> b) -> a -> b
$ forall (m :: * -> *) a.
(MonadGen m, GenBase m ~ Identity) =>
(a -> Bool) -> m a -> m a
Gen.filter (forall a. Eq a => a -> a -> Bool
/= [Int32]
a) Gen [Int32]
genData
forall (m :: * -> *). (MonadTest m, HasCallStack) => Bool -> m ()
assert
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Bool -> Bool
not
forall a b. (a -> b) -> a -> b
$ forall a.
EncCBOR a =>
ProtocolMagicId
-> SignTag
-> RedeemVerificationKey
-> a
-> RedeemSignature a
-> Bool
verifyRedeemSig ProtocolMagicId
Dummy.protocolMagicId SignTag
SignForTestingOnly RedeemVerificationKey
vk [Int32]
b
forall a b. (a -> b) -> a -> b
$ forall a.
EncCBOR a =>
ProtocolMagicId
-> SignTag -> RedeemSigningKey -> a -> RedeemSignature a
redeemSign ProtocolMagicId
Dummy.protocolMagicId SignTag
SignForTestingOnly RedeemSigningKey
sk [Int32]
a