summaryrefslogtreecommitdiff
path: root/dev-perl/GnuPG-Interface
diff options
context:
space:
mode:
authorV3n3RiX <venerix@redcorelinux.org>2018-07-14 21:03:06 +0100
committerV3n3RiX <venerix@redcorelinux.org>2018-07-14 21:03:06 +0100
commit8376ef56580626e9c0f796d5b85b53a0a1c7d5f5 (patch)
tree7681bbd4e8b05407772df40a4bf04cbbc8afc3fa /dev-perl/GnuPG-Interface
parent30a9caf154332f12ca60756e1b75d2f0e3e1822d (diff)
gentoo resync : 14.07.2018
Diffstat (limited to 'dev-perl/GnuPG-Interface')
-rw-r--r--dev-perl/GnuPG-Interface/GnuPG-Interface-0.520.0-r1.ebuild33
-rw-r--r--dev-perl/GnuPG-Interface/GnuPG-Interface-0.520.0-r2.ebuild64
-rw-r--r--dev-perl/GnuPG-Interface/GnuPG-Interface-0.520.0-r3.ebuild69
-rw-r--r--dev-perl/GnuPG-Interface/Manifest24
-rw-r--r--dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0001-fix-spelling-error-settting-should-be-setting.patch35
-rw-r--r--dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0002-Generalize-the-test-suite.patch151
-rw-r--r--dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0003-subkey-validity-of-an-key-when-we-have-established-n.patch37
-rw-r--r--dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0004-ensure-that-test-covers-all-signatures.patch35
-rw-r--r--dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0005-add-gpg_is_modern-to-test-suite.patch39
-rw-r--r--dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0006-Modern-GnuPG-2.1-reports-more-detail-about-secret-ke.patch120
-rw-r--r--dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0007-test-suite-match-plaintext-output-across-versions-of.patch95
-rw-r--r--dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0008-fix-test_default_key_passphrase-when-passphrase-come.patch29
-rw-r--r--dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0009-clean-up-trailing-whitespace.patch112
-rw-r--r--dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0010-fix-capitalization-of-GnuPG.patch35
-rw-r--r--dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0011-ommand_args-should-be-command_args.patch21
-rw-r--r--dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0012-use-fingerprints-as-inputs-during-tests-to-demonstra.patch265
-rw-r--r--dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0013-move-key-files-to-generic-names.patch33
-rw-r--r--dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0014-fix-spelling-s-convience-convenience.patch53
-rw-r--r--dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0015-added-new-secret-key-with-different-passphrase.patch117
-rw-r--r--dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0016-Test-use-of-gpg-without-explicit-passphrase-agent-pi.patch302
-rw-r--r--dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0017-Kill-any-GnuPG-agent-before-and-after-the-test-suite.patch42
-rw-r--r--dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0018-Use-a-short-temporary-homedir-during-the-test-suite.patch110
-rw-r--r--dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0019-Make-things-work-with-gpg1-assuming-plain-gpg-is-mod.patch51
-rw-r--r--dev-perl/GnuPG-Interface/metadata.xml25
24 files changed, 1897 insertions, 0 deletions
diff --git a/dev-perl/GnuPG-Interface/GnuPG-Interface-0.520.0-r1.ebuild b/dev-perl/GnuPG-Interface/GnuPG-Interface-0.520.0-r1.ebuild
new file mode 100644
index 000000000000..8553aec739c2
--- /dev/null
+++ b/dev-perl/GnuPG-Interface/GnuPG-Interface-0.520.0-r1.ebuild
@@ -0,0 +1,33 @@
+# Copyright 1999-2017 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=5
+
+MODULE_AUTHOR=ALEXMV
+MODULE_VERSION=0.52
+inherit perl-module
+
+DESCRIPTION="Perl module interface to interacting with GnuPG"
+
+SLOT="0"
+KEYWORDS="amd64 hppa ppc x86"
+IUSE="test"
+
+RDEPEND="
+ >=app-crypt/gnupg-1.2.1-r1
+ virtual/perl-autodie
+ >=virtual/perl-Math-BigInt-1.780.0
+ >=dev-perl/Moo-0.91.11
+ >=dev-perl/MooX-HandlesVia-0.1.4
+ >=dev-perl/MooX-late-0.14.0
+"
+DEPEND="${RDEPEND}
+ >=virtual/perl-ExtUtils-MakeMaker-6.360.0
+"
+SRC_TEST="do"
+
+src_prepare() {
+ sed -i -e 's/use inc::Module::Install;/use lib q[.];\nuse inc::Module::Install;/' Makefile.PL ||
+ die "Can't patch Makefile.PL for 5.26 dot-in-inc"
+ perl-module_src_prepare
+}
diff --git a/dev-perl/GnuPG-Interface/GnuPG-Interface-0.520.0-r2.ebuild b/dev-perl/GnuPG-Interface/GnuPG-Interface-0.520.0-r2.ebuild
new file mode 100644
index 000000000000..3c4a0fe01b12
--- /dev/null
+++ b/dev-perl/GnuPG-Interface/GnuPG-Interface-0.520.0-r2.ebuild
@@ -0,0 +1,64 @@
+# Copyright 1999-2017 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=6
+
+DIST_AUTHOR=ALEXMV
+DIST_VERSION=0.52
+inherit perl-module
+
+DESCRIPTION="Perl module interface to interacting with GnuPG"
+
+SLOT="0"
+KEYWORDS="amd64 hppa ppc x86"
+IUSE="test"
+
+RDEPEND="
+ >=app-crypt/gnupg-1.2.1-r1
+ virtual/perl-autodie
+ >=virtual/perl-Math-BigInt-1.780.0
+ >=dev-perl/Moo-0.91.11
+ >=dev-perl/MooX-HandlesVia-0.1.4
+ >=dev-perl/MooX-late-0.14.0
+"
+DEPEND="${RDEPEND}
+ >=virtual/perl-ExtUtils-MakeMaker-6.360.0
+"
+
+PATCHES=(
+ "${FILESDIR}/${P}"-0001-fix-spelling-error-settting-should-be-setting.patch
+ "${FILESDIR}/${P}"-0002-Generalize-the-test-suite.patch
+ "${FILESDIR}/${P}"-0003-subkey-validity-of-an-key-when-we-have-established-n.patch
+ "${FILESDIR}/${P}"-0004-ensure-that-test-covers-all-signatures.patch
+ "${FILESDIR}/${P}"-0005-add-gpg_is_modern-to-test-suite.patch
+ "${FILESDIR}/${P}"-0006-Modern-GnuPG-2.1-reports-more-detail-about-secret-ke.patch
+ "${FILESDIR}/${P}"-0007-test-suite-match-plaintext-output-across-versions-of.patch
+ "${FILESDIR}/${P}"-0008-fix-test_default_key_passphrase-when-passphrase-come.patch
+ "${FILESDIR}/${P}"-0009-clean-up-trailing-whitespace.patch
+ "${FILESDIR}/${P}"-0010-fix-capitalization-of-GnuPG.patch
+ "${FILESDIR}/${P}"-0011-ommand_args-should-be-command_args.patch
+ "${FILESDIR}/${P}"-0012-use-fingerprints-as-inputs-during-tests-to-demonstra.patch
+ "${FILESDIR}/${P}"-0013-move-key-files-to-generic-names.patch
+ "${FILESDIR}/${P}"-0014-fix-spelling-s-convience-convenience.patch
+ "${FILESDIR}/${P}"-0015-added-new-secret-key-with-different-passphrase.patch
+ "${FILESDIR}/${P}"-0016-Test-use-of-gpg-without-explicit-passphrase-agent-pi.patch
+ "${FILESDIR}/${P}"-0017-Kill-any-GnuPG-agent-before-and-after-the-test-suite.patch
+ "${FILESDIR}/${P}"-0018-Use-a-short-temporary-homedir-during-the-test-suite.patch
+ "${FILESDIR}/${P}"-0019-Make-things-work-with-gpg1-assuming-plain-gpg-is-mod.patch
+)
+
+DIST_TEST=skip
+# Nearly all tests succeed with this patchset and GnuPG 2.1 when running outside the
+# emerge sandbox. However, the agent architecture is not really sandbox-friendly, so...
+#
+# Test Summary Report
+# -------------------
+# t/decrypt.t (Wstat: 0 Tests: 6 Failed: 2)
+# Failed tests: 5-6
+# Failed 1/22 test programs. 2/56 subtests failed.
+
+src_prepare() {
+ sed -i -e 's/use inc::Module::Install;/use lib q[.];\nuse inc::Module::Install;/' Makefile.PL ||
+ die "Can't patch Makefile.PL for 5.26 dot-in-inc"
+ perl-module_src_prepare
+}
diff --git a/dev-perl/GnuPG-Interface/GnuPG-Interface-0.520.0-r3.ebuild b/dev-perl/GnuPG-Interface/GnuPG-Interface-0.520.0-r3.ebuild
new file mode 100644
index 000000000000..3145257e0c2e
--- /dev/null
+++ b/dev-perl/GnuPG-Interface/GnuPG-Interface-0.520.0-r3.ebuild
@@ -0,0 +1,69 @@
+# Copyright 1999-2018 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=6
+
+DIST_AUTHOR=ALEXMV
+DIST_VERSION=0.52
+inherit perl-module
+
+DESCRIPTION="Perl module interface to interacting with GnuPG"
+
+SLOT="0"
+KEYWORDS="amd64 ~hppa ~ppc x86"
+IUSE="test"
+
+RDEPEND="
+ >=app-crypt/gnupg-1.2.1-r1
+ virtual/perl-autodie
+ >=virtual/perl-Math-BigInt-1.780.0
+ >=dev-perl/Moo-0.91.11
+ >=dev-perl/MooX-HandlesVia-0.1.4
+ >=dev-perl/MooX-late-0.14.0
+"
+DEPEND="${RDEPEND}
+ >=virtual/perl-ExtUtils-MakeMaker-6.360.0
+"
+
+PATCHES=(
+ "${FILESDIR}/${P}"-0001-fix-spelling-error-settting-should-be-setting.patch
+ "${FILESDIR}/${P}"-0002-Generalize-the-test-suite.patch
+ "${FILESDIR}/${P}"-0003-subkey-validity-of-an-key-when-we-have-established-n.patch
+ "${FILESDIR}/${P}"-0004-ensure-that-test-covers-all-signatures.patch
+ "${FILESDIR}/${P}"-0005-add-gpg_is_modern-to-test-suite.patch
+ "${FILESDIR}/${P}"-0006-Modern-GnuPG-2.1-reports-more-detail-about-secret-ke.patch
+ "${FILESDIR}/${P}"-0007-test-suite-match-plaintext-output-across-versions-of.patch
+ "${FILESDIR}/${P}"-0008-fix-test_default_key_passphrase-when-passphrase-come.patch
+ "${FILESDIR}/${P}"-0009-clean-up-trailing-whitespace.patch
+ "${FILESDIR}/${P}"-0010-fix-capitalization-of-GnuPG.patch
+ "${FILESDIR}/${P}"-0011-ommand_args-should-be-command_args.patch
+ "${FILESDIR}/${P}"-0012-use-fingerprints-as-inputs-during-tests-to-demonstra.patch
+ "${FILESDIR}/${P}"-0013-move-key-files-to-generic-names.patch
+ "${FILESDIR}/${P}"-0014-fix-spelling-s-convience-convenience.patch
+ "${FILESDIR}/${P}"-0015-added-new-secret-key-with-different-passphrase.patch
+ "${FILESDIR}/${P}"-0016-Test-use-of-gpg-without-explicit-passphrase-agent-pi.patch
+ "${FILESDIR}/${P}"-0017-Kill-any-GnuPG-agent-before-and-after-the-test-suite.patch
+ "${FILESDIR}/${P}"-0018-Use-a-short-temporary-homedir-during-the-test-suite.patch
+ "${FILESDIR}/${P}"-0019-Make-things-work-with-gpg1-assuming-plain-gpg-is-mod.patch
+)
+
+src_prepare() {
+ sed -i -e 's/use inc::Module::Install;/use lib q[.];\nuse inc::Module::Install;/' Makefile.PL ||
+ die "Can't patch Makefile.PL for 5.26 dot-in-inc"
+ perl-module_src_prepare
+}
+
+src_test() {
+# Nearly all tests succeed with this patchset and GnuPG 2.1 when running outside the
+# emerge sandbox. However, the agent architecture is not really sandbox-friendly, so...
+#
+# Test Summary Report
+# -------------------
+# t/decrypt.t (Wstat: 0 Tests: 6 Failed: 2)
+# Failed tests: 5-6
+# Failed 1/22 test programs. 2/56 subtests failed.
+ perl_rm_files t/decrypt.t
+# Needs to run a setup test that spawns a persistent daemon
+ DIST_TEST="do"
+ perl-module_src_test
+}
diff --git a/dev-perl/GnuPG-Interface/Manifest b/dev-perl/GnuPG-Interface/Manifest
new file mode 100644
index 000000000000..e697bb5e1ec1
--- /dev/null
+++ b/dev-perl/GnuPG-Interface/Manifest
@@ -0,0 +1,24 @@
+AUX GnuPG-Interface-0.520.0-0001-fix-spelling-error-settting-should-be-setting.patch 1104 BLAKE2B 6275517463eec5caa865338109c151cc8c351200cfe8666a9652e7733855a29d668c22a800820caad79dc6ef9d1c6ac0569ec8cec6826f77f60029d30360d14c SHA512 154fe07541bdfa36be9ce72fee8ce1edb8fbfce73d3006b888ec141a3e5efb9eacc3cb91956606ef56b67a5fde8c19da5d92f38d02acb77d7681e1219d6c513c
+AUX GnuPG-Interface-0.520.0-0002-Generalize-the-test-suite.patch 4552 BLAKE2B 89ec43b57ed6ecdcd4b78f7b84cbbded575e8cce0785d86960bb8b1f092c53ab54cc533e757dc47501de8fa8c2db73ae42a9f705e3821b57ff1110ad6ef1f34f SHA512 8310f8b4a7e1092273fb0444e65871d5aed2eb87107fcb416f7e5c82146379c3d77ff511209ae01efeb475d62cc2e8682ece15b4a826d15a0e450871fdff50b8
+AUX GnuPG-Interface-0.520.0-0003-subkey-validity-of-an-key-when-we-have-established-n.patch 1217 BLAKE2B 5d96a0fb84d7d12ef58caf8e6b3a5363f96ed71300d37ebed5ad057f46b705456da3922f96eb58efe79864cfa0ef5b560e53a7f71c29d36b4602071f0b5bfcb9 SHA512 7cddb8e065e3380a5bf9aeb82af620bdf9c4062a9e315afb871574af6140369ce9c1e9b0ac0c8463c6158694ad78d65e328acce62a3336bce8705f3ffc393cb6
+AUX GnuPG-Interface-0.520.0-0004-ensure-that-test-covers-all-signatures.patch 1438 BLAKE2B 44ff3ea149993b7c296a91fe801e9fdc2a8f19617a7c11f2ab83c7de71e37bc26d5ed434a54c1301c74b59bfd66ea19e50ea1880b93d9b74bb2afa6bd48b2c2b SHA512 dcb3f587834d3d22ab745a6796cbb924efbc5d9985947e3884f8f4fdb47a911385d400b4a2b72ef83daed3ba572fbf3d6d4944cf63c308ae4bc64cf369191111
+AUX GnuPG-Interface-0.520.0-0005-add-gpg_is_modern-to-test-suite.patch 1522 BLAKE2B 883cbe443329b48ca91f3af2765024b22d889b9e3e49817bc9d4e883594743073314dde2145bfd6de3e234130f9c230b533c62a00897e398e4c73c93f15a41a2 SHA512 170d5231f98234614c5e8c1afb09b2fc4ff26bb8e5b280a8b91a0b886e4199c6c993af41b63db7041cc6f8b2fc676461720e64289818966f3980bcf4af75625c
+AUX GnuPG-Interface-0.520.0-0006-Modern-GnuPG-2.1-reports-more-detail-about-secret-ke.patch 5276 BLAKE2B 07621e4fc1f12da4dbed3b537412215ba5121a8ea4b2f5f85ddbb6869228db7744c5fcd884ece126be2d56547983413ee4dd63c81149c4882514bd9d8e400dd8 SHA512 7c1a588028378e2691e951a5572465c877b6ef4fb86b27aa4e3aef3aa75a49e1e53b52c78ba88b00cfb243aa10bf75aef88784d22deb7925d0cdc98687ee8804
+AUX GnuPG-Interface-0.520.0-0007-test-suite-match-plaintext-output-across-versions-of.patch 3286 BLAKE2B f1452611f761f6fd06b91e49a47016820633284d8cdddccbabb3d19f4e91e8b9264bd879d1177e64cca7755b9faa6550ac24908dcdaf2b54335e7f7fb22bf08f SHA512 eb6d4efd476d1d7582c66b90fdef21badc8d0eecd24ce642cac7f5d0e3e491c78cbc0ee49bf886ce571f2718c2aa725d6c07a7ca0cd6e5483624df6984cf8f27
+AUX GnuPG-Interface-0.520.0-0008-fix-test_default_key_passphrase-when-passphrase-come.patch 1125 BLAKE2B 12144ec6aca0407c3cd5f07ef8f4f8a2837157a9c2af082331af3f7b9f6fe18b3be461b5fd75577b3c5e1d54ef5a31301ebe56f09dc79b3899fbbcd0efc04d6c SHA512 e4f5b69a1ac61a7d39d97cb716f07cef5b612b01b64005b6f0f0974fb19b386a6e817c66fb49762c99b66917e551ab96e34a48cf25bb59b8f06844773adcd44b
+AUX GnuPG-Interface-0.520.0-0009-clean-up-trailing-whitespace.patch 3683 BLAKE2B c433dc5c563ee0472ab6d3c1c00db3326345a06aa244df5afa8be7d4e732bd8de624c8fb0b3db4b1a11d53cdd86f28b02ad970323ec743189fd015b107be6154 SHA512 f911f3d830e30d6e3e684abb7c3e90c801715a68bc2ccd02fc75a15f4c9ec9095260a56a021645cc82bc7f6381fee1f0b5e404cdd6c7be93d1cf293adaaabfbf
+AUX GnuPG-Interface-0.520.0-0010-fix-capitalization-of-GnuPG.patch 1094 BLAKE2B 5588031372f4d8d932527a96fce63cdd3a563ca937794c44b9eb124ecf3f64d64490adf2030a5ceb035cba9a2ab8f0a3576ef6890a6a6c39372234a66f490497 SHA512 5ecadeb592b73843756a7fb7e8d002e0931832f1120399072decf7586ebec6ec39c6eb33811de58849d7a986a0e87dd0a5b3c6bb0eb9328365d75e6a8eaf02be
+AUX GnuPG-Interface-0.520.0-0011-ommand_args-should-be-command_args.patch 670 BLAKE2B 3ec3023e125c2c71ec94eec02b6a103bd7f5bcd64c77d6a7b23b6a81b01e99f776b3d970e2d43806eb53fc3e63de2594703e7602acc4ac77306e9ab3f7beca2f SHA512 cd9af9b1df71f4bbbee8e97de41933c93e908626cb766c88636f9df5a4307360b302eeabe1d999da10b81237f38da673fbd9dd34417df27b3fc4a9e1fd98e73f
+AUX GnuPG-Interface-0.520.0-0012-use-fingerprints-as-inputs-during-tests-to-demonstra.patch 9909 BLAKE2B 3b416e430a693f8160b75bcb9b11d807fa9a658ef3737a177392cf9e8819131758d2e6c0b6adde4e75ee7e2205ca6cf74df1e953e6fe00274ec613b1a3417c12 SHA512 8a1dc1d4df2f1ab575256845439be416323cc4448812c28c9a3209404cfc1fbabecdf65701e9fdf9c9530c964114d8f91eae42200a4b7dae8ecb78b77c22611f
+AUX GnuPG-Interface-0.520.0-0013-move-key-files-to-generic-names.patch 1247 BLAKE2B 756fd2b7a3a07838975e6401e637e080c7cf1197197de7c76c256bc899c061f19fc7f139d9190065f50672c6e23bf601aa91c0a98ef2c8b8a226623a97009c31 SHA512 8d4a890788ce13923b0bb74c1262c8e41c2d7b4143153e3434df06640afaa7380e39b57f0ea5607e79b57cb28fb7ac8c432da7d712f3e17cb64501a58d92240f
+AUX GnuPG-Interface-0.520.0-0014-fix-spelling-s-convience-convenience.patch 2165 BLAKE2B d7d62bbb66c629c327606b9b3b138f45a04de31e81cc2373f384315cb60832598d90e37428e00e2ed659173c0a463d3a4016d085120d8ce17042cd98b808231f SHA512 57f685199115f3d2bafe6c8b088f526fcce60e838891d4f7ba74b648653f4e4f3f730c5b6e9f9143a6bf3812e2f4eb9c2871c60bce9f1db9c872831341b0a401
+AUX GnuPG-Interface-0.520.0-0015-added-new-secret-key-with-different-passphrase.patch 5950 BLAKE2B 407c7b0dc9f74a657429eb877d9731c75e5fdc7aed0b291530ef63e357cd0d07e3ee6060bc8b96908c0ff46feb14f15547100f3a1c333c45930b1e2b67e8f42a SHA512 675bfea548b7f0dcff6f6b371e9e673e9c6cf8eb3cd29483519473d7b0519358416cb3946cb14958317f1ff661248a019c3e1b51abf3f2b85b6c645e45b045b5
+AUX GnuPG-Interface-0.520.0-0016-Test-use-of-gpg-without-explicit-passphrase-agent-pi.patch 11278 BLAKE2B 581b7addc6c2aebff575d66db69bf827df749f73f98be6e14863dcfec6800eb53fd857d29c7794516f5fb905f0439d920b7352d6f54eb29ebf413949b70d5f45 SHA512 ce27eee7d1b89a8c005c34f81862f3516866aeea23fb254288917d93da4ceec46a7eabc65b2f4c05f3e33e816301934ad83e3e51a8b742e1ac781fd5fe81b609
+AUX GnuPG-Interface-0.520.0-0017-Kill-any-GnuPG-agent-before-and-after-the-test-suite.patch 1535 BLAKE2B ac7e1f395a5ce8afe1611156f65aa305ddb1f1ecb26cfc7176c81c411d92c6a71b6a3781f950c4c54b422c6205cef94fce2f45f8bc6545ddeece34af774b5ef7 SHA512 d1f5e3258543fad32cc317bd5b34ffda279fec39d533b0390ed941fee1f780b37dda767670e7ae8f6c68bcf206c089122cf46fc5f8c24e889b032132a1f85eb1
+AUX GnuPG-Interface-0.520.0-0018-Use-a-short-temporary-homedir-during-the-test-suite.patch 4096 BLAKE2B 12d9bcd4931c9d8d5c3608beadbfb08bf144794cc13ac724bc2b21ab654facdec98e6293c42bf5c12e5867abd9af77b9c665ef903c91739484a40495bf069fcd SHA512 98d6b4d976013741c614265c8b9d35458461fb4407cbe10f8600c55522128a68a2976157e3165ca99aed733d2c5dee6164fa048a7671bdb9d37612a438327242
+AUX GnuPG-Interface-0.520.0-0019-Make-things-work-with-gpg1-assuming-plain-gpg-is-mod.patch 2237 BLAKE2B f152aa512f9fbc240d1862d5439928276fb4fdc73d716fcb4941504d7bc9fcf3facde6c06d2d52a7ca0628d3aa72e65248a1bb0237afe1e6c0585608f3c44b12 SHA512 a59ac575d410b5feb14a8a2165f526a1a7fbdf4575bc7e0d8d690a4d952fb312defb1390ae0186ec65b52737643ff560d5d48e8920bfe1cdcd1702016755035e
+DIST GnuPG-Interface-0.52.tar.gz 63733 BLAKE2B ce068177b8467356b57aae95a61e4746e4f690272083e465c877533a5ab0eedaaf271586aaffe7e4f979034d04bd49fc483047654426f23cfb904a98326454c3 SHA512 911f47a3b52249e8b39133d4040b86147793d9dd6a78d2b279674d6bba0cd38de5c919bf12b241b0e977790575502531afab6b1d2c05739d050c16d05d52fc49
+EBUILD GnuPG-Interface-0.520.0-r1.ebuild 750 BLAKE2B dddbb1be098fc3ee8094331ff597508cc0a87cff389096d1abd4a1a396c781d7798e85164f578bbb1a194935a267cb3266504629606cec13606465be85de3ab0 SHA512 12a666502da35e346a6503a040d37033daefda889df50a6efb880097d47798699956b84c3bd56d2fae1892d7fd29da073d0ee9ab62f611fb39b240d11e665389
+EBUILD GnuPG-Interface-0.520.0-r2.ebuild 2526 BLAKE2B 47dcc858720c846e2fa0612f20f1c39ced6423dcbe62a0211698a6b9ac57956480a68b5572608ce9fdf4a88dffe5ac0c46f648f23941c9be78a9d7824b47fde3 SHA512 efde13437f6e98749bd066e55dbc17e0ea75002e9f24fb8026031d35251d333ba751f666911d906b5e88cb3fb34d3d2ab1400901d0e0e9b9fbc45b2d8701d84f
+EBUILD GnuPG-Interface-0.520.0-r3.ebuild 2653 BLAKE2B 8af8a4f0f4a8af8e99d34c459271d69d67e5d3d427653580791d087d4e2308a9ee42e519b023baece00c2ddc54fe2a9661b3b52c0d8c5c454b411c5681ac747a SHA512 1b7c84e5bc0220fffaab2fe5d3f780d3e37db7375e2e99d532f535696a451c4c1c54990754191f10e700e94c8fa1b901fc935249d00efdd6799c62be43802dff
+MISC metadata.xml 1209 BLAKE2B a29e49d03ea5216897ae8d8ca55472c4d41d75a2722133dd2782b504db464740f15b5c017e09efb9a76da76b482f3f33e5b8cd8279402d51e14c201c8840d9b3 SHA512 3589a6d227ccde1efd9a0842e98b7f4c3d4f5434a9e62feba4a6764d1fdc4c0dc7390bba15bb52053520931c4ed4ff05235ec98efbe0239a4a9da12b30092cfb
diff --git a/dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0001-fix-spelling-error-settting-should-be-setting.patch b/dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0001-fix-spelling-error-settting-should-be-setting.patch
new file mode 100644
index 000000000000..fcec61009070
--- /dev/null
+++ b/dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0001-fix-spelling-error-settting-should-be-setting.patch
@@ -0,0 +1,35 @@
+From: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
+Date: Tue, 13 Sep 2016 07:26:00 +0200
+Subject: fix spelling error ("settting" should be "setting")
+
+---
+ README | 2 +-
+ lib/GnuPG/Interface.pm | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/README b/README
+index fcb982a..f457577 100644
+--- a/README
++++ b/README
+@@ -6,7 +6,7 @@ SYNOPSIS
+ use IO::Handle;
+ use GnuPG::Interface;
+
+- # settting up the situation
++ # setting up the situation
+ my $gnupg = GnuPG::Interface->new();
+ $gnupg->options->hash_init( armor => 1,
+ homedir => '/home/foobar' );
+diff --git a/lib/GnuPG/Interface.pm b/lib/GnuPG/Interface.pm
+index f952f3e..83a4b1a 100644
+--- a/lib/GnuPG/Interface.pm
++++ b/lib/GnuPG/Interface.pm
+@@ -834,7 +834,7 @@ GnuPG::Interface - Perl interface to GnuPG
+ use IO::Handle;
+ use GnuPG::Interface;
+
+- # settting up the situation
++ # setting up the situation
+ my $gnupg = GnuPG::Interface->new();
+ $gnupg->options->hash_init( armor => 1,
+ homedir => '/home/foobar' );
diff --git a/dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0002-Generalize-the-test-suite.patch b/dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0002-Generalize-the-test-suite.patch
new file mode 100644
index 000000000000..d0d3e6ccdf9d
--- /dev/null
+++ b/dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0002-Generalize-the-test-suite.patch
@@ -0,0 +1,151 @@
+From: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
+Date: Tue, 13 Sep 2016 10:38:12 -0400
+Subject: Generalize the test suite
+
+The test suite currently assumes it knows something about the internal
+state of GnuPG's homedir.
+
+It's safer and less brittle to rely explicitly on the public interface
+that GnuPG has committed to, such as --import-keys and --list-keys,
+rather than assuming that certain files are in certain places in the
+GnuPG homedir.
+
+It's also better to create a fresh homedir and allow GnuPG to populate
+it during the test suite, cleaning it up at the end, rather than hope
+that GnuPG will leave a pre-existing homedir untouched.
+
+With this change, many more of the tests pass when /usr/bin/gpg is
+provided by GnuPG 2.1.
+---
+ t/000_setup.t | 28 ++++++++++++++++++++++++++++
+ t/MyTestSpecific.pm | 2 +-
+ t/zzz_cleanup.t | 17 +++++++++++++++++
+ test/fake-pinentry.pl | 28 ++++++++++++++++++++++++++++
+ test/{options => gpg.conf} | 0
+ test/secret-keys/1.0.test | 4 ++--
+ 6 files changed, 76 insertions(+), 3 deletions(-)
+ create mode 100644 t/000_setup.t
+ create mode 100644 t/zzz_cleanup.t
+ create mode 100755 test/fake-pinentry.pl
+ rename test/{options => gpg.conf} (100%)
+
+diff --git a/t/000_setup.t b/t/000_setup.t
+new file mode 100644
+index 0000000..7f7f7b0
+--- /dev/null
++++ b/t/000_setup.t
+@@ -0,0 +1,28 @@
++#!/usr/bin/perl -w
++
++use strict;
++use English qw( -no_match_vars );
++
++use lib './t';
++use MyTest;
++use MyTestSpecific;
++use Cwd;
++use File::Path qw (make_path);
++use File::Copy;
++
++TEST
++{
++ make_path('test/gnupghome', { mode => 0700 });
++ my $agentconf = IO::File->new( "> test/gnupghome/gpg-agent.conf" );
++ $agentconf->write("pinentry-program " . getcwd() . "/test/fake-pinentry.pl\n");
++ $agentconf->close();
++ copy('test/gpg.conf', 'test/gnupghome/gpg.conf');
++ reset_handles();
++
++ my $pid = $gnupg->import_keys(command_args => [ 'test/pubring.gpg', 'test/secring.gpg' ],
++ options => [ 'batch'],
++ handles => $handles);
++ waitpid $pid, 0;
++
++ return $CHILD_ERROR == 0;
++};
+diff --git a/t/MyTestSpecific.pm b/t/MyTestSpecific.pm
+index 053b749..1af98ae 100644
+--- a/t/MyTestSpecific.pm
++++ b/t/MyTestSpecific.pm
+@@ -40,7 +40,7 @@ use vars qw( @ISA @EXPORT
+
+ $gnupg = GnuPG::Interface->new( passphrase => 'test' );
+
+-$gnupg->options->hash_init( homedir => 'test',
++$gnupg->options->hash_init( homedir => 'test/gnupghome',
+ armor => 1,
+ meta_interactive => 0,
+ meta_signing_key_id => '0xF950DA9C',
+diff --git a/t/zzz_cleanup.t b/t/zzz_cleanup.t
+new file mode 100644
+index 0000000..5c03a72
+--- /dev/null
++++ b/t/zzz_cleanup.t
+@@ -0,0 +1,17 @@
++#!/usr/bin/perl -w
++
++use strict;
++use English qw( -no_match_vars );
++
++use lib './t';
++use MyTest;
++use MyTestSpecific;
++use File::Path qw (remove_tree);
++
++# this is actually no test, just cleanup.
++TEST
++{
++ my $err = [];
++ remove_tree('test/gnupghome', {error => \$err});
++ return ! @$err;
++};
+diff --git a/test/fake-pinentry.pl b/test/fake-pinentry.pl
+new file mode 100755
+index 0000000..12d3611
+--- /dev/null
++++ b/test/fake-pinentry.pl
+@@ -0,0 +1,28 @@
++#!/usr/bin/perl -w
++# Use this for your test suites when a perl interpreter is available.
++#
++# The encrypted keys in your test suite that you expect to work must
++# be locked with a passphrase of "test"
++#
++# Author: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
++#
++# License: This trivial work is hereby explicitly placed into the
++# public domain. Anyone may reuse it, modify it, redistribute it for
++# any purpose.
++
++use strict;
++use warnings;
++
++# turn off buffering
++$| = 1;
++
++print "OK This is only for test suites, and should never be used in production\n";
++while (<STDIN>) {
++ chomp;
++ next if (/^$/);
++ next if (/^#/);
++ print ("D test\n") if (/^getpin/i);
++ print "OK\n";
++ exit if (/^bye/i);
++}
++1;
+diff --git a/test/options b/test/gpg.conf
+similarity index 100%
+rename from test/options
+rename to test/gpg.conf
+diff --git a/test/secret-keys/1.0.test b/test/secret-keys/1.0.test
+index 5999484..129d472 100644
+--- a/test/secret-keys/1.0.test
++++ b/test/secret-keys/1.0.test
+@@ -1,5 +1,5 @@
+-test/secring.gpg
+-----------------
++test/gnupghome/secring.gpg
++--------------------------
+ sec 1024D/F950DA9C 2000-02-06
+ uid GnuPG test key (for testing purposes only)
+ uid Foo Bar (1)
diff --git a/dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0003-subkey-validity-of-an-key-when-we-have-established-n.patch b/dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0003-subkey-validity-of-an-key-when-we-have-established-n.patch
new file mode 100644
index 000000000000..23fbf97fee2c
--- /dev/null
+++ b/dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0003-subkey-validity-of-an-key-when-we-have-established-n.patch
@@ -0,0 +1,37 @@
+From: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
+Date: Tue, 13 Sep 2016 11:35:31 -0400
+Subject: subkey validity of an key when we have established no trust anchors
+
+This apparently isn't tested by deep comparisons, though, so it was
+never caught.
+---
+ t/get_public_keys.t | 2 +-
+ t/get_secret_keys.t | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/t/get_public_keys.t b/t/get_public_keys.t
+index 53db021..73e320b 100644
+--- a/t/get_public_keys.t
++++ b/t/get_public_keys.t
+@@ -175,7 +175,7 @@ TEST
+ ];
+
+ my $subkey = GnuPG::SubKey->new
+- ( validity => 'u',
++ ( validity => '-',
+ length => 768,
+ algo_num => 16,
+ hex_id => 'ADB99D9C2E854A6B',
+diff --git a/t/get_secret_keys.t b/t/get_secret_keys.t
+index 3a1d99f..7bba083 100644
+--- a/t/get_secret_keys.t
++++ b/t/get_secret_keys.t
+@@ -48,7 +48,7 @@ TEST
+
+
+ my $subkey = GnuPG::SubKey->new
+- ( validity => 'u',
++ ( validity => '-',
+ length => 768,
+ algo_num => 16,
+ hex_id => 'ADB99D9C2E854A6B',
diff --git a/dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0004-ensure-that-test-covers-all-signatures.patch b/dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0004-ensure-that-test-covers-all-signatures.patch
new file mode 100644
index 000000000000..1743b7d9177c
--- /dev/null
+++ b/dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0004-ensure-that-test-covers-all-signatures.patch
@@ -0,0 +1,35 @@
+From: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
+Date: Tue, 13 Sep 2016 11:39:04 -0400
+Subject: ensure that test covers all signatures
+
+The earlier test wasn't reporting on one of the known self-sigs for
+the test key for some reason.
+
+This change ensures that all known signatures are present.
+---
+ t/get_public_keys.t | 12 +++++++++++-
+ 1 file changed, 11 insertions(+), 1 deletion(-)
+
+diff --git a/t/get_public_keys.t b/t/get_public_keys.t
+index 73e320b..9e96f7d 100644
+--- a/t/get_public_keys.t
++++ b/t/get_public_keys.t
+@@ -83,7 +83,17 @@ TEST
+ date_string => '2000-02-06',
+ hex_id => '53AE596EF950DA9C',
+ sig_class => 0x13,
+- validity => '!'));
++ validity => '!'),
++ GnuPG::Signature->new(
++ date => 1177086329,
++ algo_num => 17,
++ is_exportable => 1,
++ user_id_string => 'GnuPG test key (for testing purposes only)',
++ date_string => '2007-04-20',
++ hex_id => '53AE596EF950DA9C',
++ sig_class => 0x13,
++ validity => '!'),
++ );
+
+ my $uid1 = GnuPG::UserId->new( as_string => 'Foo Bar (1)',
+ validity => '-');
diff --git a/dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0005-add-gpg_is_modern-to-test-suite.patch b/dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0005-add-gpg_is_modern-to-test-suite.patch
new file mode 100644
index 000000000000..0016fa755c0c
--- /dev/null
+++ b/dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0005-add-gpg_is_modern-to-test-suite.patch
@@ -0,0 +1,39 @@
+From: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
+Date: Tue, 13 Sep 2016 14:31:38 -0400
+Subject: add $gpg_is_modern to test suite
+
+MyTestSpecific.pm now produces a new variable indicating whether it
+the version of GnuPG we run against is from the "Modern" line of GnuPG
+development (2.1 or later). This will be useful when comparing output
+that we can't expect from earlier versions.
+---
+ t/MyTestSpecific.pm | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+diff --git a/t/MyTestSpecific.pm b/t/MyTestSpecific.pm
+index 1af98ae..a309698 100644
+--- a/t/MyTestSpecific.pm
++++ b/t/MyTestSpecific.pm
+@@ -29,17 +29,20 @@ use GnuPG::Handles;
+ use vars qw( @ISA @EXPORT
+ $stdin $stdout $stderr
+ $gpg_program $handles $gnupg
+- %texts
++ %texts $gpg_is_modern
+ );
+
+ @ISA = qw( Exporter );
+ @EXPORT = qw( stdin stdout stderr
+ gnupg_program handles reset_handles
+- texts file_match
++ texts file_match gpg_is_modern
+ );
+
+ $gnupg = GnuPG::Interface->new( passphrase => 'test' );
+
++my @version = split('\.', $gnupg->version());
++$gpg_is_modern = ($version[0] > 2 || ($version[0] == 2 && $version[1] >= 1));
++
+ $gnupg->options->hash_init( homedir => 'test/gnupghome',
+ armor => 1,
+ meta_interactive => 0,
diff --git a/dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0006-Modern-GnuPG-2.1-reports-more-detail-about-secret-ke.patch b/dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0006-Modern-GnuPG-2.1-reports-more-detail-about-secret-ke.patch
new file mode 100644
index 000000000000..bea8bfc68dfa
--- /dev/null
+++ b/dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0006-Modern-GnuPG-2.1-reports-more-detail-about-secret-ke.patch
@@ -0,0 +1,120 @@
+From: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
+Date: Tue, 13 Sep 2016 14:12:40 -0400
+Subject: Modern GnuPG (2.1) reports more detail about secret keys
+
+the GnuPG "modern" suite (version 2.1 or later) reports more detail
+about secret keys than previous versions did. In particular, it
+reports stored ownertrust, public key data, and designated revokers
+for secret keys. Older versions only reported those attributes for
+public keys.
+
+This patch adjusts the test suite to ensure that our handmade key
+matches the produced key when /usr/bin/gpg is supplied by the modern
+suite.
+---
+ t/get_secret_keys.t | 66 +++++++++++++++++++++++++++++++++++++++++++----------
+ 1 file changed, 54 insertions(+), 12 deletions(-)
+
+diff --git a/t/get_secret_keys.t b/t/get_secret_keys.t
+index 7bba083..c798cce 100644
+--- a/t/get_secret_keys.t
++++ b/t/get_secret_keys.t
+@@ -23,16 +23,34 @@ TEST
+ return 0 unless @returned_keys == 1;
+
+ $given_key = shift @returned_keys;
+-
+- $handmade_key = GnuPG::PrimaryKey->new
+- ( length => 1024,
++ my $pubkey_data = [
++ Math::BigInt->from_hex('0x'.
++ '88FCAAA5BCDCD52084D46143F44ED1715A339794641158DE03AA2092AFD3174E3DCA2CB7DF2DDC6FEDF7C3620F5A8BDAD06713E6153F8748DD76CB97305F30CBA8F8801DB47FAC11EED725F55672CB9BDAD629178A677CBB089B3E8AE0D9A9AD7741697A35F2868C62D25670994A92D810480173DC24263EEA0F103A43C0B64B'),
++ Math::BigInt->from_hex('0x'.
++ '8F2A3842C70FF17660CBB78C78FC93F534AB9A17'),
++ Math::BigInt->from_hex('0x'.
++ '83E348C2AA65F56DE84E8FDCE6DA7B0991B1C75EC8CA446FA85869A43350907BFF36BE512385E8E7E095578BB2138C04E318495873218286DE2B8C86F36EA670135434967AC798EBA28581F709F0C6B696EB512D3E561E381A06E4B5239BCC655015F9A926C74E4B859B26EAD604F208A556511A76A40EDCD9C38E6BD82CCCB4'),
++ Math::BigInt->from_hex('0x'.
++ '80DE04C85E30C9D62C13F90CFF927A84A5A59D0900B3533D4D6193FEF8C5DAEF9FF8A7D5F76B244FBC17644F50D524E0B19CD3A4B5FC2D78DAECA3FE58FA1C1A64E6C7B96C4EE618173543163A72EF954DFD593E84342699096E9CA76578AC1DE3D893BCCD0BF470CEF625FAF816A0F503EF75C18C6173E35C8675AF919E5704')
++ ];
++
++
++ my $args = {
++ length => 1024,
+ algo_num => 17,
+ hex_id => '53AE596EF950DA9C',
+ creation_date => 949813093,
+ creation_date_string => '2000-02-06',
+- owner_trust => '', # secret keys do not report ownertrust?
++ owner_trust => '-',
+ usage_flags => 'scaESCA',
+- );
++ pubkey_data => $pubkey_data,
++ };
++ if (!$gpg_is_modern) {
++ # older versions don't report ownertrust or pubkey_data for secret keys:
++ delete $args->{pubkey_data};
++ $args->{owner_trust} = '';
++ }
++ $handmade_key = GnuPG::PrimaryKey->new($args);
+
+ $handmade_key->fingerprint
+ ( GnuPG::Fingerprint->new( as_hex_string =>
+@@ -42,20 +60,42 @@ TEST
+
+ $handmade_key->push_user_ids(
+ GnuPG::UserId->new( as_string => 'GnuPG test key (for testing purposes only)',
+- validity => ''), # secret keys do not report uid validity?
++ validity => $args->{owner_trust}),
+ GnuPG::UserId->new( as_string => 'Foo Bar (1)',
+- validity => '')); # secret keys do not report uid validity?
+-
+-
+- my $subkey = GnuPG::SubKey->new
+- ( validity => '-',
++ validity => $args->{owner_trust}));
++
++ my $revoker = GnuPG::Revoker->new
++ ( algo_num => 17,
++ class => 0x80,
++ fingerprint => GnuPG::Fingerprint->new( as_hex_string =>
++ '4F863BBBA8166F0A340F600356FFD10A260C4FA3'),
++ );
++
++ my $subkey_pub_data = [
++ Math::BigInt->from_hex('0x'.
++ '8831982DADC4C5D05CBB01D9EAF612131DDC9C24CEA7246557679423FB0BA42F74D10D8E7F5564F6A4FB8837F8DC4A46571C19B122E6DF4B443D15197A6A22688863D0685FADB6E402316DAA9B560D1F915475364580A67E6DF0A727778A5CF3'),
++ Math::BigInt->from_hex('0x'.
++ '6'),
++ Math::BigInt->from_hex('0x'.
++ '2F3850FF130C6AC9AA0962720E86539626FAA9B67B33A74DFC0DE843FF3E90E43E2F379EE0182D914FA539CCCF5C83A20DB3A7C45E365B8A2A092E799A3DFF4AD8274EB977BAAF5B1AFB2ACB8D6F92454F01682F555565E73E56793C46EF7C3E')
++ ];
++
++ my $sub_args = {
++ validity => '-',
+ length => 768,
+ algo_num => 16,
+ hex_id => 'ADB99D9C2E854A6B',
+ creation_date => 949813119,
+ creation_date_string => '2000-02-06',
+ usage_flags => 'e',
+- );
++ pubkey_data => $subkey_pub_data,
++ };
++
++ if (!$gpg_is_modern) {
++ # older versions do not report pubkey data for secret keys
++ delete $sub_args->{pubkey_data};
++ }
++ my $subkey = GnuPG::SubKey->new($sub_args);
+
+ $subkey->fingerprint
+ ( GnuPG::Fingerprint->new( as_hex_string =>
+@@ -64,6 +104,8 @@ TEST
+ );
+
+ $handmade_key->push_subkeys( $subkey );
++ # older versions do not report designated revokers for secret keys
++ $handmade_key->push_revokers( $revoker ) if ($gpg_is_modern);
+
+ $handmade_key->compare( $given_key );
+ };
diff --git a/dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0007-test-suite-match-plaintext-output-across-versions-of.patch b/dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0007-test-suite-match-plaintext-output-across-versions-of.patch
new file mode 100644
index 000000000000..85c1a46adae5
--- /dev/null
+++ b/dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0007-test-suite-match-plaintext-output-across-versions-of.patch
@@ -0,0 +1,95 @@
+From: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
+Date: Tue, 13 Sep 2016 14:46:13 -0400
+Subject: test suite: match plaintext output across versions of GnuPG
+
+The human-readable version of --list-keys is *not* expected to be
+static over time or as the user's environment changes (e.g. LANG or
+LC_MESSAGES), so expecting it to be machine-parseable is probably a
+mistake.
+
+That said, some users might want to pull textual information about
+specific keys to display directly to the user, so it's not a terrible
+idea to have it in the test suite.
+
+Modern GnuPG (2.1 or later) changes the default structure of the
+human-readable output in a few significant ways:
+
+ * it writes the path to the keyring as an absolute path, even if
+ $GNUPGHOME is set to a non-absolute path.
+
+ * it shows the calculated user id validity by default (see
+ show-uid-validity in gpg's --list-options). (note that this is a
+ translated string, so that "unknown" (in the default C locale)
+ becomes "inconnue" when LANG or LC_MESSAGES is set to fr_CH.UTF-8,
+ for example.
+
+ * it writes the key algorithm names differently (e.g. rsa2048 instead
+ of 2048R)
+
+ * it does not display the key ID at all by default
+
+ * it displays the full fingerprint in compact form by default
+
+This changeset fixes the test suite so that it can do a rough
+verification of the human-readable text output by list_secret_keys in
+the C locale in modern versions of GnuPG, while leaving it working for
+older GnuPG suites.
+---
+ t/list_secret_keys.t | 15 +++++++++++++--
+ test/secret-keys/1.modern.test | 8 ++++++++
+ 2 files changed, 21 insertions(+), 2 deletions(-)
+ create mode 100644 test/secret-keys/1.modern.test
+
+diff --git a/t/list_secret_keys.t b/t/list_secret_keys.t
+index 1fe9b7e..51e3651 100644
+--- a/t/list_secret_keys.t
++++ b/t/list_secret_keys.t
+@@ -16,13 +16,22 @@ TEST
+ {
+ reset_handles();
+
++ $ENV{LC_MESSAGES} = 'C';
+ my $pid = $gnupg->list_secret_keys( handles => $handles );
+ close $stdin;
+
+ $outfile = 'test/secret-keys/1.out';
+ my $out = IO::File->new( "> $outfile" )
+ or die "cannot open $outfile for writing: $ERRNO";
+- $out->print( <$stdout> );
++ while (<$stdout>) {
++ if ($gpg_is_modern && /^\/.*\/test\/gnupghome\/pubring.kbx$/) {
++ $out->print("test/gnupghome/pubring.kbx\n");
++ } elsif ($gpg_is_modern && /^--*$/) {
++ $out->print("--------------------------\n");
++ } else {
++ $out->print( $_ );
++ }
++ }
+ close $stdout;
+ $out->close();
+ waitpid $pid, 0;
+@@ -33,7 +42,9 @@ TEST
+
+ TEST
+ {
+- my @files_to_test = ( 'test/secret-keys/1.0.test' );
++ my $suffix = '0';
++ $suffix = 'modern' if ($gpg_is_modern);
++ my @files_to_test = ( 'test/secret-keys/1.'.$suffix.'.test' );
+
+ return file_match( $outfile, @files_to_test );
+ };
+diff --git a/test/secret-keys/1.modern.test b/test/secret-keys/1.modern.test
+new file mode 100644
+index 0000000..3e46407
+--- /dev/null
++++ b/test/secret-keys/1.modern.test
+@@ -0,0 +1,8 @@
++test/gnupghome/pubring.kbx
++--------------------------
++sec dsa1024 2000-02-06 [SCA]
++ 93AFC4B1B0288A104996B44253AE596EF950DA9C
++uid [ unknown] GnuPG test key (for testing purposes only)
++uid [ unknown] Foo Bar (1)
++ssb elg768 2000-02-06 [E]
++
diff --git a/dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0008-fix-test_default_key_passphrase-when-passphrase-come.patch b/dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0008-fix-test_default_key_passphrase-when-passphrase-come.patch
new file mode 100644
index 000000000000..5ae938325ff1
--- /dev/null
+++ b/dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0008-fix-test_default_key_passphrase-when-passphrase-come.patch
@@ -0,0 +1,29 @@
+From: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
+Date: Tue, 13 Sep 2016 15:22:27 -0400
+Subject: fix test_default_key_passphrase when passphrase comes from agent
+
+In the modern GnuPG suite, where the passphrase is always managed by
+the agent, gpg itself doesn't emit the GOOD_PASSPHRASE status.
+Instead, if signing is successful it emits plain old SIG_CREATED.
+
+There are probably even better ways to test whether a given key is
+unlocked in this case, but this is a straightforward baseline fix that
+should get this part of the test suite to pass with all available
+versions of GnuPG.
+---
+ lib/GnuPG/Interface.pm | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/lib/GnuPG/Interface.pm b/lib/GnuPG/Interface.pm
+index 83a4b1a..1f1e6d5 100644
+--- a/lib/GnuPG/Interface.pm
++++ b/lib/GnuPG/Interface.pm
+@@ -808,7 +808,7 @@ sub test_default_key_passphrase() {
+
+ # all we realy want to check is the status fh
+ while (<$status>) {
+- if (/^\[GNUPG:\]\s*GOOD_PASSPHRASE/) {
++ if (/^\[GNUPG:\]\s*(GOOD_PASSPHRASE|SIG_CREATED)/) {
+ waitpid $pid, 0;
+ return 1;
+ }
diff --git a/dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0009-clean-up-trailing-whitespace.patch b/dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0009-clean-up-trailing-whitespace.patch
new file mode 100644
index 000000000000..f408c6568b0f
--- /dev/null
+++ b/dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0009-clean-up-trailing-whitespace.patch
@@ -0,0 +1,112 @@
+From: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
+Date: Tue, 11 Oct 2016 19:52:13 -0400
+Subject: clean up trailing whitespace
+
+---
+ lib/GnuPG/Fingerprint.pm | 2 +-
+ lib/GnuPG/Handles.pm | 2 +-
+ lib/GnuPG/Interface.pm | 16 ++++++++--------
+ 3 files changed, 10 insertions(+), 10 deletions(-)
+
+diff --git a/lib/GnuPG/Fingerprint.pm b/lib/GnuPG/Fingerprint.pm
+index fcb1028..81c38a7 100644
+--- a/lib/GnuPG/Fingerprint.pm
++++ b/lib/GnuPG/Fingerprint.pm
+@@ -20,7 +20,7 @@ with qw(GnuPG::HashInit);
+
+ has as_hex_string => (
+ isa => 'Any',
+- is => 'rw',
++ is => 'rw',
+ );
+
+ sub compare {
+diff --git a/lib/GnuPG/Handles.pm b/lib/GnuPG/Handles.pm
+index b30ca57..3eee0e3 100644
+--- a/lib/GnuPG/Handles.pm
++++ b/lib/GnuPG/Handles.pm
+@@ -73,7 +73,7 @@ GnuPG::Handles - GnuPG handles bundle
+ = ( IO::Handle->new(), IO::Handle->new(), IO::Handle->new(),
+ IO::Handle->new(), IO::Handle->new(), IO::Handle->new(),
+ );
+-
++
+ my $handles = GnuPG::Handles->new
+ ( stdin => $stdin,
+ stdout => $stdout,
+diff --git a/lib/GnuPG/Interface.pm b/lib/GnuPG/Interface.pm
+index 1f1e6d5..19e8070 100644
+--- a/lib/GnuPG/Interface.pm
++++ b/lib/GnuPG/Interface.pm
+@@ -833,7 +833,7 @@ GnuPG::Interface - Perl interface to GnuPG
+ # A simple example
+ use IO::Handle;
+ use GnuPG::Interface;
+-
++
+ # setting up the situation
+ my $gnupg = GnuPG::Interface->new();
+ $gnupg->options->hash_init( armor => 1,
+@@ -852,7 +852,7 @@ GnuPG::Interface - Perl interface to GnuPG
+ # Now we'll go about encrypting with the options already set
+ my @plaintext = ( 'foobar' );
+ my $pid = $gnupg->encrypt( handles => $handles );
+-
++
+ # Now we write to the input of GnuPG
+ print $input @plaintext;
+ close $input;
+@@ -1144,7 +1144,7 @@ The following setup can be done before any of the following examples:
+
+ my $handles = GnuPG::Handles->new( stdin => $input,
+ stdout => $output );
+-
++
+ # this sets up the communication
+ # Note that the recipients were specified earlier
+ # in the 'options' data member of the $gnupg object.
+@@ -1220,7 +1220,7 @@ The following setup can be done before any of the following examples:
+ # a file written to disk
+ # Make sure you "use IO::File" if you use this module!
+ my $cipher_file = IO::File->new( 'encrypted.gpg' );
+-
++
+ # this sets up the communication
+ my $pid = $gnupg->decrypt( handles => $handles );
+
+@@ -1252,7 +1252,7 @@ The following setup can be done before any of the following examples:
+ # This time we'll just let GnuPG print to our own output
+ # and read from our input, because no input is needed!
+ my $handles = GnuPG::Handles->new();
+-
++
+ my @ids = ( 'ftobin', '0xABCD1234' );
+
+ # this time we need to specify something for
+@@ -1260,7 +1260,7 @@ The following setup can be done before any of the following examples:
+ # search ids as arguments
+ my $pid = $gnupg->list_public_keys( handles => $handles,
+ command_args => [ @ids ] );
+-
++
+ waitpid $pid, 0;
+
+ =head2 Creating GnuPG::PublicKey Objects
+@@ -1280,7 +1280,7 @@ The following setup can be done before any of the following examples:
+ command_args => [ qw( test/key.1.asc ) ],
+ handles => $handles,
+ );
+-
++
+ my @out = <$handles->stdout()>;
+ waitpid $pid, 0;
+
+@@ -1357,7 +1357,7 @@ under the same terms as Perl itself.
+
+ =head1 AUTHOR
+
+-GnuPg::Interface is currently maintained by Jesse Vincent <jesse@cpan.org>.
++GnuPg::Interface is currently maintained by Jesse Vincent <jesse@cpan.org>.
+
+ Frank J. Tobin, ftobin@cpan.org was the original author of the package.
+
diff --git a/dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0010-fix-capitalization-of-GnuPG.patch b/dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0010-fix-capitalization-of-GnuPG.patch
new file mode 100644
index 000000000000..f55d4b15942c
--- /dev/null
+++ b/dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0010-fix-capitalization-of-GnuPG.patch
@@ -0,0 +1,35 @@
+From: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
+Date: Tue, 11 Oct 2016 19:52:58 -0400
+Subject: fix capitalization of GnuPG
+
+---
+ README | 2 +-
+ lib/GnuPG/Interface.pm | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/README b/README
+index f457577..aa7c984 100644
+--- a/README
++++ b/README
+@@ -427,7 +427,7 @@ LICENSE
+ under the same terms as Perl itself.
+
+ AUTHOR
+- GnuPg::Interface is currently maintained by Jesse Vincent
++ GnuPG::Interface is currently maintained by Jesse Vincent
+ <jesse@cpan.org>.
+
+ Frank J. Tobin, ftobin@cpan.org was the original author of the package.
+diff --git a/lib/GnuPG/Interface.pm b/lib/GnuPG/Interface.pm
+index 19e8070..cf7138f 100644
+--- a/lib/GnuPG/Interface.pm
++++ b/lib/GnuPG/Interface.pm
+@@ -1357,7 +1357,7 @@ under the same terms as Perl itself.
+
+ =head1 AUTHOR
+
+-GnuPg::Interface is currently maintained by Jesse Vincent <jesse@cpan.org>.
++GnuPG::Interface is currently maintained by Jesse Vincent <jesse@cpan.org>.
+
+ Frank J. Tobin, ftobin@cpan.org was the original author of the package.
+
diff --git a/dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0011-ommand_args-should-be-command_args.patch b/dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0011-ommand_args-should-be-command_args.patch
new file mode 100644
index 000000000000..a9ab737aa04a
--- /dev/null
+++ b/dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0011-ommand_args-should-be-command_args.patch
@@ -0,0 +1,21 @@
+From: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
+Date: Tue, 11 Oct 2016 19:57:10 -0400
+Subject: ommand_args should be command_args
+
+---
+ t/list_public_keys.t | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/t/list_public_keys.t b/t/list_public_keys.t
+index 7e563c1..a36a78b 100644
+--- a/t/list_public_keys.t
++++ b/t/list_public_keys.t
+@@ -38,7 +38,7 @@ TEST
+ reset_handles();
+
+ my $pid = $gnupg->list_public_keys( handles => $handles,
+- ommand_args => '0xF950DA9C'
++ command_args => '0xF950DA9C'
+ );
+ close $stdin;
+
diff --git a/dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0012-use-fingerprints-as-inputs-during-tests-to-demonstra.patch b/dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0012-use-fingerprints-as-inputs-during-tests-to-demonstra.patch
new file mode 100644
index 000000000000..9694e0854ce8
--- /dev/null
+++ b/dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0012-use-fingerprints-as-inputs-during-tests-to-demonstra.patch
@@ -0,0 +1,265 @@
+From: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
+Date: Tue, 11 Oct 2016 20:05:16 -0400
+Subject: use fingerprints as inputs during tests to demonstrate explicit usage
+
+---
+ README | 6 +++---
+ lib/GnuPG/Interface.pm | 6 +++---
+ lib/GnuPG/Options.pm | 2 +-
+ t/MyTestSpecific.pm | 2 +-
+ t/encrypt.t | 6 +++---
+ t/export_keys.t | 4 ++--
+ t/get_public_keys.t | 2 +-
+ t/get_secret_keys.t | 2 +-
+ t/list_public_keys.t | 4 ++--
+ t/list_secret_keys.t | 4 ++--
+ t/list_sigs.t | 4 ++--
+ t/sign_and_encrypt.t | 2 +-
+ 12 files changed, 22 insertions(+), 22 deletions(-)
+
+diff --git a/README b/README
+index aa7c984..ed94ede 100644
+--- a/README
++++ b/README
+@@ -228,7 +228,7 @@ EXAMPLES
+
+ $gnupg->options->hash_init( armor => 1,
+ recipients => [ 'ftobin@uiuc.edu',
+- '0xABCD1234' ],
++ '0xABCD1234ABCD1234ABCD1234ABCD1234ABCD1234' ],
+ meta_interactive => 0 ,
+ );
+
+@@ -347,7 +347,7 @@ EXAMPLES
+ # and read from our input, because no input is needed!
+ my $handles = GnuPG::Handles->new();
+
+- my @ids = ( 'ftobin', '0xABCD1234' );
++ my @ids = ( 'ftobin', '0xABCD1234ABCD1234ABCD1234ABCD1234ABCD1234' );
+
+ # this time we need to specify something for
+ # command_args because --list-public-keys takes
+@@ -358,7 +358,7 @@ EXAMPLES
+ waitpid $pid, 0;
+
+ Creating GnuPG::PublicKey Objects
+- my @ids = [ 'ftobin', '0xABCD1234' ];
++ my @ids = [ 'ftobin', '0xABCD1234ABCD1234ABCD1234ABCD1234ABCD1234' ];
+
+ my @keys = $gnupg->get_public_keys( @ids );
+
+diff --git a/lib/GnuPG/Interface.pm b/lib/GnuPG/Interface.pm
+index cf7138f..6eaef7d 100644
+--- a/lib/GnuPG/Interface.pm
++++ b/lib/GnuPG/Interface.pm
+@@ -1130,7 +1130,7 @@ The following setup can be done before any of the following examples:
+
+ $gnupg->options->hash_init( armor => 1,
+ recipients => [ 'ftobin@uiuc.edu',
+- '0xABCD1234' ],
++ '0xABCD1234ABCD1234ABCD1234ABCD1234ABCD1234' ],
+ meta_interactive => 0 ,
+ );
+
+@@ -1253,7 +1253,7 @@ The following setup can be done before any of the following examples:
+ # and read from our input, because no input is needed!
+ my $handles = GnuPG::Handles->new();
+
+- my @ids = ( 'ftobin', '0xABCD1234' );
++ my @ids = ( 'ftobin', '0xABCD1234ABCD1234ABCD1234ABCD1234ABCD1234' );
+
+ # this time we need to specify something for
+ # command_args because --list-public-keys takes
+@@ -1265,7 +1265,7 @@ The following setup can be done before any of the following examples:
+
+ =head2 Creating GnuPG::PublicKey Objects
+
+- my @ids = [ 'ftobin', '0xABCD1234' ];
++ my @ids = [ 'ftobin', '0xABCD1234ABCD1234ABCD1234ABCD1234ABCD1234' ];
+
+ my @keys = $gnupg->get_public_keys( @ids );
+
+diff --git a/lib/GnuPG/Options.pm b/lib/GnuPG/Options.pm
+index 86261a0..7788662 100644
+--- a/lib/GnuPG/Options.pm
++++ b/lib/GnuPG/Options.pm
+@@ -198,7 +198,7 @@ GnuPG::Options - GnuPG options embodiment
+
+ # assuming $gnupg is a GnuPG::Interface object
+ $gnupg->options->armor( 1 );
+- $gnupg->options->push_recipients( 'ftobin', '0xABCD1234' );
++ $gnupg->options->push_recipients( 'ftobin', '0xABCD1234ABCD1234ABCD1234ABCD1234ABCD1234' );
+
+ =head1 DESCRIPTION
+
+diff --git a/t/MyTestSpecific.pm b/t/MyTestSpecific.pm
+index a309698..c8764cc 100644
+--- a/t/MyTestSpecific.pm
++++ b/t/MyTestSpecific.pm
+@@ -46,7 +46,7 @@ $gpg_is_modern = ($version[0] > 2 || ($version[0] == 2 && $version[1] >= 1));
+ $gnupg->options->hash_init( homedir => 'test/gnupghome',
+ armor => 1,
+ meta_interactive => 0,
+- meta_signing_key_id => '0xF950DA9C',
++ meta_signing_key_id => '0x93AFC4B1B0288A104996B44253AE596EF950DA9C',
+ always_trust => 1,
+ );
+
+diff --git a/t/encrypt.t b/t/encrypt.t
+index 3183ac4..e6bdc08 100644
+--- a/t/encrypt.t
++++ b/t/encrypt.t
+@@ -27,7 +27,7 @@ TEST
+
+ $gnupg->options->clear_recipients();
+ $gnupg->options->clear_meta_recipients_keys();
+- $gnupg->options->push_recipients( '0x2E854A6B' );
++ $gnupg->options->push_recipients( '0x7466B7E98C4CCB64C2CE738BADB99D9C2E854A6B' );
+
+ my $pid = $gnupg->encrypt( handles => $handles );
+
+@@ -43,7 +43,7 @@ TEST
+ {
+ reset_handles();
+
+- my @keys = $gnupg->get_public_keys( '0xF950DA9C' );
++ my @keys = $gnupg->get_public_keys( '0x93AFC4B1B0288A104996B44253AE596EF950DA9C' );
+ $gnupg->options->clear_recipients();
+ $gnupg->options->clear_meta_recipients_keys();
+ $gnupg->options->push_meta_recipients_keys( @keys );
+@@ -64,7 +64,7 @@ TEST
+
+ $gnupg->options->clear_recipients();
+ $gnupg->options->clear_meta_recipients_keys();
+- $gnupg->options->push_recipients( '0x2E854A6B' );
++ $gnupg->options->push_recipients( '0x7466B7E98C4CCB64C2CE738BADB99D9C2E854A6B' );
+
+ $handles->stdin( $texts{plain}->fh() );
+ $handles->options( 'stdin' )->{direct} = 1;
+diff --git a/t/export_keys.t b/t/export_keys.t
+index cf5c82b..5add064 100644
+--- a/t/export_keys.t
++++ b/t/export_keys.t
+@@ -15,7 +15,7 @@ TEST
+ reset_handles();
+
+ my $pid = $gnupg->export_keys( handles => $handles,
+- command_args => '0xF950DA9C' );
++ command_args => '0x93AFC4B1B0288A104996B44253AE596EF950DA9C' );
+ close $stdin;
+ waitpid $pid, 0;
+
+@@ -31,7 +31,7 @@ TEST
+ $handles->options( 'stdout' )->{direct} = 1;
+
+ my $pid = $gnupg->export_keys( handles => $handles,
+- command_args => '0xF950DA9C' );
++ command_args => '0x93AFC4B1B0288A104996B44253AE596EF950DA9C' );
+ waitpid $pid, 0;
+ return $CHILD_ERROR == 0;
+ };
+diff --git a/t/get_public_keys.t b/t/get_public_keys.t
+index 9e96f7d..7893625 100644
+--- a/t/get_public_keys.t
++++ b/t/get_public_keys.t
+@@ -19,7 +19,7 @@ TEST
+ {
+ reset_handles();
+
+- my @returned_keys = $gnupg->get_public_keys_with_sigs( '0xF950DA9C' );
++ my @returned_keys = $gnupg->get_public_keys_with_sigs( '0x93AFC4B1B0288A104996B44253AE596EF950DA9C' );
+
+ return 0 unless @returned_keys == 1;
+
+diff --git a/t/get_secret_keys.t b/t/get_secret_keys.t
+index c798cce..a7f1348 100644
+--- a/t/get_secret_keys.t
++++ b/t/get_secret_keys.t
+@@ -18,7 +18,7 @@ TEST
+ {
+ reset_handles();
+
+- my @returned_keys = $gnupg->get_secret_keys( '0xF950DA9C' );
++ my @returned_keys = $gnupg->get_secret_keys( '0x93AFC4B1B0288A104996B44253AE596EF950DA9C' );
+
+ return 0 unless @returned_keys == 1;
+
+diff --git a/t/list_public_keys.t b/t/list_public_keys.t
+index a36a78b..622b092 100644
+--- a/t/list_public_keys.t
++++ b/t/list_public_keys.t
+@@ -38,7 +38,7 @@ TEST
+ reset_handles();
+
+ my $pid = $gnupg->list_public_keys( handles => $handles,
+- command_args => '0xF950DA9C'
++ command_args => '0x93AFC4B1B0288A104996B44253AE596EF950DA9C'
+ );
+ close $stdin;
+
+@@ -64,7 +64,7 @@ TEST
+ $handles->options( 'stdout' )->{direct} = 1;
+
+ my $pid = $gnupg->list_public_keys( handles => $handles,
+- command_args => '0xF950DA9C',
++ command_args => '0x93AFC4B1B0288A104996B44253AE596EF950DA9C',
+ );
+
+ waitpid $pid, 0;
+diff --git a/t/list_secret_keys.t b/t/list_secret_keys.t
+index 51e3651..7040c38 100644
+--- a/t/list_secret_keys.t
++++ b/t/list_secret_keys.t
+@@ -55,7 +55,7 @@ TEST
+ reset_handles();
+
+ my $pid = $gnupg->list_secret_keys( handles => $handles,
+- command_args => '0xF950DA9C' );
++ command_args => '0x93AFC4B1B0288A104996B44253AE596EF950DA9C' );
+ close $stdin;
+
+ $outfile = 'test/secret-keys/2.out';
+@@ -80,7 +80,7 @@ TEST
+ $handles->options( 'stdout' )->{direct} = 1;
+
+ my $pid = $gnupg->list_secret_keys( handles => $handles,
+- command_args => '0xF950DA9C' );
++ command_args => '0x93AFC4B1B0288A104996B44253AE596EF950DA9C' );
+
+ waitpid $pid, 0;
+
+diff --git a/t/list_sigs.t b/t/list_sigs.t
+index 16cfa6a..1301fb2 100644
+--- a/t/list_sigs.t
++++ b/t/list_sigs.t
+@@ -36,7 +36,7 @@ TEST
+ reset_handles();
+
+ my $pid = $gnupg->list_sigs( handles => $handles,
+- command_args => '0xF950DA9C',
++ command_args => '0x93AFC4B1B0288A104996B44253AE596EF950DA9C',
+ );
+ close $stdin;
+
+@@ -60,7 +60,7 @@ TEST
+ $handles->options( 'stdout' )->{direct} = 1;
+
+ my $pid = $gnupg->list_sigs( handles => $handles,
+- command_args => '0xF950DA9C',
++ command_args => '0x93AFC4B1B0288A104996B44253AE596EF950DA9C',
+ );
+
+ waitpid $pid, 0;
+diff --git a/t/sign_and_encrypt.t b/t/sign_and_encrypt.t
+index 5dc1c08..df0fc75 100644
+--- a/t/sign_and_encrypt.t
++++ b/t/sign_and_encrypt.t
+@@ -14,7 +14,7 @@ TEST
+ {
+ reset_handles();
+
+- $gnupg->options->push_recipients( '0x2E854A6B' );
++ $gnupg->options->push_recipients( '0x7466B7E98C4CCB64C2CE738BADB99D9C2E854A6B' );
+ my $pid = $gnupg->sign_and_encrypt( handles => $handles );
+
+ print $stdin @{ $texts{plain}->data() };
diff --git a/dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0013-move-key-files-to-generic-names.patch b/dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0013-move-key-files-to-generic-names.patch
new file mode 100644
index 000000000000..489e685b7b8c
--- /dev/null
+++ b/dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0013-move-key-files-to-generic-names.patch
@@ -0,0 +1,33 @@
+From: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
+Date: Tue, 11 Oct 2016 20:17:49 -0400
+Subject: move key files to generic names
+
+---
+ t/000_setup.t | 2 +-
+ test/{pubring.gpg => public_keys.pgp} | Bin
+ test/{secring.gpg => secret_keys.pgp} | Bin
+ 3 files changed, 1 insertion(+), 1 deletion(-)
+ rename test/{pubring.gpg => public_keys.pgp} (100%)
+ rename test/{secring.gpg => secret_keys.pgp} (100%)
+
+diff --git a/t/000_setup.t b/t/000_setup.t
+index 7f7f7b0..a8e3042 100644
+--- a/t/000_setup.t
++++ b/t/000_setup.t
+@@ -19,7 +19,7 @@ TEST
+ copy('test/gpg.conf', 'test/gnupghome/gpg.conf');
+ reset_handles();
+
+- my $pid = $gnupg->import_keys(command_args => [ 'test/pubring.gpg', 'test/secring.gpg' ],
++ my $pid = $gnupg->import_keys(command_args => [ 'test/public_keys.pgp', 'test/secret_keys.pgp' ],
+ options => [ 'batch'],
+ handles => $handles);
+ waitpid $pid, 0;
+diff --git a/test/pubring.gpg b/test/public_keys.pgp
+similarity index 100%
+rename from test/pubring.gpg
+rename to test/public_keys.pgp
+diff --git a/test/secring.gpg b/test/secret_keys.pgp
+similarity index 100%
+rename from test/secring.gpg
+rename to test/secret_keys.pgp
diff --git a/dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0014-fix-spelling-s-convience-convenience.patch b/dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0014-fix-spelling-s-convience-convenience.patch
new file mode 100644
index 000000000000..ee809b61d754
--- /dev/null
+++ b/dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0014-fix-spelling-s-convience-convenience.patch
@@ -0,0 +1,53 @@
+From: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
+Date: Tue, 11 Oct 2016 20:25:48 -0400
+Subject: fix spelling: s/convience/convenience/
+
+---
+ README | 4 ++--
+ lib/GnuPG/Interface.pm | 4 ++--
+ 2 files changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/README b/README
+index ed94ede..a05ef9b 100644
+--- a/README
++++ b/README
+@@ -143,7 +143,7 @@ OBJECT METHODS
+ does not come into play. If the passphrase data member handle of the
+ handles object is not defined, but the the passphrase data member
+ handle of GnuPG::Interface object is, GnuPG::Interface will handle
+- passing this information into GnuPG for the user as a convience.
++ passing this information into GnuPG for the user as a convenience.
+ Note that this will result in GnuPG::Interface storing the
+ passphrase in memory, instead of having it simply 'pass-through' to
+ GnuPG via a handle.
+@@ -271,7 +271,7 @@ EXAMPLES
+ );
+
+ # indicate our pasphrase through the
+- # convience method
++ # convenience method
+ $gnupg->passphrase( $passphrase );
+
+ # this sets up the communication
+diff --git a/lib/GnuPG/Interface.pm b/lib/GnuPG/Interface.pm
+index 6eaef7d..29205f0 100644
+--- a/lib/GnuPG/Interface.pm
++++ b/lib/GnuPG/Interface.pm
+@@ -1008,7 +1008,7 @@ and so this information is not generated and does not come into play.
+ If the B<passphrase> data member handle of the B<handles> object
+ is not defined, but the the B<passphrase> data member handle of GnuPG::Interface
+ object is, GnuPG::Interface will handle passing this information into GnuPG
+-for the user as a convience. Note that this will result in
++for the user as a convenience. Note that this will result in
+ GnuPG::Interface storing the passphrase in memory, instead of having
+ it simply 'pass-through' to GnuPG via a handle.
+
+@@ -1175,7 +1175,7 @@ The following setup can be done before any of the following examples:
+ );
+
+ # indicate our pasphrase through the
+- # convience method
++ # convenience method
+ $gnupg->passphrase( $passphrase );
+
+ # this sets up the communication
diff --git a/dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0015-added-new-secret-key-with-different-passphrase.patch b/dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0015-added-new-secret-key-with-different-passphrase.patch
new file mode 100644
index 000000000000..fcf20c1b9d1c
--- /dev/null
+++ b/dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0015-added-new-secret-key-with-different-passphrase.patch
@@ -0,0 +1,117 @@
+From: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
+Date: Tue, 11 Oct 2016 20:59:43 -0400
+Subject: added new secret key with different passphrase
+
+Adding a new secret key with a different passphrase should allow us to
+differentiate between passing the passphrase explicitly and relying on
+the agent + pinentry.
+---
+ t/000_setup.t | 2 +-
+ test/new_secret.pgp | 58 ++++++++++++++++++++++++++++++++++++++++++
+ test/secret-keys/1.0.test | 4 +++
+ test/secret-keys/1.modern.test | 5 ++++
+ 4 files changed, 68 insertions(+), 1 deletion(-)
+ create mode 100644 test/new_secret.pgp
+
+diff --git a/t/000_setup.t b/t/000_setup.t
+index a8e3042..b183241 100644
+--- a/t/000_setup.t
++++ b/t/000_setup.t
+@@ -19,7 +19,7 @@ TEST
+ copy('test/gpg.conf', 'test/gnupghome/gpg.conf');
+ reset_handles();
+
+- my $pid = $gnupg->import_keys(command_args => [ 'test/public_keys.pgp', 'test/secret_keys.pgp' ],
++ my $pid = $gnupg->import_keys(command_args => [ 'test/public_keys.pgp', 'test/secret_keys.pgp', 'test/new_secret.pgp' ],
+ options => [ 'batch'],
+ handles => $handles);
+ waitpid $pid, 0;
+diff --git a/test/new_secret.pgp b/test/new_secret.pgp
+new file mode 100644
+index 0000000..5feb72c
+--- /dev/null
++++ b/test/new_secret.pgp
+@@ -0,0 +1,58 @@
++-----BEGIN PGP PRIVATE KEY BLOCK-----
++
++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
++=ftgB
++-----END PGP PRIVATE KEY BLOCK-----
+diff --git a/test/secret-keys/1.0.test b/test/secret-keys/1.0.test
+index 129d472..f8239a9 100644
+--- a/test/secret-keys/1.0.test
++++ b/test/secret-keys/1.0.test
+@@ -5,3 +5,7 @@ uid GnuPG test key (for testing purposes only)
+ uid Foo Bar (1)
+ ssb 768g/2E854A6B 2000-02-06
+
++sec 2048R/B6747DDC 2016-10-12
++uid GnuPG::Interface Test key <test@example.org>
++ssb 2048R/AE441D0F 2016-10-12
++
+diff --git a/test/secret-keys/1.modern.test b/test/secret-keys/1.modern.test
+index 3e46407..42b27a1 100644
+--- a/test/secret-keys/1.modern.test
++++ b/test/secret-keys/1.modern.test
+@@ -6,3 +6,8 @@ uid [ unknown] GnuPG test key (for testing purposes only)
+ uid [ unknown] Foo Bar (1)
+ ssb elg768 2000-02-06 [E]
+
++sec rsa2048 2016-10-12 [SC]
++ 278F850AA702911F1318F0A61B913CE9B6747DDC
++uid [ unknown] GnuPG::Interface Test key <test@example.org>
++ssb rsa2048 2016-10-12 [E]
++
diff --git a/dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0016-Test-use-of-gpg-without-explicit-passphrase-agent-pi.patch b/dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0016-Test-use-of-gpg-without-explicit-passphrase-agent-pi.patch
new file mode 100644
index 000000000000..21e6294efaed
--- /dev/null
+++ b/dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0016-Test-use-of-gpg-without-explicit-passphrase-agent-pi.patch
@@ -0,0 +1,302 @@
+From: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
+Date: Tue, 11 Oct 2016 21:29:22 -0400
+Subject: Test use of gpg without explicit passphrase (agent+pinentry)
+
+The modern GnuPG suite encourages the use of gpg-agent to control
+access to secret key material. In this use case, we avoid setting an
+explicit passphrase in code, and rely on either a correctly-configured
+and primed gpg-agent or a dedicated pinentry program to supply the
+passphrase.
+
+This additional test verifies that the passphrase can be handled by
+the agent. Note that the passphrase for this additional test key is
+*not* the default passphrase, so this test should fail in the event
+that gpg can't use the agent and the pinentry for this task.
+
+Unfortunately, this all assumes that we're using GnuPG "Modern". I've
+noted concerns about writing forward- and backward-compatible bindings
+for GnuPG here:
+https://lists.gnupg.org/pipermail/gnupg-devel/2016-October/031800.html
+---
+ README | 41 +++++++++++++++++++++++++++--------------
+ lib/GnuPG/Interface.pm | 26 +++++++++++++++++++++++++-
+ t/MyTestSpecific.pm | 10 ++++++++--
+ t/decrypt.t | 27 +++++++++++++++++++++++++++
+ test/encrypted.2.gpg | 12 ++++++++++++
+ test/fake-pinentry.pl | 2 +-
+ test/plain.2.txt | 1 +
+ 7 files changed, 101 insertions(+), 18 deletions(-)
+ create mode 100644 test/encrypted.2.gpg
+ create mode 100644 test/plain.2.txt
+
+diff --git a/README b/README
+index a05ef9b..be06ef3 100644
+--- a/README
++++ b/README
+@@ -5,7 +5,7 @@ SYNOPSIS
+ # A simple example
+ use IO::Handle;
+ use GnuPG::Interface;
+-
++
+ # setting up the situation
+ my $gnupg = GnuPG::Interface->new();
+ $gnupg->options->hash_init( armor => 1,
+@@ -24,7 +24,7 @@ SYNOPSIS
+ # Now we'll go about encrypting with the options already set
+ my @plaintext = ( 'foobar' );
+ my $pid = $gnupg->encrypt( handles => $handles );
+-
++
+ # Now we write to the input of GnuPG
+ print $input @plaintext;
+ close $input;
+@@ -140,13 +140,26 @@ OBJECT METHODS
+ standard error, standard output, or standard error. If the status or
+ logger handle is not defined, this channel of communication is never
+ established with GnuPG, and so this information is not generated and
+- does not come into play. If the passphrase data member handle of the
+- handles object is not defined, but the the passphrase data member
+- handle of GnuPG::Interface object is, GnuPG::Interface will handle
+- passing this information into GnuPG for the user as a convenience.
+- Note that this will result in GnuPG::Interface storing the
+- passphrase in memory, instead of having it simply 'pass-through' to
+- GnuPG via a handle.
++ does not come into play.
++
++ If the passphrase data member handle of the handles object is not
++ defined, but the the passphrase data member handle of
++ GnuPG::Interface object is, GnuPG::Interface will handle passing
++ this information into GnuPG for the user as a convenience. Note that
++ this will result in GnuPG::Interface storing the passphrase in
++ memory, instead of having it simply 'pass-through' to GnuPG via a
++ handle.
++
++ If neither the passphrase data member of the GnuPG::Interface nor
++ the passphrase data member of the handles object is defined, then
++ GnuPG::Interface assumes that access and control over the secret key
++ will be handled by the running gpg-agent process. This represents
++ the simplest mode of operation with the GnuPG "modern" suite
++ (version 2.1 and later). It is also the preferred mode for tools
++ intended to be user-facing, since the user will be prompted directly
++ by gpg-agent for use of the secret key material. Note that for
++ programmatic use, this mode requires the gpg-agent and pinentry to
++ already be correctly configured.
+
+ Other Methods
+ get_public_keys( @search_strings )
+@@ -241,7 +254,7 @@ EXAMPLES
+
+ my $handles = GnuPG::Handles->new( stdin => $input,
+ stdout => $output );
+-
++
+ # this sets up the communication
+ # Note that the recipients were specified earlier
+ # in the 'options' data member of the $gnupg object.
+@@ -315,7 +328,7 @@ EXAMPLES
+ # a file written to disk
+ # Make sure you "use IO::File" if you use this module!
+ my $cipher_file = IO::File->new( 'encrypted.gpg' );
+-
++
+ # this sets up the communication
+ my $pid = $gnupg->decrypt( handles => $handles );
+
+@@ -346,7 +359,7 @@ EXAMPLES
+ # This time we'll just let GnuPG print to our own output
+ # and read from our input, because no input is needed!
+ my $handles = GnuPG::Handles->new();
+-
++
+ my @ids = ( 'ftobin', '0xABCD1234ABCD1234ABCD1234ABCD1234ABCD1234' );
+
+ # this time we need to specify something for
+@@ -354,7 +367,7 @@ EXAMPLES
+ # search ids as arguments
+ my $pid = $gnupg->list_public_keys( handles => $handles,
+ command_args => [ @ids ] );
+-
++
+ waitpid $pid, 0;
+
+ Creating GnuPG::PublicKey Objects
+@@ -372,7 +385,7 @@ EXAMPLES
+ command_args => [ qw( test/key.1.asc ) ],
+ handles => $handles,
+ );
+-
++
+ my @out = <$handles->stdout()>;
+ waitpid $pid, 0;
+
+diff --git a/lib/GnuPG/Interface.pm b/lib/GnuPG/Interface.pm
+index 29205f0..5d8b0ec 100644
+--- a/lib/GnuPG/Interface.pm
++++ b/lib/GnuPG/Interface.pm
+@@ -106,6 +106,14 @@ sub fork_attach_exec( $% ) {
+ my ( $self, %args ) = @_;
+
+ my $handles = $args{handles} or croak 'no GnuPG::Handles passed';
++ my $use_loopback_pinentry = 0;
++
++ # WARNING: this assumes that we're using the "modern" GnuPG suite
++ # -- version 2.1.x or later. It's not clear to me how we can
++ # safely and efficiently avoid this assumption (see
++ # https://lists.gnupg.org/pipermail/gnupg-devel/2016-October/031800.html)
++ $use_loopback_pinentry = 1
++ if ($handles->passphrase());
+
+ # deprecation support
+ $args{commands} ||= $args{gnupg_commands};
+@@ -293,8 +301,12 @@ sub fork_attach_exec( $% ) {
+ $self->options->$option($fileno);
+ }
+
++ my @args = $self->options->get_args();
++ push @args, '--pinentry-mode', 'loopback'
++ if $use_loopback_pinentry;
++
+ my @command = (
+- $self->call(), $self->options->get_args(),
++ $self->call(), @args,
+ @commands, @command_args
+ );
+
+@@ -1005,6 +1017,7 @@ and standard error will be tied to the running program's standard error,
+ standard output, or standard error. If the B<status> or B<logger> handle
+ is not defined, this channel of communication is never established with GnuPG,
+ and so this information is not generated and does not come into play.
++
+ If the B<passphrase> data member handle of the B<handles> object
+ is not defined, but the the B<passphrase> data member handle of GnuPG::Interface
+ object is, GnuPG::Interface will handle passing this information into GnuPG
+@@ -1012,6 +1025,17 @@ for the user as a convenience. Note that this will result in
+ GnuPG::Interface storing the passphrase in memory, instead of having
+ it simply 'pass-through' to GnuPG via a handle.
+
++If neither the B<passphrase> data member of the GnuPG::Interface nor
++the B<passphrase> data member of the B<handles> object is defined,
++then GnuPG::Interface assumes that access and control over the secret
++key will be handled by the running gpg-agent process. This represents
++the simplest mode of operation with the GnuPG "modern" suite (version
++2.1 and later). It is also the preferred mode for tools intended to
++be user-facing, since the user will be prompted directly by gpg-agent
++for use of the secret key material. Note that for programmatic use,
++this mode requires the gpg-agent and pinentry to already be correctly
++configured.
++
+ =back
+
+ =head2 Other Methods
+diff --git a/t/MyTestSpecific.pm b/t/MyTestSpecific.pm
+index c8764cc..e513c25 100644
+--- a/t/MyTestSpecific.pm
++++ b/t/MyTestSpecific.pm
+@@ -55,9 +55,15 @@ struct( Text => { fn => "\$", fh => "\$", data => "\$" } );
+ $texts{plain} = Text->new();
+ $texts{plain}->fn( 'test/plain.1.txt' );
+
++$texts{alt_plain} = Text->new();
++$texts{alt_plain}->fn( 'test/plain.2.txt' );
++
+ $texts{encrypted} = Text->new();
+ $texts{encrypted}->fn( 'test/encrypted.1.gpg' );
+
++$texts{alt_encrypted} = Text->new();
++$texts{alt_encrypted}->fn( 'test/encrypted.2.gpg' );
++
+ $texts{signed} = Text->new();
+ $texts{signed}->fn( 'test/signed.1.asc' );
+
+@@ -68,7 +74,7 @@ $texts{temp} = Text->new();
+ $texts{temp}->fn( 'test/temp' );
+
+
+-foreach my $name ( qw( plain encrypted signed key ) )
++foreach my $name ( qw( plain alt_plain encrypted alt_encrypted signed key ) )
+ {
+ my $entry = $texts{$name};
+ my $filename = $entry->fn();
+@@ -90,7 +96,7 @@ sub reset_handles
+ stderr => $stderr
+ );
+
+- foreach my $name ( qw( plain encrypted signed key ) )
++ foreach my $name ( qw( plain alt_plain encrypted alt_encrypted signed key ) )
+ {
+ my $entry = $texts{$name};
+ my $filename = $entry->fn();
+diff --git a/t/decrypt.t b/t/decrypt.t
+index b2639ed..ee41448 100644
+--- a/t/decrypt.t
++++ b/t/decrypt.t
+@@ -58,3 +58,30 @@ TEST
+ {
+ return compare( $texts{plain}->fn(), $texts{temp}->fn() ) == 0;
+ };
++
++
++# test without default_passphrase (that is, by using the agent)
++TEST
++{
++ reset_handles();
++
++ $handles->stdin( $texts{alt_encrypted}->fh() );
++ $handles->options( 'stdin' )->{direct} = 1;
++
++ $handles->stdout( $texts{temp}->fh() );
++ $handles->options( 'stdout' )->{direct} = 1;
++
++ $gnupg->clear_passphrase();
++
++ my $pid = $gnupg->decrypt( handles => $handles );
++
++ waitpid $pid, 0;
++
++ return $CHILD_ERROR == 0;
++};
++
++
++TEST
++{
++ return compare( $texts{alt_plain}->fn(), $texts{temp}->fn() ) == 0;
++};
+diff --git a/test/encrypted.2.gpg b/test/encrypted.2.gpg
+new file mode 100644
+index 0000000..105cbb3
+--- /dev/null
++++ b/test/encrypted.2.gpg
+@@ -0,0 +1,12 @@
++-----BEGIN PGP MESSAGE-----
++
++hQEMAw3NS2KuRB0PAQgAuCMQO6blPRIJZib+kDa51gac+BYPl8caXYTLqIHtiz2/
++YRVqePJON4lNAqT6qUksIzQHtejFO6tb1SLqgX9Ti+fKAMLrQw9VGOYaJFoRrTJs
+++X33S4GHVVikRTu0dydAsekbfPSc2nRmTFUlSEV3psgAmg9xy8KA6cZroK9Xfcuh
++xW7KLE0hLP+2NZ7zNmJMdu6LDGzvlQsnm1UeElXK8XdMGf8kA3R+GgeeOnR/oEQc
++Uep77k/fLc+UV4fp9Dk1OBeg3Ko/irSaefk4mU7F4HmS8jIERHRvXBTiur1Zx8Nx
++9U3fcQuc+P9+JC89iS4PJPF1Hr0MlezAghZYJrhOrtJIAe5Uaft5KMGRfy0VQnAs
++MHqGnGtzzVWK6GK83ibgG4tTfPEHHIgNFsJf3rM4cWklUmCS9TeeDJJZfhnRA6+/
++X82e6OI7QNbO
++=DlGE
++-----END PGP MESSAGE-----
+diff --git a/test/fake-pinentry.pl b/test/fake-pinentry.pl
+index 12d3611..40b8b08 100755
+--- a/test/fake-pinentry.pl
++++ b/test/fake-pinentry.pl
+@@ -21,7 +21,7 @@ while (<STDIN>) {
+ chomp;
+ next if (/^$/);
+ next if (/^#/);
+- print ("D test\n") if (/^getpin/i);
++ print ("D supercalifragilisticexpialidocious\n") if (/^getpin/i);
+ print "OK\n";
+ exit if (/^bye/i);
+ }
+diff --git a/test/plain.2.txt b/test/plain.2.txt
+new file mode 100644
+index 0000000..da5a1d5
+--- /dev/null
++++ b/test/plain.2.txt
+@@ -0,0 +1 @@
++test message
diff --git a/dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0017-Kill-any-GnuPG-agent-before-and-after-the-test-suite.patch b/dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0017-Kill-any-GnuPG-agent-before-and-after-the-test-suite.patch
new file mode 100644
index 000000000000..2f20f1455397
--- /dev/null
+++ b/dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0017-Kill-any-GnuPG-agent-before-and-after-the-test-suite.patch
@@ -0,0 +1,42 @@
+From: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
+Date: Thu, 25 May 2017 16:07:45 -0400
+Subject: Kill any GnuPG agent before and after the test suite.
+
+This helps to ensure that the test suite daemon is started fresh at
+every test suite run. And it also avoids leaving a daemon running
+after the test suite, assuming the test suite manages to reach the
+end.
+
+This is considered a reasonable practice by upstream.
+---
+ t/000_setup.t | 3 +++
+ t/zzz_cleanup.t | 2 ++
+ 2 files changed, 5 insertions(+)
+
+diff --git a/t/000_setup.t b/t/000_setup.t
+index b183241..4dc4329 100644
+--- a/t/000_setup.t
++++ b/t/000_setup.t
+@@ -17,6 +17,9 @@ TEST
+ $agentconf->write("pinentry-program " . getcwd() . "/test/fake-pinentry.pl\n");
+ $agentconf->close();
+ copy('test/gpg.conf', 'test/gnupghome/gpg.conf');
++ # reset the state of any long-lived gpg-agent, ignoring errors:
++ system('gpgconf', '--homedir=test/gnupghome', '--quiet', '--kill', 'gpg-agent');
++
+ reset_handles();
+
+ my $pid = $gnupg->import_keys(command_args => [ 'test/public_keys.pgp', 'test/secret_keys.pgp', 'test/new_secret.pgp' ],
+diff --git a/t/zzz_cleanup.t b/t/zzz_cleanup.t
+index 5c03a72..eea3a48 100644
+--- a/t/zzz_cleanup.t
++++ b/t/zzz_cleanup.t
+@@ -12,6 +12,8 @@ use File::Path qw (remove_tree);
+ TEST
+ {
+ my $err = [];
++ # kill off any long-lived gpg-agent, ignoring errors:
++ system('gpgconf', '--homedir=test/gnupghome', '--quiet', '--kill', 'gpg-agent');
+ remove_tree('test/gnupghome', {error => \$err});
+ return ! @$err;
+ };
diff --git a/dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0018-Use-a-short-temporary-homedir-during-the-test-suite.patch b/dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0018-Use-a-short-temporary-homedir-during-the-test-suite.patch
new file mode 100644
index 000000000000..457a5e74d532
--- /dev/null
+++ b/dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0018-Use-a-short-temporary-homedir-during-the-test-suite.patch
@@ -0,0 +1,110 @@
+From: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
+Date: Fri, 26 May 2017 09:51:40 -0400
+Subject: Use a short temporary homedir during the test suite
+
+This avoids problems with the length of the path to the homedir as
+compared to the size limits of sockaddr_un.sun_path, particularly on
+systems where /run/user/$(id -u) is not present or available (such as
+many minimalist build environments).
+---
+ t/000_setup.t | 9 +++++----
+ t/MyTestSpecific.pm | 18 +++++++++++++++++-
+ t/list_secret_keys.t | 3 ++-
+ t/zzz_cleanup.t | 6 ++++--
+ 4 files changed, 28 insertions(+), 8 deletions(-)
+
+diff --git a/t/000_setup.t b/t/000_setup.t
+index 4dc4329..82d7005 100644
+--- a/t/000_setup.t
++++ b/t/000_setup.t
+@@ -12,13 +12,14 @@ use File::Copy;
+
+ TEST
+ {
+- make_path('test/gnupghome', { mode => 0700 });
+- my $agentconf = IO::File->new( "> test/gnupghome/gpg-agent.conf" );
++ my $homedir = $gnupg->options->homedir();
++ make_path($homedir, { mode => 0700 });
++ my $agentconf = IO::File->new( "> " . $homedir . "/gpg-agent.conf" );
+ $agentconf->write("pinentry-program " . getcwd() . "/test/fake-pinentry.pl\n");
+ $agentconf->close();
+- copy('test/gpg.conf', 'test/gnupghome/gpg.conf');
++ copy('test/gpg.conf', $homedir . '/gpg.conf');
+ # reset the state of any long-lived gpg-agent, ignoring errors:
+- system('gpgconf', '--homedir=test/gnupghome', '--quiet', '--kill', 'gpg-agent');
++ system('gpgconf', '--homedir', $homedir, '--quiet', '--kill', 'gpg-agent');
+
+ reset_handles();
+
+diff --git a/t/MyTestSpecific.pm b/t/MyTestSpecific.pm
+index e513c25..809d55c 100644
+--- a/t/MyTestSpecific.pm
++++ b/t/MyTestSpecific.pm
+@@ -22,6 +22,7 @@ use IO::Seekable;
+ use File::Compare;
+ use Exporter;
+ use Class::Struct;
++use File::Temp qw (tempdir);
+
+ use GnuPG::Interface;
+ use GnuPG::Handles;
+@@ -40,10 +41,25 @@ use vars qw( @ISA @EXPORT
+
+ $gnupg = GnuPG::Interface->new( passphrase => 'test' );
+
++
++my $homedir;
++if (-f "test/gnupghome") {
++ my $record = IO::File->new( "< test/gnupghome" );
++ $homedir = <$record>;
++ $record->close();
++} else {
++ $homedir = tempdir( DIR => '/tmp');
++ my $record = IO::File->new( "> test/gnupghome" );
++ $record->write($homedir);
++ $record->close();
++}
++
+ my @version = split('\.', $gnupg->version());
+ $gpg_is_modern = ($version[0] > 2 || ($version[0] == 2 && $version[1] >= 1));
+
+-$gnupg->options->hash_init( homedir => 'test/gnupghome',
++
++
++$gnupg->options->hash_init( homedir => $homedir,
+ armor => 1,
+ meta_interactive => 0,
+ meta_signing_key_id => '0x93AFC4B1B0288A104996B44253AE596EF950DA9C',
+diff --git a/t/list_secret_keys.t b/t/list_secret_keys.t
+index 7040c38..d1e3f30 100644
+--- a/t/list_secret_keys.t
++++ b/t/list_secret_keys.t
+@@ -23,8 +23,9 @@ TEST
+ $outfile = 'test/secret-keys/1.out';
+ my $out = IO::File->new( "> $outfile" )
+ or die "cannot open $outfile for writing: $ERRNO";
++ my $modern_pubring_line = $gnupg->options->homedir() . "/pubring.kbx\n";
+ while (<$stdout>) {
+- if ($gpg_is_modern && /^\/.*\/test\/gnupghome\/pubring.kbx$/) {
++ if ($gpg_is_modern && ($_ eq $modern_pubring_line)) {
+ $out->print("test/gnupghome/pubring.kbx\n");
+ } elsif ($gpg_is_modern && /^--*$/) {
+ $out->print("--------------------------\n");
+diff --git a/t/zzz_cleanup.t b/t/zzz_cleanup.t
+index eea3a48..c3ec16f 100644
+--- a/t/zzz_cleanup.t
++++ b/t/zzz_cleanup.t
+@@ -11,9 +11,11 @@ use File::Path qw (remove_tree);
+ # this is actually no test, just cleanup.
+ TEST
+ {
++ my $homedir = $gnupg->options->homedir();
+ my $err = [];
+ # kill off any long-lived gpg-agent, ignoring errors:
+- system('gpgconf', '--homedir=test/gnupghome', '--quiet', '--kill', 'gpg-agent');
+- remove_tree('test/gnupghome', {error => \$err});
++ system('gpgconf', '--homedir', $homedir, '--quiet', '--kill', 'gpg-agent');
++ remove_tree($homedir, {error => \$err});
++ unlink('test/gnupghome');
+ return ! @$err;
+ };
diff --git a/dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0019-Make-things-work-with-gpg1-assuming-plain-gpg-is-mod.patch b/dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0019-Make-things-work-with-gpg1-assuming-plain-gpg-is-mod.patch
new file mode 100644
index 000000000000..ae6143190de3
--- /dev/null
+++ b/dev-perl/GnuPG-Interface/files/GnuPG-Interface-0.520.0-0019-Make-things-work-with-gpg1-assuming-plain-gpg-is-mod.patch
@@ -0,0 +1,51 @@
+From: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
+Date: Fri, 26 May 2017 18:15:24 -0400
+Subject: Make things work with gpg1 (assuming plain 'gpg' is modern)
+
+ * avoid sending --pinentry-mode=loopback if gpg is invoked as gpg1
+ * fix up t/list_secret_keys to account for the varied output
+ * t/decrypt.t still fails two agent-only tests, but presumably folks
+ who use gpg1 are not expecting to use the agent.
+---
+ lib/GnuPG/Interface.pm | 5 ++++-
+ t/list_secret_keys.t | 9 +++++----
+ 2 files changed, 9 insertions(+), 5 deletions(-)
+
+diff --git a/lib/GnuPG/Interface.pm b/lib/GnuPG/Interface.pm
+index 5d8b0ec..f80ead5 100644
+--- a/lib/GnuPG/Interface.pm
++++ b/lib/GnuPG/Interface.pm
+@@ -112,8 +112,11 @@ sub fork_attach_exec( $% ) {
+ # -- version 2.1.x or later. It's not clear to me how we can
+ # safely and efficiently avoid this assumption (see
+ # https://lists.gnupg.org/pipermail/gnupg-devel/2016-October/031800.html)
++ #
++ # as a (brittle and incomplete) cleanup, we will avoid trying to
++ # send pinentry-loopback if the program is invoked as "gpg1"
+ $use_loopback_pinentry = 1
+- if ($handles->passphrase());
++ if ($handles->passphrase() && ! ($self->call =~ m/gpg1$/));
+
+ # deprecation support
+ $args{commands} ||= $args{gnupg_commands};
+diff --git a/t/list_secret_keys.t b/t/list_secret_keys.t
+index d1e3f30..8e3c911 100644
+--- a/t/list_secret_keys.t
++++ b/t/list_secret_keys.t
+@@ -23,11 +23,12 @@ TEST
+ $outfile = 'test/secret-keys/1.out';
+ my $out = IO::File->new( "> $outfile" )
+ or die "cannot open $outfile for writing: $ERRNO";
+- my $modern_pubring_line = $gnupg->options->homedir() . "/pubring.kbx\n";
++ my $seckey_file = $gpg_is_modern ? 'pubring.kbx' : 'secring.gpg';
++ my $pubring_line = $gnupg->options->homedir() . '/' . $seckey_file . "\n";
+ while (<$stdout>) {
+- if ($gpg_is_modern && ($_ eq $modern_pubring_line)) {
+- $out->print("test/gnupghome/pubring.kbx\n");
+- } elsif ($gpg_is_modern && /^--*$/) {
++ if ($_ eq $pubring_line) {
++ $out->print('test/gnupghome/'.$seckey_file."\n");
++ } elsif (/^--*$/) {
+ $out->print("--------------------------\n");
+ } else {
+ $out->print( $_ );
diff --git a/dev-perl/GnuPG-Interface/metadata.xml b/dev-perl/GnuPG-Interface/metadata.xml
new file mode 100644
index 000000000000..693870b96ce1
--- /dev/null
+++ b/dev-perl/GnuPG-Interface/metadata.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>perl@gentoo.org</email>
+ <name>Gentoo Perl Project</name>
+ </maintainer>
+ <upstream>
+ <remote-id type="cpan">GnuPG-Interface</remote-id>
+ <remote-id type="cpan-module">GnuPG::Fingerprint</remote-id>
+ <remote-id type="cpan-module">GnuPG::Handles</remote-id>
+ <remote-id type="cpan-module">GnuPG::HashInit</remote-id>
+ <remote-id type="cpan-module">GnuPG::Interface</remote-id>
+ <remote-id type="cpan-module">GnuPG::Key</remote-id>
+ <remote-id type="cpan-module">GnuPG::Options</remote-id>
+ <remote-id type="cpan-module">GnuPG::PrimaryKey</remote-id>
+ <remote-id type="cpan-module">GnuPG::PublicKey</remote-id>
+ <remote-id type="cpan-module">GnuPG::Revoker</remote-id>
+ <remote-id type="cpan-module">GnuPG::SecretKey</remote-id>
+ <remote-id type="cpan-module">GnuPG::Signature</remote-id>
+ <remote-id type="cpan-module">GnuPG::SubKey</remote-id>
+ <remote-id type="cpan-module">GnuPG::UserAttribute</remote-id>
+ <remote-id type="cpan-module">GnuPG::UserId</remote-id>
+ </upstream>
+</pkgmetadata>