packages feed

libsecp256k1-0.1.1: src/Crypto/Secp256k1/Gen.hs

module Crypto.Secp256k1.Gen where

import Crypto.Secp256k1
import Hedgehog (MonadGen)
import Hedgehog.Gen (bytes, discard, prune)
import Hedgehog.Range (singleton)


secKeyGen :: (MonadGen m) => m SecKey
secKeyGen = do
    bs <- prune . bytes $ singleton 32
    maybe discard pure $ importSecKey bs


pubKeyXYGen :: (MonadGen m) => m PubKeyXY
pubKeyXYGen = derivePubKey <$> secKeyGen


pubKeyXOGen :: (MonadGen m) => m PubKeyXO
pubKeyXOGen = fst . xyToXO <$> pubKeyXYGen


keyPairGen :: (MonadGen m) => m KeyPair
keyPairGen = keyPairCreate <$> secKeyGen


tweakGen :: (MonadGen m) => m Tweak
tweakGen = do
    bs <- prune $ bytes (singleton 32)
    maybe discard pure (importTweak bs)