diff --git a/benchs/Number/F2m.hs b/benchs/Number/F2m.hs new file mode 100644 index 0000000..408a192 --- /dev/null +++ b/benchs/Number/F2m.hs @@ -0,0 +1,53 @@ +{-# 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 + ]