use more Internal.Compat to get UnsafeDoIO

This commit is contained in:
Vincent Hanquez 2015-04-05 07:46:18 +01:00
parent f43d340fd2
commit 57aa7ce098
3 changed files with 5 additions and 10 deletions

View File

@ -59,7 +59,7 @@ initialize nbRounds key nonce
| not (kLen `elem` [16,32]) = error "ChaCha: key length should be 128 or 256 bits" | not (kLen `elem` [16,32]) = error "ChaCha: key length should be 128 or 256 bits"
| not (nonceLen `elem` [8,12]) = error "ChaCha: nonce length should be 64 or 96 bits" | not (nonceLen `elem` [8,12]) = error "ChaCha: nonce length should be 64 or 96 bits"
| not (nbRounds `elem` [8,12,20]) = error "ChaCha: rounds should be 8, 12 or 20" | not (nbRounds `elem` [8,12,20]) = error "ChaCha: rounds should be 8, 12 or 20"
| otherwise = unsafePerformIO $ do | otherwise = unsafeDoIO $ do
stPtr <- createSecureMem 64 $ \stPtr -> stPtr <- createSecureMem 64 $ \stPtr ->
withBytePtr nonce $ \noncePtr -> withBytePtr nonce $ \noncePtr ->
withBytePtr key $ \keyPtr -> withBytePtr key $ \keyPtr ->

View File

@ -1,4 +1,4 @@
{-# LANGUAGE ForeignFunctionInterface, CPP #-} {-# LANGUAGE ForeignFunctionInterface #-}
-- | -- |
-- Module : Crypto.Cipher.RC4 -- Module : Crypto.Cipher.RC4
-- License : BSD-style -- License : BSD-style
@ -25,18 +25,12 @@ import Data.Byteable
import Data.SecureMem import Data.SecureMem
import Foreign.Ptr import Foreign.Ptr
import Foreign.ForeignPtr import Foreign.ForeignPtr
import System.IO.Unsafe
import Data.ByteString (ByteString) import Data.ByteString (ByteString)
import qualified Data.ByteString as B import qualified Data.ByteString as B
import qualified Data.ByteString.Internal as B import qualified Data.ByteString.Internal as B
---------------------------------------------------------------------- ----------------------------------------------------------------------
unsafeDoIO :: IO a -> a import Crypto.Internal.Compat
#if __GLASGOW_HASKELL__ > 704
unsafeDoIO = unsafeDupablePerformIO
#else
unsafeDoIO = unsafePerformIO
#endif
-- | The encryption state for RC4 -- | The encryption state for RC4
newtype State = State SecureMem newtype State = State SecureMem

View File

@ -18,6 +18,7 @@ import Data.SecureMem
import Data.ByteString (ByteString) import Data.ByteString (ByteString)
import qualified Data.ByteString.Internal as B import qualified Data.ByteString.Internal as B
import qualified Data.ByteString as B import qualified Data.ByteString as B
import Crypto.Internal.Compat
import Data.Byteable import Data.Byteable
import Data.Word import Data.Word
import Data.Bits (xor) import Data.Bits (xor)
@ -50,7 +51,7 @@ initialize nbRounds key nonce
| not (kLen `elem` [16,32]) = error "Salsa: key length should be 128 or 256 bits" | not (kLen `elem` [16,32]) = error "Salsa: key length should be 128 or 256 bits"
| not (nonceLen `elem` [8,12]) = error "Salsa: nonce length should be 64 or 96 bits" | not (nonceLen `elem` [8,12]) = error "Salsa: nonce length should be 64 or 96 bits"
| not (nbRounds `elem` [8,12,20]) = error "Salsa: rounds should be 8, 12 or 20" | not (nbRounds `elem` [8,12,20]) = error "Salsa: rounds should be 8, 12 or 20"
| otherwise = unsafePerformIO $ do | otherwise = unsafeDoIO $ do
stPtr <- createSecureMem 64 $ \stPtr -> stPtr <- createSecureMem 64 $ \stPtr ->
withBytePtr nonce $ \noncePtr -> withBytePtr nonce $ \noncePtr ->
withBytePtr key $ \keyPtr -> withBytePtr key $ \keyPtr ->