packages feed

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'
                                    ]
-- -}
              ]