Blame tests/BCrypt.hs

Packit 141393
{-# LANGUAGE OverloadedStrings #-}
Packit 141393
Packit 141393
module BCrypt
Packit 141393
    ( tests
Packit 141393
    )
Packit 141393
where
Packit 141393
Packit 141393
import Crypto.KDF.BCrypt
Packit 141393
import qualified Data.ByteString as B
Packit 141393
import Imports
Packit 141393
Packit 141393
-- Openwall bcrypt tests, with 2x versions and 0xFF special cases removed.
Packit 141393
expected :: [(ByteString, ByteString)]
Packit 141393
expected =
Packit 141393
    [ ("$2a$05$CCCCCCCCCCCCCCCCCCCCC.E5YPO9kmyuRGyh0XouQYb4YMJKvyOeW", "U*U")
Packit 141393
    , ("$2a$05$CCCCCCCCCCCCCCCCCCCCC.VGOzA784oUp/Z0DY336zx7pLYAy0lwK", "U*U*")
Packit 141393
    , ("$2a$05$XXXXXXXXXXXXXXXXXXXXXOAcXxm9kjPGEMsLznoKqmqw7tc8WCx4a", "U*U*U")
Packit 141393
    , ("$2a$05$abcdefghijklmnopqrstuu5s2v8.iXieOjg/.AySBTTZIIVFJeBui",
Packit 141393
            "0123456789abcdefghijklmnopqrstuvwxyz\
Packit 141393
            \ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\
Packit 141393
            \chars after 72 are ignored")
Packit 141393
    , ("$2y$05$/OK.fbVrR/bpIqNJ5ianF.CE5elHaaO4EbggVDjb8P19RukzXSM3e", "\xff\xff\xa3")
Packit 141393
    , ("$2b$05$/OK.fbVrR/bpIqNJ5ianF.CE5elHaaO4EbggVDjb8P19RukzXSM3e", "\xff\xff\xa3")
Packit 141393
    , ("$2y$05$/OK.fbVrR/bpIqNJ5ianF.Sa7shbm4.OzKpvFnX1pQLmQW96oUlCq", "\xa3")
Packit 141393
    , ("$2a$05$/OK.fbVrR/bpIqNJ5ianF.Sa7shbm4.OzKpvFnX1pQLmQW96oUlCq", "\xa3")
Packit 141393
    , ("$2b$05$/OK.fbVrR/bpIqNJ5ianF.Sa7shbm4.OzKpvFnX1pQLmQW96oUlCq", "\xa3")
Packit 141393
    , ("$2a$05$/OK.fbVrR/bpIqNJ5ianF.swQOIzjOiJ9GHEPuhEkvqrUyvWhEMx6",
Packit 141393
            "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\
Packit 141393
            \\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\
Packit 141393
            \\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\
Packit 141393
            \\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\
Packit 141393
            \\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\
Packit 141393
            \\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\
Packit 141393
            \chars after 72 are ignored as usual")
Packit 141393
    , ("$2a$05$/OK.fbVrR/bpIqNJ5ianF.R9xrDjiycxMbQE2bp.vgqlYpW5wx2yy",
Packit 141393
            "\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\
Packit 141393
            \\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\
Packit 141393
            \\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\
Packit 141393
            \\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\
Packit 141393
            \\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\
Packit 141393
            \\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55")
Packit 141393
    , ("$2a$05$/OK.fbVrR/bpIqNJ5ianF.9tQZzcJfm3uj2NvJ/n5xkhpqLrMpWCe",
Packit 141393
            "\x55\xaa\xff\x55\xaa\xff\x55\xaa\xff\x55\xaa\xff\
Packit 141393
            \\x55\xaa\xff\x55\xaa\xff\x55\xaa\xff\x55\xaa\xff\
Packit 141393
            \\x55\xaa\xff\x55\xaa\xff\x55\xaa\xff\x55\xaa\xff\
Packit 141393
            \\x55\xaa\xff\x55\xaa\xff\x55\xaa\xff\x55\xaa\xff\
Packit 141393
            \\x55\xaa\xff\x55\xaa\xff\x55\xaa\xff\x55\xaa\xff\
Packit 141393
            \\x55\xaa\xff\x55\xaa\xff\x55\xaa\xff\x55\xaa\xff")
Packit 141393
    , ("$2a$05$CCCCCCCCCCCCCCCCCCCCC.7uG0VCzI2bS7j6ymqJi9CdcdxiRTWNy", "")
Packit 141393
    , ("$2a$06$DCq7YPn5Rq63x1Lad4cll.TV4S6ytwfsfvkgY8jIucDrjc8deX1s.", "")
Packit 141393
    , ("$2a$08$HqWuK6/Ng6sg9gQzbLrgb.Tl.ZHfXLhvt/SgVyWhQqgqcZ7ZuUtye", "")
Packit 141393
    , ("$2a$10$k1wbIrmNyFAPwPVPSVa/zecw2BCEnBwVS2GbrmgzxFUOqW9dk4TCW", "")
Packit 141393
    , ("$2a$12$k42ZFHFWqBp3vWli.nIn8uYyIkbvYRvodzbfbK18SSsY.CsIQPlxO", "")
Packit 141393
    , ("$2a$06$m0CrhHm10qJ3lXRY.5zDGO3rS2KdeeWLuGmsfGlMfOxih58VYVfxe", "a")
Packit 141393
    , ("$2a$08$cfcvVd2aQ8CMvoMpP2EBfeodLEkkFJ9umNEfPD18.hUF62qqlC/V.", "a")
Packit 141393
    , ("$2a$12$8NJH3LsPrANStV6XtBakCez0cKHXVxmvxIlcz785vxAIZrihHZpeS", "a")
Packit 141393
    , ("$2a$06$If6bvum7DFjUnE9p2uDeDu0YHzrHM6tf.iqN8.yx.jNN1ILEf7h0i", "abc")
Packit 141393
    , ("$2a$08$Ro0CUfOqk6cXEKf3dyaM7OhSCvnwM9s4wIX9JeLapehKK5YdLxKcm", "abc")
Packit 141393
    , ("$2a$10$WvvTPHKwdBJ3uk0Z37EMR.hLA2W6N9AEBhEgrAOljy2Ae5MtaSIUi", "abc")
Packit 141393
    , ("$2a$06$.rCVZVOThsIa97pEDOxvGuRRgzG64bvtJ0938xuqzv18d3ZpQhstC", "abcdefghijklmnopqrstuvwxyz")
Packit 141393
    ]
Packit 141393
Packit 141393
makeKATs = concatMap maketest (zip3 is passwords hashes)
Packit 141393
  where
Packit 141393
    is :: [Int]
Packit 141393
    is = [1..]
Packit 141393
Packit 141393
    passwords = map snd expected
Packit 141393
    hashes    = map fst expected
Packit 141393
Packit 141393
    maketest (i, password, hash) =
Packit 141393
        [ testCase (show i) (assertBool "" (validatePassword password hash))
Packit 141393
        ]
Packit 141393
Packit 141393
tests = testGroup "bcrypt"
Packit 141393
    [ testGroup "KATs" makeKATs
Packit 141393
    , testCase "Invalid hash length" (assertEqual "" (Left "Invalid hash format") (validatePasswordEither B.empty ("$2a$06$DCq7YPn5Rq63x1Lad4cll.TV4S6ytwfsfvkgY8jIucDrjc8deX1s" :: B.ByteString)))
Packit 141393
    ]