Main.hs (1797B)
1 {-# OPTIONS_GHC -fno-warn-orphans #-} 2 {-# LANGUAGE BangPatterns #-} 3 {-# LANGUAGE FlexibleInstances #-} 4 {-# LANGUAGE OverloadedStrings #-} 5 {-# LANGUAGE StandaloneDeriving #-} 6 7 module Main where 8 9 import Criterion.Main 10 import Crypto.HDKey.BIP32 11 import Control.DeepSeq 12 import qualified Crypto.Curve.Secp256k1 as S 13 import qualified Data.Maybe as M 14 import qualified Data.Word.Wider as W 15 16 instance NFData S.Projective 17 instance NFData (X W.Wider) 18 instance NFData (X S.Projective) 19 instance NFData XPub 20 instance NFData XPrv 21 instance NFData HDKey 22 23 -- precomputed context for wNAF benchmarks 24 ctx :: Context 25 ctx = precompute 26 27 main :: IO () 28 main = defaultMain [ 29 bgroup "ppad-bip32" [ 30 bench_master 31 , bench_derive_pub 32 , bench_derive_priv 33 , bench_xpub 34 , bench_xprv 35 , bench_parse 36 ] 37 , bgroup "ppad-bip32 (wNAF)" [ 38 bench_derive_pub_wnaf 39 , bench_derive_priv_wnaf 40 ] 41 ] 42 43 m :: HDKey 44 m = case master "my super entropic entropy" of 45 Just !s -> s 46 _ -> error "bang" 47 48 bench_master :: Benchmark 49 bench_master = bench "master" $ nf master "my super entropic entropy" 50 51 bench_derive_pub :: Benchmark 52 bench_derive_pub = bench "derive_child_pub" $ nf (derive_child_pub m) 0 53 54 bench_derive_priv :: Benchmark 55 bench_derive_priv = bench "derive_child_priv" $ nf (derive_child_priv m) 0 56 57 bench_xpub :: Benchmark 58 bench_xpub = bench "xpub" $ nf xpub m 59 60 bench_xprv :: Benchmark 61 bench_xprv = bench "xprv" $ nf xprv m 62 63 bench_parse :: Benchmark 64 bench_parse = bench "parse" $ nf parse (M.fromJust (xprv m)) 65 66 -- wNAF variants 67 68 bench_derive_pub_wnaf :: Benchmark 69 bench_derive_pub_wnaf = 70 bench "derive_child_pub'" $ nf (derive_child_pub' ctx m) 0 71 72 bench_derive_priv_wnaf :: Benchmark 73 bench_derive_priv_wnaf = 74 bench "derive_child_priv'" $ nf (derive_child_priv' ctx m) 0 75