bip32

Pure Haskell BIP32 hierarchical deterministic wallets (docs.ppad.tech/bip32).
git clone git://git.ppad.tech/bip32.git
Log | Files | Refs | README | LICENSE

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