3

I am using gnupg for digital sign file in php. It was working fine before. Suddenly I am getting this error:

PHP Fatal error: Uncaught exception 'Exception' with message 'get_key failed'

putenv("GNUPGHOME=/tmp");
$publicKey = file_get_contents("./media/public.key");

$gpg = new gnupg();
$gpg->seterrormode(gnupg::ERROR_EXCEPTION);
$info = $gpg->import($publicKey);
$gpg->addsignkey($info['fingerprint'], DIGITAL_FILE_PASS);
$signed = $gpg->sign($data_to_sign);

What could be the reason?

Information:

$info variable looks like this:

Array
(
[imported] => 0
[unchanged] => 2
[newuserids] => 0
[newsubkeys] => 0
[secretimported] => 0
[secretunchanged] => 0
[newsignatures] => 0
[skippedkeys] => 0
[fingerprint] => 622FC43AB6E1FC175C08E9C0048EAEBF6E607FA3
)

Public Key:

-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1

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 a1xG5T03 =Zji/ -----END PGP PUBLIC KEY BLOCK-----

RNK
  • 5,582
  • 11
  • 65
  • 133
  • Can you also provide the public key that cannot be imported? This is important for reproducing the problem. Otherwise, at least post an anonymized output of `gpg --list-packets public.key`. – Jens Erat Oct 04 '15 at 20:03
  • ref to: http://superuser.com/questions/301643/troubleshooting-gnupg-get-key-failed-error-caused-by-incorrect-filesystem-perm – jankal Nov 28 '15 at 08:43
  • ref to: http://www.lowfatgeek.com/linux/troubleshooting-gnupg-get_key-failed-error-caused-by-incorrect-filesystem-permissions/20394/ – jankal Nov 28 '15 at 08:45
  • ref to: http://46dogs.blogspot.de/2007/11/setting-up-gnupg-gpg-for-use-with-php.html – jankal Nov 28 '15 at 08:47
  • Check if the web user has permissions for ALL the gpg files in $GNUPGHOME. If you run gpg2 commands on those files as a different user, the permissions are likely changed. – site Sep 07 '18 at 03:21

2 Answers2

4

Although your code is correct but I don't know why file_get_contents is not working correctly in your code, Kindly give it a try using cURL:

This function is an alternative to file_get_contents.

function url_get_contents ($Url) {
    if (!function_exists('curl_init')){ 
        die('CURL is not installed!');
    }
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $Url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $output = curl_exec($ch);
    curl_close($ch);
    return $output;
}
Waqas Shahid
  • 1,051
  • 1
  • 7
  • 22
  • 1
    Somehow, now it's working in my old code. But, I will try it in your way if I'll face same issue again. Thanks a lot! – RNK Nov 30 '15 at 16:52
0

Add below code to line 2 in your code.

$publicKey = file_get_contents(getenv('GNUPGHOME')."./media/public.key");

karan
  • 8,637
  • 3
  • 41
  • 78