You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

134 lines
5.0 KiB

  1. // Copyright 2017-2018 DERO Project. All rights reserved.
  2. // Use of this source code in any form is governed by RESEARCH license.
  3. // license can be found in the LICENSE file.
  4. // GPG: 0F39 E425 8C65 3947 702A 8234 08B2 0360 A03A 9DE8
  5. //
  6. //
  7. // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
  8. // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  9. // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
  10. // THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  11. // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  12. // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  13. // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
  14. // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
  15. // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  16. package address
  17. import "fmt"
  18. import "bytes"
  19. import "testing"
  20. import "encoding/hex"
  21. import "github.com/arnaucode/derosuite/config"
  22. func TestAddressError(t *testing.T) {
  23. _, err := NewAddress("")
  24. /*want := "Address is the wrong length"
  25. if err != want {
  26. t.Errorf("want: %s, got: %s", want, err)
  27. }
  28. */
  29. _, err = NewAddress("46w3n5EGhBeYmKvQRsd8UK9GhvcbYWQDobJape3NLMMFEjFZnJ3CnRmeKspubQGiP8iMTwFEX2QiBsjUkjKT4SSPd3fK1")
  30. want := fmt.Errorf("Checksum does not validate")
  31. if err.Error() != want.Error() {
  32. t.Errorf("want: %s, got: %s", want, err)
  33. }
  34. }
  35. func TestAddress(t *testing.T) {
  36. const Monero_MainNetwork = 18
  37. const Monero_TestNetwork = 53
  38. tests := []struct {
  39. name string
  40. Network uint64
  41. SpendingKeyHex string
  42. ViewingKeyHex string
  43. Address string
  44. }{
  45. {
  46. name: "generic",
  47. Network: Monero_MainNetwork,
  48. SpendingKeyHex: "8c1a9d5ff5aaf1c3cdeb2a1be62f07a34ae6b15fe47a254c8bc240f348271679",
  49. ViewingKeyHex: "0a29b163e392eb9416a52907fd7d3b84530f8d02ff70b1f63e72fdcb54cf7fe1",
  50. Address: "46w3n5EGhBeZkYmKvQRsd8UK9GhvcbYWQDobJape3NLMMFEjFZnJ3CnRmeKspubQGiP8iMTwFEX2QiBsjUkjKT4SSPd3fKp",
  51. },
  52. {
  53. name: "generic 2",
  54. Network: Monero_MainNetwork,
  55. SpendingKeyHex: "5007b84275af9a173c2080683afce90b2157ab640c18ddd5ce3e060a18a9ce99",
  56. ViewingKeyHex: "27024b45150037b677418fcf11ba9675494ffdf994f329b9f7a8f8402b7934a0",
  57. Address: "44f1Y84r9Lu4tQdLWRxV122rygfhUeVBrcmBaqcYCwUHScmf1ht8DFLXX9YN4T7nPPLcpqYLUdrFiY77nQYeH9RuK9gg4p6",
  58. },
  59. {
  60. name: "require 1 padding in middle",
  61. Network: Monero_MainNetwork,
  62. SpendingKeyHex: "6add197bd82866e8bfbf1dc2fdf49873ec5f679059652da549cd806f2b166756",
  63. ViewingKeyHex: "f5cf2897088fda0f7ac1c42491ed7d558a46ee41d0c81d038fd53ff4360afda0",
  64. Address: "45fzHekTd5FfvxWBPYX2TqLPbtWjaofxYUeWCi6BRQXYFYd85sY2qw73bAuKhqY7deFJr6pN3STY81bZ9x2Zf4nGKASksqe",
  65. },
  66. {
  67. name: "require 1 padding in last chunk",
  68. Network: Monero_MainNetwork,
  69. SpendingKeyHex: "50defe92d88b19aaf6bf66f061dd4380b79866a4122b25a03bceb571767dbe7b",
  70. ViewingKeyHex: "f8f6f28283921bf5a17f0bcf4306233fc25ce9b6276154ad0de22aebc5c67702",
  71. Address: "44grjkXtDHJVbZgtU1UKnrNXidcHfZ3HWToU5WjR3KgHMjgwrYLjXC6i5vm3HCp4vnBfYaNEyNiuZVwqtHD2SenS1JBRyco",
  72. },
  73. {
  74. name: "testnet",
  75. Network: Monero_TestNetwork,
  76. SpendingKeyHex: "8de9cce254e60cd940abf6c77ef344c3a21fad74320e45734fbfcd5870e5c875",
  77. ViewingKeyHex: "27024b45150037b677418fcf11ba9675494ffdf994f329b9f7a8f8402b7934a0",
  78. Address: "9xYZvCDf6aFdLd7Qawg5XHZitWLKoeFvcLHfe5GxsGCFLbXSWeQNKciXX9YN4T7nPPLcpqYLUdrFiY77nQYeH9RuK9bogZJ",
  79. },
  80. {
  81. name: "DERO testnet",
  82. Network: config.Testnet.Public_Address_Prefix,
  83. SpendingKeyHex: "ffb4baf32792d38d36c5f1792201d1cff142a10bad6aa088090156a35858739d",
  84. ViewingKeyHex: "0ea428a9608fc9dc06acceea608ac97cc9119647b943941a381306548ee43455",
  85. Address: "dETosYceeTxRZQBk5hQzN51JepzZn5H24JqR96q7mY7ZFo6JhJKPNSKR3vs9ES1ibyQDQgeRheDP6CJbb7AKJY2H9eacz2RtPy",
  86. },
  87. }
  88. var base58 string
  89. var spendingKey, viewingKey []byte
  90. for _, test := range tests {
  91. spendingKey, _ = hex.DecodeString(test.SpendingKeyHex)
  92. viewingKey, _ = hex.DecodeString(test.ViewingKeyHex)
  93. _ = spendingKey
  94. _ = viewingKey
  95. address, err := NewAddress(test.Address)
  96. if err != nil {
  97. t.Errorf("%s: Failed while parsing address %s", test.name, err)
  98. continue
  99. }
  100. _ = address
  101. if address.Network != test.Network {
  102. t.Errorf("%s: want: %d, got: %d", test.name, test.Network, address.Network)
  103. continue
  104. }
  105. if bytes.Compare(address.SpendKey[:], spendingKey) != 0 {
  106. t.Errorf("%s: want: %x, got: %x", test.name, spendingKey, address.SpendKey)
  107. continue
  108. }
  109. if bytes.Compare(address.ViewKey[:], viewingKey) != 0 {
  110. t.Errorf("%s: want: %x, got: %x", test.name, viewingKey, address.ViewKey)
  111. continue
  112. }
  113. base58 = address.Base58()
  114. if base58 != test.Address {
  115. t.Errorf("%s: want: %s, got: %s", test.name, test.Address, base58)
  116. continue
  117. }
  118. }
  119. }