hbs2/tests/SignProperties.hs

44 lines
1.3 KiB
Haskell

{-# LANGUAGE OverloadedStrings #-}
module SignProperties (
testSign
) where
import Util
import Crypto.Saltine.Core.Sign
import Crypto.Saltine.Internal.Sign
import qualified Data.ByteString as S
import Test.Framework.Providers.QuickCheck2
import Test.Framework
import Test.QuickCheck
testSign :: Test
testSign = buildTest $ do
kp1 <- newKeypair
let sk1 = secretKey kp1
let pk1 = publicKey kp1
kp2 <- newKeypair
let pk2 = publicKey kp2
return $ testGroup "...Internal.Sign" [
testProperty "Verifies signed message"
$ \(Message bs) -> signOpen pk1 (sign sk1 bs) == Just bs,
testProperty "Verifies signed message w/ detached signature"
$ \(Message bs) -> signVerifyDetached pk1 (signDetached sk1 bs) bs,
testProperty "Signed message longer than message"
$ \(Message bs) -> S.length (sign sk1 bs) >= S.length bs,
testProperty "Rejects message with mismatched key"
$ \(Message bs) -> not (S.null bs) ==>
signOpen pk2 (sign sk1 bs) == Nothing,
testProperty "Rejects message with mismatched key w/ detached signature"
$ \(Message bs) -> not (S.null bs) ==>
not (signVerifyDetached pk2 (signDetached sk1 bs) bs)
]