packages feed

hecc-0.4: src/bench.hs

-----------------------------------------------------------------------------
-- |
-- Module      :  
-- Copyright   :  (c) Marcel Fourné 20[09..13]
-- License     :  BSD3
-- Maintainer  :  Marcel Fourné (hecc@bitrot.dyndns.org
--
-- benchmarking playground, not production quality
-- recommended:
-- $ ghc --make -O2 -feager-blackholing -fforce-recomp -fllvm -threaded bench.hs
-- best performance measured with just 1 thread
--
-----------------------------------------------------------------------------
{-# LANGUAGE ScopedTypeVariables #-}

import Codec.Crypto.ECC.Base
import Codec.Crypto.ECC.StandardCurves
import Control.Monad.Random
import Criterion
import Criterion.Main
import Data.Serialize
import qualified Data.F2 as F2

testfkt:: ECPF Integer -> Integer -> Int -> ECPF Integer
testfkt b k' n  = pmul b ((toInteger (n-n)) + k')

main::IO ()
main = do
-- {-
    let p = ECPp (ECi (stdc_l p256,stdc_a p256,stdc_b p256,stdc_p p256,stdc_r p256), stdc_xp p256,stdc_yp p256,1)
--        k' = 78260987815077071890976764339238653408132491773166348437934213365482899760747
--        k' = 2^254+2^253+2^252+2^251+2^250+2^249
--        k' = 2^254+2^200+2^150+2^100+2^50+1
    k' <- evalRandIO $ getRandomR (1,stdc_p p256)
    defaultMain [ bench "NIST P-256" $ whnf (testfkt p k') 10]
{-    
    case ((decode . encode) p) of
      Left msg -> print msg
      Right (pt::(ECPF Integer)) -> print pt
-}
-- -}
{-
    let p = ECPp (ECi (stdc_l p521, stdc_a p521, stdc_b p521,stdc_p p521,stdc_r p521),stdc_xp p521,stdc_yp p521,1)
--        k' = 1093849038073734274511112390766805569936207598951683748994586394495953116150735016013708737573759623248592132296706313309438452531591012912142327488478985984
    k' <- evalRandIO $ getRandomR (1,stdc_p p521)
    defaultMain [
            bench "NIST P-521" $ whnf (testfkt p k') 10
           ]
-- -}
{-
    let p = ECPpF2 (ECb (stdcF_l b283, stdcF_a b283, stdcF_b b283,stdcF_p b283,stdcF_r b283),stdcF_xp b283,stdcF_yp b283,F2.fromInteger 1)
--        k' = 115792089210356248762697446949407573529996955224135760342422259061068512044368
--        k' = 2
--        k' = 3
        k' = 2^10
--    print p
--    print (pdouble p)
--    print $ modinv (F2.fromInteger 4) (F2.fromInteger 7)
    print $ pmul p k'
--    print $ ison p
-- -}

-- for this one the prerequisites are not ready
{-
    let p = 6277101735386680763835789423207666416083908700390324961279
        a = 6277101735386680763835789423207666416083908700390324961276
        b = 2455155546008943817740293915197451784769108058161191238065
        c = EC (a,b,p)
        x = 602046282375688656758213480587526111916698976636884684818
        y = 174050332293622031404857552280219410364023488927386650641
        alpha = EPa (x,y)
        kprivA = 5114103500503308041454439524093827019673558354999860770782
        kprivB = 1748161650263518407976227277807126651450677841379957675747
    in defaultMain [
            bench "ecdh" $ print [ (x,y)|x <-[1], y <- [(ecdh c alpha kprivA kprivB)]]
           ]
-- -}