move cryptographicallySecure into Backend type
This is groundwork for external backends, but also makes sense to keep this information with the rest of a Backend's implementation. Also, removed isVerifiable. I noticed that the same information is encoded by whether a Backend implements verifyKeyContent or not.
This commit is contained in:
parent
4be5567372
commit
172743728e
10 changed files with 38 additions and 41 deletions
|
@ -2,7 +2,7 @@
|
|||
-
|
||||
- Most things should not need this, using Types instead
|
||||
-
|
||||
- Copyright 2010-2019 Joey Hess <id@joeyh.name>
|
||||
- Copyright 2010-2020 Joey Hess <id@joeyh.name>
|
||||
-
|
||||
- Licensed under the GNU AGPL version 3 or higher.
|
||||
-}
|
||||
|
@ -18,7 +18,8 @@ import Utility.FileSystemEncoding
|
|||
data BackendA a = Backend
|
||||
{ backendVariety :: KeyVariety
|
||||
, getKey :: Maybe (KeySource -> MeterUpdate -> a Key)
|
||||
-- Verifies the content of a key.
|
||||
-- Verifies the content of a key using a hash. This does not need
|
||||
-- to be cryptographically secure.
|
||||
, verifyKeyContent :: Maybe (Key -> FilePath -> a Bool)
|
||||
-- Checks if a key can be upgraded to a better form.
|
||||
, canUpgradeKey :: Maybe (Key -> Bool)
|
||||
|
@ -28,6 +29,8 @@ data BackendA a = Backend
|
|||
-- Checks if a key is known (or assumed) to always refer to the
|
||||
-- same data.
|
||||
, isStableKey :: Key -> Bool
|
||||
-- Checks if a key is verified using a cryptographically secure hash.
|
||||
, isCryptographicallySecure :: Key -> Bool
|
||||
}
|
||||
|
||||
instance Show (BackendA a) where
|
||||
|
|
32
Types/Key.hs
32
Types/Key.hs
|
@ -23,8 +23,6 @@ module Types.Key (
|
|||
HashSize(..),
|
||||
hasExt,
|
||||
sameExceptExt,
|
||||
cryptographicallySecure,
|
||||
isVerifiable,
|
||||
formatKeyVariety,
|
||||
parseKeyVariety,
|
||||
) where
|
||||
|
@ -262,36 +260,6 @@ sameExceptExt (SHA1Key _) (SHA1Key _) = True
|
|||
sameExceptExt (MD5Key _) (MD5Key _) = True
|
||||
sameExceptExt _ _ = False
|
||||
|
||||
{- Is the Key variety cryptographically secure, such that no two differing
|
||||
- file contents can be mapped to the same Key? -}
|
||||
cryptographicallySecure :: KeyVariety -> Bool
|
||||
cryptographicallySecure (SHA2Key _ _) = True
|
||||
cryptographicallySecure (SHA3Key _ _) = True
|
||||
cryptographicallySecure (SKEINKey _ _) = True
|
||||
cryptographicallySecure (Blake2bKey _ _) = True
|
||||
cryptographicallySecure (Blake2bpKey _ _) = True
|
||||
cryptographicallySecure (Blake2sKey _ _) = True
|
||||
cryptographicallySecure (Blake2spKey _ _) = True
|
||||
cryptographicallySecure _ = False
|
||||
|
||||
{- Is the Key variety backed by a hash, which allows verifying content?
|
||||
- It does not have to be cryptographically secure against eg birthday
|
||||
- attacks.
|
||||
-}
|
||||
isVerifiable :: KeyVariety -> Bool
|
||||
isVerifiable (SHA2Key _ _) = True
|
||||
isVerifiable (SHA3Key _ _) = True
|
||||
isVerifiable (SKEINKey _ _) = True
|
||||
isVerifiable (Blake2bKey _ _) = True
|
||||
isVerifiable (Blake2bpKey _ _) = True
|
||||
isVerifiable (Blake2sKey _ _) = True
|
||||
isVerifiable (Blake2spKey _ _) = True
|
||||
isVerifiable (SHA1Key _) = True
|
||||
isVerifiable (MD5Key _) = True
|
||||
isVerifiable WORMKey = False
|
||||
isVerifiable URLKey = False
|
||||
isVerifiable (OtherKey _) = False
|
||||
|
||||
formatKeyVariety :: KeyVariety -> S.ByteString
|
||||
formatKeyVariety v = case v of
|
||||
SHA2Key sz e -> adde e (addsz sz "SHA")
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue