packages feed

ppad-sha256-0.2.0: bench/Main.hs

{-# LANGUAGE OverloadedStrings #-}

module Main where

import Criterion.Main
import qualified Crypto.Hash.SHA256 as SHA256
import qualified Data.ByteString as BS
import qualified Data.ByteString.Lazy as BL
import qualified Data.Digest.Pure.SHA as SHA

main :: IO ()
main = defaultMain [
    suite
  ]

suite :: Benchmark
suite = env setup $ \ ~(bs, bl) ->
    bgroup "ppad-sha256" [
      bgroup "SHA256 (32B input)" [
        bench "hash" $ whnf SHA256.hash bs
      , bench "hash_lazy" $ whnf SHA256.hash_lazy bl
      , bench "SHA.sha256" $ whnf SHA.sha256 bl
      ]
    , bgroup "HMAC-SHA256 (32B input)" [
        bench "hmac" $ whnf (SHA256.hmac "key") bs
      , bench "hmac_lazy" $ whnf (SHA256.hmac_lazy "key") bl
      , bench "SHA.hmacSha256" $ whnf (SHA.hmacSha256 "key") bl
      ]
    ]
  where
    setup = do
      let bs_32B = BS.replicate 32 0
          bl_32B = BL.fromStrict bs_32B
      pure (bs_32B, bl_32B)