hbs2/miscellaneous/saltine/bench/SignBench.hs

54 lines
1.5 KiB
Haskell

module SignBench (benchSign, signEnv) where
import Criterion.Main
import Control.Monad
import Control.DeepSeq
import Control.Exception
import Data.ByteString as BS
import Crypto.Saltine.Core.Sign as S
import BenchUtils
signEnv :: IO Keypair
signEnv = newKeypair
benchSign :: Keypair -> Benchmark
benchSign alice = do
let sign :: ByteString -> ByteString
sign = S.sign (secretKey alice)
verify :: ByteString -> Bool
verify message =
let signed = sign message
in case S.signOpen (publicKey alice) signed of
Nothing -> False
Just ms -> True
signDetached = S.signDetached (secretKey alice)
signVerifyDetached message = S.signVerifyDetached (publicKey alice) (signDetached message)
bgroup "Sign"
[ bench "newKeypair" $ nfIO newKeypair
, bgroup "sign"
[ bench "128 B" $ nf sign bs128
, bench "1 MB" $ nf sign mb1
, bench "5 MB" $ nf sign mb5
]
, bgroup "sign+verify"
[ bench "128 B" $ nf verify bs128
, bench "1 MB" $ nf verify mb1
, bench "5 MB" $ nf verify mb5
]
, bgroup "signDetached"
[ bench "128 B" $ nf signDetached bs128
, bench "1 MB" $ nf signDetached mb1
, bench "5 MB" $ nf signDetached mb5
]
, bgroup "signDetached+verifyDetached"
[ bench "128 B" $ nf signVerifyDetached bs128
, bench "1 MB" $ nf signVerifyDetached mb1
, bench "5 MB" $ nf signVerifyDetached mb5
]
]