summaryrefslogtreecommitdiff
path: root/Data
diff options
context:
space:
mode:
authorStephen Paul Weber <singpolyma@singpolyma.net>2012-04-27 12:29:16 -0500
committerStephen Paul Weber <singpolyma@singpolyma.net>2012-04-27 12:29:16 -0500
commit67d36d8979d50ead14d40cb4c94ed6da153d0232 (patch)
tree92f711de75c8aeb2967d805cbb86c4b81cb910e9 /Data
parentb4a1a294abf7777a74ce08f340a4b2436a16262d (diff)
Handle signature subpacket critical bit
Currently throws away the data. Suboptimal
Diffstat (limited to 'Data')
-rw-r--r--Data/OpenPGP.hs28
1 files changed, 16 insertions, 12 deletions
diff --git a/Data/OpenPGP.hs b/Data/OpenPGP.hs
index e48dcf6..d1aac6a 100644
--- a/Data/OpenPGP.hs
+++ b/Data/OpenPGP.hs
@@ -675,21 +675,14 @@ instance BINARY_CLASS SignatureSubpacket where
675 fmap fromIntegral (get :: Get Word32) 675 fmap fromIntegral (get :: Get Word32)
676 _ -> -- One octet length, no furthur processing 676 _ -> -- One octet length, no furthur processing
677 return len 677 return len
678 tag <- get :: Get Word8 678 tag <- fmap stripCrit get :: Get Word8
679 -- This forces the whole packet to be consumed 679 -- This forces the whole packet to be consumed
680 packet <- getSomeByteString (len-1) 680 packet <- getSomeByteString (len-1)
681 return $ unsafeRunGet (parse_signature_subpacket tag) packet 681 return $ unsafeRunGet (parse_signature_subpacket tag) packet
682 682 where
683-- | Find the keyid that issued a SignaturePacket 683 -- TODO: Decide how to actually encode the "is critical" data
684signature_issuer :: Packet -> Maybe String 684 -- instead of just ignoring it
685signature_issuer (SignaturePacket {hashed_subpackets = hashed, 685 stripCrit tag = if tag .&. 0x80 == 0x80 then tag .&. 0x7f else tag
686 unhashed_subpackets = unhashed}) =
687 if length issuers > 0 then Just issuer else Nothing
688 where IssuerPacket issuer = issuers !! 0
689 issuers = filter isIssuer hashed ++ filter isIssuer unhashed
690 isIssuer (IssuerPacket {}) = True
691 isIssuer _ = False
692signature_issuer _ = Nothing
693 686
694put_signature_subpacket :: SignatureSubpacket -> (B.ByteString, Word8) 687put_signature_subpacket :: SignatureSubpacket -> (B.ByteString, Word8)
695put_signature_subpacket (SignatureCreationTimePacket time) = 688put_signature_subpacket (SignatureCreationTimePacket time) =
@@ -710,6 +703,17 @@ parse_signature_subpacket 16 = do
710parse_signature_subpacket tag = 703parse_signature_subpacket tag =
711 fmap (UnsupportedSignatureSubpacket tag) getRemainingByteString 704 fmap (UnsupportedSignatureSubpacket tag) getRemainingByteString
712 705
706-- | Find the keyid that issued a SignaturePacket
707signature_issuer :: Packet -> Maybe String
708signature_issuer (SignaturePacket {hashed_subpackets = hashed,
709 unhashed_subpackets = unhashed}) =
710 if length issuers > 0 then Just issuer else Nothing
711 where IssuerPacket issuer = issuers !! 0
712 issuers = filter isIssuer hashed ++ filter isIssuer unhashed
713 isIssuer (IssuerPacket {}) = True
714 isIssuer _ = False
715signature_issuer _ = Nothing
716
713find_key :: (Packet -> String) -> Message -> String -> Maybe Packet 717find_key :: (Packet -> String) -> Message -> String -> Maybe Packet
714find_key fpr (Message (x@(PublicKeyPacket {}):xs)) keyid = 718find_key fpr (Message (x@(PublicKeyPacket {}):xs)) keyid =
715 find_key' fpr x xs keyid 719 find_key' fpr x xs keyid