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