Main.hs (1414B)
1 {-# LANGUAGE BangPatterns #-} 2 {-# LANGUAGE OverloadedStrings #-} 3 4 module Main where 5 6 import Criterion.Main 7 import qualified Crypto.Hash.SHA512 as SHA512 8 import qualified Data.ByteString as BS 9 import qualified Data.ByteString.Lazy as BL 10 import qualified Data.Digest.Pure.SHA as SHA 11 12 main :: IO () 13 main = defaultMain [ 14 suite 15 ] 16 17 suite :: Benchmark 18 suite = 19 let !bs = BS.replicate 32 0 20 !bl = BL.fromStrict bs 21 !mac0 = SHA512.hmac "key" "foo" 22 !mac1 = SHA512.hmac "key" "bar" 23 !mac2 = SHA512.hmac "key" "foo" 24 !macl0 = SHA512.hmac_lazy "key" "foo" 25 !macl1 = SHA512.hmac_lazy "key" "bar" 26 !macl2 = SHA512.hmac_lazy "key" "foo" 27 in bgroup "ppad-sha512" [ 28 bgroup "SHA512 (32B input)" [ 29 bench "hash" $ whnf SHA512.hash bs 30 , bench "hash_lazy" $ whnf SHA512.hash_lazy bl 31 , bench "SHA.sha512" $ whnf SHA.sha512 bl 32 ] 33 , bgroup "HMAC-SHA512 (32B input)" [ 34 bench "hmac" $ whnf (SHA512.hmac "key") bs 35 , bench "hmac_lazy" $ whnf (SHA512.hmac_lazy "key") bl 36 , bench "SHA.hmacSha512" $ whnf (SHA.hmacSha512 "key") bl 37 ] 38 , bgroup "MAC comparison" [ 39 bench "hmac, unequal" $ whnf (mac0 ==) mac1 40 , bench "hmac, equal" $ whnf (mac0 ==) mac2 41 , bench "hmac_lazy, unequal" $ whnf (macl0 ==) macl1 42 , bench "hmac_lazy, equal" $ whnf (macl0 ==) macl2 43 ] 44 ] 45