1<?php 2 3/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ 4 5/** 6 * Decryption 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 DecryptTestCase 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 CVS: $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 decryption abilities of Crypt_GPG. 50 * 51 * @category Encryption 52 * @package Crypt_GPG 53 * @author Michael Gauthier <mike@silverorange.com> 54 * @copyright 2005-2008 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 DecryptTest extends Crypt_GPG_TestCase 59{ 60 /** 61 * @group string 62 */ 63 public function testDecrypt() 64 { 65 $expectedDecryptedData = 'Hello, Alice! Goodbye, Bob!'; 66 67 // encrypted with first-keypair@example.com 68 // {{{ encrypted data 69 $encryptedData = <<<TEXT 70-----BEGIN PGP MESSAGE----- 71Version: GnuPG v1.4.6 (GNU/Linux) 72 73hQIOA5+T+RFnKO8SEAf/Z0WsgibKGysYfti9lfb2aY7vmAwCXnkrI8wZhqBAtfmB 74oe16PinT47AtnXl4CUgB5jBJq32uzaZKFd/dyCzOog1P/87OB6aa2w5mfxJKIIXc 75OevQgasWVSQw/1Ro90Fd/F9Q9fcHgHqCG2Q2BwkHG7IZ+V3zHlQpjj5flVTb7Te+ 76K5LM85t7kVEzc5vVzhMvoZluMA48YNL+g7qdA3oZDQ0rXRA1DnTVsQ74/RbIQaxZ 77LUR7v05TVNrcwK/p2NFzLOJcYSkOYGUpks1qvfUlnsuh346SLHXmebif4GLkBB37 78WWy69+2OwJhlE0qakEJZu2EMFRwRTOrplm9YPs8Z6QgAlqKh5+KoSZTGyzBI8dHv 79lJJnlxBkzhrAj8g2kiUX5HfM+55jqtrdOo+PEd/nH56wTXaHqc7R0QE8ZdTyhmtd 80hlyzhdu/bHm09Q5WVAWkaA5nVldEtwIhss+YiWc+Ieu+rd5QkQiW9OAc4B7ZvPCO 81iDPpzT5rNe2hI4K9VkAKhcBDED+iCHkC4AZs3Rr/6tUCH+dY/roB0K1GtX2eYff6 82UeeSRsyuYbwQkKZN6pC4JQFWW7z9semrTsHsQzE38EW0IxN8nGCiaAE5cxjtW7Pg 83k9slzsranQ+n7teucg/+qlArY11LJmvPc7aoZoRCa76hzzDOHskA0/9GRcBQJlTd 84ctJWAd9/Bk9NJkwWO+II22IQTWZZrRUN8FT6pnr/WxpWM8LL5nq1Lxf3SQX+H2Jq 85JspFzixPnaDl16sE082GSg0VctFMkCZhb/jghMIQYJ2131DoGXJ4QDU= 86=sjPP 87-----END PGP MESSAGE----- 88 89TEXT; 90 // }}} 91 92 $this->gpg->addDecryptKey('first-keypair@example.com', 'test1'); 93 94 $decryptedData = $this->gpg->decrypt($encryptedData); 95 $this->assertEquals($expectedDecryptedData, $decryptedData); 96 } 97 98 /** 99 * @group string 100 */ 101 public function testDecryptNoPassphrase() 102 { 103 $expectedDecryptedData = 'Hello, Alice! Goodbye, Bob!'; 104 105 // encrypted with no-passphrase@example.com 106 // {{{ encrypted data no passphrase 107 $encryptedData = <<<TEXT 108-----BEGIN PGP MESSAGE----- 109Version: GnuPG v1.4.6 (GNU/Linux) 110 111hQIOAyS/OAcAwUtPEAf/cBqf/6najldCQzu5NNmuoyuujm2xpFESS4tljGhC7Hok 112gqiUnknDJMwNjb80OhsHIQuWjUqaryktKH0Y+Q5s+oDwRQKVKxqeF8v4hYRq8tXc 113a5gffr6lALBhpOHLcWM/oHQmPJgYAkdLDF1hoOwqlWGk5WklzjrRaJF2DwvvpvpL 1148yEU1fuO9t7cnD27L466cGMrK473NdiO/Bsml4CL9biNzth5yMia6HmgRQ1VDPQ6 115Q+plGSjTpCaXtq9fyK1Q+d9x/SeRqEVgo/R5n2w3YVZZxjNFPZ0wzMW0YtT7hTBc 116AKPt5IEwVFlFkOUT+1Xq/wj5fOFzgV+n1EFMJyTaOgf9HSAm0/L2lymIkK0qEZZK 117o0D0KBPQZrs47zj7qGnrmXlxkBydlwrCL6fULBVjK12ej4tdsYVROXfgkKohkEh4 118OxEAX9OsQuf/pSJU6TIYF39TcfKB0FqbmsD6F0DN1hZ5wVdXl+8q92MyZu5a44zD 1194fwKVlie+aENjiM0ePrDnFOK70KJVWoBlCXgouc3D6E7Rz4hC19WnWadOZF+2sHm 120s7kI5xlIivsftziItjEqqQt74RYpo+TLHTwE3cKc9rXGgtEyD8xykugzHEwetbfd 121fMdw+PvHv6jxBPdfz3/Xwe6kgqs1SrlOhQ/6tAf2uRD2C4LckXkc9Y4oC2T4iNlN 122FNJWAepBEH0MkQvukbwwR9SQw2oTK2YyWFhLEFXcS61NCQP+du6IPLBNpeE1m+Mc 1237lYaqPAkuwDq4wbJLEEVUyPNBnGRGD/al4cMowcGowGUEtn1kXR8lF4= 124=aHiA 125-----END PGP MESSAGE----- 126 127TEXT; 128 // }}} 129 130 $decryptedData = $this->gpg->decrypt($encryptedData); 131 $this->assertEquals($expectedDecryptedData, $decryptedData); 132 } 133 134 /** 135 * @group string 136 */ 137 public function testDecryptKeyNotFoundException() 138 { 139 $this->expectException('Crypt_GPG_KeyNotFoundException'); 140 141 // was encrypted with missing-key@example.com 142 // {{{ encrypted data 143 $encryptedData = <<<TEXT 144-----BEGIN PGP MESSAGE----- 145Version: GnuPG v1.4.6 (GNU/Linux) 146 147hQIOA0l79YQdiRYDEAgAk66FL4HUw7X5PPL4wjDbt4Q68GRAeIdkQutLuGvnlCJ0 148+LHt050deDhQd6FHmfT5K6Hp3eWApl87L5p0eQZhdaSguLZZxykFfhKENWua2YT4 149Kb+EpOsZA3R8UTT9H/HHJ/K5DUl/Zyog+G7ddrKP7CMa9wyYxD6DOJ12b2Yn1cuA 150u9am9eKmFZEwvoInF0WPdXeUyhMPY4QU43OUoIbF2fXjAq+WczqLbn0dDKH8CTqD 151hVSFRxyqia+w5nCSnzzyAcICYFOKUWzn6EiBW95gfJNvi6KzMXI7XvaSHhEkYXKA 15299WPLrHb95yRHjutXays+LDW00mjBttx40FhcQKdFgf/X8EhPdY+4F8hKctZ42FN 153bw57qxV7dbalA4jC7lOaqcfvMa/y/pR3ewPN7CM5GWqXo0xrpB9uYlC+f3L2tQbI 1545J/rYkCjQXZvOrpKaSCdp/7fhPp5NiFCy+VHakUfIou5O4KDm6h5lvFdFZtIFR9N 155+9rL/C2WjBj6evbiBuGWjR9CrwvI57zYTjJgVSggwozwKwnse8R/8gUDyFLb26Dh 156S/VKGm36N48kIuJ4UDUubLSJgwnU/Jiapx3M13GLsb/k+mjllwcc6/XlC0YN/7w4 157ZvemnGWt6/ivt8NhRM7pRY4joJBtJNrAUsoijmscdWhhqnMqx8liUeEfSlrPStk0 158INJWAaFpzdpNupyNLJI0pO0SAXX28yeNaDkJwzDZf8kU4U5T1zT+BabHVixmCB6/ 159CNl9/GMhmvFD5un2+hMDVfFjZ2FHSH5QgMF50Ws10+jpXan7PTDdNMw= 160=Qe7y 161-----END PGP MESSAGE----- 162 163TEXT; 164 // }}} 165 166 $this->gpg->decrypt($encryptedData); 167 } 168 169 /** 170 * @group string 171 */ 172 public function testDecryptNoDataException_invalid() 173 { 174 $this->expectException('Crypt_GPG_NoDataException'); 175 176 $encryptedData = 'Invalid OpenPGP data.'; 177 $this->gpg->decrypt($encryptedData); 178 } 179 180 /** 181 * @group string 182 */ 183 public function testDecryptNoDataException_empty() 184 { 185 $this->expectException('Crypt_GPG_NoDataException'); 186 187 $encryptedData = ''; 188 $this->gpg->decrypt($encryptedData); 189 } 190 191 /** 192 * @group string 193 */ 194 public function testDecryptBadPassphraseException_missing() 195 { 196 $this->expectException('Crypt_GPG_BadPassphraseException'); 197 198 // encrypted with first-keypair@example.com 199 // {{{ encrypted data 200 $encryptedData = <<<TEXT 201-----BEGIN PGP MESSAGE----- 202Version: GnuPG v1.4.6 (GNU/Linux) 203 204hQIOA5+T+RFnKO8SEAf/Z0WsgibKGysYfti9lfb2aY7vmAwCXnkrI8wZhqBAtfmB 205oe16PinT47AtnXl4CUgB5jBJq32uzaZKFd/dyCzOog1P/87OB6aa2w5mfxJKIIXc 206OevQgasWVSQw/1Ro90Fd/F9Q9fcHgHqCG2Q2BwkHG7IZ+V3zHlQpjj5flVTb7Te+ 207K5LM85t7kVEzc5vVzhMvoZluMA48YNL+g7qdA3oZDQ0rXRA1DnTVsQ74/RbIQaxZ 208LUR7v05TVNrcwK/p2NFzLOJcYSkOYGUpks1qvfUlnsuh346SLHXmebif4GLkBB37 209WWy69+2OwJhlE0qakEJZu2EMFRwRTOrplm9YPs8Z6QgAlqKh5+KoSZTGyzBI8dHv 210lJJnlxBkzhrAj8g2kiUX5HfM+55jqtrdOo+PEd/nH56wTXaHqc7R0QE8ZdTyhmtd 211hlyzhdu/bHm09Q5WVAWkaA5nVldEtwIhss+YiWc+Ieu+rd5QkQiW9OAc4B7ZvPCO 212iDPpzT5rNe2hI4K9VkAKhcBDED+iCHkC4AZs3Rr/6tUCH+dY/roB0K1GtX2eYff6 213UeeSRsyuYbwQkKZN6pC4JQFWW7z9semrTsHsQzE38EW0IxN8nGCiaAE5cxjtW7Pg 214k9slzsranQ+n7teucg/+qlArY11LJmvPc7aoZoRCa76hzzDOHskA0/9GRcBQJlTd 215ctJWAd9/Bk9NJkwWO+II22IQTWZZrRUN8FT6pnr/WxpWM8LL5nq1Lxf3SQX+H2Jq 216JspFzixPnaDl16sE082GSg0VctFMkCZhb/jghMIQYJ2131DoGXJ4QDU= 217=sjPP 218-----END PGP MESSAGE----- 219 220TEXT; 221 // }}} 222 223 $this->gpg->decrypt($encryptedData); 224 } 225 226 /** 227 * @group string 228 */ 229 public function testDecryptBadPassphraseException_bad() 230 { 231 $this->expectException('Crypt_GPG_BadPassphraseException'); 232 233 // encrypted with first-keypair@example.com 234 // {{{ encrypted data 235 $encryptedData = <<<TEXT 236-----BEGIN PGP MESSAGE----- 237Version: GnuPG v1.4.6 (GNU/Linux) 238 239hQIOA5+T+RFnKO8SEAf/Z0WsgibKGysYfti9lfb2aY7vmAwCXnkrI8wZhqBAtfmB 240oe16PinT47AtnXl4CUgB5jBJq32uzaZKFd/dyCzOog1P/87OB6aa2w5mfxJKIIXc 241OevQgasWVSQw/1Ro90Fd/F9Q9fcHgHqCG2Q2BwkHG7IZ+V3zHlQpjj5flVTb7Te+ 242K5LM85t7kVEzc5vVzhMvoZluMA48YNL+g7qdA3oZDQ0rXRA1DnTVsQ74/RbIQaxZ 243LUR7v05TVNrcwK/p2NFzLOJcYSkOYGUpks1qvfUlnsuh346SLHXmebif4GLkBB37 244WWy69+2OwJhlE0qakEJZu2EMFRwRTOrplm9YPs8Z6QgAlqKh5+KoSZTGyzBI8dHv 245lJJnlxBkzhrAj8g2kiUX5HfM+55jqtrdOo+PEd/nH56wTXaHqc7R0QE8ZdTyhmtd 246hlyzhdu/bHm09Q5WVAWkaA5nVldEtwIhss+YiWc+Ieu+rd5QkQiW9OAc4B7ZvPCO 247iDPpzT5rNe2hI4K9VkAKhcBDED+iCHkC4AZs3Rr/6tUCH+dY/roB0K1GtX2eYff6 248UeeSRsyuYbwQkKZN6pC4JQFWW7z9semrTsHsQzE38EW0IxN8nGCiaAE5cxjtW7Pg 249k9slzsranQ+n7teucg/+qlArY11LJmvPc7aoZoRCa76hzzDOHskA0/9GRcBQJlTd 250ctJWAd9/Bk9NJkwWO+II22IQTWZZrRUN8FT6pnr/WxpWM8LL5nq1Lxf3SQX+H2Jq 251JspFzixPnaDl16sE082GSg0VctFMkCZhb/jghMIQYJ2131DoGXJ4QDU= 252=sjPP 253-----END PGP MESSAGE----- 254 255TEXT; 256 // }}} 257 258 $this->gpg->addDecryptKey('first-keypair@example.com', 'incorrect'); 259 $this->gpg->decrypt($encryptedData); 260 } 261 262 /** 263 * @group string 264 */ 265 public function testDecryptDual() 266 { 267 $expectedDecryptedData = 'Hello, Alice! Goodbye, Bob!'; 268 269 // encrypted with both first-keypair@example.com and 270 // second-keypair@example.com 271 // {{{ dual encrypted data 272 $encryptedData = <<<TEXT 273-----BEGIN PGP MESSAGE----- 274Version: GnuPG v1.4.6 (GNU/Linux) 275 276hQIOA5+T+RFnKO8SEAf7BO/zLK6gDt5epMOEnHc9ESdSTy8yExdoSxHhvTFxWfwi 277AwMtBEur8sotSVt+Q87xYzjzE77+FQYS9oYCivlK/Nedblj3MiRuUWhM+Q9tbP3b 278KbwEwaQlrpNphQsKZOWkliZWmFJWnQ1s1Pm6lPlhwTNhcwkapm8EXuWFExJnY9yW 279EZjUOhVmnkitKykKup8Brvfm2QpGXoFZtHFKXTi162Lue9N0tDm6s3JnCIhMFQgI 280fyAikcsJKpbUgeGmzlWJO8QkH81QMuKpqfUb8R1dswhDp6RKXhoXS43zkhH8QSbM 281Cp9AWdv3qsWBUqzWavCxjtIsogYO+gFLl/Vuw5Y87Af/b7OQgLP1v6xKZcrTvFCF 282hxGxn+5M8E2GyJaKpQ1GZ+Wv+IzPGetm7rWf6q71hchAkxFMczIPSK7aARm9CNVo 2837tCdcUmUTgLhG1/0OfmkbwJUjdSpOtz8+TvIZa20Jj9a1G8WT3KTeivKMqBPhgk4 284sD7OJPDCYQNSQEw6pAn4oBrhJlDUkpCK6wIbUhzeq3MUwtM1e+qpCr/k4In4NVq6 285cmoC7W//9J69ecuxmiUHRhZ4CALRxQMAsSxMRnNJ26JY4ko82Rfvbrz8QEmKcIyT 286bTdAMsZ18m9XXrnc2ACDDMQyUkneQDUZSt7V67ZiN4Upi295CynIbNEMmcH/13Aa 287aoUCDgOy9U5HV+IkUBAIALGICOFzyfquWZ0ZhPGVdDWx1yNcApnzIgZx1JbBpMyc 2882jb9aQHwGId26gv/ym/M/3FJ0lv+IAcktMjO4dwYLnUuBa6BOFFybZi3gYvXtSuy 289iW4ygVjIsYixhvbsyaVCoB/MsNBFrQAHEShaxALBkI/dv+yyD8BifU4Yj9LFcAZO 290mFDraOgYfHsur5eevYTXozf5wU7phu9v6zo5bk8zgZSqs8AgyscstZWCqCtR/cG0 291t9lAIovGPsIcA12qvkm/A0WiBMEWhGryzHTv9oRsFztOFtqH+MmLdlvWjElw8hKt 292fFJB+bhHNO9BUIrwnuH79cA4aXOy1+xG+ECs7oJbcisIANqJKalQLgBYEjbucpDg 293O8i/c4RmV9J7VczpZp7ZREMpTmv9nV849OFXT1strsb/+vXOXOyLToG1gOxRfJr2 294q9jFjpyMAtrr/aHhXMKK1OMhhcdkQMEKuHTvon5KleZOQoVmIqa3kUtWNW1vFBIP 295UfJFH202EJLOLC25rXCtzRsJE0HWiYDyLqKMQcSQhTcngLBLmeDLH3DeGUIDwcZe 296oWgUg8wB/oSoU4AchShzO+yM6bcmffcaHFqwll9gdu9walnJAAOb8+r6LGGlsGTV 297qhnR0LM3Khp+HOFdaxcQT6BV1aw/D6Z5hIi+Am0VTi0HlFr/gwleyYaP+742Z6K0 298s8bSVgFT2Pjik+byARWzRwWjmi0jT7QsgITM73aBKPDXiArEPkv8YtC9HzUj0lCY 299gX7Eg2ZqISULFydBckMJ6drojMMQiqZBeEc09GupSBL1zldnKHfiXBTw 300=QYjj 301-----END PGP MESSAGE----- 302 303TEXT; 304 // }}} 305 306 // decrypt with first key 307 $this->gpg->addDecryptKey('first-keypair@example.com', 'test1'); 308 $decryptedData = $this->gpg->decrypt($encryptedData); 309 $this->gpg->clearDecryptKeys(); 310 $this->assertEquals($expectedDecryptedData, $decryptedData); 311 312 // decrypt with second key 313 $this->gpg->addDecryptKey('second-keypair@example.com', 'test2'); 314 $decryptedData = $this->gpg->decrypt($encryptedData); 315 $this->gpg->clearDecryptKeys(); 316 $this->assertEquals($expectedDecryptedData, $decryptedData); 317 } 318 319 /** 320 * @group string 321 */ 322 public function testDecryptDualOnePassphrase() 323 { 324 $expectedDecryptedData = 'Hello, Alice! Goodbye, Bob!'; 325 326 // encrypted with both first-keypair@example.com and 327 // no-passphrase@example.com 328 // {{{ dual encrypted data one passphrase 329 $encryptedData = <<<TEXT 330-----BEGIN PGP MESSAGE----- 331Version: GnuPG v1.4.6 (GNU/Linux) 332 333hQIOA5+T+RFnKO8SEAgAkvANavo5eEeJ/C0njcciAh/ELcgqynhwM4R3texCA9HF 334043Z5kd4nMr2NUFBFG+UAzFSoB2zO5FZWsESMi71aIgzjX+CG754vw4j1I6Elsa8 335An1Tldb4vPJqEWdp9ynu/i90wqYUc6DNp8MLilTfFk16GdPv2L8wjOUFlJqV3OdA 336LJ68ppg3Qr8H0R81HSLPkSMc+o6GpljVShcejLeG14EpoW16ryZHXQk9T9bZzj1L 337VQT/t8jgj5h2ocEtUCXixNBpFoRdMGMZB4SWXH4Aw3GiSCNSz/xQOgOSu9c/FdVD 338WE1KCds4DGo5Za6rpDHxBCa8OhUNfhFiOAIcffz4MwgA07vc9jiAU7kGaR86AQuu 339UlzYe0ZZd6hALVxUAfnBF2aG5Jjhm3muwOEu7e3zk3hd/xVPzT5BQ+1/mt+vlS8E 340Ffjr13q/nKdoGTW7+orFjcwOmhpsJJcrTU+6TynkpmjNLyHhZix/roNbEPij7JJu 341StO+vbyu22xWc2mp56AbhO8MLwBC6Vxc2h2ZJXjXcaCLkntnOEPxx653sC55KqHm 3426gY4Ycwh+cnF9z+dWZBPak/LlHP4pmrSaeIc+8pS9Q6zFdVtrppzjTPCH0/FPxA2 343QTwBMXrClF8iYNfvJ8a+Se3ZqzmPbpvbbdtTGm49Bo4FNrdHVkC+MMgBEQiJKkbq 344/4UCDgMkvzgHAMFLTxAH/3a9Et2b3u61MMd0iag7haurrRsMwd6E9VD2SC6gbscF 345efInr202g78bbyf0AnISnWBjZC8lfmiyoe6Ic7NO5HGzddJ2UPyeiA9ggNPlARlZ 346OQngAaFzvP8NyMhYMIz5tUxxhYA9U8yjgEuhr/lq+olZwk6iiSaD3lP0q715XkLC 347uVJ6uxZoBjRaKsVnNLcXvXY6C0IcrGzSr6wKvJm4kQ3RjahRjJvUJG8yeKtbUmHz 348KBeorg4HQADXcK5Bcp9NCMatds1jvR/Zf8DakAO4G1T8Yb09xEQCVFqFIk7g1NDB 349T/vHtAdYolvyeS7wlF1TMFuYfuMOi0kVdlbx/PlhpN4H/Recs7EMcl/9gUwUktOl 3506xyDvA36QvO9RN0D504Ck+ZZjMNFId6fdU/ngSjq9AAteLRLUFgapbMTN2calf1J 3510ehPzMINegvnVB2dR+xcc67QpxmR5uIA2jK1fSkhvOohE7UxE7xqp4SIMw6E92zy 352ZvmhQVIqN6/s4k8KxrZKe/uhtDj963m7rsdR7v9wQsc1jJ/f+KZxy73r2Oz7BdTf 353cpKaMKY/CHiy0NQ3jPrY3oVOIEzu15q4raOhIT5FQoH0pWgmBID3aQsEMjAdeCTy 354JGHa4ZhQn9LSI+1XQmT3h8tWNYtAm9u3eqFsSm7ENMj3fY2Bd9wKlwTuTzsNhsdw 355hvHSVgFkfzy/xAiLNPzXydzWJ3bm6ZetguDA/lNgfSaNVR4zSiPSbmV9ipJtrPpB 356S6stCnUnw33F2IUOsEufvLFfEWtXY8qbBCULYC+no3GOwJhMyJQEI+xw 357=1ZwO 358-----END PGP MESSAGE----- 359 360TEXT; 361 // }}} 362 363 // decrypt with no passphrase 364 $decryptedData = $this->gpg->decrypt($encryptedData); 365 $this->assertEquals($expectedDecryptedData, $decryptedData); 366 367 // decrypt with first key 368 $this->gpg->addDecryptKey('first-keypair@example.com', 'test1'); 369 $decryptedData = $this->gpg->decrypt($encryptedData); 370 $this->gpg->clearDecryptKeys(); 371 $this->assertEquals($expectedDecryptedData, $decryptedData); 372 } 373 374 /** 375 * @group string 376 */ 377 public function testDecryptDualNoPassphraseKeyMissing() 378 { 379 $this->expectException('Crypt_GPG_BadPassphraseException'); 380 381 // encrypted with both first-keypair@example.com and 382 // second-keypair@example.com 383 // {{{ dual encrypted data 384 $encryptedData = <<<TEXT 385-----BEGIN PGP MESSAGE----- 386Version: GnuPG v1.4.6 (GNU/Linux) 387 388hQIOA5+T+RFnKO8SEAf7BO/zLK6gDt5epMOEnHc9ESdSTy8yExdoSxHhvTFxWfwi 389AwMtBEur8sotSVt+Q87xYzjzE77+FQYS9oYCivlK/Nedblj3MiRuUWhM+Q9tbP3b 390KbwEwaQlrpNphQsKZOWkliZWmFJWnQ1s1Pm6lPlhwTNhcwkapm8EXuWFExJnY9yW 391EZjUOhVmnkitKykKup8Brvfm2QpGXoFZtHFKXTi162Lue9N0tDm6s3JnCIhMFQgI 392fyAikcsJKpbUgeGmzlWJO8QkH81QMuKpqfUb8R1dswhDp6RKXhoXS43zkhH8QSbM 393Cp9AWdv3qsWBUqzWavCxjtIsogYO+gFLl/Vuw5Y87Af/b7OQgLP1v6xKZcrTvFCF 394hxGxn+5M8E2GyJaKpQ1GZ+Wv+IzPGetm7rWf6q71hchAkxFMczIPSK7aARm9CNVo 3957tCdcUmUTgLhG1/0OfmkbwJUjdSpOtz8+TvIZa20Jj9a1G8WT3KTeivKMqBPhgk4 396sD7OJPDCYQNSQEw6pAn4oBrhJlDUkpCK6wIbUhzeq3MUwtM1e+qpCr/k4In4NVq6 397cmoC7W//9J69ecuxmiUHRhZ4CALRxQMAsSxMRnNJ26JY4ko82Rfvbrz8QEmKcIyT 398bTdAMsZ18m9XXrnc2ACDDMQyUkneQDUZSt7V67ZiN4Upi295CynIbNEMmcH/13Aa 399aoUCDgOy9U5HV+IkUBAIALGICOFzyfquWZ0ZhPGVdDWx1yNcApnzIgZx1JbBpMyc 4002jb9aQHwGId26gv/ym/M/3FJ0lv+IAcktMjO4dwYLnUuBa6BOFFybZi3gYvXtSuy 401iW4ygVjIsYixhvbsyaVCoB/MsNBFrQAHEShaxALBkI/dv+yyD8BifU4Yj9LFcAZO 402mFDraOgYfHsur5eevYTXozf5wU7phu9v6zo5bk8zgZSqs8AgyscstZWCqCtR/cG0 403t9lAIovGPsIcA12qvkm/A0WiBMEWhGryzHTv9oRsFztOFtqH+MmLdlvWjElw8hKt 404fFJB+bhHNO9BUIrwnuH79cA4aXOy1+xG+ECs7oJbcisIANqJKalQLgBYEjbucpDg 405O8i/c4RmV9J7VczpZp7ZREMpTmv9nV849OFXT1strsb/+vXOXOyLToG1gOxRfJr2 406q9jFjpyMAtrr/aHhXMKK1OMhhcdkQMEKuHTvon5KleZOQoVmIqa3kUtWNW1vFBIP 407UfJFH202EJLOLC25rXCtzRsJE0HWiYDyLqKMQcSQhTcngLBLmeDLH3DeGUIDwcZe 408oWgUg8wB/oSoU4AchShzO+yM6bcmffcaHFqwll9gdu9walnJAAOb8+r6LGGlsGTV 409qhnR0LM3Khp+HOFdaxcQT6BV1aw/D6Z5hIi+Am0VTi0HlFr/gwleyYaP+742Z6K0 410s8bSVgFT2Pjik+byARWzRwWjmi0jT7QsgITM73aBKPDXiArEPkv8YtC9HzUj0lCY 411gX7Eg2ZqISULFydBckMJ6drojMMQiqZBeEc09GupSBL1zldnKHfiXBTw 412=QYjj 413-----END PGP MESSAGE----- 414 415TEXT; 416 // }}} 417 418 // #21148: Make sure that proper exception is thrown 419 // when decrypting without specyfying a passphrase 420 421 // in this case we remove one of private keys to make 422 // sure proper exception is thrown also in this case 423 $this->gpg->deletePrivateKey('first-keypair@example.com'); 424 425 $this->gpg->decrypt($encryptedData); 426 } 427 428 /** 429 * @group string 430 */ 431 public function testDecryptSignedData() 432 { 433 $expectedDecryptedData = 'Hello, Alice! Goodbye, Bob!'; 434 435 // signed with first-keypair@example.com 436 // {{{ signed data 437 $signedData = <<<TEXT 438-----BEGIN PGP MESSAGE----- 439Version: GnuPG v1.4.6 (GNU/Linux) 440 441owGbwMvMwCR4YPrNN1MOJCczrjFOEsrLL8pNzNEtzkzPS03RTUksSfS49JPJIzUn 442J19HwTEnMzlVUcE9Pz8lqTJVR8EpP0mxw56ZlQGkBmaMIJO9GsOCo2L3pk5y2DNT 443yiFKb0X03YSJqscaGRb0BKjZ3P+6SvjG160/WOa9vpey4QUDAA== 444=wtCB 445-----END PGP MESSAGE----- 446 447TEXT; 448 // }}} 449 450 $decryptedData = $this->gpg->decrypt($signedData); 451 $this->assertEquals($expectedDecryptedData, $decryptedData); 452 } 453 454 /** 455 * @group string 456 */ 457 public function testDecryptFirstSubKey() 458 { 459 $expectedDecryptedData = 'Hello, Alice! Goodbye, Bob!'; 460 461 // encrypted with first subkey (ELG-E) of multiple-subkeys@example.com 462 // {{{ encrypted data 463 $encryptedData = <<<TEXT 464-----BEGIN PGP MESSAGE----- 465Version: GnuPG v1.4.6 (GNU/Linux) 466 467hQIOA2+UGsw2JFPaEAf/TQ5We9V090WikWJTnpLwIZVgJSU1aCcG6R9h3wBOPFHi 468RLQ4jBSL8EvXk4VwVJ0tuqpcB10+W1OugWbHTOxWnpbioEaUJk8jRu3MZvnyJe/d 4693FcLlqXE0SocZR1Okxbp64tDvBzs4jjniQYfoMEM1j/VVlkQ02nufOLy6uvxPZjf 470KkSeCVSy0HIaT0U5e3R28fT+dYN8i2RhT8AckjWeovJAMbHxCCsKdinI45u7O1QA 471t9zZxMBaUvo/ikLM1/fyw7E8QaGCh4LlH8WrgBXneAgOPtlkHGziS/I54RSvGe07 472yWrYkNzFch0l9RnGjAMqqzY9kXn+HxMr3bOFKeSzVQgAssvhcx6OjD+ZzRnVb8D+ 473i5KYFTrVih377e5cBhayWEEIdNeV/QTH9ooZxEVqxC10J5P6UgwNewOYhGJxr1yN 474Nn2+KlgfoXuqa5RtLhShjDduPF5FS3v7HKGXuyXBQ+W9FcVeytayo8QRqbMqxWZe 475dNlgjfbNsXJtUjm/48fYdmIiBkb5lf+2LPBhX9JHekVbzJdqx3kigcyXnh7VefKZ 476fWnOmDdAd3hqeeagXUVGmtH+z6+XDGSKDuoBbwreHxr0ZIpW8mm6I6nx9kBF+LoE 477OapSuua9s7ddcBxaOVUGECiH4owhHnfFQSz58XsRNIbkZL8R4YewrCmCoscN6/qN 478adJWAY877iMazlpAzZWr6IZNvKqsET8yQbCllR0olqgh/VOmYUrnj31XtVFgP+47 479kjHVkhz76aEUtquqMmWsR8r8p42TqR0u1KoW2dGysFzdPreXPORf3tQ= 480=i9lR 481-----END PGP MESSAGE----- 482 483TEXT; 484 // }}} 485 486 $this->gpg->addDecryptKey('multiple-subkeys@example.com', 'test'); 487 488 $decryptedData = $this->gpg->decrypt($encryptedData); 489 $this->assertEquals($expectedDecryptedData, $decryptedData); 490 } 491 492 /** 493 * @group string 494 */ 495 public function testDecryptSecondSubKey() 496 { 497 $expectedDecryptedData = 'Hello, Alice! Goodbye, Bob!'; 498 499 // encrypted with second subkey (RSA) of multiple-subkeys@example.com 500 // {{{ encrypted data 501 $encryptedData = <<<TEXT 502-----BEGIN PGP MESSAGE----- 503Version: GnuPG v1.4.6 (GNU/Linux) 504 505hQEMAykh4NP/Ww9KAQf9HLxeXIXDMXEyJaCsfulZodSavNBP0IuZrXVkxrMPPart 506fOf2N0Snnq3vA3MjPL9vEfD5sZLlA2bYMZmilyCh+lryYccME+Qa1gQ5xak1Cra1 507y5ckZ7UNOTdHnhH5VvXk+bwm4KDbdeJJPLOxBJ/j6pf03vxeDEyoBPeeMzzzkXqH 508+XZ9j7BHZcsLkY7j7iEw1DwcB4TdbOzkcVVBYwovCmhdY0i0m48mkqGVB0mKNUu+ 509YbJuOqiqjACIwXBelB4h/xEXGeEPk+ij1UMt74QhNM2OaQ2HUhIKYMWvAHYuGAvx 510+ETuFiJo5OqCa4jW4Nqczw4FYLSDOVHdzKw7+dqeddJWAVST6k4823HSprJVFJ+i 511pY9Bijx3ziDr14+IPxspoJTOInBFYihbwmLFL2RYsf0+pDFmngRhskWIyl4ann4/ 512w7YcziO6EF7lbOqYdn+rBA8e46kgbBQ= 513=7fzo 514-----END PGP MESSAGE----- 515 516TEXT; 517 // }}} 518 519 $this->gpg->addDecryptKey('multiple-subkeys@example.com', 'test'); 520 521 $decryptedData = $this->gpg->decrypt($encryptedData); 522 $this->assertEquals($expectedDecryptedData, $decryptedData); 523 } 524 525 /** 526 * @group file 527 */ 528 public function testDecryptFile() 529 { 530 $expectedMd5Sum = 'f96267d87551ee09bfcac16921e351c1'; 531 $inputFilename = $this->getDataFilename('testDecryptFile.asc'); 532 $outputFilename = $this->getTempFilename('testDecryptFile.plain'); 533 534 // file is encrypted with first-keypair@example.com 535 $this->gpg->addDecryptKey('first-keypair@example.com', 'test1'); 536 $this->gpg->decryptFile($inputFilename, $outputFilename); 537 538 $md5Sum = $this->getMd5Sum($outputFilename); 539 $this->assertEquals($expectedMd5Sum, $md5Sum); 540 } 541 542 /** 543 * @group file 544 */ 545 public function testDecryptFileToString() 546 { 547 $expectedData = 'Hello, Alice! Goodbye, Bob!'; 548 $inputFilename = $this->getDataFilename('testDecryptFileToString.asc'); 549 550 // file is encrypted with first-keypair@example.com 551 $this->gpg->addDecryptKey('first-keypair@example.com', 'test1'); 552 $decryptedData = $this->gpg->decryptFile($inputFilename); 553 554 $this->assertEquals($expectedData, $decryptedData); 555 } 556 557 /** 558 * @group file 559 */ 560 public function testDecryptFileNoPassphrase() 561 { 562 $expectedMd5Sum = 'f96267d87551ee09bfcac16921e351c1'; 563 564 $inputFilename = 565 $this->getDataFilename('testDecryptFileNoPassphrase.asc'); 566 567 $outputFilename = 568 $this->getTempFilename('testDecryptFileNoPassphrase.plain'); 569 570 // file is encrypted with no-passphrase@example.com 571 $this->gpg->decryptFile($inputFilename, $outputFilename); 572 573 $md5Sum = $this->getMd5Sum($outputFilename); 574 $this->assertEquals($expectedMd5Sum, $md5Sum); 575 } 576 577 /** 578 * @group file 579 */ 580 public function testDecryptFileFileException_input() 581 { 582 $this->expectException('Crypt_GPG_FileException'); 583 584 // input file does not exist 585 $inputFilename = 586 $this->getDataFilename('testDecryptFileFileException_input.asc'); 587 588 $this->gpg->decryptFile($inputFilename); 589 } 590 591 /** 592 * @group file 593 */ 594 public function testDecryptFileFileException_output() 595 { 596 $this->expectException('Crypt_GPG_FileException'); 597 598 // input file is encrypted with first-keypair@example.com 599 // output file does not exist 600 $inputFilename = $this->getDataFilename('testDecryptFile.asc'); 601 $outputFilename = './non-existent' . 602 '/testDecryptFileFileException_output.plain'; 603 604 $this->gpg->addDecryptKey('first-keypair@example.com', 'test1'); 605 $this->gpg->decryptFile($inputFilename, $outputFilename); 606 } 607 608 /** 609 * @group file 610 */ 611 public function testDecryptFileKeyNotFoundException() 612 { 613 $this->expectException('Crypt_GPG_KeyNotFoundException'); 614 615 // file is encrypted with missing-key@example.com 616 $inputFilename = 617 $this->getDataFilename('testDecryptFileKeyNotFoundException.asc'); 618 619 $outputFilename = 620 $this->getTempFilename('testDecryptFileKeyNotFoundException.plain'); 621 622 $this->gpg->decryptFile($inputFilename, $outputFilename); 623 } 624 625 /** 626 * @group file 627 */ 628 public function testDecryptFileDual() 629 { 630 $expectedMd5Sum = 'f96267d87551ee09bfcac16921e351c1'; 631 $inputFilename = $this->getDataFilename('testDecryptFileDual.asc'); 632 $outputFilename = $this->getTempFilename('testDecryptFileDual.plain'); 633 634 // decrypt with first key 635 $this->gpg->addDecryptKey('first-keypair@example.com', 'test1'); 636 $this->gpg->decryptFile($inputFilename, $outputFilename); 637 $this->gpg->clearDecryptKeys(); 638 $md5Sum = $this->getMd5Sum($outputFilename); 639 $this->assertEquals($expectedMd5Sum, $md5Sum); 640 641 // decrypt with second key 642 $this->gpg->addDecryptKey('second-keypair@example.com', 'test2'); 643 $this->gpg->decryptFile($inputFilename, $outputFilename); 644 $this->gpg->clearDecryptKeys(); 645 $md5Sum = $this->getMd5Sum($outputFilename); 646 $this->assertEquals($expectedMd5Sum, $md5Sum); 647 } 648 649 /** 650 * @group file 651 */ 652 public function testDecryptFileDualOnePassphrase() 653 { 654 $expectedMd5Sum = 'f96267d87551ee09bfcac16921e351c1'; 655 656 $inputFilename = 657 $this->getDataFilename('testDecryptFileDualOnePassphrase.asc'); 658 659 $outputFilename = 660 $this->getTempFilename('testDecryptFileDualOnePassphrase.plain'); 661 662 // decrypt with no-passphrase 663 $this->gpg->decryptFile($inputFilename, $outputFilename); 664 $md5Sum = $this->getMd5Sum($outputFilename); 665 $this->assertEquals($expectedMd5Sum, $md5Sum); 666 667 // decrypt with first key 668 $this->gpg->addDecryptKey('first-keypair@example.com', 'test1'); 669 $this->gpg->decryptFile($inputFilename, $outputFilename); 670 $this->gpg->clearDecryptKeys(); 671 $md5Sum = $this->getMd5Sum($outputFilename); 672 $this->assertEquals($expectedMd5Sum, $md5Sum); 673 } 674 675 /** 676 * @group file 677 */ 678 public function testDecryptFileNoDataException() 679 { 680 $this->expectException('Crypt_GPG_NoDataException'); 681 682 $filename = $this->getDataFilename('testFileEmpty.plain'); 683 $this->gpg->decryptFile($filename); 684 } 685 686 /** 687 * @group string 688 */ 689 public function testDecryptFileSignedData() 690 { 691 $expectedMd5Sum = 'f96267d87551ee09bfcac16921e351c1'; 692 693 $inputFilename = 694 $this->getDataFilename('testVerifyFileNormalSignedData.asc'); 695 696 $outputFilename = 697 $this->getTempFilename('testDecryptFileSignedData.plain'); 698 699 $this->gpg->decryptFile($inputFilename, $outputFilename); 700 701 $md5Sum = $this->getMd5Sum($outputFilename); 702 $this->assertEquals($expectedMd5Sum, $md5Sum); 703 } 704} 705