--TEST-- GH-21083 (openssl_pkey_new() fails for EC keys when private_key_bits is not set) --EXTENSIONS-- openssl --SKIPIF-- --ENV-- OPENSSL_CONF= --FILE-- $conf, 'private_key_type' => OPENSSL_KEYTYPE_EC, 'curve_name' => 'prime256v1', ]); var_dump($key !== false); $details = openssl_pkey_get_details($key); var_dump($details['bits']); var_dump($details['type'] === OPENSSL_KEYTYPE_EC); echo "EC OK\n"; // X25519 - fixed size key, private_key_bits should not be required if (defined('OPENSSL_KEYTYPE_X25519')) { $key = openssl_pkey_new([ 'config' => $conf, 'private_key_type' => OPENSSL_KEYTYPE_X25519, ]); var_dump($key !== false); echo "X25519 OK\n"; } else { echo "bool(true)\nX25519 OK\n"; } // Ed25519 - fixed size key, private_key_bits should not be required if (defined('OPENSSL_KEYTYPE_ED25519')) { $key = openssl_pkey_new([ 'config' => $conf, 'private_key_type' => OPENSSL_KEYTYPE_ED25519, ]); var_dump($key !== false); echo "Ed25519 OK\n"; } else { echo "bool(true)\nEd25519 OK\n"; } unlink($conf); ?> --EXPECT-- bool(true) int(256) bool(true) EC OK bool(true) X25519 OK bool(true) Ed25519 OK