raaz-0.0.1: spec/Raaz/Cipher/AESSpec.hs
{-# OPTIONS_GHC -fno-warn-orphans #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE DataKinds #-}
module Raaz.Cipher.AESSpec where
import Common
import qualified Common.Cipher as C
import Raaz.Cipher.AES
import Raaz.Cipher.Internal
spec :: Spec
spec = do describe "128bit CBC" $ aes128cbcSpec
describe "192bit CBC" $ aes192cbcSpec
describe "256bit CBC" $ aes256cbcSpec
----------------- AES 128 CBC ------------------------------
aes128cbcSpec :: Spec
aes128cbcSpec = do
C.encryptVsDecrypt aes128cbc
with ( "06a9214036b8a15b512e03d534120006"
, "3dafba429d9eb430b422da802c9fac41")
$ ("Single block msg" :: ByteString)
`encryptsTo` ("e353779c1079aeb82708942dbe77181a" :: Base16)
with ( "c286696d887c9aa0611bbb3e2025a45a"
, "562e17996d093d28ddb3ba695a2e6f58")$
( "000102030405060708090a0b0c0d0e0f" <>
"101112131415161718191a1b1c1d1e1f" :: Base16)
`encryptsTo`
( "d296cd94c2cccf8a3a863028b5e1dc0a" <>
"7586602d253cfff91b8266bea6d61ab1" ::Base16)
with ( "6c3ea0477630ce21a2ce334aa746c2cd"
, "c782dc4c098c66cbd9cd27d825682c81" )$
( "This is a 48-byte message (exactly 3 AES blocks)" :: ByteString)
`encryptsTo`
( "d0a02b3836451753d493665d33f0e886" <>
"2dea54cdb293abc7506939276772f8d5" <>
"021c19216bad525c8579695d83ba2684" :: Base16
)
with ( "56e47a38c5598974bc46903dba290349"
, "8ce82eefbea0da3c44699ed7db51b7d9" ) $
( "a0a1a2a3a4a5a6a7a8a9aaabacadaeaf" <>
"b0b1b2b3b4b5b6b7b8b9babbbcbdbebf" <>
"c0c1c2c3c4c5c6c7c8c9cacbcccdcecf" <>
"d0d1d2d3d4d5d6d7d8d9dadbdcdddedf" :: Base16 )
`encryptsTo`
( "c30e32ffedc0774e6aff6af0869f71aa" <>
"0f3af07a9a31a9c684db207eb0ef8e4e" <>
"35907aa632c3ffdf868bb7b29d3d46ad" <>
"83ce9f9a102ee99d49a53e87f4c3da55" :: Base16
)
with ( "2b7e151628aed2a6abf7158809cf4f3c"
, "000102030405060708090a0b0c0d0e0f") $
( "6bc1bee22e409f96e93d7e117393172a" :: Base16 )
`encryptsTo`
( "7649abac8119b246cee98e9b12e9197d" :: Base16 )
with ( "2b7e151628aed2a6abf7158809cf4f3c"
, "7649abac8119b246cee98e9b12e9197d") $
( "ae2d8a571e03ac9c9eb76fac45af8e51" :: Base16 )
`encryptsTo`
( "5086cb9b507219ee95db113a917678b2" :: Base16 )
with ( "2b7e151628aed2a6abf7158809cf4f3c"
, "5086cb9b507219ee95db113a917678b2") $
( "30c81c46a35ce411e5fbc1191a0a52ef" :: Base16 )
`encryptsTo`
( "73bed6b8e3c1743b7116e69e22229516" :: Base16 )
with ( "2b7e151628aed2a6abf7158809cf4f3c"
, "73bed6b8e3c1743b7116e69e22229516") $
( "f69f2445df4f9b17ad2b417be66c3710" :: Base16 )
`encryptsTo`
( "3ff1caa1681fac09120eca307586e1a7" :: Base16 )
where encryptsTo :: (Format fmt1, Format fmt2)
=> fmt1 -> fmt2 -> Key (AES 128 CBC) -> Spec
encryptsTo = C.encryptsTo aes128cbc
------------------ AES 192 CBC ---------------------------
aes192cbcSpec :: Spec
aes192cbcSpec = do
C.encryptVsDecrypt aes192cbc
with ( "8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b"
, "000102030405060708090a0b0c0d0e0f") $
( "6bc1bee22e409f96e93d7e117393172a" :: Base16 )
`encryptsTo`
( "4f021db243bc633d7178183a9fa071e8" :: Base16 )
with ( "8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b"
, "4f021db243bc633d7178183a9fa071e8" ) $
( "ae2d8a571e03ac9c9eb76fac45af8e51" :: Base16 )
`encryptsTo`
( "b4d9ada9ad7dedf4e5e738763f69145a" :: Base16 )
with ( "8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b"
, "b4d9ada9ad7dedf4e5e738763f69145a" ) $
( "30c81c46a35ce411e5fbc1191a0a52ef" :: Base16 )
`encryptsTo`
( "571b242012fb7ae07fa9baac3df102e0" :: Base16 )
with ( "8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b"
, "571b242012fb7ae07fa9baac3df102e0") $
( "f69f2445df4f9b17ad2b417be66c3710" :: Base16 )
`encryptsTo`
( "08b0e27988598881d920a9e64f5615cd" :: Base16 )
where encryptsTo :: (Format fmt1, Format fmt2)
=> fmt1 -> fmt2 -> Key (AES 192 CBC) -> Spec
encryptsTo = C.encryptsTo aes192cbc
------------------ AES 192 CBC ---------------------------
aes256cbcSpec :: Spec
aes256cbcSpec = do
C.encryptVsDecrypt aes256cbc
with ( "603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4"
, "000102030405060708090a0b0c0d0e0f" ) $
( "6bc1bee22e409f96e93d7e117393172a" :: Base16)
`encryptsTo`
( "f58c4c04d6e5f1ba779eabfb5f7bfbd6" :: Base16)
with ( "603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4"
, "f58c4c04d6e5f1ba779eabfb5f7bfbd6" ) $
( "ae2d8a571e03ac9c9eb76fac45af8e51" :: Base16 )
`encryptsTo`
( "9cfc4e967edb808d679f777bc6702c7d" :: Base16 )
with ( "603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4"
, "9cfc4e967edb808d679f777bc6702c7d") $
( "30c81c46a35ce411e5fbc1191a0a52ef" :: Base16 )
`encryptsTo`
( "39f23369a9d9bacfa530e26304231461" :: Base16 )
with ( "603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4"
, "39f23369a9d9bacfa530e26304231461" ) $
( "f69f2445df4f9b17ad2b417be66c3710" :: Base16 )
`encryptsTo`
( "b2eb05e2c39be9fcda6c19078c6a9d1b" :: Base16 )
where encryptsTo :: (Format fmt1, Format fmt2)
=> fmt1 -> fmt2 -> Key (AES 256 CBC) -> Spec
encryptsTo = C.encryptsTo aes256cbc