Main.hs (1339B)
1 {-# OPTIONS_GHC -fno-warn-orphans #-} 2 {-# LANGUAGE BangPatterns #-} 3 {-# LANGUAGE OverloadedStrings #-} 4 {-# LANGUAGE StandaloneDeriving #-} 5 6 module Main where 7 8 import Criterion.Main 9 import Crypto.HDKey.BIP32 10 import Control.DeepSeq 11 import Crypto.Curve.Secp256k1 as S 12 13 instance NFData S.Projective 14 15 instance NFData XPub where 16 rnf (XPub (X a b)) = a `deepseq` b `deepseq` () 17 18 instance NFData XPrv where 19 rnf (XPrv (X a b)) = a `deepseq` b `deepseq` () 20 21 instance NFData HDKey where 22 rnf (HDKey a b c d) = a `deepseq` b `deepseq` c `deepseq` d `deepseq` () 23 24 main :: IO () 25 main = defaultMain [ 26 bgroup "ppad-bip32" [ 27 bench_master 28 , bench_derive_pub 29 , bench_derive_priv 30 , bench_xpub 31 , bench_xprv 32 ] 33 ] 34 35 m :: HDKey 36 m = case master "my super entropic entropy" of 37 Just !s -> s 38 _ -> error "bang" 39 40 bench_master :: Benchmark 41 bench_master = bench "master" $ nf master "my super entropic entropy" 42 43 bench_derive_pub :: Benchmark 44 bench_derive_pub = bench "derive_child_pub" $ nf (derive_child_pub m) 0 45 46 bench_derive_priv :: Benchmark 47 bench_derive_priv = bench "derive_child_priv" $ nf (derive_child_priv m) 0 48 49 bench_xpub :: Benchmark 50 bench_xpub = bench "xpub" $ nf xpub m 51 52 bench_xprv :: Benchmark 53 bench_xprv = bench "xprv" $ nf xprv m 54 55 bench_parse :: Benchmark 56 bench_parse = bench "parse" $ nf parse (xprv m) 57