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