mirror of
https://github.com/php-gnupg/php-gnupg.git
synced 2026-01-12 11:19:35 +00:00
Fix #32: Decryption of message encrypted with multiple keys
When the message is encrypted with multiple keys and the decryption key(s) added is not the first encrypted key, then it was failing due to invalid early failure when uid was not found in decrypted keys. This changes such behavior and just returns empty key instead in such case.
This commit is contained in:
parent
91e92a2690
commit
34e4c9542b
4 changed files with 137 additions and 4 deletions
6
gnupg.c
6
gnupg.c
|
|
@ -742,8 +742,10 @@ gpgme_error_t passphrase_decrypt_cb (
|
|||
uid[idx] = '\0';
|
||||
if (!PHPC_HASH_CSTR_FIND_PTR_IN_COND(
|
||||
PHPC_THIS->decryptkeys, (char *)uid, passphrase)) {
|
||||
GNUPG_ERR("no passphrase set");
|
||||
return 1;
|
||||
/* If the requested key is not in decryptkeys, ignore it and return success. It then tries
|
||||
* to call callback for the next key if the message was encrypted with more than one key. */
|
||||
write(fd, "\n", 1);
|
||||
return 0;
|
||||
}
|
||||
if (!passphrase) {
|
||||
GNUPG_ERR("no passphrase set");
|
||||
|
|
|
|||
29
tests/gnupg_oo_decrypt_multi_key.phpt
Normal file
29
tests/gnupg_oo_decrypt_multi_key.phpt
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
--TEST--
|
||||
encrypt and decrypt a text with multiple keys
|
||||
--SKIPIF--
|
||||
<?php if(!class_exists("gnupg")) die("skip"); ?>
|
||||
--FILE--
|
||||
<?php
|
||||
require_once "gnupgt.inc";
|
||||
gnupgt::import_keys();
|
||||
|
||||
$gpg = new gnupg();
|
||||
$gpg->seterrormode(gnupg::ERROR_WARNING);
|
||||
$gpg->addencryptkey($fingerprint);
|
||||
$gpg->addencryptkey($fingerprint2);
|
||||
$gpg->addencryptkey($fingerprint3);
|
||||
$enc = $gpg->encrypt($plaintext);
|
||||
|
||||
$gpg = new gnupg();
|
||||
$gpg->adddecryptkey($fingerprint2, $passphrase2);
|
||||
$ret = $gpg->decrypt($enc);
|
||||
|
||||
var_dump($ret);
|
||||
?>
|
||||
--EXPECTF--
|
||||
string(7) "foo bar"
|
||||
--CLEAN--
|
||||
<?php
|
||||
require_once "gnupgt.inc";
|
||||
gnupgt::delete_key();
|
||||
?>
|
||||
|
|
@ -66,7 +66,7 @@ class gnupgt {
|
|||
}
|
||||
|
||||
/**
|
||||
* Import all keys
|
||||
* Import a single key
|
||||
*/
|
||||
static public function import_key($privkey = null)
|
||||
{
|
||||
|
|
@ -78,6 +78,21 @@ class gnupgt {
|
|||
$gpg->import(is_null($privkey) ? $testkey : $privkey);
|
||||
}
|
||||
|
||||
/**
|
||||
* Import all keys
|
||||
*/
|
||||
static public function import_keys()
|
||||
{
|
||||
global $testkey, $testkey2, $testkey3;
|
||||
|
||||
self::reset_key();
|
||||
|
||||
$gpg = self::create_instance();
|
||||
$gpg->import($testkey);
|
||||
$gpg->import($testkey2);
|
||||
$gpg->import($testkey3);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete all keys.
|
||||
* @param null|string $homeDir
|
||||
|
|
|
|||
|
|
@ -66,4 +66,91 @@ ngBZTudrwBbKC8xx224aOk0TiDbiWftGtx4=
|
|||
=py/2
|
||||
-----END PGP PRIVATE KEY BLOCK-----
|
||||
EOF;
|
||||
?>
|
||||
|
||||
// RSA 2048 key with different passprhrase than testkey
|
||||
$passphrase2 = "blabla2";
|
||||
$fingerprint2 = "FB7E60AA1FE2564B10DF07FEA4C19633A227485F";
|
||||
$testkey2 = <<<EOF
|
||||
-----BEGIN PGP PRIVATE KEY BLOCK-----
|
||||
|
||||
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
|
||||
=RBbv
|
||||
-----END PGP PRIVATE KEY BLOCK-----
|
||||
EOF;
|
||||
|
||||
// EC Curve 25519 Key with the same passphrase as testkey
|
||||
$passphrase3 = "blabla";
|
||||
$fingerprint3 = "2D5CCE418C7212931917A35E8A1C9B7E78F3F200";
|
||||
$testkey3 = <<<EOF
|
||||
-----BEGIN PGP PRIVATE KEY BLOCK-----
|
||||
|
||||
lIYEaAfDfBYJKwYBBAHaRw8BAQdA4jPoB0hx6VQELdNec5yMmGdk1y0w+FBd4795
|
||||
Nzawq1v+BwMCQ0Stv6AJZoX/N+canKS8Reb1WI6rd2AFYJ1a635SuzJuiAXpZjNr
|
||||
1dqQWzqfyiPkvSuEBX3xUoipnncyT4oS1v3Xxz2LyaJsVD/M84murbQkUEhQIFRo
|
||||
aXJkIFRlc3QgPHRlc3QzQGdudXBnLnBocC5uZXQ+iJMEExYKADsWIQQtXM5BjHIS
|
||||
kxkXo16KHJt+ePPyAAUCaAfDfAIbAwULCQgHAgIiAgYVCgkICwIEFgIDAQIeBwIX
|
||||
gAAKCRCKHJt+ePPyAItFAQC5zOjM4m5R4LC9z2+Qc9+o/NsazZm4pRg/0GdDNKSq
|
||||
RwD/fZkEQ3NVqAGyZAf05xySuCohjq6NyXB7FoHEKNM8DQaciwRoB8N8EgorBgEE
|
||||
AZdVAQUBAQdALxHB/DCBuPT2N0D0blqPfCkzAoUoT8ryzCt0m38x2RQDAQgH/gcD
|
||||
Ahl6v0cdX5YA/+8mmWL/3bFdT/TUkct232XUNosZJWAp/SirUEcIghisKoUslI0W
|
||||
/yMskyfYQao9Xp2ZgAh5tDjY+zPrFeW/qBiRqGuLEvyIeAQYFgoAIBYhBC1czkGM
|
||||
chKTGRejXoocm3548/IABQJoB8N8AhsMAAoJEIocm3548/IAhyMA/1Rj6kqCdqHl
|
||||
cMH5geSnHg1pXfI9duFcNv/s8d3EqGx8AQCNHc+JFez4DQi22I8p/Lp5t1Wxugig
|
||||
Fm5SdMmMXCHwAg==
|
||||
=Bbro
|
||||
-----END PGP PRIVATE KEY BLOCK-----
|
||||
EOF;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue