packages feed

ppad-chacha-0.2.0: bench/Main.hs

{-# OPTIONS_GHC -fno-warn-orphans #-}
{-# LANGUAGE BangPatterns #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE StandaloneDeriving #-}

module Main where

import Control.DeepSeq
import Criterion.Main
import qualified Crypto.Cipher.ChaCha20 as ChaCha20
import qualified Data.ByteString as BS
import qualified Data.ByteString.Base16 as B16
import Data.Maybe (fromJust)
import GHC.Generics

deriving instance Generic ChaCha20.Error

instance NFData ChaCha20.Error

main :: IO ()
main = defaultMain [
    suite
  ]

plain :: BS.ByteString
plain = fromJust . B16.decode $
  "4c616469657320616e642047656e746c656d656e206f662074686520636c617373206f66202739393a204966204920636f756c64206f6666657220796f75206f6e6c79206f6e652074697020666f7220746865206675747572652c2073756e73637265656e20776f756c642062652069742e"

key :: BS.ByteString
key = fromJust . B16.decode $
  "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f"

non :: BS.ByteString
non = fromJust . B16.decode $
  "000000090000004a00000000"

suite :: Benchmark
suite =
  bgroup "ppad-chacha" [
    bench "cipher" $ nf (ChaCha20.cipher key 1 non) plain
  ]