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)