packages feed

SimpleAES 0.4 → 0.4.1

raw patch · 2 files changed

+15/−8 lines, 2 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

+ Codec.Crypto.SimpleAES: decryptMsg' :: Mode -> Key -> ByteString -> Either String ByteString

Files

SimpleAES.cabal view
@@ -3,7 +3,7 @@ Description:   A simplified binding to Brian Gladman's AES implementation,   including a copy of that implementation-Version:             0.4+Version:             0.4.1 License:             BSD3 License-file:        COPYING Copyright:           Copyright (c) 2009 University of Tromsø,
src/Codec/Crypto/SimpleAES.hs view
@@ -4,7 +4,7 @@     , Direction(..)     , Key, IV     , newIV, randomKey, crypt-    , encryptMsg, encryptMsg', decryptMsg+    , encryptMsg, encryptMsg', decryptMsg, decryptMsg'     ) where  import qualified Codec.Crypto.AES.IO as AES@@ -62,18 +62,25 @@                             , encrypted ]  decryptMsg :: Mode -> Key -> BL.ByteString -> BL.ByteString-decryptMsg mode key bs-    = unsafePerformIO $-      do when (BL.length iv /= ivLength)  $ error "Codec.Crypto.SimpleAES.decryptMsg: Invalid IV length. Message garbled."-         when (BL.length lenStr /= 8)     $ error "Codec.Crypto.SimpleAES.decryptMsg: Invalid encoding. Message garbled."-         when (BL.length encrypted < len) $ error "Codec.Crypto.SimpleAES.decryptMsg: Invalid size. Message garbled."-         when (BL.length encrypted `mod` 16 /= 0) $ error "Codec.Crypto.SimpleAES.decryptMsg: Invalid padding. Message garbled."+decryptMsg mode key bs = either error id $ decryptMsg' mode key bs++decryptMsg' :: Mode -> Key -> BL.ByteString -> Either String BL.ByteString+decryptMsg' mode key bs+    = check (BL.length iv == ivLength) "Codec.Crypto.SimpleAES.decryptMsg: Invalid IV length. Message garbled."+    $ check (BL.length lenStr == 8) "Codec.Crypto.SimpleAES.decryptMsg: Invalid encoding. Message garbled."+    $ check (BL.length encrypted >= len) "Codec.Crypto.SimpleAES.decryptMsg: Invalid size. Message garbled."+    $ check (BL.length encrypted `mod` 16 == 0) "Codec.Crypto.SimpleAES.decryptMsg: Invalid padding. Message garbled."+    $ Right $ unsafePerformIO $ do          ctx <- AES.newCtx mode key (B.concat $ BL.toChunks iv) Decrypt          chunks <- unsafeInterleaveIO $ lazyCrypt ctx (repack encrypted)          return $ BL.take len (BL.fromChunks chunks)     where (iv, bs') = BL.splitAt ivLength bs           (lenStr,encrypted) = BL.splitAt 8 bs'           len = decode lenStr+          check :: Bool -> String -> Either String a -> Either String a+          check False s _ = Left s+          check True _ f = f+   -- | Encryption/decryption for lazy bytestrings. The input string is zero-padded to