packages feed

hOpenPGP 1.2.1 → 1.3

raw patch · 6 files changed

+189/−159 lines, 6 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

- Data.Conduit.OpenPGP.Keyring: instance Show UidOrUat
+ Codec.Encryption.OpenPGP.KeyringParser: A :: [UserAttrSubPacket] -> UidOrUat
+ Codec.Encryption.OpenPGP.KeyringParser: I :: String -> UidOrUat
+ Codec.Encryption.OpenPGP.KeyringParser: broken :: Int -> Parser [Pkt] Pkt
+ Codec.Encryption.OpenPGP.KeyringParser: brokenPubSubkey :: Parser [Pkt] [(Pkt, [SignaturePayload])]
+ Codec.Encryption.OpenPGP.KeyringParser: brokenSecSubkey :: Parser [Pkt] [(Pkt, [SignaturePayload])]
+ Codec.Encryption.OpenPGP.KeyringParser: brokenTK :: Int -> Parser [Pkt] (Maybe TK)
+ Codec.Encryption.OpenPGP.KeyringParser: data UidOrUat
+ Codec.Encryption.OpenPGP.KeyringParser: finalizeParsing :: Monoid s => ([(r, s)], Maybe (Maybe (r -> r), Parser s r)) -> (([(r, s)], Maybe (Maybe (r -> r), Parser s r)), [r])
+ Codec.Encryption.OpenPGP.KeyringParser: instance Show UidOrUat
+ Codec.Encryption.OpenPGP.KeyringParser: parseAChunk :: (Monoid s, Show s) => Parser s r -> s -> ([(r, s)], Maybe (Maybe (r -> r), Parser s r)) -> (([(r, s)], Maybe (Maybe (r -> r), Parser s r)), [r])
+ Codec.Encryption.OpenPGP.KeyringParser: parseTK :: Bool -> Parser [Pkt] (Maybe TK)
+ Codec.Encryption.OpenPGP.KeyringParser: pkPayload :: Parser [Pkt] (PKPayload, Maybe SKAddendum)
+ Codec.Encryption.OpenPGP.KeyringParser: publicTK :: Bool -> Parser [Pkt] (Maybe TK)
+ Codec.Encryption.OpenPGP.KeyringParser: rawOrSignedOrRevokedSecSubkey :: Bool -> Parser [Pkt] [(Pkt, [SignaturePayload])]
+ Codec.Encryption.OpenPGP.KeyringParser: secretTK :: Bool -> Parser [Pkt] (Maybe TK)
+ Codec.Encryption.OpenPGP.KeyringParser: signature :: Bool -> [SigType] -> Parser [Pkt] [SignaturePayload]
+ Codec.Encryption.OpenPGP.KeyringParser: signedOrRevokedPubSubkey :: Bool -> Parser [Pkt] [(Pkt, [SignaturePayload])]
+ Codec.Encryption.OpenPGP.KeyringParser: signedUAt :: Bool -> Parser [Pkt] (UidOrUat, [SignaturePayload])
+ Codec.Encryption.OpenPGP.KeyringParser: signedUID :: Bool -> Parser [Pkt] (UidOrUat, [SignaturePayload])
+ Codec.Encryption.OpenPGP.KeyringParser: skPayload :: Parser [Pkt] (PKPayload, Maybe SKAddendum)
+ Codec.Encryption.OpenPGP.KeyringParser: splitUs :: [(UidOrUat, [SignaturePayload])] -> ([(String, [SignaturePayload])], [([UserAttrSubPacket], [SignaturePayload])])
- Data.Conduit.OpenPGP.Filter: conduitFilter :: MonadResource m => FilterPredicates -> Conduit Pkt m Pkt
+ Data.Conduit.OpenPGP.Filter: conduitFilter :: Monad m => FilterPredicates -> Conduit Pkt m Pkt
- Data.Conduit.OpenPGP.Keyring: conduitToTKs :: MonadResource m => Conduit Pkt m TK
+ Data.Conduit.OpenPGP.Keyring: conduitToTKs :: Monad m => Conduit Pkt m TK
- Data.Conduit.OpenPGP.Keyring: conduitToTKsDropping :: MonadResource m => Conduit Pkt m TK
+ Data.Conduit.OpenPGP.Keyring: conduitToTKsDropping :: Monad m => Conduit Pkt m TK
- Data.Conduit.OpenPGP.Keyring: sinkKeyringMap :: MonadResource m => Sink TK m Keyring
+ Data.Conduit.OpenPGP.Keyring: sinkKeyringMap :: Monad m => Sink TK m Keyring
- Data.Conduit.OpenPGP.Verify: conduitVerify :: MonadResource m => Keyring -> Maybe UTCTime -> Conduit Pkt m (Either String Verification)
+ Data.Conduit.OpenPGP.Verify: conduitVerify :: Monad m => Keyring -> Maybe UTCTime -> Conduit Pkt m (Either String Verification)

Files

+ Codec/Encryption/OpenPGP/KeyringParser.hs view
@@ -0,0 +1,176 @@+-- KeyringParser.hs: OpenPGP (RFC4880) transferable keys parsing+-- Copyright © 2012-2014  Clint Adams+-- This software is released under the terms of the Expat license.+-- (See the LICENSE file).++module Codec.Encryption.OpenPGP.KeyringParser (+   parseAChunk+ , finalizeParsing+ , parseTK+ , UidOrUat(..)+ , splitUs+ , publicTK+ , secretTK+ , brokenTK+ , pkPayload+ , signature+ , signedUID+ , signedUAt+ , signedOrRevokedPubSubkey+ , brokenPubSubkey+ , rawOrSignedOrRevokedSecSubkey+ , brokenSecSubkey+ , skPayload+ , broken+) where++import Control.Applicative (many, (<$>), (<|>))+import Data.IxSet (empty, insert)+import Data.Monoid (Monoid, (<>), mconcat)++import Codec.Encryption.OpenPGP.Types+import Data.Conduit.OpenPGP.Keyring.Instances ()+import Text.ParserCombinators.Incremental.LeftBiasedLocal (concatMany, feed, feedEof, inspect, satisfy, Parser)++parseAChunk :: (Monoid s, Show s) => Parser s r -> s -> ([(r, s)], Maybe (Maybe (r -> r), Parser s r)) -> (([(r, s)], Maybe (Maybe (r -> r), Parser s r)), [r])+parseAChunk _ a ([], Nothing) = error $ "Failure before " ++ show a+parseAChunk op a (cr, Nothing) = (inspect (feed (mconcat (map snd cr) <> a) op), map fst cr)+parseAChunk _ a (_, Just (_, p)) = (inspect (feed a p), [])++finalizeParsing :: Monoid s => ([(r, s)], Maybe (Maybe (r -> r), Parser s r)) -> (([(r, s)], Maybe (Maybe (r -> r), Parser s r)), [r])+finalizeParsing ([], Nothing) = error $ "Unexpected finalization failure"+finalizeParsing (cr, Nothing) = (([], Nothing), map fst cr)+finalizeParsing (_, Just (_, p)) = finalizeParsing (inspect (feedEof p))++parseTK :: Bool -> Parser [Pkt] (Maybe TK)+parseTK True = publicTK True <|> secretTK True+parseTK False = publicTK False <|> secretTK False <|> brokenTK 6 <|> brokenTK 5++data UidOrUat = I String | A [UserAttrSubPacket]+    deriving Show++splitUs :: [(UidOrUat, [SignaturePayload])] -> ([(String, [SignaturePayload])], [([UserAttrSubPacket], [SignaturePayload])])+splitUs us = (is, as)+    where+        is = map unI (filter isI us)+        as = map unA (filter isA us)+	isI ((I _), _) = True+	isI _ = False+	isA ((A _), _) = True+	isA _ = False+	unI ((I x), y) = (x, y)+	unI x = error $ "unI should never be called on " ++ show x+	unA ((A x), y) = (x, y)+	unA x = error $ "unA should never be called on " ++ show x++publicTK, secretTK :: Bool -> Parser [Pkt] (Maybe TK)+publicTK intolerant = do+    pkp <- pkPayload+    pkpsigs <- concatMany (signature intolerant [KeyRevocationSig,SignatureDirectlyOnAKey])+    (uids, uats) <- fmap splitUs (many (signedUID intolerant <|> signedUAt intolerant)) -- FIXME: require >=1 uid if intolerant+    subs <- concatMany (pubsub intolerant)+    return $! Just (TK pkp pkpsigs uids uats subs)+        where+            pubsub True = signedOrRevokedPubSubkey True+            pubsub False = signedOrRevokedPubSubkey False <|> brokenPubSubkey+secretTK intolerant = do+    skp <- skPayload+    skpsigs <- concatMany (signature intolerant [KeyRevocationSig,SignatureDirectlyOnAKey])+    (uids, uats) <- fmap splitUs (many (signedUID intolerant <|> signedUAt intolerant)) -- FIXME: require >=1 uid if intolerant?+    subs <- concatMany (secsub intolerant)+    return $! Just (TK skp skpsigs uids uats subs)+        where+            secsub True = rawOrSignedOrRevokedSecSubkey True+            secsub False = rawOrSignedOrRevokedSecSubkey False <|> brokenSecSubkey++brokenTK :: Int -> Parser [Pkt] (Maybe TK)+brokenTK 6 = do+    _ <- broken 6+    _ <- many (signature False [KeyRevocationSig,SignatureDirectlyOnAKey])+    _ <- many (signedUID False <|> signedUAt False)+    _ <- concatMany (signedOrRevokedPubSubkey False <|> brokenPubSubkey)+    return Nothing+brokenTK 5 = do+    _ <- broken 5+    _ <- many (signature False [KeyRevocationSig,SignatureDirectlyOnAKey])+    _ <- many (signedUID False <|> signedUAt False)+    _ <- concatMany (rawOrSignedOrRevokedSecSubkey False <|> brokenSecSubkey)+    return Nothing+brokenTK _ = fail "Unexpected broken packet type"++pkPayload :: Parser [Pkt] (PKPayload, Maybe SKAddendum)+pkPayload = do [PublicKeyPkt p] <- satisfy isPKP+               return (p, Nothing)+    where+        isPKP [PublicKeyPkt _] = True+        isPKP _ = False++signature :: Bool -> [SigType] -> Parser [Pkt] [SignaturePayload]+signature intolerant rts = if intolerant then signature' else (signature' <|> brokensig')+    where+        signature' = do [SignaturePkt sp] <- satisfy (isSP intolerant)+                        return $! (if intolerant then id else filter isSP') [sp]+        brokensig' = const [] <$> broken 2+        isSP True [SignaturePkt sp@(SigV3 {})] = isSP' sp+        isSP True [SignaturePkt sp@(SigV4 {})] = isSP' sp+        isSP False [SignaturePkt _] = True+        isSP _ _ = False+	isSP' (SigV3 st _ _ _ _ _ _) = st `elem` rts+	isSP' (SigV4 st _ _ _ _ _ _) = st `elem` rts+	isSP' _ = False++signedUID :: Bool -> Parser [Pkt] (UidOrUat, [SignaturePayload])+signedUID intolerant = do [UserIdPkt u] <- satisfy isUID+                          sigs <- concatMany (signature intolerant [GenericCert, PersonaCert, CasualCert, PositiveCert, CertRevocationSig])+                          return (I u, sigs)+    where+        isUID [UserIdPkt _] = True+        isUID _ = False++signedUAt :: Bool -> Parser [Pkt] (UidOrUat, [SignaturePayload])+signedUAt intolerant = do [UserAttributePkt us] <- satisfy isUAt+                          sigs <- concatMany (signature intolerant [GenericCert, PersonaCert, CasualCert, PositiveCert, CertRevocationSig])+                          return (A us, sigs)+    where+        isUAt [UserAttributePkt _] = True+        isUAt _ = False++signedOrRevokedPubSubkey :: Bool -> Parser [Pkt] [(Pkt, [SignaturePayload])]+signedOrRevokedPubSubkey intolerant = do [p] <- satisfy isPSKP+                                         sigs <- concatMany (signature intolerant [SubkeyBindingSig, SubkeyRevocationSig])+                                         return [(p, sigs)]+    where+        isPSKP [PublicSubkeyPkt _] = True+        isPSKP _ = False++brokenPubSubkey :: Parser [Pkt] [(Pkt, [SignaturePayload])]+brokenPubSubkey = do _ <- broken 14+                     _ <- concatMany (signature False [SubkeyBindingSig, SubkeyRevocationSig])+                     return []++rawOrSignedOrRevokedSecSubkey :: Bool -> Parser [Pkt] [(Pkt, [SignaturePayload])]+rawOrSignedOrRevokedSecSubkey intolerant = do [p] <- satisfy isSSKP+                                              sigs <- concatMany (signature intolerant [SubkeyBindingSig, SubkeyRevocationSig])+                                              return [(p, sigs)]+    where+        isSSKP [SecretSubkeyPkt _ _] = True+        isSSKP _ = False++brokenSecSubkey :: Parser [Pkt] [(Pkt, [SignaturePayload])]+brokenSecSubkey = do _ <- broken 7+                     _ <- concatMany (signature False [SubkeyBindingSig, SubkeyRevocationSig])+                     return []++skPayload :: Parser [Pkt] (PKPayload, Maybe SKAddendum)+skPayload = do [SecretKeyPkt p ska] <- satisfy isSKP+               return (p, Just ska)+    where+        isSKP [SecretKeyPkt _ _] = True+        isSKP _ = False++broken :: Int -> Parser [Pkt] Pkt+broken t = do [bp] <- satisfy isBroken+              return bp+    where+        isBroken [BrokenPacketPkt _ a _] = t == fromIntegral a+        isBroken _ = False
Data/Conduit/OpenPGP/Filter.hs view
@@ -109,7 +109,7 @@  ovToInt (OInt i) = i -conduitFilter :: MonadResource m => FilterPredicates -> Conduit Pkt m Pkt+conduitFilter :: Monad m => FilterPredicates -> Conduit Pkt m Pkt conduitFilter = CL.filter . superPredicate  superPredicate :: FilterPredicates -> Pkt -> Bool
Data/Conduit/OpenPGP/Keyring.hs view
@@ -9,27 +9,24 @@  , sinkKeyringMap ) where -import Control.Applicative (many, (<$>), (<|>))-import Control.Monad.Trans.Resource (MonadResource) import Data.Conduit import qualified Data.Conduit.List as CL import Data.IxSet (empty, insert)-import Data.Monoid (Monoid, (<>), mconcat) +import Codec.Encryption.OpenPGP.KeyringParser (finalizeParsing, parseAChunk, parseTK) import Codec.Encryption.OpenPGP.Types import Data.Conduit.OpenPGP.Keyring.Instances ()-import Text.ParserCombinators.Incremental.LeftBiasedLocal (concatMany, feed, feedEof, inspect, satisfy, Parser)  data Phase = MainKey | Revs | Uids | UAts | Subs | SkippingBroken     deriving (Eq, Ord, Show) -conduitToTKs :: MonadResource m => Conduit Pkt m TK+conduitToTKs :: Monad m => Conduit Pkt m TK conduitToTKs = conduitToTKs' True -conduitToTKsDropping :: MonadResource m => Conduit Pkt m TK+conduitToTKsDropping :: Monad m => Conduit Pkt m TK conduitToTKsDropping = conduitToTKs' False -fakecmAccum :: MonadResource m => (accum -> (accum, [b])) -> (a -> accum -> (accum, [b])) -> accum -> Conduit a m b+fakecmAccum :: Monad m => (accum -> (accum, [b])) -> (a -> accum -> (accum, [b])) -> accum -> Conduit a m b fakecmAccum finalizer f =     loop   where@@ -41,154 +38,11 @@             Prelude.mapM_ yield bs             loop accum' -conduitToTKs' :: MonadResource m => Bool -> Conduit Pkt m TK+conduitToTKs' :: Monad m => Bool -> Conduit Pkt m TK conduitToTKs' intolerant = CL.filter notTrustPacket =$= CL.map (:[]) =$= fakecmAccum finalizeParsing (parseAChunk (parseTK intolerant)) ([], Just (Nothing, parseTK intolerant)) =$= CL.catMaybes     where         notTrustPacket (TrustPkt _) = False         notTrustPacket _ = True -parseAChunk :: (Monoid s, Show s) => Parser s r -> s -> ([(r, s)], Maybe (Maybe (r -> r), Parser s r)) -> (([(r, s)], Maybe (Maybe (r -> r), Parser s r)), [r])-parseAChunk _ a ([], Nothing) = error $ "Failure before " ++ show a-parseAChunk op a (cr, Nothing) = (inspect (feed (mconcat (map snd cr) <> a) op), map fst cr)-parseAChunk _ a (_, Just (_, p)) = (inspect (feed a p), [])--finalizeParsing :: Monoid s => ([(r, s)], Maybe (Maybe (r -> r), Parser s r)) -> (([(r, s)], Maybe (Maybe (r -> r), Parser s r)), [r])-finalizeParsing ([], Nothing) = error $ "Unexpected finalization failure"-finalizeParsing (cr, Nothing) = (([], Nothing), map fst cr)-finalizeParsing (_, Just (_, p)) = finalizeParsing (inspect (feedEof p))--parseTK :: Bool -> Parser [Pkt] (Maybe TK)-parseTK True = publictk True <|> secrettk True-parseTK False = publictk False <|> secrettk False <|> brokentk 6 <|> brokentk 5--data UidOrUat = I String | A [UserAttrSubPacket]-    deriving Show--splitUs :: [(UidOrUat, [SignaturePayload])] -> ([(String, [SignaturePayload])], [([UserAttrSubPacket], [SignaturePayload])])-splitUs us = (is, as)-    where-        is = map unI (filter isI us)-        as = map unA (filter isA us)-	isI ((I _), _) = True-	isI _ = False-	isA ((A _), _) = True-	isA _ = False-	unI ((I x), y) = (x, y)-	unI x = error $ "unI should never be called on " ++ show x-	unA ((A x), y) = (x, y)-	unA x = error $ "unA should never be called on " ++ show x--publictk, secrettk :: Bool -> Parser [Pkt] (Maybe TK)-publictk intolerant = do-    pkp <- pkpayload-    pkpsigs <- concatMany (signature intolerant [KeyRevocationSig,SignatureDirectlyOnAKey])-    (uids, uats) <- fmap splitUs (many (signeduid intolerant <|> signeduat intolerant)) -- FIXME: require >=1 uid if intolerant-    subs <- concatMany (pubsub intolerant)-    return $! Just (TK pkp pkpsigs uids uats subs)-        where-            pubsub True = signedorrevokedpubsubkey True-            pubsub False = signedorrevokedpubsubkey False <|> brokenpubsubkey-secrettk intolerant = do-    skp <- skpayload-    skpsigs <- concatMany (signature intolerant [KeyRevocationSig,SignatureDirectlyOnAKey])-    (uids, uats) <- fmap splitUs (many (signeduid intolerant <|> signeduat intolerant)) -- FIXME: require >=1 uid if intolerant?-    subs <- concatMany (secsub intolerant)-    return $! Just (TK skp skpsigs uids uats subs)-        where-            secsub True = raworsignedorrevokedsecsubkey True-            secsub False = raworsignedorrevokedsecsubkey False <|> brokensecsubkey--brokentk :: Int -> Parser [Pkt] (Maybe TK)-brokentk 6 = do-    _ <- broken 6-    _ <- many (signature False [KeyRevocationSig,SignatureDirectlyOnAKey])-    _ <- many (signeduid False <|> signeduat False)-    _ <- concatMany (signedorrevokedpubsubkey False <|> brokenpubsubkey)-    return Nothing-brokentk 5 = do-    _ <- broken 5-    _ <- many (signature False [KeyRevocationSig,SignatureDirectlyOnAKey])-    _ <- many (signeduid False <|> signeduat False)-    _ <- concatMany (raworsignedorrevokedsecsubkey False <|> brokensecsubkey)-    return Nothing-brokentk _ = fail "Unexpected broken packet type"--pkpayload :: Parser [Pkt] (PKPayload, Maybe SKAddendum)-pkpayload = do [PublicKeyPkt p] <- satisfy isPKP-               return (p, Nothing)-    where-        isPKP [PublicKeyPkt _] = True-        isPKP _ = False--signature :: Bool -> [SigType] -> Parser [Pkt] [SignaturePayload]-signature intolerant rts = if intolerant then signature' else (signature' <|> brokensig')-    where-        signature' = do [SignaturePkt sp] <- satisfy (isSP intolerant)-                        return $! (if intolerant then id else filter isSP') [sp]-        brokensig' = const [] <$> broken 2-        isSP True [SignaturePkt sp@(SigV3 {})] = isSP' sp-        isSP True [SignaturePkt sp@(SigV4 {})] = isSP' sp-        isSP False [SignaturePkt _] = True-        isSP _ _ = False-	isSP' (SigV3 st _ _ _ _ _ _) = st `elem` rts-	isSP' (SigV4 st _ _ _ _ _ _) = st `elem` rts-	isSP' _ = False--signeduid :: Bool -> Parser [Pkt] (UidOrUat, [SignaturePayload])-signeduid intolerant = do [UserIdPkt u] <- satisfy isUID-                          sigs <- concatMany (signature intolerant [GenericCert, PersonaCert, CasualCert, PositiveCert, CertRevocationSig])-                          return (I u, sigs)-    where-        isUID [UserIdPkt _] = True-        isUID _ = False--signeduat :: Bool -> Parser [Pkt] (UidOrUat, [SignaturePayload])-signeduat intolerant = do [UserAttributePkt us] <- satisfy isUAt-                          sigs <- concatMany (signature intolerant [GenericCert, PersonaCert, CasualCert, PositiveCert, CertRevocationSig])-                          return (A us, sigs)-    where-        isUAt [UserAttributePkt _] = True-        isUAt _ = False--signedorrevokedpubsubkey :: Bool -> Parser [Pkt] [(Pkt, [SignaturePayload])]-signedorrevokedpubsubkey intolerant = do [p] <- satisfy isPSKP-                                         sigs <- concatMany (signature intolerant [SubkeyBindingSig, SubkeyRevocationSig])-                                         return [(p, sigs)]-    where-        isPSKP [PublicSubkeyPkt _] = True-        isPSKP _ = False--brokenpubsubkey :: Parser [Pkt] [(Pkt, [SignaturePayload])]-brokenpubsubkey = do _ <- broken 14-                     _ <- concatMany (signature False [SubkeyBindingSig, SubkeyRevocationSig])-                     return []--raworsignedorrevokedsecsubkey :: Bool -> Parser [Pkt] [(Pkt, [SignaturePayload])]-raworsignedorrevokedsecsubkey intolerant = do [p] <- satisfy isSSKP-                                              sigs <- concatMany (signature intolerant [SubkeyBindingSig, SubkeyRevocationSig])-                                              return [(p, sigs)]-    where-        isSSKP [SecretSubkeyPkt _ _] = True-        isSSKP _ = False--brokensecsubkey :: Parser [Pkt] [(Pkt, [SignaturePayload])]-brokensecsubkey = do _ <- broken 7-                     _ <- concatMany (signature False [SubkeyBindingSig, SubkeyRevocationSig])-                     return []--skpayload :: Parser [Pkt] (PKPayload, Maybe SKAddendum)-skpayload = do [SecretKeyPkt p ska] <- satisfy isSKP-               return (p, Just ska)-    where-        isSKP [SecretKeyPkt _ _] = True-        isSKP _ = False--broken :: Int -> Parser [Pkt] Pkt-broken t = do [bp] <- satisfy isBroken-              return bp-    where-        isBroken [BrokenPacketPkt _ a _] = t == fromIntegral a-        isBroken _ = False--sinkKeyringMap :: MonadResource m => Sink TK m Keyring+sinkKeyringMap :: Monad m => Sink TK m Keyring sinkKeyringMap = CL.fold (flip insert) empty
Data/Conduit/OpenPGP/Verify.hs view
@@ -7,7 +7,6 @@    conduitVerify ) where -import Control.Monad.Trans.Resource (MonadResource) import Data.Conduit import Data.Time.Clock (UTCTime) @@ -16,7 +15,7 @@ import Codec.Encryption.OpenPGP.Signatures (verifySigWith, verifyAgainstKeyring) import qualified Data.Conduit.List as CL -conduitVerify :: MonadResource m => Keyring -> Maybe UTCTime -> Conduit Pkt m (Either String Verification)+conduitVerify :: Monad m => Keyring -> Maybe UTCTime -> Conduit Pkt m (Either String Verification) conduitVerify kr mt = CL.concatMapAccum (flip push) emptyPSC     where         push state ld@(LiteralDataPkt {}) = (state { lastLD = ld }, [])
hOpenPGP.cabal view
@@ -1,5 +1,5 @@ Name:                hOpenPGP-Version:             1.2.1+Version:             1.3 Synopsis:            native Haskell implementation of OpenPGP (RFC4880) Description:         native Haskell implementation of OpenPGP (RFC4880) Homepage:            http://floss.scru.org/hOpenPGP/@@ -151,6 +151,7 @@                      , Codec.Encryption.OpenPGP.Expirations                      , Codec.Encryption.OpenPGP.Fingerprint                      , Codec.Encryption.OpenPGP.KeyInfo+                     , Codec.Encryption.OpenPGP.KeyringParser                      , Codec.Encryption.OpenPGP.KeySelection                      , Codec.Encryption.OpenPGP.S2K                      , Codec.Encryption.OpenPGP.CFB@@ -248,4 +249,4 @@ source-repository this   type:     git   location: git://git.debian.org/users/clint/hOpenPGP.git-  tag:      v1.2.1+  tag:      v1.3
tests/suite.hs view
@@ -21,7 +21,7 @@ import Codec.Encryption.OpenPGP.Signatures (verifyTKWith, verifySigWith, verifyAgainstKeys) import Codec.Encryption.OpenPGP.Types import Control.Error.Util (isRight)-import Control.Monad.Trans.Resource (MonadResource, ResourceT, runResourceT)+import Control.Monad.Trans.Resource (ResourceT, runResourceT) import Crypto.PubKey.RSA (PrivateKey(private_pub)) import Data.Conduit.Cereal (conduitGet) import Data.Conduit.OpenPGP.Compression (conduitCompress, conduitDecompress)@@ -68,7 +68,7 @@                           else                               assertEqual ("for " ++ fpr) firstpass secondpass -counter :: (MonadResource m) => DC.Sink a m Int+counter :: (Monad m) => DC.Sink a m Int counter = CL.fold (const . (1+)) 0  testConduitOutputLength :: FilePath -> DC.Conduit B.ByteString (ResourceT IO) b -> Int -> Assertion