Skip to content

gnupg: Invalid crypto engine #556

Open
@davidsickmiller

Description

@davidsickmiller

It seems #443 made progress but did not entirely fix the gnupg extension.

Here's a compact way to reproduce:

serverless.yml:

service: app

provider:
    name: aws
    region: us-east-1

plugins:
    - ./vendor/bref/bref
    - ./vendor/bref/extra-php-extensions

functions:
    api:
        handler: index.php
        description: ''
        runtime: php-82-fpm
        layers:
            - ${bref-extra:gnupg-php-82}
        timeout: 28 # in seconds (API Gateway has a timeout of 29 seconds)
        events:
            -   httpApi: '*'

# Exclude files from deployment
package:
    patterns:
        - '!node_modules/**'
        - '!tests/**'

index.php:

<?php

$private_key = '
-----BEGIN PGP PRIVATE KEY BLOCK-----

lFgEZvWkVhYJKwYBBAHaRw8BAQdADyH8X242kfSuOH4zYalDZpLW/iqWMmkNUMcc
2DCIDCIAAP4wZkLqfwIv3ZS49ZfzaEDdR0TNGa0iC8ya54Q9g00orxCdtCdEYXZp
ZCBTaWNrbWlsbGVyIDxkYXZpZEBzaWNrbWlsbGVyLmNvbT6IkwQTFgoAOxYhBIOg
Mqw1sH8uJUF5wec8VyIdSJLgBQJm9aRWAhsDBQsJCAcCAiICBhUKCQgLAgQWAgMB
Ah4HAheAAAoJEOc8VyIdSJLgnWIA/0WeDxs/OHFcR64Q7vDOuVVFaRdB1JTKkgbv
vOO7soPUAQDhXCSMHRdqbpxapnTPzoJqXVpQudBy3ORsGoJg3IudCJxdBGb1pFYS
CisGAQQBl1UBBQEBB0Cm79TUlhkBtq9JmhzUDg+E2xMh05jhnE3zx7lHyplMCgMB
CAcAAP9sQJOadtcbVaxej0HwENHUhsr7YsyisEofr1LSFG0b4BGXiHgEGBYKACAW
IQSDoDKsNbB/LiVBecHnPFciHUiS4AUCZvWkVgIbDAAKCRDnPFciHUiS4DNKAQDl
r6VSAtZyVfavlhoj0nfygwJrPgnrX1My1Jt1HQcQ0AD+LpPqHPwkegE9FgiYoitO
b3DF7c+lM/KU5/TPymFlPgs=
=F8cF
-----END PGP PRIVATE KEY BLOCK-----
';
$cipher_text = '
-----BEGIN PGP MESSAGE-----

hF4D6aX1CVD1e6ASAQdAjZDl2T5tqc2zNmhHjz8Uw2wdm2W/Aeb2GJ9LY0jR6Gkw
M6K3Csqqrz+K20hGYtlCb96wC0smo/o2Llx5zGBRvZXtI7LqKlH2FJ9vBvPBJ17L
1FUBCQIQ3ayc6tSeesT/ovmdAEikHjO/yvsLYnTzpixCRc8A14cTJdjsILr2o4Np
aGvZ6CBZ+08cU1Z7jVT3yIRu+Xp0/k883pc5uuesnlD4//b5DYek
=YYfC
-----END PGP MESSAGE-----
';

$gpg = new gnupg(['home_dir' => '/tmp']);
$info = $gpg->import($private_key);
if ($info === false) {
    echo "Error after import():\n";
    echo "Error: " . $gpg->geterror() . "\n";
    echo "Errorinfo: " . print_r($gpg->geterrorinfo(), true) . "\n";
    exit(1);
}
if ($gpg->adddecryptkey($info['fingerprint'], '') === false) {
    echo "Error after adddecryptkey():\n";
    echo "Error: " . $gpg->geterror() . "\n";
    echo "Errorinfo: " . print_r($gpg->geterrorinfo(), true) . "\n";
    exit(1);
}
$plaintext = $gpg->decrypt($cipher_text);
if ($plaintext === false) {
    echo "Error after decrypt():\n";
    echo "Error: " . $gpg->geterror() . "\n";
    echo "Errorinfo: " . print_r($gpg->geterrorinfo(), true) . "\n";
    exit(1);
}

echo "plaintext is:\n$plaintext\n";

Expected output:

plaintext is:
test message

Actual output:

Error after import():
Error: import failed
Errorinfo: Array
(
    [generic_message] => import failed
    [gpgme_code] => 117440662
    [gpgme_source] => GPGME
    [gpgme_message] => Invalid crypto engine
)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions