SHA256
1
0
forked from pool/php-gnupg

- Update to 1.5.0RC1

* Added support for PHP 8
  * Added support for GnuPG 2.1+
  * Added argument info for all functions and methods (reflection support)
  * Added new function `gnupg_getengineinfo`
  * Added new function `gnupg_geterrorinfo`
  * Added init array argument for setting home dir and gpg binary file name
  * Added additional fields to `gnupg_keyinfo` returned array
  * Added parameter to `gnupg_keyinfo` to use `secret_only`
  * Fixed `gnupg_deletekey` to use boolean for `allow_secret` parameter
- Update to 1.4.0
  * No changes since 1.4.0RC2
- Update to 1.4.0RC2
  * Fixed ZTS issue with invalid context for a password callback
- Update to 1.4.0RC1
  * Added support for PHP 7
  * Fixed various compilation issues
- Use _multibuild to build for php7 and php8
- Use php_cfgdir and php_extdir macros to determine location of files
- Run unit tests
- Add files missing from the PECL tarball
  + gnupgt.inc
  + vars.inc

OBS-URL: https://build.opensuse.org/package/show/server:php:extensions/php-gnupg?expand=0&rev=2
This commit is contained in:
2021-02-21 12:12:21 +00:00
committed by Git OBS Bridge
parent 6c4d55727b
commit 331c096cd0
10 changed files with 423 additions and 108 deletions

4
_multibuild Normal file
View File

@@ -0,0 +1,4 @@
<multibuild>
<package>php7</package>
<!--<package>php8</package>-->
</multibuild>

View File

@@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:50065cb81f1ac3ec5fcd796e58c8433071ff24cc14900e6077682717f5239307
size 19273

3
gnupg-1.5.0RC1.tgz Normal file
View File

@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:c1576812d80d44caca25b6a84690f2aebfabb6eb0c5c640140bec06c1505910e
size 32109

211
gnupgt.inc Normal file
View File

@@ -0,0 +1,211 @@
<?php
require_once __DIR__ . "/vars.inc";
class gnupgt {
/**
* Import all keys
*/
static public function import_key()
{
global $testkey;
self::reset_key();
$gpg = new gnupg();
$gpg->import($testkey);
}
/**
* Delete all keys.
* @param null|string $homeDir
*/
static public function delete_key($homeDir = null)
{
if (is_null($homeDir)) {
$homeDir = self::get_home_dir();
}
if (!is_dir($homeDir)) {
return;
}
foreach (glob($homeDir . '/*') as $filename) {
if (!is_dir($filename)) {
unlink($filename);
}
}
$privKeyDir = self::get_priv_key_dir($homeDir);
if (is_dir($privKeyDir)) {
foreach (glob($privKeyDir . '/*') as $key) {
unlink($key);
}
rmdir($privKeyDir);
}
rmdir($homeDir);
}
/**
* Initialize key directory.
*/
static public function init_key_dir()
{
mkdir(self::get_home_dir());
mkdir(self::get_priv_key_dir(), 0700);
}
/**
* Reset all keys.
*/
static public function reset_key()
{
self::delete_key();
self::init_key_dir();
}
/**
* Get home directory.
*
* @return string
*/
static private function get_home_dir()
{
return __DIR__ . '/home';
}
/**
* Get private key directory (for GPG2).
* @param null|string $homeDir
* @return string
*/
static private function get_priv_key_dir($homeDir = null)
{
if (is_null($homeDir)) {
$homeDir = self::get_home_dir();
}
return $homeDir . '/private-keys-v1.d';
}
/**
* Print error message and return false.
*
* @param string $msg
* @return bool
*/
static private function error($msg)
{
echo "ERROR: " . $msg;
return false;
}
/**
* Check single array value.
*
* @param mixed $expected
* @param array $a
* @param string $key1
* @return bool
*/
static public function check_array($expected, $a, $key1)
{
$args = func_get_args();
$keys = array_splice($args, 2);
$value = $a;
foreach ($keys as $key) {
if (!isset($value[$key])) {
return self::error("key $key not found in the array");
}
$value = $value[$key];
}
if ($value !== $expected) {
return self::error(
sprintf(
"key %s value %s does not match expected %s\n",
$key,
var_export($value, true),
var_export($expected, true)
)
);
}
return true;
}
/**
* Check single array value but only for GpgME version higher than supplied.
*
* @param mixed $expected
* @param array $a
* @param string $key1
* @return bool
*/
static public function check_array_from_version($version, $expected, $a, $key1)
{
if (version_compare(GNUPG_GPGME_VERSION, $version) < 0) {
return true;
}
$args = func_get_args();
return call_user_func_array('gnupgt::check_array', array_splice($args, 1));
}
/**
* Check keyinfo for var key
*
* @param $ret
* @param $secret_only
*/
static public function check_keyinfo($ret, $secret_only) {
self::check_array(false, $ret, 0, 'disabled');
self::check_array(false, $ret, 0, 'expired');
self::check_array(false, $ret, 0, 'revoked');
self::check_array($secret_only, $ret, 0, 'is_secret');
self::check_array(true, $ret, 0, 'can_sign');
self::check_array(true, $ret, 0, 'can_encrypt');
// uid
self::check_array('PHP GnuPG', $ret, 0, 'uids', 0, 'name');
self::check_array('', $ret, 0, 'uids', 0, 'comment');
self::check_array('gnupg@php.net', $ret, 0, 'uids', 0, 'email');
self::check_array('PHP GnuPG <gnupg@php.net>', $ret, 0, 'uids', 0, 'uid');
self::check_array(false, $ret, 0, 'uids', 0, 'revoked');
self::check_array(false, $ret, 0, 'uids', 0, 'invalid');
self::check_array(false, $ret, 0, 'uids', 0, 'invalid');
// subkey 1
self::check_array("2DF0DD02DC9B70B7F64F572E669E775E0A6284B3", $ret, 0, 'subkeys', 0, 'fingerprint');
self::check_array("669E775E0A6284B3", $ret, 0, 'subkeys', 0, 'keyid');
self::check_array(1567958444, $ret, 0, 'subkeys', 0, 'timestamp');
self::check_array(0, $ret, 0, 'subkeys', 0, 'expires');
self::check_array($secret_only, $ret, 0, 'subkeys', 0, 'is_secret');
self::check_array(false, $ret, 0, 'subkeys', 0, 'can_encrypt');
self::check_array(true, $ret, 0, 'subkeys', 0, 'can_sign');
self::check_array(false, $ret, 0, 'subkeys', 0, 'disabled');
self::check_array(false, $ret, 0, 'subkeys', 0, 'expired');
self::check_array(false, $ret, 0, 'subkeys', 0, 'revoked');
self::check_array(true, $ret, 0, 'subkeys', 0, 'can_certify');
self::check_array(false, $ret, 0, 'subkeys', 0, 'can_authenticate');
self::check_array(false, $ret, 0, 'subkeys', 0, 'is_qualified');
// TODO: The is_de_vs seems to differ between gpg2 (true) and gpg1 (false) - differenatiate the test
//self::check_array_from_version('1.9.0', true, $ret, 0, 'subkeys', 0, 'is_de_vs');
self::check_array(GNUPG_PK_RSA, $ret, 0, 'subkeys', 0, 'pubkey_algo');
self::check_array(2048, $ret, 0, 'subkeys', 0, 'length');
self::check_array_from_version('1.7.0', false, $ret, 0, 'subkeys', 0, 'is_cardkey');
// subkey 2
self::check_array("9E84AE800874DFF647B6062B46DCA9B3662C7DFC", $ret, 0, 'subkeys', 1, 'fingerprint');
self::check_array("46DCA9B3662C7DFC", $ret, 0, 'subkeys', 1, 'keyid');
self::check_array(1567958444, $ret, 0, 'subkeys', 1, 'timestamp');
self::check_array(0, $ret, 0, 'subkeys', 1, 'expires');
self::check_array($secret_only, $ret, 0, 'subkeys', 1, 'is_secret');
self::check_array(true, $ret, 0, 'subkeys', 1, 'can_encrypt');
self::check_array(false, $ret, 0, 'subkeys', 1, 'can_sign');
self::check_array(false, $ret, 0, 'subkeys', 1, 'disabled');
self::check_array(false, $ret, 0, 'subkeys', 1, 'expired');
self::check_array(false, $ret, 0, 'subkeys', 1, 'revoked');
self::check_array(false, $ret, 0, 'subkeys', 1, 'can_certify');
self::check_array(false, $ret, 0, 'subkeys', 1, 'can_authenticate');
self::check_array(false, $ret, 0, 'subkeys', 1, 'is_qualified');
// TODO: The is_de_vs seems to differ between gpg2 (true) and gpg1 (false) - differenatiate the test
// self::check_array_from_version('1.9.0', true, $ret, 0, 'subkeys', 1, 'is_de_vs');
self::check_array(GNUPG_PK_RSA, $ret, 0, 'subkeys', 1, 'pubkey_algo');
self::check_array(2048, $ret, 0, 'subkeys', 1, 'length');
self::check_array_from_version('1.7.0', false, $ret, 0, 'subkeys', 1, 'is_cardkey');
}
}

1
php-gnupg-rpmlintrc Normal file
View File

@@ -0,0 +1 @@
addFilter("invalid-spec-name")

51
php-gnupg.changes Normal file
View File

@@ -0,0 +1,51 @@
-------------------------------------------------------------------
Sun Feb 21 11:27:19 UTC 2021 - Arjen de Korte <suse+build@de-korte.org>
- Update to 1.5.0RC1
* Added support for PHP 8
* Added support for GnuPG 2.1+
* Added argument info for all functions and methods (reflection support)
* Added new function `gnupg_getengineinfo`
* Added new function `gnupg_geterrorinfo`
* Added init array argument for setting home dir and gpg binary file name
* Added additional fields to `gnupg_keyinfo` returned array
* Added parameter to `gnupg_keyinfo` to use `secret_only`
* Fixed `gnupg_deletekey` to use boolean for `allow_secret` parameter
- Update to 1.4.0
* No changes since 1.4.0RC2
- Update to 1.4.0RC2
* Fixed ZTS issue with invalid context for a password callback
- Update to 1.4.0RC1
* Added support for PHP 7
* Fixed various compilation issues
- Use _multibuild to build for php7 and php8
- Use php_cfgdir and php_extdir macros to determine location of files
- Run unit tests
- Add files missing from the PECL tarball
+ gnupgt.inc
+ vars.inc
-------------------------------------------------------------------
Fri Jan 29 09:25:25 UTC 2016 - pgajdos@suse.com
- provides php-gnupg symbol
-------------------------------------------------------------------
Tue Jan 12 13:38:02 UTC 2016 - pgajdos@suse.com
- updated to 1.3.6
-------------------------------------------------------------------
Mon Aug 17 04:11:52 CEST 2009 - crrodriguez@novell.com
- use versioning macros
-------------------------------------------------------------------
Fri May 4 22:18:39 UTC 2007 - judas_iscariote@shorewall.net
- update to version 1.3.1 fixing a double-free with recent gpgme-lib

84
php-gnupg.spec Normal file
View File

@@ -0,0 +1,84 @@
#
# spec file for package php5-gnupg
#
# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
# Please submit bugfixes or comments via http://bugs.opensuse.org/
#
%define pkg_name gnupg
%define flavor @BUILD_FLAVOR@%{nil}
%if "%{flavor}" == ""
%define php_name php
ExclusiveArch: do-not-build
%else
%define php_name %{flavor}
%endif
%if 0%{?suse_version} <= 1500
%define php_extdir %(%{__php_config} --extension-dir)
%define php_cfgdir %{_sysconfdir}/%{php_name}/conf.d
%endif
Name: %{php_name}-%{pkg_name}
Version: 1.5.0RC1
Release: 0
Summary: PHP wrapper around the gpgme library
License: BSD-2-Clause
Group: Productivity/Networking/Web/Servers
Url: https://pecl.php.net/gnupg
Source0: https://pecl.php.net/get/%{pkg_name}-%{version}.tgz
Source1: php-%{pkg_name}-rpmlintrc
# https://github.com/php-gnupg/php-gnupg/issues/28
Source2: gnupgt.inc
Source3: vars.inc
BuildRequires: %{php_name}-devel
BuildRequires: gpgme-devel
Requires: php(api) = %{php_core_api}
Requires: php(zend-abi) = %{php_zend_api}
Provides: php-gnupg = %{version}
Obsoletes: php-gnupg < %{version}
%description
This extension provides methods to interact with gnupg.
%prep
%setup -q -n %{pkg_name}-%{version}
cp %{SOURCE2} %{SOURCE3} tests/
%build
export CFLAGS="%{optflags} -fno-strict-aliasing"
export CXXFLAGS="%{optflags} -fno-strict-aliasing"
%{__phpize}
%configure --disable-rpath --with-gnupg=%{_usr} --with-libdir=%{_lib}
%make_build
%check
%make_build PHP_EXECUTABLE=%{__php} NO_INTERACTION=1 test
%install
%make_install INSTALL_ROOT=%{buildroot}
mkdir -p %{buildroot}%{php_cfgdir}
cat >> %{buildroot}%{php_cfgdir}/%{pkg_name}.ini << EOF
; comment out next line to disable %{pkg_name} extension in php
extension=%{pkg_name}.so"
EOF
%files
%license LICENSE
%doc README
%config(noreplace) %{php_cfgdir}/%{pkg_name}.ini
%{php_extdir}/%{pkg_name}.so
%changelog

View File

@@ -1,20 +0,0 @@
-------------------------------------------------------------------
Fri Jan 29 09:25:25 UTC 2016 - pgajdos@suse.com
- provides php-gnupg symbol
-------------------------------------------------------------------
Tue Jan 12 13:38:02 UTC 2016 - pgajdos@suse.com
- updated to 1.3.6
-------------------------------------------------------------------
Mon Aug 17 04:11:52 CEST 2009 - crrodriguez@novell.com
- use versioning macros
-------------------------------------------------------------------
Fri May 4 22:18:39 UTC 2007 - judas_iscariote@shorewall.net
- update to version 1.3.1 fixing a double-free with recent gpgme-lib

View File

@@ -1,85 +0,0 @@
#
# spec file for package php5-gnupg
#
# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
# Please submit bugfixes or comments via http://bugs.opensuse.org/
#
%define pkg_name gnupg
#
Name: php5-gnupg
Version: 1.3.6
Release: 0
Summary: PHP wrapper around the gpgme library
#
License: BSD-2-Clause
Group: Productivity/Networking/Web/Servers
#
Url: http://pecl.php.net/gnupg
Source: https://pecl.php.net/get/%{pkg_name}-%{version}.tgz
BuildRequires: php5-devel
Provides: php-gnupg = %{version}
Obsoletes: php-gnupg < %{version}
#
BuildRoot: %{_tmppath}/%{name}-%{version}-build
%if 0%{?suse_version} < 1010
BuildRequires: gpgme
BuildRequires: libgpg-error-devel
%else
BuildRequires: gpgme-devel
%endif
%if %{?php_zend_api}0
Requires: php(api) = %{php_core_api}
Requires: php(zend-abi) = %{php_zend_api}
%else
%requires_eq php5
%endif
%description
This extension provides methods to interact with gnupg.
%prep
%setup -q -n %{pkg_name}-%{version}
mkdir %{name}
%build
%{_bindir}/phpize
pushd %{name}
CFLAGS="%{optflags} -fno-strict-aliasing"
CXXFLAGS="%{optflags} -fno-strict-aliasing"
export CFLAGS
export CXXFLAGS
export PHP_RPATH='no'
../configure --disable-rpath --with-gnupg=%{_usr} --with-libdir=%{_lib}
make %{?_smp_mflags}
popd
%install
make DESTDIR=%{buildroot} install %{?_smp_mflags} -C %{name} INSTALL_ROOT=%{buildroot}
mkdir -p %{buildroot}%{_sysconfdir}/php5/conf.d
echo "; comment out next line to disable gnupg extension in php" > %{buildroot}%{_sysconfdir}/php5/conf.d/gnupg.ini
echo 'extension = gnupg.so' >> %{buildroot}%{_sysconfdir}/php5/conf.d/gnupg.ini
%files
%defattr(-,root,root,-)
%{_libdir}/php5/extensions/gnupg.so
%config(noreplace) %{_sysconfdir}/php5/conf.d/gnupg.ini
%doc LICENSE README
%changelog -n php5-gnupg
* Sat Dec 30 2006 - judas_iscariote@shorewall.net
- lib64 fixes
* Thu Nov 16 2006 - soporte@onfocus.cl
- very first build

69
vars.inc Normal file
View File

@@ -0,0 +1,69 @@
<?php
putenv("GNUPGHOME=".dirname(__FILE__) . '/home');
error_reporting (E_ALL);
$fingerprint = "2DF0DD02DC9B70B7F64F572E669E775E0A6284B3";
$passphrase = "blabla";
$plaintext = "foo bar";
$testkey =<<<EOF
-----BEGIN PGP PRIVATE KEY BLOCK-----
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
ngBZTudrwBbKC8xx224aOk0TiDbiWftGtx4=
=py/2
-----END PGP PRIVATE KEY BLOCK-----
EOF;
?>