summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoe Crayne <joe@jerkface.net>2019-07-01 23:16:32 -0400
committerJoe Crayne <joe@jerkface.net>2019-07-01 23:16:32 -0400
commit5d5ce0e97107619b8e33c76585d7629f106ad3c8 (patch)
tree3492c9de1a740154654a6ba1cced90e879f47219
parentae8792ee7c51da15e52f30475c17ce589f940509 (diff)
New debugging option: --trace-verify
-rw-r--r--kiki.cabal8
-rw-r--r--kiki.hs9
-rw-r--r--lib/Data/OpenPGP/Util.hs37
-rw-r--r--lib/Kiki.hs5
-rw-r--r--testkiki/testkiki.hs12
5 files changed, 66 insertions, 5 deletions
diff --git a/kiki.cabal b/kiki.cabal
index 5cd9ccf..293cc30 100644
--- a/kiki.cabal
+++ b/kiki.cabal
@@ -99,7 +99,8 @@ library
99 ControlMaybe, 99 ControlMaybe,
100 Compat, 100 Compat,
101 PacketTranscoder, 101 PacketTranscoder,
102 Transforms 102 Transforms,
103 Data.OpenPGP.Util
103 Build-Depends: base >=4.6.0.0, 104 Build-Depends: base >=4.6.0.0,
104 asn1-encoding, 105 asn1-encoding,
105 asn1-types, 106 asn1-types,
@@ -145,8 +146,11 @@ Test-suite testkiki
145 , filepath 146 , filepath
146 , bytestring 147 , bytestring
147 , time 148 , time
148 , cryptohash
149 , kiki 149 , kiki
150 if !flag(cryptonite)
151 Build-Depends: cryptohash
152 else
153 Build-Depends: cryptonite, memory
150 if flag(unixEnv) 154 if flag(unixEnv)
151 Build-depends: base < 4.7.0, unix 155 Build-depends: base < 4.7.0, unix
152 else 156 else
diff --git a/kiki.hs b/kiki.hs
index 6be2a8d..ddfb05b 100644
--- a/kiki.hs
+++ b/kiki.hs
@@ -659,6 +659,9 @@ kiki_usage bExport bImport bSecret cmd = putStr $
659 [" --help" 659 [" --help"
660 ," Gives usage information" 660 ," Gives usage information"
661 ,"" 661 ,""
662 ," --trace-verify"
663 ," For debugging, stderr traces for every signature verification."
664 ,""
662 ] ++ documentHomeDir ++ [""] 665 ] ++ documentHomeDir ++ [""]
663 ++ documentPassphraseFDFlag bExport bImport bSecret 666 ++ documentPassphraseFDFlag bExport bImport bSecret
664 showwk :: [String] 667 showwk :: [String]
@@ -1745,7 +1748,11 @@ commands =
1745main :: IO () 1748main :: IO ()
1746main = do 1749main = do
1747 dotlock_init 1750 dotlock_init
1748 args_raw <- getArgs 1751 args_raw0 <- getArgs
1752 args_raw <- case break (=="--trace-verify") args_raw0 of
1753 (as,[]) -> return as
1754 (as,_:bs) -> do setVerifyFlag True
1755 return $ as ++ bs
1749 case args_raw of 1756 case args_raw of
1750 1757
1751 [] -> kiki "show" ["--working"] 1758 [] -> kiki "show" ["--working"]
diff --git a/lib/Data/OpenPGP/Util.hs b/lib/Data/OpenPGP/Util.hs
new file mode 100644
index 0000000..a51ce64
--- /dev/null
+++ b/lib/Data/OpenPGP/Util.hs
@@ -0,0 +1,37 @@
1{-# OPTIONS_GHC -Wno-duplicate-exports #-}
2{-# LANGUAGE PackageImports #-}
3module Data.OpenPGP.Util
4 ( module P
5 , verify
6 , setVerifyFlag
7 ) where
8
9import Data.Bool
10import Data.IORef
11import Debug.Trace
12import GHC.Stack
13import System.IO.Unsafe
14
15import qualified "openpgp-util" Data.OpenPGP.Util as P
16import "openpgp-util" Data.OpenPGP.Util hiding (verify)
17import Data.OpenPGP
18
19traceVerifyFlag :: IORef Bool
20traceVerifyFlag = unsafePerformIO $ newIORef False
21{-# NOINLINE traceVerifyFlag #-}
22
23getVerifyFlag :: Bool
24getVerifyFlag = unsafePerformIO $ readIORef traceVerifyFlag
25{-# NOINLINE getVerifyFlag #-}
26
27setVerifyFlag :: Bool -> IO ()
28setVerifyFlag x = writeIORef traceVerifyFlag x
29
30shortCallStack :: [([Char], SrcLoc)] -> String
31shortCallStack [] = ""
32shortCallStack ((_,loc):_) = (srcLocFile loc) ++ ":" ++ show (srcLocStartLine loc)
33
34verify :: HasCallStack => Message -> SignatureOver -> SignatureOver
35verify msg sig =
36 bool id (trace $ "verify " ++ shortCallStack (getCallStack callStack)) getVerifyFlag
37 $ P.verify msg sig
diff --git a/lib/Kiki.hs b/lib/Kiki.hs
index 64e2d7d..6481b58 100644
--- a/lib/Kiki.hs
+++ b/lib/Kiki.hs
@@ -1,6 +1,9 @@
1{-# LANGUAGE CPP #-} 1{-# LANGUAGE CPP #-}
2{-# LANGUAGE OverloadedStrings #-} 2{-# LANGUAGE OverloadedStrings #-}
3module Kiki where 3module Kiki
4 ( module Kiki
5 , setVerifyFlag
6 ) where
4 7
5import Control.Applicative 8import Control.Applicative
6import Control.Arrow 9import Control.Arrow
diff --git a/testkiki/testkiki.hs b/testkiki/testkiki.hs
index d588336..10487cf 100644
--- a/testkiki/testkiki.hs
+++ b/testkiki/testkiki.hs
@@ -24,12 +24,22 @@ import qualified Data.ByteString.Char8 as B
24import Data.Time.Clock 24import Data.Time.Clock
25import Data.Time.Clock.POSIX 25import Data.Time.Clock.POSIX
26import Data.IORef 26import Data.IORef
27#if !defined(VERSION_cryptonite)
27import Crypto.Hash.SHA1 (hash) 28import Crypto.Hash.SHA1 (hash)
29#else
30import qualified Crypto.Hash
31import Crypto.Hash.Algorithms
32import Data.ByteArray (convert)
33#endif
28import System.IO.Unsafe (unsafePerformIO) 34import System.IO.Unsafe (unsafePerformIO)
29import ProcessUtils 35import ProcessUtils
30import Data.Bool 36import Data.Bool
31import Data.Char 37import Data.Char
32import KeyRing 38import KeyRing hiding (try)
39
40#if defined(VERSION_cryptonite)
41hash x = convert (Crypto.Hash.hash x :: Crypto.Hash.Digest SHA1) :: B.ByteString
42#endif
33 43
34#if !MIN_VERSION_base(4,7,0) 44#if !MIN_VERSION_base(4,7,0)
35setEnv k v = System.Posix.Env.setEnv k v True 45setEnv k v = System.Posix.Env.setEnv k v True