Blame tests/KAT_AES.hs

Packit 141393
{-# LANGUAGE OverloadedStrings #-}
Packit 141393
module KAT_AES (tests) where
Packit 141393
Packit 141393
import Imports
Packit 141393
import BlockCipher
Packit 141393
import Crypto.Cipher.Types
Packit 141393
import qualified Crypto.Cipher.AES as AES
Packit 141393
Packit 141393
import qualified KAT_AES.KATECB as KATECB
Packit 141393
import qualified KAT_AES.KATCBC as KATCBC
Packit 141393
import qualified KAT_AES.KATXTS as KATXTS
Packit 141393
import qualified KAT_AES.KATGCM as KATGCM
Packit 141393
import qualified KAT_AES.KATOCB3 as KATOCB3
Packit 141393
Packit 141393
{-
Packit 141393
instance Show AES.AES where
Packit 141393
    show _ = "AES"
Packit 141393
instance Arbitrary AES.AESIV where
Packit 141393
    arbitrary = AES.aesIV_ . B.pack <$> replicateM 16 arbitrary
Packit 141393
instance Arbitrary AES.AES where
Packit 141393
    arbitrary = AES.initAES . B.pack <$> replicateM 16 arbitrary
Packit 141393
-}
Packit 141393
Packit 141393
toKatECB (k,p,c) = KAT_ECB { ecbKey = k, ecbPlaintext = p, ecbCiphertext = c }
Packit 141393
toKatCBC (k,iv,p,c) = KAT_CBC { cbcKey = k, cbcIV = iv, cbcPlaintext = p, cbcCiphertext = c }
Packit 141393
toKatXTS (k1,k2,iv,p,_,c) = KAT_XTS { xtsKey1 = k1, xtsKey2 = k2, xtsIV = iv, xtsPlaintext = p, xtsCiphertext = c }
Packit 141393
toKatAEAD mode (k,iv,h,p,c,taglen,tag) =
Packit 141393
    KAT_AEAD { aeadMode       = mode
Packit 141393
             , aeadKey        = k
Packit 141393
             , aeadIV         = iv
Packit 141393
             , aeadHeader     = h
Packit 141393
             , aeadPlaintext  = p
Packit 141393
             , aeadCiphertext = c
Packit 141393
             , aeadTaglen     = taglen
Packit 141393
             , aeadTag        = tag
Packit 141393
             }
Packit 141393
toKatGCM = toKatAEAD AEAD_GCM
Packit 141393
toKatOCB = toKatAEAD AEAD_OCB
Packit 141393
Packit 141393
kats128 = defaultKATs
Packit 141393
    { kat_ECB  = map toKatECB KATECB.vectors_aes128_enc
Packit 141393
    , kat_CBC  = map toKatCBC KATCBC.vectors_aes128_enc
Packit 141393
    , kat_CFB  = [ KAT_CFB { cfbKey        = "\x2b\x7e\x15\x16\x28\xae\xd2\xa6\xab\xf7\x15\x88\x09\xcf\x4f\x3c"
Packit 141393
                           , cfbIV         = "\xC8\xA6\x45\x37\xA0\xB3\xA9\x3F\xCD\xE3\xCD\xAD\x9F\x1C\xE5\x8B"
Packit 141393
                           , cfbPlaintext  = "\x30\xc8\x1c\x46\xa3\x5c\xe4\x11\xe5\xfb\xc1\x19\x1a\x0a\x52\xef"
Packit 141393
                           , cfbCiphertext = "\x26\x75\x1f\x67\xa3\xcb\xb1\x40\xb1\x80\x8c\xf1\x87\xa4\xf4\xdf"
Packit 141393
                           }
Packit 141393
                 ]
Packit 141393
    , kat_XTS  = map toKatXTS KATXTS.vectors_aes128_enc
Packit 141393
    , kat_AEAD = map toKatGCM KATGCM.vectors_aes128_enc ++
Packit 141393
                 map toKatOCB KATOCB3.vectors_aes128_enc
Packit 141393
    }
Packit 141393
Packit 141393
kats192 = defaultKATs
Packit 141393
    { kat_ECB  = map toKatECB KATECB.vectors_aes192_enc
Packit 141393
    , kat_CBC  = map toKatCBC KATCBC.vectors_aes192_enc
Packit 141393
    }
Packit 141393
Packit 141393
kats256 = defaultKATs
Packit 141393
    { kat_ECB  = map toKatECB KATECB.vectors_aes256_enc
Packit 141393
    , kat_CBC  = map toKatCBC KATCBC.vectors_aes256_enc
Packit 141393
    , kat_XTS  = map toKatXTS KATXTS.vectors_aes256_enc
Packit 141393
    , kat_AEAD = map toKatGCM KATGCM.vectors_aes256_enc
Packit 141393
    }
Packit 141393
Packit 141393
tests = testGroup "AES"
Packit 141393
    [ testBlockCipher kats128 (undefined :: AES.AES128)
Packit 141393
    , testBlockCipher kats192 (undefined :: AES.AES192)
Packit 141393
    , testBlockCipher kats256 (undefined :: AES.AES256)
Packit 141393
{-
Packit 141393
    , testProperty "genCtr" $ \(key, iv1) ->
Packit 141393
        let (bs1, iv2)    = AES.genCounter key iv1 32
Packit 141393
            (bs2, iv3)    = AES.genCounter key iv2 32
Packit 141393
            (bsAll, iv3') = AES.genCounter key iv1 64
Packit 141393
         in (B.concat [bs1,bs2] == bsAll && iv3 == iv3')
Packit 141393
-}
Packit 141393
    ]