aboutsummaryrefslogtreecommitdiffstats
path: root/lang/python/examples/encrypt-to-all.py
diff options
context:
space:
mode:
authorJustus Winter <[email protected]>2016-08-05 12:03:15 +0000
committerJustus Winter <[email protected]>2016-08-05 12:05:49 +0000
commit2a613e87156b23c4aa6aa5ce38505cb285de6a18 (patch)
tree2771ed69bf7299d1b1c9d89dca30b2e4119ac69a /lang/python/examples/encrypt-to-all.py
parentcore: Extend gpgme_subkey_t to carry the keygrip. (diff)
downloadgpgme-2a613e87156b23c4aa6aa5ce38505cb285de6a18.tar.gz
gpgme-2a613e87156b23c4aa6aa5ce38505cb285de6a18.zip
python: Clean up and modernize examples.
* lang/python/examples/Examples.rst: Delete file. * lang/python/examples/t-edit.py: Likewise. This is actually a test case and has been moved to 'tests'. * lang/python/examples/assuan.py: New file. * lang/python/examples/decryption-filter.py: Likewise. * lang/python/examples/delkey.py: Modernize. * lang/python/examples/encrypt-to-all.py: Likewise. * lang/python/examples/exportimport.py: Likewise. * lang/python/examples/genkey.py: Likewise. * lang/python/examples/inter-edit.py: Likewise. * lang/python/examples/sign.py: Likewise. * lang/python/examples/signverify.py: Likewise. * lang/python/examples/simple.py: Likewise. * lang/python/examples/testCMSgetkey.py: Likewise. * lang/python/examples/verifydetails.py: Likewise. Signed-off-by: Justus Winter <[email protected]>
Diffstat (limited to 'lang/python/examples/encrypt-to-all.py')
-rwxr-xr-xlang/python/examples/encrypt-to-all.py86
1 files changed, 35 insertions, 51 deletions
diff --git a/lang/python/examples/encrypt-to-all.py b/lang/python/examples/encrypt-to-all.py
index 5e126760..4586f938 100755
--- a/lang/python/examples/encrypt-to-all.py
+++ b/lang/python/examples/encrypt-to-all.py
@@ -1,21 +1,21 @@
#!/usr/bin/env python3
+#
+# Copyright (C) 2016 g10 Code GmbH
# Copyright (C) 2008 Igor Belyi <[email protected]>
# Copyright (C) 2002 John Goerzen <[email protected]>
#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License as
-# published by the Free Software Foundation; either version 2 of
-# the License, or (at your option) any later version.
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-# 02111-1307 USA
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
"""
This program will try to encrypt a simple message to each key on your
@@ -24,44 +24,28 @@ be skipped and it will re-try the encryption."""
import sys
import os
-from pyme import core
-from pyme.core import Data, Context
-
-core.check_version(None)
-
-plain = Data('This is my message.')
-
-c = Context()
-c.set_armor(1)
+import pyme
-def sendto(keylist):
- cipher = Data()
- c.op_encrypt(keylist, 1, plain, cipher)
- cipher.seek(0, os.SEEK_SET)
- return cipher.read()
-
-names = []
-for key in c.op_keylist_all(None, 0):
- try:
- print(" *** Found key for %s" % key.uids[0].uid)
+with pyme.Context(armor=True) as c:
+ recipients = list()
+ for key in c.keylist():
valid = 0
- for subkey in key.subkeys:
- keyid = subkey.keyid
- if keyid is None:
- break
- can_encrypt = subkey.can_encrypt
- valid += can_encrypt
- print(" Subkey %s: encryption %s" %
- (keyid, can_encrypt and "enabled" or "disabled"))
- except UnicodeEncodeError as e:
- print(e)
-
- if valid:
- names.append(key)
- else:
- print(" This key cannot be used for encryption; skipping.")
-
-passno = 0
-
-print("Encrypting to %d recipients" % len(names))
-sys.stdout.buffer.write(sendto(names))
+ if any(sk.can_encrypt for sk in key.subkeys):
+ recipients.append(key)
+ print("Adding recipient {0}.".format(key.uids[0].uid))
+
+ ciphertext = None
+ while not ciphertext:
+ print("Encrypting to %d recipients" % len(recipients))
+ try:
+ ciphertext, _, _ = c.encrypt(b'This is my message.',
+ recipients=recipients)
+ except pyme.errors.InvalidRecipients as e:
+ print("Encryption failed for these keys:\n{0!s}".format(e))
+
+ # filter out the bad keys
+ bad_keys = {bad.fpr for bad in e.recipients}
+ recipients = [r for r in recipients
+ if not r.subkeys[0].fpr in bad_keys]
+
+ sys.stdout.buffer.write(ciphertext)