Add features signature subpacket parsing to PGPPacket
authorW. Trevor King <wking@tremily.us>
Fri, 20 Dec 2013 22:10:21 +0000 (14:10 -0800)
committerW. Trevor King <wking@tremily.us>
Mon, 23 Dec 2013 02:32:14 +0000 (18:32 -0800)
From RFC 4880 [1]:

 (N octets of flags)

 The Features subpacket denotes which advanced OpenPGP features a
 user's implementation supports.  This is so that as features are
 added to OpenPGP that cannot be backwards-compatible, a user can
 state that they can use that feature.  The flags are single bits that
 indicate that a given feature is supported.

 This subpacket is similar to a preferences subpacket, and only
 appears in a self-signature.

 An implementation SHOULD NOT use a feature listed when sending to a
 user who does not state that they can use it.

 Defined features are as follows:

   First octet:

   0x01 - Modification Detection (packets 18 and 19)

[1]: http://tools.ietf.org/search/rfc4880#section-5.2.3.24

gpg-migrate.py

index 9fa4c026eb42263d07896b76a851c736ec988b6c..6055eb105020b88528ce07b113151590aa95ec2e 100755 (executable)
@@ -310,6 +310,9 @@ class PGPPacket (dict):
     def _str_key_flags_signature_subpacket(self, subpacket):
         return ', '.join(x for x in sorted(subpacket['key-flags']))
 
+    def _str_features_signature_subpacket(self, subpacket):
+        return ', '.join(x for x in sorted(subpacket['features']))
+
     def _str_embedded_signature_signature_subpacket(self, subpacket):
         return subpacket['embedded']['signature-type']
 
@@ -598,6 +601,11 @@ class PGPPacket (dict):
         if data[0] & 0x80:
             subpacket['key-flags'].add('private shared')
 
+    def _parse_features_signature_subpacket(self, data, subpacket):
+        subpacket['features'] = set()
+        if data[0] & 0x1:
+            subpacket['features'].add('modification detection')
+
     def _parse_embedded_signature_signature_subpacket(self, data, subpacket):
         subpacket['embedded'] = PGPPacket()
         subpacket['embedded']._parse_signature_packet(data=data)