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 +1/−1
- src/Codec/Crypto/SimpleAES.hs +14/−7
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