aboutsummaryrefslogtreecommitdiff
path: root/src/mailman_pgp/utils/pgp.py
diff options
context:
space:
mode:
authorJ08nY2017-08-01 22:53:15 +0200
committerJ08nY2017-08-02 01:35:10 +0200
commitdff7befbc5860f2f78f63ab694ef88d21a53771f (patch)
tree458e8004705eab2ca024da0cd21057cc2f5f56f3 /src/mailman_pgp/utils/pgp.py
parent7c0aaf28767e494323557b6cb8fb6500df5822e5 (diff)
downloadmailman-pgp-dff7befbc5860f2f78f63ab694ef88d21a53771f.tar.gz
mailman-pgp-dff7befbc5860f2f78f63ab694ef88d21a53771f.tar.zst
mailman-pgp-dff7befbc5860f2f78f63ab694ef88d21a53771f.zip
Diffstat (limited to 'src/mailman_pgp/utils/pgp.py')
-rw-r--r--src/mailman_pgp/utils/pgp.py27
1 files changed, 26 insertions, 1 deletions
diff --git a/src/mailman_pgp/utils/pgp.py b/src/mailman_pgp/utils/pgp.py
index 4251693..621aa02 100644
--- a/src/mailman_pgp/utils/pgp.py
+++ b/src/mailman_pgp/utils/pgp.py
@@ -16,7 +16,10 @@
# this program. If not, see <http://www.gnu.org/licenses/>.
"""Miscellaneous PGP utilities."""
-from pgpy import PGPKey
+from pgpy import PGPKey, PGPSignature
+from pgpy.constants import SignatureType
+from pgpy.packet import Packet, Signature
+from pgpy.types import Armorable
from public import public
@@ -72,3 +75,25 @@ def key_from_file(file):
"""
key, _ = PGPKey.from_file(file)
return key
+
+
+@public
+def revoc_from_blob(blob):
+ """
+
+ :param blob:
+ :return:
+ :rtype: pgpy.PGPSignature
+ """
+ dearm = Armorable.ascii_unarmor(blob)
+ p = Packet(dearm['body'])
+
+ if not isinstance(p, Signature):
+ raise ValueError('Not a key revocation signature.')
+ if p.sigtype not in (SignatureType.KeyRevocation,
+ SignatureType.SubkeyRevocation):
+ raise ValueError('Not a key revocation.')
+
+ sig = PGPSignature()
+ sig |= p
+ return sig