clientsession 0.8.0.1 → 0.8.0.2
raw patch · 3 files changed
+14/−11 lines, 3 filesdep ~cprng-aesdep ~hspecPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: cprng-aes, hspec
API changes (from Hackage documentation)
Files
- clientsession.cabal +2/−2
- src/Web/ClientSession.hs +5/−0
- tests/runtests.hs +7/−9
clientsession.cabal view
@@ -1,5 +1,5 @@ name: clientsession-version: 0.8.0.1+version: 0.8.0.2 license: BSD3 license-file: LICENSE author: Michael Snoyman <michael@snoyman.com>, Felipe Lessa <felipe.lessa@gmail.com>@@ -41,7 +41,7 @@ build-depends: base , bytestring >= 0.9 , cryptocipher >= 0.2.5- , hspec >= 1.2+ , hspec >= 1.3 , QuickCheck >= 2 , HUnit , transformers
src/Web/ClientSession.hs view
@@ -1,6 +1,7 @@ {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE ForeignFunctionInterface #-} {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE CPP #-} --------------------------------------------------------- -- -- |@@ -268,7 +269,11 @@ aesRNG = do (bs, count) <- I.atomicModifyIORef aesRef $ \(ASt rng count) ->+#if MIN_VERSION_cprng_aes(0, 3, 2)+ let (bs', rng') = genRandomBytes 16 rng+#else let (bs', rng') = genRandomBytes rng 16+#endif in (ASt rng' (succ count), (bs', count)) when (count == threshold) $ void $ forkIO aesReseed either (error . show) return $ decode bs
tests/runtests.hs view
@@ -1,11 +1,9 @@ {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# OPTIONS_GHC -fno-warn-orphans #-}-import Test.HUnit-import Test.Hspec.Monadic-import Test.QuickCheck hiding (property)-import Test.Hspec.QuickCheck-import Test.Hspec.HUnit ()+import Test.HUnit (assertBool)+import Test.Hspec+import Test.QuickCheck import Control.Monad (replicateM) import qualified Data.ByteString as S@@ -51,16 +49,16 @@ propAESChanges :: MyKey -> MyIV -> S.ByteString -> Bool propAESChanges (MyKey key) (MyIV iv) bs = encrypt key iv bs /= bs -caseSpecific :: Assertion+caseSpecific :: Expectation caseSpecific = do let s = S8.pack $ show [("lo\ENQ\143XAq","\DC2\207\226\DC1;.z56|\203\222"),("\USnu#\139\ETXB\201 ","l"),("\RS\b,zM2U\184\191F)\EOT\220S\NUL","O\\\GSd\247\246\n\EOT\SYN\182U2G"),("\219\NAK\217\CAN\252","ym\STX\188\232?\\\145"),("\239k","\vRZP\a\DC2F>"),("\FS\180P &\RS\174zSL\\?@","p\170\237vZ|\GS>\SYNk\176n\r"),("","\199D\DC3\200m)"),("6\152tVhB\246)9","\ENQdfU\SUB"),("I\ACK\181\NUL","\129\&6s\130q\US)oR1\197\FSp\US\SYN0"),("\183\200<\250","\211 \131g4\207N\155"),("\248O6k\CANK\135\234.","`\205!+&Z&9\DLE\244\214HP\SI\161"),("\"I'\ACK\149 \CAN\197","\141N\201\SO\204\\o.\128\148")] key <- getDefaultKey iv <- randomIV- Just s @=? decrypt key (encrypt key iv s)+ decrypt key (encrypt key iv s) `shouldBe` Just s let s' = S.concat $ replicate 500 s- Just s' @=? decrypt key (encrypt key iv s')+ decrypt key (encrypt key iv s') `shouldBe` Just s' -caseRandomIV :: Assertion+caseRandomIV :: Expectation caseRandomIV = do evalStateT (replicateM_ 10000 go) Set.empty where