mirror of https://github.com/voidlizard/hbs2
46 lines
1.1 KiB
Haskell
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
|
|
]
|
|
]
|