sha256

Pure Haskell SHA-256, HMAC-SHA256 (docs.ppad.tech/sha256).
git clone git://git.ppad.tech/sha256.git
Log | Files | Refs | README | LICENSE

Main.hs (1413B)


      1 {-# LANGUAGE BangPatterns #-}
      2 {-# LANGUAGE OverloadedStrings #-}
      3 
      4 module Main where
      5 
      6 import Criterion.Main
      7 import qualified Crypto.Hash.SHA256 as SHA256
      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  = SHA256.hmac "key" "foo"
     22       !mac1  = SHA256.hmac "key" "bar"
     23       !mac2  = SHA256.hmac "key" "foo"
     24       !macl0 = SHA256.hmac_lazy "key" "foo"
     25       !macl1 = SHA256.hmac_lazy "key" "bar"
     26       !macl2 = SHA256.hmac_lazy "key" "foo"
     27   in  bgroup "ppad-sha256" [
     28         bgroup "SHA256 (32B input)" [
     29           bench "hash" $ whnf SHA256.hash bs
     30         , bench "hash_lazy" $ whnf SHA256.hash_lazy bl
     31         , bench "SHA.sha256" $ whnf SHA.sha256 bl
     32         ]
     33       , bgroup "HMAC-SHA256 (32B input)" [
     34           bench "hmac" $ whnf (SHA256.hmac "key") bs
     35         , bench "hmac_lazy" $ whnf (SHA256.hmac_lazy "key") bl
     36         , bench "SHA.hmacSha256" $ whnf (SHA.hmacSha256 "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       ]