diff --git a/package.json b/package.json index b37763e..1a65c9b 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,8 @@ "sinon": "1.9.0", "coveralls": "~2.10.0", "mocha-lcov-reporter": "0.0.1", - "helloblock-js": "^0.2.1" + "helloblock-js": "^0.2.1", + "request": "~2.34.0" }, "testling": { "browsers": [ diff --git a/test/fixtures/syncscript.js b/test/fixtures/syncscript.js new file mode 100644 index 0000000..5cdf1e6 --- /dev/null +++ b/test/fixtures/syncscript.js @@ -0,0 +1,128 @@ +var assert = require('assert') +var base58 = require('../../').base58 +var base58check = require('../../').base58check +var crypto = require('../../').crypto +var fs = require('fs') +var request = require('request') +var secureRandom = require('secure-random') + +function b2h(b) { return new Buffer(b).toString('hex') } +function h2b(h) { return new Buffer(h, 'hex') } +function randomBuf(s) { + return new Buffer(secureRandom(s)) +} + +request('https://raw.githubusercontent.com/bitcoin/bitcoin/master/src/test/data/base58_encode_decode.json', function (error, response, body) { + assert.ifError(error) + assert.equal(response.statusCode, 200) + + var data = JSON.parse(body) + var valid = data.map(function(x) { + return { + hex: x[0], + string: x[1] + } + }) + + // https://github.com/bitcoin/bitcoin/blob/master/src/test/base58_tests.cpp#L73 + // FIXME: Doesn't work TODO + // valid.push({ + // hex: '971a55', + // string: ' \t\n\v\f\r skip \r\f\v\n\t ' + // }) + + var fixtureJSON = JSON.stringify({ + valid: valid, + invalid: [ + { + description: 'non-base58 string', + string: 'invalid' + }, + { + description: 'non-base58 alphabet', + string: 'c2F0b3NoaQo=' + }, + { + description: 'leading whitespace', + string: ' 1111111111' + }, + { + description: 'trailing whitespace', + string: '1111111111 ' + }, + // https://github.com/bitcoin/bitcoin/blob/master/src/test/base58_tests.cpp#L72 + { + description: 'unexpected character after whitespace', + string: ' \t\n\v\f\r skip \r\f\v\n\t a' + } + ] + }, null, ' ') + + fs.writeFileSync('./test/fixtures/base58.js', 'module.exports = ' + fixtureJSON) +}) + +request('https://raw.githubusercontent.com/bitcoin/bitcoin/master/src/test/data/base58_keys_valid.json', function (error, response, body) { + request('https://raw.githubusercontent.com/bitcoin/bitcoin/master/src/test/data/base58_keys_invalid.json', function (error2, response2, body2) { + assert.ifError(error) + assert.ifError(error2) + assert.equal(response.statusCode, 200) + assert.equal(response2.statusCode, 200) + + var validData = JSON.parse(body) + var invalidData = JSON.parse(body2) + + var valid = validData.map(function(x) { + var string = x[0] + var hex = x[1] + var params = x[2] + + if (params.isCompressed) { + hex += '01' + } + assert.equal(b2h(base58check.decode(string).payload), hex) + + return { + string: string, + decode: { + version: base58check.decode(string).version, + payload: hex, + checksum: b2h(base58check.decode(string).checksum), + } + } + }) + var invalid2 = invalidData.map(function(x) { return x[0] }) + + // Our own tests + var hash = crypto.hash160(randomBuf(65)) + var checksum = base58check.decode(base58check.encode(hash)).checksum + + var fixtureJSON = JSON.stringify({ + valid: valid, + invalid: [ + { + base58check: base58check.encode(hash.slice(0, 18), 0x05), + description: 'hash too short' + }, + { + base58check: base58check.encode(Buffer.concat([hash, randomBuf(2)]), 0x05), + description: 'hash too long' + }, + { + base58check: base58.encode(Buffer.concat([new Buffer([0x01]), hash, checksum])), + description: 'bad version byte', + }, + { + base58check: base58.encode(Buffer.concat([new Buffer([0x05]), randomBuf(20), checksum])), + description: 'bad payload', + }, + { + base58check: base58.encode(Buffer.concat([new Buffer([0x05]), hash, randomBuf(4)])), + description: 'bad SHA256 checksum', + } + ], + invalid2: invalid2 + }, null, ' ') + + fs.writeFileSync('./test/fixtures/base58check.js', 'module.exports = ' + fixtureJSON) + }) +}) diff --git a/test/scripts/syncfixtures.js b/test/scripts/syncfixtures.js deleted file mode 100644 index e2d951e..0000000 --- a/test/scripts/syncfixtures.js +++ /dev/null @@ -1,128 +0,0 @@ -var assert = require('assert') -var base58 = require('..').base58 -var base58check = require('..').base58check -var crypto = require('..').crypto -var fs = require('fs') -var request = require('request') -var secureRandom = require('secure-random') - -function b2h(b) { return new Buffer(b).toString('hex') } -function h2b(h) { return new Buffer(h, 'hex') } -function randomBuf(s) { - return new Buffer(secureRandom(s)) -} - -request('https://raw.githubusercontent.com/bitcoin/bitcoin/master/src/test/data/base58_encode_decode.json', function (error, response, body) { - assert.ifError(error) - assert.equal(response.statusCode, 200) - - var data = JSON.parse(body) - var valid = data.map(function(x) { - return { - hex: x[0], - string: x[1] - } - }) - - // https://github.com/bitcoin/bitcoin/blob/master/src/test/base58_tests.cpp#L73 -// FIXME: Doesn't work TODO -// valid.push({ -// hex: '971a55', -// string: ' \t\n\v\f\r skip \r\f\v\n\t ' -// }) - - var fixtureJSON = JSON.stringify({ - valid: valid, - invalid: [ - { - description: 'non-base58 string', - string: 'invalid' - }, - { - description: 'non-base58 alphabet', - string: 'c2F0b3NoaQo=' - }, - { - description: 'leading whitespace', - string: ' 1111111111' - }, - { - description: 'trailing whitespace', - string: '1111111111 ' - }, - // https://github.com/bitcoin/bitcoin/blob/master/src/test/base58_tests.cpp#L72 - { - description: 'unexpected character after whitespace', - string: ' \t\n\v\f\r skip \r\f\v\n\t a' - } - ] - }, null, ' ') - - fs.writeFileSync('./test/fixtures/base58.js', 'module.exports = ' + fixtureJSON) -}) - -request('https://raw.githubusercontent.com/bitcoin/bitcoin/master/src/test/data/base58_keys_valid.json', function (error, response, body) { -request('https://raw.githubusercontent.com/bitcoin/bitcoin/master/src/test/data/base58_keys_invalid.json', function (error2, response2, body2) { - assert.ifError(error) - assert.ifError(error2) - assert.equal(response.statusCode, 200) - assert.equal(response2.statusCode, 200) - - var validData = JSON.parse(body) - var invalidData = JSON.parse(body2) - - var valid = validData.map(function(x) { - var string = x[0] - var hex = x[1] - var params = x[2] - - if (params.isCompressed) { - hex += '01' - } - assert.equal(b2h(base58check.decode(string).payload), hex) - - return { - string: string, - decode: { - version: base58check.decode(string).version, - payload: hex, - checksum: b2h(base58check.decode(string).checksum), - } - } - }) - var invalid2 = invalidData.map(function(x) { return x[0] }) - - // Our own tests - var hash = crypto.hash160(randomBuf(65)) - var checksum = base58check.decode(base58check.encode(hash)).checksum - - var fixtureJSON = JSON.stringify({ - valid: valid, - invalid: [ - { - base58check: base58check.encode(hash.slice(0, 18), 0x05), - description: 'hash too short' - }, - { - base58check: base58check.encode(Buffer.concat([hash, randomBuf(2)]), 0x05), - description: 'hash too long' - }, - { - base58check: base58.encode(Buffer.concat([new Buffer([0x01]), hash, checksum])), - description: 'bad version byte', - }, - { - base58check: base58.encode(Buffer.concat([new Buffer([0x05]), randomBuf(20), checksum])), - description: 'bad payload', - }, - { - base58check: base58.encode(Buffer.concat([new Buffer([0x05]), hash, randomBuf(4)])), - description: 'bad SHA256 checksum', - } - ], - invalid2: invalid2 - }, null, ' ') - - fs.writeFileSync('./test/fixtures/base58check.js', 'module.exports = ' + fixtureJSON) -}) -})