class Key(PGPMessage): def __init__(self, passphrase=None): self._passphrase = passphrase super(Key, self).__init__() def reset(self): super(Key, self).reset() self.keys = ValueTracker() @property def passphrase(self): """Return a function to get the passphrase""" if not callable(self._passphrase): _passphrase = self._passphrase def get_passphrase(message, info): return _passphrase self._passphrase = get_passphrase return self._passphrase def parse(self, region): self.reset() self.consume(region) return self def key_dict(self, keys=None): if keys is None: keys = self.keys.consumed() result = {} for key, subkeys in keys: result[key['key_id']] = key['key'] result.update(self.key_dict(subkeys)) return result #################### ### ADDING KEYS #################### def add_key(self, info): """Start a new public key""" self.keys.end_item() self.keys.start_item(info) def add_sub_key(self, info): """Add a sub public key""" self.keys.start_item(info)