pwstore-fast for GHC 7.4

This commit is contained in:
Michael Snoyman 2013-09-17 11:49:08 +03:00
parent 963034327b
commit 2c33fd91d4

View File

@ -0,0 +1,47 @@
diff -ru orig/Crypto/PasswordStore.hs new/Crypto/PasswordStore.hs
--- orig/Crypto/PasswordStore.hs 2013-09-17 11:48:49.178111970 +0300
+++ new/Crypto/PasswordStore.hs 2013-09-17 11:48:49.000000000 +0300
@@ -1,4 +1,5 @@
{-# LANGUAGE OverloadedStrings, BangPatterns #-}
+{-# LANGUAGE CPP #-}
-- |
-- Module : Crypto.PasswordStore
-- Copyright : (c) Peter Scott, 2011
@@ -149,8 +150,8 @@
-> ByteString
-- ^ The encoded message
hmacSHA256 secret msg =
- let digest = SHA.hmacSha256 (BL.fromStrict secret) (BL.fromStrict msg)
- in BL.toStrict . SHA.bytestringDigest $ digest
+ let digest = SHA.hmacSha256 (fromStrict secret) (fromStrict msg)
+ in toStrict . SHA.bytestringDigest $ digest
-- | PBKDF2 key-derivation function.
-- For details see @http://tools.ietf.org/html/rfc2898@.
@@ -403,3 +404,26 @@
where (a, g') = randomR ('\NUL', '\255') g
salt = makeSalt $ B.pack $ map fst (rands gen 16)
newgen = snd $ last (rands gen 16)
+
+#if !MIN_VERSION_base(4, 6, 0)
+-- | Strict version of 'modifySTRef'
+modifySTRef' :: STRef s a -> (a -> a) -> ST s ()
+modifySTRef' ref f = do
+ x <- readSTRef ref
+ let x' = f x
+ x' `seq` writeSTRef ref x'
+#endif
+
+#if MIN_VERSION_bytestring(0, 10, 0)
+toStrict :: BL.ByteString -> BS.ByteString
+toStrict = BL.toStrict
+
+fromStrict :: BS.ByteString -> BL.ByteString
+fromStrict = BL.fromStrict
+#else
+toStrict :: BL.ByteString -> BS.ByteString
+toStrict = BS.concat . BL.toChunks
+
+fromStrict :: BS.ByteString -> BL.ByteString
+fromStrict = BL.fromChunks . return
+#endif