cryptonite/benchs/Number/F2m.hs
2016-07-23 14:15:55 +02:00

54 lines
1.2 KiB
Haskell

{-# LANGUAGE PackageImports #-}
module Main where
import Criterion.Main
import System.Random
import "cryptonite" Crypto.Number.Basic (log2)
import "cryptonite" Crypto.Number.F2m
genInteger :: Int -> Int -> Integer
genInteger salt bits
= head
. dropWhile ((< bits) . log2)
. scanl (\a r -> a * 2^31 + abs r) 0
. randoms
. mkStdGen
$ salt + bits
benchMod :: Int -> Benchmark
benchMod bits = bench (show bits) $ nf (modF2m m) a
where
m = genInteger 0 bits
a = genInteger 1 (2 * bits)
benchMul :: Int -> Benchmark
benchMul bits = bench (show bits) $ nf (mulF2m m a) b
where
m = genInteger 0 bits
a = genInteger 1 bits
b = genInteger 2 bits
benchSquare :: Int -> Benchmark
benchSquare bits = bench (show bits) $ nf (squareF2m m) a
where
m = genInteger 0 bits
a = genInteger 1 bits
benchInv :: Int -> Benchmark
benchInv bits = bench (show bits) $ nf (invF2m m) a
where
m = genInteger 0 bits
a = genInteger 1 bits
bitsList :: [Int]
bitsList = [64, 128, 256, 512, 1024, 2048]
main = defaultMain
[ bgroup "modF2m" $ map benchMod bitsList
, bgroup "mulF2m" $ map benchMul bitsList
, bgroup "squareF2m" $ map benchSquare bitsList
, bgroup "invF2m" $ map benchInv bitsList
]