Skip to content

Commit 94238fb

Browse files
committed
test: add tests for key length enforcement
1 parent b251485 commit 94238fb

File tree

1 file changed

+59
-0
lines changed

1 file changed

+59
-0
lines changed
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
--TEST--
2+
openssl: test key type and bit length enforcement in php_openssl_generate_private_key
3+
--EXTENSIONS--
4+
openssl
5+
--SKIPIF--
6+
<?php
7+
if (!defined("OPENSSL_KEYTYPE_RSA")) die("skip RSA disabled");
8+
if (!defined("OPENSSL_KEYTYPE_DSA")) die("skip DSA disabled");
9+
if (!defined("OPENSSL_KEYTYPE_DH")) die("skip DH disabled");
10+
if (!defined("OPENSSL_KEYTYPE_EC")) die("skip EC disabled");
11+
?>
12+
--FILE--
13+
<?php
14+
function test_key($type, $bits = null) {
15+
$args = [];
16+
switch ($type) {
17+
case OPENSSL_KEYTYPE_RSA:
18+
$args['private_key_type'] = OPENSSL_KEYTYPE_RSA;
19+
if ($bits !== null) $args['private_key_bits'] = $bits;
20+
break;
21+
case OPENSSL_KEYTYPE_DSA:
22+
$args['private_key_type'] = OPENSSL_KEYTYPE_DSA;
23+
if ($bits !== null) $args['private_key_bits'] = $bits;
24+
break;
25+
case OPENSSL_KEYTYPE_DH:
26+
$args['private_key_type'] = OPENSSL_KEYTYPE_DH;
27+
if ($bits !== null) $args['private_key_bits'] = $bits;
28+
break;
29+
case OPENSSL_KEYTYPE_EC:
30+
$args['curve_name'] = 'prime256v1';
31+
$args['private_key_type'] = OPENSSL_KEYTYPE_EC;
32+
break;
33+
}
34+
$key = @openssl_pkey_new($args);
35+
var_dump($key !== false);
36+
}
37+
38+
// Should fail: RSA, DSA, DH with bits < MIN_KEY_LENGTH
39+
foreach ([OPENSSL_KEYTYPE_RSA, OPENSSL_KEYTYPE_DSA, OPENSSL_KEYTYPE_DH] as $type) {
40+
test_key($type, 256); // too short
41+
}
42+
// Should succeed: RSA, DSA, DH with bits >= MIN_KEY_LENGTH
43+
foreach ([OPENSSL_KEYTYPE_RSA, OPENSSL_KEYTYPE_DSA, OPENSSL_KEYTYPE_DH] as $type) {
44+
test_key($type, 2048); // valid
45+
}
46+
// Should succeed: EC with curve only
47+
test_key(OPENSSL_KEYTYPE_EC);
48+
// Should succeed: EC with bits too low
49+
test_key(OPENSSL_KEYTYPE_EC, 256);
50+
?>
51+
--EXPECT--
52+
bool(false)
53+
bool(false)
54+
bool(false)
55+
bool(true)
56+
bool(true)
57+
bool(true)
58+
bool(true)
59+
bool(true)

0 commit comments

Comments
 (0)