diff --git a/lib/utils/bech32.js b/lib/utils/bech32.js index 7b8cbaee..4f536009 100644 --- a/lib/utils/bech32.js +++ b/lib/utils/bech32.js @@ -35,6 +35,7 @@ var native = require('./native').binding; * @module utils/bech32 */ +var POOL65 = new Buffer(65); var CHARSET = 'qpzry9x8gf2tvdw0s3jn54khce6mua7l'; var TABLE = [ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, @@ -205,7 +206,7 @@ function deserialize(str) { * Convert serialized data to bits, * suitable to be serialized as bech32. * @param {Buffer} data - * @param {Number} size + * @param {Buffer} output * @param {Number} frombits * @param {Number} tobits * @param {Number} pad @@ -213,11 +214,10 @@ function deserialize(str) { * @returns {Buffer} */ -function convert(data, size, frombits, tobits, pad, off) { +function convert(data, output, frombits, tobits, pad, off) { var acc = 0; var bits = 0; var maxv = (1 << tobits) - 1; - var output = new Buffer(size); var j = 0; var i, value; @@ -259,7 +259,8 @@ function convert(data, size, frombits, tobits, pad, off) { */ function encode(hrp, version, hash) { - var data = convert(hash, 65, 8, 5, version, 0); + var output = POOL65; + var data = convert(hash, output, 8, 5, version, 0); return serialize(hrp, data); } @@ -276,13 +277,14 @@ function decode(str) { var result = deserialize(str); var hrp = result.hrp; var data = result.data; - var version, hash; + var version, hash, output; if (data.length < 1) throw new Error('Invalid bech32 data length.'); version = data[0]; - hash = convert(data, 84, 5, 8, -1, 1); + output = data; + hash = convert(data, output, 5, 8, -1, 1); return new AddrResult(hrp, version, hash); } diff --git a/test/bech32-test.js b/test/bech32-test.js index 70b12927..3e8fb49b 100644 --- a/test/bech32-test.js +++ b/test/bech32-test.js @@ -105,7 +105,7 @@ describe('Bech32', function() { if (dec.hrp !== hrp || dec.data.length < 1 || dec.data[0] > 16) throw new Error('Invalid bech32 prefix or data length.'); - data = bech32.convert(dec.data, 84, 5, 8, -1, 1); + data = bech32.convert(dec.data, new Buffer(84), 5, 8, -1, 1); if (data.length < 2 || data.length > 40) throw new Error('Invalid witness program size.'); @@ -120,7 +120,7 @@ describe('Bech32', function() { } function toAddress(hrp, version, program) { - var data = bech32.convert(program, 65, 8, 5, version, 0); + var data = bech32.convert(program, new Buffer(65), 8, 5, version, 0); var ret = bech32.serialize(hrp, data); fromAddress(hrp, ret);