hs-tls/Tests/PubKey.hs

33 lines
1,008 B
Haskell
Raw Normal View History

module Tests.PubKey
2012-03-28 07:06:13 +00:00
( arbitraryRSAPair
, globalRSAPair
, getGlobalRSAPair
) where
import Test.QuickCheck
import qualified Crypto.Random.AESCtr as RNG
import qualified Crypto.Cipher.RSA as RSA
import qualified Data.ByteString as B
import Control.Concurrent.MVar
import System.IO.Unsafe
arbitraryRSAPair :: Gen (RSA.PublicKey, RSA.PrivateKey)
arbitraryRSAPair = do
2012-03-28 07:06:13 +00:00
rng <- (either (error . show) id . RNG.make . B.pack) `fmap` vector 64
arbitraryRSAPairWithRNG rng
arbitraryRSAPairWithRNG rng = case RSA.generate rng 128 65537 of
2012-03-28 07:06:13 +00:00
Left _ -> error "couldn't generate RSA"
Right (keypair, _) -> return keypair
{-# NOINLINE globalRSAPair #-}
globalRSAPair :: MVar (RSA.PublicKey, RSA.PrivateKey)
globalRSAPair = unsafePerformIO (RNG.makeSystem >>= arbitraryRSAPairWithRNG >>= newMVar)
{-# NOINLINE getGlobalRSAPair #-}
getGlobalRSAPair :: (RSA.PublicKey, RSA.PrivateKey)
getGlobalRSAPair = unsafePerformIO (readMVar globalRSAPair)