aead

Pure Haskell AEAD-ChaCha20-Poly1305 (docs.ppad.tech/aead).
git clone git://git.ppad.tech/aead.git
Log | Files | Refs | README | LICENSE

Main.hs (2275B)


      1 {-# OPTIONS_GHC -fno-warn-orphans #-}
      2 {-# LANGUAGE BangPatterns #-}
      3 {-# LANGUAGE OverloadedStrings #-}
      4 {-# LANGUAGE DeriveGeneric #-}
      5 {-# LANGUAGE StandaloneDeriving #-}
      6 
      7 module Main where
      8 
      9 import Control.DeepSeq
     10 import Criterion.Main
     11 import qualified Crypto.AEAD.ChaCha20Poly1305 as AEAD
     12 import qualified Data.ByteString as BS
     13 import qualified Data.ByteString.Base16 as B16
     14 import Data.Maybe (fromJust)
     15 import GHC.Generics
     16 
     17 deriving instance Generic AEAD.Error
     18 
     19 instance NFData AEAD.Error
     20 
     21 main :: IO ()
     22 main = defaultMain [
     23     suite
     24   ]
     25 
     26 key :: BS.ByteString
     27 key = fromJust . B16.decode $
     28   "1c9240a5eb55d38af333888604f6b5f0473917c1402b80099dca5cbc207075c0"
     29 
     30 cip :: BS.ByteString
     31 cip = fromJust . B16.decode $
     32   "64a0861575861af460f062c79be643bd5e805cfd345cf389f108670ac76c8cb24c6cfc18755d43eea09ee94e382d26b0bdb7b73c321b0100d4f03b7f355894cf332f830e710b97ce98c8a84abd0b948114ad176e008d33bd60f982b1ff37c8559797a06ef4f0ef61c186324e2b3506383606907b6a7c02b0f9f6157b53c867e4b9166c767b804d46a59b5216cde7a4e99040c5a40433225ee282a1b0a06c523eaf4534d7f83fa1155b0047718cbc546a0d072b04b3564eea1b422273f548271a0bb2316053fa76991955ebd63159434ecebb4e466dae5a1073a6727627097a1049e617d91d361094fa68f0ff77987130305beaba2eda04df997b714d6c6f2c29a6ad5cb4022b02709b"
     33 
     34 plain :: BS.ByteString
     35 plain = fromJust . B16.decode $
     36   "496e7465726e65742d4472616674732061726520647261667420646f63756d656e74732076616c696420666f722061206d6178696d756d206f6620736978206d6f6e74687320616e64206d617920626520757064617465642c207265706c616365642c206f72206f62736f6c65746564206279206f7468657220646f63756d656e747320617420616e792074696d652e20497420697320696e617070726f70726961746520746f2075736520496e7465726e65742d447261667473206173207265666572656e6365206d6174657269616c206f7220746f2063697465207468656d206f74686572207468616e206173202fe2809c776f726b20696e2070726f67726573732e2fe2809d"
     37 
     38 nonce :: BS.ByteString
     39 nonce = fromJust . B16.decode $
     40   "000000000102030405060708"
     41 
     42 aad :: BS.ByteString
     43 aad = fromJust . B16.decode $
     44   "f33388860000000000004e91"
     45 
     46 tag :: BS.ByteString
     47 tag = fromJust . B16.decode $
     48   "eead9d67890cbb22392336fea1851f38"
     49 
     50 suite :: Benchmark
     51 suite =
     52   bgroup "ppad-aead" [
     53     bench "encrypt" $ nf (AEAD.encrypt aad key nonce) plain
     54   , bench "decrypt" $ nf (AEAD.decrypt aad key nonce) (cip, tag)
     55   ]
     56