packages feed

saltine-0.2.2.0: bench/ScalarMultBench.hs

module ScalarMultBench (benchScalarMult, scalarMultEnv) where

import Criterion.Main

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

import Data.Maybe (fromJust)

import Crypto.Saltine.Class
import Crypto.Saltine.Core.ScalarMult as S
import Crypto.Saltine.Internal.ScalarMult as Bytes
import Crypto.Saltine.Internal.Util

import BenchUtils

scalarMultEnv :: IO (GroupElement, Scalar)
scalarMultEnv = do
    bsge <- randomByteString Bytes.scalarmult_bytes
    bssc <- randomByteString Bytes.scalarmult_scalarbytes

    let ge = fromJust $ decode bsge
    let sc = fromJust $ decode bssc

    pure (ge,sc)


benchScalarMult :: (GroupElement, Scalar) -> Benchmark
benchScalarMult (ge,sc) =
  bgroup "ScalarMult"
    [ bench "mult"     $ nf (S.mult    sc) ge
    , bench "multBase" $ nf S.multBase sc
    ]