summaryrefslogtreecommitdiff
path: root/lib/KeyRing/Types.hs
diff options
context:
space:
mode:
Diffstat (limited to 'lib/KeyRing/Types.hs')
-rw-r--r--lib/KeyRing/Types.hs25
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
133deriving instance Ord Fingerprint
134deriving instance Eq Fingerprint
135
132instance Show PassphraseSpec where 136instance 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--
352matchpr :: Fingerprint -> Packet -> Bool 356matchpr :: Fingerprint -> Packet -> Bool
353matchpr fp k = p == show fp 357matchpr fp k = matchpr' (show fp) k
354 where
355 p = reverse $ zipWith const (reverse (show $ fingerprint k)) (show fp)
356 358
359matchpr' :: String -> Packet -> Bool
360matchpr' fp k = p == fp
361 where
362 p = reverse $ zipWith const (reverse (show $ fingerprint k)) fp
357 363
364matchpr'' :: String -> Packet -> String
365matchpr'' fp k | matchpr' fp k = fp
366matchpr'' fp k | otherwise = ""
358 367
359data KeySpec = 368data 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])
428seek_key (KeyGrip grip) sec = (pre, subs) 437seek_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
435seek_key (KeyTag key tag) ps 444seek_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