-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/


-- | Crypto Pseudo Random Number Generator using AES in counter mode.
--   
--   Simple crypto pseudo-random-number-generator with really good
--   randomness property.
--   
--   Using ent, a randomness property maker on one 1Mb sample: Entropy =
--   7.999837 bits per byte. Optimum compression would reduce the size of
--   this 1048576 byte file by 0 percent. Chi square distribution for
--   1048576 samples is 237.02 Arithmetic mean value of data bytes is
--   127.3422 (127.5 = random) Monte Carlo value for Pi is 3.143589568
--   (error 0.06 percent)
--   
--   Compared to urandom with the same sampling: Entropy = 7.999831 bits
--   per byte. Optimum compression would reduce the size of this 1048576
--   byte file by 0 percent. Chi square distribution for 1048576 samples is
--   246.63 Arithmetic mean value of data bytes is 127.6347 (127.5 =
--   random). Monte Carlo value for Pi is 3.132465868 (error 0.29 percent).
@package cprng-aes
@version 0.3.4


-- | this CPRNG is an AES based counter system.
--   
--   the internal size of fields are: 16 bytes IV, 16 bytes counter, 32
--   bytes key
--   
--   each block are generated the following way: aes (IV <a>xor</a>
--   counter) -&gt; 16 bytes output
module Crypto.Random.AESCtr
data AESRNG

-- | make an AES RNG from a bytestring seed. the bytestring need to be at
--   least 64 bytes. if the bytestring is longer, the extra bytes will be
--   ignored and will not take part in the initialization.
--   
--   use <a>makeSystem</a> to not have to deal with the generator seed.
make :: ByteString -> Maybe AESRNG

-- | Initialize a new AES RNG using the system entropy.
makeSystem :: IO AESRNG

-- | Generate bytes using the cprg in parameter.
--   
--   If the number of bytes requested is really high, it's preferable to
--   use <a>genRandomBytes</a> for better memory efficiency.
genRandomBytes :: CPRG g => Int -> g -> (ByteString, g)
instance RandomGen AESRNG
instance CPRG AESRNG
instance CryptoRandomGen AESRNG
instance Show AESRNG
