From 7a94f5103671011295f818bfcf30280423c44042 Mon Sep 17 00:00:00 2001 From: Andrew Cady Date: Tue, 16 Jul 2019 17:51:31 -0400 Subject: use more Fingerprint WIP --- lib/KeyRing/BuildKeyDB.hs | 4 ++-- lib/KeyRing/Types.hs | 13 +++++++------ lib/Kiki.hs | 6 +++--- 3 files changed, 12 insertions(+), 11 deletions(-) (limited to 'lib') diff --git a/lib/KeyRing/BuildKeyDB.hs b/lib/KeyRing/BuildKeyDB.hs index 90f7292..461afa2 100644 --- a/lib/KeyRing/BuildKeyDB.hs +++ b/lib/KeyRing/BuildKeyDB.hs @@ -35,7 +35,7 @@ import Data.List import qualified Data.Map as Map import Data.Maybe import Data.OpenPGP -import Data.OpenPGP.Util (GenerateKeyParams (..), fingerprint, generateKey, pgpSign, verify) +import Data.OpenPGP.Util (Fingerprint, GenerateKeyParams (..), fingerprint, generateKey, pgpSign, verify) import Data.Time.Clock (UTCTime) @@ -408,7 +408,7 @@ usageFromFilter _ = mzero -- | Parse a key specification. -- The first argument is a grip for the default working key. -parseSpec :: String -> String -> (KeySpec,Maybe String) +parseSpec :: Fingerprint -> String -> (KeySpec,Maybe String) parseSpec wkgrip spec = if not slashed then diff --git a/lib/KeyRing/Types.hs b/lib/KeyRing/Types.hs index 5318b31..1177789 100644 --- a/lib/KeyRing/Types.hs +++ b/lib/KeyRing/Types.hs @@ -349,14 +349,15 @@ isTrust _ = False -- -- matchpr fp = Data.List.Extra.takeEnd (length fp) -- -matchpr :: String -> Packet -> String -matchpr fp k = reverse $ zipWith const (reverse (show $ fingerprint k)) fp - +matchpr :: Fingerprint -> Packet -> Bool +matchpr fp k = p == show fp + where + p = reverse $ zipWith const (reverse (show $ fingerprint k)) (show fp) data KeySpec = - KeyGrip String -- fp: + KeyGrip Fingerprint -- fp: | KeyTag Packet String -- fp:????/t: | KeyUidMatch String -- u: deriving Show @@ -427,8 +428,8 @@ seek_key :: KeySpec -> [Packet] -> ([Packet],[Packet]) seek_key (KeyGrip grip) sec = (pre, subs) where (pre,subs) = break pred sec - pred p@(SecretKeyPacket {}) = matchpr grip p == grip - pred p@(PublicKeyPacket {}) = matchpr grip p == grip + pred p@(SecretKeyPacket {}) = matchpr grip p + pred p@(PublicKeyPacket {}) = matchpr grip p pred _ = False seek_key (KeyTag key tag) ps diff --git a/lib/Kiki.hs b/lib/Kiki.hs index 7825c85..9934aaa 100644 --- a/lib/Kiki.hs +++ b/lib/Kiki.hs @@ -462,7 +462,7 @@ getSshKnownHosts peer@Peer{kd} = Char8.unlines taggedblobs data MyIdentity = MyIdentity { myGpgAddress :: SockAddr, - myGpgKeyGrip :: String + myGpgKeyGrip :: Fingerprint } installIpsecConf :: FileWriter -> MyIdentity -> [Peer] -> IO () @@ -495,7 +495,7 @@ getMyIdentity :: KeyRingRuntime -> Maybe MyIdentity getMyIdentity rt = do wk <- rtWorkingKey rt wkaddr <- gpgipv6addr . getHostnames <$> lookupKeyData (keykey wk) (rtKeyDB rt) - return $ MyIdentity wkaddr (show $ fingerprint wk) + return $ MyIdentity wkaddr (fingerprint wk) refreshCache :: KeyRingRuntime -> Maybe FilePath -> IO () refreshCache rt rootdir = do @@ -638,7 +638,7 @@ show_sshfp keyspec wkgrip db = do show_ssh :: String -> String -> KeyDB -> IO () show_ssh keyspec wkgrip db = either warn putStrLn $ show_ssh' keyspec wkgrip db -show_ssh' :: String -> String -> KeyDB -> Either String String +show_ssh' :: String -> Fingerprint -> KeyDB -> Either String String show_ssh' keyspec wkgrip db = do let s = parseSpec wkgrip keyspec flip (maybe . Left $ keyspec ++ ": not found") -- cgit v1.2.3