eccrypto-0.0: src/bench.hs
-----------------------------------------------------------------------------
-- |
-- Module :
-- Copyright : (c) Marcel Fourné 20[09..14]
-- License : BSD3
-- Maintainer : Marcel Fourné (haskell@marcelfourne.de)
--
-- benchmarks
-- recommended:
-- $ ghc --make -threaded bench.hs
-- best performance measured with just 1 thread
--
-----------------------------------------------------------------------------
{-# OPTIONS_GHC -O2 -feager-blackholing #-}
import Crypto.ECC.NIST.Base
import Crypto.ECC.NIST.StandardCurves
import qualified Crypto.F2 as F2 (fromInteger,toInteger)
import Control.Monad.Random
import Criterion
import Criterion.Main
main::IO ()
main = do
let c1 = ECi (stdc_l p256) (stdc_b p256) (stdc_p p256) (stdc_r p256)
p1 = ECPp (stdc_xp p256) (stdc_yp p256) 1
k10' = 78260987815077071890976764339238653408132491773166348437934213365482899760747
k11' = 2^254+2^253+2^252+2^251+2^250+2^249
k12' = 2^254+2^200+2^150+2^100+2^50+1
c2 = ECi (stdc_l p521) (stdc_b p521) (stdc_p p521) (stdc_r p521)
p2 = ECPp (stdc_xp p521) (stdc_yp p521) 1
k20' = 1093849038073734274511112390766805569936207598951683748994586394495953116150735016013708737573759623248592132296706313309438452531591012912142327488478985984
c3 = ECb (stdcF_l b283) (stdcF_a b283) (stdcF_b b283) (stdcF_p b283) (stdcF_r b283)
p3 = ECPpF2 (stdcF_xp b283) (stdcF_yp b283) (F2.fromInteger 283 1)
k30' = 115792089210356248762697446949407573529996955224135760342422259061068512044368
k31' = 2
k32' = 3
k33' = 2^282
k13' <- evalRandIO $ getRandomR (1,stdc_p p256)
k21' <- evalRandIO $ getRandomR (1,stdc_p p521)
k34' <- evalRandIO $ getRandomR (1, F2.toInteger $ stdcF_p b283)
defaultMain [bgroup "NIST P-256" [ bench "pmul by random value" $ whnf (pmul c1 p1) k13'
, bench "pmul by 2^254" $ whnf (pmul c1 p1 ) (2^254)
, bench "pmul by top 5 bits" $ whnf (pmul c1 p1) k11'
, bench "pmul by 50bit pattern" $ whnf (pmul c1 p1) k12'
]
{-
, bgroup "NIST P-521" [ bench "pmul by random value" $ whnf (pmul c2 p2) k21'
]
-- -}
{-
, bgroup "NIST B-283" [ bench "pmul by random value" $ whnf (pmul c3 p3) k34'
]
-- -}
]