module Network.TLS.SRandom
( SRandomGen
, makeSRandomGen
, getRandomByte
, getRandomBytes
) where
import System.Random
import Control.Arrow (first)
import Data.Word
import Codec.Crypto.AES.Random
type SRandomGen = AESGen
makeSRandomGen :: IO SRandomGen
makeSRandomGen = newAESGen
getRandomByte :: SRandomGen -> (Word8, SRandomGen)
getRandomByte rng = first fromIntegral $ next rng
getRandomBytes :: SRandomGen -> Int -> ([Word8], SRandomGen)
getRandomBytes rng n =
let list = helper rng n in
(map fst list, snd $ last list)
where
helper _ 0 = []
helper g i =
let (b, g') = getRandomByte g in
(b, g') : helper g' (i1)