Main.hs (1603B)
1 {-# OPTIONS_GHC -fno-warn-orphans #-} 2 {-# LANGUAGE BangPatterns #-} 3 {-# LANGUAGE OverloadedStrings #-} 4 5 module Main where 6 7 import Control.DeepSeq 8 import Criterion.Main 9 import qualified Crypto.MAC.Poly1305 as Poly1305 10 import qualified Data.ByteString as BS 11 import qualified Data.ByteString.Base16 as B16 12 import Data.Maybe (fromJust) 13 14 instance NFData Poly1305.MAC where 15 rnf (Poly1305.MAC b) = rnf b 16 17 main :: IO () 18 main = defaultMain [ 19 suite 20 ] 21 22 msg :: BS.ByteString 23 msg = fromJust . B16.decode $ 24 "4c616469657320616e642047656e746c656d656e206f662074686520636c617373206f66202739393a204966204920636f756c64206f6666657220796f75206f6e6c79206f6e652074697020666f7220746865206675747572652c2073756e73637265656e20776f756c642062652069742e" 25 26 key_small :: BS.ByteString 27 key_small = fromJust . B16.decode $ 28 "0000000000000000000000000000000000000000000000000000000000000003" 29 30 key_mid :: BS.ByteString 31 key_mid = fromJust . B16.decode $ 32 "8888888888888888888888888888888888888888888888888888888888888883" 33 34 key_big :: BS.ByteString 35 key_big = fromJust . B16.decode $ 36 "fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3" 37 38 msg_1k :: BS.ByteString 39 msg_1k = BS.replicate 1024 0x42 40 41 msg_4k :: BS.ByteString 42 msg_4k = BS.replicate 4096 0x42 43 44 suite :: Benchmark 45 suite = 46 bgroup "ppad-poly1305" [ 47 bench "mac (small key)" $ nf (Poly1305.mac key_small) msg 48 , bench "mac (mid key)" $ nf (Poly1305.mac key_mid) msg 49 , bench "mac (big key)" $ nf (Poly1305.mac key_big) msg 50 , bench "mac (1024B msg)" $ nf (Poly1305.mac key_big) msg_1k 51 , bench "mac (4096B msg)" $ nf (Poly1305.mac key_big) msg_4k 52 ] 53