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

  (1 octet, Boolean)

  This is a flag in a User ID's self-signature that states whether
  this User ID is the main User ID for this key.  It is reasonable for
  an implementation to resolve ambiguities in preferences, etc. by
  referring to the primary User ID.  If this flag is absent, its value
  is zero.  If more than one User ID in a key is marked as primary,
  the implementation may resolve the ambiguity in any way it sees fit,
  but it is RECOMMENDED that priority be given to the User ID with the
  most recent self-signature.

  When appearing on a self-signature on a User ID packet, this
  subpacket applies only to User ID packets.  When appearing on a
  self-signature on a User Attribute packet, this subpacket applies
  only to User Attribute packets.  That is to say, there are two
  different and independent "primaries" -- one for User IDs, and one
  for User Attributes.

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

gpg-migrate.py

index 6273367b8fc6c64a03815c927431bb5cb7c8b51c..6abc19ece1759916d165a46a7943ab1a5ebfbe94 100755 (executable)
@@ -311,6 +311,9 @@ class PGPPacket (dict):
         return ', '.join(
             x for x in sorted(subpacket['key-server-preferences']))
 
+    def _str_primary_user_id_signature_subpacket(self, subpacket):
+        return str(subpacket['primary-user-id'])
+
     def _str_key_flags_signature_subpacket(self, subpacket):
         return ', '.join(x for x in sorted(subpacket['key-flags']))
 
@@ -594,6 +597,9 @@ class PGPPacket (dict):
         if data[0] & 0x80:
             subpacket['key-server-preferences'].add('no-modify')
 
+    def _parse_primary_user_id_signature_subpacket(self, data, subpacket):
+        subpacket['primary-user-id'] = bool(data[0])
+
     def _parse_key_flags_signature_subpacket(self, data, subpacket):
         subpacket['key-flags'] = set()
         if data[0] & 0x1: