Blame tests/KAT_Argon2.hs

Packit 141393
{-# LANGUAGE OverloadedStrings #-}
Packit 141393
module KAT_Argon2 (tests) where
Packit 141393
Packit 141393
import           Crypto.Error
Packit 141393
import qualified Crypto.KDF.Argon2 as Argon2
Packit 141393
import qualified Data.ByteString as B
Packit 141393
import           Imports
Packit 141393
Packit 141393
data KDFVector = KDFVector
Packit 141393
    { kdfPass      :: ByteString
Packit 141393
    , kdfSalt      :: ByteString
Packit 141393
    , kdfOptions   :: Argon2.Options
Packit 141393
    , kdfResult    :: ByteString
Packit 141393
    }
Packit 141393
Packit 141393
argon2i_13 :: Argon2.TimeCost -> Argon2.MemoryCost -> Argon2.Options
Packit 141393
argon2i_13 iters memory = Argon2.Options
Packit 141393
    { Argon2.iterations  = iters
Packit 141393
    , Argon2.memory      = memory
Packit 141393
    , Argon2.parallelism = 1
Packit 141393
    , Argon2.variant     = Argon2.Argon2i
Packit 141393
    , Argon2.version     = Argon2.Version13
Packit 141393
    }
Packit 141393
Packit 141393
vectors =
Packit 141393
    [ KDFVector "password" "somesalt" (argon2i_13 2 65536)
Packit 141393
        "\xc1\x62\x88\x32\x14\x7d\x97\x20\xc5\xbd\x1c\xfd\x61\x36\x70\x78\x72\x9f\x6d\xfb\x6f\x8f\xea\x9f\xf9\x81\x58\xe0\xd7\x81\x6e\xd0"
Packit 141393
    ]
Packit 141393
Packit 141393
kdfTests :: [TestTree]
Packit 141393
kdfTests = map toKDFTest $ zip is vectors
Packit 141393
  where
Packit 141393
    toKDFTest (i, v) =
Packit 141393
        testCase (show i)
Packit 141393
            (CryptoPassed (kdfResult v) @=? Argon2.hash (kdfOptions v) (kdfPass v) (kdfSalt v) (B.length $ kdfResult v))
Packit 141393
Packit 141393
    is :: [Int]
Packit 141393
    is = [1..]
Packit 141393
Packit 141393
tests = testGroup "Argon2"
Packit 141393
    [ testGroup "KATs" kdfTests
Packit 141393
    ]