crypto_auth.phpt 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. --TEST--
  2. Check for libsodium auth
  3. --EXTENSIONS--
  4. sodium
  5. --FILE--
  6. <?php
  7. $msg = random_bytes(1000);
  8. $key = sodium_crypto_auth_keygen();
  9. $mac = sodium_crypto_auth($msg, $key);
  10. // This should validate
  11. var_dump(sodium_crypto_auth_verify($mac, $msg, $key));
  12. $bad_key = random_bytes(SODIUM_CRYPTO_AUTH_KEYBYTES - 1);
  13. try {
  14. $mac = sodium_crypto_auth($msg, $bad_key);
  15. echo 'Fail!', PHP_EOL;
  16. } catch (SodiumException $ex) {
  17. echo $ex->getMessage(), PHP_EOL;
  18. }
  19. // Flip the first bit
  20. $badmsg = $msg;
  21. $badmsg[0] = \chr(\ord($badmsg[0]) ^ 0x80);
  22. var_dump(sodium_crypto_auth_verify($mac, $badmsg, $key));
  23. // Let's flip a bit pseudo-randomly
  24. $badmsg = $msg;
  25. $badmsg[$i=mt_rand(0, 999)] = \chr(
  26. \ord($msg[$i]) ^ (
  27. 1 << mt_rand(0, 7)
  28. )
  29. );
  30. var_dump(sodium_crypto_auth_verify($mac, $badmsg, $key));
  31. // Now let's change a bit in the MAC
  32. $badmac = $mac;
  33. $badmac[0] = \chr(\ord($badmac[0]) ^ 0x80);
  34. var_dump(sodium_crypto_auth_verify($badmac, $msg, $key));
  35. ?>
  36. --EXPECT--
  37. bool(true)
  38. sodium_crypto_auth(): Argument #2 ($key) must be SODIUM_CRYPTO_AUTH_KEYBYTES bytes long
  39. bool(false)
  40. bool(false)
  41. bool(false)