EncodeTest.php 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. <?php
  2. namespace BitWasp\Test\Unit\Bech32;
  3. use BitWasp\Test\Bech32\Provider\ValidAddresses;
  4. use BitWasp\Test\Bech32\TestCase;
  5. use BitWasp\Test\Bech32\Util;
  6. class EncodeTest extends TestCase
  7. {
  8. /**
  9. * @return array
  10. */
  11. public function validAddressProvider()
  12. {
  13. return ValidAddresses::load();
  14. }
  15. /**
  16. * https://github.com/sipa/bech32/blob/master/ref/python/tests.py#L106
  17. * @param string $hrp
  18. * @param string $bech32
  19. * @param string $hexScript
  20. * @dataProvider validAddressProvider
  21. */
  22. public function testValidAddress($hrp, $bech32, $hexScript)
  23. {
  24. // Check we decode, and that HRP matches test fixture
  25. list ($gotHRP, $data) = \Bitwasp\Bech32\decode($bech32);
  26. $this->assertEquals($hrp, $gotHRP);
  27. $decoded = \BitWasp\Bech32\convertBits(array_slice($data, 1), count($data) - 1, 5, 8, false);
  28. $program = '';
  29. foreach ($decoded as $char) {
  30. $program .= chr($char);
  31. }
  32. // Check decoded details against our known witness program
  33. $version = $data[0];
  34. $checkWitnessProgram = Util::witnessProgram($version, $program);
  35. $this->assertEquals($hexScript, $checkWitnessProgram);
  36. // Simple re-encoding test
  37. $encoded = \BitWasp\Bech32\encode($hrp, $data);
  38. $this->assertEquals(strtolower($bech32), $encoded);
  39. }
  40. }