packages feed

saltine-0.2.0.0: bench/OneTimeAuthBench.hs

module OneTimeAuthBench (benchOneTimeAuth, oneTimeAuthEnv) where

import Criterion.Main

import Control.Monad
import Control.DeepSeq
import Control.Exception
import Data.ByteString as BS

import Crypto.Saltine.Core.OneTimeAuth

import BenchUtils


oneTimeAuthEnv :: IO Key
oneTimeAuthEnv = newKey

benchOneTimeAuth :: Key -> Benchmark
benchOneTimeAuth k = do
  let authVerify :: ByteString -> Bool
      authVerify message = do
        let authenticator = auth k message
        verify k authenticator message

  bgroup "OneTimeAuth"
    [ bench "newKey" $ nfIO newKey
    , bgroup "auth"
      [ bench "128 B" $ nf (auth k) bs128
      , bench "1 MB"  $ nf (auth k) mb1
      , bench "5 MB"  $ nf (auth k) mb5
      ]
    , bgroup "auth+verify"
      [ bench "128 B" $ nf authVerify bs128
      , bench "1 MB"  $ nf authVerify mb1
      , bench "5 MB"  $ nf authVerify mb5
      ]
    ]