hbs2/miscellaneous/saltine/bench/SecretBoxBench.hs

58 lines
1.6 KiB
Haskell

module SecretBoxBench (benchSecretbox, secretboxEnv) where
import Criterion.Main
import Control.Monad
import Control.DeepSeq
import Control.Exception
import Data.ByteString as BS
import Crypto.Saltine.Core.SecretBox
import BenchUtils
secretboxEnv :: IO Key
secretboxEnv = newKey
benchSecretbox :: Key -> Benchmark
benchSecretbox k = do
let encrypt :: ByteString -> IO ByteString
encrypt msg = newNonce >>= \n -> pure $ secretbox k n msg
decrypt :: ByteString -> IO (Maybe ByteString)
decrypt msg = do
n <- newNonce
let ciphertext = secretbox k n msg
return $ secretboxOpen k n ciphertext
encryptDetached msg = newNonce >>= \n -> pure $ secretboxDetached k n msg
decryptDetached msg = do
n <- newNonce
let (t,c) = secretboxDetached k n msg
pure $ secretboxOpenDetached k n t c
bgroup "Box"
[ bench "newKey" $ nfIO newKey
, bgroup "encrypt"
[ bench "128 B" $ nfIO $ encrypt bs128
, bench "1 MB" $ nfIO $ encrypt mb1
, bench "5 MB" $ nfIO $ encrypt mb5
]
, bgroup "encrypt+decrypt"
[ bench "128 B" $ nfIO $ decrypt bs128
, bench "1 MB" $ nfIO $ decrypt mb1
, bench "5 MB" $ nfIO $ decrypt mb5
]
, bgroup "encryptDetached"
[ bench "128 B" $ nfIO $ encryptDetached bs128
, bench "1 MB" $ nfIO $ encryptDetached mb1
, bench "5 MB" $ nfIO $ encryptDetached mb5
]
, bgroup "encryptDetached+decryptDetached"
[ bench "128 B" $ nfIO $ decryptDetached bs128
, bench "1 MB" $ nfIO $ decryptDetached mb1
, bench "5 MB" $ nfIO $ decryptDetached mb5
]
]