Files
cryptonum/generation/src/Generators.hs

46 lines
1.2 KiB
Haskell

module Generators
where
import Language.Rust.Data.Position
import Language.Rust.Syntax
import Numeric(showHex)
import System.Random(RandomGen,random,randomR)
toLit :: Word -> Expr Span
toLit i = Lit [] (Int Dec (fromIntegral i) Unsuffixed mempty) mempty
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 biggest = (2 ^ (size - 1)) - 1
smallest = - (2 ^ (size - 1))
(x, g') = randomR (smallest, biggest) g
in (x, 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"