mirror of https://github.com/voidlizard/hbs2
47 lines
1.7 KiB
Haskell
47 lines
1.7 KiB
Haskell
{-# LANGUAGE OverloadedStrings #-}
|
|
|
|
module HashProperties (
|
|
testHash
|
|
) where
|
|
|
|
import Util
|
|
import Crypto.Saltine.Core.Hash
|
|
|
|
import qualified Data.ByteString as S
|
|
import Test.Framework.Providers.QuickCheck2
|
|
import Test.Framework
|
|
import Test.QuickCheck
|
|
|
|
testHash :: Test
|
|
testHash = buildTest $ do
|
|
shKey <- newShorthashKey
|
|
shKey2 <- newShorthashKey
|
|
ghKey <- newGenerichashKey 24 >>= maybe undefined return
|
|
ghKey2 <- newGenerichashKey 24 >>= maybe undefined return
|
|
let ghOutLen = maybe undefined id $ generichashOutLen 32
|
|
|
|
return $ testGroup "...Internal.Hash" [
|
|
|
|
testProperty "No two hashes are alike"
|
|
$ \(Message bs1, Message bs2) -> bs1 /= bs2 ==> hash bs1 /= hash bs2,
|
|
|
|
testProperty "Hash of empty ByteString is correct"
|
|
$ \(Message bs) -> (bs == S.empty) ==> hash bs == (read hashEmptyBS :: S.ByteString),
|
|
|
|
testProperty "No two shorthashes are alike"
|
|
$ \(Message bs1, Message bs2) -> bs1 /= bs2 ==> shorthash shKey bs1 /= shorthash shKey bs2,
|
|
|
|
testProperty "Different keys produce different shorthashes"
|
|
$ \(Message bs) -> shorthash shKey bs /= shorthash shKey2 bs,
|
|
|
|
testProperty "No two generic hashes are alike"
|
|
$ \(Message bs1, Message bs2) -> bs1 /= bs2 ==> generichash ghKey bs1 ghOutLen /= generichash ghKey bs2 ghOutLen,
|
|
|
|
testProperty "Different keys produce different generichashes"
|
|
$ \(Message bs) -> generichash ghKey bs ghOutLen /= generichash ghKey2 bs ghOutLen
|
|
|
|
]
|
|
|
|
where
|
|
hashEmptyBS = "\"\207\131\225\&5~\239\184\189\241T(P\214m\128\a\214 \228\ENQ\vW\NAK\220\131\244\169!\211l\233\206G\208\209<]\133\242\176\255\131\CAN\210\135~\236/c\185\&1\189GAz\129\165\&82z\249'\218>\""
|