hbs2/bench/BoxBench.hs

46 lines
1.1 KiB
Haskell

module BoxBench (benchBox, boxEnv) where
import Criterion.Main
import Control.Monad
import Control.DeepSeq
import Control.Exception
import Data.ByteString as BS
import Crypto.Saltine.Core.Box
import BenchUtils
boxEnv :: IO (Keypair, Keypair)
boxEnv = do
alice <- newKeypair
bob <- newKeypair
return (alice, bob)
benchBox :: (Keypair, Keypair) -> Benchmark
benchBox (alice, bob) = do
let encrypt :: ByteString -> IO ByteString
encrypt b = newNonce >>= \n -> pure $ box (publicKey bob) (secretKey alice) n b
decrypt :: ByteString -> IO (Maybe ByteString)
decrypt message = do
n <- newNonce
let ciphertext = box (publicKey alice) (secretKey bob) n message
return $ boxOpen (publicKey bob) (secretKey alice) n ciphertext
bgroup "Box"
[ bench "newKeypair" $ nfIO newKeypair
, 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
]
]