packages feed

cleveland-0.1.0: src/Hedgehog/Gen/Tezos/Crypto/Timelock.hs

-- SPDX-FileCopyrightText: 2021 Tocqueville Group
--
-- SPDX-License-Identifier: LicenseRef-MIT-TQ

module Hedgehog.Gen.Tezos.Crypto.Timelock
  ( genChestAndKey
  , genChestAndKeyWithParams
  , genTLTime
  ) where

import Hedgehog (MonadGen)
import qualified Hedgehog.Gen as Gen
import qualified Hedgehog.Range as Range

import Morley.Tezos.Crypto.Timelock

genChestAndKey :: MonadGen m => m (Chest, ChestKey)
genChestAndKey = fst <$> genChestAndKeyWithParams Nothing

genTLTime :: MonadGen m => m TLTime
genTLTime = unsafeMkTLTime <$> Gen.word64 (Range.linear 1000 10000)

genChestAndKeyWithParams
  :: MonadGen m
  => Maybe TLTime
  -> m ((Chest, ChestKey), (ByteString, TLTime))
genChestAndKeyWithParams mbtime = do
  seed <- Gen.enumBounded
  payload <- Gen.bytes (Range.linear 1 1024)
  time <- maybe genTLTime pure mbtime
  let (chest, key) = createChestAndChestKeyFromSeed seed payload time
  pure ((chest, key), (payload, time))