Files
cryptonum/generation/src/Generators.hs

43 lines
1.0 KiB
Haskell

module Generators
where
import Numeric(showHex)
import System.Random(RandomGen,random)
generateNum :: RandomGen g => g -> Word -> (Integer, g)
generateNum g size =
let (x, g') = random g
x' = x `mod` (2 ^ size)
in (x', g')
generateSignedNum :: RandomGen g => g -> Word -> (Integer, g)
generateSignedNum g size =
let (x, g') = random g
s :: Integer
(s, g'') = random g'
x' = x `mod` (2 ^ size)
sign = if even s then 1 else -1
in (x' * sign, g'')
modulate :: (Integral a, Integral b) => a -> b -> Integer
modulate x size = x' `mod` (2 ^ size')
where
x', size' :: Integer
size' = fromIntegral size
x' = fromIntegral x
modulate' :: (Num a, Integral a, Integral b) => a -> b -> Integer
modulate' x size = signum x' * ((abs x') `mod` (2 ^ size'))
where
x', size' :: Integer
size' = fromIntegral size
x' = fromIntegral x
showX :: Integer -> String
showX x | x < 0 = "-" ++ showX (abs x)
| otherwise = showHex x ""
showB :: Bool -> String
showB False = "0"
showB True = "1"