aboutsummaryrefslogtreecommitdiffstats
path: root/lang/python/tests
diff options
context:
space:
mode:
Diffstat (limited to 'lang/python/tests')
-rw-r--r--lang/python/tests/Makefile.am124
-rw-r--r--lang/python/tests/encrypt-only.asc33
-rwxr-xr-xlang/python/tests/final.py32
-rwxr-xr-xlang/python/tests/initial.py45
-rw-r--r--lang/python/tests/run-tests.py137
-rw-r--r--lang/python/tests/sign-only.asc33
-rw-r--r--lang/python/tests/support.py156
-rwxr-xr-xlang/python/tests/t-callbacks.py321
-rwxr-xr-xlang/python/tests/t-data.py140
-rwxr-xr-xlang/python/tests/t-decrypt-verify.py89
-rwxr-xr-xlang/python/tests/t-decrypt.py54
-rwxr-xr-xlang/python/tests/t-edit.py76
-rwxr-xr-xlang/python/tests/t-encrypt-large.py72
-rwxr-xr-xlang/python/tests/t-encrypt-sign.py99
-rwxr-xr-xlang/python/tests/t-encrypt-sym.py94
-rwxr-xr-xlang/python/tests/t-encrypt.py80
-rwxr-xr-xlang/python/tests/t-export.py40
-rwxr-xr-xlang/python/tests/t-file-name.py46
-rwxr-xr-xlang/python/tests/t-idiomatic.py89
-rwxr-xr-xlang/python/tests/t-import.py85
-rwxr-xr-xlang/python/tests/t-keylist-from-data.py269
-rwxr-xr-xlang/python/tests/t-keylist.py337
-rwxr-xr-xlang/python/tests/t-protocol-assuan.py77
-rwxr-xr-xlang/python/tests/t-quick-key-creation.py151
-rwxr-xr-xlang/python/tests/t-quick-key-manipulation.py133
-rwxr-xr-xlang/python/tests/t-quick-key-signing.py133
-rwxr-xr-xlang/python/tests/t-quick-subkey-creation.py118
-rwxr-xr-xlang/python/tests/t-sig-notation.py81
-rwxr-xr-xlang/python/tests/t-sign.py121
-rwxr-xr-xlang/python/tests/t-signers.py99
-rwxr-xr-xlang/python/tests/t-verify.py197
-rwxr-xr-xlang/python/tests/t-wait.py46
-rwxr-xr-xlang/python/tests/t-wrapper.py27
33 files changed, 0 insertions, 3634 deletions
diff --git a/lang/python/tests/Makefile.am b/lang/python/tests/Makefile.am
deleted file mode 100644
index 40a26e2a..00000000
--- a/lang/python/tests/Makefile.am
+++ /dev/null
@@ -1,124 +0,0 @@
-# Makefile.am for the tests of the Python bindings.
-# Copyright (C) 2016 g10 Code GmbH
-#
-# This file is part of GPGME.
-#
-# GPGME 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.
-#
-# GPGME 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 Lesser General
-# Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this program; if not, see <https://www.gnu.org/licenses/>.
-
-GPG = gpg
-GPG_AGENT = gpg-agent
-
-test_srcdir = $(top_srcdir)/tests/gpg
-
-GNUPGHOME=$(abs_builddir)
-TESTS_ENVIRONMENT = GNUPGHOME=$(GNUPGHOME) \
- LC_ALL=C GPG_AGENT_INFO= \
- top_srcdir=$(top_srcdir) \
- srcdir=$(srcdir) \
- LD_LIBRARY_PATH="../../../src/.libs:$(LD_LIBRARY_PATH)"
-
-py_tests ?= t-wrapper.py \
- t-callbacks.py \
- t-data.py \
- t-encrypt.py \
- t-encrypt-sym.py \
- t-encrypt-sign.py \
- t-sign.py \
- t-signers.py \
- t-decrypt.py \
- t-verify.py \
- t-decrypt-verify.py \
- t-sig-notation.py \
- t-export.py \
- t-import.py \
- t-edit.py \
- t-keylist.py \
- t-keylist-from-data.py \
- t-wait.py \
- t-encrypt-large.py \
- t-file-name.py \
- t-idiomatic.py \
- t-protocol-assuan.py \
- t-quick-key-creation.py \
- t-quick-subkey-creation.py \
- t-quick-key-manipulation.py \
- t-quick-key-signing.py
-
-XTESTS = initial.py $(py_tests) final.py
-EXTRA_DIST = support.py $(XTESTS) encrypt-only.asc sign-only.asc \
- run-tests.py
-
-# XXX: Currently, one cannot override automake's 'check' target. As a
-# workaround, we avoid defining 'TESTS', thus automake will not emit
-# the 'check' target. For extra robustness, we merely define a
-# dependency on 'xcheck', so this hack should also work even if
-# automake would emit the 'check' target, as adding dependencies to
-# targets is okay.
-check: xcheck
-
-.PHONY: xcheck
-
-xcheck: all
- $(TESTS_ENVIRONMENT) $(PYTHON) $(srcdir)/run-tests.py \
- --interpreters="$(PYTHONS)" --srcdir=$(srcdir) $(TESTFLAGS) \
- $(XTESTS)
-
-CLEANFILES = secring.gpg pubring.gpg pubring.kbx trustdb.gpg dirmngr.conf \
- gpg-agent.conf pubring.kbx~ gpg.conf pubring.gpg~ \
- random_seed .gpg-v21-migrated tofu.db \
- pubring-stamp gpg-sample.stamp
-
-private_keys = \
- $(test_srcdir)/13CD0F3BDF24BE53FE192D62F18737256FF6E4FD \
- $(test_srcdir)/76F7E2B35832976B50A27A282D9B87E44577EB66 \
- $(test_srcdir)/A0747D5F9425E6664F4FFBEED20FBCA79FDED2BD \
- $(test_srcdir)/13CBE3758AFE42B5E5E2AE4CED27AFA455E3F87F \
- $(test_srcdir)/7A030357C0F253A5BBCD282FFC4E521B37558F5C
-
-clean-local:
- -$(TESTS_ENVIRONMENT) $(top_srcdir)/tests/start-stop-agent --stop
- -rm -fR -- private-keys-v1.d openpgp-revocs.d S.gpg-agent sshcontrol
-
-
-BUILT_SOURCES = gpg.conf gpg-agent.conf pubring-stamp \
- gpg-sample.stamp
-
-gpg-sample.stamp: $(private_keys)
- -$(TESTS_ENVIRONMENT) gpgconf --kill all
- $(MKDIR_P) ./private-keys-v1.d
- for k in $(private_keys); do \
- cp $$k private-keys-v1.d/$${k#$(test_srcdir)/}.key; \
- done
- echo x > ./gpg-sample.stamp
-
-pubring-stamp: $(test_srcdir)/pubdemo.asc gpg-sample.stamp
- $(TESTS_ENVIRONMENT) $(GPG) --batch --no-permission-warning \
- --import $(test_srcdir)/pubdemo.asc
- -$(TESTS_ENVIRONMENT) $(GPG) --batch --no-permission-warning \
- --import $(test_srcdir)/secdemo.asc
- -$(TESTS_ENVIRONMENT) gpgconf --kill all
- echo x > ./pubring-stamp
-
-gpg.conf:
-# This is required for t-sig-notations.
- echo no-force-v3-sigs > ./gpg.conf
- echo default-key A0FF4590BB6122EDEF6E3C542D727CC768697734 >> ./gpg.conf
-
-gpg-agent.conf:
-# This is required for gpg2, which does not support command fd.
- echo pinentry-program $(abs_top_srcdir)/tests/gpg/pinentry >$@
- echo disable-scdaemon >> $@
-
-
-# end-of-file
diff --git a/lang/python/tests/encrypt-only.asc b/lang/python/tests/encrypt-only.asc
deleted file mode 100644
index 6e068a0c..00000000
--- a/lang/python/tests/encrypt-only.asc
+++ /dev/null
@@ -1,33 +0,0 @@
------BEGIN PGP PRIVATE KEY BLOCK-----
-Version: GnuPG v2
-
-lQPGBFd/jL0BCAD8jfoblIrlHS0shDCbSiO7RFaT6sEa/6tSPkv6XzBba9oXOkuO
-FLTkNpIwPb92U8SOS+27j7n9v6U5NW2tyZwIoeLb8lUyKnCBr22IUhTFVXf7fros
-zmPugsJaDBi9f7RL0bqiCn4EV3DGKyAukZklk1k1JV4Ec3dEPMAmL9LmnvXreEjU
-pQZZN9sJV32ew8CYkZ6AB8foFQwfxn4x0iUoKvj8kW9RsY1KMPucp4YiFhHeMZW1
-5wGAZdEIZYKyWEp4bi/wC9yn/TUR5uNWc0uVJzQvuHwaYjolPW89DinjBkPEJCBr
-RwumaOWfbu/hb51wBoUTmUr9diVw93L2ROLPABEBAAH+BwMC1bmUAoPJKI/WBiHm
-P6tSNRLdd+7etfjAFvKL7Ob2pNTrc3hbtyOLIQ9tuEaqXEyfnCms/DCg8QdkaFUv
-Nkoj0W5+G/MQuR2jIvrq/wyL/4jIw0AFbp9/V1JbSXZh2g1eJLnnykn7uPxCbDFY
-FrVeFmkhoxZ3pid6ZQSWlxXsdW+YMvbUfNIIZpbygI/alIBvbDS1YJYEBDCwFZjU
-7quE2Ufxo8dm34EHcmbpYpn4r3DUrU5AHQ2fIprLIVqHn4+NUrR8WZS9nCnIeu/z
-OaJUZ2lJFRjUC6Gpsbsw6Xwh4Ntwzyt2SsXc+UVZngjozw3yw0VpDifxMBqcd+9x
-baSc7dfbOZF2BCZOwnB7/QrFZDaqe5b3n6rTdj1va/CrJMuxbgaNAjvLpdT2EUPZ
-fHDAdPAjASofxBREv+HIKwksuPJ9cvavZU6Q4KQA7buo25hd7yjuba4WbLQhp0jH
-AT1P7SdakMhk/IFcUKFdB3ZyZZZ1JTTPa2xZn9yDa3Jb1t7IMLYLwY6EFbjvaxH5
-WEGZvOAq2iEa941mxv4miwgf7MQPx6g9u0+dXc7iZApwWs9MNfJo3J25sKhWK5Be
-Bu3w7c6nrlg40GtPuDRgaBvYWbVerJcepTA/EPfugEJtRsDJkt7wZq1H9lWHU7Ih
-Up6/+XKtBzlCIqYjorzFLnC721pcKFcPhLgvtjjNJvUsLXbr9CwnBub/eTFcfRb2
-ro60H9cOhf0fQSQyvkZWfzq0BN6rG27G1KhyprsJAmpW0fTHHkB4V19788C2sTQv
-D93VU3Nd6MWocwAYtPWmtwXPpuOAU9IcwAvVTxBeBJCXxbH3uyx1frwDXA7lf4Pb
-a8hMoMMVU+rAG1uepKI5h4seBIKP7qKEKAPloI6/Vtf7/Ump4DKprS1QpfOW+lsX
-aR48lgNR6sQXtDdFbmNyeXB0aW9uIE9ubHkgKHRlc3Qga2V5LCBkbyBub3QgdXNl
-KSA8ZW9AZXhhbXBsZS5vcmc+iQE3BBMBCAAhBQJXf4y9AhsNBQsJCAcCBhUICQoL
-AgQWAgMBAh4BAheAAAoJEJIFcnabn+Gc/KgH/07wzrsBzTqdI5L6cIqQ81Vq8ASj
-tsuYoVfFxymB8F/AxpnLMhYRuWQTcoUHQ/olG2yA0C6o4e1JPAmh6LQGwr0eRnc2
-2tr4cbnQAhXpJ8xOR6kH9eE8nGeC7tlEeeV/Wnj3SLZOXOjYjnA9bA3JX9DP3qcz
-w1sKQPEHsGkMJuT0ZadnlJ1qw8AnnNKLDlG4kIO9hz3qB8BjxFZf+j5f/nhFNv5I
-pnNdMcDwQqHVrwD6WO+Xmmdykab0awL9To0S9DG9ohcXuJiTMa8vtXFSBM0koUDk
-BWajEq+QAcDpmdFsQr4/gbzvHkAIVTQb0seJr4gpmXFZu3TMuGVD9j13GaI=
-=38ri
------END PGP PRIVATE KEY BLOCK-----
diff --git a/lang/python/tests/final.py b/lang/python/tests/final.py
deleted file mode 100755
index 4deb57db..00000000
--- a/lang/python/tests/final.py
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (C) 2016 g10 Code GmbH
-#
-# This file is part of GPGME.
-#
-# GPGME 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.
-#
-# GPGME 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 Lesser General
-# Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this program; if not, see <https://www.gnu.org/licenses/>.
-
-from __future__ import absolute_import, print_function, unicode_literals
-
-import os
-import subprocess
-import support
-_ = support # to appease pyflakes.
-
-del absolute_import, print_function, unicode_literals
-
-subprocess.check_call([
- os.path.join(os.getenv('top_srcdir'), "tests", "start-stop-agent"),
- "--stop"
-])
diff --git a/lang/python/tests/initial.py b/lang/python/tests/initial.py
deleted file mode 100755
index c94e47eb..00000000
--- a/lang/python/tests/initial.py
+++ /dev/null
@@ -1,45 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (C) 2016 g10 Code GmbH
-#
-# This file is part of GPGME.
-#
-# GPGME 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.
-#
-# GPGME 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 Lesser General
-# Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this program; if not, see <https://www.gnu.org/licenses/>.
-
-from __future__ import absolute_import, print_function, unicode_literals
-
-import os
-import subprocess
-import gpg
-import support
-
-del absolute_import, print_function, unicode_literals
-
-print("Using gpg module from {0!r}.".format(os.path.dirname(gpg.__file__)))
-
-subprocess.check_call([
- os.path.join(os.getenv('top_srcdir'), "tests", "start-stop-agent"),
- "--start"
-])
-
-with gpg.Context() as c:
- alpha = c.get_key("A0FF4590BB6122EDEF6E3C542D727CC768697734", False)
- bob = c.get_key("D695676BDCEDCC2CDD6152BCFE180B1DA9E3B0B2", False)
-
- # Mark alpha as trusted. The signature verification tests expect
- # this.
- support.mark_key_trusted(c, alpha)
-
- c.op_import(open(support.in_srcdir("encrypt-only.asc")))
- c.op_import(open(support.in_srcdir("sign-only.asc")))
diff --git a/lang/python/tests/run-tests.py b/lang/python/tests/run-tests.py
deleted file mode 100644
index 3a168f4d..00000000
--- a/lang/python/tests/run-tests.py
+++ /dev/null
@@ -1,137 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (C) 2016 g10 Code GmbH
-#
-# This file is part of GPGME.
-#
-# GPGME 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.
-#
-# GPGME 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 Lesser General
-# Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this program; if not, see <https://www.gnu.org/licenses/>.
-
-from __future__ import absolute_import, division
-from __future__ import print_function, unicode_literals
-
-import argparse
-import glob
-import os
-import subprocess
-import sys
-
-del absolute_import, division, print_function, unicode_literals
-
-
-class SplitAndAccumulate(argparse.Action):
- def __call__(self, parser, namespace, values, option_string=None):
- current = getattr(namespace, self.dest, list())
- current.extend(values.split())
- setattr(namespace, self.dest, current)
-
-
-parser = argparse.ArgumentParser(description='Run tests.')
-parser.add_argument(
- 'tests', metavar='TEST', type=str, nargs='+', help='A test to run')
-parser.add_argument(
- '-v', '--verbose', action="store_true", default=False, help='Be verbose.')
-parser.add_argument(
- '-q', '--quiet', action="store_true", default=False, help='Be quiet.')
-parser.add_argument(
- '--interpreters',
- metavar='PYTHON',
- type=str,
- default=[],
- action=SplitAndAccumulate,
- help='Use these interpreters to run the tests, ' + 'separated by spaces.')
-parser.add_argument(
- '--srcdir',
- type=str,
- default=os.environ.get("srcdir", ""),
- help='Location of the tests.')
-parser.add_argument(
- '--builddir',
- type=str,
- default=os.environ.get("abs_builddir", ""),
- help='Location of the tests.')
-parser.add_argument(
- '--python-libdir',
- type=str,
- default=None,
- help='Optional location of the in-tree module lib directory.')
-parser.add_argument(
- '--parallel',
- action="store_true",
- default=False,
- help='Ignored. For compatibility with run-tests.scm.')
-
-args = parser.parse_args()
-if not args.interpreters:
- args.interpreters = [sys.executable]
-
-out = sys.stdout if args.verbose else None
-err = sys.stderr if args.verbose else None
-
-
-def status_to_str(code):
- return {0: "PASS", 77: "SKIP", 99: "ERROR"}.get(code, "FAIL")
-
-
-results = list()
-for interpreter in args.interpreters:
- version = subprocess.check_output([
- interpreter, "-c",
- "import sys; print('{0}.{1}'.format(sys.version_info[0], sys.version_info[1]))"
- ]).strip().decode()
-
- if args.python_libdir:
- python_libdir = args.python_libdir
- else:
- pattern = os.path.join(args.builddir, "..", "{0}-gpg".format(
- os.path.basename(interpreter)), "lib*")
- libdirs = glob.glob(pattern)
- if len(libdirs) == 0:
- sys.exit(
- "Build directory matching {0!r} not found.".format(pattern))
- elif len(libdirs) > 1:
- sys.exit(
- "Multiple build directories matching {0!r} found: {1}".format(
- pattern, libdirs))
- python_libdir = libdirs[0]
-
- env = dict(os.environ)
- env["PYTHONPATH"] = python_libdir
-
- if not args.quiet:
- print("Running tests using {0} ({1})...".format(interpreter, version))
-
- for test in args.tests:
- status = subprocess.call(
- [interpreter, os.path.join(args.srcdir, test)],
- env=env,
- stdout=out,
- stderr=err)
- if not args.quiet:
- print("{0}: {1}".format(status_to_str(status), test))
- results.append(status)
-
-
-def count(status):
- return len(list(filter(lambda x: x == status, results)))
-
-
-def failed():
- return len(list(filter(lambda x: x not in (0, 77, 99), results)))
-
-
-if not args.quiet:
- print("{0} tests run, {1} succeeded, {2} failed, {3} skipped.".format(
- len(results), count(0), failed(), count(77)))
- sys.exit(len(results) - count(0) - count(77))
-sys.exit(results[0])
diff --git a/lang/python/tests/sign-only.asc b/lang/python/tests/sign-only.asc
deleted file mode 100644
index 6e2a6f3c..00000000
--- a/lang/python/tests/sign-only.asc
+++ /dev/null
@@ -1,33 +0,0 @@
------BEGIN PGP PRIVATE KEY BLOCK-----
-Version: GnuPG v2
-
-lQPFBFd/jO8BCADiull4EVJiKmJqclPyU6GhTlbJXw7Ch0zbFAauOWYT3ACmgr1U
-KfJlZ2sPe2EezZkVSACxgIjTCzcgKQLh/swXdhO8uEgWEIN8f07WcSVDrcRGYwDS
-KFSRsK0bfO/OQQDUsSkNQSHjcOdLnCHCinMrQi1mBZOs+Y/DXOkkEV1zbFFV7q6X
-4vX9HSWwTRQTdOV9CFZykbwM+X1YIZlVtpOAKqSNJi3P17uQF7P9zko6HWKKKQ5S
-96BfXUOIpBRl82R85/yQgeGrWlvZ2BT2ittscNQlBKqLHJ7LIeDr9ctbKlKZjHTn
-Da7NYg+PoMHspbizjSONbEzpcR/9ZUq16oJJABEBAAH+BwMC7hQZNJSmlX/W6sfL
-0wakX6kTsiCEMy2vMCRcZ769JKT234avHtkL/g7MBJEzqdG9HSEp7+LHGuOWJhfa
-20f61WvPT5ujUIy//QXJ9a8z877jCm+fHKCTDXGYLLfCkJLfr3/GfTRy6gaIGTSw
-BqZaRelPvHbMp+eiFqDkf8W/E1LO3/83k87+pXggjz4p0OasyMw8RcDmy+IKBMGG
-bzet5WIKHIhpblIzuuucQHOjtwA8vCedub3F4lcRuULe2GW6sNuCB9kjSC9g6D1d
-bJ+WYi5GiUUQARGSNXiWVoVPLpEo0i6/2bKJ7vBYGRewNp42ebVQU2bFW7uzhaIq
-4itzNTjFNTpcxX3Lo0/mzJpe7pVRJwN+HGahNGT0EtPDsT/nNTFDUq8e8nt0U9/8
-0eekg4MRBJEzE3A+wosIHPjzCkQgu98+nh79rPMbCpZVxNfLb136cTkubmHCWptN
-T2MbqK2L4hMcOxHGGOmI9SjFltNeKtTsVtkxh3Vj67UESPdN550centfasJYA0bj
-guRQfHWHJXYIfFwblIFkl8xtIVLTeWlQMEvc7oI8jcJOc2ri8Zdjj/55xxv/RvjC
-ZKzfjPpdkLYcN1zP/hETLD68u7WmiMAYCr8Eq9YQ3oKklUpWxRMCAAtmgjGGpm5P
-QQW+36s96Q3cuG8R0Z4Wo8y89FgWzCEzuAhemCdffoUA8kn0HJQaVndnExJb1Ebz
-wp+zsX/JqiOFvcKHJAWCaXkk0oXVi1aIV4tQyCPfhyjnd846K7g8UabAz51IJHvF
-CXRAmqJvu26NqjYOfWBJJxZQsPH4FjPfYx+e/MFPZa+UTKCfzaOHClrePHUDHw58
-Ez5ItcORYn51IWW33r+c4tlhW5mrjMD7FcjFOuYT4EIivd5BSnwLP0fjBz8TBVAY
-yyFO+YAXTQ+0MVNpZ24gT25seSAodGVzdCBrZXksIGRvIG5vdCB1c2UpIDxzb0Bl
-eGFtcGxlLm9yZz6JATcEEwEIACEFAld/jO8CGwMFCwkIBwIGFQgJCgsCBBYCAwEC
-HgECF4AACgkQ/tFT8S8Y9F3PAwgAvKav6+luvcAhrpBMO4z/Q8kDMtO5AW1KTEcz
-neqpj5eTVJVbYUgDuBlEXbFYtcZmYyYtJC5KQkN3bxPmehVUzGk27UYWMWbPIWyU
-riGcFL5BWWQaKSqiWUypzhNVnxYoiWVhHeJ36LICVMpLBaubgcpwCSW/j58yZo/7
-XRwf40OblXr4cevIW4Oq5GSxKOQF+DCErF6BeikC2i+NoqSxwNiIO/1NUxs8QfAI
-z8UT/bSUXr62BWLfeCIDGgXutMMPth3tKi4DlvLCzI6eYJrd8E3Rt7iUZm9IH8OQ
-Djv2DKnL/E/AP8oITItrOmICqfEWcj+Tk2Xep4pCCMNU+Pa0yg==
-=gG5b
------END PGP PRIVATE KEY BLOCK-----
diff --git a/lang/python/tests/support.py b/lang/python/tests/support.py
deleted file mode 100644
index dc42a361..00000000
--- a/lang/python/tests/support.py
+++ /dev/null
@@ -1,156 +0,0 @@
-# Copyright (C) 2016 g10 Code GmbH
-#
-# This file is part of GPGME.
-#
-# GPGME 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.
-#
-# GPGME 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 Lesser General
-# Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this program; if not, see <https://www.gnu.org/licenses/>.
-
-from __future__ import absolute_import, print_function, unicode_literals
-
-import contextlib
-import shutil
-import sys
-import os
-import re
-import tempfile
-import time
-import gpg
-
-del absolute_import, print_function, unicode_literals
-
-
-def assert_gpg_version(version=(2, 1, 0)):
- with gpg.Context() as c:
- clean_version = re.match(r'\d+\.\d+\.\d+',
- c.engine_info.version).group(0)
- if tuple(map(int, clean_version.split('.'))) < version:
- print("GnuPG too old: have {0}, need {1}.".format(
- c.engine_info.version, '.'.join(map(str, version))))
- sys.exit(77)
-
-def is_gpg_version(version):
- with gpg.Context() as c:
- clean_version = re.match(r'\d+\.\d+\.\d+',
- c.engine_info.version).group(0)
- return tuple(map(int, clean_version.split('.'))) == version
-
-
-def have_tofu_support(ctx, some_uid):
- keys = list(
- ctx.keylist(
- some_uid,
- mode=(gpg.constants.keylist.mode.LOCAL |
- gpg.constants.keylist.mode.WITH_TOFU)))
- return len(keys) > 0
-
-
-# Skip the Python tests for GnuPG < 2.1.12. Prior versions do not
-# understand the command line flags that we assume exist. C.f. issue
-# 3008.
-assert_gpg_version((2, 1, 12))
-
-# known keys
-alpha = "A0FF4590BB6122EDEF6E3C542D727CC768697734"
-bob = "D695676BDCEDCC2CDD6152BCFE180B1DA9E3B0B2"
-encrypt_only = "F52770D5C4DB41408D918C9F920572769B9FE19C"
-sign_only = "7CCA20CCDE5394CEE71C9F0BFED153F12F18F45D"
-no_such_key = "A" * 40
-
-
-def make_filename(name):
- return os.path.join(os.environ['top_srcdir'], 'tests', 'gpg', name)
-
-
-def in_srcdir(name):
- return os.path.join(os.environ['srcdir'], name)
-
-
-verbose = int(os.environ.get('verbose', 0)) > 1
-
-
-def print_data(data):
- if verbose:
- try:
- # See if it is a file-like object.
- data.seek(0, os.SEEK_SET)
- data = data.read()
- except:
- # Hope for the best.
- pass
-
- if hasattr(sys.stdout, "buffer"):
- sys.stdout.buffer.write(data)
- else:
- sys.stdout.write(data)
-
-
-def mark_key_trusted(ctx, key):
- class Editor(object):
- def __init__(self):
- self.steps = ["trust", "save"]
-
- def edit(self, status, args, out):
- if args == "keyedit.prompt":
- result = self.steps.pop(0)
- elif args == "edit_ownertrust.value":
- result = "5"
- elif args == "edit_ownertrust.set_ultimate.okay":
- result = "Y"
- elif args == "keyedit.save.okay":
- result = "Y"
- else:
- result = None
- return result
-
- with gpg.Data() as sink:
- ctx.op_edit(key, Editor().edit, sink, sink)
-
-
-# Python3.2 and up has tempfile.TemporaryDirectory, but we cannot use
-# that, because there shutil.rmtree is used without
-# ignore_errors=True, and that races against gpg-agent deleting its
-# sockets.
-class TemporaryDirectory(object):
- def __enter__(self):
- self.path = tempfile.mkdtemp()
- return self.path
-
- def __exit__(self, *args):
- shutil.rmtree(self.path, ignore_errors=True)
-
-
-def EphemeralContext():
- with TemporaryDirectory() as tmp:
- home = os.environ['GNUPGHOME']
- shutil.copy(os.path.join(home, "gpg.conf"), tmp)
- shutil.copy(os.path.join(home, "gpg-agent.conf"), tmp)
-
- with gpg.Context(home_dir=tmp) as ctx:
- yield ctx
-
- # Ask the agent to quit.
- agent_socket = os.path.join(tmp, "S.gpg-agent")
- ctx.protocol = gpg.constants.protocol.ASSUAN
- ctx.set_engine_info(ctx.protocol, file_name=agent_socket)
- try:
- ctx.assuan_transact(["KILLAGENT"])
- except gpg.errors.GPGMEError as e:
- if e.getcode() == gpg.errors.ASS_CONNECT_FAILED:
- pass # the agent was not running
- else:
- raise
-
- # Block until it is really gone.
- while os.path.exists(agent_socket):
- time.sleep(.01)
diff --git a/lang/python/tests/t-callbacks.py b/lang/python/tests/t-callbacks.py
deleted file mode 100755
index 3a210dd0..00000000
--- a/lang/python/tests/t-callbacks.py
+++ /dev/null
@@ -1,321 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (C) 2016 g10 Code GmbH
-#
-# This file is part of GPGME.
-#
-# GPGME 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.
-#
-# GPGME 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 Lesser General
-# Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this program; if not, see <https://www.gnu.org/licenses/>.
-
-from __future__ import absolute_import, print_function, unicode_literals
-
-import os
-import platform
-import gpg
-import support
-_ = support # to appease pyflakes.
-
-del absolute_import, print_function, unicode_literals
-
-oops = None
-c = gpg.Context()
-c.set_pinentry_mode(gpg.constants.PINENTRY_MODE_LOOPBACK)
-
-source = gpg.Data("Hallo Leute\n")
-sink = gpg.Data()
-
-# Valid passphrases, both as string and bytes.
-for passphrase in ('foo', b'foo'):
-
- def passphrase_cb(hint, desc, prev_bad, hook=None):
- assert hook == passphrase
- return hook
-
- c.set_passphrase_cb(passphrase_cb, passphrase)
- c.op_encrypt([], 0, source, sink)
-
-
-# Returning an invalid type.
-def passphrase_cb(hint, desc, prev_bad, hook=None):
- return 0
-
-
-c.set_passphrase_cb(passphrase_cb, None)
-try:
- c.op_encrypt([], 0, source, sink)
-except Exception as e:
- assert type(e) == TypeError
- assert str(e) == "expected str or bytes from passphrase callback, got int"
-else:
- assert False, "Expected an error, got none"
-
-# Raising an exception inside callback.
-myException = Exception()
-
-
-def passphrase_cb(hint, desc, prev_bad, hook=None):
- raise myException
-
-
-c.set_passphrase_cb(passphrase_cb, None)
-try:
- c.op_encrypt([], 0, source, sink)
-except Exception as e:
- assert e == myException
-else:
- assert False, "Expected an error, got none"
-
-
-# Wrong kind of callback function.
-def bad_passphrase_cb():
- pass
-
-
-c.set_passphrase_cb(bad_passphrase_cb, None)
-try:
- c.op_encrypt([], 0, source, sink)
-except Exception as e:
- assert type(e) == TypeError
-else:
- assert False, "Expected an error, got none"
-
-# Test the progress callback.
-parms = """<GnupgKeyParms format="internal">
-Key-Type: RSA
-Key-Length: 1024
-Name-Real: Joe Tester
-Name-Comment: with stupid passphrase
-Name-Email: [email protected]
-Passphrase: Crypt0R0cks
-Expire-Date: 2099-12-31
-</GnupgKeyParms>
-"""
-
-prams = """<GnupgKeyParms format="internal">
-Key-Type: RSA
-Key-Length: 1024
-Name-Real: Joe Tester
-Name-Comment: with stupid passphrase
-Name-Email: [email protected]
-Passphrase: Crypt0R0cks
-Expire-Date: 2037-12-31
-</GnupgKeyParms>
-"""
-
-messages = []
-
-
-def progress_cb(what, typ, current, total, hook=None):
- assert hook == messages
- messages.append(
- "PROGRESS UPDATE: what = {}, type = {}, current = {}, total = {}"
- .format(what, typ, current, total))
-
-
-c = gpg.Context()
-c.set_progress_cb(progress_cb, messages)
-try:
- c.op_genkey(parms, None, None)
-except Exception as oops:
- c.op_genkey(prams, None, None)
-assert len(messages) > 0
-
-
-# Test exception handling.
-def progress_cb(what, typ, current, total, hook=None):
- raise myException
-
-
-c = gpg.Context()
-c.set_progress_cb(progress_cb, None)
-try:
- try:
- c.op_genkey(parms, None, None)
- except Exception as oops:
- c.op_genkey(prams, None, None)
-except Exception as e:
- assert e == myException
-else:
- assert False, "Expected an error, got none"
-
-# Test the edit callback.
-c = gpg.Context()
-c.set_pinentry_mode(gpg.constants.PINENTRY_MODE_LOOPBACK)
-c.set_passphrase_cb(lambda *args: "abc")
-sink = gpg.Data()
-alpha = c.get_key("A0FF4590BB6122EDEF6E3C542D727CC768697734", False)
-
-cookie = object()
-edit_cb_called = False
-
-def oops_check():
- if oops is not None and platform.architecture()[0] != "64bit":
- y2k38_msg = "System appears to be 32-bit and vulnerable to EOL in 2038."
- elif oops is not None and platform.architecture()[0] == "64bit":
- y2k38_msg = "System appears to be 64-bit, but may use 32-bit time."
- else:
- y2k38_msg = "System is 64-bit and/or not susceptible to 2038 EOL."
- return y2k38_msg
-
-
-def edit_cb(status, args, hook):
- global edit_cb_called
- edit_cb_called = True
- assert hook == cookie
- return "quit" if args == "keyedit.prompt" else None
-
-
-c.op_edit(alpha, edit_cb, cookie, sink)
-assert edit_cb_called
-
-# Test exceptions.
-c = gpg.Context()
-c.set_pinentry_mode(gpg.constants.PINENTRY_MODE_LOOPBACK)
-c.set_passphrase_cb(lambda *args: "abc")
-sink = gpg.Data()
-
-
-def edit_cb(status, args):
- raise myException
-
-
-try:
- c.op_edit(alpha, edit_cb, None, sink)
-except Exception as e:
- assert e == myException
-else:
- assert False, "Expected an error, got none"
-
-# Test the status callback.
-source = gpg.Data("Hallo Leute\n")
-sink = gpg.Data()
-
-status_cb_called = False
-
-
-def status_cb(keyword, args, hook=None):
- global status_cb_called
- status_cb_called = True
- assert hook == cookie
-
-
-c = gpg.Context()
-c.set_status_cb(status_cb, cookie)
-c.set_ctx_flag("full-status", "1")
-c.op_encrypt([alpha], gpg.constants.ENCRYPT_ALWAYS_TRUST, source, sink)
-assert status_cb_called
-
-# Test exceptions.
-source = gpg.Data("Hallo Leute\n")
-sink = gpg.Data()
-
-
-def status_cb(keyword, args):
- raise myException
-
-
-c = gpg.Context()
-c.set_status_cb(status_cb, None)
-c.set_ctx_flag("full-status", "1")
-try:
- c.op_encrypt([alpha], gpg.constants.ENCRYPT_ALWAYS_TRUST, source, sink)
-except Exception as e:
- assert e == myException
-else:
- assert False, "Expected an error, got none"
-
-
-# Test the data callbacks.
-def read_cb(amount, hook=None):
- assert hook == cookie
- return 0
-
-
-def release_cb(hook=None):
- assert hook == cookie
-
-
-data = gpg.Data(cbs=(read_cb, None, None, release_cb, cookie))
-try:
- data.read()
-except Exception as e:
- assert type(e) == TypeError
-else:
- assert False, "Expected an error, got none"
-
-
-def read_cb(amount):
- raise myException
-
-
-data = gpg.Data(cbs=(read_cb, None, None, lambda: None))
-try:
- data.read()
-except Exception as e:
- assert e == myException
-else:
- assert False, "Expected an error, got none"
-
-
-def write_cb(what, hook=None):
- assert hook == cookie
- return "wrong type"
-
-
-data = gpg.Data(cbs=(None, write_cb, None, release_cb, cookie))
-try:
- data.write(b'stuff')
-except Exception as e:
- assert type(e) == TypeError
-else:
- assert False, "Expected an error, got none"
-
-
-def write_cb(what):
- raise myException
-
-
-data = gpg.Data(cbs=(None, write_cb, None, lambda: None))
-try:
- data.write(b'stuff')
-except Exception as e:
- assert e == myException
-else:
- assert False, "Expected an error, got none"
-
-
-def seek_cb(offset, whence, hook=None):
- assert hook == cookie
- return "wrong type"
-
-
-data = gpg.Data(cbs=(None, None, seek_cb, release_cb, cookie))
-try:
- data.seek(0, os.SEEK_SET)
-except Exception as e:
- assert type(e) == TypeError
-else:
- assert False, "Expected an error, got none"
-
-
-def seek_cb(offset, whence):
- raise myException
-
-
-data = gpg.Data(cbs=(None, None, seek_cb, lambda: None))
-try:
- data.seek(0, os.SEEK_SET)
-except Exception as e:
- assert e == myException
-else:
- assert False, "Expected an error, got none"
diff --git a/lang/python/tests/t-data.py b/lang/python/tests/t-data.py
deleted file mode 100755
index 1c879f45..00000000
--- a/lang/python/tests/t-data.py
+++ /dev/null
@@ -1,140 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (C) 2016 g10 Code GmbH
-#
-# This file is part of GPGME.
-#
-# GPGME 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.
-#
-# GPGME 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 Lesser General
-# Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this program; if not, see <https://www.gnu.org/licenses/>.
-
-from __future__ import absolute_import, print_function, unicode_literals
-
-import io
-import os
-import tempfile
-import gpg
-import support
-_ = support # to appease pyflakes.
-
-del absolute_import, print_function, unicode_literals
-
-data = gpg.Data('Hello world!')
-assert data.read() == b'Hello world!'
-assert data.read() == b''
-
-data.seek(0, os.SEEK_SET)
-assert data.read() == b'Hello world!'
-assert data.read() == b''
-
-data = gpg.Data(b'Hello world!')
-assert data.read() == b'Hello world!'
-
-data = gpg.Data(b'Hello world!', copy=False)
-assert data.read() == b'Hello world!'
-
-data = gpg.Data()
-data.write('Hello world!')
-data.seek(0, os.SEEK_SET)
-assert data.read() == b'Hello world!'
-
-data = gpg.Data()
-data.write(b'Hello world!')
-data.seek(0, os.SEEK_SET)
-assert data.read() == b'Hello world!'
-
-data = gpg.Data()
-data.write(b'Hello world!')
-# We expect the second argument to default to SEEK_SET
-data.seek(0)
-assert data.read() == b'Hello world!'
-
-binjunk = bytes(range(256))
-data = gpg.Data()
-data.write(binjunk)
-data.seek(0, os.SEEK_SET)
-assert data.read() == binjunk
-
-data = gpg.Data()
-data.set_file_name("foobar")
-assert data.get_file_name() == "foobar"
-
-# Test reading from an existing file.
-with tempfile.NamedTemporaryFile() as tmp:
- tmp.write(binjunk)
- tmp.flush()
- tmp.seek(0)
-
- # Open using name.
- data = gpg.Data(file=tmp.name)
- assert data.read() == binjunk
-
- # Open using name, without copying.
- if False:
- # delayed reads are not yet supported
- data = gpg.Data(file=tmp.name, copy=False)
- assert data.read() == binjunk
-
- # Open using stream.
- tmp.seek(0)
- data = gpg.Data(file=tmp)
- assert data.read() == binjunk
-
- # Open using stream, offset, and length.
- data = gpg.Data(file=tmp, offset=0, length=42)
- assert data.read() == binjunk[:42]
-
- # Open using name, offset, and length.
- data = gpg.Data(file=tmp.name, offset=23, length=42)
- assert data.read() == binjunk[23:23 + 42]
-
-
-# Test callbacks.
-class DataObject(object):
- def __init__(self):
- self.buffer = io.BytesIO()
- self.released = False
-
- def read(self, amount, hook=None):
- assert not self.released
- return self.buffer.read(amount)
-
- def write(self, data, hook=None):
- assert not self.released
- return self.buffer.write(data)
-
- def seek(self, offset, whence, hook=None):
- assert not self.released
- return self.buffer.seek(offset, whence)
-
- def release(self, hook=None):
- assert not self.released
- self.released = True
-
-
-do = DataObject()
-cookie = object()
-data = gpg.Data(cbs=(do.read, do.write, do.seek, do.release, cookie))
-data.write('Hello world!')
-data.seek(0, os.SEEK_SET)
-assert data.read() == b'Hello world!'
-del data
-assert do.released
-
-# Again, without the cookie.
-do = DataObject()
-data = gpg.Data(cbs=(do.read, do.write, do.seek, do.release))
-data.write('Hello world!')
-data.seek(0, os.SEEK_SET)
-assert data.read() == b'Hello world!'
-del data
-assert do.released
diff --git a/lang/python/tests/t-decrypt-verify.py b/lang/python/tests/t-decrypt-verify.py
deleted file mode 100755
index 5307da77..00000000
--- a/lang/python/tests/t-decrypt-verify.py
+++ /dev/null
@@ -1,89 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (C) 2016 g10 Code GmbH
-#
-# This file is part of GPGME.
-#
-# GPGME 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.
-#
-# GPGME 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 Lesser General
-# Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this program; if not, see <https://www.gnu.org/licenses/>.
-
-from __future__ import absolute_import, print_function, unicode_literals
-
-import gpg
-import support
-
-del absolute_import, print_function, unicode_literals
-
-
-def check_verify_result(result, summary, fpr, status):
- assert len(result.signatures) == 1, "Unexpected number of signatures"
- sig = result.signatures[0]
- assert sig.summary == summary, "Unexpected signature summary"
- assert sig.fpr == fpr
- assert gpg.errors.GPGMEError(sig.status).getcode() == status
- assert len(sig.notations) == 0
- assert not sig.wrong_key_usage
- assert sig.validity == gpg.constants.validity.FULL
- assert gpg.errors.GPGMEError(
- sig.validity_reason).getcode() == gpg.errors.NO_ERROR
-
-
-c = gpg.Context()
-
-source = gpg.Data(file=support.make_filename("cipher-2.asc"))
-sink = gpg.Data()
-
-c.op_decrypt_verify(source, sink)
-result = c.op_decrypt_result()
-assert not result.unsupported_algorithm, \
- "Unsupported algorithm: {}".format(result.unsupported_algorithm)
-
-support.print_data(sink)
-
-verify_result = c.op_verify_result()
-check_verify_result(
- verify_result, gpg.constants.sigsum.VALID | gpg.constants.sigsum.GREEN,
- "A0FF4590BB6122EDEF6E3C542D727CC768697734", gpg.errors.NO_ERROR)
-
-# Idiomatic interface.
-with gpg.Context() as c:
- alpha = c.get_key("A0FF4590BB6122EDEF6E3C542D727CC768697734", False)
- bob = c.get_key("D695676BDCEDCC2CDD6152BCFE180B1DA9E3B0B2", False)
- plaintext, _, verify_result = \
- c.decrypt(open(support.make_filename("cipher-2.asc")), verify=[alpha])
- assert plaintext.find(b'Wenn Sie dies lesen k') >= 0, \
- 'Plaintext not found'
- check_verify_result(
- verify_result, gpg.constants.sigsum.VALID | gpg.constants.sigsum.GREEN,
- "A0FF4590BB6122EDEF6E3C542D727CC768697734", gpg.errors.NO_ERROR)
-
- try:
- c.decrypt(
- open(support.make_filename("cipher-2.asc")), verify=[alpha, bob])
- except Exception as e:
- assert len(e.missing) == 1
- assert e.missing[0] == bob
- else:
- assert False, "Expected an error, got none"
-
-# plaintext, _, verify_result = c.decrypt(open(support.make_filename("cipher-no-sig.asc")))
-# assert len(plaintext) > 0
-# assert len(verify_result.signatures) == 0
-# assert plaintext.find(b'Viscosity Dispersal Thimble Saturday Flaxseed Deflected') >= 0, \
-# 'unsigned Plaintext was not found'
-#
-# plaintext, _, verify_result = c.decrypt(open(support.make_filename("cipher-3.asc")))
-# assert len(plaintext) > 0
-# assert len(verify_result.signatures) == 1
-# assert plaintext.find(b'Reenact Studied Thermos Bonehead Unclasp Opposing') >= 0, \
-# 'second Plaintext not found'
diff --git a/lang/python/tests/t-decrypt.py b/lang/python/tests/t-decrypt.py
deleted file mode 100755
index 99002749..00000000
--- a/lang/python/tests/t-decrypt.py
+++ /dev/null
@@ -1,54 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (C) 2016 g10 Code GmbH
-#
-# This file is part of GPGME.
-#
-# GPGME 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.
-#
-# GPGME 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 Lesser General
-# Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this program; if not, see <https://www.gnu.org/licenses/>.
-
-from __future__ import absolute_import, print_function, unicode_literals
-
-import gpg
-import support
-
-del absolute_import, print_function, unicode_literals
-
-c = gpg.Context()
-
-source = gpg.Data(file=support.make_filename("cipher-1.asc"))
-sink = gpg.Data()
-
-c.op_decrypt(source, sink)
-result = c.op_decrypt_result()
-assert not result.unsupported_algorithm, \
- "Unsupported algorithm: {}".format(result.unsupported_algorithm)
-
-support.print_data(sink)
-
-# Idiomatic interface.
-with gpg.Context() as c:
- plaintext, _, _ = c.decrypt(open(support.make_filename("cipher-1.asc")), verify=False)
- assert len(plaintext) > 0
- assert plaintext.find(b'Wenn Sie dies lesen k') >= 0, \
- 'Plaintext not found'
-
- plaintext, _, _ = c.decrypt(open(support.make_filename("cipher-3.asc")), verify=False)
- assert len(plaintext) > 0
- assert plaintext.find(b'Reenact Studied Thermos Bonehead Unclasp Opposing') >= 0, \
- 'second Plaintext not found'
-
- plaintext, _, _ = c.decrypt(open(support.make_filename("cipher-no-sig.asc")), verify=False)
- assert len(plaintext) > 0
- assert plaintext.find(b'Viscosity Dispersal Thimble Saturday Flaxseed Deflected') >= 0, \
- 'third Plaintext was not found'
diff --git a/lang/python/tests/t-edit.py b/lang/python/tests/t-edit.py
deleted file mode 100755
index 48a6887d..00000000
--- a/lang/python/tests/t-edit.py
+++ /dev/null
@@ -1,76 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (C) 2005 Igor Belyi <[email protected]>
-# Copyright (C) 2016 g10 Code GmbH
-#
-# This file is part of GPGME.
-#
-# GPGME 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.
-#
-# GPGME 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 Lesser General
-# Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this program; if not, see <https://www.gnu.org/licenses/>.
-
-from __future__ import absolute_import, print_function, unicode_literals
-
-import sys
-import os
-import gpg
-import support
-_ = support # to appease pyflakes.
-
-del absolute_import, print_function, unicode_literals
-
-
-class KeyEditor(object):
- def __init__(self):
- self.steps = ["fpr", "expire", "1", "primary", "quit"]
- self.step = 0
- self.done = False
- self.verbose = int(os.environ.get('verbose', 0)) > 1
-
- def edit_fnc(self, status, args, out=None):
- if args == "keyedit.prompt":
- result = self.steps[self.step]
- self.step += 1
- elif args == "keyedit.save.okay":
- result = "Y"
- self.done = self.step == len(self.steps)
- elif args == "keygen.valid":
- result = "0"
- else:
- result = None
-
- if self.verbose:
- sys.stderr.write("Code: {}, args: {!r}, Returning: {!r}\n".format(
- status, args, result))
-
- return result
-
-
-c = gpg.Context()
-c.set_pinentry_mode(gpg.constants.PINENTRY_MODE_LOOPBACK)
-c.set_passphrase_cb(lambda *args: "abc")
-c.set_armor(True)
-
-# The deprecated interface.
-editor = KeyEditor()
-c.interact(
- c.get_key("A0FF4590BB6122EDEF6E3C542D727CC768697734", False),
- editor.edit_fnc)
-assert editor.done
-
-# The deprecated interface.
-sink = gpg.Data()
-editor = KeyEditor()
-c.op_edit(
- c.get_key("A0FF4590BB6122EDEF6E3C542D727CC768697734", False),
- editor.edit_fnc, sink, sink)
-assert editor.done
diff --git a/lang/python/tests/t-encrypt-large.py b/lang/python/tests/t-encrypt-large.py
deleted file mode 100755
index f682e8b2..00000000
--- a/lang/python/tests/t-encrypt-large.py
+++ /dev/null
@@ -1,72 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (C) 2016 g10 Code GmbH
-#
-# This file is part of GPGME.
-#
-# GPGME 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.
-#
-# GPGME 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 Lesser General
-# Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this program; if not, see <https://www.gnu.org/licenses/>.
-
-from __future__ import absolute_import, print_function, unicode_literals
-
-import sys
-import random
-import gpg
-import support
-
-del absolute_import, print_function, unicode_literals
-
-if len(sys.argv) == 2:
- nbytes = int(sys.argv[1])
-else:
- nbytes = 100000
-
-c = gpg.Context()
-
-ntoread = nbytes
-
-
-def read_cb(amount):
- global ntoread
- chunk = ntoread if ntoread < amount else amount
- ntoread -= chunk
- assert ntoread >= 0
- assert chunk >= 0
- return bytes(bytearray(random.randrange(256) for i in range(chunk)))
-
-
-nwritten = 0
-
-
-def write_cb(data):
- global nwritten
- nwritten += len(data)
- return len(data)
-
-
-source = gpg.Data(cbs=(read_cb, None, None, lambda: None))
-sink = gpg.Data(cbs=(None, write_cb, None, lambda: None))
-
-keys = []
-keys.append(c.get_key("A0FF4590BB6122EDEF6E3C542D727CC768697734", False))
-keys.append(c.get_key("D695676BDCEDCC2CDD6152BCFE180B1DA9E3B0B2", False))
-
-c.op_encrypt(keys, gpg.constants.ENCRYPT_ALWAYS_TRUST, source, sink)
-result = c.op_encrypt_result()
-assert not result.invalid_recipients, \
- "Invalid recipient encountered: {}".format(result.invalid_recipients.fpr)
-assert ntoread == 0
-
-if support.verbose:
- sys.stderr.write("plaintext={} bytes, ciphertext={} bytes\n".format(
- nbytes, nwritten))
diff --git a/lang/python/tests/t-encrypt-sign.py b/lang/python/tests/t-encrypt-sign.py
deleted file mode 100755
index d32ed3ad..00000000
--- a/lang/python/tests/t-encrypt-sign.py
+++ /dev/null
@@ -1,99 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (C) 2016 g10 Code GmbH
-#
-# This file is part of GPGME.
-#
-# GPGME 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.
-#
-# GPGME 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 Lesser General
-# Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this program; if not, see <https://www.gnu.org/licenses/>.
-
-from __future__ import absolute_import, print_function, unicode_literals
-
-import sys
-import gpg
-import support
-
-del absolute_import, print_function, unicode_literals
-
-c = gpg.Context()
-c.set_armor(True)
-
-
-def check_result(r, typ):
- if r.invalid_signers:
- sys.exit("Invalid signer found: {}".format(r.invalid_signers.fpr))
-
- if len(r.signatures) != 1:
- sys.exit("Unexpected number of signatures created")
-
- signature = r.signatures[0]
- if signature.type != typ:
- sys.exit("Wrong type of signature created")
-
- if signature.pubkey_algo != gpg.constants.pk.DSA:
- sys.exit("Wrong pubkey algorithm reported: {}".format(
- signature.pubkey_algo))
-
- if signature.hash_algo not in (gpg.constants.md.SHA1,
- gpg.constants.md.RMD160):
- sys.exit("Wrong hash algorithm reported: {}".format(
- signature.hash_algo))
-
- if signature.sig_class != 0:
- sys.exit("Wrong signature class reported: {}".format(
- signature.sig_class))
-
- if signature.fpr != "A0FF4590BB6122EDEF6E3C542D727CC768697734":
- sys.exit("Wrong fingerprint reported: {}".format(signature.fpr))
-
-
-keys = []
-keys.append(c.get_key("A0FF4590BB6122EDEF6E3C542D727CC768697734", False))
-keys.append(c.get_key("D695676BDCEDCC2CDD6152BCFE180B1DA9E3B0B2", False))
-
-for recipients in (keys, []):
- source = gpg.Data("Hallo Leute\n")
- sink = gpg.Data()
-
- c.op_encrypt_sign(recipients, gpg.constants.ENCRYPT_ALWAYS_TRUST, source,
- sink)
- result = c.op_encrypt_result()
- assert not result.invalid_recipients, \
- "Invalid recipient encountered: {}".format(
- result.invalid_recipients.fpr)
-
- result = c.op_sign_result()
- check_result(result, gpg.constants.sig.mode.NORMAL)
-
- support.print_data(sink)
-
-# Idiomatic interface.
-with gpg.Context(armor=True) as c:
- message = "Hallo Leute\n".encode()
- ciphertext, _, sig_result = c.encrypt(
- message, recipients=keys, always_trust=True)
- assert len(ciphertext) > 0
- assert ciphertext.find(b'BEGIN PGP MESSAGE') > 0, 'Marker not found'
- check_result(sig_result, gpg.constants.sig.mode.NORMAL)
-
- c.signers = [c.get_key(support.sign_only, True)]
- c.encrypt(message, recipients=keys, always_trust=True)
-
- c.signers = [c.get_key(support.encrypt_only, True)]
- try:
- c.encrypt(message, recipients=keys, always_trust=True)
- except gpg.errors.InvalidSigners as e:
- assert len(e.signers) == 1
- assert support.encrypt_only.endswith(e.signers[0].fpr)
- else:
- assert False, "Expected an InvalidSigners error, got none"
diff --git a/lang/python/tests/t-encrypt-sym.py b/lang/python/tests/t-encrypt-sym.py
deleted file mode 100755
index d22e0103..00000000
--- a/lang/python/tests/t-encrypt-sym.py
+++ /dev/null
@@ -1,94 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (C) 2016 g10 Code GmbH
-#
-# This file is part of GPGME.
-#
-# GPGME 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.
-#
-# GPGME 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 Lesser General
-# Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this program; if not, see <https://www.gnu.org/licenses/>.
-
-from __future__ import absolute_import, print_function, unicode_literals
-
-import os
-import gpg
-import support
-_ = support # to appease pyflakes.
-
-del absolute_import, print_function, unicode_literals
-
-for passphrase in ("abc", b"abc"):
- c = gpg.Context()
- c.set_armor(True)
- c.set_pinentry_mode(gpg.constants.PINENTRY_MODE_LOOPBACK)
-
- source = gpg.Data("Hallo Leute\n")
- cipher = gpg.Data()
-
- passphrase_cb_called = 0
-
- def passphrase_cb(hint, desc, prev_bad, hook=None):
- global passphrase_cb_called
- passphrase_cb_called += 1
- return passphrase
-
- c.set_passphrase_cb(passphrase_cb, None)
-
- c.op_encrypt([], 0, source, cipher)
- # gpg 2.2.21 has a bug in that for a new passphrase the callback
- # is called twice. This is fixed in 2.2.22 but a patch was also
- # distributed so that we allow both.
- if support.is_gpg_version((2,2,21)):
- print("Enabling GnuPG 2.2.21 bug 4991 test workaround.")
- assert passphrase_cb_called == 1 or passphrase_cb_called == 2, \
- "Callback called {} times".format(passphrase_cb_called)
- else:
- assert passphrase_cb_called == 1, \
- "Callback called {} times".format(passphrase_cb_called)
- support.print_data(cipher)
-
- c = gpg.Context()
- c.set_armor(True)
- c.set_pinentry_mode(gpg.constants.PINENTRY_MODE_LOOPBACK)
- c.set_passphrase_cb(passphrase_cb, None)
- plain = gpg.Data()
- cipher.seek(0, os.SEEK_SET)
-
- c.op_decrypt(cipher, plain)
- # Seems like the passphrase is cached.
- # assert passphrase_cb_called == 2, \
- # "Callback called {} times".format(passphrase_cb_called)
- support.print_data(plain)
-
- plain.seek(0, os.SEEK_SET)
- plaintext = plain.read()
- assert plaintext == b"Hallo Leute\n", \
- "Wrong plaintext {!r}".format(plaintext)
-
-# Idiomatic interface.
-for passphrase in ("abc", b"abc"):
- with gpg.Context(armor=True) as c:
- # Check that the passphrase callback is not altered.
- def f(*args):
- assert False
-
- c.set_passphrase_cb(f)
-
- message = "Hallo Leute\n".encode()
- ciphertext, _, _ = c.encrypt(
- message, passphrase=passphrase, sign=False)
- assert ciphertext.find(b'BEGIN PGP MESSAGE') > 0, 'Marker not found'
-
- plaintext, _, _ = c.decrypt(ciphertext, passphrase=passphrase)
- assert plaintext == message, 'Message body not recovered'
-
- assert c._passphrase_cb[1] == f, "Passphrase callback not restored"
diff --git a/lang/python/tests/t-encrypt.py b/lang/python/tests/t-encrypt.py
deleted file mode 100755
index 0ee100d8..00000000
--- a/lang/python/tests/t-encrypt.py
+++ /dev/null
@@ -1,80 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (C) 2016 g10 Code GmbH
-#
-# This file is part of GPGME.
-#
-# GPGME 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.
-#
-# GPGME 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 Lesser General
-# Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this program; if not, see <https://www.gnu.org/licenses/>.
-
-from __future__ import absolute_import, print_function, unicode_literals
-
-import gpg
-import support
-
-del absolute_import, print_function, unicode_literals
-
-c = gpg.Context()
-c.set_armor(True)
-
-source = gpg.Data("Hallo Leute\n")
-sink = gpg.Data()
-
-keys = []
-keys.append(c.get_key("A0FF4590BB6122EDEF6E3C542D727CC768697734", False))
-keys.append(c.get_key("D695676BDCEDCC2CDD6152BCFE180B1DA9E3B0B2", False))
-
-c.op_encrypt(keys, gpg.constants.ENCRYPT_ALWAYS_TRUST, source, sink)
-result = c.op_encrypt_result()
-assert not result.invalid_recipients, \
- "Invalid recipients: {}".format(", ".join(r.fpr for r in result.recipients))
-support.print_data(sink)
-
-# Idiomatic interface.
-with gpg.Context(armor=True) as c:
- ciphertext, _, _ = c.encrypt(
- "Hallo Leute\n".encode(),
- recipients=keys,
- sign=False,
- always_trust=True)
- assert len(ciphertext) > 0
- assert ciphertext.find(b'BEGIN PGP MESSAGE') > 0, 'Marker not found'
-
- c.encrypt(
- "Hallo Leute\n".encode(),
- recipients=[c.get_key(support.encrypt_only, False)],
- sign=False,
- always_trust=True)
-
- try:
- c.encrypt(
- "Hallo Leute\n".encode(),
- recipients=[c.get_key(support.sign_only, False)],
- sign=False,
- always_trust=True)
- except gpg.errors.InvalidRecipients as e:
- assert len(e.recipients) == 1
- assert support.sign_only.endswith(e.recipients[0].fpr)
- else:
- assert False, "Expected an InvalidRecipients error, got none"
-
- try:
- # People might be tempted to provide strings.
- # We should raise something useful.
- ciphertext, _, _ = c.encrypt(
- "Hallo Leute\n", recipients=keys, sign=False, always_trust=True)
- except TypeError as e:
- # This test is a bit fragile, because the message
- # may very well change. So if the behaviour will change
- # this test can easily be deleted.
- assert "encode" in str(e)
diff --git a/lang/python/tests/t-export.py b/lang/python/tests/t-export.py
deleted file mode 100755
index 02474e97..00000000
--- a/lang/python/tests/t-export.py
+++ /dev/null
@@ -1,40 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (C) 2016 g10 Code GmbH
-#
-# This file is part of GPGME.
-#
-# GPGME 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.
-#
-# GPGME 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 Lesser General
-# Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this program; if not, see <https://www.gnu.org/licenses/>.
-
-from __future__ import absolute_import, print_function, unicode_literals
-
-import gpg
-import support
-
-del absolute_import, print_function, unicode_literals
-
-c = gpg.Context()
-c.set_armor(True)
-
-sink = gpg.Data()
-c.op_export_ext(['Alpha', 'Bob'], 0, sink)
-support.print_data(sink)
-
-# Again. Now using a key array.
-keys = []
-keys.append(c.get_key("0x68697734", False)) # Alpha
-keys.append(c.get_key("0xA9E3B0B2", False)) # Bob
-sink = gpg.Data()
-c.op_export_keys(keys, 0, sink)
-support.print_data(sink)
diff --git a/lang/python/tests/t-file-name.py b/lang/python/tests/t-file-name.py
deleted file mode 100755
index 6daedb16..00000000
--- a/lang/python/tests/t-file-name.py
+++ /dev/null
@@ -1,46 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (C) 2016 g10 Code GmbH
-#
-# This file is part of GPGME.
-#
-# GPGME 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.
-#
-# GPGME 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 Lesser General
-# Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this program; if not, see <https://www.gnu.org/licenses/>.
-
-from __future__ import absolute_import, print_function, unicode_literals
-
-import os
-import gpg
-import support
-_ = support # to appease pyflakes.
-
-del absolute_import, print_function, unicode_literals
-
-testname = "abcde12345"
-
-c = gpg.Context()
-c.set_armor(True)
-
-source = gpg.Data("Hallo Leute\n")
-source.set_file_name(testname)
-cipher = gpg.Data()
-plain = gpg.Data()
-
-keys = []
-keys.append(c.get_key("A0FF4590BB6122EDEF6E3C542D727CC768697734", False))
-
-c.op_encrypt(keys, gpg.constants.ENCRYPT_ALWAYS_TRUST, source, cipher)
-cipher.seek(0, os.SEEK_SET)
-c.op_decrypt(cipher, plain)
-result = c.op_decrypt_result()
-assert result.file_name == testname
diff --git a/lang/python/tests/t-idiomatic.py b/lang/python/tests/t-idiomatic.py
deleted file mode 100755
index faa41906..00000000
--- a/lang/python/tests/t-idiomatic.py
+++ /dev/null
@@ -1,89 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (C) 2016 g10 Code GmbH
-#
-# This file is part of GPGME.
-#
-# GPGME 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.
-#
-# GPGME 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 Lesser General
-# Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this program; if not, see <https://www.gnu.org/licenses/>.
-
-from __future__ import absolute_import, print_function, unicode_literals
-
-import sys
-import io
-import os
-import tempfile
-import gpg
-import support
-_ = support # to appease pyflakes.
-
-del absolute_import, print_function, unicode_literals
-
-# Both Context and Data can be used as context manager:
-with gpg.Context() as c, gpg.Data() as d:
- c.get_engine_info()
- d.write(b"Halloechen")
- leak_c = c
- leak_d = d
-
-leak_c.__del__()
-leak_d.__del__()
-assert leak_c.wrapped is None
-assert leak_d.wrapped is None
-
-
-def sign_and_verify(source, signed, sink):
- with gpg.Context() as c:
- c.op_sign(source, signed, gpg.constants.sig.mode.NORMAL)
- signed.seek(0, os.SEEK_SET)
- c.op_verify(signed, None, sink)
- result = c.op_verify_result()
-
- assert len(result.signatures) == 1, "Unexpected number of signatures"
- sig = result.signatures[0]
- assert sig.summary == (gpg.constants.sigsum.VALID |
- gpg.constants.sigsum.GREEN)
- assert gpg.errors.GPGMEError(sig.status).getcode() == gpg.errors.NO_ERROR
-
- sink.seek(0, os.SEEK_SET)
- assert sink.read() == b"Hallo Leute\n"
-
-
-# Demonstrate automatic wrapping of file-like objects with 'fileno'
-# method.
-with tempfile.TemporaryFile() as source, \
- tempfile.TemporaryFile() as signed, \
- tempfile.TemporaryFile() as sink:
- source.write(b"Hallo Leute\n")
- source.seek(0, os.SEEK_SET)
-
- sign_and_verify(source, signed, sink)
-
-if sys.version_info[0] == 3:
- # Python2's io.BytesIO does not implement the buffer interface,
- # hence we cannot use it as sink.
-
- # XXX: Python's io.BytesIo.truncate does not work as advertised.
- # https://bugs.python.org/issue27261
- bio = io.BytesIO()
- bio.truncate(1)
- if len(bio.getvalue()) != 1:
- # This version of Python is affected, preallocate buffer.
- preallocate = 128 * b'\x00'
- else:
- preallocate = b''
-
- # Demonstrate automatic wrapping of objects implementing the buffer
- # interface, and the use of data objects with the 'with' statement.
- with io.BytesIO(preallocate) as signed, gpg.Data() as sink:
- sign_and_verify(b"Hallo Leute\n", signed, sink)
diff --git a/lang/python/tests/t-import.py b/lang/python/tests/t-import.py
deleted file mode 100755
index c32f2d77..00000000
--- a/lang/python/tests/t-import.py
+++ /dev/null
@@ -1,85 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (C) 2016 Tobias Mueller <muelli at cryptobitch.de>
-#
-# This file is part of GPGME.
-#
-# GPGME 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.
-#
-# GPGME 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 Lesser General
-# Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this program; if not, see <https://www.gnu.org/licenses/>.
-
-from __future__ import absolute_import, print_function, unicode_literals
-
-import gpg
-import support
-
-del absolute_import, print_function, unicode_literals
-
-
-def check_result(result, fpr, secret):
- assert result.considered == 1 or (secret and result.considered == 3)
- assert result.no_user_id == 0
- assert not ((secret and result.imported != 0) or
- (not secret and
- (result.imported != 0 and result.imported != 1)))
- assert result.imported_rsa == 0
- assert not ((secret and
- (result.unchanged != 0 and result.unchanged != 1)) or
- (not secret and
- ((result.imported == 0 and result.unchanged != 1) or
- (result.imported == 1 and result.unchanged != 0))))
- assert result.new_user_ids == 0
- assert result.new_sub_keys == 0
- assert not ((secret and (
- (result.secret_imported == 0 and result.new_signatures != 0) or
- (result.secret_imported == 1 and result.new_signatures > 1))) or
- (not secret and result.new_signatures != 0))
- assert result.new_revocations == 0
- assert not (
- (secret and result.secret_read != 1 and result.secret_read != 3) or
- (not secret and result.secret_read != 0))
- assert not (
- (secret and result.secret_imported != 0 and result.
- secret_imported != 1 and result.
- secret_imported != 2) or (not secret and result.
- secret_imported != 0))
- assert not ((secret and
- ((result.secret_imported == 0 and result.
- secret_unchanged != 1 and result.
- secret_unchanged != 2) or (result.
- secret_imported == 1 and result.
- secret_unchanged != 0))) or
- (not secret and result.secret_unchanged != 0))
- assert result.not_imported == 0
- if secret:
- assert not (len(result.imports) in (0, 3))
- else:
- assert not (len(result.imports) in (0, 2))
-
- assert fpr == result.imports[0].fpr
- assert len(result.imports) == 1 or fpr == result.imports[1].fpr
- assert result.imports[0].result == 0
-
-
-c = gpg.Context()
-
-result = c.key_import(open(support.make_filename("pubkey-1.asc"), 'rb').read())
-check_result(result, "ADAB7FCC1F4DE2616ECFA402AF82244F9CD9FD55", False)
-
-result = c.key_import(open(support.make_filename("seckey-1.asc"), 'rb').read())
-check_result(result, "ADAB7FCC1F4DE2616ECFA402AF82244F9CD9FD55", True)
-
-try:
- result = c.key_import(b"thisisnotakey")
-except ValueError:
- pass
-assert result == "IMPORT_PROBLEM"
diff --git a/lang/python/tests/t-keylist-from-data.py b/lang/python/tests/t-keylist-from-data.py
deleted file mode 100755
index fa6034a3..00000000
--- a/lang/python/tests/t-keylist-from-data.py
+++ /dev/null
@@ -1,269 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (C) 2016 g10 Code GmbH
-#
-# This file is part of GPGME.
-#
-# GPGME 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.
-#
-# GPGME 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 Lesser General
-# Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this program; if not, see <https://www.gnu.org/licenses/>.
-
-from __future__ import absolute_import, print_function, unicode_literals
-
-import gpg
-import support
-
-del absolute_import, print_function, unicode_literals
-
-support.assert_gpg_version((2, 1, 14))
-
-
-# Check expration of keys. This test assumes three subkeys of which
-# 2 are expired; it is used with the "Whisky" test key. It has
-# already been checked that these 3 subkeys are available.
-def check_whisky(name, key):
- sub1 = key.subkeys[2]
- sub2 = key.subkeys[3]
-
- assert sub1.expired and sub2.expired, \
- "Subkey of `{}' not flagged as expired".format(name)
- assert sub1.expires == 1129636886 and sub2.expires == 1129636939, \
- "Subkey of `{}' has wrong expiration date".format(name)
-
-
-keys = [
- [
- "A0FF4590BB6122EDEF6E3C542D727CC768697734", "6AE6D7EE46A871F8",
- [["Alfa Test", "demo key", "[email protected]"],
- ["Alpha Test", "demo key", "[email protected]"],
- ["Alice", "demo key", ""]], 1
- ],
- [
- "D695676BDCEDCC2CDD6152BCFE180B1DA9E3B0B2", "5381EA4EE29BA37F",
- [["Bob", "demo key", ""],
- ["Bravo Test", "demo key", "[email protected]"]], 1
- ],
- [
- "61EE841A2A27EB983B3B3C26413F4AF31AFDAB6C", "E71E72ACBC43DA60",
- [["Charlie Test", "demo key", "[email protected]"]], 1
- ],
- [
- "6560C59C43D031C54D7C588EEBA9F240EB9DC9E6", "06F22880B0C45424",
- [["Delta Test", "demo key", "[email protected]"]], 1
- ],
- [
- "3531152DE293E26A07F504BC318C1FAEFAEF6D1B", "B5C79E1A7272144D",
- [["Echelon", "demo key",
- ""], ["Echo Test", "demo key", "[email protected]"],
- ["Eve", "demo key", ""]], 1
- ],
- [
- "56D33268F7FE693FBB594762D4BF57F37372E243", "0A32EE79EE45198E",
- [["Foxtrot Test", "demo key", "[email protected]"]], 1
- ],
- [
- "C9C07DCC6621B9FB8D071B1D168410A48FC282E6", "247491CC9DCAD354",
- [["Golf Test", "demo key", "[email protected]"]], 1
- ],
- [
- "9E91CBB11E4D4135583EF90513DB965534C6E3F1", "76E26537D622AD0A",
- [["Hotel Test", "demo key", "[email protected]"]], 1
- ],
- [
- "CD538D6CC9FB3D745ECDA5201FE8FC6F04259677", "C1C8EFDE61F76C73",
- [["India Test", "demo key", "[email protected]"]], 1
- ],
- [
- "F8F1EDC73995AB739AD54B380C820C71D2699313", "BD0B108735F8F136",
- [["Juliet Test", "demo key", "[email protected]"]], 1
- ],
- [
- "3FD11083779196C2ECDD9594AD1B0FAD43C2D0C7", "86CBB34A9AF64D02",
- [["Kilo Test", "demo key", "[email protected]"]], 1
- ],
- [
- "1DDD28CEF714F5B03B8C246937CAB51FB79103F8", "0363B449FE56350C",
- [["Lima Test", "demo key", "[email protected]"]], 1
- ],
- [
- "2686AA191A278013992C72EBBE794852BE5CF886", "5F600A834F31EAE8",
- [["Mallory", "demo key", ""],
- ["Mike Test", "demo key", "[email protected]"]], 1
- ],
- [
- "5AB9D6D7BAA1C95B3BAA3D9425B00FD430CEC684", "4C1D63308B70E472",
- [["November Test", "demo key", "[email protected]"]], 1
- ],
- [
- "43929E89F8F79381678CAE515F6356BA6D9732AC", "FF0785712681619F",
- [["Oscar Test", "demo key", "[email protected]"]], 1
- ],
- [
- "6FAA9C201E5E26DCBAEC39FD5D15E01D3FF13206", "2764E18263330D9C",
- [["Papa test", "demo key", "[email protected]"]], 1
- ],
- [
- "A7969DA1C3297AA96D49843F1C67EC133C661C84", "6CDCFC44A029ACF4",
- [["Quebec Test", "demo key", "[email protected]"]], 1
- ],
- [
- "38FBE1E4BF6A5E1242C8F6A13BDBEDB1777FBED3", "9FAB805A11D102EA",
- [["Romeo Test", "demo key", "[email protected]"]], 1
- ],
- [
- "045B2334ADD69FC221076841A5E67F7FA3AE3EA1", "93B88B0F0F1B50B4",
- [["Sierra Test", "demo key", "[email protected]"]], 1
- ],
- [
- "ECAC774F4EEEB0620767044A58CB9A4C85A81F38", "97B60E01101C0402",
- [["Tango Test", "demo key", "[email protected]"]], 1
- ],
- [
- "0DBCAD3F08843B9557C6C4D4A94C0F75653244D6", "93079B915522BDB9",
- [["Uniform Test", "demo key", "[email protected]"]], 1
- ],
- [
- "E8143C489C8D41124DC40D0B47AF4B6961F04784", "04071FB807287134",
- [["Victor Test", "demo key", "[email protected]"]], 1
- ],
- [
- "E8D6C90B683B0982BD557A99DEF0F7B8EC67DBDE", "D7FBB421FD6E27F6",
- [["Whisky Test", "demo key", "[email protected]"]], 3, check_whisky
- ],
- [
- "04C1DF62EFA0EBB00519B06A8979A6C5567FB34A", "5CC6F87F41E408BE",
- [["XRay Test", "demo key", "[email protected]"]], 1
- ],
- [
- "ED9B316F78644A58D042655A9EEF34CD4B11B25F", "5ADFD255F7B080AD",
- [["Yankee Test", "demo key", "[email protected]"]], 1
- ],
- [
- "23FD347A419429BACCD5E72D6BC4778054ACD246", "EF9DC276A172C881",
- [["Zulu Test", "demo key", "[email protected]"]], 1
- ],
-]
-
-
-def check_global(key, uids, n_subkeys):
- assert not key.revoked, "Key unexpectedly revoked"
- assert not key.expired, "Key unexpectedly expired"
- assert not key.disabled, "Key unexpectedly disabled"
- assert not key.invalid, "Key unexpectedly invalid"
- assert key.can_sign, "Key unexpectedly unusable for signing"
- assert key.can_certify, "Key unexpectedly unusable for certifications"
- assert not key.secret, "Key unexpectedly secret"
- assert not key.protocol != gpg.constants.protocol.OpenPGP, \
- "Key has unexpected protocol: {}".format(key.protocol)
- assert not key.issuer_serial, \
- "Key unexpectedly carries issuer serial: {}".format(key.issuer_serial)
- assert not key.issuer_name, \
- "Key unexpectedly carries issuer name: {}".format(key.issuer_name)
- assert not key.chain_id, \
- "Key unexpectedly carries chain ID: {}".format(key.chain_id)
- assert key.owner_trust == gpg.constants.validity.UNKNOWN, \
- "Key has unexpected owner trust: {}".format(key.owner_trust)
- assert len(key.subkeys) - 1 == n_subkeys, \
- "Key `{}' has unexpected number of subkeys".format(uids[0][0])
-
-
-def check_subkey(fpr, which, subkey):
- assert not subkey.revoked, which + " key unexpectedly revoked"
- assert not subkey.expired, which + " key unexpectedly expired"
- assert not subkey.disabled, which + " key unexpectedly disabled"
- assert not subkey.invalid, which + " key unexpectedly invalid"
-
- if which == "Primary":
- assert not subkey.can_encrypt, \
- which + " key unexpectedly usable for encryption"
- assert subkey.can_sign, \
- which + " key unexpectedly unusable for signing"
- assert subkey.can_certify, \
- which + " key unexpectedly unusable for certifications"
- else:
- assert subkey.can_encrypt, \
- which + " key unexpectedly unusable for encryption"
- assert not subkey.can_sign, \
- which + " key unexpectedly usable for signing"
- assert not subkey.can_certify, \
- which + " key unexpectedly usable for certifications"
-
- assert not subkey.secret, which + " key unexpectedly secret"
- assert not subkey.is_cardkey, "Public key marked as card key"
- assert not subkey.card_number, "Public key with card number set"
- assert not subkey.pubkey_algo != \
- (gpg.constants.pk.DSA if which == "Primary"
- else gpg.constants.pk.ELG_E), \
- which + " key has unexpected public key algo: {}".format(subkey.
- pubkey_algo)
- assert subkey.length == 1024, \
- which + " key has unexpected length: {}".format(subkey.length)
- assert fpr.endswith(subkey.keyid), \
- which + " key has unexpected key ID: {}".format(subkey.keyid)
- assert which == "Secondary" or subkey.fpr == fpr, \
- which + " key has unexpected fingerprint: {}".format(subkey.fpr)
- assert not subkey.expires, \
- which + " key unexpectedly expires: {}".format(subkey.expires)
-
-
-def check_uid(which, ref, uid):
- assert not uid.revoked, which + " user ID unexpectedly revoked"
- assert not uid.invalid, which + " user ID unexpectedly invalid"
- assert uid.validity == gpg.constants.validity.UNKNOWN, \
- which + " user ID has unexpected validity: {}".format(uid.validity)
- assert not uid.signatures, which + " user ID unexpectedly signed"
- assert uid.name == ref[0], \
- "Unexpected name in {} user ID: {!r}".format(which.lower(), uid.name)
- assert uid.comment == ref[1], \
- "Unexpected comment in {} user ID: {!r}".format(which.lower(),
- uid.comment)
- assert uid.email == ref[2], \
- "Unexpected email in {} user ID: {!r}".format(which.lower(), uid.email)
-
-
-# Export all the data from our keyring...
-key_data = gpg.Data()
-with gpg.Context() as c:
- c.op_export_keys([c.get_key(k[0]) for k in keys], 0, key_data)
-
-# ... rewind the tape...
-key_data.rewind()
-
-# ... and feed it into a keylist in an empty context.
-with support.EphemeralContext() as c:
- for i, key in enumerate(c.keylist(source=key_data)):
- try:
- if len(keys[i]) == 4:
- fpr, sec_keyid, uids, n_subkeys = keys[i]
- misc_check = None
- else:
- fpr, sec_keyid, uids, n_subkeys, misc_check = keys[i]
- except IndexError:
- # There are more keys. We don't check for that.
- break
-
- # Global key flags.
- check_global(key, uids, n_subkeys)
- check_subkey(fpr, "Primary", key.subkeys[0])
- check_subkey(sec_keyid, "Secondary", key.subkeys[1])
-
- assert len(key.uids) == len(uids)
- check_uid("First", uids[0], key.uids[0])
- if len(key.uids) > 1:
- check_uid("Second", uids[1], key.uids[1])
- if len(key.uids) > 2:
- check_uid("Third", uids[2], key.uids[2])
-
- if misc_check:
- misc_check(uids[0][0], key)
-
- assert len(list(c.keylist())) == 0, "Keys were imported"
diff --git a/lang/python/tests/t-keylist.py b/lang/python/tests/t-keylist.py
deleted file mode 100755
index 2aebe9a5..00000000
--- a/lang/python/tests/t-keylist.py
+++ /dev/null
@@ -1,337 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (C) 2016 g10 Code GmbH
-#
-# This file is part of GPGME.
-#
-# GPGME 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.
-#
-# GPGME 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 Lesser General
-# Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this program; if not, see <https://www.gnu.org/licenses/>.
-
-from __future__ import absolute_import, print_function, unicode_literals
-
-import gpg
-import support
-
-del absolute_import, print_function, unicode_literals
-
-c = gpg.Context()
-
-
-# Check expration of keys. This test assumes three subkeys of which
-# 2 are expired; it is used with the "Whisky" test key. It has
-# already been checked that these 3 subkeys are available.
-def check_whisky(name, key):
- sub1 = key.subkeys[2]
- sub2 = key.subkeys[3]
-
- assert sub1.expired and sub2.expired, \
- "Subkey of `{}' not flagged as expired".format(name)
- assert sub1.expires == 1129636886 and sub2.expires == 1129636939, \
- "Subkey of `{}' has wrong expiration date".format(name)
-
-
-keys = [
- [
- "A0FF4590BB6122EDEF6E3C542D727CC768697734", "6AE6D7EE46A871F8",
- [["Alfa Test", "demo key",
- "[email protected]"], ["Alpha Test", "demo key", "[email protected]"],
- ["Alice", "demo key", ""]], 1
- ],
- [
- "D695676BDCEDCC2CDD6152BCFE180B1DA9E3B0B2", "5381EA4EE29BA37F",
- [["Bob", "demo key", ""],
- ["Bravo Test", "demo key", "[email protected]"]], 1
- ],
- [
- "61EE841A2A27EB983B3B3C26413F4AF31AFDAB6C", "E71E72ACBC43DA60",
- [["Charlie Test", "demo key", "[email protected]"]], 1
- ],
- [
- "6560C59C43D031C54D7C588EEBA9F240EB9DC9E6", "06F22880B0C45424",
- [["Delta Test", "demo key", "[email protected]"]], 1
- ],
- [
- "3531152DE293E26A07F504BC318C1FAEFAEF6D1B", "B5C79E1A7272144D",
- [["Echelon", "demo key",
- ""], ["Echo Test", "demo key", "[email protected]"],
- ["Eve", "demo key", ""]], 1
- ],
- [
- "56D33268F7FE693FBB594762D4BF57F37372E243", "0A32EE79EE45198E",
- [["Foxtrot Test", "demo key", "[email protected]"]], 1
- ],
- [
- "C9C07DCC6621B9FB8D071B1D168410A48FC282E6", "247491CC9DCAD354",
- [["Golf Test", "demo key", "[email protected]"]], 1
- ],
- [
- "9E91CBB11E4D4135583EF90513DB965534C6E3F1", "76E26537D622AD0A",
- [["Hotel Test", "demo key", "[email protected]"]], 1
- ],
- [
- "CD538D6CC9FB3D745ECDA5201FE8FC6F04259677", "C1C8EFDE61F76C73",
- [["India Test", "demo key", "[email protected]"]], 1
- ],
- [
- "F8F1EDC73995AB739AD54B380C820C71D2699313", "BD0B108735F8F136",
- [["Juliet Test", "demo key", "[email protected]"]], 1
- ],
- [
- "3FD11083779196C2ECDD9594AD1B0FAD43C2D0C7", "86CBB34A9AF64D02",
- [["Kilo Test", "demo key", "[email protected]"]], 1
- ],
- [
- "1DDD28CEF714F5B03B8C246937CAB51FB79103F8", "0363B449FE56350C",
- [["Lima Test", "demo key", "[email protected]"]], 1
- ],
- [
- "2686AA191A278013992C72EBBE794852BE5CF886", "5F600A834F31EAE8",
- [["Mallory", "demo key", ""],
- ["Mike Test", "demo key", "[email protected]"]], 1
- ],
- [
- "5AB9D6D7BAA1C95B3BAA3D9425B00FD430CEC684", "4C1D63308B70E472",
- [["November Test", "demo key", "[email protected]"]], 1
- ],
- [
- "43929E89F8F79381678CAE515F6356BA6D9732AC", "FF0785712681619F",
- [["Oscar Test", "demo key", "[email protected]"]], 1
- ],
- [
- "6FAA9C201E5E26DCBAEC39FD5D15E01D3FF13206", "2764E18263330D9C",
- [["Papa test", "demo key", "[email protected]"]], 1
- ],
- [
- "A7969DA1C3297AA96D49843F1C67EC133C661C84", "6CDCFC44A029ACF4",
- [["Quebec Test", "demo key", "[email protected]"]], 1
- ],
- [
- "38FBE1E4BF6A5E1242C8F6A13BDBEDB1777FBED3", "9FAB805A11D102EA",
- [["Romeo Test", "demo key", "[email protected]"]], 1
- ],
- [
- "045B2334ADD69FC221076841A5E67F7FA3AE3EA1", "93B88B0F0F1B50B4",
- [["Sierra Test", "demo key", "[email protected]"]], 1
- ],
- [
- "ECAC774F4EEEB0620767044A58CB9A4C85A81F38", "97B60E01101C0402",
- [["Tango Test", "demo key", "[email protected]"]], 1
- ],
- [
- "0DBCAD3F08843B9557C6C4D4A94C0F75653244D6", "93079B915522BDB9",
- [["Uniform Test", "demo key", "[email protected]"]], 1
- ],
- [
- "E8143C489C8D41124DC40D0B47AF4B6961F04784", "04071FB807287134",
- [["Victor Test", "demo key", "[email protected]"]], 1
- ],
- [
- "E8D6C90B683B0982BD557A99DEF0F7B8EC67DBDE", "D7FBB421FD6E27F6",
- [["Whisky Test", "demo key", "[email protected]"]], 3, check_whisky
- ],
- [
- "04C1DF62EFA0EBB00519B06A8979A6C5567FB34A", "5CC6F87F41E408BE",
- [["XRay Test", "demo key", "[email protected]"]], 1
- ],
- [
- "ED9B316F78644A58D042655A9EEF34CD4B11B25F", "5ADFD255F7B080AD",
- [["Yankee Test", "demo key", "[email protected]"]], 1
- ],
- [
- "23FD347A419429BACCD5E72D6BC4778054ACD246", "EF9DC276A172C881",
- [["Zulu Test", "demo key", "[email protected]"]], 1
- ],
-]
-
-
-def check_global(key, uids, n_subkeys):
- assert not key.revoked, "Key unexpectedly revoked"
- assert not key.expired, "Key unexpectedly expired"
- assert not key.disabled, "Key unexpectedly disabled"
- assert not key.invalid, "Key unexpectedly invalid"
- assert key.can_sign, "Key unexpectedly unusable for signing"
- assert key.can_certify, "Key unexpectedly unusable for certifications"
- assert not key.secret, "Key unexpectedly secret"
- assert not key.protocol != gpg.constants.protocol.OpenPGP, \
- "Key has unexpected protocol: {}".format(key.protocol)
- assert not key.issuer_serial, \
- "Key unexpectedly carries issuer serial: {}".format(key.issuer_serial)
- assert not key.issuer_name, \
- "Key unexpectedly carries issuer name: {}".format(key.issuer_name)
- assert not key.chain_id, \
- "Key unexpectedly carries chain ID: {}".format(key.chain_id)
-
- # Only key Alfa is trusted
- assert (key.uids[0].name == 'Alfa Test'
- or key.owner_trust == gpg.constants.validity.UNKNOWN), \
- "Key has unexpected owner trust: {}".format(key.owner_trust)
- assert (key.uids[0].name != 'Alfa Test'
- or key.owner_trust == gpg.constants.validity.ULTIMATE), \
- "Key has unexpected owner trust: {}".format(key.owner_trust)
-
- assert len(key.subkeys) - 1 == n_subkeys, \
- "Key `{}' has unexpected number of subkeys".format(uids[0][0])
-
-
-def check_subkey(fpr, which, subkey):
- assert not subkey.revoked, which + " key unexpectedly revoked"
- assert not subkey.expired, which + " key unexpectedly expired"
- assert not subkey.disabled, which + " key unexpectedly disabled"
- assert not subkey.invalid, which + " key unexpectedly invalid"
-
- if which == "Primary":
- assert not subkey.can_encrypt, \
- which + " key unexpectedly usable for encryption"
- assert subkey.can_sign, \
- which + " key unexpectedly unusable for signing"
- assert subkey.can_certify, \
- which + " key unexpectedly unusable for certifications"
- else:
- assert subkey.can_encrypt, \
- which + " key unexpectedly unusable for encryption"
- assert not subkey.can_sign, \
- which + " key unexpectedly usable for signing"
- assert not subkey.can_certify, \
- which + " key unexpectedly usable for certifications"
-
- assert not subkey.secret, which + " key unexpectedly secret"
- assert not subkey.is_cardkey, "Public key marked as card key"
- assert not subkey.card_number, "Public key with card number set"
- assert not subkey.pubkey_algo != \
- (gpg.constants.pk.DSA if which == "Primary"
- else gpg.constants.pk.ELG_E), \
- which + " key has unexpected public key algo: {}".format(subkey.
- pubkey_algo)
- assert subkey.length == 1024, \
- which + " key has unexpected length: {}".format(subkey.length)
- assert fpr.endswith(subkey.keyid), \
- which + " key has unexpected key ID: {}".format(subkey.keyid)
- assert which == "Secondary" or subkey.fpr == fpr, \
- which + " key has unexpected fingerprint: {}".format(subkey.fpr)
- assert not subkey.expires, \
- which + " key unexpectedly expires: {}".format(subkey.expires)
-
-
-def check_uid(which, ref, uid):
- assert not uid.revoked, which + " user ID unexpectedly revoked"
- assert not uid.invalid, which + " user ID unexpectedly invalid"
- assert uid.validity == (gpg.constants.validity.UNKNOWN
- if uid.name.split()[0]
- not in {'Alfa', 'Alpha', 'Alice'} else
- gpg.constants.validity.ULTIMATE), \
- which + " user ID has unexpectedly validity: {}".format(uid.validity)
- assert not uid.signatures, which + " user ID unexpectedly signed"
- assert uid.name == ref[0], \
- "Unexpected name in {} user ID: {!r}".format(which.lower(), uid.name)
- assert uid.comment == ref[1], \
- "Unexpected comment in {} user ID: {!r}".\
- format(which.lower(), uid.comment)
- assert uid.email == ref[2], \
- "Unexpected email in {} user ID: {!r}".format(which.lower(), uid.email)
-
-
-i = 0
-c.op_keylist_start(None, False)
-key = c.op_keylist_next()
-while key:
- try:
- if len(keys[i]) == 4:
- fpr, sec_keyid, uids, n_subkeys = keys[i]
- misc_check = None
- else:
- fpr, sec_keyid, uids, n_subkeys, misc_check = keys[i]
- except IndexError:
- # There are more keys. We don't check for that.
- break
-
- # Global key flags.
- check_global(key, uids, n_subkeys)
- check_subkey(fpr, "Primary", key.subkeys[0])
- check_subkey(sec_keyid, "Secondary", key.subkeys[1])
-
- assert len(key.uids) == len(uids)
- check_uid("First", uids[0], key.uids[0])
- if len(key.uids) > 1:
- check_uid("Second", uids[1], key.uids[1])
- if len(key.uids) > 2:
- check_uid("Third", uids[2], key.uids[2])
-
- if misc_check:
- misc_check(uids[0][0], key)
- key = c.op_keylist_next()
- i += 1
-
-c.op_keylist_end()
-result = c.op_keylist_result()
-assert not result.truncated, "Key listing unexpectedly truncated"
-
-# We test for a parameter-less keylist
-keyring_length = len(list(c.op_keylist_all()))
-assert keyring_length > 1,\
- "Expected to find some keys, but got %r" % keyring_length
-
-# Then we do want to call with a pattern, only
-# i.e. without giving secret=0
-alpha_keys = list(c.op_keylist_all(b"Alpha"))
-assert len(alpha_keys) == 1, "Expected only one key for 'Alpha', got %r" % len(
- alpha_keys)
-
-# Check negative result.
-assert len(list(c.keylist("no such key in sight"))) == 0
-
-for i, key in enumerate(c.keylist()):
- try:
- if len(keys[i]) == 4:
- fpr, sec_keyid, uids, n_subkeys = keys[i]
- misc_check = None
- else:
- fpr, sec_keyid, uids, n_subkeys, misc_check = keys[i]
- except IndexError:
- # There are more keys. We don't check for that.
- break
-
- # Global key flags.
- check_global(key, uids, n_subkeys)
- check_subkey(fpr, "Primary", key.subkeys[0])
- check_subkey(sec_keyid, "Secondary", key.subkeys[1])
-
- assert len(key.uids) == len(uids)
- check_uid("First", uids[0], key.uids[0])
- if len(key.uids) > 1:
- check_uid("Second", uids[1], key.uids[1])
- if len(key.uids) > 2:
- check_uid("Third", uids[2], key.uids[2])
-
- if misc_check:
- misc_check(uids[0][0], key)
-
-# check get_key()
-with gpg.Context() as c:
- c.get_key(support.alpha)
- c.get_key(support.alpha, secret=True)
-
- c.get_key(support.bob)
- try:
- c.get_key(support.bob, secret=True)
- except KeyError:
- pass
- else:
- assert False, "Expected KeyError"
-
- # Legacy error
- try:
- c.get_key(support.no_such_key)
- except gpg.errors.GPGMEError:
- pass
- else:
- assert False, "Expected GPGMEError"
diff --git a/lang/python/tests/t-protocol-assuan.py b/lang/python/tests/t-protocol-assuan.py
deleted file mode 100755
index e1491e0a..00000000
--- a/lang/python/tests/t-protocol-assuan.py
+++ /dev/null
@@ -1,77 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (C) 2016 g10 Code GmbH
-#
-# This file is part of GPGME.
-#
-# GPGME 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.
-#
-# GPGME 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 Lesser General
-# Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this program; if not, see <https://www.gnu.org/licenses/>.
-
-from __future__ import absolute_import, print_function, unicode_literals
-
-import gpg
-import support
-_ = support # to appease pyflakes.
-
-del absolute_import, print_function, unicode_literals
-
-with gpg.Context(protocol=gpg.constants.protocol.ASSUAN) as c:
- # Do nothing.
- err = c.assuan_transact('nop')
- assert err is None
- err = c.assuan_transact(b'NOP')
- assert err is None
- err = c.assuan_transact(['NOP'])
- assert err is None
-
- err = c.assuan_transact('idontexist')
- assert err.getsource() == gpg.errors.SOURCE_GPGAGENT
- assert err.getcode() == gpg.errors.ASS_UNKNOWN_CMD
-
- # Invoke the pinentry to get a confirmation.
- c.assuan_transact(['GET_CONFIRMATION', 'Hello there'])
-
- data = []
-
- def data_cb(line):
- data.append(line)
-
- err = c.assuan_transact(['GETINFO', 'version'], data_cb=data_cb)
- assert not err
- assert len(data) == 1
-
- data = []
- err = c.assuan_transact(['GETINFO', 's2k_count'], data_cb=data_cb)
- if not err:
- assert len(data) == 1
- assert int(data[0]) > 0
-
- # XXX HELP sends status lines if we could use ASSUAN_CONVEY_COMMENTS.
-
- status = []
-
- def status_cb(line, args):
- status.append((line, args))
-
- alphas_grip = '76F7E2B35832976B50A27A282D9B87E44577EB66'
- err = c.assuan_transact(['KEYINFO', alphas_grip], status_cb=status_cb)
- if not err:
- assert len(status) == 1
- line, args = status[0]
- assert line.startswith('KEYINFO')
- assert args.startswith(alphas_grip)
-
- # XXX: test these callbacks, e.g. using PRESET_PASSPHRASE
- # XXX: once issue2428 is resolved
- def inq_cb(name, args):
- print("inq_cb", name, args)
diff --git a/lang/python/tests/t-quick-key-creation.py b/lang/python/tests/t-quick-key-creation.py
deleted file mode 100755
index ca3f32ab..00000000
--- a/lang/python/tests/t-quick-key-creation.py
+++ /dev/null
@@ -1,151 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (C) 2017 g10 Code GmbH
-#
-# This file is part of GPGME.
-#
-# GPGME 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.
-#
-# GPGME 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 Lesser General
-# Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this program; if not, see <https://www.gnu.org/licenses/>.
-
-from __future__ import absolute_import, print_function, unicode_literals
-
-import gpg
-import itertools
-import time
-
-import support
-support.assert_gpg_version((2, 1, 2))
-
-del absolute_import, print_function, unicode_literals
-
-alpha = "Alpha <[email protected]>"
-
-with support.EphemeralContext() as ctx:
- res = ctx.create_key(alpha)
-
- keys = list(ctx.keylist())
- assert len(keys) == 1, "Weird number of keys created"
-
- key = keys[0]
- assert key.fpr == res.fpr
- assert len(key.subkeys) == 2, "Expected one primary key and one subkey"
- assert key.subkeys[0].expires > 0, "Expected primary key to expire"
-
- # Try to create a key with the same UID
- try:
- ctx.create_key(alpha)
- assert False, "Expected an error but got none"
- except gpg.errors.GpgError as e:
- pass
-
- # Try to create a key with the same UID, now with force!
- res2 = ctx.create_key(alpha, force=True)
- assert res.fpr != res2.fpr
-
-# From here on, we use one context, and create unique UIDs
-uid_counter = 0
-
-
-def make_uid():
- global uid_counter
- uid_counter += 1
- return "user{0}@invalid.example.org".format(uid_counter)
-
-
-with support.EphemeralContext() as ctx:
- # Check gpg.constants.create.NOEXPIRE...
- res = ctx.create_key(make_uid(), expires=False)
- key = ctx.get_key(res.fpr, secret=True)
- assert key.fpr == res.fpr
- assert len(key.subkeys) == 2, "Expected one primary key and one subkey"
- assert key.subkeys[0].expires == 0, "Expected primary key not to expire"
-
- t = 2 * 24 * 60 * 60
- slack = 5 * 60
- res = ctx.create_key(make_uid(), expires_in=t)
- key = ctx.get_key(res.fpr, secret=True)
- assert key.fpr == res.fpr
- assert len(key.subkeys) == 2, "Expected one primary key and one subkey"
- assert abs(time.time() + t - key.subkeys[0].expires) < slack, \
- "Primary keys expiration time is off"
-
- # Check capabilities
- for sign, encrypt, certify, authenticate \
- in itertools.product([False, True],
- [False, True],
- [False, True],
- [False, True]):
- # Filter some out
- if not (sign or encrypt or certify or authenticate):
- # This triggers the default capabilities tested before.
- continue
- if (sign or encrypt or authenticate) and not certify:
- # The primary key always certifies.
- continue
-
- res = ctx.create_key(
- make_uid(),
- algorithm="rsa",
- sign=sign,
- encrypt=encrypt,
- certify=certify,
- authenticate=authenticate)
- key = ctx.get_key(res.fpr, secret=True)
- assert key.fpr == res.fpr
- assert len(key.subkeys) == 1, \
- "Expected no subkey for non-default capabilities"
-
- p = key.subkeys[0]
- assert sign == p.can_sign
- assert encrypt == p.can_encrypt
- assert certify == p.can_certify
- assert authenticate == p.can_authenticate
-
- # Check algorithm
- res = ctx.create_key(make_uid(), algorithm="rsa")
- key = ctx.get_key(res.fpr, secret=True)
- assert key.fpr == res.fpr
- for k in key.subkeys:
- assert k.pubkey_algo == 1
-
- # Check algorithm with size
- res = ctx.create_key(make_uid(), algorithm="rsa1024")
- key = ctx.get_key(res.fpr, secret=True)
- assert key.fpr == res.fpr
- for k in key.subkeys:
- assert k.pubkey_algo == 1
- assert k.length == 1024
-
- # Check algorithm future-default
- ctx.create_key(make_uid(), algorithm="future-default")
-
- # Check passphrase protection
- recipient = make_uid()
- passphrase = "streng geheim"
- res = ctx.create_key(recipient, passphrase=passphrase)
- ciphertext, _, _ = ctx.encrypt(
- b"hello there", recipients=[ctx.get_key(res.fpr)])
-
- cb_called = False
-
- def cb(*args):
- global cb_called
- cb_called = True
- return passphrase
-
- ctx.pinentry_mode = gpg.constants.PINENTRY_MODE_LOOPBACK
- ctx.set_passphrase_cb(cb)
-
- plaintext, _, _ = ctx.decrypt(ciphertext)
- assert plaintext == b"hello there"
- assert cb_called
diff --git a/lang/python/tests/t-quick-key-manipulation.py b/lang/python/tests/t-quick-key-manipulation.py
deleted file mode 100755
index 81da03be..00000000
--- a/lang/python/tests/t-quick-key-manipulation.py
+++ /dev/null
@@ -1,133 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (C) 2017 g10 Code GmbH
-#
-# This file is part of GPGME.
-#
-# GPGME 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.
-#
-# GPGME 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 Lesser General
-# Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this program; if not, see <https://www.gnu.org/licenses/>.
-
-from __future__ import absolute_import, print_function, unicode_literals
-
-import os
-import gpg
-import sys
-
-import support
-support.assert_gpg_version((2, 1, 14))
-
-del absolute_import, print_function, unicode_literals
-
-alpha = "Alpha <[email protected]>"
-bravo = "Bravo <[email protected]>"
-
-with support.EphemeralContext() as ctx:
- res = ctx.create_key(alpha, certify=True)
- key = ctx.get_key(res.fpr)
- assert len(key.subkeys) == 1, "Expected one primary key and no subkeys"
- assert len(key.uids) == 1, "Expected exactly one UID"
-
- def get_uid(uid):
- key = ctx.get_key(res.fpr)
- for u in key.uids:
- if u.uid == uid:
- return u
- return None
-
- # sanity check
- uid = get_uid(alpha)
- assert uid, "UID alpha not found"
- assert uid.revoked == 0
-
- # add bravo
- ctx.key_add_uid(key, bravo)
- uid = get_uid(bravo)
- assert uid, "UID bravo not found"
- assert uid.revoked == 0
-
- # revoke alpha
- ctx.key_revoke_uid(key, alpha)
- uid = get_uid(alpha)
- assert uid, "UID alpha not found"
- assert uid.revoked == 1
- uid = get_uid(bravo)
- assert uid, "UID bravo not found"
- assert uid.revoked == 0
-
- # try to revoke the last UID
- try:
- ctx.key_revoke_uid(key, alpha)
- # IMHO this should fail. issue2961.
- # assert False, "Expected an error but got none"
- except gpg.errors.GpgError:
- pass
-
- # Everything should be the same
- uid = get_uid(alpha)
- assert uid, "UID alpha not found"
- assert uid.revoked == 1
- uid = get_uid(bravo)
- assert uid, "UID bravo not found"
- assert uid.revoked == 0
-
- # try to revoke a non-existent UID
- try:
- ctx.key_revoke_uid(key, "i don't exist")
- # IMHO this should fail. issue2963.
- # assert False, "Expected an error but got none"
- except gpg.errors.GpgError:
- pass
-
- # try to add a pre-existent UID
- try:
- ctx.key_add_uid(key, bravo)
- assert False, "Expected an error but got none"
- except gpg.errors.GpgError:
- pass
-
- # Check setting the TOFU policy.
- with open(os.path.join(ctx.home_dir, "gpg.conf"), "a") as handle:
- handle.write("trust-model tofu+pgp\n")
-
- if not support.have_tofu_support(ctx, bravo):
- print("GnuPG does not support TOFU, skipping TOFU tests.")
- sys.exit()
-
- for name, policy in [(name, getattr(gpg.constants.tofu.policy, name))
- for name in filter(lambda x: not x.startswith('__'),
- dir(gpg.constants.tofu.policy))]:
- if policy == gpg.constants.tofu.policy.NONE:
- # We must not set the policy to NONE.
- continue
-
- ctx.key_tofu_policy(key, policy)
-
- keys = list(
- ctx.keylist(
- key.uids[0].uid,
- mode=(gpg.constants.keylist.mode.LOCAL |
- gpg.constants.keylist.mode.WITH_TOFU)))
- assert len(keys) == 1
-
- if policy == gpg.constants.tofu.policy.AUTO:
- # We cannot check that it is set to AUTO.
- continue
-
- for uid in keys[0].uids:
- if uid.uid == alpha:
- # TOFU information of revoked UIDs is not updated.
- # XXX: Is that expected?
- continue
- assert uid.tofu[0].policy == policy, \
- "Expected policy {0} ({1}), got {2}".format(policy, name,
- uid.tofu[0].policy)
diff --git a/lang/python/tests/t-quick-key-signing.py b/lang/python/tests/t-quick-key-signing.py
deleted file mode 100755
index 8a5f8c36..00000000
--- a/lang/python/tests/t-quick-key-signing.py
+++ /dev/null
@@ -1,133 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (C) 2017 g10 Code GmbH
-#
-# This file is part of GPGME.
-#
-# GPGME 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.
-#
-# GPGME 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 Lesser General
-# Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this program; if not, see <https://www.gnu.org/licenses/>.
-
-from __future__ import absolute_import, print_function, unicode_literals
-
-import gpg
-import itertools
-import time
-
-import support
-support.assert_gpg_version((2, 1, 1))
-
-del absolute_import, print_function, unicode_literals
-
-with support.EphemeralContext() as ctx:
- uid_counter = 0
-
- def make_uid():
- global uid_counter
- uid_counter += 1
- return "user{0}@invalid.example.org".format(uid_counter)
-
- def make_key():
- uids = [make_uid() for i in range(3)]
- res = ctx.create_key(uids[0], certify=True)
- key = ctx.get_key(res.fpr)
- for u in uids[1:]:
- ctx.key_add_uid(key, u)
- return key, uids
-
- def check_sigs(key, expected_sigs):
- keys = list(
- ctx.keylist(
- key.fpr,
- mode=(gpg.constants.keylist.mode.LOCAL |
- gpg.constants.keylist.mode.SIGS)))
- assert len(keys) == 1
- key_uids = {
- uid.uid: [s for s in uid.signatures]
- for uid in keys[0].uids
- }
- expected = list(expected_sigs)
-
- while key_uids and expected:
- uid, signing_key, func = expected[0]
- match = False
- for i, s in enumerate(key_uids[uid]):
- if signing_key.fpr.endswith(s.keyid):
- if func:
- func(s)
- match = True
- break
- if match:
- expected.pop(0)
- key_uids[uid].pop(i)
- if not key_uids[uid]:
- del key_uids[uid]
-
- assert not key_uids, "Superfluous signatures: {0}".format(key_uids)
- assert not expected, "Missing signatures: {0}".format(expected)
-
- # Simplest case. Sign without any options.
- key_a, uids_a = make_key()
- key_b, uids_b = make_key()
- ctx.signers = [key_a]
-
- def exportable_non_expiring(s):
- assert s.exportable
- assert s.expires == 0
-
- check_sigs(key_b,
- itertools.product(uids_b, [key_b], [exportable_non_expiring]))
- ctx.key_sign(key_b)
- check_sigs(
- key_b,
- itertools.product(uids_b, [key_b, key_a], [exportable_non_expiring]))
-
- # Create a non-exportable signature, and explicitly name all uids.
- key_c, uids_c = make_key()
- ctx.signers = [key_a, key_b]
-
- def non_exportable_non_expiring(s):
- assert s.exportable == 0
- assert s.expires == 0
-
- ctx.key_sign(key_c, local=True, uids=uids_c)
- check_sigs(
- key_c,
- list(itertools.product(uids_c, [key_c], [exportable_non_expiring])) +
- list(
- itertools.product(uids_c, [key_b, key_a],
- [non_exportable_non_expiring])))
-
- # Create a non-exportable, expiring signature for a single uid.
- key_d, uids_d = make_key()
- ctx.signers = [key_c]
- expires_in = 600
- slack = 10
-
- def non_exportable_expiring(s):
- assert s.exportable == 0
- assert abs(time.time() + expires_in - s.expires) < slack
-
- ctx.key_sign(key_d, local=True, expires_in=expires_in, uids=uids_d[0])
- check_sigs(
- key_d,
- list(itertools.product(uids_d, [key_d], [exportable_non_expiring])) +
- list(
- itertools.product(uids_d[:1], [key_c], [non_exportable_expiring])))
-
- # Now sign the second in the same fashion, but use a singleton list.
- ctx.key_sign(key_d, local=True, expires_in=expires_in, uids=uids_d[1:2])
- check_sigs(
- key_d,
- list(itertools.product(uids_d, [key_d], [exportable_non_expiring])) +
- list(
- itertools.product(uids_d[:2], [key_c], [non_exportable_expiring])))
diff --git a/lang/python/tests/t-quick-subkey-creation.py b/lang/python/tests/t-quick-subkey-creation.py
deleted file mode 100755
index e41d7a1f..00000000
--- a/lang/python/tests/t-quick-subkey-creation.py
+++ /dev/null
@@ -1,118 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (C) 2017 g10 Code GmbH
-#
-# This file is part of GPGME.
-#
-# GPGME 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.
-#
-# GPGME 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 Lesser General
-# Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this program; if not, see <https://www.gnu.org/licenses/>.
-
-from __future__ import absolute_import, print_function, unicode_literals
-
-import gpg
-import itertools
-import time
-
-import support
-
-del absolute_import, print_function, unicode_literals
-
-alpha = "Alpha <[email protected]>"
-bravo = "Bravo <[email protected]>"
-
-with support.EphemeralContext() as ctx:
- res = ctx.create_key(alpha, certify=True)
- keys = list(ctx.keylist())
- assert len(keys) == 1, "Weird number of keys created"
- key = keys[0]
- assert key.fpr == res.fpr
- assert len(key.subkeys) == 1, "Expected one primary key and no subkeys"
-
- def get_subkey(fpr):
- k = ctx.get_key(fpr)
- for sk in k.subkeys:
- if sk.fpr == fpr:
- return sk
- return None
-
- # Check gpg.constants.create.NOEXPIRE...
- res = ctx.create_subkey(key, expires=False)
- subkey = get_subkey(res.fpr)
- assert subkey.expires == 0, "Expected subkey not to expire"
- assert subkey.can_encrypt, \
- "Default subkey capabilities do not include encryption"
-
- t = 2 * 24 * 60 * 60
- slack = 5 * 60
- res = ctx.create_subkey(key, expires_in=t)
- subkey = get_subkey(res.fpr)
- assert abs(time.time() + t - subkey.expires) < slack, \
- "subkeys expiration time is off"
-
- # Check capabilities
- for sign, encrypt, authenticate \
- in itertools.product([False, True],
- [False, True],
- [False, True]):
- # Filter some out
- if not (sign or encrypt or authenticate):
- # This triggers the default capabilities tested before.
- continue
-
- res = ctx.create_subkey(
- key, sign=sign, encrypt=encrypt, authenticate=authenticate,
- algorithm="rsa")
- subkey = get_subkey(res.fpr)
- assert sign == subkey.can_sign
- assert encrypt == subkey.can_encrypt
- assert authenticate == subkey.can_authenticate
-
- # Check algorithm
- res = ctx.create_subkey(key, algorithm="rsa")
- subkey = get_subkey(res.fpr)
- assert subkey.pubkey_algo == 1
-
- # Check algorithm with size
- res = ctx.create_subkey(key, algorithm="rsa1024")
- subkey = get_subkey(res.fpr)
- assert subkey.pubkey_algo == 1
- assert subkey.length == 1024
-
- # Check algorithm future-default
- ctx.create_subkey(key, algorithm="future-default")
-
- # Check passphrase protection. For this we create a new key
- # so that we have a key with just one encryption subkey.
- bravo_res = ctx.create_key(bravo, certify=True)
- bravo_key = ctx.get_key(bravo_res.fpr)
- assert len(
- bravo_key.subkeys) == 1, "Expected one primary key and no subkeys"
-
- passphrase = "streng geheim"
- res = ctx.create_subkey(bravo_key, passphrase=passphrase)
- ciphertext, _, _ = ctx.encrypt(
- b"hello there", recipients=[ctx.get_key(bravo_res.fpr)])
-
- cb_called = False
-
- def cb(*args):
- global cb_called
- cb_called = True
- return passphrase
-
- ctx.pinentry_mode = gpg.constants.PINENTRY_MODE_LOOPBACK
- ctx.set_passphrase_cb(cb)
-
- plaintext, _, _ = ctx.decrypt(ciphertext)
- assert plaintext == b"hello there"
- assert cb_called
diff --git a/lang/python/tests/t-sig-notation.py b/lang/python/tests/t-sig-notation.py
deleted file mode 100755
index c3d29613..00000000
--- a/lang/python/tests/t-sig-notation.py
+++ /dev/null
@@ -1,81 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (C) 2016 g10 Code GmbH
-#
-# This file is part of GPGME.
-#
-# GPGME 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.
-#
-# GPGME 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 Lesser General
-# Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this program; if not, see <https://www.gnu.org/licenses/>.
-
-from __future__ import absolute_import, print_function, unicode_literals
-
-import os
-import gpg
-import support
-_ = support # to appease pyflakes.
-
-del absolute_import, print_function, unicode_literals
-
-expected_notations = {
- "laughing@me": ("Just Squeeze Me",
- gpg.constants.sig.notation.HUMAN_READABLE),
- ("pgpmime", gpg.constants.sig.notation.HUMAN_READABLE |
- gpg.constants.sig.notation.CRITICAL),
- None: ("https://www.gnu.org/policy/", 0),
-}
-
-# GnuPG prior to 2.1.13 did not report the critical flag correctly.
-with gpg.Context() as c:
- version = c.engine_info.version
- have_correct_sig_data = not (
- version.startswith("1.") or version.startswith("2.0.") or
- (version.startswith("2.1.") and int(version[4:]) < 13))
-
-
-def check_result(result):
- assert len(result.signatures) == 1, "Unexpected number of signatures"
- sig = result.signatures[0]
- assert len(sig.notations) == len(expected_notations)
-
- for r in sig.notations:
- assert 'name_len' not in dir(r)
- assert 'value_len' not in dir(r)
- assert r.name in expected_notations
- value, flags = expected_notations.pop(r.name)
-
- assert r.value == value, \
- "Expected {!r}, got {!r}".format(value, r.value)
- assert r.human_readable \
- == bool(flags & gpg.constants.sig.notation.HUMAN_READABLE)
- assert r.critical \
- == (bool(flags & gpg.constants.sig.notation.CRITICAL)
- if have_correct_sig_data else False)
-
- assert len(expected_notations) == 0
-
-
-source = gpg.Data("Hallo Leute\n")
-signed = gpg.Data()
-
-c = gpg.Context()
-for name, (value, flags) in expected_notations.items():
- c.sig_notation_add(name, value, flags)
-
-c.op_sign(source, signed, gpg.constants.sig.mode.NORMAL)
-
-signed.seek(0, os.SEEK_SET)
-sink = gpg.Data()
-c.op_verify(signed, None, sink)
-result = c.op_verify_result()
-check_result(result)
diff --git a/lang/python/tests/t-sign.py b/lang/python/tests/t-sign.py
deleted file mode 100755
index 5eefd4db..00000000
--- a/lang/python/tests/t-sign.py
+++ /dev/null
@@ -1,121 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (C) 2016 g10 Code GmbH
-#
-# This file is part of GPGME.
-#
-# GPGME 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.
-#
-# GPGME 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 Lesser General
-# Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this program; if not, see <https://www.gnu.org/licenses/>.
-
-from __future__ import absolute_import, print_function, unicode_literals
-
-import os
-import gpg
-import support
-
-del absolute_import, print_function, unicode_literals
-
-
-def fail(msg):
- raise RuntimeError(msg)
-
-
-def check_result(r, typ):
- if r.invalid_signers:
- fail("Invalid signer found: {}".format(r.invalid_signers.fpr))
-
- if len(r.signatures) != 1:
- fail("Unexpected number of signatures created")
-
- signature = r.signatures[0]
- if signature.type != typ:
- fail("Wrong type of signature created")
-
- if signature.pubkey_algo != gpg.constants.pk.DSA:
- fail("Wrong pubkey algorithm reported: {}".format(
- signature.pubkey_algo))
-
- if signature.hash_algo != gpg.constants.md.SHA1:
- fail("Wrong hash algorithm reported: {}".format(signature.hash_algo))
-
- if signature.sig_class != 1:
- fail("Wrong signature class reported: {}".format(signature.sig_class))
-
- if signature.fpr != "A0FF4590BB6122EDEF6E3C542D727CC768697734":
- fail("Wrong fingerprint reported: {}".format(signature.fpr))
-
-
-c = gpg.Context()
-c.set_textmode(True)
-c.set_armor(True)
-
-source = gpg.Data("Hallo Leute\n")
-sink = gpg.Data()
-
-c.op_sign(source, sink, gpg.constants.sig.mode.NORMAL)
-
-result = c.op_sign_result()
-check_result(result, gpg.constants.sig.mode.NORMAL)
-support.print_data(sink)
-
-# Now a detached signature.
-source.seek(0, os.SEEK_SET)
-sink = gpg.Data()
-
-c.op_sign(source, sink, gpg.constants.sig.mode.DETACH)
-
-result = c.op_sign_result()
-check_result(result, gpg.constants.sig.mode.DETACH)
-support.print_data(sink)
-
-# And finally a cleartext signature. */
-source.seek(0, os.SEEK_SET)
-sink = gpg.Data()
-
-c.op_sign(source, sink, gpg.constants.sig.mode.CLEAR)
-
-result = c.op_sign_result()
-check_result(result, gpg.constants.sig.mode.CLEAR)
-support.print_data(sink)
-
-# Idiomatic interface.
-with gpg.Context(armor=True, textmode=True) as c:
- message = "Hallo Leute\n".encode()
- signed, _ = c.sign(message)
- assert len(signed) > 0
- assert signed.find(b'BEGIN PGP MESSAGE') > 0, 'Message not found'
-
- signed, _ = c.sign(message, mode=gpg.constants.sig.mode.DETACH)
- assert len(signed) > 0
- assert signed.find(b'BEGIN PGP SIGNATURE') > 0, 'Signature not found'
-
- signed, _ = c.sign(message, mode=gpg.constants.sig.mode.CLEAR)
- assert len(signed) > 0
- assert signed.find(b'BEGIN PGP SIGNED MESSAGE') > 0, 'Message not found'
- assert signed.find(message) > 0, 'Message content not found'
- assert signed.find(b'BEGIN PGP SIGNATURE') > 0, 'Signature not found'
-
-with gpg.Context() as c:
- message = "Hallo Leute\n".encode()
-
- c.signers = [c.get_key(support.sign_only, True)]
- c.sign(message)
-
- c.signers = [c.get_key(support.encrypt_only, True)]
- try:
- c.sign(message)
- except gpg.errors.InvalidSigners as e:
- assert len(e.signers) == 1
- assert support.encrypt_only.endswith(e.signers[0].fpr)
- else:
- assert False, "Expected an InvalidSigners error, got none"
diff --git a/lang/python/tests/t-signers.py b/lang/python/tests/t-signers.py
deleted file mode 100755
index e24e5b52..00000000
--- a/lang/python/tests/t-signers.py
+++ /dev/null
@@ -1,99 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (C) 2016 g10 Code GmbH
-#
-# This file is part of GPGME.
-#
-# GPGME 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.
-#
-# GPGME 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 Lesser General
-# Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this program; if not, see <https://www.gnu.org/licenses/>.
-
-from __future__ import absolute_import, print_function, unicode_literals
-
-import gpg
-import support
-
-del absolute_import, print_function, unicode_literals
-
-
-def fail(msg):
- raise RuntimeError(msg)
-
-
-def check_result(r, typ):
- if r.invalid_signers:
- fail("Invalid signer found: {}".format(r.invalid_signers.fpr))
-
- if len(r.signatures) != 2:
- fail("Unexpected number of signatures created")
-
- for signature in r.signatures:
- if signature.type != typ:
- fail("Wrong type of signature created")
-
- if signature.pubkey_algo != gpg.constants.pk.DSA:
- fail("Wrong pubkey algorithm reported: {}".format(
- signature.pubkey_algo))
-
- if signature.hash_algo != gpg.constants.md.SHA1:
- fail("Wrong hash algorithm reported: {}".format(
- signature.hash_algo))
-
- if signature.sig_class != 1:
- fail("Wrong signature class reported: got {}, want {}".format(
- signature.sig_class, 1))
-
- if signature.fpr not in ("A0FF4590BB6122EDEF6E3C542D727CC768697734",
- "23FD347A419429BACCD5E72D6BC4778054ACD246"):
- fail("Wrong fingerprint reported: {}".format(signature.fpr))
-
-
-c = gpg.Context()
-c.set_textmode(True)
-c.set_armor(True)
-
-keys = []
-c.op_keylist_start('', True)
-keys.append(c.op_keylist_next())
-keys.append(c.op_keylist_next())
-c.op_keylist_end()
-
-c.signers_add(keys[0])
-c.signers_add(keys[1])
-
-for mode in (gpg.constants.sig.mode.NORMAL, gpg.constants.sig.mode.DETACH,
- gpg.constants.sig.mode.CLEAR):
- source = gpg.Data("Hallo Leute\n")
- sink = gpg.Data()
-
- c.op_sign(source, sink, mode)
-
- result = c.op_sign_result()
- check_result(result, mode)
- support.print_data(sink)
-
-# Idiomatic interface.
-with gpg.Context(armor=True, textmode=True, signers=keys) as c:
- message = "Hallo Leute\n".encode()
- signed, result = c.sign(message)
- check_result(result, gpg.constants.sig.mode.NORMAL)
- assert signed.find(b'BEGIN PGP MESSAGE') > 0, 'Message not found'
-
- signed, result = c.sign(message, mode=gpg.constants.sig.mode.DETACH)
- check_result(result, gpg.constants.sig.mode.DETACH)
- assert signed.find(b'BEGIN PGP SIGNATURE') > 0, 'Signature not found'
-
- signed, result = c.sign(message, mode=gpg.constants.sig.mode.CLEAR)
- check_result(result, gpg.constants.sig.mode.CLEAR)
- assert signed.find(b'BEGIN PGP SIGNED MESSAGE') > 0, 'Message not found'
- assert signed.find(message) > 0, 'Message content not found'
- assert signed.find(b'BEGIN PGP SIGNATURE') > 0, 'Signature not found'
diff --git a/lang/python/tests/t-verify.py b/lang/python/tests/t-verify.py
deleted file mode 100755
index 688e3ac5..00000000
--- a/lang/python/tests/t-verify.py
+++ /dev/null
@@ -1,197 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (C) 2016 g10 Code GmbH
-#
-# This file is part of GPGME.
-#
-# GPGME 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.
-#
-# GPGME 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 Lesser General
-# Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this program; if not, see <https://www.gnu.org/licenses/>.
-
-from __future__ import absolute_import, print_function, unicode_literals
-
-import sys
-import os
-import gpg
-import support
-_ = support # to appease pyflakes.
-
-del absolute_import, print_function, unicode_literals
-
-test_text1 = b"Just GNU it!\n"
-test_text1f = b"Just GNU it?\n"
-test_sig1 = b"""-----BEGIN PGP SIGNATURE-----
-
-iN0EABECAJ0FAjoS+i9FFIAAAAAAAwA5YmFyw7bDpMO8w58gZGFzIHdhcmVuIFVt
-bGF1dGUgdW5kIGpldHp0IGVpbiBwcm96ZW50JS1aZWljaGVuNRSAAAAAAAgAJGZv
-b2Jhci4xdGhpcyBpcyBhIG5vdGF0aW9uIGRhdGEgd2l0aCAyIGxpbmVzGhpodHRw
-Oi8vd3d3Lmd1Lm9yZy9wb2xpY3kvAAoJEC1yfMdoaXc0JBIAoIiLlUsvpMDOyGEc
-dADGKXF/Hcb+AKCJWPphZCphduxSvrzH0hgzHdeQaA==
-=nts1
------END PGP SIGNATURE-----
-"""
-
-test_sig2 = b"""-----BEGIN PGP MESSAGE-----
-
-owGbwMvMwCSoW1RzPCOz3IRxjXQSR0lqcYleSUWJTZOvjVdpcYmCu1+oQmaJIleH
-GwuDIBMDGysTSIqBi1MApi+nlGGuwDeHao53HBr+FoVGP3xX+kvuu9fCMJvl6IOf
-y1kvP4y+8D5a11ang0udywsA
-=Crq6
------END PGP MESSAGE-----
-"""
-
-# A message with a prepended but unsigned plaintext packet.
-double_plaintext_sig = b"""-----BEGIN PGP MESSAGE-----
-
-rDRiCmZvb2Jhci50eHRF4pxNVGhpcyBpcyBteSBzbmVha3kgcGxhaW50ZXh0IG1l
-c3NhZ2UKowGbwMvMwCSoW1RzPCOz3IRxTWISa6JebnG666MFD1wzSzJSixQ81XMV
-UlITUxTyixRyKxXKE0uSMxQyEosVikvyCwpSU/S4FNCArq6Ce1F+aXJGvoJvYlGF
-erFCTmJxiUJ5flFKMVeHGwuDIBMDGysTyA4GLk4BmO036xgWzMgzt9V85jCtfDFn
-UqVooWlGXHwNw/xg/fVzt9VNbtjtJ/fhUqYo0/LyCGEA
-=6+AK
------END PGP MESSAGE-----
-"""
-
-
-def check_result(result, summary, validity, fpr, status, notation):
- assert len(result.signatures) == 1, "Unexpected number of signatures"
- sig = result.signatures[0]
- assert sig.summary == summary, \
- "Unexpected signature summary: {}, want: {}".format(sig.summary,
- summary)
- assert sig.fpr == fpr
- assert gpg.errors.GPGMEError(sig.status).getcode() == status
-
- if notation:
- expected_notations = {
- "bar": (b"\xc3\xb6\xc3\xa4\xc3\xbc\xc3\x9f" +
- b" das waren Umlaute und jetzt ein prozent%-Zeichen"
- if sys.version_info[0] < 3 else
- b"\xc3\xb6\xc3\xa4\xc3\xbc\xc3\x9f".decode() +
- " das waren Umlaute und jetzt ein prozent%-Zeichen"),
- "foobar.1":
- "this is a notation data with 2 lines",
- None:
- "http://www.gu.org/policy/",
- }
- assert len(sig.notations) == len(expected_notations)
-
- for r in sig.notations:
- assert 'name_len' not in dir(r)
- assert 'value_len' not in dir(r)
- assert r.name in expected_notations
- assert r.value == expected_notations[r.name], \
- "Expected {!r}, got {!r}".format(expected_notations[r.name],
- r.value)
- expected_notations.pop(r.name)
-
- assert len(expected_notations) == 0
-
- assert not sig.wrong_key_usage
- assert sig.validity == validity, \
- "Unexpected signature validity: {}, want: {}".format(
- sig.validity, validity)
- assert gpg.errors.GPGMEError(
- sig.validity_reason).getcode() == gpg.errors.NO_ERROR
-
-
-c = gpg.Context()
-c.set_armor(True)
-
-# Checking a valid message.
-text = gpg.Data(test_text1)
-sig = gpg.Data(test_sig1)
-c.op_verify(sig, text, None)
-result = c.op_verify_result()
-check_result(result, gpg.constants.sigsum.VALID | gpg.constants.sigsum.GREEN,
- gpg.constants.validity.FULL,
- "A0FF4590BB6122EDEF6E3C542D727CC768697734", gpg.errors.NO_ERROR,
- True)
-
-# Checking a manipulated message.
-text = gpg.Data(test_text1f)
-sig.seek(0, os.SEEK_SET)
-c.op_verify(sig, text, None)
-result = c.op_verify_result()
-check_result(result, gpg.constants.sigsum.RED, gpg.constants.validity.UNKNOWN,
- "2D727CC768697734", gpg.errors.BAD_SIGNATURE, False)
-
-# Checking a normal signature.
-text = gpg.Data()
-sig = gpg.Data(test_sig2)
-c.op_verify(sig, None, text)
-result = c.op_verify_result()
-check_result(result, gpg.constants.sigsum.VALID | gpg.constants.sigsum.GREEN,
- gpg.constants.validity.FULL,
- "A0FF4590BB6122EDEF6E3C542D727CC768697734", gpg.errors.NO_ERROR,
- False)
-
-# Checking an invalid message.
-text = gpg.Data()
-sig = gpg.Data(double_plaintext_sig)
-try:
- c.op_verify(sig, None, text)
-except Exception as e:
- assert type(e) == gpg.errors.GPGMEError
- assert e.getcode() == gpg.errors.BAD_DATA
-else:
- assert False, "Expected an error but got none."
-
-# Idiomatic interface.
-with gpg.Context(armor=True) as c:
- # Checking a valid message.
- _, result = c.verify(test_text1, test_sig1)
- check_result(
- result, gpg.constants.sigsum.VALID | gpg.constants.sigsum.GREEN,
- gpg.constants.validity.FULL,
- "A0FF4590BB6122EDEF6E3C542D727CC768697734", gpg.errors.NO_ERROR, True)
-
- # Checking a manipulated message.
- try:
- c.verify(test_text1f, test_sig1)
- except gpg.errors.BadSignatures as e:
- check_result(e.result, gpg.constants.sigsum.RED,
- gpg.constants.validity.UNKNOWN, "2D727CC768697734",
- gpg.errors.BAD_SIGNATURE, False)
- else:
- assert False, "Expected an error but got none."
-
- # Checking a normal signature.
- sig = gpg.Data(test_sig2)
- data, result = c.verify(test_sig2)
- check_result(
- result, gpg.constants.sigsum.VALID | gpg.constants.sigsum.GREEN,
- gpg.constants.validity.FULL,
- "A0FF4590BB6122EDEF6E3C542D727CC768697734", gpg.errors.NO_ERROR, False)
- assert data == test_text1
-
- # Checking an invalid message.
- try:
- c.verify(double_plaintext_sig)
- except gpg.errors.GPGMEError as e:
- assert e.getcode() == gpg.errors.BAD_DATA
- else:
- assert False, "Expected an error but got none."
-
- alpha = c.get_key("A0FF4590BB6122EDEF6E3C542D727CC768697734", False)
- bob = c.get_key("D695676BDCEDCC2CDD6152BCFE180B1DA9E3B0B2", False)
-
- # Checking a valid message.
- c.verify(test_text1, test_sig1, verify=[alpha])
-
- try:
- c.verify(test_text1, test_sig1, verify=[alpha, bob])
- except gpg.errors.MissingSignatures as e:
- assert len(e.missing) == 1
- assert e.missing[0] == bob
- else:
- assert False, "Expected an error, got none"
diff --git a/lang/python/tests/t-wait.py b/lang/python/tests/t-wait.py
deleted file mode 100755
index 8d05f254..00000000
--- a/lang/python/tests/t-wait.py
+++ /dev/null
@@ -1,46 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (C) 2016 g10 Code GmbH
-#
-# This file is part of GPGME.
-#
-# GPGME 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.
-#
-# GPGME 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 Lesser General
-# Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this program; if not, see <https://www.gnu.org/licenses/>.
-
-from __future__ import absolute_import, print_function, unicode_literals
-
-import time
-import gpg
-import support
-_ = support # to appease pyflakes.
-
-del absolute_import, print_function, unicode_literals
-
-c = gpg.Context()
-c.set_armor(True)
-
-# Checking a message without a signature.
-sig = gpg.Data("foo\n")
-text = gpg.Data()
-c.op_verify_start(sig, None, text)
-
-try:
- while True:
- err = c.wait(False)
- if err:
- break
- time.sleep(0.1)
-except Exception as e:
- assert e.getcode() == gpg.errors.NO_DATA
-else:
- assert False, "Expected an error, got none"
diff --git a/lang/python/tests/t-wrapper.py b/lang/python/tests/t-wrapper.py
deleted file mode 100755
index 4990c5ed..00000000
--- a/lang/python/tests/t-wrapper.py
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (C) 2016 g10 Code GmbH
-#
-# This file is part of GPGME.
-#
-# GPGME 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.
-#
-# GPGME 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 Lesser General
-# Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this program; if not, see <https://www.gnu.org/licenses/>.
-
-import gpg
-import support
-_ = support # to appease pyflakes.
-
-d0 = gpg.Data()
-d0.seek # trigger on-demand-wrapping
-assert d0.seek == d0.seek, "Generated wrapper functions are not cached"
-assert hasattr(gpg.Data, 'seek'), "Generated wrapper functions are not shared"