aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Benjamin Barenblat <bbaren@google.com>2018-09-21 16:40:18 -0400
committerGravatar Benjamin Barenblat <bbaren@google.com>2018-09-21 16:40:18 -0400
commita643f96bd1b8048a08277f7992ca7d43ee2423c3 (patch)
tree3f01075533614aab8a89c7cef4fba93f1ec0332f
parent021932a9ee2a81435b0a341030f68730dd9abd3b (diff)
Rewrite tests for readability
Replace tables of tuples with simple function calls, and normalize argument order to have outputs to the right of inputs. Also factor out some common patterns.
-rw-r--r--btls.cabal1
-rw-r--r--src/Data/Digest.hs2
-rw-r--r--src/Data/HMAC.hs2
-rw-r--r--tests/BTLS/TestUtilities.hs49
-rw-r--r--tests/Codec/Crypto/HKDFTests.hs76
-rw-r--r--tests/Data/Digest/HashTests.hs59
-rw-r--r--tests/Data/Digest/MD5Tests.hs102
-rw-r--r--tests/Data/Digest/SHA1Tests.hs96
-rw-r--r--tests/Data/Digest/SHA2Tests.hs365
-rw-r--r--tests/Data/DigestTests.hs3
-rw-r--r--tests/Data/HMACTests.hs249
11 files changed, 481 insertions, 523 deletions
diff --git a/btls.cabal b/btls.cabal
index 9d27272..cd5a477 100644
--- a/btls.cabal
+++ b/btls.cabal
@@ -127,6 +127,7 @@ test-suite tests
-optl-Wl,-z,relro -optl-Wl,-z,now -optl-Wl,-s
main-is: Tests.hs
other-modules: BTLS.Assertions
+ , BTLS.TestUtilities
, Codec.Crypto.HKDFTests
, Data.DigestTests
, Data.Digest.HashTests
diff --git a/src/Data/Digest.hs b/src/Data/Digest.hs
index 594fef1..3bc53b7 100644
--- a/src/Data/Digest.hs
+++ b/src/Data/Digest.hs
@@ -22,7 +22,7 @@
-}
module Data.Digest
( -- * Computing digests
- Digest
+ Digest(Digest)
, hash
-- * Digest algorithms
diff --git a/src/Data/HMAC.hs b/src/Data/HMAC.hs
index d8c36f1..0e5a67f 100644
--- a/src/Data/HMAC.hs
+++ b/src/Data/HMAC.hs
@@ -23,7 +23,7 @@
-}
module Data.HMAC
( -- * Computing HMACs
- HMAC
+ HMAC(HMAC)
, hmac
-- * Cryptographic hash algorithms
diff --git a/tests/BTLS/TestUtilities.hs b/tests/BTLS/TestUtilities.hs
new file mode 100644
index 0000000..01e57bb
--- /dev/null
+++ b/tests/BTLS/TestUtilities.hs
@@ -0,0 +1,49 @@
+-- Copyright 2018 Google LLC
+--
+-- Licensed under the Apache License, Version 2.0 (the "License"); you may not
+-- use this file except in compliance with the License. You may obtain a copy of
+-- the License at
+--
+-- https://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+-- WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+-- License for the specific language governing permissions and limitations under
+-- the License.
+
+{-# LANGUAGE OverloadedStrings #-}
+
+module BTLS.TestUtilities
+ ( abbreviate
+ , hex
+ ) where
+
+import qualified Data.ByteString.Base16 as Base16
+import qualified Data.ByteString.Base16.Lazy as L.Base16
+import Data.ByteString.Char8 (ByteString, unpack)
+import qualified Data.ByteString.Lazy.Char8 as Lazy (ByteString)
+import qualified Data.ByteString.Lazy.Char8 as L
+import Data.Char (isAscii, isPrint)
+import Data.Int (Int64)
+
+abbreviate :: Lazy.ByteString -> String
+abbreviate input =
+ let maxLen = 22 in
+ if L.all isShowable (L.take (maxLen - 2) input)
+ then show (addEllipsisIfNecessary (maxLen - 2) input)
+ else L.unpack (addEllipsisIfNecessary maxLen (L.Base16.encode input))
+ where isShowable c = isAscii c && isPrint c
+
+addEllipsisIfNecessary :: Int64 -> Lazy.ByteString -> Lazy.ByteString
+addEllipsisIfNecessary maxLen s =
+ let ellipsis = "..."
+ ellipsisLen = L.length ellipsis
+ (x, y) = L.splitAt (maxLen - ellipsisLen) s in
+ x `L.append` if L.length y <= ellipsisLen then y else ellipsis
+
+hex :: ByteString -> ByteString
+hex s =
+ case Base16.decode s of
+ (r, "") -> r
+ _ -> error $ "invalid hex string " ++ unpack s
diff --git a/tests/Codec/Crypto/HKDFTests.hs b/tests/Codec/Crypto/HKDFTests.hs
index d4cfe30..b1825a2 100644
--- a/tests/Codec/Crypto/HKDFTests.hs
+++ b/tests/Codec/Crypto/HKDFTests.hs
@@ -18,88 +18,76 @@ module Codec.Crypto.HKDFTests (tests) where
import Data.ByteString (ByteString)
import qualified Data.ByteString as ByteString
-import qualified Data.ByteString.Base16 as ByteString.Base16
-import qualified Data.ByteString.Char8 as ByteString.Char8
import Test.Tasty (TestTree, testGroup)
import Test.Tasty.HUnit (testCase)
import BTLS.Assertions (isRightAndHolds)
-import Codec.Crypto.HKDF (AssociatedData(AssociatedData), Salt(Salt), SecretKey(SecretKey), noSalt)
+import BTLS.TestUtilities (hex)
+import Codec.Crypto.HKDF
+ (AssociatedData(AssociatedData), Salt(Salt), SecretKey(SecretKey), noSalt)
import qualified Codec.Crypto.HKDF as HKDF
import Data.Digest (sha1, sha256)
tests :: TestTree
tests = testGroup "Codec.Crypto.HKDF" [testRFC5869]
+hkdfTestCase name hash ikm salt info prk okm@(SecretKey k) = testGroup name $
+ let len = ByteString.length k in
+ [ testCase "hkdf" $ HKDF.hkdf hash salt info len ikm `isRightAndHolds` okm
+ , testCase "extract" $ HKDF.extract hash salt ikm `isRightAndHolds` prk
+ , testCase "expand" $ HKDF.expand hash info len prk `isRightAndHolds` okm ]
+
-- | Tests from RFC 5869.
testRFC5869 = testGroup "RFC 5869 examples"
- [ t "test case 1"
+ [ hkdfTestCase "test case 1"
sha256
(SecretKey $ ByteString.replicate 22 0x0b)
(Salt $ ByteString.pack [0x00 .. 0x0c])
(AssociatedData $ ByteString.pack [0xf0 .. 0xf9])
- 42
- (SecretKey $ hex "077709362c2e32df0ddc3f0dc47bba6390b6c73bb50f9c3122ec844ad7c2b3e5")
- (SecretKey $ hex "3cb25f25faacd57a90434f64d0362f2a2d2d0a90cf1a5a4c5db02d56ecc4c5bf34007208d5b887185865")
- , t "test case 2"
+ (hexKey "077709362c2e32df0ddc3f0dc47bba6390b6c73bb50f9c3122ec844ad7c2b3e5")
+ (hexKey "3cb25f25faacd57a90434f64d0362f2a2d2d0a90cf1a5a4c5db02d56ecc4c5bf34007208d5b887185865")
+ , hkdfTestCase "test case 2"
sha256
(SecretKey $ ByteString.pack [0x00 .. 0x4f])
(Salt $ ByteString.pack [0x60 .. 0xaf])
(AssociatedData $ ByteString.pack [0xb0 .. 0xff])
- 82
- (SecretKey $ hex "06a6b88c5853361a06104c9ceb35b45cef760014904671014a193f40c15fc244")
- (SecretKey $ hex "b11e398dc80327a1c8e7f78c596a49344f012eda2d4efad8a050cc4c19afa97c59045a99cac7827271cb41c65e590e09da3275600c2f09b8367793a9aca3db71cc30c58179ec3e87c14c01d5c1f3434f1d87")
- , t "test case 3"
+ (hexKey "06a6b88c5853361a06104c9ceb35b45cef760014904671014a193f40c15fc244")
+ (hexKey "b11e398dc80327a1c8e7f78c596a49344f012eda2d4efad8a050cc4c19afa97c59045a99cac7827271cb41c65e590e09da3275600c2f09b8367793a9aca3db71cc30c58179ec3e87c14c01d5c1f3434f1d87")
+ , hkdfTestCase "test case 3"
sha256
(SecretKey $ ByteString.replicate 22 0x0b)
(Salt "")
(AssociatedData "")
- 42
- (SecretKey $ hex "19ef24a32c717b167f33a91d6f648bdf96596776afdb6377ac434c1c293ccb04")
- (SecretKey $ hex "8da4e775a563c18f715f802a063c5a31b8a11f5c5ee1879ec3454e5f3c738d2d9d201395faa4b61a96c8")
- , t "test case 4"
+ (hexKey "19ef24a32c717b167f33a91d6f648bdf96596776afdb6377ac434c1c293ccb04")
+ (hexKey "8da4e775a563c18f715f802a063c5a31b8a11f5c5ee1879ec3454e5f3c738d2d9d201395faa4b61a96c8")
+ , hkdfTestCase "test case 4"
sha1
(SecretKey $ ByteString.replicate 11 0x0b)
(Salt $ ByteString.pack [0x00 .. 0x0c])
(AssociatedData $ ByteString.pack [0xf0 .. 0xf9])
- 42
- (SecretKey $ hex "9b6c18c432a7bf8f0e71c8eb88f4b30baa2ba243")
- (SecretKey $ hex "085a01ea1b10f36933068b56efa5ad81a4f14b822f5b091568a9cdd4f155fda2c22e422478d305f3f896")
- , t "test case 5"
+ (hexKey "9b6c18c432a7bf8f0e71c8eb88f4b30baa2ba243")
+ (hexKey "085a01ea1b10f36933068b56efa5ad81a4f14b822f5b091568a9cdd4f155fda2c22e422478d305f3f896")
+ , hkdfTestCase "test case 5"
sha1
(SecretKey $ ByteString.pack [0x00 .. 0x4f])
(Salt $ ByteString.pack [0x60 .. 0xaf])
(AssociatedData $ ByteString.pack [0xb0 .. 0xff])
- 82
- (SecretKey $ hex "8adae09a2a307059478d309b26c4115a224cfaf6")
- (SecretKey $ hex "0bd770a74d1160f7c9f12cd5912a06ebff6adcae899d92191fe4305673ba2ffe8fa3f1a4e5ad79f3f334b3b202b2173c486ea37ce3d397ed034c7f9dfeb15c5e927336d0441f4c4300e2cff0d0900b52d3b4")
- , t "test case 6"
+ (hexKey "8adae09a2a307059478d309b26c4115a224cfaf6")
+ (hexKey "0bd770a74d1160f7c9f12cd5912a06ebff6adcae899d92191fe4305673ba2ffe8fa3f1a4e5ad79f3f334b3b202b2173c486ea37ce3d397ed034c7f9dfeb15c5e927336d0441f4c4300e2cff0d0900b52d3b4")
+ , hkdfTestCase "test case 6"
sha1
(SecretKey $ ByteString.replicate 22 0x0b)
(Salt "")
(AssociatedData "")
- 42
- (SecretKey $ hex "da8c8a73c7fa77288ec6f5e7c297786aa0d32d01")
- (SecretKey $ hex "0ac1af7002b3d761d1e55298da9d0506b9ae52057220a306e07b6b87e8df21d0ea00033de03984d34918")
- , t "test case 7"
+ (hexKey "da8c8a73c7fa77288ec6f5e7c297786aa0d32d01")
+ (hexKey "0ac1af7002b3d761d1e55298da9d0506b9ae52057220a306e07b6b87e8df21d0ea00033de03984d34918")
+ , hkdfTestCase "test case 7"
sha1
(SecretKey $ ByteString.replicate 22 0x0c)
noSalt
(AssociatedData "")
- 42
- (SecretKey $ hex "2adccada18779e7c2077ad2eb19d3f3e731385dd")
- (SecretKey $ hex "2c91117204d745f3500d636a62f64f0ab3bae548aa53d423b0d1f27ebba6f5e5673a081d70cce7acfc48")
- ]
- where
- t name hash ikm salt info len prk okm =
- testGroup name
- [ testCase "hkdf" $ HKDF.hkdf hash salt info len ikm `isRightAndHolds` okm
- , testCase "extract" $ HKDF.extract hash salt ikm `isRightAndHolds` prk
- , testCase "expand" $ HKDF.expand hash info len prk `isRightAndHolds` okm
- ]
+ (hexKey "2adccada18779e7c2077ad2eb19d3f3e731385dd")
+ (hexKey "2c91117204d745f3500d636a62f64f0ab3bae548aa53d423b0d1f27ebba6f5e5673a081d70cce7acfc48") ]
-hex :: ByteString -> ByteString
-hex s =
- case ByteString.Base16.decode s of
- (r, "") -> r
- _ -> error $ "invalid hex string " ++ ByteString.Char8.unpack s
+hexKey :: ByteString -> SecretKey
+hexKey = SecretKey . hex
diff --git a/tests/Data/Digest/HashTests.hs b/tests/Data/Digest/HashTests.hs
index 45b31e2..0ef61c3 100644
--- a/tests/Data/Digest/HashTests.hs
+++ b/tests/Data/Digest/HashTests.hs
@@ -12,52 +12,55 @@
-- License for the specific language governing permissions and limitations under
-- the License.
-{-# LANGUAGE OverloadedStrings #-}
-
module Data.Digest.HashTests
- ( tableTestCase
+ ( hashTestCase
, testAgainstCoreutils
, testAgainstOpenSSL
+ , hexDigest
) where
import Data.ByteString (ByteString)
import qualified Data.ByteString as ByteString
-import System.IO (hClose, hGetContents, hSetBinaryMode)
+import qualified Data.ByteString.Char8 as ByteString.Char8
+import qualified Data.ByteString.Lazy as Lazy (ByteString)
+import qualified Data.ByteString.Lazy as ByteString.Lazy
+import System.IO (hClose, hSetBinaryMode)
import System.Process
(CreateProcess(std_in, std_out), StdStream(CreatePipe), createProcess_, proc)
-import qualified Test.SmallCheck.Series.ByteString as ByteString.Series
+import qualified Test.SmallCheck.Series.ByteString.Lazy as ByteString.Lazy.Series
import Test.Tasty (TestTree)
import Test.Tasty.HUnit ((@?=), testCase)
import Test.Tasty.SmallCheck (Property, monadic, over)
-tableTestCase :: (ByteString -> String) -> (String, ByteString) -> TestTree
-tableTestCase f (output, input) = testCase description (f input @?= output)
- where
- description =
- let (x, y) = ByteString.splitAt 11 input
- in show (x `ByteString.append` if ByteString.null y then "" else "...")
+import BTLS.TestUtilities (abbreviate, hex)
+import Data.Digest (Algorithm, Digest(Digest), hash)
+
+hashTestCase :: Algorithm -> Lazy.ByteString -> ByteString -> TestTree
+hashTestCase algo input output =
+ testCase (abbreviate input) $ hash algo input @?= hexDigest output
-testAgainstCoreutils :: (ByteString -> String) -> FilePath -> Property IO
-testAgainstCoreutils f prog =
- over ByteString.Series.enumW8s $ \s ->
- monadic $ do
- theirs <- runExternal (proc prog ["-b"]) s
- return (f s == head (words theirs))
+testAgainstCoreutils :: Algorithm -> FilePath -> Property IO
+testAgainstCoreutils algo prog =
+ over ByteString.Lazy.Series.enumW8s $ \s -> monadic $ do
+ theirs <- externalHash (proc prog ["-b"]) s head
+ return $ hash algo s == theirs
+
+testAgainstOpenSSL :: Algorithm -> String -> Property IO
+testAgainstOpenSSL algo flag =
+ over ByteString.Lazy.Series.enumW8s $ \s -> monadic $ do
+ theirs <- externalHash (proc "openssl" ["dgst", '-' : flag]) s (!!1)
+ return $ hash algo s == theirs
-- | Runs an external hashing command with the specified standard input. Assumes
-- that the process will exit when its standard input is closed.
-runExternal :: CreateProcess -> ByteString -> IO String
-runExternal p s = do
+externalHash :: CreateProcess -> Lazy.ByteString -> ([ByteString] -> ByteString) -> IO Digest
+externalHash p s toDigest = do
(Just stdin, Just stdout, _, _) <-
createProcess_ "runExternal" (p {std_in = CreatePipe, std_out = CreatePipe})
hSetBinaryMode stdin True
- ByteString.hPut stdin s
+ ByteString.Lazy.hPut stdin s
hClose stdin -- causes process to exit
- hGetContents stdout
-
-testAgainstOpenSSL :: (ByteString -> String) -> String -> Property IO
-testAgainstOpenSSL f flag =
- over ByteString.Series.enumW8s $ \s ->
- monadic $ do
- theirs <- runExternal (proc "openssl" ["dgst", '-' : flag]) s
- return (f s == words theirs !! 1)
+ hexDigest . toDigest . ByteString.Char8.words <$> ByteString.hGetContents stdout
+
+hexDigest :: ByteString -> Digest
+hexDigest = Digest . hex
diff --git a/tests/Data/Digest/MD5Tests.hs b/tests/Data/Digest/MD5Tests.hs
index 0db7bcb..de04645 100644
--- a/tests/Data/Digest/MD5Tests.hs
+++ b/tests/Data/Digest/MD5Tests.hs
@@ -16,77 +16,73 @@
module Data.Digest.MD5Tests (tests) where
-import qualified Data.ByteString.Lazy as ByteString.Lazy
+import Data.ByteString (ByteString)
+import qualified Data.ByteString.Lazy as Lazy (ByteString)
import Test.Tasty (TestTree, testGroup)
import Test.Tasty.SmallCheck (testProperty)
+import Data.Digest (md5)
import Data.Digest.HashTests
- (tableTestCase, testAgainstCoreutils, testAgainstOpenSSL)
-import Data.Digest (hash, md5)
+ (hashTestCase, testAgainstCoreutils, testAgainstOpenSSL)
tests :: TestTree
tests = testGroup "MD5"
[ testRFCExamples
, testGoExamples
, testCoreutilsConformance
- , testOpenSSLConformance
- ]
+ , testOpenSSLConformance ]
+
+md5TestCase :: Lazy.ByteString -> ByteString -> TestTree
+md5TestCase = hashTestCase md5
-- | MD5 example vectors from RFC 1321.
-testRFCExamples = testGroup "RFC 1321 examples" $
- map (tableTestCase md5sum)
- [ ("d41d8cd98f00b204e9800998ecf8427e", "")
- , ("0cc175b9c0f1b6a831c399e269772661", "a")
- , ("900150983cd24fb0d6963f7d28e17f72", "abc")
- , ("f96b697d7cb7938d525a2f31aaf161d0", "message digest")
- , ("c3fcd3d76192e4007dfb496cca67e13b", "abcdefghijklmnopqrstuvwxyz")
- , ("d174ab98d277d9f5a5611c2c9f419d9f", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789")
- , ("57edf4a22be3c955ac49da2e2107b67a", "12345678901234567890123456789012345678901234567890123456789012345678901234567890")
- ]
+testRFCExamples = testGroup "RFC 1321 examples"
+ [ md5TestCase "" "d41d8cd98f00b204e9800998ecf8427e"
+ , md5TestCase "a" "0cc175b9c0f1b6a831c399e269772661"
+ , md5TestCase "abc" "900150983cd24fb0d6963f7d28e17f72"
+ , md5TestCase "message digest" "f96b697d7cb7938d525a2f31aaf161d0"
+ , md5TestCase "abcdefghijklmnopqrstuvwxyz" "c3fcd3d76192e4007dfb496cca67e13b"
+ , md5TestCase "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" "d174ab98d277d9f5a5611c2c9f419d9f"
+ , md5TestCase "12345678901234567890123456789012345678901234567890123456789012345678901234567890" "57edf4a22be3c955ac49da2e2107b67a" ]
-- | Test vectors used to test the Go MD5 implementation.
testGoExamples = testGroup "Go tests" $
- map (tableTestCase md5sum)
- [ ("d41d8cd98f00b204e9800998ecf8427e", "")
- , ("0cc175b9c0f1b6a831c399e269772661", "a")
- , ("187ef4436122d1cc2f40dc2b92f0eba0", "ab")
- , ("900150983cd24fb0d6963f7d28e17f72", "abc")
- , ("e2fc714c4727ee9395f324cd2e7f331f", "abcd")
- , ("ab56b4d92b40713acc5af89985d4b786", "abcde")
- , ("e80b5017098950fc58aad83c8c14978e", "abcdef")
- , ("7ac66c0f148de9519b8bd264312c4d64", "abcdefg")
- , ("e8dc4081b13434b45189a720b77b6818", "abcdefgh")
- , ("8aa99b1f439ff71293e95357bac6fd94", "abcdefghi")
- , ("a925576942e94b2ef57a066101b48876", "abcdefghij")
- , ("d747fc1719c7eacb84058196cfe56d57", "Discard medicine more than two years old.")
- , ("bff2dcb37ef3a44ba43ab144768ca837", "He who has a shady past knows that nice guys finish last.")
- , ("0441015ecb54a7342d017ed1bcfdbea5", "I wouldn't marry him with a ten foot pole.")
- , ("9e3cac8e9e9757a60c3ea391130d3689", "Free! Free!/A trip/to Mars/for 900/empty jars/Burma Shave")
- , ("a0f04459b031f916a59a35cc482dc039", "The days of the digital watch are numbered. -Tom Stoppard")
- , ("e7a48e0fe884faf31475d2a04b1362cc", "Nepal premier won't resign.")
- , ("637d2fe925c07c113800509964fb0e06", "For every action there is an equal and opposite government program.")
- , ("834a8d18d5c6562119cf4c7f5086cb71", "His money is twice tainted: 'taint yours and 'taint mine.")
- , ("de3a4d2fd6c73ec2db2abad23b444281", "There is no reason for any individual to have a computer in their home. -Ken Olsen, 1977")
- , ("acf203f997e2cf74ea3aff86985aefaf", "It's a tiny change to the code and not completely disgusting. - Bob Manchek")
- , ("e1c1384cb4d2221dfdd7c795a4222c9a", "size: a.out: bad magic")
- , ("c90f3ddecc54f34228c063d7525bf644", "The major problem is with sendmail. -Mark Horton")
- , ("cdf7ab6c1fd49bd9933c43f3ea5af185", "Give me a rock, paper and scissors and I will move the world. CCFestoon")
- , ("83bc85234942fc883c063cbd7f0ad5d0", "If the enemy is within range, then so are you.")
- , ("277cbe255686b48dd7e8f389394d9299", "It's well we cannot hear the screams/That we create in others' dreams.")
- , ("fd3fb0a7ffb8af16603f3d3af98f8e1f", "You remind me of a TV show, but that's all right: I watch it anyway.")
- , ("469b13a78ebf297ecda64d4723655154", "C is as portable as Stonehedge!!")
- , ("63eb3a2f466410104731c4b037600110", "Even if I could be Shakespeare, I think I should still choose to be Faraday. - A. Huxley")
- , ("72c2ed7592debca1c90fc0100f931a2f", "The fugacity of a constituent in a mixture of gases at a given temperature is proportional to its mole fraction. Lewis-Randall Rule")
- , ("132f7619d33b523b1d9e5bd8e0928355", "How can you write a big system without C++? -Paul Glick")
- ]
+ [ md5TestCase "" "d41d8cd98f00b204e9800998ecf8427e"
+ , md5TestCase "a" "0cc175b9c0f1b6a831c399e269772661"
+ , md5TestCase "ab" "187ef4436122d1cc2f40dc2b92f0eba0"
+ , md5TestCase "abc" "900150983cd24fb0d6963f7d28e17f72"
+ , md5TestCase "abcd" "e2fc714c4727ee9395f324cd2e7f331f"
+ , md5TestCase "abcde" "ab56b4d92b40713acc5af89985d4b786"
+ , md5TestCase "abcdef" "e80b5017098950fc58aad83c8c14978e"
+ , md5TestCase "abcdefg" "7ac66c0f148de9519b8bd264312c4d64"
+ , md5TestCase "abcdefgh" "e8dc4081b13434b45189a720b77b6818"
+ , md5TestCase "abcdefghi" "8aa99b1f439ff71293e95357bac6fd94"
+ , md5TestCase "abcdefghij" "a925576942e94b2ef57a066101b48876"
+ , md5TestCase "Discard medicine more than two years old." "d747fc1719c7eacb84058196cfe56d57"
+ , md5TestCase "He who has a shady past knows that nice guys finish last." "bff2dcb37ef3a44ba43ab144768ca837"
+ , md5TestCase "I wouldn't marry him with a ten foot pole." "0441015ecb54a7342d017ed1bcfdbea5"
+ , md5TestCase "Free! Free!/A trip/to Mars/for 900/empty jars/Burma Shave" "9e3cac8e9e9757a60c3ea391130d3689"
+ , md5TestCase "The days of the digital watch are numbered. -Tom Stoppard" "a0f04459b031f916a59a35cc482dc039"
+ , md5TestCase "Nepal premier won't resign." "e7a48e0fe884faf31475d2a04b1362cc"
+ , md5TestCase "For every action there is an equal and opposite government program." "637d2fe925c07c113800509964fb0e06"
+ , md5TestCase "His money is twice tainted: 'taint yours and 'taint mine." "834a8d18d5c6562119cf4c7f5086cb71"
+ , md5TestCase "There is no reason for any individual to have a computer in their home. -Ken Olsen, 1977" "de3a4d2fd6c73ec2db2abad23b444281"
+ , md5TestCase "It's a tiny change to the code and not completely disgusting. - Bob Manchek" "acf203f997e2cf74ea3aff86985aefaf"
+ , md5TestCase "size: a.out: bad magic" "e1c1384cb4d2221dfdd7c795a4222c9a"
+ , md5TestCase "The major problem is with sendmail. -Mark Horton" "c90f3ddecc54f34228c063d7525bf644"
+ , md5TestCase "Give me a rock, paper and scissors and I will move the world. CCFestoon" "cdf7ab6c1fd49bd9933c43f3ea5af185"
+ , md5TestCase "If the enemy is within range, then so are you." "83bc85234942fc883c063cbd7f0ad5d0"
+ , md5TestCase "It's well we cannot hear the screams/That we create in others' dreams." "277cbe255686b48dd7e8f389394d9299"
+ , md5TestCase "You remind me of a TV show, but that's all right: I watch it anyway." "fd3fb0a7ffb8af16603f3d3af98f8e1f"
+ , md5TestCase "C is as portable as Stonehedge!!" "469b13a78ebf297ecda64d4723655154"
+ , md5TestCase "Even if I could be Shakespeare, I think I should still choose to be Faraday. - A. Huxley" "63eb3a2f466410104731c4b037600110"
+ , md5TestCase "The fugacity of a constituent in a mixture of gases at a given temperature is proportional to its mole fraction. Lewis-Randall Rule" "72c2ed7592debca1c90fc0100f931a2f"
+ , md5TestCase "How can you write a big system without C++? -Paul Glick" "132f7619d33b523b1d9e5bd8e0928355" ]
-- | Tests our MD5 implementation against coreutils'.
testCoreutilsConformance = testProperty "conformance with coreutils" $
- testAgainstCoreutils md5sum "md5sum"
+ testAgainstCoreutils md5 "md5sum"
-- | Tests our MD5 implementation against openssl(1)'s.
testOpenSSLConformance = testProperty "conformance with OpenSSL" $
- testAgainstOpenSSL md5sum "md5"
-
--- Convenience function.
-md5sum = show . hash md5 . ByteString.Lazy.fromStrict
+ testAgainstOpenSSL md5 "md5"
diff --git a/tests/Data/Digest/SHA1Tests.hs b/tests/Data/Digest/SHA1Tests.hs
index 362660f..afad68c 100644
--- a/tests/Data/Digest/SHA1Tests.hs
+++ b/tests/Data/Digest/SHA1Tests.hs
@@ -16,75 +16,71 @@
module Data.Digest.SHA1Tests (tests) where
-import qualified Data.ByteString.Lazy as ByteString.Lazy
+import Data.ByteString (ByteString)
+import qualified Data.ByteString.Lazy as Lazy (ByteString)
import Test.Tasty (TestTree, testGroup)
import Test.Tasty.HUnit ((@?=), testCase)
import Test.Tasty.SmallCheck (testProperty)
-import Data.Digest.HashTests
- (tableTestCase, testAgainstCoreutils, testAgainstOpenSSL)
import Data.Digest (hash, sha1)
+import Data.Digest.HashTests
+ (hashTestCase, hexDigest, testAgainstCoreutils, testAgainstOpenSSL)
tests :: TestTree
tests = testGroup "SHA-1"
- [ testNistExamples
+ [ testNISTExamples
, testGoExamples
, testCoreutilsConformance
- , testOpenSSLConformance
- ]
+ , testOpenSSLConformance ]
+sha1TestCase :: Lazy.ByteString -> ByteString -> TestTree
+sha1TestCase = hashTestCase sha1
-- | SHA-1 example vectors from
-- https://csrc.nist.gov/projects/cryptographic-standards-and-guidelines/example-values.
-testNistExamples = testGroup "NIST examples"
- [ testCase "one-block" $ sha1sum "abc" @?= "a9993e364706816aba3e25717850c26c9cd0d89d"
- , testCase "two-block" $ sha1sum "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" @?= "84983e441c3bd26ebaae4aa1f95129e5e54670f1"
- ]
+testNISTExamples = testGroup "NIST examples"
+ [ testCase "one-block" $ hash sha1 "abc" @?= hexDigest "a9993e364706816aba3e25717850c26c9cd0d89d"
+ , testCase "two-block" $ hash sha1 "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" @?= hexDigest "84983e441c3bd26ebaae4aa1f95129e5e54670f1" ]
-- | Test vectors used to test the Go SHA-1 implementation.
-testGoExamples = testGroup "Go tests" $
- map (tableTestCase sha1sum)
- [ ("76245dbf96f661bd221046197ab8b9f063f11bad", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n")
- , ("da39a3ee5e6b4b0d3255bfef95601890afd80709", "")
- , ("86f7e437faa5a7fce15d1ddcb9eaeaea377667b8", "a")
- , ("da23614e02469a0d7c7bd1bdab5c9c474b1904dc", "ab")
- , ("a9993e364706816aba3e25717850c26c9cd0d89d", "abc")
- , ("81fe8bfe87576c3ecb22426f8e57847382917acf", "abcd")
- , ("03de6c570bfe24bfc328ccd7ca46b76eadaf4334", "abcde")
- , ("1f8ac10f23c5b5bc1167bda84b833e5c057a77d2", "abcdef")
- , ("2fb5e13419fc89246865e7a324f476ec624e8740", "abcdefg")
- , ("425af12a0743502b322e93a015bcf868e324d56a", "abcdefgh")
- , ("c63b19f1e4c8b5f76b25c49b8b87f57d8e4872a1", "abcdefghi")
- , ("d68c19a0a345b7eab78d5e11e991c026ec60db63", "abcdefghij")
- , ("ebf81ddcbe5bf13aaabdc4d65354fdf2044f38a7", "Discard medicine more than two years old.")
- , ("e5dea09392dd886ca63531aaa00571dc07554bb6", "He who has a shady past knows that nice guys finish last.")
- , ("45988f7234467b94e3e9494434c96ee3609d8f8f", "I wouldn't marry him with a ten foot pole.")
- , ("55dee037eb7460d5a692d1ce11330b260e40c988", "Free! Free!/A trip/to Mars/for 900/empty jars/Burma Shave")
- , ("b7bc5fb91080c7de6b582ea281f8a396d7c0aee8", "The days of the digital watch are numbered. -Tom Stoppard")
- , ("c3aed9358f7c77f523afe86135f06b95b3999797", "Nepal premier won't resign.")
- , ("6e29d302bf6e3a5e4305ff318d983197d6906bb9", "For every action there is an equal and opposite government program.")
- , ("597f6a540010f94c15d71806a99a2c8710e747bd", "His money is twice tainted: 'taint yours and 'taint mine.")
- , ("6859733b2590a8a091cecf50086febc5ceef1e80", "There is no reason for any individual to have a computer in their home. -Ken Olsen, 1977")
- , ("514b2630ec089b8aee18795fc0cf1f4860cdacad", "It's a tiny change to the code and not completely disgusting. - Bob Manchek")
- , ("c5ca0d4a7b6676fc7aa72caa41cc3d5df567ed69", "size: a.out: bad magic")
- , ("74c51fa9a04eadc8c1bbeaa7fc442f834b90a00a", "The major problem is with sendmail. -Mark Horton")
- , ("0b4c4ce5f52c3ad2821852a8dc00217fa18b8b66", "Give me a rock, paper and scissors and I will move the world. CCFestoon")
- , ("3ae7937dd790315beb0f48330e8642237c61550a", "If the enemy is within range, then so are you.")
- , ("410a2b296df92b9a47412b13281df8f830a9f44b", "It's well we cannot hear the screams/That we create in others' dreams.")
- , ("841e7c85ca1adcddbdd0187f1289acb5c642f7f5", "You remind me of a TV show, but that's all right: I watch it anyway.")
- , ("163173b825d03b952601376b25212df66763e1db", "C is as portable as Stonehedge!!")
- , ("32b0377f2687eb88e22106f133c586ab314d5279", "Even if I could be Shakespeare, I think I should still choose to be Faraday. - A. Huxley")
- , ("0885aaf99b569542fd165fa44e322718f4a984e0", "The fugacity of a constituent in a mixture of gases at a given temperature is proportional to its mole fraction. Lewis-Randall Rule")
- , ("6627d6904d71420b0bf3886ab629623538689f45", "How can you write a big system without C++? -Paul Glick")
- ]
+testGoExamples = testGroup "Go tests"
+ [ sha1TestCase "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n" "76245dbf96f661bd221046197ab8b9f063f11bad"
+ , sha1TestCase "" "da39a3ee5e6b4b0d3255bfef95601890afd80709"
+ , sha1TestCase "a" "86f7e437faa5a7fce15d1ddcb9eaeaea377667b8"
+ , sha1TestCase "ab" "da23614e02469a0d7c7bd1bdab5c9c474b1904dc"
+ , sha1TestCase "abc" "a9993e364706816aba3e25717850c26c9cd0d89d"
+ , sha1TestCase "abcd" "81fe8bfe87576c3ecb22426f8e57847382917acf"
+ , sha1TestCase "abcde" "03de6c570bfe24bfc328ccd7ca46b76eadaf4334"
+ , sha1TestCase "abcdef" "1f8ac10f23c5b5bc1167bda84b833e5c057a77d2"
+ , sha1TestCase "abcdefg" "2fb5e13419fc89246865e7a324f476ec624e8740"
+ , sha1TestCase "abcdefgh" "425af12a0743502b322e93a015bcf868e324d56a"
+ , sha1TestCase "abcdefghi" "c63b19f1e4c8b5f76b25c49b8b87f57d8e4872a1"
+ , sha1TestCase "abcdefghij" "d68c19a0a345b7eab78d5e11e991c026ec60db63"
+ , sha1TestCase "Discard medicine more than two years old." "ebf81ddcbe5bf13aaabdc4d65354fdf2044f38a7"
+ , sha1TestCase "He who has a shady past knows that nice guys finish last." "e5dea09392dd886ca63531aaa00571dc07554bb6"
+ , sha1TestCase "I wouldn't marry him with a ten foot pole." "45988f7234467b94e3e9494434c96ee3609d8f8f"
+ , sha1TestCase "Free! Free!/A trip/to Mars/for 900/empty jars/Burma Shave" "55dee037eb7460d5a692d1ce11330b260e40c988"
+ , sha1TestCase "The days of the digital watch are numbered. -Tom Stoppard" "b7bc5fb91080c7de6b582ea281f8a396d7c0aee8"
+ , sha1TestCase "Nepal premier won't resign." "c3aed9358f7c77f523afe86135f06b95b3999797"
+ , sha1TestCase "For every action there is an equal and opposite government program." "6e29d302bf6e3a5e4305ff318d983197d6906bb9"
+ , sha1TestCase "His money is twice tainted: 'taint yours and 'taint mine." "597f6a540010f94c15d71806a99a2c8710e747bd"
+ , sha1TestCase "There is no reason for any individual to have a computer in their home. -Ken Olsen, 1977" "6859733b2590a8a091cecf50086febc5ceef1e80"
+ , sha1TestCase "It's a tiny change to the code and not completely disgusting. - Bob Manchek" "514b2630ec089b8aee18795fc0cf1f4860cdacad"
+ , sha1TestCase "size: a.out: bad magic" "c5ca0d4a7b6676fc7aa72caa41cc3d5df567ed69"
+ , sha1TestCase "The major problem is with sendmail. -Mark Horton" "74c51fa9a04eadc8c1bbeaa7fc442f834b90a00a"
+ , sha1TestCase "Give me a rock, paper and scissors and I will move the world. CCFestoon" "0b4c4ce5f52c3ad2821852a8dc00217fa18b8b66"
+ , sha1TestCase "If the enemy is within range, then so are you." "3ae7937dd790315beb0f48330e8642237c61550a"
+ , sha1TestCase "It's well we cannot hear the screams/That we create in others' dreams." "410a2b296df92b9a47412b13281df8f830a9f44b"
+ , sha1TestCase "You remind me of a TV show, but that's all right: I watch it anyway." "841e7c85ca1adcddbdd0187f1289acb5c642f7f5"
+ , sha1TestCase "C is as portable as Stonehedge!!" "163173b825d03b952601376b25212df66763e1db"
+ , sha1TestCase "Even if I could be Shakespeare, I think I should still choose to be Faraday. - A. Huxley" "32b0377f2687eb88e22106f133c586ab314d5279"
+ , sha1TestCase "The fugacity of a constituent in a mixture of gases at a given temperature is proportional to its mole fraction. Lewis-Randall Rule" "0885aaf99b569542fd165fa44e322718f4a984e0"
+ , sha1TestCase "How can you write a big system without C++? -Paul Glick" "6627d6904d71420b0bf3886ab629623538689f45" ]
-- | Tests our SHA-1 implementation against coreutils'.
testCoreutilsConformance = testProperty "conformance with coreutils" $
- testAgainstCoreutils sha1sum "sha1sum"
+ testAgainstCoreutils sha1 "sha1sum"
-- | Tests our SHA-1 implementation against openssl(1)'s.
testOpenSSLConformance = testProperty "conformance with OpenSSL" $
- testAgainstOpenSSL sha1sum "sha1"
-
--- Convenience function.
-sha1sum = show . hash sha1 . ByteString.Lazy.fromStrict
+ testAgainstOpenSSL sha1 "sha1"
diff --git a/tests/Data/Digest/SHA2Tests.hs b/tests/Data/Digest/SHA2Tests.hs
index eecf1d8..defc94b 100644
--- a/tests/Data/Digest/SHA2Tests.hs
+++ b/tests/Data/Digest/SHA2Tests.hs
@@ -16,218 +16,203 @@
module Data.Digest.SHA2Tests (tests) where
-import qualified Data.ByteString.Lazy as ByteString.Lazy
+import Data.ByteString (ByteString)
+import qualified Data.ByteString.Lazy as Lazy (ByteString)
import Test.Tasty (TestTree, testGroup)
import Test.Tasty.HUnit ((@?=), testCase)
import Test.Tasty.SmallCheck (testProperty)
-import Data.Digest.HashTests
- (tableTestCase, testAgainstCoreutils, testAgainstOpenSSL)
import Data.Digest (hash, sha224, sha256, sha384, sha512)
+import Data.Digest.HashTests
+ (hashTestCase, hexDigest, testAgainstCoreutils, testAgainstOpenSSL)
tests :: TestTree
tests = testGroup "SHA-2"
- [ testNistExamples
+ [ testNISTExamples
, testGoExamples
, testCoreutilsConformance
- , testOpenSSLConformance
- ]
+ , testOpenSSLConformance ]
-- | SHA-2 example vectors from
-- https://csrc.nist.gov/projects/cryptographic-standards-and-guidelines/example-values.
-testNistExamples = testGroup "NIST examples"
- [ testNistSHA224
- , testNistSHA256
- , testNistSHA384
- , testNistSHA512
- ]
-
-testNistSHA224 = testGroup "SHA-224"
- [ testCase "one-block" $ sha224sum "abc" @?= "23097d223405d8228642a477bda255b32aadbce4bda0b3f7e36c9da7"
- , testCase "two-block" $ sha224sum "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" @?= "75388b16512776cc5dba5da1fd890150b0c6455cb4f58b1952522525"
- ]
-
-testNistSHA256 = testGroup "SHA-256"
- [ testCase "one-block" $ sha256sum "abc" @?= "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"
- , testCase "two-block" $ sha256sum "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" @?= "248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1"
- ]
-
-testNistSHA384 = testGroup "SHA-384"
- [ testCase "one-block" $ sha384sum "abc" @?= "cb00753f45a35e8bb5a03d699ac65007272c32ab0eded1631a8b605a43ff5bed8086072ba1e7cc2358baeca134c825a7"
- , testCase "two-block" $ sha384sum "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu" @?= "09330c33f71147e83d192fc782cd1b4753111b173b3b05d22fa08086e3b0f712fcc7c71a557e2db966c3e9fa91746039"
- ]
-
-testNistSHA512 = testGroup "SHA-512"
- [ testCase "one-block" $ sha512sum "abc" @?= "ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f"
- , testCase "two-block" $ sha512sum "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu" @?= "8e959b75dae313da8cf4f72814fc143f8f7779c6eb9f7fa17299aeadb6889018501d289e4900f7e4331b99dec4b5433ac7d329eeb6dd26545e96e55b874be909"
- ]
+testNISTExamples = testGroup "NIST examples"
+ [ testNISTSHA224
+ , testNISTSHA256
+ , testNISTSHA384
+ , testNISTSHA512 ]
+
+testNISTSHA224 = testGroup "SHA-224"
+ [ testCase "one-block" $ hash sha224 "abc" @?= hexDigest "23097d223405d8228642a477bda255b32aadbce4bda0b3f7e36c9da7"
+ , testCase "two-block" $ hash sha224 "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" @?= hexDigest "75388b16512776cc5dba5da1fd890150b0c6455cb4f58b1952522525" ]
+
+testNISTSHA256 = testGroup "SHA-256"
+ [ testCase "one-block" $ hash sha256 "abc" @?= hexDigest "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"
+ , testCase "two-block" $ hash sha256 "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" @?= hexDigest "248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1" ]
+
+testNISTSHA384 = testGroup "SHA-384"
+ [ testCase "one-block" $ hash sha384 "abc" @?= hexDigest "cb00753f45a35e8bb5a03d699ac65007272c32ab0eded1631a8b605a43ff5bed8086072ba1e7cc2358baeca134c825a7"
+ , testCase "two-block" $ hash sha384 "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu" @?= hexDigest "09330c33f71147e83d192fc782cd1b4753111b173b3b05d22fa08086e3b0f712fcc7c71a557e2db966c3e9fa91746039" ]
+
+testNISTSHA512 = testGroup "SHA-512"
+ [ testCase "one-block" $ hash sha512 "abc" @?= hexDigest "ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f"
+ , testCase "two-block" $ hash sha512 "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu" @?= hexDigest "8e959b75dae313da8cf4f72814fc143f8f7779c6eb9f7fa17299aeadb6889018501d289e4900f7e4331b99dec4b5433ac7d329eeb6dd26545e96e55b874be909" ]
-- | Test vectors used to test the Go SHA-2 implementations.
testGoExamples = testGroup "Go tests"
[ testGoSHA224
, testGoSHA256
, testGoSHA384
- , testGoSHA512
- ]
-
-testGoSHA224 = testGroup "SHA-224" $
- map (tableTestCase sha224sum)
- [ ("d14a028c2a3a2bc9476102bb288234c415a2b01f828ea62ac5b3e42f", "")
- , ("abd37534c7d9a2efb9465de931cd7055ffdb8879563ae98078d6d6d5", "a")
- , ("db3cda86d4429a1d39c148989566b38f7bda0156296bd364ba2f878b", "ab")
- , ("23097d223405d8228642a477bda255b32aadbce4bda0b3f7e36c9da7", "abc")
- , ("a76654d8e3550e9a2d67a0eeb6c67b220e5885eddd3fde135806e601", "abcd")
- , ("bdd03d560993e675516ba5a50638b6531ac2ac3d5847c61916cfced6", "abcde")
- , ("7043631cb415556a275a4ebecb802c74ee9f6153908e1792a90b6a98", "abcdef")
- , ("d1884e711701ad81abe0c77a3b0ea12e19ba9af64077286c72fc602d", "abcdefg")
- , ("17eb7d40f0356f8598e89eafad5f6c759b1f822975d9c9b737c8a517", "abcdefgh")
- , ("aeb35915346c584db820d2de7af3929ffafef9222a9bcb26516c7334", "abcdefghi")
- , ("d35e1e5af29ddb0d7e154357df4ad9842afee527c689ee547f753188", "abcdefghij")
- , ("19297f1cef7ddc8a7e947f5c5a341e10f7245045e425db67043988d7", "Discard medicine more than two years old.")
- , ("0f10c2eb436251f777fbbd125e260d36aecf180411726c7c885f599a", "He who has a shady past knows that nice guys finish last.")
- , ("4d1842104919f314cad8a3cd20b3cba7e8ed3e7abed62b57441358f6", "I wouldn't marry him with a ten foot pole.")
- , ("a8ba85c6fe0c48fbffc72bbb2f03fcdbc87ae2dc7a56804d1590fb3b", "Free! Free!/A trip/to Mars/for 900/empty jars/Burma Shave")
- , ("5543fbab26e67e8885b1a852d567d1cb8b9bfe42e0899584c50449a9", "The days of the digital watch are numbered. -Tom Stoppard")
- , ("65ca107390f5da9efa05d28e57b221657edc7e43a9a18fb15b053ddb", "Nepal premier won't resign.")
- , ("84953962be366305a9cc9b5cd16ed019edc37ac96c0deb3e12cca116", "For every action there is an equal and opposite government program.")
- , ("35a189ce987151dfd00b3577583cc6a74b9869eecf894459cb52038d", "His money is twice tainted: 'taint yours and 'taint mine.")
- , ("2fc333713983edfd4ef2c0da6fb6d6415afb94987c91e4069eb063e6", "There is no reason for any individual to have a computer in their home. -Ken Olsen, 1977")
- , ("cbe32d38d577a1b355960a4bc3c659c2dc4670859a19777a875842c4", "It's a tiny change to the code and not completely disgusting. - Bob Manchek")
- , ("a2dc118ce959e027576413a7b440c875cdc8d40df9141d6ef78a57e1", "size: a.out: bad magic")
- , ("d10787e24052bcff26dc484787a54ed819e4e4511c54890ee977bf81", "The major problem is with sendmail. -Mark Horton")
- , ("62efcf16ab8a893acdf2f348aaf06b63039ff1bf55508c830532c9fb", "Give me a rock, paper and scissors and I will move the world. CCFestoon")
- , ("3e9b7e4613c59f58665104c5fa86c272db5d3a2ff30df5bb194a5c99", "If the enemy is within range, then so are you.")
- , ("5999c208b8bdf6d471bb7c359ac5b829e73a8211dff686143a4e7f18", "It's well we cannot hear the screams/That we create in others' dreams.")
- , ("3b2d67ff54eabc4ef737b14edf87c64280ef582bcdf2a6d56908b405", "You remind me of a TV show, but that's all right: I watch it anyway.")
- , ("d0733595d20e4d3d6b5c565a445814d1bbb2fd08b9a3b8ffb97930c6", "C is as portable as Stonehedge!!")
- , ("43fb8aeed8a833175c9295c1165415f98c866ef08a4922959d673507", "Even if I could be Shakespeare, I think I should still choose to be Faraday. - A. Huxley")
- , ("ec18e66e93afc4fb1604bc2baedbfd20b44c43d76e65c0996d7851c6", "The fugacity of a constituent in a mixture of gases at a given temperature is proportional to its mole fraction. Lewis-Randall Rule")
- , ("86ed2eaa9c75ba98396e5c9fb2f679ecf0ea2ed1e0ee9ceecb4a9332", "How can you write a big system without C++? -Paul Glick")
- ]
-
-testGoSHA256 = testGroup "SHA-256" $
- map (tableTestCase sha256sum)
- [ ("e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "")
- , ("ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb", "a")
- , ("fb8e20fc2e4c3f248c60c39bd652f3c1347298bb977b8b4d5903b85055620603", "ab")
- , ("ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad", "abc")
- , ("88d4266fd4e6338d13b845fcf289579d209c897823b9217da3e161936f031589", "abcd")
- , ("36bbe50ed96841d10443bcb670d6554f0a34b761be67ec9c4a8ad2c0c44ca42c", "abcde")
- , ("bef57ec7f53a6d40beb640a780a639c83bc29ac8a9816f1fc6c5c6dcd93c4721", "abcdef")
- , ("7d1a54127b222502f5b79b5fb0803061152a44f92b37e23c6527baf665d4da9a", "abcdefg")
- , ("9c56cc51b374c3ba189210d5b6d4bf57790d351c96c47c02190ecf1e430635ab", "abcdefgh")
- , ("19cc02f26df43cc571bc9ed7b0c4d29224a3ec229529221725ef76d021c8326f", "abcdefghi")
- , ("72399361da6a7754fec986dca5b7cbaf1c810a28ded4abaf56b2106d06cb78b0", "abcdefghij")
- , ("a144061c271f152da4d151034508fed1c138b8c976339de229c3bb6d4bbb4fce", "Discard medicine more than two years old.")
- , ("6dae5caa713a10ad04b46028bf6dad68837c581616a1589a265a11288d4bb5c4", "He who has a shady past knows that nice guys finish last.")
- , ("ae7a702a9509039ddbf29f0765e70d0001177914b86459284dab8b348c2dce3f", "I wouldn't marry him with a ten foot pole.")
- , ("6748450b01c568586715291dfa3ee018da07d36bb7ea6f180c1af6270215c64f", "Free! Free!/A trip/to Mars/for 900/empty jars/Burma Shave")
- , ("14b82014ad2b11f661b5ae6a99b75105c2ffac278cd071cd6c05832793635774", "The days of the digital watch are numbered. -Tom Stoppard")
- , ("7102cfd76e2e324889eece5d6c41921b1e142a4ac5a2692be78803097f6a48d8", "Nepal premier won't resign.")
- , ("23b1018cd81db1d67983c5f7417c44da9deb582459e378d7a068552ea649dc9f", "For every action there is an equal and opposite government program.")
- , ("8001f190dfb527261c4cfcab70c98e8097a7a1922129bc4096950e57c7999a5a", "His money is twice tainted: 'taint yours and 'taint mine.")
- , ("8c87deb65505c3993eb24b7a150c4155e82eee6960cf0c3a8114ff736d69cad5", "There is no reason for any individual to have a computer in their home. -Ken Olsen, 1977")
- , ("bfb0a67a19cdec3646498b2e0f751bddc41bba4b7f30081b0b932aad214d16d7", "It's a tiny change to the code and not completely disgusting. - Bob Manchek")
- , ("7f9a0b9bf56332e19f5a0ec1ad9c1425a153da1c624868fda44561d6b74daf36", "size: a.out: bad magic")
- , ("b13f81b8aad9e3666879af19886140904f7f429ef083286195982a7588858cfc", "The major problem is with sendmail. -Mark Horton")
- , ("b26c38d61519e894480c70c8374ea35aa0ad05b2ae3d6674eec5f52a69305ed4", "Give me a rock, paper and scissors and I will move the world. CCFestoon")
- , ("049d5e26d4f10222cd841a119e38bd8d2e0d1129728688449575d4ff42b842c1", "If the enemy is within range, then so are you.")
- , ("0e116838e3cc1c1a14cd045397e29b4d087aa11b0853fc69ec82e90330d60949", "It's well we cannot hear the screams/That we create in others' dreams.")
- , ("4f7d8eb5bcf11de2a56b971021a444aa4eafd6ecd0f307b5109e4e776cd0fe46", "You remind me of a TV show, but that's all right: I watch it anyway.")
- , ("61c0cc4c4bd8406d5120b3fb4ebc31ce87667c162f29468b3c779675a85aebce", "C is as portable as Stonehedge!!")
- , ("1fb2eb3688093c4a3f80cd87a5547e2ce940a4f923243a79a2a1e242220693ac", "Even if I could be Shakespeare, I think I should still choose to be Faraday. - A. Huxley")
- , ("395585ce30617b62c80b93e8208ce866d4edc811a177fdb4b82d3911d8696423", "The fugacity of a constituent in a mixture of gases at a given temperature is proportional to its mole fraction. Lewis-Randall Rule")
- , ("4f9b189a13d030838269dce846b16a1ce9ce81fe63e65de2f636863336a98fe6", "How can you write a big system without C++? -Paul Glick")
- ]
-
-testGoSHA384 = testGroup "SHA-384" $
- map (tableTestCase sha384sum)
- [ ("38b060a751ac96384cd9327eb1b1e36a21fdb71114be07434c0cc7bf63f6e1da274edebfe76f65fbd51ad2f14898b95b", "")
- , ("54a59b9f22b0b80880d8427e548b7c23abd873486e1f035dce9cd697e85175033caa88e6d57bc35efae0b5afd3145f31", "a")
- , ("c7be03ba5bcaa384727076db0018e99248e1a6e8bd1b9ef58a9ec9dd4eeebb3f48b836201221175befa74ddc3d35afdd", "ab")
- , ("cb00753f45a35e8bb5a03d699ac65007272c32ab0eded1631a8b605a43ff5bed8086072ba1e7cc2358baeca134c825a7", "abc")
- , ("1165b3406ff0b52a3d24721f785462ca2276c9f454a116c2b2ba20171a7905ea5a026682eb659c4d5f115c363aa3c79b", "abcd")
- , ("4c525cbeac729eaf4b4665815bc5db0c84fe6300068a727cf74e2813521565abc0ec57a37ee4d8be89d097c0d2ad52f0", "abcde")
- , ("c6a4c65b227e7387b9c3e839d44869c4cfca3ef583dea64117859b808c1e3d8ae689e1e314eeef52a6ffe22681aa11f5", "abcdef")
- , ("9f11fc131123f844c1226f429b6a0a6af0525d9f40f056c7fc16cdf1b06bda08e302554417a59fa7dcf6247421959d22", "abcdefg")
- , ("9000cd7cada59d1d2eb82912f7f24e5e69cc5517f68283b005fa27c285b61e05edf1ad1a8a9bded6fd29eb87d75ad806", "abcdefgh")
- , ("ef54915b60cf062b8dd0c29ae3cad69abe6310de63ac081f46ef019c5c90897caefd79b796cfa81139788a260ded52df", "abcdefghi")
- , ("a12070030a02d86b0ddacd0d3a5b598344513d0a051e7355053e556a0055489c1555399b03342845c4adde2dc44ff66c", "abcdefghij")
- , ("86f58ec2d74d1b7f8eb0c2ff0967316699639e8d4eb129de54bdf34c96cdbabe200d052149f2dd787f43571ba74670d4", "Discard medicine more than two years old.")
- , ("ae4a2b639ca9bfa04b1855d5a05fe7f230994f790891c6979103e2605f660c4c1262a48142dcbeb57a1914ba5f7c3fa7", "He who has a shady past knows that nice guys finish last.")
- , ("40ae213df6436eca952aa6841886fcdb82908ef1576a99c8f49bb9dd5023169f7c53035abdda0b54c302f4974e2105e7", "I wouldn't marry him with a ten foot pole.")
- , ("e7cf8b873c9bc950f06259aa54309f349cefa72c00d597aebf903e6519a50011dfe355afff064a10701c705693848df9", "Free! Free!/A trip/to Mars/for 900/empty jars/Burma Shave")
- , ("c3d4f0f4047181c7d39d34703365f7bf70207183caf2c2f6145f04da895ef69124d9cdeb635da636c3a474e61024e29b", "The days of the digital watch are numbered. -Tom Stoppard")
- , ("a097aab567e167d5cf93676ed73252a69f9687cb3179bb2d27c9878119e94bf7b7c4b58dc90582edfaf66e11388ed714", "Nepal premier won't resign.")
- , ("5026ca45c41fc64712eb65065da92f6467541c78f8966d3fe2c8e3fb769a3ec14215f819654b47bd64f7f0eac17184f3", "For every action there is an equal and opposite government program.")
- , ("ac1cc0f5ac8d5f5514a7b738ac322b7fb52a161b449c3672e9b6a6ad1a5e4b26b001cf3bad24c56598676ca17d4b445a", "His money is twice tainted: 'taint yours and 'taint mine.")
- , ("722d10c5de371ec0c8c4b5247ac8a5f1d240d68c73f8da13d8b25f0166d6f309bf9561979a111a0049405771d201941a", "There is no reason for any individual to have a computer in their home. -Ken Olsen, 1977")
- , ("dc2d3ea18bfa10549c63bf2b75b39b5167a80c12aff0e05443168ea87ff149fb0eda5e0bd234eb5d48c7d02ffc5807f1", "It's a tiny change to the code and not completely disgusting. - Bob Manchek")
- , ("1d67c969e2a945ae5346d2139760261504d4ba164c522443afe19ef3e29b152a4c52445489cfc9d7215e5a450e8e1e4e", "size: a.out: bad magic")
- , ("5ff8e075e465646e7b73ef36d812c6e9f7d60fa6ea0e533e5569b4f73cde53cdd2cc787f33540af57cca3fe467d32fe0", "The major problem is with sendmail. -Mark Horton")
- , ("5bd0a997a67c9ae1979a894eb0cde403dde003c9b6f2c03cf21925c42ff4e1176e6df1ca005381612ef18457b9b7ec3b", "Give me a rock, paper and scissors and I will move the world. CCFestoon")
- , ("1eee6da33e7e54fc5be52ae23b94b16ba4d2a947ae4505c6a3edfc7401151ea5205ac01b669b56f27d8ef7f175ed7762", "If the enemy is within range, then so are you.")
- , ("76b06e9dea66bfbb1a96029426dc0dfd7830bd297eb447ff5358d94a87cd00c88b59df2493fef56ecbb5231073892ea9", "It's well we cannot hear the screams/That we create in others' dreams.")
- , ("12acaf21452cff586143e3f5db0bfdf7802c057e1adf2a619031c4e1b0ccc4208cf6cef8fe722bbaa2fb46a30d9135d8", "You remind me of a TV show, but that's all right: I watch it anyway.")
- , ("0fc23d7f4183efd186f0bc4fc5db867e026e2146b06cb3d52f4bdbd57d1740122caa853b41868b197b2ac759db39df88", "C is as portable as Stonehedge!!")
- , ("bc805578a7f85d34a86a32976e1c34fe65cf815186fbef76f46ef99cda10723f971f3f1464d488243f5e29db7488598d", "Even if I could be Shakespeare, I think I should still choose to be Faraday. - A. Huxley")
- , ("b23918399a12ebf4431559eec3813eaf7412e875fd7464f16d581e473330842d2e96c6be49a7ce3f9bb0b8bc0fcbe0fe", "The fugacity of a constituent in a mixture of gases at a given temperature is proportional to its mole fraction. Lewis-Randall Rule")
- , ("1764b700eb1ead52a2fc33cc28975c2180f1b8faa5038d94cffa8d78154aab16e91dd787e7b0303948ebed62561542c8", "How can you write a big system without C++? -Paul Glick")
- ]
-
-testGoSHA512 = testGroup "SHA-512" $
- map (tableTestCase sha512sum)
- [ ("cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e", "")
- , ("1f40fc92da241694750979ee6cf582f2d5d7d28e18335de05abc54d0560e0f5302860c652bf08d560252aa5e74210546f369fbbbce8c12cfc7957b2652fe9a75", "a")
- , ("2d408a0717ec188158278a796c689044361dc6fdde28d6f04973b80896e1823975cdbf12eb63f9e0591328ee235d80e9b5bf1aa6a44f4617ff3caf6400eb172d", "ab")
- , ("ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f", "abc")
- , ("d8022f2060ad6efd297ab73dcc5355c9b214054b0d1776a136a669d26a7d3b14f73aa0d0ebff19ee333368f0164b6419a96da49e3e481753e7e96b716bdccb6f", "abcd")
- , ("878ae65a92e86cac011a570d4c30a7eaec442b85ce8eca0c2952b5e3cc0628c2e79d889ad4d5c7c626986d452dd86374b6ffaa7cd8b67665bef2289a5c70b0a1", "abcde")
- , ("e32ef19623e8ed9d267f657a81944b3d07adbb768518068e88435745564e8d4150a0a703be2a7d88b61e3d390c2bb97e2d4c311fdc69d6b1267f05f59aa920e7", "abcdef")
- , ("d716a4188569b68ab1b6dfac178e570114cdf0ea3a1cc0e31486c3e41241bc6a76424e8c37ab26f096fc85ef9886c8cb634187f4fddff645fb099f1ff54c6b8c", "abcdefg")
- , ("a3a8c81bc97c2560010d7389bc88aac974a104e0e2381220c6e084c4dccd1d2d17d4f86db31c2a851dc80e6681d74733c55dcd03dd96f6062cdda12a291ae6ce", "abcdefgh")
- , ("f22d51d25292ca1d0f68f69aedc7897019308cc9db46efb75a03dd494fc7f126c010e8ade6a00a0c1a5f1b75d81e0ed5a93ce98dc9b833db7839247b1d9c24fe", "abcdefghi")
- , ("ef6b97321f34b1fea2169a7db9e1960b471aa13302a988087357c520be957ca119c3ba68e6b4982c019ec89de3865ccf6a3cda1fe11e59f98d99f1502c8b9745", "abcdefghij")
- , ("2210d99af9c8bdecda1b4beff822136753d8342505ddce37f1314e2cdbb488c6016bdaa9bd2ffa513dd5de2e4b50f031393d8ab61f773b0e0130d7381e0f8a1d", "Discard medicine more than two years old.")
- , ("a687a8985b4d8d0a24f115fe272255c6afaf3909225838546159c1ed685c211a203796ae8ecc4c81a5b6315919b3a64f10713da07e341fcdbb08541bf03066ce", "He who has a shady past knows that nice guys finish last.")
- , ("8ddb0392e818b7d585ab22769a50df660d9f6d559cca3afc5691b8ca91b8451374e42bcdabd64589ed7c91d85f626596228a5c8572677eb98bc6b624befb7af8", "I wouldn't marry him with a ten foot pole.")
- , ("26ed8f6ca7f8d44b6a8a54ae39640fa8ad5c673f70ee9ce074ba4ef0d483eea00bab2f61d8695d6b34df9c6c48ae36246362200ed820448bdc03a720366a87c6", "Free! Free!/A trip/to Mars/for 900/empty jars/Burma Shave")
- , ("e5a14bf044be69615aade89afcf1ab0389d5fc302a884d403579d1386a2400c089b0dbb387ed0f463f9ee342f8244d5a38cfbc0e819da9529fbff78368c9a982", "The days of the digital watch are numbered. -Tom Stoppard")
- , ("420a1faa48919e14651bed45725abe0f7a58e0f099424c4e5a49194946e38b46c1f8034b18ef169b2e31050d1648e0b982386595f7df47da4b6fd18e55333015", "Nepal premier won't resign.")
- , ("d926a863beadb20134db07683535c72007b0e695045876254f341ddcccde132a908c5af57baa6a6a9c63e6649bba0c213dc05fadcf9abccea09f23dcfb637fbe", "For every action there is an equal and opposite government program.")
- , ("9a98dd9bb67d0da7bf83da5313dff4fd60a4bac0094f1b05633690ffa7f6d61de9a1d4f8617937d560833a9aaa9ccafe3fd24db418d0e728833545cadd3ad92d", "His money is twice tainted: 'taint yours and 'taint mine.")
- , ("d7fde2d2351efade52f4211d3746a0780a26eec3df9b2ed575368a8a1c09ec452402293a8ea4eceb5a4f60064ea29b13cdd86918cd7a4faf366160b009804107", "There is no reason for any individual to have a computer in their home. -Ken Olsen, 1977")
- , ("b0f35ffa2697359c33a56f5c0cf715c7aeed96da9905ca2698acadb08fbc9e669bf566b6bd5d61a3e86dc22999bcc9f2224e33d1d4f32a228cf9d0349e2db518", "It's a tiny change to the code and not completely disgusting. - Bob Manchek")
- , ("3d2e5f91778c9e66f7e061293aaa8a8fc742dd3b2e4f483772464b1144189b49273e610e5cccd7a81a19ca1fa70f16b10f1a100a4d8c1372336be8484c64b311", "size: a.out: bad magic")
- , ("b2f68ff58ac015efb1c94c908b0d8c2bf06f491e4de8e6302c49016f7f8a33eac3e959856c7fddbc464de618701338a4b46f76dbfaf9a1e5262b5f40639771c7", "The major problem is with sendmail. -Mark Horton")
- , ("d8c92db5fdf52cf8215e4df3b4909d29203ff4d00e9ad0b64a6a4e04dec5e74f62e7c35c7fb881bd5de95442123df8f57a489b0ae616bd326f84d10021121c57", "Give me a rock, paper and scissors and I will move the world. CCFestoon")
- , ("19a9f8dc0a233e464e8566ad3ca9b91e459a7b8c4780985b015776e1bf239a19bc233d0556343e2b0a9bc220900b4ebf4f8bdf89ff8efeaf79602d6849e6f72e", "If the enemy is within range, then so are you.")
- , ("00b4c41f307bde87301cdc5b5ab1ae9a592e8ecbb2021dd7bc4b34e2ace60741cc362560bec566ba35178595a91932b8d5357e2c9cec92d393b0fa7831852476", "It's well we cannot hear the screams/That we create in others' dreams.")
- , ("91eccc3d5375fd026e4d6787874b1dce201cecd8a27dbded5065728cb2d09c58a3d467bb1faf353bf7ba567e005245d5321b55bc344f7c07b91cb6f26c959be7", "You remind me of a TV show, but that's all right: I watch it anyway.")
- , ("fabbbe22180f1f137cfdc9556d2570e775d1ae02a597ded43a72a40f9b485d500043b7be128fb9fcd982b83159a0d99aa855a9e7cc4240c00dc01a9bdf8218d7", "C is as portable as Stonehedge!!")
- , ("2ecdec235c1fa4fc2a154d8fba1dddb8a72a1ad73838b51d792331d143f8b96a9f6fcb0f34d7caa351fe6d88771c4f105040e0392f06e0621689d33b2f3ba92e", "Even if I could be Shakespeare, I think I should still choose to be Faraday. - A. Huxley")
- , ("7ad681f6f96f82f7abfa7ecc0334e8fa16d3dc1cdc45b60b7af43fe4075d2357c0c1d60e98350f1afb1f2fe7a4d7cd2ad55b88e458e06b73c40b437331f5dab4", "The fugacity of a constituent in a mixture of gases at a given temperature is proportional to its mole fraction. Lewis-Randall Rule")
- , ("833f9248ab4a3b9e5131f745fda1ffd2dd435b30e965957e78291c7ab73605fd1912b0794e5c233ab0a12d205a39778d19b83515d6a47003f19cdee51d98c7e0", "How can you write a big system without C++? -Paul Glick")
- ]
+ , testGoSHA512 ]
+
+sha224TestCase, sha256TestCase, sha384TestCase, sha512TestCase ::
+ Lazy.ByteString -> ByteString -> TestTree
+sha224TestCase = hashTestCase sha224
+sha256TestCase = hashTestCase sha256
+sha384TestCase = hashTestCase sha384
+sha512TestCase = hashTestCase sha512
+
+testGoSHA224 = testGroup "SHA-224"
+ [ sha224TestCase "" "d14a028c2a3a2bc9476102bb288234c415a2b01f828ea62ac5b3e42f"
+ , sha224TestCase "a" "abd37534c7d9a2efb9465de931cd7055ffdb8879563ae98078d6d6d5"
+ , sha224TestCase "ab" "db3cda86d4429a1d39c148989566b38f7bda0156296bd364ba2f878b"
+ , sha224TestCase "abc" "23097d223405d8228642a477bda255b32aadbce4bda0b3f7e36c9da7"
+ , sha224TestCase "abcd" "a76654d8e3550e9a2d67a0eeb6c67b220e5885eddd3fde135806e601"
+ , sha224TestCase "abcde" "bdd03d560993e675516ba5a50638b6531ac2ac3d5847c61916cfced6"
+ , sha224TestCase "abcdef" "7043631cb415556a275a4ebecb802c74ee9f6153908e1792a90b6a98"
+ , sha224TestCase "abcdefg" "d1884e711701ad81abe0c77a3b0ea12e19ba9af64077286c72fc602d"
+ , sha224TestCase "abcdefgh" "17eb7d40f0356f8598e89eafad5f6c759b1f822975d9c9b737c8a517"
+ , sha224TestCase "abcdefghi" "aeb35915346c584db820d2de7af3929ffafef9222a9bcb26516c7334"
+ , sha224TestCase "abcdefghij" "d35e1e5af29ddb0d7e154357df4ad9842afee527c689ee547f753188"
+ , sha224TestCase "Discard medicine more than two years old." "19297f1cef7ddc8a7e947f5c5a341e10f7245045e425db67043988d7"
+ , sha224TestCase "He who has a shady past knows that nice guys finish last." "0f10c2eb436251f777fbbd125e260d36aecf180411726c7c885f599a"
+ , sha224TestCase "I wouldn't marry him with a ten foot pole." "4d1842104919f314cad8a3cd20b3cba7e8ed3e7abed62b57441358f6"
+ , sha224TestCase "Free! Free!/A trip/to Mars/for 900/empty jars/Burma Shave" "a8ba85c6fe0c48fbffc72bbb2f03fcdbc87ae2dc7a56804d1590fb3b"
+ , sha224TestCase "The days of the digital watch are numbered. -Tom Stoppard" "5543fbab26e67e8885b1a852d567d1cb8b9bfe42e0899584c50449a9"
+ , sha224TestCase "Nepal premier won't resign." "65ca107390f5da9efa05d28e57b221657edc7e43a9a18fb15b053ddb"
+ , sha224TestCase "For every action there is an equal and opposite government program." "84953962be366305a9cc9b5cd16ed019edc37ac96c0deb3e12cca116"
+ , sha224TestCase "His money is twice tainted: 'taint yours and 'taint mine." "35a189ce987151dfd00b3577583cc6a74b9869eecf894459cb52038d"
+ , sha224TestCase "There is no reason for any individual to have a computer in their home. -Ken Olsen, 1977" "2fc333713983edfd4ef2c0da6fb6d6415afb94987c91e4069eb063e6"
+ , sha224TestCase "It's a tiny change to the code and not completely disgusting. - Bob Manchek" "cbe32d38d577a1b355960a4bc3c659c2dc4670859a19777a875842c4"
+ , sha224TestCase "size: a.out: bad magic" "a2dc118ce959e027576413a7b440c875cdc8d40df9141d6ef78a57e1"
+ , sha224TestCase "The major problem is with sendmail. -Mark Horton" "d10787e24052bcff26dc484787a54ed819e4e4511c54890ee977bf81"
+ , sha224TestCase "Give me a rock, paper and scissors and I will move the world. CCFestoon" "62efcf16ab8a893acdf2f348aaf06b63039ff1bf55508c830532c9fb"
+ , sha224TestCase "If the enemy is within range, then so are you." "3e9b7e4613c59f58665104c5fa86c272db5d3a2ff30df5bb194a5c99"
+ , sha224TestCase "It's well we cannot hear the screams/That we create in others' dreams." "5999c208b8bdf6d471bb7c359ac5b829e73a8211dff686143a4e7f18"
+ , sha224TestCase "You remind me of a TV show, but that's all right: I watch it anyway." "3b2d67ff54eabc4ef737b14edf87c64280ef582bcdf2a6d56908b405"
+ , sha224TestCase "C is as portable as Stonehedge!!" "d0733595d20e4d3d6b5c565a445814d1bbb2fd08b9a3b8ffb97930c6"
+ , sha224TestCase "Even if I could be Shakespeare, I think I should still choose to be Faraday. - A. Huxley" "43fb8aeed8a833175c9295c1165415f98c866ef08a4922959d673507"
+ , sha224TestCase "The fugacity of a constituent in a mixture of gases at a given temperature is proportional to its mole fraction. Lewis-Randall Rule" "ec18e66e93afc4fb1604bc2baedbfd20b44c43d76e65c0996d7851c6"
+ , sha224TestCase "How can you write a big system without C++? -Paul Glick" "86ed2eaa9c75ba98396e5c9fb2f679ecf0ea2ed1e0ee9ceecb4a9332" ]
+
+testGoSHA256 = testGroup "SHA-256"
+ [ sha256TestCase "" "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ , sha256TestCase "a" "ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb"
+ , sha256TestCase "ab" "fb8e20fc2e4c3f248c60c39bd652f3c1347298bb977b8b4d5903b85055620603"
+ , sha256TestCase "abc" "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"
+ , sha256TestCase "abcd" "88d4266fd4e6338d13b845fcf289579d209c897823b9217da3e161936f031589"
+ , sha256TestCase "abcde" "36bbe50ed96841d10443bcb670d6554f0a34b761be67ec9c4a8ad2c0c44ca42c"
+ , sha256TestCase "abcdef" "bef57ec7f53a6d40beb640a780a639c83bc29ac8a9816f1fc6c5c6dcd93c4721"
+ , sha256TestCase "abcdefg" "7d1a54127b222502f5b79b5fb0803061152a44f92b37e23c6527baf665d4da9a"
+ , sha256TestCase "abcdefgh" "9c56cc51b374c3ba189210d5b6d4bf57790d351c96c47c02190ecf1e430635ab"
+ , sha256TestCase "abcdefghi" "19cc02f26df43cc571bc9ed7b0c4d29224a3ec229529221725ef76d021c8326f"
+ , sha256TestCase "abcdefghij" "72399361da6a7754fec986dca5b7cbaf1c810a28ded4abaf56b2106d06cb78b0"
+ , sha256TestCase "Discard medicine more than two years old." "a144061c271f152da4d151034508fed1c138b8c976339de229c3bb6d4bbb4fce"
+ , sha256TestCase "He who has a shady past knows that nice guys finish last." "6dae5caa713a10ad04b46028bf6dad68837c581616a1589a265a11288d4bb5c4"
+ , sha256TestCase "I wouldn't marry him with a ten foot pole." "ae7a702a9509039ddbf29f0765e70d0001177914b86459284dab8b348c2dce3f"
+ , sha256TestCase "Free! Free!/A trip/to Mars/for 900/empty jars/Burma Shave" "6748450b01c568586715291dfa3ee018da07d36bb7ea6f180c1af6270215c64f"
+ , sha256TestCase "The days of the digital watch are numbered. -Tom Stoppard" "14b82014ad2b11f661b5ae6a99b75105c2ffac278cd071cd6c05832793635774"
+ , sha256TestCase "Nepal premier won't resign." "7102cfd76e2e324889eece5d6c41921b1e142a4ac5a2692be78803097f6a48d8"
+ , sha256TestCase "For every action there is an equal and opposite government program." "23b1018cd81db1d67983c5f7417c44da9deb582459e378d7a068552ea649dc9f"
+ , sha256TestCase "His money is twice tainted: 'taint yours and 'taint mine." "8001f190dfb527261c4cfcab70c98e8097a7a1922129bc4096950e57c7999a5a"
+ , sha256TestCase "There is no reason for any individual to have a computer in their home. -Ken Olsen, 1977" "8c87deb65505c3993eb24b7a150c4155e82eee6960cf0c3a8114ff736d69cad5"
+ , sha256TestCase "It's a tiny change to the code and not completely disgusting. - Bob Manchek" "bfb0a67a19cdec3646498b2e0f751bddc41bba4b7f30081b0b932aad214d16d7"
+ , sha256TestCase "size: a.out: bad magic" "7f9a0b9bf56332e19f5a0ec1ad9c1425a153da1c624868fda44561d6b74daf36"
+ , sha256TestCase "The major problem is with sendmail. -Mark Horton" "b13f81b8aad9e3666879af19886140904f7f429ef083286195982a7588858cfc"
+ , sha256TestCase "Give me a rock, paper and scissors and I will move the world. CCFestoon" "b26c38d61519e894480c70c8374ea35aa0ad05b2ae3d6674eec5f52a69305ed4"
+ , sha256TestCase "If the enemy is within range, then so are you." "049d5e26d4f10222cd841a119e38bd8d2e0d1129728688449575d4ff42b842c1"
+ , sha256TestCase "It's well we cannot hear the screams/That we create in others' dreams." "0e116838e3cc1c1a14cd045397e29b4d087aa11b0853fc69ec82e90330d60949"
+ , sha256TestCase "You remind me of a TV show, but that's all right: I watch it anyway." "4f7d8eb5bcf11de2a56b971021a444aa4eafd6ecd0f307b5109e4e776cd0fe46"
+ , sha256TestCase "C is as portable as Stonehedge!!" "61c0cc4c4bd8406d5120b3fb4ebc31ce87667c162f29468b3c779675a85aebce"
+ , sha256TestCase "Even if I could be Shakespeare, I think I should still choose to be Faraday. - A. Huxley" "1fb2eb3688093c4a3f80cd87a5547e2ce940a4f923243a79a2a1e242220693ac"
+ , sha256TestCase "The fugacity of a constituent in a mixture of gases at a given temperature is proportional to its mole fraction. Lewis-Randall Rule" "395585ce30617b62c80b93e8208ce866d4edc811a177fdb4b82d3911d8696423"
+ , sha256TestCase "How can you write a big system without C++? -Paul Glick" "4f9b189a13d030838269dce846b16a1ce9ce81fe63e65de2f636863336a98fe6" ]
+
+testGoSHA384 = testGroup "SHA-384"
+ [ sha384TestCase "" "38b060a751ac96384cd9327eb1b1e36a21fdb71114be07434c0cc7bf63f6e1da274edebfe76f65fbd51ad2f14898b95b"
+ , sha384TestCase "a" "54a59b9f22b0b80880d8427e548b7c23abd873486e1f035dce9cd697e85175033caa88e6d57bc35efae0b5afd3145f31"
+ , sha384TestCase "ab" "c7be03ba5bcaa384727076db0018e99248e1a6e8bd1b9ef58a9ec9dd4eeebb3f48b836201221175befa74ddc3d35afdd"
+ , sha384TestCase "abc" "cb00753f45a35e8bb5a03d699ac65007272c32ab0eded1631a8b605a43ff5bed8086072ba1e7cc2358baeca134c825a7"
+ , sha384TestCase "abcd" "1165b3406ff0b52a3d24721f785462ca2276c9f454a116c2b2ba20171a7905ea5a026682eb659c4d5f115c363aa3c79b"
+ , sha384TestCase "abcde" "4c525cbeac729eaf4b4665815bc5db0c84fe6300068a727cf74e2813521565abc0ec57a37ee4d8be89d097c0d2ad52f0"
+ , sha384TestCase "abcdef" "c6a4c65b227e7387b9c3e839d44869c4cfca3ef583dea64117859b808c1e3d8ae689e1e314eeef52a6ffe22681aa11f5"
+ , sha384TestCase "abcdefg" "9f11fc131123f844c1226f429b6a0a6af0525d9f40f056c7fc16cdf1b06bda08e302554417a59fa7dcf6247421959d22"
+ , sha384TestCase "abcdefgh" "9000cd7cada59d1d2eb82912f7f24e5e69cc5517f68283b005fa27c285b61e05edf1ad1a8a9bded6fd29eb87d75ad806"
+ , sha384TestCase "abcdefghi" "ef54915b60cf062b8dd0c29ae3cad69abe6310de63ac081f46ef019c5c90897caefd79b796cfa81139788a260ded52df"
+ , sha384TestCase "abcdefghij" "a12070030a02d86b0ddacd0d3a5b598344513d0a051e7355053e556a0055489c1555399b03342845c4adde2dc44ff66c"
+ , sha384TestCase "Discard medicine more than two years old." "86f58ec2d74d1b7f8eb0c2ff0967316699639e8d4eb129de54bdf34c96cdbabe200d052149f2dd787f43571ba74670d4"
+ , sha384TestCase "He who has a shady past knows that nice guys finish last." "ae4a2b639ca9bfa04b1855d5a05fe7f230994f790891c6979103e2605f660c4c1262a48142dcbeb57a1914ba5f7c3fa7"
+ , sha384TestCase "I wouldn't marry him with a ten foot pole." "40ae213df6436eca952aa6841886fcdb82908ef1576a99c8f49bb9dd5023169f7c53035abdda0b54c302f4974e2105e7"
+ , sha384TestCase "Free! Free!/A trip/to Mars/for 900/empty jars/Burma Shave" "e7cf8b873c9bc950f06259aa54309f349cefa72c00d597aebf903e6519a50011dfe355afff064a10701c705693848df9"
+ , sha384TestCase "The days of the digital watch are numbered. -Tom Stoppard" "c3d4f0f4047181c7d39d34703365f7bf70207183caf2c2f6145f04da895ef69124d9cdeb635da636c3a474e61024e29b"
+ , sha384TestCase "Nepal premier won't resign." "a097aab567e167d5cf93676ed73252a69f9687cb3179bb2d27c9878119e94bf7b7c4b58dc90582edfaf66e11388ed714"
+ , sha384TestCase "For every action there is an equal and opposite government program." "5026ca45c41fc64712eb65065da92f6467541c78f8966d3fe2c8e3fb769a3ec14215f819654b47bd64f7f0eac17184f3"
+ , sha384TestCase "His money is twice tainted: 'taint yours and 'taint mine." "ac1cc0f5ac8d5f5514a7b738ac322b7fb52a161b449c3672e9b6a6ad1a5e4b26b001cf3bad24c56598676ca17d4b445a"
+ , sha384TestCase "There is no reason for any individual to have a computer in their home. -Ken Olsen, 1977" "722d10c5de371ec0c8c4b5247ac8a5f1d240d68c73f8da13d8b25f0166d6f309bf9561979a111a0049405771d201941a"
+ , sha384TestCase "It's a tiny change to the code and not completely disgusting. - Bob Manchek" "dc2d3ea18bfa10549c63bf2b75b39b5167a80c12aff0e05443168ea87ff149fb0eda5e0bd234eb5d48c7d02ffc5807f1"
+ , sha384TestCase "size: a.out: bad magic" "1d67c969e2a945ae5346d2139760261504d4ba164c522443afe19ef3e29b152a4c52445489cfc9d7215e5a450e8e1e4e"
+ , sha384TestCase "The major problem is with sendmail. -Mark Horton" "5ff8e075e465646e7b73ef36d812c6e9f7d60fa6ea0e533e5569b4f73cde53cdd2cc787f33540af57cca3fe467d32fe0"
+ , sha384TestCase "Give me a rock, paper and scissors and I will move the world. CCFestoon" "5bd0a997a67c9ae1979a894eb0cde403dde003c9b6f2c03cf21925c42ff4e1176e6df1ca005381612ef18457b9b7ec3b"
+ , sha384TestCase "If the enemy is within range, then so are you." "1eee6da33e7e54fc5be52ae23b94b16ba4d2a947ae4505c6a3edfc7401151ea5205ac01b669b56f27d8ef7f175ed7762"
+ , sha384TestCase "It's well we cannot hear the screams/That we create in others' dreams." "76b06e9dea66bfbb1a96029426dc0dfd7830bd297eb447ff5358d94a87cd00c88b59df2493fef56ecbb5231073892ea9"
+ , sha384TestCase "You remind me of a TV show, but that's all right: I watch it anyway." "12acaf21452cff586143e3f5db0bfdf7802c057e1adf2a619031c4e1b0ccc4208cf6cef8fe722bbaa2fb46a30d9135d8"
+ , sha384TestCase "C is as portable as Stonehedge!!" "0fc23d7f4183efd186f0bc4fc5db867e026e2146b06cb3d52f4bdbd57d1740122caa853b41868b197b2ac759db39df88"
+ , sha384TestCase "Even if I could be Shakespeare, I think I should still choose to be Faraday. - A. Huxley" "bc805578a7f85d34a86a32976e1c34fe65cf815186fbef76f46ef99cda10723f971f3f1464d488243f5e29db7488598d"
+ , sha384TestCase "The fugacity of a constituent in a mixture of gases at a given temperature is proportional to its mole fraction. Lewis-Randall Rule" "b23918399a12ebf4431559eec3813eaf7412e875fd7464f16d581e473330842d2e96c6be49a7ce3f9bb0b8bc0fcbe0fe"
+ , sha384TestCase "How can you write a big system without C++? -Paul Glick" "1764b700eb1ead52a2fc33cc28975c2180f1b8faa5038d94cffa8d78154aab16e91dd787e7b0303948ebed62561542c8" ]
+
+testGoSHA512 = testGroup "SHA-512"
+ [ sha512TestCase "" "cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e"
+ , sha512TestCase "a" "1f40fc92da241694750979ee6cf582f2d5d7d28e18335de05abc54d0560e0f5302860c652bf08d560252aa5e74210546f369fbbbce8c12cfc7957b2652fe9a75"
+ , sha512TestCase "ab" "2d408a0717ec188158278a796c689044361dc6fdde28d6f04973b80896e1823975cdbf12eb63f9e0591328ee235d80e9b5bf1aa6a44f4617ff3caf6400eb172d"
+ , sha512TestCase "abc" "ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f"
+ , sha512TestCase "abcd" "d8022f2060ad6efd297ab73dcc5355c9b214054b0d1776a136a669d26a7d3b14f73aa0d0ebff19ee333368f0164b6419a96da49e3e481753e7e96b716bdccb6f"
+ , sha512TestCase "abcde" "878ae65a92e86cac011a570d4c30a7eaec442b85ce8eca0c2952b5e3cc0628c2e79d889ad4d5c7c626986d452dd86374b6ffaa7cd8b67665bef2289a5c70b0a1"
+ , sha512TestCase "abcdef" "e32ef19623e8ed9d267f657a81944b3d07adbb768518068e88435745564e8d4150a0a703be2a7d88b61e3d390c2bb97e2d4c311fdc69d6b1267f05f59aa920e7"
+ , sha512TestCase "abcdefg" "d716a4188569b68ab1b6dfac178e570114cdf0ea3a1cc0e31486c3e41241bc6a76424e8c37ab26f096fc85ef9886c8cb634187f4fddff645fb099f1ff54c6b8c"
+ , sha512TestCase "abcdefgh" "a3a8c81bc97c2560010d7389bc88aac974a104e0e2381220c6e084c4dccd1d2d17d4f86db31c2a851dc80e6681d74733c55dcd03dd96f6062cdda12a291ae6ce"
+ , sha512TestCase "abcdefghi" "f22d51d25292ca1d0f68f69aedc7897019308cc9db46efb75a03dd494fc7f126c010e8ade6a00a0c1a5f1b75d81e0ed5a93ce98dc9b833db7839247b1d9c24fe"
+ , sha512TestCase "abcdefghij" "ef6b97321f34b1fea2169a7db9e1960b471aa13302a988087357c520be957ca119c3ba68e6b4982c019ec89de3865ccf6a3cda1fe11e59f98d99f1502c8b9745"
+ , sha512TestCase "Discard medicine more than two years old." "2210d99af9c8bdecda1b4beff822136753d8342505ddce37f1314e2cdbb488c6016bdaa9bd2ffa513dd5de2e4b50f031393d8ab61f773b0e0130d7381e0f8a1d"
+ , sha512TestCase "He who has a shady past knows that nice guys finish last." "a687a8985b4d8d0a24f115fe272255c6afaf3909225838546159c1ed685c211a203796ae8ecc4c81a5b6315919b3a64f10713da07e341fcdbb08541bf03066ce"
+ , sha512TestCase "I wouldn't marry him with a ten foot pole." "8ddb0392e818b7d585ab22769a50df660d9f6d559cca3afc5691b8ca91b8451374e42bcdabd64589ed7c91d85f626596228a5c8572677eb98bc6b624befb7af8"
+ , sha512TestCase "Free! Free!/A trip/to Mars/for 900/empty jars/Burma Shave" "26ed8f6ca7f8d44b6a8a54ae39640fa8ad5c673f70ee9ce074ba4ef0d483eea00bab2f61d8695d6b34df9c6c48ae36246362200ed820448bdc03a720366a87c6"
+ , sha512TestCase "The days of the digital watch are numbered. -Tom Stoppard" "e5a14bf044be69615aade89afcf1ab0389d5fc302a884d403579d1386a2400c089b0dbb387ed0f463f9ee342f8244d5a38cfbc0e819da9529fbff78368c9a982"
+ , sha512TestCase "Nepal premier won't resign." "420a1faa48919e14651bed45725abe0f7a58e0f099424c4e5a49194946e38b46c1f8034b18ef169b2e31050d1648e0b982386595f7df47da4b6fd18e55333015"
+ , sha512TestCase "For every action there is an equal and opposite government program." "d926a863beadb20134db07683535c72007b0e695045876254f341ddcccde132a908c5af57baa6a6a9c63e6649bba0c213dc05fadcf9abccea09f23dcfb637fbe"
+ , sha512TestCase "His money is twice tainted: 'taint yours and 'taint mine." "9a98dd9bb67d0da7bf83da5313dff4fd60a4bac0094f1b05633690ffa7f6d61de9a1d4f8617937d560833a9aaa9ccafe3fd24db418d0e728833545cadd3ad92d"
+ , sha512TestCase "There is no reason for any individual to have a computer in their home. -Ken Olsen, 1977" "d7fde2d2351efade52f4211d3746a0780a26eec3df9b2ed575368a8a1c09ec452402293a8ea4eceb5a4f60064ea29b13cdd86918cd7a4faf366160b009804107"
+ , sha512TestCase "It's a tiny change to the code and not completely disgusting. - Bob Manchek" "b0f35ffa2697359c33a56f5c0cf715c7aeed96da9905ca2698acadb08fbc9e669bf566b6bd5d61a3e86dc22999bcc9f2224e33d1d4f32a228cf9d0349e2db518"
+ , sha512TestCase "size: a.out: bad magic" "3d2e5f91778c9e66f7e061293aaa8a8fc742dd3b2e4f483772464b1144189b49273e610e5cccd7a81a19ca1fa70f16b10f1a100a4d8c1372336be8484c64b311"
+ , sha512TestCase "The major problem is with sendmail. -Mark Horton" "b2f68ff58ac015efb1c94c908b0d8c2bf06f491e4de8e6302c49016f7f8a33eac3e959856c7fddbc464de618701338a4b46f76dbfaf9a1e5262b5f40639771c7"
+ , sha512TestCase "Give me a rock, paper and scissors and I will move the world. CCFestoon" "d8c92db5fdf52cf8215e4df3b4909d29203ff4d00e9ad0b64a6a4e04dec5e74f62e7c35c7fb881bd5de95442123df8f57a489b0ae616bd326f84d10021121c57"
+ , sha512TestCase "If the enemy is within range, then so are you." "19a9f8dc0a233e464e8566ad3ca9b91e459a7b8c4780985b015776e1bf239a19bc233d0556343e2b0a9bc220900b4ebf4f8bdf89ff8efeaf79602d6849e6f72e"
+ , sha512TestCase "It's well we cannot hear the screams/That we create in others' dreams." "00b4c41f307bde87301cdc5b5ab1ae9a592e8ecbb2021dd7bc4b34e2ace60741cc362560bec566ba35178595a91932b8d5357e2c9cec92d393b0fa7831852476"
+ , sha512TestCase "You remind me of a TV show, but that's all right: I watch it anyway." "91eccc3d5375fd026e4d6787874b1dce201cecd8a27dbded5065728cb2d09c58a3d467bb1faf353bf7ba567e005245d5321b55bc344f7c07b91cb6f26c959be7"
+ , sha512TestCase "C is as portable as Stonehedge!!" "fabbbe22180f1f137cfdc9556d2570e775d1ae02a597ded43a72a40f9b485d500043b7be128fb9fcd982b83159a0d99aa855a9e7cc4240c00dc01a9bdf8218d7"
+ , sha512TestCase "Even if I could be Shakespeare, I think I should still choose to be Faraday. - A. Huxley" "2ecdec235c1fa4fc2a154d8fba1dddb8a72a1ad73838b51d792331d143f8b96a9f6fcb0f34d7caa351fe6d88771c4f105040e0392f06e0621689d33b2f3ba92e"
+ , sha512TestCase "The fugacity of a constituent in a mixture of gases at a given temperature is proportional to its mole fraction. Lewis-Randall Rule" "7ad681f6f96f82f7abfa7ecc0334e8fa16d3dc1cdc45b60b7af43fe4075d2357c0c1d60e98350f1afb1f2fe7a4d7cd2ad55b88e458e06b73c40b437331f5dab4"
+ , sha512TestCase "How can you write a big system without C++? -Paul Glick" "833f9248ab4a3b9e5131f745fda1ffd2dd435b30e965957e78291c7ab73605fd1912b0794e5c233ab0a12d205a39778d19b83515d6a47003f19cdee51d98c7e0" ]
-- | Tests our SHA-2 implementations against coreutils'.
testCoreutilsConformance = testGroup "conformance with coreutils"
- [ testProperty "SHA-224" $ testAgainstCoreutils sha224sum "sha224sum"
- , testProperty "SHA-256" $ testAgainstCoreutils sha256sum "sha256sum"
- , testProperty "SHA-384" $ testAgainstCoreutils sha384sum "sha384sum"
- , testProperty "SHA-512" $ testAgainstCoreutils sha512sum "sha512sum"
- ]
+ [ testProperty "SHA-224" $ testAgainstCoreutils sha224 "sha224sum"
+ , testProperty "SHA-256" $ testAgainstCoreutils sha256 "sha256sum"
+ , testProperty "SHA-384" $ testAgainstCoreutils sha384 "sha384sum"
+ , testProperty "SHA-512" $ testAgainstCoreutils sha512 "sha512sum" ]
-- | Tests our SHA-2 implementations against openssl(1)'s.
testOpenSSLConformance = testGroup "conformance with OpenSSL"
- [ testProperty "SHA-224" $ testAgainstOpenSSL sha224sum "sha224"
- , testProperty "SHA-256" $ testAgainstOpenSSL sha256sum "sha256"
- , testProperty "SHA-384" $ testAgainstOpenSSL sha384sum "sha384"
- , testProperty "SHA-512" $ testAgainstOpenSSL sha512sum "sha512"
- ]
-
--- Convenience functions.
-sha224sum = show . hash sha224 . ByteString.Lazy.fromStrict
-sha256sum = show . hash sha256 . ByteString.Lazy.fromStrict
-sha384sum = show . hash sha384 . ByteString.Lazy.fromStrict
-sha512sum = show . hash sha512 . ByteString.Lazy.fromStrict
+ [ testProperty "SHA-224" $ testAgainstOpenSSL sha224 "sha224"
+ , testProperty "SHA-256" $ testAgainstOpenSSL sha256 "sha256"
+ , testProperty "SHA-384" $ testAgainstOpenSSL sha384 "sha384"
+ , testProperty "SHA-512" $ testAgainstOpenSSL sha512 "sha512" ]
diff --git a/tests/Data/DigestTests.hs b/tests/Data/DigestTests.hs
index 5bcf3b1..d56c3d8 100644
--- a/tests/Data/DigestTests.hs
+++ b/tests/Data/DigestTests.hs
@@ -24,5 +24,4 @@ tests :: TestTree
tests = testGroup "Data.Digest"
[ Data.Digest.MD5Tests.tests
, Data.Digest.SHA1Tests.tests
- , Data.Digest.SHA2Tests.tests
- ]
+ , Data.Digest.SHA2Tests.tests ]
diff --git a/tests/Data/HMACTests.hs b/tests/Data/HMACTests.hs
index 55e795e..10856f5 100644
--- a/tests/Data/HMACTests.hs
+++ b/tests/Data/HMACTests.hs
@@ -16,178 +16,119 @@
module Data.HMACTests (tests) where
+import Data.ByteString (ByteString)
import qualified Data.ByteString as ByteString
+import qualified Data.ByteString.Lazy as Lazy (ByteString)
import qualified Data.ByteString.Lazy as ByteString.Lazy
-import qualified Data.ByteString.Lazy.Char8 as ByteString.Lazy.Char8
import Test.Tasty (TestTree, testGroup)
import Test.Tasty.HUnit (testCase)
import BTLS.Assertions (isRightAndHolds)
-import Data.Digest (md5, sha1, sha224, sha256, sha384, sha512)
-import Data.HMAC (Error, SecretKey(SecretKey), hmac)
-
-type LazyByteString = ByteString.Lazy.ByteString
+import BTLS.TestUtilities (abbreviate, hex)
+import Data.Digest (Algorithm, md5, sha1, sha224, sha256, sha384, sha512)
+import Data.HMAC (HMAC(HMAC), SecretKey(SecretKey), hmac)
tests :: TestTree
tests = testGroup "Data.HMAC"
[ testRFC2202
- , testFips198
- , testRFC4231
- ]
+ , testFIPS198
+ , testRFC4231 ]
+
+hmacTestCase :: Algorithm -> ByteString -> Lazy.ByteString -> ByteString -> TestTree
+hmacTestCase algo key input output = hmacTestCase' (abbreviate input) algo key input output
-tableTestCase ::
- (SecretKey -> LazyByteString -> Either [Error] String)
- -> (SecretKey, LazyByteString, String)
- -> TestTree
-tableTestCase f (key, input, output) =
- testCase (abbreviate input) (f key input `isRightAndHolds` output)
+hmacTestCase' :: String -> Algorithm -> ByteString -> Lazy.ByteString -> ByteString -> TestTree
+hmacTestCase' description algo key input output =
+ testCase description $ hmac algo (SecretKey key) input `isRightAndHolds` hexHMAC output
-abbreviate :: LazyByteString -> String
-abbreviate input =
- let (x, y) = splitAt 12 (show input) in
- x ++ (if null y then "" else "...") ++ "\""
+md5TestCase, sha1TestCase :: ByteString -> Lazy.ByteString -> ByteString -> TestTree
+md5TestCase = hmacTestCase md5
+sha1TestCase = hmacTestCase sha1
-- | Tests from RFC 2202.
-testRFC2202 = testGroup "RFC 2202" [testMd5, testSha1]
- where
- testMd5 = testGroup "MD5" $
- map (tableTestCase hmacMd5)
- [ ( SecretKey (ByteString.replicate 16 0x0b)
- , "Hi There"
- , "9294727a3638bb1c13f48ef8158bfc9d")
- , ( SecretKey "Jefe"
- , "what do ya want for nothing?"
- , "750c783e6ab0b503eaa86e310a5db738")
- , ( SecretKey (ByteString.replicate 16 0xaa)
- , ByteString.Lazy.replicate 50 0xdd
- , "56be34521d144c88dbb8c733f0e8b3f6")
- , ( SecretKey (ByteString.pack [0x01 .. 0x19])
- , ByteString.Lazy.replicate 50 0xcd
- , "697eaf0aca3a3aea3a75164746ffaa79")
- , ( SecretKey (ByteString.replicate 16 0x0c)
- , "Test With Truncation"
- , "56461ef2342edc00f9bab995690efd4c")
- , ( SecretKey (ByteString.replicate 80 0xaa)
- , "Test Using Larger Than Block-Size Key - Hash Key First"
- , "6b1ab7fe4bd7bf8f0b62e6ce61b9d0cd")
- , ( SecretKey (ByteString.replicate 80 0xaa)
- , "Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data"
- , "6f630fad67cda0ee1fb1f562db3aa53e")
- ]
- testSha1 = testGroup "SHA-1" $
- map (tableTestCase hmacSha1)
- [ ( SecretKey (ByteString.replicate 20 0x0b)
- , "Hi There"
- , "b617318655057264e28bc0b6fb378c8ef146be00")
- , ( SecretKey "Jefe"
- , "what do ya want for nothing?"
- , "effcdf6ae5eb2fa2d27416d5f184df9c259a7c79")
- , ( SecretKey (ByteString.replicate 20 0xaa)
- , ByteString.Lazy.replicate 50 0xdd
- , "125d7342b9ac11cd91a39af48aa17b4f63f175d3")
- , ( SecretKey (ByteString.pack [0x01 .. 0x19])
- , ByteString.Lazy.replicate 50 0xcd
- , "4c9007f4026250c6bc8414f9bf50c86c2d7235da")
- , ( SecretKey (ByteString.replicate 20 0x0c)
- , "Test With Truncation"
- , "4c1a03424b55e07fe7f27be1d58bb9324a9a5a04")
- , ( SecretKey (ByteString.replicate 80 0xaa)
- , "Test Using Larger Than Block-Size Key - Hash Key First"
- , "aa4ae5e15272d00e95705637ce8a3b55ed402112")
- , ( SecretKey (ByteString.replicate 80 0xaa)
- , "Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data"
- , "e8e99d0f45237d786d6bbaa7965c7808bbff1a91")
- ]
+testRFC2202 = testGroup "RFC 2202" [testMD5, testSHA1]
+ where testMD5 = testGroup "MD5"
+ [ md5TestCase (ByteString.replicate 16 0x0b) "Hi There" "9294727a3638bb1c13f48ef8158bfc9d"
+ , md5TestCase "Jefe" "what do ya want for nothing?" "750c783e6ab0b503eaa86e310a5db738"
+ , md5TestCase (ByteString.replicate 16 0xaa) (ByteString.Lazy.replicate 50 0xdd) "56be34521d144c88dbb8c733f0e8b3f6"
+ , md5TestCase (ByteString.pack [0x01 .. 0x19]) (ByteString.Lazy.replicate 50 0xcd) "697eaf0aca3a3aea3a75164746ffaa79"
+ , md5TestCase (ByteString.replicate 16 0x0c) ("Test With Truncation") "56461ef2342edc00f9bab995690efd4c"
+ , md5TestCase (ByteString.replicate 80 0xaa) ("Test Using Larger Than Block-Size Key - Hash Key First") "6b1ab7fe4bd7bf8f0b62e6ce61b9d0cd"
+ , md5TestCase (ByteString.replicate 80 0xaa) ("Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data") "6f630fad67cda0ee1fb1f562db3aa53e" ]
+ testSHA1 = testGroup "SHA-1"
+ [ sha1TestCase (ByteString.replicate 20 0x0b) ("Hi There") "b617318655057264e28bc0b6fb378c8ef146be00"
+ , sha1TestCase "Jefe" "what do ya want for nothing?" "effcdf6ae5eb2fa2d27416d5f184df9c259a7c79"
+ , sha1TestCase (ByteString.replicate 20 0xaa) (ByteString.Lazy.replicate 50 0xdd) "125d7342b9ac11cd91a39af48aa17b4f63f175d3"
+ , sha1TestCase (ByteString.pack [0x01 .. 0x19]) (ByteString.Lazy.replicate 50 0xcd) "4c9007f4026250c6bc8414f9bf50c86c2d7235da"
+ , sha1TestCase (ByteString.replicate 20 0x0c) ("Test With Truncation") "4c1a03424b55e07fe7f27be1d58bb9324a9a5a04"
+ , sha1TestCase (ByteString.replicate 80 0xaa) ("Test Using Larger Than Block-Size Key - Hash Key First") "aa4ae5e15272d00e95705637ce8a3b55ed402112"
+ , sha1TestCase (ByteString.replicate 80 0xaa) ("Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data") "e8e99d0f45237d786d6bbaa7965c7808bbff1a91" ]
-- | Tests from FIPS 198.
-testFips198 = testGroup "FIPS 198" $
- map (tableTestCase hmacSha1)
- [ ( SecretKey (ByteString.pack [0 .. 0x3f])
- , "Sample #1"
- , "4f4ca3d5d68ba7cc0a1208c9c61e9c5da0403c0a")
- , ( SecretKey (ByteString.pack [0x30 .. 0x43])
- , "Sample #2"
- , "0922d3405faa3d194f82a45830737d5cc6c75d24")
- , ( SecretKey (ByteString.pack [0x50 .. 0xb3])
- , "Sample #3"
- , "bcf41eab8bb2d802f3d05caf7cb092ecf8d1a3aa")
- ]
- ++ [truncatedFips198Test]
-
-truncatedFips198Test =
- let input = "Sample #4" :: String
- key = SecretKey (ByteString.pack [0x70 .. 0xa0])
- output = "9ea886efe268dbecce420c75" :: String
- in testCase
- (show input)
- ((take 24 <$> hmacSha1 key (ByteString.Lazy.Char8.pack input)) `isRightAndHolds` output)
-
-rfc4231TestCase ::
- (SecretKey, LazyByteString, String, String, String, String) -> TestTree
-rfc4231TestCase (key, input, sha224Output, sha256Output, sha384Output, sha512Output) =
- testGroup (abbreviate input)
- [ testCase "SHA-224" (hmacSha224 key input `isRightAndHolds` sha224Output)
- , testCase "SHA-256" (hmacSha256 key input `isRightAndHolds` sha256Output)
- , testCase "SHA-384" (hmacSha384 key input `isRightAndHolds` sha384Output)
- , testCase "SHA-512" (hmacSha512 key input `isRightAndHolds` sha512Output)
- ]
+testFIPS198 = testGroup "FIPS 198 (SHA-1)" $
+ [ sha1TestCase (ByteString.pack [0 .. 0x3f]) "Sample #1" "4f4ca3d5d68ba7cc0a1208c9c61e9c5da0403c0a"
+ , sha1TestCase (ByteString.pack [0x30 .. 0x43]) "Sample #2" "0922d3405faa3d194f82a45830737d5cc6c75d24"
+ , sha1TestCase (ByteString.pack [0x50 .. 0xb3]) "Sample #3" "bcf41eab8bb2d802f3d05caf7cb092ecf8d1a3aa"
+ ] ++ [truncatedFIPS198Test]
+ where truncatedFIPS198Test =
+ let input = "Sample #4" in
+ testCase (abbreviate input) $
+ (truncateHMAC 24 <$> hmac sha1 (SecretKey $ ByteString.pack [0x70 .. 0xa0]) input)
+ `isRightAndHolds` hexHMAC "9ea886efe268dbecce420c75"
-- | Tests from RFC 4231.
testRFC4231 = testGroup "RFC 4231" $
- map rfc4231TestCase
- [ ( SecretKey (ByteString.replicate 20 0x0b)
- , "Hi There"
- , "896fb1128abbdf196832107cd49df33f47b4b1169912ba4f53684b22"
- , "b0344c61d8db38535ca8afceaf0bf12b881dc200c9833da726e9376c2e32cff7"
- , "afd03944d84895626b0825f4ab46907f15f9dadbe4101ec682aa034c7cebc59cfaea9ea9076ede7f4af152e8b2fa9cb6"
- , "87aa7cdea5ef619d4ff0b4241a1d6cb02379f4e2ce4ec2787ad0b30545e17cdedaa833b7d6b8a702038b274eaea3f4e4be9d914eeb61f1702e696c203a126854")
- , ( SecretKey "Jefe"
- , "what do ya want for nothing?"
- , "a30e01098bc6dbbf45690f3a7e9e6d0f8bbea2a39e6148008fd05e44"
- , "5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843"
- , "af45d2e376484031617f78d2b58a6b1b9c7ef464f5a01b47e42ec3736322445e8e2240ca5e69e2c78b3239ecfab21649"
- , "164b7a7bfcf819e2e395fbe73b56e0a387bd64222e831fd610270cd7ea2505549758bf75c05a994a6d034f65f8f0e6fdcaeab1a34d4a6b4b636e070a38bce737")
- , ( SecretKey (ByteString.replicate 20 0xaa)
- , ByteString.Lazy.replicate 50 0xdd
- , "7fb3cb3588c6c1f6ffa9694d7d6ad2649365b0c1f65d69d1ec8333ea"
- , "773ea91e36800e46854db8ebd09181a72959098b3ef8c122d9635514ced565fe"
- , "88062608d3e6ad8a0aa2ace014c8a86f0aa635d947ac9febe83ef4e55966144b2a5ab39dc13814b94e3ab6e101a34f27"
- , "fa73b0089d56a284efb0f0756c890be9b1b5dbdd8ee81a3655f83e33b2279d39bf3e848279a722c806b485a47e67c807b946a337bee8942674278859e13292fb")
- , ( SecretKey (ByteString.pack [0x01 .. 0x19])
- , ByteString.Lazy.replicate 50 0xcd
- , "6c11506874013cac6a2abc1bb382627cec6a90d86efc012de7afec5a"
- , "82558a389a443c0ea4cc819899f2083a85f0faa3e578f8077a2e3ff46729665b"
- , "3e8a69b7783c25851933ab6290af6ca77a9981480850009cc5577c6e1f573b4e6801dd23c4a7d679ccf8a386c674cffb"
- , "b0ba465637458c6990e5a8c5f61d4af7e576d97ff94b872de76f8050361ee3dba91ca5c11aa25eb4d679275cc5788063a5f19741120c4f2de2adebeb10a298dd")
- , ( SecretKey (ByteString.replicate 131 0xaa)
- , "Test Using Larger Than Block-Size Key - Hash Key First"
- , "95e9a0db962095adaebe9b2d6f0dbce2d499f112f2d2b7273fa6870e"
- , "60e431591ee0b67f0d8a26aacbf5b77f8e0bc6213728c5140546040f0ee37f54"
- , "4ece084485813e9088d2c63a041bc5b44f9ef1012a2b588f3cd11f05033ac4c60c2ef6ab4030fe8296248df163f44952"
- , "80b24263c7c1a3ebb71493c1dd7be8b49b46d1f41b4aeec1121b013783f8f3526b56d037e05f2598bd0fd2215d6a1e5295e64f73f63f0aec8b915a985d786598")
- , ( SecretKey (ByteString.replicate 131 0xaa)
- , "This is a test using a larger than block-size key and a larger than block-size data. The key needs to be hashed before being used by the HMAC algorithm."
- , "3a854166ac5d9f023f54d517d0b39dbd946770db9c2b95c9f6f565d1"
- , "9b09ffa71b942fcb27635fbcd5b0e944bfdc63644f0713938a7f51535c3a35e2"
- , "6617178e941f020d351e2f254e8fd32c602420feb0b8fb9adccebb82461e99c5a678cc31e799176d3860e6110c46523e"
- , "e37b6a775dc87dbaa4dfa9f96e5e3ffddebd71f8867289865df5a32d20cdc944b6022cac3c4982b10d5eeb55c3e4de15134676fb6de0446065c97440fa8c6a58")
- ]
- ++ [truncatedRFC4231Test]
+ let rfc4231TestCase key input sha224Output sha256Output sha384Output sha512Output =
+ testGroup (abbreviate input)
+ [ hmacTestCase' "SHA-224" sha224 key input sha224Output
+ , hmacTestCase' "SHA-256" sha256 key input sha256Output
+ , hmacTestCase' "SHA-384" sha384 key input sha384Output
+ , hmacTestCase' "SHA-512" sha512 key input sha512Output ] in
+ [ rfc4231TestCase (ByteString.replicate 20 0x0b) "Hi There"
+ "896fb1128abbdf196832107cd49df33f47b4b1169912ba4f53684b22"
+ "b0344c61d8db38535ca8afceaf0bf12b881dc200c9833da726e9376c2e32cff7"
+ "afd03944d84895626b0825f4ab46907f15f9dadbe4101ec682aa034c7cebc59cfaea9ea9076ede7f4af152e8b2fa9cb6"
+ "87aa7cdea5ef619d4ff0b4241a1d6cb02379f4e2ce4ec2787ad0b30545e17cdedaa833b7d6b8a702038b274eaea3f4e4be9d914eeb61f1702e696c203a126854"
+ , rfc4231TestCase ("Jefe") "what do ya want for nothing?"
+ "a30e01098bc6dbbf45690f3a7e9e6d0f8bbea2a39e6148008fd05e44"
+ "5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843"
+ "af45d2e376484031617f78d2b58a6b1b9c7ef464f5a01b47e42ec3736322445e8e2240ca5e69e2c78b3239ecfab21649"
+ "164b7a7bfcf819e2e395fbe73b56e0a387bd64222e831fd610270cd7ea2505549758bf75c05a994a6d034f65f8f0e6fdcaeab1a34d4a6b4b636e070a38bce737"
+ , rfc4231TestCase (ByteString.replicate 20 0xaa) (ByteString.Lazy.replicate 50 0xdd)
+ "7fb3cb3588c6c1f6ffa9694d7d6ad2649365b0c1f65d69d1ec8333ea"
+ "773ea91e36800e46854db8ebd09181a72959098b3ef8c122d9635514ced565fe"
+ "88062608d3e6ad8a0aa2ace014c8a86f0aa635d947ac9febe83ef4e55966144b2a5ab39dc13814b94e3ab6e101a34f27"
+ "fa73b0089d56a284efb0f0756c890be9b1b5dbdd8ee81a3655f83e33b2279d39bf3e848279a722c806b485a47e67c807b946a337bee8942674278859e13292fb"
+ , rfc4231TestCase (ByteString.pack [0x01 .. 0x19]) (ByteString.Lazy.replicate 50 0xcd)
+ "6c11506874013cac6a2abc1bb382627cec6a90d86efc012de7afec5a"
+ "82558a389a443c0ea4cc819899f2083a85f0faa3e578f8077a2e3ff46729665b"
+ "3e8a69b7783c25851933ab6290af6ca77a9981480850009cc5577c6e1f573b4e6801dd23c4a7d679ccf8a386c674cffb"
+ "b0ba465637458c6990e5a8c5f61d4af7e576d97ff94b872de76f8050361ee3dba91ca5c11aa25eb4d679275cc5788063a5f19741120c4f2de2adebeb10a298dd"
+ , rfc4231TestCase (ByteString.replicate 131 0xaa) "Test Using Larger Than Block-Size Key - Hash Key First"
+ "95e9a0db962095adaebe9b2d6f0dbce2d499f112f2d2b7273fa6870e"
+ "60e431591ee0b67f0d8a26aacbf5b77f8e0bc6213728c5140546040f0ee37f54"
+ "4ece084485813e9088d2c63a041bc5b44f9ef1012a2b588f3cd11f05033ac4c60c2ef6ab4030fe8296248df163f44952"
+ "80b24263c7c1a3ebb71493c1dd7be8b49b46d1f41b4aeec1121b013783f8f3526b56d037e05f2598bd0fd2215d6a1e5295e64f73f63f0aec8b915a985d786598"
+ , rfc4231TestCase (ByteString.replicate 131 0xaa) "This is a test using a larger than block-size key and a larger than block-size data. The key needs to be hashed before being used by the HMAC algorithm."
+ "3a854166ac5d9f023f54d517d0b39dbd946770db9c2b95c9f6f565d1"
+ "9b09ffa71b942fcb27635fbcd5b0e944bfdc63644f0713938a7f51535c3a35e2"
+ "6617178e941f020d351e2f254e8fd32c602420feb0b8fb9adccebb82461e99c5a678cc31e799176d3860e6110c46523e"
+ "e37b6a775dc87dbaa4dfa9f96e5e3ffddebd71f8867289865df5a32d20cdc944b6022cac3c4982b10d5eeb55c3e4de15134676fb6de0446065c97440fa8c6a58"
+ ] ++ [truncatedRFC4231Test]
+ where truncatedRFC4231Test =
+ let key = SecretKey $ ByteString.replicate 20 0x0c
+ input = "Test With Truncation"
+ truncatedTestCase description algo output =
+ testCase description $
+ (truncateHMAC 32 <$> hmac algo key input) `isRightAndHolds` hexHMAC output in
+ testGroup (abbreviate input)
+ [ truncatedTestCase "SHA-224" sha224 "0e2aea68a90c8d37c988bcdb9fca6fa8"
+ , truncatedTestCase "SHA-256" sha256 "a3b6167473100ee06e0c796c2955552b"
+ , truncatedTestCase "SHA-384" sha384 "3abf34c3503b2a23a46efc619baef897"
+ , truncatedTestCase "SHA-512" sha512 "415fad6271580a531d4179bc891d87a6" ]
-truncatedRFC4231Test =
- let key = SecretKey (ByteString.replicate 20 0x0c)
- input = "Test With Truncation" :: LazyByteString
- t f = take 32 <$> f key input :: Either [Error] String
- in testGroup (abbreviate input)
- [ testCase "SHA-224" (t hmacSha224 `isRightAndHolds` "0e2aea68a90c8d37c988bcdb9fca6fa8")
- , testCase "SHA-256" (t hmacSha256 `isRightAndHolds` "a3b6167473100ee06e0c796c2955552b")
- , testCase "SHA-384" (t hmacSha384 `isRightAndHolds` "3abf34c3503b2a23a46efc619baef897")
- , testCase "SHA-512" (t hmacSha512 `isRightAndHolds` "415fad6271580a531d4179bc891d87a6")
- ]
+hexHMAC :: ByteString -> HMAC
+hexHMAC = HMAC . hex
-hmacMd5 key bytes = show <$> hmac md5 key bytes
-hmacSha1 key bytes = show <$> hmac sha1 key bytes
-hmacSha224 key bytes = show <$> hmac sha224 key bytes
-hmacSha256 key bytes = show <$> hmac sha256 key bytes
-hmacSha384 key bytes = show <$> hmac sha384 key bytes
-hmacSha512 key bytes = show <$> hmac sha512 key bytes
+truncateHMAC :: Int -> HMAC -> HMAC
+truncateHMAC n (HMAC m) = HMAC (ByteString.take n m)