import Crypto.Cipher.AES128
import Crypto.Cipher.AES
import Crypto.Classes
import Crypto.Types
import Criterion
import Criterion.Main
import System.Entropy
import Data.Serialize
import qualified Data.ByteString as B
main = do
let iv = zeroIV
ivV = B.replicate 16 0
pt <- getEntropy (2^16)
k <- buildKeyIO :: IO AESKey128
let kV = initAES (B.pack [0..15])
defaultMain
[ bench "aes-ecb cipher-aes128" $ nf (encryptBlock k) pt
, bench "aes-ctr cipher-aes128" $ nf (fst . ctr k iv) pt
, bench "aes-ecb cipher-aes" $ nf (encryptECB kV) pt
, bench "aes-ctr cipher-aes" $ nf (encryptCTR kV ivV) pt
, bench "aes-gcm cipher-aes" $ nf (fst . encryptGCM kV ivV B.empty) pt]