crypto_sign.phpt 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. --TEST--
  2. Check for libsodium ed25519 signatures
  3. --EXTENSIONS--
  4. sodium
  5. --FILE--
  6. <?php
  7. $keypair = sodium_crypto_sign_keypair();
  8. var_dump(strlen($keypair) === SODIUM_CRYPTO_SIGN_KEYPAIRBYTES);
  9. $sk = sodium_crypto_sign_secretkey($keypair);
  10. var_dump(strlen($sk) === SODIUM_CRYPTO_SIGN_SECRETKEYBYTES);
  11. $pk = sodium_crypto_sign_publickey($keypair);
  12. var_dump(strlen($pk) === SODIUM_CRYPTO_SIGN_PUBLICKEYBYTES);
  13. var_dump($pk !== $sk);
  14. $keypair2 = sodium_crypto_sign_keypair_from_secretkey_and_publickey($sk, $pk);
  15. var_dump($keypair === $keypair2);
  16. $alice_kp = sodium_crypto_sign_keypair();
  17. $alice_secretkey = sodium_crypto_sign_secretkey($alice_kp);
  18. $alice_publickey = sodium_crypto_sign_publickey($alice_kp);
  19. $msg = "Here is the message, to be signed using Alice's secret key, and " .
  20. "to be verified using Alice's public key";
  21. $msg_signed = sodium_crypto_sign($msg, $alice_secretkey);
  22. var_dump(strlen($msg_signed) - strlen($msg) === SODIUM_CRYPTO_SIGN_BYTES);
  23. $msg_orig = sodium_crypto_sign_open($msg_signed, $alice_publickey);
  24. var_dump($msg_orig === $msg);
  25. $seed = str_repeat('x', SODIUM_CRYPTO_SIGN_SEEDBYTES);
  26. $alice_kp = sodium_crypto_sign_seed_keypair($seed);
  27. $alice_secretkey = sodium_crypto_sign_secretkey($alice_kp);
  28. $alice_publickey = sodium_crypto_sign_publickey($alice_kp);
  29. $msg = "Here is another message, to be signed using Alice's secret key, and " .
  30. "to be verified using Alice's public key, which will be always the same " .
  31. "since they are derived from a fixed seed";
  32. $msg_signed = sodium_crypto_sign($msg, $alice_secretkey);
  33. var_dump(strlen($msg_signed) - strlen($msg) === SODIUM_CRYPTO_SIGN_BYTES);
  34. $msg_orig = sodium_crypto_sign_open($msg_signed, $alice_publickey);
  35. var_dump($msg_orig === $msg);
  36. $signature = sodium_crypto_sign_detached($msg, $alice_secretkey);
  37. var_dump(strlen($signature) === SODIUM_CRYPTO_SIGN_BYTES);
  38. var_dump(sodium_crypto_sign_verify_detached($signature,
  39. $msg, $alice_publickey));
  40. var_dump(sodium_crypto_sign_verify_detached($signature,
  41. $msg . "\0", $alice_publickey));
  42. $calc_pubkey = sodium_crypto_sign_publickey_from_secretkey($alice_secretkey);
  43. var_dump(sodium_memcmp($calc_pubkey, $alice_publickey) === 0);
  44. $ed25519key = sodium_hex2bin("55b62f664bf1c359f58a6b91b89556f97284273510573055b9237d17f5a20564607f0626f49e63c2c8f814ed6d955bf8b005b33fd5fd56eaca93073d8eb99165");
  45. $curve25519key = sodium_crypto_sign_ed25519_sk_to_curve25519($ed25519key);
  46. var_dump($curve25519key === sodium_hex2bin("381b2be5e3d38820deb1243fb58b4be654da30dd3ccde492cb88f937eb489363"));
  47. try {
  48. sodium_crypto_sign($msg, substr($alice_secretkey, 1));
  49. } catch (SodiumException $ex) {
  50. var_dump(true);
  51. }
  52. ?>
  53. --EXPECT--
  54. bool(true)
  55. bool(true)
  56. bool(true)
  57. bool(true)
  58. bool(true)
  59. bool(true)
  60. bool(true)
  61. bool(true)
  62. bool(true)
  63. bool(true)
  64. bool(true)
  65. bool(false)
  66. bool(true)
  67. bool(true)
  68. bool(true)