module Convex.ThreatModel.All where

import Convex.ThreatModel (ThreatModel, getThreatModelName)
import Convex.ThreatModel.DatumBloat (datumByteBloatAttack, datumListBloatAttack)
import Convex.ThreatModel.DoubleSatisfaction (doubleSatisfaction)
import Convex.ThreatModel.DuplicateListEntry (duplicateListEntryAttack)
import Convex.ThreatModel.InputDuplication (inputDuplication)
import Convex.ThreatModel.InvalidDatumIndex (invalidDatumIndexAttack)
import Convex.ThreatModel.LargeData (largeDataAttack)
import Convex.ThreatModel.LargeValue (largeValueAttack)
import Convex.ThreatModel.MissingOutputDatum (missingOutputDatumAttack)
import Convex.ThreatModel.MutualExclusion (mutualExclusionAttack)
import Convex.ThreatModel.NegativeInteger (negativeIntegerAttack)
import Convex.ThreatModel.OutputDatumHashMissing (outputDatumHashMissingAttack)
import Convex.ThreatModel.RedeemerAssetSubstitution (redeemerAssetSubstitution)
import Convex.ThreatModel.SelfReferenceInjection (selfReferenceInjection)
import Convex.ThreatModel.SignatoryRemoval (signatoryRemoval)
import Convex.ThreatModel.TimeBoundManipulation (timeBoundManipulation)
import Convex.ThreatModel.TokenForgery (tokenForgeryAttack)
import Convex.ThreatModel.UnprotectedScriptOutput (unprotectedScriptOutput)
import Convex.ThreatModel.ValueUnderpayment (valueUnderpaymentAttack)
import Data.Maybe (mapMaybe)

-- | A list of all the threat models that don't take parameters.
allThreatModels :: [ThreatModel ()]
allThreatModels :: [ThreatModel ()]
allThreatModels =
  [ ThreatModel ()
datumListBloatAttack
  , ThreatModel ()
datumByteBloatAttack
  , ThreatModel ()
doubleSatisfaction
  , ThreatModel ()
duplicateListEntryAttack
  , ThreatModel ()
inputDuplication
  , ThreatModel ()
invalidDatumIndexAttack
  , ThreatModel ()
largeDataAttack
  , ThreatModel ()
largeValueAttack
  , ThreatModel ()
missingOutputDatumAttack
  , ThreatModel ()
mutualExclusionAttack
  , ThreatModel ()
negativeIntegerAttack
  , ThreatModel ()
outputDatumHashMissingAttack
  , ThreatModel ()
redeemerAssetSubstitution
  , ThreatModel ()
selfReferenceInjection
  , ThreatModel ()
signatoryRemoval
  , ThreatModel ()
timeBoundManipulation
  , ThreatModel ()
tokenForgeryAttack
  , ThreatModel ()
unprotectedScriptOutput
  , ThreatModel ()
valueUnderpaymentAttack
  ]

allThreatModelsNames :: [String]
allThreatModelsNames :: [String]
allThreatModelsNames = (ThreatModel () -> Maybe String) -> [ThreatModel ()] -> [String]
forall a b. (a -> Maybe b) -> [a] -> [b]
mapMaybe ThreatModel () -> Maybe String
forall a. ThreatModel a -> Maybe String
getThreatModelName [ThreatModel ()]
allThreatModels