packages feed

ppad-aead-0.2.0: bench/Main.hs

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

module Main where

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

deriving instance Generic AEAD.Error

instance NFData AEAD.Error

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

key :: BS.ByteString
key = fromJust . B16.decode $
  "1c9240a5eb55d38af333888604f6b5f0473917c1402b80099dca5cbc207075c0"

cip :: BS.ByteString
cip = fromJust . B16.decode $
  "64a0861575861af460f062c79be643bd5e805cfd345cf389f108670ac76c8cb24c6cfc18755d43eea09ee94e382d26b0bdb7b73c321b0100d4f03b7f355894cf332f830e710b97ce98c8a84abd0b948114ad176e008d33bd60f982b1ff37c8559797a06ef4f0ef61c186324e2b3506383606907b6a7c02b0f9f6157b53c867e4b9166c767b804d46a59b5216cde7a4e99040c5a40433225ee282a1b0a06c523eaf4534d7f83fa1155b0047718cbc546a0d072b04b3564eea1b422273f548271a0bb2316053fa76991955ebd63159434ecebb4e466dae5a1073a6727627097a1049e617d91d361094fa68f0ff77987130305beaba2eda04df997b714d6c6f2c29a6ad5cb4022b02709b"

plain :: BS.ByteString
plain = fromJust . B16.decode $
  "496e7465726e65742d4472616674732061726520647261667420646f63756d656e74732076616c696420666f722061206d6178696d756d206f6620736978206d6f6e74687320616e64206d617920626520757064617465642c207265706c616365642c206f72206f62736f6c65746564206279206f7468657220646f63756d656e747320617420616e792074696d652e20497420697320696e617070726f70726961746520746f2075736520496e7465726e65742d447261667473206173207265666572656e6365206d6174657269616c206f7220746f2063697465207468656d206f74686572207468616e206173202fe2809c776f726b20696e2070726f67726573732e2fe2809d"

nonce :: BS.ByteString
nonce = fromJust . B16.decode $
  "000000000102030405060708"

aad :: BS.ByteString
aad = fromJust . B16.decode $
  "f33388860000000000004e91"

tag :: BS.ByteString
tag = fromJust . B16.decode $
  "eead9d67890cbb22392336fea1851f38"

suite :: Benchmark
suite =
  bgroup "ppad-aead" [
    bench "encrypt" $ nf (AEAD.encrypt aad key nonce) plain
  , bench "decrypt" $ nf (AEAD.decrypt aad key nonce) (cip, tag)
  ]