summaryrefslogtreecommitdiff
path: root/lib/OpenPGP.hs
diff options
context:
space:
mode:
Diffstat (limited to 'lib/OpenPGP.hs')
-rw-r--r--lib/OpenPGP.hs29
1 files changed, 29 insertions, 0 deletions
diff --git a/lib/OpenPGP.hs b/lib/OpenPGP.hs
index aeadc47..7a1508e 100644
--- a/lib/OpenPGP.hs
+++ b/lib/OpenPGP.hs
@@ -127,6 +127,35 @@ secret_key_fields RSA_S = secret_key_fields RSA
127secret_key_fields ELGAMAL = ['x'] 127secret_key_fields ELGAMAL = ['x']
128secret_key_fields DSA = ['x'] 128secret_key_fields DSA = ['x']
129 129
130-- Need this seperate for trailer calculation
131signature_packet_start :: Packet -> LZ.ByteString
132signature_packet_start (SignaturePacket {
133 version = 4,
134 signature_type = signature_type,
135 key_algorithm = key_algorithm,
136 hash_algorithm = hash_algorithm,
137 hashed_subpackets = hashed_subpackets
138}) =
139 LZ.concat $ [
140 encode (0x04 :: Word8),
141 encode signature_type,
142 encode key_algorithm,
143 encode hash_algorithm,
144 encode ((fromIntegral $ LZ.length hashed_subs) :: Word16),
145 hashed_subs
146 ]
147 where hashed_subs = LZ.concat $ map encode hashed_subpackets
148
149-- The trailer is just the top of the body plus some crap
150calculate_signature_trailer :: Packet -> LZ.ByteString
151calculate_signature_trailer p =
152 LZ.concat [
153 signature_packet_start p,
154 encode (0x04 :: Word8),
155 encode (0xff :: Word8),
156 encode ((fromIntegral (LZ.length $ signature_packet_start p)) :: Word32)
157 ]
158
130parse_packet :: Word8 -> Get Packet 159parse_packet :: Word8 -> Get Packet
131-- SignaturePacket, http://tools.ietf.org/html/rfc4880#section-5.2 160-- SignaturePacket, http://tools.ietf.org/html/rfc4880#section-5.2
132parse_packet 2 = do 161parse_packet 2 = do