1<?php
2
3/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
4
5/**
6 * Decrypt verify tests for the Crypt_GPG package.
7 *
8 * These tests require the PHPUnit 3.6 or greater package to be installed.
9 * PHPUnit is installable using PEAR. See the
10 * {@link http://www.phpunit.de/manual/3.6/en/installation.html manual}
11 * for detailed installation instructions.
12 *
13 * To run these tests, use:
14 * <code>
15 * $ phpunit DecryptAndVefifyTestCase
16 * </code>
17 *
18 * LICENSE:
19 *
20 * This library is free software; you can redistribute it and/or modify
21 * it under the terms of the GNU Lesser General Public License as
22 * published by the Free Software Foundation; either version 2.1 of the
23 * License, or (at your option) any later version.
24 *
25 * This library is distributed in the hope that it will be useful,
26 * but WITHOUT ANY WARRANTY; without even the implied warranty of
27 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
28 * Lesser General Public License for more details.
29 *
30 * You should have received a copy of the GNU Lesser General Public
31 * License along with this library; if not, see
32 * <http://www.gnu.org/licenses/>
33 *
34 * @category  Encryption
35 * @package   Crypt_GPG
36 * @author    Michael Gauthier <mike@silverorange.com>
37 * @copyright 2005-2010 silverorange
38 * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
39 * @version   $Id$
40 * @link      http://pear.php.net/package/Crypt_GPG
41 */
42
43/**
44 * Base test case.
45 */
46require_once 'TestCase.php';
47
48/**
49 * Tests decrypt verify abilities of Crypt_GPG.
50 *
51 * @category  Encryption
52 * @package   Crypt_GPG
53 * @author    Michael Gauthier <mike@silverorange.com>
54 * @copyright 2005-2010 silverorange
55 * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
56 * @link      http://pear.php.net/package/Crypt_GPG
57 */
58class DecryptAndVerifyTest extends Crypt_GPG_TestCase
59{
60    /**
61     * @group string
62     */
63    public function testDecryptVerify()
64    {
65        // {{{ signature
66        $signature = new Crypt_GPG_Signature();
67        $signature->setId('5dGf4//0CqBmlexYjyS7agt4Zn4');
68        $signature->setKeyFingerprint(
69            '8D2299D9C5C211128B32BBB0C097D9EC94C06363');
70
71        $signature->setKeyId('C097D9EC94C06363');
72        $signature->setCreationDate(1258956392);
73        $signature->setExpirationDate(0);
74        $signature->setValid(true);
75
76        $userId = new Crypt_GPG_UserId();
77        $userId->setName('First Keypair Test Key');
78        $userId->setComment('do not encrypt important data with this key');
79        $userId->setEmail('first-keypair@example.com');
80        $signature->setUserId($userId);
81        // }}}
82
83        $expectedResults = array(
84            'data'       => 'Hello, Alice! Goodbye, Bob!',
85            'signatures' => array($signature)
86        );
87
88        // encrypted with first-keypair@example.com, signed with
89        // first-keypair@example.com
90        // {{{ encrypted data no passphrase
91        $encryptedData = <<<TEXT
92-----BEGIN PGP MESSAGE-----
93Version: GnuPG v1.4.9 (GNU/Linux)
94
95hQIOA5+T+RFnKO8SEAf+M1KnzLUvmJMtRTMpy3G2C8iJN1oQPznWDlL6NqxNeS6N
968ie5dXmaG9csQUx1Ys8QRaPDg6ElVIrJOXQ0CIW3mqxZS7+5X5akH5DQ0Ye4Rggx
97yqADpE2z99tlYiNlpEqtG4oAUXzJjWiw8Y6MFg/xAHQUYMhEhZRB4OaSQGVPpxYs
98s6YBfRGmWdNrGgPgcwoEmoHvmVKtVOfBNzO9cpl7k2pV12p6eG6jZ1qcCQkSJZlY
99z2WsnDYZ9wbXuLM4XanGiJiBau0f+nJqDozmOVvc5Avz1qrQD3Dd5C5cy/e+XPdn
100wzTgg3myMrwudAeJZzwMrpcrGwvdzAKE8/7TbNO+3Qf+NqfrApMVUrsFQBdzlLp9
1017cV8nD0uF8ioQjPg0lzJajJdqjEkKB7h9i9fQgL/SBZ29HupsUqDoqmpCVU/B6M0
102YzphMp1qWDRkk5dmpcTppTBsVx1KXCqLQFBIy+Fhc31NZRs1ccaVF3uxaOyMzFhb
103FaWlUq03SjU9SlkYiFwyfyDysK3uoGeLfFh5yhH6ly5kthwLo2ov/GANF3pL0cxv
104mGUcnZbkhk+MWjmz83loedhh2XpTLqRGuhzWPTQlOUQzf6xbj5zCkzWdnbqFQu19
105Et5O3whgv+ufNvD5LGc/lGQeV8wV7EXcde0ISUa8LKyU+eseS+W6IHsQLPupkCQG
106u9KoAQUL3Q3vX1C7WmzS2sudcAulSR8bRYfr6lJ5udRvek7M7tYdLbE1ZLua23T8
107NId1euFhWftuaFjGDRvY37ab+M+zTnMtogSZDkCVyFrM2n4/hFfX9eKX6ljPxPmk
108lEmn966i8e4K0jL0Ydvf7qWEVc5uov7xorYnkwvIbaW8SyUPowenfN3qODv7C0Yj
1090kOgiJnRxZq+MYOR1b1L6fS0y7jDPI+er8ft
110=pycC
111-----END PGP MESSAGE-----
112
113TEXT;
114        // }}}
115
116        $this->gpg->addDecryptKey('first-keypair@example.com', 'test1');
117        $results = $this->gpg->decryptAndVerify($encryptedData);
118        $this->assertDecryptAndVerifyResultsEquals($expectedResults, $results);
119    }
120
121    /**
122     * @group string
123     */
124    public function testDecryptVerifyNoPassphrase()
125    {
126        // {{{ signature
127        $signature = new Crypt_GPG_Signature();
128        $signature->setId('0YWPoUQhN5G4uTi45QLy3GG3RWg');
129        $signature->setKeyFingerprint(
130            '8D2299D9C5C211128B32BBB0C097D9EC94C06363');
131
132        $signature->setKeyId('C097D9EC94C06363');
133        $signature->setCreationDate(1258956262);
134        $signature->setExpirationDate(0);
135        $signature->setValid(true);
136
137        $userId = new Crypt_GPG_UserId();
138        $userId->setName('First Keypair Test Key');
139        $userId->setComment('do not encrypt important data with this key');
140        $userId->setEmail('first-keypair@example.com');
141        $signature->setUserId($userId);
142        // }}}
143
144        $expectedResults = array(
145            'data'       => 'Hello, Alice! Goodbye, Bob!',
146            'signatures' => array($signature)
147        );
148
149        // encrypted with no-passphrase@example.com, signed with
150        // first-keypair@example.com
151        // {{{ encrypted data no passphrase
152        $encryptedData = <<<TEXT
153-----BEGIN PGP MESSAGE-----
154Version: GnuPG v1.4.9 (GNU/Linux)
155
156hQIOAyS/OAcAwUtPEAf+KCytTYgKglBxxU9jAr2i0WVXhBcfyVyFq0N4or4HGMSz
157zBw3eXw/JI77PY4pBxtBDCzPgSox8T8abh6OU3LDu3Zy9kvKcbQxYCSOeJkPBDpK
158OtJ2Sw7CJ7QIvoSyqmRmCjrji9OU3k9ulQQ/5GauAP4QnUnt6lNkz+FOWVl5wzqc
159yjXkRgfmKNBzYVscgdH+YDEUTM+edN+NflzqLk8HLU98TmINbbVJwnPvpCCvRGh4
160SDDaF7WmiIjSqI15Bn7F/l+8ScxvC8EH6wxR9gqS+B9DlqVpjIoYa57SPXLcshvQ
161r02OjC8d8u2oyW9TLqnTirsf347Dzo7rRwm3GbdSrgf9FoQjymAzSx6izx9BsMg+
1626XJV0jSHW+jDjiJRoMAYXKc/s/y8MWRo/irCTPjReLEHWvKmISXynXqxHy1Dw5SN
1631VQAPIH1ftqEVZvGtA11vLPjPYenCRCkkwz8AHqLmqZt6V2A49zPen4+H+Tp/5xr
164s7TQhygo9vmTTzniBqV4lYbOyshcUTVlUErba+ffivKQPNnM+oCZXyUbJTsMlGv+
165elZqUKlNEBXivHnmIbwP/vpZ1WMMewCeij1/Z6OGbbT51dh9qeqPRj96dF351Lbk
166GPxLw5uP2bIzGQjGIBeKHrl2kkRxKk/MX6QPrMHR4KlUpPRfKcQLC0TGPTEPu6ya
1675tKoAdoBuKYNoFk2txsseRQTI/3v5pudNsdh5R/s+PMs+HpxyaFemI3eJb05E4Jx
168zGJX5UiMIb/Yr0zCvlOaDx0NjPwIoUDqtZw6YqA59/BKmaRyqGoXk0UJMK2hAJKN
169yTrj0nUDWFgoKzLHu3EQtYffLUrrjVc6BB8pUmrZKBisGnXFBQvShkzdWmzUT655
170JQfVfeZmgq+UAsfqIlrWBfDcqfyvWeAAZ7qH
171=1oh0
172-----END PGP MESSAGE-----
173
174TEXT;
175        // }}}
176
177        $results = $this->gpg->decryptAndVerify($encryptedData);
178        $this->assertDecryptAndVerifyResultsEquals($expectedResults, $results);
179    }
180
181    /**
182     * @group string
183     */
184    public function testDecryptVerifyKeyNotFoundException_decrypt()
185    {
186        $this->expectException('Crypt_GPG_KeyNotFoundException');
187
188        // was encrypted with missing-key@example.com, signed with
189        // first-keypair@example.com
190        // {{{ encrypted data
191        $encryptedData = <<<TEXT
192-----BEGIN PGP MESSAGE-----
193Version: GnuPG v1.4.9 (GNU/Linux)
194
195hQIOA82wFXJyxZnNEAgAwSoWLKDj/dyotGwYCT60IHC7vPGKbcbd9LMEQ8hOobKS
19621aHeUBft9vlAnZabzPSqeQGYoD0BugONncV45HWlA3QD0KGcVuE6FaWIkexRNsK
197S8MwVpcCgTuVkmSBgZbAS9jl7ODGGNdfGCb20fpgWFx8rv6q14aPUrD1bw5VVWeS
198vLGuRGA+pcBwFlDTRvYtM0UnggfPMn6uH0CKI8uZsKkyHCu2zSCBLYsuo87sY6zJ
1992UwEDyuYvr38HmcNZkb8vk7gpLCeJvFLeLYwpRrQcQy0Q+iElNPFXl5HzlwTNDq5
2005IIiQNlaCV6vUKeX5VhU4i6h4yUWegVoIro4h7KwYQf8CxTrKUnI6WfDuvttU5Z7
201q+7WCTDEnmOT7C2AvOKyfNXlERQnDtY1LHjJe6AEyP2RHnTrHR6Nbi4zQfl4BSZX
202hH+ojM/001ir5/m8cOaMpQzHnMyUIi1HenpjJFo5fsMYg+K7j88X4KWlu3YFeB+O
203xAp/mf7qUiiTKeDdGJE0u3NkFmXz/G/QDp8zwpqG+/UpiEjMm4OdFMwP68l9FWRX
204d1ql5Rfeb50HPIjcmoa1iHq0IJCbT2xXxCm7QyGRy5PwSTMsQnrDUvj6zIBhqusZ
205CTHqBXBH3jsDKTBJGQNwOGA418kcEpRsHY+C53rPhoUDnjzBY7dzIstQFsCy1bPZ
206qNKoAfFsNjinvrwexRqkDypYLxEKs/nrMM4q+yz8n6Q2BqPT6YvOciHAkE0k4I46
207STZqsFTwWxgWmhLlEFvYul3BWEp5Ow5J6+6TZrHCDIFhoQIHesxmsWVxxlgTG+0M
208TS1210ua1nkP+DdWQUBzdDHFxAWWG2pUxzApIPBD2wyeLd1HMVpOjQGpFxMuO8Pd
209ZcGqhMpjECMzc4DOAPFbdKwgWKXi95v4zeUf
210=Ze0h
211-----END PGP MESSAGE-----
212
213TEXT;
214        // }}}
215
216        $this->gpg->decryptAndVerify($encryptedData);
217    }
218
219    /**
220     * @group string
221     */
222    public function testDecryptVerifyKeyNotFoundException_verify()
223    {
224        $this->expectException('Crypt_GPG_KeyNotFoundException');
225
226        // was encrypted with first-keypair@example.com, signed with
227        // missing-key@example.com
228        // {{{ encrypted data
229        $encryptedData = <<<TEXT
230-----BEGIN PGP MESSAGE-----
231Version: GnuPG v1
232
233hQIOA5+T+RFnKO8SEAgAnQrKNrq6O4F0tlex+I5aklo7ElBbSPfa0k4SvX80m+n3
234raM84mpnUzpoXrRa6zSM2IxzF7oWLHHAkBkWaTYdFFWegPbQk4G5rlURZDsLtamb
235y3tXcOMuSMhj3b9XrR2YzfREj0AnuEvYOsd++KpjcEYgcVZOb5tCn+9UKfjop/pZ
236i9sAJMYbdavxoa8DUuIMT6v0C/zNiuSFlQ23kRWB+LUR0tTIoHpb+0U0ITFLSMIr
237jc9K6Zz805Tbu6xX8UXRMIdfJTJkmVWTOD8u8OUPGBxhBuZmbVfH4x+fKybcSVJJ
238akqX28LjaqI+WvD/zh9l78V7foMEWd7porUzBC7z+wgAzh3LBHb2naFg4CZSVlYa
239uuQ64G1ct0uxwVr0p0/4jA5nEK+WgFABPu1YPnIO3md8dBnkfs92g+0msKgB3FOn
240T5+FlgkR+p2Y4knNggSmJGErCMYAq17lCu3bAlHFKwaowCBFoXrFCGBH2qgXD+CM
241Rgq5gWXPLrcqnGPefdV56i+8X+t7oHCzIxX836IQICWMpOdhWMzDz44ctC5IBTJp
242bDgx2pmkU+i51Q+PfK7k8eBIvlrvBGCQcUiNjCoPKAM3OjGNAQF0JraWPG2q0OSM
243aZXKg9aCrQRHceCjwTf8dYRDm6yqGNeVzOnkDibPT3ySYmXKaVDbB8AquS72wE1n
244ktLAxwGOjaM4MSQOGT+8eggngFidGak7957SWZRaqsXdeh6HtxKWni+XTBmWAg2m
2456MnCIiVxD5A75m75ncdbRgtx2Sl9B/kCTC6Ak6hQ3iFpJKuQSZcD2gyGRSE8Ly7u
246cX4jPXcYQaWLi+wVpLaYr3hSsjx2WgVk4oz+X2Kt0qQw+yWIkRw7ErmMl0ML0L7j
247YePAE6UbBSR131nDKmXDUlLsV4GavAclENL5Kp6Yd8ia3h1Jdtl0waH5cCLswhf3
248oi0u0bIalnZwDkFSDGiWgDQyJ8XgPFcUx8fp3dC8FVxXbd3quMxZU6/5K/dQ0LIh
249+Ldlz797sLtl1lHmlaLEzTzJZriLiEiOCZeOrhbgqcGMLurzfsCWYH+BZFzH8iFJ
250yDoUVsWLlvY+6gelAE9Dlzdq9m8rIALwf0Udlsdn/NBaFxarT0nl68u5fSJo8UA2
251MuZd2EB/BKXWvAo5Ea9CQ3DrrDkbwlE3PKrWlMos6dFb/SWxtmKfEeNYhYJsbwsv
252x5MBl/I2kBCHeH4=
253=hojs
254-----END PGP MESSAGE-----
255
256TEXT;
257        // }}}
258
259        $this->gpg->addDecryptKey('first-keypair@example.com', 'test1');
260        $this->gpg->decryptAndVerify($encryptedData);
261    }
262
263    /**
264     * @group string
265     */
266    public function testDecryptVerifyKeyNotFoundException_both()
267    {
268        $this->expectException('Crypt_GPG_KeyNotFoundException');
269
270        // was encrypted and signed with missing-key@example.com
271        // {{{ encrypted data
272        $encryptedData = <<<TEXT
273-----BEGIN PGP MESSAGE-----
274Version: GnuPG v1.4.9 (GNU/Linux)
275
276hQIOA82wFXJyxZnNEAgA0oz13vLInSM0GlhLyIQ5fRXlttY6jOO6xgUH3MhCqExN
277KWLBp9VE+iAzdsnF8hjP+u48qNjYj7Jvyiu8vf1SD9ScYoEiKar0EhZVLfCxX7PC
2784ZWCSEWD5h5nBSabdL00f3vL//GrQtMAwcKP4p+pEyxTEoSg7xp10+F0JqnhlIqh
279vsOeP4vAeYi1v7x0UyoNxzHbfGb3gjwNaWEixBPMekoEnZ8SOORL5yrOctOjcFxz
280hKQFIcJv5vG/Ozs6Wm5q+uvzkZDc2X2dOnb1SpCP5cxNC0g37CiwPIL8ArBcu+yP
2815HSC8YhyyVcQTuIdb0a9t/IK0HNfEOF5gCBCQ462Xwf/X3PQgKvvK76DQ8xvukB8
2826yKwaHv2K8NWFyTuPppiiRztVI13zPt/Jjw/YPNE/qUzONiggqWM0tGtVkbNRzic
283dMEaAfwmZSix0alMPnDuVNyq9AnCUEjkXKTByWDL4pejvB541dA+rtU1D8pV1/8X
284P+oQ+j1EnJitYSTdsnD4YC88/q2RnQTmibmyMclVVk3el6OvZN0Gj0Y2bd9c4LC+
2851reFYZHrX0FcsGIVuHEK/VikTqoWhFOTYUFXFGSE/AGvotfHj2QG3sd297IaSbVi
286C1LwWGvpdZ2yw4RV4Zgrqvg8WOL9maj/mX8aE9/gzs9XH2vuucDBOC0RrQPsM6wb
287ANKoAdExlp+92b69YSNjP2bRQFjN3gFKaGfBm4ULUhRTFnlfBGIIa+2KHUNB7dYk
288obUon363/o/8wdmlXewIwPLK8nQsYXhAyxJcf9o90tqv1L83ZMMLU7FqBkUCmT4a
2899EPXbxnaeO3sa8ZuGm0ilGuIFsK24pBOXtYESZ4ix6y7PZOXCJDun4+dFKcfMG+0
290t8TnSlDaIKEuve9kUGwmO8Z3LsYJEsRCsHyN
291=YNhC
292-----END PGP MESSAGE-----
293
294TEXT;
295        // }}}
296
297        $this->gpg->decryptAndVerify($encryptedData);
298    }
299
300    /**
301     * @group string
302     */
303    public function testDecryptVerifyKeyNotFoundIgnoreVerifyErrors()
304    {
305        $signature = new Crypt_GPG_Signature();
306        $signature->setKeyId('8E3D36B1EA5AC75E');
307
308        $expectedResults = array(
309            'data'       => 'Hello, Alice! Goodbye, Bob!',
310            'signatures' => array($signature)
311        );
312
313        // was encrypted with first-keypair@example.com, signed with
314        // missing-key@example.com
315        // {{{ encrypted data
316        $encryptedData = <<<TEXT
317-----BEGIN PGP MESSAGE-----
318Version: GnuPG v1
319
320hQIOA5+T+RFnKO8SEAgAnQrKNrq6O4F0tlex+I5aklo7ElBbSPfa0k4SvX80m+n3
321raM84mpnUzpoXrRa6zSM2IxzF7oWLHHAkBkWaTYdFFWegPbQk4G5rlURZDsLtamb
322y3tXcOMuSMhj3b9XrR2YzfREj0AnuEvYOsd++KpjcEYgcVZOb5tCn+9UKfjop/pZ
323i9sAJMYbdavxoa8DUuIMT6v0C/zNiuSFlQ23kRWB+LUR0tTIoHpb+0U0ITFLSMIr
324jc9K6Zz805Tbu6xX8UXRMIdfJTJkmVWTOD8u8OUPGBxhBuZmbVfH4x+fKybcSVJJ
325akqX28LjaqI+WvD/zh9l78V7foMEWd7porUzBC7z+wgAzh3LBHb2naFg4CZSVlYa
326uuQ64G1ct0uxwVr0p0/4jA5nEK+WgFABPu1YPnIO3md8dBnkfs92g+0msKgB3FOn
327T5+FlgkR+p2Y4knNggSmJGErCMYAq17lCu3bAlHFKwaowCBFoXrFCGBH2qgXD+CM
328Rgq5gWXPLrcqnGPefdV56i+8X+t7oHCzIxX836IQICWMpOdhWMzDz44ctC5IBTJp
329bDgx2pmkU+i51Q+PfK7k8eBIvlrvBGCQcUiNjCoPKAM3OjGNAQF0JraWPG2q0OSM
330aZXKg9aCrQRHceCjwTf8dYRDm6yqGNeVzOnkDibPT3ySYmXKaVDbB8AquS72wE1n
331ktLAxwGOjaM4MSQOGT+8eggngFidGak7957SWZRaqsXdeh6HtxKWni+XTBmWAg2m
3326MnCIiVxD5A75m75ncdbRgtx2Sl9B/kCTC6Ak6hQ3iFpJKuQSZcD2gyGRSE8Ly7u
333cX4jPXcYQaWLi+wVpLaYr3hSsjx2WgVk4oz+X2Kt0qQw+yWIkRw7ErmMl0ML0L7j
334YePAE6UbBSR131nDKmXDUlLsV4GavAclENL5Kp6Yd8ia3h1Jdtl0waH5cCLswhf3
335oi0u0bIalnZwDkFSDGiWgDQyJ8XgPFcUx8fp3dC8FVxXbd3quMxZU6/5K/dQ0LIh
336+Ldlz797sLtl1lHmlaLEzTzJZriLiEiOCZeOrhbgqcGMLurzfsCWYH+BZFzH8iFJ
337yDoUVsWLlvY+6gelAE9Dlzdq9m8rIALwf0Udlsdn/NBaFxarT0nl68u5fSJo8UA2
338MuZd2EB/BKXWvAo5Ea9CQ3DrrDkbwlE3PKrWlMos6dFb/SWxtmKfEeNYhYJsbwsv
339x5MBl/I2kBCHeH4=
340=hojs
341-----END PGP MESSAGE-----
342
343TEXT;
344        // }}}
345
346        $this->gpg = new Crypt_GPG($this->getOptions());
347
348        $this->gpg->addDecryptKey('first-keypair@example.com', 'test1');
349        $results = $this->gpg->decryptAndVerify($encryptedData, true);
350
351        $this->assertDecryptAndVerifyResultsEquals($expectedResults, $results);
352    }
353
354    /**
355     * @group string
356     */
357    public function testDecryptVerifyNoDataException_invalid()
358    {
359        $this->expectException('Crypt_GPG_NoDataException');
360
361        $encryptedData = 'Invalid OpenPGP data.';
362        $this->gpg->decryptAndVerify($encryptedData);
363    }
364
365    /**
366     * @group string
367     */
368    public function testDecryptVerifyNoDataException_empty()
369    {
370        $this->expectException('Crypt_GPG_NoDataException');
371
372        $encryptedData = '';
373        $this->gpg->decryptAndVerify($encryptedData);
374    }
375
376    /**
377     * @group string
378     */
379    public function testDecryptVerifyBadPassphraseException_missing()
380    {
381        $this->expectException('Crypt_GPG_BadPassphraseException');
382
383        // encrypted with first-keypair@example.com, signed with
384        // first-keypair@example.com
385        // {{{ encrypted data no passphrase
386        $encryptedData = <<<TEXT
387-----BEGIN PGP MESSAGE-----
388Version: GnuPG v1.4.9 (GNU/Linux)
389
390hQIOA5+T+RFnKO8SEAf+M1KnzLUvmJMtRTMpy3G2C8iJN1oQPznWDlL6NqxNeS6N
3918ie5dXmaG9csQUx1Ys8QRaPDg6ElVIrJOXQ0CIW3mqxZS7+5X5akH5DQ0Ye4Rggx
392yqADpE2z99tlYiNlpEqtG4oAUXzJjWiw8Y6MFg/xAHQUYMhEhZRB4OaSQGVPpxYs
393s6YBfRGmWdNrGgPgcwoEmoHvmVKtVOfBNzO9cpl7k2pV12p6eG6jZ1qcCQkSJZlY
394z2WsnDYZ9wbXuLM4XanGiJiBau0f+nJqDozmOVvc5Avz1qrQD3Dd5C5cy/e+XPdn
395wzTgg3myMrwudAeJZzwMrpcrGwvdzAKE8/7TbNO+3Qf+NqfrApMVUrsFQBdzlLp9
3967cV8nD0uF8ioQjPg0lzJajJdqjEkKB7h9i9fQgL/SBZ29HupsUqDoqmpCVU/B6M0
397YzphMp1qWDRkk5dmpcTppTBsVx1KXCqLQFBIy+Fhc31NZRs1ccaVF3uxaOyMzFhb
398FaWlUq03SjU9SlkYiFwyfyDysK3uoGeLfFh5yhH6ly5kthwLo2ov/GANF3pL0cxv
399mGUcnZbkhk+MWjmz83loedhh2XpTLqRGuhzWPTQlOUQzf6xbj5zCkzWdnbqFQu19
400Et5O3whgv+ufNvD5LGc/lGQeV8wV7EXcde0ISUa8LKyU+eseS+W6IHsQLPupkCQG
401u9KoAQUL3Q3vX1C7WmzS2sudcAulSR8bRYfr6lJ5udRvek7M7tYdLbE1ZLua23T8
402NId1euFhWftuaFjGDRvY37ab+M+zTnMtogSZDkCVyFrM2n4/hFfX9eKX6ljPxPmk
403lEmn966i8e4K0jL0Ydvf7qWEVc5uov7xorYnkwvIbaW8SyUPowenfN3qODv7C0Yj
4040kOgiJnRxZq+MYOR1b1L6fS0y7jDPI+er8ft
405=pycC
406-----END PGP MESSAGE-----
407
408TEXT;
409        // }}}
410
411        $this->gpg->decryptAndVerify($encryptedData);
412    }
413
414    /**
415     * @group string
416     */
417    public function testDecryptVerifyBadPassphraseException_bad()
418    {
419        $this->expectException('Crypt_GPG_BadPassphraseException');
420
421        // encrypted with first-keypair@example.com, signed with
422        // first-keypair@example.com
423        // {{{ encrypted data no passphrase
424        $encryptedData = <<<TEXT
425-----BEGIN PGP MESSAGE-----
426Version: GnuPG v1.4.9 (GNU/Linux)
427
428hQIOA5+T+RFnKO8SEAf+M1KnzLUvmJMtRTMpy3G2C8iJN1oQPznWDlL6NqxNeS6N
4298ie5dXmaG9csQUx1Ys8QRaPDg6ElVIrJOXQ0CIW3mqxZS7+5X5akH5DQ0Ye4Rggx
430yqADpE2z99tlYiNlpEqtG4oAUXzJjWiw8Y6MFg/xAHQUYMhEhZRB4OaSQGVPpxYs
431s6YBfRGmWdNrGgPgcwoEmoHvmVKtVOfBNzO9cpl7k2pV12p6eG6jZ1qcCQkSJZlY
432z2WsnDYZ9wbXuLM4XanGiJiBau0f+nJqDozmOVvc5Avz1qrQD3Dd5C5cy/e+XPdn
433wzTgg3myMrwudAeJZzwMrpcrGwvdzAKE8/7TbNO+3Qf+NqfrApMVUrsFQBdzlLp9
4347cV8nD0uF8ioQjPg0lzJajJdqjEkKB7h9i9fQgL/SBZ29HupsUqDoqmpCVU/B6M0
435YzphMp1qWDRkk5dmpcTppTBsVx1KXCqLQFBIy+Fhc31NZRs1ccaVF3uxaOyMzFhb
436FaWlUq03SjU9SlkYiFwyfyDysK3uoGeLfFh5yhH6ly5kthwLo2ov/GANF3pL0cxv
437mGUcnZbkhk+MWjmz83loedhh2XpTLqRGuhzWPTQlOUQzf6xbj5zCkzWdnbqFQu19
438Et5O3whgv+ufNvD5LGc/lGQeV8wV7EXcde0ISUa8LKyU+eseS+W6IHsQLPupkCQG
439u9KoAQUL3Q3vX1C7WmzS2sudcAulSR8bRYfr6lJ5udRvek7M7tYdLbE1ZLua23T8
440NId1euFhWftuaFjGDRvY37ab+M+zTnMtogSZDkCVyFrM2n4/hFfX9eKX6ljPxPmk
441lEmn966i8e4K0jL0Ydvf7qWEVc5uov7xorYnkwvIbaW8SyUPowenfN3qODv7C0Yj
4420kOgiJnRxZq+MYOR1b1L6fS0y7jDPI+er8ft
443=pycC
444-----END PGP MESSAGE-----
445
446TEXT;
447        // }}}
448
449        $this->gpg->addDecryptKey('first-keypair@example.com', 'incorrect');
450        $this->gpg->decryptAndVerify($encryptedData);
451    }
452
453    /**
454     * @group string
455     */
456    public function testDecryptVerifyDual()
457    {
458        // {{{ signature
459        $signature = new Crypt_GPG_Signature();
460        $signature->setId('TAsI7RYUgZAud0wMZu3Iab3bZXo');
461        $signature->setKeyFingerprint(
462            '8D2299D9C5C211128B32BBB0C097D9EC94C06363');
463
464        $signature->setKeyId('C097D9EC94C06363');
465        $signature->setCreationDate(1258955651);
466        $signature->setExpirationDate(0);
467        $signature->setValid(true);
468
469        $userId = new Crypt_GPG_UserId();
470        $userId->setName('First Keypair Test Key');
471        $userId->setComment('do not encrypt important data with this key');
472        $userId->setEmail('first-keypair@example.com');
473        $signature->setUserId($userId);
474        // }}}
475
476        $expectedResults = array(
477            'data'       => 'Hello, Alice! Goodbye, Bob!',
478            'signatures' => array($signature)
479        );
480
481        // encrypted with both first-keypair@example.com and
482        // second-keypair@example.com, signed with first-keypair@example.com
483        // {{{ dual encrypted, signed data
484        $encryptedData = <<<TEXT
485-----BEGIN PGP MESSAGE-----
486Version: GnuPG v1.4.9 (GNU/Linux)
487
488hQIOA5+T+RFnKO8SEAgA2lVokiF7FeQvT0EjgH/X2mXNbz8ukKM7WdIAsIFumg1a
489Skfsqn1plAHs3f3OhY16tBb1WW4J8WXEt6g3yHls92XpRUgRTUjVCr4HIvMwSB3A
490V/ZQdGs3NK3wh0rMu6q/Ski10dEwP7SUE+w19AmiCQfmKYLUJmCgPLmVm4IapAad
491lIpNalUHzXhHuuIzKut9H0n6+p0jUPW2JehFFGud66MS5PaGbDPZS2lKiPjytSzl
492pYipuglregaaMR5KsBYxP4A6MnMaRaZriTeItROJ0PTBMaq93+IyrnwulqEsWk6t
4938ahRM4FmC+U/Z9tgWxTEKU28zthjxKXW5JOceGxeBQgAoxRAhd75Ok406YG4VucC
494rxLSLIKIt0TAlbTWncJq9qhLA86+RL4oqUYfDjq9o9lrfkPQO3xfHam/43j2yaF3
495HeJwSDwU0V4YZ6R9ZVdHMYw7w7yynn2HmNesDUWRfI7IRwMFtgKGvv6qpdUOYmWN
496MhQ+HxnwMgvHNaz6TRYpQzVvtpB6q9J3/xCM3+uKxDaJLbJux50s6FpnCRnLpGWs
4971Tj8l9BSMlAGtP6dMR3MysZS/UnXwdTmDFR9ARS+HxsP89I95UAKLWaouShoo9dX
498QIs0pLkQs+CWpjPVAp8TT0Vj1juThk4bJarti/BaZOyzUAOrleDWOO8VVsuM1Bw2
499xIUCDgOy9U5HV+IkUBAIANU8DKkvHNzkx68XvxXXVsBsWTGNznrNGUjqSfhyS9pW
500lRnq7qB2c2UgMvMTnMWyogQ/gKEotdeqKCXdMLBkataB1xkMbCvUZzdj2A/OPtDD
501xT7ogqn82YaEjlfEqEbqBi1lvq2tuC/YsGti0c6zDUFoZax6QWL+NU3eCY6ZxBSx
502NuZ4hiBJqPeHVP92SCnsC2BwqUy7W0rUuKnXo3VM1syd98TZjdM6SqBVQ61YX3u2
503rS1YiphYd2WeNU/bSZ79bHMMPt3joQ+nCGKvGSIlCVxAy4EPWDb2KFw0yUmXUub1
504tLnrKAOdufWC780LuhgINLb1PSmzogRmvk4ih687h9wH/0hx4olXvkUHZAcpnMHT
505zGK8NQeoxfSmcJrYNa1TpQ8FjLad7eycnoIASC4qS7IsJ0xzedWd2eqLdc+9qIiv
50668gW2MjZOqQ5PvcZk1eqOVUNH8Ua8Wfv82ljk1VE0L9zzrS8nGLq5prjaK400Vwh
507MVh129jyjkpgGZhIHC4cNGBQl1zKDw9WWd1Rk92rpmsvb7JZVNDg0DjW3hrwc7v2
508WbGqEXG5Sown6J1gX4wKIpn9roOE9ZSu1hvugPc28IZIne4rL05Pd4qVnp87SiUh
509wHs82nXGhqcscZx2NiT2F///6j97+ccd+619iabKkpfwGunQZHfxit+7bfHuX+5O
510tFHSqQEsRi3gNrRlMRDnPjLHXjR+x80anNOwxBfZP1qjdTsFucqmZ57KUdIpUGmi
511uRgBZhuVRz8ryTcw5/nACkeKLkxOJLHGgNDilJtNO8tv+BbQDRZzsNYTM7ZNcAo4
512JqkWrMb43BTbAbdgTyEkWhqw6cFQEePYqXcbeDh3c77U5joGZW+iPZQlJbBCMC6e
513KBH+5iH8NzPpP6yZq5e5p1ZOkb2PY3EXtL8aemU=
514=S/2J
515-----END PGP MESSAGE-----
516
517TEXT;
518        // }}}
519
520        // decrypt with first key
521        $this->gpg->addDecryptKey('first-keypair@example.com', 'test1');
522        $results = $this->gpg->decryptAndVerify($encryptedData);
523        $this->gpg->clearDecryptKeys();
524        $this->assertDecryptAndVerifyResultsEquals($expectedResults, $results);
525
526        // decrypt with second key
527        $this->gpg->addDecryptKey('second-keypair@example.com', 'test2');
528        $results = $this->gpg->decryptAndVerify($encryptedData);
529        $this->gpg->clearDecryptKeys();
530        $this->assertDecryptAndVerifyResultsEquals($expectedResults, $results);
531    }
532
533    /**
534     * @group string
535     */
536    public function testDecryptVerifyDualOnePassphrase()
537    {
538        // {{{ signature
539        $signature = new Crypt_GPG_Signature();
540        $signature->setId('3OJnX+PqHI0YUCeFxICCxhPHY1Q');
541        $signature->setKeyFingerprint(
542            '8D2299D9C5C211128B32BBB0C097D9EC94C06363');
543
544        $signature->setKeyId('C097D9EC94C06363');
545        $signature->setCreationDate(1258955916);
546        $signature->setExpirationDate(0);
547        $signature->setValid(true);
548
549        $userId = new Crypt_GPG_UserId();
550        $userId->setName('First Keypair Test Key');
551        $userId->setComment('do not encrypt important data with this key');
552        $userId->setEmail('first-keypair@example.com');
553        $signature->setUserId($userId);
554        // }}}
555
556        $expectedResults = array(
557            'data'       => 'Hello, Alice! Goodbye, Bob!',
558            'signatures' => array($signature)
559        );
560
561        // encrypted with both first-keypair@example.com and
562        // no-passhprase@example.com, signed with first-keypair@example.com
563        // {{{ dual encrypted, signed data
564        $encryptedData = <<<TEXT
565-----BEGIN PGP MESSAGE-----
566Version: GnuPG v1.4.9 (GNU/Linux)
567
568hQIOA5+T+RFnKO8SEAgA7zHd9KH/C2GCM9H7pdMS76PXGfmhGPyQAtokBQgF8G1/
569orldCnTUnxmZejbOwYhYVEh5zlnYshlCpUSsGBw+sH7XiC8eorCD0YJj5NDBp8W6
570VtvGkMqqG9tDJk6TfKornFl+H7xpiwXox5T/swnpJcJ6qaTXBtLb7HViiwTTu5Zk
571QbWqSvIOigIkiuTnv898/eeEIh9gg6ScRVZOyZ7P2usDaOWqVVNJmkaLIaWxOYck
572Go3hnYAhkfjpMcgAMkqtXPWIS8OrfY8wOXxXNA4EjvrHs+5/yHbZmj/5bBA9CuGJ
573UctQqF9ZtZsagSpK0WTJCt4RkX3jKqK9tJVQzBuKZgf/Up3Zi6Lfg6iINm4qsd1h
574Dusuuxw0vgGoMc6P7QOMFmeSs3g/yYQKaHomWqEVg0LpC2FHOqceqZRZJd4XMcsz
575uCF95lx7Tm1ozgEhBgQNSQVoAA5/MYXlKo3YQGEIyU9Gx4f2v/8XV3umYXjGfJY9
576adBHLIvPFeeze1/f11ztZsgLr3DBP01/O6qLi91dwsqpzQXzjurVYIHJdCD+JviZ
5772CjwkcpUTHx5vXNiobMcBjtogjP7d4W8DJ0La5+WVujV0nxHiE9mEXuct8TajCY6
578/40UIdtHEPWc08ccXXjQaFKbJxYGDMOJzQ8LPdHqa3RubmMADqzH4W3/SSmRsibd
5794YUCDgMkvzgHAMFLTxAH/R3ryj2BUP6C/aYfgGqi+FOVoHVR5kiz6Z2nBEKqntwZ
580njdKD+pvuw9fxaNhNNZy3UlKnIdonNb/A3upEeR81opP+HWCgXUlcgucQ7VXiUPd
581mnQAR+cTrFgTXf+B54VHwDED5RVDm4/e29casiNyULm6xWFYqfJMGBvEGrflq1BW
582QSYlpc0ijqkER+VNy49Dy/qY1TRUBZ84+RmL2L/18zQbdekMoLUDxJOEoo0C65ER
5835ReLlFN2nI0MC8O5ZU8PfjDXXQ7qnQhz/2kxorNiQl654V7ZsEWkVLF9yejZXSzU
584ynWANJdCnWLMjOnrQPm1+b2Yi8pcgtpIPsBdTIHn4fAH/iW0Uxltx9ZrV7kvrDDj
585Izc4/ocn3Z0c/47Rv62MTYcxVYzFdP+WxisMI2LV88g1Zu9rOKR1k7UkNGNlfklS
5865CSApTnm3MC9/w54dacPohZ7SrQlTSHJxfRINH7H3DOuaH9awf+ntwUks73mXjT5
587ikSJ2D05Kbf8++jLhRRKLPZS8bOmSw2KTaCbtk7LX4pEIu9d6kig6g8Wj3h9dlQs
588QXCKL14/8cSGrxXXWHOuL9abnxZTwenbn5B5FqBPoiRKqSFToiLd/pBWjG/aieju
589Rm+Uyyddl+ISJUnv0AAiOxfifJmTdUsT5LZLkYG4CUyX2T3JiZ2L4msF4S3U70wp
590PtbSqAG3xVRFlZY2jLeW8btez7XkzB9fhvVd1Hee6EXRnF5/BcLkqy8sYvx1MHkT
591eMzttOs1NRrjXy4+zUqo//59gQ46zwYd0NA/Ga6pl1kn8+xM76DCcI4LhdZN75rR
592ZUcyEqBKX9RNefMD7cR6kYoljGfnT3Mjd+0eTdF/Glk0ElVjbMtQclG0o/7wlI7m
593+b2E6/e0qZedOCq48+mIRv0tjRuoFiydM88aGg==
594=IgJ0
595-----END PGP MESSAGE-----
596
597TEXT;
598        // }}}
599
600        // decrypt with no passphrase
601        $results = $this->gpg->decryptAndVerify($encryptedData);
602        $this->assertDecryptAndVerifyResultsEquals($expectedResults, $results);
603
604        // decrypt with first key
605        $this->gpg->addDecryptKey('first-keypair@example.com', 'test1');
606        $results = $this->gpg->decryptAndVerify($encryptedData);
607        $this->gpg->clearDecryptKeys();
608        $this->assertDecryptAndVerifyResultsEquals($expectedResults, $results);
609    }
610
611    /**
612     * @group string
613     */
614    public function testDecryptAndVerifyDualNoPassphraseKeyMissing()
615    {
616        $this->expectException('Crypt_GPG_BadPassphraseException');
617
618        // encrypted with both first-keypair@example.com and
619        // second-keypair@example.com
620        // {{{ dual encrypted data
621        $encryptedData = <<<TEXT
622-----BEGIN PGP MESSAGE-----
623Version: GnuPG v1.4.6 (GNU/Linux)
624
625hQIOA5+T+RFnKO8SEAf7BO/zLK6gDt5epMOEnHc9ESdSTy8yExdoSxHhvTFxWfwi
626AwMtBEur8sotSVt+Q87xYzjzE77+FQYS9oYCivlK/Nedblj3MiRuUWhM+Q9tbP3b
627KbwEwaQlrpNphQsKZOWkliZWmFJWnQ1s1Pm6lPlhwTNhcwkapm8EXuWFExJnY9yW
628EZjUOhVmnkitKykKup8Brvfm2QpGXoFZtHFKXTi162Lue9N0tDm6s3JnCIhMFQgI
629fyAikcsJKpbUgeGmzlWJO8QkH81QMuKpqfUb8R1dswhDp6RKXhoXS43zkhH8QSbM
630Cp9AWdv3qsWBUqzWavCxjtIsogYO+gFLl/Vuw5Y87Af/b7OQgLP1v6xKZcrTvFCF
631hxGxn+5M8E2GyJaKpQ1GZ+Wv+IzPGetm7rWf6q71hchAkxFMczIPSK7aARm9CNVo
6327tCdcUmUTgLhG1/0OfmkbwJUjdSpOtz8+TvIZa20Jj9a1G8WT3KTeivKMqBPhgk4
633sD7OJPDCYQNSQEw6pAn4oBrhJlDUkpCK6wIbUhzeq3MUwtM1e+qpCr/k4In4NVq6
634cmoC7W//9J69ecuxmiUHRhZ4CALRxQMAsSxMRnNJ26JY4ko82Rfvbrz8QEmKcIyT
635bTdAMsZ18m9XXrnc2ACDDMQyUkneQDUZSt7V67ZiN4Upi295CynIbNEMmcH/13Aa
636aoUCDgOy9U5HV+IkUBAIALGICOFzyfquWZ0ZhPGVdDWx1yNcApnzIgZx1JbBpMyc
6372jb9aQHwGId26gv/ym/M/3FJ0lv+IAcktMjO4dwYLnUuBa6BOFFybZi3gYvXtSuy
638iW4ygVjIsYixhvbsyaVCoB/MsNBFrQAHEShaxALBkI/dv+yyD8BifU4Yj9LFcAZO
639mFDraOgYfHsur5eevYTXozf5wU7phu9v6zo5bk8zgZSqs8AgyscstZWCqCtR/cG0
640t9lAIovGPsIcA12qvkm/A0WiBMEWhGryzHTv9oRsFztOFtqH+MmLdlvWjElw8hKt
641fFJB+bhHNO9BUIrwnuH79cA4aXOy1+xG+ECs7oJbcisIANqJKalQLgBYEjbucpDg
642O8i/c4RmV9J7VczpZp7ZREMpTmv9nV849OFXT1strsb/+vXOXOyLToG1gOxRfJr2
643q9jFjpyMAtrr/aHhXMKK1OMhhcdkQMEKuHTvon5KleZOQoVmIqa3kUtWNW1vFBIP
644UfJFH202EJLOLC25rXCtzRsJE0HWiYDyLqKMQcSQhTcngLBLmeDLH3DeGUIDwcZe
645oWgUg8wB/oSoU4AchShzO+yM6bcmffcaHFqwll9gdu9walnJAAOb8+r6LGGlsGTV
646qhnR0LM3Khp+HOFdaxcQT6BV1aw/D6Z5hIi+Am0VTi0HlFr/gwleyYaP+742Z6K0
647s8bSVgFT2Pjik+byARWzRwWjmi0jT7QsgITM73aBKPDXiArEPkv8YtC9HzUj0lCY
648gX7Eg2ZqISULFydBckMJ6drojMMQiqZBeEc09GupSBL1zldnKHfiXBTw
649=QYjj
650-----END PGP MESSAGE-----
651
652TEXT;
653        // }}}
654
655        // #21148: Make sure that proper exception is thrown
656        // when decrypting without specyfying a passphrase
657
658        // in this case we remove one of private keys to make
659        // sure proper exception is thrown also in this case
660        $this->gpg->deletePrivateKey('first-keypair@example.com');
661
662        $this->gpg->decryptAndVerify($encryptedData);
663    }
664
665    /**
666     * @group string
667     */
668    public function testDecryptVerifyDualSignatories()
669    {
670        // {{{ signature1
671        $signature1 = new Crypt_GPG_Signature();
672        $signature1->setId('7PujVkx4qk28IejcD6BirrwBmRE');
673        $signature1->setKeyFingerprint(
674            '8D2299D9C5C211128B32BBB0C097D9EC94C06363');
675
676        $signature1->setKeyId('C097D9EC94C06363');
677        $signature1->setCreationDate(1258956025);
678        $signature1->setExpirationDate(0);
679        $signature1->setValid(true);
680
681        $userId1 = new Crypt_GPG_UserId();
682        $userId1->setName('First Keypair Test Key');
683        $userId1->setComment('do not encrypt important data with this key');
684        $userId1->setEmail('first-keypair@example.com');
685        $signature1->setUserId($userId1);
686        // }}}
687        // {{{ signature2
688        $signature2 = new Crypt_GPG_Signature();
689        $signature2->setId('AhrDdkdcBsEsOSQOYENhl5C7auc');
690        $signature2->setKeyFingerprint(
691            '880922DBEA733E906693E4A903CC890AFA1DAD4B');
692
693        $signature2->setKeyId('03CC890AFA1DAD4B');
694        $signature2->setCreationDate(1258956025);
695        $signature2->setExpirationDate(0);
696        $signature2->setValid(true);
697
698        $userId2 = new Crypt_GPG_UserId();
699        $userId2->setName('Second Keypair Test Key');
700        $userId2->setComment('do not encrypt important data with this key');
701        $userId2->setEmail('second-keypair@example.com');
702        $signature2->setUserId($userId2);
703        // }}}
704
705        $expectedResults = array(
706            'data'       => 'Hello, Alice! Goodbye, Bob!',
707            'signatures' => array($signature1, $signature2)
708        );
709
710        // encrypted with first-keypair@example.com and signed with
711        // first-keypair@example.com and second-keypair@example.com
712        // {{{ encrypted, dual signed data
713        $encryptedData = <<<TEXT
714-----BEGIN PGP MESSAGE-----
715Version: GnuPG v1.4.9 (GNU/Linux)
716
717hQIOA5+T+RFnKO8SEAgAzllqH/z2ThJcXteCxPJu97EmMpqdipbcSUAjGZJ5hQFe
718YlKbrxL30W6VYgZIPqP5FubZkI8WHWqDZwbtphk5l+o8nfyNV4el/JHHEmf/mzIM
719UmBXJFVa6g9CmS/SdhYhO/ovMeBsNVA1+Er+Cdyh9sTpX89I3zlehgwcXtv/di6W
720fjzeg5Na/39KfYWEyXPB5EUkWG4hmnGo63GPUEsxfNXbKDafUtTwOFop+1+wMVyA
721kJbOEaaiTSzvbpa+ruRisv34a6vX8u6QGqPSZ43vgmKeWfPEBS8p7bdRFGECLNvP
722gK4tIwlBI0o13JJ/lnjL6dR2f7qls/0dxBGxhjFpjAf/bn5d8r7e2N1yJqh1C5T0
723/n/ngN1bHDsQhrAPMJfJre7qJxZEiHa8dfagdDU6I/EC4w1ouUYKWrzf9sPKTxs+
724QosiqrGKYUO1V46EzRXc72PZBKf5CZBBvRZv3GzzcVtroViiIshyAp3TBPk2GC+N
725ilmEm72CWgQHKqg4vX1hbTCbOEu/YDmjF9Vb9a/zT5RAKDjBrcc9tkPdVMfDfI2Y
726Ly6CvL2DSvBUNbAShl2TXdTdylYbopyiFhOBvJoeidFVwIFX303nFUBMUfbCT6WK
727MGZGzXrNZlRyKfH9UCj+5pxom2TMpu+URfvXtByUGfNst+ZRi+ADOnbc51canwWc
728M9LAKgG6SF2OhrDTTe+KASz3dFbpD4xnczl+686GGT76W55YKQNDff72bhx8lBnP
729XiM+CsWGPLZdoOCQU+SEWD7lJ1I6fB+l/oFWC2PVlDjrCS1Nn/L9i5p+EqNzcUVB
730JR62EaLPsOFOfNeHhltuz2aYkvQT4sDPeKkpBKJDp2ejMy3V9ZXia1D2ZTCfMp+J
731GEu2SS68qlZV12gpSwY8BpS/nirx5aUQ9VhjlSN3GHF/r6j91VsHJhmU+nmWPWaF
732mHfMGHS5sw6+gz3SyW6b4TlUnnx412nhFinanxBlwkuAcukgL8k+OesoDX2a1Q==
733=TW+z
734-----END PGP MESSAGE-----
735
736TEXT;
737        // }}}
738
739        $this->gpg->addDecryptKey('first-keypair@example.com', 'test1');
740        $results = $this->gpg->decryptAndVerify($encryptedData);
741        $this->assertDecryptAndVerifyResultsEquals($expectedResults, $results);
742    }
743
744    /**
745     * @group string
746     */
747    public function testDecryptVerifySignedOnly()
748    {
749        // {{{ signature
750        $signature = new Crypt_GPG_Signature();
751        $signature->setId('LS9EdhGLaEUllGk3Snc0Bk+Cn3E');
752        $signature->setKeyFingerprint(
753            '8D2299D9C5C211128B32BBB0C097D9EC94C06363');
754
755        $signature->setKeyId('C097D9EC94C06363');
756        $signature->setCreationDate(1258956761);
757        $signature->setExpirationDate(0);
758        $signature->setValid(true);
759
760        $userId = new Crypt_GPG_UserId();
761        $userId->setName('First Keypair Test Key');
762        $userId->setComment('do not encrypt important data with this key');
763        $userId->setEmail('first-keypair@example.com');
764        $signature->setUserId($userId);
765        // }}}
766
767        $expectedResults = array(
768            'data'       => 'Hello, Alice! Goodbye, Bob!',
769            'signatures' => array($signature)
770        );
771
772        // signed with first-keypair@example.com
773        // {{{ signed data
774        $signedData = <<<TEXT
775-----BEGIN PGP MESSAGE-----
776Version: GnuPG v1.4.9 (GNU/Linux)
777
778owGbwMvMwCR4YPrNN1MOJCcznlZMYvDmUr/pkZqTk6+j4JiTmZyqqOCen5+SVJmq
779o+CUn6TY4cbCIMjEwMbKBFLIwMUpANNttphhwWm3a/VsLcc+u0x4/Xtyuk/Xiqd3
780ZzMsuHZrvkPCHgUTgcXFLt6GVRlPYvT5AQ==
781=ehgC
782-----END PGP MESSAGE-----
783
784TEXT;
785        // }}}
786
787        $results = $this->gpg->decryptAndVerify($signedData);
788        $this->assertDecryptAndVerifyResultsEquals($expectedResults, $results);
789    }
790
791    /**
792     * @group string
793     */
794    public function testDecryptVerifyFirstSubKey()
795    {
796        // {{{ signature
797        $signature = new Crypt_GPG_Signature();
798        $signature->setId('YUeHL9fEAK4hMokvXsNgUP5vaJ8');
799        $signature->setKeyFingerprint(
800            '8D2299D9C5C211128B32BBB0C097D9EC94C06363');
801
802        $signature->setKeyId('C097D9EC94C06363');
803        $signature->setCreationDate(1267228319);
804        $signature->setExpirationDate(0);
805        $signature->setValid(true);
806
807        $userId = new Crypt_GPG_UserId();
808        $userId->setName('First Keypair Test Key');
809        $userId->setComment('do not encrypt important data with this key');
810        $userId->setEmail('first-keypair@example.com');
811        $signature->setUserId($userId);
812        // }}}
813
814        $expectedResults = array(
815            'data'       => 'Hello, Alice! Goodbye, Bob!',
816            'signatures' => array($signature)
817        );
818
819        // encrypted with first subkey (ELG-E) of multiple-subkeys@example.com,
820        // signed with first-keypair@example.com
821        // {{{ encrypted data
822        $encryptedData = <<<TEXT
823-----BEGIN PGP MESSAGE-----
824Version: GnuPG v1.4.9 (GNU/Linux)
825
826hQEMAykh4NP/Ww9KAQgAhB2Ww2jNhy9ISQ/+S52eROzbN8ij65GoL9tTHK5TZp82
827mv+ieGwobe5PGYdBEvQdsSrKyF3x25oaEyjaOa+39DtmF82OZKZ3tIO3EJ1qvn8q
828SHxwiKYa4MOgwER9pT7i/YZOZuIdII/NeuVuGxbsa5qdISltKkE7WS7yWStcDJi1
829goaPx3G1cZIVnTgSncK1YE4j2TZXBxI/zuuuH0pbZk7rK+K9zIeyYD1YZFagrjJh
830REN5QbnT1v+1HXno1WRp4Obo072i3FjF505U1XLQ5p2/d55m73jfBJoqpb2NExdU
831KimXnQZ+8/8ddzL3ZP4+g982dmLFvl2/h7KGtPOMbdKoAeMQYVolMDoQp6+nyQHP
832CgpeFJY5+VnxNq1wEgJgXTo79xohN59wwad1ltcUGAVC49RMHbX+xBjR/HPCG9yt
833QTwMes514uPYbNL6cGoKm7dt/zQL8YsjvfswGE06bj/rU3JCTDnR+iOUDHzUMDEn
834jH7Vbs+9D1E9t5bSJs/8e7rzhZKF1AhunUdDmc4vPPJMV8xKF+o3h3nKQ6wEoOMz
835f6XGFW8cvNAl
836=vSGT
837-----END PGP MESSAGE-----
838
839TEXT;
840        // }}}
841
842        $this->gpg->addDecryptKey('multiple-subkeys@example.com', 'test');
843        $results = $this->gpg->decryptAndVerify($encryptedData);
844        $this->assertDecryptAndVerifyResultsEquals($expectedResults, $results);
845    }
846
847    /**
848     * @group string
849     */
850    public function testDecryptVerifySecondSubKey()
851    {
852        // {{{ signature
853        $signature = new Crypt_GPG_Signature();
854        $signature->setId('ZLZFDxxO+zdCEklUu6eppBCPCsA');
855        $signature->setKeyFingerprint(
856            '8D2299D9C5C211128B32BBB0C097D9EC94C06363');
857
858        $signature->setKeyId('C097D9EC94C06363');
859        $signature->setCreationDate(1267229043);
860        $signature->setExpirationDate(0);
861        $signature->setValid(true);
862
863        $userId = new Crypt_GPG_UserId();
864        $userId->setName('First Keypair Test Key');
865        $userId->setComment('do not encrypt important data with this key');
866        $userId->setEmail('first-keypair@example.com');
867        $signature->setUserId($userId);
868        // }}}
869
870        $expectedResults = array(
871            'data'       => 'Hello, Alice! Goodbye, Bob!',
872            'signatures' => array($signature)
873        );
874
875        // encrypted with second subkey (RSA) of multiple-subkeys@example.com,
876        // signed with first-keypair@example.com
877        // {{{ encrypted data
878        $encryptedData = <<<TEXT
879-----BEGIN PGP MESSAGE-----
880Version: GnuPG v1.4.9 (GNU/Linux)
881
882hQEMAykh4NP/Ww9KAQgAs1xviSlaTTGXWNzT43giUSf7SnYoeoyYqZt/eo7c9eHu
883sLGdhhpQeUiU5vW6UsOvs3QLx3hR9wYunUOKmDJmrrtVglsZIjuHU7oYlveozYwG
884wlHNbesQlWyMNSQPDeGWAQAnOUU2jv/9nb93SLYlkDKr1qjn9qjZ4Kl2q1Yi4PSu
885LaqI3r1LdJbFmEB6vQ8o6GiIpaFaZapK6vloPoq5xbaALAfAiSg58+IwV/Mn190L
886T0tmFCUuTm/Px8fv5xe+mPW2pMUovhJhBrhBopEcWNHpxuNbxwac1T54COZxjC8W
887L0XpYW7c3XVdO6VqS4pSnz+zo5EYcU2Sk6mfpN5ki9KoAdPZ4ICMe0OWIjMxgApI
888AVHaKowZ6+xSW8vLRzWjJTZrlEoMjwJSOJwCsMcsu6MwJOFcVEl4Mc3TiAMsUHWf
8896f/pHb7W2Am12CfJaaU0+nDQrlKOw5DfQG5YEG/LrpjXGugVWMQH/31MMKawSAP3
890QgdXe417ZeMtsHVaz/W1Za5ZpRpcwoT5N31LfNV+SoIpajhmtr79aeg8d6OH8H+l
8917kLEDVlh9DP0
892=I21n
893-----END PGP MESSAGE-----
894
895TEXT;
896        // }}}
897
898        $this->gpg->addDecryptKey('multiple-subkeys@example.com', 'test');
899        $results = $this->gpg->decryptAndVerify($encryptedData);
900        $this->assertDecryptAndVerifyResultsEquals($expectedResults, $results);
901    }
902
903    /**
904     * @group string
905     */
906    public function testDecryptVerifySignedOnlyBadSignature()
907    {
908        // {{{ signature
909        $signature = new Crypt_GPG_Signature();
910        $signature->setValid(false);
911        $signature->setKeyId('C097D9EC94C06363');
912        $userId = new Crypt_GPG_UserId();
913        $userId->setName('First Keypair Test Key');
914        $userId->setComment('do not encrypt important data with this key');
915        $userId->setEmail('first-keypair@example.com');
916        $signature->setUserId($userId);
917        // }}}
918
919        $expectedResults = array(
920            'data'       => "Hello, Bob! Goodbye, Alice!\n",
921            'signatures' => array($signature)
922        );
923
924        // {{{ clearsigned data
925        $clearsignedData = <<<TEXT
926-----BEGIN PGP SIGNED MESSAGE-----
927Hash: SHA1
928
929Hello, Bob! Goodbye, Alice!
930-----BEGIN PGP SIGNATURE-----
931Version: GnuPG v1.4.6 (GNU/Linux)
932
933iD8DBQFI0vkCwJfZ7JTAY2MRAgzTAKCRecYZsCS+PE46Fa2QLTEP8XGLwwCfQEAL
934qO+KlKcldtYdMZH9AA+KOLQ=
935=EO2G
936-----END PGP SIGNATURE-----
937
938TEXT;
939        // }}}
940
941        $results = $this->gpg->decryptAndVerify($clearsignedData);
942        $this->assertDecryptAndVerifyResultsEquals($expectedResults, $results);
943    }
944
945    /**
946     * @group file
947     */
948    public function testDecryptVerifyFile()
949    {
950        // {{{ signature
951        $signature = new Crypt_GPG_Signature();
952        $signature->setId('kVwy2yYB0TlXyGd9FUvVYp5jCoI');
953        $signature->setKeyFingerprint(
954            '8D2299D9C5C211128B32BBB0C097D9EC94C06363');
955
956        $signature->setKeyId('C097D9EC94C06363');
957        $signature->setCreationDate(1258220197);
958        $signature->setExpirationDate(0);
959        $signature->setValid(true);
960
961        $userId = new Crypt_GPG_UserId();
962        $userId->setName('First Keypair Test Key');
963        $userId->setComment('do not encrypt important data with this key');
964        $userId->setEmail('first-keypair@example.com');
965        $signature->setUserId($userId);
966        // }}}
967
968        $expectedMd5Sum     = 'f96267d87551ee09bfcac16921e351c1';
969        $expectedResults    = array(
970            'data'       => null,
971            'signatures' => array($signature)
972        );
973
974        $inputFilename  = $this->getDataFilename('testDecryptVerifyFile.asc');
975        $outputFilename = $this->getTempFilename('testDecryptVerifyFile.plain');
976
977        // file is encrypted with first-keypair@example.com
978        $this->gpg->addDecryptKey('first-keypair@example.com', 'test1');
979        $results = $this->gpg->decryptAndVerifyFile(
980            $inputFilename,
981            $outputFilename
982        );
983
984        $this->assertDecryptAndVerifyResultsEquals($expectedResults, $results);
985
986        $md5Sum = $this->getMd5Sum($outputFilename);
987        $this->assertEquals($expectedMd5Sum, $md5Sum);
988    }
989
990    /**
991     * @group file
992     */
993    public function testDecryptVerifyFileToString()
994    {
995        // {{{ signature
996        $signature = new Crypt_GPG_Signature();
997        $signature->setId('GTvYFmQ5yfMM/UOffkYCx21Se2M');
998        $signature->setKeyFingerprint(
999            '8D2299D9C5C211128B32BBB0C097D9EC94C06363');
1000
1001        $signature->setKeyId('C097D9EC94C06363');
1002        $signature->setCreationDate(1258221035);
1003        $signature->setExpirationDate(0);
1004        $signature->setValid(true);
1005
1006        $userId = new Crypt_GPG_UserId();
1007        $userId->setName('First Keypair Test Key');
1008        $userId->setComment('do not encrypt important data with this key');
1009        $userId->setEmail('first-keypair@example.com');
1010        $signature->setUserId($userId);
1011        // }}}
1012
1013        $expectedSignatures = array($signature);
1014        $expectedResults    = array(
1015            'data'       => 'Hello, Alice! Goodbye, Bob!',
1016            'signatures' => $expectedSignatures
1017        );
1018
1019        $inputFilename  = $this->getDataFilename(
1020            'testDecryptVerifyFileToString.asc'
1021        );
1022
1023        // file is encrypted with first-keypair@example.com
1024        $this->gpg->addDecryptKey('first-keypair@example.com', 'test1');
1025        $results = $this->gpg->decryptAndVerifyFile($inputFilename);
1026
1027        $this->assertDecryptAndVerifyResultsEquals($expectedResults, $results);
1028    }
1029
1030    /**
1031     * @group file
1032     */
1033    public function testDecryptVerifyFileNoPassphrase()
1034    {
1035        // {{{ signature
1036        $signature = new Crypt_GPG_Signature();
1037        $signature->setId('unMY9l/f9sFaMvMV0H1ZuNJRY6Q');
1038        $signature->setKeyFingerprint(
1039            '8D2299D9C5C211128B32BBB0C097D9EC94C06363');
1040
1041        $signature->setKeyId('C097D9EC94C06363');
1042        $signature->setCreationDate(1258220226);
1043        $signature->setExpirationDate(0);
1044        $signature->setValid(true);
1045
1046        $userId = new Crypt_GPG_UserId();
1047        $userId->setName('First Keypair Test Key');
1048        $userId->setComment('do not encrypt important data with this key');
1049        $userId->setEmail('first-keypair@example.com');
1050        $signature->setUserId($userId);
1051        // }}}
1052
1053        $expectedMd5Sum     = 'f96267d87551ee09bfcac16921e351c1';
1054        $expectedResults    = array(
1055            'data'       => null,
1056            'signatures' => array($signature)
1057        );
1058
1059        $inputFilename  = $this->getDataFilename(
1060            'testDecryptVerifyFileNoPassphrase.asc'
1061        );
1062        $outputFilename = $this->getTempFilename(
1063            'testDecryptVerifyFileNoPassphrase.plain'
1064        );
1065
1066        // file is encrypted with no-passphrase@example.com
1067        $results = $this->gpg->decryptAndVerifyFile(
1068            $inputFilename,
1069            $outputFilename
1070        );
1071
1072        $this->assertDecryptAndVerifyResultsEquals($expectedResults, $results);
1073
1074        $md5Sum = $this->getMd5Sum($outputFilename);
1075        $this->assertEquals($expectedMd5Sum, $md5Sum);
1076    }
1077
1078    /**
1079     * @group file
1080     */
1081    public function testDecryptVerifyFileFileException_input()
1082    {
1083        $this->expectException('Crypt_GPG_FileException');
1084
1085        // input file does not exist
1086        $inputFilename = $this->getDataFilename(
1087            'testDecryptVerifyFileFileException_input.asc'
1088        );
1089
1090        $this->gpg->decryptAndVerifyFile($inputFilename);
1091    }
1092
1093    /**
1094     * @group file
1095     */
1096    public function testDecryptVerifyFileFileException_output()
1097    {
1098        $this->expectException('Crypt_GPG_FileException');
1099
1100        // input file is encrypted with first-keypair@example.com
1101        // output file does not exist
1102        $inputFilename  = $this->getDataFilename('testDecryptVerifyFile.asc');
1103        $outputFilename = './non-existent' .
1104            '/testDecryptVerifyFileFileException_output.plain';
1105
1106        $this->gpg->addDecryptKey('first-keypair@example.com', 'test1');
1107        $this->gpg->decryptAndVerifyFile($inputFilename, $outputFilename);
1108    }
1109
1110    /**
1111     * @group file
1112     */
1113    public function testDecryptVerifyFileKeyNotFoundException_decrypt()
1114    {
1115        $this->expectException('Crypt_GPG_KeyNotFoundException');
1116
1117        // file is encrypted with missing-key@example.com, not signed
1118        $inputFilename = $this->getDataFilename(
1119            'testDecryptFileKeyNotFoundException.asc'
1120        );
1121
1122        $outputFilename = $this->getTempFilename(
1123            'testDecryptVerifyFileKeyNotFoundException.plain'
1124        );
1125
1126        $this->gpg->decryptAndVerifyFile($inputFilename, $outputFilename);
1127    }
1128
1129    /**
1130     * @group file
1131     */
1132    public function testDecryptVerifyFileDual()
1133    {
1134        // {{{ signature
1135        $signature = new Crypt_GPG_Signature();
1136        $signature->setId('7TYk0hpio90QZHHHb4UtgCWAEq4');
1137        $signature->setKeyFingerprint(
1138            '8D2299D9C5C211128B32BBB0C097D9EC94C06363');
1139
1140        $signature->setKeyId('C097D9EC94C06363');
1141        $signature->setCreationDate(1258220362);
1142        $signature->setExpirationDate(0);
1143        $signature->setValid(true);
1144
1145        $userId = new Crypt_GPG_UserId();
1146        $userId->setName('First Keypair Test Key');
1147        $userId->setComment('do not encrypt important data with this key');
1148        $userId->setEmail('first-keypair@example.com');
1149        $signature->setUserId($userId);
1150        // }}}
1151
1152        $expectedMd5Sum     = 'f96267d87551ee09bfcac16921e351c1';
1153        $expectedResults    = array(
1154            'data'       => null,
1155            'signatures' => array($signature)
1156        );
1157
1158        $inputFilename  = $this->getDataFilename(
1159            'testDecryptVerifyFileDual.asc'
1160        );
1161        $outputFilename = $this->getTempFilename(
1162            'testDecryptVerifyFileDual.plain'
1163        );
1164
1165        // decrypt with first key
1166        $this->gpg->addDecryptKey('first-keypair@example.com', 'test1');
1167        $results = $this->gpg->decryptAndVerifyFile(
1168            $inputFilename,
1169            $outputFilename
1170        );
1171        $this->gpg->clearDecryptKeys();
1172        $this->assertDecryptAndVerifyResultsEquals($expectedResults, $results);
1173        $md5Sum = $this->getMd5Sum($outputFilename);
1174        $this->assertEquals($expectedMd5Sum, $md5Sum);
1175
1176        // decrypt with second key
1177        $this->gpg->addDecryptKey('second-keypair@example.com', 'test2');
1178        $results = $this->gpg->decryptAndVerifyFile(
1179            $inputFilename,
1180            $outputFilename
1181        );
1182        $this->gpg->clearDecryptKeys();
1183        $this->assertDecryptAndVerifyResultsEquals($expectedResults, $results);
1184        $md5Sum = $this->getMd5Sum($outputFilename);
1185        $this->assertEquals($expectedMd5Sum, $md5Sum);
1186    }
1187
1188    /**
1189     * @group file
1190     */
1191    public function testDecryptVerifyFileDualSignatories()
1192    {
1193        // {{{ signature1
1194        $signature1 = new Crypt_GPG_Signature();
1195        $signature1->setId('MF8xqL325bs7KiokMHTnHirF4go');
1196        $signature1->setKeyFingerprint(
1197            '880922DBEA733E906693E4A903CC890AFA1DAD4B');
1198
1199        $signature1->setKeyId('03CC890AFA1DAD4B');
1200        $signature1->setCreationDate(1258220269);
1201        $signature1->setExpirationDate(0);
1202        $signature1->setValid(true);
1203
1204        $userId1 = new Crypt_GPG_UserId();
1205        $userId1->setName('Second Keypair Test Key');
1206        $userId1->setComment('do not encrypt important data with this key');
1207        $userId1->setEmail('second-keypair@example.com');
1208        $signature1->setUserId($userId1);
1209        // }}}
1210        // {{{ signature2
1211        $signature2 = new Crypt_GPG_Signature();
1212        $signature2->setId('d0q7jibZpJSLpGAhNWhpSkZZeUg');
1213        $signature2->setKeyFingerprint(
1214            '8D2299D9C5C211128B32BBB0C097D9EC94C06363');
1215
1216        $signature2->setKeyId('C097D9EC94C06363');
1217        $signature2->setCreationDate(1258220269);
1218        $signature2->setExpirationDate(0);
1219        $signature2->setValid(true);
1220
1221        $userId2 = new Crypt_GPG_UserId();
1222        $userId2->setName('First Keypair Test Key');
1223        $userId2->setComment('do not encrypt important data with this key');
1224        $userId2->setEmail('first-keypair@example.com');
1225        $signature2->setUserId($userId2);
1226        // }}}
1227
1228        $expectedMd5Sum  = 'f96267d87551ee09bfcac16921e351c1';
1229        $expectedResults = array(
1230            'data'       => null,
1231            'signatures' => array($signature1, $signature2)
1232        );
1233
1234        $inputFilename  = $this->getDataFilename(
1235            'testDecryptVerifyFileDualSignatories.asc'
1236        );
1237        $outputFilename = $this->getTempFilename(
1238            'testDecryptVerifyFileDualSignatories.plain'
1239        );
1240
1241        $this->gpg->addDecryptKey('first-keypair@example.com', 'test1');
1242        $results = $this->gpg->decryptAndVerifyFile(
1243            $inputFilename,
1244            $outputFilename
1245        );
1246        $this->assertDecryptAndVerifyResultsEquals($expectedResults, $results);
1247        $md5Sum = $this->getMd5Sum($outputFilename);
1248        $this->assertEquals($expectedMd5Sum, $md5Sum);
1249    }
1250
1251    /**
1252     * @group file
1253     */
1254    public function testDecryptVerifyFileDualOnePassphrase()
1255    {
1256        // {{{ signature
1257        $signature = new Crypt_GPG_Signature();
1258        $signature->setId('kgyLjfFigxOrliyc8XlS6NaLJuw');
1259        $signature->setKeyFingerprint(
1260            '8D2299D9C5C211128B32BBB0C097D9EC94C06363');
1261
1262        $signature->setKeyId('C097D9EC94C06363');
1263        $signature->setCreationDate(1258220334);
1264        $signature->setExpirationDate(0);
1265        $signature->setValid(true);
1266
1267        $userId = new Crypt_GPG_UserId();
1268        $userId->setName('First Keypair Test Key');
1269        $userId->setComment('do not encrypt important data with this key');
1270        $userId->setEmail('first-keypair@example.com');
1271        $signature->setUserId($userId);
1272        // }}}
1273
1274        $expectedMd5Sum     = 'f96267d87551ee09bfcac16921e351c1';
1275        $expectedResults    = array(
1276            'data'       => null,
1277            'signatures' => array($signature)
1278        );
1279
1280        $inputFilename  = $this->getDataFilename(
1281            'testDecryptVerifyFileDualOnePassphrase.asc'
1282        );
1283        $outputFilename = $this->getTempFilename(
1284            'testDecryptVerifyFileDualOnePassphrase.plain'
1285        );
1286
1287        // decrypt with no-passphrase
1288        $results = $this->gpg->decryptAndVerifyFile(
1289            $inputFilename,
1290            $outputFilename
1291        );
1292        $this->gpg->clearDecryptKeys();
1293        $this->assertDecryptAndVerifyResultsEquals($expectedResults, $results);
1294        $md5Sum = $this->getMd5Sum($outputFilename);
1295        $this->assertEquals($expectedMd5Sum, $md5Sum);
1296
1297        // decrypt with second key
1298        $this->gpg->addDecryptKey('first-keypair@example.com', 'test1');
1299        $results = $this->gpg->decryptAndVerifyFile(
1300            $inputFilename,
1301            $outputFilename
1302        );
1303        $this->gpg->clearDecryptKeys();
1304        $this->assertDecryptAndVerifyResultsEquals($expectedResults, $results);
1305        $md5Sum = $this->getMd5Sum($outputFilename);
1306        $this->assertEquals($expectedMd5Sum, $md5Sum);
1307    }
1308
1309    /**
1310     * @group file
1311     */
1312    public function testDecryptVerifyFileNoDataException()
1313    {
1314        $this->expectException('Crypt_GPG_NoDataException');
1315
1316        $filename = $this->getDataFilename('testFileEmpty.plain');
1317        $this->gpg->decryptAndVerifyFile($filename);
1318    }
1319
1320    /**
1321     * @group file
1322     */
1323    public function testDecryptVerifyFileSignedOnly()
1324    {
1325        // {{{ signature
1326        $signature = new Crypt_GPG_Signature();
1327        $signature->setId('vctnI/HnsRYmqcVwCJcJhS60lKU');
1328        $signature->setKeyFingerprint(
1329            '8D2299D9C5C211128B32BBB0C097D9EC94C06363');
1330
1331        $signature->setKeyId('C097D9EC94C06363');
1332        $signature->setCreationDate(1221960707);
1333        $signature->setExpirationDate(0);
1334        $signature->setValid(true);
1335
1336        $userId = new Crypt_GPG_UserId();
1337        $userId->setName('First Keypair Test Key');
1338        $userId->setComment('do not encrypt important data with this key');
1339        $userId->setEmail('first-keypair@example.com');
1340        $signature->setUserId($userId);
1341        // }}}
1342
1343        $expectedMd5Sum = 'f96267d87551ee09bfcac16921e351c1';
1344        $expectedResults    = array(
1345            'data'       => null,
1346            'signatures' => array($signature)
1347        );
1348
1349        $inputFilename = $this->getDataFilename(
1350            'testVerifyFileNormalSignedData.asc'
1351        );
1352
1353        $outputFilename = $this->getTempFilename(
1354            'testDecryptVerifyFileSignedData.plain'
1355        );
1356
1357        $results = $this->gpg->decryptAndVerifyFile(
1358            $inputFilename,
1359            $outputFilename
1360        );
1361
1362        $this->assertDecryptAndVerifyResultsEquals($expectedResults, $results);
1363
1364        $md5Sum = $this->getMd5Sum($outputFilename);
1365        $this->assertEquals($expectedMd5Sum, $md5Sum);
1366    }
1367}
1368