packages feed

fastpbkdf2-0.1.0.0: bench/Bench.hs

{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE PackageImports #-}
module Main where

import              Criterion.Main
import              Crypto.Hash.Algorithms as Crypto
import "cryptonite" Crypto.KDF.PBKDF2 as Crypto
import "fastpbkdf2" Crypto.KDF.PBKDF2 as Fast
import              Crypto.PBKDF.ByteString as CD
import              Data.ByteString as B

data Library = FastPBKDF2
             | Cryptonite
             | PBKDF2

encryptBench :: Library -> ByteString -> ByteString
encryptBench FastPBKDF2 input = Fast.fastpbkdf2_hmac_sha1 input "salt" 10000 32
encryptBench Cryptonite input = Crypto.generate (Crypto.prfHMAC Crypto.SHA1) (Crypto.Parameters 10000 32) input ("salt" :: ByteString)
encryptBench PBKDF2     input = CD.sha1PBKDF2 input "salt" 10000 32

main :: IO ()
main = defaultMain [
  bgroup "sha1" [ bench "fastpbkdf2"  $ whnf (encryptBench FastPBKDF2) (B.pack $ Prelude.replicate 100000 0x0)
                , bench "cryptonite"  $ whnf (encryptBench Cryptonite) (B.pack $ Prelude.replicate 100000 0x0)
                , bench "pbkdf2"      $ whnf (encryptBench PBKDF2)     (B.pack $ Prelude.replicate 100000 0x0)
                ]
  ]