module Hedgehog.Gen.Tezos.Crypto.Timelock
( genChestAndKey
, genChestAndKeyWithParams
, genTLTime
) where
import Hedgehog (MonadGen)
import Hedgehog.Gen qualified as Gen
import Hedgehog.Range qualified as Range
import Morley.Tezos.Crypto.Timelock
genChestAndKey :: MonadGen m => m (Chest, ChestKey)
genChestAndKey :: forall (m :: * -> *). MonadGen m => m (Chest, ChestKey)
genChestAndKey = ((Chest, ChestKey), (ByteString, TLTime)) -> (Chest, ChestKey)
forall a b. (a, b) -> a
fst (((Chest, ChestKey), (ByteString, TLTime)) -> (Chest, ChestKey))
-> m ((Chest, ChestKey), (ByteString, TLTime))
-> m (Chest, ChestKey)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe TLTime -> m ((Chest, ChestKey), (ByteString, TLTime))
forall (m :: * -> *).
MonadGen m =>
Maybe TLTime -> m ((Chest, ChestKey), (ByteString, TLTime))
genChestAndKeyWithParams Maybe TLTime
forall a. Maybe a
Nothing
genTLTime :: MonadGen m => m TLTime
genTLTime :: forall (m :: * -> *). MonadGen m => m TLTime
genTLTime = Word16 -> TLTime
forall a. (Integral a, CheckIntSubType a Word62) => a -> TLTime
toTLTime (Word16 -> TLTime) -> m Word16 -> m TLTime
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Range Word16 -> m Word16
forall (m :: * -> *). MonadGen m => Range Word16 -> m Word16
Gen.word16 (Word16 -> Word16 -> Range Word16
forall a. Integral a => a -> a -> Range a
Range.linear Word16
1000 Word16
10000)
genChestAndKeyWithParams
:: MonadGen m
=> Maybe TLTime
-> m ((Chest, ChestKey), (ByteString, TLTime))
genChestAndKeyWithParams :: forall (m :: * -> *).
MonadGen m =>
Maybe TLTime -> m ((Chest, ChestKey), (ByteString, TLTime))
genChestAndKeyWithParams Maybe TLTime
mbtime = do
Int
seed <- m Int
forall (m :: * -> *) a. (MonadGen m, Enum a, Bounded a) => m a
Gen.enumBounded
ByteString
payload <- Range Int -> m ByteString
forall (m :: * -> *). MonadGen m => Range Int -> m ByteString
Gen.bytes (Int -> Int -> Range Int
forall a. Integral a => a -> a -> Range a
Range.linear Int
1 Int
1024)
TLTime
time <- m TLTime -> (TLTime -> m TLTime) -> Maybe TLTime -> m TLTime
forall b a. b -> (a -> b) -> Maybe a -> b
maybe m TLTime
forall (m :: * -> *). MonadGen m => m TLTime
genTLTime TLTime -> m TLTime
forall (f :: * -> *) a. Applicative f => a -> f a
pure Maybe TLTime
mbtime
let (Chest
chest, ChestKey
key) = Int -> ByteString -> TLTime -> (Chest, ChestKey)
createChestAndChestKeyFromSeed Int
seed ByteString
payload TLTime
time
((Chest, ChestKey), (ByteString, TLTime))
-> m ((Chest, ChestKey), (ByteString, TLTime))
forall (f :: * -> *) a. Applicative f => a -> f a
pure ((Chest
chest, ChestKey
key), (ByteString
payload, TLTime
time))