[Rt-commit] rt branch, 4.4/work-with-both-gnupgs, created. rt-4.4.2-112-g350d0069b

Brian Duggan brian at bestpractical.com
Thu May 3 12:34:15 EDT 2018


The branch, 4.4/work-with-both-gnupgs has been created
        at  350d0069b465ef8351d177102992e6888cb7e760 (commit)

- Log -----------------------------------------------------------------
commit 288493ecf35f750b5f94f44dabd3381da7a4c821
Author: Brian C. Duggan <brian at bestpractical.com>
Date:   Thu Apr 19 15:27:10 2018 -0400

    Add GnuPG 2.1+ specific test homedir and supporting test files
    
    GnuPG 2.1 requires some different settings in gpg.conf to function
    properly for tests. This change adds a new homedir with keyrings in
    2.1+ format and new config files.
    
    GnuPG 2.1 emits some warnings when importing keys
    that were created by GnuPG 1.4 with preferred compression algorithms
    that are no longer supported. The warnings tell the user about those
    algorithms. These probably wouldn't cause any tests to fail. But this
    change adds new keys that were imported and then exported again by
    GnuPG 2.1. GnuPG 2.1 can import these keys without warnings.
    
    Some other files included in this commit are probably unnecessary with
    some test re-design. But they are a safe base for updating
    GnuPG-related tests to work with 2.1+.

diff --git a/t/data/gnupg2/bin/fake-pinentry.pl b/t/data/gnupg2/bin/fake-pinentry.pl
new file mode 100755
index 000000000..8a4606660
--- /dev/null
+++ b/t/data/gnupg2/bin/fake-pinentry.pl
@@ -0,0 +1,38 @@
+#!/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 at 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;
+#use File::Basename;
+#my $dirname = dirname($0);
+
+#open (my $fh, '<', '/home/user/projects/rt/t/data/gnupg2/bin/passphrase') or die "Cannot open passphrase file: $!";
+#my $passphrase = <$fh>;
+#chomp $passphrase;
+#close $fh;
+
+# turn off buffering
+$| = 1;
+
+my $passphrase = 'test';
+
+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 $passphrase\n") if (/^getpin/i);
+  #print ("D \n") if (/^getpin/i);
+  print "OK\n";
+  exit if (/^bye/i);
+}
+1;
diff --git a/t/data/gnupg2/bin/passphrase b/t/data/gnupg2/bin/passphrase
new file mode 100644
index 000000000..e69de29bb
diff --git a/t/data/gnupg2/emails/1-signed-MIME-plain.txt b/t/data/gnupg2/emails/1-signed-MIME-plain.txt
new file mode 100644
index 000000000..bbf316b59
--- /dev/null
+++ b/t/data/gnupg2/emails/1-signed-MIME-plain.txt
@@ -0,0 +1,38 @@
+Message-ID: <46D7309C.9040804 at example.com>
+Date: Fri, 31 Aug 2007 01:03:24 +0400
+From: rt-test at example.com
+User-Agent: Thunderbird 2.0.0.6 (X11/20070804)
+MIME-Version: 1.0
+To:  rt-recipient at example.com
+Subject: Test Email ID:1
+X-Enigmail-Version: 0.95.3
+Content-Type: multipart/signed; micalg=pgp-sha1;
+ protocol="application/pgp-signature";
+ boundary="------------enigF67974ED650702891ACEBB10"
+
+This is an OpenPGP/MIME signed message (RFC 2440 and 3156)
+--------------enigF67974ED650702891ACEBB10
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: quoted-printable
+
+This is a test email with MIME signature.
+ID:1
+
+
+
+--------------enigF67974ED650702891ACEBB10
+Content-Type: application/pgp-signature; name="signature.asc"
+Content-Description: OpenPGP digital signature
+Content-Disposition: attachment; filename="signature.asc"
+
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.4.7 (GNU/Linux)
+Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
+
+iD8DBQFG1zCi0ygDXYSIHxsRAqEmAJ9mKiEdoWg9IFGlUlhPrzo9+1tKSwCfdqRG
++HKnj+81jWpBEhj6D00uNrQ=
+=ZFav
+-----END PGP SIGNATURE-----
+
+--------------enigF67974ED650702891ACEBB10--
+
diff --git a/t/data/gnupg2/emails/10-encrypted-inline-plain.txt b/t/data/gnupg2/emails/10-encrypted-inline-plain.txt
new file mode 100644
index 000000000..4f3e151c3
--- /dev/null
+++ b/t/data/gnupg2/emails/10-encrypted-inline-plain.txt
@@ -0,0 +1,31 @@
+Received: by anduril (Postfix, from userid 1000)
+	id 3AAFC37F5A; Fri, 10 Aug 2007 15:52:03 -0400 (EDT)
+Date: Fri, 10 Aug 2007 15:52:03 -0400
+To: rt-recipient at example.com
+Subject: Test Email ID:10
+Message-ID: <20070810195203.GB5815 at mit.edu>
+MIME-Version: 1.0
+Content-Type: text/plain; charset=us-ascii; x-action=pgp-encrypted
+Content-Disposition: inline
+User-Agent: Mutt/1.5.13 (2006-08-11)
+From: rt-test at example.com
+
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+hQIOA076g5OuwfIOEAgAyB2wkXAxcNw6+iKwzSlXlyZCsdZFSstJbhIr/i+ujIrk
++NLUAIgPfgIeg1nGVVK1z/hszrHRo3FT2b+jSrPF2Ox/wsUqpSvDf641hFbDCIlx
+bbqNmUEOCP5Q64Bw+RHoDoGLx9CPgeXLbciXvPZtlC3MPqG9w8lQdJlhTM1lqwCs
+1kqyvQ8YiFrvCNxU6x/81O9wWwiGOVELVnwX62crUK8howCpmeGx28Uo3HKG7NMv
+vTsdO6vwh38tNRz0kX05+AlxWP+3Vs4se6YwePc+XnhgWQoHqrYcxTOA0OrivJja
+1ty5CAHzGudBdXBcDncg0+6d1Ih60d5JP7nhl3lyzAgArA8CO/iv/kFOkQN9qm4O
+4zq189niju7mVCmcTLgBoxN2U1AeAlSl/JacPw4b3CGDQKmj1L/SMKOfUvOvCUlU
+o6XB7fHPxsFrJag9Yp5snenMRrvoUbypRljebHYsjtkCOsLqK7KUYLx2JQ/pHJjs
+AXwuyytBpLVxwEy0xkujpAQ4rsYT+z410zdH8hAthFo9FwFGKsT95WzfGcOa2+B3
+Qi1LX2uav8q5PAQgbjatp/aiHn3mHZSkRtLbOPr9A8GkmjQaNqIFgUMfaKx2hu8z
+nIZmAjpZ8CDvyKoFU0g9Z2KqNPagOqHgq6sRKuAp/5nz62sMyl4Hc7UfeYMTHWn/
+tNKCAYtyAHAGuvwLiRCN3M5h5Y1DdgEyIri7RtH/LW2QLCqYt9MLvmVRsPIEtuEh
+tZAb+KQzr9W6+fOhpW/1zkBCGxw2PEhv0HafXsVxEjOITbc2Hfwn9kySZ1aeSxL8
+DXzE9fSwcCOXQE1YY7TVNKuqqm34BADCnO7jw/b8EaOHRWgElw==
+=MYSm
+-----END PGP MESSAGE-----
diff --git a/t/data/gnupg2/emails/11-encrypted-inline-attachment.txt b/t/data/gnupg2/emails/11-encrypted-inline-attachment.txt
new file mode 100644
index 000000000..892433c41
--- /dev/null
+++ b/t/data/gnupg2/emails/11-encrypted-inline-attachment.txt
@@ -0,0 +1,80 @@
+Message-ID: <46BCDCA0.4000205 at mit.edu>
+Date: Fri, 10 Aug 2007 17:46:08 -0400
+From: rt-test at example.com
+User-Agent: Thunderbird 1.5.0.12 (X11/20070604)
+MIME-Version: 1.0
+To:  rt-recipient at example.com
+Subject: Test Email ID:11
+X-Enigmail-Version: 0.94.2.0
+Content-Type: multipart/mixed;
+ boundary="------------010900070701080408060501"
+
+This is a multi-part message in MIME format.
+--------------010900070701080408060501
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+
+-----BEGIN PGP MESSAGE-----
+Charset: ISO-8859-1
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+hQIOA076g5OuwfIOEAf/dbKZrl//1Q5r/FjPmqjp2+NDajR7Fj2afjKtkR8ySKni
+gc8kTvx2ceQ8bdOMfdn2AngPlKKyADp8xLDge3hwZg/mBRpOtk5B6eqGZDSwDxgQ
+Q2+mUVilhDBqLB5uv4rXoclT/JqR/WBWW1SjZgVVaf/lB9mI5amcmOPuY5vBq/iY
+q+qBAlWc27AfafGPSz0nifohc2qmq/pj2G6YDkKBE01EZRwbwvm35bTjI6rFL6dp
+Zzx2kGhAu928orL5Ft/KtyOEqdGwGlrGApLVV2X6+G1X6ASdgR24OAqnPxYMnhoT
+I3uYidSE6DSmUAm4R0rGRc1yMG5rBgRDDOYumRJFHAgA9WsNlQTkSuzypFzW7xT1
+zAzurHA1OYttjjWSAFb/eOnLxc27r1mBS0JVoEz/9+HtHOgGcsRe/sym6uwOOMT1
+znpgRGtQ+vL0bwBK3HyLqQzY9o5BGphf3ipCpI6HWwBDdGUJT+K7S8J9Og4AmV9V
+iq6V1PCdGwWS/XD4tulHIPUiA7Z6osVqtbHVTuQNWwsFU06SEHOmhNEGDSmO7Q7i
+bUS1YvC1STmJttzSsh+A/dh7uN/mfrPG1BJEAi4iZRGM6GFoKS5CQnpyQ4Az222n
+w1iB3u170ijcgLvDNR1Nz5DVnXdJcbVg46GvAGjctI7qWmFIKuazCA/AA0hwRjfz
+j4UCDgOxaIPydPr+7xAH/AzvNqeXEU9n7Y7K6rALWKwETU98ltzyp0FdO0YCbN/Z
+HWAyazGpPL6VqECWdc9xAYa1zYRf9HEW25yi5BMqbPav7oxfkEMbfLEl2OJr+EfO
+/GeTijv8riPFazcXdj7CKuumsld/GQgVLjwmRdoVtGN8WMRZfM/CII6uhg2wVbxq
+iThRc03DSNwLr0N0aNr66rySOnvTZNEARljPA1VaRgy1YkHXAyj6Z+s5OBZgj3yh
+3f6KZXaRBq9r+7iXJFuOpQ35k/pykHL6wwaTYMmEvlPZ9EO1zgvBxS6NWm4Ct4+X
+l9anXjRRPS9aSEUZQRjP6VfQPrrlhBNIgAEoKHlIJe4H/RVbTUAqRlTf3k4XBwkR
+HoTk/b/vM5grRQTR12DLXKB+NeNEpQPQFbdFOhfX22ZJbVzl3CVxaOEYHB29KT4D
+2frp99spiO8gksYdC5kviXeXXlXINtqsAWCEQr96wOlE03NuKh9TLF3ykAKageqr
+yDVdFjmeuMwL5XWVdWFUCDKROQz0gbX3WglCVhccrB4aMPx1vP4HiQIn7R2Q9/GJ
+I0lrn/se5GuT078BnhpApZkA0zU+Fi32NWTY7TLXYKxK1BpHWREEFIwrPe1D3Sot
+tLh+E65rDp2dt9LrZgGerSQqP1V8z50reNcGdRuWXfJSBwWJfVVo6ApEqD17bPo1
+Y8HSfAGGTN7euRDBuov2eMPKlLTYqQAqOE7DJK1IWQtw9aIMxLuTBCORy+DHh8v3
+elFBb1PxNZ64BJrOK4+gUm09eizynTdtHYhvhe8Gplu6JO5U28djXVqlIiHtEhF1
+VltikOnWlztV/2M8XoUKZneB9MBqhJ3W0lqN5Xzw7Jk=
+=bB9/
+-----END PGP MESSAGE-----
+
+--------------010900070701080408060501
+Content-Type: application/octet-stream;
+ name="text-attachment.pgp"
+Content-Transfer-Encoding: base64
+Content-Disposition: attachment;
+ filename="text-attachment.pgp"
+
+hQIOA076g5OuwfIOEAf+KE8JLsuGPug17A+1JJwCliRR8Iid4CxXyFplTXYgeFGKh2EN0UJw
+Rj0k10BKnefbhL2gRM90aQaAF4gBF9mCh4H4Rg1reZ5ohoinNPk1Qgkotx1JnyVxIEk7mzKE
+tDIU4BGdcaN6LPhlBRBsSA/nzA19oM8HwecBstws9fbS6ZRwV8XLXKEWsQASEfmJxSYWpdkJ
+GEWIprcwkKClXf9RO+FXhFeg9i1ucFC05/1053w1CZtBAB9ohqs/GhILiCzVc8RZtQ+Xig6c
+Pdv7Q7zZBRy3lFz3o6bAjefxZfNbvVZmuJGMLPrevXF02v4aGazCtzqm7wR5cH0sxaaW0maD
+Fgf8DAeE4A+GqG16s6GGodVllO2JsDWYlyVnf+kfE4FU94uspYteDeGBf4zXhd9ccRYOnDWO
+o6yBwgonzgrZHicF6kcYhJLQS0uM4C1cK9S5nh6CP8cZEUUmEar9g5TKQjWivNGl4qNdzm10
+4dZOK1/u5xFb6dkrqOZ1a1M2DfrZRxgdz2RwZZbwre88wGKP3taBtvJvFXk26QNEa78fuoGL
+wqo3jvsn1evswD/JL4bVJl6VGRDNAsqSxkR6209W8qseFA1tw1aFM8XhpZzhchOlshg+ri60
+r7fMKln4t1hiaBstROGCCtdLomb4ezxJQddp/SH4K3XdHBJg+4ttjsUmkoUCDgOxaIPydPr+
+7xAH/RbwjSq8A8C7lJVXcwnmEIIpQfaKNaFkSRhp9+/y8e8skhUz6JRopeLnMv0u4o6jos+2
+9VGQ8ei+wzA8NgIbWtnxktT4aobI+lWpy7fyC13aMcG64lYbDUjktW7YNxkMYD9+Pk5bBpwJ
+hf9cXhfdSPPofqUM1DmA1LcrkkO+d/qvTCnHjrrjwvTFGBmvKi+iKUk1pltTvOdc5rkK7oI4
+6U6JTYWp9HfvNt7oYCMuILYEftvY0XhBCiUIWUClsQ7WhfqoGpix1peOv4ajzDYeDPo18cMi
+oyDrAHAeWAOjYWtuDXOtwpdaWkAoxgZOJgcu2ZVUWdGyFYvSCwOxfZYzv5IH/2a3xIjO21OC
+M5ql+lXb1OFfqsqXYXAhOP5+JhBOa5UN+VBIKG9pxVL48mWCK1GwHN5RX5aB+ky6tvkrK1QD
+XjCZRxj8o+le03bZ16QiWSEuqxTg2e4/zWY1ZUXBqkxpBVRwT5hzEbLVays0Bju6vKV8CyX9
+apFxFf/vWZ347x+/cK6jc/Bpc8u9PSdOBwGC1ReZixmvgL3fI9ozLOlkNXGvjKxx2Ui6v6LB
+e6SBQsD0cnhRGgfWXgJQsmmPDVPbcmM9+pU/p4JsqdA15lNUILXeeiieFNGHjUORgZtjhY45
+Z1Hw8EOfZWBquFbNt5tRaR6UmroviHO4kNx5N39DtfvSegEma6N5QIsTxrpw0IP2NMVXJ9qa
+4in+Orrc1EQfljFTLYSyK3zowghdHlZsMUo7d5+AMjDlsjKf9H0f1gMB8hWebQQNlyNOmKa/
+uHMcJVlbpGFCOspBgN4N2+s/Ldz+c9hy9W9x7J5U2bcdsdbEKlMF0EkgUE+f3Jhc
+--------------010900070701080408060501--
+
+
diff --git a/t/data/gnupg2/emails/12-encrypted-inline-binary.txt b/t/data/gnupg2/emails/12-encrypted-inline-binary.txt
new file mode 100644
index 000000000..5c646ec79
--- /dev/null
+++ b/t/data/gnupg2/emails/12-encrypted-inline-binary.txt
@@ -0,0 +1,86 @@
+Message-ID: <46BCDCF2.3080704 at mit.edu>
+Date: Fri, 10 Aug 2007 17:47:30 -0400
+From: rt-test at example.com
+User-Agent: Thunderbird 1.5.0.12 (X11/20070604)
+MIME-Version: 1.0
+To:  rt-recipient at example.com
+Subject: Test Email ID:12
+X-Enigmail-Version: 0.94.2.0
+Content-Type: multipart/mixed;
+ boundary="------------090206040704060905090502"
+
+This is a multi-part message in MIME format.
+--------------090206040704060905090502
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+
+-----BEGIN PGP MESSAGE-----
+Charset: ISO-8859-1
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+hQIOA076g5OuwfIOEAf/bD4qivq3N/0qZZnLucbOARr1mypqomT+gvm1It/DllR/
+F3RRLlm0wcBoVQp52aNecT9OJiZNh32oxPW78XBG2OCZv+jATd2vMf4ESOX1Pj4+
+1DATM9V3lOJ8XYJqAX9dVe3MdUntpwqmGvlv2bYmbrc1o6IVQroPm6eV+ttB0BKc
+ELj+1NjpaXDGERoV2P300JcJNR6tu9pXo56kz1vAjAQj/xQBNCoSOxBB1TJA1sKF
+iNuQVObWYG2cE63PRZFTlzvTofeHo9kt9ykfyfNMnslwAaXPI5LJP3KGjUOZiomq
+XA+FYLzMuFzHaOgRGcpJGKTeZ578N7WZ21zmNOgS8ggA0/RNae8CHklYRd9sySdo
+0vxoAO6pokK9HSCaxeX96nS4JJfij/uTMRyR1cbwFBvJSQHUtGNGL1Tn9vhgGfqL
+TjrkvkC/HhBqu4QDYH3ekobV/tu/uQjGhxAASTFB5vtYSQvZtmCR1COTmO559aDz
+oO+93N4x3AOhC1Nhcmyds9mSCKCt4TCWE3gmHuPKYuLpSwj5Ndi5er6jCsq7RpsJ
+W0GzGOGg8wUUPDgBWJbXS5CVAkiJs/SlP0yUqeVR18mf9r/oKUt9DL3GCp230/o+
+0wyVkzqOBPNiIHpFRN1NhikXdKRVOL4ewJeCc9nrlBtLwqpEyZ1g4Ht7SKkE3rl1
+64UCDgOxaIPydPr+7xAH+gNwaV49PwLd8WUJpPuL+YmH5RRsAasWvX+VlnxM+g/7
+cn1BrvpXekq7vctMByxHaV2WnaC42n4M8xC+V1B/7Wk1rmhRMZKpIVjM6X9eNsPg
+FvOX5DhJdhgNOhjwT7rk29P24p9TQj06TwPnvLYjQJ6LViiX5l4T1YpG0mMb6Sc2
+vmp1MbGeV8zZ3hVbSpWOmwlotvfiGa4LjLGNduXIiOFF93pviV2xApYNt+FgJHLc
+p63GfqUXuj/K2iqKwFIbo7nssx/ceWBRdlgPrE/MSStYhBm/e9mw55nwDsUIB4Pg
+tkle/6XgRsOgvHydiTD+mxng/1bx9cmvVtNfvOq82wMH/3JI/rfmQUQGRJ/JFufk
+Kl26lQcbd/Vyxff3MVww7oUFBY2oUPwYL/5N3TjhI7HwiCkMP6S9bL1AfHvkLenu
+n5GKjSLJmyx7BNQMEIIKWD4tNSjA0CCk3+QVGr9sRIVIVD44Be9I8jlcpkn2r5Qs
+9djSXzEBpM+Aiqv5cCBFq2rgYyd9m2c2iHsI6EBaxCzYFz1qobsfvXk4a7ax0/Ck
+ug/jPEq8GK36UTp+51G8JhxzgJKSm4Fo7N3Os8emIlZ2QymPrzPkxEQj9eRsMmp3
+qIQ0rOPjTC8847s4lIlAx7di80OYQ1dV2J8NLL/qxF09rr6f978oH59IfSHRKJ2b
+aCnSfAGfFBr68Zm20se6/0mzrYY2MDljPrKSDQPmNW7nJ761/YjMgVAeZlnKW7JM
+hTdZciuHMTX7+3BDTGCMbAnmYYWurX0jKGJ4X0UJLV8m4nsXvqHvsG6FBzVC5z2w
+kytey5Bqi2gXRjk6xqckH4O79kEJw0kLkxJbT9IPBKw=
+=vGEb
+-----END PGP MESSAGE-----
+
+--------------090206040704060905090502
+Content-Type: application/octet-stream;
+ name="favicon.png.pgp"
+Content-Transfer-Encoding: base64
+Content-Disposition: attachment;
+ filename="favicon.png.pgp"
+
+hQIOA076g5OuwfIOEAf+P0Qp/k1B0WDRr9bNcEANStTaiefYoLrUrtMJv+aFtkiSqKfft0A9
+okrYkVUKs6kxfgxueuqNMFQh58nl8+d7Z2qGIgVEXxC8rRxexEQ8mXu5LXzzBbc6Dq8Jsa7B
+bXzwGty51culYcKeMEjpEY8Qx76qoNQDNCuvth1JJxJ6xQix/pVyZZbJRu/nLrv1i3Z4KRFY
+qafnJlcsUTVj2o9dLfeU13z8nd0uBPY+hiCgYJHSPDLr+mkA+c6YK0m4a88r/wjLmsVHMkn2
+N5nCjuqP4tzT8SCjhoICGTbu+fFdks9NhQjvsW7MHBi9HFFzm6SoEvquFHThzwMl3hAhTLpi
+Jwf/a6unMP/swAxoFTJ2GRXBmQOH4sJHR/M31rEVkLZGJixhU94Tpx8ptgLXqme5VCXgl+M3
+Oh0GHRXqFYjR/HGUTZokRKR/BgCEpOGlH5FcabHiu/Gy8UBezPbuC+BNvxuCbuwODMp9R5DE
+F8RSCAQ1hrRoJjeHT2wyE7HdCvN/xx7NyenA3GdJa5Z6W7Y0gshr2fAOFL39jKXw4WwCh/Yq
+XnyG8uOyPgFrnHI3WpO24VpQHp3MBKebWNhQ/Opy/cABunCSwWQpDB9Ar4GeS3R1WGtMNC4r
+ph4afmTHJcQQkoa0VfvHL0hEzycwysYD46O9QhZfhxtKKShgX356oCeMEIUCDgOxaIPydPr+
+7xAH+gMnbi5OLPf5xMeZydvNWdHE/wJTub2rrWFtzvj0Aa5Ne/KFhcDDqSjaL3MXP1WfIJr1
+/ANe1eWcM2hlYVDpEn6YOh0bz6BASE4kbHA5nGMyUrgH0hWfcOgkMUloRZdf1q32j80mchCJ
+rF4YsQ6EndnUYzAiXKHGJRUy/6IA2qBH2n/fRiyC2FmmQPtWO4c6t15Vgh4fB3QXSTri8J5r
+577yIiHRE+dq6gg1BfyqCtw0DW56lSFQ7dxyMXeLyTGyjTGPlUDc+FbP23CRK7zDIVujARmm
+mX3bP2lMfCK326FwBZf2Q4Zl/ac1BN8Mcb4wwcnKvRzfEw8d1Y6pkphe7KYH/0MDDqtmuEw2
+D/xdw4FHB16/HW32bcPaMVvFuseczEfrwPGCrCiPHPm++edAoY0rWoBtzHVpgN+s5bset5OR
+snhjuWceuCb+Ga0QV0s/xmIPIQ8VYaXyD5hob6nHEIeskS68Vbni0BpY3nejDPoV3dNHY2Tp
+2fjYNHCpsdTz8yyavQVixoQjZQH9hUb48zZDHCt0Af9Rfq6Et5/Qr8iJqAyEU8JzZtrkpO4O
+HgLU7JTPLxOGzYtOj8JkLmLguVA5kOafAuU4OTEU43utQfS3KYbdEWT2jJ1QaJVS8CjFJrqH
+V99FUsDvgKWSTy5hA9gkQAQE1QdwkoQKpkCWm18KZqTSwNkBfrsEuvHC3Cz4Sy+cJmhr4Hvx
+dyZY8DuuWExUcVCjkeuASLgjLEgahnCbMkyKATazswwTEdfzjcOowjLTdaWFEN/Cg22nF/px
+9MXMtzBkrTkjYPhfywETKoMVH/Nw7rRNZhkOSb5WJV5ynF1BlbzXI7Z8rA/KrIn8aydzwJUU
+qFr8Dw1C7kbE76+SFVWX8fqpwGmQhDAO+kos6ivgN9HDHtuXmwfGeROi2U0WcmFGbAyLo5fT
+LCcNPOMflU27WDXm8m+tjq9naUynqvwg5zBBz/xY67L1R8uOwfZplvRi35iZAJjzMHGirkiB
+W3ZDXbDqEfKl4aCXqU+XhQZsku2z3OtKZOBVVI5p8nGVEfavg6QECRUNUS7qbtMxlj5IwCGl
+babK3W5YVuERjklrrLUYZjqFIZ2yLK3Z2VmSn7yKAb/eRvdEeha+9PKcN11pXPkS/M3t+Vpr
+G+4TqNgqwLVWMvbENp08dS3OAPpZLDnqG9CJV0qacDMjv69X26V3Xp6vuZoKqAPxMG9QKAfX
+E9LInR1Kd0cpRUkb
+--------------090206040704060905090502--
+
+
diff --git a/t/data/gnupg2/emails/13-signed-encrypted-MIME-plain.txt b/t/data/gnupg2/emails/13-signed-encrypted-MIME-plain.txt
new file mode 100644
index 000000000..a09ccec4c
--- /dev/null
+++ b/t/data/gnupg2/emails/13-signed-encrypted-MIME-plain.txt
@@ -0,0 +1,49 @@
+Received: by anduril (Postfix, from userid 1000)
+	id 19FD037F61; Fri, 10 Aug 2007 16:03:35 -0400 (EDT)
+Date: Fri, 10 Aug 2007 16:03:35 -0400
+To: rt-recipient at example.com
+Subject: Test Email ID:13
+Message-ID: <20070810200335.GC5815 at mit.edu>
+MIME-Version: 1.0
+Content-Type: multipart/encrypted; protocol="application/pgp-encrypted";
+	boundary="+nBD6E3TurpgldQp"
+Content-Disposition: inline
+User-Agent: Mutt/1.5.13 (2006-08-11)
+From: rt-test at example.com
+
+
+--+nBD6E3TurpgldQp
+Content-Type: application/pgp-encrypted
+Content-Disposition: attachment
+
+Version: 1
+
+--+nBD6E3TurpgldQp
+Content-Type: application/octet-stream
+Content-Disposition: inline; filename="msg.asc"
+
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+hQIOA076g5OuwfIOEAgAhFFX4adckICRP4VEhrElZ8rRYAwJVbTLd7S5yOnrovcG
+sRAIZTjEmb8CRPX926hm3fJ/5O+pm9ZPE1wzvEBQGcJ+6oZPD4GMwuMqJpaZLw4v
+6zj4ogzac0i32vkwLYDLHXle9ytgiBwTFHuOKllCvBmTe5PrFAHqhA0EPJ824gD9
+H93LJUyvn/elOHASKVcUhm1XLV0RxdNTh8Afc7dEAIr0uPaWu1rVatdnc9JnQjsB
+luYLP8M+UD9u/sZwSBv7x/PVIOE9QsaFQGQZTYEzKb/4zeujcUyM0+4rjJ+45QUX
+cDsrFVmXoQfts2nw0BN5mERZdbOIwvkhZMZzsf+EKgf/dA7x9rguO/eGy/keQf0f
+sBHAz24WGWRqcmRNdBsaecVgAsygAEi564RQYvxM7eJxqKl+1TsjUmGUAmacShN7
+JjpqTH9HRrV522UNvVXFitel4Ri3UItP3zI+951x7YvkzUtIz8gfaCOHC71NmPBO
+RdKDDBYDEajJkYN6mhL+QpX9fIIP5ALkfVz0JmdHN1e81Z5myuEWnCSuxeyZHCgl
+Xw8PuV/Af/+GHqjNUaXRDxN4SWm82pKkK4rxioMI4liI5zuR73GH8wd1RjspCkKd
+gPEhmqDxvkxykjhtJt5Izj+iQsyZNRDHRkGJA4BLOLUnvFtwpNCg6DaRDUOBjBmI
+P9LAXwGbhZU7uZLtSzwn1gr8TD+cqkpQrFlKRiUCdh6sTwfp+HE3JDmKAwX6t8bM
+ndBMYwIPddYdkFFpWOQbl1G72zR3SSuwgyCC5+xZxDWPHT97iCKbvCYAmdN3cGHZ
+8Lqu56ulz54pIkBZzSsu8TWzZner2eax1MqITH3WNYYuH57yiMSaUK1DSdFrg9Mc
+o/aK0QUaW6pCFbYGZRS1cqUBaN11Z2debMC60JiNFA/htzLwgSwmZiEdAIt4lvU6
+xMdA7dFYuVLmVh9+VQYp3KspNDWsILiPsKbV8oomlcLiZ+g8cRY/NzLKXVqX2a+7
+Jl3hLlEuVKdcWe+XCfWt07Y2Ibwtpkq/vph61cPdus0dgV8U+QITQ4kt1ky8xNBc
+L51c
+=zSIe
+-----END PGP MESSAGE-----
+
+--+nBD6E3TurpgldQp--
diff --git a/t/data/gnupg2/emails/14-signed-encrypted-MIME-attachment.txt b/t/data/gnupg2/emails/14-signed-encrypted-MIME-attachment.txt
new file mode 100644
index 000000000..e6d23ea96
--- /dev/null
+++ b/t/data/gnupg2/emails/14-signed-encrypted-MIME-attachment.txt
@@ -0,0 +1,51 @@
+Received: by anduril (Postfix, from userid 1000)
+	id 061F037F56; Fri, 10 Aug 2007 16:12:29 -0400 (EDT)
+Date: Fri, 10 Aug 2007 16:12:29 -0400
+To: rt-recipient at example.com
+Subject: Test Email ID:14
+Message-ID: <20070810201229.GD5815 at mit.edu>
+MIME-Version: 1.0
+Content-Type: multipart/encrypted; protocol="application/pgp-encrypted";
+	boundary="N1GIdlSm9i+YlY4t"
+Content-Disposition: inline
+User-Agent: Mutt/1.5.13 (2006-08-11)
+From: rt-test at example.com
+
+
+--N1GIdlSm9i+YlY4t
+Content-Type: application/pgp-encrypted
+Content-Disposition: attachment
+
+Version: 1
+
+--N1GIdlSm9i+YlY4t
+Content-Type: application/octet-stream
+Content-Disposition: inline; filename="msg.asc"
+
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+hQIOA076g5OuwfIOEAf+MEje2ZVc5yRFxINYBmz8l5oRdrDkldSFISKNlcFogKeA
+ZAwvP0Y2Utxjs+aT25gqR72uftGzCLhKdIb8X/i8CswKHX/1NnLKFTFB+T3Mmwtg
+3a9jiB6kQ5haWvcd9y1DBcm1Wnw5B51QmiHZzHu209dphl7qnoak79M0NK4KPSqr
+NKqn7yTKFOjJ3qIlCLqawQbQy++IFmtJVKMQSNZawqSX/JSGMNPz9hioyOgyjxtE
+XZlrdgV1jumnZ3nVF1bQFMGUMGpi6NAA7+TiPjSZgFkKp2zvyOXwFKjKqkVgAgUh
++295JO9kjFmRYOxpWcSfBaibX4qFSsWvJbvltNceDAf/WCCcvP6+JYHmZL32YL6+
+oSM3SnHuG3PIqaT0/99pMVIhHzhrdrmWsyR6ijcK7PRpQg3mIZDd5pzAgcae3c4M
+mYsImADyUC6CX0PvSOYYvG7CskDUiGk76fjDKTkKPkgqEFJXz1v9TA+ptx9v2PTd
+CW8cES9Du5PdwPLbltfC54ax/tCKcyyHbtgozVQJB6RfkXKhUjYI632qnXa7BDqO
+c5Pcpn7gKKik4MkGEWnf50aqQ6ph4Q9MfOZ+5hc/EBUQd2Genqn8iCTPa2rkrI49
+6sKJ9FSdXL4Xdlat09MxnD5Dw6DKF6G6Ig2SAQA/WBG5+sZxWC5NMd5oeJWHVnCz
+VNLA5QEIo0BNtY+wm2W/YH3hSHV5K+Mz+MEKEUaimYSLWKl1p6vboBjHuk0XY1Tn
+FDGmLVcO/jLBkiPOhNyibRXaCW/x3iws+xCHngjX4rDeidEtphHCxihVtS1Sh1wT
+IHHE+Kl6jlateIeBpug79RsGKcdwYTUg2SuaZXEf5A2tQtUhU6TEWYqhFc0g2dCV
+u/lkhrVRt4S+En4DYJ7myQYdMBeHym52Mz9tFZKKQ54dMWDhDsRZIe0Zy8TKBwXd
+cwc5kMpkwFK3drbhFuf3WnQUUR80oyGKCffJw3n40ET91b+nAYJ8bPvYFE+gDB+S
+vHktXvM+vk4PTAKGN21TyZfB9n8VVtIHq3DUPpStrFFQQUDKjMeZf0TDtEWVd1zl
+7jVJ2d+Su/KcAXUITXAQMl4ECXMZ3VD3fnbyRAHI375+wcBh08rM1DQRdhWd40XZ
+55rzTy6T0RVa3JcQBCtM8FYubYQvy8iU5XcA2LEDWdDn8D89IJ+UAnFHIYoeipj8
+qbYjl9JetF1gcmm3QlUwtec6nb5VSmWdQrdfnvdxrW54J3gqlGnzCQg=
+=7/EE
+-----END PGP MESSAGE-----
+
+--N1GIdlSm9i+YlY4t--
diff --git a/t/data/gnupg2/emails/15-signed-encrypted-MIME-binary.txt b/t/data/gnupg2/emails/15-signed-encrypted-MIME-binary.txt
new file mode 100644
index 000000000..58049e1f2
--- /dev/null
+++ b/t/data/gnupg2/emails/15-signed-encrypted-MIME-binary.txt
@@ -0,0 +1,60 @@
+Received: by anduril (Postfix, from userid 1000)
+	id 171AA37F6B; Fri, 10 Aug 2007 16:13:42 -0400 (EDT)
+Date: Fri, 10 Aug 2007 16:13:42 -0400
+To: rt-recipient at example.com
+Subject: Test Email ID:15
+Message-ID: <20070810201341.GE5815 at mit.edu>
+MIME-Version: 1.0
+Content-Type: multipart/encrypted; protocol="application/pgp-encrypted";
+	boundary="QWpDgw58+k1mSFBj"
+Content-Disposition: inline
+User-Agent: Mutt/1.5.13 (2006-08-11)
+From: rt-test at example.com
+
+
+--QWpDgw58+k1mSFBj
+Content-Type: application/pgp-encrypted
+Content-Disposition: attachment
+
+Version: 1
+
+--QWpDgw58+k1mSFBj
+Content-Type: application/octet-stream
+Content-Disposition: inline; filename="msg.asc"
+
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+hQIOA076g5OuwfIOEAgAiH54xEwaxc/DL+nyd5f/77c6Vk27bdxRz1eXHVU0ofqs
+oeZHkEWpkub80YQL1HOQTabAF3ZUIGfyfGufnqXpWWNjhnxP/Bi/Itxk4p3oq6Pj
+RDoDsrO6SPcM1wlbz7M/8rTmpjTk0cYl3nA9Bc7ZDP7jRWRRKFp3Jl63fvK2BWG3
+x0yA1WwJX/gzgsRlFSBBFukaffCqaeQZJ2GSKGbuHTH8EYvGDjqALlEwE/iPYRYq
+OoSa27KIzDCwPFJf8/ZK+03qX2D2LrEViflbFlZMcMGrIFmU0BLrlBx8Obimu3lm
+8bCDX5zQsOIptLQqrhQ5E1HIeEFHqJAxJwHu5v7AFggAqSNH4adYAxz3vZyQ3HdV
+IiDYdwwGh4usb7R7afc8uiFGzxmcc9ktyQ8bBAEpGHMU+ahcUMcfg1svcSKKFQqS
+xNJb5rl3Q9D7qqsoFnNdVFGIxhnUpjt16TdFEtRHDUnC6dWjxKw2fzdR7YsclzkP
+IjUP1yHRK0ees3r7LGU90zQUcUXGnuX4xbMi3+t8NFPqpi9DIkOKS77XEpLFg+Yg
+qrMi3/p72jGBcgbchyS5JJyrVfZjz3igEDy4A2rEw9lJvyemahpccYf9v8LjVCn8
+ofdeLujIyDV1T+wFuB2gIY8fbnvP2UC+ffJ2qGA4uDiz9T1t+IapBjwwrhG/P541
+KdLpAfXAJzKb/gnXdicy/TyGnMguVXryCVZXAx392jA5se/OVjtVkUV8hMcqBPFC
+6zMEPZDXVaCZ7r4VX4xK1y7MGTrq+t4v8UhmfxckiwDVrKZkt6MOwdhTq1YBwFwq
+DEDN391R2fFr08i+3ogKv30gNlqs1gfqh55uCsZMsrtjMAEnM7JcB6pnptND/mRm
+9MYsz5Sxra5L59SNNhJS0GjuTVGIaEhzwusWdFTAeE358AqTOTwdSNe/Fa3qEXBr
+YzmrCgTn4x4YTn8IDQkh80It7ENEc7tkgRN/FcG+Q6cwHWgPOj7QDBJsN/lm8V3K
+cWKVxwvp+hoP8isigZxi/7nOD1EZkQkMAWyZSFp+iCZH14GcAKwqxp9Y8bgSuF/5
+jzASoge+POvEIpsbS7lmfalU8qR2kCYg17fEvDH+6olqRCT6Bq30cVUYY+LVAHgz
+KXgJjK3WYue2XQieGaNYjtwr9AsVl4fxpjXmb+QwL6H0K4JMdXc9tabF5j5YFeTQ
+rWYzED39EiXst9dAFomVhXDHD1OdpAbNh5F9/9wlccgZ7co+tK3bdcD18k2G4XGq
+1AX27utveaSU8M1jeHG4a9//f6NLn4cqJ8Qryv0uiY7N0iiwWHsoHrci0doMQI0U
+glPhkk7qjHf7YAhsRsybfdNrum4jPHMpk1wqY4GR4xhV3JLAbDfKN17yHJWR3c2w
+TQ8sOLMPKMibyo/KRBLCz3CpnuSvpc7A5tCenDJLYtDhmUMofTN1ki3gBW3OFQpd
+zH6pCuVBQDQ3iLO/lg6Y434fPz3cuKnxBdN/QvdbeiX4H7tGzC/q+qXpu/8Yv2x0
+AVSQkrXcc4CQXAvLzqNMXa6NgKrVtVNXUgHyIxvOgGyVxULKDQo+3bByccCOjNOZ
+3gN/JnU2HvEk3iYDYPa+VOJzS1i6itZOCeCBF+NDaaTvG30owmINGCGl/nxv+yIO
+9nlCF3QYdaod2TVYfxdp2X7hlPEhv6nHYt2r3/pXYW4Hjy5M/mT7sR+OVAgknpiJ
+yOzeNy/dVoxpAAlOuzwl+sYI6TkDnF0vduJO0jxWP5+oa+Al9sWr4x4E59OkGAg/
+lQ==
+=NbQY
+-----END PGP MESSAGE-----
+
+--QWpDgw58+k1mSFBj--
diff --git a/t/data/gnupg2/emails/16-signed-encrypted-inline-plain.txt b/t/data/gnupg2/emails/16-signed-encrypted-inline-plain.txt
new file mode 100644
index 000000000..84e49caf2
--- /dev/null
+++ b/t/data/gnupg2/emails/16-signed-encrypted-inline-plain.txt
@@ -0,0 +1,33 @@
+Received: by anduril (Postfix, from userid 1000)
+	id 98F6C37F69; Fri, 10 Aug 2007 16:17:42 -0400 (EDT)
+Date: Fri, 10 Aug 2007 16:17:42 -0400
+To: rt-recipient at example.com
+Subject: Test Email ID:16
+Message-ID: <20070810201742.GF5815 at mit.edu>
+MIME-Version: 1.0
+Content-Type: text/plain; charset=us-ascii; x-action=pgp-encrypted
+Content-Disposition: inline
+User-Agent: Mutt/1.5.13 (2006-08-11)
+From: rt-test at example.com
+
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+hQIOA076g5OuwfIOEAgAsnA+yHerSZnvxR6TIiWSIRlohPBIQHUhoeHBH+9Q0DFJ
+r6in5UmN1luVGtT8kl1dbLAnoVu2Yyf/d57IWgam41MbWi1EmGLQaaLHcIbQ3JXR
+MmXXwG7PTHWdZJismmqCOuT3svTlkqerIBicsHXvfKE209y+jP3lruJ7cVpxZyCI
+M75H8d313r3MwBpoRuEiNMBOjG6MXOATFmgRw93J6pzjWirxwmawhaSNeghkO8tN
+3vdDkzZlLmM/Pq4jQrkWbIbGH/EwdchbWNnhd91o/Lll77fshkXNMYQlgyU154sk
+3wCY5IFGJTUdR1hrETz2nOASLDHIdamhhz1xMItClwgA2uXkVhG0Fslp/A7z4a09
+ivX/gM6a4KuFSNVJtHrlc6Z8/WKe1LNdLiulbFMtbppvMtIkzgZfv/DBavZJBqVI
+EOI+9VzLb6IdqybbNp54nRbniU6aiboEk90waSjqHggCnk5qnOUxrxp2ZCIn9pwP
+KUisxy6cAKGCEeFdvtXIBqfC6uITAu9kNq78rPN64TUaZbJs8VshIj1zpGi6DUYa
+uPvGPIhlLi5xN/oK3Yu2TDrIPxO4m1ZdHQJH8TBn6l6EifAVsDeskSQ4nCZJzc0H
+0D+ofkCzxqRkjDY0IOcl7hI79cRxO5tagtf6od0vcK883wUHxe6Kfv26tKm8IsX1
+ANLAFQFi867dLG+X9wc/QyBwNXZ1hPSE8MulfAYyzT/rXno4nkmQrw6zFLf9q4gA
+Z7aZsgxXPAvWwhwLGyinNgi0ua5LHZL17CWOfG8/GlIK59mesnk8tC9Gyj8aLU3/
+ROteGBBGfk0UJbfcQ+reAjmORofZdHSMCsGYZ5DJEy3KIUrNHzW4yYAlfzLWYfX8
+k9R41E0xGBuooe578MTBtVOPZKY4gurQZdfrHdYnsUXgfpV1w6WYvEM31n90Px6m
+aXWFWq9JVxX/JFOmWJV38fw+EhNgApncTw==
+=J8xa
+-----END PGP MESSAGE-----
diff --git a/t/data/gnupg2/emails/17-signed-encrypted-inline-attachment.txt b/t/data/gnupg2/emails/17-signed-encrypted-inline-attachment.txt
new file mode 100644
index 000000000..6991f0b7f
--- /dev/null
+++ b/t/data/gnupg2/emails/17-signed-encrypted-inline-attachment.txt
@@ -0,0 +1,84 @@
+Message-ID: <46D73CE2.8060202 at example.com>
+Date: Fri, 31 Aug 2007 01:55:46 +0400
+From: rt-test at example.com
+User-Agent: Thunderbird 2.0.0.6 (X11/20070804)
+MIME-Version: 1.0
+To:  rt-recipient at example.com
+Subject: Test Email ID:17
+X-Enigmail-Version: 0.95.3
+Content-Type: multipart/mixed;
+ boundary="------------070807070206050202070908"
+
+This is a multi-part message in MIME format.
+--------------070807070206050202070908
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+-----BEGIN PGP MESSAGE-----
+Charset: UTF-8
+Version: GnuPG v1.4.7 (GNU/Linux)
+Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
+
+hQIOA076g5OuwfIOEAgAn0IWP59DHAWRYz8MG09D5vp+V3rfVdwv8ud2hp/jAUDZ
+ogXobK3KkUH5CIDaohqgrxobAtU9D7XhxO1ti6G9ana7+u2GiTIQmC7F1THSipNJ
+GZajUNG4E0WQXjvkWvDgx2cLdjn+L/i4Y5lQvP6CEmzZpdfKQk4DZdmMJf/Fz0Ag
+jqPI0weYSEr8YBz/p0bEy2Xh7UPw8rwC6ajk/v/E/SfZXI+TpWnFxLt9OUN+o0E/
+o8RQ+5LTpPvkR4RTFFnqZAKu8CU2LqNIWYlzhm67pi+QqeepMuhbW+Ix8tt6oBbN
+EXFrwBYfjLeLcmMJcm2fEwE7otDqKHHW5/G/lu8RBwf9E0TjxnGbpTH3ERrj172E
+T/LT0LD2qRitQQCdFyeDvnq6KKyoUtkyhwrrfpDfB1ZYBSjgIB8rgolbO6OxnY8s
+O6dob+07mQrC3EsbrTQhRjwtLCWB/4kaI0d/9Y4/InStq14AvW0wZWX3kukUq8Us
+ReJhrDA/fOV+duOQgcEc6ZsMjLE/snQv6KMN7ey7iOe10ejLs9qHFZClqHhpjbn7
+zTPRapgTOV1hwBWq9603NDP1EQM/wAOFCw1TDUnhFOzUocpBfSwajWY1bKB4pz94
+Nf/U4BBUFq3aQVX3g4mh4sBesYInZ8wMq7fw9fegyiaLL7YzTbxg/YSXHWkTaYCk
+YIUCDgOxaIPydPr+7xAH/1BIgIWDNzXHWbrmi2pxg547LWoJ3EpJQ46fk2ryfIll
+6Ot1xpCXGStZA1bUnRB0KTZlTNVfXkIy2TuFKJ0xP5JgkeeVQ+Vn8wCXyPB1nYte
+WJ9aKHIk9UhKHhW6FHIjWs3CYjfmpJPaI3AXu4hwT/W1yPIFbAb2UYwuvRn5XABk
+RDxauFRDoHKPvy4IsorGBPIa5ZkJxuBsP7lxp03CfgnUHX7HYehlNp+rKzp82uLg
+fXJdwQAE3OcrnB7rbD9AirIyJpy4q/sYUOnC2M137PF+HYA5zCxktpnkVDtWd6Te
+DyQy7T5Ey5/NzP8IbJpS3Wv+bYOiozv1zNCZ4ZbopbcH/RKMlLN78fSTZmgC6Snb
+dcwZqi8lvL6vx83VBwUAaQeNDLvtlyjojt0UuDWUI3JQJpv5vcGdLjP21+5f/INt
+lua80hg/pKwoKijzQPPtnPBJQOiRkzIEYlaqMkmPi+jgkosf0kcAWxnQGt0L74tD
+Q4ENpgCK6jJVkQFN9Gd2efT7EFUc2acY7/YfFcTOBVm6xi0FXoa0HzL4NzMhbrsx
+NhlC7/Yp34y3NHjzVlMIKiU9kbHrVCyZyXKuSSV2em0a1SqbJu2wj2/qjK6Ibtts
+0aowVn5HafWR6jm8sEEyX/v8c1BdR5Ibmup7Z2DPd0j+fY65GK0nNYZ5QeYq7PxR
+rSbSwA0B+Ot9P47q0c2vGrQF7EKvug2sgnE/9K8DX+Q5IVwMQEoJUZvKf66x7DTA
+YIMnWxlJeeU6fkURzeBpv0TzidU6/KRa/2xg/QoUTZvftAoaQidsajzFSIZTBEqC
+xjzLnkqlDMtlZYBtdvVYDxrBvj8u5whGnhe6GhO8GUfIe/N+bWM5N1kbUAsE7Tau
+ify77kszQdf20rLVO9eU0MjXyvKpWcT/Dpk/Nzth3iLACEtjr/dXo5pMwK0mofx1
+I4lLS7P5PtTz4Oat7aV1up1o
+=LNkV
+-----END PGP MESSAGE-----
+
+--------------070807070206050202070908
+Content-Type: application/octet-stream;
+ name="text-attachment.pgp"
+Content-Transfer-Encoding: base64
+Content-Disposition: attachment;
+ filename="text-attachment.pgp"
+
+hQIOA076g5OuwfIOEAf/fLTYMB41pbPXfa0LaNlQ5PVkAa8i9W/RVfA8s+BGgFYz/herlLi+
+eCE9Ls1RoiEmh3e3ZOG0M/iPA0qBMryH4fcYWqx3R7uaZDVIOEcUM3lR9Q0ffNfGRyVMKX+N
+nUUI/HAaSLCl1NWF6Qnh+/S8tV97D6FDdqQqJKeG7HtPcXMJ3daqHcCl5mMrL/OgcwEcqdHl
+dw8VnESjnkQ3NAvzyNJEpyB7fHN6HtaynxmZbU262ez9Ywh8XsfBbKsDhnLRf/rEUt7X3RQz
+YjXL2C6scGT9ctZ6i1yxPQJOP1+Z+UxijfSd8S59n51/SATsdjmhNFst1JZTbX9Xm/Gv//mj
+aQgAuzhrqVBvyOtX1fMNxGACBhMuJKMLvb9bCltnl4V8IN76d1HP65bw9FvFC7JNcLnbeLBk
+6J6CGhwZYcQHuLBiTAfycM636RotiszjLTx1/7j/Jp3vvzToLm3sNNb4INVmoRBrmVqqP2wl
+Ykl7mxdHAq0Lr6NMiTnk9/TVbJnXdCFseLONJaX6ZPrPZUbw6jhgDMeyAjoBkHJjGqfbde2S
+TsHvPvT53g8d2RgZx5ATptTphU5QsBbS0eYEIiKoU4lUh7augb6EratU63xTsKc9pJ8DJOqB
+l7Ic1ujUDQqlccTVJgYyIJJVO/GUR/AkIYrzWcvEwhtk+PW5CMwrcbEo5IUCDgOxaIPydPr+
+7xAH/RYdKbPnEo/0R8mZls6xuycjGoGNWYuhhaze7NiDPuflz/oMkPL9f/o/7a+9t5mBbdQ9
+XXnNKuhclocbDg6N/TLXWWw9011Ba2ko2l8LpvzlLo7oARaMYZu4kmMYZIkIeQ2GW97gIV4w
+yXLJOuVnH5cudt36/P4QqJM0PxSqmQA5sqAMB7cvgK3RFKbDvvrMvmyrdoTFmrcFhKMWbTq+
+g51hVLm7HEHjicP6LEhHv7m4ooe+rojS4D+0HofvkPou4XWJ+R2T4CVKOSfobrp0RjMqjRuJ
+PvdzhyUNjP1qhtvUyM0JBgYHd7biFKOKjYG7E7j9+5EhHG0uSG+xRWq9NtgH+QF2Mhb1WB24
+lpXZM2KPM6OdStgEJFEzjr9DwULJpEzQhvOAUI45Jd7oqLQjEdmzuPmkEBdNfcUBKkCNdADp
+JBn/0Ak2C4OQImtZX6kyJ2afF7zwMQ5J1eH2e/eOYJTOAVnt29EH51UZHi6OCWosYQhDMNZW
+8AXoza4H3474bPzlxw7utSRm/CJwetrmp3L9BahuEheYv3PZCmy/1aHpt5OHIJDmrDVMzaAH
+DhWNkRuY4/CLvg/+r4W21Y7tsPllPGNfxLJt9kilu8F3M/alhNK8CxbM3sskNnxSPPid5vE2
+e88iO74uhwvQzTrPKlXfsUDpnGacAwG3uNS3x3CbimjSwAkBjvCRETU1DziOU5xVTCGEQFPv
+gF3YtRG7Bmvm0d1zeAlPDuflRhadYCdNvy17gA8LI+YBuk74XavAqKURN6FEevULYaSPZCx8
+HXgjE0uyo8U7l2D9hrYjGuvON84Cwp2O6+jsiLk4oVvdBVbb0PRz4xj/Egnlu+yjGD88Swge
+zpQzBdaqE8m6sizWBlYyPGh8amL8/PfS3OC6hZcg4LOiLhj+h+h3eeamTyAE62zjJjC4UMKc
+ZEI9ZhQ95BxH9bTS+JxP6UySLnQ=
+--------------070807070206050202070908--
+
diff --git a/t/data/gnupg2/emails/18-signed-encrypted-inline-binary.txt b/t/data/gnupg2/emails/18-signed-encrypted-inline-binary.txt
new file mode 100644
index 000000000..61e11e22c
--- /dev/null
+++ b/t/data/gnupg2/emails/18-signed-encrypted-inline-binary.txt
@@ -0,0 +1,89 @@
+Message-ID: <46BCDC0C.6090400 at mit.edu>
+Date: Fri, 10 Aug 2007 17:43:40 -0400
+From: rt-test at example.com
+User-Agent: Thunderbird 1.5.0.12 (X11/20070604)
+MIME-Version: 1.0
+To:  rt-recipient at example.com
+Subject: Test Email ID:18
+X-Enigmail-Version: 0.94.2.0
+Content-Type: multipart/mixed;
+ boundary="------------090909060406090905060708"
+
+This is a multi-part message in MIME format.
+--------------090909060406090905060708
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+
+-----BEGIN PGP MESSAGE-----
+Charset: ISO-8859-1
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+hQIOA076g5OuwfIOEAf+KwEEEyzyWahb5iwjSff0D3MfGimfD7AJTEBjjDgtxcC4
+8xKSJsXhZ2feCi3Wx3TYAoFedoiR0DkyNd//B6dE51bpDpoUX1R8M4W0tOKH03ZZ
+N3sIBYSnJBF66GdLfjSvyEGD9sdi+OnWTv9DbQ4x9Sq2d3u8PBLu3krwk75hJEH7
+z9Q4rhqzpRU9ymhWpS/QPd+4SvuhlJ0ciUGeYLmOFc1YAUJNWzTtnja/jZptFY7l
+8oDXtHTapeJPB9M0WaDf6R60Evkl9DcvGA6FRBMCzWRjqMSdAPGYiceeMiDYcwCq
+hJWSzbDKAHDSY2qwlHZ+2y7mIze3x05qcBHYCIOKewgA5mer22WKZIiEP++p4TZF
+kJbwFxfCqf7mB/nsRGDWsfThGED4KSr18feba8ychNLbVx83FEtTZ5tei96N6NrK
+eS6BdjedTCbvrq7lhIFmC/qPXy/5cjNxr50RBT0sLUEdnY9dhrwLxo69Rqr5qHQT
+luYu7/NhQwOV8OlMTpvy/AfUXGiICLa1iBxtVK8UQ9YMLe1GOyCmseeF3UyfTmKN
+YfEylY17YRsmYZerulSwsHnEoCipjEHOwzksR5zXDHmnv7cqVq1gV1SnjSXOd1Cd
+QuJFdXY5fBdugcrAAJsiB8Iq4t0B7Ai1Lou6x+kKQoigF4i3zhSmH6blZmc99B1r
+jYUCDgOxaIPydPr+7xAH/j7bst78EmNmr4RJvQ4A5bss5BJeOdG36MsTkQ4rXTKv
+tA+chOccB3irMYqpWpKoDMWRz8VgAu9MVVc8SBUr6XRIhLRyCpuZxlwLA+EJJUk6
+yeKBHZZ8KgQ+PgC6WYMaTcRRLeOWbTxhhIrZmT2EbEEDE1jbeeLNrEu1wmrdMBBb
+fhtQTjOHKb7iau3LOGTbbV+F9llnPHrdy2WTp8ozFbsruEqdUG85zQ8X58sy/iC4
+hS9mj+vRs8nanbYABfDHUhoBk8VWUWPlpWTUfzDX0Wuai7LWo5wn7mK0p2i84vMU
+IghS5OGRJfrGVK/1giklqUrmPuiz8M2bG9voLoOVnVIH/izycMW2zZh12TD+YySt
+D1NP6OPy/5PgYgVZvzTYtOW7Y5EI1eTYoC0cMgjITokq6NKqN9aI7sReVV9P24El
+J/LxLvv9Nk7/8Jq6z1CjF0THtFg1mQYTWn52mrYwBr7aPpv/UDDFA0dmIancXwf0
+CHwFMMHFlYSBChy/vwx8+QiE60pLiz6EnajSq8lEQCf6nSFIvmkWn8y3IxmYRgr/
+CMn0BZc+VLgyzIJYG1Ygll10vXDdmjV4Y4f33stWr2Qse5Wp2Pyg/Lsfqw3C7+H1
+1BoxYJma2NmJ6sQu8xDNKPt8dsyOCYEyJqf8KGhi8eslRPuilKOreZ9b/KZh6OE2
+cNTSwA4Buvhbv4626sdq/BJxEi4Cxrhu3dMPCyeyl1540BOSMpThXdKa5pheJTs1
+78UDi87cJBZx8eQ5Gcg2VfwXkolc/dOvIRBEvnuIvA/3DaqH4gxMZ90UCFSzZ9Jm
+By83H0GVB0l8UbneSKtbr4wms5qjSUUzT7NTmqOdZwFmxJIbB0hVZtC1ve00WlkG
+qSmK2BXyG2bccsjeC/XOKO2WmZm9Gfuvtr6KcOnHFQYj08ZSfDPzJCuY7PK4/egc
+TR4wApehk6BzQwbz66uN2PlHIw==
+=2ZQG
+-----END PGP MESSAGE-----
+
+--------------090909060406090905060708
+Content-Type: application/octet-stream;
+ name="favicon.png.pgp"
+Content-Transfer-Encoding: base64
+Content-Disposition: attachment;
+ filename="favicon.png.pgp"
+
+hQIOA076g5OuwfIOEAf/fVq/LJs3vrFnybm6thFjpDte1mawn7xw9op6UIFqEFRjkesreTn2
+b4vzYgi/8HUKJj6A/b9OBBobsOuHkKddZ+wRnTnMTc6ZGahJOFdOc3C84hEJYvyEgRqJ9hBh
+F6awMfPYHIfN3y6PpeJ8jbtWN2QxYvy9a9dsb7oUGi9FuBC7nI0qIqdxeLwjK4MkVGzDhdJU
+N4OCCe3LhYyD+Ev8Ote2NiWFdPnCkFiO6vwYI1cEyzltJXeOXYe/7YCKDb3FcTG9UszG2nDl
+jz7hIXF4NtYVQjIxxtRxPfxKgkzboXIoAD1enJpBkNtTdVS3jtdbFvSlypDhG3+mfMlUo/k4
+vwf/RF+30fL1kZjue/Jecd4oh6NcOokKRRScIwxTwittYPVYtR5W+swTRyF+YA5SLfygmmYb
+QHDjFX+cOx8u8WzmVgK4szOBgh921p6DWxMdD6aLK2wDT//ZVdRDqNV/0AbApexlDriCP/CH
+8BQxHKTCsentMtdVDf66Y/44K6HYceeU8iZT3pvQKXfAmetiMau7G/pN+BvkN2HXFhBPa8id
+dHYIpixvjk7Mg3PBzt6mJa4SOSf8vzProFx4UmnkexOQcRxpS0Zoep1mB16oWqm7tXEUjBJx
+39BwDg8e9sU4Yrri2WzUkIPU0pG3ub5sxbCTMSxMJnZkRk8ul8s9GMtWYIUCDgOxaIPydPr+
+7xAIAIu4kheO0n6eNJeng1XE/giRvZodwsO27kA00KIW8mi6WGLvehlmFoxntck1r2oCNVvH
+Oj94nfWsG2i1zvjQDvMp2Cnp3KTmhTrOss37dFayWVODF/Q9Kx+7WXnh9zCEjQe0eCd6PiKF
+fvb4zCU3ANAY8dTmqRcDDB9TK39nafpWHEfzhjClHrQhuQDh+yb4ayXAvUXkNLIYzAvuwvku
+9x46MPLHf/4VVQAplymRvsMy/Vj3R9triHoE9tD42EOWgbo525IwLQ590x/AZoZhkCOeffWv
+6fq29Z6om8TqFTHFGPb7I88s5ihlpvUgvXkAA7ZYdF6q06pDldWqVOCUm98H/0LZKiiURX1P
+30EAe7DpKi0bAUvHj2Qc5GCU+Hf1ASGJmeENFNMwY+eDwYA6wuBf0tN5zitvncUj5SBZjXjV
+o8Uz7JJ9/6BuUcfAa4/O2qTIFdctBI9bwzzzuXYF3LbYXfjB4WmoaR0nRh8kTlpgFij7WQlg
+l+C1G630ynSm4bVHSmD0J/kBDfNUF7Kyr/riPuqnyqf2wVffbLIJYe/axb4slACZ+F4FhfsZ
+0NLYL2+pvGW05sv+k/kEyhSQeQZwmu8X4iZdfFK6kOpkHeS7K/yFX7BYRD9nMnZ5Zwekh8l7
+eVno90OdJ4rVJkp4+c2N3kEPPLgrEVlaut9gybv553PSwSIBeo8TwJX0khartEsmJRh4fuQq
+Ni8JhsMDG5Mr8DMvmjhWy5Awp+uQ+neNcnk11wQ+OYDFw4JopRED0m+igEK0i/737ANzEhLN
+ssbKnPSivQCBo7Yzv9o3XUx+UU4c3E2bE3MQRGDgDmB1SS2h+wyLDWDoBHGXZ17Hxcb83huJ
+HxFt+5e2K8T6hL3Rwghtg1DHt9eVS05v35xomDn1zPR+EWTEEhvWrPEw00CGpsq3ub4vJajJ
+Aa+4ClaBivaZVKE4rC87cdLNkiBFbXR3ROvkzoSnrA7/ZUgupDLfagDQKAj91hC1hmF1nRix
+SOIYGGeM1IsKm806Ah58IOUWsE5vAzoFqCMB4kYNZLbXU1ccxZVTU6QnpE8DzHoDqOtyN5y3
+2nyRLH9jBwKfECR3YHH3NxRbbI317fhmU5pAvRWeHpRp1yzGrCf21lgx12Ot1EWxHuXrd23p
+0O2EiQAcwadItgkfKW+UwAxGsVX+vueqSBYmYViCTFWKGqMXmgXgirR4nLt7L20WqrXBFKBH
+ms+7e9LwLHStfAzilr1deHnriNfwz0b9UPAvCV3n6FN3uz2asBWZKjOxlEr2VmaQYLiiFWe0
+UhX685wevk7AOX2LZ7iq7SkVmMLSIMgOVI8vmt2PEw==
+--------------090909060406090905060708--
+
+
diff --git a/t/data/gnupg2/emails/19-signed-inline-plain-nested.txt b/t/data/gnupg2/emails/19-signed-inline-plain-nested.txt
new file mode 100644
index 000000000..6ed683d07
--- /dev/null
+++ b/t/data/gnupg2/emails/19-signed-inline-plain-nested.txt
@@ -0,0 +1,34 @@
+Received: by anduril (Postfix, from userid 1000)
+	id 3EDA537F80; Mon, 13 Aug 2007 15:34:17 -0400 (EDT)
+Date: Mon, 13 Aug 2007 15:34:17 -0400
+To: rt-recipient at example.com
+Subject: Test Email ID:19
+Message-ID: <20070813193417.GD6392 at mit.edu>
+MIME-Version: 1.0
+Content-Type: text/plain; charset=us-ascii; x-action=pgp-signed
+Content-Disposition: inline
+User-Agent: Mutt/1.5.13 (2006-08-11)
+From: rt-test at example.com
+
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA1
+
+- -----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA1
+
+This is a test email with inline nested signature.
+ID:19
+- -----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.4.9 (Darwin)
+
+iEYEARECAAYFAkmETNkACgkQ0ygDXYSIHxv3ewCgijZQyL5vWIOfk+06XjqTXdrN
+VDcAnj13TCHvhas6rMtxcljNNGvPidw6
+=VMc6
+- -----END PGP SIGNATURE-----
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.4.9 (Darwin)
+
+iEYEARECAAYFAkmETOIACgkQ0ygDXYSIHxvvvQCfZlRPNjt77jJ7ANxwOpkHkwCY
+wsIAn0PzLhCKhIcAm+hk8CpduzYcY0xW
+=Xy5t
+-----END PGP SIGNATURE-----
diff --git a/t/data/gnupg2/emails/2-signed-MIME-plain-with-attachment.txt b/t/data/gnupg2/emails/2-signed-MIME-plain-with-attachment.txt
new file mode 100644
index 000000000..c658e6b69
--- /dev/null
+++ b/t/data/gnupg2/emails/2-signed-MIME-plain-with-attachment.txt
@@ -0,0 +1,48 @@
+Received: by anduril (Postfix, from userid 1000)
+	id 74BF637F75; Mon, 13 Aug 2007 15:23:57 -0400 (EDT)
+Date: Mon, 13 Aug 2007 15:23:57 -0400
+To: rt-recipient at example.com
+Subject: Test Email ID:2
+Message-ID: <20070813192357.GB6392 at mit.edu>
+MIME-Version: 1.0
+Content-Type: multipart/signed; micalg=pgp-sha1;
+	protocol="application/pgp-signature"; boundary="bKyqfOwhbdpXa4YI"
+Content-Disposition: inline
+User-Agent: Mutt/1.5.13 (2006-08-11)
+From: rt-test at example.com
+
+
+--bKyqfOwhbdpXa4YI
+Content-Type: multipart/mixed; boundary="DKU6Jbt7q3WqK7+M"
+Content-Disposition: inline
+
+
+--DKU6Jbt7q3WqK7+M
+Content-Type: text/plain; charset=us-ascii
+Content-Disposition: inline
+
+This is a test email with a text attachment.
+ID:2
+
+--DKU6Jbt7q3WqK7+M
+Content-Type: text/plain; charset=us-ascii
+Content-Disposition: attachment; filename=text-attachment
+
+This is a test attachment.  The magic word is:  zanzibar.
+
+--DKU6Jbt7q3WqK7+M--
+
+--bKyqfOwhbdpXa4YI
+Content-Type: application/pgp-signature; name="signature.asc"
+Content-Description: Digital signature
+Content-Disposition: inline
+
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+iD8DBQFGwK/N0ygDXYSIHxsRAlbuAJ4wxUVCNerg6dLm+w7llCj51YYbFACgvNJR
+ajbUy9MMkljajl6Of3IlqRA=
+=R6Gi
+-----END PGP SIGNATURE-----
+
+--bKyqfOwhbdpXa4YI--
diff --git a/t/data/gnupg2/emails/3-signed-MIME-plain-with-binary.txt b/t/data/gnupg2/emails/3-signed-MIME-plain-with-binary.txt
new file mode 100644
index 000000000..ed8e392b4
--- /dev/null
+++ b/t/data/gnupg2/emails/3-signed-MIME-plain-with-binary.txt
@@ -0,0 +1,55 @@
+Received: by anduril (Postfix, from userid 1000)
+	id 9745537F7B; Mon, 13 Aug 2007 15:29:41 -0400 (EDT)
+Date: Mon, 13 Aug 2007 15:29:41 -0400
+To: rt-recipient at example.com
+Subject: Test Email ID:3
+Message-ID: <20070813192941.GC6392 at mit.edu>
+MIME-Version: 1.0
+Content-Type: multipart/signed; micalg=pgp-sha1;
+	protocol="application/pgp-signature"; boundary="pY3vCvL1qV+PayAL"
+Content-Disposition: inline
+User-Agent: Mutt/1.5.13 (2006-08-11)
+From: rt-test at example.com
+
+
+--pY3vCvL1qV+PayAL
+Content-Type: multipart/mixed; boundary="at6+YcpfzWZg/htY"
+Content-Disposition: inline
+
+
+--at6+YcpfzWZg/htY
+Content-Type: text/plain; charset=us-ascii
+Content-Disposition: inline
+
+This is a test email with binary attachment and MIME signature.
+ID:3
+
+--at6+YcpfzWZg/htY
+Content-Type: image/png
+Content-Disposition: attachment; filename="favicon.png"
+Content-Transfer-Encoding: base64
+
+iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QAAAAAAAD5Q7t/AAAB
+BElEQVR42u1WWw6DMAwz0+5FbzbvZuZk2cfUritpea77wVIRIBQ7dhsBdIQkM8AMMJImyW6d
+BXweyJ7UAMnUvQFGwHp2bizIJfUTUHZO8j/k1pt8lntvchbdH8ndtqyS+Gj3fyVPAtZAkm3N
+ffCyi/chBIQQ3iqs3cQ0TZCERzbhngDocOS4z94wXTCmu2V45LuQW8hsSWpaP8v9sy+2IRZj
+ZTP5ububbp8Az4ly5W6QqJ33YwKSkIYbZVy5uNMFsOJGLaLTBMRC8Yy7bmR/OD8TUB00DvkW
+AcPSB7FIPoji0AGQBtU4jt+Fh1R6Dcc6B2Znv4HTHTiAJkfXv+ILFy5c8PACgtsiPj7qOgAA
+AAAASUVORK5CYII=
+
+--at6+YcpfzWZg/htY--
+
+--pY3vCvL1qV+PayAL
+Content-Type: application/pgp-signature; name="signature.asc"
+Content-Description: Digital signature
+Content-Disposition: inline
+
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+iD8DBQFGwLEl0ygDXYSIHxsRAuYxAKDQeRS40bRiW5jmrwHNsCDN67vu7wCfV0Pd
+7T/gCO7TrbuGaJ0BVsJnJsY=
+=Pjdg
+-----END PGP SIGNATURE-----
+
+--pY3vCvL1qV+PayAL--
diff --git a/t/data/gnupg2/emails/4-signed-inline-plain.txt b/t/data/gnupg2/emails/4-signed-inline-plain.txt
new file mode 100644
index 000000000..9240d81b0
--- /dev/null
+++ b/t/data/gnupg2/emails/4-signed-inline-plain.txt
@@ -0,0 +1,24 @@
+Received: by anduril (Postfix, from userid 1000)
+	id 3EDA537F80; Mon, 13 Aug 2007 15:34:17 -0400 (EDT)
+Date: Mon, 13 Aug 2007 15:34:17 -0400
+To: rt-recipient at example.com
+Subject: Test Email ID:4
+Message-ID: <20070813193417.GD6392 at mit.edu>
+MIME-Version: 1.0
+Content-Type: text/plain; charset=us-ascii; x-action=pgp-signed
+Content-Disposition: inline
+User-Agent: Mutt/1.5.13 (2006-08-11)
+From: rt-test at example.com
+
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA1
+
+This is a test email with inline signature.
+ID:4
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+iD8DBQFGwLI50ygDXYSIHxsRAp40AJ9ErYdLH2SVRXtgRtx7n/FVFOmKDwCgl/0T
+BeRSaF4Xbi8uGhVIkmU+YCs=
+=e4u6
+-----END PGP SIGNATURE-----
diff --git a/t/data/gnupg2/emails/5-signed-inline-with-attachment.txt b/t/data/gnupg2/emails/5-signed-inline-with-attachment.txt
new file mode 100644
index 000000000..763f97138
--- /dev/null
+++ b/t/data/gnupg2/emails/5-signed-inline-with-attachment.txt
@@ -0,0 +1,48 @@
+Message-ID: <46BCDA81.3030308 at mit.edu>
+Date: Fri, 10 Aug 2007 17:37:05 -0400
+From: rt-test at example.com
+User-Agent: Thunderbird 1.5.0.12 (X11/20070604)
+MIME-Version: 1.0
+To:  rt-recipient at example.com
+Subject: Test Email ID:5
+X-Enigmail-Version: 0.94.2.0
+Content-Type: multipart/mixed;
+ boundary="------------010302000403000103080306"
+
+This is a multi-part message in MIME format.
+--------------010302000403000103080306
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 7bit
+
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA1
+
+This is a test email with a text attachment and inline signature.
+ID:5
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+iD8DBQFGvNqA0ygDXYSIHxsRAuCHAKC0HnduLWqihY5wzGYDFGbFtA4chwCgr6+t
+mQo4oXIqu+kIZ0ExWyiUENs=
+=3ABp
+-----END PGP SIGNATURE-----
+
+--------------010302000403000103080306
+Content-Type: text/plain;
+ name="text-attachment"
+Content-Transfer-Encoding: 7bit
+Content-Disposition: inline;
+ filename="text-attachment"
+
+This is a test attachment.  The magic word is:  zanzibar.
+
+--------------010302000403000103080306
+Content-Type: application/octet-stream;
+ name="text-attachment.sig"
+Content-Transfer-Encoding: base64
+Content-Disposition: attachment;
+ filename="text-attachment.sig"
+
+iD8DBQBGvNqB0ygDXYSIHxsRAmkbAJ0esGNEDMr01u45ZHIIKZpCFSE8tgCfXBedq0Yu5mnZ
+zOZyASZYUIf9wSE=
+--------------010302000403000103080306--
diff --git a/t/data/gnupg2/emails/6-signed-inline-with-binary.txt b/t/data/gnupg2/emails/6-signed-inline-with-binary.txt
new file mode 100644
index 000000000..d0251ccc7
--- /dev/null
+++ b/t/data/gnupg2/emails/6-signed-inline-with-binary.txt
@@ -0,0 +1,55 @@
+Message-ID: <46BCDAE6.4090803 at mit.edu>
+Date: Fri, 10 Aug 2007 17:38:46 -0400
+From: rt-test at example.com
+User-Agent: Thunderbird 1.5.0.12 (X11/20070604)
+MIME-Version: 1.0
+To:  rt-recipient at example.com
+Subject: Test Email ID:6
+X-Enigmail-Version: 0.94.2.0
+Content-Type: multipart/signed; micalg=pgp-sha1;
+ protocol="application/pgp-signature";
+ boundary="------------enigAEEA002E4229CA8E5445ED73"
+
+This is an OpenPGP/MIME signed message (RFC 2440 and 3156)
+--------------enigAEEA002E4229CA8E5445ED73
+Content-Type: multipart/mixed;
+ boundary="------------000104020205010403010301"
+
+This is a multi-part message in MIME format.
+--------------000104020205010403010301
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: quoted-printable
+
+This is a email signed inline with a binary attachment.
+ID:6
+
+--------------000104020205010403010301
+Content-Type: image/png;
+ name="favicon.png"
+Content-Transfer-Encoding: base64
+Content-Disposition: inline;
+ filename="favicon.png"
+
+iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QAAAAAAAD5Q7t/AAAB
+BElEQVR42u1WWw6DMAwz0+5FbzbvZuZk2cfUritpea77wVIRIBQ7dhsBdIQkM8AMMJImyW6d
+BXweyJ7UAMnUvQFGwHp2bizIJfUTUHZO8j/k1pt8lntvchbdH8ndtqyS+Gj3fyVPAtZAkm3N
+ffCyi/chBIQQ3iqs3cQ0TZCERzbhngDocOS4z94wXTCmu2V45LuQW8hsSWpaP8v9sy+2IRZj
+ZTP5ububbp8Az4ly5W6QqJ33YwKSkIYbZVy5uNMFsOJGLaLTBMRC8Yy7bmR/OD8TUB00DvkW
+AcPSB7FIPoji0AGQBtU4jt+Fh1R6Dcc6B2Znv4HTHTiAJkfXv+ILFy5c8PACgtsiPj7qOgAA
+AAAASUVORK5CYII=
+--------------000104020205010403010301--
+
+--------------enigAEEA002E4229CA8E5445ED73
+Content-Type: application/pgp-signature; name="signature.asc"
+Content-Description: OpenPGP digital signature
+Content-Disposition: attachment; filename="signature.asc"
+
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+iD8DBQFGvNrm0ygDXYSIHxsRAvwSAKC4d3U6SjfhYpUHu2V/vXtgxGFa1QCfeK6p
+dyDDlvlqP9Ns4EExvHXfHuY=
+=sX3V
+-----END PGP SIGNATURE-----
+
+--------------enigAEEA002E4229CA8E5445ED73--
diff --git a/t/data/gnupg2/emails/7-encrypted-MIME-plain.txt b/t/data/gnupg2/emails/7-encrypted-MIME-plain.txt
new file mode 100644
index 000000000..cabed5314
--- /dev/null
+++ b/t/data/gnupg2/emails/7-encrypted-MIME-plain.txt
@@ -0,0 +1,47 @@
+Received: by anduril (Postfix, from userid 1000)
+	id CEA9137F51; Fri, 10 Aug 2007 15:27:49 -0400 (EDT)
+Date: Fri, 10 Aug 2007 15:27:49 -0400
+To: rt-recipient at example.com
+Subject: Test Email ID:7
+Message-ID: <20070810192749.GA5572 at mit.edu>
+MIME-Version: 1.0
+Content-Type: multipart/encrypted; protocol="application/pgp-encrypted";
+	boundary="YiEDa0DAkWCtVeE4"
+Content-Disposition: inline
+User-Agent: Mutt/1.5.13 (2006-08-11)
+From: rt-test at example.com
+
+
+--YiEDa0DAkWCtVeE4
+Content-Type: application/pgp-encrypted
+Content-Disposition: attachment
+
+Version: 1
+
+--YiEDa0DAkWCtVeE4
+Content-Type: application/octet-stream
+Content-Disposition: inline; filename="msg.asc"
+
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+hQIOA076g5OuwfIOEAf9FtBMrkLWUKK5BtwuUsYXV9Mbe/YkkmK61MuysAtLcX/M
+DiXPzngjL62Dr9l88R3imf2kPmY36yx5WNeXUrFFVmFPaeZrHEJiMNvPGVVQCqRK
+uar2vsYRK9th4msZnn0hBYnA8+8kZ8rWefWHpszOcJ1YZpyyEMLf8Vnstyf0Pebp
+Wxixr99+mn3MVH38CrhoErI6CMiCFJgPAl5wtGWd0lT3+657dLJCsNI0cT3AY/JC
+IJwWD2sdOXOzDo7tdC3l7/YuGsXvd4jGu4A8PdoBMOgPx/N4KT3+uPhp2sRD3PMg
+LU59613xT8/FOYxQSib9hGqNZPqXS3ryC3ZvY4Sp8AgApCMocKsN7vm8N+6Yh7Nc
+Jjy/kuf8tjuTTs32Yk0ACU3y2SFXKSBZo6cVXgJhUvmG2Dq4O/A8mtP0cjqeBFqp
++vZOb7xhtxxTE6HWWThvx5qxcwjpijzDMS9uzfGaHwLvewdGVLODCup06MJmeAmj
+N1WEZqc/cqFZvZ9omCpcvTGoELpOzcUY1MxAq1IVkMzAk7dPIHYuyPSFQK6Y8IPl
+xsfSMcq9gjth8qautnriB0ohwkUebGnxgM4CjGjnSmLmUFXkndUOXKbM7R7E3QdL
++6TKMr2pvLl8U3OJrCiyyPVyVi3in4TYi4uegXJl05CAEjEXRf5RFhaWRnn66EYN
+WdLAAQHpkESfESVUaWvJwI+JB+LMBoKZjWgvIQ7AQKqLAvIsAqs9PKM4mYOMaawl
+en9XNRkW0dSGUxjW4K8u7fLS/xzWrZeCrafEkvCowVv/nR+Wxm296bxX+7z2R52/
+j+J0zms1fRdVxEs+rOI6JuXg4xWxUdLTav7cqvQ5c/izM+jU4yWEa3y0fHma6Jeh
+o4+1NerQby8Yzxszh9XVfkbYnQilhP8qCVxYe4HGjKlNi5v/xOgCznCKsqkGYMPU
+S32K6lg=
+=xeKr
+-----END PGP MESSAGE-----
+
+--YiEDa0DAkWCtVeE4--
diff --git a/t/data/gnupg2/emails/8-encrypted-MIME-with-attachment.txt b/t/data/gnupg2/emails/8-encrypted-MIME-with-attachment.txt
new file mode 100644
index 000000000..c28eb9843
--- /dev/null
+++ b/t/data/gnupg2/emails/8-encrypted-MIME-with-attachment.txt
@@ -0,0 +1,49 @@
+Received: by anduril (Postfix, from userid 1000)
+	id C962637F57; Fri, 10 Aug 2007 15:39:14 -0400 (EDT)
+Date: Fri, 10 Aug 2007 15:39:14 -0400
+To: rt-recipient at example.com
+Subject: Test Email ID:8
+Message-ID: <20070810193914.GC5572 at mit.edu>
+MIME-Version: 1.0
+Content-Type: multipart/encrypted; protocol="application/pgp-encrypted";
+	boundary="FFoLq8A0u+X9iRU8"
+Content-Disposition: inline
+User-Agent: Mutt/1.5.13 (2006-08-11)
+From: rt-test at example.com
+
+
+--FFoLq8A0u+X9iRU8
+Content-Type: application/pgp-encrypted
+Content-Disposition: attachment
+
+Version: 1
+
+--FFoLq8A0u+X9iRU8
+Content-Type: application/octet-stream
+Content-Disposition: inline; filename="msg.asc"
+
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+hQIOA076g5OuwfIOEAgA4dZa3t55kB5pY4Q7+h4thTJVZ+wV2QxI5wZFRvMs7yw3
+MEIWqHusoe7R2zeXLxaT0gMSQj3osO+GrGJRDk4qCGjcjSneFmYKkELx8KRML59N
+X7/HeX7v8nSGpyqM5foaky38uAGxj2xBpswfvsY8qdQ37a4mNH2atESnkxYLomZb
+4vTRTSE1XtvhaG7oHaXxfmeNln0JezfbfpDGTktZJOupEX99j6/bvloimXyBT6SZ
+3wbcP/EYoqC8DQOQTtFTAisWwveTVp6FDFvi5L2BCJ2NzYZSDOBNeXrzf1AJ04dN
+9lTzbtejdE/AgwDclDnZYZByiGLM43X6nTk7c9gH1AgAlrxxvO1yz4sZchGM2rrn
+yzNJpcvcgbJLTt54gqie/BdQHSnvlCBLZzplx2xV9HIwJB7Kf29Ka2gg2p6mjyID
+YUd1451K1hDUmBHgya8jb6g2c6bBxiusUODlGfmv+c+kq/yG0tKws5d0/IGanL+Z
+h7XkcEYq3its0acCbcKizgzLSmxSqu6NK7rnDvioUOHHKG8uC9fk2JetdTdYOTBn
+AWYDxa3D+kRvOAiOWGMqtvOWAC1BZJ8hssBpesuG1+sucTh7W4ZROtQfEbqC8W51
+s6e17x1YUqE8QIs/aUYkUkX2JqObKsZPJAiVYCQkqJceIk/lT4rXNOfUwl5dAynk
+WNLAZQGKuVghSfSoRyKbFMRDimigisWN2JUudaV0Ld6E/5iO7EP7XhjqkzTlwsaN
+wui2n0Omxye2dNVMKz3q76fVp79XbznaI1ckeVjiiDmkiaQOp1Au/Sx2Bj0/wolJ
+OXnp27oqc9THy3RANLRXIQuRaYOyoxUIjVvhbOVfM3U7MlcAW3jT2kMTI7H83HWc
+ezxKfqM7nJUKkIVmRY4J/6X4uo5c8DdIxLeG+ioj+3I7BRkLfIAPYDGaeB5+BD1k
+EPcVGd3u1EW7D8f5CRARnU8aaC8DCPk5YYN6wM9JY9n0FEgIkwoniTpqHLs/UMa8
+DWGer1UCGp4qElmHvWHVV8b82nw6Ta2BhWKjA9pphf96KOTt3y4jqxfU4GbrOYDJ
+786/cggItsc0
+=qJrM
+-----END PGP MESSAGE-----
+
+--FFoLq8A0u+X9iRU8--
diff --git a/t/data/gnupg2/emails/9-encrypted-MIME-with-binary.txt b/t/data/gnupg2/emails/9-encrypted-MIME-with-binary.txt
new file mode 100644
index 000000000..1cc8f0696
--- /dev/null
+++ b/t/data/gnupg2/emails/9-encrypted-MIME-with-binary.txt
@@ -0,0 +1,57 @@
+Received: by anduril (Postfix, from userid 1000)
+	id 215C737F5D; Fri, 10 Aug 2007 15:46:27 -0400 (EDT)
+Date: Fri, 10 Aug 2007 15:46:27 -0400
+To: rt-recipient at example.com
+Subject: Test Email ID:9
+Message-ID: <20070810194627.GA5815 at mit.edu>
+MIME-Version: 1.0
+Content-Type: multipart/encrypted; protocol="application/pgp-encrypted";
+	boundary="GID0FwUMdk1T2AWN"
+Content-Disposition: inline
+User-Agent: Mutt/1.5.13 (2006-08-11)
+From: rt-test at example.com
+
+
+--GID0FwUMdk1T2AWN
+Content-Type: application/pgp-encrypted
+Content-Disposition: attachment
+
+Version: 1
+
+--GID0FwUMdk1T2AWN
+Content-Type: application/octet-stream
+Content-Disposition: inline; filename="msg.asc"
+
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+hQIOA076g5OuwfIOEAgAqwVRwpeOIRMvrgswuYagJfk57HvSvrAg7tVzXHaHW5LI
+zJeWpKg0PVwmJUYTG9cZN0gkfpr33SULruvniZRSX650E/vv9H03P1dVYhBbcP01
+AyfPoaySinipoqG5OK7aTJVEnPZqqsCKgzFbqEg+FdF3YjNVa1etfmKV/JvoXTxR
+il6pOqv+xUJ66GpPUoP7mCZJ/cJEF1zz/EbZoYcS9MgxoP42bOIYBhyqIv3fUh7X
+fuDpup5xnJwM3FRjkNQPlqKhgGHCgk04OGgLUw8wzRwYQ5jSyij45J/UcGoNWePi
+eVTZignbYIfrlwa5GH6776U9QA9ei7PFP3RqO2CB2Af6AiIdkeN9MfPFfiQ/ASwR
+/zePg+OOmKC6locoUHWTEuBCZhgty7XarfPZufBHlA3Z3f369Pxz9nMV07KkO22t
+thhltpsxan2pFZL4oPfwA9OdDRGeWIISn4jGc+foNfKTmERY7EZv9ruDC0lxaSvs
+HEWJC38sJ3xGdlS439qaddSbm0Lft8JbNwi6FEpThE4abBdITu+BxbkoFrjIy6aC
+UJgyJ3YtPTpU8JuT49Ocn+51YPXZTSc/ePnvlzSqRXHeJrOKp5Oyoa9001242MRM
+mpaC1lw/sfGIIAXv5t2B569RXDsZ2jIvPjFIleIdyKOG17m8qsP82nWKbN2N96am
+p9LpAb5gqid4Hw1PjjjCB0A9w7G9orQeEQuF+2V9MGWAEWOHoVbGWTRjfh4uXASz
+4PlazbNDIZZB09ACaDfxG3Y3/TI2X0sl9KJNRALFtHm4+DNbWVeWe+aKrG9ZY9Os
+xjD/UQFFQrchpNPD7xV98WWEg4+s8pkk9Mwv+Q/gNf2xBXJXDOhIm2LlY0VlhETq
+fk4YS3EUS78Ti4V99w/L9PTnoaZY/8kkI6NNjb+bqldhd9AQHXEkpV5Gh/PrsgFn
+FzBZxEwcY8wKP2yKMTp+A3rsjHwM4OChjtkDShf4KDwGS5D+E4o1RJVcM3jfh2SG
+RRKge5ewErBmIDIqeU8Wpj5cuyqS77CIB3aplSKLqUu2bC2EiLFZxs2UTg+cp5WK
+WFzt+YmH6/p0y9eyaAGOleSh3dnIZHv2BDtzF9x5fHFesjaVp3jpmMsHQ1ol53TR
+8N4fUuO140oE0Gnci61EXzLjkGCSBhzZqy/+K8PR0d1hGv+vlwfadpzsPfX8WcxZ
+DBuI1E7OcqVaXemR90/C2AbLB8qGuwQ+wTIHPqXlm8s0+6wZ4YUcUoa/F+2VLSxN
+VWGji1yioKrSaBjlBBUpHfoC/Q/0hLk2FgIrAZFIPvhHl9nF3Vq/HqlxtGZQ7gnL
+TjQtRuI+oU7IhJRR1VZbhr8xn1pirueiiwJUPub6w4XfMGyvcvlIOVpUImW5Hab7
+kg20iwrcJNLCcPJsR5iEbhJBBHLsViMtfdRbstlEV8I4wTY2tNAkfMtUtWdUhwOA
+fdx/UmHjbNZFSS6cpsGHL8+QJ2Bo1urkHIz6z1w4f1vTL31NAPeyvZ4kNstSqkNt
+6fjdrt8mBRVGQfqRQsK2b/R61ErJoFULboeqOT/ed/Dufu2Wxf/wuuRvG77S8xoq
+OiDT8nhyHh7ljjdHZZ2uLro8gg==
+=BIke
+-----END PGP MESSAGE-----
+
+--GID0FwUMdk1T2AWN--
diff --git a/t/data/gnupg2/emails/README b/t/data/gnupg2/emails/README
new file mode 100644
index 000000000..634f53794
--- /dev/null
+++ b/t/data/gnupg2/emails/README
@@ -0,0 +1,28 @@
+Set of emails signed and/or encrypted using real MUAs(mutt, thunderbird).
+
+All messages have subejct 'Test Email ID:\d+'.
+ID matches number in name of the corresponding file.
+Top most entity of a message as well contains 'ID:\d+' text.
+
+Emails may have either text plain or binary attachment.
+Text of plain attachment is
+"This is a test attachment.  The magic word is:  zanzibar."
+
+Content of binary attachment is RT's favicon.png.
+
+Encrypted messages encrypted for rt-recipient at example.com.
+
+Messages signed using rt-test at example.com key.
+
+Name of a file may contain the following parts separated by dash:
+* signed
+* encrypted
+* MIME - RFC format
+* inline - inline format
+* with-attachment - text plain attachment
+* with-binary     - binary attachment
+
+In total 18 emails using all possible combinations.
+18 = 3 (signed/encrypted/both) * 2 (MIME/inline)
+    * 3 (no/text/binary)
+
diff --git a/t/data/gnupg2/emails/special/binary-asc-attach-marked-plain-text.txt b/t/data/gnupg2/emails/special/binary-asc-attach-marked-plain-text.txt
new file mode 100644
index 000000000..db904ae24
--- /dev/null
+++ b/t/data/gnupg2/emails/special/binary-asc-attach-marked-plain-text.txt
@@ -0,0 +1,60 @@
+Message-ID: <46BCDCF2.3080704 at mit.edu>
+Date: Fri, 10 Aug 2007 17:47:30 -0400
+From: Christian Ternus <ternus at mit.edu>
+User-Agent: Thunderbird 1.5.0.12 (X11/20070604)
+MIME-Version: 1.0
+To:  rt-recipient at example.com
+Subject: Test Email ID:12
+X-Enigmail-Version: 0.94.2.0
+Content-Type: multipart/mixed;
+ boundary="------------090206040704060905090502"
+
+This is a multi-part message in MIME format.
+--------------090206040704060905090502
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+
+Attached file has .asc extension
+and content type is text/plain.
+
+ASC in some clients stands for ascii, so it's
+attached as text/plain.
+
+--------------090206040704060905090502
+Content-Type: text/plain;
+ name="favicon.png.asc"
+Content-Transfer-Encoding: base64
+Content-Disposition: attachment;
+ filename="favicon.png.asc"
+
+hQIOA076g5OuwfIOEAf+P0Qp/k1B0WDRr9bNcEANStTaiefYoLrUrtMJv+aFtkiSqKfft0A9
+okrYkVUKs6kxfgxueuqNMFQh58nl8+d7Z2qGIgVEXxC8rRxexEQ8mXu5LXzzBbc6Dq8Jsa7B
+bXzwGty51culYcKeMEjpEY8Qx76qoNQDNCuvth1JJxJ6xQix/pVyZZbJRu/nLrv1i3Z4KRFY
+qafnJlcsUTVj2o9dLfeU13z8nd0uBPY+hiCgYJHSPDLr+mkA+c6YK0m4a88r/wjLmsVHMkn2
+N5nCjuqP4tzT8SCjhoICGTbu+fFdks9NhQjvsW7MHBi9HFFzm6SoEvquFHThzwMl3hAhTLpi
+Jwf/a6unMP/swAxoFTJ2GRXBmQOH4sJHR/M31rEVkLZGJixhU94Tpx8ptgLXqme5VCXgl+M3
+Oh0GHRXqFYjR/HGUTZokRKR/BgCEpOGlH5FcabHiu/Gy8UBezPbuC+BNvxuCbuwODMp9R5DE
+F8RSCAQ1hrRoJjeHT2wyE7HdCvN/xx7NyenA3GdJa5Z6W7Y0gshr2fAOFL39jKXw4WwCh/Yq
+XnyG8uOyPgFrnHI3WpO24VpQHp3MBKebWNhQ/Opy/cABunCSwWQpDB9Ar4GeS3R1WGtMNC4r
+ph4afmTHJcQQkoa0VfvHL0hEzycwysYD46O9QhZfhxtKKShgX356oCeMEIUCDgOxaIPydPr+
+7xAH+gMnbi5OLPf5xMeZydvNWdHE/wJTub2rrWFtzvj0Aa5Ne/KFhcDDqSjaL3MXP1WfIJr1
+/ANe1eWcM2hlYVDpEn6YOh0bz6BASE4kbHA5nGMyUrgH0hWfcOgkMUloRZdf1q32j80mchCJ
+rF4YsQ6EndnUYzAiXKHGJRUy/6IA2qBH2n/fRiyC2FmmQPtWO4c6t15Vgh4fB3QXSTri8J5r
+577yIiHRE+dq6gg1BfyqCtw0DW56lSFQ7dxyMXeLyTGyjTGPlUDc+FbP23CRK7zDIVujARmm
+mX3bP2lMfCK326FwBZf2Q4Zl/ac1BN8Mcb4wwcnKvRzfEw8d1Y6pkphe7KYH/0MDDqtmuEw2
+D/xdw4FHB16/HW32bcPaMVvFuseczEfrwPGCrCiPHPm++edAoY0rWoBtzHVpgN+s5bset5OR
+snhjuWceuCb+Ga0QV0s/xmIPIQ8VYaXyD5hob6nHEIeskS68Vbni0BpY3nejDPoV3dNHY2Tp
+2fjYNHCpsdTz8yyavQVixoQjZQH9hUb48zZDHCt0Af9Rfq6Et5/Qr8iJqAyEU8JzZtrkpO4O
+HgLU7JTPLxOGzYtOj8JkLmLguVA5kOafAuU4OTEU43utQfS3KYbdEWT2jJ1QaJVS8CjFJrqH
+V99FUsDvgKWSTy5hA9gkQAQE1QdwkoQKpkCWm18KZqTSwNkBfrsEuvHC3Cz4Sy+cJmhr4Hvx
+dyZY8DuuWExUcVCjkeuASLgjLEgahnCbMkyKATazswwTEdfzjcOowjLTdaWFEN/Cg22nF/px
+9MXMtzBkrTkjYPhfywETKoMVH/Nw7rRNZhkOSb5WJV5ynF1BlbzXI7Z8rA/KrIn8aydzwJUU
+qFr8Dw1C7kbE76+SFVWX8fqpwGmQhDAO+kos6ivgN9HDHtuXmwfGeROi2U0WcmFGbAyLo5fT
+LCcNPOMflU27WDXm8m+tjq9naUynqvwg5zBBz/xY67L1R8uOwfZplvRi35iZAJjzMHGirkiB
+W3ZDXbDqEfKl4aCXqU+XhQZsku2z3OtKZOBVVI5p8nGVEfavg6QECRUNUS7qbtMxlj5IwCGl
+babK3W5YVuERjklrrLUYZjqFIZ2yLK3Z2VmSn7yKAb/eRvdEeha+9PKcN11pXPkS/M3t+Vpr
+G+4TqNgqwLVWMvbENp08dS3OAPpZLDnqG9CJV0qacDMjv69X26V3Xp6vuZoKqAPxMG9QKAfX
+E9LInR1Kd0cpRUkb
+--------------090206040704060905090502--
+
+
diff --git a/t/data/gnupg2/emails/special/inline-binary-attachment-with-wrap.txt b/t/data/gnupg2/emails/special/inline-binary-attachment-with-wrap.txt
new file mode 100644
index 000000000..6c84b53a2
--- /dev/null
+++ b/t/data/gnupg2/emails/special/inline-binary-attachment-with-wrap.txt
@@ -0,0 +1,54 @@
+Message-ID: <46BCDCF2.3080704 at mit.edu>
+Date: Fri, 10 Aug 2007 17:47:30 -0400
+From: Christian Ternus <ternus at mit.edu>
+User-Agent: Thunderbird 1.5.0.12 (X11/20070604)
+MIME-Version: 1.0
+To:  rt-recipient at example.com
+Subject: Test Email ID:12
+X-Enigmail-Version: 0.94.2.0
+Content-Type: multipart/mixed;
+ boundary="------------090206040704060905090502"
+
+This is a multi-part message in MIME format.
+--------------090206040704060905090502
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+
+A binary file encrypted with PGP MESSAGE wrapping then attached
+to a mail. As it's .asc some clients attach it as content type is
+text/plain.
+
+--------------090206040704060905090502
+Content-Type: text/plain;
+ name="favicon.png.asc"
+Content-Disposition: attachment;
+ filename="favicon.png.asc"
+
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v1.4.11 (Darwin)
+
+hQIOA076g5OuwfIOEAf/Qxa6rk76JTSjlyb27k1kZwpsvtXocnALZEd1tbJ4HwwH
+o0CQb5Ew6apUzAcfSFdVcZ+IbFXYmjJ7bH1mpG5kjfSz8mEYO0muX+ZrgVeL+Q3J
+/lR+A+THD7LNxnsZe11OfDi1aX8Uz71R03vmK+0o1ZIge3zzdm1BoUT9cmy1QPMi
+aJSdBAJn01EJ++ETfrBqspFj8n6yR/q0BukAcoefaMA0qzrJNQeluMsrqSEjbcuq
+nwXDEv8fhqF6efrWW+wtyMnY/JpIEwmlNbcCI0NZQFM92vkp89nusRPwbP0+z87m
+Qsr1vyLHMX79kqwcRKadf1EW/3eWVqlbrOC+yhvKKAf+MAcixgFDIUDup+NuWpjp
+YUbS357E4yqh2LXogpTZDsvjSL+Z4hKEurKq8TYju8T4exGHkas3VbcWnoPBKiMU
+3RjyVNCQzS3XeOtQv9g8WclENq6Pg8eQVNKd5tbpQ6Sios0J1FYFVXHSr/dQOaET
+Y1jSVKV/6GxVwERpR7DN+yTIVIr//pYnMIb6agNapSKbosvTKNEcGPSjjSB8ixpo
+C9yiZuIhml5lQUXV9ouDDMtHOFtguDUSSm7Ta84wRJ2VcVQUIv/ADg3jBC5Lmp5Q
+CGqwq5Hx7q5AKKZDnGNqHepWzeCiEs5Dg9J9onBYx4zrNMrGVP5uvF+RwK4J0pf0
+XtLAzgFryuv7cswKKxP9vJaEjLDI4Tizdui+la0vA2tJ6gVQ1CPVtREt0s3s+LM0
+oUzgVMvnb1X9KgyazcGp/a+bGHAZwy9/CscxoDYyDrQuUbypNK+f0xefpOURiQ0z
+N86G/DeaRwLkePoGWZySWk5Ktat6594lRP5h1/B/VYXhvBeh98Rm6E7S8gpjJlMr
+6wit2Bd3oPVeqv1fxru9BR1CEl4N+/4ODVwphqMhYM9MplIzGrrCC9bTudKC7g34
+UZ+IQV4GLlCK/1BckJQgkWEHTS5fDxAdwG4F7TWfpGzsp43IlDUr073aL7Z3TfkY
+iyAYGVdnq1EpzVAOPAc2IUMlybUGjoYTmolI1/XIEAxZG9cSFuSMXlrJ2On2kvFO
+/rla7j5euFpucFWumcNDbZ1HIgDUQ0AMxpzIqwVtd8ZGE0OhSqbT6lgP7jZUwiSA
+H4g6/4w+aM5XIy26jifvHOlHzsCraG/xGbzXgYkocXbmSuBhtFdoR4KFzOyFaI7H
+uFoUez7HUuEjl80w77pBeU2v
+=j0Yd
+-----END PGP MESSAGE-----
+--------------090206040704060905090502--
+
+
diff --git a/t/data/gnupg2/emails/special/quoted_inline_signature.txt b/t/data/gnupg2/emails/special/quoted_inline_signature.txt
new file mode 100644
index 000000000..af67b7e09
--- /dev/null
+++ b/t/data/gnupg2/emails/special/quoted_inline_signature.txt
@@ -0,0 +1,26 @@
+To: rt-recipient at example.com
+Subject: Test Email ID:4
+MIME-Version: 1.0
+Content-Type: text/plain; charset=us-ascii
+Content-Disposition: inline
+From: rt-test at example.com
+
+Forwarded email with signature quoted. RT shouldn't bother
+about it.
+
+> ------ Forwarded Message
+> From: Xxx Yyy <xxx.yyy at localhost>
+> Subject: test email
+> 
+> -----BEGIN PGP SIGNED MESSAGE-----
+> Hash: SHA1
+> 
+> This is a test email with inline signature.
+> ID:4
+> -----BEGIN PGP SIGNATURE-----
+> Version: GnuPG v1.4.6 (GNU/Linux)
+> 
+> iD8DBQFGwLI50ygDXYSIHxsRAp40AJ9ErYdLH2SVRXtgRtx7n/FVFOmKDwCgl/0T
+> BeRSaF4Xbi8uGhVIkmU+YCs=
+> =e4u6
+> -----END PGP SIGNATURE-----
diff --git a/t/data/gnupg2/keyrings/.gpg-v21-migrated b/t/data/gnupg2/keyrings/.gpg-v21-migrated
new file mode 100644
index 000000000..e69de29bb
diff --git a/t/data/gnupg2/keyrings/crls.d/DIR.txt b/t/data/gnupg2/keyrings/crls.d/DIR.txt
new file mode 100644
index 000000000..2a29a47b8
--- /dev/null
+++ b/t/data/gnupg2/keyrings/crls.d/DIR.txt
@@ -0,0 +1 @@
+v:1:
diff --git a/t/data/gnupg2/keyrings/gpg-agent.conf b/t/data/gnupg2/keyrings/gpg-agent.conf
new file mode 100644
index 000000000..563b2d1a2
--- /dev/null
+++ b/t/data/gnupg2/keyrings/gpg-agent.conf
@@ -0,0 +1,3 @@
+allow-loopback-pinentry
+#pinentry-program /home/user/projects/rt/t/data/gnupg2/bin/fake-pinentry.pl
+#pinentry-program /usr/bin/pinentry
diff --git a/t/data/gnupg2/keyrings/gpg.conf b/t/data/gnupg2/keyrings/gpg.conf
new file mode 100644
index 000000000..778132856
--- /dev/null
+++ b/t/data/gnupg2/keyrings/gpg.conf
@@ -0,0 +1,20 @@
+# Do not attempt to automatically download unknown keys from external
+# sources
+#
+# This prevents gpg from emitting some warnings (even warnings about
+# operation success) related to key lookup. Removing this setting, or
+# enabling a non-local source for retrieving keys that are not in the
+# keyring, will cause many tests that look for an absence of warnings
+# to fail.
+no-auto-key-locate
+
+# GnuPG versions 2.1+ emit far more logging statements than GnuPG
+# 1.4.x. RT tests don't expect some logging statements, like 'gpg:
+# using "rt at example.com" as default secret key for signing'. This
+# option disables some of that verbosity to allow some tests to pass.
+quiet
+
+# When gpg-agent has 'allow-loopback-pinentry' set, This allows the
+# gpg binary to accept a passphrase via --passphrase, --passphrase-fd,
+# or --passphrase-file.
+pinentry-mode loopback
diff --git a/t/data/gnupg2/keyrings/passphrase b/t/data/gnupg2/keyrings/passphrase
new file mode 100644
index 000000000..30d74d258
--- /dev/null
+++ b/t/data/gnupg2/keyrings/passphrase
@@ -0,0 +1 @@
+test
\ No newline at end of file
diff --git a/t/data/gnupg2/keyrings/private-keys-v1.d/1CE41E7AA5FAAFEE76B5305F221976D0CEDB2768.key b/t/data/gnupg2/keyrings/private-keys-v1.d/1CE41E7AA5FAAFEE76B5305F221976D0CEDB2768.key
new file mode 100644
index 000000000..d31e2b912
Binary files /dev/null and b/t/data/gnupg2/keyrings/private-keys-v1.d/1CE41E7AA5FAAFEE76B5305F221976D0CEDB2768.key differ
diff --git a/t/data/gnupg2/keyrings/private-keys-v1.d/210870ABB621F9D1E253F252D7B53C9C02040F42.key b/t/data/gnupg2/keyrings/private-keys-v1.d/210870ABB621F9D1E253F252D7B53C9C02040F42.key
new file mode 100644
index 000000000..1c031dc89
Binary files /dev/null and b/t/data/gnupg2/keyrings/private-keys-v1.d/210870ABB621F9D1E253F252D7B53C9C02040F42.key differ
diff --git a/t/data/gnupg2/keyrings/private-keys-v1.d/2B67804D7DB2AD2AC92532890FB4C6005EBCE0CE.key b/t/data/gnupg2/keyrings/private-keys-v1.d/2B67804D7DB2AD2AC92532890FB4C6005EBCE0CE.key
new file mode 100644
index 000000000..ac377a3e7
Binary files /dev/null and b/t/data/gnupg2/keyrings/private-keys-v1.d/2B67804D7DB2AD2AC92532890FB4C6005EBCE0CE.key differ
diff --git a/t/data/gnupg2/keyrings/private-keys-v1.d/5647B70F9BF8E8CD28BC49F8FB20653411028576.key b/t/data/gnupg2/keyrings/private-keys-v1.d/5647B70F9BF8E8CD28BC49F8FB20653411028576.key
new file mode 100644
index 000000000..dceafcab8
Binary files /dev/null and b/t/data/gnupg2/keyrings/private-keys-v1.d/5647B70F9BF8E8CD28BC49F8FB20653411028576.key differ
diff --git a/t/data/gnupg2/keyrings/private-keys-v1.d/5F27C38EAF5C322CF050172BDA498DE8D67D2143.key b/t/data/gnupg2/keyrings/private-keys-v1.d/5F27C38EAF5C322CF050172BDA498DE8D67D2143.key
new file mode 100644
index 000000000..3e141cc6b
Binary files /dev/null and b/t/data/gnupg2/keyrings/private-keys-v1.d/5F27C38EAF5C322CF050172BDA498DE8D67D2143.key differ
diff --git a/t/data/gnupg2/keyrings/private-keys-v1.d/656F164F4A0493D8365DBAD67D3616E7702CAA0D.key b/t/data/gnupg2/keyrings/private-keys-v1.d/656F164F4A0493D8365DBAD67D3616E7702CAA0D.key
new file mode 100644
index 000000000..48c3c380d
Binary files /dev/null and b/t/data/gnupg2/keyrings/private-keys-v1.d/656F164F4A0493D8365DBAD67D3616E7702CAA0D.key differ
diff --git a/t/data/gnupg2/keyrings/private-keys-v1.d/DAB23BFE9603D82F14238A74210663638798C598.key b/t/data/gnupg2/keyrings/private-keys-v1.d/DAB23BFE9603D82F14238A74210663638798C598.key
new file mode 100644
index 000000000..afe3aa5db
Binary files /dev/null and b/t/data/gnupg2/keyrings/private-keys-v1.d/DAB23BFE9603D82F14238A74210663638798C598.key differ
diff --git a/t/data/gnupg2/keyrings/private-keys-v1.d/E620D10200EC263627621E130E01865F56C57564.key b/t/data/gnupg2/keyrings/private-keys-v1.d/E620D10200EC263627621E130E01865F56C57564.key
new file mode 100644
index 000000000..8c6e895c9
Binary files /dev/null and b/t/data/gnupg2/keyrings/private-keys-v1.d/E620D10200EC263627621E130E01865F56C57564.key differ
diff --git a/t/data/gnupg2/keyrings/pubring.kbx b/t/data/gnupg2/keyrings/pubring.kbx
new file mode 100644
index 000000000..75f17ffcb
Binary files /dev/null and b/t/data/gnupg2/keyrings/pubring.kbx differ
diff --git a/t/data/gnupg2/keyrings/random_seed b/t/data/gnupg2/keyrings/random_seed
new file mode 100644
index 000000000..81e1ee40e
Binary files /dev/null and b/t/data/gnupg2/keyrings/random_seed differ
diff --git a/t/data/gnupg2/keyrings/signed_old_style_with_attachment.eml b/t/data/gnupg2/keyrings/signed_old_style_with_attachment.eml
new file mode 100644
index 000000000..0bae0d4af
--- /dev/null
+++ b/t/data/gnupg2/keyrings/signed_old_style_with_attachment.eml
@@ -0,0 +1,48 @@
+Message-ID: <45A10003.1090705 at bestpractical.com>
+Date: Sun, 07 Jan 2007 17:13:23 +0300
+From: "Ruslan U. Zakirov" <ruz at bestpractical.com>
+User-Agent: Thunderbird 1.5.0.9 (X11/20061221)
+MIME-Version: 1.0
+To:  rt at example.com
+Subject: test
+X-Enigmail-Version: 0.94.1.0
+Content-Type: multipart/mixed;
+ boundary="------------030903040907010006050500"
+
+This is a multi-part message in MIME format.
+--------------030903040907010006050500
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 7bit
+
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA1
+
+inline
+
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
+
+iD8DBQFFoQADtaRiGUNF96URAmHSAKCDdVnRJ2gb1idhE1ZXEg1JARalsQCgkaU8
+74cnNxVyp/0XwBA73qzkvx0=
+=UmxP
+-----END PGP SIGNATURE-----
+
+--------------030903040907010006050500
+Content-Type: text/plain;
+ name="test.txt"
+Content-Transfer-Encoding: base64
+Content-Disposition: inline;
+ filename="test.txt"
+
+YXR0YWNobWVudAo=
+--------------030903040907010006050500
+Content-Type: application/pgp-signature;
+ name="test.txt.sig"
+Content-Transfer-Encoding: base64
+Content-Disposition: inline;
+ filename="test.txt.sig"
+
+iD8DBQBFoQADtaRiGUNF96URAqmBAJ42zyr06nK6R4dNpZD5067DNDgjRwCgkR+SKgz7OdAq
+p11D7PQGCR1Wuvg=
+--------------030903040907010006050500--
diff --git a/t/data/gnupg2/keyrings/sshcontrol b/t/data/gnupg2/keyrings/sshcontrol
new file mode 100644
index 000000000..c61ee5cbe
--- /dev/null
+++ b/t/data/gnupg2/keyrings/sshcontrol
@@ -0,0 +1,11 @@
+# List of allowed ssh keys.  Only keys present in this file are used
+# in the SSH protocol.  The ssh-add tool may add new entries to this
+# file to enable them; you may also add them manually.  Comment
+# lines, like this one, as well as empty lines are ignored.  Lines do
+# have a certain length limit but this is not serious limitation as
+# the format of the entries is fixed and checked by gpg-agent. A
+# non-comment line starts with optional white spaces, followed by the
+# keygrip of the key given as 40 hex digits, optionally followed by a
+# caching TTL in seconds, and another optional field for arbitrary
+# flags.   Prepend the keygrip with an '!' mark to disable it.
+
diff --git a/t/data/gnupg2/keyrings/trustdb.gpg b/t/data/gnupg2/keyrings/trustdb.gpg
new file mode 100644
index 000000000..14ea734bf
Binary files /dev/null and b/t/data/gnupg2/keyrings/trustdb.gpg differ
diff --git a/t/data/gnupg2/keys/general-at-example.com.2.public.key b/t/data/gnupg2/keys/general-at-example.com.2.public.key
new file mode 100644
index 000000000..5b5f7fa23
--- /dev/null
+++ b/t/data/gnupg2/keys/general-at-example.com.2.public.key
@@ -0,0 +1,29 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mQGiBEbgjJQRBACx8uMHcl9JlKCUU5yh0rBw636MXhKr7cH/+zBTeUVQyfs+J4fo
+HlI3fwJzZOxwXKTwmXsHSKxomeBJxPpFCnwHvn7xTYh6Wtis1Rm2Vr4lsw4gxrFj
+bpk1ISkHo4tO3dPTNx6Jhz+gYzoVUyfclz/byUmEbe2HJkBCQNmC9/lcuwCg477S
+siOdObqTKtQhDqXzFfOHKmsEAKVB8RImtLAO/HPY5+rxiVkfKjsmZovi0PfioGDI
+3o1jcSwq/RwWPZTNB0vnlEx1aD3zedUn1T7ZPnKoRttIv0xYlg9wYhX/xvOA9mKy
+G5aXSypiJiNwJSQfcChlyVHX3R88pURIzPiwWv2OBOvRagE8Bmgz0DFa0/AQfmvI
+vpUmA/4qZVzOJ5hC6fVP+ESKEC6fStvHAEZM3sQK5AnZsuUls3+tgfkD9T6ei5YF
+MXDLMGz3thue1M0QEu3IL7cLoTMalWQpjpyDuqXS8UAsd5cG2eP2iA6Uf2VoKQ11
+w6Q1FyMwTC9B0F8JijwdLF77ERSCtIG+TOA1EtH9HfTV5+BfHbQfZ2VuZXJhbCAy
+IDxnZW5lcmFsQGV4YW1wbGUuY29tPoh3BBMRAgA3AhsDAh4BAheAFiEEdeFWJx3M
+8C3dSnqM32UfoGMsT1AFAlrT1cIFCwkIBwIGFQgJCgsCAxYCAQAKCRDfZR+gYyxP
+UCNKAJ0VgY4ApzOYcq5lfRhgmghJgSFzGgCfXRnslIGTMkArNLx2LSRI6CNMUTG5
+Ag0ERuCMlBAIAPnmaC0Xj3gG+OG6ZQRm7Xlb1Av33vvYSe0AecZ3q3HqvYaWpaYg
+evN7+OC4h3JepUYRVYCiwMC7Ty8XUQIMMmgLP+2TKOFc5PgwEpYvQal62TrU+LZC
+/QazFBJgb4XAqNOT6kTirGdP3fafdTzsrFS2AjHMftj+gXGBvQsZDGCiRI+6r8T6
+O2CVjF7L1/N4VaOvZPvuDmha709c8IWOD6Sbd/2tDHFGAO4zhs+vm1aOEtOk0HTE
+pkxvHphRVQ/8PIr8OGpoxnlC3W9nRAj8I5I/L0qrvrBHVZboTRIMVTj3EBu0ybYx
+mAOHm6P+UWn3nIMaYFJnPDFjSrL8Fs1zgcMAAwUIANuI+3LjbGJ4a0S1B2+Op6MS
+wTXlmGdr7N//gVyH8R72Vo6a1b016SDaW1QwfD41zlWx5Ygq0WqWc5m1y607rJiB
+Uf4YnbzuCdfDeArzMRxtDZFTFgR2K7A5G4yqjCZWU4IXGA9bpW/kSbwTeRvV0QzH
+4Rz9JWZ5ek5wZXmRL09L2947eu6herHqXcarcFTfG8OEncVFGWxRi0Y4G4mXT+he
+T/VNSMC5CKezEz42HhWWN4jd6JPZiBvKl1eMfrOZMPLs+UTLlENh0U6wpbWxlcpa
+hjrLZNTgg70kFZ6FLwuGfekxO/rkUwTo7D1bn6EtMFij0T+RRlda8+UmAYDXjf2I
+SQQYEQIACQUCRuCMlAIbDAAKCRDfZR+gYyxPUET6AJwNpkgxKEdjvIbdB7Y+IPgA
+1wyt+ACdGc0py11j1RLa2gn01+nPnBIS7R8=
+=4sFa
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/t/data/gnupg2/keys/general-at-example.com.2.secret.key b/t/data/gnupg2/keys/general-at-example.com.2.secret.key
new file mode 100644
index 000000000..cdfcff77c
--- /dev/null
+++ b/t/data/gnupg2/keys/general-at-example.com.2.secret.key
@@ -0,0 +1,32 @@
+-----BEGIN PGP PRIVATE KEY BLOCK-----
+
+lQHpBEbgjJQRBACx8uMHcl9JlKCUU5yh0rBw636MXhKr7cH/+zBTeUVQyfs+J4fo
+HlI3fwJzZOxwXKTwmXsHSKxomeBJxPpFCnwHvn7xTYh6Wtis1Rm2Vr4lsw4gxrFj
+bpk1ISkHo4tO3dPTNx6Jhz+gYzoVUyfclz/byUmEbe2HJkBCQNmC9/lcuwCg477S
+siOdObqTKtQhDqXzFfOHKmsEAKVB8RImtLAO/HPY5+rxiVkfKjsmZovi0PfioGDI
+3o1jcSwq/RwWPZTNB0vnlEx1aD3zedUn1T7ZPnKoRttIv0xYlg9wYhX/xvOA9mKy
+G5aXSypiJiNwJSQfcChlyVHX3R88pURIzPiwWv2OBOvRagE8Bmgz0DFa0/AQfmvI
+vpUmA/4qZVzOJ5hC6fVP+ESKEC6fStvHAEZM3sQK5AnZsuUls3+tgfkD9T6ei5YF
+MXDLMGz3thue1M0QEu3IL7cLoTMalWQpjpyDuqXS8UAsd5cG2eP2iA6Uf2VoKQ11
+w6Q1FyMwTC9B0F8JijwdLF77ERSCtIG+TOA1EtH9HfTV5+BfHf4HAwLtyIiCjzEz
+GPB60i8g+ZD5r0nI/4fCiyvtxzeymBsMjkfp0jqrRkkYrqm13fb10+FiXK9DKp+E
+v7tvhu8+i4s2QcNltB9nZW5lcmFsIDIgPGdlbmVyYWxAZXhhbXBsZS5jb20+iHcE
+ExECADcCGwMCHgECF4AWIQR14VYnHczwLd1KeozfZR+gYyxPUAUCWtPVwgULCQgH
+AgYVCAkKCwIDFgIBAAoJEN9lH6BjLE9QI0oAnRWBjgCnM5hyrmV9GGCaCEmBIXMa
+AJ9dGeyUgZMyQCs0vHYtJEjoI0xRMZ0CawRG4IyUEAgA+eZoLRePeAb44bplBGbt
+eVvUC/fe+9hJ7QB5xnerceq9hpalpiB683v44LiHcl6lRhFVgKLAwLtPLxdRAgwy
+aAs/7ZMo4Vzk+DASli9BqXrZOtT4tkL9BrMUEmBvhcCo05PqROKsZ0/d9p91POys
+VLYCMcx+2P6BcYG9CxkMYKJEj7qvxPo7YJWMXsvX83hVo69k++4OaFrvT1zwhY4P
+pJt3/a0McUYA7jOGz6+bVo4S06TQdMSmTG8emFFVD/w8ivw4amjGeULdb2dECPwj
+kj8vSqu+sEdVluhNEgxVOPcQG7TJtjGYA4ebo/5RafecgxpgUmc8MWNKsvwWzXOB
+wwADBQgA24j7cuNsYnhrRLUHb46noxLBNeWYZ2vs3/+BXIfxHvZWjprVvTXpINpb
+VDB8PjXOVbHliCrRapZzmbXLrTusmIFR/hidvO4J18N4CvMxHG0NkVMWBHYrsDkb
+jKqMJlZTghcYD1ulb+RJvBN5G9XRDMfhHP0lZnl6TnBleZEvT0vb3jt67qF6sepd
+xqtwVN8bw4SdxUUZbFGLRjgbiZdP6F5P9U1IwLkIp7MTPjYeFZY3iN3ok9mIG8qX
+V4x+s5kw8uz5RMuUQ2HRTrCltbGVylqGOstk1OCDvSQVnoUvC4Z96TE7+uRTBOjs
+PVufoS0wWKPRP5FGV1rz5SYBgNeN/f4HAwKvZ4Taueg6H/C98kThe+fS6Sf5am17
+5h1AvoghRFIuRUlIhnnhyMobTPkEiLnrqO7BYy91tlvXMyUs/yyqOQWG6yArsCPX
+Ajm3XLIActMQt6HTgV0VVNuB0YGISQQYEQIACQUCRuCMlAIbDAAKCRDfZR+gYyxP
+UET6AJwNpkgxKEdjvIbdB7Y+IPgA1wyt+ACdGc0py11j1RLa2gn01+nPnBIS7R8=
+=94rw
+-----END PGP PRIVATE KEY BLOCK-----
diff --git a/t/data/gnupg2/keys/general-at-example.com.public.key b/t/data/gnupg2/keys/general-at-example.com.public.key
new file mode 100644
index 000000000..67899bc96
--- /dev/null
+++ b/t/data/gnupg2/keys/general-at-example.com.public.key
@@ -0,0 +1,29 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mQGiBEYrdhQRBACpTwAjSJchxV9rgWJj/4GUe92xZ2wWHVrkv7cELO5GD1ie8wtA
+nh57oXfcFhuSmtLTyT/C1Mbzo/tz4Sigf33bZlEMXusp0bLsSz1S/5mslBGRdApJ
+Dz5jETEcakpzWsHA5sHfv8HLn+o8WUDtlGZf+Edi0DqUKSiLRkjWMAdcJwCg7cN1
+IIhhFFAf9Lr3Ny7ngJDwn/sEAJoZVUmhBHo9TipR9lZY1si5U0hA8Yn4XghLp4z9
+0rm8dAgLSZwFI2/zoU5u9qjW0UAo8Sp2SO9F03wQpfUGnpQtea/HVNuwiZVU42bB
+E5gn5EIYrHYT8X7cd+ZpWVGYu2117uoJtRHwnfuh857ocs7M7xeo7IQUZArqeHOG
+i3hABACV9mqnZoPyCOtaBogdXtDlEbqDvYclONJTsSKAfPsNRjJi8lzvJL9ZhtS8
+YKIUvxFu+XX0UVXWoNnzte8Ip/0hwupJu9jIcBJpI9dVEK3H2tWr+NElzML/uch+
+VO7UUmk2H/hF8+a3wXkdEN45FnJCyqC0Kk59OcY3bJIrI56SZrQdZ2VuZXJhbCA8
+Z2VuZXJhbEBleGFtcGxlLmNvbT6IdwQTEQIANwIbAwIeAQIXgBYhBOwegefcPbQn
+iPsOTp+mYsBt4i/CBQJa09gsBQsJCAcCBhUICQoLAgMWAgEACgkQn6ZiwG3iL8K+
+WwCgxUmzX8JKh+8yXvlU0haInT7AOxYAn1ayq7XZU4+QtDhQYaEvFNUR8kKiuQIN
+BEYrdjAQCACrEeGjKhWIYmwiYwobZdDDEcgElzbXNovAbwwCfrE1chlEOuOWDLQi
+214YHQezVWqJsTvR/Bn2rk78S/fYz+x/G0SAkzJ9nM5U8zFjQBm7uxR2x8OJOpX/
+QXAoyMYzVpXa6WppVksmviGl3GODKd9NSq2QmNi1QwDAxyx5785GfK5IEZxobdKN
+bI7Ksj6gObh7ZBn+MaYg0/hvc8cm70Ilerd1H+8kaVjGv24ClpceNWSxrn648DqK
+qPIKhGj9K/5XdIA1I5glgj22coUe4sxgCrA659Y2e8eNvbNLSEIAknqnQIxwGGZo
+2J5dw6Ca3wwgl79vlbgi1+BL/YP7Ij+LAAMFB/4hJOSHaljZATFe0aaGM7UtLEH+
+w7mfTMk6RC9/8jlo6BbFcM/x1hxz2anaxXmiQH5LgOiX+mkZrFqz6SKx3BM2NrXY
+SvbUuuboIZ/KqnbXgQplwzjgqYhvUcC60uW6MEmxaB/osOCAfizvzkYrPC0D00d+
+JZ5aRdYZesYWwUro5YNx1IfQZwe6zYX0UcvI6HmOmR3hdzPHmUQCfXC9SFC1Gf1s
+FTsUsZSKd3fna9sp6B4WNS+EYIun5gUjFIHY5d5V3NRsyOJQzTMm7dU0Oyr0g/kQ
+G9XdzCLG44X9fNiIMg+p7MMNT0/kfZF3UhAGAwg+X1ZcAVGQIglSeya9A4g0iEkE
+GBECAAkFAkYrdjACGwwACgkQn6ZiwG3iL8IS7ACgqGQCKktwadlp3UKmSbxwUruH
+9FQAoLJU+CKSRdQXWzLwPqMr2FYL94P3
+=WJec
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/t/data/gnupg2/keys/general-at-example.com.secret.key b/t/data/gnupg2/keys/general-at-example.com.secret.key
new file mode 100644
index 000000000..c706b7239
--- /dev/null
+++ b/t/data/gnupg2/keys/general-at-example.com.secret.key
@@ -0,0 +1,31 @@
+-----BEGIN PGP PRIVATE KEY BLOCK-----
+
+lQG7BEYrdhQRBACpTwAjSJchxV9rgWJj/4GUe92xZ2wWHVrkv7cELO5GD1ie8wtA
+nh57oXfcFhuSmtLTyT/C1Mbzo/tz4Sigf33bZlEMXusp0bLsSz1S/5mslBGRdApJ
+Dz5jETEcakpzWsHA5sHfv8HLn+o8WUDtlGZf+Edi0DqUKSiLRkjWMAdcJwCg7cN1
+IIhhFFAf9Lr3Ny7ngJDwn/sEAJoZVUmhBHo9TipR9lZY1si5U0hA8Yn4XghLp4z9
+0rm8dAgLSZwFI2/zoU5u9qjW0UAo8Sp2SO9F03wQpfUGnpQtea/HVNuwiZVU42bB
+E5gn5EIYrHYT8X7cd+ZpWVGYu2117uoJtRHwnfuh857ocs7M7xeo7IQUZArqeHOG
+i3hABACV9mqnZoPyCOtaBogdXtDlEbqDvYclONJTsSKAfPsNRjJi8lzvJL9ZhtS8
+YKIUvxFu+XX0UVXWoNnzte8Ip/0hwupJu9jIcBJpI9dVEK3H2tWr+NElzML/uch+
+VO7UUmk2H/hF8+a3wXkdEN45FnJCyqC0Kk59OcY3bJIrI56SZgAAn2a5NRggeMB1
+vXJiR6c1NjYO2+hHCRC0HWdlbmVyYWwgPGdlbmVyYWxAZXhhbXBsZS5jb20+iHcE
+ExECADcCGwMCHgECF4AWIQTsHoHn3D20J4j7Dk6fpmLAbeIvwgUCWtPYLAULCQgH
+AgYVCAkKCwIDFgIBAAoJEJ+mYsBt4i/CvlsAoMVJs1/CSofvMl75VNIWiJ0+wDsW
+AJ9Wsqu12VOPkLQ4UGGhLxTVEfJCop0CPQRGK3YwEAgAqxHhoyoViGJsImMKG2XQ
+wxHIBJc21zaLwG8MAn6xNXIZRDrjlgy0ItteGB0Hs1VqibE70fwZ9q5O/Ev32M/s
+fxtEgJMyfZzOVPMxY0AZu7sUdsfDiTqV/0FwKMjGM1aV2ulqaVZLJr4hpdxjgynf
+TUqtkJjYtUMAwMcsee/ORnyuSBGcaG3SjWyOyrI+oDm4e2QZ/jGmINP4b3PHJu9C
+JXq3dR/vJGlYxr9uApaXHjVksa5+uPA6iqjyCoRo/Sv+V3SANSOYJYI9tnKFHuLM
+YAqwOufWNnvHjb2zS0hCAJJ6p0CMcBhmaNieXcOgmt8MIJe/b5W4ItfgS/2D+yI/
+iwADBQf+ISTkh2pY2QExXtGmhjO1LSxB/sO5n0zJOkQvf/I5aOgWxXDP8dYcc9mp
+2sV5okB+S4Dol/ppGaxas+kisdwTNja12Er21Lrm6CGfyqp214EKZcM44KmIb1HA
+utLlujBJsWgf6LDggH4s785GKzwtA9NHfiWeWkXWGXrGFsFK6OWDcdSH0GcHus2F
+9FHLyOh5jpkd4Xczx5lEAn1wvUhQtRn9bBU7FLGUind352vbKegeFjUvhGCLp+YF
+IxSB2OXeVdzUbMjiUM0zJu3VNDsq9IP5EBvV3cwixuOF/XzYiDIPqezDDU9P5H2R
+d1IQBgMIPl9WXAFRkCIJUnsmvQOINAABVAp0QyiYtzj0z2cOBzeZCSaRLUJ7TEj4
+EER/QuF2JRhFT2ZyU3seQKPd+XwRQIhJBBgRAgAJBQJGK3YwAhsMAAoJEJ+mYsBt
+4i/CEuwAoKhkAipLcGnZad1Cpkm8cFK7h/RUAKCyVPgikkXUF1sy8D6jK9hWC/eD
+9w==
+=Nsws
+-----END PGP PRIVATE KEY BLOCK-----
diff --git a/t/data/gnupg2/keys/recipient-at-example.com.public.key b/t/data/gnupg2/keys/recipient-at-example.com.public.key
new file mode 100644
index 000000000..810627baa
--- /dev/null
+++ b/t/data/gnupg2/keys/recipient-at-example.com.public.key
@@ -0,0 +1,29 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mQGiBEWOOBARBAClfdK23heqW39sO3K0p+KtZkDxWhgpjjRfMSWQWwY++eDFhDr5
+BGG3zxsB2R8MOaHVKetuDjWjmfDi/LvDR8br8+eaLt94F4PBcLa+vVjboYyjvTFs
+2t3leyXjNd+mBTZmUcY6WLM0E+biIJdlDhVOv95n8VwvT10R0J/mGO7hTwCg20NC
+vJJ/fpWzPItFfKHnKg3gO3MD/RhG6CxmsZs+1bdzY07UwABQG8NhoR5Veqg2+uBr
+xiYjemtC+8fAtthEojJ334BE7qDuXEO7eq1R+JOtEj/Hx8gtgWQfDNZlgLA4NUSc
+aU3PthtXD4CnY5MsTrxjpD+bjTde6ziEJ3RHPQQSq2S1fKqo5Bf6H7GYWueRiSGS
+cNK2A/4/WAYFQbj9Jm7zgvPrLRRnk7RP3A4+ABaWEtGMRbpCaFEHd63gjYEH7P3i
+/O6y9kXsYr3SkDbhk6h1Cx8+4fjpZHAd4XbgabZhp5u7Nq3m/TIzQiXMYXrZGleB
+CGoQrERbM9mavEgOHGZEwO1I/JKSHdmAg/adTRAbG+AxZK79u7QhVGVzdCBVc2Vy
+IDxyZWNpcGllbnRAZXhhbXBsZS5jb20+iHcEExECADcCGwMCHgECF4AWIQRyMqPG
+D3loZXljcKVIVe2Ik+ud5wUCWtPg0AULCQgHAgYVCAkKCwIDFgIBAAoJEEhV7YiT
+653nGiwAnRKTxz+PMj0gsVDG/geQf9nTZTozAJ0bEVqiPkxLE7t+OFATnXumOfFN
+YrkCDQRFjjgUEAgAsBzdX0WwQrenF1wgthWNXzmusvnz6EZyyB42oXZMiCd4ncPC
+LTMDzYrWByF+8FPsBv4DtYaLoTStec6z+sygNX7lChpzgz2FbWpvWx4G37Rq7vae
+kgxKoXlX/idmvgvbWDq8Tj9yCst3cEpsDWEIN0gZ6obcuOLL75EaeEiSJj4Uak1h
+gAj1uReW0L0Fi2XkMG8yulOqUNR9LOqvPfNlhoPfQVQZtNOp8hJTVELixjtoSaAW
+8Hq++Jr+z1fKV2eA8XC5MQsIAb8mQV1m+h2TCVN2/+8hjRIWQclKOZPZrv3vC6HG
+5oLXt5atCF8XSzGxmEnUBzeiysZBC+vx1kJ3ZwADBQf+JweTHCZgprtQ9Blh7EPh
+CwZL6urtNtjNtJZzHPaXknXX+kd0Pqa10Zu0SfmZA+MGc4jcZjC+2pvMbhY7nLmq
+yxihbbZkv2i/rtCknIokgs0sidbCKrGhGAHcqCTknm8M3DsJkvGsS9A0oTWBMSp+
+ZAZQCJeKknZVdtNZ6c83p8O/m90p6wV2cOaT6N+NsvT8byNTC3q+dBcxVmci7FMz
+Gz7i1NB8rWqHmIx1oLfDLXmmDbBmiTI7ONUQnLAhCaoADyVy8PRL+Xj4kzoSl/Hy
+B30iM5VQtR3b9OI9K8Yz+Ckl2indtRxSaVZ4Xn1fH25k+ju3AO5soHqCsxY5nAaA
+zYhJBBgRAgAJBQJFjjgUAhsMAAoJEEhV7YiT653n4RUAoJd1DuGANpd7VGGwNfoM
+CCpAk/4TAKCrbh6NpoJr0Ab41toDA5lM/EYYPw==
+=fEl7
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/t/data/gnupg2/keys/recipient-at-example.com.secret.key b/t/data/gnupg2/keys/recipient-at-example.com.secret.key
new file mode 100644
index 000000000..b21ec5ab9
--- /dev/null
+++ b/t/data/gnupg2/keys/recipient-at-example.com.secret.key
@@ -0,0 +1,33 @@
+-----BEGIN PGP PRIVATE KEY BLOCK-----
+
+lQHpBEWOOBARBAClfdK23heqW39sO3K0p+KtZkDxWhgpjjRfMSWQWwY++eDFhDr5
+BGG3zxsB2R8MOaHVKetuDjWjmfDi/LvDR8br8+eaLt94F4PBcLa+vVjboYyjvTFs
+2t3leyXjNd+mBTZmUcY6WLM0E+biIJdlDhVOv95n8VwvT10R0J/mGO7hTwCg20NC
+vJJ/fpWzPItFfKHnKg3gO3MD/RhG6CxmsZs+1bdzY07UwABQG8NhoR5Veqg2+uBr
+xiYjemtC+8fAtthEojJ334BE7qDuXEO7eq1R+JOtEj/Hx8gtgWQfDNZlgLA4NUSc
+aU3PthtXD4CnY5MsTrxjpD+bjTde6ziEJ3RHPQQSq2S1fKqo5Bf6H7GYWueRiSGS
+cNK2A/4/WAYFQbj9Jm7zgvPrLRRnk7RP3A4+ABaWEtGMRbpCaFEHd63gjYEH7P3i
+/O6y9kXsYr3SkDbhk6h1Cx8+4fjpZHAd4XbgabZhp5u7Nq3m/TIzQiXMYXrZGleB
+CGoQrERbM9mavEgOHGZEwO1I/JKSHdmAg/adTRAbG+AxZK79u/4HAwKFk9XsfmB3
+Z/DqZQlA5RqbcZ8AXS2OmGuQyAQOK4SGMNi2BzxieMSk7++KEhbtXNr3NmTqWb7/
+s5Xu46ayhOOcm9BjtCFUZXN0IFVzZXIgPHJlY2lwaWVudEBleGFtcGxlLmNvbT6I
+dwQTEQIANwIbAwIeAQIXgBYhBHIyo8YPeWhleWNwpUhV7YiT653nBQJa0+DQBQsJ
+CAcCBhUICQoLAgMWAgEACgkQSFXtiJPrnecaLACdEpPHP48yPSCxUMb+B5B/2dNl
+OjMAnRsRWqI+TEsTu344UBOde6Y58U1inQJrBEWOOBQQCACwHN1fRbBCt6cXXCC2
+FY1fOa6y+fPoRnLIHjahdkyIJ3idw8ItMwPNitYHIX7wU+wG/gO1houhNK15zrP6
+zKA1fuUKGnODPYVtam9bHgbftGru9p6SDEqheVf+J2a+C9tYOrxOP3IKy3dwSmwN
+YQg3SBnqhty44svvkRp4SJImPhRqTWGACPW5F5bQvQWLZeQwbzK6U6pQ1H0s6q89
+82WGg99BVBm006nyElNUQuLGO2hJoBbwer74mv7PV8pXZ4DxcLkxCwgBvyZBXWb6
+HZMJU3b/7yGNEhZByUo5k9mu/e8Locbmgte3lq0IXxdLMbGYSdQHN6LKxkEL6/HW
+QndnAAMFB/4nB5McJmCmu1D0GWHsQ+ELBkvq6u022M20lnMc9peSddf6R3Q+prXR
+m7RJ+ZkD4wZziNxmML7am8xuFjucuarLGKFttmS/aL+u0KSciiSCzSyJ1sIqsaEY
+AdyoJOSebwzcOwmS8axL0DShNYExKn5kBlAIl4qSdlV201npzzenw7+b3SnrBXZw
+5pPo342y9PxvI1MLer50FzFWZyLsUzMbPuLU0HytaoeYjHWgt8MteaYNsGaJMjs4
+1RCcsCEJqgAPJXLw9Ev5ePiTOhKX8fIHfSIzlVC1Hdv04j0rxjP4KSXaKd21HFJp
+VnhefV8fbmT6O7cA7mygeoKzFjmcBoDN/gcDApr1uenNHLSy8HhuI89qB6BX4tWu
+cd/KhFAijXXHEffpww07jHru2TZaBniTy3gwLXsyb8DOnO4By3LJ6CqTwLSu7CrQ
+u2Nm9uPS9991CGity3lX7i5LVV4wnIhJBBgRAgAJBQJFjjgUAhsMAAoJEEhV7YiT
+653n4RUAoJd1DuGANpd7VGGwNfoMCCpAk/4TAKCrbh6NpoJr0Ab41toDA5lM/EYY
+Pw==
+=5sSw
+-----END PGP PRIVATE KEY BLOCK-----
diff --git a/t/data/gnupg2/keys/rt-recipient-at-example.com.public.key b/t/data/gnupg2/keys/rt-recipient-at-example.com.public.key
new file mode 100644
index 000000000..5babf7148
--- /dev/null
+++ b/t/data/gnupg2/keys/rt-recipient-at-example.com.public.key
@@ -0,0 +1,29 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mQGiBEa8u6QRBADCqPh8w3cO51hPVb1Sttqq5UhCeB5t2dAL8aVEDkpPfV7LItDi
+pN4VqHo2zbGE8q2bCoqW06Ogn0R4xsxEeD9Jq9/k3dHReFL2gbA5F/el1PKXVxG8
+62BnjLkDub8yCdWsg0QDJ6ah7LC7vukTMlJj+3HhoXWEqBrTBKjtFkNIrwCg/LtU
+CEyj+z/cl6NQGZUw2A6+5DUD/2DfcLeSir7xrlcidqO4BxtxdWkEBDAnmARKrqaw
+zSATIK11+HO3Gteovfa08J1XXU2+IFqi2Ssyaqss1kteJE8DmOAcllSXqmCfOmPm
+xoW4gXOQfEv6tkTvF9JST1OZRj5w+ecyxn0282XrzKcxNeLjc+JcLfzPmmuhw4lA
+s/nJA/4tBqT0V7QiwaznBo8Bh7N3sz75x0vgSdZLUA0e2VzHKh9mAfK/FeVS1mcJ
+04iHWvxOGMqEfXnpxUrogME7f/TWNBVfT4M2JW0sHLvaiJhTtIhn+Q67awQ1f0qG
+mGQLIo9OAWZnIfBZ8e2tBwJ3ajiSZ2LIPWFv4Q1hKxOclODpf7QmUlQgVXNlciBC
+b2IgPHJ0LXJlY2lwaWVudEBleGFtcGxlLmNvbT6IdwQTEQIANwIbAwIeAQIXgBYh
+BMYEkamF4Ji66cavW84wxB7CJ0omBQJa0+HzBQsJCAcCBhUICQoLAgMWAgEACgkQ
+zjDEHsInSiZw7gCfRc3hNcOUCZH9lq7PrxDgYjJ45TQAoKen4iVaGPcvNeG3kK3r
+6LEoAOMuuQINBEa8u68QCAD+oPIN4M8WsOGHvnu2mC8mnYKYjHx/K/6L2csQFUJm
+O2QuqCty+02HyX7G7fLy+MYHr5Og+8ZkTcVHHItY08YiWrWlBJEQL19oQNYOs3vI
+DyaJqKQsiV8ycbDDNvlsRdayZfNy1O8ODFMK58OPxPrpMq/5wKpz1P3npdjqrj1n
++nrJkOJjstnQ3oaQdKhPyjpkI6+XzuciPApHwBcNYHEvn5J56c2Rnx7fSlJUMlM5
+7i7pb8wordEEPQUpiv4M4yHkFC0TvJNASHOYNM98Z72bnYVXwVtIumKYycgUzaEZ
+F/qPKehHXSzS2TYNUANcPJzA1hqtFgYDFXpdp8sI8O/jAAMFCAC2kzvOFVyH82wv
+npogbRBmZJooJ2TpQ+wm5r3V4sQckWjM7N62GwBYQPkocPlOGxgEo8ar6YXPtBC3
+Dz8MGZxqO0HEy/Z+9U4TtKtZ94fIxWVGCJ0lzc7oeU8+cD+/yVCGxhPGlR11ioHi
+ULSS2mdzELNf9U2vrZiSauknHZi/J3Qv+Url+KSjrmBALW/9dD9Aj2SkZs4VcWcS
+BBeYVwNNfiTNOCkndw4Gsz0YA7+FzAfzZ4LSPx9jDyYthHzJAbSOxckoK8fFOCQ6
+HSdKQtp4uirWZoun41skoKqCmyZ5XidCYQkThh7sj8vTvsG0ku/W2TQbQmHcXZZ5
+LMS8HtxLiEkEGBECAAkFAka8u68CGwwACgkQzjDEHsInSib8VwCeLdgy5axSbYZ8
+Ez42Kcj8Ku2Q4ZUAnjJ92jFcfC7XWcM/6AX5IyU0jtEW
+=icTP
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/t/data/gnupg2/keys/rt-recipient-at-example.com.secret.key b/t/data/gnupg2/keys/rt-recipient-at-example.com.secret.key
new file mode 100644
index 000000000..5bbd7f505
--- /dev/null
+++ b/t/data/gnupg2/keys/rt-recipient-at-example.com.secret.key
@@ -0,0 +1,33 @@
+-----BEGIN PGP PRIVATE KEY BLOCK-----
+
+lQHpBEa8u6QRBADCqPh8w3cO51hPVb1Sttqq5UhCeB5t2dAL8aVEDkpPfV7LItDi
+pN4VqHo2zbGE8q2bCoqW06Ogn0R4xsxEeD9Jq9/k3dHReFL2gbA5F/el1PKXVxG8
+62BnjLkDub8yCdWsg0QDJ6ah7LC7vukTMlJj+3HhoXWEqBrTBKjtFkNIrwCg/LtU
+CEyj+z/cl6NQGZUw2A6+5DUD/2DfcLeSir7xrlcidqO4BxtxdWkEBDAnmARKrqaw
+zSATIK11+HO3Gteovfa08J1XXU2+IFqi2Ssyaqss1kteJE8DmOAcllSXqmCfOmPm
+xoW4gXOQfEv6tkTvF9JST1OZRj5w+ecyxn0282XrzKcxNeLjc+JcLfzPmmuhw4lA
+s/nJA/4tBqT0V7QiwaznBo8Bh7N3sz75x0vgSdZLUA0e2VzHKh9mAfK/FeVS1mcJ
+04iHWvxOGMqEfXnpxUrogME7f/TWNBVfT4M2JW0sHLvaiJhTtIhn+Q67awQ1f0qG
+mGQLIo9OAWZnIfBZ8e2tBwJ3ajiSZ2LIPWFv4Q1hKxOclODpf/4HAwJnN8tSAfuX
+2fCKI0/luaROdButIgzcL/CCMZv21DHAOzlBDjQB05lP8KiHunQn8ASc+ZDMWiAm
+YDfjNU9pFpr0IQfytCZSVCBVc2VyIEJvYiA8cnQtcmVjaXBpZW50QGV4YW1wbGUu
+Y29tPoh3BBMRAgA3AhsDAh4BAheAFiEExgSRqYXgmLrpxq9bzjDEHsInSiYFAlrT
+4fMFCwkIBwIGFQgJCgsCAxYCAQAKCRDOMMQewidKJnDuAJ9FzeE1w5QJkf2Wrs+v
+EOBiMnjlNACgp6fiJVoY9y814beQrevosSgA4y6dAmsERry7rxAIAP6g8g3gzxaw
+4Ye+e7aYLyadgpiMfH8r/ovZyxAVQmY7ZC6oK3L7TYfJfsbt8vL4xgevk6D7xmRN
+xUcci1jTxiJataUEkRAvX2hA1g6ze8gPJomopCyJXzJxsMM2+WxF1rJl83LU7w4M
+Uwrnw4/E+ukyr/nAqnPU/eel2OquPWf6esmQ4mOy2dDehpB0qE/KOmQjr5fO5yI8
+CkfAFw1gcS+fknnpzZGfHt9KUlQyUznuLulvzCit0QQ9BSmK/gzjIeQULRO8k0BI
+c5g0z3xnvZudhVfBW0i6YpjJyBTNoRkX+o8p6EddLNLZNg1QA1w8nMDWGq0WBgMV
+el2nywjw7+MAAwUIALaTO84VXIfzbC+emiBtEGZkmignZOlD7CbmvdXixByRaMzs
+3rYbAFhA+Shw+U4bGASjxqvphc+0ELcPPwwZnGo7QcTL9n71ThO0q1n3h8jFZUYI
+nSXNzuh5Tz5wP7/JUIbGE8aVHXWKgeJQtJLaZ3MQs1/1Ta+tmJJq6ScdmL8ndC/5
+SuX4pKOuYEAtb/10P0CPZKRmzhVxZxIEF5hXA01+JM04KSd3DgazPRgDv4XMB/Nn
+gtI/H2MPJi2EfMkBtI7FySgrx8U4JDodJ0pC2ni6KtZmi6fjWySgqoKbJnleJ0Jh
+CROGHuyPy9O+wbSS79bZNBtCYdxdlnksxLwe3Ev+BwMCZLtA7pP4k8rwMMZvp9Z4
+YWyUr3tkgQCD5SjnuJBiFPHR4UBhhIJFxfTXASLLIgOzEg+zzXnDiQXSon6MIKYF
+/8NYmeFyEGVb+snL3B0WJ10RhUDp7w3L+uTAiEkEGBECAAkFAka8u68CGwwACgkQ
+zjDEHsInSib8VwCeLdgy5axSbYZ8Ez42Kcj8Ku2Q4ZUAnjJ92jFcfC7XWcM/6AX5
+IyU0jtEW
+=J3At
+-----END PGP PRIVATE KEY BLOCK-----
diff --git a/t/data/gnupg2/keys/rt-test-at-example.com.2.public.key b/t/data/gnupg2/keys/rt-test-at-example.com.2.public.key
new file mode 100644
index 000000000..3234911cf
--- /dev/null
+++ b/t/data/gnupg2/keys/rt-test-at-example.com.2.public.key
@@ -0,0 +1,29 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mQGiBEbl4D0RBADu+s2KTTSMl2/aK3Jkhy9ZTBMFOOCPeleidjV8z7RVGEwTjcby
+B0DbPFC/eK0ot9m/F9CojE6QHK0hqjCKPfARptjG6C/Iqxql0DaRWdo4UYTgT6WW
+hhoKK5DUN57Eu0essy1qTyzcXVIRsQdfkn2ldRKC1XSXnKAiL0vODLtL7wCgoDgj
+tDtOHdi0vlSHvRhPD1F9P3sEAMvSaiEMN/3AlAWQLqrg0rQRr4dpRZqahoffBIeX
+OZGzDSrWtIshMQLLA0HmkphPtRe/y74GBWfpwr6Hs6yl5tP2PSXsAAl+W92st2Vp
+lKJWsLZtvW39nS5cwmv0Etz6j0F9tn7Ah4+x89egzIg9GwU14cS2GNqxYsK3+YMY
+jSXzA/4zEDOQkrRuSEm9JNG5JCFKexAvjLzhYQQRCOI1PrX3iAMzbYFFIgTpr26h
+sPfOb5SMy2OGeECXGd0rxF4+rMCbp0jrQ8B18CWuho7HJK97WuT6NFoaPZCh/pYK
+OQkKGnJCUQNSm5u4uWY6yNs/+U4kvYJvIGw7F7uNWuXcpfREabQmUlQgVGVzdCB0
+aGUgc2FtZSA8cnQtdGVzdEBleGFtcGxlLmNvbT6IdwQTEQIANwIbAwIeAQIXgBYh
+BEz9P33NRkhS25gPJseYWRqoMdv7BQJa0+NnBQsJCAcCBhUICQoLAgMWAgEACgkQ
+x5hZGqgx2/u2ngCeKr9zdI2vdczqTTpKi5h6hK4it6wAn26j8k6zIecPNDbe5XMx
+eE4Ii+OguQINBEbl4D0QCACh7HH146iEmlfRUnyA1VKUWwsurrS6CJbN/DOsaQva
+/ijlCgLCPpcWEr/G0OaqFa7dRIFW2pa+sy6rZUJZY+J7Nn/xmXw1jsaPEPIuB64S
+i18GRLyoUtAftMao0Uugk4iLdSM0VfxxHHb0JJDJzeOPzweILUie4wzANd/y6SmR
+g0bSfsTeVnd1Y5p0Jdjb6QDEnmoZXRRaYQGi7H1NTyEUCrgO1GZ/bH8y3eT57lle
+ludsobEAAiYxXxZHRIYB3k5yB4T6sHfOIC0Pxhsz5YPFuKGWiN7tg3SFVIVJOwa/
+KkgL+M9I1NWCQl0bs3Q16kaH9PfBsBV4N5sxgOZRBguLAAMFCACasCTKivVX8zbU
+RGhl2g0UyVt3G65DlCEEiSSLKCfZ2rV3sJo4XUeLmzejoOwP0RHZgQ2U9iA+1U8f
+9qAa4hMce6AYqK2P2xEz9AIYwp/8gprPFxNB9weY5QxeszoZbM9mKJOsgGk5nJEP
+IU3XHTL0b3PuVW3nTsCTIXdpLZ1rrJyXaSdJfe8+0WQcJRWW8rPrJcYTjEubz8AI
+f/M8OO5DZf9jP4V+kkB42KHPr8nzwZo7uyBTWPHfN1FofmFlclGXI7sBbUp060jz
+FmLdIE1coGd8JtRRIFvFrayley3QR6mKMQO2wOEr6KZ0WNfy6X8kTReEmihGtx16
+8RuiEyfYiEkEGBECAAkFAkbl4D0CGwwACgkQx5hZGqgx2/s4jgCfeukl8vl9mMua
+riu08MsuywQ77y4An1cIwl1x997LwJrR5WF/WoGvPQ61
+=uDbb
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/t/data/gnupg2/keys/rt-test-at-example.com.2.secret.key b/t/data/gnupg2/keys/rt-test-at-example.com.2.secret.key
new file mode 100644
index 000000000..7003324e2
--- /dev/null
+++ b/t/data/gnupg2/keys/rt-test-at-example.com.2.secret.key
@@ -0,0 +1,33 @@
+-----BEGIN PGP PRIVATE KEY BLOCK-----
+
+lQHpBEbl4D0RBADu+s2KTTSMl2/aK3Jkhy9ZTBMFOOCPeleidjV8z7RVGEwTjcby
+B0DbPFC/eK0ot9m/F9CojE6QHK0hqjCKPfARptjG6C/Iqxql0DaRWdo4UYTgT6WW
+hhoKK5DUN57Eu0essy1qTyzcXVIRsQdfkn2ldRKC1XSXnKAiL0vODLtL7wCgoDgj
+tDtOHdi0vlSHvRhPD1F9P3sEAMvSaiEMN/3AlAWQLqrg0rQRr4dpRZqahoffBIeX
+OZGzDSrWtIshMQLLA0HmkphPtRe/y74GBWfpwr6Hs6yl5tP2PSXsAAl+W92st2Vp
+lKJWsLZtvW39nS5cwmv0Etz6j0F9tn7Ah4+x89egzIg9GwU14cS2GNqxYsK3+YMY
+jSXzA/4zEDOQkrRuSEm9JNG5JCFKexAvjLzhYQQRCOI1PrX3iAMzbYFFIgTpr26h
+sPfOb5SMy2OGeECXGd0rxF4+rMCbp0jrQ8B18CWuho7HJK97WuT6NFoaPZCh/pYK
+OQkKGnJCUQNSm5u4uWY6yNs/+U4kvYJvIGw7F7uNWuXcpfREaf4HAwLSZsZRiBBH
+1/BOd08u4kwmEN2SFpszP5OoRitSFg0OZjFWEc8lINI1uMiZwe3vKCenf29nGXsI
+c2w0duaHvCxTLo9VtCZSVCBUZXN0IHRoZSBzYW1lIDxydC10ZXN0QGV4YW1wbGUu
+Y29tPoh3BBMRAgA3AhsDAh4BAheAFiEETP0/fc1GSFLbmA8mx5hZGqgx2/sFAlrT
+42cFCwkIBwIGFQgJCgsCAxYCAQAKCRDHmFkaqDHb+7aeAJ4qv3N0ja91zOpNOkqL
+mHqEriK3rACfbqPyTrMh5w80Nt7lczF4TgiL46CdAmsERuXgPRAIAKHscfXjqISa
+V9FSfIDVUpRbCy6utLoIls38M6xpC9r+KOUKAsI+lxYSv8bQ5qoVrt1EgVbalr6z
+LqtlQllj4ns2f/GZfDWOxo8Q8i4HrhKLXwZEvKhS0B+0xqjRS6CTiIt1IzRV/HEc
+dvQkkMnN44/PB4gtSJ7jDMA13/LpKZGDRtJ+xN5Wd3VjmnQl2NvpAMSeahldFFph
+AaLsfU1PIRQKuA7UZn9sfzLd5PnuWV6W52yhsQACJjFfFkdEhgHeTnIHhPqwd84g
+LQ/GGzPlg8W4oZaI3u2DdIVUhUk7Br8qSAv4z0jU1YJCXRuzdDXqRof098GwFXg3
+mzGA5lEGC4sAAwUIAJqwJMqK9VfzNtREaGXaDRTJW3cbrkOUIQSJJIsoJ9natXew
+mjhdR4ubN6Og7A/REdmBDZT2ID7VTx/2oBriExx7oBiorY/bETP0AhjCn/yCms8X
+E0H3B5jlDF6zOhlsz2Yok6yAaTmckQ8hTdcdMvRvc+5VbedOwJMhd2ktnWusnJdp
+J0l97z7RZBwlFZbys+slxhOMS5vPwAh/8zw47kNl/2M/hX6SQHjYoc+vyfPBmju7
+IFNY8d83UWh+YWVyUZcjuwFtSnTrSPMWYt0gTVygZ3wm1FEgW8WtrKV7LdBHqYox
+A7bA4SvopnRY1/LpfyRNF4SaKEa3HXrxG6ITJ9j+BwMCNKozezApKhzwX/AtE7fD
+QDwoBA8NLATd9yLb+p/As2KHrgFP7/ZcFn2ktY6I7ugLD6Rgc47ueOACJ6taNKo6
+dYHMkoyaGi8LHYNXGkgV5CpEo+nsTQ+lPXogiEkEGBECAAkFAkbl4D0CGwwACgkQ
+x5hZGqgx2/s4jgCfeukl8vl9mMuariu08MsuywQ77y4An1cIwl1x997LwJrR5WF/
+WoGvPQ61
+=+yKX
+-----END PGP PRIVATE KEY BLOCK-----
diff --git a/t/data/gnupg2/keys/rt-test-at-example.com.public.key b/t/data/gnupg2/keys/rt-test-at-example.com.public.key
new file mode 100644
index 000000000..f03803710
--- /dev/null
+++ b/t/data/gnupg2/keys/rt-test-at-example.com.public.key
@@ -0,0 +1,29 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mQGiBEa4o04RBADc+2sFcnuTTaqcKRTmSBQKdXvumT4GoATk194UYMghwprrNb1/
+flXQRk9zLkc0YENFHLMoRUmXKEF+WFxzXrZgHJS096tGn+Ud2FXQbSL47Vl3EHng
+c+jSvvVaZRcEySaCyQrsDR7gWlQtCbxbe96Y2x9jX3Zbih9UYnRvWBeczwCg4tgz
+EOmScnWiwUdyZNQsvXDqvKUD/REf0WjWDaykQvXYZ0aTpc/WMBsDS16nl8GNz5eD
+lCB/JJHKh5QDu89p0557AbVDSi5LCOYAM+v4oi8k5zgiO/7HJptirDkZ27Ichyes
+kzhu3Xr9rPLawie/o4FCfncNLbOAEE4EjEGDGRlyowAaXlW7DWT+TLbxY0qL0uHy
+AQPGA/9AmYHBJQqHTfQ4/QXdCnp+UwYs+rhPh7YHymBLn8Saa14heE9SZcYfSerL
+FAE7KKeBx96+RplgsiaqfWrliUwrV3KnnJICMyqWmn2OyMYiV9iFWqAHFTCsitS2
+q1COv5/Lg1a+XkAwEfoIuLrAXT8buIxXs/BhLc1PD1t9My8srbQdUlQgVGVzdCA8
+cnQtdGVzdEBleGFtcGxlLmNvbT6IdwQTEQIANwIbAwIeAQIXgBYhBPDLO0gs+khW
+gKSgvdMoA12EiB8bBQJa0+PnBQsJCAcCBhUICQoLAgMWAgEACgkQ0ygDXYSIHxsi
+MACgtUoqViAa6qhMNb/UZqsgTsPU+QcAnRLxo54ov6tqdJG466teVmieffODuQIN
+BEa4o2EQCACNIoV50VxT1GMuZIQajsTioxBY62I2ihbg21GwoLZxslecYlQ5P4YH
+MYLGMFm3z1PoxWw7LsOgDOz7FYoDkJ+AURfnFlYzVzoQDh/suELWFrC0ZCQxAjIf
+MTL1vs08RwyWR055uOOFng5vyy8aKXJD2M3rOlHZzfqLSwtpnmA5Egcn0M5fWTmV
+TMSGSiARihih/jxVDAe3/nFRRGWLaQsNqqL5fb7qP+82n3oRDexsWJ+Y16NY1oPL
+KuXIZS/H2D8SHnAxGiymYUD+gTWRLCy0qIHEA+zXU4kYFGt7ZDpBVbZQsCHFk4WC
+QKrQM1vxMyeEk5jiOE4/nuuu+kzK72rjAAMFCACFGXhqJ6P2Vf5illRzKEGSogH9
+wPBh6aa0hbOjqZVa4O5VzIuX/+wmwGKnAkXo7mevRkLkJP4ZGCMGaH2tCO/9S1YG
+V0nuiD8d+5IwbrEh+WM7YXEqNpsOEZqIrOBOTvkuc+p/HQV5E1s3vx0/LiFX+Ii8
+c8A27JSWZsGzH2FIaoxzvwUgPDB9m0GKbldQlukexqG7j/xqBAsG748Ur7kIhVay
+SthUvVHrqc8cLOx9hw6/7UJgKy4WV0a0U08J6AbETtPsIWzubtph5J2DJw1pH3C4
+Fl5XXsmc4nbP+a2xH7yni9lnNIxxOSN/WPtQKCIpL+KhMPTelT85kTL36XVJiEkE
+GBECAAkFAka4o2ECGwwACgkQ0ygDXYSIHxs69QCgxvFIuPg6xpgRDUXE5+xc9GZI
+9VYAn3U+8U7AuSGybzySM8AhzyjKaN3s
+=cI7P
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/t/data/gnupg2/keys/rt-test-at-example.com.secret.key b/t/data/gnupg2/keys/rt-test-at-example.com.secret.key
new file mode 100644
index 000000000..7da968961
--- /dev/null
+++ b/t/data/gnupg2/keys/rt-test-at-example.com.secret.key
@@ -0,0 +1,32 @@
+-----BEGIN PGP PRIVATE KEY BLOCK-----
+
+lQHpBEa4o04RBADc+2sFcnuTTaqcKRTmSBQKdXvumT4GoATk194UYMghwprrNb1/
+flXQRk9zLkc0YENFHLMoRUmXKEF+WFxzXrZgHJS096tGn+Ud2FXQbSL47Vl3EHng
+c+jSvvVaZRcEySaCyQrsDR7gWlQtCbxbe96Y2x9jX3Zbih9UYnRvWBeczwCg4tgz
+EOmScnWiwUdyZNQsvXDqvKUD/REf0WjWDaykQvXYZ0aTpc/WMBsDS16nl8GNz5eD
+lCB/JJHKh5QDu89p0557AbVDSi5LCOYAM+v4oi8k5zgiO/7HJptirDkZ27Ichyes
+kzhu3Xr9rPLawie/o4FCfncNLbOAEE4EjEGDGRlyowAaXlW7DWT+TLbxY0qL0uHy
+AQPGA/9AmYHBJQqHTfQ4/QXdCnp+UwYs+rhPh7YHymBLn8Saa14heE9SZcYfSerL
+FAE7KKeBx96+RplgsiaqfWrliUwrV3KnnJICMyqWmn2OyMYiV9iFWqAHFTCsitS2
+q1COv5/Lg1a+XkAwEfoIuLrAXT8buIxXs/BhLc1PD1t9My8srf4HAwI92BupvSl4
+dvDCGR1Ko7sVJz53j7e72lgpgHGyk/bg7my5XuLRu/NY+U/WoS2Dr8Y77sAcvLHH
+i1NIpVUuXzJyMg1YtB1SVCBUZXN0IDxydC10ZXN0QGV4YW1wbGUuY29tPoh3BBMR
+AgA3AhsDAh4BAheAFiEE8Ms7SCz6SFaApKC90ygDXYSIHxsFAlrT4+cFCwkIBwIG
+FQgJCgsCAxYCAQAKCRDTKANdhIgfGyIwAKC1SipWIBrqqEw1v9RmqyBOw9T5BwCd
+EvGjnii/q2p0kbjrq15WaJ5984OdAmsERrijYRAIAI0ihXnRXFPUYy5khBqOxOKj
+EFjrYjaKFuDbUbCgtnGyV5xiVDk/hgcxgsYwWbfPU+jFbDsuw6AM7PsVigOQn4BR
+F+cWVjNXOhAOH+y4QtYWsLRkJDECMh8xMvW+zTxHDJZHTnm444WeDm/LLxopckPY
+zes6UdnN+otLC2meYDkSByfQzl9ZOZVMxIZKIBGKGKH+PFUMB7f+cVFEZYtpCw2q
+ovl9vuo/7zafehEN7GxYn5jXo1jWg8sq5chlL8fYPxIecDEaLKZhQP6BNZEsLLSo
+gcQD7NdTiRgUa3tkOkFVtlCwIcWThYJAqtAzW/EzJ4STmOI4Tj+e6676TMrvauMA
+AwUIAIUZeGono/ZV/mKWVHMoQZKiAf3A8GHpprSFs6OplVrg7lXMi5f/7CbAYqcC
+RejuZ69GQuQk/hkYIwZofa0I7/1LVgZXSe6IPx37kjBusSH5YzthcSo2mw4Rmois
+4E5O+S5z6n8dBXkTWze/HT8uIVf4iLxzwDbslJZmwbMfYUhqjHO/BSA8MH2bQYpu
+V1CW6R7GobuP/GoECwbvjxSvuQiFVrJK2FS9Ueupzxws7H2HDr/tQmArLhZXRrRT
+TwnoBsRO0+whbO5u2mHknYMnDWkfcLgWXldeyZzids/5rbEfvKeL2Wc0jHE5I39Y
++1AoIikv4qEw9N6VPzmRMvfpdUn+BwMCfVbsm+BZz7/wrtVZRYT3htVzFbLDv6IJ
+CtmJjewXPbDbV0wAAjpDC6b9MBPvraZLAsWfqQCKhzjA/6Kf9vNt6Sa51yrMPiIb
+MKwK8nBWwNsyLLEGwk3WjDtyiEkEGBECAAkFAka4o2ECGwwACgkQ0ygDXYSIHxs6
+9QCgxvFIuPg6xpgRDUXE5+xc9GZI9VYAn3U+8U7AuSGybzySM8AhzyjKaN3s
+=jFJl
+-----END PGP PRIVATE KEY BLOCK-----

commit 5c5ac9a374a2df4c668fbed442f6b4e315dde3e7
Author: Brian C. Duggan <brian at bestpractical.com>
Date:   Thu Mar 15 16:03:38 2018 -0400

    Test modern gpg signing failure warnings
    
    The t/crypt/no-signer-address.t test tries to sign data when gpg has no
    signing key to use. Classic GPG only emitted one warning for this
    failure. Previously, this test checked only for that warning.
    
    Modern GPG emits all the warnings its documentation says it should
    emit. This change checks for those warnings, too.
    
    It's unclear why classic didn't emit these warnings when modern gpg
    does. The warnings are documented in the GnuPG source under doc/DETAILS
    in both classic and modern tags. Try 1.4.18 vs 2.1.18, the versions I
    tested with.

diff --git a/t/crypt/no-signer-address.t b/t/crypt/no-signer-address.t
index 31ba5ebc2..c90fb43c1 100644
--- a/t/crypt/no-signer-address.t
+++ b/t/crypt/no-signer-address.t
@@ -1,6 +1,8 @@
 use strict;
 use warnings;
 
+use GnuPG::Interface;
+
 use RT::Test::GnuPG
   tests         => undef,
   gnupg_options => {
@@ -9,6 +11,8 @@ use RT::Test::GnuPG
   }
 ;
 
+my $gnupg = GnuPG::Interface->new();
+
 my $queue;
 {
     $queue = RT::Test->load_or_create_queue(
@@ -35,8 +39,30 @@ my ($status, undef, $msg) = $ticket->Create(
 );
 ok( $status, "created ticket" ) or diag "error: $msg";
 
-is( scalar @warnings, 1, "Got a warning" );
-like( $warnings[0], qr{signing failed: secret key not available},
-    "Found warning of no secret key");
+# Classic GnuPG doesn't emit the latter two warnings. Modern GnuPG
+# does. Test with:
+# 
+# $ touch a-file
+# $ gpg --status-file gpg-status --default-key "bob at example.com" --sign a-file
+# $ cat gpg-status
+my @gnupg_versions = split /\./, $gnupg->version;
+if ($gnupg_versions[0] >= 2 && $gnupg_versions[1] >= 1) {
+    is( scalar @warnings, 3, "Got warnings" );
+
+    like( $warnings[0], qr{signing failed: No secret key},
+         "Found warning of no secret key");
+
+    like( $warnings[1], qr{INV_SGNR},
+         "Found warning of no usable senders");
+
+    like( $warnings[2], qr{FAILURE},
+         "Found warning of failure");
+}
+else {
+    is( scalar @warnings, 1, "Got a warning" );
+
+    like( $warnings[0], qr{signing failed: secret key not available},
+         "Found warning of no secret key");
+}
 
 done_testing;

commit 710a6118a86d074858ea8c7ebec2c23c5a4ca47a
Author: Brian C. Duggan <brian at bestpractical.com>
Date:   Thu Apr 19 14:25:09 2018 -0400

    Ignore GnuPG 2.1-specific statuses
    
    GnuPG 2.1 emits many new statuses. Some of them helpfully indicate the
    state of the gpg operation. But they do not affect the current
    parser's ability to meet RT's needs and they can safely be ignored.

diff --git a/lib/RT/Crypt/GnuPG.pm b/lib/RT/Crypt/GnuPG.pm
index 035877e88..ccc0ca297 100644
--- a/lib/RT/Crypt/GnuPG.pm
+++ b/lib/RT/Crypt/GnuPG.pm
@@ -1321,10 +1321,10 @@ my %parse_keyword = map { $_ => 1 } qw(
 # keywords as starting point or just ignore as they are useless for us
 my %ignore_keyword = map { $_ => 1 } qw(
     NEED_PASSPHRASE MISSING_PASSPHRASE BEGIN_SIGNING PLAINTEXT PLAINTEXT_LENGTH
-    BEGIN_ENCRYPTION SIG_ID VALIDSIG
+    BEGIN_ENCRYPTION SIG_ID VALIDSIG NEWSIG
     ENC_TO BEGIN_DECRYPTION END_DECRYPTION GOODMDC
     TRUST_UNDEFINED TRUST_NEVER TRUST_MARGINAL TRUST_FULLY TRUST_ULTIMATE
-    DECRYPTION_INFO
+    DECRYPTION_INFO KEY_CONSIDERED PINENTRY_LAUNCHED FAILURE
 );
 
 sub ParseStatus {

commit 0e6fe3cf6b1875ccb0162759f72916bbf847a807
Author: Brian C. Duggan <brian at bestpractical.com>
Date:   Thu Apr 19 14:45:51 2018 -0400

    Allow empty user main key fields in GnuPG status messages
    
    GnuPG 2.1 doesn't include key ids in some status messages like 1.4
    does. This change allows those empty fields.

diff --git a/lib/RT/Crypt/GnuPG.pm b/lib/RT/Crypt/GnuPG.pm
index ccc0ca297..6529ddd15 100644
--- a/lib/RT/Crypt/GnuPG.pm
+++ b/lib/RT/Crypt/GnuPG.pm
@@ -1512,10 +1512,10 @@ sub ParseStatus {
                 Class          => $props[3],
                 Timestamp      => $props[4],
                 KeyFingerprint => $props[5],
-                User           => $user_hint{ $latest_user_main_key },
+                User           => $latest_user_main_key ? $user_hint{ $latest_user_main_key } : undef,
             };
             $res[-1]->{Message} .= ' by '. $user_hint{ $latest_user_main_key }->{'EmailAddress'}
-                if $user_hint{ $latest_user_main_key };
+                if $latest_user_main_key && $user_hint{ $latest_user_main_key };
         }
         elsif ( $keyword eq 'INV_RECP' ) {
             my ($rcode, $recipient) = split /\s+/, $args, 2;

commit 88468e7e78ba690518bc65004e06e13ae9907165
Author: Brian C. Duggan <brian at bestpractical.com>
Date:   Thu Apr 19 15:03:50 2018 -0400

    Use latest configs for GnuPG 2.1
    
    Use a gpg 2.1-specific homedir when using gpg 2.1. Stop the gpg-agent
    attached to that homedir at the start and end of the test.

diff --git a/t/mail/crypt-gnupg.t b/t/mail/crypt-gnupg.t
index 567573e93..2fe33ca0f 100644
--- a/t/mail/crypt-gnupg.t
+++ b/t/mail/crypt-gnupg.t
@@ -2,15 +2,37 @@
 use strict;
 use warnings;
 
+my $gnupg;
+my @gnupg_versions;
 my $homedir;
 BEGIN {
     require RT::Test;
-    $homedir =
-      RT::Test::get_abs_relocatable_dir( File::Spec->updir(),
-        qw/data gnupg keyrings/ );
+    require GnuPG::Interface;
+
+    $gnupg = GnuPG::Interface->new;
+    @gnupg_versions = split /\./, $gnupg->version;
+
+    if ($gnupg_versions[0] < 2) {
+        $homedir =
+            RT::Test::get_abs_relocatable_dir( File::Spec->updir(),
+                                               qw/data gnupg keyrings/ );
+    } else {
+        $homedir =
+            RT::Test::get_abs_relocatable_dir( File::Spec->updir(),
+                                               qw/data gnupg2 keyrings/ );
+        $ENV{'GNUPGHOME'} = $homedir;
+        system('gpgconf', '--quiet', '--kill', 'gpg-agent');
+    }
 }
 
-use RT::Test::GnuPG tests => 100, gnupg_options => { homedir => $homedir };
+END {
+    if ($gnupg_versions[0] >= 2 && $gnupg_versions[1] >= 1) {
+        system('gpgconf', '--quiet', '--kill', 'gpg-agent');
+        delete $ENV{'GNUPGHOME'};
+    }
+}
+
+use RT::Test::GnuPG gnupg_options => { homedir => $homedir };
 use Test::Warn;
 
 use_ok('RT::Crypt');

commit 915d9df3ac33da1c1cb3d73302357a94dbcf0ab9
Author: Brian C. Duggan <brian at bestpractical.com>
Date:   Thu Apr 19 15:13:57 2018 -0400

    Handle new GnuPG 2.1 status messages
    
    GnuPG 2.1 no longer emits PassphraseCheck statuses. Passphrase
    checking is strictly gpg-agent's job in 2.1+. This change handles the
    absence of those statuses.
    
    GnuPG 2.1 emits different warning text for missing plublic keys. This
    change handles the new warning text.

diff --git a/t/mail/crypt-gnupg.t b/t/mail/crypt-gnupg.t
index 2fe33ca0f..8906456a5 100644
--- a/t/mail/crypt-gnupg.t
+++ b/t/mail/crypt-gnupg.t
@@ -51,13 +51,27 @@ diag 'only signing. correct passphrase';
     my @status = RT::Crypt->ParseStatus(
         Protocol => $res{'Protocol'}, Status => $res{'status'}
     );
-    is( scalar @status, 2, 'two records: passphrase, signing');
-    is( $status[0]->{'Operation'}, 'PassphraseCheck', 'operation is correct');
-    is( $status[0]->{'Status'}, 'DONE', 'good passphrase');
-    is( $status[1]->{'Operation'}, 'Sign', 'operation is correct');
-    is( $status[1]->{'Status'}, 'DONE', 'done');
-    is( $status[1]->{'User'}->{'EmailAddress'}, 'rt at example.com', 'correct email');
 
+    if ($gnupg_versions[0] < 2) {
+        is( scalar @status, 2, 'two records: passphrase, signing');
+    }
+    else {
+        is( scalar @status, 1, 'one record: signing');
+    }
+
+    if ($gnupg_versions[0] < 2) {
+        is( $status[0]->{'Operation'}, 'PassphraseCheck', 'operation is correct');
+        is( $status[0]->{'Status'}, 'DONE', 'good passphrase');
+        is( $status[1]->{'Operation'}, 'Sign', 'operation is correct');
+        is( $status[1]->{'Status'}, 'DONE', 'done');
+        is( $status[1]->{'User'}->{'EmailAddress'}, 'rt at example.com', 'correct email');
+    }
+    else {
+        is( $status[0]->{'Operation'}, 'Sign', 'operation is correct');
+        is( $status[0]->{'Status'}, 'DONE', 'done');
+        is( $status[0]->{'KeyFingerprint'}, 'F23574193C1BA40ACB8DC6A4B5A462194345F7A5', 'signing key is correct');
+    }
+    
     ok( $entity->is_multipart, 'signed message is multipart' );
     is( $entity->parts, 2, 'two parts' );
 
@@ -175,7 +189,7 @@ diag 'encryption only, bad recipient';
             Entity => $entity,
             Sign   => 0,
         );
-    } qr/public key not found/;
+    } qr/(public key not found|No public key)/;
 
     ok( $res{'exit_code'}, 'no way to encrypt without keys of recipients');
     ok( $res{'logger'}, "errors are in logger" );
@@ -202,13 +216,23 @@ diag 'encryption and signing with combined method';
     my @status = RT::Crypt->ParseStatus(
         Protocol => $res{'Protocol'}, Status => $res{'status'}
     );
-    is( scalar @status, 3, 'three records: passphrase, sign and encrypt');
-    is( $status[0]->{'Operation'}, 'PassphraseCheck', 'operation is correct');
-    is( $status[0]->{'Status'}, 'DONE', 'done');
-    is( $status[1]->{'Operation'}, 'Sign', 'operation is correct');
-    is( $status[1]->{'Status'}, 'DONE', 'done');
-    is( $status[2]->{'Operation'}, 'Encrypt', 'operation is correct');
-    is( $status[2]->{'Status'}, 'DONE', 'done');
+
+    if ($gnupg_versions[0] < 2) {
+        is( scalar @status, 3, 'three records: passphrase, sign and encrypt');
+        is( $status[0]->{'Operation'}, 'PassphraseCheck', 'operation is correct');
+        is( $status[0]->{'Status'}, 'DONE', 'done');
+        is( $status[1]->{'Operation'}, 'Sign', 'operation is correct');
+        is( $status[1]->{'Status'}, 'DONE', 'done');
+        is( $status[2]->{'Operation'}, 'Encrypt', 'operation is correct');
+        is( $status[2]->{'Status'}, 'DONE', 'done');
+    }
+    else {
+        is( scalar @status, 2, 'two records: sign and encrypt');
+        is( $status[0]->{'Operation'}, 'Sign', 'operation is correct');
+        is( $status[0]->{'Status'}, 'DONE', 'done');
+        is( $status[1]->{'Operation'}, 'Encrypt', 'operation is correct');
+        is( $status[1]->{'Status'}, 'DONE', 'done');
+    }
 
     ok($entity, 'get an encrypted and signed part');
 

commit 6ec7fe28aa6163134ec767a3f0b55898ed2f23a4
Author: Brian C. Duggan <brian at bestpractical.com>
Date:   Thu Apr 19 12:51:02 2018 -0400

    Parse GnuPG subkeys for 2.x
    
    Parse subkeys in colons output for gpg 2.x. Preserve behavior for
    previous versions.

diff --git a/lib/RT/Crypt/GnuPG.pm b/lib/RT/Crypt/GnuPG.pm
index 6529ddd15..677bf976d 100644
--- a/lib/RT/Crypt/GnuPG.pm
+++ b/lib/RT/Crypt/GnuPG.pm
@@ -1654,12 +1654,15 @@ sub ParseKeysInfo {
 
     my %gpg_opt = RT->Config->Get('GnuPGOptions');
 
+    my $gnupg = GnuPG::Interface->new;
+    my @gnupg_versions = split /\./, $gnupg->version;
+
     my @res = ();
     foreach my $line( @lines ) {
         chomp $line;
         my $tag;
         ($tag, $line) = split /:/, $line, 2;
-        if ( $tag eq 'pub' ) {
+       if ( $tag eq 'pub' || $gnupg_versions[0] >= 2 && $tag eq 'sub'  ) {
             my %info;
             @info{ qw(
                 TrustChar KeyLength Algorithm Key
@@ -1687,7 +1690,7 @@ sub ParseKeysInfo {
                 foreach qw(Created Expire);
             push @res, \%info;
         }
-        elsif ( $tag eq 'sec' ) {
+        elsif ( $tag eq 'sec' || $gnupg_versions[0] >= 2 && $tag eq 'ssb' ) {
             my %info;
             @info{ qw(
                 Empty KeyLength Algorithm Key

commit 4974d2d37373d034700d0c4a70a9e1f066e5165d
Author: Brian C. Duggan <brian at bestpractical.com>
Date:   Thu Apr 19 12:59:27 2018 -0400

    Ignore DECRYPTION_KEY GnuPG status message

diff --git a/lib/RT/Crypt/GnuPG.pm b/lib/RT/Crypt/GnuPG.pm
index 677bf976d..0d27d5978 100644
--- a/lib/RT/Crypt/GnuPG.pm
+++ b/lib/RT/Crypt/GnuPG.pm
@@ -1325,6 +1325,7 @@ my %ignore_keyword = map { $_ => 1 } qw(
     ENC_TO BEGIN_DECRYPTION END_DECRYPTION GOODMDC
     TRUST_UNDEFINED TRUST_NEVER TRUST_MARGINAL TRUST_FULLY TRUST_ULTIMATE
     DECRYPTION_INFO KEY_CONSIDERED PINENTRY_LAUNCHED FAILURE
+    DECRYPTION_KEY
 );
 
 sub ParseStatus {

commit b39240348a5489324ee16b70ca070cbb39161d3a
Author: Brian C. Duggan <brian at bestpractical.com>
Date:   Thu Apr 19 13:16:33 2018 -0400

    Use GnuPG 2.1 homedir for t/mail/gnupg-bad.t
    
    Use homedir with 2.1.x-specific configurations. Stop gpg-agent at the
    beginning and end of the test.

diff --git a/t/mail/gnupg-bad.t b/t/mail/gnupg-bad.t
index a9fd45a49..50db69566 100644
--- a/t/mail/gnupg-bad.t
+++ b/t/mail/gnupg-bad.t
@@ -1,13 +1,42 @@
 use strict;
 use warnings;
 
+my $gnupg;
+my @gnupg_versions;
+my $homedir;
+BEGIN {
+    require RT::Test;
+    require GnuPG::Interface;
+    
+    $gnupg = GnuPG::Interface->new;
+    @gnupg_versions = split /\./, $gnupg->version;
+
+    if ($gnupg_versions[0] < 2) {
+	$homedir =
+	    RT::Test::get_abs_relocatable_dir( File::Spec->updir(),
+					       qw/data gnupg keyrings/ );
+    } else {
+	$homedir =
+	    RT::Test::get_abs_relocatable_dir( File::Spec->updir(),
+					       qw/data gnupg2 keyrings/ );
+	$ENV{'GNUPGHOME'} = $homedir;
+	system('gpgconf', '--quiet', '--kill', 'gpg-agent');
+    }
+
+}
+
+END {
+    if ($gnupg_versions[0] >= 2) {
+	system('gpgconf', '--quiet', '--kill', 'gpg-agent');
+	delete $ENV{'GNUPGHOME'};
+    }
+}
+
 use RT::Test::GnuPG
   tests         => 7,
   gnupg_options => {
     passphrase => 'rt-test',
-    homedir => RT::Test::get_abs_relocatable_dir(
-        File::Spec->updir(), qw/data gnupg keyrings/
-    ),
+    homedir => $homedir
   };
 
 my ($baseurl, $m) = RT::Test->started_ok;

commit 0bd6c1d00b4293cfa9ecc4119b471da60e07b638
Author: Brian C. Duggan <brian at bestpractical.com>
Date:   Thu Apr 19 13:18:25 2018 -0400

    Use GnuPG 2.1 homedir for t/mail/gnupg-incoming.t
    
    Use homedir with 2.1.x-specific configurations. Stop gpg-agent at
    the beginning and end of the test.

diff --git a/t/mail/gnupg-incoming.t b/t/mail/gnupg-incoming.t
index 54b30d2a3..a246e3def 100644
--- a/t/mail/gnupg-incoming.t
+++ b/t/mail/gnupg-incoming.t
@@ -1,12 +1,35 @@
 use strict;
 use warnings;
 
+my $gnupg;
+my @gnupg_versions;
 my $homedir;
 BEGIN {
     require RT::Test;
-    $homedir =
-      RT::Test::get_abs_relocatable_dir( File::Spec->updir(),
-        qw/data gnupg keyrings/ );
+    require GnuPG::Interface;
+    
+    $gnupg = GnuPG::Interface->new;
+    @gnupg_versions = split /\./, $gnupg->version;
+
+    if ($gnupg_versions[0] < 2) {
+	$homedir =
+	    RT::Test::get_abs_relocatable_dir( File::Spec->updir(),
+					       qw/data gnupg keyrings/ );
+    } else {
+	$homedir =
+	    RT::Test::get_abs_relocatable_dir( File::Spec->updir(),
+					       qw/data gnupg2 keyrings/ );
+	$ENV{'GNUPGHOME'} = $homedir;
+	system('gpgconf', '--quiet', '--kill', 'gpg-agent');
+    }
+
+}
+
+END {
+    if ($gnupg_versions[0] >= 2) {
+	system('gpgconf', '--quiet', '--kill', 'gpg-agent');
+	delete $ENV{'GNUPGHOME'};
+    }
 }
 
 use RT::Test::GnuPG

commit b6898bc6b60a5ae2a7c7a4e8435013ca4476bdc1
Author: Brian C. Duggan <brian at bestpractical.com>
Date:   Thu Apr 19 13:19:12 2018 -0400

    Use GnuPG 2.1 homedir for t/mail/gnupg-outgoing-signed-plaintext.t
    
    Use homedir with 2.1.x-specific configurations. Stop gpg-agent at
    the beginning and end of the test.

diff --git a/t/mail/gnupg-outgoing-signed-plaintext.t b/t/mail/gnupg-outgoing-signed-plaintext.t
index e51676243..07ed0296e 100644
--- a/t/mail/gnupg-outgoing-signed-plaintext.t
+++ b/t/mail/gnupg-outgoing-signed-plaintext.t
@@ -1,12 +1,43 @@
 use strict;
 use warnings;
 
+my $gnupg;
+my @gnupg_versions;
+my $homedir;
+BEGIN {
+    require RT::Test;
+    require GnuPG::Interface;
+    
+    $gnupg = GnuPG::Interface->new;
+    @gnupg_versions = split /\./, $gnupg->version;
+
+    if ($gnupg_versions[0] < 2) {
+        $homedir =
+            RT::Test::get_abs_relocatable_dir( File::Spec->updir(),
+                                               qw/data gnupg keyrings/ );
+    } else {
+        $homedir =
+            RT::Test::get_abs_relocatable_dir( File::Spec->updir(),
+                                               qw/data gnupg2 keyrings/ );
+        $ENV{'GNUPGHOME'} = $homedir;
+        system('gpgconf', '--quiet', '--kill', 'gpg-agent');
+    }
+}
+
+END {
+    if ($gnupg_versions[0] >= 2 && $gnupg_versions[1] >= 1) {
+        system('gpgconf', '--quiet', '--kill', 'gpg-agent');
+        delete $ENV{'GNUPGHOME'};
+    }
+}
+
 use RT::Test::GnuPG
   tests          => undef,
   text_templates => 1,
   gnupg_options  => {
     passphrase    => 'rt-test',
     'trust-model' => 'always',
+    homedir       => $homedir,
   };
 
 RT::Test->import_gnupg_key('rt-recipient at example.com');

commit 350d0069b465ef8351d177102992e6888cb7e760
Author: Brian C. Duggan <brian at bestpractical.com>
Date:   Thu Apr 19 13:29:22 2018 -0400

    Allow GnuPG 2.1 warning, keybox instead of keyring
    
    GnuPG 2.1 calls a keyring a keybox. Expand the warning regex to match.

diff --git a/t/security/CVE-2012-4735-incoming-encryption-header.t b/t/security/CVE-2012-4735-incoming-encryption-header.t
index 6c1563297..56767cf2c 100644
--- a/t/security/CVE-2012-4735-incoming-encryption-header.t
+++ b/t/security/CVE-2012-4735-incoming-encryption-header.t
@@ -57,7 +57,7 @@ EOF
     warnings_like {
         ($status, $id) = RT::Test->send_via_mailgate($mail);
         ok $id, "created a ticket";
-    } [qr/keyring .* created/,
+    } [qr/key(ring|box) .* created/,
        qr/Failure during GnuPG data: No data has been found\. The reason is 'Invalid packet found'/,
        qr/Failure during GnuPG data: No data has been found\. The reason is 'No armored data'/,
    ];

-----------------------------------------------------------------------


More information about the rt-commit mailing list