From 23b5146f0fbf1f4d566cbbe3ae0d6f68c1b0da0c Mon Sep 17 00:00:00 2001 From: Vincent Hanquez Date: Sat, 23 May 2015 12:02:05 +0100 Subject: [PATCH] [number] remove unnecessary random number generator --- Crypto/Number/Generate.hs | 26 +++----------------------- 1 file changed, 3 insertions(+), 23 deletions(-) diff --git a/Crypto/Number/Generate.hs b/Crypto/Number/Generate.hs index b27fae7..7d2bd12 100644 --- a/Crypto/Number/Generate.hs +++ b/Crypto/Number/Generate.hs @@ -11,7 +11,6 @@ module Crypto.Number.Generate , generateMax , generateBetween , generateOfSize - , generateBits ) where import Crypto.Internal.Imports @@ -22,7 +21,7 @@ import Control.Monad (when) import Foreign.Ptr import Foreign.Storable import Data.Bits ((.|.), (.&.), shiftL, complement, testBit) -import Crypto.Internal.ByteArray (Bytes, ScrubbedBytes) +import Crypto.Internal.ByteArray (ScrubbedBytes) import qualified Crypto.Internal.ByteArray as B @@ -126,25 +125,6 @@ generateMax range generateBetween :: MonadRandom m => Integer -> Integer -> m Integer generateBetween low high = (low +) <$> generateMax (high - low + 1) --- | generate a positive integer of a specific size in bits. --- the number of bits need to be multiple of 8. It will always returns --- an integer that is close to 2^(1+bits/8) by setting the 2 highest bits to 1. +-- | generate a positive integer of a specific bit size. generateOfSize :: MonadRandom m => Int -> m Integer -generateOfSize bits = os2ip . setHighest <$> getRandomBytes (bits `div` 8) - where - setHighest :: ScrubbedBytes -> ScrubbedBytes - setHighest ran = case B.unpack ran of - [] -> B.empty - (w:ws) -> B.pack ((w .|. 0xc0) : ws) - --- | Generate a number with the specified number of bits -generateBits :: MonadRandom m => Int -> m Integer -generateBits nbBits = modF . os2ipBytes <$> getRandomBytes nbBytes' - where (nbBytes, strayBits) = nbBits `divMod` 8 - nbBytes' | strayBits == 0 = nbBytes - | otherwise = nbBytes + 1 - modF | strayBits == 0 = id - | otherwise = (.&.) (2^nbBits - 1) - -os2ipBytes :: Bytes -> Integer -os2ipBytes = os2ip +generateOfSize bits = generateParams bits (Just SetTwoHighest) False