UtilTest.php 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. <?php
  2. namespace Test\Unit;
  3. use Test\TestCase;
  4. use Web3p\EthereumUtil\Util;
  5. use phpseclib\Math\BigInteger as BigNumber;
  6. use InvalidArgumentException;
  7. use stdClass;
  8. class UtilTest extends TestCase
  9. {
  10. /**
  11. * testSha3
  12. *
  13. * @return void
  14. */
  15. public function testSha3()
  16. {
  17. $util = new Util;
  18. $this->assertNull($util->sha3(''));
  19. $this->assertEquals('47173285a8d7341e5e972fc677286384f802f8ef42a5ec5f03bbfa254cb01fad', $util->sha3('hello world'));
  20. }
  21. /**
  22. * testIsZeroPrefixed
  23. *
  24. * @return void
  25. */
  26. public function testIsZeroPrefixed()
  27. {
  28. $util = new Util;
  29. $this->assertTrue($util->isZeroPrefixed('0x1234'));
  30. $this->assertFalse($util->isZeroPrefixed('1234'));
  31. }
  32. /**
  33. * testStripZero
  34. *
  35. * @return void
  36. */
  37. public function testStripZero()
  38. {
  39. $util = new Util;
  40. $this->assertEquals('1234', $util->stripZero('0x1234'));
  41. $this->assertEquals('1234', $util->stripZero('1234'));
  42. }
  43. /**
  44. * testIsHex
  45. *
  46. * @return void
  47. */
  48. public function testIsHex()
  49. {
  50. $util = new Util;
  51. $this->assertTrue($util->isHex('1234'));
  52. $this->assertTrue($util->isHex('0x1234'));
  53. $this->assertFalse($util->isHex('hello world'));
  54. }
  55. /**
  56. * testPublicKeyToAddress
  57. *
  58. * @return void
  59. */
  60. public function testPublicKeyToAddress()
  61. {
  62. $util = new Util;
  63. $this->assertEquals('0x9d8a62f656a8d1615c1294fd71e9cfb3e4855a4f', $util->publicKeyToAddress('044bc2a31265153f07e70e0bab08724e6b85e217f8cd628ceb62974247bb493382ce28cab79ad7119ee1ad3ebcdb98a16805211530ecc6cfefa1b88e6dff99232a'));
  64. $this->assertEquals('0x9d8a62f656a8d1615c1294fd71e9cfb3e4855a4f', $util->publicKeyToAddress('0x044bc2a31265153f07e70e0bab08724e6b85e217f8cd628ceb62974247bb493382ce28cab79ad7119ee1ad3ebcdb98a16805211530ecc6cfefa1b88e6dff99232a'));
  65. }
  66. /**
  67. * testPrivateKeyToPublicKey
  68. *
  69. * @return void
  70. */
  71. public function testPrivateKeyToPublicKey()
  72. {
  73. $util = new Util;
  74. $this->assertEquals('0x044bc2a31265153f07e70e0bab08724e6b85e217f8cd628ceb62974247bb493382ce28cab79ad7119ee1ad3ebcdb98a16805211530ecc6cfefa1b88e6dff99232a', $util->privateKeyToPublicKey('0x4646464646464646464646464646464646464646464646464646464646464646'));
  75. $this->assertEquals('0x044bc2a31265153f07e70e0bab08724e6b85e217f8cd628ceb62974247bb493382ce28cab79ad7119ee1ad3ebcdb98a16805211530ecc6cfefa1b88e6dff99232a', $util->privateKeyToPublicKey('4646464646464646464646464646464646464646464646464646464646464646'));
  76. }
  77. /**
  78. * testRecoverPublicKey
  79. *
  80. * @return void
  81. */
  82. public function testRecoverPublicKey()
  83. {
  84. $util = new Util;
  85. $this->assertEquals('0x044bc2a31265153f07e70e0bab08724e6b85e217f8cd628ceb62974247bb493382ce28cab79ad7119ee1ad3ebcdb98a16805211530ecc6cfefa1b88e6dff99232a', $util->recoverPublicKey('0xdaf5a779ae972f972197303d7b574746c7ef83eadac0f2791ad23db92e4c8e53', '0x28ef61340bd939bc2195fe537567866003e1a15d3c71ff63e1590620aa636276', '0x67cbe9d8997f761aecb703304b3800ccf555c9f3dc64214b297fb1966a3b6d83', 0));
  86. $this->assertEquals('0x044bc2a31265153f07e70e0bab08724e6b85e217f8cd628ceb62974247bb493382ce28cab79ad7119ee1ad3ebcdb98a16805211530ecc6cfefa1b88e6dff99232a', $util->recoverPublicKey('daf5a779ae972f972197303d7b574746c7ef83eadac0f2791ad23db92e4c8e53', '28ef61340bd939bc2195fe537567866003e1a15d3c71ff63e1590620aa636276', '67cbe9d8997f761aecb703304b3800ccf555c9f3dc64214b297fb1966a3b6d83', 0));
  87. }
  88. /**
  89. * testEcsign
  90. *
  91. * @return void
  92. */
  93. public function testEcsign()
  94. {
  95. $util = new Util;
  96. $signature = $util->ecsign('0x4646464646464646464646464646464646464646464646464646464646464646', 'daf5a779ae972f972197303d7b574746c7ef83eadac0f2791ad23db92e4c8e53');
  97. // EIP155 test data
  98. $this->assertEquals('28ef61340bd939bc2195fe537567866003e1a15d3c71ff63e1590620aa636276', $signature->r->toString(16));
  99. $this->assertEquals('67cbe9d8997f761aecb703304b3800ccf555c9f3dc64214b297fb1966a3b6d83', $signature->s->toString(16));
  100. $this->assertEquals(35, $signature->recoveryParam);
  101. }
  102. /**
  103. * testHashPersonalMessage
  104. *
  105. * @return void
  106. */
  107. public function testHashPersonalMessage()
  108. {
  109. $util = new Util;
  110. $hashedMessage = $util->hashPersonalMessage('Hello world');
  111. $this->assertEquals('8144a6fa26be252b86456491fbcd43c1de7e022241845ffea1c3df066f7cfede', $hashedMessage);
  112. }
  113. /**
  114. * testIsNegative
  115. *
  116. * @return void
  117. */
  118. public function testIsNegative()
  119. {
  120. $util = new Util;
  121. $isNegative = $util->isNegative('-1');
  122. $this->assertTrue($isNegative);
  123. $isNegative = $util->isNegative('1');
  124. $this->assertFalse($isNegative);
  125. }
  126. /**
  127. * testToBn
  128. *
  129. * @return void
  130. */
  131. public function testToBn()
  132. {
  133. $util = new Util;
  134. $bn = $util->toBn('');
  135. $this->assertEquals($bn->toString(), '0');
  136. $bn = $util->toBn(11);
  137. $this->assertEquals($bn->toString(), '11');
  138. $bn = $util->toBn('0x12');
  139. $this->assertEquals($bn->toString(), '18');
  140. $bn = $util->toBn('-0x12');
  141. $this->assertEquals($bn->toString(), '-18');
  142. $bn = $util->toBn(0x12);
  143. $this->assertEquals($bn->toString(), '18');
  144. $bn = $util->toBn('ae');
  145. $this->assertEquals($bn->toString(), '174');
  146. $bn = $util->toBn('-ae');
  147. $this->assertEquals($bn->toString(), '-174');
  148. $bn = $util->toBn('-1');
  149. $this->assertEquals($bn->toString(), '-1');
  150. $bn = $util->toBn('-0.1');
  151. $this->assertEquals(count($bn), 4);
  152. $this->assertEquals($bn[0]->toString(), '0');
  153. $this->assertEquals($bn[1]->toString(), '1');
  154. $this->assertEquals($bn[2], 1);
  155. $this->assertEquals($bn[3]->toString(), '-1');
  156. $bn = $util->toBn(-0.1);
  157. $this->assertEquals(count($bn), 4);
  158. $this->assertEquals($bn[0]->toString(), '0');
  159. $this->assertEquals($bn[1]->toString(), '1');
  160. $this->assertEquals($bn[2], 1);
  161. $this->assertEquals($bn[3]->toString(), '-1');
  162. $bn = $util->toBn('0.1');
  163. $this->assertEquals(count($bn), 4);
  164. $this->assertEquals($bn[0]->toString(), '0');
  165. $this->assertEquals($bn[1]->toString(), '1');
  166. $this->assertEquals($bn[2], 1);
  167. $this->assertEquals($bn[3], false);
  168. $bn = $util->toBn('-1.69');
  169. $this->assertEquals(count($bn), 4);
  170. $this->assertEquals($bn[0]->toString(), '1');
  171. $this->assertEquals($bn[1]->toString(), '69');
  172. $this->assertEquals($bn[2], 2);
  173. $this->assertEquals($bn[3]->toString(), '-1');
  174. $bn = $util->toBn(-1.69);
  175. $this->assertEquals($bn[0]->toString(), '1');
  176. $this->assertEquals($bn[1]->toString(), '69');
  177. $this->assertEquals($bn[2], 2);
  178. $this->assertEquals($bn[3]->toString(), '-1');
  179. $bn = $util->toBn('1.69');
  180. $this->assertEquals(count($bn), 4);
  181. $this->assertEquals($bn[0]->toString(), '1');
  182. $this->assertEquals($bn[1]->toString(), '69');
  183. $this->assertEquals($bn[2], 2);
  184. $this->assertEquals($bn[3], false);
  185. $bn = $util->toBn(new BigNumber(1));
  186. $this->assertEquals($bn->toString(), '1');
  187. $util->toBn(new BigNumber(1));
  188. $this->expectException(InvalidArgumentException::class);
  189. $bn = $util->toBn(new stdClass);
  190. }
  191. }