Portability | Good |
---|---|
Stability | experimental |
Maintainer | Vincent Hanquez <vincent@snarc.org> |
Safe Haskell | Safe-Inferred |
- class CPRG g where
- cprgNeedReseed :: g -> Int
- cprgSupplyEntropy :: g -> ByteString -> g
- cprgGenBytes :: g -> Int -> (ByteString, g)
- genRandomBytes :: CPRG g => g -> Int -> (ByteString, g)
- withRandomBytes :: CPRG g => g -> Int -> (ByteString -> a) -> (a, g)
- getSystemEntropy :: Int -> IO ByteString
Documentation
A class of Cryptographic Secure Random generator.
The main difference with the generic haskell RNG is that it return bytes instead of integer.
It is quite similar to the CryptoRandomGen class in crypto-api except that error are not returned to the user. Instead the user is suppose to handle reseeding by using the NeedReseed and SupplyEntropy methods. For other type of errors, the user is expect to generate bytes with the parameters bounds explicity defined here.
The CPRG need to be able to generate up to 2^20 bytes in one call,
cprgNeedReseed :: g -> IntSource
Provide a way to query the CPRG to calculate when new entropy is required to be supplied so the CPRG doesn't repeat output, and break assumptions. This returns the number of bytes before which supply entropy should have been called.
cprgSupplyEntropy :: g -> ByteString -> gSource
Supply entropy to the CPRG, that can be used now or later to reseed the CPRG. This should be used in conjunction to NeedReseed to know when to supply entropy.
cprgGenBytes :: g -> Int -> (ByteString, g)Source
Generate bytes using the CPRG and the number specified.
For user of the API, it's recommended to use genRandomBytes instead of this method directly.
:: CPRG g | |
=> g | CPRG to use |
-> Int | number of bytes to return |
-> (ByteString, g) |
Generate bytes using the cprg in parameter.
arbitrary limit the number of bytes that can be generated in one go to 10mb.
withRandomBytes :: CPRG g => g -> Int -> (ByteString -> a) -> (a, g)Source
this is equivalent to using Control.Arrow first
with genBytes.
namely it generate len bytes and map the bytes to the function
f
getSystemEntropy :: Int -> IO ByteStringSource
Return system entropy using the entropy package getEntropy