diff options
author | joe <joe@blackbird> | 2014-01-15 19:06:43 -0500 |
---|---|---|
committer | joe <joe@blackbird> | 2014-01-15 19:06:43 -0500 |
commit | 214907bae05c29ccf24e106eb7f9bb9b77c161e6 (patch) | |
tree | cc1061eaa9b124efb891edb93e1ef5461543176f /kiki.hs | |
parent | f6e2f03b31f3c9760cb4e1251218fb9372527c96 (diff) |
Added signature checks to --show-whose-key
Diffstat (limited to 'kiki.hs')
-rw-r--r-- | kiki.hs | 20 |
1 files changed, 16 insertions, 4 deletions
@@ -2141,10 +2141,22 @@ whoseKey :: RSAPublicKey -> KeyDB -> [KeyData] | |||
2141 | whoseKey rsakey db = filter matchkey (Map.elems db) | 2141 | whoseKey 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 | ||
2149 | kiki_usage = do | 2161 | kiki_usage = do |
2150 | putStr . unlines $ | 2162 | putStr . unlines $ |