From 64a378768de5a827873b118d8edafeb77d0fa347 Mon Sep 17 00:00:00 2001 From: joe Date: Mon, 4 Nov 2013 01:57:54 -0500 Subject: Fail to output a public key if the specification is ambiguous. --- kiki.hs | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/kiki.hs b/kiki.hs index ab5a694..c76a89a 100644 --- a/kiki.hs +++ b/kiki.hs @@ -1095,7 +1095,8 @@ main = do let (pre, wk:subs) = seek_key (KeyGrip grip) sec (xs,ys) = seek_key (KeyTag wk sub) subs when (not (null ys)) $ do - let k = head ys + let (xs',ys') = seek_key (KeyTag wk sub) (tail ys) + k = head ys rsa = fromJust $ rsaKeyFromPacket k der = encodeASN1 DER (toASN1 rsa []) qq = Base64.encode (L.unpack der) @@ -1106,10 +1107,13 @@ main = do putStrLn $ show rsa putStrLn $ show der -} - putStr $ unlines (["-----BEGIN PUBLIC KEY-----"] - ++split64 qq - ++["-----END PUBLIC KEY-----"]) - return () + if null ys' + then + putStr $ unlines (["-----BEGIN PUBLIC KEY-----"] + ++split64 qq + ++["-----END PUBLIC KEY-----"]) + else + error "Key specification is ambiguous." doCmd cmd@(Add {}) = do ( homedir -- e3ozbhvej4jvlu43.onion/gpg/gnupghome @@ -1360,9 +1364,12 @@ seek_key (KeyGrip grip) sec = (pre, subs) pred p@(SecretKeyPacket {}) = matchpr grip p == grip pred _ = False -seek_key (KeyTag key tag) ps = if null bs || null qs +seek_key (KeyTag key tag) ps = if null bs then (ps,[]) - else (reverse (tail qs), head qs : reverse rs ++ bs) + else if null qs + then let (as',bs') = seek_key (KeyTag key tag) (tail bs) + in (as ++ (head bs:as'), bs') + else (reverse (tail qs), head qs : reverse rs ++ bs) where (as,bs) = break (\p -> isSignaturePacket p && has_tag tag p -- cgit v1.2.3