hbs2/bench/ScalarMultBench.hs

36 lines
855 B
Haskell

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
]