]> granicus.if.org Git - php/commitdiff
Fix regular openssl_pkey_get_private($content, $phrase) syntax and
authorWez Furlong <wez@php.net>
Tue, 26 Mar 2002 00:03:11 +0000 (00:03 +0000)
committerWez Furlong <wez@php.net>
Tue, 26 Mar 2002 00:03:11 +0000 (00:03 +0000)
add test case.
This stuff should be merged into the 4.2 branch.

ext/openssl/openssl.c
ext/openssl/tests/001.phpt [new file with mode: 0644]
ext/openssl/tests/skipif.inc [new file with mode: 0644]

index fb95b14cfdfdcf0ea1ad861de360f1b5b4e51763..e3d92a4ec9f18fc7b13f646dc585b5c5c2d75b14 100644 (file)
@@ -140,6 +140,9 @@ static int le_csr;
 static void php_pkey_free(zend_rsrc_list_entry *rsrc TSRMLS_DC)
 {
        EVP_PKEY *pkey = (EVP_PKEY *)rsrc->ptr;
+
+       assert(pkey != NULL);
+       
        EVP_PKEY_free(pkey);
 }
 
@@ -1684,7 +1687,7 @@ static EVP_PKEY * php_openssl_evp_from_zval(zval ** val, int public_key, char *
                X509_free(cert);
 
        if (key && makeresource && resourceval) {
-               *resourceval = zend_list_insert(key, le_key);
+               *resourceval = ZEND_REGISTER_RESOURCE(NULL, key, le_key);
        }
        return key;
 }
@@ -1911,7 +1914,7 @@ PHP_FUNCTION(openssl_pkey_get_private)
                return;
 
        Z_TYPE_P(return_value) = IS_RESOURCE;
-       pkey = php_openssl_evp_from_zval(&cert, 0, NULL, 1, &Z_LVAL_P(return_value) TSRMLS_CC);
+       pkey = php_openssl_evp_from_zval(&cert, 0, passphrase, 1, &Z_LVAL_P(return_value) TSRMLS_CC);
 
        if (pkey == NULL) {
                RETURN_FALSE;
diff --git a/ext/openssl/tests/001.phpt b/ext/openssl/tests/001.phpt
new file mode 100644 (file)
index 0000000..06a9c04
--- /dev/null
@@ -0,0 +1,64 @@
+--TEST--
+OpenSSL private key functions
+--SKIPIF--
+<?php include('skipif.inc'); ?>
+--POST--
+--GET--
+--FILE--
+<?php
+echo "Creating private key\n";
+
+$privkey = openssl_pkey_new();
+
+if ($privkey === false)
+       die("failed to create private key");
+
+$passphrase = "banana";
+$key_file_name = tempnam("/tmp", "ssl");
+if ($key_file_name === false)
+       die("failed to get a temporary filename!");
+
+echo "Export key to file\n";
+
+openssl_pkey_export_to_file($privkey, $key_file_name, $passphrase) or die("failed to export to file $key_file_name");
+
+echo "Load key from file - array syntax\n";
+
+$loaded_key = openssl_pkey_get_private(array("file://$key_file_name", $passphrase));
+
+if ($loaded_key === false)
+       die("failed to load key using array syntax");
+
+openssl_pkey_free($loaded_key);
+
+echo "Load key using direct syntax\n";
+
+$loaded_key = openssl_pkey_get_private("file://$key_file_name", $passphrase);
+
+if ($loaded_key === false)
+       die("failed to load key using direct syntax");
+
+openssl_pkey_free($loaded_key);
+
+echo "Load key manually and use string syntax\n";
+
+$fp = fopen($key_file_name, "r");
+$key_content = fread($fp, filesize($key_file_name));
+fclose($fp);
+$loaded_key = openssl_pkey_get_private($key_content, $passphrase);
+
+if ($loaded_key === false)
+       die("failed to load key using string syntax");
+
+openssl_pkey_free($loaded_key);
+
+echo "OK!\n";
+
+?>
+--EXPECT--
+Creating private key
+Export key to file
+Load key from file - array syntax
+Load key using direct syntax
+Load key manually and use string syntax
+OK!
diff --git a/ext/openssl/tests/skipif.inc b/ext/openssl/tests/skipif.inc
new file mode 100644 (file)
index 0000000..21e947d
--- /dev/null
@@ -0,0 +1,11 @@
+<?php
+// This script prints "skip" if condition does not meet.
+
+if (!extension_loaded("openssl") && ini_get("enable_dl")) {
+  $dlext = (substr(PHP_OS, 0, 3) == "WIN") ? ".dll" : ".so";
+  @dl("openssl$dlext");
+}
+if (!extension_loaded("openssl")) {
+    die("skip\n");
+}
+?>