-- this is probably not a very good random interface, nor it has any good randomness capability.
-- the module is just here until a really good CPRNG implementation come up..
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' (i-1)