packages feed

age-0.0.1.0: test/Test/Crypto/Age/Identity/Gen.hs

module Test.Crypto.Age.Identity.Gen
  ( genScryptIdentity
  , genX25519Identity
  , genIdentity
  ) where

import Crypto.Age.Identity
  ( Identity (..)
  , ScryptIdentity (..)
  , X25519Identity (..)
  , bytesToX25519Identity
  )
import Hedgehog ( Gen )
import qualified Hedgehog.Gen as Gen
import qualified Hedgehog.Range as Range
import Prelude
import Test.Crypto.Age.Scrypt.Gen ( genPassphrase, genWorkFactor )
import Test.Gen ( genByteArray )

genScryptIdentity :: Gen ScryptIdentity
genScryptIdentity =
  ScryptIdentity
    <$> genPassphrase
    <*> genWorkFactor

genX25519Identity :: Gen X25519Identity
genX25519Identity = do
  bs <- genByteArray (Range.singleton 32)
  case bytesToX25519Identity bs of
    Nothing -> fail "failed to generate a X25519Identity"
    Just x -> pure x

genIdentity :: Gen Identity
genIdentity =
  Gen.choice
    [ IdentityScrypt <$> genScryptIdentity
    , IdentityX25519 <$> genX25519Identity
    ]