diff options
-rw-r--r-- | Cost.hs | 9 | ||||
-rw-r--r-- | Encryption.hs | 5 |
2 files changed, 12 insertions, 2 deletions
@@ -1,4 +1,4 @@ -{-# LANGUAGE GeneralizedNewtypeDeriving #-} +{-# LANGUAGE GeneralizedNewtypeDeriving, MultiParamTypeClasses #-} module Cost where @@ -74,3 +74,10 @@ data UnknownPassword bruteForceLinearSearch :: Cost step -> CostCalc BruteForceOp t bruteForceLinearSearch stepcost e = castCost stepcost `raiseCostPower` reduceEntropy e 1 + +-- | Things that can be brute-forced expose a CostCalc. +class Bruteforceable t a where + getBruteCostCalc :: t -> CostCalc BruteForceOp a + +estimateBruteforceOf :: Bruteforceable t a => t -> Entropy a -> Cost BruteForceOp +estimateBruteforceOf t e = getBruteCostCalc t e diff --git a/Encryption.hs b/Encryption.hs index 98afdfd..23da288 100644 --- a/Encryption.hs +++ b/Encryption.hs @@ -1,4 +1,4 @@ -{-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE OverloadedStrings, MultiParamTypeClasses #-} module Encryption where @@ -19,6 +19,9 @@ data KeyEncryptionKey = KeyEncryptionKey (Cost DecryptionOp) (CostCalc BruteForceOp UnknownPassword) +instance Bruteforceable KeyEncryptionKey UnknownPassword where + getBruteCostCalc (KeyEncryptionKey _ _ c) = c + -- | The ExpensiveHash of the Password is combined with a -- RandomObstacle to form the AES key. Combination method is logical OR. genKeyEncryptionKey :: Tunables -> KeyIdent -> Password -> KeyEncryptionKey |