summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjoe <joe@blackbird>2014-01-15 19:06:43 -0500
committerjoe <joe@blackbird>2014-01-15 19:06:43 -0500
commit214907bae05c29ccf24e106eb7f9bb9b77c161e6 (patch)
treecc1061eaa9b124efb891edb93e1ef5461543176f
parentf6e2f03b31f3c9760cb4e1251218fb9372527c96 (diff)
Added signature checks to --show-whose-key
-rw-r--r--kiki.hs20
1 files changed, 16 insertions, 4 deletions
diff --git a/kiki.hs b/kiki.hs
index e79c9f3..a71ed28 100644
--- a/kiki.hs
+++ b/kiki.hs
@@ -2141,10 +2141,22 @@ whoseKey :: RSAPublicKey -> KeyDB -> [KeyData]
2141whoseKey rsakey db = filter matchkey (Map.elems db) 2141whoseKey rsakey db = filter matchkey (Map.elems db)
2142 where 2142 where
2143 matchkey (KeyData k _ _ subs) = 2143 matchkey (KeyData k _ _ subs) =
2144 not . null . filter ismatch $ Map.elems subs 2144 not . null . filter (ismatch k) $ Map.elems subs
2145 2145
2146 ismatch (SubKey mp sigs) = 2146 ismatch k (SubKey mp sigs) =
2147 Just rsakey == rsaKeyFromPacket (packet mp) 2147 Just rsakey == rsaKeyFromPacket (packet mp)
2148 && any (check (packet k) (packet mp)) sigs
2149
2150 check k sub (sig,_) = not . null $ do
2151 s <- signatures . Message $ [k,sub,packet sig]
2152 fw <- signatures_over $ verify (Message [k]) s
2153 subsig <- mapMaybe backsig (unhashed_subpackets sub)
2154 subsig_so <- signatures (Message [k,sub,subsig])
2155 guard ( isSubkeySignature subsig_so
2156 && isSameKey (topkey subsig_so) k
2157 && isSameKey (subkey subsig_so) sub )
2158 s2 <- signatures . Message $ [k,sub,subsig]
2159 signatures_over $ verify (Message [sub]) s2
2148 2160
2149kiki_usage = do 2161kiki_usage = do
2150 putStr . unlines $ 2162 putStr . unlines $