Mercurial > hg > rc1
comparison vendor/pear/crypt_gpg/tests/EncryptAndSignTest.php @ 0:1e000243b222
vanilla 1.3.3 distro, I hope
author | Charlie Root |
---|---|
date | Thu, 04 Jan 2018 15:50:29 -0500 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:1e000243b222 |
---|---|
1 <?php | |
2 | |
3 /* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ | |
4 | |
5 /** | |
6 * Encrypt and sign 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 EncryptSignTestCase | |
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-2009 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 */ | |
46 require_once 'TestCase.php'; | |
47 | |
48 /** | |
49 * Tests encrypt and sign abilities of Crypt_GPG. | |
50 * | |
51 * @category Encryption | |
52 * @package Crypt_GPG | |
53 * @author Michael Gauthier <mike@silverorange.com> | |
54 * @copyright 2005-2009 silverorange | |
55 * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 | |
56 * @link http://pear.php.net/package/Crypt_GPG | |
57 */ | |
58 class EncryptAndSignTestCase extends Crypt_GPG_TestCase | |
59 { | |
60 // string | |
61 // {{{ testEncryptAndSignKeyNotFoundException_invalid_sign_key() | |
62 | |
63 /** | |
64 * @expectedException Crypt_GPG_KeyNotFoundException | |
65 * | |
66 * @group string | |
67 */ | |
68 public function testEncryptAndSignKeyNotFoundException_invalid_sign_key() | |
69 { | |
70 $data = 'Hello, Alice! Goodbye, Bob!'; | |
71 $this->gpg->addSignKey('non-existent-key@example.com'); | |
72 $this->gpg->addEncryptKey('first-keypair@example.com'); | |
73 $this->gpg->encryptAndSign($data); | |
74 } | |
75 | |
76 // }}} | |
77 // {{{ testEncryptAndSignKeyNotFoundException_no_sign_key() | |
78 | |
79 /** | |
80 * @expectedException Crypt_GPG_KeyNotFoundException | |
81 * | |
82 * @group string | |
83 */ | |
84 public function testEncryptAndSignKeyNotFoundException_no_sign_key() | |
85 { | |
86 $data = 'Hello, Alice! Goodbye, Bob!'; | |
87 $this->gpg->addEncryptKey('first-keypair@example.com'); | |
88 $this->gpg->encryptAndSign($data); | |
89 } | |
90 | |
91 // }}} | |
92 // {{{ testEncryptAndSignKeyNotFoundException_invalid_encrypt_key() | |
93 | |
94 /** | |
95 * @expectedException Crypt_GPG_KeyNotFoundException | |
96 * | |
97 * @group string | |
98 */ | |
99 public function testEncryptAndSignKeyNotFoundException_invalid_encrypt_key() | |
100 { | |
101 $data = 'Hello, Alice! Goodbye, Bob!'; | |
102 $this->gpg->addSignKey('first-keypair@example.com', 'test1'); | |
103 $this->gpg->addEncryptKey('non-existent-key@example.com'); | |
104 $this->gpg->encryptAndSign($data); | |
105 } | |
106 | |
107 // }}} | |
108 // {{{ testEncryptAndSignKeyNotFoundException_no_encrypt_key() | |
109 | |
110 /** | |
111 * @expectedException Crypt_GPG_KeyNotFoundException | |
112 * | |
113 * @group string | |
114 */ | |
115 public function testEncryptAndSignKeyNotFoundException_no_encrypt_key() | |
116 { | |
117 $data = 'Hello, Alice! Goodbye, Bob!'; | |
118 $this->gpg->addSignKey('first-keypair@example.com', 'test1'); | |
119 $this->gpg->encryptAndSign($data); | |
120 } | |
121 | |
122 // }}} | |
123 // {{{ testEncryptAndSignBadPassphraseException_missing_sign_key() | |
124 | |
125 /** | |
126 * @expectedException Crypt_GPG_BadPassphraseException | |
127 * | |
128 * @group string | |
129 */ | |
130 public function testEncryptAndSignBadPassphraseException_missing_sign_key() | |
131 { | |
132 $data = 'Hello, Alice! Goodbye, Bob!'; | |
133 $this->gpg->addSignKey('first-keypair@example.com'); | |
134 $this->gpg->addEncryptKey('first-keypair@example.com'); | |
135 $this->gpg->encryptAndSign($data); | |
136 } | |
137 | |
138 // }}} | |
139 // {{{ testEncryptAndSignBadPassphraseException_bad_sign_key() | |
140 | |
141 /** | |
142 * @expectedException Crypt_GPG_BadPassphraseException | |
143 * | |
144 * @group string | |
145 */ | |
146 public function testEncryptAndSignBadPassphraseException_bad_sign_key() | |
147 { | |
148 $data = 'Hello, Alice! Goodbye, Bob!'; | |
149 $this->gpg->addSignKey('first-keypair@example.com', 'incorrect'); | |
150 $this->gpg->addEncryptKey('first-keypair@example.com'); | |
151 $this->gpg->encryptAndSign($data); | |
152 } | |
153 | |
154 // }}} | |
155 // {{{ testEncryptAndSignNoPassphrase() | |
156 | |
157 /** | |
158 * @group string | |
159 */ | |
160 public function testEncryptAndSignNoPassphrase() | |
161 { | |
162 $data = 'Hello, Alice! Goodbye, Bob!'; | |
163 | |
164 $signKey = 'no-passphrase@example.com'; | |
165 $encryptKey = 'first-keypair@example.com'; | |
166 $decryptPassphrase = 'test1'; | |
167 | |
168 $this->gpg->addSignKey($signKey); | |
169 $this->gpg->addEncryptKey($encryptKey); | |
170 $encryptedSignedData = $this->gpg->encryptAndSign($data); | |
171 | |
172 $this->gpg->addDecryptKey($encryptKey, $decryptPassphrase); | |
173 $results = $this->gpg->decryptAndVerify($encryptedSignedData); | |
174 | |
175 $this->assertEquals($data, $results['data']); | |
176 $this->assertEquals(1, count($results['signatures'])); | |
177 foreach ($results['signatures'] as $signature) { | |
178 $this->assertTrue($signature->isValid()); | |
179 } | |
180 } | |
181 | |
182 // }}} | |
183 // {{{ testEncryptAndSign() | |
184 | |
185 /** | |
186 * @group string | |
187 */ | |
188 public function testEncryptAndSign() | |
189 { | |
190 $data = 'Hello, Alice! Goodbye, Bob!'; | |
191 | |
192 $signKey = 'first-keypair@example.com'; | |
193 $signPassphrase = 'test1'; | |
194 $encryptKey = 'first-keypair@example.com'; | |
195 $decryptPassphrase = 'test1'; | |
196 | |
197 $this->gpg->addSignKey($signKey, $signPassphrase); | |
198 $this->gpg->addEncryptKey($encryptKey); | |
199 $encryptedSignedData = $this->gpg->encryptAndSign($data); | |
200 | |
201 $this->gpg->addDecryptKey($encryptKey, $decryptPassphrase); | |
202 $results = $this->gpg->decryptAndVerify($encryptedSignedData); | |
203 | |
204 $this->assertEquals($data, $results['data']); | |
205 $this->assertEquals(1, count($results['signatures'])); | |
206 foreach ($results['signatures'] as $signature) { | |
207 $this->assertTrue($signature->isValid()); | |
208 } | |
209 } | |
210 | |
211 // }}} | |
212 // {{{ testEncryptAndSignDualOnePassphrase() | |
213 | |
214 /** | |
215 * @group string | |
216 */ | |
217 public function testEncryptAndSignDualOnePassphrase() | |
218 { | |
219 $data = 'Hello, Alice! Goodbye, Bob!'; | |
220 | |
221 $signKey1 = 'first-keypair@example.com'; | |
222 $signPassphrase1 = 'test1'; | |
223 $signKey2 = 'no-passphrase@example.com'; | |
224 $encryptKey = 'first-keypair@example.com'; | |
225 $decryptPassphrase = 'test1'; | |
226 | |
227 $this->gpg->addSignKey($signKey1, $signPassphrase1); | |
228 $this->gpg->addSignKey($signKey2); | |
229 $this->gpg->addEncryptKey($encryptKey); | |
230 $encryptedSignedData = $this->gpg->encryptAndSign($data); | |
231 | |
232 $this->gpg->addDecryptKey($encryptKey, $decryptPassphrase); | |
233 $results = $this->gpg->decryptAndVerify($encryptedSignedData); | |
234 | |
235 $this->assertEquals($data, $results['data']); | |
236 $this->assertEquals(2, count($results['signatures'])); | |
237 foreach ($results['signatures'] as $signature) { | |
238 $this->assertTrue($signature->isValid()); | |
239 } | |
240 } | |
241 | |
242 // }}} | |
243 // {{{ testEncryptAndSignDual() | |
244 | |
245 /** | |
246 * @group string | |
247 */ | |
248 public function testEncryptAndSignDual() | |
249 { | |
250 $data = 'Hello, Alice! Goodbye, Bob!'; | |
251 | |
252 $signKey1 = 'first-keypair@example.com'; | |
253 $signPassphrase1 = 'test1'; | |
254 $signKey2 = 'second-keypair@example.com'; | |
255 $signPassphrase2 = 'test2'; | |
256 $encryptKey = 'first-keypair@example.com'; | |
257 $decryptPassphrase = 'test1'; | |
258 | |
259 $this->gpg->addSignKey($signKey1, $signPassphrase1); | |
260 $this->gpg->addSignKey($signKey2, $signPassphrase2); | |
261 $this->gpg->addEncryptKey($encryptKey); | |
262 $encryptedSignedData = $this->gpg->encryptAndSign($data); | |
263 | |
264 $this->gpg->addDecryptKey($encryptKey, $decryptPassphrase); | |
265 $results = $this->gpg->decryptAndVerify($encryptedSignedData); | |
266 | |
267 $this->assertEquals($data, $results['data']); | |
268 $this->assertEquals(2, count($results['signatures'])); | |
269 foreach ($results['signatures'] as $signature) { | |
270 $this->assertTrue($signature->isValid()); | |
271 } | |
272 } | |
273 | |
274 // }}} | |
275 // {{{ testEncryptAndSignEmpty() | |
276 | |
277 /** | |
278 * @group string | |
279 */ | |
280 public function testEncryptAndSignEmpty() | |
281 { | |
282 $data = ''; | |
283 | |
284 $this->gpg->addSignKey('first-keypair@example.com', 'test1'); | |
285 $this->gpg->addEncryptKey('first-keypair@example.com'); | |
286 $encryptedSignedData = $this->gpg->encryptAndSign($data); | |
287 | |
288 $this->gpg->addDecryptKey('first-keypair@example.com', 'test1'); | |
289 $results = $this->gpg->decryptAndVerify($encryptedSignedData); | |
290 | |
291 $this->assertEquals('', $results['data']); | |
292 $this->assertEquals(1, count($results['signatures'])); | |
293 foreach ($results['signatures'] as $signature) { | |
294 $this->assertTrue($signature->isValid()); | |
295 } | |
296 } | |
297 | |
298 // }}} | |
299 // {{{ testEncryptAndSignFileNoPassphrase() | |
300 | |
301 /** | |
302 * @group file | |
303 */ | |
304 public function testEncryptAndSignFileNoPassphrase() | |
305 { | |
306 $expectedMd5Sum = 'f96267d87551ee09bfcac16921e351c1'; | |
307 $originalFilename = $this->getDataFilename('testFileMedium.plain'); | |
308 $encryptedFilename = | |
309 $this->getTempFilename('testEncryptAndSignFileNoPassphrase.asc'); | |
310 | |
311 $decryptedFilename = | |
312 $this->getTempFilename('testEncryptAndSignFileNoPassphrase.plain'); | |
313 | |
314 $this->gpg->addSignKey('no-passphrase@example.com'); | |
315 $this->gpg->addEncryptKey('first-keypair@example.com'); | |
316 $this->gpg->encryptAndSignFile($originalFilename, $encryptedFilename); | |
317 | |
318 $this->gpg->addDecryptKey('first-keypair@example.com', 'test1'); | |
319 $results = $this->gpg->decryptAndVerifyFile($encryptedFilename, | |
320 $decryptedFilename); | |
321 | |
322 $md5Sum = $this->getMd5Sum($decryptedFilename); | |
323 $this->assertEquals($expectedMd5Sum, $md5Sum); | |
324 | |
325 $this->assertEquals(1, count($results['signatures'])); | |
326 foreach ($results['signatures'] as $signature) { | |
327 $this->assertTrue($signature->isValid()); | |
328 } | |
329 } | |
330 | |
331 // }}} | |
332 // {{{ testEncryptAndSignFile() | |
333 | |
334 /** | |
335 * @group file | |
336 */ | |
337 public function testEncryptAndSignFile() | |
338 { | |
339 $expectedMd5Sum = 'f96267d87551ee09bfcac16921e351c1'; | |
340 $originalFilename = $this->getDataFilename('testFileMedium.plain'); | |
341 $encryptedFilename = | |
342 $this->getTempFilename('testEncryptAndSignFileNoPassphrase.asc'); | |
343 | |
344 $decryptedFilename = | |
345 $this->getTempFilename('testEncryptAndSignFileNoPassphrase.plain'); | |
346 | |
347 $this->gpg->addSignKey('first-keypair@example.com', 'test1'); | |
348 $this->gpg->addEncryptKey('first-keypair@example.com'); | |
349 $this->gpg->encryptAndSignFile($originalFilename, $encryptedFilename); | |
350 | |
351 $this->gpg->addDecryptKey('first-keypair@example.com', 'test1'); | |
352 $results = $this->gpg->decryptAndVerifyFile($encryptedFilename, | |
353 $decryptedFilename); | |
354 | |
355 $md5Sum = $this->getMd5Sum($decryptedFilename); | |
356 $this->assertEquals($expectedMd5Sum, $md5Sum); | |
357 | |
358 $this->assertEquals(1, count($results['signatures'])); | |
359 foreach ($results['signatures'] as $signature) { | |
360 $this->assertTrue($signature->isValid()); | |
361 } | |
362 } | |
363 | |
364 // }}} | |
365 // {{{ testEncryptAndSignFileDualOnePassphrase() | |
366 | |
367 /** | |
368 * @group file | |
369 */ | |
370 public function testEncryptAndSignFileDualOnePassphrase() | |
371 { | |
372 $expectedMd5Sum = 'f96267d87551ee09bfcac16921e351c1'; | |
373 $originalFilename = $this->getDataFilename('testFileMedium.plain'); | |
374 $encryptedFilename = | |
375 $this->getTempFilename('testEncryptAndSignFileNoPassphrase.asc'); | |
376 | |
377 $decryptedFilename = | |
378 $this->getTempFilename('testEncryptAndSignFileNoPassphrase.plain'); | |
379 | |
380 $this->gpg->addSignKey('first-keypair@example.com', 'test1'); | |
381 $this->gpg->addSignKey('no-passphrase@example.com'); | |
382 $this->gpg->addEncryptKey('first-keypair@example.com'); | |
383 $this->gpg->encryptAndSignFile($originalFilename, $encryptedFilename); | |
384 | |
385 $this->gpg->addDecryptKey('first-keypair@example.com', 'test1'); | |
386 $results = $this->gpg->decryptAndVerifyFile($encryptedFilename, | |
387 $decryptedFilename); | |
388 | |
389 $md5Sum = $this->getMd5Sum($decryptedFilename); | |
390 $this->assertEquals($expectedMd5Sum, $md5Sum); | |
391 | |
392 $this->assertEquals(2, count($results['signatures'])); | |
393 foreach ($results['signatures'] as $signature) { | |
394 $this->assertTrue($signature->isValid()); | |
395 } | |
396 } | |
397 | |
398 // }}} | |
399 // {{{ testEncryptAndSignFileDual() | |
400 | |
401 /** | |
402 * @group file | |
403 */ | |
404 public function testEncryptAndSignFileDual() | |
405 { | |
406 $expectedMd5Sum = 'f96267d87551ee09bfcac16921e351c1'; | |
407 $originalFilename = $this->getDataFilename('testFileMedium.plain'); | |
408 $encryptedFilename = | |
409 $this->getTempFilename('testEncryptAndSignFileNoPassphrase.asc'); | |
410 | |
411 $decryptedFilename = | |
412 $this->getTempFilename('testEncryptAndSignFileNoPassphrase.plain'); | |
413 | |
414 $this->gpg->addSignKey('first-keypair@example.com', 'test1'); | |
415 $this->gpg->addSignKey('second-keypair@example.com', 'test2'); | |
416 $this->gpg->addEncryptKey('first-keypair@example.com'); | |
417 $this->gpg->encryptAndSignFile($originalFilename, $encryptedFilename); | |
418 | |
419 $this->gpg->addDecryptKey('first-keypair@example.com', 'test1'); | |
420 $results = $this->gpg->decryptAndVerifyFile($encryptedFilename, | |
421 $decryptedFilename); | |
422 | |
423 $md5Sum = $this->getMd5Sum($decryptedFilename); | |
424 $this->assertEquals($expectedMd5Sum, $md5Sum); | |
425 | |
426 $this->assertEquals(2, count($results['signatures'])); | |
427 foreach ($results['signatures'] as $signature) { | |
428 $this->assertTrue($signature->isValid()); | |
429 } | |
430 } | |
431 | |
432 // }}} | |
433 // {{{ testEncryptAndSignFileFileException_input() | |
434 | |
435 /** | |
436 * @expectedException Crypt_GPG_FileException | |
437 * | |
438 * @group file | |
439 */ | |
440 public function testEncryptAndSignFileFileException_input() | |
441 { | |
442 // input file does not exist | |
443 $inputFilename = $this->getDataFilename( | |
444 'testEncryptAndSignFileFileFileException_input.plain'); | |
445 | |
446 $this->gpg->addSignKey('first-keypair@example.com', 'test1'); | |
447 $this->gpg->addEncryptKey('first-keypair@example.com'); | |
448 $this->gpg->encryptAndSignFile($inputFilename); | |
449 } | |
450 | |
451 // }}} | |
452 // {{{ testEncryptAndSignFileFileException_output() | |
453 | |
454 /** | |
455 * @expectedException Crypt_GPG_FileException | |
456 * | |
457 * @group file | |
458 */ | |
459 public function testEncryptAndSignFileFileException_output() | |
460 { | |
461 // input file is plaintext | |
462 // output file does not exist | |
463 $inputFilename = $this->getDataFilename('testFileMedium.plain'); | |
464 $outputFilename = './non-existent' . | |
465 '/testEncryptAndSignFileFileException_output.plain'; | |
466 | |
467 $this->gpg->addSignKey('first-keypair@example.com', 'test1'); | |
468 $this->gpg->addEncryptKey('first-keypair@example.com'); | |
469 $this->gpg->encryptAndSignFile($inputFilename, $outputFilename); | |
470 } | |
471 | |
472 // }}} | |
473 // {{{ testEncryptAndSignFileEmpty() | |
474 | |
475 /** | |
476 * @group file | |
477 */ | |
478 public function testEncryptAndSignFileEmpty() | |
479 { | |
480 $originalFilename = $this->getDataFilename('testFileEmpty.plain'); | |
481 $encryptedFilename = | |
482 $this->getTempFilename('testEncryptAndSignFileEmpty.asc'); | |
483 | |
484 $this->gpg->addSignKey('first-keypair@example.com', 'test1'); | |
485 $this->gpg->addEncryptKey('first-keypair@example.com'); | |
486 $this->gpg->encryptAndSignFile($originalFilename, $encryptedFilename); | |
487 | |
488 $this->gpg->addDecryptKey('first-keypair@example.com', 'test1'); | |
489 $results = $this->gpg->decryptAndVerifyFile($encryptedFilename); | |
490 | |
491 $this->assertEquals('', $results['data']); | |
492 | |
493 $this->assertEquals(1, count($results['signatures'])); | |
494 foreach ($results['signatures'] as $signature) { | |
495 $this->assertTrue($signature->isValid()); | |
496 } | |
497 } | |
498 | |
499 // }}} | |
500 } | |
501 | |
502 ?> |