Mercurial > hg > rc1
diff vendor/pear/crypt_gpg/tests/DecryptAndVerifyTest.php @ 0:1e000243b222
vanilla 1.3.3 distro, I hope
author | Charlie Root |
---|---|
date | Thu, 04 Jan 2018 15:50:29 -0500 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/pear/crypt_gpg/tests/DecryptAndVerifyTest.php Thu Jan 04 15:50:29 2018 -0500 @@ -0,0 +1,1458 @@ +<?php + +/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ + +/** + * Decrypt verify tests for the Crypt_GPG package. + * + * These tests require the PHPUnit 3.6 or greater package to be installed. + * PHPUnit is installable using PEAR. See the + * {@link http://www.phpunit.de/manual/3.6/en/installation.html manual} + * for detailed installation instructions. + * + * To run these tests, use: + * <code> + * $ phpunit DecryptAndVefifyTestCase + * </code> + * + * LICENSE: + * + * This library is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of the + * License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, see + * <http://www.gnu.org/licenses/> + * + * @category Encryption + * @package Crypt_GPG + * @author Michael Gauthier <mike@silverorange.com> + * @copyright 2005-2010 silverorange + * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 + * @version $Id$ + * @link http://pear.php.net/package/Crypt_GPG + */ + +/** + * Base test case. + */ +require_once 'TestCase.php'; + +/** + * Tests decrypt verify abilities of Crypt_GPG. + * + * @category Encryption + * @package Crypt_GPG + * @author Michael Gauthier <mike@silverorange.com> + * @copyright 2005-2010 silverorange + * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 + * @link http://pear.php.net/package/Crypt_GPG + */ +class DecryptAndVerifyTestCase extends Crypt_GPG_TestCase +{ + // string + // {{{ testDecryptVerify() + + /** + * @group string + */ + public function testDecryptVerify() + { + // {{{ signature + $signature = new Crypt_GPG_Signature(); + $signature->setId('5dGf4//0CqBmlexYjyS7agt4Zn4'); + $signature->setKeyFingerprint( + '8D2299D9C5C211128B32BBB0C097D9EC94C06363'); + + $signature->setKeyId('C097D9EC94C06363'); + $signature->setCreationDate(1258956392); + $signature->setExpirationDate(0); + $signature->setValid(true); + + $userId = new Crypt_GPG_UserId(); + $userId->setName('First Keypair Test Key'); + $userId->setComment('do not encrypt important data with this key'); + $userId->setEmail('first-keypair@example.com'); + $signature->setUserId($userId); + // }}} + + $expectedResults = array( + 'data' => 'Hello, Alice! Goodbye, Bob!', + 'signatures' => array($signature) + ); + + // encrypted with first-keypair@example.com, signed with + // first-keypair@example.com + // {{{ encrypted data no passphrase + $encryptedData = <<<TEXT +-----BEGIN PGP MESSAGE----- +Version: GnuPG v1.4.9 (GNU/Linux) + +hQIOA5+T+RFnKO8SEAf+M1KnzLUvmJMtRTMpy3G2C8iJN1oQPznWDlL6NqxNeS6N +8ie5dXmaG9csQUx1Ys8QRaPDg6ElVIrJOXQ0CIW3mqxZS7+5X5akH5DQ0Ye4Rggx +yqADpE2z99tlYiNlpEqtG4oAUXzJjWiw8Y6MFg/xAHQUYMhEhZRB4OaSQGVPpxYs +s6YBfRGmWdNrGgPgcwoEmoHvmVKtVOfBNzO9cpl7k2pV12p6eG6jZ1qcCQkSJZlY +z2WsnDYZ9wbXuLM4XanGiJiBau0f+nJqDozmOVvc5Avz1qrQD3Dd5C5cy/e+XPdn +wzTgg3myMrwudAeJZzwMrpcrGwvdzAKE8/7TbNO+3Qf+NqfrApMVUrsFQBdzlLp9 +7cV8nD0uF8ioQjPg0lzJajJdqjEkKB7h9i9fQgL/SBZ29HupsUqDoqmpCVU/B6M0 +YzphMp1qWDRkk5dmpcTppTBsVx1KXCqLQFBIy+Fhc31NZRs1ccaVF3uxaOyMzFhb +FaWlUq03SjU9SlkYiFwyfyDysK3uoGeLfFh5yhH6ly5kthwLo2ov/GANF3pL0cxv +mGUcnZbkhk+MWjmz83loedhh2XpTLqRGuhzWPTQlOUQzf6xbj5zCkzWdnbqFQu19 +Et5O3whgv+ufNvD5LGc/lGQeV8wV7EXcde0ISUa8LKyU+eseS+W6IHsQLPupkCQG +u9KoAQUL3Q3vX1C7WmzS2sudcAulSR8bRYfr6lJ5udRvek7M7tYdLbE1ZLua23T8 +NId1euFhWftuaFjGDRvY37ab+M+zTnMtogSZDkCVyFrM2n4/hFfX9eKX6ljPxPmk +lEmn966i8e4K0jL0Ydvf7qWEVc5uov7xorYnkwvIbaW8SyUPowenfN3qODv7C0Yj +0kOgiJnRxZq+MYOR1b1L6fS0y7jDPI+er8ft +=pycC +-----END PGP MESSAGE----- + +TEXT; + // }}} + + $this->gpg->addDecryptKey('first-keypair@example.com', 'test1'); + $results = $this->gpg->decryptAndVerify($encryptedData); + $this->assertDecryptAndVerifyResultsEquals($expectedResults, $results); + } + + // }}} + // {{{ testDecryptVerifyNoPassphrase() + + /** + * @group string + */ + public function testDecryptVerifyNoPassphrase() + { + // {{{ signature + $signature = new Crypt_GPG_Signature(); + $signature->setId('0YWPoUQhN5G4uTi45QLy3GG3RWg'); + $signature->setKeyFingerprint( + '8D2299D9C5C211128B32BBB0C097D9EC94C06363'); + + $signature->setKeyId('C097D9EC94C06363'); + $signature->setCreationDate(1258956262); + $signature->setExpirationDate(0); + $signature->setValid(true); + + $userId = new Crypt_GPG_UserId(); + $userId->setName('First Keypair Test Key'); + $userId->setComment('do not encrypt important data with this key'); + $userId->setEmail('first-keypair@example.com'); + $signature->setUserId($userId); + // }}} + + $expectedResults = array( + 'data' => 'Hello, Alice! Goodbye, Bob!', + 'signatures' => array($signature) + ); + + // encrypted with no-passphrase@example.com, signed with + // first-keypair@example.com + // {{{ encrypted data no passphrase + $encryptedData = <<<TEXT +-----BEGIN PGP MESSAGE----- +Version: GnuPG v1.4.9 (GNU/Linux) + +hQIOAyS/OAcAwUtPEAf+KCytTYgKglBxxU9jAr2i0WVXhBcfyVyFq0N4or4HGMSz +zBw3eXw/JI77PY4pBxtBDCzPgSox8T8abh6OU3LDu3Zy9kvKcbQxYCSOeJkPBDpK +OtJ2Sw7CJ7QIvoSyqmRmCjrji9OU3k9ulQQ/5GauAP4QnUnt6lNkz+FOWVl5wzqc +yjXkRgfmKNBzYVscgdH+YDEUTM+edN+NflzqLk8HLU98TmINbbVJwnPvpCCvRGh4 +SDDaF7WmiIjSqI15Bn7F/l+8ScxvC8EH6wxR9gqS+B9DlqVpjIoYa57SPXLcshvQ +r02OjC8d8u2oyW9TLqnTirsf347Dzo7rRwm3GbdSrgf9FoQjymAzSx6izx9BsMg+ +6XJV0jSHW+jDjiJRoMAYXKc/s/y8MWRo/irCTPjReLEHWvKmISXynXqxHy1Dw5SN +1VQAPIH1ftqEVZvGtA11vLPjPYenCRCkkwz8AHqLmqZt6V2A49zPen4+H+Tp/5xr +s7TQhygo9vmTTzniBqV4lYbOyshcUTVlUErba+ffivKQPNnM+oCZXyUbJTsMlGv+ +elZqUKlNEBXivHnmIbwP/vpZ1WMMewCeij1/Z6OGbbT51dh9qeqPRj96dF351Lbk +GPxLw5uP2bIzGQjGIBeKHrl2kkRxKk/MX6QPrMHR4KlUpPRfKcQLC0TGPTEPu6ya +5tKoAdoBuKYNoFk2txsseRQTI/3v5pudNsdh5R/s+PMs+HpxyaFemI3eJb05E4Jx +zGJX5UiMIb/Yr0zCvlOaDx0NjPwIoUDqtZw6YqA59/BKmaRyqGoXk0UJMK2hAJKN +yTrj0nUDWFgoKzLHu3EQtYffLUrrjVc6BB8pUmrZKBisGnXFBQvShkzdWmzUT655 +JQfVfeZmgq+UAsfqIlrWBfDcqfyvWeAAZ7qH +=1oh0 +-----END PGP MESSAGE----- + +TEXT; + // }}} + + $results = $this->gpg->decryptAndVerify($encryptedData); + $this->assertDecryptAndVerifyResultsEquals($expectedResults, $results); + } + + // }}} + // {{{ testDecryptVerifyKeyNotFoundException_decrypt() + + /** + * @expectedException Crypt_GPG_KeyNotFoundException + * + * @group string + */ + public function testDecryptVerifyKeyNotFoundException_decrypt() + { + // was encrypted with missing-key@example.com, signed with + // first-keypair@example.com + // {{{ encrypted data + $encryptedData = <<<TEXT +-----BEGIN PGP MESSAGE----- +Version: GnuPG v1.4.9 (GNU/Linux) + +hQIOA82wFXJyxZnNEAgAwSoWLKDj/dyotGwYCT60IHC7vPGKbcbd9LMEQ8hOobKS +21aHeUBft9vlAnZabzPSqeQGYoD0BugONncV45HWlA3QD0KGcVuE6FaWIkexRNsK +S8MwVpcCgTuVkmSBgZbAS9jl7ODGGNdfGCb20fpgWFx8rv6q14aPUrD1bw5VVWeS +vLGuRGA+pcBwFlDTRvYtM0UnggfPMn6uH0CKI8uZsKkyHCu2zSCBLYsuo87sY6zJ +2UwEDyuYvr38HmcNZkb8vk7gpLCeJvFLeLYwpRrQcQy0Q+iElNPFXl5HzlwTNDq5 +5IIiQNlaCV6vUKeX5VhU4i6h4yUWegVoIro4h7KwYQf8CxTrKUnI6WfDuvttU5Z7 +q+7WCTDEnmOT7C2AvOKyfNXlERQnDtY1LHjJe6AEyP2RHnTrHR6Nbi4zQfl4BSZX +hH+ojM/001ir5/m8cOaMpQzHnMyUIi1HenpjJFo5fsMYg+K7j88X4KWlu3YFeB+O +xAp/mf7qUiiTKeDdGJE0u3NkFmXz/G/QDp8zwpqG+/UpiEjMm4OdFMwP68l9FWRX +d1ql5Rfeb50HPIjcmoa1iHq0IJCbT2xXxCm7QyGRy5PwSTMsQnrDUvj6zIBhqusZ +CTHqBXBH3jsDKTBJGQNwOGA418kcEpRsHY+C53rPhoUDnjzBY7dzIstQFsCy1bPZ +qNKoAfFsNjinvrwexRqkDypYLxEKs/nrMM4q+yz8n6Q2BqPT6YvOciHAkE0k4I46 +STZqsFTwWxgWmhLlEFvYul3BWEp5Ow5J6+6TZrHCDIFhoQIHesxmsWVxxlgTG+0M +TS1210ua1nkP+DdWQUBzdDHFxAWWG2pUxzApIPBD2wyeLd1HMVpOjQGpFxMuO8Pd +ZcGqhMpjECMzc4DOAPFbdKwgWKXi95v4zeUf +=Ze0h +-----END PGP MESSAGE----- + +TEXT; + // }}} + + $this->gpg->decryptAndVerify($encryptedData); + } + + // }}} + // {{{ testDecryptVerifyKeyNotFoundException_verify() + + /** + * @expectedException Crypt_GPG_KeyNotFoundException + * + * @group string + */ + public function testDecryptVerifyKeyNotFoundException_verify() + { + // was encrypted with first-keypair@example.com, signed with + // missing-key@example.com + // {{{ encrypted data + $encryptedData = <<<TEXT +-----BEGIN PGP MESSAGE----- +Version: GnuPG v1 + +hQIOA5+T+RFnKO8SEAgAnQrKNrq6O4F0tlex+I5aklo7ElBbSPfa0k4SvX80m+n3 +raM84mpnUzpoXrRa6zSM2IxzF7oWLHHAkBkWaTYdFFWegPbQk4G5rlURZDsLtamb +y3tXcOMuSMhj3b9XrR2YzfREj0AnuEvYOsd++KpjcEYgcVZOb5tCn+9UKfjop/pZ +i9sAJMYbdavxoa8DUuIMT6v0C/zNiuSFlQ23kRWB+LUR0tTIoHpb+0U0ITFLSMIr +jc9K6Zz805Tbu6xX8UXRMIdfJTJkmVWTOD8u8OUPGBxhBuZmbVfH4x+fKybcSVJJ +akqX28LjaqI+WvD/zh9l78V7foMEWd7porUzBC7z+wgAzh3LBHb2naFg4CZSVlYa +uuQ64G1ct0uxwVr0p0/4jA5nEK+WgFABPu1YPnIO3md8dBnkfs92g+0msKgB3FOn +T5+FlgkR+p2Y4knNggSmJGErCMYAq17lCu3bAlHFKwaowCBFoXrFCGBH2qgXD+CM +Rgq5gWXPLrcqnGPefdV56i+8X+t7oHCzIxX836IQICWMpOdhWMzDz44ctC5IBTJp +bDgx2pmkU+i51Q+PfK7k8eBIvlrvBGCQcUiNjCoPKAM3OjGNAQF0JraWPG2q0OSM +aZXKg9aCrQRHceCjwTf8dYRDm6yqGNeVzOnkDibPT3ySYmXKaVDbB8AquS72wE1n +ktLAxwGOjaM4MSQOGT+8eggngFidGak7957SWZRaqsXdeh6HtxKWni+XTBmWAg2m +6MnCIiVxD5A75m75ncdbRgtx2Sl9B/kCTC6Ak6hQ3iFpJKuQSZcD2gyGRSE8Ly7u +cX4jPXcYQaWLi+wVpLaYr3hSsjx2WgVk4oz+X2Kt0qQw+yWIkRw7ErmMl0ML0L7j +YePAE6UbBSR131nDKmXDUlLsV4GavAclENL5Kp6Yd8ia3h1Jdtl0waH5cCLswhf3 +oi0u0bIalnZwDkFSDGiWgDQyJ8XgPFcUx8fp3dC8FVxXbd3quMxZU6/5K/dQ0LIh ++Ldlz797sLtl1lHmlaLEzTzJZriLiEiOCZeOrhbgqcGMLurzfsCWYH+BZFzH8iFJ +yDoUVsWLlvY+6gelAE9Dlzdq9m8rIALwf0Udlsdn/NBaFxarT0nl68u5fSJo8UA2 +MuZd2EB/BKXWvAo5Ea9CQ3DrrDkbwlE3PKrWlMos6dFb/SWxtmKfEeNYhYJsbwsv +x5MBl/I2kBCHeH4= +=hojs +-----END PGP MESSAGE----- + +TEXT; + // }}} + + $this->gpg->addDecryptKey('first-keypair@example.com', 'test1'); + $this->gpg->decryptAndVerify($encryptedData); + } + + // }}} + // {{{ testDecryptVerifyKeyNotFoundException_both() + + /** + * @expectedException Crypt_GPG_KeyNotFoundException + * + * @group string + */ + public function testDecryptVerifyKeyNotFoundException_both() + { + // was encrypted and signed with missing-key@example.com + // {{{ encrypted data + $encryptedData = <<<TEXT +-----BEGIN PGP MESSAGE----- +Version: GnuPG v1.4.9 (GNU/Linux) + +hQIOA82wFXJyxZnNEAgA0oz13vLInSM0GlhLyIQ5fRXlttY6jOO6xgUH3MhCqExN +KWLBp9VE+iAzdsnF8hjP+u48qNjYj7Jvyiu8vf1SD9ScYoEiKar0EhZVLfCxX7PC +4ZWCSEWD5h5nBSabdL00f3vL//GrQtMAwcKP4p+pEyxTEoSg7xp10+F0JqnhlIqh +vsOeP4vAeYi1v7x0UyoNxzHbfGb3gjwNaWEixBPMekoEnZ8SOORL5yrOctOjcFxz +hKQFIcJv5vG/Ozs6Wm5q+uvzkZDc2X2dOnb1SpCP5cxNC0g37CiwPIL8ArBcu+yP +5HSC8YhyyVcQTuIdb0a9t/IK0HNfEOF5gCBCQ462Xwf/X3PQgKvvK76DQ8xvukB8 +6yKwaHv2K8NWFyTuPppiiRztVI13zPt/Jjw/YPNE/qUzONiggqWM0tGtVkbNRzic +dMEaAfwmZSix0alMPnDuVNyq9AnCUEjkXKTByWDL4pejvB541dA+rtU1D8pV1/8X +P+oQ+j1EnJitYSTdsnD4YC88/q2RnQTmibmyMclVVk3el6OvZN0Gj0Y2bd9c4LC+ +1reFYZHrX0FcsGIVuHEK/VikTqoWhFOTYUFXFGSE/AGvotfHj2QG3sd297IaSbVi +C1LwWGvpdZ2yw4RV4Zgrqvg8WOL9maj/mX8aE9/gzs9XH2vuucDBOC0RrQPsM6wb +ANKoAdExlp+92b69YSNjP2bRQFjN3gFKaGfBm4ULUhRTFnlfBGIIa+2KHUNB7dYk +obUon363/o/8wdmlXewIwPLK8nQsYXhAyxJcf9o90tqv1L83ZMMLU7FqBkUCmT4a +9EPXbxnaeO3sa8ZuGm0ilGuIFsK24pBOXtYESZ4ix6y7PZOXCJDun4+dFKcfMG+0 +t8TnSlDaIKEuve9kUGwmO8Z3LsYJEsRCsHyN +=YNhC +-----END PGP MESSAGE----- + +TEXT; + // }}} + + $this->gpg->decryptAndVerify($encryptedData); + } + + // }}} + // {{{ testDecryptVerifyKeyNotFoundVerifyIgnoreErrors() + + /** + * @group string + */ + public function testDecryptVerifyKeyNotFoundIgnoreVerifyErrors() + { + $signature = new Crypt_GPG_Signature(); + $signature->setKeyId('8E3D36B1EA5AC75E'); + + $expectedResults = array( + 'data' => 'Hello, Alice! Goodbye, Bob!', + 'signatures' => array($signature) + ); + + // was encrypted with first-keypair@example.com, signed with + // missing-key@example.com + // {{{ encrypted data + $encryptedData = <<<TEXT +-----BEGIN PGP MESSAGE----- +Version: GnuPG v1 + +hQIOA5+T+RFnKO8SEAgAnQrKNrq6O4F0tlex+I5aklo7ElBbSPfa0k4SvX80m+n3 +raM84mpnUzpoXrRa6zSM2IxzF7oWLHHAkBkWaTYdFFWegPbQk4G5rlURZDsLtamb +y3tXcOMuSMhj3b9XrR2YzfREj0AnuEvYOsd++KpjcEYgcVZOb5tCn+9UKfjop/pZ +i9sAJMYbdavxoa8DUuIMT6v0C/zNiuSFlQ23kRWB+LUR0tTIoHpb+0U0ITFLSMIr +jc9K6Zz805Tbu6xX8UXRMIdfJTJkmVWTOD8u8OUPGBxhBuZmbVfH4x+fKybcSVJJ +akqX28LjaqI+WvD/zh9l78V7foMEWd7porUzBC7z+wgAzh3LBHb2naFg4CZSVlYa +uuQ64G1ct0uxwVr0p0/4jA5nEK+WgFABPu1YPnIO3md8dBnkfs92g+0msKgB3FOn +T5+FlgkR+p2Y4knNggSmJGErCMYAq17lCu3bAlHFKwaowCBFoXrFCGBH2qgXD+CM +Rgq5gWXPLrcqnGPefdV56i+8X+t7oHCzIxX836IQICWMpOdhWMzDz44ctC5IBTJp +bDgx2pmkU+i51Q+PfK7k8eBIvlrvBGCQcUiNjCoPKAM3OjGNAQF0JraWPG2q0OSM +aZXKg9aCrQRHceCjwTf8dYRDm6yqGNeVzOnkDibPT3ySYmXKaVDbB8AquS72wE1n +ktLAxwGOjaM4MSQOGT+8eggngFidGak7957SWZRaqsXdeh6HtxKWni+XTBmWAg2m +6MnCIiVxD5A75m75ncdbRgtx2Sl9B/kCTC6Ak6hQ3iFpJKuQSZcD2gyGRSE8Ly7u +cX4jPXcYQaWLi+wVpLaYr3hSsjx2WgVk4oz+X2Kt0qQw+yWIkRw7ErmMl0ML0L7j +YePAE6UbBSR131nDKmXDUlLsV4GavAclENL5Kp6Yd8ia3h1Jdtl0waH5cCLswhf3 +oi0u0bIalnZwDkFSDGiWgDQyJ8XgPFcUx8fp3dC8FVxXbd3quMxZU6/5K/dQ0LIh ++Ldlz797sLtl1lHmlaLEzTzJZriLiEiOCZeOrhbgqcGMLurzfsCWYH+BZFzH8iFJ +yDoUVsWLlvY+6gelAE9Dlzdq9m8rIALwf0Udlsdn/NBaFxarT0nl68u5fSJo8UA2 +MuZd2EB/BKXWvAo5Ea9CQ3DrrDkbwlE3PKrWlMos6dFb/SWxtmKfEeNYhYJsbwsv +x5MBl/I2kBCHeH4= +=hojs +-----END PGP MESSAGE----- + +TEXT; + // }}} + + $this->gpg = new Crypt_GPG(array_merge(array('ignoreVerifyKeyErrors' => true) + $this->getOptions())); + + $this->gpg->addDecryptKey('first-keypair@example.com', 'test1'); + $results = $this->gpg->decryptAndVerify($encryptedData, true); + + $this->assertDecryptAndVerifyResultsEquals($expectedResults, $results); + } + + // }}} + // {{{ testDecryptVerifyNoDataException_invalid() + + /** + * @expectedException Crypt_GPG_NoDataException + * + * @group string + */ + public function testDecryptVerifyNoDataException_invalid() + { + $encryptedData = 'Invalid OpenPGP data.'; + $this->gpg->decryptAndVerify($encryptedData); + } + + // }}} + // {{{ testDecryptVerifyNoDataException_empty() + + /** + * @expectedException Crypt_GPG_NoDataException + * + * @group string + */ + public function testDecryptVerifyNoDataException_empty() + { + $encryptedData = ''; + $this->gpg->decryptAndVerify($encryptedData); + } + + // }}} + // {{{ testDecryptVerifyBadPassphraseException_missing() + + /** + * @expectedException Crypt_GPG_BadPassphraseException + * + * @group string + */ + public function testDecryptVerifyBadPassphraseException_missing() + { + // encrypted with first-keypair@example.com, signed with + // first-keypair@example.com + // {{{ encrypted data no passphrase + $encryptedData = <<<TEXT +-----BEGIN PGP MESSAGE----- +Version: GnuPG v1.4.9 (GNU/Linux) + +hQIOA5+T+RFnKO8SEAf+M1KnzLUvmJMtRTMpy3G2C8iJN1oQPznWDlL6NqxNeS6N +8ie5dXmaG9csQUx1Ys8QRaPDg6ElVIrJOXQ0CIW3mqxZS7+5X5akH5DQ0Ye4Rggx +yqADpE2z99tlYiNlpEqtG4oAUXzJjWiw8Y6MFg/xAHQUYMhEhZRB4OaSQGVPpxYs +s6YBfRGmWdNrGgPgcwoEmoHvmVKtVOfBNzO9cpl7k2pV12p6eG6jZ1qcCQkSJZlY +z2WsnDYZ9wbXuLM4XanGiJiBau0f+nJqDozmOVvc5Avz1qrQD3Dd5C5cy/e+XPdn +wzTgg3myMrwudAeJZzwMrpcrGwvdzAKE8/7TbNO+3Qf+NqfrApMVUrsFQBdzlLp9 +7cV8nD0uF8ioQjPg0lzJajJdqjEkKB7h9i9fQgL/SBZ29HupsUqDoqmpCVU/B6M0 +YzphMp1qWDRkk5dmpcTppTBsVx1KXCqLQFBIy+Fhc31NZRs1ccaVF3uxaOyMzFhb +FaWlUq03SjU9SlkYiFwyfyDysK3uoGeLfFh5yhH6ly5kthwLo2ov/GANF3pL0cxv +mGUcnZbkhk+MWjmz83loedhh2XpTLqRGuhzWPTQlOUQzf6xbj5zCkzWdnbqFQu19 +Et5O3whgv+ufNvD5LGc/lGQeV8wV7EXcde0ISUa8LKyU+eseS+W6IHsQLPupkCQG +u9KoAQUL3Q3vX1C7WmzS2sudcAulSR8bRYfr6lJ5udRvek7M7tYdLbE1ZLua23T8 +NId1euFhWftuaFjGDRvY37ab+M+zTnMtogSZDkCVyFrM2n4/hFfX9eKX6ljPxPmk +lEmn966i8e4K0jL0Ydvf7qWEVc5uov7xorYnkwvIbaW8SyUPowenfN3qODv7C0Yj +0kOgiJnRxZq+MYOR1b1L6fS0y7jDPI+er8ft +=pycC +-----END PGP MESSAGE----- + +TEXT; + // }}} + + $this->gpg->decryptAndVerify($encryptedData); + } + + // }}} + // {{{ testDecryptVerifyBadPassphraseException_bad() + + /** + * @expectedException Crypt_GPG_BadPassphraseException + * + * @group string + */ + public function testDecryptVerifyBadPassphraseException_bad() + { + // encrypted with first-keypair@example.com, signed with + // first-keypair@example.com + // {{{ encrypted data no passphrase + $encryptedData = <<<TEXT +-----BEGIN PGP MESSAGE----- +Version: GnuPG v1.4.9 (GNU/Linux) + +hQIOA5+T+RFnKO8SEAf+M1KnzLUvmJMtRTMpy3G2C8iJN1oQPznWDlL6NqxNeS6N +8ie5dXmaG9csQUx1Ys8QRaPDg6ElVIrJOXQ0CIW3mqxZS7+5X5akH5DQ0Ye4Rggx +yqADpE2z99tlYiNlpEqtG4oAUXzJjWiw8Y6MFg/xAHQUYMhEhZRB4OaSQGVPpxYs +s6YBfRGmWdNrGgPgcwoEmoHvmVKtVOfBNzO9cpl7k2pV12p6eG6jZ1qcCQkSJZlY +z2WsnDYZ9wbXuLM4XanGiJiBau0f+nJqDozmOVvc5Avz1qrQD3Dd5C5cy/e+XPdn +wzTgg3myMrwudAeJZzwMrpcrGwvdzAKE8/7TbNO+3Qf+NqfrApMVUrsFQBdzlLp9 +7cV8nD0uF8ioQjPg0lzJajJdqjEkKB7h9i9fQgL/SBZ29HupsUqDoqmpCVU/B6M0 +YzphMp1qWDRkk5dmpcTppTBsVx1KXCqLQFBIy+Fhc31NZRs1ccaVF3uxaOyMzFhb +FaWlUq03SjU9SlkYiFwyfyDysK3uoGeLfFh5yhH6ly5kthwLo2ov/GANF3pL0cxv +mGUcnZbkhk+MWjmz83loedhh2XpTLqRGuhzWPTQlOUQzf6xbj5zCkzWdnbqFQu19 +Et5O3whgv+ufNvD5LGc/lGQeV8wV7EXcde0ISUa8LKyU+eseS+W6IHsQLPupkCQG +u9KoAQUL3Q3vX1C7WmzS2sudcAulSR8bRYfr6lJ5udRvek7M7tYdLbE1ZLua23T8 +NId1euFhWftuaFjGDRvY37ab+M+zTnMtogSZDkCVyFrM2n4/hFfX9eKX6ljPxPmk +lEmn966i8e4K0jL0Ydvf7qWEVc5uov7xorYnkwvIbaW8SyUPowenfN3qODv7C0Yj +0kOgiJnRxZq+MYOR1b1L6fS0y7jDPI+er8ft +=pycC +-----END PGP MESSAGE----- + +TEXT; + // }}} + + $this->gpg->addDecryptKey('first-keypair@example.com', 'incorrect'); + $this->gpg->decryptAndVerify($encryptedData); + } + + // }}} + // {{{ testDecryptVerifyDual() + + /** + * @group string + */ + public function testDecryptVerifyDual() + { + // {{{ signature + $signature = new Crypt_GPG_Signature(); + $signature->setId('TAsI7RYUgZAud0wMZu3Iab3bZXo'); + $signature->setKeyFingerprint( + '8D2299D9C5C211128B32BBB0C097D9EC94C06363'); + + $signature->setKeyId('C097D9EC94C06363'); + $signature->setCreationDate(1258955651); + $signature->setExpirationDate(0); + $signature->setValid(true); + + $userId = new Crypt_GPG_UserId(); + $userId->setName('First Keypair Test Key'); + $userId->setComment('do not encrypt important data with this key'); + $userId->setEmail('first-keypair@example.com'); + $signature->setUserId($userId); + // }}} + + $expectedResults = array( + 'data' => 'Hello, Alice! Goodbye, Bob!', + 'signatures' => array($signature) + ); + + // encrypted with both first-keypair@example.com and + // second-keypair@example.com, signed with first-keypair@example.com + // {{{ dual encrypted, signed data + $encryptedData = <<<TEXT +-----BEGIN PGP MESSAGE----- +Version: GnuPG v1.4.9 (GNU/Linux) + +hQIOA5+T+RFnKO8SEAgA2lVokiF7FeQvT0EjgH/X2mXNbz8ukKM7WdIAsIFumg1a +Skfsqn1plAHs3f3OhY16tBb1WW4J8WXEt6g3yHls92XpRUgRTUjVCr4HIvMwSB3A +V/ZQdGs3NK3wh0rMu6q/Ski10dEwP7SUE+w19AmiCQfmKYLUJmCgPLmVm4IapAad +lIpNalUHzXhHuuIzKut9H0n6+p0jUPW2JehFFGud66MS5PaGbDPZS2lKiPjytSzl +pYipuglregaaMR5KsBYxP4A6MnMaRaZriTeItROJ0PTBMaq93+IyrnwulqEsWk6t +8ahRM4FmC+U/Z9tgWxTEKU28zthjxKXW5JOceGxeBQgAoxRAhd75Ok406YG4VucC +rxLSLIKIt0TAlbTWncJq9qhLA86+RL4oqUYfDjq9o9lrfkPQO3xfHam/43j2yaF3 +HeJwSDwU0V4YZ6R9ZVdHMYw7w7yynn2HmNesDUWRfI7IRwMFtgKGvv6qpdUOYmWN +MhQ+HxnwMgvHNaz6TRYpQzVvtpB6q9J3/xCM3+uKxDaJLbJux50s6FpnCRnLpGWs +1Tj8l9BSMlAGtP6dMR3MysZS/UnXwdTmDFR9ARS+HxsP89I95UAKLWaouShoo9dX +QIs0pLkQs+CWpjPVAp8TT0Vj1juThk4bJarti/BaZOyzUAOrleDWOO8VVsuM1Bw2 +xIUCDgOy9U5HV+IkUBAIANU8DKkvHNzkx68XvxXXVsBsWTGNznrNGUjqSfhyS9pW +lRnq7qB2c2UgMvMTnMWyogQ/gKEotdeqKCXdMLBkataB1xkMbCvUZzdj2A/OPtDD +xT7ogqn82YaEjlfEqEbqBi1lvq2tuC/YsGti0c6zDUFoZax6QWL+NU3eCY6ZxBSx +NuZ4hiBJqPeHVP92SCnsC2BwqUy7W0rUuKnXo3VM1syd98TZjdM6SqBVQ61YX3u2 +rS1YiphYd2WeNU/bSZ79bHMMPt3joQ+nCGKvGSIlCVxAy4EPWDb2KFw0yUmXUub1 +tLnrKAOdufWC780LuhgINLb1PSmzogRmvk4ih687h9wH/0hx4olXvkUHZAcpnMHT +zGK8NQeoxfSmcJrYNa1TpQ8FjLad7eycnoIASC4qS7IsJ0xzedWd2eqLdc+9qIiv +68gW2MjZOqQ5PvcZk1eqOVUNH8Ua8Wfv82ljk1VE0L9zzrS8nGLq5prjaK400Vwh +MVh129jyjkpgGZhIHC4cNGBQl1zKDw9WWd1Rk92rpmsvb7JZVNDg0DjW3hrwc7v2 +WbGqEXG5Sown6J1gX4wKIpn9roOE9ZSu1hvugPc28IZIne4rL05Pd4qVnp87SiUh +wHs82nXGhqcscZx2NiT2F///6j97+ccd+619iabKkpfwGunQZHfxit+7bfHuX+5O +tFHSqQEsRi3gNrRlMRDnPjLHXjR+x80anNOwxBfZP1qjdTsFucqmZ57KUdIpUGmi +uRgBZhuVRz8ryTcw5/nACkeKLkxOJLHGgNDilJtNO8tv+BbQDRZzsNYTM7ZNcAo4 +JqkWrMb43BTbAbdgTyEkWhqw6cFQEePYqXcbeDh3c77U5joGZW+iPZQlJbBCMC6e +KBH+5iH8NzPpP6yZq5e5p1ZOkb2PY3EXtL8aemU= +=S/2J +-----END PGP MESSAGE----- + +TEXT; + // }}} + + // decrypt with first key + $this->gpg->addDecryptKey('first-keypair@example.com', 'test1'); + $results = $this->gpg->decryptAndVerify($encryptedData); + $this->gpg->clearDecryptKeys(); + $this->assertDecryptAndVerifyResultsEquals($expectedResults, $results); + + // decrypt with second key + $this->gpg->addDecryptKey('second-keypair@example.com', 'test2'); + $results = $this->gpg->decryptAndVerify($encryptedData); + $this->gpg->clearDecryptKeys(); + $this->assertDecryptAndVerifyResultsEquals($expectedResults, $results); + } + + // }}} + // {{{ testDecryptVerifyDualOnePassphrase() + + /** + * @group string + */ + public function testDecryptVerifyDualOnePassphrase() + { + // {{{ signature + $signature = new Crypt_GPG_Signature(); + $signature->setId('3OJnX+PqHI0YUCeFxICCxhPHY1Q'); + $signature->setKeyFingerprint( + '8D2299D9C5C211128B32BBB0C097D9EC94C06363'); + + $signature->setKeyId('C097D9EC94C06363'); + $signature->setCreationDate(1258955916); + $signature->setExpirationDate(0); + $signature->setValid(true); + + $userId = new Crypt_GPG_UserId(); + $userId->setName('First Keypair Test Key'); + $userId->setComment('do not encrypt important data with this key'); + $userId->setEmail('first-keypair@example.com'); + $signature->setUserId($userId); + // }}} + + $expectedResults = array( + 'data' => 'Hello, Alice! Goodbye, Bob!', + 'signatures' => array($signature) + ); + + // encrypted with both first-keypair@example.com and + // no-passhprase@example.com, signed with first-keypair@example.com + // {{{ dual encrypted, signed data + $encryptedData = <<<TEXT +-----BEGIN PGP MESSAGE----- +Version: GnuPG v1.4.9 (GNU/Linux) + +hQIOA5+T+RFnKO8SEAgA7zHd9KH/C2GCM9H7pdMS76PXGfmhGPyQAtokBQgF8G1/ +orldCnTUnxmZejbOwYhYVEh5zlnYshlCpUSsGBw+sH7XiC8eorCD0YJj5NDBp8W6 +VtvGkMqqG9tDJk6TfKornFl+H7xpiwXox5T/swnpJcJ6qaTXBtLb7HViiwTTu5Zk +QbWqSvIOigIkiuTnv898/eeEIh9gg6ScRVZOyZ7P2usDaOWqVVNJmkaLIaWxOYck +Go3hnYAhkfjpMcgAMkqtXPWIS8OrfY8wOXxXNA4EjvrHs+5/yHbZmj/5bBA9CuGJ +UctQqF9ZtZsagSpK0WTJCt4RkX3jKqK9tJVQzBuKZgf/Up3Zi6Lfg6iINm4qsd1h +Dusuuxw0vgGoMc6P7QOMFmeSs3g/yYQKaHomWqEVg0LpC2FHOqceqZRZJd4XMcsz +uCF95lx7Tm1ozgEhBgQNSQVoAA5/MYXlKo3YQGEIyU9Gx4f2v/8XV3umYXjGfJY9 +adBHLIvPFeeze1/f11ztZsgLr3DBP01/O6qLi91dwsqpzQXzjurVYIHJdCD+JviZ +2CjwkcpUTHx5vXNiobMcBjtogjP7d4W8DJ0La5+WVujV0nxHiE9mEXuct8TajCY6 +/40UIdtHEPWc08ccXXjQaFKbJxYGDMOJzQ8LPdHqa3RubmMADqzH4W3/SSmRsibd +4YUCDgMkvzgHAMFLTxAH/R3ryj2BUP6C/aYfgGqi+FOVoHVR5kiz6Z2nBEKqntwZ +njdKD+pvuw9fxaNhNNZy3UlKnIdonNb/A3upEeR81opP+HWCgXUlcgucQ7VXiUPd +mnQAR+cTrFgTXf+B54VHwDED5RVDm4/e29casiNyULm6xWFYqfJMGBvEGrflq1BW +QSYlpc0ijqkER+VNy49Dy/qY1TRUBZ84+RmL2L/18zQbdekMoLUDxJOEoo0C65ER +5ReLlFN2nI0MC8O5ZU8PfjDXXQ7qnQhz/2kxorNiQl654V7ZsEWkVLF9yejZXSzU +ynWANJdCnWLMjOnrQPm1+b2Yi8pcgtpIPsBdTIHn4fAH/iW0Uxltx9ZrV7kvrDDj +Izc4/ocn3Z0c/47Rv62MTYcxVYzFdP+WxisMI2LV88g1Zu9rOKR1k7UkNGNlfklS +5CSApTnm3MC9/w54dacPohZ7SrQlTSHJxfRINH7H3DOuaH9awf+ntwUks73mXjT5 +ikSJ2D05Kbf8++jLhRRKLPZS8bOmSw2KTaCbtk7LX4pEIu9d6kig6g8Wj3h9dlQs +QXCKL14/8cSGrxXXWHOuL9abnxZTwenbn5B5FqBPoiRKqSFToiLd/pBWjG/aieju +Rm+Uyyddl+ISJUnv0AAiOxfifJmTdUsT5LZLkYG4CUyX2T3JiZ2L4msF4S3U70wp +PtbSqAG3xVRFlZY2jLeW8btez7XkzB9fhvVd1Hee6EXRnF5/BcLkqy8sYvx1MHkT +eMzttOs1NRrjXy4+zUqo//59gQ46zwYd0NA/Ga6pl1kn8+xM76DCcI4LhdZN75rR +ZUcyEqBKX9RNefMD7cR6kYoljGfnT3Mjd+0eTdF/Glk0ElVjbMtQclG0o/7wlI7m ++b2E6/e0qZedOCq48+mIRv0tjRuoFiydM88aGg== +=IgJ0 +-----END PGP MESSAGE----- + +TEXT; + // }}} + + // decrypt with no passphrase + $results = $this->gpg->decryptAndVerify($encryptedData); + $this->assertDecryptAndVerifyResultsEquals($expectedResults, $results); + + // decrypt with first key + $this->gpg->addDecryptKey('first-keypair@example.com', 'test1'); + $results = $this->gpg->decryptAndVerify($encryptedData); + $this->gpg->clearDecryptKeys(); + $this->assertDecryptAndVerifyResultsEquals($expectedResults, $results); + } + + // }}} + // {{{ testDecryptAndVerifyDualNoPassphraseKeyMissing() + + /** + * @expectedException Crypt_GPG_BadPassphraseException + * + * @group string + */ + public function testDecryptAndVerifyDualNoPassphraseKeyMissing() + { + // encrypted with both first-keypair@example.com and + // second-keypair@example.com + // {{{ dual encrypted data + $encryptedData = <<<TEXT +-----BEGIN PGP MESSAGE----- +Version: GnuPG v1.4.6 (GNU/Linux) + +hQIOA5+T+RFnKO8SEAf7BO/zLK6gDt5epMOEnHc9ESdSTy8yExdoSxHhvTFxWfwi +AwMtBEur8sotSVt+Q87xYzjzE77+FQYS9oYCivlK/Nedblj3MiRuUWhM+Q9tbP3b +KbwEwaQlrpNphQsKZOWkliZWmFJWnQ1s1Pm6lPlhwTNhcwkapm8EXuWFExJnY9yW +EZjUOhVmnkitKykKup8Brvfm2QpGXoFZtHFKXTi162Lue9N0tDm6s3JnCIhMFQgI +fyAikcsJKpbUgeGmzlWJO8QkH81QMuKpqfUb8R1dswhDp6RKXhoXS43zkhH8QSbM +Cp9AWdv3qsWBUqzWavCxjtIsogYO+gFLl/Vuw5Y87Af/b7OQgLP1v6xKZcrTvFCF +hxGxn+5M8E2GyJaKpQ1GZ+Wv+IzPGetm7rWf6q71hchAkxFMczIPSK7aARm9CNVo +7tCdcUmUTgLhG1/0OfmkbwJUjdSpOtz8+TvIZa20Jj9a1G8WT3KTeivKMqBPhgk4 +sD7OJPDCYQNSQEw6pAn4oBrhJlDUkpCK6wIbUhzeq3MUwtM1e+qpCr/k4In4NVq6 +cmoC7W//9J69ecuxmiUHRhZ4CALRxQMAsSxMRnNJ26JY4ko82Rfvbrz8QEmKcIyT +bTdAMsZ18m9XXrnc2ACDDMQyUkneQDUZSt7V67ZiN4Upi295CynIbNEMmcH/13Aa +aoUCDgOy9U5HV+IkUBAIALGICOFzyfquWZ0ZhPGVdDWx1yNcApnzIgZx1JbBpMyc +2jb9aQHwGId26gv/ym/M/3FJ0lv+IAcktMjO4dwYLnUuBa6BOFFybZi3gYvXtSuy +iW4ygVjIsYixhvbsyaVCoB/MsNBFrQAHEShaxALBkI/dv+yyD8BifU4Yj9LFcAZO +mFDraOgYfHsur5eevYTXozf5wU7phu9v6zo5bk8zgZSqs8AgyscstZWCqCtR/cG0 +t9lAIovGPsIcA12qvkm/A0WiBMEWhGryzHTv9oRsFztOFtqH+MmLdlvWjElw8hKt +fFJB+bhHNO9BUIrwnuH79cA4aXOy1+xG+ECs7oJbcisIANqJKalQLgBYEjbucpDg +O8i/c4RmV9J7VczpZp7ZREMpTmv9nV849OFXT1strsb/+vXOXOyLToG1gOxRfJr2 +q9jFjpyMAtrr/aHhXMKK1OMhhcdkQMEKuHTvon5KleZOQoVmIqa3kUtWNW1vFBIP +UfJFH202EJLOLC25rXCtzRsJE0HWiYDyLqKMQcSQhTcngLBLmeDLH3DeGUIDwcZe +oWgUg8wB/oSoU4AchShzO+yM6bcmffcaHFqwll9gdu9walnJAAOb8+r6LGGlsGTV +qhnR0LM3Khp+HOFdaxcQT6BV1aw/D6Z5hIi+Am0VTi0HlFr/gwleyYaP+742Z6K0 +s8bSVgFT2Pjik+byARWzRwWjmi0jT7QsgITM73aBKPDXiArEPkv8YtC9HzUj0lCY +gX7Eg2ZqISULFydBckMJ6drojMMQiqZBeEc09GupSBL1zldnKHfiXBTw +=QYjj +-----END PGP MESSAGE----- + +TEXT; + // }}} + + // #21148: Make sure that proper exception is thrown + // when decrypting without specyfying a passphrase + + // in this case we remove one of private keys to make + // sure proper exception is thrown also in this case + $this->gpg->deletePrivateKey('first-keypair@example.com'); + + $this->gpg->decryptAndVerify($encryptedData); + } + + // }}} + // {{{ testDecryptVerifyDualSignatories() + + /** + * @group string + */ + public function testDecryptVerifyDualSignatories() + { + // {{{ signature1 + $signature1 = new Crypt_GPG_Signature(); + $signature1->setId('7PujVkx4qk28IejcD6BirrwBmRE'); + $signature1->setKeyFingerprint( + '8D2299D9C5C211128B32BBB0C097D9EC94C06363'); + + $signature1->setKeyId('C097D9EC94C06363'); + $signature1->setCreationDate(1258956025); + $signature1->setExpirationDate(0); + $signature1->setValid(true); + + $userId1 = new Crypt_GPG_UserId(); + $userId1->setName('First Keypair Test Key'); + $userId1->setComment('do not encrypt important data with this key'); + $userId1->setEmail('first-keypair@example.com'); + $signature1->setUserId($userId1); + // }}} + // {{{ signature2 + $signature2 = new Crypt_GPG_Signature(); + $signature2->setId('AhrDdkdcBsEsOSQOYENhl5C7auc'); + $signature2->setKeyFingerprint( + '880922DBEA733E906693E4A903CC890AFA1DAD4B'); + + $signature2->setKeyId('03CC890AFA1DAD4B'); + $signature2->setCreationDate(1258956025); + $signature2->setExpirationDate(0); + $signature2->setValid(true); + + $userId2 = new Crypt_GPG_UserId(); + $userId2->setName('Second Keypair Test Key'); + $userId2->setComment('do not encrypt important data with this key'); + $userId2->setEmail('second-keypair@example.com'); + $signature2->setUserId($userId2); + // }}} + + $expectedResults = array( + 'data' => 'Hello, Alice! Goodbye, Bob!', + 'signatures' => array($signature1, $signature2) + ); + + // encrypted with first-keypair@example.com and signed with + // first-keypair@example.com and second-keypair@example.com + // {{{ encrypted, dual signed data + $encryptedData = <<<TEXT +-----BEGIN PGP MESSAGE----- +Version: GnuPG v1.4.9 (GNU/Linux) + +hQIOA5+T+RFnKO8SEAgAzllqH/z2ThJcXteCxPJu97EmMpqdipbcSUAjGZJ5hQFe +YlKbrxL30W6VYgZIPqP5FubZkI8WHWqDZwbtphk5l+o8nfyNV4el/JHHEmf/mzIM +UmBXJFVa6g9CmS/SdhYhO/ovMeBsNVA1+Er+Cdyh9sTpX89I3zlehgwcXtv/di6W +fjzeg5Na/39KfYWEyXPB5EUkWG4hmnGo63GPUEsxfNXbKDafUtTwOFop+1+wMVyA +kJbOEaaiTSzvbpa+ruRisv34a6vX8u6QGqPSZ43vgmKeWfPEBS8p7bdRFGECLNvP +gK4tIwlBI0o13JJ/lnjL6dR2f7qls/0dxBGxhjFpjAf/bn5d8r7e2N1yJqh1C5T0 +/n/ngN1bHDsQhrAPMJfJre7qJxZEiHa8dfagdDU6I/EC4w1ouUYKWrzf9sPKTxs+ +QosiqrGKYUO1V46EzRXc72PZBKf5CZBBvRZv3GzzcVtroViiIshyAp3TBPk2GC+N +ilmEm72CWgQHKqg4vX1hbTCbOEu/YDmjF9Vb9a/zT5RAKDjBrcc9tkPdVMfDfI2Y +Ly6CvL2DSvBUNbAShl2TXdTdylYbopyiFhOBvJoeidFVwIFX303nFUBMUfbCT6WK +MGZGzXrNZlRyKfH9UCj+5pxom2TMpu+URfvXtByUGfNst+ZRi+ADOnbc51canwWc +M9LAKgG6SF2OhrDTTe+KASz3dFbpD4xnczl+686GGT76W55YKQNDff72bhx8lBnP +XiM+CsWGPLZdoOCQU+SEWD7lJ1I6fB+l/oFWC2PVlDjrCS1Nn/L9i5p+EqNzcUVB +JR62EaLPsOFOfNeHhltuz2aYkvQT4sDPeKkpBKJDp2ejMy3V9ZXia1D2ZTCfMp+J +GEu2SS68qlZV12gpSwY8BpS/nirx5aUQ9VhjlSN3GHF/r6j91VsHJhmU+nmWPWaF +mHfMGHS5sw6+gz3SyW6b4TlUnnx412nhFinanxBlwkuAcukgL8k+OesoDX2a1Q== +=TW+z +-----END PGP MESSAGE----- + +TEXT; + // }}} + + $this->gpg->addDecryptKey('first-keypair@example.com', 'test1'); + $results = $this->gpg->decryptAndVerify($encryptedData); + $this->assertDecryptAndVerifyResultsEquals($expectedResults, $results); + } + + // }}} + // {{{ testDecryptVerifySignedOnly() + + /** + * @group string + */ + public function testDecryptVerifySignedOnly() + { + // {{{ signature + $signature = new Crypt_GPG_Signature(); + $signature->setId('LS9EdhGLaEUllGk3Snc0Bk+Cn3E'); + $signature->setKeyFingerprint( + '8D2299D9C5C211128B32BBB0C097D9EC94C06363'); + + $signature->setKeyId('C097D9EC94C06363'); + $signature->setCreationDate(1258956761); + $signature->setExpirationDate(0); + $signature->setValid(true); + + $userId = new Crypt_GPG_UserId(); + $userId->setName('First Keypair Test Key'); + $userId->setComment('do not encrypt important data with this key'); + $userId->setEmail('first-keypair@example.com'); + $signature->setUserId($userId); + // }}} + + $expectedResults = array( + 'data' => 'Hello, Alice! Goodbye, Bob!', + 'signatures' => array($signature) + ); + + // signed with first-keypair@example.com + // {{{ signed data + $signedData = <<<TEXT +-----BEGIN PGP MESSAGE----- +Version: GnuPG v1.4.9 (GNU/Linux) + +owGbwMvMwCR4YPrNN1MOJCcznlZMYvDmUr/pkZqTk6+j4JiTmZyqqOCen5+SVJmq +o+CUn6TY4cbCIMjEwMbKBFLIwMUpANNttphhwWm3a/VsLcc+u0x4/Xtyuk/Xiqd3 +ZzMsuHZrvkPCHgUTgcXFLt6GVRlPYvT5AQ== +=ehgC +-----END PGP MESSAGE----- + +TEXT; + // }}} + + $results = $this->gpg->decryptAndVerify($signedData); + $this->assertDecryptAndVerifyResultsEquals($expectedResults, $results); + } + + // }}} + // {{{ testDecryptVerifyFirstSubKey() + + /** + * @group string + */ + public function testDecryptVerifyFirstSubKey() + { + // {{{ signature + $signature = new Crypt_GPG_Signature(); + $signature->setId('YUeHL9fEAK4hMokvXsNgUP5vaJ8'); + $signature->setKeyFingerprint( + '8D2299D9C5C211128B32BBB0C097D9EC94C06363'); + + $signature->setKeyId('C097D9EC94C06363'); + $signature->setCreationDate(1267228319); + $signature->setExpirationDate(0); + $signature->setValid(true); + + $userId = new Crypt_GPG_UserId(); + $userId->setName('First Keypair Test Key'); + $userId->setComment('do not encrypt important data with this key'); + $userId->setEmail('first-keypair@example.com'); + $signature->setUserId($userId); + // }}} + + $expectedResults = array( + 'data' => 'Hello, Alice! Goodbye, Bob!', + 'signatures' => array($signature) + ); + + // encrypted with first subkey (ELG-E) of multiple-subkeys@example.com, + // signed with first-keypair@example.com + // {{{ encrypted data + $encryptedData = <<<TEXT +-----BEGIN PGP MESSAGE----- +Version: GnuPG v1.4.9 (GNU/Linux) + +hQEMAykh4NP/Ww9KAQgAhB2Ww2jNhy9ISQ/+S52eROzbN8ij65GoL9tTHK5TZp82 +mv+ieGwobe5PGYdBEvQdsSrKyF3x25oaEyjaOa+39DtmF82OZKZ3tIO3EJ1qvn8q +SHxwiKYa4MOgwER9pT7i/YZOZuIdII/NeuVuGxbsa5qdISltKkE7WS7yWStcDJi1 +goaPx3G1cZIVnTgSncK1YE4j2TZXBxI/zuuuH0pbZk7rK+K9zIeyYD1YZFagrjJh +REN5QbnT1v+1HXno1WRp4Obo072i3FjF505U1XLQ5p2/d55m73jfBJoqpb2NExdU +KimXnQZ+8/8ddzL3ZP4+g982dmLFvl2/h7KGtPOMbdKoAeMQYVolMDoQp6+nyQHP +CgpeFJY5+VnxNq1wEgJgXTo79xohN59wwad1ltcUGAVC49RMHbX+xBjR/HPCG9yt +QTwMes514uPYbNL6cGoKm7dt/zQL8YsjvfswGE06bj/rU3JCTDnR+iOUDHzUMDEn +jH7Vbs+9D1E9t5bSJs/8e7rzhZKF1AhunUdDmc4vPPJMV8xKF+o3h3nKQ6wEoOMz +f6XGFW8cvNAl +=vSGT +-----END PGP MESSAGE----- + +TEXT; + // }}} + + $this->gpg->addDecryptKey('multiple-subkeys@example.com', 'test'); + $results = $this->gpg->decryptAndVerify($encryptedData); + $this->assertDecryptAndVerifyResultsEquals($expectedResults, $results); + } + + // }}} + // {{{ testDecryptVerifySecondSubKey() + + /** + * @group string + */ + public function testDecryptVerifySecondSubKey() + { + // {{{ signature + $signature = new Crypt_GPG_Signature(); + $signature->setId('ZLZFDxxO+zdCEklUu6eppBCPCsA'); + $signature->setKeyFingerprint( + '8D2299D9C5C211128B32BBB0C097D9EC94C06363'); + + $signature->setKeyId('C097D9EC94C06363'); + $signature->setCreationDate(1267229043); + $signature->setExpirationDate(0); + $signature->setValid(true); + + $userId = new Crypt_GPG_UserId(); + $userId->setName('First Keypair Test Key'); + $userId->setComment('do not encrypt important data with this key'); + $userId->setEmail('first-keypair@example.com'); + $signature->setUserId($userId); + // }}} + + $expectedResults = array( + 'data' => 'Hello, Alice! Goodbye, Bob!', + 'signatures' => array($signature) + ); + + // encrypted with second subkey (RSA) of multiple-subkeys@example.com, + // signed with first-keypair@example.com + // {{{ encrypted data + $encryptedData = <<<TEXT +-----BEGIN PGP MESSAGE----- +Version: GnuPG v1.4.9 (GNU/Linux) + +hQEMAykh4NP/Ww9KAQgAs1xviSlaTTGXWNzT43giUSf7SnYoeoyYqZt/eo7c9eHu +sLGdhhpQeUiU5vW6UsOvs3QLx3hR9wYunUOKmDJmrrtVglsZIjuHU7oYlveozYwG +wlHNbesQlWyMNSQPDeGWAQAnOUU2jv/9nb93SLYlkDKr1qjn9qjZ4Kl2q1Yi4PSu +LaqI3r1LdJbFmEB6vQ8o6GiIpaFaZapK6vloPoq5xbaALAfAiSg58+IwV/Mn190L +T0tmFCUuTm/Px8fv5xe+mPW2pMUovhJhBrhBopEcWNHpxuNbxwac1T54COZxjC8W +L0XpYW7c3XVdO6VqS4pSnz+zo5EYcU2Sk6mfpN5ki9KoAdPZ4ICMe0OWIjMxgApI +AVHaKowZ6+xSW8vLRzWjJTZrlEoMjwJSOJwCsMcsu6MwJOFcVEl4Mc3TiAMsUHWf +6f/pHb7W2Am12CfJaaU0+nDQrlKOw5DfQG5YEG/LrpjXGugVWMQH/31MMKawSAP3 +QgdXe417ZeMtsHVaz/W1Za5ZpRpcwoT5N31LfNV+SoIpajhmtr79aeg8d6OH8H+l +7kLEDVlh9DP0 +=I21n +-----END PGP MESSAGE----- + +TEXT; + // }}} + + $this->gpg->addDecryptKey('multiple-subkeys@example.com', 'test'); + $results = $this->gpg->decryptAndVerify($encryptedData); + $this->assertDecryptAndVerifyResultsEquals($expectedResults, $results); + } + + // }}} + // {{{ testDecryptVerifySignedOnlyBadSignature() + + /** + * @group string + */ + public function testDecryptVerifySignedOnlyBadSignature() + { + // {{{ signature + $signature = new Crypt_GPG_Signature(); + $signature->setValid(false); + $signature->setKeyId('C097D9EC94C06363'); + $userId = new Crypt_GPG_UserId(); + $userId->setName('First Keypair Test Key'); + $userId->setComment('do not encrypt important data with this key'); + $userId->setEmail('first-keypair@example.com'); + $signature->setUserId($userId); + // }}} + + $expectedResults = array( + 'data' => "Hello, Bob! Goodbye, Alice!\n", + 'signatures' => array($signature) + ); + + // {{{ clearsigned data + $clearsignedData = <<<TEXT +-----BEGIN PGP SIGNED MESSAGE----- +Hash: SHA1 + +Hello, Bob! Goodbye, Alice! +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.4.6 (GNU/Linux) + +iD8DBQFI0vkCwJfZ7JTAY2MRAgzTAKCRecYZsCS+PE46Fa2QLTEP8XGLwwCfQEAL +qO+KlKcldtYdMZH9AA+KOLQ= +=EO2G +-----END PGP SIGNATURE----- + +TEXT; + // }}} + + $results = $this->gpg->decryptAndVerify($clearsignedData); + $this->assertDecryptAndVerifyResultsEquals($expectedResults, $results); + } + + // }}} + // {{{ testDecryptVerifyFile() + + /** + * @group file + */ + public function testDecryptVerifyFile() + { + // {{{ signature + $signature = new Crypt_GPG_Signature(); + $signature->setId('kVwy2yYB0TlXyGd9FUvVYp5jCoI'); + $signature->setKeyFingerprint( + '8D2299D9C5C211128B32BBB0C097D9EC94C06363'); + + $signature->setKeyId('C097D9EC94C06363'); + $signature->setCreationDate(1258220197); + $signature->setExpirationDate(0); + $signature->setValid(true); + + $userId = new Crypt_GPG_UserId(); + $userId->setName('First Keypair Test Key'); + $userId->setComment('do not encrypt important data with this key'); + $userId->setEmail('first-keypair@example.com'); + $signature->setUserId($userId); + // }}} + + $expectedMd5Sum = 'f96267d87551ee09bfcac16921e351c1'; + $expectedResults = array( + 'data' => null, + 'signatures' => array($signature) + ); + + $inputFilename = $this->getDataFilename('testDecryptVerifyFile.asc'); + $outputFilename = $this->getTempFilename('testDecryptVerifyFile.plain'); + + // file is encrypted with first-keypair@example.com + $this->gpg->addDecryptKey('first-keypair@example.com', 'test1'); + $results = $this->gpg->decryptAndVerifyFile( + $inputFilename, + $outputFilename + ); + + $this->assertDecryptAndVerifyResultsEquals($expectedResults, $results); + + $md5Sum = $this->getMd5Sum($outputFilename); + $this->assertEquals($expectedMd5Sum, $md5Sum); + } + + // }}} + // {{{ testDecryptVerifyFileToString() + + /** + * @group file + */ + public function testDecryptVerifyFileToString() + { + // {{{ signature + $signature = new Crypt_GPG_Signature(); + $signature->setId('GTvYFmQ5yfMM/UOffkYCx21Se2M'); + $signature->setKeyFingerprint( + '8D2299D9C5C211128B32BBB0C097D9EC94C06363'); + + $signature->setKeyId('C097D9EC94C06363'); + $signature->setCreationDate(1258221035); + $signature->setExpirationDate(0); + $signature->setValid(true); + + $userId = new Crypt_GPG_UserId(); + $userId->setName('First Keypair Test Key'); + $userId->setComment('do not encrypt important data with this key'); + $userId->setEmail('first-keypair@example.com'); + $signature->setUserId($userId); + // }}} + + $expectedSignatures = array($signature); + $expectedResults = array( + 'data' => 'Hello, Alice! Goodbye, Bob!', + 'signatures' => $expectedSignatures + ); + + $inputFilename = $this->getDataFilename( + 'testDecryptVerifyFileToString.asc' + ); + + // file is encrypted with first-keypair@example.com + $this->gpg->addDecryptKey('first-keypair@example.com', 'test1'); + $results = $this->gpg->decryptAndVerifyFile($inputFilename); + + $this->assertDecryptAndVerifyResultsEquals($expectedResults, $results); + } + + // }}} + // {{{ testDecryptVerifyFileNoPassphrase() + + /** + * @group file + */ + public function testDecryptVerifyFileNoPassphrase() + { + // {{{ signature + $signature = new Crypt_GPG_Signature(); + $signature->setId('unMY9l/f9sFaMvMV0H1ZuNJRY6Q'); + $signature->setKeyFingerprint( + '8D2299D9C5C211128B32BBB0C097D9EC94C06363'); + + $signature->setKeyId('C097D9EC94C06363'); + $signature->setCreationDate(1258220226); + $signature->setExpirationDate(0); + $signature->setValid(true); + + $userId = new Crypt_GPG_UserId(); + $userId->setName('First Keypair Test Key'); + $userId->setComment('do not encrypt important data with this key'); + $userId->setEmail('first-keypair@example.com'); + $signature->setUserId($userId); + // }}} + + $expectedMd5Sum = 'f96267d87551ee09bfcac16921e351c1'; + $expectedResults = array( + 'data' => null, + 'signatures' => array($signature) + ); + + $inputFilename = $this->getDataFilename( + 'testDecryptVerifyFileNoPassphrase.asc' + ); + $outputFilename = $this->getTempFilename( + 'testDecryptVerifyFileNoPassphrase.plain' + ); + + // file is encrypted with no-passphrase@example.com + $results = $this->gpg->decryptAndVerifyFile( + $inputFilename, + $outputFilename + ); + + $this->assertDecryptAndVerifyResultsEquals($expectedResults, $results); + + $md5Sum = $this->getMd5Sum($outputFilename); + $this->assertEquals($expectedMd5Sum, $md5Sum); + } + + // }}} + // {{{ testDecryptVerifyFileFileException_input() + + /** + * @expectedException Crypt_GPG_FileException + * + * @group file + */ + public function testDecryptVerifyFileFileException_input() + { + // input file does not exist + $inputFilename = $this->getDataFilename( + 'testDecryptVerifyFileFileException_input.asc' + ); + + $this->gpg->decryptAndVerifyFile($inputFilename); + } + + // }}} + // {{{ testDecryptVerifyFileFileException_output() + + /** + * @expectedException Crypt_GPG_FileException + * + * @group file + */ + public function testDecryptVerifyFileFileException_output() + { + // input file is encrypted with first-keypair@example.com + // output file does not exist + $inputFilename = $this->getDataFilename('testDecryptVerifyFile.asc'); + $outputFilename = './non-existent' . + '/testDecryptVerifyFileFileException_output.plain'; + + $this->gpg->addDecryptKey('first-keypair@example.com', 'test1'); + $this->gpg->decryptAndVerifyFile($inputFilename, $outputFilename); + } + + // }}} + // {{{ testDecryptVerifyFileKeyNotFoundException_decrypt() + + /** + * @expectedException Crypt_GPG_KeyNotFoundException + * + * @group file + */ + public function testDecryptVerifyFileKeyNotFoundException_decrypt() + { + // file is encrypted with missing-key@example.com, not signed + $inputFilename = $this->getDataFilename( + 'testDecryptFileKeyNotFoundException.asc' + ); + + $outputFilename = $this->getTempFilename( + 'testDecryptVerifyFileKeyNotFoundException.plain' + ); + + $this->gpg->decryptAndVerifyFile($inputFilename, $outputFilename); + } + + // }}} + // {{{ testDecryptVerifyFileDual() + + /** + * @group file + */ + public function testDecryptVerifyFileDual() + { + // {{{ signature + $signature = new Crypt_GPG_Signature(); + $signature->setId('7TYk0hpio90QZHHHb4UtgCWAEq4'); + $signature->setKeyFingerprint( + '8D2299D9C5C211128B32BBB0C097D9EC94C06363'); + + $signature->setKeyId('C097D9EC94C06363'); + $signature->setCreationDate(1258220362); + $signature->setExpirationDate(0); + $signature->setValid(true); + + $userId = new Crypt_GPG_UserId(); + $userId->setName('First Keypair Test Key'); + $userId->setComment('do not encrypt important data with this key'); + $userId->setEmail('first-keypair@example.com'); + $signature->setUserId($userId); + // }}} + + $expectedMd5Sum = 'f96267d87551ee09bfcac16921e351c1'; + $expectedResults = array( + 'data' => null, + 'signatures' => array($signature) + ); + + $inputFilename = $this->getDataFilename( + 'testDecryptVerifyFileDual.asc' + ); + $outputFilename = $this->getTempFilename( + 'testDecryptVerifyFileDual.plain' + ); + + // decrypt with first key + $this->gpg->addDecryptKey('first-keypair@example.com', 'test1'); + $results = $this->gpg->decryptAndVerifyFile( + $inputFilename, + $outputFilename + ); + $this->gpg->clearDecryptKeys(); + $this->assertDecryptAndVerifyResultsEquals($expectedResults, $results); + $md5Sum = $this->getMd5Sum($outputFilename); + $this->assertEquals($expectedMd5Sum, $md5Sum); + + // decrypt with second key + $this->gpg->addDecryptKey('second-keypair@example.com', 'test2'); + $results = $this->gpg->decryptAndVerifyFile( + $inputFilename, + $outputFilename + ); + $this->gpg->clearDecryptKeys(); + $this->assertDecryptAndVerifyResultsEquals($expectedResults, $results); + $md5Sum = $this->getMd5Sum($outputFilename); + $this->assertEquals($expectedMd5Sum, $md5Sum); + } + + // }}} + // {{{ testDecryptVerifyFileDualSignatories() + + /** + * @group file + */ + public function testDecryptVerifyFileDualSignatories() + { + // {{{ signature1 + $signature1 = new Crypt_GPG_Signature(); + $signature1->setId('MF8xqL325bs7KiokMHTnHirF4go'); + $signature1->setKeyFingerprint( + '880922DBEA733E906693E4A903CC890AFA1DAD4B'); + + $signature1->setKeyId('03CC890AFA1DAD4B'); + $signature1->setCreationDate(1258220269); + $signature1->setExpirationDate(0); + $signature1->setValid(true); + + $userId1 = new Crypt_GPG_UserId(); + $userId1->setName('Second Keypair Test Key'); + $userId1->setComment('do not encrypt important data with this key'); + $userId1->setEmail('second-keypair@example.com'); + $signature1->setUserId($userId1); + // }}} + // {{{ signature2 + $signature2 = new Crypt_GPG_Signature(); + $signature2->setId('d0q7jibZpJSLpGAhNWhpSkZZeUg'); + $signature2->setKeyFingerprint( + '8D2299D9C5C211128B32BBB0C097D9EC94C06363'); + + $signature2->setKeyId('C097D9EC94C06363'); + $signature2->setCreationDate(1258220269); + $signature2->setExpirationDate(0); + $signature2->setValid(true); + + $userId2 = new Crypt_GPG_UserId(); + $userId2->setName('First Keypair Test Key'); + $userId2->setComment('do not encrypt important data with this key'); + $userId2->setEmail('first-keypair@example.com'); + $signature2->setUserId($userId2); + // }}} + + $expectedMd5Sum = 'f96267d87551ee09bfcac16921e351c1'; + $expectedResults = array( + 'data' => null, + 'signatures' => array($signature1, $signature2) + ); + + $inputFilename = $this->getDataFilename( + 'testDecryptVerifyFileDualSignatories.asc' + ); + $outputFilename = $this->getTempFilename( + 'testDecryptVerifyFileDualSignatories.plain' + ); + + $this->gpg->addDecryptKey('first-keypair@example.com', 'test1'); + $results = $this->gpg->decryptAndVerifyFile( + $inputFilename, + $outputFilename + ); + $this->assertDecryptAndVerifyResultsEquals($expectedResults, $results); + $md5Sum = $this->getMd5Sum($outputFilename); + $this->assertEquals($expectedMd5Sum, $md5Sum); + } + + // }}} + // {{{ testDecryptVerifyFileDualOnePassphrase() + + /** + * @group file + */ + public function testDecryptVerifyFileDualOnePassphrase() + { + // {{{ signature + $signature = new Crypt_GPG_Signature(); + $signature->setId('kgyLjfFigxOrliyc8XlS6NaLJuw'); + $signature->setKeyFingerprint( + '8D2299D9C5C211128B32BBB0C097D9EC94C06363'); + + $signature->setKeyId('C097D9EC94C06363'); + $signature->setCreationDate(1258220334); + $signature->setExpirationDate(0); + $signature->setValid(true); + + $userId = new Crypt_GPG_UserId(); + $userId->setName('First Keypair Test Key'); + $userId->setComment('do not encrypt important data with this key'); + $userId->setEmail('first-keypair@example.com'); + $signature->setUserId($userId); + // }}} + + $expectedMd5Sum = 'f96267d87551ee09bfcac16921e351c1'; + $expectedResults = array( + 'data' => null, + 'signatures' => array($signature) + ); + + $inputFilename = $this->getDataFilename( + 'testDecryptVerifyFileDualOnePassphrase.asc' + ); + $outputFilename = $this->getTempFilename( + 'testDecryptVerifyFileDualOnePassphrase.plain' + ); + + // decrypt with no-passphrase + $results = $this->gpg->decryptAndVerifyFile( + $inputFilename, + $outputFilename + ); + $this->gpg->clearDecryptKeys(); + $this->assertDecryptAndVerifyResultsEquals($expectedResults, $results); + $md5Sum = $this->getMd5Sum($outputFilename); + $this->assertEquals($expectedMd5Sum, $md5Sum); + + // decrypt with second key + $this->gpg->addDecryptKey('first-keypair@example.com', 'test1'); + $results = $this->gpg->decryptAndVerifyFile( + $inputFilename, + $outputFilename + ); + $this->gpg->clearDecryptKeys(); + $this->assertDecryptAndVerifyResultsEquals($expectedResults, $results); + $md5Sum = $this->getMd5Sum($outputFilename); + $this->assertEquals($expectedMd5Sum, $md5Sum); + } + + // }}} + // {{{ testDecryptVerifyFileNoDataException() + + /** + * @expectedException Crypt_GPG_NoDataException + * + * @group file + */ + public function testDecryptVerifyFileNoDataException() + { + $filename = $this->getDataFilename('testFileEmpty.plain'); + $this->gpg->decryptAndVerifyFile($filename); + } + + // }}} + // {{{ testDecryptVerifyFileSignedOnly() + + /** + * @group file + */ + public function testDecryptVerifyFileSignedOnly() + { + // {{{ signature + $signature = new Crypt_GPG_Signature(); + $signature->setId('vctnI/HnsRYmqcVwCJcJhS60lKU'); + $signature->setKeyFingerprint( + '8D2299D9C5C211128B32BBB0C097D9EC94C06363'); + + $signature->setKeyId('C097D9EC94C06363'); + $signature->setCreationDate(1221960707); + $signature->setExpirationDate(0); + $signature->setValid(true); + + $userId = new Crypt_GPG_UserId(); + $userId->setName('First Keypair Test Key'); + $userId->setComment('do not encrypt important data with this key'); + $userId->setEmail('first-keypair@example.com'); + $signature->setUserId($userId); + // }}} + + $expectedMd5Sum = 'f96267d87551ee09bfcac16921e351c1'; + $expectedResults = array( + 'data' => null, + 'signatures' => array($signature) + ); + + $inputFilename = $this->getDataFilename( + 'testVerifyFileNormalSignedData.asc' + ); + + $outputFilename = $this->getTempFilename( + 'testDecryptVerifyFileSignedData.plain' + ); + + $results = $this->gpg->decryptAndVerifyFile( + $inputFilename, + $outputFilename + ); + + $this->assertDecryptAndVerifyResultsEquals($expectedResults, $results); + + $md5Sum = $this->getMd5Sum($outputFilename); + $this->assertEquals($expectedMd5Sum, $md5Sum); + } + + // }}} +} + +?>