From 4efa260e22648741cb25f2d8d51418c3491c46a9 Mon Sep 17 00:00:00 2001 From: Remi Collet Date: Mon, 15 Feb 2021 08:23:56 +0100 Subject: Update to 1.5.0RC1 open https://github.com/php-gnupg/php-gnupg/pull/25 missing files in pecl archive open https://github.com/php-gnupg/php-gnupg/pull/26 also cleanup socket files open https://github.com/php-gnupg/php-gnupg/pull/27 fix build with old libgpgme 1.3 use gnupg version 2 (Fedora and EL-8) --- gnupgt.inc | 211 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 211 insertions(+) create mode 100644 gnupgt.inc (limited to 'gnupgt.inc') diff --git a/gnupgt.inc b/gnupgt.inc new file mode 100644 index 0000000..c31415d --- /dev/null +++ b/gnupgt.inc @@ -0,0 +1,211 @@ +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 ', $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'); + } +} -- cgit