diff options
Diffstat (limited to 'lib/KeyRing/Types.hs')
-rw-r--r-- | lib/KeyRing/Types.hs | 25 |
1 files changed, 17 insertions, 8 deletions
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 | ||