packages feed

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

-- SPDX-FileCopyrightText: 2021 Oxhead Alpha
-- SPDX-License-Identifier: LicenseRef-MIT-OA

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 = fst <$> genChestAndKeyWithParams Nothing

genTLTime :: MonadGen m => m TLTime
genTLTime = toTLTime <$> Gen.word16 (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))