diff --git a/src/base58check.js b/src/base58check.js index 51c970e..10afce2 100644 --- a/src/base58check.js +++ b/src/base58check.js @@ -28,7 +28,7 @@ function decode(string) { var checksum = buffer.slice(-4) var newChecksum = crypto.hash256(message).slice(0, 4) - assert.deepEqual(newChecksum, checksum) + assert.deepEqual(newChecksum, checksum, 'Invalid checksum') var version = message.readUInt8(0) var payload = message.slice(1) diff --git a/test/address.js b/test/address.js index 063e8da..9ab99ab 100644 --- a/test/address.js +++ b/test/address.js @@ -3,11 +3,8 @@ var Address = require('../src/address') var networks = require('../src/networks') var Script = require('../src/script') -var b58fixtures = require('./fixtures/base58.json') var fixtures = require('./fixtures/address.json') -function h2b(h) { return new Buffer(h, 'hex') } - describe('Address', function() { describe('Constructor', function() { it('does not mutate the input', function() { @@ -31,11 +28,11 @@ describe('Address', function() { }) }) - it('throws on invalid base58check', function() { - b58fixtures.invalid.forEach(function(f) { + fixtures.invalid.fromBase58Check.forEach(function(f) { + it('throws on ' + f.descpription, function() { assert.throws(function() { - Address.fromBase58Check(f) - }) + Address.fromBase58Check(f.base58check) + }, new RegExp(f.exception)) }) }) }) diff --git a/test/base58check.js b/test/base58check.js index b37db78..c4d1030 100644 --- a/test/base58check.js +++ b/test/base58check.js @@ -3,13 +3,12 @@ var base58check = require('../src/base58check') var fixtures = require('./fixtures/base58check.json') -function b2h(b) { return new Buffer(b).toString('hex') } function h2b(h) { return new Buffer(h, 'hex') } describe('base58check', function() { describe('decode', function() { - it('can decode Bitcoin core test data', function() { - fixtures.valid.forEach(function(f) { + fixtures.valid.forEach(function(f) { + it('can decode ' + f.string, function() { var actual = base58check.decode(f.string) var expected = { version: f.decode.version, @@ -25,22 +24,14 @@ describe('base58check', function() { it('throws on ' + f.description, function() { assert.throws(function() { base58check.decode(f.string) - }) - }) - }) - - it('throws on [invalid] Bitcoin core test data', function() { - fixtures.invalid2.forEach(function(f) { - assert.throws(function() { - base58check.decode(f.string) - }) + }, /Invalid checksum/) }) }) }) describe('encode', function() { - it('can encode Bitcoin core test data', function() { - fixtures.valid.forEach(function(f) { + fixtures.valid.forEach(function(f) { + it('can encode ' + f.string, function() { var actual = base58check.encode(h2b(f.decode.payload), f.decode.version) var expected = f.string diff --git a/test/fixtures/address.json b/test/fixtures/address.json index 9153579..06557af 100644 --- a/test/fixtures/address.json +++ b/test/fixtures/address.json @@ -34,6 +34,18 @@ } ], "invalid": { + "fromBase58Check": [ + { + "description": "hash too short", + "base58check": "7SeEnXWPaCCALbVrTnszCVGfRU8cGfx", + "exception": "Invalid hash length" + }, + { + "description": "hash too long", + "base58check": "j9ywUkWg2fTQrouxxh5rSZhRvrjMkEUfuiKe", + "exception": "Invalid hash length" + } + ], "fromScriptPubKey": [ { "description": "pubkey has no matching Address", diff --git a/test/fixtures/base58check.json b/test/fixtures/base58check.json index ef37f5f..dc4928f 100644 --- a/test/fixtures/base58check.json +++ b/test/fixtures/base58check.json @@ -403,76 +403,16 @@ ], "invalid": [ { - "base58check": "7SeEnXWPaCCALbVrTnszCVGfRU8cGfx", - "description": "hash too short" + "description": "bad version byte", + "string": "Z9inZq4e2HGQRZQezDjFMmqgUE8NwMRok" }, { - "base58check": "j9ywUkWg2fTQrouxxh5rSZhRvrjMkEUfuiKe", - "description": "hash too long" + "description": "bad payload", + "string": "3HK7MezAm6qEZQUMPRf8jX7wDv6zig6Ky8" }, { - "base58check": "Z9inZq4e2HGQRZQezDjFMmqgUE8NwMRok", - "description": "bad version byte" - }, - { - "base58check": "3HK7MezAm6qEZQUMPRf8jX7wDv6zig6Ky8", - "description": "bad payload" - }, - { - "base58check": "3AW8j12DUk8mgA7kkfZ1BrrzCVFuH1LsXS", - "description": "bad SHA256 checksum" + "description": "bad SHA256 checksum", + "string": "3AW8j12DUk8mgA7kkfZ1BrrzCVFuH1LsXS" } - ], - "invalid2": [ - "", - "x", - "37qgekLpCCHrQuSjvX3fs496FWTGsHFHizjJAs6NPcR47aefnnCWECAhHV6E3g4YN7u7Yuwod5Y", - "dzb7VV1Ui55BARxv7ATxAtCUeJsANKovDGWFVgpTbhq9gvPqP3yv", - "MuNu7ZAEDFiHthiunm7dPjwKqrVNCM3mAz6rP9zFveQu14YA8CxExSJTHcVP9DErn6u84E6Ej7S", - "rPpQpYknyNQ5AEHuY6H8ijJJrYc2nDKKk9jjmKEXsWzyAQcFGpDLU2Zvsmoi8JLR7hAwoy3RQWf", - "4Uc3FmN6NQ6zLBK5QQBXRBUREaaHwCZYsGCueHauuDmJpZKn6jkEskMB2Zi2CNgtb5r6epWEFfUJq", - "7aQgR5DFQ25vyXmqZAWmnVCjL3PkBcdVkBUpjrjMTcghHx3E8wb", - "17QpPprjeg69fW1DV8DcYYCKvWjYhXvWkov6MJ1iTTvMFj6weAqW7wybZeH57WTNxXVCRH4veVs", - "KxuACDviz8Xvpn1xAh9MfopySZNuyajYMZWz16Dv2mHHryznWUp3", - "7nK3GSmqdXJQtdohvGfJ7KsSmn3TmGqExug49583bDAL91pVSGq5xS9SHoAYL3Wv3ijKTit65th", - "cTivdBmq7bay3RFGEBBuNfMh2P1pDCgRYN2Wbxmgwr4ki3jNUL2va", - "gjMV4vjNjyMrna4fsAr8bWxAbwtmMUBXJS3zL4NJt5qjozpbQLmAfK1uA3CquSqsZQMpoD1g2nk", - "emXm1naBMoVzPjbk7xpeTVMFy4oDEe25UmoyGgKEB1gGWsK8kRGs", - "7VThQnNRj1o3Zyvc7XHPRrjDf8j2oivPTeDXnRPYWeYGE4pXeRJDZgf28ppti5hsHWXS2GSobdqyo", - "1G9u6oCVCPh2o8m3t55ACiYvG1y5BHewUkDSdiQarDcYXXhFHYdzMdYfUAhfxn5vNZBwpgUNpso", - "31QQ7ZMLkScDiB4VyZjuptr7AEc9j1SjstF7pRoLhHTGkW4Q2y9XELobQmhhWxeRvqcukGd1XCq", - "DHqKSnpxa8ZdQyH8keAhvLTrfkyBMQxqngcQA5N8LQ9KVt25kmGN", - "2LUHcJPbwLCy9GLH1qXmfmAwvadWw4bp4PCpDfduLqV17s6iDcy1imUwhQJhAoNoN1XNmweiJP4i", - "7USRzBXAnmck8fX9HmW7RAb4qt92VFX6soCnts9s74wxm4gguVhtG5of8fZGbNPJA83irHVY6bCos", - "1DGezo7BfVebZxAbNT3XGujdeHyNNBF3vnficYoTSp4PfK2QaML9bHzAMxke3wdKdHYWmsMTJVu", - "2D12DqDZKwCxxkzs1ZATJWvgJGhQ4cFi3WrizQ5zLAyhN5HxuAJ1yMYaJp8GuYsTLLxTAz6otCfb", - "8AFJzuTujXjw1Z6M3fWhQ1ujDW7zsV4ePeVjVo7D1egERqSW9nZ", - "163Q17qLbTCue8YY3AvjpUhotuaodLm2uqMhpYirsKjVqnxJRWTEoywMVY3NbBAHuhAJ2cF9GAZ", - "2MnmgiRH4eGLyLc9eAqStzk7dFgBjFtUCtu", - "461QQ2sYWxU7H2PV4oBwJGNch8XVTYYbZxU", - "2UCtv53VttmQYkVU4VMtXB31REvQg4ABzs41AEKZ8UcB7DAfVzdkV9JDErwGwyj5AUHLkmgZeobs", - "cSNjAsnhgtiFMi6MtfvgscMB2Cbhn2v1FUYfviJ1CdjfidvmeW6mn", - "gmsow2Y6EWAFDFE1CE4Hd3Tpu2BvfmBfG1SXsuRARbnt1WjkZnFh1qGTiptWWbjsq2Q6qvpgJVj", - "nksUKSkzS76v8EsSgozXGMoQFiCoCHzCVajFKAXqzK5on9ZJYVHMD5CKwgmX3S3c7M1U3xabUny", - "L3favK1UzFGgdzYBF2oBT5tbayCo4vtVBLJhg2iYuMeePxWG8SQc", - "7VxLxGGtYT6N99GdEfi6xz56xdQ8nP2dG1CavuXx7Rf2PrvNMTBNevjkfgs9JmkcGm6EXpj8ipyPZ", - "2mbZwFXF6cxShaCo2czTRB62WTx9LxhTtpP", - "dB7cwYdcPSgiyAwKWL3JwCVwSk6epU2txw", - "HPhFUhUAh8ZQQisH8QQWafAxtQYju3SFTX", - "4ctAH6AkHzq5ioiM1m9T3E2hiYEev5mTsB", - "Hn1uFi4dNexWrqARpjMqgT6cX1UsNPuV3cHdGg9ExyXw8HTKadbktRDtdeVmY3M1BxJStiL4vjJ", - "Sq3fDbvutABmnAHHExJDgPLQn44KnNC7UsXuT7KZecpaYDMU9Txs", - "6TqWyrqdgUEYDQU1aChMuFMMEimHX44qHFzCUgGfqxGgZNMUVWJ", - "giqJo7oWqFxNKWyrgcBxAVHXnjJ1t6cGoEffce5Y1y7u649Noj5wJ4mmiUAKEVVrYAGg2KPB3Y4", - "cNzHY5e8vcmM3QVJUcjCyiKMYfeYvyueq5qCMV3kqcySoLyGLYUK", - "37uTe568EYc9WLoHEd9jXEvUiWbq5LFLscNyqvAzLU5vBArUJA6eydkLmnMwJDjkL5kXc2VK7ig", - "EsYbG4tWWWY45G31nox838qNdzksbPySWc", - "nbuzhfwMoNzA3PaFnyLcRxE9bTJPDkjZ6Rf6Y6o2ckXZfzZzXBT", - "cQN9PoxZeCWK1x56xnz6QYAsvR11XAce3Ehp3gMUdfSQ53Y2mPzx", - "1Gm3N3rkef6iMbx4voBzaxtXcmmiMTqZPhcuAepRzYUJQW4qRpEnHvMojzof42hjFRf8PE2jPde", - "2TAq2tuN6x6m233bpT7yqdYQPELdTDJn1eU", - "ntEtnnGhqPii4joABvBtSEJG6BxjT2tUZqE8PcVYgk3RHpgxgHDCQxNbLJf7ardf1dDk2oCQ7Cf", - "Ky1YjoZNgQ196HJV3HpdkecfhRBmRZdMJk89Hi5KGfpfPwS2bUbfd", - "2A1q1YsMZowabbvta7kTy2Fd6qN4r5ZCeG3qLpvZBMzCixMUdkN2Y4dHB1wPsZAeVXUGD83MfRED" ] }