Skip to content

Commit 6b9f31a

Browse files
committed
Merge branch 'PHP-5.6'
2 parents 859712a + c39336d commit 6b9f31a

File tree

2 files changed

+34
-8
lines changed

2 files changed

+34
-8
lines changed

ext/openssl/openssl.c

+5-8
Original file line numberDiff line numberDiff line change
@@ -3629,14 +3629,11 @@ PHP_FUNCTION(openssl_pkey_new)
36293629
OPENSSL_PKEY_SET_BN(Z_ARRVAL_P(data), dh, g);
36303630
OPENSSL_PKEY_SET_BN(Z_ARRVAL_P(data), dh, priv_key);
36313631
OPENSSL_PKEY_SET_BN(Z_ARRVAL_P(data), dh, pub_key);
3632-
if (dh->p && dh->g) {
3633-
if (!dh->pub_key) {
3634-
DH_generate_key(dh);
3635-
}
3636-
if (EVP_PKEY_assign_DH(pkey, dh)) {
3637-
ZVAL_COPY_VALUE(return_value, zend_list_insert(pkey, le_key));
3638-
return;
3639-
}
3632+
if (dh->p && dh->g &&
3633+
(dh->pub_key || DH_generate_key(dh)) &&
3634+
EVP_PKEY_assign_DH(pkey, dh)) {
3635+
ZVAL_COPY_VALUE(return_value, zend_list_insert(pkey, le_key));
3636+
return;
36403637
}
36413638
DH_free(dh);
36423639
}

ext/openssl/tests/bug55259.phpt

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
--TEST--
2+
Bug #55259 (openssl extension does not get the DH parameters from DH key resource)
3+
--SKIPIF--
4+
<?php if (!extension_loaded("openssl")) die("skip"); ?>
5+
--FILE--
6+
<?php
7+
8+
$phex = 'dcf93a0b883972ec0e19989ac5a2ce310e1d37717e8d9571bb7623731866e61e' .
9+
'f75a2e27898b057f9891c2e27a639c3f29b60814581cd3b2ca3986d268370557' .
10+
'7d45c2e7e52dc81c7a171876e5cea74b1448bfdfaf18828efd2519f14e45e382' .
11+
'6634af1949e5b535cc829a483b8a76223e5d490a257f05bdff16f2fb22c583ab';
12+
$dh_details = array( 'p' => $phex, 'g' => '2' );
13+
$dh = openssl_pkey_new(array( 'dh'=> array( 'p' => $phex, 'g' => '2' )));
14+
var_dump($dh);
15+
$dh = openssl_pkey_new(array( 'dh'=> array( 'p' => hex2bin($phex), 'g' => '2' )));
16+
$details = openssl_pkey_get_details($dh);
17+
var_dump(bin2hex($details['dh']['p']));
18+
var_dump($details['dh']['g']);
19+
var_dump(strlen($details['dh']['pub_key']));
20+
var_dump(strlen($details['dh']['priv_key']));
21+
echo "Done";
22+
?>
23+
--EXPECT--
24+
bool(false)
25+
string(256) "dcf93a0b883972ec0e19989ac5a2ce310e1d37717e8d9571bb7623731866e61ef75a2e27898b057f9891c2e27a639c3f29b60814581cd3b2ca3986d2683705577d45c2e7e52dc81c7a171876e5cea74b1448bfdfaf18828efd2519f14e45e3826634af1949e5b535cc829a483b8a76223e5d490a257f05bdff16f2fb22c583ab"
26+
string(1) "2"
27+
int(128)
28+
int(128)
29+
Done

0 commit comments

Comments
 (0)