packages feed

ed25519-0.0.3.0: benchmarks/bench1.hs

{-# LANGUAGE CPP #-}
module Main
       ( main -- :: IO ()
       ) where

import Criterion.Main
import Crypto.Sign.Ed25519

import Control.DeepSeq
import qualified Data.ByteString as B

--------------------------------------------------------------------------------

#if !MIN_VERSION_bytestring(0,10,0)
instance NFData B.ByteString
#endif

instance NFData SecretKey
instance NFData PublicKey

--------------------------------------------------------------------------------

main :: IO ()
main = do
  keys@(pk,sk) <- createKeypair
  let dummy = B.pack [0..255]
      msg = sign sk dummy
  defaultMain
    [ bench "createKeypair" $ nfIO createKeypair
    , bench "sign"          $ nf (sign sk)        dummy
    , bench "verify"        $ nf (verify pk)      msg
    , bench "roundtrip"     $ nf (signBench keys) dummy
    ]

signBench :: (PublicKey, SecretKey) -> B.ByteString -> Bool
signBench (pk, sk) xs = verify pk (sign sk xs)