|
| 1 | +--TEST-- |
| 2 | +openssl_pkey_export() with EC key |
| 3 | +--SKIPIF-- |
| 4 | +<?php |
| 5 | +if (!extension_loaded("openssl")) die("skip"); |
| 6 | +if (!defined('OPENSSL_KEYTYPE_EC')) die("skip no EC available"); |
| 7 | +?> |
| 8 | +--FILE-- |
| 9 | +<?php |
| 10 | +$key = openssl_pkey_get_private('file://' . dirname(__FILE__) . '/private_ec.key'); |
| 11 | +var_dump($key); |
| 12 | + |
| 13 | +var_dump(openssl_pkey_export($key, $output)); |
| 14 | +echo $output; |
| 15 | + |
| 16 | +// Load the private key from the exported pem string |
| 17 | +$details = openssl_pkey_get_details(openssl_pkey_get_private($output)); |
| 18 | +var_dump(OPENSSL_KEYTYPE_EC === $details['type']); |
| 19 | + |
| 20 | +// Export key with passphrase |
| 21 | +openssl_pkey_export($key, $output, 'passphrase'); |
| 22 | + |
| 23 | +$details = openssl_pkey_get_details(openssl_pkey_get_private($output, 'passphrase')); |
| 24 | +var_dump(OPENSSL_KEYTYPE_EC === $details['type']); |
| 25 | + |
| 26 | +// Read public key |
| 27 | +$pKey = openssl_pkey_get_public('file://' . dirname(__FILE__) . '/public_ec.key'); |
| 28 | +var_dump($pKey); |
| 29 | +// The details are the same for a public or private key |
| 30 | +var_dump($details === openssl_pkey_get_details($pKey)); |
| 31 | + |
| 32 | + |
| 33 | +// Export to file |
| 34 | +$tempname = tempnam(sys_get_temp_dir(), 'openssl_ec'); |
| 35 | +var_dump(openssl_pkey_export_to_file($key, $tempname)); |
| 36 | +$details = openssl_pkey_get_details(openssl_pkey_get_private('file://' . $tempname)); |
| 37 | +var_dump(OPENSSL_KEYTYPE_EC === $details['type']); |
| 38 | + |
| 39 | +// Clean the temporary file |
| 40 | +@unlink($tempname); |
| 41 | + |
| 42 | +?> |
| 43 | +--EXPECTF-- |
| 44 | +resource(%d) of type (OpenSSL key) |
| 45 | +bool(true) |
| 46 | +-----BEGIN EC PRIVATE KEY-----%a-----END EC PRIVATE KEY----- |
| 47 | +bool(true) |
| 48 | +bool(true) |
| 49 | +resource(%d) of type (OpenSSL key) |
| 50 | +bool(true) |
| 51 | +bool(true) |
| 52 | +bool(true) |
0 commit comments