diff options
author | Joey Hess <joey@kitenet.net> | 2013-09-04 23:16:33 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2013-09-04 23:16:33 -0400 |
commit | ebe2ebbcaf82ef3377fae220581c00785a5940fe (patch) | |
tree | 8254dd3ea112155be459311e7e9e0bb3f123c8d6 | |
parent | 12b7ec4527383dffcc08524571c014e58315fdc3 (diff) |
keep Utility.Gpg free of dependencies on git-annex
-rw-r--r-- | Crypto.hs | 26 | ||||
-rw-r--r-- | Utility/Gpg.hs | 24 |
2 files changed, 25 insertions, 25 deletions
@@ -8,6 +8,8 @@ - Licensed under the GNU GPL version 3 or higher. -} +{-# LANGUAGE FlexibleInstances #-} + module Crypto ( Cipher, KeyIds(..), @@ -22,8 +24,8 @@ module Crypto ( feedBytes, readBytes, encrypt, - decrypt, - Gpg.getGpgEncParams, + decrypt, + getGpgEncParams, prop_HmacSha1WithCipher_sane ) where @@ -31,11 +33,13 @@ module Crypto ( import qualified Data.ByteString.Lazy as L import Data.ByteString.Lazy.UTF8 (fromString) import Control.Applicative +import qualified Data.Map as M import Common.Annex import qualified Utility.Gpg as Gpg import Types.Key import Types.Crypto +import Types.Remote {- The beginning of a Cipher is used for MAC'ing; the remainder is used - as the GPG symmetric encryption passphrase when using the hybrid @@ -175,3 +179,21 @@ prop_HmacSha1WithCipher_sane :: Bool prop_HmacSha1WithCipher_sane = known_good == macWithCipher' HmacSha1 "foo" "bar" where known_good = "46b4ec586117154dacd49d664e5d63fdc88efb51" + +{- Return some options suitable for GnuPG encryption, symmetric or not. -} +class LensGpgEncParams a where getGpgEncParams :: a -> [CommandParam] + +{- Extract the GnuPG options from a pair of a Remote Config and a Remote + - Git Config. If the remote is configured to use public-key encryption, + - look up the recipient keys and add them to the option list. -} +instance LensGpgEncParams (RemoteConfig, RemoteGitConfig) where + getGpgEncParams (c,gc) = map Param (remoteAnnexGnupgOptions gc) ++ recipients + where + recipients = case M.lookup "encryption" c of + Just "pubkey" -> Gpg.pkEncTo $ maybe [] (split ",") $ + M.lookup "cipherkeys" c + _ -> [] + +{- Extract the GnuPG options from a Remote. -} +instance LensGpgEncParams (RemoteA a) where + getGpgEncParams r = getGpgEncParams (config r, gitconfig r) diff --git a/Utility/Gpg.hs b/Utility/Gpg.hs index 5056e1ce2..e27de7218 100644 --- a/Utility/Gpg.hs +++ b/Utility/Gpg.hs @@ -5,7 +5,7 @@ - Licensed under the GNU GPL version 3 or higher. -} -{-# LANGUAGE CPP, FlexibleInstances #-} +{-# LANGUAGE CPP #-} module Utility.Gpg where @@ -24,10 +24,6 @@ import Utility.Env import Utility.Tmp #endif -import qualified Data.Map as M -import Types.GitConfig -import Types.Remote hiding (setup) - newtype KeyIds = KeyIds { keyIds :: [String] } deriving (Ord, Eq) @@ -36,28 +32,10 @@ newtype KeyIds = KeyIds { keyIds :: [String] } gpgcmd :: FilePath gpgcmd = fromMaybe "gpg" SysConfig.gpg -{- Return some options suitable for GnuPG encryption, symmetric or not. -} -class LensGpgEncParams a where getGpgEncParams :: a -> [CommandParam] - -{- Extract the GnuPG options from a pair of a Remote Config and a Remote - - Git Config. If the remote is configured to use public-key encryption, - - look up the recipient keys and add them to the option list. -} -instance LensGpgEncParams (RemoteConfig, RemoteGitConfig) where - getGpgEncParams (c,gc) = map Param (remoteAnnexGnupgOptions gc) ++ recipients - where - recipients = case M.lookup "encryption" c of - Just "pubkey" -> pkEncTo $ maybe [] (split ",") $ - M.lookup "cipherkeys" c - _ -> [] - -- Generate an argument list to asymetrically encrypt to the given recipients. pkEncTo :: [String] -> [CommandParam] pkEncTo = concatMap (\r -> [Param "--recipient", Param r]) -{- Extract the GnuPG options from a Remote. -} -instance LensGpgEncParams (RemoteA a) where - getGpgEncParams r = getGpgEncParams (config r, gitconfig r) - stdParams :: [CommandParam] -> IO [String] stdParams params = do #ifndef mingw32_HOST_OS |