From 53849fa83d96f6f1b45f2a8d2b8001747a053357 Mon Sep 17 00:00:00 2001 From: Joe Crayne Date: Wed, 13 May 2020 13:05:56 -0400 Subject: Updated Features packet (draft-ietf-openpgp-rfc4880bis-09). --- Data/OpenPGP.hs | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/Data/OpenPGP.hs b/Data/OpenPGP.hs index 104c551..571e8a4 100644 --- a/Data/OpenPGP.hs +++ b/Data/OpenPGP.hs @@ -1185,7 +1185,11 @@ data SignatureSubpacket = } | SignerUserIDPacket String | ReasonForRevocationPacket RevocationCode String | - FeaturesPacket {supports_mdc :: Bool} | + FeaturesPacket { + supports_mdc :: Bool, + supports_aead :: Bool, + supports_v5 :: Bool + } | SignatureTargetPacket { target_key_algorithm :: KeyAlgorithm, target_hash_algorithm :: HashAlgorithm, @@ -1292,8 +1296,12 @@ put_signature_subpacket (SignerUserIDPacket userid) = (B.fromString userid, 28) put_signature_subpacket (ReasonForRevocationPacket code string) = (B.concat [encode code, B.fromString string], 29) -put_signature_subpacket (FeaturesPacket supports_mdc) = - (B.singleton $ if supports_mdc then 0x01 else 0x00, 30) +put_signature_subpacket (FeaturesPacket supports_mdc supports_aead supports_v5) = + (B.singleton $ mdc .|. aead .|. v5, 30) + where + mdc = if supports_mdc then 0x01 else 0x00 + aead = if supports_aead then 0x02 else 0x00 + v5 = if supports_v5 then 0x04 else 0x00 put_signature_subpacket (SignatureTargetPacket kalgo halgo hash) = (B.concat [encode kalgo, encode halgo, hash], 31) put_signature_subpacket (EmbeddedSignaturePacket packet) @@ -1403,7 +1411,9 @@ parse_signature_subpacket 30 = do empty <- isEmpty flag1 <- if empty then return 0 else get :: Get Word8 return FeaturesPacket { - supports_mdc = flag1 .&. 0x01 == 0x01 + supports_mdc = flag1 .&. 0x01 /= 0, + supports_aead = flag1 .&. 0x02 /= 0, + supports_v5 = flag1 .&. 0x04 /= 0 } -- SignatureTargetPacket, http://tools.ietf.org/html/rfc4880#section-5.2.3.25 parse_signature_subpacket 31 = -- cgit v1.2.3