ecc.phpt 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. --TEST--
  2. openssl_*() with OPENSSL_KEYTYPE_EC
  3. --EXTENSIONS--
  4. openssl
  5. --SKIPIF--
  6. <?php if (!defined("OPENSSL_KEYTYPE_EC")) print "skip"; ?>
  7. --FILE--
  8. <?php
  9. $config = __DIR__ . DIRECTORY_SEPARATOR . 'openssl.cnf';
  10. $args = array(
  11. "curve_name" => "secp384r1",
  12. "private_key_type" => OPENSSL_KEYTYPE_EC,
  13. "config" => $config,
  14. );
  15. echo "Testing openssl_pkey_new\n";
  16. $key1 = openssl_pkey_new($args);
  17. var_dump($key1);
  18. $argsFailed = array(
  19. "curve_name" => "invalid_cuve_name",
  20. "private_key_type" => OPENSSL_KEYTYPE_EC,
  21. "config" => $config,
  22. );
  23. $keyFailed = openssl_pkey_new($argsFailed);
  24. var_dump($keyFailed);
  25. $d1 = openssl_pkey_get_details($key1);
  26. var_dump($d1["bits"]);
  27. var_dump(strlen($d1["key"]));
  28. var_dump($d1["ec"]["curve_name"]);
  29. var_dump($d1["type"] == OPENSSL_KEYTYPE_EC);
  30. $key2 = openssl_pkey_new($d1);
  31. var_dump($key2);
  32. $d2 = openssl_pkey_get_details($key2);
  33. // Compare array
  34. var_dump($d1 === $d2);
  35. // Check that the public key info is computed from the private key if it is missing.
  36. $d1_priv = $d1;
  37. unset($d1_priv["ec"]["x"]);
  38. unset($d1_priv["ec"]["y"]);
  39. $key3 = openssl_pkey_new($d1_priv);
  40. var_dump($key3);
  41. $d3 = openssl_pkey_get_details($key3);
  42. var_dump($d1 === $d3);
  43. $dn = array(
  44. "countryName" => "BR",
  45. "stateOrProvinceName" => "Rio Grande do Sul",
  46. "localityName" => "Porto Alegre",
  47. "commonName" => "Henrique do N. Angelo",
  48. "emailAddress" => "hnangelo@php.net"
  49. );
  50. // openssl_csr_new creates a new public key pair if the key argument is null
  51. echo "Testing openssl_csr_new with key generation\n";
  52. $keyGenerate = null;
  53. var_dump($keyGenerate);
  54. $csr = openssl_csr_new($dn, $keyGenerate, $args);
  55. var_dump($keyGenerate);
  56. $args["digest_alg"] = "sha256";
  57. echo "Testing openssl_csr_new with existing ecc key\n";
  58. $csr = openssl_csr_new($dn, $key1, $args);
  59. var_dump($csr);
  60. $pubkey1 = openssl_pkey_get_details(openssl_csr_get_public_key($csr));
  61. var_dump(isset($pubkey1["ec"]["priv_key"]));
  62. unset($d1["ec"]["priv_key"]);
  63. var_dump(array_diff($d1["ec"], $pubkey1["ec"]));
  64. $x509 = openssl_csr_sign($csr, null, $key1, 365, $args);
  65. var_dump($x509);
  66. echo "Testing openssl_x509_check_private_key\n";
  67. var_dump(openssl_x509_check_private_key($x509, $key1));
  68. $key3 = openssl_pkey_new($args);
  69. var_dump(openssl_x509_check_private_key($x509, $key3));
  70. echo "Testing openssl_get_curve_names\n";
  71. $curve_names = openssl_get_curve_names();
  72. var_dump(is_array($curve_names));
  73. foreach ($curve_names as $curve_name) {
  74. if ("secp384r1" === $curve_name) {
  75. echo "Found secp384r1 in curve names\n";
  76. }
  77. }
  78. ?>
  79. --EXPECTF--
  80. Testing openssl_pkey_new
  81. object(OpenSSLAsymmetricKey)#1 (0) {
  82. }
  83. Warning: openssl_pkey_new(): Unknown elliptic curve (short) name invalid_cuve_name in %s on line %d
  84. bool(false)
  85. int(384)
  86. int(215)
  87. string(9) "secp384r1"
  88. bool(true)
  89. object(OpenSSLAsymmetricKey)#%d (0) {
  90. }
  91. bool(true)
  92. object(OpenSSLAsymmetricKey)#%d (0) {
  93. }
  94. bool(true)
  95. Testing openssl_csr_new with key generation
  96. NULL
  97. object(OpenSSLAsymmetricKey)#%d (0) {
  98. }
  99. Testing openssl_csr_new with existing ecc key
  100. object(OpenSSLCertificateSigningRequest)#%d (0) {
  101. }
  102. bool(false)
  103. array(1) {
  104. ["d"]=>
  105. string(%d) "%a"
  106. }
  107. object(OpenSSLCertificate)#%d (0) {
  108. }
  109. Testing openssl_x509_check_private_key
  110. bool(true)
  111. bool(false)
  112. Testing openssl_get_curve_names
  113. bool(true)
  114. Found secp384r1 in curve names