signable-0.1: test/SignableSpec.hs
module SignableSpec
( spec,
)
where
import Data.ProtoLens.Arbitrary
import Data.Signable
import Data.Signable.Import
import Lens.Micro
import Proto.Basic
import Proto.Basic_Fields
import Proto.SignableOrphan ()
import Test.Hspec
import Test.QuickCheck
import Test.QuickCheck.Instances ()
spec :: Spec
spec = before (newRandomPrvKey AlgSecp256k1) $ do
it "is able to sign proto message" $
\k -> property $ \x0 ->
sign k (unArbitraryMessage x0 :: Payload)
`shouldSatisfy` isJust
it "is able to verify valid proto message signature" $
\k -> property $ \x0 -> do
let x :: Payload = unArbitraryMessage x0
maybe
False
(\s -> verify (derivePubKey k) s x)
(sign k x)
`shouldBe` True
it "is able to discard invalid proto message signature" $
\k -> property $ \x0 -> do
let x :: Payload = unArbitraryMessage x0
let y = x & (amount . amount) +~ 1
maybe
False
(\s -> verify (derivePubKey k) s y)
(sign k x)
`shouldBe` False