From 9a289d6029f73624b0215d100b6295b51993ebee Mon Sep 17 00:00:00 2001 From: Joe Crayne Date: Sat, 16 May 2020 10:03:21 -0400 Subject: Fix --working issue with multiple secret keys. --- kiki.hs | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/kiki.hs b/kiki.hs index a4857f0..0bc7133 100644 --- a/kiki.hs +++ b/kiki.hs @@ -110,8 +110,15 @@ listKeys style pkts = listKeysFiltered style [] pkts -- Operates in List Monad... -- returns all output as a single string listKeysFiltered :: Foldable t => FingerprintStyle -> t [Char] -> [Packet] -> [Char] -listKeysFiltered style grips pkts = do - let fp = case style of +listKeysFiltered style grips pkts0 = do + let pkts | null grips = pkts0 + | otherwise = scrub pkts0 + scrub [] = [] + scrub xs = + let ys = dropWhile (\p -> not (isKey p && not (is_subkey p)) || not (matchAnyGrip p)) xs + (as,bs) = span (\p -> not (isKey p) || is_subkey p || matchAnyGrip p) ys + in as ++ scrub bs + fp = case style of FingerprintAuto -> \p -> show (fingerprint p) Fingerprint5 -> \p -> show (fingerprintv 5 p) masterkeys = filter (\k -> isKey k && not (is_subkey k)) pkts @@ -128,8 +135,9 @@ listKeysFiltered style grips pkts = do code (c,(m,s),_,_,_) = (fingerprint_material m,-c) ownerkey (_,(a,_),_,_,_) = a sameMaster (ownerkey->a) (ownerkey->b) = fingerprint_material a==fingerprint_material b + matchAnyGrip top = any (flip fpmatch top . Just) grips matchgrip _ | null grips = True - matchgrip ((code,(top,sub), kind, hashed,claimants):_) | any (flip fpmatch top . Just) grips = True + matchgrip ((code,(top,sub), kind, hashed,claimants):_) | matchAnyGrip top = True matchgrip _ = False gs = filter matchgrip $ groupBy sameMaster (sortBy (comparing code) as) singles = filter (\k -> fp k `notElem` map fp parents) masterkeys -- \\ parents -- cgit v1.2.3