{- git-annex crypto types - - Copyright 2011-2015 Joey Hess - - Licensed under the GNU GPL version 3 or higher. -} module Types.Crypto ( Cipher(..), StorableCipher(..), EncryptedCipherVariant(..), KeyIds(..), Mac(..), readMac, showMac, defaultMac, calcMac, ) where import Utility.Hash import Utility.Gpg (KeyIds(..)) -- XXX ideally, this would be a locked memory region data Cipher = Cipher String | MacOnlyCipher String data StorableCipher = EncryptedCipher String EncryptedCipherVariant KeyIds | SharedCipher String deriving (Ord, Eq) data EncryptedCipherVariant = Hybrid | PubKey deriving (Ord, Eq) defaultMac :: Mac defaultMac = HmacSha1 -- MAC algorithms are shown as follows in the file names. showMac :: Mac -> String showMac HmacSha1 = "HMACSHA1" showMac HmacSha224 = "HMACSHA224" showMac HmacSha256 = "HMACSHA256" showMac HmacSha384 = "HMACSHA384" showMac HmacSha512 = "HMACSHA512" -- Read the MAC algorithm from the remote config. readMac :: String -> Maybe Mac readMac "HMACSHA1" = Just HmacSha1 readMac "HMACSHA224" = Just HmacSha224 readMac "HMACSHA256" = Just HmacSha256 readMac "HMACSHA384" = Just HmacSha384 readMac "HMACSHA512" = Just HmacSha512 readMac _ = Nothing