packages feed

crypto-random 0.0.8 → 0.0.9

raw patch · 3 files changed

+50/−25 lines, 3 filesdep ~vectorPVP ok

version bump matches the API change (PVP)

Dependency ranges changed: vector

API changes (from Hackage documentation)

Files

Crypto/Random/Entropy.hs view
@@ -90,7 +90,7 @@  -- | Create a new entropy pool of a specific size ----- While you can create as many entropy pool as you want, the pool can be shared between multiples RNGs.+-- You can create as many entropy pools as you want, and a given pool can be shared between multiples RNGs. createEntropyPoolWith :: Int -> [EntropyBackend] -> IO EntropyPool createEntropyPoolWith poolSize backends = do     when (null backends) $ fail "cannot get any source of entropy on this system"
Crypto/Random/Entropy/Windows.hs view
@@ -8,31 +8,23 @@ -- code originally from the entropy package and thus is: --   Copyright (c) Thomas DuBuisson. ---{-# LANGUAGE ForeignFunctionInterface #-}+{-# LANGUAGE CPP, ForeignFunctionInterface #-} module Crypto.Random.Entropy.Windows     ( WinCryptoAPI     ) where  import Data.Int (Int32)-import Data.Word (Word32, Word8)+import Data.Word (Word8, Word32, Word64) import Foreign.C.String (CString, withCString) import Foreign.Ptr (Ptr, nullPtr) import Foreign.Marshal.Alloc (alloca) import Foreign.Marshal.Utils (toBool) import Foreign.Storable (peek)+import System.Win32.Types (getLastError)  import Crypto.Random.Entropy.Source --- Define the constants we need from WinCrypt.h -msDefProv :: String-msDefProv = "Microsoft Base Cryptographic Provider v1.0" -provRSAFull :: Word32-provRSAFull = 1--cryptVerifyContext :: Word32-cryptVerifyContext = 0xF0000000- -- | handle to windows crypto API for random generation data WinCryptoAPI = WinCryptoAPI @@ -43,26 +35,52 @@     entropyGather WinCryptoAPI ptr n = do         mctx <- cryptAcquireCtx         case mctx of-            Nothing  -> error "cannot re-grab win crypto api"+            Nothing  -> do+                lastError <- getLastError+                fail $ "cannot re-grab win crypto api: error " ++ show lastError             Just ctx -> do                 r <- cryptGenRandom ctx ptr n                 cryptReleaseCtx ctx                 return r     entropyClose WinCryptoAPI = return () ++type DWORD = Word32+type BOOL  = Int32+type BYTE  = Word8++#if defined(ARCH_X86)+# define WINDOWS_CCONV stdcall type CryptCtx = Word32+#elif defined(ARCH_X86_64)+# define WINDOWS_CCONV ccall+type CryptCtx = Word64+#else+# error Unknown mingw32 arch+#endif --- Declare the required CryptoAPI imports -foreign import stdcall unsafe "CryptAcquireContextA"-   c_cryptAcquireCtx :: Ptr Word32 -> CString -> CString -> Word32 -> Word32 -> IO CryptCtx-foreign import stdcall unsafe "CryptGenRandom"-   c_cryptGenRandom :: CryptCtx -> Word32 -> Ptr Word8 -> IO Int32-foreign import stdcall unsafe "CryptReleaseContext"-   c_cryptReleaseCtx :: CryptCtx -> Word32 -> IO Int32+-- Declare the required CryptoAPI imports+foreign import WINDOWS_CCONV unsafe "CryptAcquireContextA"+   c_cryptAcquireCtx :: Ptr CryptCtx -> CString -> CString -> DWORD -> DWORD -> IO BOOL+foreign import WINDOWS_CCONV unsafe "CryptGenRandom"+   c_cryptGenRandom :: CryptCtx -> DWORD -> Ptr BYTE -> IO BOOL+foreign import WINDOWS_CCONV unsafe "CryptReleaseContext"+   c_cryptReleaseCtx :: CryptCtx -> DWORD -> IO BOOL ++-- Define the constants we need from WinCrypt.h+msDefProv :: String+msDefProv = "Microsoft Base Cryptographic Provider v1.0"++provRSAFull :: DWORD+provRSAFull = 1++cryptVerifyContext :: DWORD+cryptVerifyContext = 0xF0000000+ cryptAcquireCtx :: IO (Maybe CryptCtx)-cryptAcquireCtx = -    alloca $ \handlePtr -> +cryptAcquireCtx =+    alloca $ \handlePtr ->     withCString msDefProv $ \provName -> do         r <- toBool `fmap` c_cryptAcquireCtx handlePtr nullPtr provName provRSAFull cryptVerifyContext         if r@@ -79,4 +97,6 @@     success <- toBool `fmap` c_cryptReleaseCtx h 0     if success         then return ()-        else fail "cryptReleaseCtx"+        else do+            lastError <- getLastError+            fail $ "cryptReleaseCtx: error " ++ show lastError
crypto-random.cabal view
@@ -1,5 +1,5 @@ Name:                crypto-random-Version:             0.0.8+Version:             0.0.9 Description:         Simple cryptographic random related types License:             BSD3 License-file:        LICENSE@@ -32,7 +32,12 @@   else     Build-Depends:  unix     Other-modules:  Crypto.Random.Entropy.Unix-    ++  if arch(i386)+    cpp-options: -DARCH_X86+  if arch(x86_64)+    cpp-options: -DARCH_X86_64+   if arch(x86_64)     cpp-options:    -DSUPPORT_RDRAND     Other-modules:  Crypto.Random.Entropy.RDRand