utils.phpt 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. --TEST--
  2. Check for libsodium utils
  3. --EXTENSIONS--
  4. sodium
  5. --FILE--
  6. <?php
  7. $a = 'test';
  8. sodium_memzero($a);
  9. if ($a !== 'test') {
  10. var_dump($a);
  11. } else {
  12. echo $a;
  13. }
  14. echo "\n";
  15. $b = 'string';
  16. $c = 'string';
  17. var_dump(!sodium_memcmp($b, $c));
  18. var_dump(!sodium_memcmp($b, 'String'));
  19. $v = "\xFF\xFF\x80\x01\x02\x03\x04\x05\x06\x07";
  20. $v .= "\x08";
  21. sodium_increment($v);
  22. var_dump(bin2hex($v));
  23. $w = "\x01\x02\x03\x04\x05\x06\x07\x08\xFA\xFB";
  24. $w .= "\xFC";
  25. sodium_add($v, $w);
  26. var_dump(bin2hex($v));
  27. if (SODIUM_LIBRARY_MAJOR_VERSION > 7 ||
  28. (SODIUM_LIBRARY_MAJOR_VERSION == 7 &&
  29. SODIUM_LIBRARY_MINOR_VERSION >= 6)) {
  30. $v_1 = "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F";
  31. $v_2 = ""."\x02\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F";
  32. $v_1 .= '';
  33. var_dump(sodium_compare($v_1, $v_2));
  34. sodium_increment($v_1);
  35. var_dump(sodium_compare($v_1, $v_2));
  36. sodium_increment($v_1);
  37. var_dump(sodium_compare($v_1, $v_2));
  38. } else {
  39. // Dummy test results for libsodium < 1.0.4
  40. var_dump(-1, 0, 1);
  41. }
  42. $str = 'stdClass';
  43. sodium_memzero($str);
  44. $obj = (object)array('foo' => 'bar');
  45. var_dump($obj);
  46. $str = 'xyz';
  47. $str_padded = sodium_pad($str, 16);
  48. var_dump(bin2hex($str_padded));
  49. $str_unpadded = sodium_unpad($str_padded, 16);
  50. var_dump($str_unpadded == $str);
  51. if (defined('SODIUM_BASE64_VARIANT_ORIGINAL')) {
  52. for ($i = 0; $i < 100; $i++) {
  53. $bin = $i == 0 ? '' : random_bytes($i);
  54. $b64 = base64_encode($bin);
  55. $b64_ = sodium_bin2base64($bin, SODIUM_BASE64_VARIANT_ORIGINAL);
  56. if ($b64 !== $b64_) {
  57. echo "frombin[$b64] != frombin_[$b64_]\n";
  58. }
  59. $bin_ = sodium_base642bin($b64, SODIUM_BASE64_VARIANT_ORIGINAL);
  60. if ($bin !== $bin_) {
  61. echo "frombase64([$b64]) != frombase64_[$b64]\n";
  62. }
  63. $bin_ = sodium_base642bin(" $b64\n", SODIUM_BASE64_VARIANT_ORIGINAL, " \n");
  64. if ($bin !== $bin_) {
  65. echo "frombase64([$b64]) != frombase64_([ $b64\\n])\n";
  66. }
  67. }
  68. try {
  69. var_dump(sodium_base642bin('O1R', SODIUM_BASE64_VARIANT_ORIGINAL_NO_PADDING));
  70. } catch (Exception $e) {
  71. var_dump('base64("O1R") case passed');
  72. }
  73. try {
  74. var_dump(sodium_base642bin('O1', SODIUM_BASE64_VARIANT_ORIGINAL_NO_PADDING));
  75. } catch (Exception $e) {
  76. var_dump('base64("O1") case passed');
  77. }
  78. try {
  79. var_dump(sodium_base642bin('O', SODIUM_BASE64_VARIANT_ORIGINAL_NO_PADDING));
  80. } catch (Exception $e) {
  81. var_dump('base64("O") case passed');
  82. }
  83. var_dump(sodium_base642bin('YWJjZA', SODIUM_BASE64_VARIANT_ORIGINAL_NO_PADDING));
  84. } else {
  85. var_dump('base64("O1R") case passed');
  86. var_dump('base64("O1") case passed');
  87. var_dump('base64("O") case passed');
  88. var_dump('abcd');
  89. }
  90. function sodium_foo()
  91. {
  92. throw new SodiumException('test');
  93. }
  94. try {
  95. sodium_foo();
  96. } catch (SodiumException $ex) {
  97. var_dump($ex->getMessage());
  98. }
  99. ?>
  100. --EXPECT--
  101. NULL
  102. bool(true)
  103. bool(false)
  104. string(22) "0000810102030405060708"
  105. string(22) "0102840507090b0d000305"
  106. int(-1)
  107. int(0)
  108. int(1)
  109. object(stdClass)#1 (1) {
  110. ["foo"]=>
  111. string(3) "bar"
  112. }
  113. string(32) "78797a80000000000000000000000000"
  114. bool(true)
  115. string(25) "base64("O1R") case passed"
  116. string(24) "base64("O1") case passed"
  117. string(23) "base64("O") case passed"
  118. string(4) "abcd"
  119. string(4) "test"