packages feed

crypto-rng-0.3.0.1: src/Crypto/RNG/Utils.hs

module Crypto.RNG.Utils where

import Control.Monad
import Data.Primitive.SmallArray

import Crypto.RNG

-- | Generate random string of specified length that contains allowed chars.
randomString :: CryptoRNG m => Int -> [Char] -> m String
randomString n allowedList = map (indexSmallArray allowed)
  <$> replicateM n (randomR (0, sizeofSmallArray allowed - 1))
  where
    allowed = smallArrayFromList allowedList