Benchmark for hash algorithms

A first step in the direction of #144.
This commit is contained in:
Olivier Chéron 2017-03-29 11:36:41 +02:00
parent 762f2d9032
commit d65fc88477

View File

@ -1,5 +1,6 @@
{-# LANGUAGE PackageImports #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ExistentialQuantification #-}
module Main where
import Criterion.Main
@ -14,15 +15,69 @@ import Crypto.Hash
import qualified Crypto.KDF.PBKDF2 as PBKDF2
import qualified Crypto.PubKey.ECC.Types as ECC
import qualified Crypto.PubKey.ECC.Prim as ECC
import Crypto.Random
import Data.ByteArray (ByteArray)
import Data.ByteArray (ByteArray, Bytes)
import qualified Data.ByteString as B
import System.IO.Unsafe (unsafePerformIO)
import Number.F2m
data HashAlg = forall alg . HashAlgorithm alg => HashAlg alg
benchHash =
[
[ bgroup "1KB" $ map (doHashBench oneKB) hashAlgs
, bgroup "1MB" $ map (doHashBench oneMB) hashAlgs
]
where
doHashBench b (name, HashAlg alg) = bench name $ nf (hashWith alg) b
oneKB :: Bytes
oneKB = unsafePerformIO (getRandomBytes 1024)
{-# NOINLINE oneKB #-}
oneMB :: Bytes
oneMB = unsafePerformIO (getRandomBytes $ 1024 * 1024)
{-# NOINLINE oneMB #-}
hashAlgs =
[ ("MD2", HashAlg MD2)
, ("MD4", HashAlg MD4)
, ("MD5", HashAlg MD5)
, ("SHA1", HashAlg SHA1)
, ("SHA224", HashAlg SHA224)
, ("SHA256", HashAlg SHA256)
, ("SHA384", HashAlg SHA384)
, ("SHA512", HashAlg SHA512)
, ("SHA512t_224", HashAlg SHA512t_224)
, ("SHA512t_256", HashAlg SHA512t_256)
, ("RIPEMD160", HashAlg RIPEMD160)
, ("Tiger", HashAlg Tiger)
--, ("Skein256-160", HashAlg Skein256_160)
, ("Skein256-256", HashAlg Skein256_256)
--, ("Skein512-160", HashAlg Skein512_160)
, ("Skein512-384", HashAlg Skein512_384)
, ("Skein512-512", HashAlg Skein512_512)
--, ("Skein512-896", HashAlg Skein512_896)
, ("Whirlpool", HashAlg Whirlpool)
, ("Keccak-224", HashAlg Keccak_224)
, ("Keccak-256", HashAlg Keccak_256)
, ("Keccak-384", HashAlg Keccak_384)
, ("Keccak-512", HashAlg Keccak_512)
, ("SHA3-224", HashAlg SHA3_224)
, ("SHA3-256", HashAlg SHA3_256)
, ("SHA3-384", HashAlg SHA3_384)
, ("SHA3-512", HashAlg SHA3_512)
, ("Blake2b-160", HashAlg Blake2b_160)
, ("Blake2b-224", HashAlg Blake2b_224)
, ("Blake2b-256", HashAlg Blake2b_256)
, ("Blake2b-384", HashAlg Blake2b_384)
, ("Blake2b-512", HashAlg Blake2b_512)
, ("Blake2s-160", HashAlg Blake2s_160)
, ("Blake2s-224", HashAlg Blake2s_224)
, ("Blake2s-256", HashAlg Blake2s_256)
]
benchPBKDF2 =
[ bgroup "64"