packages feed

cardano-crypto-1.3.0: benchs/Bench.hs

{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE TupleSections #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE Rank2Types #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE BangPatterns #-}
module Main where

import           Gauge
import           Gauge.Main

import           Crypto.Random
import           Cardano.Crypto.Wallet
import           Data.ByteArray (Bytes)
import qualified Data.ByteArray as B

hardIdx, softIdx :: DerivationIndex
hardIdx = 0x80000001
softIdx = 0x00000001

derivePass :: Bytes
derivePass = B.pack [10..30]

noDerivePass :: Bytes
noDerivePass = B.empty

doDeriveBench dscheme pass parent =
    [ bench "derive-hard" $ nf (\p -> deriveXPrv dscheme pass p hardIdx) parent
    , bench "derive-soft" $ nf (\p -> deriveXPrv dscheme pass p softIdx) parent
    ]

main = do
    seed <- getRandomBytes 32 :: IO Bytes
    let !parentPass   = generate seed derivePass
        !parentNoPass = generate seed noDerivePass

    defaultMain
        [ bgroup "derivation-v1-nopass" $ doDeriveBench DerivationScheme1 noDerivePass parentNoPass
        , bgroup "derivation-v2-nopass" $ doDeriveBench DerivationScheme2 noDerivePass parentNoPass
        , bgroup "derivation-v1-pass" $ doDeriveBench DerivationScheme1 derivePass parentPass
        , bgroup "derivation-v2-pass" $ doDeriveBench DerivationScheme2 derivePass parentPass
        ]