From 75b362a2a0def5135144c798a9e3e42b362c51ad Mon Sep 17 00:00:00 2001 From: Vincent Hanquez Date: Mon, 22 Jun 2015 14:11:48 +0100 Subject: [PATCH] add Random benchmarks --- benchs/Random.hs | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 benchs/Random.hs diff --git a/benchs/Random.hs b/benchs/Random.hs new file mode 100644 index 0000000..fbddc90 --- /dev/null +++ b/benchs/Random.hs @@ -0,0 +1,46 @@ +{-# LANGUAGE BangPatterns #-} +{-# LANGUAGE PackageImports #-} +module Main where + +import Criterion.Main +import Control.Monad + +import "cryptonite" Crypto.Random + +import qualified "cprng-aes" Crypto.Random.AESCtr as A +import qualified "crypto-random" Crypto.Random as A + +import Data.ByteString (ByteString) + +tests = [(32, 4096), (64, 4096) ] + +evalBsList :: (a -> [ByteString]) -> a -> Benchmarkable +evalBsList = nf + +toBench drg (chunkSize, total) = + bench ("chunk=" ++ show chunkSize ++ " total=" ++ show total) $ evalBsList (run drg) 0 + where + run !r !n + | n >= total = [] + | otherwise = + let (!b, r') = randomBytesGenerate chunkSize r + in b : run r' (n + chunkSize) + +toBenchCPRG drg (chunkSize, total) = + bench ("chunk=" ++ show chunkSize ++ " total=" ++ show total) $ evalBsList (run drg) 0 + where + run !r !n + | n >= total = [] + | otherwise = + let (!b, r') = A.cprgGenerate chunkSize r + in b : run r' (n + chunkSize) + +main = do + chachaDrg <- drgNew + systemDrg <- getSystemDRG + aesCPRG <- A.makeSystem + defaultMain + [ bgroup "chacha" $ map (toBench chachaDrg) tests + , bgroup "system" $ map (toBench systemDrg) tests + , bgroup "aesctr" $ map (toBenchCPRG aesCPRG) tests + ]