diff --git a/Crypto/Number/Generate.hs b/Crypto/Number/Generate.hs index 7d2bd12..d3fd23c 100644 --- a/Crypto/Number/Generate.hs +++ b/Crypto/Number/Generate.hs @@ -10,7 +10,6 @@ module Crypto.Number.Generate , generateParams , generateMax , generateBetween - , generateOfSize ) where import Crypto.Internal.Imports @@ -123,8 +122,6 @@ generateMax range -- | generate a number between the inclusive bound [low,high]. generateBetween :: MonadRandom m => Integer -> Integer -> m Integer -generateBetween low high = (low +) <$> generateMax (high - low + 1) - --- | generate a positive integer of a specific bit size. -generateOfSize :: MonadRandom m => Int -> m Integer -generateOfSize bits = generateParams bits (Just SetTwoHighest) False +generateBetween low high + | low == 1 = generateMax high >>= \r -> if r == 0 then generateBetween low high else return r + | otherwise = (low +) <$> generateMax (high - low + 1) diff --git a/Crypto/Number/Prime.hs b/Crypto/Number/Prime.hs index e405de8..89a92da 100644 --- a/Crypto/Number/Prime.hs +++ b/Crypto/Number/Prime.hs @@ -53,7 +53,7 @@ generatePrime bits = do -- as such it shouldn't be used if this number is supposed to be kept safe. generateSafePrime :: MonadRandom m => Int -> m Integer generateSafePrime bits = do - sp <- generateOfSize bits + sp <- generateParams bits (Just SetTwoHighest) True let p = findPrimeFromWith (\i -> isProbablyPrime (2*i+1)) (sp `div` 2) return (2*p+1)