diff options
author | Andrew Cady <d@jerkface.net> | 2019-07-16 20:33:23 -0400 |
---|---|---|
committer | Andrew Cady <d@jerkface.net> | 2019-07-16 20:33:23 -0400 |
commit | 8af08303e56fc109135e2ade91299338d03b57b0 (patch) | |
tree | 7131b086733c62c610e667638a3f7893b7304618 /lib/KeyRing | |
parent | 7a94f5103671011295f818bfcf30280423c44042 (diff) |
this compiles
Diffstat (limited to 'lib/KeyRing')
-rw-r--r-- | lib/KeyRing/BuildKeyDB.hs | 23 | ||||
-rw-r--r-- | lib/KeyRing/Types.hs | 25 |
2 files changed, 29 insertions, 19 deletions
diff --git a/lib/KeyRing/BuildKeyDB.hs b/lib/KeyRing/BuildKeyDB.hs index 461afa2..510c820 100644 --- a/lib/KeyRing/BuildKeyDB.hs +++ b/lib/KeyRing/BuildKeyDB.hs | |||
@@ -83,9 +83,9 @@ newtype IPsToWriteToHostsFile = IPsToWriteToHostsFile [SockAddr] | |||
83 | -- | 83 | -- |
84 | -- merge all keyrings, PEM files, and wallets into process memory. | 84 | -- merge all keyrings, PEM files, and wallets into process memory. |
85 | -- | 85 | -- |
86 | buildKeyDB :: InputFileContext -> Maybe String -> KeyRingOperation | 86 | buildKeyDB :: InputFileContext -> Maybe Fingerprint -> KeyRingOperation |
87 | -> IO (KikiCondition (({- db -} KeyDB | 87 | -> IO (KikiCondition (({- db -} KeyDB |
88 | ,{- grip -} Maybe String | 88 | ,{- grip -} Maybe Fingerprint |
89 | ,{- wk -} Maybe MappedPacket | 89 | ,{- wk -} Maybe MappedPacket |
90 | ,{- hs -} ({- hostdbs0 -}[Hosts.Hosts], | 90 | ,{- hs -} ({- hostdbs0 -}[Hosts.Hosts], |
91 | {- hostdbs -}[Hosts.Hosts], | 91 | {- hostdbs -}[Hosts.Hosts], |
@@ -128,7 +128,8 @@ buildKeyDB ctx grip0 keyring = do | |||
128 | ringPackets <- Map.traverseWithKey readp ringMap | 128 | ringPackets <- Map.traverseWithKey readp ringMap |
129 | let _ = ringPackets :: Map.Map InputFile (StreamInfo, Message) | 129 | let _ = ringPackets :: Map.Map InputFile (StreamInfo, Message) |
130 | 130 | ||
131 | let grip = grip0 `mplus` (show . fingerprint <$> fstkey) | 131 | let grip :: Maybe Fingerprint |
132 | grip = grip0 `mplus` (fingerprint <$> fstkey) | ||
132 | where | 133 | where |
133 | fstkey = do | 134 | fstkey = do |
134 | (_,Message ps) <- Map.lookup HomeSec ringPackets | 135 | (_,Message ps) <- Map.lookup HomeSec ringPackets |
@@ -223,7 +224,7 @@ buildKeyDB ctx grip0 keyring = do | |||
223 | guard $ all (==usage) $ drop 1 us | 224 | guard $ all (==usage) $ drop 1 us |
224 | -- TODO: KikiCondition reporting for spill/fill usage mismatch? | 225 | -- TODO: KikiCondition reporting for spill/fill usage mismatch? |
225 | -- TODO: parseSpec3 | 226 | -- TODO: parseSpec3 |
226 | let (topspec,subspec) = parseSpec grip usage | 227 | let (topspec,subspec) = parseSpec (Just grip) usage |
227 | ms = map fst $ filterMatches topspec (kkData db) | 228 | ms = map fst $ filterMatches topspec (kkData db) |
228 | cmd = initializer stream | 229 | cmd = initializer stream |
229 | return (n,subspec,ms,stream, cmd) | 230 | return (n,subspec,ms,stream, cmd) |
@@ -408,16 +409,16 @@ usageFromFilter _ = mzero | |||
408 | 409 | ||
409 | -- | Parse a key specification. | 410 | -- | Parse a key specification. |
410 | -- The first argument is a grip for the default working key. | 411 | -- The first argument is a grip for the default working key. |
411 | parseSpec :: Fingerprint -> String -> (KeySpec,Maybe String) | 412 | parseSpec :: Maybe Fingerprint -> String -> (KeySpec,Maybe String) |
412 | parseSpec wkgrip spec = | 413 | parseSpec wkgrip spec = |
413 | if not slashed | 414 | if not slashed |
414 | then | 415 | then |
415 | case prespec of | 416 | case prespec of |
416 | AnyMatch -> (KeyGrip "", Nothing) | 417 | AnyMatch -> (KeyGrip "", Nothing) |
417 | EmptyMatch -> error "Bad key spec." | 418 | EmptyMatch -> error "Bad key spec." |
418 | WorkingKeyMatch -> (KeyGrip wkgrip, Nothing) | 419 | WorkingKeyMatch -> (KeyGrip $ show wkgrip, Nothing) |
419 | SubstringMatch (Just KeyTypeField) tag -> (KeyGrip wkgrip, Just tag) | 420 | SubstringMatch (Just KeyTypeField) tag -> (KeyGrip $ show wkgrip, Just tag) |
420 | SubstringMatch Nothing str -> (KeyGrip wkgrip, Just str) | 421 | SubstringMatch Nothing str -> (KeyGrip $ show wkgrip, Just str) |
421 | SubstringMatch (Just UserIDField) ustr -> (KeyUidMatch ustr, Nothing) | 422 | SubstringMatch (Just UserIDField) ustr -> (KeyUidMatch ustr, Nothing) |
422 | FingerprintMatch fp -> (KeyGrip fp, Nothing) | 423 | FingerprintMatch fp -> (KeyGrip fp, Nothing) |
423 | else | 424 | else |
@@ -780,8 +781,8 @@ is40digitHex xs = ys == xs && length ys==40 | |||
780 | 781 | ||
781 | matchSpec :: KeySpec -> KeyData -> Bool | 782 | matchSpec :: KeySpec -> KeyData -> Bool |
782 | matchSpec (KeyGrip grip) (KeyData p _ _ _) | 783 | matchSpec (KeyGrip grip) (KeyData p _ _ _) |
783 | | matchpr grip (packet p)==grip = True | 784 | | matchpr' grip (packet p) = True |
784 | | otherwise = False | 785 | | otherwise = False |
785 | 786 | ||
786 | matchSpec (KeyTag key tag) (KeyData _ sigs _ _) = not . null $ filter match ps | 787 | matchSpec (KeyTag key tag) (KeyData _ sigs _ _) = not . null $ filter match ps |
787 | where | 788 | where |
@@ -791,7 +792,7 @@ matchSpec (KeyTag key tag) (KeyData _ sigs _ _) = not . null $ filter match ps | |||
791 | && has_issuer key p | 792 | && has_issuer key p |
792 | has_issuer key p = isJust $ do | 793 | has_issuer key p = isJust $ do |
793 | issuer <- signature_issuer p | 794 | issuer <- signature_issuer p |
794 | guard $ matchpr issuer key == issuer | 795 | guard $ matchpr' issuer key |
795 | has_tag tag p = tag `elem` mapMaybe usage (hashed_subpackets p) | 796 | has_tag tag p = tag `elem` mapMaybe usage (hashed_subpackets p) |
796 | || tag `elem` map usageString (mapMaybe keyflags (hashed_subpackets p)) | 797 | || tag `elem` map usageString (mapMaybe keyflags (hashed_subpackets p)) |
797 | 798 | ||
diff --git a/lib/KeyRing/Types.hs b/lib/KeyRing/Types.hs index 1177789..1a12a61 100644 --- a/lib/KeyRing/Types.hs +++ b/lib/KeyRing/Types.hs | |||
@@ -1,3 +1,4 @@ | |||
1 | {-# LANGUAGE StandaloneDeriving #-} | ||
1 | {-# LANGUAGE DeriveFunctor #-} | 2 | {-# LANGUAGE DeriveFunctor #-} |
2 | {-# LANGUAGE DeriveTraversable #-} | 3 | {-# LANGUAGE DeriveTraversable #-} |
3 | {-# LANGUAGE PatternSynonyms #-} | 4 | {-# LANGUAGE PatternSynonyms #-} |
@@ -119,7 +120,7 @@ data PassphraseSpec = PassphraseSpec | |||
119 | { passSpecRingFile :: Maybe FilePath | 120 | { passSpecRingFile :: Maybe FilePath |
120 | -- ^ If not Nothing, the passphrase is to be used for packets | 121 | -- ^ If not Nothing, the passphrase is to be used for packets |
121 | -- from this file. | 122 | -- from this file. |
122 | , passSpecKeySpec :: Maybe String | 123 | , passSpecKeySpec :: Maybe Fingerprint |
123 | -- ^ Non-Nothing value reserved for future use. | 124 | -- ^ Non-Nothing value reserved for future use. |
124 | -- (TODO: Use this to implement per-key passphrase associations). | 125 | -- (TODO: Use this to implement per-key passphrase associations). |
125 | , passSpecPassFile :: InputFile | 126 | , passSpecPassFile :: InputFile |
@@ -129,6 +130,9 @@ data PassphraseSpec = PassphraseSpec | |||
129 | | PassphraseMemoizer { passSpecTranscoder :: PacketTranscoder } | 130 | | PassphraseMemoizer { passSpecTranscoder :: PacketTranscoder } |
130 | | PassphraseAgent | 131 | | PassphraseAgent |
131 | 132 | ||
133 | deriving instance Ord Fingerprint | ||
134 | deriving instance Eq Fingerprint | ||
135 | |||
132 | instance Show PassphraseSpec where | 136 | instance Show PassphraseSpec where |
133 | show (PassphraseSpec a b c) = "PassphraseSpec "++show (a,b,c) | 137 | show (PassphraseSpec a b c) = "PassphraseSpec "++show (a,b,c) |
134 | show (PassphraseMemoizer _) = "PassphraseMemoizer" | 138 | show (PassphraseMemoizer _) = "PassphraseMemoizer" |
@@ -350,14 +354,19 @@ isTrust _ = False | |||
350 | -- matchpr fp = Data.List.Extra.takeEnd (length fp) | 354 | -- matchpr fp = Data.List.Extra.takeEnd (length fp) |
351 | -- | 355 | -- |
352 | matchpr :: Fingerprint -> Packet -> Bool | 356 | matchpr :: Fingerprint -> Packet -> Bool |
353 | matchpr fp k = p == show fp | 357 | matchpr fp k = matchpr' (show fp) k |
354 | where | ||
355 | p = reverse $ zipWith const (reverse (show $ fingerprint k)) (show fp) | ||
356 | 358 | ||
359 | matchpr' :: String -> Packet -> Bool | ||
360 | matchpr' fp k = p == fp | ||
361 | where | ||
362 | p = reverse $ zipWith const (reverse (show $ fingerprint k)) fp | ||
357 | 363 | ||
364 | matchpr'' :: String -> Packet -> String | ||
365 | matchpr'' fp k | matchpr' fp k = fp | ||
366 | matchpr'' fp k | otherwise = "" | ||
358 | 367 | ||
359 | data KeySpec = | 368 | data KeySpec = |
360 | KeyGrip Fingerprint -- fp: | 369 | KeyGrip String -- fp: |
361 | | KeyTag Packet String -- fp:????/t: | 370 | | KeyTag Packet String -- fp:????/t: |
362 | | KeyUidMatch String -- u: | 371 | | KeyUidMatch String -- u: |
363 | deriving Show | 372 | deriving Show |
@@ -428,8 +437,8 @@ seek_key :: KeySpec -> [Packet] -> ([Packet],[Packet]) | |||
428 | seek_key (KeyGrip grip) sec = (pre, subs) | 437 | seek_key (KeyGrip grip) sec = (pre, subs) |
429 | where | 438 | where |
430 | (pre,subs) = break pred sec | 439 | (pre,subs) = break pred sec |
431 | pred p@(SecretKeyPacket {}) = matchpr grip p | 440 | pred p@(SecretKeyPacket {}) = matchpr' grip p |
432 | pred p@(PublicKeyPacket {}) = matchpr grip p | 441 | pred p@(PublicKeyPacket {}) = matchpr' grip p |
433 | pred _ = False | 442 | pred _ = False |
434 | 443 | ||
435 | seek_key (KeyTag key tag) ps | 444 | seek_key (KeyTag key tag) ps |
@@ -442,7 +451,7 @@ seek_key (KeyTag key tag) ps | |||
442 | (as,bs) = break (\p -> isSignaturePacket p | 451 | (as,bs) = break (\p -> isSignaturePacket p |
443 | && has_tag tag p | 452 | && has_tag tag p |
444 | && isJust (signature_issuer p) | 453 | && isJust (signature_issuer p) |
445 | && matchpr (fromJust $ signature_issuer p) key == fromJust (signature_issuer p) ) | 454 | && matchpr' (fromJust $ signature_issuer p) key) |
446 | ps | 455 | ps |
447 | (rs,qs) = break isKey (reverse as) | 456 | (rs,qs) = break isKey (reverse as) |
448 | 457 | ||