code: def revoker(self, revoker, **prefs):
          
          hash_algo = prefs.pop('hash', None)
  
          sig = PGPSignature.new(SignatureType.DirectlyOnKey, self.key_algorithm, hash_algo, self.fingerprint.keyid)
  
          # signature options that only make sense when adding a revocation key
          sensitive = prefs.pop('sensitive', False)
          keyclass = RevocationKeyClass.Normal | (RevocationKeyClass.Sensitive if sensitive else 0x00)
  
          sig._signature.subpackets.addnew('RevocationKey',
                                           hashed=True,
                                           algorithm=revoker.key_algorithm,
                                           fingerprint=revoker.fingerprint,
                                           keyclass=keyclass)
  
          # revocation keys should really not be revocable themselves
          prefs['revocable'] = False
          return self._sign(self, sig, **prefs)
docs: Generate a signature that specifies another key as being valid for revoking this key.
  
          :param revoker: The :py:obj:`PGPKey` to specify as a valid revocation key.
          :type revoker: :py:obj:`PGPKey`
          :raises: :py:exc:`~pgpy.errors.PGPError` if the key is passphrase-protected and has not been unlocked
          :raises: :py:exc:`~pgpy.errors.PGPError` if the key is public
          :returns: :py:obj:`PGPSignature`
  
          In addition to the optional keyword arguments accepted by :py:meth:`PGPKey.sign`, the following optional
          keyword arguments can be used with :py:meth:`PGPKey.revoker`.
  
          :keyword sensitive: If ``True``, this sets the sensitive flag on the RevocationKey subpacket. Currently,
                              this has no other effect.
          :type sensitive: ``bool``