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)
]
]