jasonhinkle / php-gpg

GPG / PGP port written in pure PHP with no binary dependencies
116 stars 28 forks source link

PHP `E_NOTICE` error when creating a new GPG_Public_Key #26

Closed fabacab closed 8 years ago

fabacab commented 8 years ago

I encountered an E_NOTICE error I don't understand because it's only happening on one of my keys, and not on other keys. The specific error is:

Notice: Undefined offset: 5472 in …/GPG/Public_Key.php on line 91 Notice: Undefined offset: 5473 in …/GPG/Public_Key.php on line 91 Notice: Undefined offset: 5474 in …/GPG/Public_Key.php on line 91

The offending code in my project is simple:

$public_key_ascii = "OFFENDING_KEY_HERE_SNIPPED_FOR_LENGTH";
$pub_key = new GPG_Public_Key($public_key_ascii);

(The offending key happens to be my own key.)

Code to reproduce the issue

I wrote a unit test case that triggers a failure.

  1. First, be sure to set convertNoticesToExceptions="true" in your phpunit.xml config.
  2. Then, add the following code to the tests/gpg/KeyTest.php:
    function get_maymays_offending_key () {
        return "[INSERT_THE_ASCII_KEY_LINKED_ABOVE_HERE]";
    }

    function test_maymays_offending_key () {
        error_reporting(E_ALL);
        $public_key_ascii = $this->get_maymays_offending_key();
        $pub_key = new GPG_Public_Key($public_key_ascii);
    }

When I run this, I get this output:

There was 1 error:

1) KeyTest::test_maymays_offending_key
Undefined offset: 5472

…/GPG/Public_Key.php:141

Workarounds

I can use the error-suppression operator (@new GPG_Public_Key($public_key_ascii)) to avoid this error, but it seems weird to need to do this and I'd rather not have to.

Other information

The perplexing part of this for me is that I can't figure out what's causing the E_NOTICE errors with only my key. I have tried several other keys without encountering this issue, including other keys of the same type (RSA) and length (2048 bits), as well as other keys that match this description with multiple subkeys and user IDs attached. The only key that produces this error is mine, and I can't figure out why. Halp?

DanielRuf commented 8 years ago

Please provide some more information about the usd key like keylength, used encryption and so on. We already had the issue in the past but this was an issue with older specific GnuPG keys which was solved with the supplied key.

fabacab commented 8 years ago

Please provide some more infrmation about the usd key like keyength, used encryption and so on.

I did:

I have tried several other keys without encountering this issue, including other keys of the same type (RSA) and length (2048 bits), as well as other keys that match this description with multiple subkeys and user IDs attached.

To clarify, the specific key that causes the issue is linked directly in the original issue report. To be even more specific, it is the key linked here: https://pgp.mit.edu/pks/lookup?search=0x4DB88B59&op=index

As is shown on that page and from my quote, the key length is 2,048 bits, and the encryption type is RSA.

DanielRuf commented 8 years ago

Ah ok. I will test it with this key later. Should not read the issue right after waking up, oversaw the link, my fault.

fabacab commented 8 years ago

No worries. Thank you for looking into it.

DanielRuf commented 8 years ago

Not related to other issues.

The problem is in this line: else if ($len == 255) $len = (ord($sa[$i++]) << 24) + (ord($sa[$i++]) << 16) + (ord($sa[$i++]) << 8) + ord($sa[$i++]);

DanielRuf commented 8 years ago

Can not reproduce it here, tested with PHP 7.0.1

<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
require_once 'libs/GPG.php';

$gpg = new GPG();

$public_key_ascii="-----BEGIN PGP PUBLIC KEY BLOCK-----

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
ybyxMQRBD+ri7NKaeCoJ31cyrTd7
=5EGf
-----END PGP PUBLIC KEY BLOCK-----
";

// create an instance of a GPG public key object based on ASCII key
$pub_key = new GPG_Public_Key($public_key_ascii);

// using the key, encrypt your plain text using the public key
$encrypted = $gpg->encrypt($pub_key,"teststring");

Not sure if there has also to be some check for NULL but the notice should be no problem.

Can you compare the keys using gpg --list-packets [file] or pgpdump [file]?

fabacab commented 8 years ago

I am approaching the limit of my knowledge with PGP, and did not know about the --list-packets option, thanks for showing me that.

You are right, the public key block you posted works without issue. However, it turns out that my local copy of the public key is not the same as the one uploaded to the keyserver that I linked you to. I'm sorry about that. I did not realize there were some differences.

Here is what I did:

gpg2 --armor --export [my_email_address] > /tmp/offendingkey.asc gpg2 --list-packets < /tmp/workingkey.asc > /tmp/workingkey.packets # "workingkey.asc" is a copy-and-paste of this key you posted gpg2 --list-packets < /tmp/offendingpubkey.asc > /tmp/offendingkey.packets diff /tmp/workingkey.packets /tmp/offendingkey.packets

And indeed there were differences. Here's the code I used to reproduce the issue, with the offending PGP public key block:

<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
require_once 'libs/GPG.php';

$gpg = new GPG();

$public_key_ascii = "-----BEGIN PGP PUBLIC KEY BLOCK-----

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
=9P88
-----END PGP PUBLIC KEY BLOCK-----
";

// create an instance of a GPG public key object based on ASCII key
$pub_key = new GPG_Public_Key($public_key_ascii);

// using the key, encrypt your plain text using the public key
$encrypted = $gpg->encrypt($pub_key,"teststring");

Running that code with php my_test.php, I get the same E_NOTICE errors as before:

Notice: Undefined offset: 5472 in […snipped…]/GPG/Public_Key.php on line 91

Notice: Undefined offset: 5473 in […snipped…]/GPG/Public_Key.php on line 91

Notice: Undefined offset: 5474 in […snipped…]/GPG/Public_Key.php on line 91

Apologies on not noticing the differences between my local key and the keyserver's copy I linked you to. Are you able to reproduce this with the above PGP public key block?

DanielRuf commented 8 years ago

I do not see any :public key packet: in the packets from the key which produces the notice. Also it seems some dates, digest and data values are different.

It seems this is an issue with the public subkey used for the encryption. Possibly the wrong key (or signature?) is used for this.

Seeking help here, the latest commit does not produce valid encrypted PGP data.

Did you also test with the current dev branch?

Also the key from the keyserver does not work, it does not produce any valid encrypted data.

With my own key it works without any issues. The keypair just consists of a public key and a sub public key.

fabacab commented 8 years ago

I do not see any :public key packet: in the packets from the key which produces the notice.

That is strange, because I do. One :public key packet: and one :public sub key packet:, as per:

$ gpg2 --list-packets /tmp/offendingkey.asc | grep public.*key # "offendingkey.asc" is the key that produces the notice, above
:public key packet:
:public sub key packet:

Just in case it matters, this is what the above gpg2 binary reports about itself:

$ gpg2 --version
gpg (GnuPG/MacGPG2) 2.0.28
libgcrypt 1.6.3
Copyright (C) 2015 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Home: ~/.gnupg
Supported algorithms:
Pubkey: RSA, RSA, RSA, ELG, DSA
Cipher: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH,
        CAMELLIA128, CAMELLIA192, CAMELLIA256
Hash: MD5, SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
Compression: Uncompressed, ZIP, ZLIB, BZIP2

It seems this is an issue with the public subkey used for the encryption. Possibly the wrong key (or signature?) is used for this.

I'm sorry, I do not understand what you mean by this. The problematic key is "broken"? This is news to me, because I have been using this key for some time without issues with numerous OpenPGP clients; I am able to encrypt and decrypt using this keypair in all of them, so far, including php-gpg.

Did you also test with the current dev branch?

Yes, but that was several days ago when I first reported the issue I encountered. Just now, I tested against the current HEAD of dev (138aa80638ab4261d9fbc6d0c804f1edc44c02fd) but still see the notice:

Notice: Undefined offset: 5472 in …libs/GPG/Public_Key.php on line 141
Notice: Undefined offset: 5473 in …/libs/GPG/Public_Key.php on line 141
Notice: Undefined offset: 5474 in …/libs/GPG/Public_Key.php on line 141

Also the key from the keyserver does not work, it does not produce any valid encrypted data.

That is not the case on my copy. I can use the key from the keyserver with php-gpg's encrypt() method and produce an encrypted message that the public key's private counterpart can decrypt. The same is true of the public key that produces the notice. :\

DanielRuf commented 8 years ago

Maybe GPA just has a problem here, when the key is not imported. Trying tomorrow again.

What I meant it that maybe the structure of the whole key with the subkeys and signatures is problematic but I am not sure.

So encryption and decryption still work?

The same is true of the public key that produces the notice.

Did you try the commit which was an attempt to fix the issue? Because when the notice is thrown, the value should be 0 as it is not defined and can not be converted to an int with the normal code.

DanielRuf commented 8 years ago

It seems my assumption is right.

https://m.reddit.com/r/GnuPG/comments/1ux9y3/clipboard_contained_no_valid_encrypted_data/

I was just doing some testing and realized that GPA has a serious user interface problem. If you are trying to decrypt a message that was encrypted with a public key for which you do not have the private key (message encrypted by the sender with the wrong public key, not yours) GPA will give that confusing error message "Clipboard contained no valid encrypted data". Try saving the message to a file and decrypting it with Kleopatra. Kleopatra will say "Decryption failed". But if you hit the "Show Details" button, it says "One unknown recipient".

Command line gpg gives the best error message:

Please check the version before the last reverted commit.

fabacab commented 8 years ago

Please check the version before the last reverted commit.

I just tested again against ecf827f1025165b0788df2c1e1e811e5dda4a98a and this works; no notices are shown! Thank you so much for your work on this. :)

DanielRuf commented 8 years ago

Thanks for the feedback, will make a new release with this patch.