sha512

Pure Haskell SHA-512, HMAC-SHA512 (docs.ppad.tech/sha512).
git clone git://git.ppad.tech/sha512.git
Log | Files | Refs | README | LICENSE

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