diff options
author | Joey Hess <joeyh@joeyh.name> | 2015-06-01 13:52:23 -0400 |
---|---|---|
committer | Joey Hess <joeyh@joeyh.name> | 2015-06-01 13:52:23 -0400 |
commit | 39c13f91004b41166b786785083e78b34df0c48f (patch) | |
tree | bf5ea0acf27c9075a63d3b23b970c3ea44ecee64 /Utility/Gpg.hs | |
parent | 3a9ca30fa8740a57ea477243498339f9738102d6 (diff) |
remove Params constructor from Utility.SafeCommand
This removes a bit of complexity, and should make things faster
(avoids tokenizing Params string), and probably involve less garbage
collection.
In a few places, it was useful to use Params to avoid needing a list,
but that is easily avoided.
Problems noticed while doing this conversion:
* Some uses of Params "oneword" which was entirely unnecessary
overhead.
* A few places that built up a list of parameters with ++
and then used Params to split it!
Test suite passes.
Diffstat (limited to 'Utility/Gpg.hs')
-rw-r--r-- | Utility/Gpg.hs | 40 |
1 files changed, 22 insertions, 18 deletions
diff --git a/Utility/Gpg.hs b/Utility/Gpg.hs index a1b782d97..0a0b04a03 100644 --- a/Utility/Gpg.hs +++ b/Utility/Gpg.hs @@ -60,17 +60,20 @@ stdParams params = do {- Usual options for symmetric / public-key encryption. -} stdEncryptionParams :: Bool -> [CommandParam] -stdEncryptionParams symmetric = - [ enc symmetric - , Param "--force-mdc" +stdEncryptionParams symmetric = enc symmetric ++ + [ Param "--force-mdc" , Param "--no-textmode" ] where - enc True = Param "--symmetric" + enc True = [ Param "--symmetric" ] -- Force gpg to only encrypt to the specified recipients, not -- configured defaults. Recipients are assumed to be specified in -- elsewhere. - enc False = Params "--encrypt --no-encrypt-to --no-default-recipient" + enc False = + [ Param "--encrypt" + , Param "--no-encrypt-to" + , Param "--no-default-recipient" + ] {- Runs gpg with some params and returns its stdout, strictly. -} readStrict :: [CommandParam] -> IO String @@ -152,7 +155,7 @@ pipeLazy params feeder reader = do findPubKeys :: String -> IO KeyIds findPubKeys for = KeyIds . parse . lines <$> readStrict params where - params = [Params "--with-colons --list-public-keys", Param for] + params = [Param "--with-colons", Param "--list-public-keys", Param for] parse = mapMaybe (keyIdField . split ":") keyIdField ("pub":_:_:_:f:_) = Just f keyIdField _ = Nothing @@ -165,7 +168,7 @@ secretKeys :: IO (M.Map KeyId UserId) secretKeys = catchDefaultIO M.empty makemap where makemap = M.fromList . parse . lines <$> readStrict params - params = [Params "--with-colons --list-secret-keys --fixed-list-mode"] + params = [Param "--with-colons", Param "--list-secret-keys", Param "--fixed-list-mode"] parse = extract [] Nothing . map (split ":") extract c (Just keyid) (("uid":_:_:_:_:_:_:_:_:userid:_):rest) = extract ((keyid, decode_c userid):c) Nothing rest @@ -215,13 +218,14 @@ genSecretKey keytype passphrase userid keysize = - It is armored, to avoid newlines, since gpg only reads ciphers up to the - first newline. -} genRandom :: Bool -> Size -> IO String -genRandom highQuality size = checksize <$> readStrict - [ Params params - , Param $ show randomquality - , Param $ show size - ] +genRandom highQuality size = checksize <$> readStrict params where - params = "--gen-random --armor" + params = + [ Param "--gen-random" + , Param "--armor" + , Param $ show randomquality + , Param $ show size + ] -- See http://www.gnupg.org/documentation/manuals/gcrypt/Quality-of-random-numbers.html -- for the meaning of random quality levels. @@ -242,7 +246,7 @@ genRandom highQuality size = checksize <$> readStrict else shortread len shortread got = error $ unwords - [ "Not enough bytes returned from gpg", params + [ "Not enough bytes returned from gpg", show params , "(got", show got, "; expected", show expectedlength, ")" ] @@ -335,8 +339,8 @@ testHarness a = do dir <- mktmpdir $ base </> "gpgtmpXXXXXX" setEnv var dir True -- For some reason, recent gpg needs a trustdb to be set up. - _ <- pipeStrict [Params "--trust-model auto --update-trustdb"] [] - _ <- pipeStrict [Params "--import -q"] $ unlines + _ <- pipeStrict [Param "--trust-model auto", Param "--update-trustdb"] [] + _ <- pipeStrict [Param "--import", Param "-q"] $ unlines [testSecretKey, testKey] return dir @@ -356,13 +360,13 @@ checkEncryptionFile :: FilePath -> Maybe KeyIds -> IO Bool checkEncryptionFile filename keys = checkGpgPackets keys =<< readStrict params where - params = [Params "--list-packets --list-only", File filename] + params = [Param "--list-packets", Param "--list-only", File filename] checkEncryptionStream :: String -> Maybe KeyIds -> IO Bool checkEncryptionStream stream keys = checkGpgPackets keys =<< pipeStrict params stream where - params = [Params "--list-packets --list-only"] + params = [Param "--list-packets", Param "--list-only"] {- Parses an OpenPGP packet list, and checks whether data is - symmetrically encrypted (keys is Nothing), or encrypted to some |